From ec5c75fa4b6edecb5835f548c0d7216625a7491f Mon Sep 17 00:00:00 2001 From: levelup Date: Fri, 16 Jun 2023 18:13:26 +1000 Subject: [PATCH] Deploy to Github Pages --- main.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/main.js b/main.js index f975c9f3..e4bdf51c 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,22 @@ -!function(t){var n={};function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{enumerable:!0,get:r})},e.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},e.t=function(t,n){if(1&n&&(t=e(t)),8&n)return t;if(4&n&&"object"==typeof t&&t&&t.__esModule)return t;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:t}),2&n&&"string"!=typeof t)for(var i in t)e.d(r,i,function(n){return t[n]}.bind(null,i));return r},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},e.p="",e(e.s=251)}([function(t,n,e){"use strict";e.d(n,"e",(function(){return i})),e.d(n,"d",(function(){return o})),e.d(n,"f",(function(){return a})),e.d(n,"i",(function(){return s})),e.d(n,"g",(function(){return u})),e.d(n,"h",(function(){return c})),e.d(n,"c",(function(){return l})),e.d(n,"a",(function(){return f})),e.d(n,"b",(function(){return h}));var r=function(t,n){return(r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,n){t.__proto__=n}||function(t,n){for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e])})(t,n)};function i(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Class extends value "+String(n)+" is not a constructor or null");function e(){this.constructor=t}r(t,n),t.prototype=null===n?Object.create(n):(e.prototype=n.prototype,new e)}function o(t,n,e,r){return new(e||(e=Promise))((function(i,o){function a(t){try{u(r.next(t))}catch(t){o(t)}}function s(t){try{u(r.throw(t))}catch(t){o(t)}}function u(t){var n;t.done?i(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(a,s)}u((r=r.apply(t,n||[])).next())}))}function a(t,n){var e,r,i,o,a={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return o={next:s(0),throw:s(1),return:s(2)},"function"==typeof Symbol&&(o[Symbol.iterator]=function(){return this}),o;function s(s){return function(u){return function(s){if(e)throw new TypeError("Generator is already executing.");for(;o&&(o=0,s[0]&&(a=0)),a;)try{if(e=1,r&&(i=2&s[0]?r.return:s[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,s[1])).done)return i;switch(r=0,i&&(s=[2&s[0],i.value]),s[0]){case 0:case 1:i=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,r=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(i=a.trys,(i=i.length>0&&i[i.length-1])||6!==s[0]&&2!==s[0])){a=0;continue}if(3===s[0]&&(!i||s[1]>i[0]&&s[1]=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")}function u(t,n){var e="function"==typeof Symbol&&t[Symbol.iterator];if(!e)return t;var r,i,o=e.call(t),a=[];try{for(;(void 0===n||n-- >0)&&!(r=o.next()).done;)a.push(r.value)}catch(t){i={error:t}}finally{try{r&&!r.done&&(e=o.return)&&e.call(o)}finally{if(i)throw i.error}}return a}function c(t,n,e){if(e||2===arguments.length)for(var r,i=0,o=n.length;i1||s(t,n)}))})}function s(t,n){try{(e=i[t](n)).value instanceof l?Promise.resolve(e.value.v).then(u,c):f(o[0][2],e)}catch(t){f(o[0][3],t)}var e}function u(t){s("next",t)}function c(t){s("throw",t)}function f(t,n){t(n),o.shift(),o.length&&s(o[0][0],o[0][1])}}function h(t){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n,e=t[Symbol.asyncIterator];return e?e.call(t):(t=s(t),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(e){n[e]=t[e]&&function(n){return new Promise((function(r,i){(function(t,n,e,r){Promise.resolve(r).then((function(n){t({value:n,done:e})}),n)})(r,i,(n=t[e](n)).done,n.value)}))}}}Object.create},function(t,n,e){"use strict";e.d(n,"b",(function(){return i})),e.d(n,"a",(function(){return o}));var r=e(0);function i(t,n,e,r,i){return new o(t,n,e,r,i)}var o=function(t){function n(n,e,r,i,o,a){var s=t.call(this,n)||this;return s.onFinalize=o,s.shouldUnsubscribe=a,s._next=e?function(t){try{e(t)}catch(t){n.error(t)}}:t.prototype._next,s._error=i?function(t){try{i(t)}catch(t){n.error(t)}finally{this.unsubscribe()}}:t.prototype._error,s._complete=r?function(){try{r()}catch(t){n.error(t)}finally{this.unsubscribe()}}:t.prototype._complete,s}return Object(r.e)(n,t),n.prototype.unsubscribe=function(){var n;if(!this.shouldUnsubscribe||this.shouldUnsubscribe()){var e=this.closed;t.prototype.unsubscribe.call(this),!e&&(null===(n=this.onFinalize)||void 0===n||n.call(this))}},n}(e(27).b)},function(t,n,e){"use strict";e.d(n,"a",(function(){return i})),e.d(n,"b",(function(){return o}));var r=e(4);function i(t){return Object(r.a)(null==t?void 0:t.lift)}function o(t){return function(n){if(i(n))return n.lift((function(n){try{return t(n,this)}catch(t){this.error(t)}}));throw new TypeError("Unable to lift unknown Observable type")}}},function(t,n,e){"use strict";e.d(n,"a",(function(){return m}));var r=e(0),i=e(82),o=e(190),a=e(5),s=e(189),u=e(191),c=e(194),l=e(192),f=e(55),h=e(4),d=e(187),p=e(48);function m(t){if(t instanceof a.a)return t;if(null!=t){if(Object(s.a)(t))return A=t,new a.a((function(t){var n=A[p.a]();if(Object(h.a)(n.subscribe))return n.subscribe(t);throw new TypeError("Provided object does not correctly implement Symbol.observable")}));if(Object(i.a)(t))return b=t,new a.a((function(t){for(var n=0;n0},enumerable:!1,configurable:!0}),n.prototype._trySubscribe=function(n){return this._throwIfClosed(),t.prototype._trySubscribe.call(this,n)},n.prototype._subscribe=function(t){return this._throwIfClosed(),this._checkFinalizedStatuses(t),this._innerSubscribe(t)},n.prototype._innerSubscribe=function(t){var n=this,e=this.hasError,r=this.isStopped,i=this.observers;return e||r?o.a:(this.currentObservers=null,i.push(t),new o.b((function(){n.currentObservers=null,Object(s.a)(i,t)})))},n.prototype._checkFinalizedStatuses=function(t){var n=this.hasError,e=this.thrownError,r=this.isStopped;n?t.error(e):r&&t.complete()},n.prototype.asObservable=function(){var t=new i.a;return t.source=this,t},n.create=function(t,n){return new l(t,n)},n}(i.a),l=function(t){function n(n,e){var r=t.call(this)||this;return r.destination=n,r.source=e,r}return Object(r.e)(n,t),n.prototype.next=function(t){var n,e;null===(e=null===(n=this.destination)||void 0===n?void 0:n.next)||void 0===e||e.call(n,t)},n.prototype.error=function(t){var n,e;null===(e=null===(n=this.destination)||void 0===n?void 0:n.error)||void 0===e||e.call(n,t)},n.prototype.complete=function(){var t,n;null===(n=null===(t=this.destination)||void 0===t?void 0:t.complete)||void 0===n||n.call(t)},n.prototype._subscribe=function(t){var n,e;return null!==(e=null===(n=this.source)||void 0===n?void 0:n.subscribe(t))&&void 0!==e?e:o.a},n}(c)},function(t,n,e){"use strict";e.d(n,"b",(function(){return a})),e.d(n,"c",(function(){return s})),e.d(n,"a",(function(){return u}));var r=e(4),i=e(51);function o(t){return t[t.length-1]}function a(t){return Object(r.a)(o(t))?t.pop():void 0}function s(t){return Object(i.a)(o(t))?t.pop():void 0}function u(t,n){return"number"==typeof o(t)?t.pop():n}},function(t,n,e){"use strict";function r(t,n){return function(t){if(Array.isArray(t))return t}(t)||function(t,n){var e=t&&("undefined"!=typeof Symbol&&t[Symbol.iterator]||t["@@iterator"]);if(null==e)return;var r,i,o=[],a=!0,s=!1;try{for(e=e.call(t);!(a=(r=e.next()).done)&&(o.push(r.value),!n||o.length!==n);a=!0);}catch(t){s=!0,i=t}finally{try{a||null==e.return||e.return()}finally{if(s)throw i}}return o}(t,n)||function(t,n){if(!t)return;if("string"==typeof t)return i(t,n);var e=Object.prototype.toString.call(t).slice(8,-1);"Object"===e&&t.constructor&&(e=t.constructor.name);if("Map"===e||"Set"===e)return Array.from(t);if("Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e))return i(t,n)}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function i(t,n){(null==n||n>t.length)&&(n=t.length);for(var e=0,r=new Array(n);e=2,!1,!0))}},function(t,n,e){"use strict";var r=e(207),i=e(208),o=e(273),a=e(209),s=e(374),u=e(377);t.exports={BasePage:r,BaseNotification:i,App:o,NotificationHub:a,StorageHub:s,AudioHub:u}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(15),i=e(2),o=e(1);function a(t){return t<=0?function(){return r.a}:Object(i.b)((function(n,e){var r=0;n.subscribe(Object(o.b)(e,(function(n){++r<=t&&(e.next(n),t<=r&&e.complete())})))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(3),i=e(2),o=e(1);function a(t,n){return Object(i.b)((function(e,i){var a=null,s=0,u=!1,c=function(){return u&&!a&&i.complete()};e.subscribe(Object(o.b)(i,(function(e){null==a||a.unsubscribe();var u=0,l=s++;Object(r.a)(t(e,l)).subscribe(a=Object(o.b)(i,(function(t){return i.next(n?n(e,t,l,u++):t)}),(function(){a=null,c()})))}),(function(){u=!0,c()})))}))}},function(t,n,e){"use strict";n.__esModule=!0,n.extend=s,n.indexOf=function(t,n){for(var e=0,r=t.length;e":">",'"':""","'":"'","`":"`","=":"="},i=/[&<>"'`=]/g,o=/[&<>"'`=]/;function a(t){return r[t]}function s(t){for(var n=1;n0&&f(l)}),void 0,void 0,(function(){(null==r?void 0:r.closed)||null==r||r.unsubscribe(),i=null}))),!o&&f(null!=s?"number"==typeof s?s:+s-m.now():l)}))}function h(t){throw new l(t)}},function(t,n,e){"use strict";e.d(n,"a",(function(){return i}));var r=e(35);function i(){return Object(r.a)(1)}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(50),i=e(4),o=e(47);function a(t,n){var e=Object(i.a)(t)?t:function(){return t};return Object(i.a)(n)?Object(o.a)(n,{connector:e}):function(t){return new r.a(t,e)}}},function(t,n,e){"use strict";e.d(n,"a",(function(){return u}));var r=e(8),i=e(3),o=e(2),a=e(5);var s={connector:function(){return new r.a}};function u(t,n){void 0===n&&(n=s);var e=n.connector;return Object(o.b)((function(n,r){var o,s=e();Object(i.a)(t((o=s,new a.a((function(t){return o.subscribe(t)}))))).subscribe(r),r.add(n.subscribe(s))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return r}));var r="function"==typeof Symbol&&Symbol.observable||"@@observable"},function(t,n,e){"use strict";e.d(n,"a",(function(){return i})),e.d(n,"b",(function(){return o}));var r=e(7);function i(){for(var t=[],n=0;n0&&(n=new a.a({next:function(t){return A.next(t)},error:function(t){p=!0,m(),r=c(v,u,t),A.error(t)},complete:function(){h=!0,m(),r=c(v,f),A.complete()}}),Object(i.a)(t).subscribe(n))}))(t)}}function c(t,n){for(var e=[],o=2;o=0&&f.splice(n,1)}function b(t){var n=document.createElement("style");if(void 0===t.attrs.type&&(t.attrs.type="text/css"),void 0===t.attrs.nonce){var r=function(){0;return e.nc}();r&&(t.attrs.nonce=r)}return A(n,t.attrs),m(t,n),n}function A(t,n){Object.keys(n).forEach((function(e){t.setAttribute(e,n[e])}))}function _(t,n){var e,r,i,o;if(n.transform&&t.css){if(!(o="function"==typeof n.transform?n.transform(t.css):n.transform.default(t.css)))return function(){};t.css=o}if(n.singleton){var a=l++;e=c||(c=b(n)),r=C.bind(null,e,a,!1),i=C.bind(null,e,a,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(e=function(t){var n=document.createElement("link");return void 0===t.attrs.type&&(t.attrs.type="text/css"),t.attrs.rel="stylesheet",A(n,t.attrs),m(t,n),n}(n),r=w.bind(null,e,n),i=function(){v(e),e.href&&URL.revokeObjectURL(e.href)}):(e=b(n),r=x.bind(null,e),i=function(){v(e)});return r(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap)return;r(t=n)}else i()}}t.exports=function(t,n){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(n=n||{}).attrs="object"==typeof n.attrs?n.attrs:{},n.singleton||"boolean"==typeof n.singleton||(n.singleton=a()),n.insertInto||(n.insertInto="head"),n.insertAt||(n.insertAt="bottom");var e=p(t,n);return d(e,n),function(t){for(var r=[],i=0;i=0?Object(l.a)(e,d,f,p,!0):u=!0,f();var h=Object(a.b)(e,(function(t){var n,e,i=o.slice();try{for(var a=Object(r.i)(i),s=a.next();!s.done;s=a.next()){var u=s.value,l=u.buffer;l.push(t),m<=l.length&&c(u)}}catch(t){n={error:t}}finally{try{s&&!s.done&&(e=a.return)&&e.call(a)}finally{if(n)throw n.error}}}),(function(){for(;null==o?void 0:o.length;)e.next(o.shift().buffer);null==h||h.unsubscribe(),e.complete(),e.unsubscribe()}),void 0,(function(){return o=null}));n.subscribe(h)}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return l}));var r=e(0),i=e(12),o=e(2),a=e(3),s=e(1),u=e(6),c=e(19);function l(t,n){return Object(o.b)((function(e,o){var l=[];Object(a.a)(t).subscribe(Object(s.b)(o,(function(t){var e=[];l.push(e);var r=new i.b;r.add(Object(a.a)(n(t)).subscribe(Object(s.b)(o,(function(){Object(c.a)(l,e),o.next(e),r.unsubscribe()}),u.a)))}),u.a)),e.subscribe(Object(s.b)(o,(function(t){var n,e;try{for(var i=Object(r.i)(l),o=i.next();!o.done;o=i.next()){o.value.push(t)}}catch(t){n={error:t}}finally{try{o&&!o.done&&(e=i.return)&&e.call(i)}finally{if(n)throw n.error}}}),(function(){for(;l.length>0;)o.next(l.shift());o.complete()})))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return s}));var r=e(2),i=e(6),o=e(1),a=e(3);function s(t){return Object(r.b)((function(n,e){var r=null,s=null,u=function(){null==s||s.unsubscribe();var n=r;r=[],n&&e.next(n),Object(a.a)(t()).subscribe(s=Object(o.b)(e,u,i.a))};u(),n.subscribe(Object(o.b)(e,(function(t){return null==r?void 0:r.push(t)}),(function(){r&&e.next(r),e.complete()}),void 0,(function(){return r=s=null})))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(3),i=e(1),o=e(2);function a(t){return Object(o.b)((function(n,e){var o,s=null,u=!1;s=n.subscribe(Object(i.b)(e,void 0,void 0,(function(i){o=Object(r.a)(t(i,a(t)(n))),s?(s.unsubscribe(),s=null,o.subscribe(e)):u=!0}))),u&&(s.unsubscribe(),s=null,o.subscribe(e))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return r}));var r=e(61).a},function(t,n,e){"use strict";e.d(n,"a",(function(){return o}));var r=e(0),i=e(182);function o(){for(var t=[],n=0;n=2;return function(u){return u.pipe(Object(i.a)((function(n,e){return e===t})),Object(s.a)(1),e?Object(a.a)(n):Object(o.a)((function(){return new r.a})))}}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(0),i=e(42),o=e(77);function a(){for(var t=[],n=0;n=2;return function(c){return c.pipe(t?Object(i.a)((function(n,e){return t(n,e,c)})):u.a,Object(o.a)(1),e?Object(a.a)(n):Object(s.a)((function(){return new r.a})))}}},function(t,n,e){"use strict";e.d(n,"a",(function(){return u}));var r=e(5),i=e(3),o=e(8),a=e(2),s=e(1);function u(t,n,e,u){return Object(a.b)((function(a,c){var l;n&&"function"!=typeof n?(e=n.duration,l=n.element,u=n.connector):l=n;var f=new Map,h=function(t){f.forEach(t),t(c)},d=function(t){return h((function(n){return n.error(t)}))},p=0,m=!1,v=new s.a(c,(function(n){try{var a=t(n),h=f.get(a);if(!h){f.set(a,h=u?u():new o.a);var b=(_=a,g=h,(y=new r.a((function(t){p++;var n=g.subscribe(t);return function(){n.unsubscribe(),0==--p&&m&&v.unsubscribe()}}))).key=_,y);if(c.next(b),e){var A=Object(s.b)(h,(function(){h.complete(),null==A||A.unsubscribe()}),void 0,void 0,(function(){return f.delete(a)}));v.add(Object(i.a)(e(b)).subscribe(A))}}h.next(l?l(n):n)}catch(t){d(t)}var _,g,y}),(function(){return h((function(t){return t.complete()}))}),d,(function(){return f.clear()}),(function(){return m=!0,0===p}));a.subscribe(v)}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return o}));var r=e(2),i=e(1);function o(){return Object(r.b)((function(t,n){t.subscribe(Object(i.b)(n,(function(){n.next(!1),n.complete()}),(function(){n.next(!0),n.complete()})))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return c}));var r=e(21),i=e(17),o=e(70),a=e(37),s=e(36),u=e(7);function c(t,n){var e=arguments.length>=2;return function(c){return c.pipe(t?Object(i.a)((function(n,e){return t(n,e,c)})):u.a,Object(o.a)(1),e?Object(s.a)(n):Object(a.a)((function(){return new r.a})))}}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(41),i=e(2),o=e(1);function a(){return Object(i.b)((function(t,n){t.subscribe(Object(o.b)(n,(function(t){n.next(r.a.createNext(t))}),(function(){n.next(r.a.createComplete()),n.complete()}),(function(t){n.next(r.a.createError(t)),n.complete()})))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return o}));var r=e(28),i=e(4);function o(t){return Object(r.a)(Object(i.a)(t)?function(n,e){return t(n,e)>0?n:e}:function(t,n){return t>n?t:n})}},function(t,n,e){"use strict";e.d(n,"a",(function(){return r}));var r=e(16).a},function(t,n,e){"use strict";e.d(n,"a",(function(){return o}));var r=e(16),i=e(4);function o(t,n,e){return void 0===e&&(e=1/0),Object(i.a)(n)?Object(r.a)((function(){return t}),n,e):("number"==typeof n&&(e=n),Object(r.a)((function(){return t}),e))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return o}));var r=e(2),i=e(84);function o(t,n,e){return void 0===e&&(e=1/0),Object(r.b)((function(r,o){var a=n;return Object(i.a)(r,o,(function(n,e){return t(a,n,e)}),e,(function(t){a=t}),!1,void 0,(function(){return a=null}))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return o}));var r=e(0),i=e(184);function o(){for(var t=[],n=0;n=2,!0))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(2),i=e(1),o=e(3);function a(t,n){return void 0===n&&(n=function(t,n){return t===n}),Object(r.b)((function(e,r){var a={buffer:[],complete:!1},s={buffer:[],complete:!1},u=function(t){r.next(t),r.complete()},c=function(t,e){var o=Object(i.b)(r,(function(r){var i=e.buffer,o=e.complete;0===i.length?o?u(!1):t.buffer.push(r):!n(r,i.shift())&&u(!1)}),(function(){t.complete=!0;var n=e.complete,r=e.buffer;n&&u(0===r.length),null==o||o.unsubscribe()}));return o};e.subscribe(c(a,s)),Object(o.a)(t).subscribe(c(s,a))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return o}));var r=e(75),i=e(73);function o(t,n,e){var o,a,s,u,c=!1;return t&&"object"==typeof t?(o=t.bufferSize,u=void 0===o?1/0:o,a=t.windowTime,n=void 0===a?1/0:a,c=void 0!==(s=t.refCount)&&s,e=t.scheduler):u=null!=t?t:1/0,Object(i.a)({connector:function(){return new r.a(u,n,e)},resetOnError:!0,resetOnComplete:!1,resetOnRefCountZero:c})}},function(t,n,e){"use strict";e.d(n,"a",(function(){return u}));var r=e(21),i=e(178),o=e(177),a=e(2),s=e(1);function u(t){return Object(a.b)((function(n,e){var a,u=!1,c=!1,l=0;n.subscribe(Object(s.b)(e,(function(r){c=!0,t&&!t(r,l++,n)||(u&&e.error(new i.a("Too many matching values")),u=!0,a=r)}),(function(){u?(e.next(a),e.complete()):e.error(c?new o.a("No matching values"):new r.a)})))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return i}));var r=e(17);function i(t){return Object(r.a)((function(n,e){return t<=e}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return a}));var r=e(7),i=e(2),o=e(1);function a(t){return t<=0?r.a:Object(i.b)((function(n,e){var r=new Array(t),i=0;return n.subscribe(Object(o.b)(e,(function(n){var o=i++;if(o0?n:t;return Object(o.b)((function(n,o){var s=[new i.a],u=0;o.next(s[0].asObservable()),n.subscribe(Object(a.b)(o,(function(n){var a,c;try{for(var l=Object(r.i)(s),f=l.next();!f.done;f=l.next()){f.value.next(n)}}catch(t){a={error:t}}finally{try{f&&!f.done&&(c=l.return)&&c.call(l)}finally{if(a)throw a.error}}var h=u-t+1;if(h>=0&&h%e==0&&s.shift().complete(),++u%e==0){var d=new i.a;s.push(d),o.next(d.asObservable())}}),(function(){for(;s.length>0;)s.shift().complete();o.complete()}),(function(t){for(;s.length>0;)s.shift().error(t);o.error(t)}),(function(){null,s=null})))}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return f}));var r=e(8),i=e(13),o=e(12),a=e(2),s=e(1),u=e(19),c=e(9),l=e(14);function f(t){for(var n,e,f=[],h=1;h=0?Object(l.a)(e,d,f,p,!0):a=!0,f();var h=function(t){return i.slice().forEach(t)},v=function(t){h((function(n){var e=n.window;return t(e)})),t(e),e.unsubscribe()};return n.subscribe(Object(s.b)(e,(function(t){h((function(n){n.window.next(t),m<=++n.seen&&c(n)}))}),(function(){return v((function(t){return t.complete()}))}),(function(t){return v((function(n){return n.error(t)}))}))),function(){i=null}}))}},function(t,n,e){"use strict";e.d(n,"a",(function(){return f}));var r=e(0),i=e(8),o=e(12),a=e(2),s=e(3),u=e(1),c=e(6),l=e(19);function f(t,n){return Object(a.b)((function(e,a){var f=[],h=function(t){for(;0-1&&t%1==0&&t<=9007199254740991}},function(t,n,e){var r=e(43),i=e(97),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,a=/^\w*$/;t.exports=function(t,n){if(r(t))return!1;var e=typeof t;return!("number"!=e&&"symbol"!=e&&"boolean"!=e&&null!=t&&!i(t))||(a.test(t)||!o.test(t)||null!=n&&t in Object(n))}},function(t,n,e){"use strict";function r(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function i(t,n){for(var e=0;e0&&void 0!==arguments[0]?arguments[0]:{};r(this,t),o(this,"template",void 0),this.props=e,Object.keys(e).forEach((function(t){n[t]=e[t]})),this.watchFace=e.watchFace}var n,e,a;return n=t,(e=[{key:"navigate",value:function(t){this.navigate(t)}},{key:"pageWillLoad",value:function(){}},{key:"render",value:function(){if(!this.template)throw new Error("Template not defined: Did you forget `template = require('path/to/template.hbs');`?");var t=JSON.parse(JSON.stringify(this));return this.template(t)}},{key:"pageDidLoad",value:function(){}},{key:"rightButtonEvent",value:function(){}},{key:"leftButtonEvent",value:function(){}},{key:"topButtonEvent",value:function(){}},{key:"bottomButtonEvent",value:function(){}},{key:"faceButtonEvent",value:function(){}},{key:"rightButtonEventDoubleClick",value:function(){}},{key:"leftButtonEventDoubleClick",value:function(){}},{key:"topButtonEventDoubleClick",value:function(){}},{key:"bottomButtonEventDoubleClick",value:function(){}},{key:"faceButtonEventDoubleClick",value:function(){}},{key:"rightButtonEventHold",value:function(){}},{key:"leftButtonEventHold",value:function(){}},{key:"topButtonEventHold",value:function(){}},{key:"bottomButtonEventHold",value:function(){}},{key:"faceButtonEventHold",value:function(){}}])&&i(n.prototype,e),a&&i(n,a),t}();t.exports=a},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){for(var e=0;e= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};function l(t,n,e){this.helpers=t||{},this.partials=n||{},this.decorators=e||{},a.registerDefaultHelpers(this),s.registerDefaultDecorators(this)}l.prototype={constructor:l,logger:u.default,log:u.default.log,registerHelper:function(t,n){if("[object Object]"===i.toString.call(t)){if(n)throw new o.default("Arg not supported with multiple helpers");i.extend(this.helpers,t)}else this.helpers[t]=n},unregisterHelper:function(t){delete this.helpers[t]},registerPartial:function(t,n){if("[object Object]"===i.toString.call(t))i.extend(this.partials,t);else{if(void 0===n)throw new o.default('Attempting to register a partial called "'+t+'" as undefined');this.partials[t]=n}},unregisterPartial:function(t){delete this.partials[t]},registerDecorator:function(t,n){if("[object Object]"===i.toString.call(t)){if(n)throw new o.default("Arg not supported with multiple decorators");i.extend(this.decorators,t)}else this.decorators[t]=n},unregisterDecorator:function(t){delete this.decorators[t]},resetLoggedPropertyAccesses:function(){c.resetLoggedProperties()}};var f=u.default.log;n.log=f,n.createFrame=i.createFrame,n.logger=u.default},function(t,n,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}n.__esModule=!0,n.registerDefaultHelpers=function(t){i.default(t),o.default(t),a.default(t),s.default(t),u.default(t),c.default(t),l.default(t)},n.moveHelperToHooks=function(t,n,e){t.helpers[n]&&(t.hooks[n]=t.helpers[n],e||delete t.helpers[n])};var i=r(e(259)),o=r(e(260)),a=r(e(261)),s=r(e(262)),u=r(e(263)),c=r(e(264)),l=r(e(265))},function(t,n,e){"use strict";n.__esModule=!0;var r=e(32),i={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(t){if("string"==typeof t){var n=r.indexOf(i.methodMap,t.toLowerCase());t=n>=0?n:parseInt(t,10)}return t},log:function(t){if(t=i.lookupLevel(t),"undefined"!=typeof console&&i.lookupLevel(i.level)<=t){var n=i.methodMap[t];console[n]||(n="log");for(var e=arguments.length,r=Array(e>1?e-1:0),o=1;ol))return!1;var h=u.get(t),d=u.get(n);if(h&&d)return h==n&&d==t;var p=-1,m=!0,v=2&e?new r:void 0;for(u.set(t,n),u.set(n,t);++p-1&&t%1==0&&t0?t.prototype.requestAsyncId.call(this,n,e,r):(n.actions.push(this),n._scheduled||(n._scheduled=w.setImmediate(n.flush.bind(n,void 0))))},n.prototype.recycleAsyncId=function(n,e,r){var i;if(void 0===r&&(r=0),null!=r?r>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,n,e,r);var o=n.actions;null!=e&&(null===(i=o[o.length-1])||void 0===i?void 0:i.id)!==e&&(w.clearImmediate(e),n._scheduled===e&&(n._scheduled=void 0))},n}(A.a),O=e(38),j=new(function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return Object(s.e)(n,t),n.prototype.flush=function(t){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var e,r=this.actions;t=t||r.shift();do{if(e=t.execute(t.state,t.delay))break}while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,e){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw e}},n}(O.a))(B),k=j,E=e(13),P=function(t){function n(n,e){var r=t.call(this,n,e)||this;return r.scheduler=n,r.work=e,r}return Object(s.e)(n,t),n.prototype.schedule=function(n,e){return void 0===e&&(e=0),e>0?t.prototype.schedule.call(this,n,e):(this.delay=e,this.state=n,this.scheduler.flush(this),this)},n.prototype.execute=function(n,e){return e>0||this.closed?t.prototype.execute.call(this,n,e):this._execute(n,e)},n.prototype.requestAsyncId=function(n,e,r){return void 0===r&&(r=0),null!=r&&r>0||null==r&&this.delay>0?t.prototype.requestAsyncId.call(this,n,e,r):(n.flush(this),0)},n}(A.a),L=new(function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return Object(s.e)(n,t),n}(O.a))(P),T=L,S=function(t){function n(n,e){var r=t.call(this,n,e)||this;return r.scheduler=n,r.work=e,r}return Object(s.e)(n,t),n.prototype.requestAsyncId=function(n,e,r){return void 0===r&&(r=0),null!==r&&r>0?t.prototype.requestAsyncId.call(this,n,e,r):(n.actions.push(this),n._scheduled||(n._scheduled=c.requestAnimationFrame((function(){return n.flush(void 0)}))))},n.prototype.recycleAsyncId=function(n,e,r){var i;if(void 0===r&&(r=0),null!=r?r>0:this.delay>0)return t.prototype.recycleAsyncId.call(this,n,e,r);var o=n.actions;null!=e&&(null===(i=o[o.length-1])||void 0===i?void 0:i.id)!==e&&(c.cancelAnimationFrame(e),n._scheduled=void 0)},n}(A.a),z=new(function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return Object(s.e)(n,t),n.prototype.flush=function(t){this._active=!0;var n=this._scheduled;this._scheduled=void 0;var e,r=this.actions;t=t||r.shift();do{if(e=t.execute(t.state,t.delay))break}while((t=r[0])&&t.id===n&&r.shift());if(this._active=!1,e){for(;(t=r[0])&&t.id===n&&r.shift();)t.unsubscribe();throw e}},n}(O.a))(S),M=z,I=function(t){function n(n,e){void 0===n&&(n=D),void 0===e&&(e=1/0);var r=t.call(this,n,(function(){return r.frame}))||this;return r.maxFrames=e,r.frame=0,r.index=-1,r}return Object(s.e)(n,t),n.prototype.flush=function(){for(var t,n,e=this.actions,r=this.maxFrames;(n=e[0])&&n.delay<=r&&(e.shift(),this.frame=n.delay,!(t=n.execute(n.state,n.delay))););if(t){for(;n=e.shift();)n.unsubscribe();throw t}},n.frameTimeFactor=10,n}(O.a),D=function(t){function n(n,e,r){void 0===r&&(r=n.index+=1);var i=t.call(this,n,e)||this;return i.scheduler=n,i.work=e,i.index=r,i.active=!0,i.index=n.index=r,i}return Object(s.e)(n,t),n.prototype.schedule=function(e,r){if(void 0===r&&(r=0),Number.isFinite(r)){if(!this.id)return t.prototype.schedule.call(this,e,r);this.active=!1;var i=new n(this.scheduler,this.work);return this.add(i),i.schedule(e,r)}return u.b.EMPTY},n.prototype.requestAsyncId=function(t,e,r){void 0===r&&(r=0),this.delay=t.frame+r;var i=t.actions;return i.push(this),i.sort(n.sortActions),1},n.prototype.recycleAsyncId=function(t,n,e){void 0===e&&(e=0)},n.prototype._execute=function(n,e){if(!0===this.active)return t.prototype._execute.call(this,n,e)},n.sortActions=function(t,n){return t.delay===n.delay?t.index===n.index?0:t.index>n.index?1:-1:t.delay>n.delay?1:-1},n}(A.a),Z=e(87),R=e(27),N=e(41),W=e(49),F=e(6),H=e(7),U=e(4);function Y(t){return!!t&&(t instanceof r.a||Object(U.a)(t.lift)&&Object(U.a)(t.subscribe))}var q=e(21);function V(t,n){var e="object"==typeof n;return new Promise((function(r,i){var o,a=!1;t.subscribe({next:function(t){o=t,a=!0},error:i,complete:function(){a?r(o):e?r(n.defaultValue):i(new q.a)}})}))}function G(t,n){var e="object"==typeof n;return new Promise((function(r,i){var o=new R.a({next:function(t){r(t),o.unsubscribe()},error:i,complete:function(){e?r(n.defaultValue):i(new q.a)}});t.subscribe(o)}))}var K=e(88),X=e(177),Q=e(174),$=e(178),J=e(44),tt=e(80),nt=e(51),et=e(33),rt=e(24),it=e(34);function ot(t,n,e,i){if(e){if(!Object(nt.a)(e))return function(){for(var r=[],o=0;o0&&a.length>i&&!a.warned){a.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+a.length+" "+String(n)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=n,u.count=a.length,s=u,console&&console.warn&&console.warn(s)}return t}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function d(t,n,e){var r={fired:!1,wrapFn:void 0,target:t,type:n,listener:e},i=h.bind(r);return i.listener=e,r.wrapFn=i,i}function p(t,n,e){var r=t._events;if(void 0===r)return[];var i=r[n];return void 0===i?[]:"function"==typeof i?e?[i.listener||i]:[i]:e?function(t){for(var n=new Array(t.length),e=0;e0&&(a=n[0]),a instanceof Error)throw a;var s=new Error("Unhandled error."+(a?" ("+a.message+")":""));throw s.context=a,s}var u=i[t];if(void 0===u)return!1;if("function"==typeof u)o(u,this,n);else{var c=u.length,l=v(u,c);for(e=0;e=0;o--)if(e[o]===n||e[o].listener===n){a=e[o].listener,i=o;break}if(i<0)return this;0===i?e.shift():function(t,n){for(;n+1=0;r--)this.removeListener(t,n[r]);return this},s.prototype.listeners=function(t){return p(this,t,!0)},s.prototype.rawListeners=function(t){return p(this,t,!1)},s.listenerCount=function(t,n){return"function"==typeof t.listenerCount?t.listenerCount(n):m.call(t,n)},s.prototype.listenerCount=m,s.prototype.eventNames=function(){return this._eventsCount>0?r(this._events):[]}},function(t,n,e){var r=e(57);t.exports=(r.default||r).template({compiler:[8,">= 4.3.0"],main:function(t,n,e,r,i){var o,a=t.lookupProperty||function(t,n){if(Object.prototype.hasOwnProperty.call(t,n))return t[n]};return"Base notification: "+t.escapeExpression("function"==typeof(o=null!=(o=a(e,"message")||(null!=n?a(n,"message"):n))?o:t.hooks.helperMissing)?o.call(null!=n?n:t.nullContext||{},{name:"message",hash:{},data:i,loc:{start:{line:1,column:19},end:{line:1,column:30}}}):o)+"\n"},useData:!0})},function(t,n,e){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var n={};if(null!=t)for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e]);return n.default=t,n}n.__esModule=!0;var o=i(e(210)),a=r(e(269)),s=r(e(53)),u=i(e(32)),c=i(e(270)),l=r(e(272));function f(){var t=new o.HandlebarsEnvironment;return u.extend(t,o),t.SafeString=a.default,t.Exception=s.default,t.Utils=u,t.escapeExpression=u.escapeExpression,t.VM=c,t.template=function(n){return c.template(n,t)},t}var h=f();h.create=f,l.default(h),h.default=h,n.default=h,t.exports=n.default},function(t,n,e){"use strict";n.__esModule=!0;var r=e(32);n.default=function(t){t.registerHelper("blockHelperMissing",(function(n,e){var i=e.inverse,o=e.fn;if(!0===n)return o(this);if(!1===n||null==n)return i(this);if(r.isArray(n))return n.length>0?(e.ids&&(e.ids=[e.name]),t.helpers.each(n,e)):i(this);if(e.data&&e.ids){var a=r.createFrame(e.data);a.contextPath=r.appendContextPath(e.data.contextPath,e.name),e={data:a}}return o(n,e)}))},t.exports=n.default},function(t,n,e){"use strict";(function(r){n.__esModule=!0;var i,o=e(32),a=e(53),s=(i=a)&&i.__esModule?i:{default:i};n.default=function(t){t.registerHelper("each",(function(t,n){if(!n)throw new s.default("Must pass iterator to #each");var e,i=n.fn,a=n.inverse,u=0,c="",l=void 0,f=void 0;function h(n,e,r){l&&(l.key=n,l.index=e,l.first=0===e,l.last=!!r,f&&(l.contextPath=f+n)),c+=i(t[n],{data:l,blockParams:o.blockParams([t[n],n],[f+n,null])})}if(n.data&&n.ids&&(f=o.appendContextPath(n.data.contextPath,n.ids[0])+"."),o.isFunction(t)&&(t=t.call(this)),n.data&&(l=o.createFrame(n.data)),t&&"object"==typeof t)if(o.isArray(t))for(var d=t.length;u=s.LAST_COMPATIBLE_COMPILER_REVISION&&n<=s.COMPILER_REVISION)return;if(n1&&void 0!==arguments[1]?arguments[1]:{},e=t.hash.slice(1);""===e&&(e="/"),this.renderPath(e,n)}},{key:"setupRxjsListeners",value:function(){this.watchMouseDown$=m(this.watchContainer,"mousedown").pipe(h()),this.watchMouseUp$=m(this.watchContainer,"mouseup").pipe(h()),this.watchKeyDown$=m(this.wholePage,"keydown").pipe(d()),this.watchKeyUp$=m(this.wholePage,"keyup").pipe(d()),this.mergeEvents(),this.subscribeToEvents()}},{key:"mergeEvents",value:function(){this.watchDown$=this.watchMouseDown$.pipe(A(this.watchKeyDown$),p()),this.watchUp$=this.watchMouseUp$.pipe(A(this.watchKeyUp$),p())}},{key:"testClick",value:function(){for(var t=this,n=arguments.length,e=new Array(n),r=0;r750&&(i="".concat(i,"Hold"),n={timeTaken:r});var o=this.currentView.constructor.name,a=this.currentView[i];a?(console.log("Executing '".concat(i,"()' on ").concat(o)),a.bind(this.currentView)(n)):console.error("".concat(o," needs '").concat(i,"()' to be defined."))}},{key:"handleDoubleClick",value:function(t){var n=t.target,e=(t.timeTaken,"".concat(n,"ButtonEventDoubleClick")),r=this.currentView.constructor.name,i=this.currentView[e];i?(console.log("Executing '".concat(e,"()' on ").concat(r)),i.bind(this.currentView)(void 0)):console.error("".concat(r," needs '").concat(e,"()' to be defined."))}},{key:"navigate",value:function(t){window.location.hash=t}},{key:"render",value:function(t,n,e){this.prevProps=e;var r=new n(a(a({},e),{},{navigate:this.navigate,watchFace:this.watchFace}));this.currentView=r,r.pageWillLoad(),t.innerHTML=r.render(),r.pageDidLoad()}},{key:"renderPath",value:function(t,n){var e=this.routes[t]||this.routes[404];this.render(this.watchFace,e,n)}}])&&u(n.prototype,e),r&&u(n,r),t}()},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(n,"__esModule",{value:!0}),n.default=void 0;var i,o=(i=e(275))&&i.__esModule?i:{default:i};function a(t,n){for(var e=0;eOpenStreetMap contributors'}).addTo(this.map)}}])&&a(r.prototype,i),u&&a(r,u),d}(u(HTMLElement));n.default=d},function(t,n,e){ +!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},n.t=function(t,e){if(1&e&&(t=n(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p="",n(n.s=138)}([function(t,e,n){"use strict";n.d(e,"a",(function(){return r})); +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +var i=function(t,e){return(i=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)e.hasOwnProperty(n)&&(t[n]=e[n])})(t,e)};function r(t,e){function n(){this.constructor=t}i(t,e),t.prototype=null===e?Object.create(e):(n.prototype=e.prototype,new n)}},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var i=n(0),r=n(26),o=n(59),s=n(4),a=n(44),u=n(15),c=n(38),l=function(t){function e(n,i,r){var s=t.call(this)||this;switch(s.syncErrorValue=null,s.syncErrorThrown=!1,s.syncErrorThrowable=!1,s.isStopped=!1,arguments.length){case 0:s.destination=o.a;break;case 1:if(!n){s.destination=o.a;break}if("object"==typeof n){n instanceof e?(s.syncErrorThrowable=n.syncErrorThrowable,s.destination=n,n.add(s)):(s.syncErrorThrowable=!0,s.destination=new h(s,n));break}default:s.syncErrorThrowable=!0,s.destination=new h(s,n,i,r)}return s}return i.a(e,t),e.prototype[a.a]=function(){return this},e.create=function(t,n,i){var r=new e(t,n,i);return r.syncErrorThrowable=!1,r},e.prototype.next=function(t){this.isStopped||this._next(t)},e.prototype.error=function(t){this.isStopped||(this.isStopped=!0,this._error(t))},e.prototype.complete=function(){this.isStopped||(this.isStopped=!0,this._complete())},e.prototype.unsubscribe=function(){this.closed||(this.isStopped=!0,t.prototype.unsubscribe.call(this))},e.prototype._next=function(t){this.destination.next(t)},e.prototype._error=function(t){this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.destination.complete(),this.unsubscribe()},e.prototype._unsubscribeAndRecycle=function(){var t=this._parentOrParents;return this._parentOrParents=null,this.unsubscribe(),this.closed=!1,this.isStopped=!1,this._parentOrParents=t,this},e}(s.a),h=function(t){function e(e,n,i,s){var a,u=t.call(this)||this;u._parentSubscriber=e;var c=u;return Object(r.a)(n)?a=n:n&&(a=n.next,i=n.error,s=n.complete,n!==o.a&&(c=Object.create(n),Object(r.a)(c.unsubscribe)&&u.add(c.unsubscribe.bind(c)),c.unsubscribe=u.unsubscribe.bind(u))),u._context=c,u._next=a,u._error=i,u._complete=s,u}return i.a(e,t),e.prototype.next=function(t){if(!this.isStopped&&this._next){var e=this._parentSubscriber;u.a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?this.__tryOrSetError(e,this._next,t)&&this.unsubscribe():this.__tryOrUnsub(this._next,t)}},e.prototype.error=function(t){if(!this.isStopped){var e=this._parentSubscriber,n=u.a.useDeprecatedSynchronousErrorHandling;if(this._error)n&&e.syncErrorThrowable?(this.__tryOrSetError(e,this._error,t),this.unsubscribe()):(this.__tryOrUnsub(this._error,t),this.unsubscribe());else if(e.syncErrorThrowable)n?(e.syncErrorValue=t,e.syncErrorThrown=!0):Object(c.a)(t),this.unsubscribe();else{if(this.unsubscribe(),n)throw t;Object(c.a)(t)}}},e.prototype.complete=function(){var t=this;if(!this.isStopped){var e=this._parentSubscriber;if(this._complete){var n=function(){return t._complete.call(t._context)};u.a.useDeprecatedSynchronousErrorHandling&&e.syncErrorThrowable?(this.__tryOrSetError(e,n),this.unsubscribe()):(this.__tryOrUnsub(n),this.unsubscribe())}else this.unsubscribe()}},e.prototype.__tryOrUnsub=function(t,e){try{t.call(this._context,e)}catch(t){if(this.unsubscribe(),u.a.useDeprecatedSynchronousErrorHandling)throw t;Object(c.a)(t)}},e.prototype.__tryOrSetError=function(t,e,n){if(!u.a.useDeprecatedSynchronousErrorHandling)throw new Error("bad call");try{e.call(this._context,n)}catch(e){return u.a.useDeprecatedSynchronousErrorHandling?(t.syncErrorValue=e,t.syncErrorThrown=!0,!0):(Object(c.a)(e),!0)}return!1},e.prototype._unsubscribe=function(){var t=this._parentSubscriber;this._context=null,this._parentSubscriber=null,t.unsubscribe()},e}(l)},function(t,e,n){"use strict";n.d(e,"a",(function(){return a})),n.d(e,"b",(function(){return u})),n.d(e,"c",(function(){return c}));var i=n(0),r=n(1),o=n(3),s=n(37),a=function(t){function e(e){var n=t.call(this)||this;return n.parent=e,n}return i.a(e,t),e.prototype._next=function(t){this.parent.notifyNext(t)},e.prototype._error=function(t){this.parent.notifyError(t),this.unsubscribe()},e.prototype._complete=function(){this.parent.notifyComplete(),this.unsubscribe()},e}(r.a),u=(r.a,function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.a(e,t),e.prototype.notifyNext=function(t){this.destination.next(t)},e.prototype.notifyError=function(t){this.destination.error(t)},e.prototype.notifyComplete=function(){this.destination.complete()},e}(r.a));r.a;function c(t,e){if(!e.closed){if(t instanceof o.a)return t.subscribe(e);var n;try{n=Object(s.a)(t)(e)}catch(t){e.error(t)}return n}}},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var i=n(57),r=n(1),o=n(44),s=n(59);var a=n(22),u=n(42),c=n(15),l=function(){function t(t){this._isScalar=!1,t&&(this._subscribe=t)}return t.prototype.lift=function(e){var n=new t;return n.source=this,n.operator=e,n},t.prototype.subscribe=function(t,e,n){var i=this.operator,a=function(t,e,n){if(t){if(t instanceof r.a)return t;if(t[o.a])return t[o.a]()}return t||e||n?new r.a(t,e,n):new r.a(s.a)}(t,e,n);if(i?a.add(i.call(a,this.source)):a.add(this.source||c.a.useDeprecatedSynchronousErrorHandling&&!a.syncErrorThrowable?this._subscribe(a):this._trySubscribe(a)),c.a.useDeprecatedSynchronousErrorHandling&&a.syncErrorThrowable&&(a.syncErrorThrowable=!1,a.syncErrorThrown))throw a.syncErrorValue;return a},t.prototype._trySubscribe=function(t){try{return this._subscribe(t)}catch(e){c.a.useDeprecatedSynchronousErrorHandling&&(t.syncErrorThrown=!0,t.syncErrorValue=e),Object(i.a)(t)?t.error(e):console.warn(e)}},t.prototype.forEach=function(t,e){var n=this;return new(e=h(e))((function(e,i){var r;r=n.subscribe((function(e){try{t(e)}catch(t){i(t),r&&r.unsubscribe()}}),i,e)}))},t.prototype._subscribe=function(t){var e=this.source;return e&&e.subscribe(t)},t.prototype[a.a]=function(){return this},t.prototype.pipe=function(){for(var t=[],e=0;et.length)&&(e=t.length);for(var n=0,i=new Array(e);n":">",'"':""","'":"'","`":"`","=":"="},r=/[&<>"'`=]/g,o=/[&<>"'`=]/;function s(t){return i[t]}function a(t){for(var e=1;e0?this._next(t.shift()):0===this.active&&this.hasCompleted&&this.destination.complete()},e}(s.b),l=a},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var i=n(3),r=n(85),o=n(58);function s(t,e){return e?Object(o.a)(t,e):new i.a(Object(r.a)(t))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var i=n(0),r=n(63),o=function(t){function e(n,i){void 0===i&&(i=r.a.now);var o=t.call(this,n,(function(){return e.delegate&&e.delegate!==o?e.delegate.now():i()}))||this;return o.actions=[],o.active=!1,o.scheduled=void 0,o}return i.a(e,t),e.prototype.schedule=function(n,i,r){return void 0===i&&(i=0),e.delegate&&e.delegate!==this?e.delegate.schedule(n,i,r):t.prototype.schedule.call(this,n,i,r)},e.prototype.flush=function(t){var e=this.actions;if(this.active)e.push(t);else{var n;this.active=!0;do{if(n=t.execute(t.state,t.delay))break}while(t=e.shift());if(this.active=!1,n){for(;t=e.shift();)t.unsubscribe();throw n}}},e}(r.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return s}));var i=n(0),r=n(5),o=n(4),s=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.value=null,e.hasNext=!1,e.hasCompleted=!1,e}return i.a(e,t),e.prototype._subscribe=function(e){return this.hasError?(e.error(this.thrownError),o.a.EMPTY):this.hasCompleted&&this.hasNext?(e.next(this.value),e.complete(),o.a.EMPTY):t.prototype._subscribe.call(this,e)},e.prototype.next=function(t){this.hasCompleted||(this.value=t,this.hasNext=!0)},e.prototype.error=function(e){this.hasCompleted||t.prototype.error.call(this,e)},e.prototype.complete=function(){this.hasCompleted=!0,this.hasNext&&t.prototype.next.call(this,this.value),t.prototype.complete.call(this)},e}(r.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var i=n(0),r=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.scheduler=e,i.work=n,i.pending=!1,i}return i.a(e,t),e.prototype.schedule=function(t,e){if(void 0===e&&(e=0),this.closed)return this;this.state=t;var n=this.id,i=this.scheduler;return null!=n&&(this.id=this.recycleAsyncId(i,n,e)),this.pending=!0,this.delay=e,this.id=this.id||this.requestAsyncId(i,this.id,e),this},e.prototype.requestAsyncId=function(t,e,n){return void 0===n&&(n=0),setInterval(t.flush.bind(t,this),n)},e.prototype.recycleAsyncId=function(t,e,n){if(void 0===n&&(n=0),null!==n&&this.delay===n&&!1===this.pending)return e;clearInterval(e)},e.prototype.execute=function(t,e){if(this.closed)return new Error("executing a cancelled action");this.pending=!1;var n=this._execute(t,e);if(n)return n;!1===this.pending&&null!=this.id&&(this.id=this.recycleAsyncId(this.scheduler,this.id,null))},e.prototype._execute=function(t,e){var n=!1,i=void 0;try{this.work(t)}catch(t){n=!0,i=!!t&&t||new Error(t)}if(n)return this.unsubscribe(),i},e.prototype._unsubscribe=function(){var t=this.id,e=this.scheduler,n=e.actions,i=n.indexOf(this);this.work=null,this.state=null,this.pending=!1,this.scheduler=null,-1!==i&&n.splice(i,1),null!=t&&(this.id=this.recycleAsyncId(e,t,null)),this.delay=null},e}(function(t){function e(e,n){return t.call(this)||this}return i.a(e,t),e.prototype.schedule=function(t,e){return void 0===e&&(e=0),this},e}(n(4).a))},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var i=n(7);function r(t){return!Object(i.a)(t)&&t-parseFloat(t)+1>=0}},function(t,e,n){var i=n(107),r="object"==typeof self&&self&&self.Object===Object&&self,o=i||r||Function("return this")();t.exports=o},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var i=n(40),r=n(79);function o(){for(var t=[],e=0;e0?t.prototype.requestAsyncId.call(this,e,n,i):(e.actions.push(this),e.scheduled||(e.scheduled=u(e.flush.bind(e,null))))},e.prototype.recycleAsyncId=function(e,n,i){if(void 0===i&&(i=0),null!==i&&i>0||null===i&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,i);0===e.actions.length&&(c(n),e.scheduled=void 0)},e}(n(33).a),h=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.a(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,i=-1,r=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++i1)this.connection=null;else{var n=this.connection,i=t._connection;this.connection=null,!i||n&&i!==n||i.unsubscribe()}}else this.connection=null},e}(r.a)},function(t,e,n){"use strict";n.d(e,"a",(function(){return l}));var i=n(0),r=n(5),o=n(62),s=n(4),a=n(77),u=n(23),c=n(84),l=function(t){function e(e,n,i){void 0===e&&(e=Number.POSITIVE_INFINITY),void 0===n&&(n=Number.POSITIVE_INFINITY);var r=t.call(this)||this;return r.scheduler=i,r._events=[],r._infiniteTimeWindow=!1,r._bufferSize=e<1?1:e,r._windowTime=n<1?1:n,n===Number.POSITIVE_INFINITY?(r._infiniteTimeWindow=!0,r.next=r.nextInfiniteTimeWindow):r.next=r.nextTimeWindow,r}return i.a(e,t),e.prototype.nextInfiniteTimeWindow=function(e){if(!this.isStopped){var n=this._events;n.push(e),n.length>this._bufferSize&&n.shift()}t.prototype.next.call(this,e)},e.prototype.nextTimeWindow=function(e){this.isStopped||(this._events.push(new h(this._getNow(),e)),this._trimBufferThenGetEvents()),t.prototype.next.call(this,e)},e.prototype._subscribe=function(t){var e,n=this._infiniteTimeWindow,i=n?this._events:this._trimBufferThenGetEvents(),r=this.scheduler,o=i.length;if(this.closed)throw new u.a;if(this.isStopped||this.hasError?e=s.a.EMPTY:(this.observers.push(t),e=new c.a(this,t)),r&&t.add(t=new a.a(t,r)),n)for(var l=0;le&&(o=Math.max(o,r-e)),o>0&&i.splice(0,o),i},e}(r.a),h=function(){return function(t,e){this.time=t,this.value=e}}()},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var i=n(3);function r(t,e){return e?new i.a((function(n){return e.schedule(o,0,{error:t,subscriber:n})})):new i.a((function(e){return e.error(t)}))}function o(t){var e=t.error;t.subscriber.error(e)}},function(t,e,n){"use strict";n.d(e,"b",(function(){return l})),n.d(e,"a",(function(){return h}));var i=n(0),r=n(11),o=n(7),s=n(17),a=n(14),u=n(30),c={};function l(){for(var t=[],e=0;ethis.index},t.prototype.hasCompleted=function(){return this.array.length===this.index},t}(),d=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.parent=n,r.observable=i,r.stillUnsubscribed=!0,r.buffer=[],r.isComplete=!1,r}return i.a(e,t),e.prototype[a.a]=function(){return this},e.prototype.next=function(){var t=this.buffer;return 0===t.length&&this.isComplete?{value:null,done:!0}:{value:t.shift(),done:!1}},e.prototype.hasValue=function(){return this.buffer.length>0},e.prototype.hasCompleted=function(){return 0===this.buffer.length&&this.isComplete},e.prototype.notifyComplete=function(){this.buffer.length>0?(this.isComplete=!0,this.parent.notifyInactive()):this.destination.complete()},e.prototype.notifyNext=function(t){this.buffer.push(t),this.parent.checkIterators()},e.prototype.subscribe=function(){return Object(u.c)(this.observable,new u.a(this))},e}(u.b)},function(t,e,n){"use strict";function i(t){return null!==t&&"object"==typeof t}n.d(e,"a",(function(){return i}))},function(t,e,n){"use strict";n.d(e,"a",(function(){return r}));var i=n(1);function r(t){for(;t;){var e=t,n=e.closed,r=e.destination,o=e.isStopped;if(n||o)return!1;t=r&&r instanceof i.a?r:null}return!0}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var i=n(3),r=n(4);function o(t,e){return new i.a((function(n){var i=new r.a,o=0;return i.add(e.schedule((function(){o!==t.length?(n.next(t[o++]),n.closed||i.add(this.schedule())):n.complete()}))),i}))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return o}));var i=n(15),r=n(38),o={closed:!0,next:function(t){},error:function(t){if(i.a.useDeprecatedSynchronousErrorHandling)throw t;Object(r.a)(t)},complete:function(){}}},function(t,e,n){var i=n(68),r=n(184),o=n(185),s=i?i.toStringTag:void 0;t.exports=function(t){return null==t?void 0===t?"[object Undefined]":"[object Null]":s&&s in Object(t)?r(t):o(t)}},function(t,e){t.exports=function(t){return null!=t&&"object"==typeof t}},function(t,e,n){"use strict";n.d(e,"b",(function(){return o})),n.d(e,"a",(function(){return s}));var i=n(0),r=function(t){function e(e,n){var i=t.call(this,e,n)||this;return i.scheduler=e,i.work=n,i}return i.a(e,t),e.prototype.schedule=function(e,n){return void 0===n&&(n=0),n>0?t.prototype.schedule.call(this,e,n):(this.delay=n,this.state=e,this.scheduler.flush(this),this)},e.prototype.execute=function(e,n){return n>0||this.closed?t.prototype.execute.call(this,e,n):this._execute(e,n)},e.prototype.requestAsyncId=function(e,n,i){return void 0===i&&(i=0),null!==i&&i>0||null===i&&this.delay>0?t.prototype.requestAsyncId.call(this,e,n,i):e.flush(this)},e}(n(33).a),o=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.a(e,t),e}(n(31).a))(r),s=o},function(t,e,n){"use strict";n.d(e,"a",(function(){return i}));var i=function(){function t(e,n){void 0===n&&(n=t.now),this.SchedulerAction=e,this.now=n}return t.prototype.schedule=function(t,e,n){return void 0===e&&(e=0),new this.SchedulerAction(this,t).schedule(n,e)},t.now=function(){return Date.now()},t}()},function(t,e,n){var i,r,o={},s=(i=function(){return window&&document&&document.all&&!window.atob},function(){return void 0===r&&(r=i.apply(this,arguments)),r}),a=function(t,e){return e?e.querySelector(t):document.querySelector(t)},u=function(t){var e={};return function(t,n){if("function"==typeof t)return t();if(void 0===e[t]){var i=a.call(this,t,n);if(window.HTMLIFrameElement&&i instanceof window.HTMLIFrameElement)try{i=i.contentDocument.head}catch(t){i=null}e[t]=i}return e[t]}}(),c=null,l=0,h=[],f=n(141);function p(t,e){for(var n=0;n=0&&h.splice(e,1)}function b(t){var e=document.createElement("style");if(void 0===t.attrs.type&&(t.attrs.type="text/css"),void 0===t.attrs.nonce){var i=function(){0;return n.nc}();i&&(t.attrs.nonce=i)}return _(e,t.attrs),m(t,e),e}function _(t,e){Object.keys(e).forEach((function(n){t.setAttribute(n,e[n])}))}function y(t,e){var n,i,r,o;if(e.transform&&t.css){if(!(o="function"==typeof e.transform?e.transform(t.css):e.transform.default(t.css)))return function(){};t.css=o}if(e.singleton){var s=l++;n=c||(c=b(e)),i=x.bind(null,n,s,!1),r=x.bind(null,n,s,!0)}else t.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(n=function(t){var e=document.createElement("link");return void 0===t.attrs.type&&(t.attrs.type="text/css"),t.attrs.rel="stylesheet",_(e,t.attrs),m(t,e),e}(e),i=w.bind(null,n,e),r=function(){v(n),n.href&&URL.revokeObjectURL(n.href)}):(n=b(e),i=C.bind(null,n),r=function(){v(n)});return i(t),function(e){if(e){if(e.css===t.css&&e.media===t.media&&e.sourceMap===t.sourceMap)return;i(t=e)}else r()}}t.exports=function(t,e){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(e=e||{}).attrs="object"==typeof e.attrs?e.attrs:{},e.singleton||"boolean"==typeof e.singleton||(e.singleton=s()),e.insertInto||(e.insertInto="head"),e.insertAt||(e.insertAt="bottom");var n=d(t,e);return p(n,e),function(t){for(var i=[],r=0;r1&&"number"==typeof t[t.length-1]&&(n=t.pop())):"number"==typeof u&&(n=t.pop()),null===a&&1===t.length&&t[0]instanceof i.a?t[0]:Object(o.a)(n)(Object(s.a)(t,a))}},function(t,e,n){"use strict";n.d(e,"a",(function(){return u}));var i=n(0),r=n(7),o=n(30),s=n(17),a=n(14);function u(){for(var t=[],e=0;e-1&&t%1==0&&t<=9007199254740991}},function(t,e,n){var i=n(39),r=n(72),o=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,s=/^\w*$/;t.exports=function(t,e){if(i(t))return!1;var n=typeof t;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=t&&!r(t))||(s.test(t)||!o.test(t)||null!=e&&t in Object(e))}},function(t,e,n){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function r(t,e){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:{};i(this,t),o(this,"template",void 0),this.props=n,Object.keys(n).forEach((function(t){e[t]=n[t]})),this.watchFace=n.watchFace}var e,n,s;return e=t,(n=[{key:"navigate",value:function(t){this.navigate(t)}},{key:"pageWillLoad",value:function(){}},{key:"render",value:function(){if(!this.template)throw new Error("Template not defined: Did you forget `template = require('path/to/template.hbs');`?");var t=JSON.parse(JSON.stringify(this));return this.template(t)}},{key:"pageDidLoad",value:function(){}},{key:"rightButtonEvent",value:function(){}},{key:"leftButtonEvent",value:function(){}},{key:"topButtonEvent",value:function(){}},{key:"bottomButtonEvent",value:function(){}},{key:"faceButtonEvent",value:function(){}},{key:"rightButtonEventDoubleClick",value:function(){}},{key:"leftButtonEventDoubleClick",value:function(){}},{key:"topButtonEventDoubleClick",value:function(){}},{key:"bottomButtonEventDoubleClick",value:function(){}},{key:"faceButtonEventDoubleClick",value:function(){}},{key:"rightButtonEventHold",value:function(){}},{key:"leftButtonEventHold",value:function(){}},{key:"topButtonEventHold",value:function(){}},{key:"bottomButtonEventHold",value:function(){}},{key:"faceButtonEventHold",value:function(){}}])&&r(e.prototype,n),s&&r(e,s),t}();t.exports=s},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;n= 2.0.0-beta.1",7:">= 4.0.0 <4.3.0",8:">= 4.3.0"};function l(t,e,n){this.helpers=t||{},this.partials=e||{},this.decorators=n||{},s.registerDefaultHelpers(this),a.registerDefaultDecorators(this)}l.prototype={constructor:l,logger:u.default,log:u.default.log,registerHelper:function(t,e){if("[object Object]"===r.toString.call(t)){if(e)throw new o.default("Arg not supported with multiple helpers");r.extend(this.helpers,t)}else this.helpers[t]=e},unregisterHelper:function(t){delete this.helpers[t]},registerPartial:function(t,e){if("[object Object]"===r.toString.call(t))r.extend(this.partials,t);else{if(void 0===e)throw new o.default('Attempting to register a partial called "'+t+'" as undefined');this.partials[t]=e}},unregisterPartial:function(t){delete this.partials[t]},registerDecorator:function(t,e){if("[object Object]"===r.toString.call(t)){if(e)throw new o.default("Arg not supported with multiple decorators");r.extend(this.decorators,t)}else this.decorators[t]=e},unregisterDecorator:function(t){delete this.decorators[t]},resetLoggedPropertyAccesses:function(){c.resetLoggedProperties()}};var h=u.default.log;e.log=h,e.createFrame=r.createFrame,e.logger=u.default},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}e.__esModule=!0,e.registerDefaultHelpers=function(t){r.default(t),o.default(t),s.default(t),a.default(t),u.default(t),c.default(t),l.default(t)},e.moveHelperToHooks=function(t,e,n){t.helpers[e]&&(t.hooks[e]=t.helpers[e],n||delete t.helpers[e])};var r=i(n(146)),o=i(n(147)),s=i(n(148)),a=i(n(149)),u=i(n(150)),c=i(n(151)),l=i(n(152))},function(t,e,n){"use strict";e.__esModule=!0;var i=n(27),r={methodMap:["debug","info","warn","error"],level:"info",lookupLevel:function(t){if("string"==typeof t){var e=i.indexOf(r.methodMap,t.toLowerCase());t=e>=0?e:parseInt(t,10)}return t},log:function(t){if(t=r.lookupLevel(t),"undefined"!=typeof console&&r.lookupLevel(r.level)<=t){var e=r.methodMap[t];console[e]||(e="log");for(var n=arguments.length,i=Array(n>1?n-1:0),o=1;ol))return!1;var f=u.get(t),p=u.get(e);if(f&&p)return f==e&&p==t;var d=-1,m=!0,v=2&n?new i:void 0;for(u.set(t,e),u.set(e,t);++d-1&&t%1==0&&t0&&this.destination.next(e),t.prototype._complete.call(this)},e}(d.a),_=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.bufferSize=n,r.startBufferEvery=i,r.buffers=[],r.count=0,r}return i.a(e,t),e.prototype._next=function(t){var e=this.bufferSize,n=this.startBufferEvery,i=this.buffers,r=this.count;this.count++,r%n==0&&i.push([]);for(var o=i.length;o--;){var s=i[o];s.push(t),s.length===e&&(i.splice(o,1),this.destination.next(s))}},e.prototype._complete=function(){for(var e=this.buffers,n=this.destination;e.length>0;){var i=e.shift();i.length>0&&n.next(i)}t.prototype._complete.call(this)},e}(d.a),y=n(11);function A(t){var e=arguments.length,n=u.a;Object(y.a)(arguments[arguments.length-1])&&(n=arguments[arguments.length-1],e--);var i=null;e>=2&&(i=arguments[1]);var r=Number.POSITIVE_INFINITY;return e>=3&&(r=arguments[2]),function(e){return e.lift(new g(t,i,r,n))}}var g=function(){function t(t,e,n,i){this.bufferTimeSpan=t,this.bufferCreationInterval=e,this.maxBufferSize=n,this.scheduler=i}return t.prototype.call=function(t,e){return e.subscribe(new C(t,this.bufferTimeSpan,this.bufferCreationInterval,this.maxBufferSize,this.scheduler))},t}(),x=function(){return function(){this.buffer=[]}}(),C=function(t){function e(e,n,i,r,o){var s=t.call(this,e)||this;s.bufferTimeSpan=n,s.bufferCreationInterval=i,s.maxBufferSize=r,s.scheduler=o,s.contexts=[];var a=s.openContext();if(s.timespanOnly=null==i||i<0,s.timespanOnly){var u={subscriber:s,context:a,bufferTimeSpan:n};s.add(a.closeAction=o.schedule(w,n,u))}else{var c={subscriber:s,context:a},l={bufferTimeSpan:n,bufferCreationInterval:i,subscriber:s,scheduler:o};s.add(a.closeAction=o.schedule(E,n,c)),s.add(o.schedule(B,i,l))}return s}return i.a(e,t),e.prototype._next=function(t){for(var e,n=this.contexts,i=n.length,r=0;r0;){var i=e.shift();n.next(i.buffer)}t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.contexts=null},e.prototype.onBufferFull=function(t){this.closeContext(t);var e=t.closeAction;if(e.unsubscribe(),this.remove(e),!this.closed&&this.timespanOnly){t=this.openContext();var n=this.bufferTimeSpan,i={subscriber:this,context:t,bufferTimeSpan:n};this.add(t.closeAction=this.scheduler.schedule(w,n,i))}},e.prototype.openContext=function(){var t=new x;return this.contexts.push(t),t},e.prototype.closeContext=function(t){this.destination.next(t.buffer);var e=this.contexts;(e?e.indexOf(t):-1)>=0&&e.splice(e.indexOf(t),1)},e}(d.a);function w(t){var e=t.subscriber,n=t.context;n&&e.closeContext(n),e.closed||(t.context=e.openContext(),t.context.closeAction=this.schedule(t,t.bufferTimeSpan))}function B(t){var e=t.bufferCreationInterval,n=t.bufferTimeSpan,i=t.subscriber,r=t.scheduler,o=i.openContext();i.closed||(i.add(o.closeAction=r.schedule(E,n,{subscriber:i,context:o})),this.schedule(t,e))}function E(t){var e=t.subscriber,n=t.context;e.closeContext(n)}var k=n(4),S=n(14),P=n(17);function O(t,e){return function(n){return n.lift(new T(t,e))}}var T=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new j(t,this.openings,this.closingSelector))},t}(),j=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.closingSelector=i,r.contexts=[],r.add(Object(S.a)(r,n)),r}return i.a(e,t),e.prototype._next=function(t){for(var e=this.contexts,n=e.length,i=0;i0;){var i=n.shift();i.subscription.unsubscribe(),i.buffer=null,i.subscription=null}this.contexts=null,t.prototype._error.call(this,e)},e.prototype._complete=function(){for(var e=this.contexts;e.length>0;){var n=e.shift();this.destination.next(n.buffer),n.subscription.unsubscribe(),n.buffer=null,n.subscription=null}this.contexts=null,t.prototype._complete.call(this)},e.prototype.notifyNext=function(t,e){t?this.closeBuffer(t):this.openBuffer(e)},e.prototype.notifyComplete=function(t){this.closeBuffer(t.context)},e.prototype.openBuffer=function(t){try{var e=this.closingSelector.call(this,t);e&&this.trySubscribe(e)}catch(t){this._error(t)}},e.prototype.closeBuffer=function(t){var e=this.contexts;if(e&&t){var n=t.buffer,i=t.subscription;this.destination.next(n),e.splice(e.indexOf(t),1),this.remove(i),i.unsubscribe()}},e.prototype.trySubscribe=function(t){var e=this.contexts,n=new k.a,i={buffer:[],subscription:n};e.push(i);var r=Object(S.a)(this,t,i);!r||r.closed?this.closeBuffer(i):(r.context=i,this.add(r),n.add(r))},e}(P.a);function L(t){return function(e){return e.lift(new I(t))}}var I=function(){function t(t){this.closingSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new z(t,this.closingSelector))},t}(),z=function(t){function e(e,n){var i=t.call(this,e)||this;return i.closingSelector=n,i.subscribing=!1,i.openBuffer(),i}return i.a(e,t),e.prototype._next=function(t){this.buffer.push(t)},e.prototype._complete=function(){var e=this.buffer;e&&this.destination.next(e),t.prototype._complete.call(this)},e.prototype._unsubscribe=function(){this.buffer=void 0,this.subscribing=!1},e.prototype.notifyNext=function(){this.openBuffer()},e.prototype.notifyComplete=function(){this.subscribing?this.complete():this.openBuffer()},e.prototype.openBuffer=function(){var t=this.closingSubscription;t&&(this.remove(t),t.unsubscribe());var e,n=this.buffer;this.buffer&&this.destination.next(n),this.buffer=[];try{e=(0,this.closingSelector)()}catch(t){return this.error(t)}t=new k.a,this.closingSubscription=t,this.add(t),this.subscribing=!0,t.add(Object(r.c)(e,new r.a(this))),this.subscribing=!1},e}(r.b);function M(t){return function(e){var n=new D(t),i=e.lift(n);return n.caught=i}}var D=function(){function t(t){this.selector=t}return t.prototype.call=function(t,e){return e.subscribe(new N(t,this.selector,this.caught))},t}(),N=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.selector=n,r.caught=i,r}return i.a(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=void 0;try{n=this.selector(e,this.caught)}catch(e){return void t.prototype.error.call(this,e)}this._unsubscribeAndRecycle();var i=new r.a(this);this.add(i);var o=Object(r.c)(n,i);o!==i&&this.add(o)}},e}(r.b),Z=n(52);function R(t){return function(e){return e.lift(new Z.a(t))}}var V=n(7),W=n(13);function F(){for(var t=[],e=0;e0&&n[0].time-i.now()<=0;)n.shift().notification.observe(r);if(n.length>0){var o=Math.max(0,n[0].time-i.now());this.schedule(t,o)}else this.unsubscribe(),e.active=!1},e.prototype._schedule=function(t){this.active=!0,this.destination.add(t.schedule(e.dispatch,this.delay,{source:this,destination:this.destination,scheduler:t}))},e.prototype.scheduleNotification=function(t){if(!0!==this.errored){var e=this.scheduler,n=new dt(e.now()+this.delay,t);this.queue.push(n),!1===this.active&&this._schedule(e)}},e.prototype._next=function(t){this.scheduleNotification(lt.a.createNext(t))},e.prototype._error=function(t){this.errored=!0,this.queue=[],this.destination.error(t),this.unsubscribe()},e.prototype._complete=function(){this.scheduleNotification(lt.a.createComplete()),this.unsubscribe()},e}(d.a),dt=function(){return function(t,e){this.time=t,this.notification=e}}(),mt=n(3);function vt(t,e){return e?function(n){return new yt(n,e).lift(new bt(t))}:function(e){return e.lift(new bt(t))}}var bt=function(){function t(t){this.delayDurationSelector=t}return t.prototype.call=function(t,e){return e.subscribe(new _t(t,this.delayDurationSelector))},t}(),_t=function(t){function e(e,n){var i=t.call(this,e)||this;return i.delayDurationSelector=n,i.completed=!1,i.delayNotifierSubscriptions=[],i.index=0,i}return i.a(e,t),e.prototype.notifyNext=function(t,e,n,i,r){this.destination.next(t),this.removeSubscription(r),this.tryComplete()},e.prototype.notifyError=function(t,e){this._error(t)},e.prototype.notifyComplete=function(t){var e=this.removeSubscription(t);e&&this.destination.next(e),this.tryComplete()},e.prototype._next=function(t){var e=this.index++;try{var n=this.delayDurationSelector(t,e);n&&this.tryDelay(n,t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.completed=!0,this.tryComplete(),this.unsubscribe()},e.prototype.removeSubscription=function(t){t.unsubscribe();var e=this.delayNotifierSubscriptions.indexOf(t);return-1!==e&&this.delayNotifierSubscriptions.splice(e,1),t.outerValue},e.prototype.tryDelay=function(t,e){var n=Object(S.a)(this,t,e);n&&!n.closed&&(this.destination.add(n),this.delayNotifierSubscriptions.push(n))},e.prototype.tryComplete=function(){this.completed&&0===this.delayNotifierSubscriptions.length&&this.destination.complete()},e}(P.a),yt=function(t){function e(e,n){var i=t.call(this)||this;return i.source=e,i.subscriptionDelay=n,i}return i.a(e,t),e.prototype._subscribe=function(t){this.subscriptionDelay.subscribe(new At(t,this.source))},e}(mt.a),At=function(t){function e(e,n){var i=t.call(this)||this;return i.parent=e,i.source=n,i.sourceSubscribed=!1,i}return i.a(e,t),e.prototype._next=function(t){this.subscribeToSource()},e.prototype._error=function(t){this.unsubscribe(),this.parent.error(t)},e.prototype._complete=function(){this.unsubscribe(),this.subscribeToSource()},e.prototype.subscribeToSource=function(){this.sourceSubscribed||(this.sourceSubscribed=!0,this.unsubscribe(),this.source.subscribe(this.parent))},e}(d.a);function gt(){return function(t){return t.lift(new xt)}}var xt=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new Ct(t))},t}(),Ct=function(t){function e(e){return t.call(this,e)||this}return i.a(e,t),e.prototype._next=function(t){t.observe(this.destination)},e}(d.a);function wt(t,e){return function(n){return n.lift(new Bt(t,e))}}var Bt=function(){function t(t,e){this.keySelector=t,this.flushes=e}return t.prototype.call=function(t,e){return e.subscribe(new Et(t,this.keySelector,this.flushes))},t}(),Et=function(t){function e(e,n,i){var o=t.call(this,e)||this;return o.keySelector=n,o.values=new Set,i&&o.add(Object(r.c)(i,new r.a(o))),o}return i.a(e,t),e.prototype.notifyNext=function(){this.values.clear()},e.prototype.notifyError=function(t){this._error(t)},e.prototype._next=function(t){this.keySelector?this._useKeySelector(t):this._finalizeNext(t,t)},e.prototype._useKeySelector=function(t){var e,n=this.destination;try{e=this.keySelector(t)}catch(t){return void n.error(t)}this._finalizeNext(e,t)},e.prototype._finalizeNext=function(t,e){var n=this.values;n.has(t)||(n.add(t),this.destination.next(e))},e}(r.b);function kt(t,e){return function(n){return n.lift(new St(t,e))}}var St=function(){function t(t,e){this.compare=t,this.keySelector=e}return t.prototype.call=function(t,e){return e.subscribe(new Pt(t,this.compare,this.keySelector))},t}(),Pt=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.keySelector=i,r.hasKey=!1,"function"==typeof n&&(r.compare=n),r}return i.a(e,t),e.prototype.compare=function(t,e){return t===e},e.prototype._next=function(t){var e;try{var n=this.keySelector;e=n?n(t):t}catch(t){return this.destination.error(t)}var i=!1;if(this.hasKey)try{i=(0,this.compare)(this.key,e)}catch(t){return this.destination.error(t)}else this.hasKey=!0;i||(this.key=e,this.destination.next(t))},e}(d.a);function Ot(t,e){return kt((function(n,i){return e?e(n[t],i[t]):n[t]===i[t]}))}var Tt=n(25),jt=n(18),Lt=n(28);function It(t){return void 0===t&&(t=Dt),function(e){return e.lift(new zt(t))}}var zt=function(){function t(t){this.errorFactory=t}return t.prototype.call=function(t,e){return e.subscribe(new Mt(t,this.errorFactory))},t}(),Mt=function(t){function e(e,n){var i=t.call(this,e)||this;return i.errorFactory=n,i.hasValue=!1,i}return i.a(e,t),e.prototype._next=function(t){this.hasValue=!0,this.destination.next(t)},e.prototype._complete=function(){if(this.hasValue)return this.destination.complete();var t=void 0;try{t=this.errorFactory()}catch(e){t=e}this.destination.error(t)},e}(d.a);function Dt(){return new Lt.a}var Nt=n(12);function Zt(t){return function(e){return 0===t?Object(Nt.b)():e.lift(new Rt(t))}}var Rt=function(){function t(t){if(this.total=t,this.total<0)throw new Tt.a}return t.prototype.call=function(t,e){return e.subscribe(new Vt(t,this.total))},t}(),Vt=function(t){function e(e,n){var i=t.call(this,e)||this;return i.total=n,i.count=0,i}return i.a(e,t),e.prototype._next=function(t){var e=this.total,n=++this.count;n<=e&&(this.destination.next(t),n===e&&(this.destination.complete(),this.unsubscribe()))},e}(d.a);function Wt(t,e){if(t<0)throw new Tt.a;var n=arguments.length>=2;return function(i){return i.pipe(Object(jt.a)((function(e,n){return n===t})),Zt(1),n?st(e):It((function(){return new Tt.a})))}}var Ft=n(40);function Ht(){for(var t=[],e=0;e0&&this._next(t.shift()),this.hasCompleted&&0===this.active&&this.destination.complete()},e}(r.b);function re(t){return function(e){return e.lift(new oe(t))}}var oe=function(){function t(t){this.callback=t}return t.prototype.call=function(t,e){return e.subscribe(new se(t,this.callback))},t}(),se=function(t){function e(e,n){var i=t.call(this,e)||this;return i.add(new k.a(n)),i}return i.a(e,t),e}(d.a);function ae(t,e){if("function"!=typeof t)throw new TypeError("predicate is not a function");return function(n){return n.lift(new ue(t,n,!1,e))}}var ue=function(){function t(t,e,n,i){this.predicate=t,this.source=e,this.yieldIndex=n,this.thisArg=i}return t.prototype.call=function(t,e){return e.subscribe(new ce(t,this.predicate,this.source,this.yieldIndex,this.thisArg))},t}(),ce=function(t){function e(e,n,i,r,o){var s=t.call(this,e)||this;return s.predicate=n,s.source=i,s.yieldIndex=r,s.thisArg=o,s.index=0,s}return i.a(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete(),this.unsubscribe()},e.prototype._next=function(t){var e=this.predicate,n=this.thisArg,i=this.index++;try{e.call(n||this,t,i,this.source)&&this.notifyComplete(this.yieldIndex?i:t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){this.notifyComplete(this.yieldIndex?-1:void 0)},e}(d.a);function le(t,e){return function(n){return n.lift(new ue(t,n,!0,e))}}var he=n(16);function fe(t,e){var n=arguments.length>=2;return function(i){return i.pipe(t?Object(jt.a)((function(e,n){return t(e,n,i)})):he.a,Zt(1),n?st(e):It((function(){return new Lt.a})))}}var pe=n(74);function de(){return function(t){return t.lift(new me)}}var me=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new ve(t))},t}(),ve=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return i.a(e,t),e.prototype._next=function(t){},e}(d.a);function be(){return function(t){return t.lift(new _e)}}var _e=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new ye(t))},t}(),ye=function(t){function e(e){return t.call(this,e)||this}return i.a(e,t),e.prototype.notifyComplete=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype._next=function(t){this.notifyComplete(!1)},e.prototype._complete=function(){this.notifyComplete(!0)},e}(d.a);function Ae(t){return function(e){return 0===t?Object(Nt.b)():e.lift(new ge(t))}}var ge=function(){function t(t){if(this.total=t,this.total<0)throw new Tt.a}return t.prototype.call=function(t,e){return e.subscribe(new xe(t,this.total))},t}(),xe=function(t){function e(e,n){var i=t.call(this,e)||this;return i.total=n,i.ring=new Array,i.count=0,i}return i.a(e,t),e.prototype._next=function(t){var e=this.ring,n=this.total,i=this.count++;e.length0)for(var n=this.count>=this.total?this.total:this.count,i=this.ring,r=0;r=2;return function(i){return i.pipe(t?Object(jt.a)((function(e,n){return t(e,n,i)})):he.a,Ae(1),n?st(e):It((function(){return new Lt.a})))}}function we(t){return function(e){return e.lift(new Be(t))}}var Be=function(){function t(t){this.value=t}return t.prototype.call=function(t,e){return e.subscribe(new Ee(t,this.value))},t}(),Ee=function(t){function e(e,n){var i=t.call(this,e)||this;return i.value=n,i}return i.a(e,t),e.prototype._next=function(t){this.destination.next(this.value)},e}(d.a);function ke(){return function(t){return t.lift(new Se)}}var Se=function(){function t(){}return t.prototype.call=function(t,e){return e.subscribe(new Pe(t))},t}(),Pe=function(t){function e(e){return t.call(this,e)||this}return i.a(e,t),e.prototype._next=function(t){this.destination.next(lt.a.createNext(t))},e.prototype._error=function(t){var e=this.destination;e.next(lt.a.createError(t)),e.complete()},e.prototype._complete=function(){var t=this.destination;t.next(lt.a.createComplete()),t.complete()},e}(d.a);function Oe(t,e){var n=!1;return arguments.length>=2&&(n=!0),function(i){return i.lift(new Te(t,e,n))}}var Te=function(){function t(t,e,n){void 0===n&&(n=!1),this.accumulator=t,this.seed=e,this.hasSeed=n}return t.prototype.call=function(t,e){return e.subscribe(new je(t,this.accumulator,this.seed,this.hasSeed))},t}(),je=function(t){function e(e,n,i,r){var o=t.call(this,e)||this;return o.accumulator=n,o._seed=i,o.hasSeed=r,o.index=0,o}return i.a(e,t),Object.defineProperty(e.prototype,"seed",{get:function(){return this._seed},set:function(t){this.hasSeed=!0,this._seed=t},enumerable:!0,configurable:!0}),e.prototype._next=function(t){if(this.hasSeed)return this._tryNext(t);this.seed=t,this.destination.next(t)},e.prototype._tryNext=function(t){var e,n=this.index++;try{e=this.accumulator(this.seed,t,n)}catch(t){this.destination.error(t)}this.seed=e,this.destination.next(e)},e}(d.a),Le=n(42);function Ie(t,e){return arguments.length>=2?function(n){return Object(Le.a)(Oe(t,e),Ae(1),st(e))(n)}:function(e){return Object(Le.a)(Oe((function(e,n,i){return t(e,n,i+1)})),Ae(1))(e)}}function ze(t){return Ie("function"==typeof t?function(e,n){return t(e,n)>0?e:n}:function(t,e){return t>e?t:e})}var Me=n(80);function De(){for(var t=[],e=0;e0?this._next(t.shift()):0===this.active&&this.hasCompleted&&(!1===this.hasValue&&this.destination.next(this.acc),this.destination.complete())},e}(r.b);function Fe(t){return Ie("function"==typeof t?function(e,n){return t(e,n)<0?e:n}:function(t,e){return t-1&&(this.count=n-1),e.subscribe(this._unsubscribeAndRecycle())}},e}(d.a);function _n(t){return function(e){return e.lift(new yn(t))}}var yn=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){return e.subscribe(new An(t,this.notifier,e))},t}(),An=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.notifier=n,r.source=i,r.sourceIsBeingSubscribedTo=!0,r}return i.a(e,t),e.prototype.notifyNext=function(){this.sourceIsBeingSubscribedTo=!0,this.source.subscribe(this)},e.prototype.notifyComplete=function(){if(!1===this.sourceIsBeingSubscribedTo)return t.prototype.complete.call(this)},e.prototype.complete=function(){if(this.sourceIsBeingSubscribedTo=!1,!this.isStopped){if(this.retries||this.subscribeToRetries(),!this.retriesSubscription||this.retriesSubscription.closed)return t.prototype.complete.call(this);this._unsubscribeAndRecycle(),this.notifications.next(void 0)}},e.prototype._unsubscribe=function(){var t=this.notifications,e=this.retriesSubscription;t&&(t.unsubscribe(),this.notifications=void 0),e&&(e.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},e.prototype._unsubscribeAndRecycle=function(){var e=this._unsubscribe;return this._unsubscribe=null,t.prototype._unsubscribeAndRecycle.call(this),this._unsubscribe=e,this},e.prototype.subscribeToRetries=function(){var e;this.notifications=new on.a;try{e=(0,this.notifier)(this.notifications)}catch(e){return t.prototype.complete.call(this)}this.retries=e,this.retriesSubscription=Object(r.c)(e,new r.a(this))},e}(r.b);function gn(t){return void 0===t&&(t=-1),function(e){return e.lift(new xn(t,e))}}var xn=function(){function t(t,e){this.count=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Cn(t,this.count,this.source))},t}(),Cn=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.count=n,r.source=i,r}return i.a(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.source,i=this.count;if(0===i)return t.prototype.error.call(this,e);i>-1&&(this.count=i-1),n.subscribe(this._unsubscribeAndRecycle())}},e}(d.a);function wn(t){return function(e){return e.lift(new Bn(t,e))}}var Bn=function(){function t(t,e){this.notifier=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new En(t,this.notifier,this.source))},t}(),En=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.notifier=n,r.source=i,r}return i.a(e,t),e.prototype.error=function(e){if(!this.isStopped){var n=this.errors,i=this.retries,o=this.retriesSubscription;if(i)this.errors=void 0,this.retriesSubscription=void 0;else{n=new on.a;try{i=(0,this.notifier)(n)}catch(e){return t.prototype.error.call(this,e)}o=Object(r.c)(i,new r.a(this))}this._unsubscribeAndRecycle(),this.errors=n,this.retries=i,this.retriesSubscription=o,n.next(e)}},e.prototype._unsubscribe=function(){var t=this.errors,e=this.retriesSubscription;t&&(t.unsubscribe(),this.errors=void 0),e&&(e.unsubscribe(),this.retriesSubscription=void 0),this.retries=void 0},e.prototype.notifyNext=function(){var t=this._unsubscribe;this._unsubscribe=null,this._unsubscribeAndRecycle(),this._unsubscribe=t,this.source.subscribe(this)},e}(r.b),kn=n(49);function Sn(t){return function(e){return e.lift(new Pn(t))}}var Pn=function(){function t(t){this.notifier=t}return t.prototype.call=function(t,e){var n=new On(t),i=e.subscribe(n);return i.add(Object(r.c)(this.notifier,new r.a(n))),i},t}(),On=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e.hasValue=!1,e}return i.a(e,t),e.prototype._next=function(t){this.value=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.emitValue()},e.prototype.notifyComplete=function(){this.emitValue()},e.prototype.emitValue=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.value))},e}(r.b);function Tn(t,e){return void 0===e&&(e=u.a),function(n){return n.lift(new jn(t,e))}}var jn=function(){function t(t,e){this.period=t,this.scheduler=e}return t.prototype.call=function(t,e){return e.subscribe(new Ln(t,this.period,this.scheduler))},t}(),Ln=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.period=n,r.scheduler=i,r.hasValue=!1,r.add(i.schedule(In,n,{subscriber:r,period:n})),r}return i.a(e,t),e.prototype._next=function(t){this.lastValue=t,this.hasValue=!0},e.prototype.notifyNext=function(){this.hasValue&&(this.hasValue=!1,this.destination.next(this.lastValue))},e}(d.a);function In(t){var e=t.subscriber,n=t.period;e.notifyNext(),this.schedule(t,n)}function zn(t,e){return function(n){return n.lift(new Mn(t,e))}}var Mn=function(){function t(t,e){this.compareTo=t,this.comparator=e}return t.prototype.call=function(t,e){return e.subscribe(new Dn(t,this.compareTo,this.comparator))},t}(),Dn=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.compareTo=n,r.comparator=i,r._a=[],r._b=[],r._oneComplete=!1,r.destination.add(n.subscribe(new Nn(e,r))),r}return i.a(e,t),e.prototype._next=function(t){this._oneComplete&&0===this._b.length?this.emit(!1):(this._a.push(t),this.checkValues())},e.prototype._complete=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0,this.unsubscribe()},e.prototype.checkValues=function(){for(var t=this._a,e=this._b,n=this.comparator;t.length>0&&e.length>0;){var i=t.shift(),r=e.shift(),o=!1;try{o=n?n(i,r):i===r}catch(t){this.destination.error(t)}o||this.emit(!1)}},e.prototype.emit=function(t){var e=this.destination;e.next(t),e.complete()},e.prototype.nextB=function(t){this._oneComplete&&0===this._a.length?this.emit(!1):(this._b.push(t),this.checkValues())},e.prototype.completeB=function(){this._oneComplete?this.emit(0===this._a.length&&0===this._b.length):this._oneComplete=!0},e}(d.a),Nn=function(t){function e(e,n){var i=t.call(this,e)||this;return i.parent=n,i}return i.a(e,t),e.prototype._next=function(t){this.parent.nextB(t)},e.prototype._error=function(t){this.parent.error(t),this.unsubscribe()},e.prototype._complete=function(){this.parent.completeB(),this.unsubscribe()},e}(d.a);function Zn(){return new on.a}function Rn(){return function(t){return Object(kn.a)()(Ye(Zn)(t))}}function Vn(t,e,n){var i;return i=t&&"object"==typeof t?t:{bufferSize:t,windowTime:e,refCount:!1,scheduler:n},function(t){return t.lift(function(t){var e,n,i=t.bufferSize,r=void 0===i?Number.POSITIVE_INFINITY:i,o=t.windowTime,s=void 0===o?Number.POSITIVE_INFINITY:o,a=t.refCount,u=t.scheduler,c=0,l=!1,h=!1;return function(t){var i;c++,!e||l?(l=!1,e=new hn.a(r,s,u),i=e.subscribe(this),n=t.subscribe({next:function(t){e.next(t)},error:function(t){l=!0,e.error(t)},complete:function(){h=!0,n=void 0,e.complete()}}),h&&(n=void 0)):i=e.subscribe(this),this.add((function(){c--,i.unsubscribe(),i=void 0,n&&!h&&a&&0===c&&(n.unsubscribe(),n=void 0,e=void 0)}))}}(i))}}function Wn(t){return function(e){return e.lift(new Fn(t,e))}}var Fn=function(){function t(t,e){this.predicate=t,this.source=e}return t.prototype.call=function(t,e){return e.subscribe(new Hn(t,this.predicate,this.source))},t}(),Hn=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.predicate=n,r.source=i,r.seenValue=!1,r.index=0,r}return i.a(e,t),e.prototype.applySingleValue=function(t){this.seenValue?this.destination.error("Sequence contains more than one element"):(this.seenValue=!0,this.singleValue=t)},e.prototype._next=function(t){var e=this.index++;this.predicate?this.tryNext(t,e):this.applySingleValue(t)},e.prototype.tryNext=function(t,e){try{this.predicate(t,e,this.source)&&this.applySingleValue(t)}catch(t){this.destination.error(t)}},e.prototype._complete=function(){var t=this.destination;this.index>0?(t.next(this.seenValue?this.singleValue:void 0),t.complete()):t.error(new Lt.a)},e}(d.a);function Yn(t){return function(e){return e.lift(new Un(t))}}var Un=function(){function t(t){this.total=t}return t.prototype.call=function(t,e){return e.subscribe(new qn(t,this.total))},t}(),qn=function(t){function e(e,n){var i=t.call(this,e)||this;return i.total=n,i.count=0,i}return i.a(e,t),e.prototype._next=function(t){++this.count>this.total&&this.destination.next(t)},e}(d.a);function Gn(t){return function(e){return e.lift(new Kn(t))}}var Kn=function(){function t(t){if(this._skipCount=t,this._skipCount<0)throw new Tt.a}return t.prototype.call=function(t,e){return 0===this._skipCount?e.subscribe(new d.a(t)):e.subscribe(new Xn(t,this._skipCount))},t}(),Xn=function(t){function e(e,n){var i=t.call(this,e)||this;return i._skipCount=n,i._count=0,i._ring=new Array(n),i}return i.a(e,t),e.prototype._next=function(t){var e=this._skipCount,n=this._count++;if(n0?this.startWindowEvery:this.windowSize,n=this.destination,i=this.windowSize,r=this.windows,o=r.length,s=0;s=0&&a%e==0&&!this.closed&&r.shift().complete(),++this.count%e==0&&!this.closed){var u=new on.a;r.push(u),n.next(u)}},e.prototype._error=function(t){var e=this.windows;if(e)for(;e.length>0&&!this.closed;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){var t=this.windows;if(t)for(;t.length>0&&!this.closed;)t.shift().complete();this.destination.complete()},e.prototype._unsubscribe=function(){this.count=0,this.windows=null},e}(d.a);function $i(t){var e=u.a,n=null,i=Number.POSITIVE_INFINITY;return Object(y.a)(arguments[3])&&(e=arguments[3]),Object(y.a)(arguments[2])?e=arguments[2]:Object(oi.a)(arguments[2])&&(i=Number(arguments[2])),Object(y.a)(arguments[1])?e=arguments[1]:Object(oi.a)(arguments[1])&&(n=Number(arguments[1])),function(r){return r.lift(new Ji(t,n,i,e))}}var Ji=function(){function t(t,e,n,i){this.windowTimeSpan=t,this.windowCreationInterval=e,this.maxWindowSize=n,this.scheduler=i}return t.prototype.call=function(t,e){return e.subscribe(new er(t,this.windowTimeSpan,this.windowCreationInterval,this.maxWindowSize,this.scheduler))},t}(),tr=function(t){function e(){var e=null!==t&&t.apply(this,arguments)||this;return e._numberOfNextedValues=0,e}return i.a(e,t),e.prototype.next=function(e){this._numberOfNextedValues++,t.prototype.next.call(this,e)},Object.defineProperty(e.prototype,"numberOfNextedValues",{get:function(){return this._numberOfNextedValues},enumerable:!0,configurable:!0}),e}(on.a),er=function(t){function e(e,n,i,r,o){var s=t.call(this,e)||this;s.destination=e,s.windowTimeSpan=n,s.windowCreationInterval=i,s.maxWindowSize=r,s.scheduler=o,s.windows=[];var a=s.openWindow();if(null!==i&&i>=0){var u={subscriber:s,window:a,context:null},c={windowTimeSpan:n,windowCreationInterval:i,subscriber:s,scheduler:o};s.add(o.schedule(rr,n,u)),s.add(o.schedule(ir,i,c))}else{var l={subscriber:s,window:a,windowTimeSpan:n};s.add(o.schedule(nr,n,l))}return s}return i.a(e,t),e.prototype._next=function(t){for(var e=this.windows,n=e.length,i=0;i=this.maxWindowSize&&this.closeWindow(r))}},e.prototype._error=function(t){for(var e=this.windows;e.length>0;)e.shift().error(t);this.destination.error(t)},e.prototype._complete=function(){for(var t=this.windows;t.length>0;){var e=t.shift();e.closed||e.complete()}this.destination.complete()},e.prototype.openWindow=function(){var t=new tr;return this.windows.push(t),this.destination.next(t),t},e.prototype.closeWindow=function(t){t.complete();var e=this.windows;e.splice(e.indexOf(t),1)},e}(d.a);function nr(t){var e=t.subscriber,n=t.windowTimeSpan,i=t.window;i&&e.closeWindow(i),t.window=e.openWindow(),this.schedule(t,n)}function ir(t){var e=t.windowTimeSpan,n=t.subscriber,i=t.scheduler,r=t.windowCreationInterval,o=n.openWindow(),s={action:this,subscription:null},a={subscriber:n,window:o,context:s};s.subscription=i.schedule(rr,e,a),this.add(s.subscription),this.schedule(t,r)}function rr(t){var e=t.subscriber,n=t.window,i=t.context;i&&i.action&&i.subscription&&i.action.remove(i.subscription),e.closeWindow(n)}function or(t,e){return function(n){return n.lift(new sr(t,e))}}var sr=function(){function t(t,e){this.openings=t,this.closingSelector=e}return t.prototype.call=function(t,e){return e.subscribe(new ar(t,this.openings,this.closingSelector))},t}(),ar=function(t){function e(e,n,i){var r=t.call(this,e)||this;return r.openings=n,r.closingSelector=i,r.contexts=[],r.add(r.openSubscription=Object(S.a)(r,n,n)),r}return i.a(e,t),e.prototype._next=function(t){var e=this.contexts;if(e)for(var n=e.length,i=0;i0){var r=i.indexOf(n);-1!==r&&i.splice(r,1)}},e.prototype.notifyComplete=function(){},e.prototype._next=function(t){if(0===this.toRespond.length){var e=[t].concat(this.values);this.project?this._tryProject(e):this.destination.next(e)}},e.prototype._tryProject=function(t){var e;try{e=this.project.apply(this,t)}catch(t){return void this.destination.error(t)}this.destination.next(e)},e}(P.a),dr=n(55);function mr(){for(var t=[],e=0;e0?t.prototype.requestAsyncId.call(this,e,n,i):(e.actions.push(this),e.scheduled||(e.scheduled=requestAnimationFrame((function(){return e.flush(null)}))))},e.prototype.recycleAsyncId=function(e,n,i){if(void 0===i&&(i=0),null!==i&&i>0||null===i&&this.delay>0)return t.prototype.recycleAsyncId.call(this,e,n,i);0===e.actions.length&&(cancelAnimationFrame(n),e.scheduled=void 0)},e}(m.a),b=n(31),_=new(function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return d.a(e,t),e.prototype.flush=function(t){this.active=!0,this.scheduled=void 0;var e,n=this.actions,i=-1,r=n.length;t=t||n.shift();do{if(e=t.execute(t.state,t.delay))break}while(++ie.index?1:-1:t.delay>e.delay?1:-1},e}(m.a),x=n(63),C=n(4),w=n(1),B=n(19),E=n(42),k=n(21),S=n(16);function P(t){return!!t&&(t instanceof i.a||"function"==typeof t.lift&&"function"==typeof t.subscribe)}var O=n(25),T=n(28),j=n(23),L=n(45),I=n(78),z=n(10),M=n(57),D=n(7),N=n(11);function Z(t,e,n){if(e){if(!Object(N.a)(e))return function(){for(var i=[],r=0;r1?i.next(Array.prototype.slice.call(arguments)):i.next(t)}),i,n)}))}function nt(t,e,n){return n?nt(t,e).pipe(Object(z.a)((function(t){return Object(D.a)(t)?n.apply(void 0,t):n(t)}))):new i.a((function(n){var i,r=function(){for(var t=[],e=0;e=e){i.complete();break}if(i.next(o++),i.closed)break}}))}function xt(t){var e=t.start,n=t.index,i=t.count,r=t.subscriber;n>=i?r.complete():(r.next(e),r.closed||(t.index=n+1,t.start=e+1,this.schedule(t)))}var Ct=n(51),wt=n(82);function Bt(t,e){return new i.a((function(n){var i,r;try{i=t()}catch(t){return void n.error(t)}try{r=e(i)}catch(t){return void n.error(t)}var o=(r?Object(Q.a)(r):K.a).subscribe(n);return function(){o.unsubscribe(),i&&i.unsubscribe()}}))}var Et=n(55),kt=n(83),St=n(15)},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,"#watch {\n color: #fff;\n}","",{version:3,sources:["webpack://./client/src/main.css"],names:[],mappings:"AAAA;EACE,WAAW;AACb",sourcesContent:["#watch {\n color: #fff;\n}"],sourceRoot:""}]),e.a=s},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,"#home {\n font-style: italic;\n}","",{version:3,sources:["webpack://./client/src/js/pages/homePage/homePage.css"],names:[],mappings:"AAAA;EACE,kBAAkB;AACpB",sourcesContent:["#home {\n font-style: italic;\n}"],sourceRoot:""}]),e.a=s},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,"#map {\n width: 200px;\n height: 200px;\n float: left;\n position: absolute;\n}","",{version:3,sources:["webpack://./client/src/map.css"],names:[],mappings:"AAAA;IACI,YAAY;IACZ,aAAa;IACb,WAAW;IACX,kBAAkB;AACtB",sourcesContent:["#map {\n width: 200px;\n height: 200px;\n float: left;\n position: absolute;\n}"],sourceRoot:""}]),e.a=s},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,"[data-selected=true]{\n color: mediumseagreen;\n}\n","",{version:3,sources:["webpack://./client/src/menu.css"],names:[],mappings:"AAAA;EACE,qBAAqB;AACvB",sourcesContent:["[data-selected=true]{\n color: mediumseagreen;\n}\n"],sourceRoot:""}]),e.a=s},function(t,e,n){t.exports=n.p+"a6137456ed160d7606981aa57c559898.png"},function(t,e,n){t.exports=n.p+"4f0283c6ce28e888000e978e537a6a56.png"},function(t,e,n){t.exports=n.p+"2273e3d8ad9264b7daa5bdbf8e6b47f8.png"},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o),a=n(131),u=n(132),c=n(133),l=n(134),h=n(135),f=s()(r.a);f.i(a.a),f.i(u.a),f.i(c.a),f.i(l.a),f.i(h.a),f.push([t.i,"","",{version:3,sources:[],names:[],mappings:"",sourceRoot:""}]),e.a=f},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,"/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}","",{version:3,sources:["webpack://./framework/styles/normalize.min.css"],names:[],mappings:"AAAA,2DAA2D,CAAC,KAAK,sBAAsB,CAAC,yBAAyB,CAAC,6BAA6B,CAAC,KAAK,QAAQ,CAAC,2FAA2F,aAAa,CAAC,4BAA4B,oBAAoB,CAAC,uBAAuB,CAAC,sBAAsB,YAAY,CAAC,QAAQ,CAAC,kBAAkB,YAAY,CAAC,EAAE,4BAA4B,CAAC,iBAAiB,SAAS,CAAC,YAAY,wBAAwB,CAAC,SAAS,eAAe,CAAC,IAAI,iBAAiB,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,KAAK,eAAe,CAAC,UAAU,CAAC,MAAM,aAAa,CAAC,QAAQ,aAAa,CAAC,aAAa,CAAC,iBAAiB,CAAC,uBAAuB,CAAC,IAAI,SAAS,CAAC,IAAI,aAAa,CAAC,IAAI,QAAQ,CAAC,eAAe,eAAe,CAAC,OAAO,eAAe,CAAC,GAAG,2BAA2B,CAAC,sBAAsB,CAAC,QAAQ,CAAC,IAAI,aAAa,CAAC,kBAAkB,+BAA+B,CAAC,aAAa,CAAC,sCAAsC,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,gBAAgB,CAAC,cAAc,mBAAmB,CAAC,oEAAoE,yBAAyB,CAAC,cAAc,CAAC,sCAAsC,cAAc,CAAC,iDAAiD,QAAQ,CAAC,SAAS,CAAC,MAAM,kBAAkB,CAAC,uCAAuC,qBAAqB,CAAC,SAAS,CAAC,4FAA4F,WAAW,CAAC,mBAAmB,4BAA4B,CAAC,2BAA2B,CAAC,8BAA8B,CAAC,sBAAsB,CAAC,+FAA+F,uBAAuB,CAAC,SAAS,uBAAuB,CAAC,YAAY,CAAC,0BAA0B,CAAC,OAAO,QAAQ,CAAC,SAAS,CAAC,SAAS,aAAa,CAAC,SAAS,eAAe,CAAC,MAAM,wBAAwB,CAAC,gBAAgB,CAAC,MAAM,SAAS",sourcesContent:["/*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}"],sourceRoot:""}]),e.a=s},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,'#left {\n width: 100%;\n padding: 0 5%;\n font-family: "Trebuchet MS", OpenSans, Helvetica, Arial, sans-serif;\n}\n\n#left h1 {\n font-family: "Trebuchet MS", OpenSans-Light, Helvetica, Arial, sans-serif;\n font-weight: normal;\n font-size: 42pt;\n color: #5e5e5e;\n}\n\n#left p {\n font-size: 16pt;\n color: #999999;\n}\n\n#left .notification-form {\n background: lightgrey;\n padding: 20px;\n}\n\n#left .notification-form label {\n display: block;\n font-weight: bold;\n color: black;\n}\n\n#left .notification-form p {\n color: black;\n font-size: 30px;\n margin: 0;\n}\n\n#right {\n margin-top: 60px;\n width: 100%;\n}\n',"",{version:3,sources:["webpack://./framework/styles/layout.css"],names:[],mappings:"AAAA;EACE,WAAW;EACX,aAAa;EACb,mEAAmE;AACrE;;AAEA;IACI,yEAAyE;IACzE,mBAAmB;IACnB,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,eAAe;IACf,cAAc;AAClB;;AAEA;IACI,qBAAqB;IACrB,aAAa;AACjB;;AAEA;MACM,cAAc;MACd,iBAAiB;MACjB,YAAY;AAClB;;AAEA;MACM,YAAY;MACZ,eAAe;MACf,SAAS;AACf;;AAEA;EACE,gBAAgB;EAChB,WAAW;AACb",sourcesContent:['#left {\n width: 100%;\n padding: 0 5%;\n font-family: "Trebuchet MS", OpenSans, Helvetica, Arial, sans-serif;\n}\n\n#left h1 {\n font-family: "Trebuchet MS", OpenSans-Light, Helvetica, Arial, sans-serif;\n font-weight: normal;\n font-size: 42pt;\n color: #5e5e5e;\n}\n\n#left p {\n font-size: 16pt;\n color: #999999;\n}\n\n#left .notification-form {\n background: lightgrey;\n padding: 20px;\n}\n\n#left .notification-form label {\n display: block;\n font-weight: bold;\n color: black;\n}\n\n#left .notification-form p {\n color: black;\n font-size: 30px;\n margin: 0;\n}\n\n#right {\n margin-top: 60px;\n width: 100%;\n}\n'],sourceRoot:""}]),e.a=s},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,".screen{\n padding-left: 1.5em;\n font-family: OpenSans-Light;\n font-size: 13px;\n letter-spacing: 1px;\n font-weight: normal;\n}\n\n#watch-face{\n height: 240px;\n position: absolute;\n width: 240px;\n top: 30px;\n left: 20px;\n display: block;\n overflow: hidden;\n}\n\n#watch{\n background-color: #3F484A;\n display: inline-block;\n vertical-align: top;\n}\n\n.watch{\n position:relative;\n margin:0 auto;\n width:320px;\n padding:7.3em 0\n}\n\n.power {\n cursor: pointer;\n}\n\n.power:nth-child(1){\n position:absolute;\n right:-1.4em;\n top: 7.3em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n}\n\n.power:nth-child(2){\n position:absolute;\n left:-1.4em;\n top: 7.3em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n transform: rotateY(180deg);\n}\n\n.power:nth-child(3){\n position:absolute;\n left: 8.8em;\n bottom:-2.7em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n transform: rotateZ(90deg);\n}\n\n.power:nth-child(4){\n position:absolute;\n left: 8.8em;\n top: -2.7em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n transform: rotateZ(90deg) rotateY(180deg);\n}\n\n.case{\n position:relative;\n z-index:2;\n background:#030303;\n width:300px;\n height:300px;\n border-radius:4em;\n background: #3F484A; /* Dial colour */\n border: 10px solid silver; /* Face border */\n box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.5), 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n\n\n.strap{\n position:absolute;\n z-index:1;\n left:4.4em;\n width:11.2em;\n height:7.6em;\n background: dimgrey;\n border-radius: 10px 10px 0 0;\n}\n\n.strap.strap-top{\n top:0;\n}\n\n.strap.strap-bottom{\n bottom:0;\n transform: rotate(180deg);\n}\n\n.resizer{\n position:absolute;\n top:1em;\n left:1em;\n width:230px;\n}\n","",{version:3,sources:["webpack://./framework/styles/watch.css"],names:[],mappings:"AAAA;EACE,mBAAmB;EACnB,2BAA2B;EAC3B,eAAe;EACf,mBAAmB;EACnB,mBAAmB;AACrB;;AAEA;EACE,aAAa;EACb,kBAAkB;EAClB,YAAY;EACZ,SAAS;EACT,UAAU;EACV,cAAc;EACd,gBAAgB;AAClB;;AAEA;EACE,yBAAyB;EACzB,qBAAqB;EACrB,mBAAmB;AACrB;;AAEA;EACE,iBAAiB;EACjB,aAAa;EACb,WAAW;EACX;AACF;;AAEA;EACE,eAAe;AACjB;;AAEA;EACE,iBAAiB;EACjB,YAAY;EACZ,UAAU;EACV,YAAY;EACZ,WAAW;EACX,kBAAkB;AACpB;;AAEA;EACE,iBAAiB;EACjB,WAAW;EACX,UAAU;EACV,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,0BAA0B;AAC5B;;AAEA;EACE,iBAAiB;EACjB,WAAW;EACX,aAAa;EACb,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,yBAAyB;AAC3B;;AAEA;EACE,iBAAiB;EACjB,WAAW;EACX,WAAW;EACX,YAAY;EACZ,WAAW;EACX,kBAAkB;EAClB,yCAAyC;AAC3C;;AAEA;EACE,iBAAiB;EACjB,SAAS;EACT,kBAAkB;EAClB,WAAW;EACX,YAAY;EACZ,iBAAiB;EACjB,mBAAmB,EAAE,gBAAgB;EACrC,yBAAyB,EAAE,gBAAgB;EAC3C,6EAA6E;AAC/E;;;AAGA;EACE,iBAAiB;EACjB,SAAS;EACT,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,mBAAmB;EACnB,4BAA4B;AAC9B;;AAEA;EACE,KAAK;AACP;;AAEA;EACE,QAAQ;EACR,yBAAyB;AAC3B;;AAEA;EACE,iBAAiB;EACjB,OAAO;EACP,QAAQ;EACR,WAAW;AACb",sourcesContent:[".screen{\n padding-left: 1.5em;\n font-family: OpenSans-Light;\n font-size: 13px;\n letter-spacing: 1px;\n font-weight: normal;\n}\n\n#watch-face{\n height: 240px;\n position: absolute;\n width: 240px;\n top: 30px;\n left: 20px;\n display: block;\n overflow: hidden;\n}\n\n#watch{\n background-color: #3F484A;\n display: inline-block;\n vertical-align: top;\n}\n\n.watch{\n position:relative;\n margin:0 auto;\n width:320px;\n padding:7.3em 0\n}\n\n.power {\n cursor: pointer;\n}\n\n.power:nth-child(1){\n position:absolute;\n right:-1.4em;\n top: 7.3em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n}\n\n.power:nth-child(2){\n position:absolute;\n left:-1.4em;\n top: 7.3em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n transform: rotateY(180deg);\n}\n\n.power:nth-child(3){\n position:absolute;\n left: 8.8em;\n bottom:-2.7em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n transform: rotateZ(90deg);\n}\n\n.power:nth-child(4){\n position:absolute;\n left: 8.8em;\n top: -2.7em;\n height:3.5em;\n width:0.8em;\n background:#e4e4e4;\n transform: rotateZ(90deg) rotateY(180deg);\n}\n\n.case{\n position:relative;\n z-index:2;\n background:#030303;\n width:300px;\n height:300px;\n border-radius:4em;\n background: #3F484A; /* Dial colour */\n border: 10px solid silver; /* Face border */\n box-shadow: inset 0 0 15px rgba(0, 0, 0, 0.5), 1px 1px 2px rgba(0, 0, 0, 0.3);\n}\n\n\n.strap{\n position:absolute;\n z-index:1;\n left:4.4em;\n width:11.2em;\n height:7.6em;\n background: dimgrey;\n border-radius: 10px 10px 0 0;\n}\n\n.strap.strap-top{\n top:0;\n}\n\n.strap.strap-bottom{\n bottom:0;\n transform: rotate(180deg);\n}\n\n.resizer{\n position:absolute;\n top:1em;\n left:1em;\n width:230px;\n}\n"],sourceRoot:""}]),e.a=s},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,"#notification-container {\n background-color: black;\n color: white;\n position: absolute;\n height: 160px;\n width: 160px;\n top: 50px;\n left: 50px;\n opacity: 0.9;\n z-index: 100;\n padding: 20px;\n}\n\n#notification-message-display {\n height: 70%;\n}\n\n#notification-buttons {\n display: flex;\n}\n\n.notification-button {\n flex: 1;\n cursor: default;\n text-align: center;\n}\n\n#notification-button-right {\n text-align: right\n}\n\n#notification-button-left {\n text-align: left\n}\n","",{version:3,sources:["webpack://./framework/styles/notification.css"],names:[],mappings:"AAAA;EACE,uBAAuB;EACvB,YAAY;EACZ,kBAAkB;EAClB,aAAa;EACb,YAAY;EACZ,SAAS;EACT,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,aAAa;AACf;;AAEA;EACE,WAAW;AACb;;AAEA;EACE,aAAa;AACf;;AAEA;EACE,OAAO;EACP,eAAe;EACf,kBAAkB;AACpB;;AAEA;CACC;AACD;;AAEA;CACC;AACD",sourcesContent:["#notification-container {\n background-color: black;\n color: white;\n position: absolute;\n height: 160px;\n width: 160px;\n top: 50px;\n left: 50px;\n opacity: 0.9;\n z-index: 100;\n padding: 20px;\n}\n\n#notification-message-display {\n height: 70%;\n}\n\n#notification-buttons {\n display: flex;\n}\n\n.notification-button {\n flex: 1;\n cursor: default;\n text-align: center;\n}\n\n#notification-button-right {\n text-align: right\n}\n\n#notification-button-left {\n text-align: left\n}\n"],sourceRoot:""}]),e.a=s},function(t,e,n){"use strict";var i=n(8),r=n.n(i),o=n(9),s=n.n(o)()(r.a);s.push([t.i,".page-with-menu .menu {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n\n.page-with-menu li {\n padding: 4px;\n}\n\n.page-with-menu .selected {\n background-color: red;\n}\n","",{version:3,sources:["webpack://./framework/styles/menu.css"],names:[],mappings:"AAAA;IACI,SAAS;IACT,UAAU;IACV,qBAAqB;AACzB;;AAEA;MACM,YAAY;AAClB;;AAEA;MACM,qBAAqB;AAC3B",sourcesContent:[".page-with-menu .menu {\n margin: 0;\n padding: 0;\n list-style-type: none;\n}\n\n.page-with-menu li {\n padding: 4px;\n}\n\n.page-with-menu .selected {\n background-color: red;\n}\n"],sourceRoot:""}]),e.a=s},function(t,e,n){t.exports=n.p+"OpenSans-Regular.ttf"},function(t,e,n){t.exports=n.p+"OpenSans-Light.ttf"},function(t,e,n){"use strict";n(139),n(142),new(0,n(24).App)(n(267),n(277)).defineCustomElements().navigateToLocation(window.location)},function(t,e,n){var i=n(140);"string"==typeof i&&(i=[[t.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(64)(i,r);i.locals&&(t.exports=i.locals)},function(t,e,n){"use strict";n.r(e);var i=n(8),r=n.n(i),o=n(9),s=n.n(o),a=n(123),u=n(124),c=n(125),l=n(126),h=s()(r.a);h.i(a.a),h.i(u.a),h.i(c.a),h.i(l.a),h.push([t.i,"\n","",{version:3,sources:[],names:[],mappings:"",sourceRoot:""}]),e.default=h},function(t,e){t.exports=function(t){var e="undefined"!=typeof window&&window.location;if(!e)throw new Error("fixUrls requires window.location");if(!t||"string"!=typeof t)return t;var n=e.protocol+"//"+e.host,i=n+e.pathname.replace(/\/[^\/]*$/,"/");return t.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi,(function(t,e){var r,o=e.trim().replace(/^"(.*)"$/,(function(t,e){return e})).replace(/^'(.*)'$/,(function(t,e){return e}));return/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(o)?t:(r=0===o.indexOf("//")?o:0===o.indexOf("/")?n+o:i+o.replace(/^\.\//,""),"url("+JSON.stringify(r)+")")}))}},function(t,e,n){"use strict";var i=n(24).StorageHub,r=n(266);i.setJSON(r),i.setData("hello","world")},function(t,e,n){"use strict";var i,r="object"==typeof Reflect?Reflect:null,o=r&&"function"==typeof r.apply?r.apply:function(t,e,n){return Function.prototype.apply.call(t,e,n)};i=r&&"function"==typeof r.ownKeys?r.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var s=Number.isNaN||function(t){return t!=t};function a(){a.init.call(this)}t.exports=a,t.exports.once=function(t,e){return new Promise((function(n,i){function r(){void 0!==o&&t.removeListener("error",o),n([].slice.call(arguments))}var o;"error"!==e&&(o=function(n){t.removeListener(e,r),i(n)},t.once("error",o)),t.once(e,r)}))},a.EventEmitter=a,a.prototype._events=void 0,a.prototype._eventsCount=0,a.prototype._maxListeners=void 0;var u=10;function c(t){if("function"!=typeof t)throw new TypeError('The "listener" argument must be of type Function. Received type '+typeof t)}function l(t){return void 0===t._maxListeners?a.defaultMaxListeners:t._maxListeners}function h(t,e,n,i){var r,o,s,a;if(c(n),void 0===(o=t._events)?(o=t._events=Object.create(null),t._eventsCount=0):(void 0!==o.newListener&&(t.emit("newListener",e,n.listener?n.listener:n),o=t._events),s=o[e]),void 0===s)s=o[e]=n,++t._eventsCount;else if("function"==typeof s?s=o[e]=i?[n,s]:[s,n]:i?s.unshift(n):s.push(n),(r=l(t))>0&&s.length>r&&!s.warned){s.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+s.length+" "+String(e)+" listeners added. Use emitter.setMaxListeners() to increase limit");u.name="MaxListenersExceededWarning",u.emitter=t,u.type=e,u.count=s.length,a=u,console&&console.warn&&console.warn(a)}return t}function f(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired=!0,0===arguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(t,e,n){var i={fired:!1,wrapFn:void 0,target:t,type:e,listener:n},r=f.bind(i);return r.listener=n,i.wrapFn=r,r}function d(t,e,n){var i=t._events;if(void 0===i)return[];var r=i[e];return void 0===r?[]:"function"==typeof r?n?[r.listener||r]:[r]:n?function(t){for(var e=new Array(t.length),n=0;n0&&(s=e[0]),s instanceof Error)throw s;var a=new Error("Unhandled error."+(s?" ("+s.message+")":""));throw a.context=s,a}var u=r[t];if(void 0===u)return!1;if("function"==typeof u)o(u,this,e);else{var c=u.length,l=v(u,c);for(n=0;n=0;o--)if(n[o]===e||n[o].listener===e){s=n[o].listener,r=o;break}if(r<0)return this;0===r?n.shift():function(t,e){for(;e+1=0;i--)this.removeListener(t,e[i]);return this},a.prototype.listeners=function(t){return d(this,t,!0)},a.prototype.rawListeners=function(t){return d(this,t,!1)},a.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):m.call(t,e)},a.prototype.listenerCount=m,a.prototype.eventNames=function(){return this._eventsCount>0?i(this._events):[]}},function(t,e,n){var i=n(47);t.exports=(i.default||i).template({compiler:[8,">= 4.3.0"],main:function(t,e,n,i,r){var o,s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return"Base notification: "+t.escapeExpression("function"==typeof(o=null!=(o=s(n,"message")||(null!=e?s(e,"message"):e))?o:t.hooks.helperMissing)?o.call(null!=e?e:t.nullContext||{},{name:"message",hash:{},data:r,loc:{start:{line:1,column:19},end:{line:1,column:30}}}):o)+"\n"},useData:!0})},function(t,e,n){"use strict";function i(t){return t&&t.__esModule?t:{default:t}}function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}e.__esModule=!0;var o=r(n(98)),s=i(n(156)),a=i(n(41)),u=r(n(27)),c=r(n(157)),l=i(n(159));function h(){var t=new o.HandlebarsEnvironment;return u.extend(t,o),t.SafeString=s.default,t.Exception=a.default,t.Utils=u,t.escapeExpression=u.escapeExpression,t.VM=c,t.template=function(e){return c.template(e,t)},t}var f=h();f.create=h,l.default(f),f.default=f,e.default=f,t.exports=e.default},function(t,e,n){"use strict";e.__esModule=!0;var i=n(27);e.default=function(t){t.registerHelper("blockHelperMissing",(function(e,n){var r=n.inverse,o=n.fn;if(!0===e)return o(this);if(!1===e||null==e)return r(this);if(i.isArray(e))return e.length>0?(n.ids&&(n.ids=[n.name]),t.helpers.each(e,n)):r(this);if(n.data&&n.ids){var s=i.createFrame(n.data);s.contextPath=i.appendContextPath(n.data.contextPath,n.name),n={data:s}}return o(e,n)}))},t.exports=e.default},function(t,e,n){"use strict";(function(i){e.__esModule=!0;var r,o=n(27),s=n(41),a=(r=s)&&r.__esModule?r:{default:r};e.default=function(t){t.registerHelper("each",(function(t,e){if(!e)throw new a.default("Must pass iterator to #each");var n,r=e.fn,s=e.inverse,u=0,c="",l=void 0,h=void 0;function f(e,n,i){l&&(l.key=e,l.index=n,l.first=0===n,l.last=!!i,h&&(l.contextPath=h+e)),c+=r(t[e],{data:l,blockParams:o.blockParams([t[e],e],[h+e,null])})}if(e.data&&e.ids&&(h=o.appendContextPath(e.data.contextPath,e.ids[0])+"."),o.isFunction(t)&&(t=t.call(this)),e.data&&(l=o.createFrame(e.data)),t&&"object"==typeof t)if(o.isArray(t))for(var p=t.length;u=a.LAST_COMPATIBLE_COMPILER_REVISION&&e<=a.COMPILER_REVISION)return;if(e1&&void 0!==arguments[1]?arguments[1]:{},n=t.hash.slice(1);""===n&&(n="/"),this.renderPath(n,e)}},{key:"setupRxjsListeners",value:function(){this.watchMouseDown$=m(this.watchContainer,"mousedown").pipe(f()),this.watchMouseUp$=m(this.watchContainer,"mouseup").pipe(f()),this.watchKeyDown$=m(this.wholePage,"keydown").pipe(p()),this.watchKeyUp$=m(this.wholePage,"keyup").pipe(p()),this.mergeEvents(),this.subscribeToEvents()}},{key:"mergeEvents",value:function(){this.watchDown$=this.watchMouseDown$.pipe(_(this.watchKeyDown$),d()),this.watchUp$=this.watchMouseUp$.pipe(_(this.watchKeyUp$),d())}},{key:"testClick",value:function(){for(var t=this,e=arguments.length,n=new Array(e),i=0;i750&&(r="".concat(r,"Hold"),e={timeTaken:i});var o=this.currentView.constructor.name,s=this.currentView[r];s?(console.log("Executing '".concat(r,"()' on ").concat(o)),s.bind(this.currentView)(e)):console.error("".concat(o," needs '").concat(r,"()' to be defined."))}},{key:"handleDoubleClick",value:function(t){var e=t.target,n=(t.timeTaken,"".concat(e,"ButtonEventDoubleClick")),i=this.currentView.constructor.name,r=this.currentView[n];r?(console.log("Executing '".concat(n,"()' on ").concat(i)),r.bind(this.currentView)(void 0)):console.error("".concat(i," needs '").concat(n,"()' to be defined."))}},{key:"navigate",value:function(t){window.location.hash=t}},{key:"render",value:function(t,e,n){this.prevProps=n;var i=new e(s(s({},n),{},{navigate:this.navigate,watchFace:this.watchFace}));this.currentView=i,i.pageWillLoad(),t.innerHTML=i.render(),i.pageDidLoad()}},{key:"renderPath",value:function(t,e){var n=this.routes[t]||this.routes[404];this.render(this.watchFace,n,e)}}])&&u(e.prototype,n),i&&u(e,i),t}()},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var r,o=(r=n(162))&&r.__esModule?r:{default:r};function s(t,e){for(var n=0;nOpenStreetMap contributors'}).addTo(this.map)}}])&&s(i.prototype,r),u&&s(i,u),p}(u(HTMLElement));e.default=p},function(t,e,n){ /* @preserve * Leaflet 1.7.1, a JS library for interactive maps. http://leafletjs.com * (c) 2010-2019 Vladimir Agafonkin, (c) 2010-2011 CloudMade */ -!function(t){"use strict";function n(t){var n,e,r,i;for(e=1,r=arguments.length;e0?Math.floor(t):Math.ceil(t)};function S(t,n,e){return t instanceof P?t:v(t)?new P(t[0],t[1]):null==t?t:"object"==typeof t&&"x"in t&&"y"in t?new P(t.x,t.y):new P(t,n,e)}function z(t,n){if(t)for(var e=n?[t,n]:t,r=0,i=e.length;r=this.min.x&&e.x<=this.max.x&&n.y>=this.min.y&&e.y<=this.max.y},intersects:function(t){t=M(t);var n=this.min,e=this.max,r=t.min,i=t.max,o=i.x>=n.x&&r.x<=e.x,a=i.y>=n.y&&r.y<=e.y;return o&&a},overlaps:function(t){t=M(t);var n=this.min,e=this.max,r=t.min,i=t.max,o=i.x>n.x&&r.xn.y&&r.y=r.lat&&e.lat<=i.lat&&n.lng>=r.lng&&e.lng<=i.lng},intersects:function(t){t=D(t);var n=this._southWest,e=this._northEast,r=t.getSouthWest(),i=t.getNorthEast(),o=i.lat>=n.lat&&r.lat<=e.lat,a=i.lng>=n.lng&&r.lng<=e.lng;return o&&a},overlaps:function(t){t=D(t);var n=this._southWest,e=this._northEast,r=t.getSouthWest(),i=t.getNorthEast(),o=i.lat>n.lat&&r.latn.lng&&r.lng1,Bt=function(){var t=!1;try{var n=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",u,n),window.removeEventListener("testPassiveEventSupport",u,n)}catch(t){}return t}(),Ot=!!document.createElement("canvas").getContext,jt=!(!document.createElementNS||!G("svg").createSVGRect),kt=!jt&&function(){try{var t=document.createElement("div");t.innerHTML='';var n=t.firstChild;return n.style.behavior="url(#default#VML)",n&&"object"==typeof n.adj}catch(t){return!1}}();function Et(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var Pt={ie:Q,ielt9:$,edge:J,webkit:tt,android:nt,android23:et,androidStock:it,opera:ot,chrome:at,gecko:st,safari:ut,phantom:ct,opera12:lt,win:ft,ie3d:ht,webkit3d:dt,gecko3d:pt,any3d:mt,mobile:vt,mobileWebkit:bt,mobileWebkit3d:At,msPointer:_t,pointer:gt,touch:yt,mobileOpera:Ct,mobileGecko:xt,retina:wt,passiveEvents:Bt,canvas:Ot,svg:jt,vml:kt},Lt=_t?"MSPointerDown":"pointerdown",Tt=_t?"MSPointerMove":"pointermove",St=_t?"MSPointerUp":"pointerup",zt=_t?"MSPointerCancel":"pointercancel",Mt={},It=!1;function Dt(t,n,e,i){return"touchstart"===n?function(t,n,e){var i=r((function(t){t.MSPOINTER_TYPE_TOUCH&&t.pointerType===t.MSPOINTER_TYPE_TOUCH&&Mn(t),Wt(t,n)}));t["_leaflet_touchstart"+e]=i,t.addEventListener(Lt,i,!1),It||(document.addEventListener(Lt,Zt,!0),document.addEventListener(Tt,Rt,!0),document.addEventListener(St,Nt,!0),document.addEventListener(zt,Nt,!0),It=!0)}(t,e,i):"touchmove"===n?function(t,n,e){var r=function(t){t.pointerType===(t.MSPOINTER_TYPE_MOUSE||"mouse")&&0===t.buttons||Wt(t,n)};t["_leaflet_touchmove"+e]=r,t.addEventListener(Tt,r,!1)}(t,e,i):"touchend"===n&&function(t,n,e){var r=function(t){Wt(t,n)};t["_leaflet_touchend"+e]=r,t.addEventListener(St,r,!1),t.addEventListener(zt,r,!1)}(t,e,i),this}function Zt(t){Mt[t.pointerId]=t}function Rt(t){Mt[t.pointerId]&&(Mt[t.pointerId]=t)}function Nt(t){delete Mt[t.pointerId]}function Wt(t,n){for(var e in t.touches=[],Mt)t.touches.push(Mt[e]);t.changedTouches=[t],n(t)}var Ft,Ht,Ut,Yt,qt,Vt=_t?"MSPointerDown":gt?"pointerdown":"touchstart",Gt=_t?"MSPointerUp":gt?"pointerup":"touchend",Kt="_leaflet_",Xt=dn(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),Qt=dn(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),$t="webkitTransition"===Qt||"OTransition"===Qt?Qt+"End":"transitionend";function Jt(t){return"string"==typeof t?document.getElementById(t):t}function tn(t,n){var e=t.style[n]||t.currentStyle&&t.currentStyle[n];if((!e||"auto"===e)&&document.defaultView){var r=document.defaultView.getComputedStyle(t,null);e=r?r[n]:null}return"auto"===e?null:e}function nn(t,n,e){var r=document.createElement(t);return r.className=n||"",e&&e.appendChild(r),r}function en(t){var n=t.parentNode;n&&n.removeChild(t)}function rn(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function on(t){var n=t.parentNode;n&&n.lastChild!==t&&n.appendChild(t)}function an(t){var n=t.parentNode;n&&n.firstChild!==t&&n.insertBefore(t,n.firstChild)}function sn(t,n){if(void 0!==t.classList)return t.classList.contains(n);var e=fn(t);return e.length>0&&new RegExp("(^|\\s)"+n+"(\\s|$)").test(e)}function un(t,n){if(void 0!==t.classList)for(var e=f(n),r=0,i=e.length;r1)return;var n=Date.now(),e=n-(r||n);i=t.touches?t.touches[0]:t,o=e>0&&e<=250,r=n}function s(t){if(o&&!i.cancelBubble){if(gt){if("mouse"===t.pointerType)return;var e,a,s={};for(a in i)e=i[a],s[a]=e&&e.bind?e.bind(i):e;i=s}i.type="dblclick",i.button=0,n(i),r=null}}t[Kt+Vt+e]=a,t[Kt+Gt+e]=s,t[Kt+"dblclick"+e]=n,t.addEventListener(Vt,a,!!Bt&&{passive:!1}),t.addEventListener(Gt,s,!!Bt&&{passive:!1}),t.addEventListener("dblclick",n,!1)}(t,a,i):"addEventListener"in t?"touchstart"===n||"touchmove"===n||"wheel"===n||"mousewheel"===n?t.addEventListener(En[n]||n,a,!!Bt&&{passive:!1}):"mouseenter"===n||"mouseleave"===n?(a=function(n){n=n||window.event,Hn(t,n)&&s(n)},t.addEventListener(En[n],a,!1)):t.addEventListener(n,s,!1):"attachEvent"in t&&t.attachEvent("on"+n,a),t[On]=t[On]||{},t[On][i]=a}function Ln(t,n,e,r){var i=n+o(e)+(r?"_"+o(r):""),a=t[On]&&t[On][i];if(!a)return this;gt&&0===n.indexOf("touch")?function(t,n,e){var r=t["_leaflet_"+n+e];"touchstart"===n?t.removeEventListener(Lt,r,!1):"touchmove"===n?t.removeEventListener(Tt,r,!1):"touchend"===n&&(t.removeEventListener(St,r,!1),t.removeEventListener(zt,r,!1))}(t,n,i):yt&&"dblclick"===n&&!kn()?function(t,n){var e=t[Kt+Vt+n],r=t[Kt+Gt+n],i=t[Kt+"dblclick"+n];t.removeEventListener(Vt,e,!!Bt&&{passive:!1}),t.removeEventListener(Gt,r,!!Bt&&{passive:!1}),t.removeEventListener("dblclick",i,!1)}(t,i):"removeEventListener"in t?t.removeEventListener(En[n]||n,a,!1):"detachEvent"in t&&t.detachEvent("on"+n,a),t[On][i]=null}function Tn(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,Fn(t),this}function Sn(t){return Pn(t,"wheel",Tn),this}function zn(t){return Bn(t,"mousedown touchstart dblclick",Tn),Pn(t,"click",Wn),this}function Mn(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function In(t){return Mn(t),Tn(t),this}function Dn(t,n){if(!n)return new P(t.clientX,t.clientY);var e=xn(n),r=e.boundingClientRect;return new P((t.clientX-r.left)/e.x-n.clientLeft,(t.clientY-r.top)/e.y-n.clientTop)}var Zn=ft&&at?2*window.devicePixelRatio:st?window.devicePixelRatio:1;function Rn(t){return J?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/Zn:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}var Nn={};function Wn(t){Nn[t.type]=!0}function Fn(t){var n=Nn[t.type];return Nn[t.type]=!1,n}function Hn(t,n){var e=n.relatedTarget;if(!e)return!0;try{for(;e&&e!==t;)e=e.parentNode}catch(t){return!1}return e!==t}var Un={on:Bn,off:jn,stopPropagation:Tn,disableScrollPropagation:Sn,disableClickPropagation:zn,preventDefault:Mn,stop:In,getMousePosition:Dn,getWheelDelta:Rn,fakeStop:Wn,skipped:Fn,isExternalTarget:Hn,addListener:Bn,removeListener:jn},Yn=E.extend({run:function(t,n,e,r){this.stop(),this._el=t,this._inProgress=!0,this._duration=e||.25,this._easeOutPower=1/Math.max(r||.5,.2),this._startPos=vn(t),this._offset=n.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=w(this._animate,this),this._step()},_step:function(t){var n=+new Date-this._startTime,e=1e3*this._duration;nthis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,n){this._enforcingBounds=!0;var e=this.getCenter(),r=this._limitCenter(e,this._zoom,D(t));return e.equals(r)||this.panTo(r,n),this._enforcingBounds=!1,this},panInside:function(t,n){var e=S((n=n||{}).paddingTopLeft||n.padding||[0,0]),r=S(n.paddingBottomRight||n.padding||[0,0]),i=this.getCenter(),o=this.project(i),a=this.project(t),s=this.getPixelBounds(),u=s.getSize().divideBy(2),c=M([s.min.add(e),s.max.subtract(r)]);if(!c.contains(a)){this._enforcingBounds=!0;var l=o.subtract(a),f=S(a.x+l.x,a.y+l.y);(a.xc.max.x)&&(f.x=o.x-l.x,l.x>0?f.x+=u.x-e.x:f.x-=u.x-r.x),(a.yc.max.y)&&(f.y=o.y-l.y,l.y>0?f.y+=u.y-e.y:f.y-=u.y-r.y),this.panTo(this.unproject(f),n),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=n({animate:!1,pan:!0},!0===t?{animate:!0}:t);var e=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var i=this.getSize(),o=e.divideBy(2).round(),a=i.divideBy(2).round(),s=o.subtract(a);return s.x||s.y?(t.animate&&t.pan?this.panBy(s):(t.pan&&this._rawPanBy(s),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(r(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:e,newSize:i})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=n({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var e=r(this._handleGeolocationResponse,this),i=r(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(e,i,t):navigator.geolocation.getCurrentPosition(e,i,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var n=t.code,e=t.message||(1===n?"permission denied":2===n?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:n,message:"Geolocation error: "+e+"."})},_handleGeolocationResponse:function(t){var n=new Z(t.coords.latitude,t.coords.longitude),e=n.toBounds(2*t.coords.accuracy),r=this._locateOptions;if(r.setView){var i=this.getBoundsZoom(e);this.setView(n,r.maxZoom?Math.min(i,r.maxZoom):i)}var o={latlng:n,bounds:e,timestamp:t.timestamp};for(var a in t.coords)"number"==typeof t.coords[a]&&(o[a]=t.coords[a]);this.fire("locationfound",o)},addHandler:function(t,n){if(!n)return this;var e=this[t]=new n(this);return this._handlers.push(e),this.options[t]&&e.enable(),this},remove:function(){if(this._initEvents(!0),this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}var t;for(t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),en(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(B(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)en(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,n){var e=nn("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),n||this._mapPane);return t&&(this._panes[t]=e),e},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new I(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,n,e){t=D(t),e=S(e||[0,0]);var r=this.getZoom()||0,i=this.getMinZoom(),o=this.getMaxZoom(),a=t.getNorthWest(),s=t.getSouthEast(),u=this.getSize().subtract(e),c=M(this.project(s,r),this.project(a,r)).getSize(),l=mt?this.options.zoomSnap:1,f=u.x/c.x,h=u.y/c.y,d=n?Math.max(f,h):Math.min(f,h);return r=this.getScaleZoom(d,r),l&&(r=Math.round(r/(l/100))*(l/100),r=n?Math.ceil(r/l)*l:Math.floor(r/l)*l),Math.max(i,Math.min(o,r))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new P(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,n){var e=this._getTopLeftPoint(t,n);return new z(e,e.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,n){var e=this.options.crs;return n=void 0===n?this._zoom:n,e.scale(t)/e.scale(n)},getScaleZoom:function(t,n){var e=this.options.crs;n=void 0===n?this._zoom:n;var r=e.zoom(t*e.scale(n));return isNaN(r)?1/0:r},project:function(t,n){return n=void 0===n?this._zoom:n,this.options.crs.latLngToPoint(R(t),n)},unproject:function(t,n){return n=void 0===n?this._zoom:n,this.options.crs.pointToLatLng(S(t),n)},layerPointToLatLng:function(t){var n=S(t).add(this.getPixelOrigin());return this.unproject(n)},latLngToLayerPoint:function(t){return this.project(R(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(R(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(D(t))},distance:function(t,n){return this.options.crs.distance(R(t),R(n))},containerPointToLayerPoint:function(t){return S(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return S(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var n=this.containerPointToLayerPoint(S(t));return this.layerPointToLatLng(n)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(R(t)))},mouseEventToContainerPoint:function(t){return Dn(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var n=this._container=Jt(t);if(!n)throw new Error("Map container not found.");if(n._leaflet_id)throw new Error("Map container is already initialized.");Bn(n,"scroll",this._onScroll,this),this._containerId=o(n)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&mt,un(t,"leaflet-container"+(yt?" leaflet-touch":"")+(wt?" leaflet-retina":"")+($?" leaflet-oldie":"")+(ut?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var n=tn(t,"position");"absolute"!==n&&"relative"!==n&&"fixed"!==n&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),mn(this._mapPane,new P(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(un(t.markerPane,"leaflet-zoom-hide"),un(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,n){mn(this._mapPane,new P(0,0));var e=!this._loaded;this._loaded=!0,n=this._limitZoom(n),this.fire("viewprereset");var r=this._zoom!==n;this._moveStart(r,!1)._move(t,n)._moveEnd(r),this.fire("viewreset"),e&&this.fire("load")},_moveStart:function(t,n){return t&&this.fire("zoomstart"),n||this.fire("movestart"),this},_move:function(t,n,e){void 0===n&&(n=this._zoom);var r=this._zoom!==n;return this._zoom=n,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(r||e&&e.pinch)&&this.fire("zoom",e),this.fire("move",e)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return B(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){mn(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[o(this._container)]=this;var n=t?jn:Bn;n(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&n(window,"resize",this._onResize,this),mt&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){B(this._resizeRequest),this._resizeRequest=w((function(){this.invalidateSize({debounceMoveend:!0})}),this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,n){for(var e,r=[],i="mouseout"===n||"mouseover"===n,a=t.target||t.srcElement,s=!1;a;){if((e=this._targets[o(a)])&&("click"===n||"preclick"===n)&&!t._simulated&&this._draggableMoved(e)){s=!0;break}if(e&&e.listens(n,!0)){if(i&&!Hn(a,t))break;if(r.push(e),i)break}if(a===this._container)break;a=a.parentNode}return r.length||s||i||!Hn(a,t)||(r=[this]),r},_handleDOMEvent:function(t){if(this._loaded&&!Fn(t)){var n=t.type;"mousedown"!==n&&"keypress"!==n&&"keyup"!==n&&"keydown"!==n||gn(t.target||t.srcElement),this._fireDOMEvent(t,n)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,e,r){if("click"===t.type){var i=n({},t);i.type="preclick",this._fireDOMEvent(i,i.type,r)}if(!t._stopped&&(r=(r||[]).concat(this._findEventTargets(t,e))).length){var o=r[0];"contextmenu"===e&&o.listens(e,!0)&&Mn(t);var a={originalEvent:t};if("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type){var s=o.getLatLng&&(!o._radius||o._radius<=10);a.containerPoint=s?this.latLngToContainerPoint(o.getLatLng()):this.mouseEventToContainerPoint(t),a.layerPoint=this.containerPointToLayerPoint(a.containerPoint),a.latlng=s?o.getLatLng():this.layerPointToLatLng(a.layerPoint)}for(var u=0;u0?Math.round(t-n)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(n))},_limitZoom:function(t){var n=this.getMinZoom(),e=this.getMaxZoom(),r=mt?this.options.zoomSnap:1;return r&&(t=Math.round(t/r)*r),Math.max(n,Math.min(e,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){cn(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,n){var e=this._getCenterOffset(t)._trunc();return!(!0!==(n&&n.animate)&&!this.getSize().contains(e)||(this.panBy(e,n),0))},_createAnimProxy:function(){var t=this._proxy=nn("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",(function(t){var n=Xt,e=this._proxy.style[n];pn(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),e===this._proxy.style[n]&&this._animatingZoom&&this._onZoomTransitionEnd()}),this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){en(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),n=this.getZoom();pn(this._proxy,this.project(t,n),this.getZoomScale(n,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,n,e){if(this._animatingZoom)return!0;if(e=e||{},!this._zoomAnimated||!1===e.animate||this._nothingToAnimate()||Math.abs(n-this._zoom)>this.options.zoomAnimationThreshold)return!1;var r=this.getZoomScale(n),i=this._getCenterOffset(t)._divideBy(1-1/r);return!(!0!==e.animate&&!this.getSize().contains(i)||(w((function(){this._moveStart(!0,!1)._animateZoom(t,n,!0)}),this),0))},_animateZoom:function(t,n,e,i){this._mapPane&&(e&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=n,un(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:n,noUpdate:i}),setTimeout(r(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&cn(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),w((function(){this._moveEnd(!0)}),this))}}),Vn=j.extend({options:{position:"topright"},initialize:function(t){h(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var n=this._map;return n&&n.removeControl(this),this.options.position=t,n&&n.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var n=this._container=this.onAdd(t),e=this.getPosition(),r=t._controlCorners[e];return un(n,"leaflet-control"),-1!==e.indexOf("bottom")?r.insertBefore(n,r.firstChild):r.appendChild(n),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(en(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),Gn=function(t){return new Vn(t)};qn.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},n="leaflet-",e=this._controlContainer=nn("div",n+"control-container",this._container);function r(r,i){var o=n+r+" "+n+i;t[r+i]=nn("div",o,e)}r("top","left"),r("top","right"),r("bottom","left"),r("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)en(this._controlCorners[t]);en(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Kn=Vn.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,n,e,r){return e1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=n&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var n=this._getLayer(o(t.target)),e=n.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;e&&this._map.fire(e,n)},_createRadioElement:function(t,n){var e='",r=document.createElement("div");return r.innerHTML=e,r.firstChild},_addItem:function(t){var n,e=document.createElement("label"),r=this._map.hasLayer(t.layer);t.overlay?((n=document.createElement("input")).type="checkbox",n.className="leaflet-control-layers-selector",n.defaultChecked=r):n=this._createRadioElement("leaflet-base-layers_"+o(this),r),this._layerControlInputs.push(n),n.layerId=o(t.layer),Bn(n,"click",this._onInputClick,this);var i=document.createElement("span");i.innerHTML=" "+t.name;var a=document.createElement("div");return e.appendChild(a),a.appendChild(n),a.appendChild(i),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(e),this._checkDisabledLayers(),e},_onInputClick:function(){var t,n,e=this._layerControlInputs,r=[],i=[];this._handlingClick=!0;for(var o=e.length-1;o>=0;o--)t=e[o],n=this._getLayer(t.layerId).layer,t.checked?r.push(n):t.checked||i.push(n);for(o=0;o=0;i--)t=e[i],n=this._getLayer(t.layerId).layer,t.disabled=void 0!==n.options.minZoom&&rn.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),Xn=Vn.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var n="leaflet-control-zoom",e=nn("div",n+" leaflet-bar"),r=this.options;return this._zoomInButton=this._createButton(r.zoomInText,r.zoomInTitle,n+"-in",e,this._zoomIn),this._zoomOutButton=this._createButton(r.zoomOutText,r.zoomOutTitle,n+"-out",e,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),e},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,n,e,r,i){var o=nn("a",e,r);return o.innerHTML=t,o.href="#",o.title=n,o.setAttribute("role","button"),o.setAttribute("aria-label",n),zn(o),Bn(o,"click",In),Bn(o,"click",i,this),Bn(o,"click",this._refocusOnMap,this),o},_updateDisabled:function(){var t=this._map,n="leaflet-disabled";cn(this._zoomInButton,n),cn(this._zoomOutButton,n),(this._disabled||t._zoom===t.getMinZoom())&&un(this._zoomOutButton,n),(this._disabled||t._zoom===t.getMaxZoom())&&un(this._zoomInButton,n)}});qn.mergeOptions({zoomControl:!0}),qn.addInitHook((function(){this.options.zoomControl&&(this.zoomControl=new Xn,this.addControl(this.zoomControl))}));var Qn=Vn.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var n=nn("div","leaflet-control-scale"),e=this.options;return this._addScales(e,"leaflet-control-scale-line",n),t.on(e.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),n},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,n,e){t.metric&&(this._mScale=nn("div",n,e)),t.imperial&&(this._iScale=nn("div",n,e))},_update:function(){var t=this._map,n=t.getSize().y/2,e=t.distance(t.containerPointToLatLng([0,n]),t.containerPointToLatLng([this.options.maxWidth,n]));this._updateScales(e)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var n=this._getRoundNum(t),e=n<1e3?n+" m":n/1e3+" km";this._updateScale(this._mScale,e,n/t)},_updateImperial:function(t){var n,e,r,i=3.2808399*t;i>5280?(n=i/5280,e=this._getRoundNum(n),this._updateScale(this._iScale,e+" mi",e/n)):(r=this._getRoundNum(i),this._updateScale(this._iScale,r+" ft",r/i))},_updateScale:function(t,n,e){t.style.width=Math.round(this.options.maxWidth*e)+"px",t.innerHTML=n},_getRoundNum:function(t){var n=Math.pow(10,(Math.floor(t)+"").length-1),e=t/n;return n*(e=e>=10?10:e>=5?5:e>=3?3:e>=2?2:1)}}),$n=Vn.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){h(this,t),this._attributions={}},onAdd:function(t){for(var n in t.attributionControl=this,this._container=nn("div","leaflet-control-attribution"),zn(this._container),t._layers)t._layers[n].getAttribution&&this.addAttribution(t._layers[n].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var n in this._attributions)this._attributions[n]&&t.push(n);var e=[];this.options.prefix&&e.push(this.options.prefix),t.length&&e.push(t.join(", ")),this._container.innerHTML=e.join(" | ")}}});qn.mergeOptions({attributionControl:!0}),qn.addInitHook((function(){this.options.attributionControl&&(new $n).addTo(this)})),Vn.Layers=Kn,Vn.Zoom=Xn,Vn.Scale=Qn,Vn.Attribution=$n,Gn.layers=function(t,n,e){return new Kn(t,n,e)},Gn.zoom=function(t){return new Xn(t)},Gn.scale=function(t){return new Qn(t)},Gn.attribution=function(t){return new $n(t)};var Jn=j.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});Jn.addTo=function(t,n){return t.addHandler(n,this),this};var te,ne={Events:k},ee=yt?"touchstart mousedown":"mousedown",re={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},ie={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},oe=E.extend({options:{clickTolerance:3},initialize:function(t,n,e,r){h(this,r),this._element=t,this._dragStartTarget=n||t,this._preventOutline=e},enable:function(){this._enabled||(Bn(this._dragStartTarget,ee,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(oe._dragging===this&&this.finishDrag(),jn(this._dragStartTarget,ee,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!sn(this._element,"leaflet-zoom-anim")&&!(oe._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(oe._dragging=this,this._preventOutline&&gn(this._element),An(),Ft(),this._moving)))){this.fire("down");var n=t.touches?t.touches[0]:t,e=Cn(this._element);this._startPoint=new P(n.clientX,n.clientY),this._parentScale=xn(e),Bn(document,ie[t.type],this._onMove,this),Bn(document,re[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var n=t.touches&&1===t.touches.length?t.touches[0]:t,e=new P(n.clientX,n.clientY)._subtract(this._startPoint);(e.x||e.y)&&(Math.abs(e.x)+Math.abs(e.y)c&&(a=s,c=u);c>r&&(e[a]=1,t(n,e,r,i,a),t(n,e,r,a,o))}(t,r,n,0,e-1);var i,o=[];for(i=0;in&&(e.push(t[r]),i=r);var a,s,u,c;return in.max.x&&(e|=2),t.yn.max.y&&(e|=8),e}function fe(t,n,e,r){var i,o=n.x,a=n.y,s=e.x-o,u=e.y-a,c=s*s+u*u;return c>0&&((i=((t.x-o)*s+(t.y-a)*u)/c)>1?(o=e.x,a=e.y):i>0&&(o+=s*i,a+=u*i)),s=t.x-o,u=t.y-a,r?s*s+u*u:new P(o,a)}function he(t){return!v(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function de(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),he(t)}var pe={simplify:ae,pointToSegmentDistance:se,closestPointOnSegment:function(t,n,e){return fe(t,n,e)},clipSegment:ue,_getEdgeIntersection:ce,_getBitCode:le,_sqClosestPointOnSegment:fe,isFlat:he,_flat:de};function me(t,n,e){var r,i,o,a,s,u,c,l,f,h=[1,4,2,8];for(i=0,c=t.length;i1e-7;u++)n=o*Math.sin(s),n=Math.pow((1-n)/(1+n),o/2),s+=c=Math.PI/2-2*Math.atan(a*n)-s;return new Z(s*e,t.x*e/r)}},_e={LonLat:be,Mercator:Ae,SphericalMercator:H},ge=n({},F,{code:"EPSG:3395",projection:Ae,transformation:function(){var t=.5/(Math.PI*Ae.R);return Y(t,.5,-t,.5)}()}),ye=n({},F,{code:"EPSG:4326",projection:be,transformation:Y(1/180,1,-1/180,.5)}),Ce=n({},W,{projection:be,transformation:Y(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,n){var e=n.lng-t.lng,r=n.lat-t.lat;return Math.sqrt(e*e+r*r)},infinite:!0});W.Earth=F,W.EPSG3395=ge,W.EPSG3857=q,W.EPSG900913=V,W.EPSG4326=ye,W.Simple=Ce;var xe=E.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[o(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[o(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var n=t.target;if(n.hasLayer(this)){if(this._map=n,this._zoomAnimated=n._zoomAnimated,this.getEvents){var e=this.getEvents();n.on(e,this),this.once("remove",(function(){n.off(e,this)}),this)}this.onAdd(n),this.getAttribution&&n.attributionControl&&n.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),n.fire("layeradd",{layer:this})}}});qn.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var n=o(t);return this._layers[n]||(this._layers[n]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this},removeLayer:function(t){var n=o(t);return this._layers[n]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[n],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&o(t)in this._layers},eachLayer:function(t,n){for(var e in this._layers)t.call(n,this._layers[e]);return this},_addLayers:function(t){for(var n=0,e=(t=t?v(t)?t:[t]:[]).length;nthis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()n)return a=(r-n)/e,this._map.layerPointToLatLng([o.x-a*(o.x-i.x),o.y-a*(o.y-i.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,n){return n=n||this._defaultShape(),t=R(t),n.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new I,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return he(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var n=[],e=he(t),r=0,i=t.length;r=2&&n[0]instanceof Z&&n[0].equals(n[e-1])&&n.pop(),n},_setLatLngs:function(t){Se.prototype._setLatLngs.call(this,t),he(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return he(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,n=this.options.weight,e=new P(n,n);if(t=new z(t.min.subtract(e),t.max.add(e)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var r,i=0,o=this._rings.length;it.y!=r.y>t.y&&t.x<(r.x-e.x)*(t.y-e.y)/(r.y-e.y)+e.x&&(c=!c);return c||Se.prototype._containsPoint.call(this,t,!0)}}),Me=Be.extend({initialize:function(t,n){h(this,n),this._layers={},t&&this.addData(t)},addData:function(t){var n,e,r,i=v(t)?t:t.features;if(i){for(n=0,e=i.length;n0?i:[n.src]}else{v(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(n.style,"objectFit")&&(n.style.objectFit="fill"),n.autoplay=!!this.options.autoplay,n.loop=!!this.options.loop,n.muted=!!this.options.muted;for(var a=0;ai?(n.height=i+"px",un(t,"leaflet-popup-scrolled")):cn(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var n=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),e=this._getAnchor();mn(this._container,n.add(e))},_adjustPan:function(){if(this.options.autoPan){this._map._panAnim&&this._map._panAnim.stop();var t=this._map,n=parseInt(tn(this._container,"marginBottom"),10)||0,e=this._container.offsetHeight+n,r=this._containerWidth,i=new P(this._containerLeft,-e-this._containerBottom);i._add(vn(this._container));var o=t.layerPointToContainerPoint(i),a=S(this.options.autoPanPadding),s=S(this.options.autoPanPaddingTopLeft||a),u=S(this.options.autoPanPaddingBottomRight||a),c=t.getSize(),l=0,f=0;o.x+r+u.x>c.x&&(l=o.x+r-c.x+u.x),o.x-l-s.x<0&&(l=o.x-s.x),o.y+e+u.y>c.y&&(f=o.y+e-c.y+u.y),o.y-f-s.y<0&&(f=o.y-s.y),(l||f)&&t.fire("autopanstart").panBy([l,f])}},_onCloseButtonClick:function(t){this._close(),In(t)},_getAnchor:function(){return S(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});qn.mergeOptions({closePopupOnClick:!0}),qn.include({openPopup:function(t,n,e){return t instanceof Qe||(t=new Qe(e).setContent(t)),n&&t.setLatLng(n),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),xe.include({bindPopup:function(t,n){return t instanceof Qe?(h(t,n),this._popup=t,t._source=this):(this._popup&&!n||(this._popup=new Qe(n,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,n){return this._popup&&this._map&&(n=this._popup._prepareOpen(this,t,n),this._map.openPopup(this._popup,n)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var n=t.layer||t.target;this._popup&&this._map&&(In(t),n instanceof Pe?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===n?this.closePopup():this.openPopup(n,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var $e=Xe.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){Xe.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){Xe.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=Xe.prototype.getEvents.call(this);return yt&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=nn("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var n,e,r=this._map,i=this._container,o=r.latLngToContainerPoint(r.getCenter()),a=r.layerPointToContainerPoint(t),s=this.options.direction,u=i.offsetWidth,c=i.offsetHeight,l=S(this.options.offset),f=this._getAnchor();"top"===s?(n=u/2,e=c):"bottom"===s?(n=u/2,e=0):"center"===s?(n=u/2,e=c/2):"right"===s?(n=0,e=c/2):"left"===s?(n=u,e=c/2):a.xthis.options.maxZoom||er&&this._retainParent(i,o,a,r))},_retainChildren:function(t,n,e,r){for(var i=2*t;i<2*t+2;i++)for(var o=2*n;o<2*n+2;o++){var a=new P(i,o);a.z=e+1;var s=this._tileCoordsToKey(a),u=this._tiles[s];u&&u.active?u.retain=!0:(u&&u.loaded&&(u.retain=!0),e+1this.options.maxZoom||void 0!==this.options.minZoom&&i1)this._setView(t,e);else{for(var f=i.min.y;f<=i.max.y;f++)for(var h=i.min.x;h<=i.max.x;h++){var d=new P(h,f);if(d.z=this._tileZoom,this._isValidTile(d)){var p=this._tiles[this._tileCoordsToKey(d)];p?p.current=!0:a.push(d)}}if(a.sort((function(t,n){return t.distanceTo(o)-n.distanceTo(o)})),0!==a.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(h=0;he.max.x)||!n.wrapLat&&(t.ye.max.y))return!1}if(!this.options.bounds)return!0;var r=this._tileCoordsToBounds(t);return D(this.options.bounds).overlaps(r)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var n=this._map,e=this.getTileSize(),r=t.scaleBy(e),i=r.add(e);return[n.unproject(r,t.z),n.unproject(i,t.z)]},_tileCoordsToBounds:function(t){var n=this._tileCoordsToNwSe(t),e=new I(n[0],n[1]);return this.options.noWrap||(e=this._map.wrapLatLngBounds(e)),e},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var n=t.split(":"),e=new P(+n[0],+n[1]);return e.z=+n[2],e},_removeTile:function(t){var n=this._tiles[t];n&&(en(n.el),delete this._tiles[t],this.fire("tileunload",{tile:n.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){un(t,"leaflet-tile");var n=this.getTileSize();t.style.width=n.x+"px",t.style.height=n.y+"px",t.onselectstart=u,t.onmousemove=u,$&&this.options.opacity<1&&hn(t,this.options.opacity),nt&&!et&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,n){var e=this._getTilePos(t),i=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),r(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&w(r(this._tileReady,this,t,null,o)),mn(o,e),this._tiles[i]={el:o,coords:t,current:!0},n.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,n,e){n&&this.fire("tileerror",{error:n,tile:e,coords:t});var i=this._tileCoordsToKey(t);(e=this._tiles[i])&&(e.loaded=+new Date,this._map._fadeAnimated?(hn(e.el,0),B(this._fadeFrame),this._fadeFrame=w(this._updateOpacity,this)):(e.active=!0,this._pruneTiles()),n||(un(e.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:e.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),$||!this._map._fadeAnimated?w(this._pruneTiles,this):setTimeout(r(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var n=new P(this._wrapX?s(t.x,this._wrapX):t.x,this._wrapY?s(t.y,this._wrapY):t.y);return n.z=t.z,n},_pxBoundsToTileRange:function(t){var n=this.getTileSize();return new z(t.min.unscaleBy(n).floor(),t.max.unscaleBy(n).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),nr=tr.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,n){this._url=t,(n=h(this,n)).detectRetina&&wt&&n.maxZoom>0&&(n.tileSize=Math.floor(n.tileSize/2),n.zoomReverse?(n.zoomOffset--,n.minZoom++):(n.zoomOffset++,n.maxZoom--),n.minZoom=Math.max(0,n.minZoom)),"string"==typeof n.subdomains&&(n.subdomains=n.subdomains.split("")),nt||this.on("tileunload",this._onTileRemove)},setUrl:function(t,n){return this._url===t&&void 0===n&&(n=!0),this._url=t,n||this.redraw(),this},createTile:function(t,n){var e=document.createElement("img");return Bn(e,"load",r(this._tileOnLoad,this,n,e)),Bn(e,"error",r(this._tileOnError,this,n,e)),(this.options.crossOrigin||""===this.options.crossOrigin)&&(e.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),e.alt="",e.setAttribute("role","presentation"),e.src=this.getTileUrl(t),e},getTileUrl:function(t){var e={r:wt?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var r=this._globalTileRange.max.y-t.y;this.options.tms&&(e.y=r),e["-y"]=r}return m(this._url,n(e,this.options))},_tileOnLoad:function(t,n){$?setTimeout(r(t,this,null,n),0):t(null,n)},_tileOnError:function(t,n,e){var r=this.options.errorTileUrl;r&&n.getAttribute("src")!==r&&(n.src=r),t(e,n)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,n=this.options.maxZoom;return this.options.zoomReverse&&(t=n-t),t+this.options.zoomOffset},_getSubdomain:function(t){var n=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[n]},_abortLoading:function(){var t,n;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((n=this._tiles[t].el).onload=u,n.onerror=u,n.complete||(n.src=A,en(n),delete this._tiles[t]))},_removeTile:function(t){var n=this._tiles[t];if(n)return it||n.el.setAttribute("src",A),tr.prototype._removeTile.call(this,t)},_tileReady:function(t,n,e){if(this._map&&(!e||e.getAttribute("src")!==A))return tr.prototype._tileReady.call(this,t,n,e)}});function er(t,n){return new nr(t,n)}var rr=nr.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,e){this._url=t;var r=n({},this.defaultWmsParams);for(var i in e)i in this.options||(r[i]=e[i]);var o=(e=h(this,e)).detectRetina&&wt?2:1,a=this.getTileSize();r.width=a.x*o,r.height=a.y*o,this.wmsParams=r},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var n=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[n]=this._crs.code,nr.prototype.onAdd.call(this,t)},getTileUrl:function(t){var n=this._tileCoordsToNwSe(t),e=this._crs,r=M(e.project(n[0]),e.project(n[1])),i=r.min,o=r.max,a=(this._wmsVersion>=1.3&&this._crs===ye?[i.y,i.x,o.y,o.x]:[i.x,i.y,o.x,o.y]).join(","),s=nr.prototype.getTileUrl.call(this,t);return s+d(this.wmsParams,s,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+a},setParams:function(t,e){return n(this.wmsParams,t),e||this.redraw(),this}});nr.WMS=rr,er.wms=function(t,n){return new rr(t,n)};var ir=xe.extend({options:{padding:.1,tolerance:0},initialize:function(t){h(this,t),o(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&un(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,n){var e=this._map.getZoomScale(n,this._zoom),r=vn(this._container),i=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,n),a=this._map.project(t,n).subtract(o),s=i.multiplyBy(-e).add(r).add(i).subtract(a);mt?pn(this._container,s,e):mn(this._container,s)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,n=this._map.getSize(),e=this._map.containerPointToLayerPoint(n.multiplyBy(-t)).round();this._bounds=new z(e,e.add(n.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),or=ir.extend({getEvents:function(){var t=ir.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){ir.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");Bn(t,"mousemove",this._onMouseMove,this),Bn(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),Bn(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){B(this._redrawRequest),delete this._ctx,en(this._container),jn(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){ir.prototype._update.call(this);var t=this._bounds,n=this._container,e=t.getSize(),r=wt?2:1;mn(n,t.min),n.width=r*e.x,n.height=r*e.y,n.style.width=e.x+"px",n.style.height=e.y+"px",wt&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){ir.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[o(t)]=t;var n=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=n),this._drawLast=n,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var n=t._order,e=n.next,r=n.prev;e?e.prev=r:this._drawLast=r,r?r.next=e:this._drawFirst=e,delete t._order,delete this._layers[o(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof t.options.dashArray){var n,e,r=t.options.dashArray.split(/[, ]+/),i=[];for(e=0;e')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),ur={_initContainer:function(){this._container=nn("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(ir.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var n=t._container=sr("shape");un(n,"leaflet-vml-shape "+(this.options.className||"")),n.coordsize="1 1",t._path=sr("path"),n.appendChild(t._path),this._updateStyle(t),this._layers[o(t)]=t},_addPath:function(t){var n=t._container;this._container.appendChild(n),t.options.interactive&&t.addInteractiveTarget(n)},_removePath:function(t){var n=t._container;en(n),t.removeInteractiveTarget(n),delete this._layers[o(t)]},_updateStyle:function(t){var n=t._stroke,e=t._fill,r=t.options,i=t._container;i.stroked=!!r.stroke,i.filled=!!r.fill,r.stroke?(n||(n=t._stroke=sr("stroke")),i.appendChild(n),n.weight=r.weight+"px",n.color=r.color,n.opacity=r.opacity,r.dashArray?n.dashStyle=v(r.dashArray)?r.dashArray.join(" "):r.dashArray.replace(/( *, *)/g," "):n.dashStyle="",n.endcap=r.lineCap.replace("butt","flat"),n.joinstyle=r.lineJoin):n&&(i.removeChild(n),t._stroke=null),r.fill?(e||(e=t._fill=sr("fill")),i.appendChild(e),e.color=r.fillColor||r.color,e.opacity=r.fillOpacity):e&&(i.removeChild(e),t._fill=null)},_updateCircle:function(t){var n=t._point.round(),e=Math.round(t._radius),r=Math.round(t._radiusY||e);this._setPath(t,t._empty()?"M0 0":"AL "+n.x+","+n.y+" "+e+","+r+" 0,23592600")},_setPath:function(t,n){t._path.v=n},_bringToFront:function(t){on(t._container)},_bringToBack:function(t){an(t._container)}},cr=kt?sr:G,lr=ir.extend({getEvents:function(){var t=ir.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=cr("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=cr("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){en(this._container),jn(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){ir.prototype._update.call(this);var t=this._bounds,n=t.getSize(),e=this._container;this._svgSize&&this._svgSize.equals(n)||(this._svgSize=n,e.setAttribute("width",n.x),e.setAttribute("height",n.y)),mn(e,t.min),e.setAttribute("viewBox",[t.min.x,t.min.y,n.x,n.y].join(" ")),this.fire("update")}},_initPath:function(t){var n=t._path=cr("path");t.options.className&&un(n,t.options.className),t.options.interactive&&un(n,"leaflet-interactive"),this._updateStyle(t),this._layers[o(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){en(t._path),t.removeInteractiveTarget(t._path),delete this._layers[o(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var n=t._path,e=t.options;n&&(e.stroke?(n.setAttribute("stroke",e.color),n.setAttribute("stroke-opacity",e.opacity),n.setAttribute("stroke-width",e.weight),n.setAttribute("stroke-linecap",e.lineCap),n.setAttribute("stroke-linejoin",e.lineJoin),e.dashArray?n.setAttribute("stroke-dasharray",e.dashArray):n.removeAttribute("stroke-dasharray"),e.dashOffset?n.setAttribute("stroke-dashoffset",e.dashOffset):n.removeAttribute("stroke-dashoffset")):n.setAttribute("stroke","none"),e.fill?(n.setAttribute("fill",e.fillColor||e.color),n.setAttribute("fill-opacity",e.fillOpacity),n.setAttribute("fill-rule",e.fillRule||"evenodd")):n.setAttribute("fill","none"))},_updatePoly:function(t,n){this._setPath(t,K(t._parts,n))},_updateCircle:function(t){var n=t._point,e=Math.max(Math.round(t._radius),1),r="a"+e+","+(Math.max(Math.round(t._radiusY),1)||e)+" 0 1,0 ",i=t._empty()?"M0 0":"M"+(n.x-e)+","+n.y+r+2*e+",0 "+r+2*-e+",0 ";this._setPath(t,i)},_setPath:function(t,n){t._path.setAttribute("d",n)},_bringToFront:function(t){on(t._path)},_bringToBack:function(t){an(t._path)}});function fr(t){return jt||kt?new lr(t):null}kt&&lr.include(ur),qn.include({getRenderer:function(t){var n=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return n||(n=this._renderer=this._createRenderer()),this.hasLayer(n)||this.addLayer(n),n},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var n=this._paneRenderers[t];return void 0===n&&(n=this._createRenderer({pane:t}),this._paneRenderers[t]=n),n},_createRenderer:function(t){return this.options.preferCanvas&&ar(t)||fr(t)}});var hr=ze.extend({initialize:function(t,n){ze.prototype.initialize.call(this,this._boundsToLatLngs(t),n)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=D(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});lr.create=cr,lr.pointsToPath=K,Me.geometryToLayer=Ie,Me.coordsToLatLng=Ze,Me.coordsToLatLngs=Re,Me.latLngToCoords=Ne,Me.latLngsToCoords=We,Me.getFeature=Fe,Me.asFeature=He,qn.mergeOptions({boxZoom:!0});var dr=Jn.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){Bn(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){jn(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){en(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),Ft(),An(),this._startPoint=this._map.mouseEventToContainerPoint(t),Bn(document,{contextmenu:In,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=nn("div","leaflet-zoom-box",this._container),un(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var n=new z(this._point,this._startPoint),e=n.getSize();mn(this._box,n.min),this._box.style.width=e.x+"px",this._box.style.height=e.y+"px"},_finish:function(){this._moved&&(en(this._box),cn(this._container,"leaflet-crosshair")),Ht(),_n(),jn(document,{contextmenu:In,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(r(this._resetState,this),0);var n=new I(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(n).fire("boxzoomend",{boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});qn.addInitHook("addHandler","boxZoom",dr),qn.mergeOptions({doubleClickZoom:!0});var pr=Jn.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var n=this._map,e=n.getZoom(),r=n.options.zoomDelta,i=t.originalEvent.shiftKey?e-r:e+r;"center"===n.options.doubleClickZoom?n.setZoom(i):n.setZoomAround(t.containerPoint,i)}});qn.addInitHook("addHandler","doubleClickZoom",pr),qn.mergeOptions({dragging:!0,inertia:!et,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var mr=Jn.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new oe(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}un(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){cn(this._map._container,"leaflet-grab"),cn(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var n=D(this._map.options.maxBounds);this._offsetLimit=M(this._map.latLngToContainerPoint(n.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(n.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var n=this._lastTime=+new Date,e=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(e),this._times.push(n),this._prunePositions(n)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),n=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=n.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,n){return t-(t-n)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),n=this._offsetLimit;t.xn.max.x&&(t.x=this._viscousLimit(t.x,n.max.x)),t.y>n.max.y&&(t.y=this._viscousLimit(t.y,n.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,n=Math.round(t/2),e=this._initialWorldOffset,r=this._draggable._newPos.x,i=(r-n+e)%t+n-e,o=(r+n+e)%t-n-e,a=Math.abs(i+e)0?o:-o))-n;this._delta=0,this._startTime=null,a&&("center"===t.options.scrollWheelZoom?t.setZoom(n+a):t.setZoomAround(this._lastMousePos,n+a))}});qn.addInitHook("addHandler","scrollWheelZoom",br),qn.mergeOptions({tap:!0,tapTolerance:15});var Ar=Jn.extend({addHooks:function(){Bn(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){jn(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(Mn(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var n=t.touches[0],e=n.target;this._startPos=this._newPos=new P(n.clientX,n.clientY),e.tagName&&"a"===e.tagName.toLowerCase()&&un(e,"leaflet-active"),this._holdTimeout=setTimeout(r((function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",n))}),this),1e3),this._simulateEvent("mousedown",n),Bn(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),jn(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var n=t.changedTouches[0],e=n.target;e&&e.tagName&&"a"===e.tagName.toLowerCase()&&cn(e,"leaflet-active"),this._simulateEvent("mouseup",n),this._isTapValid()&&this._simulateEvent("click",n)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var n=t.touches[0];this._newPos=new P(n.clientX,n.clientY),this._simulateEvent("mousemove",n)},_simulateEvent:function(t,n){var e=document.createEvent("MouseEvents");e._simulated=!0,n.target._simulatedClick=!0,e.initMouseEvent(t,!0,!0,window,1,n.screenX,n.screenY,n.clientX,n.clientY,!1,!1,!1,!1,0,null),n.target.dispatchEvent(e)}});!yt||gt&&!ut||qn.addInitHook("addHandler","tap",Ar),qn.mergeOptions({touchZoom:yt&&!et,bounceAtZoomLimits:!0});var _r=Jn.extend({addHooks:function(){un(this._map._container,"leaflet-touch-zoom"),Bn(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){cn(this._map._container,"leaflet-touch-zoom"),jn(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var n=this._map;if(t.touches&&2===t.touches.length&&!n._animatingZoom&&!this._zooming){var e=n.mouseEventToContainerPoint(t.touches[0]),r=n.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=n.getSize()._divideBy(2),this._startLatLng=n.containerPointToLatLng(this._centerPoint),"center"!==n.options.touchZoom&&(this._pinchStartLatLng=n.containerPointToLatLng(e.add(r)._divideBy(2))),this._startDist=e.distanceTo(r),this._startZoom=n.getZoom(),this._moved=!1,this._zooming=!0,n._stop(),Bn(document,"touchmove",this._onTouchMove,this),Bn(document,"touchend",this._onTouchEnd,this),Mn(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var n=this._map,e=n.mouseEventToContainerPoint(t.touches[0]),i=n.mouseEventToContainerPoint(t.touches[1]),o=e.distanceTo(i)/this._startDist;if(this._zoom=n.getScaleZoom(o,this._startZoom),!n.options.bounceAtZoomLimits&&(this._zoomn.getMaxZoom()&&o>1)&&(this._zoom=n._limitZoom(this._zoom)),"center"===n.options.touchZoom){if(this._center=this._startLatLng,1===o)return}else{var a=e._add(i)._divideBy(2)._subtract(this._centerPoint);if(1===o&&0===a.x&&0===a.y)return;this._center=n.unproject(n.project(this._pinchStartLatLng,this._zoom).subtract(a),this._zoom)}this._moved||(n._moveStart(!0,!1),this._moved=!0),B(this._animRequest);var s=r(n._move,n,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=w(s,this,!0),Mn(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,B(this._animRequest),jn(document,"touchmove",this._onTouchMove,this),jn(document,"touchend",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});qn.addInitHook("addHandler","touchZoom",_r),qn.BoxZoom=dr,qn.DoubleClickZoom=pr,qn.Drag=mr,qn.Keyboard=vr,qn.ScrollWheelZoom=br,qn.Tap=Ar,qn.TouchZoom=_r,t.version="1.7.1",t.Control=Vn,t.control=Gn,t.Browser=Pt,t.Evented=E,t.Mixin=ne,t.Util=O,t.Class=j,t.Handler=Jn,t.extend=n,t.bind=r,t.stamp=o,t.setOptions=h,t.DomEvent=Un,t.DomUtil=wn,t.PosAnimation=Yn,t.Draggable=oe,t.LineUtil=pe,t.PolyUtil=ve,t.Point=P,t.point=S,t.Bounds=z,t.bounds=M,t.Transformation=U,t.transformation=Y,t.Projection=_e,t.LatLng=Z,t.latLng=R,t.LatLngBounds=I,t.latLngBounds=D,t.CRS=W,t.GeoJSON=Me,t.geoJSON=Ye,t.geoJson=qe,t.Layer=xe,t.LayerGroup=we,t.layerGroup=function(t,n){return new we(t,n)},t.FeatureGroup=Be,t.featureGroup=function(t,n){return new Be(t,n)},t.ImageOverlay=Ve,t.imageOverlay=function(t,n,e){return new Ve(t,n,e)},t.VideoOverlay=Ge,t.videoOverlay=function(t,n,e){return new Ge(t,n,e)},t.SVGOverlay=Ke,t.svgOverlay=function(t,n,e){return new Ke(t,n,e)},t.DivOverlay=Xe,t.Popup=Qe,t.popup=function(t,n){return new Qe(t,n)},t.Tooltip=$e,t.tooltip=function(t,n){return new $e(t,n)},t.Icon=Oe,t.icon=function(t){return new Oe(t)},t.DivIcon=Je,t.divIcon=function(t){return new Je(t)},t.Marker=Ee,t.marker=function(t,n){return new Ee(t,n)},t.TileLayer=nr,t.tileLayer=er,t.GridLayer=tr,t.gridLayer=function(t){return new tr(t)},t.SVG=lr,t.svg=fr,t.Renderer=ir,t.Canvas=or,t.canvas=ar,t.Path=Pe,t.CircleMarker=Le,t.circleMarker=function(t,n){return new Le(t,n)},t.Circle=Te,t.circle=function(t,n,e){return new Te(t,n,e)},t.Polyline=Se,t.polyline=function(t,n){return new Se(t,n)},t.Polygon=ze,t.polygon=function(t,n){return new ze(t,n)},t.Rectangle=hr,t.rectangle=function(t,n){return new hr(t,n)},t.Map=qn,t.map=function(t,n){return new qn(t,n)};var gr=window.L;t.noConflict=function(){return window.L=gr,this},window.L=t}(n)},function(t,n,e){var r=e(277);"string"==typeof r&&(r=[[t.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};e(89)(r,i);r.locals&&(t.exports=r.locals)},function(t,n,e){"use strict";e.r(n);var r=e(10),i=e.n(r),o=e(11),a=e.n(o),s=e(56),u=e.n(s),c=e(239),l=e.n(c),f=e(240),h=e.n(f),d=e(241),p=e.n(d),m=a()(i.a),v=u()(l.a),b=u()(h.a),A=u()(p.a);m.push([t.i,"/* required styles */\r\n\r\n.leaflet-pane,\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-tile-container,\r\n.leaflet-pane > svg,\r\n.leaflet-pane > canvas,\r\n.leaflet-zoom-box,\r\n.leaflet-image-layer,\r\n.leaflet-layer {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\t}\r\n.leaflet-container {\r\n\toverflow: hidden;\r\n\t}\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\t-webkit-user-select: none;\r\n\t -moz-user-select: none;\r\n\t user-select: none;\r\n\t -webkit-user-drag: none;\r\n\t}\r\n/* Prevents IE11 from highlighting tiles in blue */\r\n.leaflet-tile::selection {\r\n\tbackground: transparent;\r\n}\r\n/* Safari renders non-retina tile on retina better with this, but Chrome is worse */\r\n.leaflet-safari .leaflet-tile {\r\n\timage-rendering: -webkit-optimize-contrast;\r\n\t}\r\n/* hack that prevents hw layers \"stretching\" when loading new tiles */\r\n.leaflet-safari .leaflet-tile-container {\r\n\twidth: 1600px;\r\n\theight: 1600px;\r\n\t-webkit-transform-origin: 0 0;\r\n\t}\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\tdisplay: block;\r\n\t}\r\n/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */\r\n/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */\r\n.leaflet-container .leaflet-overlay-pane svg,\r\n.leaflet-container .leaflet-marker-pane img,\r\n.leaflet-container .leaflet-shadow-pane img,\r\n.leaflet-container .leaflet-tile-pane img,\r\n.leaflet-container img.leaflet-image-layer,\r\n.leaflet-container .leaflet-tile {\r\n\tmax-width: none !important;\r\n\tmax-height: none !important;\r\n\t}\r\n\r\n.leaflet-container.leaflet-touch-zoom {\r\n\t-ms-touch-action: pan-x pan-y;\r\n\ttouch-action: pan-x pan-y;\r\n\t}\r\n.leaflet-container.leaflet-touch-drag {\r\n\t-ms-touch-action: pinch-zoom;\r\n\t/* Fallback for FF which doesn't support pinch-zoom */\r\n\ttouch-action: none;\r\n\ttouch-action: pinch-zoom;\r\n}\r\n.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\r\n\t-ms-touch-action: none;\r\n\ttouch-action: none;\r\n}\r\n.leaflet-container {\r\n\t-webkit-tap-highlight-color: transparent;\r\n}\r\n.leaflet-container a {\r\n\t-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\r\n}\r\n.leaflet-tile {\r\n\tfilter: inherit;\r\n\tvisibility: hidden;\r\n\t}\r\n.leaflet-tile-loaded {\r\n\tvisibility: inherit;\r\n\t}\r\n.leaflet-zoom-box {\r\n\twidth: 0;\r\n\theight: 0;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tz-index: 800;\r\n\t}\r\n/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */\r\n.leaflet-overlay-pane svg {\r\n\t-moz-user-select: none;\r\n\t}\r\n\r\n.leaflet-pane { z-index: 400; }\r\n\r\n.leaflet-tile-pane { z-index: 200; }\r\n.leaflet-overlay-pane { z-index: 400; }\r\n.leaflet-shadow-pane { z-index: 500; }\r\n.leaflet-marker-pane { z-index: 600; }\r\n.leaflet-tooltip-pane { z-index: 650; }\r\n.leaflet-popup-pane { z-index: 700; }\r\n\r\n.leaflet-map-pane canvas { z-index: 100; }\r\n.leaflet-map-pane svg { z-index: 200; }\r\n\r\n.leaflet-vml-shape {\r\n\twidth: 1px;\r\n\theight: 1px;\r\n\t}\r\n.lvml {\r\n\tbehavior: url(#default#VML);\r\n\tdisplay: inline-block;\r\n\tposition: absolute;\r\n\t}\r\n\r\n\r\n/* control positioning */\r\n\r\n.leaflet-control {\r\n\tposition: relative;\r\n\tz-index: 800;\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-top,\r\n.leaflet-bottom {\r\n\tposition: absolute;\r\n\tz-index: 1000;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-top {\r\n\ttop: 0;\r\n\t}\r\n.leaflet-right {\r\n\tright: 0;\r\n\t}\r\n.leaflet-bottom {\r\n\tbottom: 0;\r\n\t}\r\n.leaflet-left {\r\n\tleft: 0;\r\n\t}\r\n.leaflet-control {\r\n\tfloat: left;\r\n\tclear: both;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tfloat: right;\r\n\t}\r\n.leaflet-top .leaflet-control {\r\n\tmargin-top: 10px;\r\n\t}\r\n.leaflet-bottom .leaflet-control {\r\n\tmargin-bottom: 10px;\r\n\t}\r\n.leaflet-left .leaflet-control {\r\n\tmargin-left: 10px;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tmargin-right: 10px;\r\n\t}\r\n\r\n\r\n/* zoom and fade animations */\r\n\r\n.leaflet-fade-anim .leaflet-tile {\r\n\twill-change: opacity;\r\n\t}\r\n.leaflet-fade-anim .leaflet-popup {\r\n\topacity: 0;\r\n\t-webkit-transition: opacity 0.2s linear;\r\n\t -moz-transition: opacity 0.2s linear;\r\n\t transition: opacity 0.2s linear;\r\n\t}\r\n.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\r\n\topacity: 1;\r\n\t}\r\n.leaflet-zoom-animated {\r\n\t-webkit-transform-origin: 0 0;\r\n\t -ms-transform-origin: 0 0;\r\n\t transform-origin: 0 0;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\twill-change: transform;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\t-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t transition: transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t}\r\n.leaflet-zoom-anim .leaflet-tile,\r\n.leaflet-pan-anim .leaflet-tile {\r\n\t-webkit-transition: none;\r\n\t -moz-transition: none;\r\n\t transition: none;\r\n\t}\r\n\r\n.leaflet-zoom-anim .leaflet-zoom-hide {\r\n\tvisibility: hidden;\r\n\t}\r\n\r\n\r\n/* cursors */\r\n\r\n.leaflet-interactive {\r\n\tcursor: pointer;\r\n\t}\r\n.leaflet-grab {\r\n\tcursor: -webkit-grab;\r\n\tcursor: -moz-grab;\r\n\tcursor: grab;\r\n\t}\r\n.leaflet-crosshair,\r\n.leaflet-crosshair .leaflet-interactive {\r\n\tcursor: crosshair;\r\n\t}\r\n.leaflet-popup-pane,\r\n.leaflet-control {\r\n\tcursor: auto;\r\n\t}\r\n.leaflet-dragging .leaflet-grab,\r\n.leaflet-dragging .leaflet-grab .leaflet-interactive,\r\n.leaflet-dragging .leaflet-marker-draggable {\r\n\tcursor: move;\r\n\tcursor: -webkit-grabbing;\r\n\tcursor: -moz-grabbing;\r\n\tcursor: grabbing;\r\n\t}\r\n\r\n/* marker & overlays interactivity */\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-image-layer,\r\n.leaflet-pane > svg path,\r\n.leaflet-tile-container {\r\n\tpointer-events: none;\r\n\t}\r\n\r\n.leaflet-marker-icon.leaflet-interactive,\r\n.leaflet-image-layer.leaflet-interactive,\r\n.leaflet-pane > svg path.leaflet-interactive,\r\nsvg.leaflet-image-layer.leaflet-interactive path {\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n\r\n/* visual tweaks */\r\n\r\n.leaflet-container {\r\n\tbackground: #ddd;\r\n\toutline: 0;\r\n\t}\r\n.leaflet-container a {\r\n\tcolor: #0078A8;\r\n\t}\r\n.leaflet-container a.leaflet-active {\r\n\toutline: 2px solid orange;\r\n\t}\r\n.leaflet-zoom-box {\r\n\tborder: 2px dotted #38f;\r\n\tbackground: rgba(255,255,255,0.5);\r\n\t}\r\n\r\n\r\n/* general typography */\r\n.leaflet-container {\r\n\tfont: 12px/1.5 \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n\t}\r\n\r\n\r\n/* general toolbar styles */\r\n\r\n.leaflet-bar {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.65);\r\n\tborder-radius: 4px;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #fff;\r\n\tborder-bottom: 1px solid #ccc;\r\n\twidth: 26px;\r\n\theight: 26px;\r\n\tline-height: 26px;\r\n\tdisplay: block;\r\n\ttext-align: center;\r\n\ttext-decoration: none;\r\n\tcolor: black;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-control-layers-toggle {\r\n\tbackground-position: 50% 50%;\r\n\tbackground-repeat: no-repeat;\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #f4f4f4;\r\n\t}\r\n.leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 4px;\r\n\tborder-top-right-radius: 4px;\r\n\t}\r\n.leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 4px;\r\n\tborder-bottom-right-radius: 4px;\r\n\tborder-bottom: none;\r\n\t}\r\n.leaflet-bar a.leaflet-disabled {\r\n\tcursor: default;\r\n\tbackground-color: #f4f4f4;\r\n\tcolor: #bbb;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-bar a {\r\n\twidth: 30px;\r\n\theight: 30px;\r\n\tline-height: 30px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 2px;\r\n\tborder-top-right-radius: 2px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 2px;\r\n\tborder-bottom-right-radius: 2px;\r\n\t}\r\n\r\n/* zoom control */\r\n\r\n.leaflet-control-zoom-in,\r\n.leaflet-control-zoom-out {\r\n\tfont: bold 18px 'Lucida Console', Monaco, monospace;\r\n\ttext-indent: 1px;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\r\n\tfont-size: 22px;\r\n\t}\r\n\r\n\r\n/* layers control */\r\n\r\n.leaflet-control-layers {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.4);\r\n\tbackground: #fff;\r\n\tborder-radius: 5px;\r\n\t}\r\n.leaflet-control-layers-toggle {\r\n\tbackground-image: url("+v+");\r\n\twidth: 36px;\r\n\theight: 36px;\r\n\t}\r\n.leaflet-retina .leaflet-control-layers-toggle {\r\n\tbackground-image: url("+b+");\r\n\tbackground-size: 26px 26px;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers-toggle {\r\n\twidth: 44px;\r\n\theight: 44px;\r\n\t}\r\n.leaflet-control-layers .leaflet-control-layers-list,\r\n.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\r\n\tdisplay: none;\r\n\t}\r\n.leaflet-control-layers-expanded .leaflet-control-layers-list {\r\n\tdisplay: block;\r\n\tposition: relative;\r\n\t}\r\n.leaflet-control-layers-expanded {\r\n\tpadding: 6px 10px 6px 6px;\r\n\tcolor: #333;\r\n\tbackground: #fff;\r\n\t}\r\n.leaflet-control-layers-scrollbar {\r\n\toverflow-y: scroll;\r\n\toverflow-x: hidden;\r\n\tpadding-right: 5px;\r\n\t}\r\n.leaflet-control-layers-selector {\r\n\tmargin-top: 2px;\r\n\tposition: relative;\r\n\ttop: 1px;\r\n\t}\r\n.leaflet-control-layers label {\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-control-layers-separator {\r\n\theight: 0;\r\n\tborder-top: 1px solid #ddd;\r\n\tmargin: 5px -10px 5px -6px;\r\n\t}\r\n\r\n/* Default icon URLs */\r\n.leaflet-default-icon-path {\r\n\tbackground-image: url("+A+');\r\n\t}\r\n\r\n\r\n/* attribution and scale controls */\r\n\r\n.leaflet-container .leaflet-control-attribution {\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.7);\r\n\tmargin: 0;\r\n\t}\r\n.leaflet-control-attribution,\r\n.leaflet-control-scale-line {\r\n\tpadding: 0 5px;\r\n\tcolor: #333;\r\n\t}\r\n.leaflet-control-attribution a {\r\n\ttext-decoration: none;\r\n\t}\r\n.leaflet-control-attribution a:hover {\r\n\ttext-decoration: underline;\r\n\t}\r\n.leaflet-container .leaflet-control-attribution,\r\n.leaflet-container .leaflet-control-scale {\r\n\tfont-size: 11px;\r\n\t}\r\n.leaflet-left .leaflet-control-scale {\r\n\tmargin-left: 5px;\r\n\t}\r\n.leaflet-bottom .leaflet-control-scale {\r\n\tmargin-bottom: 5px;\r\n\t}\r\n.leaflet-control-scale-line {\r\n\tborder: 2px solid #777;\r\n\tborder-top: none;\r\n\tline-height: 1.1;\r\n\tpadding: 2px 5px 1px;\r\n\tfont-size: 11px;\r\n\twhite-space: nowrap;\r\n\toverflow: hidden;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.5);\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child) {\r\n\tborder-top: 2px solid #777;\r\n\tborder-bottom: none;\r\n\tmargin-top: -2px;\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child):not(:last-child) {\r\n\tborder-bottom: 2px solid #777;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-attribution,\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tbox-shadow: none;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tborder: 2px solid rgba(0,0,0,0.2);\r\n\tbackground-clip: padding-box;\r\n\t}\r\n\r\n\r\n/* popup */\r\n\r\n.leaflet-popup {\r\n\tposition: absolute;\r\n\ttext-align: center;\r\n\tmargin-bottom: 20px;\r\n\t}\r\n.leaflet-popup-content-wrapper {\r\n\tpadding: 1px;\r\n\ttext-align: left;\r\n\tborder-radius: 12px;\r\n\t}\r\n.leaflet-popup-content {\r\n\tmargin: 13px 19px;\r\n\tline-height: 1.4;\r\n\t}\r\n.leaflet-popup-content p {\r\n\tmargin: 18px 0;\r\n\t}\r\n.leaflet-popup-tip-container {\r\n\twidth: 40px;\r\n\theight: 20px;\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\tmargin-left: -20px;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-popup-tip {\r\n\twidth: 17px;\r\n\theight: 17px;\r\n\tpadding: 1px;\r\n\r\n\tmargin: -10px auto 0;\r\n\r\n\t-webkit-transform: rotate(45deg);\r\n\t -moz-transform: rotate(45deg);\r\n\t -ms-transform: rotate(45deg);\r\n\t transform: rotate(45deg);\r\n\t}\r\n.leaflet-popup-content-wrapper,\r\n.leaflet-popup-tip {\r\n\tbackground: white;\r\n\tcolor: #333;\r\n\tbox-shadow: 0 3px 14px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tpadding: 4px 4px 0 0;\r\n\tborder: none;\r\n\ttext-align: center;\r\n\twidth: 18px;\r\n\theight: 14px;\r\n\tfont: 16px/14px Tahoma, Verdana, sans-serif;\r\n\tcolor: #c3c3c3;\r\n\ttext-decoration: none;\r\n\tfont-weight: bold;\r\n\tbackground: transparent;\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button:hover {\r\n\tcolor: #999;\r\n\t}\r\n.leaflet-popup-scrolled {\r\n\toverflow: auto;\r\n\tborder-bottom: 1px solid #ddd;\r\n\tborder-top: 1px solid #ddd;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-popup-content-wrapper {\r\n\t-ms-zoom: 1;\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\twidth: 24px;\r\n\tmargin: 0 auto;\r\n\r\n\t-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";\r\n\tfilter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip-container {\r\n\tmargin-top: -1px;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-control-zoom,\r\n.leaflet-oldie .leaflet-control-layers,\r\n.leaflet-oldie .leaflet-popup-content-wrapper,\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\tborder: 1px solid #999;\r\n\t}\r\n\r\n\r\n/* div icon */\r\n\r\n.leaflet-div-icon {\r\n\tbackground: #fff;\r\n\tborder: 1px solid #666;\r\n\t}\r\n\r\n\r\n/* Tooltip */\r\n/* Base styles for the element that has a tooltip */\r\n.leaflet-tooltip {\r\n\tposition: absolute;\r\n\tpadding: 6px;\r\n\tbackground-color: #fff;\r\n\tborder: 1px solid #fff;\r\n\tborder-radius: 3px;\r\n\tcolor: #222;\r\n\twhite-space: nowrap;\r\n\t-webkit-user-select: none;\r\n\t-moz-user-select: none;\r\n\t-ms-user-select: none;\r\n\tuser-select: none;\r\n\tpointer-events: none;\r\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-tooltip.leaflet-clickable {\r\n\tcursor: pointer;\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-tooltip-top:before,\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\tposition: absolute;\r\n\tpointer-events: none;\r\n\tborder: 6px solid transparent;\r\n\tbackground: transparent;\r\n\tcontent: "";\r\n\t}\r\n\r\n/* Directions */\r\n\r\n.leaflet-tooltip-bottom {\r\n\tmargin-top: 6px;\r\n}\r\n.leaflet-tooltip-top {\r\n\tmargin-top: -6px;\r\n}\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-top:before {\r\n\tleft: 50%;\r\n\tmargin-left: -6px;\r\n\t}\r\n.leaflet-tooltip-top:before {\r\n\tbottom: 0;\r\n\tmargin-bottom: -12px;\r\n\tborder-top-color: #fff;\r\n\t}\r\n.leaflet-tooltip-bottom:before {\r\n\ttop: 0;\r\n\tmargin-top: -12px;\r\n\tmargin-left: -6px;\r\n\tborder-bottom-color: #fff;\r\n\t}\r\n.leaflet-tooltip-left {\r\n\tmargin-left: -6px;\r\n}\r\n.leaflet-tooltip-right {\r\n\tmargin-left: 6px;\r\n}\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\ttop: 50%;\r\n\tmargin-top: -6px;\r\n\t}\r\n.leaflet-tooltip-left:before {\r\n\tright: 0;\r\n\tmargin-right: -12px;\r\n\tborder-left-color: #fff;\r\n\t}\r\n.leaflet-tooltip-right:before {\r\n\tleft: 0;\r\n\tmargin-left: -12px;\r\n\tborder-right-color: #fff;\r\n\t}\r\n',"",{version:3,sources:["webpack://./node_modules/leaflet/dist/leaflet.css"],names:[],mappings:"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",sourcesContent:['/* required styles */\r\n\r\n.leaflet-pane,\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-tile-container,\r\n.leaflet-pane > svg,\r\n.leaflet-pane > canvas,\r\n.leaflet-zoom-box,\r\n.leaflet-image-layer,\r\n.leaflet-layer {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\t}\r\n.leaflet-container {\r\n\toverflow: hidden;\r\n\t}\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\t-webkit-user-select: none;\r\n\t -moz-user-select: none;\r\n\t user-select: none;\r\n\t -webkit-user-drag: none;\r\n\t}\r\n/* Prevents IE11 from highlighting tiles in blue */\r\n.leaflet-tile::selection {\r\n\tbackground: transparent;\r\n}\r\n/* Safari renders non-retina tile on retina better with this, but Chrome is worse */\r\n.leaflet-safari .leaflet-tile {\r\n\timage-rendering: -webkit-optimize-contrast;\r\n\t}\r\n/* hack that prevents hw layers "stretching" when loading new tiles */\r\n.leaflet-safari .leaflet-tile-container {\r\n\twidth: 1600px;\r\n\theight: 1600px;\r\n\t-webkit-transform-origin: 0 0;\r\n\t}\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\tdisplay: block;\r\n\t}\r\n/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */\r\n/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */\r\n.leaflet-container .leaflet-overlay-pane svg,\r\n.leaflet-container .leaflet-marker-pane img,\r\n.leaflet-container .leaflet-shadow-pane img,\r\n.leaflet-container .leaflet-tile-pane img,\r\n.leaflet-container img.leaflet-image-layer,\r\n.leaflet-container .leaflet-tile {\r\n\tmax-width: none !important;\r\n\tmax-height: none !important;\r\n\t}\r\n\r\n.leaflet-container.leaflet-touch-zoom {\r\n\t-ms-touch-action: pan-x pan-y;\r\n\ttouch-action: pan-x pan-y;\r\n\t}\r\n.leaflet-container.leaflet-touch-drag {\r\n\t-ms-touch-action: pinch-zoom;\r\n\t/* Fallback for FF which doesn\'t support pinch-zoom */\r\n\ttouch-action: none;\r\n\ttouch-action: pinch-zoom;\r\n}\r\n.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\r\n\t-ms-touch-action: none;\r\n\ttouch-action: none;\r\n}\r\n.leaflet-container {\r\n\t-webkit-tap-highlight-color: transparent;\r\n}\r\n.leaflet-container a {\r\n\t-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\r\n}\r\n.leaflet-tile {\r\n\tfilter: inherit;\r\n\tvisibility: hidden;\r\n\t}\r\n.leaflet-tile-loaded {\r\n\tvisibility: inherit;\r\n\t}\r\n.leaflet-zoom-box {\r\n\twidth: 0;\r\n\theight: 0;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tz-index: 800;\r\n\t}\r\n/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */\r\n.leaflet-overlay-pane svg {\r\n\t-moz-user-select: none;\r\n\t}\r\n\r\n.leaflet-pane { z-index: 400; }\r\n\r\n.leaflet-tile-pane { z-index: 200; }\r\n.leaflet-overlay-pane { z-index: 400; }\r\n.leaflet-shadow-pane { z-index: 500; }\r\n.leaflet-marker-pane { z-index: 600; }\r\n.leaflet-tooltip-pane { z-index: 650; }\r\n.leaflet-popup-pane { z-index: 700; }\r\n\r\n.leaflet-map-pane canvas { z-index: 100; }\r\n.leaflet-map-pane svg { z-index: 200; }\r\n\r\n.leaflet-vml-shape {\r\n\twidth: 1px;\r\n\theight: 1px;\r\n\t}\r\n.lvml {\r\n\tbehavior: url(#default#VML);\r\n\tdisplay: inline-block;\r\n\tposition: absolute;\r\n\t}\r\n\r\n\r\n/* control positioning */\r\n\r\n.leaflet-control {\r\n\tposition: relative;\r\n\tz-index: 800;\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn\'t have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-top,\r\n.leaflet-bottom {\r\n\tposition: absolute;\r\n\tz-index: 1000;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-top {\r\n\ttop: 0;\r\n\t}\r\n.leaflet-right {\r\n\tright: 0;\r\n\t}\r\n.leaflet-bottom {\r\n\tbottom: 0;\r\n\t}\r\n.leaflet-left {\r\n\tleft: 0;\r\n\t}\r\n.leaflet-control {\r\n\tfloat: left;\r\n\tclear: both;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tfloat: right;\r\n\t}\r\n.leaflet-top .leaflet-control {\r\n\tmargin-top: 10px;\r\n\t}\r\n.leaflet-bottom .leaflet-control {\r\n\tmargin-bottom: 10px;\r\n\t}\r\n.leaflet-left .leaflet-control {\r\n\tmargin-left: 10px;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tmargin-right: 10px;\r\n\t}\r\n\r\n\r\n/* zoom and fade animations */\r\n\r\n.leaflet-fade-anim .leaflet-tile {\r\n\twill-change: opacity;\r\n\t}\r\n.leaflet-fade-anim .leaflet-popup {\r\n\topacity: 0;\r\n\t-webkit-transition: opacity 0.2s linear;\r\n\t -moz-transition: opacity 0.2s linear;\r\n\t transition: opacity 0.2s linear;\r\n\t}\r\n.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\r\n\topacity: 1;\r\n\t}\r\n.leaflet-zoom-animated {\r\n\t-webkit-transform-origin: 0 0;\r\n\t -ms-transform-origin: 0 0;\r\n\t transform-origin: 0 0;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\twill-change: transform;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\t-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t transition: transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t}\r\n.leaflet-zoom-anim .leaflet-tile,\r\n.leaflet-pan-anim .leaflet-tile {\r\n\t-webkit-transition: none;\r\n\t -moz-transition: none;\r\n\t transition: none;\r\n\t}\r\n\r\n.leaflet-zoom-anim .leaflet-zoom-hide {\r\n\tvisibility: hidden;\r\n\t}\r\n\r\n\r\n/* cursors */\r\n\r\n.leaflet-interactive {\r\n\tcursor: pointer;\r\n\t}\r\n.leaflet-grab {\r\n\tcursor: -webkit-grab;\r\n\tcursor: -moz-grab;\r\n\tcursor: grab;\r\n\t}\r\n.leaflet-crosshair,\r\n.leaflet-crosshair .leaflet-interactive {\r\n\tcursor: crosshair;\r\n\t}\r\n.leaflet-popup-pane,\r\n.leaflet-control {\r\n\tcursor: auto;\r\n\t}\r\n.leaflet-dragging .leaflet-grab,\r\n.leaflet-dragging .leaflet-grab .leaflet-interactive,\r\n.leaflet-dragging .leaflet-marker-draggable {\r\n\tcursor: move;\r\n\tcursor: -webkit-grabbing;\r\n\tcursor: -moz-grabbing;\r\n\tcursor: grabbing;\r\n\t}\r\n\r\n/* marker & overlays interactivity */\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-image-layer,\r\n.leaflet-pane > svg path,\r\n.leaflet-tile-container {\r\n\tpointer-events: none;\r\n\t}\r\n\r\n.leaflet-marker-icon.leaflet-interactive,\r\n.leaflet-image-layer.leaflet-interactive,\r\n.leaflet-pane > svg path.leaflet-interactive,\r\nsvg.leaflet-image-layer.leaflet-interactive path {\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn\'t have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n\r\n/* visual tweaks */\r\n\r\n.leaflet-container {\r\n\tbackground: #ddd;\r\n\toutline: 0;\r\n\t}\r\n.leaflet-container a {\r\n\tcolor: #0078A8;\r\n\t}\r\n.leaflet-container a.leaflet-active {\r\n\toutline: 2px solid orange;\r\n\t}\r\n.leaflet-zoom-box {\r\n\tborder: 2px dotted #38f;\r\n\tbackground: rgba(255,255,255,0.5);\r\n\t}\r\n\r\n\r\n/* general typography */\r\n.leaflet-container {\r\n\tfont: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;\r\n\t}\r\n\r\n\r\n/* general toolbar styles */\r\n\r\n.leaflet-bar {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.65);\r\n\tborder-radius: 4px;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #fff;\r\n\tborder-bottom: 1px solid #ccc;\r\n\twidth: 26px;\r\n\theight: 26px;\r\n\tline-height: 26px;\r\n\tdisplay: block;\r\n\ttext-align: center;\r\n\ttext-decoration: none;\r\n\tcolor: black;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-control-layers-toggle {\r\n\tbackground-position: 50% 50%;\r\n\tbackground-repeat: no-repeat;\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #f4f4f4;\r\n\t}\r\n.leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 4px;\r\n\tborder-top-right-radius: 4px;\r\n\t}\r\n.leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 4px;\r\n\tborder-bottom-right-radius: 4px;\r\n\tborder-bottom: none;\r\n\t}\r\n.leaflet-bar a.leaflet-disabled {\r\n\tcursor: default;\r\n\tbackground-color: #f4f4f4;\r\n\tcolor: #bbb;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-bar a {\r\n\twidth: 30px;\r\n\theight: 30px;\r\n\tline-height: 30px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 2px;\r\n\tborder-top-right-radius: 2px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 2px;\r\n\tborder-bottom-right-radius: 2px;\r\n\t}\r\n\r\n/* zoom control */\r\n\r\n.leaflet-control-zoom-in,\r\n.leaflet-control-zoom-out {\r\n\tfont: bold 18px \'Lucida Console\', Monaco, monospace;\r\n\ttext-indent: 1px;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\r\n\tfont-size: 22px;\r\n\t}\r\n\r\n\r\n/* layers control */\r\n\r\n.leaflet-control-layers {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.4);\r\n\tbackground: #fff;\r\n\tborder-radius: 5px;\r\n\t}\r\n.leaflet-control-layers-toggle {\r\n\tbackground-image: url(images/layers.png);\r\n\twidth: 36px;\r\n\theight: 36px;\r\n\t}\r\n.leaflet-retina .leaflet-control-layers-toggle {\r\n\tbackground-image: url(images/layers-2x.png);\r\n\tbackground-size: 26px 26px;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers-toggle {\r\n\twidth: 44px;\r\n\theight: 44px;\r\n\t}\r\n.leaflet-control-layers .leaflet-control-layers-list,\r\n.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\r\n\tdisplay: none;\r\n\t}\r\n.leaflet-control-layers-expanded .leaflet-control-layers-list {\r\n\tdisplay: block;\r\n\tposition: relative;\r\n\t}\r\n.leaflet-control-layers-expanded {\r\n\tpadding: 6px 10px 6px 6px;\r\n\tcolor: #333;\r\n\tbackground: #fff;\r\n\t}\r\n.leaflet-control-layers-scrollbar {\r\n\toverflow-y: scroll;\r\n\toverflow-x: hidden;\r\n\tpadding-right: 5px;\r\n\t}\r\n.leaflet-control-layers-selector {\r\n\tmargin-top: 2px;\r\n\tposition: relative;\r\n\ttop: 1px;\r\n\t}\r\n.leaflet-control-layers label {\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-control-layers-separator {\r\n\theight: 0;\r\n\tborder-top: 1px solid #ddd;\r\n\tmargin: 5px -10px 5px -6px;\r\n\t}\r\n\r\n/* Default icon URLs */\r\n.leaflet-default-icon-path {\r\n\tbackground-image: url(images/marker-icon.png);\r\n\t}\r\n\r\n\r\n/* attribution and scale controls */\r\n\r\n.leaflet-container .leaflet-control-attribution {\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.7);\r\n\tmargin: 0;\r\n\t}\r\n.leaflet-control-attribution,\r\n.leaflet-control-scale-line {\r\n\tpadding: 0 5px;\r\n\tcolor: #333;\r\n\t}\r\n.leaflet-control-attribution a {\r\n\ttext-decoration: none;\r\n\t}\r\n.leaflet-control-attribution a:hover {\r\n\ttext-decoration: underline;\r\n\t}\r\n.leaflet-container .leaflet-control-attribution,\r\n.leaflet-container .leaflet-control-scale {\r\n\tfont-size: 11px;\r\n\t}\r\n.leaflet-left .leaflet-control-scale {\r\n\tmargin-left: 5px;\r\n\t}\r\n.leaflet-bottom .leaflet-control-scale {\r\n\tmargin-bottom: 5px;\r\n\t}\r\n.leaflet-control-scale-line {\r\n\tborder: 2px solid #777;\r\n\tborder-top: none;\r\n\tline-height: 1.1;\r\n\tpadding: 2px 5px 1px;\r\n\tfont-size: 11px;\r\n\twhite-space: nowrap;\r\n\toverflow: hidden;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.5);\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child) {\r\n\tborder-top: 2px solid #777;\r\n\tborder-bottom: none;\r\n\tmargin-top: -2px;\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child):not(:last-child) {\r\n\tborder-bottom: 2px solid #777;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-attribution,\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tbox-shadow: none;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tborder: 2px solid rgba(0,0,0,0.2);\r\n\tbackground-clip: padding-box;\r\n\t}\r\n\r\n\r\n/* popup */\r\n\r\n.leaflet-popup {\r\n\tposition: absolute;\r\n\ttext-align: center;\r\n\tmargin-bottom: 20px;\r\n\t}\r\n.leaflet-popup-content-wrapper {\r\n\tpadding: 1px;\r\n\ttext-align: left;\r\n\tborder-radius: 12px;\r\n\t}\r\n.leaflet-popup-content {\r\n\tmargin: 13px 19px;\r\n\tline-height: 1.4;\r\n\t}\r\n.leaflet-popup-content p {\r\n\tmargin: 18px 0;\r\n\t}\r\n.leaflet-popup-tip-container {\r\n\twidth: 40px;\r\n\theight: 20px;\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\tmargin-left: -20px;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-popup-tip {\r\n\twidth: 17px;\r\n\theight: 17px;\r\n\tpadding: 1px;\r\n\r\n\tmargin: -10px auto 0;\r\n\r\n\t-webkit-transform: rotate(45deg);\r\n\t -moz-transform: rotate(45deg);\r\n\t -ms-transform: rotate(45deg);\r\n\t transform: rotate(45deg);\r\n\t}\r\n.leaflet-popup-content-wrapper,\r\n.leaflet-popup-tip {\r\n\tbackground: white;\r\n\tcolor: #333;\r\n\tbox-shadow: 0 3px 14px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tpadding: 4px 4px 0 0;\r\n\tborder: none;\r\n\ttext-align: center;\r\n\twidth: 18px;\r\n\theight: 14px;\r\n\tfont: 16px/14px Tahoma, Verdana, sans-serif;\r\n\tcolor: #c3c3c3;\r\n\ttext-decoration: none;\r\n\tfont-weight: bold;\r\n\tbackground: transparent;\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button:hover {\r\n\tcolor: #999;\r\n\t}\r\n.leaflet-popup-scrolled {\r\n\toverflow: auto;\r\n\tborder-bottom: 1px solid #ddd;\r\n\tborder-top: 1px solid #ddd;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-popup-content-wrapper {\r\n\t-ms-zoom: 1;\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\twidth: 24px;\r\n\tmargin: 0 auto;\r\n\r\n\t-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";\r\n\tfilter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip-container {\r\n\tmargin-top: -1px;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-control-zoom,\r\n.leaflet-oldie .leaflet-control-layers,\r\n.leaflet-oldie .leaflet-popup-content-wrapper,\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\tborder: 1px solid #999;\r\n\t}\r\n\r\n\r\n/* div icon */\r\n\r\n.leaflet-div-icon {\r\n\tbackground: #fff;\r\n\tborder: 1px solid #666;\r\n\t}\r\n\r\n\r\n/* Tooltip */\r\n/* Base styles for the element that has a tooltip */\r\n.leaflet-tooltip {\r\n\tposition: absolute;\r\n\tpadding: 6px;\r\n\tbackground-color: #fff;\r\n\tborder: 1px solid #fff;\r\n\tborder-radius: 3px;\r\n\tcolor: #222;\r\n\twhite-space: nowrap;\r\n\t-webkit-user-select: none;\r\n\t-moz-user-select: none;\r\n\t-ms-user-select: none;\r\n\tuser-select: none;\r\n\tpointer-events: none;\r\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-tooltip.leaflet-clickable {\r\n\tcursor: pointer;\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-tooltip-top:before,\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\tposition: absolute;\r\n\tpointer-events: none;\r\n\tborder: 6px solid transparent;\r\n\tbackground: transparent;\r\n\tcontent: "";\r\n\t}\r\n\r\n/* Directions */\r\n\r\n.leaflet-tooltip-bottom {\r\n\tmargin-top: 6px;\r\n}\r\n.leaflet-tooltip-top {\r\n\tmargin-top: -6px;\r\n}\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-top:before {\r\n\tleft: 50%;\r\n\tmargin-left: -6px;\r\n\t}\r\n.leaflet-tooltip-top:before {\r\n\tbottom: 0;\r\n\tmargin-bottom: -12px;\r\n\tborder-top-color: #fff;\r\n\t}\r\n.leaflet-tooltip-bottom:before {\r\n\ttop: 0;\r\n\tmargin-top: -12px;\r\n\tmargin-left: -6px;\r\n\tborder-bottom-color: #fff;\r\n\t}\r\n.leaflet-tooltip-left {\r\n\tmargin-left: -6px;\r\n}\r\n.leaflet-tooltip-right {\r\n\tmargin-left: 6px;\r\n}\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\ttop: 50%;\r\n\tmargin-top: -6px;\r\n\t}\r\n.leaflet-tooltip-left:before {\r\n\tright: 0;\r\n\tmargin-right: -12px;\r\n\tborder-left-color: #fff;\r\n\t}\r\n.leaflet-tooltip-right:before {\r\n\tleft: 0;\r\n\tmargin-left: -12px;\r\n\tborder-right-color: #fff;\r\n\t}\r\n'],sourceRoot:""}]),n.default=m},function(t,n,e){var r=e(279);"string"==typeof r&&(r=[[t.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};e(89)(r,i);r.locals&&(t.exports=r.locals)},function(t,n,e){"use strict";e.r(n);var r=e(10),i=e.n(r),o=e(11),a=e.n(o),s=e(242),u=a()(i.a);u.i(s.a),u.push([t.i,'/*! HTML5 Boilerplate v5.0 | MIT License | http://h5bp.com/ */\n\nhtml {\n color: #222;\n font-size: 1em;\n line-height: 1.4;\n}\n\n::-webkit-scrollbar {\n display: none;\n}\n\n::-moz-selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\n::selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\nbody {\n margin: 0;\n width: 100vw;\n height: 100vh;\n display: flex;\n flex-flow: row wrap;\n}\n\nhr {\n display: block;\n height: 1px;\n border: 0;\n border-top: 1px solid #ccc;\n margin: 1em 0;\n padding: 0;\n}\n\naudio,\ncanvas,\niframe,\nimg,\nsvg,\nvideo {\n vertical-align: middle;\n}\n\nfieldset {\n border: 0;\n margin: 0;\n padding: 0;\n}\n\nselect, textarea {\n border: none;\n border-bottom: solid 1px black;\n outline: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-border-radius: 0px;\n -moz-border-radius: 0px;\n border-radius: 0px;\n width: 100px;\n padding: 10px 0;\n background: transparent;\n}\n\ntextarea {\n resize: vertical;\n width: 100%;\n height: 25px;\n}\n\nbutton {\n -webkit-appearance: button;\n cursor: pointer;\n border: none;\n background-color: hotpink;\n padding: 10px;\n width: 100px;\n color: white;\n}\n\n.form-group {\n margin: 20px 0;\n}\n\n.browserupgrade {\n margin: 0.2em 0;\n background: #ccc;\n color: #000;\n padding: 0.2em 0;\n}\n\n\n/* ==========================================================================\n Author\'s custom styles\n ========================================================================== */\n\n/* ==========================================================================\n Media Queries\n ========================================================================== */\n\n@media only screen and (min-width: 68.75em) {\n #left {\n width: 45%;\n }\n\n #right {\n width: 45%;\n }\n}\n\n@media print,\n (-o-min-device-pixel-ratio: 5/4),\n (-webkit-min-device-pixel-ratio: 1.25),\n (min-resolution: 120dpi) {\n\n}\n\n/* ==========================================================================\n Helper classes\n ========================================================================== */\n\n.hidden {\n display: none !important;\n visibility: hidden;\n}\n\n.visuallyhidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.visuallyhidden.focusable:active,\n.visuallyhidden.focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.invisible {\n visibility: hidden;\n}\n\n.clearfix:before,\n.clearfix:after {\n content: " ";\n display: table;\n}\n\n.clearfix:after {\n clear: both;\n}\n\n.clearfix {\n *zoom: 1;\n}\n\n/* ==========================================================================\n Print styles\n ========================================================================== */\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: " (" attr(href) ")";\n }\n\n abbr[title]:after {\n content: " (" attr(title) ")";\n }\n\n a[href^="#"]:after,\n a[href^="javascript:"]:after {\n content: "";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n}\n',"",{version:3,sources:["webpack://./framework/styles/main.css"],names:[],mappings:"AAAA,6DAA6D;;AAE7D;IACI,WAAW;IACX,cAAc;IACd,gBAAgB;AACpB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,mBAAmB;IACnB,iBAAiB;AACrB;;AAEA;IACI,mBAAmB;IACnB,iBAAiB;AACrB;;AAEA;EACE,SAAS;EACT,YAAY;EACZ,aAAa;EACb,aAAa;EACb,mBAAmB;AACrB;;AAEA;IACI,cAAc;IACd,WAAW;IACX,SAAS;IACT,0BAA0B;IAC1B,aAAa;IACb,UAAU;AACd;;AAEA;;;;;;IAMI,sBAAsB;AAC1B;;AAEA;IACI,SAAS;IACT,SAAS;IACT,UAAU;AACd;;AAEA;IACI,YAAY;IACZ,8BAA8B;IAC9B,aAAa;IACb,wBAAwB;IACxB,qBAAqB;IACrB,gBAAgB;IAChB,0BAA0B;IAC1B,uBAAuB;IACvB,kBAAkB;IAClB,YAAY;IACZ,eAAe;IACf,uBAAuB;AAC3B;;AAEA;IACI,gBAAgB;IAChB,WAAW;IACX,YAAY;AAChB;;AAEA;EACE,0BAA0B;IACxB,eAAe;IACf,YAAY;IACZ,yBAAyB;IACzB,aAAa;IACb,YAAY;IACZ,YAAY;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,gBAAgB;AACpB;;;AAGA;;+EAE+E;;AAI/E;;+EAE+E;;AAE/E;IACI;QACI,UAAU;IACd;;IAEA;QACI,UAAU;IACd;AACJ;;AAEA;;;;;AAKA;;AAEA;;+EAE+E;;AAE/E;IACI,wBAAwB;IACxB,kBAAkB;AACtB;;AAEA;IACI,SAAS;IACT,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,UAAU;IACV,kBAAkB;IAClB,UAAU;AACd;;AAEA;;IAEI,UAAU;IACV,YAAY;IACZ,SAAS;IACT,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;AACf;;AAEA;IACI,kBAAkB;AACtB;;AAEA;;IAEI,YAAY;IACZ,cAAc;AAClB;;AAEA;IACI,WAAW;AACf;;AAEA;KACI,OAAQ;AACZ;;AAEA;;+EAE+E;;AAE/E;IACI;;;QAGI,kCAAkC;QAClC,sBAAsB;QACtB,2BAA2B;QAC3B,4BAA4B;IAChC;;IAEA;;QAEI,0BAA0B;IAC9B;;IAEA;QACI,4BAA4B;IAChC;;IAEA;QACI,6BAA6B;IACjC;;IAEA;;QAEI,WAAW;IACf;;IAEA;;QAEI,sBAAsB;QACtB,wBAAwB;IAC5B;;IAEA;QACI,2BAA2B;IAC/B;;IAEA;;QAEI,wBAAwB;IAC5B;;IAEA;QACI,0BAA0B;IAC9B;;IAEA;;;QAGI,UAAU;QACV,SAAS;IACb;;IAEA;;QAEI,uBAAuB;IAC3B;AACJ",sourcesContent:['/*! HTML5 Boilerplate v5.0 | MIT License | http://h5bp.com/ */\n\nhtml {\n color: #222;\n font-size: 1em;\n line-height: 1.4;\n}\n\n::-webkit-scrollbar {\n display: none;\n}\n\n::-moz-selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\n::selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\nbody {\n margin: 0;\n width: 100vw;\n height: 100vh;\n display: flex;\n flex-flow: row wrap;\n}\n\nhr {\n display: block;\n height: 1px;\n border: 0;\n border-top: 1px solid #ccc;\n margin: 1em 0;\n padding: 0;\n}\n\naudio,\ncanvas,\niframe,\nimg,\nsvg,\nvideo {\n vertical-align: middle;\n}\n\nfieldset {\n border: 0;\n margin: 0;\n padding: 0;\n}\n\nselect, textarea {\n border: none;\n border-bottom: solid 1px black;\n outline: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-border-radius: 0px;\n -moz-border-radius: 0px;\n border-radius: 0px;\n width: 100px;\n padding: 10px 0;\n background: transparent;\n}\n\ntextarea {\n resize: vertical;\n width: 100%;\n height: 25px;\n}\n\nbutton {\n -webkit-appearance: button;\n cursor: pointer;\n border: none;\n background-color: hotpink;\n padding: 10px;\n width: 100px;\n color: white;\n}\n\n.form-group {\n margin: 20px 0;\n}\n\n.browserupgrade {\n margin: 0.2em 0;\n background: #ccc;\n color: #000;\n padding: 0.2em 0;\n}\n\n\n/* ==========================================================================\n Author\'s custom styles\n ========================================================================== */\n\n@import \'app.css\';\n\n/* ==========================================================================\n Media Queries\n ========================================================================== */\n\n@media only screen and (min-width: 68.75em) {\n #left {\n width: 45%;\n }\n\n #right {\n width: 45%;\n }\n}\n\n@media print,\n (-o-min-device-pixel-ratio: 5/4),\n (-webkit-min-device-pixel-ratio: 1.25),\n (min-resolution: 120dpi) {\n\n}\n\n/* ==========================================================================\n Helper classes\n ========================================================================== */\n\n.hidden {\n display: none !important;\n visibility: hidden;\n}\n\n.visuallyhidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.visuallyhidden.focusable:active,\n.visuallyhidden.focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.invisible {\n visibility: hidden;\n}\n\n.clearfix:before,\n.clearfix:after {\n content: " ";\n display: table;\n}\n\n.clearfix:after {\n clear: both;\n}\n\n.clearfix {\n *zoom: 1;\n}\n\n/* ==========================================================================\n Print styles\n ========================================================================== */\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: " (" attr(href) ")";\n }\n\n abbr[title]:after {\n content: " (" attr(title) ")";\n }\n\n a[href^="#"]:after,\n a[href^="javascript:"]:after {\n content: "";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n}\n'],sourceRoot:""}]),n.default=u},function(t,n,e){var r=e(281);"string"==typeof r&&(r=[[t.i,r,""]]);var i={hmr:!0,transform:void 0,insertInto:void 0};e(89)(r,i);r.locals&&(t.exports=r.locals)},function(t,n,e){"use strict";e.r(n);var r=e(10),i=e.n(r),o=e(11),a=e.n(o),s=e(56),u=e.n(s),c=e(248),l=e.n(c),f=e(249),h=e.n(f),d=a()(i.a),p=u()(l.a),m=u()(h.a);d.push([t.i,"@font-face {\n font-family: OpenSans;\n src: url("+p+");\n}\n\n@font-face {\n font-family: OpenSans-Light;\n src: url("+m+");\n}\n\n","",{version:3,sources:["webpack://./framework/fonts/fonts.css"],names:[],mappings:"AAAA;IACI,qBAAqB;IACrB,4CAA8B;AAClC;;AAEA;IACI,2BAA2B;IAC3B,4CAA4B;AAChC",sourcesContent:["@font-face {\n font-family: OpenSans;\n src: url(OpenSans-Regular.ttf);\n}\n\n@font-face {\n font-family: OpenSans-Light;\n src: url(OpenSans-Light.ttf);\n}\n\n"],sourceRoot:""}]),n.default=d},function(t,n,e){"use strict";function r(t,n){for(var e=0;e-1?s[u?n[c]:c]:void 0}}},function(t,n,e){var r=e(285),i=e(347),o=e(230);t.exports=function(t){var n=i(t);return 1==n.length&&n[0][2]?o(n[0][0],n[0][1]):function(e){return e===t||r(e,t,n)}}},function(t,n,e){var r=e(216),i=e(221);t.exports=function(t,n,e,o){var a=e.length,s=a,u=!o;if(null==t)return!s;for(t=Object(t);a--;){var c=e[a];if(u&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++a-1}},function(t,n,e){var r=e(92);t.exports=function(t,n){var e=this.__data__,i=r(e,t);return i<0?(++this.size,e.push([t,n])):e[i][1]=n,this}},function(t,n,e){var r=e(91);t.exports=function(){this.__data__=new r,this.size=0}},function(t,n){t.exports=function(t){var n=this.__data__,e=n.delete(t);return this.size=n.size,e}},function(t,n){t.exports=function(t){return this.__data__.get(t)}},function(t,n){t.exports=function(t){return this.__data__.has(t)}},function(t,n,e){var r=e(91),i=e(202),o=e(203);t.exports=function(t,n){var e=this.__data__;if(e instanceof r){var a=e.__data__;if(!i||a.length<199)return a.push([t,n]),this.size=++e.size,this;e=this.__data__=new o(a)}return e.set(t,n),this.size=e.size,this}},function(t,n,e){var r=e(218),i=e(299),o=e(94),a=e(220),s=/^\[object .+?Constructor\]$/,u=Function.prototype,c=Object.prototype,l=u.toString,f=c.hasOwnProperty,h=RegExp("^"+l.call(f).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||i(t))&&(r(t)?h:s).test(a(t))}},function(t,n,e){var r=e(93),i=Object.prototype,o=i.hasOwnProperty,a=i.toString,s=r?r.toStringTag:void 0;t.exports=function(t){var n=o.call(t,s),e=t[s];try{t[s]=void 0;var r=!0}catch(t){}var i=a.call(t);return r&&(n?t[s]=e:delete t[s]),i}},function(t,n){var e=Object.prototype.toString;t.exports=function(t){return e.call(t)}},function(t,n,e){var r,i=e(300),o=(r=/[^.]+$/.exec(i&&i.keys&&i.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";t.exports=function(t){return!!o&&o in t}},function(t,n,e){var r=e(40)["__core-js_shared__"];t.exports=r},function(t,n){t.exports=function(t,n){return null==t?void 0:t[n]}},function(t,n,e){var r=e(303),i=e(91),o=e(202);t.exports=function(){this.size=0,this.__data__={hash:new r,map:new(o||i),string:new r}}},function(t,n,e){var r=e(304),i=e(305),o=e(306),a=e(307),s=e(308);function u(t){var n=-1,e=null==t?0:t.length;for(this.clear();++n1&&void 0!==arguments[1]?arguments[1]:1,e=new Audio(t);if(!(n<=1&&n>=0))throw new Error("Enter volume between 0 and 1");e.volume=n,e.play()}}])&&r(n.prototype,e),i&&r(n,i),t}();t.exports=i},function(t){t.exports=JSON.parse('{"menuDetails":[{"name":"Pappardelle","pageInfo":"A wide egg noodle with Tuscan origins, pappardelle is often served with hearty meat sauces"},{"name":"Farfalle","pageInfo":"Also called bow tie pasta for its shape, farfalle (the Italian word for butterfly) makes a great cold pasta salad, and can also dress up a warm bowl of meat and veggies"},{"name":"Shells","pageInfo":"Shells work in a variety of settings, depending on their size. If your shells are large enough, you can stuff and bake them, while medium-sized shells work well in casseroles and with meat sauces. Reserve the smallest shells for adding to soups and stews."},{"name":"Campanelle","pageInfo":"Literally meaning “bellflowers,” campanelle sports a very unique shape that’s great at capturing thick, creamy, or meaty sauces. And they work wonders in cheesy bowls, too."}]}')},function(t,n,e){"use strict";var r=e(381),i=e(384),o=e(386),a=e(388);t.exports={"/":r,contacts:i,team:o,404:a}},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){for(var e=0;e= 4.3.0"],main:function(t,n,e,r,i){var o,a=null!=n?n:t.nullContext||{},s=t.hooks.helperMissing,u=t.escapeExpression,c=t.lookupProperty||function(t,n){if(Object.prototype.hasOwnProperty.call(t,n))return t[n]};return'
\n

Date: '+u("function"==typeof(o=null!=(o=c(e,"date")||(null!=n?c(n,"date"):n))?o:s)?o.call(a,{name:"date",hash:{},data:i,loc:{start:{line:2,column:33},end:{line:2,column:41}}}):o)+'

\n

Time: '+u("function"==typeof(o=null!=(o=c(e,"time")||(null!=n?c(n,"time"):n))?o:s)?o.call(a,{name:"time",hash:{},data:i,loc:{start:{line:3,column:33},end:{line:3,column:41}}}):o)+'

\n \"\"\n
Hello, World!
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

\n

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

\n
\n"},useData:!0})},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){for(var e=0;e\n Name: "+a(o(null!=n?s(n,"name"):n,n))+"\n
\n Phone: "+a(o(null!=n?s(n,"phoneNumber"):n,n))+"\n \n"},compiler:[8,">= 4.3.0"],main:function(t,n,e,r,i){var o,a=t.lookupProperty||function(t,n){if(Object.prototype.hasOwnProperty.call(t,n))return t[n]};return'
\n

Contacts

\n
    \n'+(null!=(o=a(e,"each").call(null!=n?n:t.nullContext||{},null!=n?a(n,"contacts"):n,{name:"each",hash:{},fn:t.program(1,i,0),inverse:t.noop,data:i,loc:{start:{line:4,column:4},end:{line:10,column:13}}}))?o:"")+"
\n
"},useData:!0})},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){return(o=Object.setPrototypeOf||function(t,n){return t.__proto__=n,t})(t,n)}function a(t){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var e,r=c(t);if(n){var i=c(this).constructor;e=Reflect.construct(r,arguments,i)}else e=r.apply(this,arguments);return s(this,e)}}function s(t,n){if(n&&("object"===r(n)||"function"==typeof n))return n;if(void 0!==n)throw new TypeError("Derived constructors may only return object or undefined");return u(t)}function u(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function c(t){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function l(t,n,e){return n in t?Object.defineProperty(t,n,{value:e,enumerable:!0,configurable:!0,writable:!0}):t[n]=e,t}var f=function(t){!function(t,n){if("function"!=typeof n&&null!==n)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(n&&n.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),n&&o(t,n)}(r,t);var n=a(r);function r(){var t;i(this,r);for(var o=arguments.length,a=new Array(o),s=0;s= 4.3.0"],main:function(t,n,e,r,i){return'
\n

Made by:

\n
    \n \x3c!-- TODO: Add your name as a list element --\x3e\n
  • Ray
  • \n
\n
'},useData:!0})},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){for(var e=0;e= 4.3.0"],main:function(t,n,e,r,i){return"

Oops!

\n

The page you're looking for could not be found.

\n"},useData:!0})},function(t,n,e){"use strict";var r=[{type:"alert",label:"Alert",defaultValue:"This is a test alert",view:e(391)},{type:"base",label:"Base",defaultValue:"This is a test base notification"}];t.exports=r},function(t,n,e){"use strict";function r(t){return(r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function i(t,n){if(!(t instanceof n))throw new TypeError("Cannot call a class as a function")}function o(t,n){for(var e=0;e= 4.3.0"],main:function(t,n,e,r,i){var o,a=t.lookupProperty||function(t,n){if(Object.prototype.hasOwnProperty.call(t,n))return t[n]};return"Alert\n
\n "+t.escapeExpression("function"==typeof(o=null!=(o=a(e,"message")||(null!=n?a(n,"message"):n))?o:t.hooks.helperMissing)?o.call(null!=n?n:t.nullContext||{},{name:"message",hash:{},data:i,loc:{start:{line:3,column:2},end:{line:3,column:13}}}):o)+"\n
\n"},useData:!0})}]); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9saWZ0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9pbm5lckZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9PYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9ub29wLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hc3luYy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvZXhlY3V0ZVNjaGVkdWxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9lbXB0eS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyclJlbW92ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0VtcHR5RXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzT3JBcmdBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2NvbmZpZy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL05vdGlmaWNhdGlvbkZhY3Rvcmllcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmliZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVkdWNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL3V0aWxzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNTY2hlZHVsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQWN0aW9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ludGVydmFsUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNBY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Ob3RpZmljYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc0FycmF5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tU3Vic2NyaWJhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL29ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3BpcGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2Vycm9yQ29udGV4dC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvcnVudGltZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZkNvdW50LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2F1ZGl0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvaWdub3JlRWxlbWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwVG8uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3RVbnRpbENoYW5nZWQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdEFsbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZUxhc3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0FzeW5jU3ViamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvVW5zdWJzY3JpcHRpb25FcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0RhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VJbnRlcm5hbHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9Ob3RpZmljYXRpb25IdWIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0xpc3RDYWNoZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXNzb2NJbmRleE9mLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19TeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUNyZWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWFwRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1N5bWJvbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fdG9LZXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRUaW1lLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJXaGVuLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUFsbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXBUby5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRXaXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvdW50LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlVGltZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V2ZXJ5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmFsaXplLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9ncm91cEJ5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbGFzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXRlcmlhbGl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcFRvLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWluLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYWlyd2lzZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wbHVjay5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hCZWhhdmlvci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGVUaW1lLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zaGFyZVJlcGxheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwTGFzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoU2Nhbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVdoaWxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RhcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZUludGVydmFsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRXaXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93VGltZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aXRoTGF0ZXN0RnJvbS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1NlcXVlbmNlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcmFjZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0FzeW5jSXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVJdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvYXJnc0FyZ0FycmF5T3JPYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2NyZWF0ZU9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbm90LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2pvaW5BbGxJbnRlcm5hbHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2NhbkludGVybmFscy5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvQmFzZVBhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9CYXNlTm90aWZpY2F0aW9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9QdWJsaWNOb3RpZmljYXRpb25IdWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9iYXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2xvZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL3BlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWVQcm92aWRlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZG9tL2FuaW1hdGlvbkZyYW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvSW1tZWRpYXRlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc2FwU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL3F1ZXVlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9sYXN0VmFsdWVGcm9tLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvZmlyc3RWYWx1ZUZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmRDYWxsYmFja0ludGVybmFscy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kZWZlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ZvcmtKb2luLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9paWYuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9uZXZlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcGFpcnMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcmFuZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BhcnRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yYWNlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvbWFpbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9wYWdlcy9ob21lUGFnZS9ob21lUGFnZS5jc3MiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9tYXAuY3NzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvbWVudS5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xlYWZsZXQvZGlzdC9pbWFnZXMvbGF5ZXJzLnBuZyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2ltYWdlcy9sYXllcnMtMngucG5nIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sZWFmbGV0L2Rpc3QvaW1hZ2VzL21hcmtlci1pY29uLnBuZyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3R5bGVzL2FwcC5jc3MiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3N0eWxlcy9ub3JtYWxpemUubWluLmNzcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3R5bGVzL2xheW91dC5jc3MiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3N0eWxlcy93YXRjaC5jc3MiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3N0eWxlcy9ub3RpZmljYXRpb24uY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zdHlsZXMvbWVudS5jc3MiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL2ZvbnRzL09wZW5TYW5zLVJlZ3VsYXIudHRmIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9mb250cy9PcGVuU2Fucy1MaWdodC50dGYiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9tYWluLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvYXBwLmNzcz81ZGZjIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvYXBwLmNzcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi91cmxzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvc3RvcmFnZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZXZlbnRzL2V2ZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvdGVtcGxhdGVzL2Jhc2VOb3RpZmljYXRpb24uaGJzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMucnVudGltZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9oZWxwZXJzL2VhY2guanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9oZWxwZXJzL2hlbHBlci1taXNzaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9pZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvbG9nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9sb29rdXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9oZWxwZXJzL3dpdGguanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9kZWNvcmF0b3JzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvZGVjb3JhdG9ycy9pbmxpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9pbnRlcm5hbC9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9zYWZlLXN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9pbnRlcm5hbC93cmFwSGVscGVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvbm8tY29uZmxpY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9BcHAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9NeU1hcC5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2xlYWZsZXQtc3JjLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sZWFmbGV0L2Rpc3QvbGVhZmxldC5jc3M/MTlkMiIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2xlYWZsZXQuY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zdHlsZXMvbWFpbi5jc3M/YmQ3MSIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3R5bGVzL21haW4uY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9mb250cy9mb250cy5jc3M/ZTUzOSIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvZm9udHMvZm9udHMuY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvTm90aWZpY2F0aW9uRm9ybS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fY3JlYXRlRmluZC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc01hdGNoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVDbGVhci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlU2V0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0NsZWFyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0RlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrSGFzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja1NldC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzTmF0aXZlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRSYXdUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX29iamVjdFRvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19pc01hc2tlZC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fY29yZUpzRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0VmFsdWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0hhc2guanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hDbGVhci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaERlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEdldC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaEhhcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzaFNldC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzRXF1YWxEZWVwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXRDYWNoZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0Q2FjaGVBZGQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVNvbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NhY2hlSGFzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbEJ5VGFnLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19VaW50OEFycmF5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBUb0FycmF5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRUb0FycmF5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19lcXVhbE9iamVjdHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldEFsbEtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRBbGxLZXlzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheVB1c2guanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFN5bWJvbHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5RmlsdGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlMaWtlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVRpbWVzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvc3R1YkZhbHNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNUeXBlZEFycmF5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVW5hcnkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25vZGVVdGlsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNQcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX25hdGl2ZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX292ZXJBcmcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFRhZy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fRGF0YVZpZXcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1NldC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fV2Vha01hcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TWF0Y2hEYXRhLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlTWF0Y2hlc1Byb3BlcnR5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2dldC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RyaW5nVG9QYXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19tZW1vaXplQ2FwcGVkLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL21lbW9pemUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGFzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VIYXNJbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faGFzUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9pZGVudGl0eS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVByb3BlcnR5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlUHJvcGVydHlEZWVwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUZpbmRJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC90b0ludGVnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9GaW5pdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9OdW1iZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUcmltLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL190cmltbWVkRW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9zZXR1cE5vdGlmaWNhdGlvbkZvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvZmlyc3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaGVhZC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3JjL3J4anMvd2F0Y2hPcGVyYXRvcnMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL1B1YmxpY1N0b3JhZ2VIdWIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9TdG9yYWdlSHViLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9QdWJsaWNBdWRpb0h1Yi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3JjL0F1ZGlvSHViLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvcm91dGVzLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvcGFnZXMvaG9tZVBhZ2UvaG9tZVBhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9pbWFnZXMvbG9nby5wbmciLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9wYWdlcy9ob21lUGFnZS9ob21lUGFnZS5oYnMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9wYWdlcy9jb250YWN0c1BhZ2UvY29udGFjdHNQYWdlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvcGFnZXMvY29udGFjdHNQYWdlL2NvbnRhY3RzUGFnZS5oYnMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9wYWdlcy90ZWFtUGFnZS90ZWFtUGFnZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL3BhZ2VzL3RlYW1QYWdlL3RlYW1QYWdlLmhicyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL3BhZ2VzLzQwNFBhZ2UvNDA0UGFnZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL3BhZ2VzLzQwNFBhZ2UvNDA0UGFnZS5oYnMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9ub3RpZmljYXRpb25zLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvbm90aWZpY2F0aW9ucy9BbGVydE5vdGlmaWNhdGlvbi9BbGVydE5vdGlmaWNhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL25vdGlmaWNhdGlvbnMvQWxlcnROb3RpZmljYXRpb24vQWxlcnROb3RpZmljYXRpb24uaGJzIl0sIm5hbWVzIjpbImluc3RhbGxlZE1vZHVsZXMiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJleHBvcnRzIiwibW9kdWxlIiwiaSIsImwiLCJtb2R1bGVzIiwiY2FsbCIsIm0iLCJjIiwiZCIsIm5hbWUiLCJnZXR0ZXIiLCJvIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiZ2V0IiwiciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwidmFsdWUiLCJ0IiwibW9kZSIsIl9fZXNNb2R1bGUiLCJucyIsImNyZWF0ZSIsImtleSIsImJpbmQiLCJuIiwib2JqZWN0IiwicHJvcGVydHkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsInAiLCJzIiwiZXh0ZW5kU3RhdGljcyIsImIiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIkFycmF5IiwiX19leHRlbmRzIiwiVHlwZUVycm9yIiwiU3RyaW5nIiwiX18iLCJ0aGlzIiwiY29uc3RydWN0b3IiLCJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsIl9fZ2VuZXJhdG9yIiwiYm9keSIsImYiLCJ5IiwiZyIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsIml0ZXJhdG9yIiwidiIsIm9wIiwicG9wIiwibGVuZ3RoIiwicHVzaCIsIl9fdmFsdWVzIiwiX19yZWFkIiwiYXIiLCJlcnJvciIsIl9fc3ByZWFkQXJyYXkiLCJ0byIsImZyb20iLCJwYWNrIiwiYXJndW1lbnRzIiwic2xpY2UiLCJjb25jYXQiLCJfX2F3YWl0IiwiX19hc3luY0dlbmVyYXRvciIsImFzeW5jSXRlcmF0b3IiLCJxIiwiYSIsInJlc3VtZSIsImZ1bGZpbGwiLCJzZXR0bGUiLCJzaGlmdCIsIl9fYXN5bmNWYWx1ZXMiLCJjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIiLCJkZXN0aW5hdGlvbiIsIm9uTmV4dCIsIm9uQ29tcGxldGUiLCJvbkVycm9yIiwib25GaW5hbGl6ZSIsIk9wZXJhdG9yU3Vic2NyaWJlciIsIl9zdXBlciIsInNob3VsZFVuc3Vic2NyaWJlIiwiX3RoaXMiLCJfbmV4dCIsImVyciIsIl9lcnJvciIsInVuc3Vic2NyaWJlIiwiX2NvbXBsZXRlIiwiX2EiLCJjbG9zZWRfMSIsImNsb3NlZCIsImhhc0xpZnQiLCJzb3VyY2UiLCJsaWZ0Iiwib3BlcmF0ZSIsImluaXQiLCJsaWZ0ZWRTb3VyY2UiLCJpbm5lckZyb20iLCJpbnB1dCIsIm9iaiIsInN1YnNjcmliZXIiLCJvYnMiLCJzdWJzY3JpYmUiLCJhcnJheSIsImNvbXBsZXRlIiwicHJvbWlzZSIsImZyb21Bc3luY0l0ZXJhYmxlIiwiaXRlcmFibGUiLCJlXzEiLCJpdGVyYWJsZV8xIiwiaXRlcmFibGVfMV8xIiwiZV8xXzEiLCJyZXR1cm4iLCJyZWFkYWJsZVN0cmVhbSIsImFzeW5jSXRlcmFibGUiLCJhc3luY0l0ZXJhYmxlXzEiLCJhc3luY0l0ZXJhYmxlXzFfMSIsImVfMiIsImVfMl8xIiwiX2IiLCJwcm9jZXNzIiwiY2F0Y2giLCJpc0Z1bmN0aW9uIiwiT2JzZXJ2YWJsZSIsIl9zdWJzY3JpYmUiLCJvcGVyYXRvciIsIm9ic2VydmFibGUiLCJvYnNlcnZlck9yTmV4dCIsImlzT2JzZXJ2ZXIiLCJhZGQiLCJfdHJ5U3Vic2NyaWJlIiwic2luayIsImZvckVhY2giLCJwcm9taXNlQ3RvciIsImdldFByb21pc2VDdG9yIiwicGlwZSIsIm9wZXJhdGlvbnMiLCJfaSIsInRvUHJvbWlzZSIsIngiLCJub29wIiwiaWRlbnRpdHkiLCJTdWJqZWN0IiwiY3VycmVudE9ic2VydmVycyIsIm9ic2VydmVycyIsImlzU3RvcHBlZCIsImhhc0Vycm9yIiwidGhyb3duRXJyb3IiLCJzdWJqZWN0IiwiQW5vbnltb3VzU3ViamVjdCIsIl90aHJvd0lmQ2xvc2VkIiwiX2MiLCJjb25maWd1cmFibGUiLCJfY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyIsIl9pbm5lclN1YnNjcmliZSIsImFzT2JzZXJ2YWJsZSIsImxhc3QiLCJhcnIiLCJwb3BSZXN1bHRTZWxlY3RvciIsImFyZ3MiLCJ1bmRlZmluZWQiLCJwb3BTY2hlZHVsZXIiLCJwb3BOdW1iZXIiLCJkZWZhdWx0VmFsdWUiLCJfc2xpY2VkVG9BcnJheSIsImlzQXJyYXkiLCJfYXJyYXlXaXRoSG9sZXMiLCJfcyIsIl9lIiwiX2FyciIsIl9uIiwiX2QiLCJfaXRlcmFibGVUb0FycmF5TGltaXQiLCJtaW5MZW4iLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwidGVzdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJsZW4iLCJhcnIyIiwiaXRlbSIsIl9pdGVtIiwiY29udGVudCIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsInNvdXJjZU1hcHBpbmciLCJzb3VyY2VVUkxzIiwic291cmNlcyIsIm1hcCIsInNvdXJjZVJvb3QiLCJqb2luIiwiY3NzV2l0aE1hcHBpbmdUb1N0cmluZyIsImxpc3QiLCJtZWRpYVF1ZXJ5IiwiZGVkdXBlIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsImlkIiwiU3Vic2NyaXB0aW9uIiwiaW5pdGlhbFRlYXJkb3duIiwiX3BhcmVudGFnZSIsIl9maW5hbGl6ZXJzIiwiZW1wdHkiLCJlcnJvcnMiLCJfcGFyZW50YWdlXzEiLCJfcGFyZW50YWdlXzFfMSIsInJlbW92ZSIsImluaXRpYWxGaW5hbGl6ZXIiLCJfZmluYWxpemVyc18xIiwiX2ZpbmFsaXplcnNfMV8xIiwiZmluYWxpemVyIiwiZXhlY0ZpbmFsaXplciIsInRlYXJkb3duIiwiX2hhc1BhcmVudCIsIl9hZGRQYXJlbnQiLCJwYXJlbnQiLCJpbmNsdWRlcyIsIl9yZW1vdmVQYXJlbnQiLCJFTVBUWSIsIkVNUFRZX1NVQlNDUklQVElPTiIsImlzU3Vic2NyaXB0aW9uIiwiYXN5bmNTY2hlZHVsZXIiLCJhc3luYyIsImV4ZWN1dGVTY2hlZHVsZSIsInBhcmVudFN1YnNjcmlwdGlvbiIsInNjaGVkdWxlciIsIndvcmsiLCJkZWxheSIsInJlcGVhdCIsInNjaGVkdWxlU3Vic2NyaXB0aW9uIiwic2NoZWR1bGUiLCJlbXB0eVNjaGVkdWxlZCIsIm1lcmdlTWFwIiwicHJvamVjdCIsInJlc3VsdFNlbGVjdG9yIiwiY29uY3VycmVudCIsIkluZmluaXR5IiwiaWkiLCJmaWx0ZXIiLCJwcmVkaWNhdGUiLCJpbmRleCIsImFyclJlbW92ZSIsImluZGV4T2YiLCJzcGxpY2UiLCJFbXB0eUVycm9yIiwibWVzc2FnZSIsInRpbWVyIiwiZHVlVGltZSIsImludGVydmFsT3JTY2hlZHVsZXIiLCJpbnRlcnZhbER1cmF0aW9uIiwiZHVlIiwibm93IiwiY3JlYXRlRXJyb3JDbGFzcyIsImNyZWF0ZUltcGwiLCJjdG9yRnVuYyIsImluc3RhbmNlIiwiRXJyb3IiLCJzdGFjayIsIm1hcE9uZU9yTWFueUFyZ3MiLCJmbiIsImNhbGxPckFwcGx5IiwiYXJnc09yQXJnQXJyYXkiLCJjb25maWciLCJvblVuaGFuZGxlZEVycm9yIiwib25TdG9wcGVkTm90aWZpY2F0aW9uIiwidXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyIsInVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCIsIkNPTVBMRVRFX05PVElGSUNBVElPTiIsImNyZWF0ZU5vdGlmaWNhdGlvbiIsImtpbmQiLCJTdWJzY3JpYmVyIiwiRU1QVFlfT0JTRVJWRVIiLCJoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uIiwibmV4dE5vdGlmaWNhdGlvbiIsIl9iaW5kIiwiRnVuY3Rpb24iLCJDb25zdW1lck9ic2VydmVyIiwicGFydGlhbE9ic2VydmVyIiwiaGFuZGxlVW5oYW5kbGVkRXJyb3IiLCJTYWZlU3Vic2NyaWJlciIsImNvbnRleHRfMSIsInJlcG9ydFVuaGFuZGxlZEVycm9yIiwibm90aWZpY2F0aW9uIiwidGltZW91dFByb3ZpZGVyIiwic2V0VGltZW91dCIsInJlZHVjZSIsImFjY3VtdWxhdG9yIiwic2VlZCIsIkJhc2VQYWdlIiwicmVxdWlyZSIsIkJhc2VOb3RpZmljYXRpb24iLCJBcHAiLCJQdWJsaWNOb3RpZmljYXRpb25IdWIiLCJTdG9yYWdlSHViIiwiQXVkaW9IdWIiLCJOb3RpZmljYXRpb25IdWIiLCJ0YWtlIiwiY291bnQiLCJzZWVuIiwic3dpdGNoTWFwIiwiaW5uZXJTdWJzY3JpYmVyIiwiaXNDb21wbGV0ZSIsImNoZWNrQ29tcGxldGUiLCJpbm5lckluZGV4Iiwib3V0ZXJJbmRleCIsImlubmVyVmFsdWUiLCJleHRlbmQiLCJlc2NhcGVFeHByZXNzaW9uIiwic3RyaW5nIiwidG9IVE1MIiwicG9zc2libGUiLCJyZXBsYWNlIiwiYmFkQ2hhcnMiLCJlc2NhcGVDaGFyIiwiaXNFbXB0eSIsImNyZWF0ZUZyYW1lIiwiZnJhbWUiLCJfcGFyZW50IiwiYmxvY2tQYXJhbXMiLCJwYXJhbXMiLCJpZHMiLCJwYXRoIiwiYXBwZW5kQ29udGV4dFBhdGgiLCJjb250ZXh0UGF0aCIsImVzY2FwZSIsImNociIsInN1YnNjcmliZU9uIiwib2JzZXJ2ZU9uIiwibWVyZ2VBbGwiLCJkZWZhdWx0SWZFbXB0eSIsImhhc1ZhbHVlIiwidGhyb3dJZkVtcHR5IiwiZXJyb3JGYWN0b3J5IiwiZGVmYXVsdEVycm9yRmFjdG9yeSIsIkFzeW5jU2NoZWR1bGVyIiwiU2NoZWR1bGVyQWN0aW9uIiwiYWN0aW9ucyIsIl9hY3RpdmUiLCJmbHVzaCIsImFjdGlvbiIsImV4ZWN1dGUiLCJzdGF0ZSIsIkFjdGlvbiIsImludGVydmFsUHJvdmlkZXIiLCJzZXRJbnRlcnZhbCIsImhhbmRsZXIiLCJ0aW1lb3V0IiwiZGVsZWdhdGUiLCJjbGVhckludGVydmFsIiwiaGFuZGxlIiwiQXN5bmNBY3Rpb24iLCJwZW5kaW5nIiwicmVjeWNsZUFzeW5jSWQiLCJyZXF1ZXN0QXN5bmNJZCIsIl9pZCIsIl9zY2hlZHVsZXIiLCJfZXhlY3V0ZSIsIl9kZWxheSIsImVycm9yVmFsdWUiLCJlcnJvcmVkIiwiZnJlZUdsb2JhbCIsImZyZWVTZWxmIiwic2VsZiIsInJvb3QiLCJOb3RpZmljYXRpb25LaW5kIiwiTm90aWZpY2F0aW9uIiwib2JzZXJ2ZSIsIm9ic2VydmVyIiwib2JzZXJ2ZU5vdGlmaWNhdGlvbiIsImRvIiwibmV4dEhhbmRsZXIiLCJlcnJvckhhbmRsZXIiLCJjb21wbGV0ZUhhbmRsZXIiLCJhY2NlcHQiLCJuZXh0T3JPYnNlcnZlciIsInRvT2JzZXJ2YWJsZSIsImNyZWF0ZU5leHQiLCJjcmVhdGVFcnJvciIsImNyZWF0ZUNvbXBsZXRlIiwiY29tcGxldGVOb3RpZmljYXRpb24iLCJUaW1lb3V0RXJyb3IiLCJpbmZvIiwic2NoZWR1bGVyQXJnIiwiZmlyc3QiLCJlYWNoIiwid2l0aCIsIl93aXRoIiwidGltZW91dEVycm9yRmFjdG9yeSIsIm1ldGEiLCJvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbiIsInRpbWVyU3Vic2NyaXB0aW9uIiwibGFzdFZhbHVlIiwic3RhcnRUaW1lciIsImNvbmNhdEFsbCIsIm11bHRpY2FzdCIsInN1YmplY3RPclN1YmplY3RGYWN0b3J5Iiwic2VsZWN0b3IiLCJzdWJqZWN0RmFjdG9yeSIsImNvbm5lY3RvciIsIkRFRkFVTFRfQ09ORklHIiwiY29ubmVjdCIsInN1YnNjcmliYWJsZSIsImZucyIsInBpcGVGcm9tQXJyYXkiLCJwcmV2IiwiQ29ubmVjdGFibGVPYnNlcnZhYmxlIiwiX3N1YmplY3QiLCJfcmVmQ291bnQiLCJfY29ubmVjdGlvbiIsImdldFN1YmplY3QiLCJfdGVhcmRvd24iLCJjb25uZWN0aW9uIiwic3ViamVjdF8xIiwicmVmQ291bnQiLCJpc1NjaGVkdWxlciIsImNvbnRleHQiLCJlcnJvckNvbnRleHQiLCJjYiIsImlzUm9vdCIsImVycm9yVGhyb3duIiwiY2FwdHVyZUVycm9yIiwiZXJyb3JQcm9wcyIsIkV4Y2VwdGlvbiIsIm5vZGUiLCJsb2MiLCJsaW5lIiwiZW5kTGluZU51bWJlciIsImNvbHVtbiIsImVuZENvbHVtbiIsInN0YXJ0IiwiZW5kIiwidG1wIiwiaWR4IiwiY2FwdHVyZVN0YWNrVHJhY2UiLCJsaW5lTnVtYmVyIiwibm9wIiwiY29uY2F0TWFwIiwicmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvciIsInJlYWRlciIsImdldFJlYWRlciIsInJlYWQiLCJyZWxlYXNlTG9jayIsImlzUmVhZGFibGVTdHJlYW1MaWtlIiwidXJsIiwib3B0aW9ucyIsImRlZmF1bHQiLCJoYXNoIiwibmVlZFF1b3RlcyIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwicmVmQ291bnRlciIsInNoYXJlZENvbm5lY3Rpb24iLCJjb25uIiwiYXVkaXQiLCJkdXJhdGlvblNlbGVjdG9yIiwiZHVyYXRpb25TdWJzY3JpYmVyIiwiZW5kRHVyYXRpb24iLCJjbGVhbnVwRHVyYXRpb24iLCJjb21iaW5lTGF0ZXN0QWxsIiwiYXJyUmVkdWNlciIsInRvQXJyYXkiLCJkZWxheVdoZW4iLCJkZWxheUR1cmF0aW9uU2VsZWN0b3IiLCJzdWJzY3JpcHRpb25EZWxheSIsImlnbm9yZUVsZW1lbnRzIiwibWFwVG8iLCJkaXN0aW5jdFVudGlsQ2hhbmdlZCIsImNvbXBhcmF0b3IiLCJrZXlTZWxlY3RvciIsImRlZmF1bHRDb21wYXJlIiwicHJldmlvdXNLZXkiLCJjdXJyZW50S2V5IiwiZXhoYXVzdEFsbCIsImV4aGF1c3RNYXAiLCJpbm5lclN1YiIsIm91dGVyVmFsdWUiLCJmaW5kIiwiY3JlYXRlRmluZCIsImVtaXQiLCJmaW5kSW5kZXgiLCJ0YWtlTGFzdCIsImJ1ZmZlciIsImJ1ZmZlcl8xIiwiYnVmZmVyXzFfMSIsInJhY2VXaXRoIiwib3RoZXJTb3VyY2VzIiwic2FtcGxlIiwibm90aWZpZXIiLCJzaGFyZSIsInJlc2V0T25FcnJvciIsInJlc2V0T25Db21wbGV0ZSIsInJlc2V0T25SZWZDb3VudFplcm8iLCJ3cmFwcGVyU291cmNlIiwicmVzZXRDb25uZWN0aW9uIiwiaGFzQ29tcGxldGVkIiwiaGFzRXJyb3JlZCIsImNhbmNlbFJlc2V0IiwicmVzZXQiLCJyZXNldEFuZFVuc3Vic2NyaWJlIiwiZGVzdCIsImhhbmRsZVJlc2V0Iiwib24iLCJvblN1YnNjcmliZXIiLCJ0aHJvdHRsZSIsImxlYWRpbmciLCJ0cmFpbGluZyIsInNlbmRWYWx1ZSIsInRocm90dGxlZCIsImVuZFRocm90dGxpbmciLCJzZW5kIiwiY2xlYW51cFRocm90dGxpbmciLCJzdGFydFRocm90dGxlIiwiUmVwbGF5U3ViamVjdCIsIl9idWZmZXJTaXplIiwiX3dpbmRvd1RpbWUiLCJfdGltZXN0YW1wUHJvdmlkZXIiLCJfYnVmZmVyIiwiX2luZmluaXRlVGltZVdpbmRvdyIsIk1hdGgiLCJtYXgiLCJfdHJpbUJ1ZmZlciIsInN1YnNjcmlwdGlvbiIsImNvcHkiLCJhZGp1c3RlZEJ1ZmZlclNpemUiLCJBc3luY1N1YmplY3QiLCJfdmFsdWUiLCJfaGFzVmFsdWUiLCJfaXNDb21wbGV0ZSIsIm9mIiwiY29tYmluZUxhdGVzdCIsIm9ic2VydmFibGVzIiwia2V5cyIsImNvbWJpbmVMYXRlc3RJbml0IiwidmFsdWVzIiwidmFsdWVUcmFuc2Zvcm0iLCJtYXliZVNjaGVkdWxlIiwiYWN0aXZlIiwicmVtYWluaW5nRmlyc3RWYWx1ZXMiLCJfbG9vcF8xIiwiaGFzRmlyc3RWYWx1ZSIsInppcCIsImJ1ZmZlcnMiLCJjb21wbGV0ZWQiLCJzb3VyY2VJbmRleCIsImV2ZXJ5Iiwic29tZSIsIlVuc3Vic2NyaXB0aW9uRXJyb3IiLCJkYXRlVGltZXN0YW1wUHJvdmlkZXIiLCJEYXRlIiwiaXNBcnJheUxpa2UiLCJpc1ZhbGlkRGF0ZSIsImlzTmFOIiwibWVyZ2VJbnRlcm5hbHMiLCJvbkJlZm9yZU5leHQiLCJleHBhbmQiLCJpbm5lclN1YlNjaGVkdWxlciIsImFkZGl0aW9uYWxGaW5hbGl6ZXIiLCJvdXRlck5leHQiLCJkb0lubmVyU3ViIiwiaW5uZXJDb21wbGV0ZSIsImJ1ZmZlcmVkVmFsdWUiLCJnZXRSYXdUYWciLCJvYmplY3RUb1N0cmluZyIsInN5bVRvU3RyaW5nVGFnIiwiU2NoZWR1bGVyIiwic2NoZWR1bGVyQWN0aW9uQ3RvciIsIkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIiwibWVtbyIsInN0eWxlc0luRG9tIiwiaXNPbGRJRSIsIndpbmRvdyIsImRvY3VtZW50IiwiYWxsIiwiYXRvYiIsImdldFRhcmdldCIsInRhcmdldCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRFbGVtZW50Iiwic3R5bGVUYXJnZXQiLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJzaW5nbGV0b24iLCJzaW5nbGV0b25Db3VudGVyIiwic3R5bGVzSW5zZXJ0ZWRBdFRvcCIsImZpeFVybHMiLCJhZGRTdHlsZXNUb0RvbSIsInN0eWxlcyIsImRvbVN0eWxlIiwicmVmcyIsImoiLCJwYXJ0cyIsImFkZFN0eWxlIiwibGlzdFRvU3R5bGVzIiwibmV3U3R5bGVzIiwiYmFzZSIsInBhcnQiLCJjc3MiLCJtZWRpYSIsInNvdXJjZU1hcCIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlIiwiaW5zZXJ0SW50byIsImxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wIiwiaW5zZXJ0QXQiLCJuZXh0U2libGluZyIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwiZmlyc3RDaGlsZCIsImJlZm9yZSIsInJlbW92ZVN0eWxlRWxlbWVudCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImNyZWF0ZVN0eWxlRWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJhdHRycyIsInR5cGUiLCJub25jZSIsImdldE5vbmNlIiwiYWRkQXR0cnMiLCJlbCIsInNldEF0dHJpYnV0ZSIsInVwZGF0ZSIsInRyYW5zZm9ybSIsInN0eWxlSW5kZXgiLCJhcHBseVRvU2luZ2xldG9uVGFnIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwicmV2b2tlT2JqZWN0VVJMIiwiQmxvYiIsImxpbmsiLCJyZWwiLCJjcmVhdGVMaW5rRWxlbWVudCIsInVwZGF0ZUxpbmsiLCJocmVmIiwiYXBwbHlUb1RhZyIsIm5ld09iaiIsIkRFQlVHIiwibmV3TGlzdCIsIm1heVJlbW92ZSIsInRleHRTdG9yZSIsInJlcGxhY2VUZXh0IiwicmVwbGFjZW1lbnQiLCJCb29sZWFuIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjc3NOb2RlIiwiY3JlYXRlVGV4dE5vZGUiLCJjaGlsZE5vZGVzIiwiYXV0b0ZpeFVybHMiLCJjb252ZXJ0VG9BYnNvbHV0ZVVybHMiLCJibG9iIiwib2xkU3JjIiwiZXZlbnRFbWl0dGVyIiwiRXZlbnRFbWl0dGVyIiwiU0hPV19FVkVOVCIsImdldEV2ZW50RW1pdHRlciIsImhpZGUiLCJvbkhpZGUiLCJzaG93IiwicHJvcHMiLCJvblNob3ciLCJyZW1vdmVBbGxMaXN0ZW5lcnMiLCJsaXN0Q2FjaGVDbGVhciIsImxpc3RDYWNoZURlbGV0ZSIsImxpc3RDYWNoZUdldCIsImxpc3RDYWNoZUhhcyIsImxpc3RDYWNoZVNldCIsIkxpc3RDYWNoZSIsImVudHJpZXMiLCJjbGVhciIsImVudHJ5Iiwic2V0IiwiaGFzIiwiZXEiLCJuYXRpdmVDcmVhdGUiLCJnZXROYXRpdmUiLCJpc0tleWFibGUiLCJfX2RhdGFfXyIsImJhc2VHZXRUYWciLCJpc09iamVjdExpa2UiLCJpc1N5bWJvbCIsImF1ZGl0VGltZSIsImR1cmF0aW9uIiwiY2xvc2luZ05vdGlmaWVyIiwiY3VycmVudEJ1ZmZlciIsImJ1ZmZlckNvdW50IiwiYnVmZmVyU2l6ZSIsInN0YXJ0QnVmZmVyRXZlcnkiLCJ0b0VtaXQiLCJidWZmZXJzXzEiLCJidWZmZXJzXzFfMSIsInRvRW1pdF8xIiwidG9FbWl0XzFfMSIsImVfMyIsImJ1ZmZlcnNfMiIsImJ1ZmZlcnNfMl8xIiwiZV8zXzEiLCJidWZmZXJUaW1lIiwiYnVmZmVyVGltZVNwYW4iLCJvdGhlckFyZ3MiLCJidWZmZXJDcmVhdGlvbkludGVydmFsIiwibWF4QnVmZmVyU2l6ZSIsImJ1ZmZlclJlY29yZHMiLCJyZXN0YXJ0T25FbWl0IiwicmVjb3JkIiwic3VicyIsInN0YXJ0QnVmZmVyIiwicmVjb3JkXzEiLCJidWZmZXJUaW1lU3Vic2NyaWJlciIsInJlY29yZHNDb3B5IiwicmVjb3Jkc0NvcHlfMSIsInJlY29yZHNDb3B5XzFfMSIsImJ1ZmZlclRvZ2dsZSIsIm9wZW5pbmdzIiwiY2xvc2luZ1NlbGVjdG9yIiwib3BlblZhbHVlIiwiY2xvc2luZ1N1YnNjcmlwdGlvbiIsImJ1ZmZlcldoZW4iLCJjbG9zaW5nU3Vic2NyaWJlciIsIm9wZW5CdWZmZXIiLCJjYXRjaEVycm9yIiwiaGFuZGxlZFJlc3VsdCIsInN5bmNVbnN1YiIsImNvbWJpbmVBbGwiLCJjb21iaW5lTGF0ZXN0V2l0aCIsImNvbmNhdE1hcFRvIiwiaW5uZXJPYnNlcnZhYmxlIiwiY29uY2F0V2l0aCIsInRvdGFsIiwiZGVib3VuY2UiLCJkZWJvdW5jZVRpbWUiLCJhY3RpdmVUYXNrIiwibGFzdFRpbWUiLCJlbWl0V2hlbklkbGUiLCJ0YXJnZXRUaW1lIiwiZGVtYXRlcmlhbGl6ZSIsImRpc3RpbmN0IiwiZmx1c2hlcyIsImRpc3RpbmN0S2V5cyIsIlNldCIsImRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkIiwiY29tcGFyZSIsImVsZW1lbnRBdCIsImhhc0RlZmF1bHRWYWx1ZSIsImVuZFdpdGgiLCJleGhhdXN0IiwiZmluYWxpemUiLCJjYWxsYmFjayIsImdyb3VwQnkiLCJlbGVtZW50T3JPcHRpb25zIiwiZWxlbWVudCIsImdyb3VwcyIsIk1hcCIsIm5vdGlmeSIsImhhbmRsZUVycm9yIiwiY29uc3VtZXIiLCJhY3RpdmVHcm91cHMiLCJ0ZWFyZG93bkF0dGVtcHRlZCIsImdyb3VwQnlTb3VyY2VTdWJzY3JpYmVyIiwia2V5XzEiLCJncm91cF8xIiwiZ3JvdXBlZCIsImdyb3VwU3ViamVjdCIsImdyb3VwU3Vic2NyaWJlciIsImR1cmF0aW9uU3Vic2NyaWJlcl8xIiwiZGVsZXRlIiwibWF0ZXJpYWxpemUiLCJjb21wYXJlciIsImZsYXRNYXAiLCJtZXJnZU1hcFRvIiwibWVyZ2VTY2FuIiwibWVyZ2VXaXRoIiwibWluIiwib25FcnJvclJlc3VtZU5leHRXaXRoIiwibmV4dFNvdXJjZXMiLCJvbkVycm9yUmVzdW1lTmV4dCIsInBhaXJ3aXNlIiwiaGFzUHJldiIsInBsdWNrIiwicHJvcGVydGllcyIsImN1cnJlbnRQcm9wIiwicHVibGlzaCIsInB1Ymxpc2hCZWhhdmlvciIsImluaXRpYWxWYWx1ZSIsInB1Ymxpc2hMYXN0IiwicHVibGlzaFJlcGxheSIsIndpbmRvd1RpbWUiLCJzZWxlY3Rvck9yU2NoZWR1bGVyIiwidGltZXN0YW1wUHJvdmlkZXIiLCJjb3VudE9yQ29uZmlnIiwic291cmNlU3ViIiwic29GYXIiLCJyZXN1YnNjcmliZSIsIm5vdGlmaWVyU3Vic2NyaWJlcl8xIiwic3Vic2NyaWJlVG9Tb3VyY2UiLCJyZXBlYXRXaGVuIiwiY29tcGxldGlvbnMkIiwic3luY1Jlc3ViIiwiaXNOb3RpZmllckNvbXBsZXRlIiwiaXNNYWluQ29tcGxldGUiLCJzdWJzY3JpYmVGb3JSZXBlYXRXaGVuIiwicmV0cnkiLCJjb25maWdPckNvdW50IiwicmVzZXRPblN1Y2Nlc3MiLCJzdWJzY3JpYmVGb3JSZXRyeSIsInJlc3ViXzEiLCJyZXRyeVdoZW4iLCJlcnJvcnMkIiwic3Vic2NyaWJlRm9yUmV0cnlXaGVuIiwic2FtcGxlVGltZSIsInBlcmlvZCIsInNjYW4iLCJzZXF1ZW5jZUVxdWFsIiwiY29tcGFyZVRvIiwiYVN0YXRlIiwiYlN0YXRlIiwiaXNFcXVhbCIsImNyZWF0ZVN1YnNjcmliZXIiLCJzZWxmU3RhdGUiLCJvdGhlclN0YXRlIiwic2VxdWVuY2VFcXVhbFN1YnNjcmliZXIiLCJzaGFyZVJlcGxheSIsImNvbmZpZ09yQnVmZmVyU2l6ZSIsInNpbmdsZSIsInNpbmdsZVZhbHVlIiwic2VlblZhbHVlIiwic2tpcCIsInNraXBMYXN0Iiwic2tpcENvdW50IiwicmluZyIsInZhbHVlSW5kZXgiLCJvbGRWYWx1ZSIsInNraXBVbnRpbCIsInRha2luZyIsInNraXBTdWJzY3JpYmVyIiwic2tpcFdoaWxlIiwic3RhcnRXaXRoIiwic3dpdGNoQWxsIiwic3dpdGNoTWFwVG8iLCJzd2l0Y2hTY2FuIiwidGFrZVVudGlsIiwidGFrZVdoaWxlIiwiaW5jbHVzaXZlIiwidGFwIiwidGFwT2JzZXJ2ZXIiLCJpc1Vuc3ViIiwidGhyb3R0bGVUaW1lIiwiZHVyYXRpb24kIiwidGltZUludGVydmFsIiwiaW50ZXJ2YWwiLCJUaW1lSW50ZXJ2YWwiLCJ0aW1lb3V0V2l0aCIsIndpdGhPYnNlcnZhYmxlIiwidGltZXN0YW1wIiwid2luZG93Qm91bmRhcmllcyIsIndpbmRvd1N1YmplY3QiLCJ3aW5kb3dDb3VudCIsIndpbmRvd1NpemUiLCJzdGFydFdpbmRvd0V2ZXJ5Iiwic3RhcnRFdmVyeSIsIndpbmRvd3MiLCJ3aW5kb3dzXzEiLCJ3aW5kb3dzXzFfMSIsIndpbmRvd18yIiwid2luZG93VGltZVNwYW4iLCJ3aW5kb3dDcmVhdGlvbkludGVydmFsIiwibWF4V2luZG93U2l6ZSIsIndpbmRvd1JlY29yZHMiLCJyZXN0YXJ0T25DbG9zZSIsImNsb3NlV2luZG93Iiwic3RhcnRXaW5kb3ciLCJ3aW5kb3dfMSIsImxvb3AiLCJ0ZXJtaW5hdGUiLCJ3aW5kb3dUb2dnbGUiLCJ3aW5kb3dzQ29weSIsIndpbmRvd3NDb3B5XzEiLCJ3aW5kb3dzQ29weV8xXzEiLCJ3aW5kb3dXaGVuIiwib3BlbldpbmRvdyIsIndpdGhMYXRlc3RGcm9tIiwiaW5wdXRzIiwib3RoZXJWYWx1ZXMiLCJyZWFkeSIsInppcEFsbCIsInppcFdpdGgiLCJvdGhlcklucHV0cyIsIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yIiwiQmVoYXZpb3JTdWJqZWN0IiwidGhyb3dFcnJvciIsImVycm9yT3JFcnJvckZhY3RvcnkiLCJOb3RGb3VuZEVycm9yIiwiU2VxdWVuY2VFcnJvciIsInN1YnNjcmliZU5leHQiLCJuZXh0U291cmNlIiwicmFjZSIsInJhY2VJbml0Iiwic3Vic2NyaXB0aW9ucyIsIm1lcmdlIiwic2NoZWR1bGVBc3luY0l0ZXJhYmxlIiwic2NoZWR1bGVkIiwiaXNJbnRlcm9wT2JzZXJ2YWJsZSIsInNjaGVkdWxlT2JzZXJ2YWJsZSIsInNjaGVkdWxlQXJyYXkiLCJpc1Byb21pc2UiLCJzY2hlZHVsZVByb21pc2UiLCJpc0FzeW5jSXRlcmFibGUiLCJpc0l0ZXJhYmxlIiwic2NoZWR1bGVJdGVyYWJsZSIsInNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlIiwiY2xlYXJUaW1lb3V0IiwiY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IiLCJnZXRQcm90b3R5cGVPZiIsIm9iamVjdFByb3RvIiwiZ2V0S2V5cyIsImFyZ3NBcmdBcnJheU9yT2JqZWN0IiwiZmlyc3RfMSIsImNyZWF0ZU9iamVjdCIsIm5vdCIsInByZWQiLCJqb2luQWxsSW50ZXJuYWxzIiwiam9pbkZuIiwic2NhbkludGVybmFscyIsImhhc1NlZWQiLCJlbWl0T25OZXh0IiwiZW1pdEJlZm9yZUNvbXBsZXRlIiwiaGFzU3RhdGUiLCJtYXBDYWNoZUNsZWFyIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsImFycmF5TGlrZUtleXMiLCJiYXNlS2V5cyIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJ3YXRjaEZhY2UiLCJsb2NhdGlvbiIsIm5hdmlnYXRlIiwidGVtcGxhdGUiLCJwYXJzZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJIYW5kbGViYXJzRW52aXJvbm1lbnQiLCJfdXRpbHMiLCJfZXhjZXB0aW9uMiIsIl9oZWxwZXJzIiwiX2RlY29yYXRvcnMiLCJfbG9nZ2VyMiIsIl9pbnRlcm5hbFByb3RvQWNjZXNzIiwiVkVSU0lPTiIsIkNPTVBJTEVSX1JFVklTSU9OIiwiTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OIiwiUkVWSVNJT05fQ0hBTkdFUyIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiaGVscGVycyIsInBhcnRpYWxzIiwiZGVjb3JhdG9ycyIsInJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMiLCJyZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzIiwibG9nZ2VyIiwibG9nIiwicmVnaXN0ZXJIZWxwZXIiLCJ1bnJlZ2lzdGVySGVscGVyIiwicmVnaXN0ZXJQYXJ0aWFsIiwicGFydGlhbCIsInVucmVnaXN0ZXJQYXJ0aWFsIiwicmVnaXN0ZXJEZWNvcmF0b3IiLCJ1bnJlZ2lzdGVyRGVjb3JhdG9yIiwicmVzZXRMb2dnZWRQcm9wZXJ0eUFjY2Vzc2VzIiwicmVzZXRMb2dnZWRQcm9wZXJ0aWVzIiwiX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmcyIiwiX2hlbHBlcnNFYWNoMiIsIl9oZWxwZXJzSGVscGVyTWlzc2luZzIiLCJfaGVscGVyc0lmMiIsIl9oZWxwZXJzTG9nMiIsIl9oZWxwZXJzTG9va3VwMiIsIl9oZWxwZXJzV2l0aDIiLCJtb3ZlSGVscGVyVG9Ib29rcyIsImhlbHBlck5hbWUiLCJrZWVwSGVscGVyIiwiaG9va3MiLCJtZXRob2RNYXAiLCJsZXZlbCIsImxvb2t1cExldmVsIiwibGV2ZWxNYXAiLCJ0b0xvd2VyQ2FzZSIsInBhcnNlSW50IiwiY29uc29sZSIsIm1ldGhvZCIsIl9sZW4iLCJfa2V5IiwiY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sIiwicnVudGltZU9wdGlvbnMiLCJkZWZhdWx0TWV0aG9kV2hpdGVMaXN0IiwiZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0Iiwid2hpdGVsaXN0IiwiX2NyZWF0ZU5ld0xvb2t1cE9iamVjdCIsImNyZWF0ZU5ld0xvb2t1cE9iamVjdCIsImFsbG93ZWRQcm90b1Byb3BlcnRpZXMiLCJhbGxvd1Byb3RvUHJvcGVydGllc0J5RGVmYXVsdCIsIm1ldGhvZHMiLCJhbGxvd2VkUHJvdG9NZXRob2RzIiwiYWxsb3dQcm90b01ldGhvZHNCeURlZmF1bHQiLCJyZXN1bHRJc0FsbG93ZWQiLCJwcm90b0FjY2Vzc0NvbnRyb2wiLCJwcm9wZXJ0eU5hbWUiLCJjaGVja1doaXRlTGlzdCIsImxvZ2dlZFByb3BlcnRpZXMiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUiLCJsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UiLCJiYXNlTWF0Y2hlcyIsImJhc2VNYXRjaGVzUHJvcGVydHkiLCJzdGFja0NsZWFyIiwic3RhY2tEZWxldGUiLCJzdGFja0dldCIsInN0YWNrSGFzIiwic3RhY2tTZXQiLCJTdGFjayIsInNpemUiLCJvdGhlciIsImlzT2JqZWN0IiwidGFnIiwiZ2xvYmFsIiwiZnVuY1RvU3RyaW5nIiwiZnVuYyIsImJhc2VJc0VxdWFsRGVlcCIsImJhc2VJc0VxdWFsIiwiYml0bWFzayIsImN1c3RvbWl6ZXIiLCJTZXRDYWNoZSIsImFycmF5U29tZSIsImNhY2hlSGFzIiwiZXF1YWxGdW5jIiwiaXNQYXJ0aWFsIiwiYXJyTGVuZ3RoIiwib3RoTGVuZ3RoIiwiYXJyU3RhY2tlZCIsIm90aFN0YWNrZWQiLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsImJhc2VJc0FyZ3VtZW50cyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiaXNBcmd1bWVudHMiLCJzdHViRmFsc2UiLCJmcmVlRXhwb3J0cyIsIm5vZGVUeXBlIiwiZnJlZU1vZHVsZSIsIkJ1ZmZlciIsImlzQnVmZmVyIiwid2VicGFja1BvbHlmaWxsIiwiZGVwcmVjYXRlIiwicGF0aHMiLCJjaGlsZHJlbiIsInJlSXNVaW50IiwiYmFzZUlzVHlwZWRBcnJheSIsImJhc2VVbmFyeSIsIm5vZGVVdGlsIiwibm9kZUlzVHlwZWRBcnJheSIsImlzVHlwZWRBcnJheSIsImlzTGVuZ3RoIiwic3JjVmFsdWUiLCJjYXN0UGF0aCIsInRvS2V5IiwiaXNLZXkiLCJzdHJpbmdUb1BhdGgiLCJwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyIiwicGVyZm9ybWFuY2UiLCJhbmltYXRpb25GcmFtZVByb3ZpZGVyIiwicmVxdWVzdCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0aW9uRnJhbWVzIiwiYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSIsIkRFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUyIsInByb3ZpZGVyIiwicnVuIiwiZWxhcHNlZCIsInJlc29sdmVkIiwibmV4dEhhbmRsZSIsImFjdGl2ZUhhbmRsZXMiLCJmaW5kQW5kQ2xlYXJIYW5kbGUiLCJzZXRJbW1lZGlhdGUiLCJjbGVhckltbWVkaWF0ZSIsImltbWVkaWF0ZVByb3ZpZGVyIiwiQXNhcEFjdGlvbiIsIl9zY2hlZHVsZWQiLCJhc2FwU2NoZWR1bGVyIiwiQXNhcFNjaGVkdWxlciIsImZsdXNoSWQiLCJhc2FwIiwiUXVldWVBY3Rpb24iLCJxdWV1ZVNjaGVkdWxlciIsIlF1ZXVlU2NoZWR1bGVyIiwicXVldWUiLCJBbmltYXRpb25GcmFtZUFjdGlvbiIsImFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyIiwiQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIiLCJhbmltYXRpb25GcmFtZSIsIlZpcnR1YWxUaW1lU2NoZWR1bGVyIiwibWF4RnJhbWVzIiwiZnJhbWVUaW1lRmFjdG9yIiwiVmlydHVhbEFjdGlvbiIsIk51bWJlciIsImlzRmluaXRlIiwic29ydCIsInNvcnRBY3Rpb25zIiwiaXNPYnNlcnZhYmxlIiwibGFzdFZhbHVlRnJvbSIsImhhc0NvbmZpZyIsImZpcnN0VmFsdWVGcm9tIiwiYmluZENhbGxiYWNrSW50ZXJuYWxzIiwiaXNOb2RlU3R5bGUiLCJjYWxsYmFja0Z1bmMiLCJ1bmluaXRpYWxpemVkIiwiaXNBc3luY18xIiwiaXNDb21wbGV0ZV8xIiwicmVzdWx0cyIsImJpbmRDYWxsYmFjayIsImJpbmROb2RlQ2FsbGJhY2siLCJkZWZlciIsIm9ic2VydmFibGVGYWN0b3J5IiwicmVzZXRPbkRpc2Nvbm5lY3QiLCJjb25uZWN0YWJsZSIsImZvcmtKb2luIiwicmVtYWluaW5nQ29tcGxldGlvbnMiLCJyZW1haW5pbmdFbWlzc2lvbnMiLCJub2RlRXZlbnRFbWl0dGVyTWV0aG9kcyIsImV2ZW50VGFyZ2V0TWV0aG9kcyIsImpxdWVyeU1ldGhvZHMiLCJmcm9tRXZlbnQiLCJldmVudE5hbWUiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImlzRXZlbnRUYXJnZXQiLCJtZXRob2ROYW1lIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsImlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyIiwidG9Db21tb25IYW5kbGVyUmVnaXN0cnkiLCJvZmYiLCJpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyIiwic3ViVGFyZ2V0IiwiZnJvbUV2ZW50UGF0dGVybiIsImFkZEhhbmRsZXIiLCJyZW1vdmVIYW5kbGVyIiwicmV0VmFsdWUiLCJnZW5lcmF0ZSIsImluaXRpYWxTdGF0ZU9yT3B0aW9ucyIsImNvbmRpdGlvbiIsIml0ZXJhdGUiLCJyZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyIiwiaW5pdGlhbFN0YXRlIiwiZ2VuIiwiaWlmIiwidHJ1ZVJlc3VsdCIsImZhbHNlUmVzdWx0IiwiTkVWRVIiLCJuZXZlciIsInBhaXJzIiwicGFydGl0aW9uIiwicmFuZ2UiLCJ1c2luZyIsInJlc291cmNlRmFjdG9yeSIsInJlc291cmNlIiwiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJkZWZpbmVDdXN0b21FbGVtZW50cyIsIm5hdmlnYXRlVG9Mb2NhdGlvbiIsImxvY2FscyIsImJhc2VVcmwiLCJwcm90b2NvbCIsImhvc3QiLCJjdXJyZW50RGlyIiwicGF0aG5hbWUiLCJmdWxsTWF0Y2giLCJvcmlnVXJsIiwibmV3VXJsIiwidW5xdW90ZWRPcmlnVXJsIiwidHJpbSIsIiQxIiwic2V0SlNPTiIsInNldERhdGEiLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwicmVjZWl2ZXIiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIk51bWJlcklzTmFOIiwib25jZSIsImVtaXR0ZXIiLCJldmVudExpc3RlbmVyIiwiZXJyb3JMaXN0ZW5lciIsIl9ldmVudHMiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwicHJlcGVuZCIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsIm5ld0xpc3RlbmVyIiwidW5zaGlmdCIsIndhcm5lZCIsInciLCJ3YXJuIiwib25jZVdyYXBwZXIiLCJmaXJlZCIsIndyYXBGbiIsIl9vbmNlV3JhcCIsIndyYXBwZWQiLCJfbGlzdGVuZXJzIiwidW53cmFwIiwiZXZsaXN0ZW5lciIsInJldCIsInVud3JhcExpc3RlbmVycyIsImFycmF5Q2xvbmUiLCJsaXN0ZW5lckNvdW50IiwiYXJnIiwiUmFuZ2VFcnJvciIsInNldE1heExpc3RlbmVycyIsImdldE1heExpc3RlbmVycyIsImRvRXJyb3IiLCJlciIsImxpc3RlbmVycyIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJwb3NpdGlvbiIsIm9yaWdpbmFsTGlzdGVuZXIiLCJzcGxpY2VPbmUiLCJyYXdMaXN0ZW5lcnMiLCJldmVudE5hbWVzIiwiSGFuZGxlYmFycyIsImNvbnRhaW5lciIsImRlcHRoMCIsImhlbHBlciIsImxvb2t1cFByb3BlcnR5IiwiaGVscGVyTWlzc2luZyIsIm51bGxDb250ZXh0IiwiX2hhbmRsZWJhcnNTYWZlU3RyaW5nMiIsIl9oYW5kbGViYXJzRXhjZXB0aW9uMiIsIlV0aWxzIiwicnVudGltZSIsIl9oYW5kbGViYXJzTm9Db25mbGljdDIiLCJoYiIsIlNhZmVTdHJpbmciLCJWTSIsInNwZWMiLCJpbnN0IiwiaW52ZXJzZSIsIl9leGNlcHRpb24iLCJwcmlvcktleSIsImV4ZWNJdGVyYXRpb24iLCJmaWVsZCIsIm5ld0NvbnRleHQiLCJpdCIsImNvbmRpdGlvbmFsIiwiaW5jbHVkZVplcm8iLCJfZGVjb3JhdG9yc0lubGluZTIiLCJfZGVjb3JhdG9yc0lubGluZSIsIm9yaWdpbmFsIiwiY2hlY2tSZXZpc2lvbiIsImNvbXBpbGVySW5mbyIsImNvbXBpbGVyUmV2aXNpb24iLCJjdXJyZW50UmV2aXNpb24iLCJfYmFzZSIsInJ1bnRpbWVWZXJzaW9ucyIsImNvbXBpbGVyVmVyc2lvbnMiLCJ0ZW1wbGF0ZVNwZWMiLCJlbnYiLCJtYWluIiwiZGVjb3JhdG9yIiwibWFpbl9kIiwiY29tcGlsZXIiLCJ0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjciLCJzdHJpY3QiLCJsb29rdXAiLCJkZXB0aHMiLCJsYW1iZGEiLCJjdXJyZW50IiwiaW52b2tlUGFydGlhbCIsInJlc29sdmVQYXJ0aWFsIiwiZXh0ZW5kZWRPcHRpb25zIiwiY29tcGlsZSIsImNvbXBpbGVyT3B0aW9ucyIsImluZGVudCIsImxpbmVzIiwic3BsaXQiLCJwcm9ncmFtcyIsInByb2dyYW0iLCJkZWNsYXJlZEJsb2NrUGFyYW1zIiwicHJvZ3JhbVdyYXBwZXIiLCJ3cmFwUHJvZ3JhbSIsImRlcHRoIiwibWVyZ2VJZk5lZWRlZCIsInBhcmFtIiwiY29tbW9uIiwic2VhbCIsIl9zZXR1cCIsInVzZURhdGEiLCJpbml0RGF0YSIsInVzZUJsb2NrUGFyYW1zIiwidXNlRGVwdGhzIiwiZXhlY3V0ZURlY29yYXRvcnMiLCJpc1RvcCIsIm1lcmdlZEhlbHBlcnMiLCJfaW50ZXJuYWxXcmFwSGVscGVyIiwid3JhcEhlbHBlciIsInBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbiIsIndyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkiLCJ1c2VQYXJ0aWFsIiwidXNlRGVjb3JhdG9ycyIsImtlZXBIZWxwZXJJbkhlbHBlcnMiLCJhbGxvd0NhbGxzVG9IZWxwZXJNaXNzaW5nIiwiX2NoaWxkIiwiY3VycmVudFBhcnRpYWxCbG9jayIsInBhcnRpYWxCbG9jayIsInByb2ciLCJjdXJyZW50RGVwdGhzIiwidHJhbnNmb3JtT3B0aW9uc0ZuIiwiJEhhbmRsZWJhcnMiLCJub0NvbmZsaWN0IiwiTm90aWZpY2F0aW9uRm9ybSIsImdldFJ4anNUYXJnZXQiLCJnZXRSeGpzVGFyZ2V0RnJvbUtleSIsImdldFRpbWVkRXZlbnQiLCJyb3V0ZXMiLCJub3RpZmljYXRpb25zIiwicmVuZGVyIiwicmVuZGVyUGF0aCIsImhhbmRsZUV2ZW50Iiwibm90aWZpY2F0aW9uRm9ybSIsImdldEVsZW1lbnRCeUlkIiwibGVmdEJ1dHRvbiIsInJpZ2h0QnV0dG9uIiwidG9wQnV0dG9uIiwiYm90dG9tQnV0dG9uIiwibm90aWZpY2F0aW9uQ29udGFpbmVyIiwid2hvbGVQYWdlIiwid2F0Y2hDb250YWluZXIiLCJjbGlja3MiLCJjbGlja1RpbWVvdXQiLCJvbmhhc2hjaGFuZ2UiLCJoYXNoQ2hhbmdlRXZlbnQiLCJuZXdVUkwiLCJvbGRVUkwiLCJwcmV2UHJvcHMiLCJzZXR1cFJ4anNMaXN0ZW5lcnMiLCJjdXN0b21FbGVtZW50cyIsImRlZmluZSIsIk15TWFwIiwid2F0Y2hNb3VzZURvd24kIiwid2F0Y2hNb3VzZVVwJCIsIndhdGNoS2V5RG93biQiLCJ3YXRjaEtleVVwJCIsIm1lcmdlRXZlbnRzIiwic3Vic2NyaWJlVG9FdmVudHMiLCJ3YXRjaERvd24kIiwid2F0Y2hVcCQiLCJzZXRDbGlja1RpbWVvdXQiLCJoYW5kbGVEb3VibGVDbGljayIsIndhdGNoQ2xpY2skIiwiZG93bkV2ZW50IiwidXBFdmVudCIsInRpbWVUYWtlbiIsInRlc3RDbGljayIsImV2ZW50SGFuZGxlclBhcmFtcyIsInZpZXdOYW1lIiwiY3VycmVudFZpZXciLCJldmVudEhhbmRsZXIiLCJWaWV3VHlwZSIsInZpZXciLCJwYWdlV2lsbExvYWQiLCJpbm5lckhUTUwiLCJwYWdlRGlkTG9hZCIsIlBhZ2UiLCJyZW5kZXJNYXAiLCJMIiwiY2VudGVyIiwiem9vbSIsInpvb21Db250cm9sIiwidGlsZUxheWVyIiwiYXR0cmlidXRpb24iLCJhZGRUbyIsIkhUTUxFbGVtZW50Iiwic3JjIiwiRiIsInByb3RvIiwibGFzdElkIiwic3RhbXAiLCJfbGVhZmxldF9pZCIsInRpbWUiLCJsb2NrIiwid3JhcHBlckZuIiwibGF0ZXIiLCJ3cmFwTnVtIiwiaW5jbHVkZU1heCIsImZhbHNlRm4iLCJmb3JtYXROdW0iLCJudW0iLCJkaWdpdHMiLCJwb3ciLCJyb3VuZCIsInN0ciIsInNwbGl0V29yZHMiLCJzZXRPcHRpb25zIiwiZ2V0UGFyYW1TdHJpbmciLCJleGlzdGluZ1VybCIsInVwcGVyY2FzZSIsInRvVXBwZXJDYXNlIiwidGVtcGxhdGVSZSIsImVtcHR5SW1hZ2VVcmwiLCJnZXRQcmVmaXhlZCIsInRpbWVvdXREZWZlciIsInRpbWVUb0NhbGwiLCJyZXF1ZXN0Rm4iLCJjYW5jZWxGbiIsInJlcXVlc3RBbmltRnJhbWUiLCJpbW1lZGlhdGUiLCJjYW5jZWxBbmltRnJhbWUiLCJVdGlsIiwiQ2xhc3MiLCJOZXdDbGFzcyIsImluaXRpYWxpemUiLCJjYWxsSW5pdEhvb2tzIiwicGFyZW50UHJvdG8iLCJfX3N1cGVyX18iLCJzdGF0aWNzIiwiTWl4aW4iLCJFdmVudHMiLCJjaGVja0RlcHJlY2F0ZWRNaXhpbkV2ZW50cyIsIl9pbml0SG9va3MiLCJfaW5pdEhvb2tzQ2FsbGVkIiwiaW5jbHVkZSIsIm1lcmdlT3B0aW9ucyIsImFkZEluaXRIb29rIiwidHlwZXMiLCJfb24iLCJfb2ZmIiwidHlwZUxpc3RlbmVycyIsImN0eCIsIl9maXJpbmdDb3VudCIsImZpcmUiLCJwcm9wYWdhdGUiLCJsaXN0ZW5zIiwiZXZlbnQiLCJzb3VyY2VUYXJnZXQiLCJfcHJvcGFnYXRlRXZlbnQiLCJfZXZlbnRQYXJlbnRzIiwiYWRkRXZlbnRQYXJlbnQiLCJyZW1vdmVFdmVudFBhcmVudCIsImxheWVyIiwicHJvcGFnYXRlZEZyb20iLCJjbGVhckFsbEV2ZW50TGlzdGVuZXJzIiwiYWRkT25lVGltZUV2ZW50TGlzdGVuZXIiLCJmaXJlRXZlbnQiLCJoYXNFdmVudExpc3RlbmVycyIsIkV2ZW50ZWQiLCJQb2ludCIsInRydW5jIiwiZmxvb3IiLCJjZWlsIiwidG9Qb2ludCIsIkJvdW5kcyIsInBvaW50cyIsInRvQm91bmRzIiwiTGF0TG5nQm91bmRzIiwiY29ybmVyMSIsImNvcm5lcjIiLCJsYXRsbmdzIiwidG9MYXRMbmdCb3VuZHMiLCJMYXRMbmciLCJsYXQiLCJsbmciLCJhbHQiLCJ0b0xhdExuZyIsImxvbiIsImNsb25lIiwicG9pbnQiLCJfYWRkIiwic3VidHJhY3QiLCJfc3VidHJhY3QiLCJkaXZpZGVCeSIsIl9kaXZpZGVCeSIsIm11bHRpcGx5QnkiLCJfbXVsdGlwbHlCeSIsInNjYWxlQnkiLCJ1bnNjYWxlQnkiLCJfcm91bmQiLCJfZmxvb3IiLCJfY2VpbCIsIl90cnVuYyIsImRpc3RhbmNlVG8iLCJzcXJ0IiwiZXF1YWxzIiwiY29udGFpbnMiLCJhYnMiLCJnZXRDZW50ZXIiLCJnZXRCb3R0b21MZWZ0IiwiZ2V0VG9wUmlnaHQiLCJnZXRUb3BMZWZ0IiwiZ2V0Qm90dG9tUmlnaHQiLCJnZXRTaXplIiwiaW50ZXJzZWN0cyIsImJvdW5kcyIsIm1pbjIiLCJtYXgyIiwieEludGVyc2VjdHMiLCJ5SW50ZXJzZWN0cyIsIm92ZXJsYXBzIiwieE92ZXJsYXBzIiwieU92ZXJsYXBzIiwiaXNWYWxpZCIsInN3MiIsIm5lMiIsInN3IiwiX3NvdXRoV2VzdCIsIm5lIiwiX25vcnRoRWFzdCIsInBhZCIsImJ1ZmZlclJhdGlvIiwiaGVpZ2h0QnVmZmVyIiwid2lkdGhCdWZmZXIiLCJnZXRTb3V0aFdlc3QiLCJnZXROb3J0aEVhc3QiLCJnZXROb3J0aFdlc3QiLCJnZXROb3J0aCIsImdldFdlc3QiLCJnZXRTb3V0aEVhc3QiLCJnZXRTb3V0aCIsImdldEVhc3QiLCJsYXRJbnRlcnNlY3RzIiwibG5nSW50ZXJzZWN0cyIsImxhdE92ZXJsYXBzIiwibG5nT3ZlcmxhcHMiLCJ0b0JCb3hTdHJpbmciLCJtYXhNYXJnaW4iLCJwcmVjaXNpb24iLCJFYXJ0aCIsImRpc3RhbmNlIiwid3JhcCIsIndyYXBMYXRMbmciLCJzaXplSW5NZXRlcnMiLCJsYXRBY2N1cmFjeSIsImxuZ0FjY3VyYWN5IiwiY29zIiwiUEkiLCJDUlMiLCJsYXRMbmdUb1BvaW50IiwibGF0bG5nIiwicHJvamVjdGVkUG9pbnQiLCJwcm9qZWN0aW9uIiwic2NhbGUiLCJ0cmFuc2Zvcm1hdGlvbiIsIl90cmFuc2Zvcm0iLCJwb2ludFRvTGF0TG5nIiwidW50cmFuc2Zvcm1lZFBvaW50IiwidW50cmFuc2Zvcm0iLCJ1bnByb2plY3QiLCJMTjIiLCJnZXRQcm9qZWN0ZWRCb3VuZHMiLCJpbmZpbml0ZSIsIndyYXBMbmciLCJ3cmFwTGF0Iiwid3JhcExhdExuZ0JvdW5kcyIsIm5ld0NlbnRlciIsImxhdFNoaWZ0IiwibG5nU2hpZnQiLCJsYXRsbmcxIiwibGF0bG5nMiIsInJhZCIsImxhdDEiLCJsYXQyIiwic2luRExhdCIsInNpbiIsInNpbkRMb24iLCJhdGFuMiIsIlNwaGVyaWNhbE1lcmNhdG9yIiwiTUFYX0xBVElUVURFIiwiYXRhbiIsImV4cCIsIlRyYW5zZm9ybWF0aW9uIiwidG9UcmFuc2Zvcm1hdGlvbiIsIkVQU0czODU3IiwiY29kZSIsIkVQU0c5MDA5MTMiLCJzdmdDcmVhdGUiLCJjcmVhdGVFbGVtZW50TlMiLCJwb2ludHNUb1BhdGgiLCJyaW5ncyIsImxlbjIiLCJzdmciLCJzdHlsZSQxIiwiZG9jdW1lbnRFbGVtZW50IiwiaWUiLCJpZWx0OSIsImVkZ2UiLCJuYXZpZ2F0b3IiLCJ3ZWJraXQiLCJ1c2VyQWdlbnRDb250YWlucyIsImFuZHJvaWQiLCJhbmRyb2lkMjMiLCJ3ZWJraXRWZXIiLCJleGVjIiwidXNlckFnZW50IiwiYW5kcm9pZFN0b2NrIiwib3BlcmEiLCJjaHJvbWUiLCJnZWNrbyIsInNhZmFyaSIsInBoYW50b20iLCJvcGVyYTEyIiwid2luIiwicGxhdGZvcm0iLCJpZTNkIiwid2Via2l0M2QiLCJXZWJLaXRDU1NNYXRyaXgiLCJnZWNrbzNkIiwiYW55M2QiLCJMX0RJU0FCTEVfM0QiLCJtb2JpbGUiLCJvcmllbnRhdGlvbiIsIm1vYmlsZVdlYmtpdCIsIm1vYmlsZVdlYmtpdDNkIiwibXNQb2ludGVyIiwiUG9pbnRlckV2ZW50IiwiTVNQb2ludGVyRXZlbnQiLCJwb2ludGVyIiwidG91Y2giLCJMX05PX1RPVUNIIiwiRG9jdW1lbnRUb3VjaCIsIm1vYmlsZU9wZXJhIiwibW9iaWxlR2Vja28iLCJyZXRpbmEiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2NyZWVuIiwiZGV2aWNlWERQSSIsImxvZ2ljYWxYRFBJIiwicGFzc2l2ZUV2ZW50cyIsInN1cHBvcnRzUGFzc2l2ZU9wdGlvbiIsIm9wdHMiLCJjYW52YXMiLCJnZXRDb250ZXh0IiwiY3JlYXRlU1ZHUmVjdCIsInZtbCIsImRpdiIsInNoYXBlIiwiYmVoYXZpb3IiLCJhZGoiLCJCcm93c2VyIiwiUE9JTlRFUl9ET1dOIiwiUE9JTlRFUl9NT1ZFIiwiUE9JTlRFUl9VUCIsIlBPSU5URVJfQ0FOQ0VMIiwiX3BvaW50ZXJzIiwiX3BvaW50ZXJEb2NMaXN0ZW5lciIsImFkZFBvaW50ZXJMaXN0ZW5lciIsIm9uRG93biIsIk1TUE9JTlRFUl9UWVBFX1RPVUNIIiwicG9pbnRlclR5cGUiLCJwcmV2ZW50RGVmYXVsdCIsIl9oYW5kbGVQb2ludGVyIiwiX2dsb2JhbFBvaW50ZXJEb3duIiwiX2dsb2JhbFBvaW50ZXJNb3ZlIiwiX2dsb2JhbFBvaW50ZXJVcCIsIl9hZGRQb2ludGVyU3RhcnQiLCJvbk1vdmUiLCJNU1BPSU5URVJfVFlQRV9NT1VTRSIsImJ1dHRvbnMiLCJfYWRkUG9pbnRlck1vdmUiLCJvblVwIiwiX2FkZFBvaW50ZXJFbmQiLCJwb2ludGVySWQiLCJ0b3VjaGVzIiwiY2hhbmdlZFRvdWNoZXMiLCJkaXNhYmxlVGV4dFNlbGVjdGlvbiIsImVuYWJsZVRleHRTZWxlY3Rpb24iLCJfdXNlclNlbGVjdCIsIl9vdXRsaW5lRWxlbWVudCIsIl9vdXRsaW5lU3R5bGUiLCJfdG91Y2hzdGFydCIsIl90b3VjaGVuZCIsIl9wcmUiLCJUUkFOU0ZPUk0iLCJ0ZXN0UHJvcCIsIlRSQU5TSVRJT04iLCJUUkFOU0lUSU9OX0VORCIsImdldFN0eWxlIiwiY3VycmVudFN0eWxlIiwiZGVmYXVsdFZpZXciLCJnZXRDb21wdXRlZFN0eWxlIiwiY3JlYXRlJDEiLCJ0YWdOYW1lIiwiY2xhc3NOYW1lIiwidG9Gcm9udCIsImxhc3RDaGlsZCIsInRvQmFjayIsImhhc0NsYXNzIiwiY2xhc3NMaXN0IiwiZ2V0Q2xhc3MiLCJSZWdFeHAiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJzZXRDbGFzcyIsInJlbW92ZUNsYXNzIiwiYmFzZVZhbCIsImNvcnJlc3BvbmRpbmdFbGVtZW50Iiwic2V0T3BhY2l0eSIsIm9wYWNpdHkiLCJmaWx0ZXJOYW1lIiwiZmlsdGVycyIsIkVuYWJsZWQiLCJPcGFjaXR5IiwiX3NldE9wYWNpdHlJRSIsInNldFRyYW5zZm9ybSIsIm9mZnNldCIsInBvcyIsInNldFBvc2l0aW9uIiwiX2xlYWZsZXRfcG9zIiwibGVmdCIsInRvcCIsImdldFBvc2l0aW9uIiwidXNlclNlbGVjdFByb3BlcnR5IiwiZGlzYWJsZUltYWdlRHJhZyIsImVuYWJsZUltYWdlRHJhZyIsInByZXZlbnRPdXRsaW5lIiwidGFiSW5kZXgiLCJyZXN0b3JlT3V0bGluZSIsIm91dGxpbmUiLCJnZXRTaXplZFBhcmVudE5vZGUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImdldFNjYWxlIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiYm91bmRpbmdDbGllbnRSZWN0IiwiRG9tVXRpbCIsImFkZE9uZSIsImV2ZW50c0tleSIsInJlbW92ZU9uZSIsImJyb3dzZXJGaXJlc05hdGl2ZURibENsaWNrIiwibW91c2VTdWJzdCIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwid2hlZWwiLCJvcmlnaW5hbEhhbmRsZXIiLCJ0b3VjaCQkMSIsImRvdWJsZVRhcCIsIm9uVG91Y2hTdGFydCIsImlzUHJpbWFyeSIsImRlbHRhIiwib25Ub3VjaEVuZCIsImNhbmNlbEJ1YmJsZSIsInByb3AiLCJuZXdUb3VjaCIsImJ1dHRvbiIsInBhc3NpdmUiLCJhZGREb3VibGVUYXBMaXN0ZW5lciIsImlzRXh0ZXJuYWxUYXJnZXQiLCJhdHRhY2hFdmVudCIsInJlbW92ZVBvaW50ZXJMaXN0ZW5lciIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsImRibGNsaWNrIiwicmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsInN0b3BQcm9wYWdhdGlvbiIsIm9yaWdpbmFsRXZlbnQiLCJfc3RvcHBlZCIsInNraXBwZWQiLCJkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24iLCJkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbiIsImZha2VTdG9wIiwicmV0dXJuVmFsdWUiLCJzdG9wIiwiZ2V0TW91c2VQb3NpdGlvbiIsImNsaWVudFgiLCJjbGllbnRZIiwiY2xpZW50TGVmdCIsImNsaWVudFRvcCIsIndoZWVsUHhGYWN0b3IiLCJnZXRXaGVlbERlbHRhIiwid2hlZWxEZWx0YVkiLCJkZWx0YVkiLCJkZWx0YU1vZGUiLCJkZWx0YVgiLCJkZWx0YVoiLCJ3aGVlbERlbHRhIiwiZGV0YWlsIiwic2tpcEV2ZW50cyIsInJlbGF0ZWQiLCJyZWxhdGVkVGFyZ2V0IiwiRG9tRXZlbnQiLCJQb3NBbmltYXRpb24iLCJuZXdQb3MiLCJlYXNlTGluZWFyaXR5IiwiX2VsIiwiX2luUHJvZ3Jlc3MiLCJfZHVyYXRpb24iLCJfZWFzZU91dFBvd2VyIiwiX3N0YXJ0UG9zIiwiX29mZnNldCIsIl9zdGFydFRpbWUiLCJfYW5pbWF0ZSIsIl9zdGVwIiwiX2FuaW1JZCIsIl9ydW5GcmFtZSIsIl9lYXNlT3V0IiwicHJvZ3Jlc3MiLCJjcnMiLCJtaW5ab29tIiwibWF4Wm9vbSIsImxheWVycyIsIm1heEJvdW5kcyIsInJlbmRlcmVyIiwiem9vbUFuaW1hdGlvbiIsInpvb21BbmltYXRpb25UaHJlc2hvbGQiLCJmYWRlQW5pbWF0aW9uIiwibWFya2VyWm9vbUFuaW1hdGlvbiIsInRyYW5zZm9ybTNETGltaXQiLCJ6b29tU25hcCIsInpvb21EZWx0YSIsInRyYWNrUmVzaXplIiwiX2hhbmRsZXJzIiwiX2xheWVycyIsIl96b29tQm91bmRMYXllcnMiLCJfc2l6ZUNoYW5nZWQiLCJfaW5pdENvbnRhaW5lciIsIl9pbml0TGF5b3V0IiwiX29uUmVzaXplIiwiX2luaXRFdmVudHMiLCJzZXRNYXhCb3VuZHMiLCJfem9vbSIsIl9saW1pdFpvb20iLCJzZXRWaWV3IiwiX3pvb21BbmltYXRlZCIsIl9jcmVhdGVBbmltUHJveHkiLCJfcHJveHkiLCJfY2F0Y2hUcmFuc2l0aW9uRW5kIiwiX2FkZExheWVycyIsIl9saW1pdENlbnRlciIsIl9zdG9wIiwiX2xvYWRlZCIsImFuaW1hdGUiLCJwYW4iLCJfdHJ5QW5pbWF0ZWRab29tIiwiX3RyeUFuaW1hdGVkUGFuIiwiX3NpemVUaW1lciIsIl9yZXNldFZpZXciLCJzZXRab29tIiwiem9vbUluIiwiem9vbU91dCIsInNldFpvb21Bcm91bmQiLCJnZXRab29tU2NhbGUiLCJ2aWV3SGFsZiIsImNlbnRlck9mZnNldCIsImxhdExuZ1RvQ29udGFpbmVyUG9pbnQiLCJjb250YWluZXJQb2ludFRvTGF0TG5nIiwiX2dldEJvdW5kc0NlbnRlclpvb20iLCJnZXRCb3VuZHMiLCJwYWRkaW5nVEwiLCJwYWRkaW5nVG9wTGVmdCIsInBhZGRpbmciLCJwYWRkaW5nQlIiLCJwYWRkaW5nQm90dG9tUmlnaHQiLCJnZXRCb3VuZHNab29tIiwicGFkZGluZ09mZnNldCIsInN3UG9pbnQiLCJuZVBvaW50IiwiZml0Qm91bmRzIiwiZml0V29ybGQiLCJwYW5UbyIsInBhbkJ5IiwiZ2V0Wm9vbSIsIl9wYW5BbmltIiwiX29uUGFuVHJhbnNpdGlvblN0ZXAiLCJfb25QYW5UcmFuc2l0aW9uRW5kIiwibm9Nb3ZlU3RhcnQiLCJfbWFwUGFuZSIsIl9nZXRNYXBQYW5lUG9zIiwiX3Jhd1BhbkJ5IiwiZmx5VG8iLCJ0YXJnZXRDZW50ZXIiLCJ0YXJnZXRab29tIiwic3RhcnRab29tIiwidzAiLCJ3MSIsInUxIiwicmhvIiwic3EiLCJzaW5oIiwiY29zaCIsInIwIiwidSIsIlMiLCJfbW92ZVN0YXJ0IiwiZWFzZU91dCIsIl9mbHlUb0ZyYW1lIiwiX21vdmUiLCJnZXRTY2FsZVpvb20iLCJfbW92ZUVuZCIsImZseVRvQm91bmRzIiwiX3Bhbkluc2lkZU1heEJvdW5kcyIsInNldE1pblpvb20iLCJvbGRab29tIiwic2V0TWF4Wm9vbSIsInBhbkluc2lkZUJvdW5kcyIsIl9lbmZvcmNpbmdCb3VuZHMiLCJwYW5JbnNpZGUiLCJwaXhlbENlbnRlciIsInBpeGVsUG9pbnQiLCJwaXhlbEJvdW5kcyIsImdldFBpeGVsQm91bmRzIiwiaGFsZlBpeGVsQm91bmRzIiwicGFkZGVkQm91bmRzIiwiZGlmZiIsImludmFsaWRhdGVTaXplIiwib2xkU2l6ZSIsIl9sYXN0Q2VudGVyIiwibmV3U2l6ZSIsIm9sZENlbnRlciIsImRlYm91bmNlTW92ZWVuZCIsImxvY2F0ZSIsIl9sb2NhdGVPcHRpb25zIiwid2F0Y2giLCJfaGFuZGxlR2VvbG9jYXRpb25FcnJvciIsIm9uUmVzcG9uc2UiLCJfaGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZSIsIl9sb2NhdGlvbldhdGNoSWQiLCJnZW9sb2NhdGlvbiIsIndhdGNoUG9zaXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJzdG9wTG9jYXRlIiwiY2xlYXJXYXRjaCIsImNvb3JkcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiYWNjdXJhY3kiLCJIYW5kbGVyQ2xhc3MiLCJlbmFibGUiLCJfY29udGFpbmVySWQiLCJfY29udGFpbmVyIiwiX2NsZWFyQ29udHJvbFBvcyIsIl9yZXNpemVSZXF1ZXN0IiwiX2NsZWFySGFuZGxlcnMiLCJfcGFuZXMiLCJfcmVuZGVyZXIiLCJjcmVhdGVQYW5lIiwicGFuZSIsIl9jaGVja0lmTG9hZGVkIiwiX21vdmVkIiwibGF5ZXJQb2ludFRvTGF0TG5nIiwiX2dldENlbnRlckxheWVyUG9pbnQiLCJnZXRNaW5ab29tIiwiX2xheWVyc01pblpvb20iLCJnZXRNYXhab29tIiwiX2xheWVyc01heFpvb20iLCJpbnNpZGUiLCJudyIsInNlIiwiYm91bmRzU2l6ZSIsInNuYXAiLCJzY2FsZXgiLCJzY2FsZXkiLCJfc2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwidG9wTGVmdFBvaW50IiwiX2dldFRvcExlZnRQb2ludCIsImdldFBpeGVsT3JpZ2luIiwiX3BpeGVsT3JpZ2luIiwiZ2V0UGl4ZWxXb3JsZEJvdW5kcyIsImdldFBhbmUiLCJnZXRQYW5lcyIsImdldENvbnRhaW5lciIsInRvWm9vbSIsImZyb21ab29tIiwibGF0TG5nVG9MYXllclBvaW50IiwiY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQiLCJsYXllclBvaW50VG9Db250YWluZXJQb2ludCIsImxheWVyUG9pbnQiLCJtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCIsIm1vdXNlRXZlbnRUb0xheWVyUG9pbnQiLCJtb3VzZUV2ZW50VG9MYXRMbmciLCJfb25TY3JvbGwiLCJfZmFkZUFuaW1hdGVkIiwiX2luaXRQYW5lcyIsIl9pbml0Q29udHJvbFBvcyIsInBhbmVzIiwiX3BhbmVSZW5kZXJlcnMiLCJtYXJrZXJQYW5lIiwic2hhZG93UGFuZSIsImxvYWRpbmciLCJ6b29tQ2hhbmdlZCIsIl9nZXROZXdQaXhlbE9yaWdpbiIsInBpbmNoIiwiX2dldFpvb21TcGFuIiwicmVtb3ZlJCQxIiwiX3RhcmdldHMiLCJvbk9mZiIsIl9oYW5kbGVET01FdmVudCIsIl9vbk1vdmVFbmQiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiX2ZpbmRFdmVudFRhcmdldHMiLCJ0YXJnZXRzIiwiaXNIb3ZlciIsInNyY0VsZW1lbnQiLCJkcmFnZ2luZyIsIl9zaW11bGF0ZWQiLCJfZHJhZ2dhYmxlTW92ZWQiLCJfZmlyZURPTUV2ZW50IiwiX21vdXNlRXZlbnRzIiwic3ludGgiLCJpc01hcmtlciIsImdldExhdExuZyIsIl9yYWRpdXMiLCJjb250YWluZXJQb2ludCIsImJ1YmJsaW5nTW91c2VFdmVudHMiLCJlbmFibGVkIiwibW92ZWQiLCJib3hab29tIiwiZGlzYWJsZSIsIndoZW5SZWFkeSIsIl9sYXRMbmdUb05ld0xheWVyUG9pbnQiLCJ0b3BMZWZ0IiwiX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHMiLCJsYXRMbmdCb3VuZHMiLCJfZ2V0Q2VudGVyT2Zmc2V0IiwiY2VudGVyUG9pbnQiLCJ2aWV3Qm91bmRzIiwiX2dldEJvdW5kc09mZnNldCIsIl9saW1pdE9mZnNldCIsIm5ld0JvdW5kcyIsInB4Qm91bmRzIiwicHJvamVjdGVkTWF4Qm91bmRzIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiX3JlYm91bmQiLCJyaWdodCIsInByb3h5IiwibWFwUGFuZSIsIl9hbmltYXRpbmdab29tIiwiX29uWm9vbVRyYW5zaXRpb25FbmQiLCJfYW5pbU1vdmVFbmQiLCJfZGVzdHJveUFuaW1Qcm94eSIsInoiLCJfbm90aGluZ1RvQW5pbWF0ZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJfYW5pbWF0ZVpvb20iLCJzdGFydEFuaW0iLCJub1VwZGF0ZSIsIl9hbmltYXRlVG9DZW50ZXIiLCJfYW5pbWF0ZVRvWm9vbSIsIkNvbnRyb2wiLCJfbWFwIiwicmVtb3ZlQ29udHJvbCIsImFkZENvbnRyb2wiLCJvbkFkZCIsImNvcm5lciIsIl9jb250cm9sQ29ybmVycyIsIm9uUmVtb3ZlIiwiX3JlZm9jdXNPbk1hcCIsInNjcmVlblgiLCJzY3JlZW5ZIiwiZm9jdXMiLCJjb250cm9sIiwiY29ybmVycyIsIl9jb250cm9sQ29udGFpbmVyIiwiY3JlYXRlQ29ybmVyIiwidlNpZGUiLCJoU2lkZSIsIkxheWVycyIsImNvbGxhcHNlZCIsImF1dG9aSW5kZXgiLCJoaWRlU2luZ2xlQmFzZSIsInNvcnRMYXllcnMiLCJzb3J0RnVuY3Rpb24iLCJsYXllckEiLCJsYXllckIiLCJuYW1lQSIsIm5hbWVCIiwiYmFzZUxheWVycyIsIm92ZXJsYXlzIiwiX2xheWVyQ29udHJvbElucHV0cyIsIl9sYXN0WkluZGV4IiwiX2hhbmRsaW5nQ2xpY2siLCJfYWRkTGF5ZXIiLCJfdXBkYXRlIiwiX2NoZWNrRGlzYWJsZWRMYXllcnMiLCJfb25MYXllckNoYW5nZSIsIl9leHBhbmRJZk5vdENvbGxhcHNlZCIsImFkZEJhc2VMYXllciIsImFkZE92ZXJsYXkiLCJyZW1vdmVMYXllciIsIl9nZXRMYXllciIsIl9zZWN0aW9uIiwiYWNjZXB0YWJsZUhlaWdodCIsIm9mZnNldFRvcCIsImNvbGxhcHNlIiwic2VjdGlvbiIsIl9sYXllcnNMaW5rIiwidGl0bGUiLCJfYmFzZUxheWVyc0xpc3QiLCJfc2VwYXJhdG9yIiwiX292ZXJsYXlzTGlzdCIsIm92ZXJsYXkiLCJzZXRaSW5kZXgiLCJiYXNlTGF5ZXJzUHJlc2VudCIsIm92ZXJsYXlzUHJlc2VudCIsImJhc2VMYXllcnNDb3VudCIsIl9hZGRJdGVtIiwiZGlzcGxheSIsIl9jcmVhdGVSYWRpb0VsZW1lbnQiLCJjaGVja2VkIiwicmFkaW9IdG1sIiwicmFkaW9GcmFnbWVudCIsImhhc0xheWVyIiwiZGVmYXVsdENoZWNrZWQiLCJsYXllcklkIiwiX29uSW5wdXRDbGljayIsImhvbGRlciIsImFkZGVkTGF5ZXJzIiwicmVtb3ZlZExheWVycyIsImFkZExheWVyIiwiZGlzYWJsZWQiLCJfZXhwYW5kIiwiX2NvbGxhcHNlIiwiWm9vbSIsInpvb21JblRleHQiLCJ6b29tSW5UaXRsZSIsInpvb21PdXRUZXh0Iiwiem9vbU91dFRpdGxlIiwiem9vbU5hbWUiLCJfem9vbUluQnV0dG9uIiwiX2NyZWF0ZUJ1dHRvbiIsIl96b29tSW4iLCJfem9vbU91dEJ1dHRvbiIsIl96b29tT3V0IiwiX3VwZGF0ZURpc2FibGVkIiwiX2Rpc2FibGVkIiwic2hpZnRLZXkiLCJodG1sIiwiU2NhbGUiLCJtYXhXaWR0aCIsIm1ldHJpYyIsImltcGVyaWFsIiwiX2FkZFNjYWxlcyIsInVwZGF0ZVdoZW5JZGxlIiwiX21TY2FsZSIsIl9pU2NhbGUiLCJtYXhNZXRlcnMiLCJfdXBkYXRlU2NhbGVzIiwiX3VwZGF0ZU1ldHJpYyIsIl91cGRhdGVJbXBlcmlhbCIsIm1ldGVycyIsIl9nZXRSb3VuZE51bSIsIl91cGRhdGVTY2FsZSIsIm1heE1pbGVzIiwibWlsZXMiLCJmZWV0IiwibWF4RmVldCIsInRleHQiLCJyYXRpbyIsInBvdzEwIiwiQXR0cmlidXRpb24iLCJwcmVmaXgiLCJfYXR0cmlidXRpb25zIiwiYXR0cmlidXRpb25Db250cm9sIiwiZ2V0QXR0cmlidXRpb24iLCJhZGRBdHRyaWJ1dGlvbiIsInNldFByZWZpeCIsInJlbW92ZUF0dHJpYnV0aW9uIiwiYXR0cmlicyIsInByZWZpeEFuZEF0dHJpYnMiLCJIYW5kbGVyIiwiX2VuYWJsZWQiLCJhZGRIb29rcyIsInJlbW92ZUhvb2tzIiwiX2xhc3RDb2RlIiwiU1RBUlQiLCJFTkQiLCJtb3VzZWRvd24iLCJwb2ludGVyZG93biIsIk1TUG9pbnRlckRvd24iLCJNT1ZFIiwiRHJhZ2dhYmxlIiwiY2xpY2tUb2xlcmFuY2UiLCJkcmFnU3RhcnRUYXJnZXQiLCJwcmV2ZW50T3V0bGluZSQkMSIsIl9lbGVtZW50IiwiX2RyYWdTdGFydFRhcmdldCIsIl9wcmV2ZW50T3V0bGluZSIsIl9vbkRvd24iLCJfZHJhZ2dpbmciLCJmaW5pc2hEcmFnIiwid2hpY2giLCJfbW92aW5nIiwic2l6ZWRQYXJlbnQiLCJfc3RhcnRQb2ludCIsIl9wYXJlbnRTY2FsZSIsIl9vbk1vdmUiLCJfb25VcCIsIl9sYXN0VGFyZ2V0IiwiU1ZHRWxlbWVudEluc3RhbmNlIiwiY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQiLCJfbmV3UG9zIiwiX2FuaW1SZXF1ZXN0IiwiX2xhc3RFdmVudCIsIl91cGRhdGVQb3NpdGlvbiIsInNpbXBsaWZ5IiwidG9sZXJhbmNlIiwic3FUb2xlcmFuY2UiLCJtYXJrZXJzIiwiVWludDhBcnJheSIsIl9zaW1wbGlmeURQU3RlcCIsInNxRGlzdCIsIm1heFNxRGlzdCIsIl9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudCIsIm5ld1BvaW50cyIsIl9zaW1wbGlmeURQIiwicmVkdWNlZFBvaW50cyIsInAxIiwicDIiLCJkeCIsImR5IiwiX3JlZHVjZVBvaW50cyIsInBvaW50VG9TZWdtZW50RGlzdGFuY2UiLCJjbGlwU2VnbWVudCIsInVzZUxhc3RDb2RlIiwiY29kZU91dCIsIm5ld0NvZGUiLCJjb2RlQSIsIl9nZXRCaXRDb2RlIiwiY29kZUIiLCJfZ2V0RWRnZUludGVyc2VjdGlvbiIsImRvdCIsImlzRmxhdCIsIl9mbGF0IiwiTGluZVV0aWwiLCJjbG9zZXN0UG9pbnRPblNlZ21lbnQiLCJjbGlwUG9seWdvbiIsImNsaXBwZWRQb2ludHMiLCJrIiwiZWRnZXMiLCJfY29kZSIsIlBvbHlVdGlsIiwiTG9uTGF0IiwiTWVyY2F0b3IiLCJSX01JTk9SIiwiY29uIiwidHMiLCJ0YW4iLCJwaGkiLCJkcGhpIiwiRVBTRzMzOTUiLCJFUFNHNDMyNiIsIlNpbXBsZSIsIkxheWVyIiwicmVtb3ZlRnJvbSIsIl9tYXBUb0FkZCIsImFkZEludGVyYWN0aXZlVGFyZ2V0IiwidGFyZ2V0RWwiLCJyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCIsIl9sYXllckFkZCIsImdldEV2ZW50cyIsImJlZm9yZUFkZCIsImVhY2hMYXllciIsIl9hZGRab29tTGltaXQiLCJfdXBkYXRlWm9vbUxldmVscyIsIl9yZW1vdmVab29tTGltaXQiLCJvbGRab29tU3BhbiIsIkxheWVyR3JvdXAiLCJnZXRMYXllcklkIiwiY2xlYXJMYXllcnMiLCJpbnZva2UiLCJnZXRMYXllciIsImdldExheWVycyIsInpJbmRleCIsIkZlYXR1cmVHcm91cCIsInNldFN0eWxlIiwiYnJpbmdUb0Zyb250IiwiYnJpbmdUb0JhY2siLCJJY29uIiwicG9wdXBBbmNob3IiLCJ0b29sdGlwQW5jaG9yIiwiY3JlYXRlSWNvbiIsIm9sZEljb24iLCJfY3JlYXRlSWNvbiIsImNyZWF0ZVNoYWRvdyIsIl9nZXRJY29uVXJsIiwiaW1nIiwiX2NyZWF0ZUltZyIsIl9zZXRJY29uU3R5bGVzIiwic2l6ZU9wdGlvbiIsImFuY2hvciIsInNoYWRvd0FuY2hvciIsImljb25BbmNob3IiLCJtYXJnaW5MZWZ0IiwibWFyZ2luVG9wIiwiSWNvbkRlZmF1bHQiLCJpY29uVXJsIiwiaWNvblJldGluYVVybCIsInNoYWRvd1VybCIsImljb25TaXplIiwic2hhZG93U2l6ZSIsImltYWdlUGF0aCIsIl9kZXRlY3RJY29uUGF0aCIsIk1hcmtlckRyYWciLCJtYXJrZXIiLCJfbWFya2VyIiwiaWNvbiIsIl9pY29uIiwiX2RyYWdnYWJsZSIsImRyYWdzdGFydCIsIl9vbkRyYWdTdGFydCIsInByZWRyYWciLCJfb25QcmVEcmFnIiwiZHJhZyIsIl9vbkRyYWciLCJkcmFnZW5kIiwiX29uRHJhZ0VuZCIsIl9hZGp1c3RQYW4iLCJzcGVlZCIsImF1dG9QYW5TcGVlZCIsImF1dG9QYW5QYWRkaW5nIiwiaWNvblBvcyIsIm9yaWdpbiIsInBhbkJvdW5kcyIsIm1vdmVtZW50IiwiX3BhblJlcXVlc3QiLCJfb2xkTGF0TG5nIiwiY2xvc2VQb3B1cCIsImF1dG9QYW4iLCJzaGFkb3ciLCJfc2hhZG93IiwiX2xhdGxuZyIsIm9sZExhdExuZyIsIk1hcmtlciIsImludGVyYWN0aXZlIiwia2V5Ym9hcmQiLCJ6SW5kZXhPZmZzZXQiLCJyaXNlT25Ib3ZlciIsInJpc2VPZmZzZXQiLCJkcmFnZ2FibGUiLCJfaW5pdEljb24iLCJfcmVtb3ZlSWNvbiIsIl9yZW1vdmVTaGFkb3ciLCJ2aWV3cmVzZXQiLCJzZXRMYXRMbmciLCJzZXRaSW5kZXhPZmZzZXQiLCJnZXRJY29uIiwic2V0SWNvbiIsIl9wb3B1cCIsImJpbmRQb3B1cCIsIl9zZXRQb3MiLCJjbGFzc1RvQWRkIiwiYWRkSWNvbiIsIm1vdXNlb3ZlciIsIl9icmluZ1RvRnJvbnQiLCJtb3VzZW91dCIsIl9yZXNldFpJbmRleCIsIm5ld1NoYWRvdyIsImFkZFNoYWRvdyIsIl91cGRhdGVPcGFjaXR5IiwiX2luaXRJbnRlcmFjdGlvbiIsIl96SW5kZXgiLCJfdXBkYXRlWkluZGV4Iiwib3B0IiwiX2dldFBvcHVwQW5jaG9yIiwiX2dldFRvb2x0aXBBbmNob3IiLCJQYXRoIiwic3Ryb2tlIiwiY29sb3IiLCJ3ZWlnaHQiLCJsaW5lQ2FwIiwibGluZUpvaW4iLCJkYXNoQXJyYXkiLCJkYXNoT2Zmc2V0IiwiZmlsbCIsImZpbGxDb2xvciIsImZpbGxPcGFjaXR5IiwiZmlsbFJ1bGUiLCJnZXRSZW5kZXJlciIsIl9pbml0UGF0aCIsIl9yZXNldCIsIl9hZGRQYXRoIiwiX3JlbW92ZVBhdGgiLCJyZWRyYXciLCJfdXBkYXRlUGF0aCIsIl91cGRhdGVTdHlsZSIsIl91cGRhdGVCb3VuZHMiLCJfYnJpbmdUb0JhY2siLCJfcGF0aCIsIl9wcm9qZWN0IiwiX2NsaWNrVG9sZXJhbmNlIiwiQ2lyY2xlTWFya2VyIiwicmFkaXVzIiwic2V0UmFkaXVzIiwiZ2V0UmFkaXVzIiwiX3BvaW50IiwicjIiLCJfcmFkaXVzWSIsIl9weEJvdW5kcyIsIl91cGRhdGVDaXJjbGUiLCJfZW1wdHkiLCJfYm91bmRzIiwiX2NvbnRhaW5zUG9pbnQiLCJDaXJjbGUiLCJsZWdhY3lPcHRpb25zIiwiX21SYWRpdXMiLCJoYWxmIiwibGF0UiIsImJvdHRvbSIsImxuZ1IiLCJhY29zIiwiUG9seWxpbmUiLCJzbW9vdGhGYWN0b3IiLCJub0NsaXAiLCJfc2V0TGF0TG5ncyIsImdldExhdExuZ3MiLCJfbGF0bG5ncyIsInNldExhdExuZ3MiLCJjbG9zZXN0TGF5ZXJQb2ludCIsIm1pbkRpc3RhbmNlIiwibWluUG9pbnQiLCJjbG9zZXN0IiwiakxlbiIsIl9wYXJ0cyIsImhhbGZEaXN0Iiwic2VnRGlzdCIsImRpc3QiLCJfcmluZ3MiLCJhZGRMYXRMbmciLCJfZGVmYXVsdFNoYXBlIiwiX2NvbnZlcnRMYXRMbmdzIiwiZmxhdCIsIl9wcm9qZWN0TGF0bG5ncyIsIl9yYXdQeEJvdW5kcyIsInByb2plY3RlZEJvdW5kcyIsIl9jbGlwUG9pbnRzIiwic2VnbWVudCIsIl9zaW1wbGlmeVBvaW50cyIsIl91cGRhdGVQb2x5IiwiUG9seWdvbiIsImFyZWEiLCJjbGlwcGVkIiwiR2VvSlNPTiIsImdlb2pzb24iLCJhZGREYXRhIiwiZmVhdHVyZSIsImZlYXR1cmVzIiwiZ2VvbWV0cmllcyIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJnZW9tZXRyeVRvTGF5ZXIiLCJhc0ZlYXR1cmUiLCJkZWZhdWx0T3B0aW9ucyIsInJlc2V0U3R5bGUiLCJvbkVhY2hGZWF0dXJlIiwiX3NldExheWVyU3R5bGUiLCJwb2ludFRvTGF5ZXIiLCJfY29vcmRzVG9MYXRMbmciLCJjb29yZHNUb0xhdExuZyIsIl9wb2ludFRvTGF5ZXIiLCJjb29yZHNUb0xhdExuZ3MiLCJwb2ludFRvTGF5ZXJGbiIsIm1hcmtlcnNJbmhlcml0T3B0aW9ucyIsImxldmVsc0RlZXAiLCJsYXRMbmdUb0Nvb3JkcyIsImxhdExuZ3NUb0Nvb3JkcyIsImdldEZlYXR1cmUiLCJuZXdHZW9tZXRyeSIsIlBvaW50VG9HZW9KU09OIiwidG9HZW9KU09OIiwiZ2VvSlNPTiIsIm11bHRpIiwiaG9sZXMiLCJ0b011bHRpUG9pbnQiLCJpc0dlb21ldHJ5Q29sbGVjdGlvbiIsImpzb25zIiwianNvbiIsImdlb0pzb24iLCJJbWFnZU92ZXJsYXkiLCJjcm9zc09yaWdpbiIsImVycm9yT3ZlcmxheVVybCIsIl91cmwiLCJfaW1hZ2UiLCJfaW5pdEltYWdlIiwic3R5bGVPcHRzIiwic2V0VXJsIiwic2V0Qm91bmRzIiwiem9vbWFuaW0iLCJ3YXNFbGVtZW50U3VwcGxpZWQiLCJvbnNlbGVjdHN0YXJ0Iiwib25tb3VzZW1vdmUiLCJvbmxvYWQiLCJvbmVycm9yIiwiX292ZXJsYXlPbkVycm9yIiwiaW1hZ2UiLCJlcnJvclVybCIsIlZpZGVvT3ZlcmxheSIsImF1dG9wbGF5Iiwia2VlcEFzcGVjdFJhdGlvIiwibXV0ZWQiLCJ2aWQiLCJvbmxvYWRlZGRhdGEiLCJzb3VyY2VFbGVtZW50cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiU1ZHT3ZlcmxheSIsIkRpdk92ZXJsYXkiLCJfc291cmNlIiwiX3JlbW92ZVRpbWVvdXQiLCJnZXRDb250ZW50IiwiX2NvbnRlbnQiLCJzZXRDb250ZW50IiwidmlzaWJpbGl0eSIsIl91cGRhdGVDb250ZW50IiwiX3VwZGF0ZUxheW91dCIsImlzT3BlbiIsIl9wcmVwYXJlT3BlbiIsIl9jb250ZW50Tm9kZSIsImhhc0NoaWxkTm9kZXMiLCJfZ2V0QW5jaG9yIiwiX2NvbnRhaW5lckJvdHRvbSIsIl9jb250YWluZXJMZWZ0IiwiX2NvbnRhaW5lcldpZHRoIiwiUG9wdXAiLCJtaW5XaWR0aCIsIm1heEhlaWdodCIsImF1dG9QYW5QYWRkaW5nVG9wTGVmdCIsImF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQiLCJrZWVwSW5WaWV3IiwiY2xvc2VCdXR0b24iLCJhdXRvQ2xvc2UiLCJjbG9zZU9uRXNjYXBlS2V5Iiwib3Blbk9uIiwib3BlblBvcHVwIiwicG9wdXAiLCJjbG9zZU9uQ2xpY2siLCJjbG9zZVBvcHVwT25DbGljayIsInByZWNsaWNrIiwiX2Nsb3NlIiwibW92ZWVuZCIsIndyYXBwZXIiLCJfd3JhcHBlciIsIl90aXBDb250YWluZXIiLCJfdGlwIiwiX2Nsb3NlQnV0dG9uIiwiX29uQ2xvc2VCdXR0b25DbGljayIsIndoaXRlU3BhY2UiLCJtYXJnaW5Cb3R0b20iLCJjb250YWluZXJIZWlnaHQiLCJjb250YWluZXJXaWR0aCIsImxheWVyUG9zIiwiY29udGFpbmVyUG9zIiwiX3BvcHVwSGFuZGxlcnNBZGRlZCIsImNsaWNrIiwiX29wZW5Qb3B1cCIsImtleXByZXNzIiwiX29uS2V5UHJlc3MiLCJtb3ZlIiwiX21vdmVQb3B1cCIsInVuYmluZFBvcHVwIiwidG9nZ2xlUG9wdXAiLCJpc1BvcHVwT3BlbiIsInNldFBvcHVwQ29udGVudCIsImdldFBvcHVwIiwia2V5Q29kZSIsIlRvb2x0aXAiLCJkaXJlY3Rpb24iLCJwZXJtYW5lbnQiLCJzdGlja3kiLCJ0b29sdGlwIiwiY2xvc2VUb29sdGlwIiwiX3NldFBvc2l0aW9uIiwic3ViWCIsInN1YlkiLCJ0b29sdGlwUG9pbnQiLCJ0b29sdGlwV2lkdGgiLCJ0b29sdGlwSGVpZ2h0Iiwib3BlblRvb2x0aXAiLCJiaW5kVG9vbHRpcCIsIl90b29sdGlwIiwiX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zIiwidW5iaW5kVG9vbHRpcCIsIl90b29sdGlwSGFuZGxlcnNBZGRlZCIsIl9tb3ZlVG9vbHRpcCIsIl9vcGVuVG9vbHRpcCIsIm1vdXNlbW92ZSIsInRvZ2dsZVRvb2x0aXAiLCJpc1Rvb2x0aXBPcGVuIiwic2V0VG9vbHRpcENvbnRlbnQiLCJnZXRUb29sdGlwIiwiRGl2SWNvbiIsImJnUG9zIiwiRWxlbWVudCIsImJhY2tncm91bmRQb3NpdGlvbiIsIkRlZmF1bHQiLCJHcmlkTGF5ZXIiLCJ0aWxlU2l6ZSIsInVwZGF0ZVdoZW5ab29taW5nIiwidXBkYXRlSW50ZXJ2YWwiLCJtYXhOYXRpdmVab29tIiwibWluTmF0aXZlWm9vbSIsIm5vV3JhcCIsImtlZXBCdWZmZXIiLCJfbGV2ZWxzIiwiX3RpbGVzIiwiX3JlbW92ZUFsbFRpbGVzIiwiX3RpbGVab29tIiwiX3NldEF1dG9aSW5kZXgiLCJpc0xvYWRpbmciLCJfbG9hZGluZyIsInZpZXdwcmVyZXNldCIsIl9pbnZhbGlkYXRlQWxsIiwiY3JlYXRlVGlsZSIsImdldFRpbGVTaXplIiwiZWRnZVpJbmRleCIsIm5leHRGcmFtZSIsIndpbGxQcnVuZSIsInRpbGUiLCJsb2FkZWQiLCJmYWRlIiwiX29uT3BhcXVlVGlsZSIsIl9ub1BydW5lIiwiX3BydW5lVGlsZXMiLCJfZmFkZUZyYW1lIiwiX3VwZGF0ZUxldmVscyIsIl9vblVwZGF0ZUxldmVsIiwiX3JlbW92ZVRpbGVzQXRab29tIiwiX29uUmVtb3ZlTGV2ZWwiLCJfc2V0Wm9vbVRyYW5zZm9ybSIsIl9vbkNyZWF0ZUxldmVsIiwiX2xldmVsIiwicmV0YWluIiwiX3JldGFpblBhcmVudCIsIl9yZXRhaW5DaGlsZHJlbiIsIl9yZW1vdmVUaWxlIiwieDIiLCJ5MiIsInoyIiwiY29vcmRzMiIsIl90aWxlQ29vcmRzVG9LZXkiLCJhbmltYXRpbmciLCJfc2V0VmlldyIsIl9jbGFtcFpvb20iLCJub1BydW5lIiwidGlsZVpvb20iLCJ0aWxlWm9vbUNoYW5nZWQiLCJfYWJvcnRMb2FkaW5nIiwiX3Jlc2V0R3JpZCIsIl9zZXRab29tVHJhbnNmb3JtcyIsInRyYW5zbGF0ZSIsIl90aWxlU2l6ZSIsIl9nbG9iYWxUaWxlUmFuZ2UiLCJfcHhCb3VuZHNUb1RpbGVSYW5nZSIsIl93cmFwWCIsIl93cmFwWSIsIl9nZXRUaWxlZFBpeGVsQm91bmRzIiwibWFwWm9vbSIsImhhbGZTaXplIiwidGlsZVJhbmdlIiwidGlsZUNlbnRlciIsIm1hcmdpbiIsIm5vUHJ1bmVSYW5nZSIsIl9pc1ZhbGlkVGlsZSIsImZyYWdtZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsIl9hZGRUaWxlIiwidGlsZUJvdW5kcyIsIl90aWxlQ29vcmRzVG9Cb3VuZHMiLCJfa2V5VG9Cb3VuZHMiLCJfa2V5VG9UaWxlQ29vcmRzIiwiX3RpbGVDb29yZHNUb053U2UiLCJud1BvaW50Iiwic2VQb2ludCIsImJwIiwiX2luaXRUaWxlIiwiV2Via2l0QmFja2ZhY2VWaXNpYmlsaXR5IiwidGlsZVBvcyIsIl9nZXRUaWxlUG9zIiwiX3dyYXBDb29yZHMiLCJfdGlsZVJlYWR5IiwiX25vVGlsZXNUb0xvYWQiLCJuZXdDb29yZHMiLCJUaWxlTGF5ZXIiLCJzdWJkb21haW5zIiwiZXJyb3JUaWxlVXJsIiwiem9vbU9mZnNldCIsInRtcyIsInpvb21SZXZlcnNlIiwiZGV0ZWN0UmV0aW5hIiwiX29uVGlsZVJlbW92ZSIsIm5vUmVkcmF3IiwiX3RpbGVPbkxvYWQiLCJfdGlsZU9uRXJyb3IiLCJnZXRUaWxlVXJsIiwiX2dldFN1YmRvbWFpbiIsIl9nZXRab29tRm9yVXJsIiwiaW52ZXJ0ZWRZIiwiZ2V0QXR0cmlidXRlIiwidGlsZVBvaW50IiwiVGlsZUxheWVyV01TIiwiZGVmYXVsdFdtc1BhcmFtcyIsInNlcnZpY2UiLCJmb3JtYXQiLCJ0cmFuc3BhcmVudCIsInZlcnNpb24iLCJ3bXNQYXJhbXMiLCJyZWFsUmV0aW5hIiwiX2NycyIsIl93bXNWZXJzaW9uIiwicGFyc2VGbG9hdCIsInByb2plY3Rpb25LZXkiLCJiYm94Iiwic2V0UGFyYW1zIiwiV01TIiwid21zIiwiUmVuZGVyZXIiLCJfdXBkYXRlUGF0aHMiLCJfZGVzdHJveUNvbnRhaW5lciIsIl9vblpvb20iLCJ6b29tZW5kIiwiX29uWm9vbUVuZCIsIl9vbkFuaW1ab29tIiwiZXYiLCJfdXBkYXRlVHJhbnNmb3JtIiwiY3VycmVudENlbnRlclBvaW50IiwiX2NlbnRlciIsInRvcExlZnRPZmZzZXQiLCJDYW52YXMiLCJfb25WaWV3UHJlUmVzZXQiLCJfcG9zdHBvbmVVcGRhdGVQYXRocyIsIl9kcmF3IiwiX29uTW91c2VNb3ZlIiwiX29uQ2xpY2siLCJfaGFuZGxlTW91c2VPdXQiLCJfY3R4IiwiX3JlZHJhd1JlcXVlc3QiLCJfcmVkcmF3Qm91bmRzIiwiX3JlZHJhdyIsIl91cGRhdGVEYXNoQXJyYXkiLCJvcmRlciIsIl9vcmRlciIsIl9kcmF3TGFzdCIsIl9kcmF3Rmlyc3QiLCJfcmVxdWVzdFJlZHJhdyIsIl9leHRlbmRSZWRyYXdCb3VuZHMiLCJkYXNoVmFsdWUiLCJfZGFzaEFycmF5IiwiX2NsZWFyIiwiY2xlYXJSZWN0Iiwic2F2ZSIsInJlc3RvcmUiLCJiZWdpblBhdGgiLCJjbGlwIiwiX2RyYXdpbmciLCJjbG9zZVBhdGgiLCJfZmlsbFN0cm9rZSIsImFyYyIsImdsb2JhbEFscGhhIiwiZmlsbFN0eWxlIiwic2V0TGluZURhc2giLCJsaW5lV2lkdGgiLCJzdHJva2VTdHlsZSIsImNsaWNrZWRMYXllciIsIl9maXJlRXZlbnQiLCJtb3ZpbmciLCJfaGFuZGxlTW91c2VIb3ZlciIsIl9ob3ZlcmVkTGF5ZXIiLCJfbW91c2VIb3ZlclRocm90dGxlZCIsImNhbmRpZGF0ZUhvdmVyZWRMYXllciIsImNhbnZhcyQxIiwidm1sQ3JlYXRlIiwibmFtZXNwYWNlcyIsInZtbE1peGluIiwiY29vcmRzaXplIiwiX3N0cm9rZSIsIl9maWxsIiwic3Ryb2tlZCIsImZpbGxlZCIsImRhc2hTdHlsZSIsImVuZGNhcCIsImpvaW5zdHlsZSIsIl9zZXRQYXRoIiwiY3JlYXRlJDIiLCJTVkciLCJ6b29tc3RhcnQiLCJfb25ab29tU3RhcnQiLCJfcm9vdEdyb3VwIiwiX3N2Z1NpemUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzdmckMSIsIl9nZXRQYW5lUmVuZGVyZXIiLCJfY3JlYXRlUmVuZGVyZXIiLCJwcmVmZXJDYW52YXMiLCJSZWN0YW5nbGUiLCJfYm91bmRzVG9MYXRMbmdzIiwiQm94Wm9vbSIsIl9wYW5lIiwib3ZlcmxheVBhbmUiLCJfcmVzZXRTdGF0ZVRpbWVvdXQiLCJfZGVzdHJveSIsIl9vbk1vdXNlRG93biIsIl9yZXNldFN0YXRlIiwiX2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlIiwiY29udGV4dG1lbnUiLCJtb3VzZXVwIiwiX29uTW91c2VVcCIsImtleWRvd24iLCJfb25LZXlEb3duIiwiX2JveCIsIl9maW5pc2giLCJib3hab29tQm91bmRzIiwiZG91YmxlQ2xpY2tab29tIiwiRG91YmxlQ2xpY2tab29tIiwiX29uRG91YmxlQ2xpY2siLCJpbmVydGlhIiwiaW5lcnRpYURlY2VsZXJhdGlvbiIsImluZXJ0aWFNYXhTcGVlZCIsIndvcmxkQ29weUp1bXAiLCJtYXhCb3VuZHNWaXNjb3NpdHkiLCJEcmFnIiwiX29uUHJlRHJhZ0xpbWl0IiwiX29uUHJlRHJhZ1dyYXAiLCJfcG9zaXRpb25zIiwiX3RpbWVzIiwiX29mZnNldExpbWl0IiwiX3Zpc2Nvc2l0eSIsIl9sYXN0VGltZSIsIl9sYXN0UG9zIiwiX2Fic1BvcyIsIl9wcnVuZVBvc2l0aW9ucyIsInB4Q2VudGVyIiwicHhXb3JsZENlbnRlciIsIl9pbml0aWFsV29ybGRPZmZzZXQiLCJfd29ybGRXaWR0aCIsIl92aXNjb3VzTGltaXQiLCJ0aHJlc2hvbGQiLCJsaW1pdCIsIndvcmxkV2lkdGgiLCJoYWxmV2lkdGgiLCJuZXdYMSIsIm5ld1gyIiwibmV3WCIsIm5vSW5lcnRpYSIsImVhc2UiLCJzcGVlZFZlY3RvciIsImxpbWl0ZWRTcGVlZCIsImxpbWl0ZWRTcGVlZFZlY3RvciIsImRlY2VsZXJhdGlvbkR1cmF0aW9uIiwia2V5Ym9hcmRQYW5EZWx0YSIsIktleWJvYXJkIiwia2V5Q29kZXMiLCJkb3duIiwidXAiLCJfc2V0UGFuRGVsdGEiLCJfc2V0Wm9vbURlbHRhIiwiX29uRm9jdXMiLCJibHVyIiwiX29uQmx1ciIsIl9hZGRIb29rcyIsIl9yZW1vdmVIb29rcyIsIl9mb2N1c2VkIiwiZG9jRWwiLCJzY3JvbGxUbyIsInBhbkRlbHRhIiwiX3BhbktleXMiLCJjb2RlcyIsIl96b29tS2V5cyIsImFsdEtleSIsImN0cmxLZXkiLCJtZXRhS2V5Iiwic2Nyb2xsV2hlZWxab29tIiwid2hlZWxEZWJvdW5jZVRpbWUiLCJ3aGVlbFB4UGVyWm9vbUxldmVsIiwiU2Nyb2xsV2hlZWxab29tIiwiX29uV2hlZWxTY3JvbGwiLCJfZGVsdGEiLCJfbGFzdE1vdXNlUG9zIiwiX3RpbWVyIiwiX3BlcmZvcm1ab29tIiwiZDIiLCJkMyIsImQ0IiwidGFwVG9sZXJhbmNlIiwiVGFwIiwiX2ZpcmVDbGljayIsIl9ob2xkVGltZW91dCIsIl9pc1RhcFZhbGlkIiwiX3NpbXVsYXRlRXZlbnQiLCJ0b3VjaG1vdmUiLCJzaW11bGF0ZWRFdmVudCIsImNyZWF0ZUV2ZW50IiwiX3NpbXVsYXRlZENsaWNrIiwiaW5pdE1vdXNlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwidG91Y2hab29tIiwiYm91bmNlQXRab29tTGltaXRzIiwiVG91Y2hab29tIiwiX29uVG91Y2hTdGFydCIsIl96b29taW5nIiwiX2NlbnRlclBvaW50IiwiX3N0YXJ0TGF0TG5nIiwiX3BpbmNoU3RhcnRMYXRMbmciLCJfc3RhcnREaXN0IiwiX3N0YXJ0Wm9vbSIsIl9vblRvdWNoTW92ZSIsIl9vblRvdWNoRW5kIiwibW92ZUZuIiwiUHJvamVjdGlvbiIsImxhdExuZyIsImxheWVyR3JvdXAiLCJmZWF0dXJlR3JvdXAiLCJpbWFnZU92ZXJsYXkiLCJ2aWRlb092ZXJsYXkiLCJ2aWRlbyIsInN2Z092ZXJsYXkiLCJkaXZJY29uIiwiZ3JpZExheWVyIiwiY2lyY2xlTWFya2VyIiwiY2lyY2xlIiwicG9seWxpbmUiLCJwb2x5Z29uIiwicmVjdGFuZ2xlIiwib2xkTCIsImZhY3RvcnkiLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fIiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18iLCJzZXR1cE5vdGlmaWNhdGlvbkZvcm0iLCJmb3VuZE5vdGlmaWNhdGlvbiIsImhpZGRlbiIsImJhc2VJdGVyYXRlZSIsImZpbmRJbmRleEZ1bmMiLCJjb2xsZWN0aW9uIiwiZnJvbUluZGV4IiwiaXRlcmF0ZWUiLCJiYXNlSXNNYXRjaCIsImdldE1hdGNoRGF0YSIsIm1hdGNoZXNTdHJpY3RDb21wYXJhYmxlIiwibWF0Y2hEYXRhIiwibm9DdXN0b21pemVyIiwib2JqVmFsdWUiLCJDT01QQVJFX1BBUlRJQUxfRkxBRyIsImFzc29jSW5kZXhPZiIsIkxBUkdFX0FSUkFZX1NJWkUiLCJpc01hc2tlZCIsInRvU291cmNlIiwicmVJc0hvc3RDdG9yIiwiZnVuY1Byb3RvIiwicmVJc05hdGl2ZSIsIm5hdGl2ZU9iamVjdFRvU3RyaW5nIiwiaXNPd24iLCJ1bm1hc2tlZCIsInVpZCIsImNvcmVKc0RhdGEiLCJtYXNrU3JjS2V5IiwiSUVfUFJPVE8iLCJIYXNoIiwiaGFzaENsZWFyIiwiaGFzaERlbGV0ZSIsImhhc2hHZXQiLCJoYXNoSGFzIiwiaGFzaFNldCIsImdldE1hcERhdGEiLCJlcXVhbEFycmF5cyIsImVxdWFsQnlUYWciLCJlcXVhbE9iamVjdHMiLCJnZXRUYWciLCJvYmplY3RUYWciLCJvYmpJc0FyciIsIm90aElzQXJyIiwib2JqVGFnIiwib3RoVGFnIiwib2JqSXNPYmoiLCJvdGhJc09iaiIsImlzU2FtZVRhZyIsIm9iaklzV3JhcHBlZCIsIm90aElzV3JhcHBlZCIsIm9ialVud3JhcHBlZCIsIm90aFVud3JhcHBlZCIsInNldENhY2hlQWRkIiwic2V0Q2FjaGVIYXMiLCJjYWNoZSIsIm1hcFRvQXJyYXkiLCJzZXRUb0FycmF5Iiwic3ltYm9sUHJvdG8iLCJzeW1ib2xWYWx1ZU9mIiwidmFsdWVPZiIsImJ5dGVMZW5ndGgiLCJieXRlT2Zmc2V0IiwiY29udmVydCIsInN0YWNrZWQiLCJnZXRBbGxLZXlzIiwib2JqUHJvcHMiLCJvYmpMZW5ndGgiLCJvYmpTdGFja2VkIiwic2tpcEN0b3IiLCJvYmpDdG9yIiwib3RoQ3RvciIsImJhc2VHZXRBbGxLZXlzIiwiZ2V0U3ltYm9scyIsImFycmF5UHVzaCIsImtleXNGdW5jIiwic3ltYm9sc0Z1bmMiLCJhcnJheUZpbHRlciIsInN0dWJBcnJheSIsIm5hdGl2ZUdldFN5bWJvbHMiLCJzeW1ib2wiLCJyZXNJbmRleCIsImJhc2VUaW1lcyIsImlzSW5kZXgiLCJpbmhlcml0ZWQiLCJpc0FyciIsImlzQXJnIiwiaXNCdWZmIiwiaXNUeXBlIiwic2tpcEluZGV4ZXMiLCJ0eXBlZEFycmF5VGFncyIsImZyZWVQcm9jZXNzIiwiYmluZGluZyIsImlzUHJvdG90eXBlIiwibmF0aXZlS2V5cyIsIkN0b3IiLCJvdmVyQXJnIiwiRGF0YVZpZXciLCJXZWFrTWFwIiwiZGF0YVZpZXdDdG9yU3RyaW5nIiwibWFwQ3RvclN0cmluZyIsInByb21pc2VDdG9yU3RyaW5nIiwic2V0Q3RvclN0cmluZyIsIndlYWtNYXBDdG9yU3RyaW5nIiwiQXJyYXlCdWZmZXIiLCJjdG9yU3RyaW5nIiwiaXNTdHJpY3RDb21wYXJhYmxlIiwiaGFzSW4iLCJiYXNlR2V0IiwibWVtb2l6ZUNhcHBlZCIsInJlUHJvcE5hbWUiLCJyZUVzY2FwZUNoYXIiLCJjaGFyQ29kZUF0IiwibWF0Y2giLCJudW1iZXIiLCJxdW90ZSIsInN1YlN0cmluZyIsIm1lbW9pemUiLCJyZXNvbHZlciIsIm1lbW9pemVkIiwiQ2FjaGUiLCJiYXNlVG9TdHJpbmciLCJhcnJheU1hcCIsInN5bWJvbFRvU3RyaW5nIiwiYmFzZUhhc0luIiwiaGFzUGF0aCIsImhhc0Z1bmMiLCJiYXNlUHJvcGVydHkiLCJiYXNlUHJvcGVydHlEZWVwIiwiYmFzZUZpbmRJbmRleCIsInRvSW50ZWdlciIsIm5hdGl2ZU1heCIsImZyb21SaWdodCIsInRvRmluaXRlIiwicmVtYWluZGVyIiwidG9OdW1iZXIiLCJiYXNlVHJpbSIsInJlSXNCYWRIZXgiLCJyZUlzQmluYXJ5IiwicmVJc09jdGFsIiwiZnJlZVBhcnNlSW50IiwiaXNCaW5hcnkiLCJ0cmltbWVkRW5kSW5kZXgiLCJyZVRyaW1TdGFydCIsInJlV2hpdGVzcGFjZSIsImNoYXJBdCIsImZvcm1TZW5kIiwiZm9ybU1lc3NhZ2UiLCJmb3JtVHlwZVNlbGVjdCIsIk9wdGlvbiIsInNldHVwU2VsZWN0RHJvcGRvd24iLCJzZWxlY3RlZE5vdGlmaWNhdGlvbiIsInNldHVwRGVmYXVsdE1lc3NhZ2UiLCJwYXlsb2FkIiwic2V0dXBTdWJtaXRCdXR0b24iLCJLRVlfTUFQUElOR1MiLCJkYXRhc2V0Iiwicnhqc1RhcmdldCIsImFjdGl2ZUVsZW1lbnQiLCJTdG9yYWdlSHViSW5zdGFuY2UiLCJnZXREYXRhIiwic2V0RGVidWciLCJzdG9yZSIsInNob3VsZERlYnVnIiwiZGVidWciLCJhcHBseUZuIiwiZGF0YVJldHJpZXZlZCIsImFjYyIsIkF1ZGlvSHViSW5zdGFuY2UiLCJwbGF5U291bmQiLCJmaWxlcGF0aCIsInZvbHVtZSIsInNvdW5kIiwiQXVkaW8iLCJwbGF5IiwiSG9tZVBhZ2UiLCJDb250YWN0c1BhZ2UiLCJUZWFtUGFnZSIsIkZvdXJPaEZvdXIiLCJsb2dvIiwicGhvbmVOdW1iZXIiLCJ1cGRhdGVUaW1lRXZlcnlTZWNvbmQiLCJkYXRlVGltZSIsImdldERhdGVUaW1lIiwiZGF0ZSIsInRvTG9jYWxlU3RyaW5nIiwidXBkYXRlVGltZURpc3BsYXkiLCJnZXRUaW1lIiwiY2xvY2tUaW1lIiwidGV4dENvbnRlbnQiLCJhbGlhczEiLCJhbGlhczIiLCJhbGlhczQiLCJjb250YWN0cyIsInN0YWNrMSIsIkZvdXJPaEZvdXJQYWdlIl0sIm1hcHBpbmdzIjoiYUFDRSxJQUFJQSxFQUFtQixHQUd2QixTQUFTQyxFQUFvQkMsR0FHNUIsR0FBR0YsRUFBaUJFLEdBQ25CLE9BQU9GLEVBQWlCRSxHQUFVQyxRQUduQyxJQUFJQyxFQUFTSixFQUFpQkUsR0FBWSxDQUN6Q0csRUFBR0gsRUFDSEksR0FBRyxFQUNISCxRQUFTLElBVVYsT0FOQUksRUFBUUwsR0FBVU0sS0FBS0osRUFBT0QsUUFBU0MsRUFBUUEsRUFBT0QsUUFBU0YsR0FHL0RHLEVBQU9FLEdBQUksRUFHSkYsRUFBT0QsUUFLZkYsRUFBb0JRLEVBQUlGLEVBR3hCTixFQUFvQlMsRUFBSVYsRUFHeEJDLEVBQW9CVSxFQUFJLFNBQVNSLEVBQVNTLEVBQU1DLEdBQzNDWixFQUFvQmEsRUFBRVgsRUFBU1MsSUFDbENHLE9BQU9DLGVBQWViLEVBQVNTLEVBQU0sQ0FBRUssWUFBWSxFQUFNQyxJQUFLTCxLQUtoRVosRUFBb0JrQixFQUFJLFNBQVNoQixHQUNYLG9CQUFYaUIsUUFBMEJBLE9BQU9DLGFBQzFDTixPQUFPQyxlQUFlYixFQUFTaUIsT0FBT0MsWUFBYSxDQUFFQyxNQUFPLFdBRTdEUCxPQUFPQyxlQUFlYixFQUFTLGFBQWMsQ0FBRW1CLE9BQU8sS0FRdkRyQixFQUFvQnNCLEVBQUksU0FBU0QsRUFBT0UsR0FFdkMsR0FEVSxFQUFQQSxJQUFVRixFQUFRckIsRUFBb0JxQixJQUMvQixFQUFQRSxFQUFVLE9BQU9GLEVBQ3BCLEdBQVcsRUFBUEUsR0FBOEIsaUJBQVZGLEdBQXNCQSxHQUFTQSxFQUFNRyxXQUFZLE9BQU9ILEVBQ2hGLElBQUlJLEVBQUtYLE9BQU9ZLE9BQU8sTUFHdkIsR0FGQTFCLEVBQW9Ca0IsRUFBRU8sR0FDdEJYLE9BQU9DLGVBQWVVLEVBQUksVUFBVyxDQUFFVCxZQUFZLEVBQU1LLE1BQU9BLElBQ3RELEVBQVBFLEdBQTRCLGlCQUFURixFQUFtQixJQUFJLElBQUlNLEtBQU9OLEVBQU9yQixFQUFvQlUsRUFBRWUsRUFBSUUsRUFBSyxTQUFTQSxHQUFPLE9BQU9OLEVBQU1NLElBQVFDLEtBQUssS0FBTUQsSUFDOUksT0FBT0YsR0FJUnpCLEVBQW9CNkIsRUFBSSxTQUFTMUIsR0FDaEMsSUFBSVMsRUFBU1QsR0FBVUEsRUFBT3FCLFdBQzdCLFdBQXdCLE9BQU9yQixFQUFnQixTQUMvQyxXQUE4QixPQUFPQSxHQUV0QyxPQURBSCxFQUFvQlUsRUFBRUUsRUFBUSxJQUFLQSxHQUM1QkEsR0FJUlosRUFBb0JhLEVBQUksU0FBU2lCLEVBQVFDLEdBQVksT0FBT2pCLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS3VCLEVBQVFDLElBR3pHL0IsRUFBb0JrQyxFQUFJLEdBSWpCbEMsRUFBb0JBLEVBQW9CbUMsRUFBSSxLLCtCQ2xGckQsa1RBZ0JBLElBQUlDLEVBQWdCLFNBQVMxQixFQUFHMkIsR0FJNUIsT0FIQUQsRUFBZ0J0QixPQUFPd0IsZ0JBQ2xCLENBQUVDLFVBQVcsY0FBZ0JDLE9BQVMsU0FBVTlCLEVBQUcyQixHQUFLM0IsRUFBRTZCLFVBQVlGLElBQ3ZFLFNBQVUzQixFQUFHMkIsR0FBSyxJQUFLLElBQUlILEtBQUtHLEVBQU92QixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUs4QixFQUFHSCxLQUFJeEIsRUFBRXdCLEdBQUtHLEVBQUVILE1BQzNFeEIsRUFBRzJCLElBR3JCLFNBQVNJLEVBQVUvQixFQUFHMkIsR0FDekIsR0FBaUIsbUJBQU5BLEdBQTBCLE9BQU5BLEVBQzNCLE1BQU0sSUFBSUssVUFBVSx1QkFBeUJDLE9BQU9OLEdBQUssaUNBRTdELFNBQVNPLElBQU9DLEtBQUtDLFlBQWNwQyxFQURuQzBCLEVBQWMxQixFQUFHMkIsR0FFakIzQixFQUFFc0IsVUFBa0IsT0FBTkssRUFBYXZCLE9BQU9ZLE9BQU9XLElBQU1PLEVBQUdaLFVBQVlLLEVBQUVMLFVBQVcsSUFBSVksR0FzRjVFLFNBQVNHLEVBQVVDLEVBQVNDLEVBQVlDLEVBQUdDLEdBRTlDLE9BQU8sSUFBS0QsSUFBTUEsRUFBSUUsV0FBVSxTQUFVQyxFQUFTQyxHQUMvQyxTQUFTQyxFQUFVbEMsR0FBUyxJQUFNbUMsRUFBS0wsRUFBVU0sS0FBS3BDLElBQVcsTUFBT3FDLEdBQUtKLEVBQU9JLElBQ3BGLFNBQVNDLEVBQVN0QyxHQUFTLElBQU1tQyxFQUFLTCxFQUFpQixNQUFFOUIsSUFBVyxNQUFPcUMsR0FBS0osRUFBT0ksSUFDdkYsU0FBU0YsRUFBS0ksR0FKbEIsSUFBZXZDLEVBSWF1QyxFQUFPQyxLQUFPUixFQUFRTyxFQUFPdkMsUUFKMUNBLEVBSXlEdUMsRUFBT3ZDLE1BSmhEQSxhQUFpQjZCLEVBQUk3QixFQUFRLElBQUk2QixHQUFFLFNBQVVHLEdBQVdBLEVBQVFoQyxPQUlUeUMsS0FBS1AsRUFBV0ksR0FDbEdILEdBQU1MLEVBQVlBLEVBQVVZLE1BQU1mLEVBQVNDLEdBQWMsS0FBS1EsV0FJL0QsU0FBU08sRUFBWWhCLEVBQVNpQixHQUNqQyxJQUFzR0MsRUFBR0MsRUFBRzdDLEVBQUc4QyxFQUEzR0MsRUFBSSxDQUFFQyxNQUFPLEVBQUdDLEtBQU0sV0FBYSxHQUFXLEVBQVBqRCxFQUFFLEdBQVEsTUFBTUEsRUFBRSxHQUFJLE9BQU9BLEVBQUUsSUFBT2tELEtBQU0sR0FBSUMsSUFBSyxJQUNoRyxPQUFPTCxFQUFJLENBQUVYLEtBQU1pQixFQUFLLEdBQUksTUFBU0EsRUFBSyxHQUFJLE9BQVVBLEVBQUssSUFBd0IsbUJBQVh2RCxTQUEwQmlELEVBQUVqRCxPQUFPd0QsVUFBWSxXQUFhLE9BQU85QixPQUFVdUIsRUFDdkosU0FBU00sRUFBSzdDLEdBQUssT0FBTyxTQUFVK0MsR0FBSyxPQUN6QyxTQUFjQyxHQUNWLEdBQUlYLEVBQUcsTUFBTSxJQUFJeEIsVUFBVSxtQ0FDM0IsS0FBTzBCLElBQU1BLEVBQUksRUFBR1MsRUFBRyxLQUFPUixFQUFJLElBQUtBLEdBQUcsSUFDdEMsR0FBSUgsRUFBSSxFQUFHQyxJQUFNN0MsRUFBWSxFQUFSdUQsRUFBRyxHQUFTVixFQUFVLE9BQUlVLEVBQUcsR0FBS1YsRUFBUyxTQUFPN0MsRUFBSTZDLEVBQVUsU0FBTTdDLEVBQUVmLEtBQUs0RCxHQUFJLEdBQUtBLEVBQUVWLFNBQVduQyxFQUFJQSxFQUFFZixLQUFLNEQsRUFBR1UsRUFBRyxLQUFLaEIsS0FBTSxPQUFPdkMsRUFFM0osT0FESTZDLEVBQUksRUFBRzdDLElBQUd1RCxFQUFLLENBQVMsRUFBUkEsRUFBRyxHQUFRdkQsRUFBRUQsUUFDekJ3RCxFQUFHLElBQ1AsS0FBSyxFQUFHLEtBQUssRUFBR3ZELEVBQUl1RCxFQUFJLE1BQ3hCLEtBQUssRUFBYyxPQUFYUixFQUFFQyxRQUFnQixDQUFFakQsTUFBT3dELEVBQUcsR0FBSWhCLE1BQU0sR0FDaEQsS0FBSyxFQUFHUSxFQUFFQyxRQUFTSCxFQUFJVSxFQUFHLEdBQUlBLEVBQUssQ0FBQyxHQUFJLFNBQ3hDLEtBQUssRUFBR0EsRUFBS1IsRUFBRUksSUFBSUssTUFBT1QsRUFBRUcsS0FBS00sTUFBTyxTQUN4QyxRQUNJLEtBQU14RCxFQUFJK0MsRUFBRUcsTUFBTWxELEVBQUlBLEVBQUV5RCxPQUFTLEdBQUt6RCxFQUFFQSxFQUFFeUQsT0FBUyxLQUFrQixJQUFWRixFQUFHLElBQXNCLElBQVZBLEVBQUcsSUFBVyxDQUFFUixFQUFJLEVBQUcsU0FDakcsR0FBYyxJQUFWUSxFQUFHLE1BQWN2RCxHQUFNdUQsRUFBRyxHQUFLdkQsRUFBRSxJQUFNdUQsRUFBRyxHQUFLdkQsRUFBRSxJQUFNLENBQUUrQyxFQUFFQyxNQUFRTyxFQUFHLEdBQUksTUFDOUUsR0FBYyxJQUFWQSxFQUFHLElBQVlSLEVBQUVDLE1BQVFoRCxFQUFFLEdBQUksQ0FBRStDLEVBQUVDLE1BQVFoRCxFQUFFLEdBQUlBLEVBQUl1RCxFQUFJLE1BQzdELEdBQUl2RCxHQUFLK0MsRUFBRUMsTUFBUWhELEVBQUUsR0FBSSxDQUFFK0MsRUFBRUMsTUFBUWhELEVBQUUsR0FBSStDLEVBQUVJLElBQUlPLEtBQUtILEdBQUssTUFDdkR2RCxFQUFFLElBQUkrQyxFQUFFSSxJQUFJSyxNQUNoQlQsRUFBRUcsS0FBS00sTUFBTyxTQUV0QkQsRUFBS1osRUFBSzFELEtBQUt5QyxFQUFTcUIsR0FDMUIsTUFBT1gsR0FBS21CLEVBQUssQ0FBQyxFQUFHbkIsR0FBSVMsRUFBSSxFQUFLLFFBQVVELEVBQUk1QyxFQUFJLEVBQ3RELEdBQVksRUFBUnVELEVBQUcsR0FBUSxNQUFNQSxFQUFHLEdBQUksTUFBTyxDQUFFeEQsTUFBT3dELEVBQUcsR0FBS0EsRUFBRyxRQUFLLEVBQVFoQixNQUFNLEdBckI5QkwsQ0FBSyxDQUFDM0IsRUFBRytDLE1BeUJoQzlELE9BQU9ZLE9BZ0I3QixTQUFTdUQsRUFBU3BFLEdBQ3JCLElBQUlzQixFQUFzQixtQkFBWGhCLFFBQXlCQSxPQUFPd0QsU0FBVW5FLEVBQUkyQixHQUFLdEIsRUFBRXNCLEdBQUkvQixFQUFJLEVBQzVFLEdBQUlJLEVBQUcsT0FBT0EsRUFBRUQsS0FBS00sR0FDckIsR0FBSUEsR0FBeUIsaUJBQWJBLEVBQUVrRSxPQUFxQixNQUFPLENBQzFDdEIsS0FBTSxXQUVGLE9BREk1QyxHQUFLVCxHQUFLUyxFQUFFa0UsU0FBUWxFLE9BQUksR0FDckIsQ0FBRVEsTUFBT1IsR0FBS0EsRUFBRVQsS0FBTXlELE1BQU9oRCxLQUc1QyxNQUFNLElBQUk2QixVQUFVUCxFQUFJLDBCQUE0QixtQ0FHakQsU0FBUytDLEVBQU9yRSxFQUFHZ0IsR0FDdEIsSUFBSXJCLEVBQXNCLG1CQUFYVyxRQUF5Qk4sRUFBRU0sT0FBT3dELFVBQ2pELElBQUtuRSxFQUFHLE9BQU9LLEVBQ2YsSUFBbUJLLEVBQVl3QyxFQUEzQnRELEVBQUlJLEVBQUVELEtBQUtNLEdBQU9zRSxFQUFLLEdBQzNCLElBQ0ksV0FBYyxJQUFOdEQsR0FBZ0JBLEtBQU0sTUFBUVgsRUFBSWQsRUFBRXFELFFBQVFJLE1BQU1zQixFQUFHSCxLQUFLOUQsRUFBRUcsT0FFeEUsTUFBTytELEdBQVMxQixFQUFJLENBQUUwQixNQUFPQSxHQUM3QixRQUNJLElBQ1FsRSxJQUFNQSxFQUFFMkMsT0FBU3JELEVBQUlKLEVBQVUsU0FBSUksRUFBRUQsS0FBS0gsR0FFbEQsUUFBVSxHQUFJc0QsRUFBRyxNQUFNQSxFQUFFMEIsT0FFN0IsT0FBT0QsRUFtQkosU0FBU0UsRUFBY0MsRUFBSUMsRUFBTUMsR0FDcEMsR0FBSUEsR0FBNkIsSUFBckJDLFVBQVVWLE9BQWMsSUFBSyxJQUE0QkksRUFBeEIvRSxFQUFJLEVBQUdDLEVBQUlrRixFQUFLUixPQUFZM0UsRUFBSUMsRUFBR0QsS0FDeEUrRSxHQUFRL0UsS0FBS21GLElBQ1JKLElBQUlBLEVBQUszQyxNQUFNUixVQUFVMEQsTUFBTW5GLEtBQUtnRixFQUFNLEVBQUduRixJQUNsRCtFLEVBQUcvRSxHQUFLbUYsRUFBS25GLElBR3JCLE9BQU9rRixFQUFHSyxPQUFPUixHQUFNM0MsTUFBTVIsVUFBVTBELE1BQU1uRixLQUFLZ0YsSUFHL0MsU0FBU0ssRUFBUWhCLEdBQ3BCLE9BQU8vQixnQkFBZ0IrQyxHQUFXL0MsS0FBSytCLEVBQUlBLEVBQUcvQixNQUFRLElBQUkrQyxFQUFRaEIsR0FHL0QsU0FBU2lCLEVBQWlCN0MsRUFBU0MsRUFBWUUsR0FDbEQsSUFBS2hDLE9BQU8yRSxjQUFlLE1BQU0sSUFBSXBELFVBQVUsd0NBQy9DLElBQW9EdEMsRUFBaERnRSxFQUFJakIsRUFBVVksTUFBTWYsRUFBU0MsR0FBYyxJQUFROEMsRUFBSSxHQUMzRCxPQUFPM0YsRUFBSSxHQUFJc0UsRUFBSyxRQUFTQSxFQUFLLFNBQVVBLEVBQUssVUFBV3RFLEVBQUVlLE9BQU8yRSxlQUFpQixXQUFjLE9BQU9qRCxNQUFTekMsRUFDcEgsU0FBU3NFLEVBQUs3QyxHQUFTdUMsRUFBRXZDLEtBQUl6QixFQUFFeUIsR0FBSyxTQUFVK0MsR0FBSyxPQUFPLElBQUl4QixTQUFRLFNBQVU0QyxFQUFHM0QsR0FBSzBELEVBQUVmLEtBQUssQ0FBQ25ELEVBQUcrQyxFQUFHb0IsRUFBRzNELElBQU0sR0FBSzRELEVBQU9wRSxFQUFHK0MsUUFDOUgsU0FBU3FCLEVBQU9wRSxFQUFHK0MsR0FBSyxLQUNWMUQsRUFEcUJrRCxFQUFFdkMsR0FBRytDLElBQ25CdkQsaUJBQWlCdUUsRUFBVXhDLFFBQVFDLFFBQVFuQyxFQUFFRyxNQUFNdUQsR0FBR2QsS0FBS29DLEVBQVM1QyxHQUFVNkMsRUFBT0osRUFBRSxHQUFHLEdBQUk3RSxHQURwRSxNQUFPd0MsR0FBS3lDLEVBQU9KLEVBQUUsR0FBRyxHQUFJckMsR0FDM0UsSUFBY3hDLEVBQ2QsU0FBU2dGLEVBQVE3RSxHQUFTNEUsRUFBTyxPQUFRNUUsR0FDekMsU0FBU2lDLEVBQU9qQyxHQUFTNEUsRUFBTyxRQUFTNUUsR0FDekMsU0FBUzhFLEVBQU9qQyxFQUFHVSxHQUFTVixFQUFFVSxHQUFJbUIsRUFBRUssUUFBU0wsRUFBRWhCLFFBQVFrQixFQUFPRixFQUFFLEdBQUcsR0FBSUEsRUFBRSxHQUFHLEtBU3pFLFNBQVNNLEVBQWN4RixHQUMxQixJQUFLTSxPQUFPMkUsY0FBZSxNQUFNLElBQUlwRCxVQUFVLHdDQUMvQyxJQUFpQ3RDLEVBQTdCSSxFQUFJSyxFQUFFTSxPQUFPMkUsZUFDakIsT0FBT3RGLEVBQUlBLEVBQUVELEtBQUtNLElBQU1BLEVBQXFDb0UsRUFBU3BFLEdBQTJCVCxFQUFJLEdBQUlzRSxFQUFLLFFBQVNBLEVBQUssU0FBVUEsRUFBSyxVQUFXdEUsRUFBRWUsT0FBTzJFLGVBQWlCLFdBQWMsT0FBT2pELE1BQVN6QyxHQUM5TSxTQUFTc0UsRUFBSzdDLEdBQUt6QixFQUFFeUIsR0FBS2hCLEVBQUVnQixJQUFNLFNBQVUrQyxHQUFLLE9BQU8sSUFBSXhCLFNBQVEsU0FBVUMsRUFBU0MsSUFDdkYsU0FBZ0JELEVBQVNDLEVBQVE1QyxFQUFHa0UsR0FBS3hCLFFBQVFDLFFBQVF1QixHQUFHZCxNQUFLLFNBQVNjLEdBQUt2QixFQUFRLENBQUVoQyxNQUFPdUQsRUFBR2YsS0FBTW5ELE1BQVM0QyxJQURKNkMsQ0FBTzlDLEVBQVNDLEdBQTdCc0IsRUFBSS9ELEVBQUVnQixHQUFHK0MsSUFBOEJmLEtBQU1lLEVBQUV2RCxZQVMzSFAsT0FBT1ksUSw2QkNsUWhDLCtFQUVPLFNBQVM0RSxFQUF5QkMsRUFBYUMsRUFBUUMsRUFBWUMsRUFBU0MsR0FDL0UsT0FBTyxJQUFJQyxFQUFtQkwsRUFBYUMsRUFBUUMsRUFBWUMsRUFBU0MsR0FFNUUsSUFBSUMsRUFBc0IsU0FBVUMsR0FFaEMsU0FBU0QsRUFBbUJMLEVBQWFDLEVBQVFDLEVBQVlDLEVBQVNDLEVBQVlHLEdBQzlFLElBQUlDLEVBQVFGLEVBQU90RyxLQUFLc0MsS0FBTTBELElBQWdCMUQsS0F1QzlDLE9BdENBa0UsRUFBTUosV0FBYUEsRUFDbkJJLEVBQU1ELGtCQUFvQkEsRUFDMUJDLEVBQU1DLE1BQVFSLEVBQ1IsU0FBVW5GLEdBQ1IsSUFDSW1GLEVBQU9uRixHQUVYLE1BQU80RixHQUNIVixFQUFZbkIsTUFBTTZCLEtBR3hCSixFQUFPN0UsVUFBVWdGLE1BQ3ZCRCxFQUFNRyxPQUFTUixFQUNULFNBQVVPLEdBQ1IsSUFDSVAsRUFBUU8sR0FFWixNQUFPQSxHQUNIVixFQUFZbkIsTUFBTTZCLEdBRXRCLFFBQ0lwRSxLQUFLc0UsZ0JBR1hOLEVBQU83RSxVQUFVa0YsT0FDdkJILEVBQU1LLFVBQVlYLEVBQ1osV0FDRSxJQUNJQSxJQUVKLE1BQU9RLEdBQ0hWLEVBQVluQixNQUFNNkIsR0FFdEIsUUFDSXBFLEtBQUtzRSxnQkFHWE4sRUFBTzdFLFVBQVVvRixVQUNoQkwsRUFVWCxPQW5EQSxZQUFVSCxFQUFvQkMsR0EyQzlCRCxFQUFtQjVFLFVBQVVtRixZQUFjLFdBQ3ZDLElBQUlFLEVBQ0osSUFBS3hFLEtBQUtpRSxtQkFBcUJqRSxLQUFLaUUsb0JBQXFCLENBQ3JELElBQUlRLEVBQVd6RSxLQUFLMEUsT0FDcEJWLEVBQU83RSxVQUFVbUYsWUFBWTVHLEtBQUtzQyxPQUNqQ3lFLElBQXdDLFFBQTFCRCxFQUFLeEUsS0FBSzhELGtCQUErQixJQUFQVSxHQUF5QkEsRUFBRzlHLEtBQUtzQyxTQUduRitELEVBcERjLENBTHpCLE1BMERFLEksNkJDMURGLCtFQUNPLFNBQVNZLEVBQVFDLEdBQ3BCLE9BQU8sWUFBV0EsYUFBdUMsRUFBU0EsRUFBT0MsTUFFdEUsU0FBU0MsRUFBUUMsR0FDcEIsT0FBTyxTQUFVSCxHQUNiLEdBQUlELEVBQVFDLEdBQ1IsT0FBT0EsRUFBT0MsTUFBSyxTQUFVRyxHQUN6QixJQUNJLE9BQU9ELEVBQUtDLEVBQWNoRixNQUU5QixNQUFPb0UsR0FDSHBFLEtBQUt1QyxNQUFNNkIsT0FJdkIsTUFBTSxJQUFJdkUsVUFBVSw2Qyw2QkNoQjVCLHlJQVlPLFNBQVNvRixFQUFVQyxHQUN0QixHQUFJQSxhQUFpQixJQUNqQixPQUFPQSxFQUVYLEdBQWEsTUFBVEEsRUFBZSxDQUNmLEdBQUksWUFBb0JBLEdBQ3BCLE9Bb0IwQkMsRUFwQkdELEVBcUI5QixJQUFJLEtBQVcsU0FBVUUsR0FDNUIsSUFBSUMsRUFBTUYsRUFBSSxPQUNkLEdBQUksWUFBV0UsRUFBSUMsV0FDZixPQUFPRCxFQUFJQyxVQUFVRixHQUV6QixNQUFNLElBQUl2RixVQUFVLHFFQXhCcEIsR0FBSSxZQUFZcUYsR0FDWixPQTBCa0JLLEVBMUJHTCxFQTJCdEIsSUFBSSxLQUFXLFNBQVVFLEdBQzVCLElBQUssSUFBSTdILEVBQUksRUFBR0EsRUFBSWdJLEVBQU1yRCxTQUFXa0QsRUFBV1YsT0FBUW5ILElBQ3BENkgsRUFBV3hFLEtBQUsyRSxFQUFNaEksSUFFMUI2SCxFQUFXSSxjQTdCWCxHQUFJLFlBQVVOLEdBQ1YsT0ErQmdCTyxFQS9CR1AsRUFnQ3BCLElBQUksS0FBVyxTQUFVRSxHQUM1QkssRUFDS3hFLE1BQUssU0FBVXpDLEdBQ1g0RyxFQUFXVixTQUNaVSxFQUFXeEUsS0FBS3BDLEdBQ2hCNEcsRUFBV0ksZUFFaEIsU0FBVXBCLEdBQU8sT0FBT2dCLEVBQVc3QyxNQUFNNkIsTUFDdkNuRCxLQUFLLEtBQU0sUUF0Q2hCLEdBQUksWUFBZ0JpRSxHQUNoQixPQUFPUSxFQUFrQlIsR0FFN0IsR0FBSSxZQUFXQSxHQUNYLE9BcUNpQlMsRUFyQ0dULEVBc0NyQixJQUFJLEtBQVcsU0FBVUUsR0FDNUIsSUFBSVEsRUFBS3BCLEVBQ1QsSUFDSSxJQUFLLElBQUlxQixFQUFhLFlBQVNGLEdBQVdHLEVBQWVELEVBQVdqRixRQUFTa0YsRUFBYTlFLEtBQU04RSxFQUFlRCxFQUFXakYsT0FBUSxDQUM5SCxJQUFJcEMsRUFBUXNILEVBQWF0SCxNQUV6QixHQURBNEcsRUFBV3hFLEtBQUtwQyxHQUNaNEcsRUFBV1YsT0FDWCxRQUlaLE1BQU9xQixHQUFTSCxFQUFNLENBQUVyRCxNQUFPd0QsR0FDL0IsUUFDSSxJQUNRRCxJQUFpQkEsRUFBYTlFLE9BQVN3RCxFQUFLcUIsRUFBV0csU0FBU3hCLEVBQUc5RyxLQUFLbUksR0FFaEYsUUFBVSxHQUFJRCxFQUFLLE1BQU1BLEVBQUlyRCxPQUVqQzZDLEVBQVdJLGNBdERYLEdBQUksWUFBcUJOLEdBQ3JCLE9BNkQyQmUsRUE3REdmLEVBOEQvQlEsRUFBa0IsWUFBbUNPLElBRHpELElBQWdDQSxFQTNCVk4sRUFaREYsRUFSRUYsRUFUUUosRUFGbEMsTUFBTSxZQUFpQ0QsR0FxRHBDLFNBQVNRLEVBQWtCUSxHQUM5QixPQUFPLElBQUksS0FBVyxTQUFVZCxJQU9wQyxTQUFpQmMsRUFBZWQsR0FDNUIsSUFBSWUsRUFBaUJDLEVBQ2pCQyxFQUFLN0IsRUFDVCxPQUFPLFlBQVV4RSxVQUFNLE9BQVEsR0FBUSxXQUNuQyxJQUFJeEIsRUFBTzhILEVBQ1gsT0FBTyxZQUFZdEcsTUFBTSxTQUFVdUcsR0FDL0IsT0FBUUEsRUFBRzlFLE9BQ1AsS0FBSyxFQUNEOEUsRUFBRzVFLEtBQUtRLEtBQUssQ0FBQyxFQUFHLEVBQUcsRUFBRyxLQUN2QmdFLEVBQWtCLFlBQWNELEdBQ2hDSyxFQUFHOUUsTUFBUSxFQUNmLEtBQUssRUFBRyxNQUFPLENBQUMsRUFBRzBFLEVBQWdCdkYsUUFDbkMsS0FBSyxFQUNELElBQU13RixFQUFvQkcsRUFBRzdFLFFBQTJCVixLQUFPLE1BQU8sQ0FBQyxFQUFHLEdBRzFFLEdBRkF4QyxFQUFRNEgsRUFBa0I1SCxNQUMxQjRHLEVBQVd4RSxLQUFLcEMsR0FDWjRHLEVBQVdWLE9BQ1gsTUFBTyxDQUFDLEdBRVo2QixFQUFHOUUsTUFBUSxFQUNmLEtBQUssRUFBRyxNQUFPLENBQUMsRUFBRyxHQUNuQixLQUFLLEVBQUcsTUFBTyxDQUFDLEVBQUcsSUFDbkIsS0FBSyxFQUdELE9BRkE2RSxFQUFRQyxFQUFHN0UsT0FDWDJFLEVBQU0sQ0FBRTlELE1BQU8rRCxHQUNSLENBQUMsRUFBRyxJQUNmLEtBQUssRUFFRCxPQURBQyxFQUFHNUUsS0FBS1EsS0FBSyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEtBQ2hCaUUsSUFBc0JBLEVBQWtCcEYsT0FBU3dELEVBQUsyQixFQUFnQkgsUUFDckUsQ0FBQyxFQUFHeEIsRUFBRzlHLEtBQUt5SSxJQUQwRSxDQUFDLEVBQUcsR0FFckcsS0FBSyxFQUNESSxFQUFHN0UsT0FDSDZFLEVBQUc5RSxNQUFRLEVBQ2YsS0FBSyxFQUFHLE1BQU8sQ0FBQyxFQUFHLElBQ25CLEtBQUssRUFDRCxHQUFJNEUsRUFBSyxNQUFNQSxFQUFJOUQsTUFDbkIsTUFBTyxDQUFDLEdBQ1osS0FBSyxHQUFJLE1BQU8sQ0FBQyxHQUNqQixLQUFLLEdBRUQsT0FEQTZDLEVBQVdJLFdBQ0osQ0FBQyxXQTlDcEJnQixDQUFRTixFQUFlZCxHQUFZcUIsT0FBTSxTQUFVckMsR0FBTyxPQUFPZ0IsRUFBVzdDLE1BQU02QixXLDZCQzNGbkYsU0FBU3NDLEVBQVdsSSxHQUN2QixNQUF3QixtQkFBVkEsRUFEbEIsbUMsNkJDQUEsNkZBT0ltSSxFQUFjLFdBQ2QsU0FBU0EsRUFBV3JCLEdBQ1pBLElBQ0F0RixLQUFLNEcsV0FBYXRCLEdBOEUxQixPQTNFQXFCLEVBQVd4SCxVQUFVMEYsS0FBTyxTQUFVZ0MsR0FDbEMsSUFBSUMsRUFBYSxJQUFJSCxFQUdyQixPQUZBRyxFQUFXbEMsT0FBUzVFLEtBQ3BCOEcsRUFBV0QsU0FBV0EsRUFDZkMsR0FFWEgsRUFBV3hILFVBQVVtRyxVQUFZLFNBQVV5QixFQUFnQnhFLEVBQU9pRCxHQUM5RCxJQThFY2hILEVBOUVWMEYsRUFBUWxFLEtBQ1JvRixHQTZFVTVHLEVBN0VnQnVJLElBOEVqQnZJLGFBQWlCLEtBSnRDLFNBQW9CQSxHQUNoQixPQUFPQSxHQUFTLFlBQVdBLEVBQU1vQyxPQUFTLFlBQVdwQyxFQUFNK0QsUUFBVSxZQUFXL0QsRUFBTWdILFVBR3BDd0IsQ0FBV3hJLElBQVUsWUFBZUEsR0E5RWxDdUksRUFBaUIsSUFBSSxJQUFlQSxFQUFnQnhFLEVBQU9pRCxHQVkzRyxPQVhBLGFBQWEsV0FDVCxJQUFJaEIsRUFBS04sRUFBTzJDLEVBQVdyQyxFQUFHcUMsU0FBVWpDLEVBQVNKLEVBQUdJLE9BQ3BEUSxFQUFXNkIsSUFBSUosRUFFUEEsRUFBU25KLEtBQUswSCxFQUFZUixHQUM1QkEsRUFFTVYsRUFBTTBDLFdBQVd4QixHQUVqQmxCLEVBQU1nRCxjQUFjOUIsT0FFN0JBLEdBRVh1QixFQUFXeEgsVUFBVStILGNBQWdCLFNBQVVDLEdBQzNDLElBQ0ksT0FBT25ILEtBQUs0RyxXQUFXTyxHQUUzQixNQUFPL0MsR0FDSCtDLEVBQUs1RSxNQUFNNkIsS0FHbkJ1QyxFQUFXeEgsVUFBVWlJLFFBQVUsU0FBVXhHLEVBQU15RyxHQUMzQyxJQUFJbkQsRUFBUWxFLEtBRVosT0FBTyxJQURQcUgsRUFBY0MsRUFBZUQsS0FDTixTQUFVN0csRUFBU0MsR0FDdEMsSUFBSTJFLEVBQWEsSUFBSSxJQUFlLENBQ2hDeEUsS0FBTSxTQUFVcEMsR0FDWixJQUNJb0MsRUFBS3BDLEdBRVQsTUFBTzRGLEdBQ0gzRCxFQUFPMkQsR0FDUGdCLEVBQVdkLGdCQUduQi9CLE1BQU85QixFQUNQK0UsU0FBVWhGLElBRWQwRCxFQUFNb0IsVUFBVUYsT0FHeEJ1QixFQUFXeEgsVUFBVXlILFdBQWEsU0FBVXhCLEdBQ3hDLElBQUlaLEVBQ0osT0FBOEIsUUFBdEJBLEVBQUt4RSxLQUFLNEUsY0FBMkIsSUFBUEosT0FBZ0IsRUFBU0EsRUFBR2MsVUFBVUYsSUFFaEZ1QixFQUFXeEgsVUFBVSxLQUFxQixXQUN0QyxPQUFPYSxNQUVYMkcsRUFBV3hILFVBQVVvSSxLQUFPLFdBRXhCLElBREEsSUFBSUMsRUFBYSxHQUNSQyxFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENELEVBQVdDLEdBQU03RSxVQUFVNkUsR0FFL0IsT0FBTyxZQUFjRCxFQUFkLENBQTBCeEgsT0FFckMyRyxFQUFXeEgsVUFBVXVJLFVBQVksU0FBVUwsR0FDdkMsSUFBSW5ELEVBQVFsRSxLQUVaLE9BQU8sSUFEUHFILEVBQWNDLEVBQWVELEtBQ04sU0FBVTdHLEVBQVNDLEdBQ3RDLElBQUlqQyxFQUNKMEYsRUFBTW9CLFdBQVUsU0FBVXFDLEdBQUssT0FBUW5KLEVBQVFtSixLQUFPLFNBQVV2RCxHQUFPLE9BQU8zRCxFQUFPMkQsTUFBUyxXQUFjLE9BQU81RCxFQUFRaEMsVUFHbkltSSxFQUFXOUgsT0FBUyxTQUFVeUcsR0FDMUIsT0FBTyxJQUFJcUIsRUFBV3JCLElBRW5CcUIsRUFqRk0sR0FvRmpCLFNBQVNXLEVBQWVELEdBQ3BCLElBQUk3QyxFQUNKLE9BQWdHLFFBQXhGQSxFQUFLNkMsUUFBaURBLEVBQWMsSUFBTzlHLGVBQTRCLElBQVBpRSxFQUFnQkEsRUFBS2pFLFUsNkJDN0YxSCxTQUFTcUgsS0FBaEIsbUMsNkJDQU8sU0FBU0MsRUFBU0YsR0FDckIsT0FBT0EsRUFEWCxtQyw2QkNBQSxxRkFNSUcsRUFBVyxTQUFVOUQsR0FFckIsU0FBUzhELElBQ0wsSUFBSTVELEVBQVFGLEVBQU90RyxLQUFLc0MsT0FBU0EsS0FPakMsT0FOQWtFLEVBQU1RLFFBQVMsRUFDZlIsRUFBTTZELGlCQUFtQixLQUN6QjdELEVBQU04RCxVQUFZLEdBQ2xCOUQsRUFBTStELFdBQVksRUFDbEIvRCxFQUFNZ0UsVUFBVyxFQUNqQmhFLEVBQU1pRSxZQUFjLEtBQ2JqRSxFQW1IWCxPQTVIQSxZQUFVNEQsRUFBUzlELEdBV25COEQsRUFBUTNJLFVBQVUwRixLQUFPLFNBQVVnQyxHQUMvQixJQUFJdUIsRUFBVSxJQUFJQyxFQUFpQnJJLEtBQU1BLE1BRXpDLE9BREFvSSxFQUFRdkIsU0FBV0EsRUFDWnVCLEdBRVhOLEVBQVEzSSxVQUFVbUosZUFBaUIsV0FDL0IsR0FBSXRJLEtBQUswRSxPQUNMLE1BQU0sSUFBSSxLQUdsQm9ELEVBQVEzSSxVQUFVeUIsS0FBTyxTQUFVcEMsR0FDL0IsSUFBSTBGLEVBQVFsRSxLQUNaLGFBQWEsV0FDVCxJQUFJNEYsRUFBS3BCLEVBRVQsR0FEQU4sRUFBTW9FLGtCQUNEcEUsRUFBTStELFVBQVcsQ0FDYi9ELEVBQU02RCxtQkFDUDdELEVBQU02RCxpQkFBbUJwSSxNQUFNK0MsS0FBS3dCLEVBQU04RCxZQUU5QyxJQUNJLElBQUssSUFBSXpCLEVBQUssWUFBU3JDLEVBQU02RCxrQkFBbUJRLEVBQUtoQyxFQUFHM0YsUUFBUzJILEVBQUd2SCxLQUFNdUgsRUFBS2hDLEVBQUczRixPQUFRLENBQ3ZFMkgsRUFBRy9KLE1BQ1RvQyxLQUFLcEMsSUFHdEIsTUFBT3VILEdBQVNILEVBQU0sQ0FBRXJELE1BQU93RCxHQUMvQixRQUNJLElBQ1F3QyxJQUFPQSxFQUFHdkgsT0FBU3dELEVBQUsrQixFQUFHUCxTQUFTeEIsRUFBRzlHLEtBQUs2SSxHQUVwRCxRQUFVLEdBQUlYLEVBQUssTUFBTUEsRUFBSXJELGFBSzdDdUYsRUFBUTNJLFVBQVVvRCxNQUFRLFNBQVU2QixHQUNoQyxJQUFJRixFQUFRbEUsS0FDWixhQUFhLFdBRVQsR0FEQWtFLEVBQU1vRSxrQkFDRHBFLEVBQU0rRCxVQUFXLENBQ2xCL0QsRUFBTWdFLFNBQVdoRSxFQUFNK0QsV0FBWSxFQUNuQy9ELEVBQU1pRSxZQUFjL0QsRUFFcEIsSUFEQSxJQUFJNEQsRUFBWTlELEVBQU04RCxVQUNmQSxFQUFVOUYsUUFDYjhGLEVBQVV6RSxRQUFRaEIsTUFBTTZCLFFBS3hDMEQsRUFBUTNJLFVBQVVxRyxTQUFXLFdBQ3pCLElBQUl0QixFQUFRbEUsS0FDWixhQUFhLFdBRVQsR0FEQWtFLEVBQU1vRSxrQkFDRHBFLEVBQU0rRCxVQUFXLENBQ2xCL0QsRUFBTStELFdBQVksRUFFbEIsSUFEQSxJQUFJRCxFQUFZOUQsRUFBTThELFVBQ2ZBLEVBQVU5RixRQUNiOEYsRUFBVXpFLFFBQVFpQyxnQkFLbENzQyxFQUFRM0ksVUFBVW1GLFlBQWMsV0FDNUJ0RSxLQUFLaUksVUFBWWpJLEtBQUswRSxRQUFTLEVBQy9CMUUsS0FBS2dJLFVBQVloSSxLQUFLK0gsaUJBQW1CLE1BRTdDOUosT0FBT0MsZUFBZTRKLEVBQVEzSSxVQUFXLFdBQVksQ0FDakRmLElBQUssV0FDRCxJQUFJb0csRUFDSixPQUFrQyxRQUF6QkEsRUFBS3hFLEtBQUtnSSxpQkFBOEIsSUFBUHhELE9BQWdCLEVBQVNBLEVBQUd0QyxRQUFVLEdBRXBGL0QsWUFBWSxFQUNacUssY0FBYyxJQUVsQlYsRUFBUTNJLFVBQVUrSCxjQUFnQixTQUFVOUIsR0FFeEMsT0FEQXBGLEtBQUtzSSxpQkFDRXRFLEVBQU83RSxVQUFVK0gsY0FBY3hKLEtBQUtzQyxLQUFNb0YsSUFFckQwQyxFQUFRM0ksVUFBVXlILFdBQWEsU0FBVXhCLEdBR3JDLE9BRkFwRixLQUFLc0ksaUJBQ0x0SSxLQUFLeUksd0JBQXdCckQsR0FDdEJwRixLQUFLMEksZ0JBQWdCdEQsSUFFaEMwQyxFQUFRM0ksVUFBVXVKLGdCQUFrQixTQUFVdEQsR0FDMUMsSUFBSWxCLEVBQVFsRSxLQUNHa0ksRUFBTmxJLEtBQW9Ca0ksU0FBVUQsRUFBOUJqSSxLQUE2Q2lJLFVBQVdELEVBQXhEaEksS0FBdUVnSSxVQUNoRixPQUFJRSxHQUFZRCxFQUNMLEtBRVhqSSxLQUFLK0gsaUJBQW1CLEtBQ3hCQyxFQUFVN0YsS0FBS2lELEdBQ1IsSUFBSSxLQUFhLFdBQ3BCbEIsRUFBTTZELGlCQUFtQixLQUN6QixZQUFVQyxFQUFXNUMsUUFHN0IwQyxFQUFRM0ksVUFBVXNKLHdCQUEwQixTQUFVckQsR0FDbEQsSUFBZThDLEVBQU5sSSxLQUFvQmtJLFNBQVVDLEVBQTlCbkksS0FBK0NtSSxZQUFhRixFQUE1RGpJLEtBQTJFaUksVUFDaEZDLEVBQ0E5QyxFQUFXN0MsTUFBTTRGLEdBRVpGLEdBQ0w3QyxFQUFXSSxZQUduQnNDLEVBQVEzSSxVQUFVd0osYUFBZSxXQUM3QixJQUFJN0IsRUFBYSxJQUFJLElBRXJCLE9BREFBLEVBQVdsQyxPQUFTNUUsS0FDYjhHLEdBRVhnQixFQUFRakosT0FBUyxTQUFVNkUsRUFBYWtCLEdBQ3BDLE9BQU8sSUFBSXlELEVBQWlCM0UsRUFBYWtCLElBRXRDa0QsRUE3SEcsQ0E4SFosS0FFRU8sRUFBb0IsU0FBVXJFLEdBRTlCLFNBQVNxRSxFQUFpQjNFLEVBQWFrQixHQUNuQyxJQUFJVixFQUFRRixFQUFPdEcsS0FBS3NDLE9BQVNBLEtBR2pDLE9BRkFrRSxFQUFNUixZQUFjQSxFQUNwQlEsRUFBTVUsT0FBU0EsRUFDUlYsRUFrQlgsT0F2QkEsWUFBVW1FLEVBQWtCckUsR0FPNUJxRSxFQUFpQmxKLFVBQVV5QixLQUFPLFNBQVVwQyxHQUN4QyxJQUFJZ0csRUFBSStCLEVBQ3dFLFFBQS9FQSxFQUFpQyxRQUEzQi9CLEVBQUt4RSxLQUFLMEQsbUJBQWdDLElBQVBjLE9BQWdCLEVBQVNBLEVBQUc1RCxZQUF5QixJQUFQMkYsR0FBeUJBLEVBQUc3SSxLQUFLOEcsRUFBSWhHLElBRWpJNkosRUFBaUJsSixVQUFVb0QsTUFBUSxTQUFVNkIsR0FDekMsSUFBSUksRUFBSStCLEVBQ3lFLFFBQWhGQSxFQUFpQyxRQUEzQi9CLEVBQUt4RSxLQUFLMEQsbUJBQWdDLElBQVBjLE9BQWdCLEVBQVNBLEVBQUdqQyxhQUEwQixJQUFQZ0UsR0FBeUJBLEVBQUc3SSxLQUFLOEcsRUFBSUosSUFFbElpRSxFQUFpQmxKLFVBQVVxRyxTQUFXLFdBQ2xDLElBQUloQixFQUFJK0IsRUFDNEUsUUFBbkZBLEVBQWlDLFFBQTNCL0IsRUFBS3hFLEtBQUswRCxtQkFBZ0MsSUFBUGMsT0FBZ0IsRUFBU0EsRUFBR2dCLGdCQUE2QixJQUFQZSxHQUF5QkEsRUFBRzdJLEtBQUs4RyxJQUVqSTZELEVBQWlCbEosVUFBVXlILFdBQWEsU0FBVXhCLEdBQzlDLElBQUlaLEVBQUkrQixFQUNSLE9BQW1HLFFBQTNGQSxFQUE0QixRQUF0Qi9CLEVBQUt4RSxLQUFLNEUsY0FBMkIsSUFBUEosT0FBZ0IsRUFBU0EsRUFBR2MsVUFBVUYsVUFBZ0MsSUFBUG1CLEVBQWdCQSxFQUFLLEtBRTdIOEIsRUF4QlksQ0F5QnJCUCxJLDZCQy9KRix5SEFFQSxTQUFTYyxFQUFLQyxHQUNWLE9BQU9BLEVBQUlBLEVBQUkzRyxPQUFTLEdBRXJCLFNBQVM0RyxFQUFrQkMsR0FDOUIsT0FBTyxZQUFXSCxFQUFLRyxJQUFTQSxFQUFLOUcsV0FBUStHLEVBRTFDLFNBQVNDLEVBQWFGLEdBQ3pCLE9BQU8sWUFBWUgsRUFBS0csSUFBU0EsRUFBSzlHLFdBQVErRyxFQUUzQyxTQUFTRSxFQUFVSCxFQUFNSSxHQUM1QixNQUE2QixpQkFBZlAsRUFBS0csR0FBcUJBLEVBQUs5RyxNQUFRa0gsSSw2QkNWekQsU0FBU0MsRUFBZVAsRUFBS3RMLEdBQUssT0FVbEMsU0FBeUJzTCxHQUFPLEdBQUlsSixNQUFNMEosUUFBUVIsR0FBTSxPQUFPQSxFQVZ0QlMsQ0FBZ0JULElBUXpELFNBQStCQSxFQUFLdEwsR0FBSyxJQUFJa0ssRUFBS29CLElBQTBCLG9CQUFYdkssUUFBMEJ1SyxFQUFJdkssT0FBT3dELFdBQWErRyxFQUFJLGVBQWdCLEdBQVUsTUFBTnBCLEVBQVksT0FBUSxJQUFrRDhCLEVBQUlDLEVBQWxEQyxFQUFPLEdBQVFDLEdBQUssRUFBVUMsR0FBSyxFQUFtQixJQUFNLElBQUtsQyxFQUFLQSxFQUFHL0osS0FBS21MLEtBQVFhLEdBQU1ILEVBQUs5QixFQUFHN0csUUFBUUksUUFBb0J5SSxFQUFLdEgsS0FBS29ILEVBQUcvSyxRQUFZakIsR0FBS2tNLEVBQUt2SCxTQUFXM0UsR0FBM0RtTSxHQUFLLElBQW9FLE1BQU90RixHQUFPdUYsR0FBSyxFQUFNSCxFQUFLcEYsRUFBTyxRQUFVLElBQVdzRixHQUFzQixNQUFoQmpDLEVBQVcsUUFBV0EsRUFBVyxTQUFPLFFBQVUsR0FBSWtDLEVBQUksTUFBTUgsR0FBUSxPQUFPQyxFQVI3YUcsQ0FBc0JmLEVBQUt0TCxJQUk1RixTQUFxQ1MsRUFBRzZMLEdBQVUsSUFBSzdMLEVBQUcsT0FBUSxHQUFpQixpQkFBTkEsRUFBZ0IsT0FBTzhMLEVBQWtCOUwsRUFBRzZMLEdBQVMsSUFBSTdLLEVBQUlmLE9BQU9rQixVQUFVNEssU0FBU3JNLEtBQUtNLEdBQUc2RSxNQUFNLEdBQUksR0FBYyxXQUFON0QsR0FBa0JoQixFQUFFaUMsY0FBYWpCLEVBQUloQixFQUFFaUMsWUFBWW5DLE1BQU0sR0FBVSxRQUFOa0IsR0FBcUIsUUFBTkEsRUFBYSxPQUFPVyxNQUFNK0MsS0FBSzFFLEdBQUksR0FBVSxjQUFOZ0IsR0FBcUIsMkNBQTJDZ0wsS0FBS2hMLEdBQUksT0FBTzhLLEVBQWtCOUwsRUFBRzZMLEdBSnBUSSxDQUE0QnBCLEVBQUt0TCxJQUVuSSxXQUE4QixNQUFNLElBQUlzQyxVQUFVLDZJQUZ1RnFLLEdBTXpJLFNBQVNKLEVBQWtCakIsRUFBS3NCLElBQWtCLE1BQVBBLEdBQWVBLEVBQU10QixFQUFJM0csVUFBUWlJLEVBQU10QixFQUFJM0csUUFBUSxJQUFLLElBQUkzRSxFQUFJLEVBQUc2TSxFQUFPLElBQUl6SyxNQUFNd0ssR0FBTTVNLEVBQUk0TSxFQUFLNU0sSUFBTzZNLEVBQUs3TSxHQUFLc0wsRUFBSXRMLEdBQU0sT0FBTzZNLEVBTWhMOU0sRUFBT0QsUUFBVSxTQUFnQ2dOLEdBQy9DLElBQUlDLEVBQVFsQixFQUFlaUIsRUFBTSxHQUM3QkUsRUFBVUQsRUFBTSxHQUNoQkUsRUFBYUYsRUFBTSxHQUV2QixJQUFLRSxFQUNILE9BQU9ELEVBR1QsR0FBb0IsbUJBQVRFLEtBQXFCLENBRTlCLElBQUlDLEVBQVNELEtBQUtFLFNBQVNDLG1CQUFtQkMsS0FBS0MsVUFBVU4sTUFDekRPLEVBQU8sK0RBQStEakksT0FBTzRILEdBQzdFTSxFQUFnQixPQUFPbEksT0FBT2lJLEVBQU0sT0FDcENFLEVBQWFULEVBQVdVLFFBQVFDLEtBQUksU0FBVXZHLEdBQ2hELE1BQU8saUJBQWlCOUIsT0FBTzBILEVBQVdZLFlBQWMsSUFBSXRJLE9BQU84QixFQUFRLFVBRTdFLE1BQU8sQ0FBQzJGLEdBQVN6SCxPQUFPbUksR0FBWW5JLE9BQU8sQ0FBQ2tJLElBQWdCSyxLQUFLLE1BR25FLE1BQU8sQ0FBQ2QsR0FBU2MsS0FBSyxRLDZCQzFCeEIvTixFQUFPRCxRQUFVLFNBQVVpTyxHQUN6QixJQUFJQyxFQUFPLEdBdURYLE9BckRBQSxFQUFLeEIsU0FBVyxXQUNkLE9BQU8vSixLQUFLbUwsS0FBSSxTQUFVZCxHQUN4QixJQUFJRSxFQUFVZSxFQUF1QmpCLEdBRXJDLE9BQUlBLEVBQUssR0FDQSxVQUFVdkgsT0FBT3VILEVBQUssR0FBSSxNQUFNdkgsT0FBT3lILEVBQVMsS0FHbERBLEtBQ05jLEtBQUssS0FLVkUsRUFBS2hPLEVBQUksU0FBVUUsRUFBUytOLEVBQVlDLEdBQ2YsaUJBQVpoTyxJQUVUQSxFQUFVLENBQUMsQ0FBQyxLQUFNQSxFQUFTLE1BRzdCLElBQUlpTyxFQUF5QixHQUU3QixHQUFJRCxFQUNGLElBQUssSUFBSWxPLEVBQUksRUFBR0EsRUFBSXlDLEtBQUtrQyxPQUFRM0UsSUFBSyxDQUVwQyxJQUFJb08sRUFBSzNMLEtBQUt6QyxHQUFHLEdBRVAsTUFBTm9PLElBQ0ZELEVBQXVCQyxJQUFNLEdBS25DLElBQUssSUFBSWxFLEVBQUssRUFBR0EsRUFBS2hLLEVBQVF5RSxPQUFRdUYsSUFBTSxDQUMxQyxJQUFJNEMsRUFBTyxHQUFHdkgsT0FBT3JGLEVBQVFnSyxJQUV6QmdFLEdBQVVDLEVBQXVCckIsRUFBSyxNQUt0Q21CLElBQ0duQixFQUFLLEdBR1JBLEVBQUssR0FBSyxHQUFHdkgsT0FBTzBJLEVBQVksU0FBUzFJLE9BQU91SCxFQUFLLElBRnJEQSxFQUFLLEdBQUttQixHQU1kRCxFQUFLcEosS0FBS2tJLE1BSVBrQixJLDZCQ2hFVCx3SUFJSUssRUFBZ0IsV0FDaEIsU0FBU0EsRUFBYUMsR0FDbEI3TCxLQUFLNkwsZ0JBQWtCQSxFQUN2QjdMLEtBQUswRSxRQUFTLEVBQ2QxRSxLQUFLOEwsV0FBYSxLQUNsQjlMLEtBQUsrTCxZQUFjLEtBZ0hGLElBQ2JDLEVBSVIsT0FuSEFKLEVBQWF6TSxVQUFVbUYsWUFBYyxXQUNqQyxJQUFJc0IsRUFBS3BCLEVBQUk2QixFQUFLRSxFQUNkMEYsRUFDSixJQUFLak0sS0FBSzBFLE9BQVEsQ0FDZDFFLEtBQUswRSxRQUFTLEVBQ2QsSUFBSW9ILEVBQWE5TCxLQUFLOEwsV0FDdEIsR0FBSUEsRUFFQSxHQURBOUwsS0FBSzhMLFdBQWEsS0FDZG5NLE1BQU0wSixRQUFReUMsR0FDZCxJQUNJLElBQUssSUFBSUksRUFBZSxZQUFTSixHQUFhSyxFQUFpQkQsRUFBYXRMLFFBQVN1TCxFQUFlbkwsS0FBTW1MLEVBQWlCRCxFQUFhdEwsT0FBUSxDQUM3SHVMLEVBQWUzTixNQUNyQjROLE9BQU9wTSxPQUd4QixNQUFPK0YsR0FBU0gsRUFBTSxDQUFFckQsTUFBT3dELEdBQy9CLFFBQ0ksSUFDUW9HLElBQW1CQSxFQUFlbkwsT0FBU3dELEVBQUswSCxFQUFhbEcsU0FBU3hCLEVBQUc5RyxLQUFLd08sR0FFdEYsUUFBVSxHQUFJdEcsRUFBSyxNQUFNQSxFQUFJckQsWUFJakN1SixFQUFXTSxPQUFPcE0sTUFHMUIsSUFBSXFNLEVBQW1Cck0sS0FBSzZMLGdCQUM1QixHQUFJLFlBQVdRLEdBQ1gsSUFDSUEsSUFFSixNQUFPeEwsR0FDSG9MLEVBQVNwTCxhQUFhLElBQXNCQSxFQUFFb0wsT0FBUyxDQUFDcEwsR0FHaEUsSUFBSWtMLEVBQWMvTCxLQUFLK0wsWUFDdkIsR0FBSUEsRUFBYSxDQUNiL0wsS0FBSytMLFlBQWMsS0FDbkIsSUFDSSxJQUFLLElBQUlPLEVBQWdCLFlBQVNQLEdBQWNRLEVBQWtCRCxFQUFjMUwsUUFBUzJMLEVBQWdCdkwsS0FBTXVMLEVBQWtCRCxFQUFjMUwsT0FBUSxDQUNuSixJQUFJNEwsRUFBWUQsRUFBZ0IvTixNQUNoQyxJQUNJaU8sRUFBY0QsR0FFbEIsTUFBT3BJLEdBQ0g2SCxFQUFTQSxRQUF1Q0EsRUFBUyxHQUNyRDdILGFBQWUsSUFDZjZILEVBQVMsWUFBYyxZQUFjLEdBQUksWUFBT0EsSUFBVSxZQUFPN0gsRUFBSTZILFNBR3JFQSxFQUFPOUosS0FBS2lDLEtBSzVCLE1BQU9rQyxHQUFTRCxFQUFNLENBQUU5RCxNQUFPK0QsR0FDL0IsUUFDSSxJQUNRaUcsSUFBb0JBLEVBQWdCdkwsT0FBU3VGLEVBQUsrRixFQUFjdEcsU0FBU08sRUFBRzdJLEtBQUs0TyxHQUV6RixRQUFVLEdBQUlqRyxFQUFLLE1BQU1BLEVBQUk5RCxRQUdyQyxHQUFJMEosRUFDQSxNQUFNLElBQUksSUFBb0JBLEtBSTFDTCxFQUFhek0sVUFBVThILElBQU0sU0FBVXlGLEdBQ25DLElBQUlsSSxFQUNKLEdBQUlrSSxHQUFZQSxJQUFhMU0sS0FDekIsR0FBSUEsS0FBSzBFLE9BQ0wrSCxFQUFjQyxPQUViLENBQ0QsR0FBSUEsYUFBb0JkLEVBQWMsQ0FDbEMsR0FBSWMsRUFBU2hJLFFBQVVnSSxFQUFTQyxXQUFXM00sTUFDdkMsT0FFSjBNLEVBQVNFLFdBQVc1TSxPQUV2QkEsS0FBSytMLFlBQTBDLFFBQTNCdkgsRUFBS3hFLEtBQUsrTCxtQkFBZ0MsSUFBUHZILEVBQWdCQSxFQUFLLElBQUlyQyxLQUFLdUssS0FJbEdkLEVBQWF6TSxVQUFVd04sV0FBYSxTQUFVRSxHQUMxQyxJQUFJZixFQUFhOUwsS0FBSzhMLFdBQ3RCLE9BQU9BLElBQWVlLEdBQVdsTixNQUFNMEosUUFBUXlDLElBQWVBLEVBQVdnQixTQUFTRCxJQUV0RmpCLEVBQWF6TSxVQUFVeU4sV0FBYSxTQUFVQyxHQUMxQyxJQUFJZixFQUFhOUwsS0FBSzhMLFdBQ3RCOUwsS0FBSzhMLFdBQWFuTSxNQUFNMEosUUFBUXlDLElBQWVBLEVBQVczSixLQUFLMEssR0FBU2YsR0FBY0EsRUFBYSxDQUFDQSxFQUFZZSxHQUFVQSxHQUU5SGpCLEVBQWF6TSxVQUFVNE4sY0FBZ0IsU0FBVUYsR0FDN0MsSUFBSWYsRUFBYTlMLEtBQUs4TCxXQUNsQkEsSUFBZWUsRUFDZjdNLEtBQUs4TCxXQUFhLEtBRWJuTSxNQUFNMEosUUFBUXlDLElBQ25CLFlBQVVBLEVBQVllLElBRzlCakIsRUFBYXpNLFVBQVVpTixPQUFTLFNBQVVNLEdBQ3RDLElBQUlYLEVBQWMvTCxLQUFLK0wsWUFDdkJBLEdBQWUsWUFBVUEsRUFBYVcsR0FDbENBLGFBQW9CZCxHQUNwQmMsRUFBU0ssY0FBYy9NLE9BRy9CNEwsRUFBYW9CLFFBQ0xoQixFQUFRLElBQUlKLEdBQ1ZsSCxRQUFTLEVBQ1JzSCxHQUVKSixFQTFIUSxHQTZIUnFCLEVBQXFCckIsRUFBYW9CLE1BQ3RDLFNBQVNFLEVBQWUxTyxHQUMzQixPQUFRQSxhQUFpQm9OLEdBQ3BCcE4sR0FBUyxXQUFZQSxHQUFTLFlBQVdBLEVBQU00TixTQUFXLFlBQVc1TixFQUFNeUksTUFBUSxZQUFXekksRUFBTThGLGFBRTdHLFNBQVNtSSxFQUFjRCxHQUNmLFlBQVdBLEdBQ1hBLElBR0FBLEVBQVVsSSxnQiw2QkMzSWxCLGdGQUVXNkksRUFBaUIsSUFGNUIsTUFFZ0MsR0FBZSxLQUNwQ0MsRUFBUUQsRyw2QkNIWixTQUFTRSxFQUFnQkMsRUFBb0JDLEVBQVdDLEVBQU1DLEVBQU9DLFFBQzFELElBQVZELElBQW9CQSxFQUFRLFFBQ2pCLElBQVhDLElBQXFCQSxHQUFTLEdBQ2xDLElBQUlDLEVBQXVCSixFQUFVSyxVQUFTLFdBQzFDSixJQUNJRSxFQUNBSixFQUFtQnJHLElBQUlqSCxLQUFLNE4sU0FBUyxLQUFNSCxJQUczQ3pOLEtBQUtzRSxnQkFFVm1KLEdBRUgsR0FEQUgsRUFBbUJyRyxJQUFJMEcsSUFDbEJELEVBQ0QsT0FBT0MsRUFkZixtQyw2QkNBQSwrRUFDV1gsRUFBUSxJQUFJLEtBQVcsU0FBVTVILEdBQWMsT0FBT0EsRUFBV0ksY0FDckUsU0FBU3dHLEVBQU11QixHQUNsQixPQUFPQSxFQUVYLFNBQXdCQSxHQUNwQixPQUFPLElBQUksS0FBVyxTQUFVbkksR0FBYyxPQUFPbUksRUFBVUssVUFBUyxXQUFjLE9BQU94SSxFQUFXSSxpQkFIckZxSSxDQUFlTixHQUFhUCxJLDZCQ0huRCwyRUFLTyxTQUFTYyxFQUFTQyxFQUFTQyxFQUFnQkMsR0FFOUMsWUFEbUIsSUFBZkEsSUFBeUJBLEVBQWFDLEtBQ3RDLFlBQVdGLEdBQ0pGLEdBQVMsU0FBVTNLLEVBQUc1RixHQUFLLE9BQU8sYUFBSSxTQUFVaUMsRUFBRzJPLEdBQU0sT0FBT0gsRUFBZTdLLEVBQUczRCxFQUFHakMsRUFBRzRRLEtBQXRELENBQThELFlBQVVKLEVBQVE1SyxFQUFHNUYsT0FBUzBRLElBRXRHLGlCQUFuQkQsSUFDWkMsRUFBYUQsR0FFVixhQUFRLFNBQVVwSixFQUFRUSxHQUFjLE9BQU8sWUFBZVIsRUFBUVEsRUFBWTJJLEVBQVNFLFMsNkJDYnRHLG9EQUVPLFNBQVNHLEVBQU9DLEVBQVdsTyxHQUM5QixPQUFPLGFBQVEsU0FBVXlFLEVBQVFRLEdBQzdCLElBQUlrSixFQUFRLEVBQ1oxSixFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUFTLE9BQU82UCxFQUFVM1EsS0FBS3lDLEVBQVMzQixFQUFPOFAsTUFBWWxKLEVBQVd4RSxLQUFLcEMsWSw2QkNMbkosc0RBRU8sU0FBU2tFLEVBQUt3QyxFQUFPcUksR0FDeEIsT0FBT0EsRUFBWSxZQUFVckksRUFBT3FJLEdBQWEsWUFBVXJJLEssNkJDSHhELFNBQVNxSixFQUFVMUYsRUFBS3dCLEdBQzNCLEdBQUl4QixFQUFLLENBQ0wsSUFBSXlGLEVBQVF6RixFQUFJMkYsUUFBUW5FLEdBQ3hCLEdBQUtpRSxHQUFTekYsRUFBSTRGLE9BQU9ILEVBQU8sSUFIeEMsbUMsNkJDQUEsb0RBRU8sU0FBU25ELEVBQUk0QyxFQUFTNU4sR0FDekIsT0FBTyxhQUFRLFNBQVV5RSxFQUFRUSxHQUM3QixJQUFJa0osRUFBUSxFQUNaMUosRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQ0RyxFQUFXeEUsS0FBS21OLEVBQVFyUSxLQUFLeUMsRUFBUzNCLEVBQU84UCxlLDZCQ056RCw4Q0FDV0ksRUFBYSxhQUFpQixTQUFVMUssR0FBVSxPQUFPLFdBQ2hFQSxFQUFPaEUsTUFDUEEsS0FBS2xDLEtBQU8sYUFDWmtDLEtBQUsyTyxRQUFVLCtCLDZCQ0puQixxRUFJTyxTQUFTQyxFQUFNQyxFQUFTQyxFQUFxQnZCLFFBQ2hDLElBQVpzQixJQUFzQkEsRUFBVSxRQUNsQixJQUFkdEIsSUFBd0JBLEVBQVksS0FDeEMsSUFBSXdCLEdBQW9CLEVBU3hCLE9BUjJCLE1BQXZCRCxJQUNJLFlBQVlBLEdBQ1p2QixFQUFZdUIsRUFHWkMsRUFBbUJELEdBR3BCLElBQUksS0FBVyxTQUFVMUosR0FDNUIsSUFBSTRKLEVBQU0sWUFBWUgsSUFBWUEsRUFBVXRCLEVBQVUwQixNQUFRSixFQUMxREcsRUFBTSxJQUNOQSxFQUFNLEdBRVYsSUFBSWhRLEVBQUksRUFDUixPQUFPdU8sRUFBVUssVUFBUyxXQUNqQnhJLEVBQVdWLFNBQ1pVLEVBQVd4RSxLQUFLNUIsS0FDWixHQUFLK1AsRUFDTC9PLEtBQUs0TixjQUFTNUUsRUFBVytGLEdBR3pCM0osRUFBV0ksY0FHcEJ3SixRLDZCQ2hDSixTQUFTRSxFQUFpQkMsR0FDN0IsSUFJSUMsRUFBV0QsR0FKRixTQUFVRSxHQUNuQkMsTUFBTTVSLEtBQUsyUixHQUNYQSxFQUFTRSxPQUFRLElBQUlELE9BQVFDLFNBS2pDLE9BRkFILEVBQVNqUSxVQUFZbEIsT0FBT1ksT0FBT3lRLE1BQU1uUSxXQUN6Q2lRLEVBQVNqUSxVQUFVYyxZQUFjbVAsRUFDMUJBLEVBUlgsbUMsNkJDQUEscURBRUkvRixFQUFVMUosTUFBTTBKLFFBSWIsU0FBU21HLEVBQWlCQyxHQUM3QixPQUFPLGFBQUksU0FBVTFHLEdBQVEsT0FKakMsU0FBcUIwRyxFQUFJMUcsR0FDckIsT0FBT00sRUFBUU4sR0FBUTBHLEVBQUd2TyxXQUFNLEVBQVEsWUFBYyxHQUFJLFlBQU82SCxLQUFVMEcsRUFBRzFHLEdBRzFDMkcsQ0FBWUQsRUFBSTFHLFEsNkJDUHhELHNDQUFJTSxFQUFVMUosTUFBTTBKLFFBQ2IsU0FBU3NHLEVBQWU1RyxHQUMzQixPQUF1QixJQUFoQkEsRUFBSzdHLFFBQWdCbUgsRUFBUU4sRUFBSyxJQUFNQSxFQUFLLEdBQUtBLEksNkJDRjdELGtDQUFPLElBQUk2RyxFQUFTLENBQ2hCQyxpQkFBa0IsS0FDbEJDLHNCQUF1QixLQUN2QnZQLGFBQVN5SSxFQUNUK0csdUNBQXVDLEVBQ3ZDQywwQkFBMEIsSSxtSkNMbkJDLEVBQThDQyxFQUFtQixTQUFLbEgsT0FBV0EsR0FPckYsU0FBU2tILEVBQW1CQyxFQUFNM1IsRUFBTytELEdBQzVDLE1BQU8sQ0FDSDROLEtBQU1BLEVBQ04zUixNQUFPQSxFQUNQK0QsTUFBT0EsRyxxQkNGWCxFQUFjLFNBQVV5QixHQUV4QixTQUFTb00sRUFBVzFNLEdBQ2hCLElBQUlRLEVBQVFGLEVBQU90RyxLQUFLc0MsT0FBU0EsS0FXakMsT0FWQWtFLEVBQU0rRCxXQUFZLEVBQ2R2RSxHQUNBUSxFQUFNUixZQUFjQSxFQUNoQixZQUFlQSxJQUNmQSxFQUFZdUQsSUFBSS9DLElBSXBCQSxFQUFNUixZQUFjMk0sRUFFakJuTSxFQXlEWCxPQXRFQSxZQUFVa00sRUFBWXBNLEdBZXRCb00sRUFBV3ZSLE9BQVMsU0FBVStCLEVBQU0yQixFQUFPaUQsR0FDdkMsT0FBTyxJQUFJLEVBQWU1RSxFQUFNMkIsRUFBT2lELElBRTNDNEssRUFBV2pSLFVBQVV5QixLQUFPLFNBQVVwQyxHQUM5QndCLEtBQUtpSSxVQUNMcUksRUQxQkwsU0FBMEI5UixHQUM3QixPQUFPMFIsRUFBbUIsSUFBSzFSLE9BQU93SyxHQ3lCSnVILENBQWlCL1IsR0FBUXdCLE1BR25EQSxLQUFLbUUsTUFBTTNGLElBR25CNFIsRUFBV2pSLFVBQVVvRCxNQUFRLFNBQVU2QixHQUMvQnBFLEtBQUtpSSxVQUNMcUksRURwQ0RKLEVBQW1CLFNBQUtsSCxFQ29DcUI1RSxHQUFNcEUsT0FHbERBLEtBQUtpSSxXQUFZLEVBQ2pCakksS0FBS3FFLE9BQU9ELEtBR3BCZ00sRUFBV2pSLFVBQVVxRyxTQUFXLFdBQ3hCeEYsS0FBS2lJLFVBQ0xxSSxFQUEwQkwsRUFBdUJqUSxPQUdqREEsS0FBS2lJLFdBQVksRUFDakJqSSxLQUFLdUUsY0FHYjZMLEVBQVdqUixVQUFVbUYsWUFBYyxXQUMxQnRFLEtBQUswRSxTQUNOMUUsS0FBS2lJLFdBQVksRUFDakJqRSxFQUFPN0UsVUFBVW1GLFlBQVk1RyxLQUFLc0MsTUFDbENBLEtBQUswRCxZQUFjLE9BRzNCME0sRUFBV2pSLFVBQVVnRixNQUFRLFNBQVUzRixHQUNuQ3dCLEtBQUswRCxZQUFZOUMsS0FBS3BDLElBRTFCNFIsRUFBV2pSLFVBQVVrRixPQUFTLFNBQVVELEdBQ3BDLElBQ0lwRSxLQUFLMEQsWUFBWW5CLE1BQU02QixHQUUzQixRQUNJcEUsS0FBS3NFLGdCQUdiOEwsRUFBV2pSLFVBQVVvRixVQUFZLFdBQzdCLElBQ0l2RSxLQUFLMEQsWUFBWThCLFdBRXJCLFFBQ0l4RixLQUFLc0UsZ0JBR044TCxFQXZFTSxDQXdFZnhFLEVBQUEsR0FFRTRFLEVBQVFDLFNBQVN0UixVQUFVSixLQUMvQixTQUFTQSxFQUFLMFEsRUFBSXRQLEdBQ2QsT0FBT3FRLEVBQU05UyxLQUFLK1IsRUFBSXRQLEdBRTFCLElBQUl1USxFQUFvQixXQUNwQixTQUFTQSxFQUFpQkMsR0FDdEIzUSxLQUFLMlEsZ0JBQWtCQSxFQXNDM0IsT0FwQ0FELEVBQWlCdlIsVUFBVXlCLEtBQU8sU0FBVXBDLEdBQ3hDLElBQUltUyxFQUFrQjNRLEtBQUsyUSxnQkFDM0IsR0FBSUEsRUFBZ0IvUCxLQUNoQixJQUNJK1AsRUFBZ0IvUCxLQUFLcEMsR0FFekIsTUFBTytELEdBQ0hxTyxFQUFxQnJPLEtBSWpDbU8sRUFBaUJ2UixVQUFVb0QsTUFBUSxTQUFVNkIsR0FDekMsSUFBSXVNLEVBQWtCM1EsS0FBSzJRLGdCQUMzQixHQUFJQSxFQUFnQnBPLE1BQ2hCLElBQ0lvTyxFQUFnQnBPLE1BQU02QixHQUUxQixNQUFPN0IsR0FDSHFPLEVBQXFCck8sUUFJekJxTyxFQUFxQnhNLElBRzdCc00sRUFBaUJ2UixVQUFVcUcsU0FBVyxXQUNsQyxJQUFJbUwsRUFBa0IzUSxLQUFLMlEsZ0JBQzNCLEdBQUlBLEVBQWdCbkwsU0FDaEIsSUFDSW1MLEVBQWdCbkwsV0FFcEIsTUFBT2pELEdBQ0hxTyxFQUFxQnJPLEtBSTFCbU8sRUF4Q1ksR0EwQ25CLEVBQWtCLFNBQVUxTSxHQUU1QixTQUFTNk0sRUFBZTlKLEVBQWdCeEUsRUFBT2lELEdBQzNDLElBQ0ltTCxFQVNJRyxFQVZKNU0sRUFBUUYsRUFBT3RHLEtBQUtzQyxPQUFTQSxLQUU3QixPQUFBMEcsRUFBQSxHQUFXSyxLQUFvQkEsRUFDL0I0SixFQUFrQixDQUNkL1AsS0FBT21HLFFBQXVEQSxPQUFpQmlDLEVBQy9FekcsTUFBT0EsUUFBcUNBLE9BQVF5RyxFQUNwRHhELFNBQVVBLFFBQTJDQSxPQUFXd0QsR0FLaEU5RSxHQUFTMEwsRUFBQSxFQUFPSSwyQkFDaEJjLEVBQVk3UyxPQUFPWSxPQUFPa0ksSUFDaEJ6QyxZQUFjLFdBQWMsT0FBT0osRUFBTUksZUFDbkRxTSxFQUFrQixDQUNkL1AsS0FBTW1HLEVBQWVuRyxNQUFRN0IsRUFBS2dJLEVBQWVuRyxLQUFNa1EsR0FDdkR2TyxNQUFPd0UsRUFBZXhFLE9BQVN4RCxFQUFLZ0ksRUFBZXhFLE1BQU91TyxHQUMxRHRMLFNBQVV1QixFQUFldkIsVUFBWXpHLEVBQUtnSSxFQUFldkIsU0FBVXNMLEtBSXZFSCxFQUFrQjVKLEVBSTFCLE9BREE3QyxFQUFNUixZQUFjLElBQUlnTixFQUFpQkMsR0FDbEN6TSxFQUVYLE9BN0JBLFlBQVUyTSxFQUFnQjdNLEdBNkJuQjZNLEVBOUJVLENBK0JuQixHQUVGLFNBQVNELEVBQXFCck8sR0FDdEJxTixFQUFBLEVBQU9HLHNDQUNQLFlBQWF4TixHQUdiLE9BQUF3TyxFQUFBLEdBQXFCeE8sR0FNN0IsU0FBUytOLEVBQTBCVSxFQUFjNUwsR0FDN0MsSUFBSTBLLEVBQXdCRixFQUFBLEVBQU9FLHNCQUNuQ0EsR0FBeUJtQixFQUFBLEVBQWdCQyxZQUFXLFdBQWMsT0FBT3BCLEVBQXNCa0IsRUFBYzVMLE1BRTFHLElBQUlpTCxFQUFpQixDQUN4QjNMLFFBQVEsRUFDUjlELEtBQU1nSCxFQUFBLEVBQ05yRixNQVZKLFNBQTZCNkIsR0FDekIsTUFBTUEsR0FVTm9CLFNBQVVvQyxFQUFBLEksNkJDckxkLHNEQUVPLFNBQVN1SixFQUFPQyxFQUFhQyxHQUNoQyxPQUFPLFlBQVEsWUFBY0QsRUFBYUMsRUFBTXpPLFVBQVVWLFFBQVUsR0FBRyxHQUFPLE0sNkJDSGxGLElBQU1vUCxFQUFXQyxFQUFRLEtBQ25CQyxFQUFtQkQsRUFBUSxLQUMzQkUsRUFBTUYsRUFBUSxLQUNkRyxFQUF3QkgsRUFBUSxLQUNoQ0ksRUFBYUosRUFBUSxLQUNyQkssRUFBV0wsRUFBUSxLQUV6QmpVLEVBQU9ELFFBQVUsQ0FDZmlVLFdBQ0FFLG1CQUNBQyxNQUNBSSxnQkFBaUJILEVBQ2pCQyxhQUNBQyxhLDZCQ2JGLDREQUdPLFNBQVNFLEVBQUtDLEdBQ2pCLE9BQU9BLEdBQVMsRUFFUixXQUFjLE9BQU8sS0FDdkIsYUFBUSxTQUFVbk4sRUFBUVEsR0FDeEIsSUFBSTRNLEVBQU8sRUFDWHBOLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEtBQ3REd1QsR0FBUUQsSUFDVjNNLEVBQVd4RSxLQUFLcEMsR0FDWnVULEdBQVNDLEdBQ1Q1TSxFQUFXSSxxQiw2QkNibkMsMkRBR08sU0FBU3lNLEVBQVVsRSxFQUFTQyxHQUMvQixPQUFPLGFBQVEsU0FBVXBKLEVBQVFRLEdBQzdCLElBQUk4TSxFQUFrQixLQUNsQjVELEVBQVEsRUFDUjZELEdBQWEsRUFDYkMsRUFBZ0IsV0FBYyxPQUFPRCxJQUFlRCxHQUFtQjlNLEVBQVdJLFlBQ3RGWixFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RDBULFNBQWtFQSxFQUFnQjVOLGNBQ2xGLElBQUkrTixFQUFhLEVBQ2JDLEVBQWFoRSxJQUNqQixZQUFVUCxFQUFRdlAsRUFBTzhULElBQWFoTixVQUFXNE0sRUFBa0IsWUFBeUI5TSxHQUFZLFNBQVVtTixHQUFjLE9BQU9uTixFQUFXeEUsS0FBS29OLEVBQWlCQSxFQUFleFAsRUFBTytULEVBQVlELEVBQVlELEtBQWdCRSxNQUFnQixXQUNsUEwsRUFBa0IsS0FDbEJFLFdBRUwsV0FDQ0QsR0FBYSxFQUNiQyxhLDZCQ2pCWi9VLEVBQVFzQixZQUFhLEVBQ3JCdEIsRUFBUW1WLE9BQVNBLEVBQ2pCblYsRUFBUW1SLFFBK0RSLFNBQWlCakosRUFBTy9HLEdBQ3RCLElBQUssSUFBSWpCLEVBQUksRUFBRzRNLEVBQU01RSxFQUFNckQsT0FBUTNFLEVBQUk0TSxFQUFLNU0sSUFDM0MsR0FBSWdJLEVBQU1oSSxLQUFPaUIsRUFDZixPQUFPakIsRUFHWCxPQUFRLEdBcEVWRixFQUFRb1YsaUJBdUVSLFNBQTBCQyxHQUN4QixHQUFzQixpQkFBWEEsRUFBcUIsQ0FFOUIsR0FBSUEsR0FBVUEsRUFBT0MsT0FDbkIsT0FBT0QsRUFBT0MsU0FDVCxHQUFjLE1BQVZELEVBQ1QsTUFBTyxHQUNGLElBQUtBLEVBQ1YsT0FBT0EsRUFBUyxHQU1sQkEsRUFBUyxHQUFLQSxFQUdoQixJQUFLRSxFQUFTNUksS0FBSzBJLEdBQ2pCLE9BQU9BLEVBRVQsT0FBT0EsRUFBT0csUUFBUUMsRUFBVUMsSUExRmxDMVYsRUFBUTJWLFFBNkZSLFNBQWlCeFUsR0FDZixPQUFLQSxHQUFtQixJQUFWQSxNQUVINkssRUFBUTdLLElBQTJCLElBQWpCQSxFQUFNMEQsU0EvRnJDN0UsRUFBUTRWLFlBc0dSLFNBQXFCaFUsR0FDbkIsSUFBSWlVLEVBQVFWLEVBQU8sR0FBSXZULEdBRXZCLE9BREFpVSxFQUFNQyxRQUFVbFUsRUFDVGlVLEdBeEdUN1YsRUFBUStWLFlBMkdSLFNBQXFCQyxFQUFRQyxHQUUzQixPQURBRCxFQUFPRSxLQUFPRCxFQUNQRCxHQTVHVGhXLEVBQVFtVyxrQkErR1IsU0FBMkJDLEVBQWE5SCxHQUN0QyxPQUFROEgsRUFBY0EsRUFBYyxJQUFNLElBQU05SCxHQS9HbEQsSUFBSStILEVBQVMsQ0FDWCxJQUFLLFFBQ0wsSUFBSyxPQUNMLElBQUssT0FDTCxJQUFLLFNBQ0wsSUFBSyxTQUNMLElBQUssU0FDTCxJQUFLLFVBR0haLEVBQVcsYUFDWEYsRUFBVyxZQUVmLFNBQVNHLEVBQVdZLEdBQ2xCLE9BQU9ELEVBQU9DLEdBR2hCLFNBQVNuQixFQUFPck4sR0FDZCxJQUFLLElBQUk1SCxFQUFJLEVBQUdBLEVBQUlxRixVQUFVVixPQUFRM0UsSUFDcEMsSUFBSyxJQUFJdUIsS0FBTzhELFVBQVVyRixHQUNwQlUsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLa0YsVUFBVXJGLEdBQUl1QixLQUNyRHFHLEVBQUlyRyxHQUFPOEQsVUFBVXJGLEdBQUd1QixJQUs5QixPQUFPcUcsRUFHVCxJQUFJNEUsRUFBVzlMLE9BQU9rQixVQUFVNEssU0FFaEMxTSxFQUFRME0sU0FBV0EsRUFJbkIsSUFBSXJELEVBQWEsU0FBb0JsSSxHQUNuQyxNQUF3QixtQkFBVkEsR0FJWmtJLEVBQVcsT0FDYnJKLEVBQVFxSixXQUFhQSxFQUFhLFNBQVVsSSxHQUMxQyxNQUF3QixtQkFBVkEsR0FBaUQsc0JBQXpCdUwsRUFBU3JNLEtBQUtjLEtBR3hEbkIsRUFBUXFKLFdBQWFBLEVBS3JCLElBQUkyQyxFQUFVMUosTUFBTTBKLFNBQVcsU0FBVTdLLEdBQ3ZDLFNBQU9BLEdBQTBCLGlCQUFWQSxJQUE4QyxtQkFBekJ1TCxFQUFTck0sS0FBS2MsSUFHNURuQixFQUFRZ00sUUFBVUEsRyw2QkNoRWxCLDZDQUNPLFNBQVN1SyxFQUFZckcsRUFBV0UsR0FFbkMsWUFEYyxJQUFWQSxJQUFvQkEsRUFBUSxHQUN6QixhQUFRLFNBQVU3SSxFQUFRUSxHQUM3QkEsRUFBVzZCLElBQUlzRyxFQUFVSyxVQUFTLFdBQWMsT0FBT2hKLEVBQU9VLFVBQVVGLEtBQWdCcUksUyw2QkNKaEcsNERBR08sU0FBU29HLEVBQVV0RyxFQUFXRSxHQUVqQyxZQURjLElBQVZBLElBQW9CQSxFQUFRLEdBQ3pCLGFBQVEsU0FBVTdJLEVBQVFRLEdBQzdCUixFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUFTLE9BQU8sWUFBZ0I0RyxFQUFZbUksR0FBVyxXQUFjLE9BQU9uSSxFQUFXeEUsS0FBS3BDLEtBQVdpUCxNQUFXLFdBQWMsT0FBTyxZQUFnQnJJLEVBQVltSSxHQUFXLFdBQWMsT0FBT25JLEVBQVdJLGFBQWVpSSxNQUFXLFNBQVVySixHQUFPLE9BQU8sWUFBZ0JnQixFQUFZbUksR0FBVyxXQUFjLE9BQU9uSSxFQUFXN0MsTUFBTTZCLEtBQVNxSixZLDZCQ045WixxREFFTyxTQUFTcUcsRUFBUzdGLEdBRXJCLFlBRG1CLElBQWZBLElBQXlCQSxFQUFhQyxLQUNuQyxZQUFTLElBQVVELEssNkJDSjlCLG9EQUVPLFNBQVM4RixFQUFlNUssR0FDM0IsT0FBTyxhQUFRLFNBQVV2RSxFQUFRUSxHQUM3QixJQUFJNE8sR0FBVyxFQUNmcFAsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUR3VixHQUFXLEVBQ1g1TyxFQUFXeEUsS0FBS3BDLE1BQ2pCLFdBQ013VixHQUNENU8sRUFBV3hFLEtBQUt1SSxHQUVwQi9ELEVBQVdJLG9CLDZCQ1p2Qiw0REFHTyxTQUFTeU8sRUFBYUMsR0FFekIsWUFEcUIsSUFBakJBLElBQTJCQSxFQUFlQyxHQUN2QyxhQUFRLFNBQVV2UCxFQUFRUSxHQUM3QixJQUFJNE8sR0FBVyxFQUNmcFAsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUR3VixHQUFXLEVBQ1g1TyxFQUFXeEUsS0FBS3BDLE1BQ2pCLFdBQWMsT0FBUXdWLEVBQVc1TyxFQUFXSSxXQUFhSixFQUFXN0MsTUFBTTJSLFlBR3JGLFNBQVNDLElBQ0wsT0FBTyxJQUFJLE0sNkJDZGYscURBRUlDLEVBQWtCLFNBQVVwUSxHQUU1QixTQUFTb1EsRUFBZUMsRUFBaUJwRixRQUN6QixJQUFSQSxJQUFrQkEsRUFBTSxJQUFVQSxLQUN0QyxJQUFJL0ssRUFBUUYsRUFBT3RHLEtBQUtzQyxLQUFNcVUsRUFBaUJwRixJQUFRalAsS0FHdkQsT0FGQWtFLEVBQU1vUSxRQUFVLEdBQ2hCcFEsRUFBTXFRLFNBQVUsRUFDVHJRLEVBdUJYLE9BN0JBLFlBQVVrUSxFQUFnQnBRLEdBUTFCb1EsRUFBZWpWLFVBQVVxVixNQUFRLFNBQVVDLEdBQ3ZDLElBQUlILEVBQVV0VSxLQUFLc1UsUUFDbkIsR0FBSXRVLEtBQUt1VSxRQUNMRCxFQUFRblMsS0FBS3NTLE9BRGpCLENBSUEsSUFBSWxTLEVBQ0p2QyxLQUFLdVUsU0FBVSxFQUNmLEdBQ0ksR0FBS2hTLEVBQVFrUyxFQUFPQyxRQUFRRCxFQUFPRSxNQUFPRixFQUFPaEgsT0FDN0MsWUFFRWdILEVBQVNILEVBQVEvUSxTQUUzQixHQURBdkQsS0FBS3VVLFNBQVUsRUFDWGhTLEVBQU8sQ0FDUCxLQUFRa1MsRUFBU0gsRUFBUS9RLFNBQ3JCa1IsRUFBT25RLGNBRVgsTUFBTS9CLEtBR1A2UixFQTlCVSxDQStCbkIsTSwwRUMvQkUsRUFBVSxTQUFVcFEsR0FFcEIsU0FBUzRRLEVBQU9ySCxFQUFXQyxHQUN2QixPQUFPeEosRUFBT3RHLEtBQUtzQyxPQUFTQSxLQU1oQyxPQVJBLFlBQVU0VSxFQUFRNVEsR0FJbEI0USxFQUFPelYsVUFBVXlPLFNBQVcsU0FBVStHLEVBQU9sSCxHQUV6QyxZQURjLElBQVZBLElBQW9CQSxFQUFRLEdBQ3pCek4sTUFFSjRVLEVBVEUsQyxNQVVYLEdDWFNDLEVBQW1CLENBQzFCQyxZQUFhLFNBQVVDLEVBQVNDLEdBRTVCLElBREEsSUFBSWpNLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixFQUFLLEdBQUs3RSxVQUFVNkUsR0FFN0IsSUFBSXdOLEVBQVdKLEVBQWlCSSxTQUNoQyxPQUFJQSxhQUEyQyxFQUFTQSxFQUFTSCxhQUN0REcsRUFBU0gsWUFBWTVULE1BQU0rVCxFQUFVLFlBQWMsQ0FBQ0YsRUFBU0MsR0FBVSxZQUFPak0sS0FFbEYrTCxZQUFZNVQsV0FBTSxFQUFRLFlBQWMsQ0FBQzZULEVBQVNDLEdBQVUsWUFBT2pNLE1BRTlFbU0sY0FBZSxTQUFVQyxHQUNyQixJQUFJRixFQUFXSixFQUFpQkksU0FDaEMsUUFBU0EsYUFBMkMsRUFBU0EsRUFBU0MsZ0JBQWtCQSxlQUFlQyxJQUUzR0YsY0FBVWpNLEcsUUNiVixFQUFlLFNBQVVoRixHQUV6QixTQUFTb1IsRUFBWTdILEVBQVdDLEdBQzVCLElBQUl0SixFQUFRRixFQUFPdEcsS0FBS3NDLEtBQU11TixFQUFXQyxJQUFTeE4sS0FJbEQsT0FIQWtFLEVBQU1xSixVQUFZQSxFQUNsQnJKLEVBQU1zSixLQUFPQSxFQUNidEosRUFBTW1SLFNBQVUsRUFDVG5SLEVBMkVYLE9BakZBLFlBQVVrUixFQUFhcFIsR0FRdkJvUixFQUFZalcsVUFBVXlPLFNBQVcsU0FBVStHLEVBQU9sSCxHQUM5QyxJQUFJakosRUFFSixRQURjLElBQVZpSixJQUFvQkEsRUFBUSxHQUM1QnpOLEtBQUswRSxPQUNMLE9BQU8xRSxLQUVYQSxLQUFLMlUsTUFBUUEsRUFDYixJQUFJaEosRUFBSzNMLEtBQUsyTCxHQUNWNEIsRUFBWXZOLEtBQUt1TixVQU9yQixPQU5VLE1BQU41QixJQUNBM0wsS0FBSzJMLEdBQUszTCxLQUFLc1YsZUFBZS9ILEVBQVc1QixFQUFJOEIsSUFFakR6TixLQUFLcVYsU0FBVSxFQUNmclYsS0FBS3lOLE1BQVFBLEVBQ2J6TixLQUFLMkwsR0FBd0IsUUFBbEJuSCxFQUFLeEUsS0FBSzJMLFVBQXVCLElBQVBuSCxFQUFnQkEsRUFBS3hFLEtBQUt1VixlQUFlaEksRUFBV3ZOLEtBQUsyTCxHQUFJOEIsR0FDM0Z6TixNQUVYb1YsRUFBWWpXLFVBQVVvVyxlQUFpQixTQUFVaEksRUFBV2lJLEVBQUsvSCxHQUU3RCxZQURjLElBQVZBLElBQW9CQSxFQUFRLEdBQ3pCb0gsRUFBaUJDLFlBQVl2SCxFQUFVaUgsTUFBTXpWLEtBQUt3TyxFQUFXdk4sTUFBT3lOLElBRS9FMkgsRUFBWWpXLFVBQVVtVyxlQUFpQixTQUFVRyxFQUFZOUosRUFBSThCLEdBRTdELFFBRGMsSUFBVkEsSUFBb0JBLEVBQVEsR0FDbkIsTUFBVEEsR0FBaUJ6TixLQUFLeU4sUUFBVUEsSUFBMEIsSUFBakJ6TixLQUFLcVYsUUFDOUMsT0FBTzFKLEVBRUQsTUFBTkEsR0FDQWtKLEVBQWlCSyxjQUFjdkosSUFJdkN5SixFQUFZalcsVUFBVXVWLFFBQVUsU0FBVUMsRUFBT2xILEdBQzdDLEdBQUl6TixLQUFLMEUsT0FDTCxPQUFPLElBQUk0SyxNQUFNLGdDQUVyQnRQLEtBQUtxVixTQUFVLEVBQ2YsSUFBSTlTLEVBQVF2QyxLQUFLMFYsU0FBU2YsRUFBT2xILEdBQ2pDLEdBQUlsTCxFQUNBLE9BQU9BLEdBRWUsSUFBakJ2QyxLQUFLcVYsU0FBZ0MsTUFBWHJWLEtBQUsyTCxLQUNwQzNMLEtBQUsyTCxHQUFLM0wsS0FBS3NWLGVBQWV0VixLQUFLdU4sVUFBV3ZOLEtBQUsyTCxHQUFJLFFBRy9EeUosRUFBWWpXLFVBQVV1VyxTQUFXLFNBQVVmLEVBQU9nQixHQUM5QyxJQUNJQyxFQURBQyxHQUFVLEVBRWQsSUFDSTdWLEtBQUt3TixLQUFLbUgsR0FFZCxNQUFPOVQsR0FDSGdWLEdBQVUsRUFDVkQsRUFBYS9VLEdBQVEsSUFBSXlPLE1BQU0sc0NBRW5DLEdBQUl1RyxFQUVBLE9BREE3VixLQUFLc0UsY0FDRXNSLEdBR2ZSLEVBQVlqVyxVQUFVbUYsWUFBYyxXQUNoQyxJQUFLdEUsS0FBSzBFLE9BQVEsQ0FDZCxJQUFlaUgsRUFBTjNMLEtBQWMyTCxHQUFJNEIsRUFBbEJ2TixLQUFpQ3VOLFVBQ3RDK0csRUFBVS9HLEVBQVUrRyxRQUN4QnRVLEtBQUt3TixLQUFPeE4sS0FBSzJVLE1BQVEzVSxLQUFLdU4sVUFBWSxLQUMxQ3ZOLEtBQUtxVixTQUFVLEVBQ2YsT0FBQTlHLEVBQUEsR0FBVStGLEVBQVN0VSxNQUNULE1BQU4yTCxJQUNBM0wsS0FBSzJMLEdBQUszTCxLQUFLc1YsZUFBZS9ILEVBQVc1QixFQUFJLE9BRWpEM0wsS0FBS3lOLE1BQVEsS0FDYnpKLEVBQU83RSxVQUFVbUYsWUFBWTVHLEtBQUtzQyxRQUduQ29WLEVBbEZPLENBbUZoQixJLGdCQ3ZGRixJQUFJVSxFQUFhLEVBQVEsS0FHckJDLEVBQTBCLGlCQUFSQyxNQUFvQkEsTUFBUUEsS0FBSy9YLFNBQVdBLFFBQVUrWCxLQUd4RUMsRUFBT0gsR0FBY0MsR0FBWXRGLFNBQVMsY0FBVEEsR0FFckNuVCxFQUFPRCxRQUFVNFksRyw2QkNSakIsMEdBSVdDLEVBSlgsaUNBS0EsU0FBV0EsR0FDUEEsRUFBdUIsS0FBSSxJQUMzQkEsRUFBd0IsTUFBSSxJQUM1QkEsRUFBMkIsU0FBSSxJQUhuQyxDQUlHQSxJQUFxQkEsRUFBbUIsS0FDM0MsSUFBSUMsRUFBZ0IsV0FDaEIsU0FBU0EsRUFBYWhHLEVBQU0zUixFQUFPK0QsR0FDL0J2QyxLQUFLbVEsS0FBT0EsRUFDWm5RLEtBQUt4QixNQUFRQSxFQUNid0IsS0FBS3VDLE1BQVFBLEVBQ2J2QyxLQUFLZ1UsU0FBb0IsTUFBVDdELEVBNkNwQixPQTNDQWdHLEVBQWFoWCxVQUFVaVgsUUFBVSxTQUFVQyxHQUN2QyxPQUFPQyxFQUFvQnRXLEtBQU1xVyxJQUVyQ0YsRUFBYWhYLFVBQVVvWCxHQUFLLFNBQVVDLEVBQWFDLEVBQWNDLEdBQzdELElBQWV2RyxFQUFOblEsS0FBZ0JtUSxLQUFNM1IsRUFBdEJ3QixLQUFpQ3hCLE1BQU8rRCxFQUF4Q3ZDLEtBQW1EdUMsTUFDNUQsTUFBZ0IsTUFBVDROLEVBQWVxRyxhQUFpRCxFQUFTQSxFQUFZaFksR0FBa0IsTUFBVDJSLEVBQWVzRyxhQUFtRCxFQUFTQSxFQUFhbFUsR0FBU21VLGFBQXlELEVBQVNBLEtBRTVRUCxFQUFhaFgsVUFBVXdYLE9BQVMsU0FBVUMsRUFBZ0JyVSxFQUFPaUQsR0FDN0QsSUFBSWhCLEVBQ0osT0FBTyxZQUFxQyxRQUF6QkEsRUFBS29TLFNBQW1DLElBQVBwUyxPQUFnQixFQUFTQSxFQUFHNUQsTUFDMUVaLEtBQUtvVyxRQUFRUSxHQUNiNVcsS0FBS3VXLEdBQUdLLEVBQWdCclUsRUFBT2lELElBRXpDMlEsRUFBYWhYLFVBQVUwWCxhQUFlLFdBQ2xDLElBQWUxRyxFQUFOblEsS0FBZ0JtUSxLQUFNM1IsRUFBdEJ3QixLQUFpQ3hCLE1BQU8rRCxFQUF4Q3ZDLEtBQW1EdUMsTUFDeER4QixFQUFrQixNQUFUb1AsRUFFTCxZQUFHM1IsR0FFTSxNQUFUMlIsRUFFUSxhQUFXLFdBQWMsT0FBTzVOLEtBRXZCLE1BQVQ0TixFQUVRLElBRUEsRUFDeEIsSUFBS3BQLEVBQ0QsTUFBTSxJQUFJbEIsVUFBVSxnQ0FBa0NzUSxHQUUxRCxPQUFPcFAsR0FFWG9WLEVBQWFXLFdBQWEsU0FBVXRZLEdBQ2hDLE9BQU8sSUFBSTJYLEVBQWEsSUFBSzNYLElBRWpDMlgsRUFBYVksWUFBYyxTQUFVM1MsR0FDakMsT0FBTyxJQUFJK1IsRUFBYSxTQUFLbk4sRUFBVzVFLElBRTVDK1IsRUFBYWEsZUFBaUIsV0FDMUIsT0FBT2IsRUFBYWMsc0JBRXhCZCxFQUFhYyxxQkFBdUIsSUFBSWQsRUFBYSxLQUM5Q0EsRUFsRFEsR0FxRFosU0FBU0csRUFBb0J0RixFQUFjcUYsR0FDOUMsSUFBSTdSLEVBQUkrQixFQUFJZ0MsRUFDUm9CLEVBQUtxSCxFQUFjYixFQUFPeEcsRUFBR3dHLEtBQU0zUixFQUFRbUwsRUFBR25MLE1BQU8rRCxFQUFRb0gsRUFBR3BILE1BQ3BFLEdBQW9CLGlCQUFUNE4sRUFDUCxNQUFNLElBQUl0USxVQUFVLHdDQUVmLE1BQVRzUSxFQUF3QyxRQUF4QjNMLEVBQUs2UixFQUFTelYsWUFBeUIsSUFBUDRELEdBQXlCQSxFQUFHOUcsS0FBSzJZLEVBQVU3WCxHQUFrQixNQUFUMlIsRUFBeUMsUUFBekI1SixFQUFLOFAsRUFBUzlULGFBQTBCLElBQVBnRSxHQUF5QkEsRUFBRzdJLEtBQUsyWSxFQUFVOVQsR0FBc0MsUUFBNUJnRyxFQUFLOE4sRUFBUzdRLGdCQUE2QixJQUFQK0MsR0FBeUJBLEVBQUc3SyxLQUFLMlksSyw2QkNyRW5SLDZEQUdPLFNBQVN2VCxJQUVaLElBREEsSUFBSWlHLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLE9BQU8sY0FBWSxZQUFLc0IsRUFBTSxZQUFhQSxPLGNDZS9DLElBQUlNLEVBQVUxSixNQUFNMEosUUFFcEIvTCxFQUFPRCxRQUFVZ00sRyw2QkN6QmpCLDZIQU9XNk4sRUFBZSxhQUFpQixTQUFVbFQsR0FDakQsT0FBTyxTQUEwQm1ULFFBQ2hCLElBQVRBLElBQW1CQSxFQUFPLE1BQzlCblQsRUFBT2hFLE1BQ1BBLEtBQUsyTyxRQUFVLHVCQUNmM08sS0FBS2xDLEtBQU8sZUFDWmtDLEtBQUttWCxLQUFPQSxNQUdiLFNBQVNuQyxFQUFRcEYsRUFBUXdILEdBQzVCLElBQUk1UyxFQUFNLFlBQVlvTCxHQUFVLENBQUV5SCxNQUFPekgsR0FBNkIsaUJBQVhBLEVBQXNCLENBQUUwSCxLQUFNMUgsR0FBV0EsRUFBU3lILEVBQVE3UyxFQUFHNlMsTUFBT0MsRUFBTzlTLEVBQUc4UyxLQUFNL1EsRUFBSy9CLEVBQUcrUyxLQUFNQyxPQUFlLElBQVBqUixFQUFnQmtSLEVBQXNCbFIsRUFBSWdDLEVBQUsvRCxFQUFHK0ksVUFBV0EsT0FBbUIsSUFBUGhGLEVBQWdCNk8sUUFBbURBLEVBQWUsSUFBaUI3TyxFQUFJb0IsRUFBS25GLEVBQUdrVCxLQUFNQSxPQUFjLElBQVAvTixFQUFnQixLQUFPQSxFQUNqWSxHQUFhLE1BQVQwTixHQUF5QixNQUFSQyxFQUNqQixNQUFNLElBQUl6WCxVQUFVLHdCQUV4QixPQUFPLGFBQVEsU0FBVStFLEVBQVFRLEdBQzdCLElBQUl1UyxFQUNBQyxFQUNBQyxFQUFZLEtBQ1o3RixFQUFPLEVBQ1A4RixFQUFhLFNBQVVySyxHQUN2Qm1LLEVBQW9CLFlBQWdCeFMsRUFBWW1JLEdBQVcsV0FDdkQsSUFDSW9LLEVBQTJCclQsY0FDM0IsWUFBVWtULEVBQU0sQ0FDWkUsS0FBTUEsRUFDTkcsVUFBV0EsRUFDWDdGLEtBQU1BLEtBQ04xTSxVQUFVRixHQUVsQixNQUFPaEIsR0FDSGdCLEVBQVc3QyxNQUFNNkIsTUFFdEJxSixJQUVQa0ssRUFBNkIvUyxFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUN6Rm9aLFNBQXNFQSxFQUFrQnRULGNBQ3hGME4sSUFDQTVNLEVBQVd4RSxLQUFNaVgsRUFBWXJaLEdBQzdCOFksRUFBTyxHQUFLUSxFQUFXUixVQUN4QnRPLE9BQVdBLEdBQVcsWUFDZjRPLGFBQTZELEVBQVNBLEVBQWtCbFQsU0FDMUZrVCxTQUFzRUEsRUFBa0J0VCxjQUU1RnVULEVBQVksVUFFZjdGLEdBQVE4RixFQUFvQixNQUFUVCxFQUFrQyxpQkFBVkEsRUFBcUJBLEdBQVNBLEVBQVE5SixFQUFVMEIsTUFBU3FJLE1BRzdHLFNBQVNHLEVBQW9CTixHQUN6QixNQUFNLElBQUlELEVBQWFDLEssNkJDeEQzQiw4Q0FDTyxTQUFTWSxJQUNaLE9BQU8sWUFBUyxLLDZCQ0ZwQiw2REFHTyxTQUFTQyxFQUFVQyxFQUF5QkMsR0FDL0MsSUFBSUMsRUFBaUIsWUFBV0YsR0FBMkJBLEVBQTBCLFdBQWMsT0FBT0EsR0FDMUcsT0FBSSxZQUFXQyxHQUNKLFlBQVFBLEVBQVUsQ0FDckJFLFVBQVdELElBR1osU0FBVXZULEdBQVUsT0FBTyxJQUFJLElBQXNCQSxFQUFRdVQsTSwrRkNOeEUsSUFBSUUsRUFBaUIsQ0FDakJELFVBQVcsV0FBYyxPQUFPLElBQUl0USxFQUFBLElBRWpDLFNBQVN3USxFQUFRSixFQUFVdEksUUFDZixJQUFYQSxJQUFxQkEsRUFBU3lJLEdBQ2xDLElBQUlELEVBQVl4SSxFQUFPd0ksVUFDdkIsT0FBTyxhQUFRLFNBQVV4VCxFQUFRUSxHQUM3QixJQ1Z5Qm1ULEVEVXJCblEsRUFBVWdRLElBQ2QsT0FBQW5ULEVBQUEsR0FBVWlULEdDWGVLLEVEV1duUSxFQ1ZqQyxJQUFJekIsRUFBQSxHQUFXLFNBQVV2QixHQUFjLE9BQU9tVCxFQUFhalQsVUFBVUYsU0RVekJFLFVBQVVGLEdBQ3pEQSxFQUFXNkIsSUFBSXJDLEVBQU9VLFVBQVU4QyxTLDZCRWJ4QyxrQ0FBTyxJQUFJdEIsRUFBc0QsbUJBQVh4SSxRQUF5QkEsT0FBT3dJLFlBQWUsZ0IsNkJDQXJHLCtFQUNPLFNBQVNTLElBRVosSUFEQSxJQUFJaVIsRUFBTSxHQUNEL1EsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDK1EsRUFBSS9RLEdBQU03RSxVQUFVNkUsR0FFeEIsT0FBT2dSLEVBQWNELEdBRWxCLFNBQVNDLEVBQWNELEdBQzFCLE9BQW1CLElBQWZBLEVBQUl0VyxPQUNHLElBRVEsSUFBZnNXLEVBQUl0VyxPQUNHc1csRUFBSSxHQUVSLFNBQWV0VCxHQUNsQixPQUFPc1QsRUFBSXJILFFBQU8sU0FBVXVILEVBQU1qSixHQUFNLE9BQU9BLEVBQUdpSixLQUFVeFQsTSw2QkNoQnBFLGtGQU1JeVQsRUFBeUIsU0FBVTNVLEdBRW5DLFNBQVMyVSxFQUFzQi9ULEVBQVF1VCxHQUNuQyxJQUFJalUsRUFBUUYsRUFBT3RHLEtBQUtzQyxPQUFTQSxLQVNqQyxPQVJBa0UsRUFBTVUsT0FBU0EsRUFDZlYsRUFBTWlVLGVBQWlCQSxFQUN2QmpVLEVBQU0wVSxTQUFXLEtBQ2pCMVUsRUFBTTJVLFVBQVksRUFDbEIzVSxFQUFNNFUsWUFBYyxLQUNoQixZQUFRbFUsS0FDUlYsRUFBTVcsS0FBT0QsRUFBT0MsTUFFakJYLEVBeUNYLE9BcERBLFlBQVV5VSxFQUF1QjNVLEdBYWpDMlUsRUFBc0J4WixVQUFVeUgsV0FBYSxTQUFVeEIsR0FDbkQsT0FBT3BGLEtBQUsrWSxhQUFhelQsVUFBVUYsSUFFdkN1VCxFQUFzQnhaLFVBQVU0WixXQUFhLFdBQ3pDLElBQUkzUSxFQUFVcEksS0FBSzRZLFNBSW5CLE9BSEt4USxJQUFXQSxFQUFRSCxZQUNwQmpJLEtBQUs0WSxTQUFXNVksS0FBS21ZLGtCQUVsQm5ZLEtBQUs0WSxVQUVoQkQsRUFBc0J4WixVQUFVNlosVUFBWSxXQUN4Q2haLEtBQUs2WSxVQUFZLEVBQ2pCLElBQUlDLEVBQWM5WSxLQUFLOFksWUFDdkI5WSxLQUFLNFksU0FBVzVZLEtBQUs4WSxZQUFjLEtBQ25DQSxTQUEwREEsRUFBWXhVLGVBRTFFcVUsRUFBc0J4WixVQUFVbVosUUFBVSxXQUN0QyxJQUFJcFUsRUFBUWxFLEtBQ1JpWixFQUFhalosS0FBSzhZLFlBQ3RCLElBQUtHLEVBQVksQ0FDYkEsRUFBYWpaLEtBQUs4WSxZQUFjLElBQUksSUFDcEMsSUFBSUksRUFBWWxaLEtBQUsrWSxhQUNyQkUsRUFBV2hTLElBQUlqSCxLQUFLNEUsT0FBT1UsVUFBVSxZQUF5QjRULE9BQVdsUSxHQUFXLFdBQ2hGOUUsRUFBTThVLFlBQ05FLEVBQVUxVCxjQUNYLFNBQVVwQixHQUNURixFQUFNOFUsWUFDTkUsRUFBVTNXLE1BQU02QixNQUNqQixXQUFjLE9BQU9GLEVBQU04VSxpQkFDMUJDLEVBQVd2VSxTQUNYMUUsS0FBSzhZLFlBQWMsS0FDbkJHLEVBQWEsSUFBYWpNLE9BR2xDLE9BQU9pTSxHQUVYTixFQUFzQnhaLFVBQVVnYSxTQUFXLFdBQ3ZDLE9BQU8sY0FBc0JuWixPQUUxQjJZLEVBckRpQixDQXNEMUIsTSw2QkM1REYsNkNBQ08sU0FBU1MsRUFBWTVhLEdBQ3hCLE9BQU9BLEdBQVMsWUFBV0EsRUFBTW9QLFksNkJDRnJDLGdGQUNJeUwsRUFBVSxLQUNQLFNBQVNDLEVBQWFDLEdBQ3pCLEdBQUksSUFBT3hKLHNDQUF1QyxDQUM5QyxJQUFJeUosR0FBVUgsRUFLZCxHQUpJRyxJQUNBSCxFQUFVLENBQUVJLGFBQWEsRUFBT2xYLE1BQU8sT0FFM0NnWCxJQUNJQyxFQUFRLENBQ1IsSUFBSWhWLEVBQUs2VSxFQUFTSSxFQUFjalYsRUFBR2lWLFlBQWFsWCxFQUFRaUMsRUFBR2pDLE1BRTNELEdBREE4VyxFQUFVLEtBQ05JLEVBQ0EsTUFBTWxYLFFBS2RnWCxJQUdELFNBQVNHLEVBQWF0VixHQUNyQixJQUFPMkwsdUNBQXlDc0osSUFDaERBLEVBQVFJLGFBQWMsRUFDdEJKLEVBQVE5VyxNQUFRNkIsSyw2QkN0QnhCL0csRUFBUXNCLFlBQWEsRUFDckIsSUFBSWdiLEVBQWEsQ0FBQyxjQUFlLFdBQVksYUFBYyxnQkFBaUIsVUFBVyxPQUFRLFNBQVUsU0FFekcsU0FBU0MsRUFBVWpMLEVBQVNrTCxHQUMxQixJQUFJQyxFQUFNRCxHQUFRQSxFQUFLQyxJQUNuQkMsT0FBTy9RLEVBQ1BnUixPQUFnQmhSLEVBQ2hCaVIsT0FBU2pSLEVBQ1RrUixPQUFZbFIsRUFFWjhRLElBQ0ZDLEVBQU9ELEVBQUlLLE1BQU1KLEtBQ2pCQyxFQUFnQkYsRUFBSU0sSUFBSUwsS0FDeEJFLEVBQVNILEVBQUlLLE1BQU1GLE9BQ25CQyxFQUFZSixFQUFJTSxJQUFJSCxPQUVwQnRMLEdBQVcsTUFBUW9MLEVBQU8sSUFBTUUsR0FNbEMsSUFIQSxJQUFJSSxFQUFNL0ssTUFBTW5RLFVBQVVjLFlBQVl2QyxLQUFLc0MsS0FBTTJPLEdBR3hDMkwsRUFBTSxFQUFHQSxFQUFNWCxFQUFXelgsT0FBUW9ZLElBQ3pDdGEsS0FBSzJaLEVBQVdXLElBQVFELEVBQUlWLEVBQVdXLElBSXJDaEwsTUFBTWlMLG1CQUNSakwsTUFBTWlMLGtCQUFrQnZhLEtBQU00WixHQUdoQyxJQUNNRSxJQUNGOVosS0FBS3dhLFdBQWFULEVBQ2xCL1osS0FBS2dhLGNBQWdCQSxFQUlqQi9iLE9BQU9DLGdCQUNURCxPQUFPQyxlQUFlOEIsS0FBTSxTQUFVLENBQ3BDeEIsTUFBT3liLEVBQ1A5YixZQUFZLElBRWRGLE9BQU9DLGVBQWU4QixLQUFNLFlBQWEsQ0FDdkN4QixNQUFPMGIsRUFDUC9iLFlBQVksTUFHZDZCLEtBQUtpYSxPQUFTQSxFQUNkamEsS0FBS2thLFVBQVlBLElBR3JCLE1BQU9PLEtBS1hiLEVBQVV6YSxVQUFZLElBQUltUSxNQUUxQmpTLEVBQWlCLFFBQUl1YyxFQUNyQnRjLEVBQU9ELFFBQVVBLEVBQWlCLFMsNkJDOURsQyxxREFFTyxTQUFTcWQsRUFBVTNNLEVBQVNDLEdBQy9CLE9BQU8sWUFBV0EsR0FBa0IsWUFBU0QsRUFBU0MsRUFBZ0IsR0FBSyxZQUFTRCxFQUFTLEssNkJDSGpHLHNGQUVPLFNBQVM0TSxFQUFtQzFVLEdBQy9DLE9BQU8sWUFBaUJqRyxLQUFNNEMsV0FBVyxXQUNyQyxJQUFJZ1ksRUFBUXBXLEVBQUloRyxFQUNoQixPQUFPLFlBQVl3QixNQUFNLFNBQVV1RyxHQUMvQixPQUFRQSxFQUFHOUUsT0FDUCxLQUFLLEVBQ0RtWixFQUFTM1UsRUFBZTRVLFlBQ3hCdFUsRUFBRzlFLE1BQVEsRUFDZixLQUFLLEVBQ0Q4RSxFQUFHNUUsS0FBS1EsS0FBSyxDQUFDLEVBQUcsQ0FBRSxFQUFHLEtBQ3RCb0UsRUFBRzlFLE1BQVEsRUFDZixLQUFLLEVBRUQsTUFBTyxDQUFDLEVBQUcsWUFBUW1aLEVBQU9FLFNBQzlCLEtBQUssRUFFRCxPQURBdFcsRUFBSytCLEVBQUc3RSxPQUFRbEQsRUFBUWdHLEVBQUdoRyxNQUFjZ0csRUFBR3hELEtBRXJDLENBQUMsRUFBRyxpQkFBUSxJQURELENBQUMsRUFBRyxHQUUxQixLQUFLLEVBQUcsTUFBTyxDQUFDLEVBQUd1RixFQUFHN0UsUUFDdEIsS0FBSyxFQUFHLE1BQU8sQ0FBQyxFQUFHLFlBQVFsRCxJQUMzQixLQUFLLEVBQUcsTUFBTyxDQUFDLEVBQUcrSCxFQUFHN0UsUUFDdEIsS0FBSyxFQUVELE9BREE2RSxFQUFHN0UsT0FDSSxDQUFDLEVBQUcsR0FDZixLQUFLLEVBQUcsTUFBTyxDQUFDLEVBQUcsSUFDbkIsS0FBSyxFQUVELE9BREFrWixFQUFPRyxjQUNBLENBQUMsR0FDWixLQUFLLEdBQUksTUFBTyxDQUFDLFVBSzFCLFNBQVNDLEVBQXFCN1YsR0FDakMsT0FBTyxZQUFXQSxhQUFpQyxFQUFTQSxFQUFJMFYsYSw2QkNsQ3BFdmQsRUFBT0QsUUFBVSxTQUFVNGQsRUFBS0MsR0FTOUIsT0FSS0EsSUFFSEEsRUFBVSxJQU1PLGlCQUZuQkQsRUFBTUEsR0FBT0EsRUFBSXRjLFdBQWFzYyxFQUFJRSxRQUFVRixHQUduQ0EsR0FJTCxlQUFlalIsS0FBS2lSLEtBRXRCQSxFQUFNQSxFQUFJcFksTUFBTSxHQUFJLElBR2xCcVksRUFBUUUsT0FFVkgsR0FBT0MsRUFBUUUsTUFLYixjQUFjcFIsS0FBS2lSLElBQVFDLEVBQVFHLFdBQzlCLElBQUt2WSxPQUFPbVksRUFBSXBJLFFBQVEsS0FBTSxPQUFPQSxRQUFRLE1BQU8sT0FBUSxLQUc5RG9JLEssZ0JDOUJUM2QsRUFBT0QsUUFBVSxFQUFRLEtBQTBDLFMsZ0JDRm5FLElBQUlpZSxFQUFlLEVBQVEsS0FDdkJDLEVBQVcsRUFBUSxLQWV2QmplLEVBQU9ELFFBTFAsU0FBbUI0QixFQUFRSCxHQUN6QixJQUFJTixFQUFRK2MsRUFBU3RjLEVBQVFILEdBQzdCLE9BQU93YyxFQUFhOWMsR0FBU0EsT0FBUXdLLEksNkJDYnZDLG9EQUVPLFNBQVNtUSxJQUNaLE9BQU8sYUFBUSxTQUFVdlUsRUFBUVEsR0FDN0IsSUFBSTZULEVBQWEsS0FDakJyVSxFQUFPaVUsWUFDUCxJQUFJMkMsRUFBYSxZQUF5QnBXLE9BQVk0RCxPQUFXQSxPQUFXQSxHQUFXLFdBQ25GLElBQUtwRSxHQUFVQSxFQUFPaVUsV0FBYSxHQUFLLElBQU1qVSxFQUFPaVUsVUFDakRJLEVBQWEsU0FEakIsQ0FJQSxJQUFJd0MsRUFBbUI3VyxFQUFPa1UsWUFDMUI0QyxFQUFPekMsRUFDWEEsRUFBYSxNQUNUd0MsR0FBc0JDLEdBQVFELElBQXFCQyxHQUNuREQsRUFBaUJuWCxjQUVyQmMsRUFBV2Qsa0JBRWZNLEVBQU9VLFVBQVVrVyxHQUNaQSxFQUFXOVcsU0FDWnVVLEVBQWFyVSxFQUFPMFQsZ0IsNkJDckJoQywyREFHTyxTQUFTcUQsRUFBTUMsR0FDbEIsT0FBTyxhQUFRLFNBQVVoWCxFQUFRUSxHQUM3QixJQUFJNE8sR0FBVyxFQUNYNkQsRUFBWSxLQUNaZ0UsRUFBcUIsS0FDckIxSixHQUFhLEVBQ2IySixFQUFjLFdBR2QsR0FGQUQsU0FBd0VBLEVBQW1CdlgsY0FDM0Z1WCxFQUFxQixLQUNqQjdILEVBQVUsQ0FDVkEsR0FBVyxFQUNYLElBQUl4VixFQUFRcVosRUFDWkEsRUFBWSxLQUNaelMsRUFBV3hFLEtBQUtwQyxHQUVwQjJULEdBQWMvTSxFQUFXSSxZQUV6QnVXLEVBQWtCLFdBQ2xCRixFQUFxQixLQUNyQjFKLEdBQWMvTSxFQUFXSSxZQUU3QlosRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUR3VixHQUFXLEVBQ1g2RCxFQUFZclosRUFDUHFkLEdBQ0QsWUFBVUQsRUFBaUJwZCxJQUFROEcsVUFBV3VXLEVBQXFCLFlBQXlCelcsRUFBWTBXLEVBQWFDLE9BRTFILFdBQ0M1SixHQUFhLElBQ1g2QixJQUFhNkgsR0FBc0JBLEVBQW1CblgsU0FBV1UsRUFBV0ksb0IsNkJDaEMxRix1REFFTyxTQUFTd1csRUFBaUJqTyxHQUM3QixPQUFPLFlBQWlCLElBQWVBLEssNkJDSDNDLHFEQUVJa08sRUFBYSxTQUFVcFQsRUFBS3JLLEdBQVMsT0FBUXFLLEVBQUkxRyxLQUFLM0QsR0FBUXFLLEdBQzNELFNBQVNxVCxJQUNaLE9BQU8sYUFBUSxTQUFVdFgsRUFBUVEsR0FDN0IsWUFBTzZXLEVBQVksR0FBbkIsQ0FBdUJyWCxHQUFRVSxVQUFVRixRLDZCQ0xqRCxxRkFNTyxTQUFTK1csRUFBVUMsRUFBdUJDLEdBQzdDLE9BQUlBLEVBQ08sU0FBVXpYLEdBQ2IsT0FBTyxZQUFPeVgsRUFBa0I5VSxLQUFLLFlBQUssR0FBSSxlQUFtQjNDLEVBQU8yQyxLQUFLNFUsRUFBVUMsTUFHeEYsYUFBUyxTQUFVNWQsRUFBTzhQLEdBQVMsT0FBTyxZQUFVOE4sRUFBc0I1ZCxFQUFPOFAsSUFBUS9HLEtBQUssWUFBSyxHQUFJLFlBQU0vSSxTLDZCQ1p4SCwyREFHTyxTQUFTOGQsSUFDWixPQUFPLGFBQVEsU0FBVTFYLEVBQVFRLEdBQzdCUixFQUFPVSxVQUFVLFlBQXlCRixFQUFZLFcsNkJDTDlELDhDQUNPLFNBQVNtWCxFQUFNL2QsR0FDbEIsT0FBTyxhQUFJLFdBQWMsT0FBT0EsTyw2QkNGcEMsMkRBR08sU0FBU2dlLEVBQXFCQyxFQUFZQyxHQUc3QyxZQUZvQixJQUFoQkEsSUFBMEJBLEVBQWMsS0FDNUNELEVBQWFBLFFBQStDQSxFQUFhRSxFQUNsRSxhQUFRLFNBQVUvWCxFQUFRUSxHQUM3QixJQUFJd1gsRUFDQXZGLEdBQVEsRUFDWnpTLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQzVELElBQUlxZSxFQUFhSCxFQUFZbGUsSUFDekI2WSxHQUFVb0YsRUFBV0csRUFBYUMsS0FDbEN4RixHQUFRLEVBQ1J1RixFQUFjQyxFQUNkelgsRUFBV3hFLEtBQUtwQyxXQUtoQyxTQUFTbWUsRUFBZXhaLEVBQUczRCxHQUN2QixPQUFPMkQsSUFBTTNELEksNkJDcEJqQixxREFFTyxTQUFTc2QsSUFDWixPQUFPLFlBQVcsTyw2QkNIdEIsbUVBSU8sU0FBU0MsRUFBV2hQLEVBQVNDLEdBQ2hDLE9BQUlBLEVBQ08sU0FBVXBKLEdBQ2IsT0FBT0EsRUFBTzJDLEtBQUt3VixHQUFXLFNBQVU1WixFQUFHNUYsR0FBSyxPQUFPLFlBQVV3USxFQUFRNUssRUFBRzVGLElBQUlnSyxLQUFLLGFBQUksU0FBVS9ILEVBQUcyTyxHQUFNLE9BQU9ILEVBQWU3SyxFQUFHM0QsRUFBR2pDLEVBQUc0USxZQUc1SSxhQUFRLFNBQVV2SixFQUFRUSxHQUM3QixJQUFJa0osRUFBUSxFQUNSME8sRUFBVyxLQUNYN0ssR0FBYSxFQUNqQnZOLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTZYLEdBQ3ZERCxJQUNEQSxFQUFXLFlBQXlCNVgsT0FBWTRELEdBQVcsV0FDdkRnVSxFQUFXLEtBQ1g3SyxHQUFjL00sRUFBV0ksY0FFN0IsWUFBVXVJLEVBQVFrUCxFQUFZM08sTUFBVWhKLFVBQVUwWCxPQUV2RCxXQUNDN0ssR0FBYSxHQUNaNkssR0FBWTVYLEVBQVdJLG9CLDZCQ3hCcEMsc0ZBRU8sU0FBUzBYLEVBQUs3TyxFQUFXbE8sR0FDNUIsT0FBTyxZQUFRZ2QsRUFBVzlPLEVBQVdsTyxFQUFTLFVBRTNDLFNBQVNnZCxFQUFXOU8sRUFBV2xPLEVBQVNpZCxHQUMzQyxJQUFJQyxFQUFxQixVQUFURCxFQUNoQixPQUFPLFNBQVV4WSxFQUFRUSxHQUNyQixJQUFJa0osRUFBUSxFQUNaMUosRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQsSUFBSWpCLEVBQUkrUSxJQUNKRCxFQUFVM1EsS0FBS3lDLEVBQVMzQixFQUFPakIsRUFBR3FILEtBQ2xDUSxFQUFXeEUsS0FBS3ljLEVBQVk5ZixFQUFJaUIsR0FDaEM0RyxFQUFXSSxlQUVoQixXQUNDSixFQUFXeEUsS0FBS3ljLEdBQWEsT0FBSXJVLEdBQ2pDNUQsRUFBV0ksa0IsNkJDakJ2QixtRUFJTyxTQUFTOFgsRUFBU3ZMLEdBQ3JCLE9BQU9BLEdBQVMsRUFDVixXQUFjLE9BQU8sS0FDckIsYUFBUSxTQUFVbk4sRUFBUVEsR0FDeEIsSUFBSW1ZLEVBQVMsR0FDYjNZLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQzVEK2UsRUFBT3BiLEtBQUszRCxHQUNadVQsRUFBUXdMLEVBQU9yYixRQUFVcWIsRUFBT2hhLFdBQ2pDLFdBQ0MsSUFBSXFDLEVBQUtwQixFQUNULElBQ0ksSUFBSyxJQUFJZ1osRUFBVyxZQUFTRCxHQUFTRSxFQUFhRCxFQUFTNWMsUUFBUzZjLEVBQVd6YyxLQUFNeWMsRUFBYUQsRUFBUzVjLE9BQVEsQ0FDaEgsSUFBSXBDLEVBQVFpZixFQUFXamYsTUFDdkI0RyxFQUFXeEUsS0FBS3BDLElBR3hCLE1BQU91SCxHQUFTSCxFQUFNLENBQUVyRCxNQUFPd0QsR0FDL0IsUUFDSSxJQUNRMFgsSUFBZUEsRUFBV3pjLE9BQVN3RCxFQUFLZ1osRUFBU3hYLFNBQVN4QixFQUFHOUcsS0FBSzhmLEdBRTFFLFFBQVUsR0FBSTVYLEVBQUssTUFBTUEsRUFBSXJELE9BRWpDNkMsRUFBV0ksa0JBQ1p3RCxHQUFXLFdBQ1Z1VSxFQUFTLGMsNkJDN0J6QixvRUFJTyxTQUFTRyxJQUVaLElBREEsSUFBSUMsRUFBZSxHQUNWbFcsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDa1csRUFBYWxXLEdBQU03RSxVQUFVNkUsR0FFakMsT0FBUWtXLEVBQWF6YixPQUVmLGFBQVEsU0FBVTBDLEVBQVFRLEdBQ3hCLFlBQVMsWUFBYyxDQUFDUixHQUFTLFlBQU8rWSxJQUF4QyxDQUF3RHZZLE1BRjFELE0sNkJDVlYsa0VBSU8sU0FBU3dZLEVBQU9DLEdBQ25CLE9BQU8sYUFBUSxTQUFValosRUFBUVEsR0FDN0IsSUFBSTRPLEdBQVcsRUFDWDZELEVBQVksS0FDaEJqVCxFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RHdWLEdBQVcsRUFDWDZELEVBQVlyWixNQUVoQixZQUFVcWYsR0FBVXZZLFVBQVUsWUFBeUJGLEdBQVksV0FDL0QsR0FBSTRPLEVBQVUsQ0FDVkEsR0FBVyxFQUNYLElBQUl4VixFQUFRcVosRUFDWkEsRUFBWSxLQUNaelMsRUFBV3hFLEtBQUtwQyxNQUVyQixXLDZCQ25CWCwwRUFLTyxTQUFTc2YsRUFBTTVDLFFBQ0YsSUFBWkEsSUFBc0JBLEVBQVUsSUFDcEMsSUFBSTFXLEVBQUswVyxFQUFROUMsVUFBV0EsT0FBbUIsSUFBUDVULEVBQWdCLFdBQWMsT0FBTyxJQUFJLEtBQWVBLEVBQUkrQixFQUFLMlUsRUFBUTZDLGFBQWNBLE9BQXNCLElBQVB4WCxHQUF1QkEsRUFBSWdDLEVBQUsyUyxFQUFROEMsZ0JBQWlCQSxPQUF5QixJQUFQelYsR0FBdUJBLEVBQUlvQixFQUFLdVIsRUFBUStDLG9CQUFxQkEsT0FBNkIsSUFBUHRVLEdBQXVCQSxFQUNuVSxPQUFPLFNBQVV1VSxHQUNiLElBQUlqRixFQUNBa0YsRUFDQS9WLEVBQ0ErUSxFQUFXLEVBQ1hpRixHQUFlLEVBQ2ZDLEdBQWEsRUFDYkMsRUFBYyxXQUNkSCxTQUFrRUEsRUFBZ0I3WixjQUNsRjZaLE9BQWtCblYsR0FFbEJ1VixFQUFRLFdBQ1JELElBQ0FyRixFQUFhN1EsT0FBVVksRUFDdkJvVixFQUFlQyxHQUFhLEdBRTVCRyxFQUFzQixXQUN0QixJQUFJOUMsRUFBT3pDLEVBQ1hzRixJQUNBN0MsU0FBNENBLEVBQUtwWCxlQUVyRCxPQUFPLGFBQVEsU0FBVU0sRUFBUVEsR0FDN0IrVCxJQUNLa0YsR0FBZUQsR0FDaEJFLElBRUosSUFBSUcsRUFBUXJXLEVBQVVBLFFBQXlDQSxFQUFVZ1EsSUFDekVoVCxFQUFXNkIsS0FBSSxXQUVNLE1BRGpCa1MsR0FDdUJrRixHQUFlRCxJQUNsQ0QsRUFBa0JPLEVBQVlGLEVBQXFCUCxPQUczRFEsRUFBS25aLFVBQVVGLElBQ1Y2VCxHQUNERSxFQUFXLElBQ1hGLEVBQWEsSUFBSSxJQUFlLENBQzVCclksS0FBTSxTQUFVcEMsR0FBUyxPQUFPaWdCLEVBQUs3ZCxLQUFLcEMsSUFDMUMrRCxNQUFPLFNBQVU2QixHQUNiaWEsR0FBYSxFQUNiQyxJQUNBSCxFQUFrQk8sRUFBWUgsRUFBT1IsRUFBYzNaLEdBQ25EcWEsRUFBS2xjLE1BQU02QixJQUVmb0IsU0FBVSxXQUNONFksR0FBZSxFQUNmRSxJQUNBSCxFQUFrQk8sRUFBWUgsRUFBT1AsR0FDckNTLEVBQUtqWixjQUdiLFlBQVVaLEdBQVFVLFVBQVUyVCxNQTlCN0IsQ0FnQ0ppRixJQUdYLFNBQVNRLEVBQVlILEVBQU9JLEdBRXhCLElBREEsSUFBSTVWLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixFQUFLLEdBQUs3RSxVQUFVNkUsR0FFN0IsSUFBVyxJQUFQa1gsR0FJSixJQUFXLElBQVBBLEVBQUosQ0FHQSxJQUFJQyxFQUFlLElBQUksSUFBZSxDQUNsQ2hlLEtBQU0sV0FDRmdlLEVBQWF0YSxjQUNiaWEsT0FHUixPQUFPLFlBQVVJLEVBQUd6ZCxXQUFNLEVBQVEsWUFBYyxHQUFJLFlBQU82SCxNQUFTekQsVUFBVXNaLFNBWjFFTCxNLDZCQ3RFUiwyREFHTyxTQUFTTSxFQUFTakQsRUFBa0JoTSxHQUN2QyxPQUFPLGFBQVEsU0FBVWhMLEVBQVFRLEdBQzdCLElBQUlaLEVBQUtvTCxRQUF1Q0EsRUFBUyxHQUFJckosRUFBSy9CLEVBQUdzYSxRQUFTQSxPQUFpQixJQUFQdlksR0FBdUJBLEVBQUlnQyxFQUFLL0QsRUFBR3VhLFNBQVVBLE9BQWtCLElBQVB4VyxHQUF3QkEsRUFDcEt5TCxHQUFXLEVBQ1hnTCxFQUFZLEtBQ1pDLEVBQVksS0FDWjlNLEdBQWEsRUFDYitNLEVBQWdCLFdBQ2hCRCxTQUFzREEsRUFBVTNhLGNBQ2hFMmEsRUFBWSxLQUNSRixJQUNBSSxJQUNBaE4sR0FBYy9NLEVBQVdJLGFBRzdCNFosRUFBb0IsV0FDcEJILEVBQVksS0FDWjlNLEdBQWMvTSxFQUFXSSxZQUV6QjZaLEVBQWdCLFNBQVU3Z0IsR0FDMUIsT0FBUXlnQixFQUFZLFlBQVVyRCxFQUFpQnBkLElBQVE4RyxVQUFVLFlBQXlCRixFQUFZOFosRUFBZUUsS0FFckhELEVBQU8sV0FDUCxHQUFJbkwsRUFBVSxDQUNWQSxHQUFXLEVBQ1gsSUFBSXhWLEVBQVF3Z0IsRUFDWkEsRUFBWSxLQUNaNVosRUFBV3hFLEtBQUtwQyxJQUNmMlQsR0FBY2tOLEVBQWM3Z0IsS0FHckNvRyxFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RHdWLEdBQVcsRUFDWGdMLEVBQVl4Z0IsSUFDVnlnQixHQUFjQSxFQUFVdmEsVUFBWW9hLEVBQVVLLElBQVNFLEVBQWM3Z0IsT0FDeEUsV0FDQzJULEdBQWEsS0FDWDRNLEdBQVkvSyxHQUFZaUwsSUFBY0EsRUFBVXZhLFNBQVdVLEVBQVdJLG9CLDZCQ3hDcEYsNERBR0k4WixFQUFpQixTQUFVdGIsR0FFM0IsU0FBU3NiLEVBQWNDLEVBQWFDLEVBQWFDLFFBQ3pCLElBQWhCRixJQUEwQkEsRUFBY3JSLFVBQ3hCLElBQWhCc1IsSUFBMEJBLEVBQWN0UixVQUNqQixJQUF2QnVSLElBQWlDQSxFQUFxQixLQUMxRCxJQUFJdmIsRUFBUUYsRUFBT3RHLEtBQUtzQyxPQUFTQSxLQVNqQyxPQVJBa0UsRUFBTXFiLFlBQWNBLEVBQ3BCcmIsRUFBTXNiLFlBQWNBLEVBQ3BCdGIsRUFBTXViLG1CQUFxQkEsRUFDM0J2YixFQUFNd2IsUUFBVSxHQUNoQnhiLEVBQU15YixxQkFBc0IsRUFDNUJ6YixFQUFNeWIsb0JBQXNCSCxJQUFnQnRSLElBQzVDaEssRUFBTXFiLFlBQWNLLEtBQUtDLElBQUksRUFBR04sR0FDaENyYixFQUFNc2IsWUFBY0ksS0FBS0MsSUFBSSxFQUFHTCxHQUN6QnRiLEVBb0NYLE9BbERBLFlBQVVvYixFQUFldGIsR0FnQnpCc2IsRUFBY25nQixVQUFVeUIsS0FBTyxTQUFVcEMsR0FDckMsSUFBSWdHLEVBQUt4RSxLQUFNaUksRUFBWXpELEVBQUd5RCxVQUFXeVgsRUFBVWxiLEVBQUdrYixRQUFTQyxFQUFzQm5iLEVBQUdtYixvQkFBcUJGLEVBQXFCamIsRUFBR2liLG1CQUFvQkQsRUFBY2hiLEVBQUdnYixZQUNyS3ZYLElBQ0R5WCxFQUFRdmQsS0FBSzNELElBQ1ptaEIsR0FBdUJELEVBQVF2ZCxLQUFLc2QsRUFBbUJ4USxNQUFRdVEsSUFFcEV4ZixLQUFLOGYsY0FDTDliLEVBQU83RSxVQUFVeUIsS0FBS2xELEtBQUtzQyxLQUFNeEIsSUFFckM4Z0IsRUFBY25nQixVQUFVeUgsV0FBYSxTQUFVeEIsR0FDM0NwRixLQUFLc0ksaUJBQ0x0SSxLQUFLOGYsY0FJTCxJQUhBLElBQUlDLEVBQWUvZixLQUFLMEksZ0JBQWdCdEQsR0FDekJ1YSxFQUFOM2YsS0FBK0IyZixvQkFDcENLLEVBREtoZ0IsS0FBaUUwZixRQUN2RDdjLFFBQ1Z0RixFQUFJLEVBQUdBLEVBQUl5aUIsRUFBSzlkLFNBQVdrRCxFQUFXVixPQUFRbkgsR0FBS29pQixFQUFzQixFQUFJLEVBQ2xGdmEsRUFBV3hFLEtBQUtvZixFQUFLemlCLElBR3pCLE9BREF5QyxLQUFLeUksd0JBQXdCckQsR0FDdEIyYSxHQUVYVCxFQUFjbmdCLFVBQVUyZ0IsWUFBYyxXQUNsQyxJQUFlUCxFQUFOdmYsS0FBdUJ1ZixZQUFhRSxFQUFwQ3pmLEtBQTREeWYsbUJBQW9CQyxFQUFoRjFmLEtBQTZGMGYsUUFBU0MsRUFBdEczZixLQUErSDJmLG9CQUNwSU0sR0FBc0JOLEVBQXNCLEVBQUksR0FBS0osRUFFekQsR0FEQUEsRUFBY3JSLEtBQVkrUixFQUFxQlAsRUFBUXhkLFFBQVV3ZCxFQUFRalIsT0FBTyxFQUFHaVIsRUFBUXhkLE9BQVMrZCxJQUMvRk4sRUFBcUIsQ0FHdEIsSUFGQSxJQUFJMVEsRUFBTXdRLEVBQW1CeFEsTUFDekJyRyxFQUFPLEVBQ0ZyTCxFQUFJLEVBQUdBLEVBQUltaUIsRUFBUXhkLFFBQVV3ZCxFQUFRbmlCLElBQU0wUixFQUFLMVIsR0FBSyxFQUMxRHFMLEVBQU9yTCxFQUVYcUwsR0FBUThXLEVBQVFqUixPQUFPLEVBQUc3RixFQUFPLEtBR2xDMFcsRUFuRFMsQ0FvRGxCLE0sNkJDdkRGLDZDQUVJWSxFQUFnQixTQUFVbGMsR0FFMUIsU0FBU2tjLElBQ0wsSUFBSWhjLEVBQW1CLE9BQVhGLEdBQW1CQSxFQUFPOUMsTUFBTWxCLEtBQU00QyxZQUFjNUMsS0FJaEUsT0FIQWtFLEVBQU1pYyxPQUFTLEtBQ2ZqYyxFQUFNa2MsV0FBWSxFQUNsQmxjLEVBQU1tYyxhQUFjLEVBQ2JuYyxFQTBCWCxPQWhDQSxZQUFVZ2MsRUFBY2xjLEdBUXhCa2MsRUFBYS9nQixVQUFVc0osd0JBQTBCLFNBQVVyRCxHQUN2RCxJQUFJWixFQUFLeEUsS0FBTWtJLEVBQVcxRCxFQUFHMEQsU0FBVWtZLEVBQVk1YixFQUFHNGIsVUFBV0QsRUFBUzNiLEVBQUcyYixPQUFRaFksRUFBYzNELEVBQUcyRCxZQUFhRixFQUFZekQsRUFBR3lELFVBQVdvWSxFQUFjN2IsRUFBRzZiLFlBQzFKblksRUFDQTlDLEVBQVc3QyxNQUFNNEYsSUFFWkYsR0FBYW9ZLEtBQ2xCRCxHQUFhaGIsRUFBV3hFLEtBQUt1ZixHQUM3Qi9hLEVBQVdJLGFBR25CMGEsRUFBYS9nQixVQUFVeUIsS0FBTyxTQUFVcEMsR0FDL0J3QixLQUFLaUksWUFDTmpJLEtBQUttZ0IsT0FBUzNoQixFQUNkd0IsS0FBS29nQixXQUFZLElBR3pCRixFQUFhL2dCLFVBQVVxRyxTQUFXLFdBQzlCLElBQWU0YSxFQUFOcGdCLEtBQXFCb2dCLFVBQVdELEVBQWhDbmdCLEtBQTRDbWdCLE9BQTVDbmdCLEtBQXFFcWdCLGNBRTFFcmdCLEtBQUtxZ0IsYUFBYyxFQUNuQkQsR0FBYXBjLEVBQU83RSxVQUFVeUIsS0FBS2xELEtBQUtzQyxLQUFNbWdCLEdBQzlDbmMsRUFBTzdFLFVBQVVxRyxTQUFTOUgsS0FBS3NDLFFBR2hDa2dCLEVBakNRLENBRm5CLEtBb0NFLEksNkJDcENGLHFEQUVPLFNBQVNJLElBRVosSUFEQSxJQUFJdlgsRUFBTyxHQUNGdEIsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDc0IsRUFBS3RCLEdBQU03RSxVQUFVNkUsR0FFekIsSUFBSThGLEVBQVksWUFBYXhFLEdBQzdCLE9BQU8sWUFBS0EsRUFBTXdFLEssNkJDUnRCLDhJQVNPLFNBQVNnVCxJQUVaLElBREEsSUFBSXhYLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLElBQUk4RixFQUFZLFlBQWF4RSxHQUN6QmlGLEVBQWlCLFlBQWtCakYsR0FDbkN2RSxFQUFLLFlBQXFCdUUsR0FBT3lYLEVBQWNoYyxFQUFHdUUsS0FBTTBYLEVBQU9qYyxFQUFHaWMsS0FDdEUsR0FBMkIsSUFBdkJELEVBQVl0ZSxPQUNaLE9BQU8sWUFBSyxHQUFJcUwsR0FFcEIsSUFBSXhNLEVBQVMsSUFBSSxJQUFXMmYsRUFBa0JGLEVBQWFqVCxFQUFXa1QsRUFFOUQsU0FBVUUsR0FBVSxPQUFPLFlBQWFGLEVBQU1FLElBRTlDLE1BQ1IsT0FBTzNTLEVBQWlCak4sRUFBT3dHLEtBQUssWUFBaUJ5RyxJQUFtQmpOLEVBRXJFLFNBQVMyZixFQUFrQkYsRUFBYWpULEVBQVdxVCxHQUV0RCxZQUR1QixJQUFuQkEsSUFBNkJBLEVBQWlCLEtBQzNDLFNBQVV4YixHQUNieWIsRUFBY3RULEdBQVcsV0F5QnJCLElBeEJBLElBQUlyTCxFQUFTc2UsRUFBWXRlLE9BQ3JCeWUsRUFBUyxJQUFJaGhCLE1BQU11QyxHQUNuQjRlLEVBQVM1ZSxFQUNUNmUsRUFBdUI3ZSxFQUN2QjhlLEVBQVUsU0FBVXpqQixHQUNwQnNqQixFQUFjdFQsR0FBVyxXQUNyQixJQUFJM0ksRUFBUyxZQUFLNGIsRUFBWWpqQixHQUFJZ1EsR0FDOUIwVCxHQUFnQixFQUNwQnJjLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQzVEbWlCLEVBQU9wakIsR0FBS2lCLEVBQ1B5aUIsSUFDREEsR0FBZ0IsRUFDaEJGLEtBRUNBLEdBQ0QzYixFQUFXeEUsS0FBS2dnQixFQUFlRCxFQUFPOWQsYUFFM0MsYUFDUWllLEdBQ0gxYixFQUFXSSxpQkFHcEJKLElBRUU3SCxFQUFJLEVBQUdBLEVBQUkyRSxFQUFRM0UsSUFDeEJ5akIsRUFBUXpqQixLQUViNkgsSUFHWCxTQUFTeWIsRUFBY3RULEVBQVdtSCxFQUFTcUwsR0FDbkN4UyxFQUNBLFlBQWdCd1MsRUFBY3hTLEVBQVdtSCxHQUd6Q0EsTSw2QkNsRVIseUZBT08sU0FBU3dNLElBRVosSUFEQSxJQUFJblksRUFBTyxHQUNGdEIsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDc0IsRUFBS3RCLEdBQU03RSxVQUFVNkUsR0FFekIsSUFBSXVHLEVBQWlCLFlBQWtCakYsR0FDbkNtQyxFQUFVLFlBQWVuQyxHQUM3QixPQUFPbUMsRUFBUWhKLE9BQ1QsSUFBSSxLQUFXLFNBQVVrRCxHQUN2QixJQUFJK2IsRUFBVWpXLEVBQVFDLEtBQUksV0FBYyxNQUFPLE1BQzNDaVcsRUFBWWxXLEVBQVFDLEtBQUksV0FBYyxPQUFPLEtBQ2pEL0YsRUFBVzZCLEtBQUksV0FDWGthLEVBQVVDLEVBQVksUUFpQjFCLElBZkEsSUFBSUosRUFBVSxTQUFVSyxHQUNwQixZQUFVblcsRUFBUW1XLElBQWMvYixVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUVyRixHQURBMmlCLEVBQVFFLEdBQWFsZixLQUFLM0QsR0FDdEIyaUIsRUFBUUcsT0FBTSxTQUFVL0QsR0FBVSxPQUFPQSxFQUFPcmIsVUFBWSxDQUM1RCxJQUFJbkIsRUFBU29nQixFQUFRaFcsS0FBSSxTQUFVb1MsR0FBVSxPQUFPQSxFQUFPaGEsV0FDM0Q2QixFQUFXeEUsS0FBS29OLEVBQWlCQSxFQUFlOU0sV0FBTSxFQUFRLFlBQWMsR0FBSSxZQUFPSCxLQUFZQSxHQUMvRm9nQixFQUFRSSxNQUFLLFNBQVVoRSxFQUFRaGdCLEdBQUssT0FBUWdnQixFQUFPcmIsUUFBVWtmLEVBQVU3akIsT0FDdkU2SCxFQUFXSSxlQUdwQixXQUNDNGIsRUFBVUMsSUFBZSxHQUN4QkYsRUFBUUUsR0FBYW5mLFFBQVVrRCxFQUFXSSxnQkFHMUM2YixFQUFjLEdBQUlqYyxFQUFXVixRQUFVMmMsRUFBY25XLEVBQVFoSixPQUFRbWYsSUFDMUVMLEVBQVFLLEdBRVosT0FBTyxXQUNIRixFQUFVQyxFQUFZLFNBRzVCLE0sNkJDM0NWLDhDQUNXSSxFQUFzQixhQUFpQixTQUFVeGQsR0FDeEQsT0FBTyxTQUFpQ2lJLEdBQ3BDakksRUFBT2hFLE1BQ1BBLEtBQUsyTyxRQUFVMUMsRUFDVEEsRUFBTy9KLE9BQVMsNENBQThDK0osRUFBT2QsS0FBSSxTQUFVL0csRUFBSzdHLEdBQUssT0FBT0EsRUFBSSxFQUFJLEtBQU82RyxFQUFJMkYsY0FBZXNCLEtBQUssUUFDM0ksR0FDTnJMLEtBQUtsQyxLQUFPLHNCQUNaa0MsS0FBS2lNLE9BQVNBLE8sNkJDUnRCLGtDQUFPLElBQUl3VixFQUF3QixDQUMvQnhTLElBQUssV0FDRCxPQUFRd1MsRUFBc0J4TSxVQUFZeU0sTUFBTXpTLE9BRXBEZ0csY0FBVWpNLEksNkJDSmQsa0NBQU8sSUFBSTJZLEVBQWMsU0FBV2hhLEdBQUssT0FBT0EsR0FBeUIsaUJBQWJBLEVBQUV6RixRQUFvQyxtQkFBTnlGLEksNkJDQXJGLFNBQVNpYSxFQUFZcGpCLEdBQ3hCLE9BQU9BLGFBQWlCa2pCLE9BQVNHLE1BQU1yakIsR0FEM0MsbUMsNkJDQUEsNERBR08sU0FBU3NqQixFQUFlbGQsRUFBUVEsRUFBWTJJLEVBQVNFLEVBQVk4VCxFQUFjQyxFQUFRQyxFQUFtQkMsR0FDN0csSUFBSTNFLEVBQVMsR0FDVHVELEVBQVMsRUFDVHhTLEVBQVEsRUFDUjZELEdBQWEsRUFDYkMsRUFBZ0IsWUFDWkQsR0FBZW9MLEVBQU9yYixRQUFXNGUsR0FDakMxYixFQUFXSSxZQUdmMmMsRUFBWSxTQUFVM2pCLEdBQVMsT0FBUXNpQixFQUFTN1MsRUFBYW1VLEVBQVc1akIsR0FBUytlLEVBQU9wYixLQUFLM0QsSUFDN0Y0akIsRUFBYSxTQUFVNWpCLEdBQ3ZCd2pCLEdBQVU1YyxFQUFXeEUsS0FBS3BDLEdBQzFCc2lCLElBQ0EsSUFBSXVCLEdBQWdCLEVBQ3BCLFlBQVV0VSxFQUFRdlAsRUFBTzhQLE1BQVVoSixVQUFVLFlBQXlCRixHQUFZLFNBQVVtTixHQUN4RndQLFNBQTREQSxFQUFheFAsR0FDckV5UCxFQUNBRyxFQUFVNVAsR0FHVm5OLEVBQVd4RSxLQUFLMlIsTUFFckIsV0FDQzhQLEdBQWdCLFNBQ2pCclosR0FBVyxXQUNWLEdBQUlxWixFQUNBLElBQ0l2QixJQVVBLElBVEEsSUFBSUUsRUFBVSxXQUNWLElBQUlzQixFQUFnQi9FLEVBQU9oYSxRQUN2QjBlLEVBQ0EsWUFBZ0I3YyxFQUFZNmMsR0FBbUIsV0FBYyxPQUFPRyxFQUFXRSxNQUcvRUYsRUFBV0UsSUFHWi9FLEVBQU9yYixRQUFVNGUsRUFBUzdTLEdBQzdCK1MsSUFFSjVPLElBRUosTUFBT2hPLEdBQ0hnQixFQUFXN0MsTUFBTTZCLFNBU2pDLE9BSkFRLEVBQU9VLFVBQVUsWUFBeUJGLEVBQVkrYyxHQUFXLFdBQzdEaFEsR0FBYSxFQUNiQyxRQUVHLFdBQ0g4UCxTQUEwRUEsTyxnQkN6RGxGLElBQUk1akIsRUFBUyxFQUFRLElBQ2pCaWtCLEVBQVksRUFBUSxLQUNwQkMsRUFBaUIsRUFBUSxLQU96QkMsRUFBaUJua0IsRUFBU0EsRUFBT0MsaUJBQWN5SyxFQWtCbkQxTCxFQUFPRCxRQVRQLFNBQW9CbUIsR0FDbEIsT0FBYSxNQUFUQSxPQUNld0ssSUFBVnhLLEVBZFEscUJBREwsZ0JBaUJKaWtCLEdBQWtCQSxLQUFrQnhrQixPQUFPTyxHQUMvQytqQixFQUFVL2pCLEdBQ1Zna0IsRUFBZWhrQixLLGNDSXJCbEIsRUFBT0QsUUFKUCxTQUFzQm1CLEdBQ3BCLE9BQWdCLE1BQVRBLEdBQWlDLGlCQUFUQSxJLDZCQ3pCakMsOENBQ0lra0IsRUFBYSxXQUNiLFNBQVNBLEVBQVVDLEVBQXFCMVQsUUFDeEIsSUFBUkEsSUFBa0JBLEVBQU15VCxFQUFVelQsS0FDdENqUCxLQUFLMmlCLG9CQUFzQkEsRUFDM0IzaUIsS0FBS2lQLElBQU1BLEVBT2YsT0FMQXlULEVBQVV2akIsVUFBVXlPLFNBQVcsU0FBVUosRUFBTUMsRUFBT2tILEdBRWxELFlBRGMsSUFBVmxILElBQW9CQSxFQUFRLEdBQ3pCLElBQUl6TixLQUFLMmlCLG9CQUFvQjNpQixLQUFNd04sR0FBTUksU0FBUytHLEVBQU9sSCxJQUVwRWlWLEVBQVV6VCxJQUFNLElBQXNCQSxJQUMvQnlULEVBWEssSSw2QkNEaEIsOENBQ1dFLEVBQTBCLGFBQWlCLFNBQVU1ZSxHQUM1RCxPQUFPLFdBQ0hBLEVBQU9oRSxNQUNQQSxLQUFLbEMsS0FBTywwQkFDWmtDLEtBQUsyTyxRQUFVLDZCLGdCQ0F2QixJQUV3QmMsRUFDbkJvVCxFQUhEQyxFQUFjLEdBV2RDLEdBVG9CdFQsRUFTRixXQU1yQixPQUFPdVQsUUFBVUMsVUFBWUEsU0FBU0MsTUFBUUYsT0FBT0csTUFaOUMsV0FFTixZQURvQixJQUFUTixJQUFzQkEsRUFBT3BULEVBQUd2TyxNQUFNbEIsS0FBTTRDLFlBQ2hEaWdCLElBYUxPLEVBQVksU0FBVUMsRUFBUXhXLEdBQ2hDLE9BQUlBLEVBQ0tBLEVBQU95VyxjQUFjRCxHQUV2QkosU0FBU0ssY0FBY0QsSUFHNUJFLEVBQWEsU0FBVzlULEdBQzNCLElBQUlvVCxFQUFPLEdBRVgsT0FBTyxTQUFTUSxFQUFReFcsR0FNVCxHQUFzQixtQkFBWHdXLEVBQ0gsT0FBT0EsSUFFZixRQUE0QixJQUFqQlIsRUFBS1EsR0FBeUIsQ0FDdEQsSUFBSUcsRUFBY0osRUFBVTFsQixLQUFLc0MsS0FBTXFqQixFQUFReFcsR0FFL0MsR0FBSW1XLE9BQU9TLG1CQUFxQkQsYUFBdUJSLE9BQU9TLGtCQUM3RCxJQUdDRCxFQUFjQSxFQUFZRSxnQkFBZ0JDLEtBQ3pDLE1BQU05aUIsR0FDUDJpQixFQUFjLEtBR2hCWCxFQUFLUSxHQUFVRyxFQUVoQixPQUFPWCxFQUFLUSxJQTFCRyxHQThCYk8sRUFBWSxLQUNaQyxFQUFtQixFQUNuQkMsRUFBc0IsR0FFdEJDLEVBQVUsRUFBUSxLQXFEdEIsU0FBU0MsRUFBZ0JDLEVBQVEvSSxHQUNoQyxJQUFLLElBQUkzZCxFQUFJLEVBQUdBLEVBQUkwbUIsRUFBTy9oQixPQUFRM0UsSUFBSyxDQUN2QyxJQUFJOE0sRUFBTzRaLEVBQU8xbUIsR0FDZDJtQixFQUFXcEIsRUFBWXpZLEVBQUtzQixJQUVoQyxHQUFHdVksRUFBVSxDQUNaQSxFQUFTQyxPQUVULElBQUksSUFBSUMsRUFBSSxFQUFHQSxFQUFJRixFQUFTRyxNQUFNbmlCLE9BQVFraUIsSUFDekNGLEVBQVNHLE1BQU1ELEdBQUcvWixFQUFLZ2EsTUFBTUQsSUFHOUIsS0FBTUEsRUFBSS9aLEVBQUtnYSxNQUFNbmlCLE9BQVFraUIsSUFDNUJGLEVBQVNHLE1BQU1saUIsS0FBS21pQixFQUFTamEsRUFBS2dhLE1BQU1ELEdBQUlsSixRQUV2QyxDQUNOLElBQUltSixFQUFRLEdBRVosSUFBUUQsRUFBSSxFQUFHQSxFQUFJL1osRUFBS2dhLE1BQU1uaUIsT0FBUWtpQixJQUNyQ0MsRUFBTWxpQixLQUFLbWlCLEVBQVNqYSxFQUFLZ2EsTUFBTUQsR0FBSWxKLElBR3BDNEgsRUFBWXpZLEVBQUtzQixJQUFNLENBQUNBLEdBQUl0QixFQUFLc0IsR0FBSXdZLEtBQU0sRUFBR0UsTUFBT0EsS0FLeEQsU0FBU0UsRUFBY2haLEVBQU0yUCxHQUk1QixJQUhBLElBQUkrSSxFQUFTLEdBQ1RPLEVBQVksR0FFUGpuQixFQUFJLEVBQUdBLEVBQUlnTyxFQUFLckosT0FBUTNFLElBQUssQ0FDckMsSUFBSThNLEVBQU9rQixFQUFLaE8sR0FDWm9PLEVBQUt1UCxFQUFRdUosS0FBT3BhLEVBQUssR0FBSzZRLEVBQVF1SixLQUFPcGEsRUFBSyxHQUlsRHFhLEVBQU8sQ0FBQ0MsSUFIRnRhLEVBQUssR0FHT3VhLE1BRlZ2YSxFQUFLLEdBRW1Cd2EsVUFEcEJ4YSxFQUFLLElBR2pCbWEsRUFBVTdZLEdBQ1Q2WSxFQUFVN1ksR0FBSTBZLE1BQU1saUIsS0FBS3VpQixHQURYVCxFQUFPOWhCLEtBQUtxaUIsRUFBVTdZLEdBQU0sQ0FBQ0EsR0FBSUEsRUFBSTBZLE1BQU8sQ0FBQ0ssS0FJakUsT0FBT1QsRUFHUixTQUFTYSxFQUFvQjVKLEVBQVM2SixHQUNyQyxJQUFJMUIsRUFBU0UsRUFBV3JJLEVBQVE4SixZQUVoQyxJQUFLM0IsRUFDSixNQUFNLElBQUkvVCxNQUFNLCtHQUdqQixJQUFJMlYsRUFBZ0NuQixFQUFvQkEsRUFBb0I1aEIsT0FBUyxHQUVyRixHQUF5QixRQUFyQmdaLEVBQVFnSyxTQUNORCxFQUVNQSxFQUE4QkUsWUFDeEM5QixFQUFPK0IsYUFBYUwsRUFBT0UsRUFBOEJFLGFBRXpEOUIsRUFBT2dDLFlBQVlOLEdBSm5CMUIsRUFBTytCLGFBQWFMLEVBQU8xQixFQUFPaUMsWUFNbkN4QixFQUFvQjNoQixLQUFLNGlCLFFBQ25CLEdBQXlCLFdBQXJCN0osRUFBUWdLLFNBQ2xCN0IsRUFBT2dDLFlBQVlOLE9BQ2IsSUFBZ0MsaUJBQXJCN0osRUFBUWdLLFdBQXlCaEssRUFBUWdLLFNBQVNLLE9BSW5FLE1BQU0sSUFBSWpXLE1BQU0sOExBSGhCLElBQUk2VixFQUFjNUIsRUFBV3JJLEVBQVFnSyxTQUFTSyxPQUFRbEMsR0FDdERBLEVBQU8rQixhQUFhTCxFQUFPSSxJQU03QixTQUFTSyxFQUFvQlQsR0FDNUIsR0FBeUIsT0FBckJBLEVBQU1VLFdBQXFCLE9BQU8sRUFDdENWLEVBQU1VLFdBQVdDLFlBQVlYLEdBRTdCLElBQUl6SyxFQUFNd0osRUFBb0J0VixRQUFRdVcsR0FDbkN6SyxHQUFPLEdBQ1R3SixFQUFvQnJWLE9BQU82TCxFQUFLLEdBSWxDLFNBQVNxTCxFQUFvQnpLLEdBQzVCLElBQUk2SixFQUFROUIsU0FBUzJDLGNBQWMsU0FNbkMsUUFKMEI1YyxJQUF2QmtTLEVBQVEySyxNQUFNQyxPQUNoQjVLLEVBQVEySyxNQUFNQyxLQUFPLGlCQUdLOWMsSUFBeEJrUyxFQUFRMkssTUFBTUUsTUFBcUIsQ0FDckMsSUFBSUEsRUFnQ04sV0FDSyxFQUlKLE9BQU8sS0FyQ01DLEdBQ1JELElBQ0g3SyxFQUFRMkssTUFBTUUsTUFBUUEsR0FPeEIsT0FIQUUsRUFBU2xCLEVBQU83SixFQUFRMkssT0FDeEJmLEVBQW1CNUosRUFBUzZKLEdBRXJCQSxFQWlCUixTQUFTa0IsRUFBVUMsRUFBSUwsR0FDdEI1bkIsT0FBT3dpQixLQUFLb0YsR0FBT3plLFNBQVEsU0FBVXRJLEdBQ3BDb25CLEVBQUdDLGFBQWFybkIsRUFBSyttQixFQUFNL21CLE9BWTdCLFNBQVN3bEIsRUFBVW5mLEVBQUsrVixHQUN2QixJQUFJNkosRUFBT3FCLEVBQVFoYSxFQUFRckwsRUFHM0IsR0FBSW1hLEVBQVFtTCxXQUFhbGhCLEVBQUl3ZixJQUFLLENBSzlCLEtBSkE1akIsRUFBc0MsbUJBQXRCbWEsRUFBUW1MLFVBQ3hCbkwsRUFBUW1MLFVBQVVsaEIsRUFBSXdmLEtBQ3RCekosRUFBUW1MLFVBQVVsTCxRQUFRaFcsRUFBSXdmLE1BUzdCLE9BQU8sYUFKUHhmLEVBQUl3ZixJQUFNNWpCLEVBVWYsR0FBSW1hLEVBQVEwSSxVQUFXLENBQ3RCLElBQUkwQyxFQUFhekMsSUFFakJrQixFQUFRbkIsSUFBY0EsRUFBWStCLEVBQW1CekssSUFFckRrTCxFQUFTRyxFQUFvQnhuQixLQUFLLEtBQU1nbUIsRUFBT3VCLEdBQVksR0FDM0RsYSxFQUFTbWEsRUFBb0J4bkIsS0FBSyxLQUFNZ21CLEVBQU91QixHQUFZLFFBRzNEbmhCLEVBQUkwZixXQUNXLG1CQUFSMkIsS0FDd0IsbUJBQXhCQSxJQUFJQyxpQkFDb0IsbUJBQXhCRCxJQUFJRSxpQkFDSyxtQkFBVEMsTUFDUyxtQkFBVGxjLE1BRVBzYSxFQWxFRixTQUE0QjdKLEdBQzNCLElBQUkwTCxFQUFPM0QsU0FBUzJDLGNBQWMsUUFVbEMsWUFSMEI1YyxJQUF2QmtTLEVBQVEySyxNQUFNQyxPQUNoQjVLLEVBQVEySyxNQUFNQyxLQUFPLFlBRXRCNUssRUFBUTJLLE1BQU1nQixJQUFNLGFBRXBCWixFQUFTVyxFQUFNMUwsRUFBUTJLLE9BQ3ZCZixFQUFtQjVKLEVBQVMwTCxHQUVyQkEsRUF1REVFLENBQWtCNUwsR0FDMUJrTCxFQUFTVyxFQUFXaG9CLEtBQUssS0FBTWdtQixFQUFPN0osR0FDdEM5TyxFQUFTLFdBQ1JvWixFQUFtQlQsR0FFaEJBLEVBQU1pQyxNQUFNUixJQUFJRSxnQkFBZ0IzQixFQUFNaUMsU0FHMUNqQyxFQUFRWSxFQUFtQnpLLEdBQzNCa0wsRUFBU2EsRUFBV2xvQixLQUFLLEtBQU1nbUIsR0FDL0IzWSxFQUFTLFdBQ1JvWixFQUFtQlQsS0FNckIsT0FGQXFCLEVBQU9qaEIsR0FFQSxTQUFzQitoQixHQUM1QixHQUFJQSxFQUFRLENBQ1gsR0FDQ0EsRUFBT3ZDLE1BQVF4ZixFQUFJd2YsS0FDbkJ1QyxFQUFPdEMsUUFBVXpmLEVBQUl5ZixPQUNyQnNDLEVBQU9yQyxZQUFjMWYsRUFBSTBmLFVBRXpCLE9BR0R1QixFQUFPamhCLEVBQU0raEIsUUFFYjlhLEtBMVBIOU8sRUFBT0QsUUFBVSxTQUFTa08sRUFBTTJQLEdBQy9CLEdBQXFCLG9CQUFWaU0sT0FBeUJBLE9BQ1gsaUJBQWJsRSxTQUF1QixNQUFNLElBQUkzVCxNQUFNLGlFQUduRDRMLEVBQVVBLEdBQVcsSUFFYjJLLE1BQWlDLGlCQUFsQjNLLEVBQVEySyxNQUFxQjNLLEVBQVEySyxNQUFRLEdBSS9EM0ssRUFBUTBJLFdBQTBDLGtCQUF0QjFJLEVBQVEwSSxZQUF5QjFJLEVBQVEwSSxVQUFZYixLQUcxRTdILEVBQVE4SixhQUFZOUosRUFBUThKLFdBQWEsUUFHaEQ5SixFQUFRZ0ssV0FBVWhLLEVBQVFnSyxTQUFXLFVBRTFDLElBQUlqQixFQUFTTSxFQUFhaFosRUFBTTJQLEdBSWhDLE9BRkE4SSxFQUFlQyxFQUFRL0ksR0FFaEIsU0FBaUJrTSxHQUd2QixJQUZBLElBQUlDLEVBQVksR0FFUDlwQixFQUFJLEVBQUdBLEVBQUkwbUIsRUFBTy9oQixPQUFRM0UsSUFBSyxDQUN2QyxJQUFJOE0sRUFBTzRaLEVBQU8xbUIsSUFDZDJtQixFQUFXcEIsRUFBWXpZLEVBQUtzQixLQUV2QndZLE9BQ1RrRCxFQUFVbGxCLEtBQUsraEIsR0FHYmtELEdBRUZwRCxFQURnQk8sRUFBYTZDLEVBQVNsTSxHQUNaQSxHQUczQixJQUFTM2QsRUFBSSxFQUFHQSxFQUFJOHBCLEVBQVVubEIsT0FBUTNFLElBQUssQ0FDMUMsSUFBSTJtQixFQUVKLEdBQXFCLEtBRmpCQSxFQUFXbUQsRUFBVTlwQixJQUViNG1CLEtBQVksQ0FDdkIsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlGLEVBQVNHLE1BQU1uaUIsT0FBUWtpQixJQUFLRixFQUFTRyxNQUFNRCxZQUV4RHRCLEVBQVlvQixFQUFTdlksUUFrTmhDLElBQ0syYixFQUREQyxHQUNDRCxFQUFZLEdBRVQsU0FBVWhaLEVBQU9rWixHQUd2QixPQUZBRixFQUFVaFosR0FBU2taLEVBRVpGLEVBQVVsWixPQUFPcVosU0FBU3BjLEtBQUssUUFJeEMsU0FBU2tiLEVBQXFCeEIsRUFBT3pXLEVBQU9sQyxFQUFRakgsR0FDbkQsSUFBSXdmLEVBQU12WSxFQUFTLEdBQUtqSCxFQUFJd2YsSUFFNUIsR0FBSUksRUFBTTJDLFdBQ1QzQyxFQUFNMkMsV0FBV0MsUUFBVUosRUFBWWpaLEVBQU9xVyxPQUN4QyxDQUNOLElBQUlpRCxFQUFVM0UsU0FBUzRFLGVBQWVsRCxHQUNsQ21ELEVBQWEvQyxFQUFNK0MsV0FFbkJBLEVBQVd4WixJQUFReVcsRUFBTVcsWUFBWW9DLEVBQVd4WixJQUVoRHdaLEVBQVc1bEIsT0FDZDZpQixFQUFNSyxhQUFhd0MsRUFBU0UsRUFBV3haLElBRXZDeVcsRUFBTU0sWUFBWXVDLElBS3JCLFNBQVNYLEVBQVlsQyxFQUFPNWYsR0FDM0IsSUFBSXdmLEVBQU14ZixFQUFJd2YsSUFDVkMsRUFBUXpmLEVBQUl5ZixNQU1oQixHQUpHQSxHQUNGRyxFQUFNb0IsYUFBYSxRQUFTdkIsR0FHMUJHLEVBQU0yQyxXQUNSM0MsRUFBTTJDLFdBQVdDLFFBQVVoRCxNQUNyQixDQUNOLEtBQU1JLEVBQU1PLFlBQ1hQLEVBQU1XLFlBQVlYLEVBQU1PLFlBR3pCUCxFQUFNTSxZQUFZcEMsU0FBUzRFLGVBQWVsRCxLQUk1QyxTQUFTb0MsRUFBWUgsRUFBTTFMLEVBQVMvVixHQUNuQyxJQUFJd2YsRUFBTXhmLEVBQUl3ZixJQUNWRSxFQUFZMWYsRUFBSTBmLFVBUWhCa0QsT0FBZ0QvZSxJQUFsQ2tTLEVBQVE4TSx1QkFBdUNuRCxHQUU3RDNKLEVBQVE4TSx1QkFBeUJELEtBQ3BDcEQsRUFBTVosRUFBUVksSUFHWEUsSUFFSEYsR0FBTyx1REFBeURsYSxLQUFLRSxTQUFTQyxtQkFBbUJDLEtBQUtDLFVBQVUrWixNQUFnQixPQUdqSSxJQUFJb0QsRUFBTyxJQUFJdEIsS0FBSyxDQUFDaEMsR0FBTSxDQUFFbUIsS0FBTSxhQUUvQm9DLEVBQVN0QixFQUFLSSxLQUVsQkosRUFBS0ksS0FBT1IsSUFBSUMsZ0JBQWdCd0IsR0FFN0JDLEdBQVExQixJQUFJRSxnQkFBZ0J3QixLLDZCQzlZaEMsSUFDTUMsRUFBZSxJQUFJQyxFQURKN1csRUFBUSxLQUFVNlcsY0FHakNDLEVBQWEsbUJBRW5CL3FCLEVBQU9ELFFBQVUsQ0FDZmlyQixnQkFBaUIsa0JBQU1ILEdBQ3ZCSSxLQUFNLFdBQ0pKLEVBQWEvSyxLQU5FLHFCQVFqQm9MLE9BQVEsU0FBQ3pULEdBQ1BvVCxFQUFheEosR0FURSxtQkFTYTVKLElBRTlCMFQsS0FBTSxXQUFjLDJCQUFWQyxFQUFVLHlCQUFWQSxFQUFVLGdCQUNsQlAsRUFBYS9LLEtBQWIsTUFBQStLLEVBQVksQ0FBTUUsR0FBTixPQUFxQkssS0FFbkNDLE9BQVEsU0FBQzVULEdBQ1BvVCxFQUFheEosR0FBRzBKLEVBQVl0VCxJQUU5QndKLE1BQU8sV0FDTDRKLEVBQWFTLG1CQUFtQlAsR0FDaENGLEVBQWFTLG1CQW5CRSx1QixnQkNGbkIsSUFBSUMsRUFBaUIsRUFBUSxLQUN6QkMsRUFBa0IsRUFBUSxLQUMxQkMsRUFBZSxFQUFRLEtBQ3ZCQyxFQUFlLEVBQVEsS0FDdkJDLEVBQWUsRUFBUSxLQVMzQixTQUFTQyxFQUFVQyxHQUNqQixJQUFJN2EsR0FBUyxFQUNUcE0sRUFBb0IsTUFBWGluQixFQUFrQixFQUFJQSxFQUFRam5CLE9BRzNDLElBREFsQyxLQUFLb3BCLFVBQ0k5YSxFQUFRcE0sR0FBUSxDQUN2QixJQUFJbW5CLEVBQVFGLEVBQVE3YSxHQUNwQnRPLEtBQUtzcEIsSUFBSUQsRUFBTSxHQUFJQSxFQUFNLEtBSzdCSCxFQUFVL3BCLFVBQVVpcUIsTUFBUVAsRUFDNUJLLEVBQVUvcEIsVUFBa0IsT0FBSTJwQixFQUNoQ0ksRUFBVS9wQixVQUFVZixJQUFNMnFCLEVBQzFCRyxFQUFVL3BCLFVBQVVvcUIsSUFBTVAsRUFDMUJFLEVBQVUvcEIsVUFBVW1xQixJQUFNTCxFQUUxQjNyQixFQUFPRCxRQUFVNnJCLEcsZ0JDL0JqQixJQUFJTSxFQUFLLEVBQVEsS0FvQmpCbHNCLEVBQU9ELFFBVlAsU0FBc0JrSSxFQUFPekcsR0FFM0IsSUFEQSxJQUFJb0QsRUFBU3FELEVBQU1yRCxPQUNaQSxLQUNMLEdBQUlzbkIsRUFBR2prQixFQUFNckQsR0FBUSxHQUFJcEQsR0FDdkIsT0FBT29ELEVBR1gsT0FBUSxJLGdCQ2pCVixJQUdJNUQsRUFITyxFQUFRLElBR0RBLE9BRWxCaEIsRUFBT0QsUUFBVWlCLEcsY0N5QmpCaEIsRUFBT0QsUUFMUCxTQUFrQm1CLEdBQ2hCLElBQUlzbkIsU0FBY3RuQixFQUNsQixPQUFnQixNQUFUQSxJQUEwQixVQUFSc25CLEdBQTRCLFlBQVJBLEssZ0JDM0IvQyxJQUdJMkQsRUFIWSxFQUFRLEdBR0xDLENBQVV6ckIsT0FBUSxVQUVyQ1gsRUFBT0QsUUFBVW9zQixHLGdCQ0xqQixJQUFJRSxFQUFZLEVBQVEsS0FpQnhCcnNCLEVBQU9ELFFBUFAsU0FBb0I4TixFQUFLck0sR0FDdkIsSUFBSWlNLEVBQU9JLEVBQUl5ZSxTQUNmLE9BQU9ELEVBQVU3cUIsR0FDYmlNLEVBQW1CLGlCQUFQak0sRUFBa0IsU0FBVyxRQUN6Q2lNLEVBQUtJLE0sZ0JDZFgsSUFBSTBlLEVBQWEsRUFBUSxJQUNyQkMsRUFBZSxFQUFRLElBMkIzQnhzQixFQUFPRCxRQUxQLFNBQWtCbUIsR0FDaEIsTUFBdUIsaUJBQVRBLEdBQ1hzckIsRUFBYXRyQixJQXJCRixtQkFxQllxckIsRUFBV3JyQixLLGdCQ3pCdkMsSUFBSXVyQixFQUFXLEVBQVEsSUFvQnZCenNCLEVBQU9ELFFBUlAsU0FBZW1CLEdBQ2IsR0FBb0IsaUJBQVRBLEdBQXFCdXJCLEVBQVN2ckIsR0FDdkMsT0FBT0EsRUFFVCxJQUFJdUMsRUFBVXZDLEVBQVEsR0FDdEIsTUFBa0IsS0FBVnVDLEdBQWtCLEVBQUl2QyxJQWRqQixJQWN3QyxLQUFPdUMsSSw2QkNqQjlELDhEQUdPLFNBQVNpcEIsRUFBVUMsRUFBVTFjLEdBRWhDLFlBRGtCLElBQWRBLElBQXdCQSxFQUFZLEtBQ2pDLGFBQU0sV0FBYyxPQUFPLFlBQU0wYyxFQUFVMWMsUSw2QkNMdEQsa0VBSU8sU0FBU2dRLEVBQU8yTSxHQUNuQixPQUFPLGFBQVEsU0FBVXRsQixFQUFRUSxHQUM3QixJQUFJK2tCLEVBQWdCLEdBVXBCLE9BVEF2bEIsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FBUyxPQUFPMnJCLEVBQWNob0IsS0FBSzNELE1BQVcsV0FDMUc0RyxFQUFXeEUsS0FBS3VwQixHQUNoQi9rQixFQUFXSSxlQUVmLFlBQVUwa0IsR0FBaUI1a0IsVUFBVSxZQUF5QkYsR0FBWSxXQUN0RSxJQUFJNUYsRUFBSTJxQixFQUNSQSxFQUFnQixHQUNoQi9rQixFQUFXeEUsS0FBS3BCLEtBQ2pCLE1BQ0ksV0FDSDJxQixFQUFnQixXLDZCQ2pCNUIsbUVBSU8sU0FBU0MsRUFBWUMsRUFBWUMsR0FHcEMsWUFGeUIsSUFBckJBLElBQStCQSxFQUFtQixNQUN0REEsRUFBbUJBLFFBQTJEQSxFQUFtQkQsRUFDMUYsYUFBUSxTQUFVemxCLEVBQVFRLEdBQzdCLElBQUkrYixFQUFVLEdBQ1ZwUCxFQUFRLEVBQ1puTixFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RCxJQUFJb0gsRUFBS3BCLEVBQUk2QixFQUFLRSxFQUNkZ2tCLEVBQVMsS0FDVHhZLElBQVV1WSxHQUFxQixHQUMvQm5KLEVBQVFoZixLQUFLLElBRWpCLElBQ0ksSUFBSyxJQUFJcW9CLEVBQVksWUFBU3JKLEdBQVVzSixFQUFjRCxFQUFVNXBCLFFBQVM2cEIsRUFBWXpwQixLQUFNeXBCLEVBQWNELEVBQVU1cEIsT0FBUSxFQUNuSDJjLEVBQVNrTixFQUFZanNCLE9BQ2xCMkQsS0FBSzNELEdBQ1I2ckIsR0FBYzlNLEVBQU9yYixTQUNyQnFvQixFQUFTQSxRQUF1Q0EsRUFBUyxJQUNsRHBvQixLQUFLb2IsSUFJeEIsTUFBT3hYLEdBQVNILEVBQU0sQ0FBRXJELE1BQU93RCxHQUMvQixRQUNJLElBQ1Ewa0IsSUFBZ0JBLEVBQVl6cEIsT0FBU3dELEVBQUtnbUIsRUFBVXhrQixTQUFTeEIsRUFBRzlHLEtBQUs4c0IsR0FFN0UsUUFBVSxHQUFJNWtCLEVBQUssTUFBTUEsRUFBSXJELE9BRWpDLEdBQUlnb0IsRUFDQSxJQUNJLElBQUssSUFBSUcsRUFBVyxZQUFTSCxHQUFTSSxFQUFhRCxFQUFTOXBCLFFBQVMrcEIsRUFBVzNwQixLQUFNMnBCLEVBQWFELEVBQVM5cEIsT0FBUSxDQUNoSCxJQUFJMmMsRUFBU29OLEVBQVduc0IsTUFDeEIsWUFBVTJpQixFQUFTNUQsR0FDbkJuWSxFQUFXeEUsS0FBSzJjLElBR3hCLE1BQU9qWCxHQUFTRCxFQUFNLENBQUU5RCxNQUFPK0QsR0FDL0IsUUFDSSxJQUNRcWtCLElBQWVBLEVBQVczcEIsT0FBU3VGLEVBQUtta0IsRUFBUzFrQixTQUFTTyxFQUFHN0ksS0FBS2d0QixHQUUxRSxRQUFVLEdBQUlya0IsRUFBSyxNQUFNQSxFQUFJOUQsV0FHdEMsV0FDQyxJQUFJcW9CLEVBQUtwbUIsRUFDVCxJQUNJLElBQUssSUFBSXFtQixFQUFZLFlBQVMxSixHQUFVMkosRUFBY0QsRUFBVWpxQixRQUFTa3FCLEVBQVk5cEIsS0FBTThwQixFQUFjRCxFQUFVanFCLE9BQVEsQ0FDdkgsSUFBSTJjLEVBQVN1TixFQUFZdHNCLE1BQ3pCNEcsRUFBV3hFLEtBQUsyYyxJQUd4QixNQUFPd04sR0FBU0gsRUFBTSxDQUFFcm9CLE1BQU93b0IsR0FDL0IsUUFDSSxJQUNRRCxJQUFnQkEsRUFBWTlwQixPQUFTd0QsRUFBS3FtQixFQUFVN2tCLFNBQVN4QixFQUFHOUcsS0FBS210QixHQUU3RSxRQUFVLEdBQUlELEVBQUssTUFBTUEsRUFBSXJvQixPQUVqQzZDLEVBQVdJLGtCQUNad0QsR0FBVyxXQUNWbVksRUFBVSxjLDZCQ2xFdEIsa0dBUU8sU0FBUzZKLEVBQVdDLEdBR3ZCLElBRkEsSUFBSXptQixFQUFJK0IsRUFDSjJrQixFQUFZLEdBQ1B6akIsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDeWpCLEVBQVV6akIsRUFBSyxHQUFLN0UsVUFBVTZFLEdBRWxDLElBQUk4RixFQUErQyxRQUFsQy9JLEVBQUssWUFBYTBtQixVQUErQixJQUFQMW1CLEVBQWdCQSxFQUFLLElBQzVFMm1CLEVBQWlELFFBQXZCNWtCLEVBQUsya0IsRUFBVSxVQUF1QixJQUFQM2tCLEVBQWdCQSxFQUFLLEtBQzlFNmtCLEVBQWdCRixFQUFVLElBQU1oZCxJQUNwQyxPQUFPLGFBQVEsU0FBVXRKLEVBQVFRLEdBQzdCLElBQUlpbUIsRUFBZ0IsR0FDaEJDLEdBQWdCLEVBQ2hCbE8sRUFBTyxTQUFVbU8sR0FDakIsSUFBSWhPLEVBQVNnTyxFQUFPaE8sT0FBZWdPLEVBQU9DLEtBQ3JDbG5CLGNBQ0wsWUFBVSttQixFQUFlRSxHQUN6Qm5tQixFQUFXeEUsS0FBSzJjLEdBQ2hCK04sR0FBaUJHLEtBRWpCQSxFQUFjLFdBQ2QsR0FBSUosRUFBZSxDQUNmLElBQUlHLEVBQU8sSUFBSSxJQUNmcG1CLEVBQVc2QixJQUFJdWtCLEdBQ2YsSUFDSUUsRUFBVyxDQUNYbk8sT0FGUyxHQUdUaU8sS0FBTUEsR0FFVkgsRUFBY2xwQixLQUFLdXBCLEdBQ25CLFlBQWdCRixFQUFNamUsR0FBVyxXQUFjLE9BQU82UCxFQUFLc08sS0FBY1QsS0FHbEQsT0FBM0JFLEdBQW1DQSxHQUEwQixFQUM3RCxZQUFnQi9sQixFQUFZbUksRUFBV2tlLEVBQWFOLEdBQXdCLEdBRzVFRyxHQUFnQixFQUVwQkcsSUFDQSxJQUFJRSxFQUF1QixZQUF5QnZtQixHQUFZLFNBQVU1RyxHQUN0RSxJQUFJb0gsRUFBS3BCLEVBQ0xvbkIsRUFBY1AsRUFBY3hvQixRQUNoQyxJQUNJLElBQUssSUFBSWdwQixFQUFnQixZQUFTRCxHQUFjRSxFQUFrQkQsRUFBY2pyQixRQUFTa3JCLEVBQWdCOXFCLEtBQU04cUIsRUFBa0JELEVBQWNqckIsT0FBUSxDQUNuSixJQUFJMnFCLEVBQVNPLEVBQWdCdHRCLE1BQ3pCK2UsRUFBU2dPLEVBQU9oTyxPQUNwQkEsRUFBT3BiLEtBQUszRCxHQUNaNHNCLEdBQWlCN04sRUFBT3JiLFFBQVVrYixFQUFLbU8sSUFHL0MsTUFBT3hsQixHQUFTSCxFQUFNLENBQUVyRCxNQUFPd0QsR0FDL0IsUUFDSSxJQUNRK2xCLElBQW9CQSxFQUFnQjlxQixPQUFTd0QsRUFBS3FuQixFQUFjN2xCLFNBQVN4QixFQUFHOUcsS0FBS211QixHQUV6RixRQUFVLEdBQUlqbUIsRUFBSyxNQUFNQSxFQUFJckQsV0FFbEMsV0FDQyxLQUFPOG9CLGFBQXFELEVBQVNBLEVBQWNucEIsUUFDL0VrRCxFQUFXeEUsS0FBS3lxQixFQUFjOW5CLFFBQVFnYSxRQUUxQ29PLFNBQTRFQSxFQUFxQnJuQixjQUNqR2MsRUFBV0ksV0FDWEosRUFBV2QscUJBQ1owRSxHQUFXLFdBQWMsT0FBUXFpQixFQUFnQixRQUNwRHptQixFQUFPVSxVQUFVcW1CLFEsNkJDekV6Qix5RkFPTyxTQUFTSSxFQUFhQyxFQUFVQyxHQUNuQyxPQUFPLGFBQVEsU0FBVXJuQixFQUFRUSxHQUM3QixJQUFJK2IsRUFBVSxHQUNkLFlBQVU2SyxHQUFVMW1CLFVBQVUsWUFBeUJGLEdBQVksU0FBVThtQixHQUN6RSxJQUFJM08sRUFBUyxHQUNiNEQsRUFBUWhmLEtBQUtvYixHQUNiLElBQUk0TyxFQUFzQixJQUFJLElBTTlCQSxFQUFvQmxsQixJQUFJLFlBQVVnbEIsRUFBZ0JDLElBQVk1bUIsVUFBVSxZQUF5QkYsR0FMaEYsV0FDYixZQUFVK2IsRUFBUzVELEdBQ25CblksRUFBV3hFLEtBQUsyYyxHQUNoQjRPLEVBQW9CN25CLGdCQUVpRyxTQUMxSCxNQUNITSxFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RCxJQUFJb0gsRUFBS3BCLEVBQ1QsSUFDSSxJQUFLLElBQUlnbUIsRUFBWSxZQUFTckosR0FBVXNKLEVBQWNELEVBQVU1cEIsUUFBUzZwQixFQUFZenBCLEtBQU15cEIsRUFBY0QsRUFBVTVwQixPQUFRLENBQzFHNnBCLEVBQVlqc0IsTUFDbEIyRCxLQUFLM0QsSUFHcEIsTUFBT3VILEdBQVNILEVBQU0sQ0FBRXJELE1BQU93RCxHQUMvQixRQUNJLElBQ1Ewa0IsSUFBZ0JBLEVBQVl6cEIsT0FBU3dELEVBQUtnbUIsRUFBVXhrQixTQUFTeEIsRUFBRzlHLEtBQUs4c0IsR0FFN0UsUUFBVSxHQUFJNWtCLEVBQUssTUFBTUEsRUFBSXJELFdBRWxDLFdBQ0MsS0FBTzRlLEVBQVFqZixPQUFTLEdBQ3BCa0QsRUFBV3hFLEtBQUt1Z0IsRUFBUTVkLFNBRTVCNkIsRUFBV0ksb0IsNkJDeEN2QixrRUFJTyxTQUFTNG1CLEVBQVdILEdBQ3ZCLE9BQU8sYUFBUSxTQUFVcm5CLEVBQVFRLEdBQzdCLElBQUltWSxFQUFTLEtBQ1Q4TyxFQUFvQixLQUNwQkMsRUFBYSxXQUNiRCxTQUFzRUEsRUFBa0IvbkIsY0FDeEYsSUFBSTlFLEVBQUkrZCxFQUNSQSxFQUFTLEdBQ1QvZCxHQUFLNEYsRUFBV3hFLEtBQUtwQixHQUNyQixZQUFVeXNCLEtBQW1CM21CLFVBQVcrbUIsRUFBb0IsWUFBeUJqbkIsRUFBWWtuQixFQUFZLE9BRWpIQSxJQUNBMW5CLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQVMsT0FBTytlLGFBQXVDLEVBQVNBLEVBQU9wYixLQUFLM0QsTUFBVyxXQUNuSitlLEdBQVVuWSxFQUFXeEUsS0FBSzJjLEdBQzFCblksRUFBV0ksa0JBQ1p3RCxHQUFXLFdBQWMsT0FBUXVVLEVBQVM4TyxFQUFvQixjLDZCQ25CekUsMkRBR08sU0FBU0UsRUFBV3JVLEdBQ3ZCLE9BQU8sYUFBUSxTQUFVdFQsRUFBUVEsR0FDN0IsSUFFSW9uQixFQUZBeFAsRUFBVyxLQUNYeVAsR0FBWSxFQUVoQnpQLEVBQVdwWSxFQUFPVSxVQUFVLFlBQXlCRixPQUFZNEQsT0FBV0EsR0FBVyxTQUFVNUUsR0FDN0Zvb0IsRUFBZ0IsWUFBVXRVLEVBQVM5VCxFQUFLbW9CLEVBQVdyVSxFQUFYcVUsQ0FBcUIzbkIsS0FDekRvWSxHQUNBQSxFQUFTMVksY0FDVDBZLEVBQVcsS0FDWHdQLEVBQWNsbkIsVUFBVUYsSUFHeEJxbkIsR0FBWSxNQUdoQkEsSUFDQXpQLEVBQVMxWSxjQUNUMFksRUFBVyxLQUNYd1AsRUFBY2xuQixVQUFVRixTLDZCQ3RCcEMsc0NBQ1dzbkIsRUFEWCxNQUN3QixHLDZCQ0R4QixzREFFTyxTQUFTQyxJQUVaLElBREEsSUFBSWhQLEVBQWUsR0FDVmxXLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ2tXLEVBQWFsVyxHQUFNN0UsVUFBVTZFLEdBRWpDLE9BQU8sSUFBY3ZHLFdBQU0sRUFBUSxZQUFjLEdBQUksWUFBT3ljLE8sNkJDUGhFLHFEQUVPLFNBQVNpUCxFQUFZQyxFQUFpQjdlLEdBQ3pDLE9BQU8sWUFBV0EsR0FBa0IsYUFBVSxXQUFjLE9BQU82ZSxJQUFvQjdlLEdBQWtCLGFBQVUsV0FBYyxPQUFPNmUsTyw2QkNINUksc0RBRU8sU0FBU0MsSUFFWixJQURBLElBQUluUCxFQUFlLEdBQ1ZsVyxFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENrVyxFQUFhbFcsR0FBTTdFLFVBQVU2RSxHQUVqQyxPQUFPLElBQU92RyxXQUFNLEVBQVEsWUFBYyxHQUFJLFlBQU95YyxPLDZCQ1B6RCw4Q0FDTyxTQUFTNUwsRUFBTTFELEdBQ2xCLE9BQU8sYUFBTyxTQUFVMGUsRUFBT3Z1QixFQUFPakIsR0FBSyxPQUFTOFEsR0FBYUEsRUFBVTdQLEVBQU9qQixHQUFLd3ZCLEVBQVEsRUFBSUEsSUFBVyxLLDZCQ0ZsSCxrRUFJTyxTQUFTQyxFQUFTcFIsR0FDckIsT0FBTyxhQUFRLFNBQVVoWCxFQUFRUSxHQUM3QixJQUFJNE8sR0FBVyxFQUNYNkQsRUFBWSxLQUNaZ0UsRUFBcUIsS0FDckJ1QixFQUFPLFdBR1AsR0FGQXZCLFNBQXdFQSxFQUFtQnZYLGNBQzNGdVgsRUFBcUIsS0FDakI3SCxFQUFVLENBQ1ZBLEdBQVcsRUFDWCxJQUFJeFYsRUFBUXFaLEVBQ1pBLEVBQVksS0FDWnpTLEVBQVd4RSxLQUFLcEMsS0FHeEJvRyxFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RHFkLFNBQXdFQSxFQUFtQnZYLGNBQzNGMFAsR0FBVyxFQUNYNkQsRUFBWXJaLEVBQ1pxZCxFQUFxQixZQUF5QnpXLEVBQVlnWSxFQUFNLEtBQ2hFLFlBQVV4QixFQUFpQnBkLElBQVE4RyxVQUFVdVcsTUFDOUMsV0FDQ3VCLElBQ0FoWSxFQUFXSSxrQkFDWndELEdBQVcsV0FDVjZPLEVBQVlnRSxFQUFxQixjLDZCQzdCN0MsNERBR08sU0FBU29SLEVBQWFwZSxFQUFTdEIsR0FFbEMsWUFEa0IsSUFBZEEsSUFBd0JBLEVBQVksS0FDakMsYUFBUSxTQUFVM0ksRUFBUVEsR0FDN0IsSUFBSThuQixFQUFhLEtBQ2JyVixFQUFZLEtBQ1pzVixFQUFXLEtBQ1gvUCxFQUFPLFdBQ1AsR0FBSThQLEVBQVksQ0FDWkEsRUFBVzVvQixjQUNYNG9CLEVBQWEsS0FDYixJQUFJMXVCLEVBQVFxWixFQUNaQSxFQUFZLEtBQ1p6UyxFQUFXeEUsS0FBS3BDLEtBR3hCLFNBQVM0dUIsSUFDTCxJQUFJQyxFQUFhRixFQUFXdGUsRUFDeEJJLEVBQU0xQixFQUFVMEIsTUFDcEIsR0FBSUEsRUFBTW9lLEVBR04sT0FGQUgsRUFBYWx0QixLQUFLNE4sY0FBUzVFLEVBQVdxa0IsRUFBYXBlLFFBQ25EN0osRUFBVzZCLElBQUlpbUIsR0FHbkI5UCxJQUVKeFksRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNURxWixFQUFZclosRUFDWjJ1QixFQUFXNWYsRUFBVTBCLE1BQ2hCaWUsSUFDREEsRUFBYTNmLEVBQVVLLFNBQVN3ZixFQUFjdmUsR0FDOUN6SixFQUFXNkIsSUFBSWltQixPQUVwQixXQUNDOVAsSUFDQWhZLEVBQVdJLGtCQUNad0QsR0FBVyxXQUNWNk8sRUFBWXFWLEVBQWEsYyw2QkN2Q3JDLDhEQUdPLFNBQVN6ZixFQUFNdUIsRUFBS3pCLFFBQ0wsSUFBZEEsSUFBd0JBLEVBQVksS0FDeEMsSUFBSTBjLEVBQVcsWUFBTWpiLEVBQUt6QixHQUMxQixPQUFPLGFBQVUsV0FBYyxPQUFPMGMsTyw2QkNOMUMsNERBR08sU0FBU3FELElBQ1osT0FBTyxhQUFRLFNBQVUxb0IsRUFBUVEsR0FDN0JSLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTRMLEdBQWdCLE9BQU8sWUFBb0JBLEVBQWM1TCxZLDZCQ0xqSSxrRUFJTyxTQUFTbW9CLEVBQVM3USxFQUFhOFEsR0FDbEMsT0FBTyxhQUFRLFNBQVU1b0IsRUFBUVEsR0FDN0IsSUFBSXFvQixFQUFlLElBQUlDLElBQ3ZCOW9CLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQzVELElBQUlNLEVBQU00ZCxFQUFjQSxFQUFZbGUsR0FBU0EsRUFDeENpdkIsRUFBYWxFLElBQUl6cUIsS0FDbEIydUIsRUFBYXhtQixJQUFJbkksR0FDakJzRyxFQUFXeEUsS0FBS3BDLFFBR3hCZ3ZCLEdBQVcsWUFBVUEsR0FBU2xvQixVQUFVLFlBQXlCRixHQUFZLFdBQWMsT0FBT3FvQixFQUFhckUsVUFBWSxXLDZCQ2RuSSw4Q0FDTyxTQUFTdUUsRUFBd0I3dUIsRUFBSzh1QixHQUN6QyxPQUFPLGFBQXFCLFNBQVVqbUIsRUFBR3JHLEdBQUssT0FBT3NzQixFQUFVQSxFQUFRam1CLEVBQUU3SSxHQUFNd0MsRUFBRXhDLElBQVE2SSxFQUFFN0ksS0FBU3dDLEVBQUV4QyxRLDZCQ0YxRyw4RUFLTyxTQUFTK3VCLEVBQVV2ZixFQUFPbkYsR0FDN0IsR0FBSW1GLEVBQVEsRUFDUixNQUFNLElBQUksSUFFZCxJQUFJd2YsRUFBa0JsckIsVUFBVVYsUUFBVSxFQUMxQyxPQUFPLFNBQVUwQyxHQUNiLE9BQU9BLEVBQU8yQyxLQUFLLGFBQU8sU0FBVXhGLEVBQUd4RSxHQUFLLE9BQU9BLElBQU0rUSxLQUFXLFlBQUssR0FBSXdmLEVBQWtCLFlBQWUza0IsR0FBZ0IsYUFBYSxXQUFjLE9BQU8sSUFBSSxXLDZCQ1g1Syw2REFHTyxTQUFTNGtCLElBRVosSUFEQSxJQUFJcE4sRUFBUyxHQUNKbFosRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDa1osRUFBT2xaLEdBQU03RSxVQUFVNkUsR0FFM0IsT0FBTyxTQUFVN0MsR0FBVSxPQUFPLFlBQU9BLEVBQVEsSUFBRzFELFdBQU0sRUFBUSxZQUFjLEdBQUksWUFBT3lmLFMsNkJDUi9GLG9EQUVPLFNBQVNXLEVBQU1qVCxFQUFXbE8sR0FDN0IsT0FBTyxhQUFRLFNBQVV5RSxFQUFRUSxHQUM3QixJQUFJa0osRUFBUSxFQUNaMUosRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDdkQ2UCxFQUFVM1EsS0FBS3lDLEVBQVMzQixFQUFPOFAsSUFBUzFKLEtBQ3pDUSxFQUFXeEUsTUFBSyxHQUNoQndFLEVBQVdJLGVBRWhCLFdBQ0NKLEVBQVd4RSxNQUFLLEdBQ2hCd0UsRUFBV0ksb0IsNkJDWnZCLHNDQUNXd29CLEVBRFgsTUFDcUIsRyw2QkNEckIscURBRU8sU0FBU2hNLEVBQU9qVSxFQUFTRSxFQUFZVixHQUd4QyxZQUZtQixJQUFmVSxJQUF5QkEsRUFBYUMsS0FDMUNELEdBQWNBLEdBQWMsR0FBSyxFQUFJQyxJQUFXRCxFQUN6QyxhQUFRLFNBQVVySixFQUFRUSxHQUM3QixPQUFPLFlBQWVSLEVBQVFRLEVBQVkySSxFQUFTRSxPQUFZakYsR0FBVyxFQUFNdUUsUSw2QkNOeEYsNkNBQ08sU0FBUzBnQixFQUFTQyxHQUNyQixPQUFPLGFBQVEsU0FBVXRwQixFQUFRUSxHQUM3QixJQUNJUixFQUFPVSxVQUFVRixHQUVyQixRQUNJQSxFQUFXNkIsSUFBSWluQixTLDZCQ1AzQixxREFFTyxTQUFTN1EsRUFBVWhQLEVBQVdsTyxHQUNqQyxPQUFPLFlBQVEsWUFBV2tPLEVBQVdsTyxFQUFTLFksNkJDSGxELHFGQU1PLFNBQVNrWCxFQUFNaEosRUFBV2xGLEdBQzdCLElBQUkya0IsRUFBa0JsckIsVUFBVVYsUUFBVSxFQUMxQyxPQUFPLFNBQVUwQyxHQUNiLE9BQU9BLEVBQU8yQyxLQUFLOEcsRUFBWSxhQUFPLFNBQVV0TSxFQUFHeEUsR0FBSyxPQUFPOFEsRUFBVXRNLEVBQUd4RSxFQUFHcUgsTUFBYyxJQUFVLFlBQUssR0FBSWtwQixFQUFrQixZQUFlM2tCLEdBQWdCLGFBQWEsV0FBYyxPQUFPLElBQUksVyw2QkNUL00seUVBS08sU0FBU2dsQixFQUFRelIsRUFBYTBSLEVBQWtCbkUsRUFBVTdSLEdBQzdELE9BQU8sYUFBUSxTQUFVeFQsRUFBUVEsR0FDN0IsSUFBSWlwQixFQUNDRCxHQUFnRCxtQkFBckJBLEdBSTNCbkUsRUFBV21FLEVBQWlCbkUsU0FBVW9FLEVBQVVELEVBQWlCQyxRQUFTalcsRUFBWWdXLEVBQWlCaFcsV0FIeEdpVyxFQUFVRCxFQUtkLElBQUlFLEVBQVMsSUFBSUMsSUFDYkMsRUFBUyxTQUFValYsR0FDbkIrVSxFQUFPbG5CLFFBQVFtUyxHQUNmQSxFQUFHblUsSUFFSHFwQixFQUFjLFNBQVVycUIsR0FBTyxPQUFPb3FCLEdBQU8sU0FBVUUsR0FBWSxPQUFPQSxFQUFTbnNCLE1BQU02QixPQUN6RnVxQixFQUFlLEVBQ2ZDLEdBQW9CLEVBQ3BCQyxFQUEwQixJQUFJLElBQW1CenBCLEdBQVksU0FBVTVHLEdBQ3ZFLElBQ0ksSUFBSXN3QixFQUFRcFMsRUFBWWxlLEdBQ3BCdXdCLEVBQVVULEVBQU9sd0IsSUFBSTB3QixHQUN6QixJQUFLQyxFQUFTLENBQ1ZULEVBQU9oRixJQUFJd0YsRUFBUUMsRUFBVTNXLEVBQVlBLElBQWMsSUFBSSxLQUMzRCxJQUFJNFcsR0FvQmlCbHdCLEVBcEJpQmd3QixFQW9CWkcsRUFwQm1CRixHQXFCakRodUIsRUFBUyxJQUFJLEtBQVcsU0FBVW11QixHQUNsQ1AsSUFDQSxJQUFJM1IsRUFBV2lTLEVBQWEzcEIsVUFBVTRwQixHQUN0QyxPQUFPLFdBQ0hsUyxFQUFTMVksY0FDVSxLQUFqQnFxQixHQUFzQkMsR0FBcUJDLEVBQXdCdnFCLG1CQUd0RXhGLElBQU1BLEVBQ05pQyxHQTVCQyxHQURBcUUsRUFBV3hFLEtBQUtvdUIsR0FDWi9FLEVBQVUsQ0FDVixJQUFJa0YsRUFBdUIsWUFBeUJKLEdBQVMsV0FDekRBLEVBQVF2cEIsV0FDUjJwQixTQUE0RUEsRUFBcUI3cUIscUJBQ2xHMEUsT0FBV0EsR0FBVyxXQUFjLE9BQU9zbEIsRUFBT2MsT0FBT04sTUFDNURELEVBQXdCNW5CLElBQUksWUFBVWdqQixFQUFTK0UsSUFBVTFwQixVQUFVNnBCLEtBRzNFSixFQUFRbnVCLEtBQUt5dEIsRUFBVUEsRUFBUTd2QixHQUFTQSxHQUU1QyxNQUFPNEYsR0FDSHFxQixFQUFZcnFCLEdBT3BCLElBQWlDdEYsRUFBS213QixFQUM5Qmx1QixLQU5MLFdBQWMsT0FBT3l0QixHQUFPLFNBQVVFLEdBQVksT0FBT0EsRUFBU2xwQixnQkFBbUJpcEIsR0FBYSxXQUFjLE9BQU9ILEVBQU9sRixXQUFZLFdBRXpJLE9BREF3RixHQUFvQixFQUNJLElBQWpCRCxLQUVYL3BCLEVBQU9VLFVBQVV1cEIsUSw2QkMvQ3pCLG9EQUVPLFNBQVM3YixJQUNaLE9BQU8sYUFBUSxTQUFVcE8sRUFBUVEsR0FDN0JSLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksV0FDbERBLEVBQVd4RSxNQUFLLEdBQ2hCd0UsRUFBV0ksY0FDWixXQUNDSixFQUFXeEUsTUFBSyxHQUNoQndFLEVBQVdJLG9CLDZCQ1R2QixxRkFNTyxTQUFTb0QsRUFBS3lGLEVBQVdsRixHQUM1QixJQUFJMmtCLEVBQWtCbHJCLFVBQVVWLFFBQVUsRUFDMUMsT0FBTyxTQUFVMEMsR0FDYixPQUFPQSxFQUFPMkMsS0FBSzhHLEVBQVksYUFBTyxTQUFVdE0sRUFBR3hFLEdBQUssT0FBTzhRLEVBQVV0TSxFQUFHeEUsRUFBR3FILE1BQWMsSUFBVSxZQUFTLEdBQUlrcEIsRUFBa0IsWUFBZTNrQixHQUFnQixhQUFhLFdBQWMsT0FBTyxJQUFJLFcsNkJDVG5OLDREQUdPLFNBQVNrbUIsSUFDWixPQUFPLGFBQVEsU0FBVXpxQixFQUFRUSxHQUM3QlIsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQ0RyxFQUFXeEUsS0FBSyxJQUFha1csV0FBV3RZLE9BQ3pDLFdBQ0M0RyxFQUFXeEUsS0FBSyxJQUFhb1csa0JBQzdCNVIsRUFBV0ksY0FDWixTQUFVcEIsR0FDVGdCLEVBQVd4RSxLQUFLLElBQWFtVyxZQUFZM1MsSUFDekNnQixFQUFXSSxvQiw2QkNadkIscURBRU8sU0FBU3FhLEVBQUl5UCxHQUNoQixPQUFPLFlBQU8sWUFBV0EsR0FBWSxTQUFVM25CLEVBQUdyRyxHQUFLLE9BQVFndUIsRUFBUzNuQixFQUFHckcsR0FBSyxFQUFJcUcsRUFBSXJHLEdBQVEsU0FBVXFHLEVBQUdyRyxHQUFLLE9BQVFxRyxFQUFJckcsRUFBSXFHLEVBQUlyRyxNLDZCQ0gxSSxzQ0FDV2l1QixFQURYLE1BQ3FCLEcsNkJDRHJCLHFEQUVPLFNBQVNDLEVBQVczQyxFQUFpQjdlLEVBQWdCQyxHQUV4RCxZQURtQixJQUFmQSxJQUF5QkEsRUFBYUMsS0FDdEMsWUFBV0YsR0FDSixhQUFTLFdBQWMsT0FBTzZlLElBQW9CN2UsRUFBZ0JDLElBRS9DLGlCQUFuQkQsSUFDUEMsRUFBYUQsR0FFVixhQUFTLFdBQWMsT0FBTzZlLElBQW9CNWUsTSw2QkNWN0QscURBRU8sU0FBU3doQixFQUFVcmUsRUFBYUMsRUFBTXBELEdBRXpDLFlBRG1CLElBQWZBLElBQXlCQSxFQUFhQyxLQUNuQyxhQUFRLFNBQVV0SixFQUFRUSxHQUM3QixJQUFJdVAsRUFBUXRELEVBQ1osT0FBTyxZQUFlek0sRUFBUVEsR0FBWSxTQUFVNUcsRUFBTzhQLEdBQVMsT0FBTzhDLEVBQVl1RCxFQUFPblcsRUFBTzhQLEtBQVdMLEdBQVksU0FBVXpQLEdBQ2xJbVcsRUFBUW5XLEtBQ1QsT0FBT3dLLEdBQVcsV0FBYyxPQUFRMkwsRUFBUSxhLDZCQ1IzRCxzREFFTyxTQUFTK2EsSUFFWixJQURBLElBQUkvUixFQUFlLEdBQ1ZsVyxFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENrVyxFQUFhbFcsR0FBTTdFLFVBQVU2RSxHQUVqQyxPQUFPLElBQU12RyxXQUFNLEVBQVEsWUFBYyxHQUFJLFlBQU95YyxPLDZCQ1B4RCxxREFFTyxTQUFTZ1MsRUFBSUwsR0FDaEIsT0FBTyxZQUFPLFlBQVdBLEdBQVksU0FBVTNuQixFQUFHckcsR0FBSyxPQUFRZ3VCLEVBQVMzbkIsRUFBR3JHLEdBQUssRUFBSXFHLEVBQUlyRyxHQUFRLFNBQVVxRyxFQUFHckcsR0FBSyxPQUFRcUcsRUFBSXJHLEVBQUlxRyxFQUFJckcsTSw2QkNIMUksZ0dBR08sU0FBU3N1QixJQUVaLElBREEsSUFBSTFrQixFQUFVLEdBQ0x6RCxFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcEN5RCxFQUFRekQsR0FBTTdFLFVBQVU2RSxHQUU1QixJQUFJb29CLEVBQWMsWUFBZTNrQixHQUNqQyxPQUFPLFNBQVV0RyxHQUFVLE9BQU8sSUFBVzFELFdBQU0sRUFBUSxZQUFjLENBQUMwRCxHQUFTLFlBQU9pckIsTUFFdkYsSUFBSUMsRUFBb0JGLEcsNkJDWC9CLG9EQUVPLFNBQVNHLElBQ1osT0FBTyxhQUFRLFNBQVVuckIsRUFBUVEsR0FDN0IsSUFBSXNULEVBQ0FzWCxHQUFVLEVBQ2RwckIsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQsSUFBSWEsRUFBSXFaLEVBQ1JBLEVBQU9sYSxFQUNQd3hCLEdBQVc1cUIsRUFBV3hFLEtBQUssQ0FBQ3ZCLEVBQUdiLElBQy9Cd3hCLEdBQVUsVyw2QkNWdEIsOENBQ08sU0FBU0MsSUFFWixJQURBLElBQUlDLEVBQWEsR0FDUnpvQixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcEN5b0IsRUFBV3pvQixHQUFNN0UsVUFBVTZFLEdBRS9CLElBQUl2RixFQUFTZ3VCLEVBQVdodUIsT0FDeEIsR0FBZSxJQUFYQSxFQUNBLE1BQU0sSUFBSW9OLE1BQU0sdUNBRXBCLE9BQU8sYUFBSSxTQUFVM0gsR0FFakIsSUFEQSxJQUFJd29CLEVBQWN4b0IsRUFDVHBLLEVBQUksRUFBR0EsRUFBSTJFLEVBQVEzRSxJQUFLLENBQzdCLElBQUk4QixFQUFJOHdCLGFBQWlELEVBQVNBLEVBQVlELEVBQVczeUIsSUFDekYsUUFBaUIsSUFBTjhCLEVBSVAsT0FIQTh3QixFQUFjOXdCLEVBTXRCLE9BQU84d0IsTyw2QkNyQmYsNkRBR08sU0FBU0MsRUFBUWxZLEdBQ3BCLE9BQU9BLEVBQVcsU0FBVXRULEdBQVUsT0FBTyxZQUFRc1QsRUFBUixDQUFrQnRULElBQWEsU0FBVUEsR0FBVSxPQUFPLFlBQVUsSUFBSSxJQUFkLENBQXlCQSxNLDZCQ0pwSSx1REFFTyxTQUFTeXJCLEVBQWdCQyxHQUM1QixPQUFPLFNBQVUxckIsR0FDYixJQUFJd0QsRUFBVSxJQUFJLElBQWdCa29CLEdBQ2xDLE9BQU8sSUFBSSxJQUFzQjFyQixHQUFRLFdBQWMsT0FBT3dELFEsNkJDTHRFLHNEQUVPLFNBQVNtb0IsSUFDWixPQUFPLFNBQVUzckIsR0FDYixJQUFJd0QsRUFBVSxJQUFJLElBQ2xCLE9BQU8sSUFBSSxJQUFzQnhELEdBQVEsV0FBYyxPQUFPd0QsUSw2QkNMdEUsNkRBR08sU0FBU29vQixFQUFjbkcsRUFBWW9HLEVBQVlDLEVBQXFCQyxHQUNuRUQsSUFBd0IsWUFBV0EsS0FDbkNDLEVBQW9CRCxHQUV4QixJQUFJeFksRUFBVyxZQUFXd1ksR0FBdUJBLE9BQXNCMW5CLEVBQ3ZFLE9BQU8sU0FBVXBFLEdBQVUsT0FBTyxZQUFVLElBQUksSUFBY3lsQixFQUFZb0csRUFBWUUsR0FBb0J6WSxFQUF4RSxDQUFrRnRULE0sNkJDUnhILDJFQUtPLFNBQVM4SSxFQUFPa2pCLEdBQ25CLElBQUlwc0IsRUFFQWlKLEVBREFzRSxFQUFRN0QsSUFVWixPQVJxQixNQUFqQjBpQixJQUM2QixpQkFBbEJBLEdBQ05wc0IsRUFBS29zQixFQUFjN2UsTUFBT0EsT0FBZSxJQUFQdk4sRUFBZ0IwSixJQUFXMUosRUFBSWlKLEVBQVFtakIsRUFBY25qQixPQUd4RnNFLEVBQVE2ZSxHQUdUN2UsR0FBUyxFQUNWLFdBQWMsT0FBTyxLQUNyQixhQUFRLFNBQVVuTixFQUFRUSxHQUN4QixJQUNJeXJCLEVBREFDLEVBQVEsRUFFUkMsRUFBYyxXQUdkLEdBRkFGLFNBQXNEQSxFQUFVdnNCLGNBQ2hFdXNCLEVBQVksS0FDQyxNQUFUcGpCLEVBQWUsQ0FDZixJQUFJb1EsRUFBNEIsaUJBQVZwUSxFQUFxQixZQUFNQSxHQUFTLFlBQVVBLEVBQU1xakIsSUFDdEVFLEVBQXVCLFlBQXlCNXJCLEdBQVksV0FDNUQ0ckIsRUFBcUIxc0IsY0FDckIyc0IsT0FFSnBULEVBQVN2WSxVQUFVMHJCLFFBR25CQyxLQUdKQSxFQUFvQixXQUNwQixJQUFJeEUsR0FBWSxFQUNoQm9FLEVBQVlqc0IsRUFBT1UsVUFBVSxZQUF5QkYsT0FBWTRELEdBQVcsYUFDbkU4bkIsRUFBUS9lLEVBQ044ZSxFQUNBRSxJQUdBdEUsR0FBWSxFQUloQnJuQixFQUFXSSxlQUdmaW5CLEdBQ0FzRSxLQUdSRSxTLDZCQ3hEWixrRUFJTyxTQUFTQyxFQUFXclQsR0FDdkIsT0FBTyxhQUFRLFNBQVVqWixFQUFRUSxHQUM3QixJQUFJNFgsRUFFQW1VLEVBREFDLEdBQVksRUFFWkMsR0FBcUIsRUFDckJDLEdBQWlCLEVBQ2pCbGYsRUFBZ0IsV0FBYyxPQUFPa2YsR0FBa0JELElBQXVCanNCLEVBQVdJLFlBQVksSUFrQnJHK3JCLEVBQXlCLFdBQ3pCRCxHQUFpQixFQUNqQnRVLEVBQVdwWSxFQUFPVSxVQUFVLFlBQXlCRixPQUFZNEQsR0FBVyxXQUN4RXNvQixHQUFpQixHQUNoQmxmLE1BcEJBK2UsSUFDREEsRUFBZSxJQUFJLElBQ25CLFlBQVV0VCxFQUFTc1QsSUFBZTdyQixVQUFVLFlBQXlCRixHQUFZLFdBQ3pFNFgsRUFDQXVVLElBR0FILEdBQVksS0FFakIsV0FDQ0MsR0FBcUIsRUFDckJqZixTQUdEK2UsR0FNd0N2d0IsV0FFM0N3d0IsSUFDQXBVLEVBQVMxWSxjQUNUMFksRUFBVyxLQUNYb1UsR0FBWSxFQUNaRyxNQUdSQSxTLDZCQzFDUiwwRUFLTyxTQUFTQyxFQUFNQyxHQUVsQixJQUFJN2hCLE9BRGtCLElBQWxCNmhCLElBQTRCQSxFQUFnQnZqQixLQVVoRCxJQUFJMUosR0FQQW9MLEVBREE2aEIsR0FBMEMsaUJBQWxCQSxFQUNmQSxFQUdBLENBQ0wxZixNQUFPMGYsSUFHQzFmLE1BQU9BLE9BQWUsSUFBUHZOLEVBQWdCMEosSUFBVzFKLEVBQUlpSixFQUFRbUMsRUFBT25DLE1BQU9sSCxFQUFLcUosRUFBTzhoQixlQUFnQkEsT0FBd0IsSUFBUG5yQixHQUF3QkEsRUFDekosT0FBT3dMLEdBQVMsRUFDVixJQUNBLGFBQVEsU0FBVW5OLEVBQVFRLEdBQ3hCLElBQ0k0WCxFQURBOFQsRUFBUSxFQUVSYSxFQUFvQixXQUNwQixJQUFJbEYsR0FBWSxFQUNoQnpQLEVBQVdwWSxFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUNuRWt6QixJQUNBWixFQUFRLEdBRVoxckIsRUFBV3hFLEtBQUtwQyxVQUNqQndLLEdBQVcsU0FBVTVFLEdBQ3BCLEdBQUkwc0IsSUFBVS9lLEVBQU8sQ0FDakIsSUFBSTZmLEVBQVUsV0FDTjVVLEdBQ0FBLEVBQVMxWSxjQUNUMFksRUFBVyxLQUNYMlUsS0FHQWxGLEdBQVksR0FHcEIsR0FBYSxNQUFUaGYsRUFBZSxDQUNmLElBQUlvUSxFQUE0QixpQkFBVnBRLEVBQXFCLFlBQU1BLEdBQVMsWUFBVUEsRUFBTXJKLEVBQUswc0IsSUFDM0VFLEVBQXVCLFlBQXlCNXJCLEdBQVksV0FDNUQ0ckIsRUFBcUIxc0IsY0FDckJzdEIsT0FDRCxXQUNDeHNCLEVBQVdJLGNBRWZxWSxFQUFTdlksVUFBVTByQixRQUduQlksU0FJSnhzQixFQUFXN0MsTUFBTTZCLE9BR3JCcW9CLElBQ0F6UCxFQUFTMVksY0FDVDBZLEVBQVcsS0FDWDJVLE1BR1JBLFMsNkJDakVaLGtFQUlPLFNBQVNFLEVBQVVoVSxHQUN0QixPQUFPLGFBQVEsU0FBVWpaLEVBQVFRLEdBQzdCLElBQUk0WCxFQUVBOFUsRUFEQVYsR0FBWSxFQUVaVyxFQUF3QixXQUN4Qi9VLEVBQVdwWSxFQUFPVSxVQUFVLFlBQXlCRixPQUFZNEQsT0FBV0EsR0FBVyxTQUFVNUUsR0FDeEYwdEIsSUFDREEsRUFBVSxJQUFJLElBQ2QsWUFBVWpVLEVBQVNpVSxJQUFVeHNCLFVBQVUsWUFBeUJGLEdBQVksV0FDeEUsT0FBTzRYLEVBQVcrVSxJQUEyQlgsR0FBWSxPQUc3RFUsR0FDQUEsRUFBUWx4QixLQUFLd0QsT0FHakJndEIsSUFDQXBVLEVBQVMxWSxjQUNUMFksRUFBVyxLQUNYb1UsR0FBWSxFQUNaVyxNQUdSQSxTLDZCQzVCUiwrREFHTyxTQUFTQyxFQUFXQyxFQUFRMWtCLEdBRS9CLFlBRGtCLElBQWRBLElBQXdCQSxFQUFZLEtBQ2pDLFlBQU8sWUFBUzBrQixFQUFRMWtCLE0sNkJDTG5DLHNEQUVPLFNBQVMya0IsRUFBSzlnQixFQUFhQyxHQUM5QixPQUFPLFlBQVEsWUFBY0QsRUFBYUMsRUFBTXpPLFVBQVVWLFFBQVUsR0FBRyxNLDZCQ0gzRSwyREFHTyxTQUFTaXdCLEVBQWNDLEVBQVczVixHQUVyQyxZQURtQixJQUFmQSxJQUF5QkEsRUFBYSxTQUFVdFosRUFBRzNELEdBQUssT0FBTzJELElBQU0zRCxJQUNsRSxhQUFRLFNBQVVvRixFQUFRUSxHQUM3QixJQUFJaXRCLEVBNEJELENBQ0g5VSxPQUFRLEdBQ1IvWCxVQUFVLEdBN0JOOHNCLEVBMkJELENBQ0gvVSxPQUFRLEdBQ1IvWCxVQUFVLEdBNUJONFgsRUFBTyxTQUFVbVYsR0FDakJudEIsRUFBV3hFLEtBQUsyeEIsR0FDaEJudEIsRUFBV0ksWUFFWGd0QixFQUFtQixTQUFVQyxFQUFXQyxHQUN4QyxJQUFJQyxFQUEwQixZQUF5QnZ0QixHQUFZLFNBQVVqQyxHQUN6RSxJQUFJb2EsRUFBU21WLEVBQVduVixPQUFRL1gsRUFBV2t0QixFQUFXbHRCLFNBQ2hDLElBQWxCK1gsRUFBT3JiLE9BQ1BzRCxFQUFXNFgsR0FBSyxHQUFTcVYsRUFBVWxWLE9BQU9wYixLQUFLZ0IsSUFHOUNzWixFQUFXdFosRUFBR29hLEVBQU9oYSxVQUFZNlosR0FBSyxNQUU1QyxXQUNDcVYsRUFBVWp0QixVQUFXLEVBQ3JCLElBQUlBLEVBQVdrdEIsRUFBV2x0QixTQUFVK1gsRUFBU21WLEVBQVduVixPQUN4RC9YLEdBQVk0WCxFQUF1QixJQUFsQkcsRUFBT3JiLFFBQ3hCeXdCLFNBQWtGQSxFQUF3QnJ1QixpQkFFOUcsT0FBT3F1QixHQUVYL3RCLEVBQU9VLFVBQVVrdEIsRUFBaUJILEVBQVFDLElBQzFDLFlBQVVGLEdBQVc5c0IsVUFBVWt0QixFQUFpQkYsRUFBUUQsUyw2QkM5QmhFLHNEQUVPLFNBQVNPLEVBQVlDLEVBQW9CcEMsRUFBWWxqQixHQUN4RCxJQUFJL0ksRUFBSStCLEVBQUlnQyxFQUNSOGhCLEVBQ0FsUixHQUFXLEVBT2YsT0FOSTBaLEdBQW9ELGlCQUF2QkEsR0FDNUJydUIsRUFBS3F1QixFQUFtQnhJLFdBQVlBLE9BQW9CLElBQVA3bEIsRUFBZ0IwSixJQUFXMUosRUFBSStCLEVBQUtzc0IsRUFBbUJwQyxXQUFZQSxPQUFvQixJQUFQbHFCLEVBQWdCMkgsSUFBVzNILEVBQXNDNFMsT0FBa0IsS0FBcEQ1USxFQUFLc3FCLEVBQW1CMVosV0FBNkM1USxFQUFJZ0YsRUFBWXNsQixFQUFtQnRsQixXQUd6UThjLEVBQWN3SSxRQUErREEsRUFBcUIza0IsSUFFL0YsWUFBTSxDQUNUa0ssVUFBVyxXQUFjLE9BQU8sSUFBSSxJQUFjaVMsRUFBWW9HLEVBQVlsakIsSUFDMUV3USxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsb0JBQXFCOUUsTSw2QkNoQjdCLDhFQUtPLFNBQVMyWixFQUFPemtCLEdBQ25CLE9BQU8sYUFBUSxTQUFVekosRUFBUVEsR0FDN0IsSUFDSTJ0QixFQURBL2UsR0FBVyxFQUVYZ2YsR0FBWSxFQUNaMWtCLEVBQVEsRUFDWjFKLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQzVEdzBCLEdBQVksRUFDUDNrQixJQUFhQSxFQUFVN1AsRUFBTzhQLElBQVMxSixLQUN4Q29QLEdBQVk1TyxFQUFXN0MsTUFBTSxJQUFJLElBQWMsNkJBQy9DeVIsR0FBVyxFQUNYK2UsRUFBY3YwQixNQUVuQixXQUNLd1YsR0FDQTVPLEVBQVd4RSxLQUFLbXlCLEdBQ2hCM3RCLEVBQVdJLFlBR1hKLEVBQVc3QyxNQUFNeXdCLEVBQVksSUFBSSxJQUFjLHNCQUF3QixJQUFJLGMsNkJDeEIzRiw4Q0FDTyxTQUFTQyxFQUFLbGhCLEdBQ2pCLE9BQU8sYUFBTyxTQUFVdlEsRUFBRzhNLEdBQVMsT0FBT3lELEdBQVN6RCxPLDZCQ0Z4RCwyREFHTyxTQUFTNGtCLEVBQVNDLEdBQ3JCLE9BQU9BLEdBQWEsRUFFWixJQUNGLGFBQVEsU0FBVXZ1QixFQUFRUSxHQUN4QixJQUFJZ3VCLEVBQU8sSUFBSXp6QixNQUFNd3pCLEdBQ2pCbmhCLEVBQU8sRUFhWCxPQVpBcE4sRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQsSUFBSTYwQixFQUFhcmhCLElBQ2pCLEdBQUlxaEIsRUFBYUYsRUFDYkMsRUFBS0MsR0FBYzcwQixNQUVsQixDQUNELElBQUk4UCxFQUFRK2tCLEVBQWFGLEVBQ3JCRyxFQUFXRixFQUFLOWtCLEdBQ3BCOGtCLEVBQUs5a0IsR0FBUzlQLEVBQ2Q0RyxFQUFXeEUsS0FBSzB5QixRQUdqQixXQUNIRixFQUFPLFcsNkJDdkJ2QixrRUFJTyxTQUFTRyxFQUFVMVYsR0FDdEIsT0FBTyxhQUFRLFNBQVVqWixFQUFRUSxHQUM3QixJQUFJb3VCLEdBQVMsRUFDVEMsRUFBaUIsWUFBeUJydUIsR0FBWSxXQUN0RHF1QixTQUFnRUEsRUFBZW52QixjQUMvRWt2QixHQUFTLElBQ1YsS0FDSCxZQUFVM1YsR0FBVXZZLFVBQVVtdUIsR0FDOUI3dUIsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FBUyxPQUFPZzFCLEdBQVVwdUIsRUFBV3hFLEtBQUtwQyxZLDZCQ1psSCxvREFFTyxTQUFTazFCLEVBQVVybEIsR0FDdEIsT0FBTyxhQUFRLFNBQVV6SixFQUFRUSxHQUM3QixJQUFJb3VCLEdBQVMsRUFDVGxsQixFQUFRLEVBQ1oxSixFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUFTLE9BQVFnMUIsSUFBV0EsR0FBVW5sQixFQUFVN1AsRUFBTzhQLFFBQWNsSixFQUFXeEUsS0FBS3BDLFksNkJDTjdKLDREQUdPLFNBQVNtMUIsSUFFWixJQURBLElBQUloVCxFQUFTLEdBQ0psWixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENrWixFQUFPbFosR0FBTTdFLFVBQVU2RSxHQUUzQixJQUFJOEYsRUFBWSxZQUFhb1QsR0FDN0IsT0FBTyxhQUFRLFNBQVUvYixFQUFRUSxJQUM1Qm1JLEVBQVksWUFBT29ULEVBQVEvYixFQUFRMkksR0FBYSxZQUFPb1QsRUFBUS9iLElBQVNVLFVBQVVGLFEsNkJDVjNGLHFEQUVPLFNBQVN3dUIsSUFDWixPQUFPLFlBQVUsTyw2QkNIckIscURBRU8sU0FBU0MsRUFBWWhILEVBQWlCN2UsR0FDekMsT0FBTyxZQUFXQSxHQUFrQixhQUFVLFdBQWMsT0FBTzZlLElBQW9CN2UsR0FBa0IsYUFBVSxXQUFjLE9BQU82ZSxPLDZCQ0g1SSxxREFFTyxTQUFTaUgsRUFBVzFpQixFQUFhQyxHQUNwQyxPQUFPLGFBQVEsU0FBVXpNLEVBQVFRLEdBQzdCLElBQUl1UCxFQUFRdEQsRUFFWixPQURBLGFBQVUsU0FBVTdTLEVBQU84UCxHQUFTLE9BQU84QyxFQUFZdUQsRUFBT25XLEVBQU84UCxNQUFXLFNBQVU5TSxFQUFHK1EsR0FBYyxPQUFTb0MsRUFBUXBDLEVBQWFBLElBQXpJLENBQXlKM04sR0FBUVUsVUFBVUYsR0FDcEssV0FDSHVQLEVBQVEsVyw2QkNQcEIsa0VBSU8sU0FBU29mLEVBQVVsVyxHQUN0QixPQUFPLGFBQVEsU0FBVWpaLEVBQVFRLEdBQzdCLFlBQVV5WSxHQUFVdlksVUFBVSxZQUF5QkYsR0FBWSxXQUFjLE9BQU9BLEVBQVdJLGFBQWUsT0FDakhKLEVBQVdWLFFBQVVFLEVBQU9VLFVBQVVGLFEsNkJDUC9DLG9EQUVPLFNBQVM0dUIsRUFBVTNsQixFQUFXNGxCLEdBRWpDLFlBRGtCLElBQWRBLElBQXdCQSxHQUFZLEdBQ2pDLGFBQVEsU0FBVXJ2QixFQUFRUSxHQUM3QixJQUFJa0osRUFBUSxFQUNaMUosRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQsSUFBSXVDLEVBQVNzTixFQUFVN1AsRUFBTzhQLE1BQzdCdk4sR0FBVWt6QixJQUFjN3VCLEVBQVd4RSxLQUFLcEMsSUFDeEN1QyxHQUFVcUUsRUFBV0ksb0IsNkJDVGxDLGtFQUlPLFNBQVMwdUIsRUFBSW50QixFQUFnQnhFLEVBQU9pRCxHQUN2QyxJQUFJMnVCLEVBQWMsWUFBV3B0QixJQUFtQnhFLEdBQVNpRCxFQUVqRCxDQUFFNUUsS0FBTW1HLEVBQWdCeEUsTUFBT0EsRUFBT2lELFNBQVVBLEdBQ2xEdUIsRUFDTixPQUFPb3RCLEVBQ0QsYUFBUSxTQUFVdnZCLEVBQVFRLEdBQ3hCLElBQUlaLEVBQzZCLFFBQWhDQSxFQUFLMnZCLEVBQVk3dUIsaUJBQThCLElBQVBkLEdBQXlCQSxFQUFHOUcsS0FBS3kyQixHQUMxRSxJQUFJQyxHQUFVLEVBQ2R4dkIsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQsSUFBSWdHLEVBQ3dCLFFBQTNCQSxFQUFLMnZCLEVBQVl2ekIsWUFBeUIsSUFBUDRELEdBQXlCQSxFQUFHOUcsS0FBS3kyQixFQUFhMzFCLEdBQ2xGNEcsRUFBV3hFLEtBQUtwQyxNQUNqQixXQUNDLElBQUlnRyxFQUNKNHZCLEdBQVUsRUFDc0IsUUFBL0I1dkIsRUFBSzJ2QixFQUFZM3VCLGdCQUE2QixJQUFQaEIsR0FBeUJBLEVBQUc5RyxLQUFLeTJCLEdBQ3pFL3VCLEVBQVdJLGNBQ1osU0FBVXBCLEdBQ1QsSUFBSUksRUFDSjR2QixHQUFVLEVBQ21CLFFBQTVCNXZCLEVBQUsydkIsRUFBWTV4QixhQUEwQixJQUFQaUMsR0FBeUJBLEVBQUc5RyxLQUFLeTJCLEVBQWEvdkIsR0FDbkZnQixFQUFXN0MsTUFBTTZCLE1BQ2xCLFdBQ0MsSUFBSUksRUFBSStCLEVBQ0o2dEIsSUFDbUMsUUFBbEM1dkIsRUFBSzJ2QixFQUFZN3ZCLG1CQUFnQyxJQUFQRSxHQUF5QkEsRUFBRzlHLEtBQUt5MkIsSUFFaEQsUUFBL0I1dEIsRUFBSzR0QixFQUFZbEcsZ0JBQTZCLElBQVAxbkIsR0FBeUJBLEVBQUc3SSxLQUFLeTJCLFVBSTdFLE0sNkJDckNaLDhEQUdPLFNBQVNFLEVBQWFwSyxFQUFVMWMsRUFBV3FDLFFBQzVCLElBQWRyQyxJQUF3QkEsRUFBWSxLQUN4QyxJQUFJK21CLEVBQVksWUFBTXJLLEVBQVUxYyxHQUNoQyxPQUFPLGFBQVMsV0FBYyxPQUFPK21CLElBQWMxa0IsSyw2QkNOdkQsNERBR08sU0FBUzJrQixFQUFhaG5CLEdBRXpCLFlBRGtCLElBQWRBLElBQXdCQSxFQUFZLEtBQ2pDLGFBQVEsU0FBVTNJLEVBQVFRLEdBQzdCLElBQUl3RCxFQUFPMkUsRUFBVTBCLE1BQ3JCckssRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQsSUFBSXlRLEVBQU0xQixFQUFVMEIsTUFDaEJ1bEIsRUFBV3ZsQixFQUFNckcsRUFDckJBLEVBQU9xRyxFQUNQN0osRUFBV3hFLEtBQUssSUFBSTZ6QixFQUFhajJCLEVBQU9nMkIsV0FJcEQsSUFBSUMsRUFDQSxTQUFzQmoyQixFQUFPZzJCLEdBQ3pCeDBCLEtBQUt4QixNQUFRQSxFQUNid0IsS0FBS3cwQixTQUFXQSxJLDZCQ2xCeEIsOERBR08sU0FBU0UsRUFBWTFsQixFQUFLMmxCLEVBQWdCcG5CLEdBQzdDLElBQUk4SixFQUNBQyxFQUNBRSxFQVFKLEdBUEFqSyxFQUFZQSxRQUE2Q0EsRUFBWSxJQUNqRSxZQUFZeUIsR0FDWnFJLEVBQVFySSxFQUVZLGlCQUFSQSxJQUNac0ksRUFBT3RJLElBRVAybEIsRUFJQSxNQUFNLElBQUk5MEIsVUFBVSx1Q0FFeEIsR0FMSTJYLEVBQVEsV0FBYyxPQUFPbWQsR0FLcEIsTUFBVHRkLEdBQXlCLE1BQVJDLEVBQ2pCLE1BQU0sSUFBSXpYLFVBQVUsd0JBRXhCLE9BQU8sWUFBUSxDQUNYd1gsTUFBT0EsRUFDUEMsS0FBTUEsRUFDTi9KLFVBQVdBLEVBQ1hnSyxLQUFNQyxNLDZCQzNCZCxzREFFTyxTQUFTb2QsRUFBVWpFLEdBRXRCLFlBRDBCLElBQXRCQSxJQUFnQ0EsRUFBb0IsS0FDakQsYUFBSSxTQUFVbnlCLEdBQVMsTUFBTyxDQUFHQSxNQUFPQSxFQUFPbzJCLFVBQVdqRSxFQUFrQjFoQixZLDZCQ0p2Rix5RUFLTyxTQUFTK1QsRUFBTzZSLEdBQ25CLE9BQU8sYUFBUSxTQUFVandCLEVBQVFRLEdBQzdCLElBQUkwdkIsRUFBZ0IsSUFBSSxJQUN4QjF2QixFQUFXeEUsS0FBS2swQixFQUFjbnNCLGdCQUM5QixJQUFJOE4sRUFBZSxTQUFVclMsR0FDekIwd0IsRUFBY3Z5QixNQUFNNkIsR0FDcEJnQixFQUFXN0MsTUFBTTZCLElBVXJCLE9BUkFRLEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQVMsT0FBT3MyQixhQUFxRCxFQUFTQSxFQUFjbDBCLEtBQUtwQyxNQUFXLFdBQ3hLczJCLEVBQWN0dkIsV0FDZEosRUFBV0ksYUFDWmlSLElBQ0gsWUFBVW9lLEdBQWtCdnZCLFVBQVUsWUFBeUJGLEdBQVksV0FDdkUwdkIsRUFBY3R2QixXQUNkSixFQUFXeEUsS0FBTWswQixFQUFnQixJQUFJLE9BQ3RDLElBQU1yZSxJQUNGLFdBQ0hxZSxTQUE4REEsRUFBY3h3QixjQUM1RXd3QixFQUFnQixXLDZCQ3ZCNUIsa0VBSU8sU0FBU0MsRUFBWUMsRUFBWUMsUUFDWCxJQUFyQkEsSUFBK0JBLEVBQW1CLEdBQ3RELElBQUlDLEVBQWFELEVBQW1CLEVBQUlBLEVBQW1CRCxFQUMzRCxPQUFPLGFBQVEsU0FBVXB3QixFQUFRUSxHQUM3QixJQUFJK3ZCLEVBQVUsQ0FBQyxJQUFJLEtBRWZwakIsRUFBUSxFQUNaM00sRUFBV3hFLEtBQUt1MEIsRUFBUSxHQUFHeHNCLGdCQUMzQi9ELEVBQU9VLFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQzVELElBQUlvSCxFQUFLcEIsRUFDVCxJQUNJLElBQUssSUFBSTR3QixFQUFZLFlBQVNELEdBQVVFLEVBQWNELEVBQVV4MEIsUUFBU3kwQixFQUFZcjBCLEtBQU1xMEIsRUFBY0QsRUFBVXgwQixPQUFRLENBQ3hHeTBCLEVBQVk3MkIsTUFDbEJvQyxLQUFLcEMsSUFHdEIsTUFBT3VILEdBQVNILEVBQU0sQ0FBRXJELE1BQU93RCxHQUMvQixRQUNJLElBQ1FzdkIsSUFBZ0JBLEVBQVlyMEIsT0FBU3dELEVBQUs0d0IsRUFBVXB2QixTQUFTeEIsRUFBRzlHLEtBQUswM0IsR0FFN0UsUUFBVSxHQUFJeHZCLEVBQUssTUFBTUEsRUFBSXJELE9BRWpDLElBQUkzRSxFQUFJbVUsRUFBUWlqQixFQUFhLEVBSTdCLEdBSElwM0IsR0FBSyxHQUFLQSxFQUFJczNCLEdBQWUsR0FDN0JDLEVBQVE1eEIsUUFBUWlDLGFBRWR1TSxFQUFRbWpCLEdBQWUsRUFBRyxDQUM1QixJQUFJSSxFQUFXLElBQUksSUFDbkJILEVBQVFoekIsS0FBS216QixHQUNibHdCLEVBQVd4RSxLQUFLMDBCLEVBQVMzc0Isb0JBRTlCLFdBQ0MsS0FBT3dzQixFQUFRanpCLE9BQVMsR0FDcEJpekIsRUFBUTV4QixRQUFRaUMsV0FFcEJKLEVBQVdJLGNBQ1osU0FBVXBCLEdBQ1QsS0FBTyt3QixFQUFRanpCLE9BQVMsR0FDcEJpekIsRUFBUTV4QixRQUFRaEIsTUFBTTZCLEdBRTFCZ0IsRUFBVzdDLE1BQU02QixNQUNsQixXQUNVLEtBQ1Qrd0IsRUFBVSxjLDZCQ2hEdEIsa0dBUU8sU0FBUzFFLEVBQVc4RSxHQUd2QixJQUZBLElBQUkvd0IsRUFBSStCLEVBQ0oya0IsRUFBWSxHQUNQempCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3lqQixFQUFVempCLEVBQUssR0FBSzdFLFVBQVU2RSxHQUVsQyxJQUFJOEYsRUFBK0MsUUFBbEMvSSxFQUFLLFlBQWEwbUIsVUFBK0IsSUFBUDFtQixFQUFnQkEsRUFBSyxJQUM1RWd4QixFQUFpRCxRQUF2Qmp2QixFQUFLMmtCLEVBQVUsVUFBdUIsSUFBUDNrQixFQUFnQkEsRUFBSyxLQUM5RWt2QixFQUFnQnZLLEVBQVUsSUFBTWhkLElBQ3BDLE9BQU8sYUFBUSxTQUFVdEosRUFBUVEsR0FDN0IsSUFBSXN3QixFQUFnQixHQUNoQkMsR0FBaUIsRUFDakJDLEVBQWMsU0FBVXJLLEdBQ3hCLElBQUl2SSxFQUFTdUksRUFBT3ZJLE9BQVF3SSxFQUFPRCxFQUFPQyxLQUMxQ3hJLEVBQU94ZCxXQUNQZ21CLEVBQUtsbkIsY0FDTCxZQUFVb3hCLEVBQWVuSyxHQUN6Qm9LLEdBQWtCRSxLQUVsQkEsRUFBYyxXQUNkLEdBQUlILEVBQWUsQ0FDZixJQUFJbEssRUFBTyxJQUFJLElBQ2ZwbUIsRUFBVzZCLElBQUl1a0IsR0FDZixJQUFJc0ssRUFBVyxJQUFJLElBQ2ZwSyxFQUFXLENBQ1gxSSxPQUFROFMsRUFDUnRLLEtBQU1BLEVBQ054WixLQUFNLEdBRVYwakIsRUFBY3Z6QixLQUFLdXBCLEdBQ25CdG1CLEVBQVd4RSxLQUFLazFCLEVBQVNudEIsZ0JBQ3pCLFlBQWdCNmlCLEVBQU1qZSxHQUFXLFdBQWMsT0FBT3FvQixFQUFZbEssS0FBYzZKLEtBR3pELE9BQTNCQyxHQUFtQ0EsR0FBMEIsRUFDN0QsWUFBZ0Jwd0IsRUFBWW1JLEVBQVdzb0IsRUFBYUwsR0FBd0IsR0FHNUVHLEdBQWlCLEVBRXJCRSxJQUNBLElBQUlFLEVBQU8sU0FBVXhjLEdBQU0sT0FBT21jLEVBQWM3eUIsUUFBUXVFLFFBQVFtUyxJQUM1RHljLEVBQVksU0FBVXpjLEdBQ3RCd2MsR0FBSyxTQUFVdnhCLEdBQ1gsSUFBSXdlLEVBQVN4ZSxFQUFHd2UsT0FDaEIsT0FBT3pKLEVBQUd5SixNQUVkekosRUFBR25VLEdBQ0hBLEVBQVdkLGVBUWYsT0FOQU0sRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUR1M0IsR0FBSyxTQUFVeEssR0FDWEEsRUFBT3ZJLE9BQU9waUIsS0FBS3BDLEdBQ25CaTNCLEtBQW1CbEssRUFBT3ZaLE1BQVE0akIsRUFBWXJLLFNBRW5ELFdBQWMsT0FBT3lLLEdBQVUsU0FBVXRILEdBQVksT0FBT0EsRUFBU2xwQixpQkFBbUIsU0FBVXBCLEdBQU8sT0FBTzR4QixHQUFVLFNBQVV0SCxHQUFZLE9BQU9BLEVBQVNuc0IsTUFBTTZCLFVBQ2xLLFdBQ0hzeEIsRUFBZ0IsVyw2QkNqRTVCLGdHQVFPLFNBQVNPLEVBQWFqSyxFQUFVQyxHQUNuQyxPQUFPLGFBQVEsU0FBVXJuQixFQUFRUSxHQUM3QixJQUFJK3ZCLEVBQVUsR0FDVjFHLEVBQWMsU0FBVXJxQixHQUN4QixLQUFPLEVBQUkrd0IsRUFBUWp6QixRQUNmaXpCLEVBQVE1eEIsUUFBUWhCLE1BQU02QixHQUUxQmdCLEVBQVc3QyxNQUFNNkIsSUFFckIsWUFBVTRuQixHQUFVMW1CLFVBQVUsWUFBeUJGLEdBQVksU0FBVThtQixHQUN6RSxJQUFJbEosRUFBUyxJQUFJLElBQ2pCbVMsRUFBUWh6QixLQUFLNmdCLEdBQ2IsSUFNSWtILEVBTkFpQyxFQUFzQixJQUFJLElBTzlCLElBQ0lqQyxFQUFrQixZQUFVK0IsRUFBZ0JDLElBRWhELE1BQU85bkIsR0FFSCxZQURBcXFCLEVBQVlycUIsR0FHaEJnQixFQUFXeEUsS0FBS29pQixFQUFPcmEsZ0JBQ3ZCd2pCLEVBQW9CbGxCLElBQUlpakIsRUFBZ0I1a0IsVUFBVSxZQUF5QkYsR0FkekQsV0FDZCxZQUFVK3ZCLEVBQVNuUyxHQUNuQkEsRUFBT3hkLFdBQ1AybUIsRUFBb0I3bkIsZ0JBVzRFLElBQU1tcUIsT0FDM0csTUFDSDdwQixFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RCxJQUFJb0gsRUFBS3BCLEVBQ0wweEIsRUFBY2YsRUFBUXR5QixRQUMxQixJQUNJLElBQUssSUFBSXN6QixFQUFnQixZQUFTRCxHQUFjRSxFQUFrQkQsRUFBY3YxQixRQUFTdzFCLEVBQWdCcDFCLEtBQU1vMUIsRUFBa0JELEVBQWN2MUIsT0FBUSxDQUNwSXcxQixFQUFnQjUzQixNQUN0Qm9DLEtBQUtwQyxJQUd0QixNQUFPdUgsR0FBU0gsRUFBTSxDQUFFckQsTUFBT3dELEdBQy9CLFFBQ0ksSUFDUXF3QixJQUFvQkEsRUFBZ0JwMUIsT0FBU3dELEVBQUsyeEIsRUFBY253QixTQUFTeEIsRUFBRzlHLEtBQUt5NEIsR0FFekYsUUFBVSxHQUFJdndCLEVBQUssTUFBTUEsRUFBSXJELFdBRWxDLFdBQ0MsS0FBTyxFQUFJNHlCLEVBQVFqekIsUUFDZml6QixFQUFRNXhCLFFBQVFpQyxXQUVwQkosRUFBV0ksYUFDWmlwQixHQUFhLFdBQ1osS0FBTyxFQUFJMEcsRUFBUWp6QixRQUNmaXpCLEVBQVE1eEIsUUFBUWUsdUIsNkJDNURoQyxrRUFJTyxTQUFTK3hCLEVBQVdwSyxHQUN2QixPQUFPLGFBQVEsU0FBVXJuQixFQUFRUSxHQUM3QixJQUFJNGQsRUFDQXFKLEVBQ0FvQyxFQUFjLFNBQVVycUIsR0FDeEI0ZSxFQUFPemdCLE1BQU02QixHQUNiZ0IsRUFBVzdDLE1BQU02QixJQUVqQmt5QixFQUFhLFdBS2IsSUFBSXBNLEVBSkptQyxTQUFzRUEsRUFBa0IvbkIsY0FDeEYwZSxTQUFnREEsRUFBT3hkLFdBQ3ZEd2QsRUFBUyxJQUFJLElBQ2I1ZCxFQUFXeEUsS0FBS29pQixFQUFPcmEsZ0JBRXZCLElBQ0l1aEIsRUFBa0IsWUFBVStCLEtBRWhDLE1BQU83bkIsR0FFSCxZQURBcXFCLEVBQVlycUIsR0FHaEI4bEIsRUFBZ0I1a0IsVUFBVyttQixFQUFvQixZQUF5QmpuQixFQUFZa3hCLEVBQVlBLEVBQVk3SCxLQUVoSDZILElBQ0ExeEIsRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FBUyxPQUFPd2tCLEVBQU9waUIsS0FBS3BDLE1BQVcsV0FDbkd3a0IsRUFBT3hkLFdBQ1BKLEVBQVdJLGFBQ1ppcEIsR0FBYSxXQUNacEMsU0FBc0VBLEVBQWtCL25CLGNBQ3hGMGUsRUFBUyxjLDZCQ2pDckIsdUZBT08sU0FBU3VULElBRVosSUFEQSxJQUFJQyxFQUFTLEdBQ0ovdUIsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDK3VCLEVBQU8vdUIsR0FBTTdFLFVBQVU2RSxHQUUzQixJQUFJc0csRUFBVSxZQUFrQnlvQixHQUNoQyxPQUFPLGFBQVEsU0FBVTV4QixFQUFRUSxHQWM3QixJQWJBLElBQUkrRSxFQUFNcXNCLEVBQU90MEIsT0FDYnUwQixFQUFjLElBQUk5MkIsTUFBTXdLLEdBQ3hCNkosRUFBV3dpQixFQUFPcnJCLEtBQUksV0FBYyxPQUFPLEtBQzNDdXJCLEdBQVEsRUFDUjFWLEVBQVUsU0FBVXpqQixHQUNwQixZQUFVaTVCLEVBQU9qNUIsSUFBSStILFVBQVUsWUFBeUJGLEdBQVksU0FBVTVHLEdBQzFFaTRCLEVBQVlsNUIsR0FBS2lCLEVBQ1prNEIsR0FBVTFpQixFQUFTelcsS0FDcEJ5VyxFQUFTelcsSUFBSyxHQUNibTVCLEVBQVExaUIsRUFBU3NOLE1BQU0sUUFBZXROLEVBQVcsU0FFdkQsT0FFRXpXLEVBQUksRUFBR0EsRUFBSTRNLEVBQUs1TSxJQUNyQnlqQixFQUFRempCLEdBRVpxSCxFQUFPVSxVQUFVLFlBQXlCRixHQUFZLFNBQVU1RyxHQUM1RCxHQUFJazRCLEVBQU8sQ0FDUCxJQUFJL1YsRUFBUyxZQUFjLENBQUNuaUIsR0FBUSxZQUFPaTRCLElBQzNDcnhCLEVBQVd4RSxLQUFLbU4sRUFBVUEsRUFBUTdNLFdBQU0sRUFBUSxZQUFjLEdBQUksWUFBT3lmLEtBQVlBLGEsNkJDakNyRyx1REFFTyxTQUFTZ1csRUFBTzVvQixHQUNuQixPQUFPLFlBQWlCLElBQUtBLEssNkJDSGpDLHNEQUVPLFNBQVM2b0IsSUFFWixJQURBLElBQUlDLEVBQWMsR0FDVHB2QixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENvdkIsRUFBWXB2QixHQUFNN0UsVUFBVTZFLEdBRWhDLE9BQU8sSUFBSXZHLFdBQU0sRUFBUSxZQUFjLEdBQUksWUFBTzIxQixPLDZCQ1B0RCw4Q0FDV0MsRUFBMEIsYUFBaUIsU0FBVTl5QixHQUM1RCxPQUFPLFdBQ0hBLEVBQU9oRSxNQUNQQSxLQUFLbEMsS0FBTywwQkFDWmtDLEtBQUsyTyxRQUFVLDJCLDZCQ0x2Qiw2Q0FFSW9vQixFQUFtQixTQUFVL3lCLEdBRTdCLFNBQVMreUIsRUFBZ0I1VyxHQUNyQixJQUFJamMsRUFBUUYsRUFBT3RHLEtBQUtzQyxPQUFTQSxLQUVqQyxPQURBa0UsRUFBTWljLE9BQVNBLEVBQ1JqYyxFQXlCWCxPQTdCQSxZQUFVNnlCLEVBQWlCL3lCLEdBTTNCL0YsT0FBT0MsZUFBZTY0QixFQUFnQjUzQixVQUFXLFFBQVMsQ0FDdERmLElBQUssV0FDRCxPQUFPNEIsS0FBS3ViLFlBRWhCcGQsWUFBWSxFQUNacUssY0FBYyxJQUVsQnV1QixFQUFnQjUzQixVQUFVeUgsV0FBYSxTQUFVeEIsR0FDN0MsSUFBSTJhLEVBQWUvYixFQUFPN0UsVUFBVXlILFdBQVdsSixLQUFLc0MsS0FBTW9GLEdBRTFELE9BREMyYSxFQUFhcmIsUUFBVVUsRUFBV3hFLEtBQUtaLEtBQUttZ0IsUUFDdENKLEdBRVhnWCxFQUFnQjUzQixVQUFVb2MsU0FBVyxXQUNqQyxJQUFlclQsRUFBTmxJLEtBQW9Ca0ksU0FBVUMsRUFBOUJuSSxLQUErQ21JLFlBQWFnWSxFQUE1RG5nQixLQUF3RW1nQixPQUNqRixHQUFJalksRUFDQSxNQUFNQyxFQUdWLE9BREFuSSxLQUFLc0ksaUJBQ0U2WCxHQUVYNFcsRUFBZ0I1M0IsVUFBVXlCLEtBQU8sU0FBVXBDLEdBQ3ZDd0YsRUFBTzdFLFVBQVV5QixLQUFLbEQsS0FBS3NDLEtBQU9BLEtBQUttZ0IsT0FBUzNoQixJQUU3Q3U0QixFQTlCVyxDQUZ0QixLQWlDRSxJLDZCQ2pDRixvREFFTyxTQUFTQyxFQUFXQyxFQUFxQjFwQixHQUM1QyxJQUFJMkcsRUFBZSxZQUFXK2lCLEdBQXVCQSxFQUFzQixXQUFjLE9BQU9BLEdBQzVGbHlCLEVBQU8sU0FBVUssR0FBYyxPQUFPQSxFQUFXN0MsTUFBTTJSLE1BQzNELE9BQU8sSUFBSSxJQUFXM0csRUFBWSxTQUFVbkksR0FBYyxPQUFPbUksRUFBVUssU0FBUzdJLEVBQU0sRUFBR0ssSUFBaUJMLEssNkJDTGxILDhDQUNXbXlCLEVBQWdCLGFBQWlCLFNBQVVsekIsR0FDbEQsT0FBTyxTQUEyQjJLLEdBQzlCM0ssRUFBT2hFLE1BQ1BBLEtBQUtsQyxLQUFPLGdCQUNaa0MsS0FBSzJPLFFBQVVBLE8sNkJDTHZCLDhDQUNXd29CLEVBQWdCLGFBQWlCLFNBQVVuekIsR0FDbEQsT0FBTyxTQUEyQjJLLEdBQzlCM0ssRUFBT2hFLE1BQ1BBLEtBQUtsQyxLQUFPLGdCQUNaa0MsS0FBSzJPLFFBQVVBLE8sNkJDTHZCLHNEQUVPLFNBQVM2bEIsRUFBU3ZDLEVBQVExa0IsR0FNN0IsWUFMZSxJQUFYMGtCLElBQXFCQSxFQUFTLFFBQ2hCLElBQWQxa0IsSUFBd0JBLEVBQVksS0FDcEMwa0IsRUFBUyxJQUNUQSxFQUFTLEdBRU4sWUFBTUEsRUFBUUEsRUFBUTFrQixLLDZCQ1JqQywwRUFLTyxTQUFTdWlCLElBRVosSUFEQSxJQUFJNWtCLEVBQVUsR0FDTHpELEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3lELEVBQVF6RCxHQUFNN0UsVUFBVTZFLEdBRTVCLElBQUlvb0IsRUFBYyxZQUFlM2tCLEdBQ2pDLE9BQU8sSUFBSSxLQUFXLFNBQVU5RixHQUM1QixJQUFJaWMsRUFBYyxFQUNkK1YsRUFBZ0IsV0FDaEIsR0FBSS9WLEVBQWN3TyxFQUFZM3RCLE9BQVEsQ0FDbEMsSUFBSW0xQixPQUFhLEVBQ2pCLElBQ0lBLEVBQWEsWUFBVXhILEVBQVl4TyxNQUV2QyxNQUFPamQsR0FFSCxZQURBZ3pCLElBR0osSUFBSWxsQixFQUFrQixJQUFJLElBQW1COU0sT0FBWTRELEVBQVcsSUFBTSxLQUMxRXF1QixFQUFXL3hCLFVBQVU0TSxHQUNyQkEsRUFBZ0JqTCxJQUFJbXdCLFFBR3BCaHlCLEVBQVdJLFlBR25CNHhCLFMsNkJDL0JSLHFHQUlPLFNBQVNFLElBRVosSUFEQSxJQUFJcHNCLEVBQVUsR0FDTHpELEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3lELEVBQVF6RCxHQUFNN0UsVUFBVTZFLEdBRzVCLE9BQTBCLEtBRDFCeUQsRUFBVSxZQUFlQSxJQUNWaEosT0FBZSxZQUFVZ0osRUFBUSxJQUFNLElBQUksSUFBV3FzQixFQUFTcnNCLElBRTNFLFNBQVNxc0IsRUFBU3JzQixHQUNyQixPQUFPLFNBQVU5RixHQWFiLElBWkEsSUFBSW95QixFQUFnQixHQUNoQnhXLEVBQVUsU0FBVXpqQixHQUNwQmk2QixFQUFjcjFCLEtBQUssWUFBVStJLEVBQVEzTixJQUFJK0gsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDOUYsR0FBSWc1QixFQUFlLENBQ2YsSUFBSyxJQUFJbDRCLEVBQUksRUFBR0EsRUFBSWs0QixFQUFjdDFCLE9BQVE1QyxJQUN0Q0EsSUFBTS9CLEdBQUtpNkIsRUFBY2w0QixHQUFHZ0YsY0FFaENrekIsRUFBZ0IsS0FFcEJweUIsRUFBV3hFLEtBQUtwQyxTQUdmakIsRUFBSSxFQUFHaTZCLElBQWtCcHlCLEVBQVdWLFFBQVVuSCxFQUFJMk4sRUFBUWhKLE9BQVEzRSxJQUN2RXlqQixFQUFRempCLE0sNkJDM0JwQiwyRkFPTyxTQUFTZ2pCLElBRVosSUFEQSxJQUFJeFgsRUFBTyxHQUNGdEIsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDc0IsRUFBS3RCLEdBQU03RSxVQUFVNkUsR0FFekIsSUFBSXVHLEVBQWlCLFlBQWtCakYsR0FDdkMsT0FBT2lGLEVBQ0QsWUFBS3VTLEVBQWNyZixXQUFNLEVBQVEsWUFBYyxHQUFJLFlBQU82SCxLQUFTLFlBQWlCaUYsSUFDcEYsYUFBUSxTQUFVcEosRUFBUVEsR0FDeEIsWUFBa0IsWUFBYyxDQUFDUixHQUFTLFlBQU8sWUFBZW1FLEtBQWhFLENBQXlFM0QsUSw2QkNoQnJGLDJFQUtPLFNBQVN0QyxJQUVaLElBREEsSUFBSWlHLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLElBQUk4RixFQUFZLFlBQWF4RSxHQUM3QixPQUFPLGFBQVEsU0FBVW5FLEVBQVFRLEdBQzdCLGNBQVksWUFBSyxZQUFjLENBQUNSLEdBQVMsWUFBT21FLElBQVF3RSxJQUFZakksVUFBVUYsUSw2QkNadEYsbUZBTU8sU0FBU3F5QixJQUVaLElBREEsSUFBSTF1QixFQUFPLEdBQ0Z0QixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENzQixFQUFLdEIsR0FBTTdFLFVBQVU2RSxHQUV6QixJQUFJOEYsRUFBWSxZQUFheEUsR0FDekJrRixFQUFhLFlBQVVsRixFQUFNbUYsS0FFakMsT0FEQW5GLEVBQU8sWUFBZUEsR0FDZixhQUFRLFNBQVVuRSxFQUFRUSxHQUM3QixZQUFTNkksRUFBVCxDQUFxQixZQUFLLFlBQWMsQ0FBQ3JKLEdBQVMsWUFBT21FLElBQVF3RSxJQUFZakksVUFBVUYsUSw2QkNmL0YsNERBR08sU0FBUzhiLElBRVosSUFEQSxJQUFJaFcsRUFBVSxHQUNMekQsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDeUQsRUFBUXpELEdBQU03RSxVQUFVNkUsR0FFNUIsT0FBTyxhQUFRLFNBQVU3QyxFQUFRUSxHQUM3QixJQUFVbEUsV0FBTSxFQUFRLFlBQWMsQ0FBQzBELEdBQVMsWUFBT3NHLEtBQVc1RixVQUFVRixRLDBIQ1A3RSxTQUFTc3lCLEVBQXNCeHlCLEVBQU9xSSxHQUN6QyxJQUFLckksRUFDRCxNQUFNLElBQUlvSyxNQUFNLDJCQUVwQixPQUFPLElBQUkzSSxFQUFBLEdBQVcsU0FBVXZCLEdBQzVCLE9BQUFpSSxFQUFBLEdBQWdCakksRUFBWW1JLEdBQVcsV0FDbkMsSUFBSXpMLEVBQVdvRCxFQUFNNUcsT0FBTzJFLGlCQUM1QixPQUFBb0ssRUFBQSxHQUFnQmpJLEVBQVltSSxHQUFXLFdBQ25DekwsRUFBU2xCLE9BQU9LLE1BQUssU0FBVUYsR0FDdkJBLEVBQU9DLEtBQ1BvRSxFQUFXSSxXQUdYSixFQUFXeEUsS0FBS0csRUFBT3ZDLFlBR2hDLEdBQUcsUyxpRUNMWCxTQUFTbTVCLEVBQVV6eUIsRUFBT3FJLEdBQzdCLEdBQWEsTUFBVHJJLEVBQWUsQ0FDZixHQUFJLE9BQUEweUIsRUFBQSxHQUFvQjF5QixHQUNwQixPQ2JMLFNBQTRCQSxFQUFPcUksR0FDdEMsT0FBTyxPQUFBdEksRUFBQSxHQUFVQyxHQUFPcUMsS0FBSyxPQUFBcU0sRUFBQSxHQUFZckcsR0FBWSxPQUFBc0csRUFBQSxHQUFVdEcsSURZaERzcUIsQ0FBbUIzeUIsRUFBT3FJLEdBRXJDLEdBQUksT0FBQW9VLEVBQUEsR0FBWXpjLEdBQ1osT0VsQkwsU0FBdUJBLEVBQU9xSSxHQUNqQyxPQUFPLElBQUk1RyxFQUFBLEdBQVcsU0FBVXZCLEdBQzVCLElBQUk3SCxFQUFJLEVBQ1IsT0FBT2dRLEVBQVVLLFVBQVMsV0FDbEJyUSxJQUFNMkgsRUFBTWhELE9BQ1prRCxFQUFXSSxZQUdYSixFQUFXeEUsS0FBS3NFLEVBQU0zSCxNQUNqQjZILEVBQVdWLFFBQ1oxRSxLQUFLNE4sa0JGUU5rcUIsQ0FBYzV5QixFQUFPcUksR0FFaEMsR0FBSSxPQUFBd3FCLEVBQUEsR0FBVTd5QixHQUNWLE9HbkJMLFNBQXlCQSxFQUFPcUksR0FDbkMsT0FBTyxPQUFBdEksRUFBQSxHQUFVQyxHQUFPcUMsS0FBSyxPQUFBcU0sRUFBQSxHQUFZckcsR0FBWSxPQUFBc0csRUFBQSxHQUFVdEcsSUhrQmhEeXFCLENBQWdCOXlCLEVBQU9xSSxHQUVsQyxHQUFJLE9BQUEwcUIsRUFBQSxHQUFnQi95QixHQUNoQixPQUFPd3lCLEVBQXNCeHlCLEVBQU9xSSxHQUV4QyxHQUFJLE9BQUEycUIsRUFBQSxHQUFXaHpCLEdBQ1gsT0FBTyxPQUFBaXpCLEVBQUEsR0FBaUJqekIsRUFBT3FJLEdBRW5DLEdBQUksT0FBQXlOLEVBQUEsR0FBcUI5VixHQUNyQixPSTdCTCxTQUFvQ0EsRUFBT3FJLEdBQzlDLE9BQU9tcUIsRUFBc0IsWUFBbUN4eUIsR0FBUXFJLEdKNEJ6RDZxQixDQUEyQmx6QixFQUFPcUksR0FHakQsTUFBTSxZQUFpQ3JJLEssNkJLbEMzQyx1REFFTyxTQUFTNkwsRUFBcUIzTSxHQUNqQyxJQUFnQjhNLFlBQVcsV0FDdkIsSUFBSXJCLEVBQW1CLElBQU9BLGlCQUM5QixJQUFJQSxFQUlBLE1BQU16TCxFQUhOeUwsRUFBaUJ6TCxRLDZCQ043Qiw2Q0FDVzZNLEVBQWtCLENBQ3pCQyxXQUFZLFNBQVU2RCxFQUFTQyxHQUUzQixJQURBLElBQUlqTSxFQUFPLEdBQ0Z0QixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENzQixFQUFLdEIsRUFBSyxHQUFLN0UsVUFBVTZFLEdBRTdCLElBQUl3TixFQUFXaEUsRUFBZ0JnRSxTQUMvQixPQUFJQSxhQUEyQyxFQUFTQSxFQUFTL0QsWUFDdEQrRCxFQUFTL0QsV0FBV2hRLE1BQU0rVCxFQUFVLFlBQWMsQ0FBQ0YsRUFBU0MsR0FBVSxZQUFPak0sS0FFakZtSSxXQUFXaFEsV0FBTSxFQUFRLFlBQWMsQ0FBQzZULEVBQVNDLEdBQVUsWUFBT2pNLE1BRTdFc3ZCLGFBQWMsU0FBVWxqQixHQUNwQixJQUFJRixFQUFXaEUsRUFBZ0JnRSxTQUMvQixRQUFTQSxhQUEyQyxFQUFTQSxFQUFTb2pCLGVBQWlCQSxjQUFjbGpCLElBRXpHRixjQUFVak0sSSw2QkNqQmQscURBRU8sU0FBUzR1QixFQUFvQjF5QixHQUNoQyxPQUFPLFlBQVdBLEVBQU0sUSw2QkNINUIsNkNBQ08sU0FBUzZ5QixFQUFVdjVCLEdBQ3RCLE9BQU8sWUFBV0EsYUFBcUMsRUFBU0EsRUFBTXlDLFEsNkJDRjFFLDZDQUNPLFNBQVNnM0IsRUFBZ0I5eUIsR0FDNUIsT0FBTzdHLE9BQU8yRSxlQUFpQixZQUFXa0MsYUFBaUMsRUFBU0EsRUFBSTdHLE9BQU8yRSxrQiw2QkNGbkcsc0RBRU8sU0FBU2kxQixFQUFXaHpCLEdBQ3ZCLE9BQU8sWUFBV0EsYUFBcUMsRUFBU0EsRUFBTSxRLDZCQ0gxRSxrQ0FNTyxJQUFJcEQsRUFMZSxtQkFBWHhELFFBQTBCQSxPQUFPd0QsU0FHckN4RCxPQUFPd0QsU0FGSCxjLDZCQ0ZSLFNBQVN3MkIsRUFBaUNwekIsR0FDN0MsT0FBTyxJQUFJckYsVUFBVSxpQkFBNkIsT0FBVnFGLEdBQW1DLGlCQUFWQSxFQUFxQixvQkFBc0IsSUFBTUEsRUFBUSxLQUFPLDRIQURySSxtQyw2QkNBQSxxRUFJTyxTQUFTaXpCLEVBQWlCanpCLEVBQU9xSSxHQUNwQyxPQUFPLElBQUksS0FBVyxTQUFVbkksR0FDNUIsSUFBSXRELEVBc0JKLE9BckJBLFlBQWdCc0QsRUFBWW1JLEdBQVcsV0FDbkN6TCxFQUFXb0QsRUFBTSxPQUNqQixZQUFnQkUsRUFBWW1JLEdBQVcsV0FDbkMsSUFBSS9JLEVBQ0FoRyxFQUNBd0MsRUFDSixJQUMyQnhDLEdBQXRCZ0csRUFBSzFDLEVBQVNsQixRQUFtQnBDLE1BQU93QyxFQUFPd0QsRUFBR3hELEtBRXZELE1BQU9vRCxHQUVILFlBREFnQixFQUFXN0MsTUFBTTZCLEdBR2pCcEQsRUFDQW9FLEVBQVdJLFdBR1hKLEVBQVd4RSxLQUFLcEMsS0FFckIsR0FBRyxNQUVILFdBQWMsT0FBTyxZQUFXc0QsYUFBMkMsRUFBU0EsRUFBU2tFLFNBQVdsRSxFQUFTa0UsZSw2QkM1QmhJLHNDQUFJcUQsRUFBVTFKLE1BQU0wSixRQUNoQmt2QixFQUFpQnQ2QixPQUFPczZCLGVBQWdCQyxFQUFjdjZCLE9BQU9rQixVQUFXczVCLEVBQVV4NkIsT0FBT3dpQixLQUN0RixTQUFTaVksRUFBcUIzdkIsR0FDakMsR0FBb0IsSUFBaEJBLEVBQUs3RyxPQUFjLENBQ25CLElBQUl5MkIsRUFBVTV2QixFQUFLLEdBQ25CLEdBQUlNLEVBQVFzdkIsR0FDUixNQUFPLENBQUU1dkIsS0FBTTR2QixFQUFTbFksS0FBTSxNQUVsQyxJQVVRdGIsRUFWR3d6QixJQVdjLGlCQUFSeHpCLEdBQW9Cb3pCLEVBQWVwekIsS0FBU3F6QixFQVh4QyxDQUNqQixJQUFJL1gsRUFBT2dZLEVBQVFFLEdBQ25CLE1BQU8sQ0FDSDV2QixLQUFNMFgsRUFBS3RWLEtBQUksU0FBVXJNLEdBQU8sT0FBTzY1QixFQUFRNzVCLE1BQy9DMmhCLEtBQU1BLElBTXRCLElBQWdCdGIsRUFGWixNQUFPLENBQUU0RCxLQUFNQSxFQUFNMFgsS0FBTSxRLDZCQ2hCeEIsU0FBU21ZLEVBQWFuWSxFQUFNRSxHQUMvQixPQUFPRixFQUFLdFAsUUFBTyxTQUFVcFEsRUFBUWpDLEVBQUt2QixHQUFLLE9BQVN3RCxFQUFPakMsR0FBTzZoQixFQUFPcGpCLEdBQUt3RCxJQUFZLElBRGxHLG1DLDZCQ0FPLFNBQVM4M0IsRUFBSUMsRUFBTTM0QixHQUN0QixPQUFPLFNBQVUzQixFQUFPOFAsR0FBUyxPQUFRd3FCLEVBQUtwN0IsS0FBS3lDLEVBQVMzQixFQUFPOFAsSUFEdkUsbUMsNkJDQUEsNkVBS08sU0FBU3lxQixFQUFpQkMsRUFBUWpyQixHQUNyQyxPQUFPLFlBQUssY0FBVyxhQUFTLFNBQVU3QyxHQUFXLE9BQU84dEIsRUFBTzl0QixNQUFjNkMsRUFBVSxZQUFpQkEsR0FBVyxPLDZCQ04zSCw2Q0FDTyxTQUFTa3JCLEVBQWM3bkIsRUFBYUMsRUFBTTZuQixFQUFTQyxFQUFZQyxHQUNsRSxPQUFPLFNBQVV4MEIsRUFBUVEsR0FDckIsSUFBSWkwQixFQUFXSCxFQUNYdmtCLEVBQVF0RCxFQUNSL0MsRUFBUSxFQUNaMUosRUFBT1UsVUFBVSxZQUF5QkYsR0FBWSxTQUFVNUcsR0FDNUQsSUFBSWpCLEVBQUkrUSxJQUNScUcsRUFBUTBrQixFQUVBam9CLEVBQVl1RCxFQUFPblcsRUFBT2pCLElBRXhCODdCLEdBQVcsRUFBTzc2QixHQUM1QjI2QixHQUFjL3pCLEVBQVd4RSxLQUFLK1QsS0FDL0J5a0IsR0FDQyxXQUNJQyxHQUFZajBCLEVBQVd4RSxLQUFLK1QsR0FDNUJ2UCxFQUFXSSxpQixjQ2pCM0IsSUFBSWpFLEVBR0pBLEVBQUksV0FDSCxPQUFPdkIsS0FESixHQUlKLElBRUN1QixFQUFJQSxHQUFLLElBQUlrUCxTQUFTLGNBQWIsR0FDUixNQUFPNVAsR0FFYyxpQkFBWG1pQixTQUFxQnpoQixFQUFJeWhCLFFBT3JDMWxCLEVBQU9ELFFBQVVrRSxHLGdCQ25CakIsSUFJSWd0QixFQUpZLEVBQVEsR0FJZDdFLENBSEMsRUFBUSxJQUdPLE9BRTFCcHNCLEVBQU9ELFFBQVVreEIsRyxnQkNOakIsSUFBSStLLEVBQWdCLEVBQVEsS0FDeEJDLEVBQWlCLEVBQVEsS0FDekJDLEVBQWMsRUFBUSxLQUN0QkMsRUFBYyxFQUFRLEtBQ3RCQyxFQUFjLEVBQVEsS0FTMUIsU0FBU0MsRUFBU3hRLEdBQ2hCLElBQUk3YSxHQUFTLEVBQ1RwTSxFQUFvQixNQUFYaW5CLEVBQWtCLEVBQUlBLEVBQVFqbkIsT0FHM0MsSUFEQWxDLEtBQUtvcEIsVUFDSTlhLEVBQVFwTSxHQUFRLENBQ3ZCLElBQUltbkIsRUFBUUYsRUFBUTdhLEdBQ3BCdE8sS0FBS3NwQixJQUFJRCxFQUFNLEdBQUlBLEVBQU0sS0FLN0JzUSxFQUFTeDZCLFVBQVVpcUIsTUFBUWtRLEVBQzNCSyxFQUFTeDZCLFVBQWtCLE9BQUlvNkIsRUFDL0JJLEVBQVN4NkIsVUFBVWYsSUFBTW83QixFQUN6QkcsRUFBU3g2QixVQUFVb3FCLElBQU1rUSxFQUN6QkUsRUFBU3g2QixVQUFVbXFCLElBQU1vUSxFQUV6QnA4QixFQUFPRCxRQUFVczhCLEcsZ0JDL0JqQixJQUFJQyxFQUFnQixFQUFRLEtBQ3hCQyxFQUFXLEVBQVEsS0FDbkJsWSxFQUFjLEVBQVEsS0FrQzFCcmtCLEVBQU9ELFFBSlAsU0FBYzRCLEdBQ1osT0FBTzBpQixFQUFZMWlCLEdBQVUyNkIsRUFBYzM2QixHQUFVNDZCLEVBQVM1NkIsSyxjQ0NoRTNCLEVBQU9ELFFBTFAsU0FBa0JtQixHQUNoQixNQUF1QixpQkFBVEEsR0FDWkEsR0FBUyxHQUFLQSxFQUFRLEdBQUssR0FBS0EsR0E5QmIsbUIsZ0JDRHZCLElBQUk2SyxFQUFVLEVBQVEsSUFDbEIwZ0IsRUFBVyxFQUFRLElBR25CK1AsRUFBZSxtREFDZkMsRUFBZ0IsUUF1QnBCejhCLEVBQU9ELFFBYlAsU0FBZW1CLEVBQU9TLEdBQ3BCLEdBQUlvSyxFQUFRN0ssR0FDVixPQUFPLEVBRVQsSUFBSXNuQixTQUFjdG5CLEVBQ2xCLFFBQVksVUFBUnNuQixHQUE0QixVQUFSQSxHQUE0QixXQUFSQSxHQUMvQixNQUFUdG5CLElBQWlCdXJCLEVBQVN2ckIsTUFHdkJ1N0IsRUFBYy92QixLQUFLeEwsS0FBV3M3QixFQUFhOXZCLEtBQUt4TCxJQUMxQyxNQUFWUyxHQUFrQlQsS0FBU1AsT0FBT2dCLE0sNlpDekJqQ3FTLEUsV0FJSixhQUF3QixXQUFab1gsRUFBWSx1REFBSixHQUFJLG9DQUN0QjFvQixLQUFLMG9CLE1BQVFBLEVBQ2J6cUIsT0FBT3dpQixLQUFLaUksR0FBT3RoQixTQUFRLFNBQUN0SSxHQUMxQixFQUFLQSxHQUFPNHBCLEVBQU01cEIsTUFFcEJrQixLQUFLZzZCLFVBQVl0UixFQUFNc1IsVSwrQ0FHekIsU0FBU0MsR0FDUGo2QixLQUFLazZCLFNBQVNELEssMEJBR2hCLGMsb0JBR0EsV0FDRSxJQUFLajZCLEtBQUttNkIsU0FDUixNQUFNLElBQUk3cUIsTUFBTSx1RkFHbEIsSUFBTStKLEVBQVV4TyxLQUFLdXZCLE1BQU12dkIsS0FBS0MsVUFBVTlLLE9BRTFDLE9BQU9BLEtBQUttNkIsU0FBUzlnQixLLHlCQUd2QixjLDhCQUdBLGMsNkJBR0EsYyw0QkFHQSxjLCtCQUdBLGMsNkJBR0EsYyx5Q0FJQSxjLHdDQUdBLGMsdUNBR0EsYywwQ0FHQSxjLHdDQUdBLGMsa0NBS0EsYyxpQ0FHQSxjLGdDQUdBLGMsbUNBR0EsYyxpQ0FHQSxpQixnQ0FLRi9iLEVBQU9ELFFBQVVpVSxHLDhpRENsRmpCLElBQU1BLEVBQVdDLEVBQVEsS0FDbkJNLEVBQWtCTixFQUFRLEtBRTFCQyxFLHFhQUNPRCxFQUFRLE0sOENBRW5CLFdBQ0VNLEVBQWdCMFcsUyw4QkFFbEIsV0FDRTFXLEVBQWdCMFcsUyw0QkFFbEIsV0FDRTFXLEVBQWdCMFcsUywrQkFFbEIsV0FDRTFXLEVBQWdCMFcsUyw2QkFFbEIsV0FDRTFXLEVBQWdCMFcsWSw4QkFoQldqWCxHQW9CL0JoVSxFQUFPRCxRQUFVbVUsRyw2QkN2QmpCLElBQU1LLEVBQWtCTixFQUFRLElBRWhDalUsRUFBT0QsUUFBVSxDQUNmb3JCLEtBQU01VyxFQUFnQjRXLEtBQ3RCRixLQUFNMVcsRUFBZ0IwVyxPLDZCQ0V4QixTQUFTOFIsRUFBdUJsMUIsR0FBTyxPQUFPQSxHQUFPQSxFQUFJeEcsV0FBYXdHLEVBQU0sQ0FBRSxRQUFXQSxHQUp6RjlILEVBQVFzQixZQUFhLEVBQ3JCdEIsRUFBUWk5QixzQkFBd0JBLEVBS2hDLElBQUlDLEVBQVMsRUFBUSxJQUlqQkMsRUFBY0gsRUFGRCxFQUFRLEtBSXJCSSxFQUFXLEVBQVEsS0FFbkJDLEVBQWMsRUFBUSxLQUl0QkMsRUFBV04sRUFGRCxFQUFRLE1BSWxCTyxFQUF1QixFQUFRLEtBR25DdjlCLEVBQVF3OUIsUUFETSxRQUdkeDlCLEVBQVF5OUIsa0JBRGdCLEVBSXhCejlCLEVBQVEwOUIsa0NBRmdDLEVBY3hDMTlCLEVBQVEyOUIsaUJBWGUsQ0FDckJDLEVBQUcsY0FDSEMsRUFBRyxnQkFDSEMsRUFBRyxnQkFDSEMsRUFBRyxXQUNIQyxFQUFHLG1CQUNIQyxFQUFHLGtCQUNIQyxFQUFHLGtCQUNIQyxFQUFHLFlBTUwsU0FBU2xCLEVBQXNCbUIsRUFBU0MsRUFBVUMsR0FDaEQzN0IsS0FBS3k3QixRQUFVQSxHQUFXLEdBQzFCejdCLEtBQUswN0IsU0FBV0EsR0FBWSxHQUM1QjE3QixLQUFLMjdCLFdBQWFBLEdBQWMsR0FFaENsQixFQUFTbUIsdUJBQXVCNTdCLE1BQ2hDMDZCLEVBQVltQiwwQkFBMEI3N0IsTUFHeENzNkIsRUFBc0JuN0IsVUFBWSxDQUNoQ2MsWUFBYXE2QixFQUVid0IsT0FBUW5CLEVBQWtCLFFBQzFCb0IsSUFBS3BCLEVBQWtCLFFBQUVvQixJQUV6QkMsZUFBZ0IsU0FBd0JsK0IsRUFBTTJSLEdBQzVDLEdBbEJhLG9CQWtCVDhxQixFQUFPeHdCLFNBQVNyTSxLQUFLSSxHQUFzQixDQUM3QyxHQUFJMlIsRUFDRixNQUFNLElBQUkrcUIsRUFBcUIsUUFBRSwyQ0FFbkNELEVBQU8vbkIsT0FBT3hTLEtBQUt5N0IsUUFBUzM5QixRQUU1QmtDLEtBQUt5N0IsUUFBUTM5QixHQUFRMlIsR0FHekJ3c0IsaUJBQWtCLFNBQTBCbitCLFVBQ25Da0MsS0FBS3k3QixRQUFRMzlCLElBR3RCbytCLGdCQUFpQixTQUF5QnArQixFQUFNcStCLEdBQzlDLEdBaENhLG9CQWdDVDVCLEVBQU94d0IsU0FBU3JNLEtBQUtJLEdBQ3ZCeThCLEVBQU8vbkIsT0FBT3hTLEtBQUswN0IsU0FBVTU5QixPQUN4QixDQUNMLFFBQXVCLElBQVpxK0IsRUFDVCxNQUFNLElBQUkzQixFQUFxQixRQUFFLDRDQUE4QzE4QixFQUFPLGtCQUV4RmtDLEtBQUswN0IsU0FBUzU5QixHQUFRcStCLElBRzFCQyxrQkFBbUIsU0FBMkJ0K0IsVUFDckNrQyxLQUFLMDdCLFNBQVM1OUIsSUFHdkJ1K0Isa0JBQW1CLFNBQTJCditCLEVBQU0yUixHQUNsRCxHQTlDYSxvQkE4Q1Q4cUIsRUFBT3h3QixTQUFTck0sS0FBS0ksR0FBc0IsQ0FDN0MsR0FBSTJSLEVBQ0YsTUFBTSxJQUFJK3FCLEVBQXFCLFFBQUUsOENBRW5DRCxFQUFPL25CLE9BQU94UyxLQUFLMjdCLFdBQVk3OUIsUUFFL0JrQyxLQUFLMjdCLFdBQVc3OUIsR0FBUTJSLEdBRzVCNnNCLG9CQUFxQixTQUE2QngrQixVQUN6Q2tDLEtBQUsyN0IsV0FBVzc5QixJQU16QnkrQiw0QkFBNkIsV0FDM0IzQixFQUFxQjRCLDBCQUl6QixJQUFJVCxFQUFNcEIsRUFBa0IsUUFBRW9CLElBRTlCMStCLEVBQVEwK0IsSUFBTUEsRUFDZDErQixFQUFRNFYsWUFBY3NuQixFQUFPdG5CLFlBQzdCNVYsRUFBUXkrQixPQUFTbkIsRUFBa0IsUyw2QkMzR25DLFNBQVNOLEVBQXVCbDFCLEdBQU8sT0FBT0EsR0FBT0EsRUFBSXhHLFdBQWF3RyxFQUFNLENBQUUsUUFBV0EsR0FMekY5SCxFQUFRc0IsWUFBYSxFQUNyQnRCLEVBQVF1K0IsdUJBa0NSLFNBQWdDdnNCLEdBQzlCb3RCLEVBQXFDLFFBQUVwdEIsR0FDdkNxdEIsRUFBdUIsUUFBRXJ0QixHQUN6QnN0QixFQUFnQyxRQUFFdHRCLEdBQ2xDdXRCLEVBQXFCLFFBQUV2dEIsR0FDdkJ3dEIsRUFBc0IsUUFBRXh0QixHQUN4Qnl0QixFQUF5QixRQUFFenRCLEdBQzNCMHRCLEVBQXVCLFFBQUUxdEIsSUF4QzNCaFMsRUFBUTIvQixrQkEyQ1IsU0FBMkIzdEIsRUFBVTR0QixFQUFZQyxHQUMzQzd0QixFQUFTb3NCLFFBQVF3QixLQUNuQjV0QixFQUFTOHRCLE1BQU1GLEdBQWM1dEIsRUFBU29zQixRQUFRd0IsR0FDekNDLFVBQ0k3dEIsRUFBU29zQixRQUFRd0IsS0ExQzlCLElBRUlSLEVBQThCcEMsRUFGRCxFQUFRLE1BTXJDcUMsRUFBZ0JyQyxFQUZELEVBQVEsTUFNdkJzQyxFQUF5QnRDLEVBRkQsRUFBUSxNQU1oQ3VDLEVBQWN2QyxFQUZELEVBQVEsTUFNckJ3QyxFQUFleEMsRUFGRCxFQUFRLE1BTXRCeUMsRUFBa0J6QyxFQUZELEVBQVEsTUFNekIwQyxFQUFnQjFDLEVBRkQsRUFBUSxPLDZCQy9CM0JoOUIsRUFBUXNCLFlBQWEsRUFFckIsSUFBSTQ3QixFQUFTLEVBQVEsSUFFakJ1QixFQUFTLENBQ1hzQixVQUFXLENBQUMsUUFBUyxPQUFRLE9BQVEsU0FDckNDLE1BQU8sT0FHUEMsWUFBYSxTQUFxQkQsR0FDaEMsR0FBcUIsaUJBQVZBLEVBQW9CLENBQzdCLElBQUlFLEVBQVdoRCxFQUFPL3JCLFFBQVFzdEIsRUFBT3NCLFVBQVdDLEVBQU1HLGVBRXBESCxFQURFRSxHQUFZLEVBQ05BLEVBRUFFLFNBQVNKLEVBQU8sSUFJNUIsT0FBT0EsR0FJVHRCLElBQUssU0FBYXNCLEdBR2hCLEdBRkFBLEVBQVF2QixFQUFPd0IsWUFBWUQsR0FFSixvQkFBWkssU0FBMkI1QixFQUFPd0IsWUFBWXhCLEVBQU91QixRQUFVQSxFQUFPLENBQy9FLElBQUlNLEVBQVM3QixFQUFPc0IsVUFBVUMsR0FFekJLLFFBQVFDLEtBQ1hBLEVBQVMsT0FHWCxJQUFLLElBQUlDLEVBQU9oN0IsVUFBVVYsT0FBUXlNLEVBQVVoUCxNQUFNaStCLEVBQU8sRUFBSUEsRUFBTyxFQUFJLEdBQUlDLEVBQU8sRUFBR0EsRUFBT0QsRUFBTUMsSUFDakdsdkIsRUFBUWt2QixFQUFPLEdBQUtqN0IsVUFBVWk3QixHQUdoQ0gsUUFBUUMsR0FBUXo4QixNQUFNdzhCLFFBQVMvdUIsTUFLckN0UixFQUFpQixRQUFJeStCLEVBQ3JCeCtCLEVBQU9ELFFBQVVBLEVBQWlCLFMsNkJDM0NsQ0EsRUFBUXNCLFlBQWEsRUFDckJ0QixFQUFReWdDLHlCQWVSLFNBQWtDQyxHQUNoQyxJQUFJQyxFQUF5Qi8vQixPQUFPWSxPQUFPLE1BQzNDbS9CLEVBQW9DLGFBQUksRUFDeENBLEVBQXlDLGtCQUFJLEVBQzdDQSxFQUF5QyxrQkFBSSxFQUM3Q0EsRUFBeUMsa0JBQUksRUFFN0MsSUFBSUMsRUFBMkJoZ0MsT0FBT1ksT0FBTyxNQUk3QyxPQUZBby9CLEVBQW9DLFdBQUksRUFFakMsQ0FDTC9OLFdBQVksQ0FDVmdPLFVBQVdDLEVBQXVCQyxzQkFBc0JILEVBQTBCRixFQUFlTSx3QkFDakdsMUIsYUFBYzQwQixFQUFlTywrQkFFL0JDLFFBQVMsQ0FDUEwsVUFBV0MsRUFBdUJDLHNCQUFzQkosRUFBd0JELEVBQWVTLHFCQUMvRnIxQixhQUFjNDBCLEVBQWVVLDhCQWhDbkNwaEMsRUFBUXFoQyxnQkFxQ1IsU0FBeUIzOUIsRUFBUTQ5QixFQUFvQkMsR0FDbkQsT0FDU0MsRUFEYSxtQkFBWDk5QixFQUNhNDlCLEVBQW1CSixRQUVuQkksRUFBbUJ6TyxXQUZTME8sSUF0Q3REdmhDLEVBQVFtL0Isc0JBOERSLFdBQ0V2K0IsT0FBT3dpQixLQUFLcWUsR0FBa0IxM0IsU0FBUSxTQUFVdzNCLFVBQ3ZDRSxFQUFpQkYsT0EzRDVCLElBQUlULEVBQXlCLEVBQVEsS0FJakNyQyxFQU5KLFNBQWlDMzJCLEdBQU8sR0FBSUEsR0FBT0EsRUFBSXhHLFdBQWMsT0FBT3dHLEVBQWMsSUFBSStoQixFQUFTLEdBQUksR0FBVyxNQUFQL2hCLEVBQWUsSUFBSyxJQUFJckcsS0FBT3FHLEVBQVdsSCxPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUt5SCxFQUFLckcsS0FBTW9vQixFQUFPcG9CLEdBQU9xRyxFQUFJckcsSUFBbUMsT0FBekJvb0IsRUFBZ0IsUUFBSS9oQixFQUFZK2hCLEVBTXhQNlgsQ0FGQyxFQUFRLE1BSWxCRCxFQUFtQjdnQyxPQUFPWSxPQUFPLE1BaUNyQyxTQUFTZ2dDLEVBQWVHLEVBQTJCSixHQUNqRCxZQUEwRDUxQixJQUF0RGcyQixFQUEwQmQsVUFBVVUsSUFDdUIsSUFBdERJLEVBQTBCZCxVQUFVVSxRQUVFNTFCLElBQTNDZzJCLEVBQTBCNzFCLGFBQ3JCNjFCLEVBQTBCNzFCLGNBTXJDLFNBQXdDeTFCLElBQ0MsSUFBbkNFLEVBQWlCRixLQUNuQkUsRUFBaUJGLElBQWdCLEVBQ2pDOUMsRUFBT0MsSUFBSSxRQUFTLCtEQUFpRTZDLEVBQWpFLDhPQVB0QkssQ0FBK0JMLElBQ3hCLEssZ0JDekRULElBdUNJMWhCLEVBdkNhLEVBQVEsSUF1Q2RDLENBdENLLEVBQVEsTUF3Q3hCN2YsRUFBT0QsUUFBVTZmLEcsZ0JDekNqQixJQUFJZ2lCLEVBQWMsRUFBUSxLQUN0QkMsRUFBc0IsRUFBUSxLQUM5QnQzQixFQUFXLEVBQVEsS0FDbkJ3QixFQUFVLEVBQVEsSUFDbEJuSyxFQUFXLEVBQVEsS0EwQnZCNUIsRUFBT0QsUUFqQlAsU0FBc0JtQixHQUdwQixNQUFvQixtQkFBVEEsRUFDRkEsRUFFSSxNQUFUQSxFQUNLcUosRUFFVyxpQkFBVHJKLEVBQ0Y2SyxFQUFRN0ssR0FDWDJnQyxFQUFvQjNnQyxFQUFNLEdBQUlBLEVBQU0sSUFDcEMwZ0MsRUFBWTFnQyxHQUVYVSxFQUFTVixLLGdCQzNCbEIsSUFBSTBxQixFQUFZLEVBQVEsSUFDcEJrVyxFQUFhLEVBQVEsS0FDckJDLEVBQWMsRUFBUSxLQUN0QkMsRUFBVyxFQUFRLEtBQ25CQyxFQUFXLEVBQVEsS0FDbkJDLEVBQVcsRUFBUSxLQVN2QixTQUFTQyxFQUFNdFcsR0FDYixJQUFJcGUsRUFBTy9LLEtBQUs0cEIsU0FBVyxJQUFJVixFQUFVQyxHQUN6Q25wQixLQUFLMC9CLEtBQU8zMEIsRUFBSzIwQixLQUluQkQsRUFBTXRnQyxVQUFVaXFCLE1BQVFnVyxFQUN4QkssRUFBTXRnQyxVQUFrQixPQUFJa2dDLEVBQzVCSSxFQUFNdGdDLFVBQVVmLElBQU1raEMsRUFDdEJHLEVBQU10Z0MsVUFBVW9xQixJQUFNZ1csRUFDdEJFLEVBQU10Z0MsVUFBVW1xQixJQUFNa1csRUFFdEJsaUMsRUFBT0QsUUFBVW9pQyxHLGNDVWpCbmlDLEVBQU9ELFFBSlAsU0FBWW1CLEVBQU9taEMsR0FDakIsT0FBT25oQyxJQUFVbWhDLEdBQVVuaEMsR0FBVUEsR0FBU21oQyxHQUFVQSxJLGdCQ2pDMUQsSUFBSTlWLEVBQWEsRUFBUSxJQUNyQitWLEVBQVcsRUFBUSxJQW1DdkJ0aUMsRUFBT0QsUUFWUCxTQUFvQm1CLEdBQ2xCLElBQUtvaEMsRUFBU3BoQyxHQUNaLE9BQU8sRUFJVCxJQUFJcWhDLEVBQU1oVyxFQUFXcnJCLEdBQ3JCLE1BNUJZLHFCQTRCTHFoQyxHQTNCSSw4QkEyQmNBLEdBN0JaLDBCQTZCNkJBLEdBMUI3QixrQkEwQmdEQSxJLGlCQ2pDL0QsWUFDQSxJQUFJL3BCLEVBQThCLGlCQUFWZ3FCLEdBQXNCQSxHQUFVQSxFQUFPN2hDLFNBQVdBLFFBQVU2aEMsRUFFcEZ4aUMsRUFBT0QsUUFBVXlZLEksaUNDRmpCLElBR0lpcUIsRUFIWXR2QixTQUFTdFIsVUFHSTRLLFNBcUI3QnpNLEVBQU9ELFFBWlAsU0FBa0IyaUMsR0FDaEIsR0FBWSxNQUFSQSxFQUFjLENBQ2hCLElBQ0UsT0FBT0QsRUFBYXJpQyxLQUFLc2lDLEdBQ3pCLE1BQU9uL0IsSUFDVCxJQUNFLE9BQVFtL0IsRUFBTyxHQUNmLE1BQU9uL0IsS0FFWCxNQUFPLEssZ0JDdEJULElBQUlvL0IsRUFBa0IsRUFBUSxLQUMxQm5XLEVBQWUsRUFBUSxJQTBCM0J4c0IsRUFBT0QsUUFWUCxTQUFTNmlDLEVBQVkxaEMsRUFBT21oQyxFQUFPUSxFQUFTQyxFQUFZN3dCLEdBQ3RELE9BQUkvUSxJQUFVbWhDLElBR0QsTUFBVG5oQyxHQUEwQixNQUFUbWhDLElBQW1CN1YsRUFBYXRyQixLQUFXc3JCLEVBQWE2VixHQUNwRW5oQyxHQUFVQSxHQUFTbWhDLEdBQVVBLEVBRS9CTSxFQUFnQnpoQyxFQUFPbWhDLEVBQU9RLEVBQVNDLEVBQVlGLEVBQWEzd0IsTSxnQkN4QnpFLElBQUk4d0IsRUFBVyxFQUFRLEtBQ25CQyxFQUFZLEVBQVEsS0FDcEJDLEVBQVcsRUFBUSxLQWlGdkJqakMsRUFBT0QsUUE5RFAsU0FBcUJrSSxFQUFPbzZCLEVBQU9RLEVBQVNDLEVBQVlJLEVBQVdqeEIsR0FDakUsSUFBSWt4QixFQWpCcUIsRUFpQlROLEVBQ1pPLEVBQVluN0IsRUFBTXJELE9BQ2xCeStCLEVBQVloQixFQUFNejlCLE9BRXRCLEdBQUl3K0IsR0FBYUMsS0FBZUYsR0FBYUUsRUFBWUQsR0FDdkQsT0FBTyxFQUdULElBQUlFLEVBQWFyeEIsRUFBTW5SLElBQUltSCxHQUN2QnM3QixFQUFhdHhCLEVBQU1uUixJQUFJdWhDLEdBQzNCLEdBQUlpQixHQUFjQyxFQUNoQixPQUFPRCxHQUFjakIsR0FBU2tCLEdBQWN0N0IsRUFFOUMsSUFBSStJLEdBQVMsRUFDVHZOLEdBQVMsRUFDVGlSLEVBL0J1QixFQStCZm11QixFQUFvQyxJQUFJRSxPQUFXcjNCLEVBTS9ELElBSkF1RyxFQUFNK1osSUFBSS9qQixFQUFPbzZCLEdBQ2pCcHdCLEVBQU0rWixJQUFJcVcsRUFBT3A2QixLQUdSK0ksRUFBUW95QixHQUFXLENBQzFCLElBQUlJLEVBQVd2N0IsRUFBTStJLEdBQ2pCeXlCLEVBQVdwQixFQUFNcnhCLEdBRXJCLEdBQUk4eEIsRUFDRixJQUFJWSxFQUFXUCxFQUNYTCxFQUFXVyxFQUFVRCxFQUFVeHlCLEVBQU9xeEIsRUFBT3A2QixFQUFPZ0ssR0FDcEQ2d0IsRUFBV1UsRUFBVUMsRUFBVXp5QixFQUFPL0ksRUFBT282QixFQUFPcHdCLEdBRTFELFFBQWlCdkcsSUFBYmc0QixFQUF3QixDQUMxQixHQUFJQSxFQUNGLFNBRUZqZ0MsR0FBUyxFQUNULE1BR0YsR0FBSWlSLEdBQ0YsSUFBS3N1QixFQUFVWCxHQUFPLFNBQVNvQixFQUFVRSxHQUNuQyxJQUFLVixFQUFTdnVCLEVBQU1pdkIsS0FDZkgsSUFBYUMsR0FBWVAsRUFBVU0sRUFBVUMsRUFBVVosRUFBU0MsRUFBWTd3QixJQUMvRSxPQUFPeUMsRUFBSzdQLEtBQUs4K0IsTUFFakIsQ0FDTmxnQyxHQUFTLEVBQ1QsWUFFRyxHQUNEKy9CLElBQWFDLElBQ1hQLEVBQVVNLEVBQVVDLEVBQVVaLEVBQVNDLEVBQVk3d0IsR0FDcEQsQ0FDTHhPLEdBQVMsRUFDVCxPQUtKLE9BRkF3TyxFQUFjLE9BQUVoSyxHQUNoQmdLLEVBQWMsT0FBRW93QixHQUNUNStCLEksZ0JDaEZULElBQUltZ0MsRUFBa0IsRUFBUSxLQUMxQnBYLEVBQWUsRUFBUSxJQUd2QjBPLEVBQWN2NkIsT0FBT2tCLFVBR3JCQyxFQUFpQm81QixFQUFZcDVCLGVBRzdCK2hDLEVBQXVCM0ksRUFBWTJJLHFCQW9CbkNDLEVBQWNGLEVBQWdCLFdBQWEsT0FBT3QrQixVQUFwQixJQUFzQ3MrQixFQUFrQixTQUFTMWlDLEdBQ2pHLE9BQU9zckIsRUFBYXRyQixJQUFVWSxFQUFlMUIsS0FBS2MsRUFBTyxZQUN0RDJpQyxFQUFxQnpqQyxLQUFLYyxFQUFPLFdBR3RDbEIsRUFBT0QsUUFBVStqQyxHLGlCQ25DakIsa0JBQVcsRUFBUSxJQUNmQyxFQUFZLEVBQVEsS0FHcEJDLEVBQTRDamtDLElBQVlBLEVBQVFra0MsVUFBWWxrQyxFQUc1RW1rQyxFQUFhRixHQUFnQyxpQkFBVmhrQyxHQUFzQkEsSUFBV0EsRUFBT2lrQyxVQUFZamtDLEVBTXZGbWtDLEVBSGdCRCxHQUFjQSxFQUFXbmtDLFVBQVlpa0MsRUFHNUJyckIsRUFBS3dyQixZQUFTejRCLEVBc0J2QzA0QixHQW5CaUJELEVBQVNBLEVBQU9DLGNBQVcxNEIsSUFtQmZxNEIsRUFFakMvakMsRUFBT0QsUUFBVXFrQyxJLG9DQ3JDakJwa0MsRUFBT0QsUUFBVSxTQUFTQyxHQW9CekIsT0FuQktBLEVBQU9xa0Msa0JBQ1hya0MsRUFBT3NrQyxVQUFZLGFBQ25CdGtDLEVBQU91a0MsTUFBUSxHQUVWdmtDLEVBQU93a0MsV0FBVXhrQyxFQUFPd2tDLFNBQVcsSUFDeEM3akMsT0FBT0MsZUFBZVosRUFBUSxTQUFVLENBQ3ZDYSxZQUFZLEVBQ1pDLElBQUssV0FDSixPQUFPZCxFQUFPRSxLQUdoQlMsT0FBT0MsZUFBZVosRUFBUSxLQUFNLENBQ25DYSxZQUFZLEVBQ1pDLElBQUssV0FDSixPQUFPZCxFQUFPQyxLQUdoQkQsRUFBT3FrQyxnQkFBa0IsR0FFbkJya0MsSSxjQ25CUixJQUdJeWtDLEVBQVcsbUJBb0JmemtDLEVBQU9ELFFBVlAsU0FBaUJtQixFQUFPMEQsR0FDdEIsSUFBSTRqQixTQUFjdG5CLEVBR2xCLFNBRkEwRCxFQUFtQixNQUFWQSxFQWZZLGlCQWV3QkEsS0FHbEMsVUFBUjRqQixHQUNVLFVBQVJBLEdBQW9CaWMsRUFBUy8zQixLQUFLeEwsS0FDaENBLEdBQVMsR0FBS0EsRUFBUSxHQUFLLEdBQUtBLEVBQVEwRCxJLGdCQ3JCakQsSUFBSTgvQixFQUFtQixFQUFRLEtBQzNCQyxFQUFZLEVBQVEsS0FDcEJDLEVBQVcsRUFBUSxLQUduQkMsRUFBbUJELEdBQVlBLEVBQVNFLGFBbUJ4Q0EsRUFBZUQsRUFBbUJGLEVBQVVFLEdBQW9CSCxFQUVwRTFrQyxFQUFPRCxRQUFVK2tDLEcsZ0JDMUJqQixJQUFJMTdCLEVBQWEsRUFBUSxLQUNyQjI3QixFQUFXLEVBQVEsS0ErQnZCL2tDLEVBQU9ELFFBSlAsU0FBcUJtQixHQUNuQixPQUFnQixNQUFUQSxHQUFpQjZqQyxFQUFTN2pDLEVBQU0wRCxVQUFZd0UsRUFBV2xJLEssZ0JDN0JoRSxJQUFJb2hDLEVBQVcsRUFBUSxJQWN2QnRpQyxFQUFPRCxRQUpQLFNBQTRCbUIsR0FDMUIsT0FBT0EsR0FBVUEsSUFBVW9oQyxFQUFTcGhDLEssY0NRdENsQixFQUFPRCxRQVZQLFNBQWlDeUIsRUFBS3dqQyxHQUNwQyxPQUFPLFNBQVNyakMsR0FDZCxPQUFjLE1BQVZBLElBR0dBLEVBQU9ILEtBQVN3akMsU0FDUHQ1QixJQUFiczVCLEdBQTJCeGpDLEtBQU9iLE9BQU9nQixRLGdCQ2ZoRCxJQUFJc2pDLEVBQVcsRUFBUSxLQUNuQkMsRUFBUSxFQUFRLElBc0JwQmxsQyxFQUFPRCxRQVpQLFNBQWlCNEIsRUFBUXNVLEdBTXZCLElBSEEsSUFBSWpGLEVBQVEsRUFDUnBNLEdBSEpxUixFQUFPZ3ZCLEVBQVNodkIsRUFBTXRVLElBR0ppRCxPQUVELE1BQVZqRCxHQUFrQnFQLEVBQVFwTSxHQUMvQmpELEVBQVNBLEVBQU91akMsRUFBTWp2QixFQUFLakYsT0FFN0IsT0FBUUEsR0FBU0EsR0FBU3BNLEVBQVVqRCxPQUFTK0osSSxnQkNwQi9DLElBQUlLLEVBQVUsRUFBUSxJQUNsQm81QixFQUFRLEVBQVEsS0FDaEJDLEVBQWUsRUFBUSxLQUN2QjM0QixFQUFXLEVBQVEsS0FpQnZCek0sRUFBT0QsUUFQUCxTQUFrQm1CLEVBQU9TLEdBQ3ZCLE9BQUlvSyxFQUFRN0ssR0FDSEEsRUFFRmlrQyxFQUFNamtDLEVBQU9TLEdBQVUsQ0FBQ1QsR0FBU2trQyxFQUFhMzRCLEVBQVN2TCxNLHdwUENqQnJEbWtDLEVBQStCLENBQ3RDMXpCLElBQUssV0FDRCxPQUFRMHpCLEVBQTZCMXRCLFVBQVkydEIsYUFBYTN6QixPQUVsRWdHLGNBQVVqTSxHLGVDRkg2NUIsRUFBeUIsQ0FDaENqMUIsU0FBVSxTQUFVc2dCLEdBQ2hCLElBQUk0VSxFQUFVQyxzQkFDVkMsRUFBU0MscUJBQ1RodUIsRUFBVzR0QixFQUF1QjV0QixTQUNsQ0EsSUFDQTZ0QixFQUFVN3RCLEVBQVM4dEIsc0JBQ25CQyxFQUFTL3RCLEVBQVNndUIsc0JBRXRCLElBQUk5dEIsRUFBUzJ0QixHQUFRLFNBQVVsTyxHQUMzQm9PLE9BQVNoNkIsRUFDVGtsQixFQUFTMEcsTUFFYixPQUFPLElBQUlocEIsRUFBQSxHQUFhLFdBQWMsT0FBT28zQixhQUF1QyxFQUFTQSxFQUFPN3RCLE9BRXhHNHRCLHNCQUF1QixXQUVuQixJQURBLElBQUloNkIsRUFBTyxHQUNGdEIsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDc0IsRUFBS3RCLEdBQU03RSxVQUFVNkUsR0FFekIsSUFBSXdOLEVBQVc0dEIsRUFBdUI1dEIsU0FDdEMsUUFBU0EsYUFBMkMsRUFBU0EsRUFBUzh0Qix3QkFBMEJBLHVCQUF1QjdoQyxXQUFNLEVBQVEsWUFBYyxHQUFJLFlBQU82SCxNQUVsS2s2QixxQkFBc0IsV0FFbEIsSUFEQSxJQUFJbDZCLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLElBQUl3TixFQUFXNHRCLEVBQXVCNXRCLFNBQ3RDLFFBQVNBLGFBQTJDLEVBQVNBLEVBQVNndUIsdUJBQXlCQSxzQkFBc0IvaEMsV0FBTSxFQUFRLFlBQWMsR0FBSSxZQUFPNkgsTUFFaEtrTSxjQUFVak0sR0M5QlAsU0FBU2s2QixFQUFnQnZTLEdBQzVCLE9BQU9BLEVBQW9Cd1MsRUFBdUJ4UyxHQUFxQnlTLEVBRTNFLFNBQVNELEVBQXVCeFMsR0FDNUIsT0FBTyxJQUFJaHFCLEVBQUEsR0FBVyxTQUFVdkIsR0FDNUIsSUFBSWkrQixFQUFXMVMsR0FBcUJnUyxFQUNoQ3hvQixFQUFRa3BCLEVBQVNwMEIsTUFDakJ0RCxFQUFLLEVBQ0wyM0IsRUFBTSxXQUNEbCtCLEVBQVdWLFNBQ1ppSCxFQUFLazNCLEVBQXVCRSx1QkFBc0IsU0FBVW5PLEdBQ3hEanBCLEVBQUssRUFDTCxJQUFJc0QsRUFBTW8wQixFQUFTcDBCLE1BQ25CN0osRUFBV3hFLEtBQUssQ0FDWmcwQixVQUFXakUsRUFBb0IxaEIsRUFBTTJsQixFQUNyQzJPLFFBQVN0MEIsRUFBTWtMLElBRW5CbXBCLFNBS1osT0FEQUEsSUFDTyxXQUNDMzNCLEdBQ0FrM0IsRUFBdUJJLHFCQUFxQnQzQixPQUs1RCxJQy9CSTYzQixFRCtCQUosRUFBMkJELEksd0NDaEMzQk0sRUFBYSxFQUViQyxFQUFnQixHQUNwQixTQUFTQyxFQUFtQnh1QixHQUN4QixPQUFJQSxLQUFVdXVCLFdBQ0hBLEVBQWN2dUIsSUFDZCxHQUlSLElDUkh5dUIsRURTYyxTQUFVcnFCLEdBQ3BCLElBQUlwRSxFQUFTc3VCLElBTWIsT0FMQUMsRUFBY3Z1QixJQUFVLEVBQ25CcXVCLElBQ0RBLEVBQVdqakMsUUFBUUMsV0FFdkJnakMsRUFBU3ZpQyxNQUFLLFdBQWMsT0FBTzBpQyxFQUFtQnh1QixJQUFXb0UsT0FDMURwRSxHQ2hCNEIwdUIsRURrQnZCLFNBQVUxdUIsR0FDdEJ3dUIsRUFBbUJ4dUIsSUNsQmhCMnVCLEVBQW9CLENBQzNCRixhQUFjLFdBRVYsSUFEQSxJQUFJNzZCLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLElBQUl3TixFQUFXNnVCLEVBQWtCN3VCLFNBQ2pDLFFBQVNBLGFBQTJDLEVBQVNBLEVBQVMydUIsZUFBaUJBLEdBQWMxaUMsV0FBTSxFQUFRLFlBQWMsR0FBSSxZQUFPNkgsTUFFaEo4NkIsZUFBZ0IsU0FBVTF1QixHQUN0QixJQUFJRixFQUFXNnVCLEVBQWtCN3VCLFNBQ2pDLFFBQVNBLGFBQTJDLEVBQVNBLEVBQVM0dUIsaUJBQW1CQSxHQUFnQjF1QixJQUU3R0YsY0FBVWpNLEdDYlYsRUFBYyxTQUFVaEYsR0FFeEIsU0FBUysvQixFQUFXeDJCLEVBQVdDLEdBQzNCLElBQUl0SixFQUFRRixFQUFPdEcsS0FBS3NDLEtBQU11TixFQUFXQyxJQUFTeE4sS0FHbEQsT0FGQWtFLEVBQU1xSixVQUFZQSxFQUNsQnJKLEVBQU1zSixLQUFPQSxFQUNOdEosRUF5QlgsT0E5QkEsWUFBVTYvQixFQUFZLy9CLEdBT3RCKy9CLEVBQVc1a0MsVUFBVW9XLGVBQWlCLFNBQVVoSSxFQUFXNUIsRUFBSThCLEdBRTNELFlBRGMsSUFBVkEsSUFBb0JBLEVBQVEsR0FDbEIsT0FBVkEsR0FBa0JBLEVBQVEsRUFDbkJ6SixFQUFPN0UsVUFBVW9XLGVBQWU3WCxLQUFLc0MsS0FBTXVOLEVBQVc1QixFQUFJOEIsSUFFckVGLEVBQVUrRyxRQUFRblMsS0FBS25DLE1BQ2hCdU4sRUFBVXkyQixhQUFlejJCLEVBQVV5MkIsV0FBYUYsRUFBa0JGLGFBQWFyMkIsRUFBVWlILE1BQU16VixLQUFLd08sT0FBV3ZFLE9BRTFIKzZCLEVBQVc1a0MsVUFBVW1XLGVBQWlCLFNBQVUvSCxFQUFXNUIsRUFBSThCLEdBQzNELElBQUlqSixFQUVKLFFBRGMsSUFBVmlKLElBQW9CQSxFQUFRLEdBQ25CLE1BQVRBLEVBQWdCQSxFQUFRLEVBQUl6TixLQUFLeU4sTUFBUSxFQUN6QyxPQUFPekosRUFBTzdFLFVBQVVtVyxlQUFlNVgsS0FBS3NDLEtBQU11TixFQUFXNUIsRUFBSThCLEdBRXJFLElBQUk2RyxFQUFVL0csRUFBVStHLFFBQ2QsTUFBTjNJLElBQXNELFFBQXRDbkgsRUFBSzhQLEVBQVFBLEVBQVFwUyxPQUFTLFVBQXVCLElBQVBzQyxPQUFnQixFQUFTQSxFQUFHbUgsTUFBUUEsSUFDbEdtNEIsRUFBa0JELGVBQWVsNEIsR0FDN0I0QixFQUFVeTJCLGFBQWVyNEIsSUFDekI0QixFQUFVeTJCLGdCQUFhaDdCLEtBSzVCKzZCLEVBL0JNLENBZ0NmM3VCLEVBQUEsRyxRQ2pDUzZ1QixFQUFnQixJQ0FOLFNBQVVqZ0MsR0FFM0IsU0FBU2tnQyxJQUNMLE9BQWtCLE9BQVhsZ0MsR0FBbUJBLEVBQU85QyxNQUFNbEIsS0FBTTRDLFlBQWM1QyxLQXNCL0QsT0F4QkEsWUFBVWtrQyxFQUFlbGdDLEdBSXpCa2dDLEVBQWMva0MsVUFBVXFWLE1BQVEsU0FBVUMsR0FDdEN6VSxLQUFLdVUsU0FBVSxFQUNmLElBQUk0dkIsRUFBVW5rQyxLQUFLZ2tDLFdBQ25CaGtDLEtBQUtna0MsZ0JBQWFoN0IsRUFDbEIsSUFDSXpHLEVBREErUixFQUFVdFUsS0FBS3NVLFFBRW5CRyxFQUFTQSxHQUFVSCxFQUFRL1EsUUFDM0IsR0FDSSxHQUFLaEIsRUFBUWtTLEVBQU9DLFFBQVFELEVBQU9FLE1BQU9GLEVBQU9oSCxPQUM3QyxhQUVFZ0gsRUFBU0gsRUFBUSxLQUFPRyxFQUFPOUksS0FBT3c0QixHQUFXN3ZCLEVBQVEvUSxTQUVuRSxHQURBdkQsS0FBS3VVLFNBQVUsRUFDWGhTLEVBQU8sQ0FDUCxNQUFRa1MsRUFBU0gsRUFBUSxLQUFPRyxFQUFPOUksS0FBT3c0QixHQUFXN3ZCLEVBQVEvUSxTQUM3RGtSLEVBQU9uUSxjQUVYLE1BQU0vQixJQUdQMmhDLEVBekJTLENBMEJsQjl2QixFQUFBLEdEMUJ5QixDQUFrQixHQUNsQ2d3QixFQUFPSCxFLFFFRGQsRUFBZSxTQUFVamdDLEdBRXpCLFNBQVNxZ0MsRUFBWTkyQixFQUFXQyxHQUM1QixJQUFJdEosRUFBUUYsRUFBT3RHLEtBQUtzQyxLQUFNdU4sRUFBV0MsSUFBU3hOLEtBR2xELE9BRkFrRSxFQUFNcUosVUFBWUEsRUFDbEJySixFQUFNc0osS0FBT0EsRUFDTnRKLEVBdUJYLE9BNUJBLFlBQVVtZ0MsRUFBYXJnQyxHQU92QnFnQyxFQUFZbGxDLFVBQVV5TyxTQUFXLFNBQVUrRyxFQUFPbEgsR0FFOUMsWUFEYyxJQUFWQSxJQUFvQkEsRUFBUSxHQUM1QkEsRUFBUSxFQUNEekosRUFBTzdFLFVBQVV5TyxTQUFTbFEsS0FBS3NDLEtBQU0yVSxFQUFPbEgsSUFFdkR6TixLQUFLeU4sTUFBUUEsRUFDYnpOLEtBQUsyVSxNQUFRQSxFQUNiM1UsS0FBS3VOLFVBQVVpSCxNQUFNeFUsTUFDZEEsT0FFWHFrQyxFQUFZbGxDLFVBQVV1VixRQUFVLFNBQVVDLEVBQU9sSCxHQUM3QyxPQUFPQSxFQUFRLEdBQUt6TixLQUFLMEUsT0FBU1YsRUFBTzdFLFVBQVV1VixRQUFRaFgsS0FBS3NDLEtBQU0yVSxFQUFPbEgsR0FBU3pOLEtBQUswVixTQUFTZixFQUFPbEgsSUFFL0c0MkIsRUFBWWxsQyxVQUFVb1csZUFBaUIsU0FBVWhJLEVBQVc1QixFQUFJOEIsR0FFNUQsWUFEYyxJQUFWQSxJQUFvQkEsRUFBUSxHQUNsQixNQUFUQSxHQUFpQkEsRUFBUSxHQUFnQixNQUFUQSxHQUFpQnpOLEtBQUt5TixNQUFRLEVBQ3hEekosRUFBTzdFLFVBQVVvVyxlQUFlN1gsS0FBS3NDLEtBQU11TixFQUFXNUIsRUFBSThCLElBRXJFRixFQUFVaUgsTUFBTXhVLE1BQ1QsSUFFSnFrQyxFQTdCTyxDQThCaEJqdkIsRUFBQSxHQzlCU2t2QixFQUFpQixJQ0FOLFNBQVV0Z0MsR0FFNUIsU0FBU3VnQyxJQUNMLE9BQWtCLE9BQVh2Z0MsR0FBbUJBLEVBQU85QyxNQUFNbEIsS0FBTTRDLFlBQWM1QyxLQUUvRCxPQUpBLFlBQVV1a0MsRUFBZ0J2Z0MsR0FJbkJ1Z0MsRUFMVSxDQU1uQm53QixFQUFBLEdETjBCLENBQW1CLEdBQ3BDb3dCLEVBQVFGLEVFQWYsRUFBd0IsU0FBVXRnQyxHQUVsQyxTQUFTeWdDLEVBQXFCbDNCLEVBQVdDLEdBQ3JDLElBQUl0SixFQUFRRixFQUFPdEcsS0FBS3NDLEtBQU11TixFQUFXQyxJQUFTeE4sS0FHbEQsT0FGQWtFLEVBQU1xSixVQUFZQSxFQUNsQnJKLEVBQU1zSixLQUFPQSxFQUNOdEosRUF1QlgsT0E1QkEsWUFBVXVnQyxFQUFzQnpnQyxHQU9oQ3lnQyxFQUFxQnRsQyxVQUFVb1csZUFBaUIsU0FBVWhJLEVBQVc1QixFQUFJOEIsR0FFckUsWUFEYyxJQUFWQSxJQUFvQkEsRUFBUSxHQUNsQixPQUFWQSxHQUFrQkEsRUFBUSxFQUNuQnpKLEVBQU83RSxVQUFVb1csZUFBZTdYLEtBQUtzQyxLQUFNdU4sRUFBVzVCLEVBQUk4QixJQUVyRUYsRUFBVStHLFFBQVFuUyxLQUFLbkMsTUFDaEJ1TixFQUFVeTJCLGFBQWV6MkIsRUFBVXkyQixXQUFhbkIsRUFBdUJFLHVCQUFzQixXQUFjLE9BQU94MUIsRUFBVWlILFdBQU14TCxTQUU3SXk3QixFQUFxQnRsQyxVQUFVbVcsZUFBaUIsU0FBVS9ILEVBQVc1QixFQUFJOEIsR0FDckUsSUFBSWpKLEVBRUosUUFEYyxJQUFWaUosSUFBb0JBLEVBQVEsR0FDbkIsTUFBVEEsRUFBZ0JBLEVBQVEsRUFBSXpOLEtBQUt5TixNQUFRLEVBQ3pDLE9BQU96SixFQUFPN0UsVUFBVW1XLGVBQWU1WCxLQUFLc0MsS0FBTXVOLEVBQVc1QixFQUFJOEIsR0FFckUsSUFBSTZHLEVBQVUvRyxFQUFVK0csUUFDZCxNQUFOM0ksSUFBc0QsUUFBdENuSCxFQUFLOFAsRUFBUUEsRUFBUXBTLE9BQVMsVUFBdUIsSUFBUHNDLE9BQWdCLEVBQVNBLEVBQUdtSCxNQUFRQSxJQUNsR2szQixFQUF1QkkscUJBQXFCdDNCLEdBQzVDNEIsRUFBVXkyQixnQkFBYWg3QixJQUl4Qnk3QixFQTdCZ0IsQ0E4QnpCcnZCLEVBQUEsR0MvQlNzdkIsRUFBMEIsSUNBTixTQUFVMWdDLEdBRXJDLFNBQVMyZ0MsSUFDTCxPQUFrQixPQUFYM2dDLEdBQW1CQSxFQUFPOUMsTUFBTWxCLEtBQU00QyxZQUFjNUMsS0FzQi9ELE9BeEJBLFlBQVUya0MsRUFBeUIzZ0MsR0FJbkMyZ0MsRUFBd0J4bEMsVUFBVXFWLE1BQVEsU0FBVUMsR0FDaER6VSxLQUFLdVUsU0FBVSxFQUNmLElBQUk0dkIsRUFBVW5rQyxLQUFLZ2tDLFdBQ25CaGtDLEtBQUtna0MsZ0JBQWFoN0IsRUFDbEIsSUFDSXpHLEVBREErUixFQUFVdFUsS0FBS3NVLFFBRW5CRyxFQUFTQSxHQUFVSCxFQUFRL1EsUUFDM0IsR0FDSSxHQUFLaEIsRUFBUWtTLEVBQU9DLFFBQVFELEVBQU9FLE1BQU9GLEVBQU9oSCxPQUM3QyxhQUVFZ0gsRUFBU0gsRUFBUSxLQUFPRyxFQUFPOUksS0FBT3c0QixHQUFXN3ZCLEVBQVEvUSxTQUVuRSxHQURBdkQsS0FBS3VVLFNBQVUsRUFDWGhTLEVBQU8sQ0FDUCxNQUFRa1MsRUFBU0gsRUFBUSxLQUFPRyxFQUFPOUksS0FBT3c0QixHQUFXN3ZCLEVBQVEvUSxTQUM3RGtSLEVBQU9uUSxjQUVYLE1BQU0vQixJQUdQb2lDLEVBekJtQixDQTBCNUJ2d0IsRUFBQSxHRDFCbUMsQ0FBNEIsR0FDdER3d0IsRUFBaUJGLEVFQ3hCLEVBQXdCLFNBQVUxZ0MsR0FFbEMsU0FBUzZnQyxFQUFxQmxpQixFQUFxQm1pQixRQUNuQixJQUF4Qm5pQixJQUFrQ0EsRUFBc0IsUUFDMUMsSUFBZG1pQixJQUF3QkEsRUFBWTUyQixLQUN4QyxJQUFJaEssRUFBUUYsRUFBT3RHLEtBQUtzQyxLQUFNMmlCLEdBQXFCLFdBQWMsT0FBT3plLEVBQU1nUCxVQUFhbFQsS0FJM0YsT0FIQWtFLEVBQU00Z0MsVUFBWUEsRUFDbEI1Z0MsRUFBTWdQLE1BQVEsRUFDZGhQLEVBQU1vSyxPQUFTLEVBQ1JwSyxFQXFCWCxPQTdCQSxZQUFVMmdDLEVBQXNCN2dDLEdBVWhDNmdDLEVBQXFCMWxDLFVBQVVxVixNQUFRLFdBSW5DLElBSEEsSUFDSWpTLEVBQ0FrUyxFQUZXSCxFQUFOdFUsS0FBbUJzVSxRQUFTd3dCLEVBQTVCOWtDLEtBQTJDOGtDLFdBRzVDcndCLEVBQVNILEVBQVEsS0FBT0csRUFBT2hILE9BQVNxM0IsSUFDNUN4d0IsRUFBUS9RLFFBQ1J2RCxLQUFLa1QsTUFBUXVCLEVBQU9oSCxRQUNmbEwsRUFBUWtTLEVBQU9DLFFBQVFELEVBQU9FLE1BQU9GLEVBQU9oSCxXQUlyRCxHQUFJbEwsRUFBTyxDQUNQLEtBQVFrUyxFQUFTSCxFQUFRL1EsU0FDckJrUixFQUFPblEsY0FFWCxNQUFNL0IsSUFHZHNpQyxFQUFxQkUsZ0JBQWtCLEdBQ2hDRixFQTlCZ0IsQ0ErQnpCendCLEVBQUEsR0FFRSxFQUFpQixTQUFVcFEsR0FFM0IsU0FBU2doQyxFQUFjejNCLEVBQVdDLEVBQU1jLFFBQ3RCLElBQVZBLElBQW9CQSxFQUFTZixFQUFVZSxPQUFTLEdBQ3BELElBQUlwSyxFQUFRRixFQUFPdEcsS0FBS3NDLEtBQU11TixFQUFXQyxJQUFTeE4sS0FNbEQsT0FMQWtFLEVBQU1xSixVQUFZQSxFQUNsQnJKLEVBQU1zSixLQUFPQSxFQUNidEosRUFBTW9LLE1BQVFBLEVBQ2RwSyxFQUFNNGMsUUFBUyxFQUNmNWMsRUFBTW9LLE1BQVFmLEVBQVVlLE1BQVFBLEVBQ3pCcEssRUFxRFgsT0E5REEsWUFBVThnQyxFQUFlaGhDLEdBV3pCZ2hDLEVBQWM3bEMsVUFBVXlPLFNBQVcsU0FBVStHLEVBQU9sSCxHQUVoRCxRQURjLElBQVZBLElBQW9CQSxFQUFRLEdBQzVCdzNCLE9BQU9DLFNBQVN6M0IsR0FBUSxDQUN4QixJQUFLek4sS0FBSzJMLEdBQ04sT0FBTzNILEVBQU83RSxVQUFVeU8sU0FBU2xRLEtBQUtzQyxLQUFNMlUsRUFBT2xILEdBRXZEek4sS0FBSzhnQixRQUFTLEVBQ2QsSUFBSXJNLEVBQVMsSUFBSXV3QixFQUFjaGxDLEtBQUt1TixVQUFXdk4sS0FBS3dOLE1BRXBELE9BREF4TixLQUFLaUgsSUFBSXdOLEdBQ0ZBLEVBQU83RyxTQUFTK0csRUFBT2xILEdBRzlCLE9BQU83QixFQUFBLEVBQWFvQixPQUc1Qmc0QixFQUFjN2xDLFVBQVVvVyxlQUFpQixTQUFVaEksRUFBVzVCLEVBQUk4QixRQUNoRCxJQUFWQSxJQUFvQkEsRUFBUSxHQUNoQ3pOLEtBQUt5TixNQUFRRixFQUFVMkYsTUFBUXpGLEVBQy9CLElBQUk2RyxFQUFVL0csRUFBVStHLFFBR3hCLE9BRkFBLEVBQVFuUyxLQUFLbkMsTUFDYnNVLEVBQVE2d0IsS0FBS0gsRUFBY0ksYUFDcEIsR0FFWEosRUFBYzdsQyxVQUFVbVcsZUFBaUIsU0FBVS9ILEVBQVc1QixFQUFJOEIsUUFDaEQsSUFBVkEsSUFBb0JBLEVBQVEsSUFHcEN1M0IsRUFBYzdsQyxVQUFVdVcsU0FBVyxTQUFVZixFQUFPbEgsR0FDaEQsSUFBb0IsSUFBaEJ6TixLQUFLOGdCLE9BQ0wsT0FBTzljLEVBQU83RSxVQUFVdVcsU0FBU2hZLEtBQUtzQyxLQUFNMlUsRUFBT2xILElBRzNEdTNCLEVBQWNJLFlBQWMsU0FBVWppQyxFQUFHM0QsR0FDckMsT0FBSTJELEVBQUVzSyxRQUFVak8sRUFBRWlPLE1BQ1Z0SyxFQUFFbUwsUUFBVTlPLEVBQUU4TyxNQUNQLEVBRUZuTCxFQUFFbUwsTUFBUTlPLEVBQUU4TyxNQUNWLEdBR0MsRUFHUG5MLEVBQUVzSyxNQUFRak8sRUFBRWlPLE1BQ1YsR0FHQyxHQUdUdTNCLEVBL0RTLENBZ0VsQjV2QixFQUFBLEcscURDbkdLLFNBQVNpd0IsRUFBYWxnQyxHQUN6QixRQUFTQSxJQUFRQSxhQUFld0IsRUFBQSxHQUFlLE9BQUFELEVBQUEsR0FBV3ZCLEVBQUlOLE9BQVMsT0FBQTZCLEVBQUEsR0FBV3ZCLEVBQUlHLFksWUNGbkYsU0FBU2dnQyxFQUFjMWdDLEVBQVFnTCxHQUNsQyxJQUFJMjFCLEVBQThCLGlCQUFYMzFCLEVBQ3ZCLE9BQU8sSUFBSXJQLFNBQVEsU0FBVUMsRUFBU0MsR0FDbEMsSUFDSTBmLEVBREFDLEdBQVksRUFFaEJ4YixFQUFPVSxVQUFVLENBQ2IxRSxLQUFNLFNBQVVwQyxHQUNaMmhCLEVBQVMzaEIsRUFDVDRoQixHQUFZLEdBRWhCN2QsTUFBTzlCLEVBQ1ArRSxTQUFVLFdBQ0Y0YSxFQUNBNWYsRUFBUTJmLEdBRUhvbEIsRUFDTC9rQyxFQUFRb1AsRUFBT3pHLGNBR2YxSSxFQUFPLElBQUlpTyxFQUFBLFNDbEJ4QixTQUFTODJCLEVBQWU1Z0MsRUFBUWdMLEdBQ25DLElBQUkyMUIsRUFBOEIsaUJBQVgzMUIsRUFDdkIsT0FBTyxJQUFJclAsU0FBUSxTQUFVQyxFQUFTQyxHQUNsQyxJQUFJMkUsRUFBYSxJQUFJLElBQWUsQ0FDaEN4RSxLQUFNLFNBQVVwQyxHQUNaZ0MsRUFBUWhDLEdBQ1I0RyxFQUFXZCxlQUVmL0IsTUFBTzlCLEVBQ1ArRSxTQUFVLFdBQ0YrL0IsRUFDQS9rQyxFQUFRb1AsRUFBT3pHLGNBR2YxSSxFQUFPLElBQUlpTyxFQUFBLE1BSXZCOUosRUFBT1UsVUFBVUYsTSw0RkNibEIsU0FBU3FnQyxHQUFzQkMsRUFBYUMsRUFBYzMzQixFQUFnQlQsR0FDN0UsR0FBSVMsRUFBZ0IsQ0FDaEIsSUFBSSxPQUFBb0wsR0FBQSxHQUFZcEwsR0FJWixPQUFPLFdBRUgsSUFEQSxJQUFJakYsRUFBTyxHQUNGdEIsRUFBSyxFQUFHQSxFQUFLN0UsVUFBVVYsT0FBUXVGLElBQ3BDc0IsRUFBS3RCLEdBQU03RSxVQUFVNkUsR0FFekIsT0FBT2crQixHQUFzQkMsRUFBYUMsRUFBY3A0QixHQUNuRHJNLE1BQU1sQixLQUFNK0ksR0FDWnhCLEtBQUssT0FBQWlJLEdBQUEsR0FBaUJ4QixLQVYvQlQsRUFBWVMsRUFjcEIsT0FBSVQsRUFDTyxXQUVILElBREEsSUFBSXhFLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLE9BQU9nK0IsR0FBc0JDLEVBQWFDLEdBQ3JDemtDLE1BQU1sQixLQUFNK0ksR0FDWnhCLEtBQUssT0FBQXFNLEdBQUEsR0FBWXJHLEdBQVksT0FBQXNHLEdBQUEsR0FBVXRHLEtBRzdDLFdBR0gsSUFGQSxJQUFJckosRUFBUWxFLEtBQ1IrSSxFQUFPLEdBQ0Z0QixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENzQixFQUFLdEIsR0FBTTdFLFVBQVU2RSxHQUV6QixJQUFJVyxFQUFVLElBQUk4WCxFQUFBLEVBQ2QwbEIsR0FBZ0IsRUFDcEIsT0FBTyxJQUFJai9CLEVBQUEsR0FBVyxTQUFVdkIsR0FDNUIsSUFBSW9tQixFQUFPcGpCLEVBQVE5QyxVQUFVRixHQUM3QixHQUFJd2dDLEVBQWUsQ0FDZkEsR0FBZ0IsRUFDaEIsSUFBSUMsR0FBWSxFQUNaQyxHQUFlLEVBQ25CSCxFQUFhemtDLE1BQU1nRCxFQUFPLFlBQWMsWUFBYyxHQUFJLFlBQU82RSxJQUFRLENBQ3JFLFdBRUksSUFEQSxJQUFJZzlCLEVBQVUsR0FDTHQrQixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENzK0IsRUFBUXQrQixHQUFNN0UsVUFBVTZFLEdBRTVCLEdBQUlpK0IsRUFBYSxDQUNiLElBQUl0aEMsRUFBTTJoQyxFQUFReGlDLFFBQ2xCLEdBQVcsTUFBUGEsRUFFQSxZQURBZ0UsRUFBUTdGLE1BQU02QixHQUl0QmdFLEVBQVF4SCxLQUFLLEVBQUltbEMsRUFBUTdqQyxPQUFTNmpDLEVBQVVBLEVBQVEsSUFDcERELEdBQWUsRUFDWEQsR0FDQXo5QixFQUFRNUMsZUFJaEJzZ0MsR0FDQTE5QixFQUFRNUMsV0FFWnFnQyxHQUFZLEVBRWhCLE9BQU9yYSxNQ3pFWixTQUFTd2EsR0FBYUwsRUFBYzMzQixFQUFnQlQsR0FDdkQsT0FBT2s0QixJQUFzQixFQUFPRSxFQUFjMzNCLEVBQWdCVCxHQ0QvRCxTQUFTMDRCLEdBQWlCTixFQUFjMzNCLEVBQWdCVCxHQUMzRCxPQUFPazRCLElBQXNCLEVBQU1FLEVBQWMzM0IsRUFBZ0JULEcsOEJDQTlELFNBQVMyNEIsR0FBTUMsR0FDbEIsT0FBTyxJQUFJeC9CLEVBQUEsR0FBVyxTQUFVdkIsR0FDNUIsT0FBQUgsR0FBQSxHQUFVa2hDLEtBQXFCN2dDLFVBQVVGLE1DRGpELElBQUlpVCxHQUFpQixDQUNqQkQsVUFBVyxXQUFjLE9BQU8sSUFBSXRRLEVBQUEsR0FDcENzK0IsbUJBQW1CLEdBRWhCLFNBQVNDLEdBQVl6aEMsRUFBUWdMLFFBQ2pCLElBQVhBLElBQXFCQSxFQUFTeUksSUFDbEMsSUFBSVksRUFBYSxLQUNiYixFQUFZeEksRUFBT3dJLFVBQVc1VCxFQUFLb0wsRUFBT3cyQixrQkFBbUJBLE9BQTJCLElBQVA1aEMsR0FBdUJBLEVBQ3hHNEQsRUFBVWdRLElBQ1ZyWCxFQUFTLElBQUk0RixFQUFBLEdBQVcsU0FBVXZCLEdBQ2xDLE9BQU9nRCxFQUFROUMsVUFBVUYsTUFXN0IsT0FUQXJFLEVBQU91WCxRQUFVLFdBT2IsT0FOS1csSUFBY0EsRUFBV3ZVLFNBQzFCdVUsRUFBYWl0QixJQUFNLFdBQWMsT0FBT3RoQyxLQUFXVSxVQUFVOEMsR0FDekRnK0IsR0FDQW50QixFQUFXaFMsS0FBSSxXQUFjLE9BQVFtQixFQUFVZ1EsUUFHaERhLEdBRUpsWSxFLGlEQ2pCSixTQUFTdWxDLEtBRVosSUFEQSxJQUFJdjlCLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLElBQUl1RyxFQUFpQixhQUFrQmpGLEdBQ25DdkUsRUFBSyxPQUFBazBCLEdBQUEsR0FBcUIzdkIsR0FBT21DLEVBQVUxRyxFQUFHdUUsS0FBTTBYLEVBQU9qYyxFQUFHaWMsS0FDOUQxZixFQUFTLElBQUk0RixFQUFBLEdBQVcsU0FBVXZCLEdBQ2xDLElBQUlsRCxFQUFTZ0osRUFBUWhKLE9BQ3JCLEdBQUtBLEVBd0JMLElBcEJBLElBQUl5ZSxFQUFTLElBQUloaEIsTUFBTXVDLEdBQ25CcWtDLEVBQXVCcmtDLEVBQ3ZCc2tDLEVBQXFCdGtDLEVBQ3JCOGUsRUFBVSxTQUFVSyxHQUNwQixJQUFJck4sR0FBVyxFQUNmLE9BQUEvTyxHQUFBLEdBQVVpRyxFQUFRbVcsSUFBYy9iLFVBQVUsYUFBeUJGLEdBQVksU0FBVTVHLEdBQ2hGd1YsSUFDREEsR0FBVyxFQUNYd3lCLEtBRUo3bEIsRUFBT1UsR0FBZTdpQixLQUN2QixXQUFjLE9BQU8rbkMsV0FBMkJ2OUIsR0FBVyxXQUNyRHU5QixHQUF5QnZ5QixJQUNyQnd5QixHQUNEcGhDLEVBQVd4RSxLQUFLNmYsRUFBTyxPQUFBbVksR0FBQSxHQUFhblksRUFBTUUsR0FBVUEsR0FFeER2YixFQUFXSSxpQkFJZDZiLEVBQWMsRUFBR0EsRUFBY25mLEVBQVFtZixJQUM1Q0wsRUFBUUssUUF4QlJqYyxFQUFXSSxjQTJCbkIsT0FBT3dJLEVBQWlCak4sRUFBT3dHLEtBQUssT0FBQWlJLEdBQUEsR0FBaUJ4QixJQUFtQmpOLEUsK0JDckN4RTBsQyxHQUEwQixDQUFDLGNBQWUsa0JBQzFDQyxHQUFxQixDQUFDLG1CQUFvQix1QkFDMUNDLEdBQWdCLENBQUMsS0FBTSxPQUNwQixTQUFTQyxHQUFVdmpCLEVBQVF3akIsRUFBVzNyQixFQUFTbE4sR0FLbEQsR0FKSSxPQUFBdEgsRUFBQSxHQUFXd1UsS0FDWGxOLEVBQWlCa04sRUFDakJBLE9BQVVsUyxHQUVWZ0YsRUFDQSxPQUFPNDRCLEdBQVV2akIsRUFBUXdqQixFQUFXM3JCLEdBQVMzVCxLQUFLLE9BQUFpSSxHQUFBLEdBQWlCeEIsSUFFdkUsSUFBSXhKLEVBQUssWUFxQ2IsU0FBdUI2ZSxHQUNuQixPQUFPLE9BQUEzYyxFQUFBLEdBQVcyYyxFQUFPeWpCLG1CQUFxQixPQUFBcGdDLEVBQUEsR0FBVzJjLEVBQU8wakIscUJBdENoREMsQ0FBYzNqQixHQUN4QnFqQixHQUFtQnY3QixLQUFJLFNBQVU4N0IsR0FBYyxPQUFPLFNBQVVseUIsR0FBVyxPQUFPc08sRUFBTzRqQixHQUFZSixFQUFXOXhCLEVBQVNtRyxPQThCbkksU0FBaUNtSSxHQUM3QixPQUFPLE9BQUEzYyxFQUFBLEdBQVcyYyxFQUFPNmpCLGNBQWdCLE9BQUF4Z0MsRUFBQSxHQUFXMmMsRUFBTzhqQixnQkE3Qm5EQyxDQUF3Qi9qQixHQUNsQm9qQixHQUF3QnQ3QixJQUFJazhCLEdBQXdCaGtCLEVBQVF3akIsSUE4QjlFLFNBQW1DeGpCLEdBQy9CLE9BQU8sT0FBQTNjLEVBQUEsR0FBVzJjLEVBQU8xRSxLQUFPLE9BQUFqWSxFQUFBLEdBQVcyYyxFQUFPaWtCLEtBOUJwQ0MsQ0FBMEJsa0IsR0FDdEJzakIsR0FBY3g3QixJQUFJazhCLEdBQXdCaGtCLEVBQVF3akIsSUFDbEQsR0FBSSxHQUFJNS9CLEVBQU16QyxFQUFHLEdBQUk0SCxFQUFTNUgsRUFBRyxHQUNuRCxJQUFLeUMsR0FDRyxPQUFBMGEsR0FBQSxHQUFZMEIsR0FDWixPQUFPLE9BQUF2VixHQUFBLElBQVMsU0FBVTA1QixHQUFhLE9BQU9aLEdBQVVZLEVBQVdYLEVBQVczckIsS0FBdkUsQ0FBb0YsT0FBQWpXLEdBQUEsR0FBVW9lLElBRzdHLElBQUtwYyxFQUNELE1BQU0sSUFBSXBILFVBQVUsd0JBRXhCLE9BQU8sSUFBSThHLEVBQUEsR0FBVyxTQUFVdkIsR0FDNUIsSUFBSTJQLEVBQVUsV0FFVixJQURBLElBQUloTSxFQUFPLEdBQ0Z0QixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENzQixFQUFLdEIsR0FBTTdFLFVBQVU2RSxHQUV6QixPQUFPckMsRUFBV3hFLEtBQUssRUFBSW1JLEVBQUs3RyxPQUFTNkcsRUFBT0EsRUFBSyxLQUd6RCxPQURBOUIsRUFBSThOLEdBQ0csV0FBYyxPQUFPM0ksRUFBTzJJLE9BRzNDLFNBQVNzeUIsR0FBd0Joa0IsRUFBUXdqQixHQUNyQyxPQUFPLFNBQVVJLEdBQWMsT0FBTyxTQUFVbHlCLEdBQVcsT0FBT3NPLEVBQU80akIsR0FBWUosRUFBVzl4QixLQzVDN0YsU0FBUzB5QixHQUFpQkMsRUFBWUMsRUFBZTM1QixHQUN4RCxPQUFJQSxFQUNPeTVCLEdBQWlCQyxFQUFZQyxHQUFlcGdDLEtBQUssT0FBQWlJLEdBQUEsR0FBaUJ4QixJQUV0RSxJQUFJckgsRUFBQSxHQUFXLFNBQVV2QixHQUM1QixJQUFJMlAsRUFBVSxXQUVWLElBREEsSUFBSWxVLEVBQUksR0FDQzRHLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQzVHLEVBQUU0RyxHQUFNN0UsVUFBVTZFLEdBRXRCLE9BQU9yQyxFQUFXeEUsS0FBa0IsSUFBYkMsRUFBRXFCLE9BQWVyQixFQUFFLEdBQUtBLElBRS9DK21DLEVBQVdGLEVBQVczeUIsR0FDMUIsT0FBTyxPQUFBck8sRUFBQSxHQUFXaWhDLEdBQWlCLFdBQWMsT0FBT0EsRUFBYzV5QixFQUFTNnlCLFNBQWU1K0IsSyxjQ1gvRixTQUFTNitCLEdBQVNDLEVBQXVCQyxFQUFXQyxFQUFTQyxFQUEyQjE2QixHQUMzRixJQUFJL0ksRUFBSStCLEVBQ0p5SCxFQUNBazZCLEVBY0osU0FBU0MsSUFDTCxJQUFJeHpCLEVBQ0osT0FBTyxZQUFZM1UsTUFBTSxTQUFVd0UsR0FDL0IsT0FBUUEsRUFBRy9DLE9BQ1AsS0FBSyxFQUNEa1QsRUFBUXV6QixFQUNSMWpDLEVBQUcvQyxNQUFRLEVBQ2YsS0FBSyxFQUNELE9BQU9zbUMsSUFBYUEsRUFBVXB6QixHQUFnQixDQUFDLEVBQUcsR0FDM0MsQ0FBQyxFQUFHM0csRUFBZTJHLElBQzlCLEtBQUssRUFDRG5RLEVBQUc5QyxPQUNIOEMsRUFBRy9DLE1BQVEsRUFDZixLQUFLLEVBRUQsT0FEQWtULEVBQVFxekIsRUFBUXJ6QixHQUNULENBQUMsRUFBRyxHQUNmLEtBQUssRUFBRyxNQUFPLENBQUMsT0FJNUIsT0FqQ3lCLElBQXJCL1IsVUFBVVYsUUFDbUJnbUMsR0FBNUIxakMsRUFBS3NqQyxHQUF5Q0ksYUFBY0gsRUFBWXZqQyxFQUFHdWpDLFVBQVdDLEVBQVV4akMsRUFBR3dqQyxRQUFTemhDLEVBQUsvQixFQUFHd0osZUFBZ0JBLE9BQXdCLElBQVB6SCxFQUFnQnNCLEVBQUEsRUFBV3RCLEVBQUlnSCxFQUFZL0ksRUFBRytJLFlBR3BNMjZCLEVBQWVKLEdBQ1ZHLEdBQTZCLE9BQUE3dUIsR0FBQSxHQUFZNnVCLElBQzFDajZCLEVBQWlCbkcsRUFBQSxFQUNqQjBGLEVBQVkwNkIsR0FHWmo2QixFQUFpQmk2QixHQXVCbEIvQixHQUFPMzRCLEVBRU4sV0FBYyxPQUFPLE9BQUE0cUIsR0FBQSxHQUFpQmdRLElBQU81NkIsSUFFN0M0NkIsR0M3Q0wsU0FBU0MsR0FBSUwsRUFBV00sRUFBWUMsR0FDdkMsT0FBT3BDLElBQU0sV0FBYyxPQUFRNkIsSUFBY00sRUFBYUMsSyx1QkNHM0QsU0FBUzdRLEtBRVosSUFEQSxJQUFJMXVCLEVBQU8sR0FDRnRCLEVBQUssRUFBR0EsRUFBSzdFLFVBQVVWLE9BQVF1RixJQUNwQ3NCLEVBQUt0QixHQUFNN0UsVUFBVTZFLEdBRXpCLElBQUk4RixFQUFZLGFBQWF4RSxHQUN6QmtGLEVBQWEsYUFBVWxGLEVBQU1tRixLQUM3QmhELEVBQVVuQyxFQUNkLE9BQVFtQyxFQUFRaEosT0FHUyxJQUFuQmdKLEVBQVFoSixPQUVGLE9BQUErQyxHQUFBLEdBQVVpRyxFQUFRLElBRWxCLE9BQUE0SSxHQUFBLEdBQVM3RixFQUFULENBQXFCLE9BQUF2TCxHQUFBLEdBQUt3SSxFQUFTcUMsSUFMdkMsS0NiTCxJQUFJZzdCLEdBQVEsSUFBSTVoQyxFQUFBLEVBQVdpQixFQUFBLEdBQzNCLFNBQVM0Z0MsS0FDWixPQUFPRCxHLHVCQ0hKLFNBQVNFLEdBQU10akMsRUFBS29JLEdBQ3ZCLE9BQU8sT0FBQTdLLEdBQUEsR0FBS3pFLE9BQU9rckIsUUFBUWhrQixHQUFNb0ksRyx1QkNDOUIsU0FBU203QixHQUFVOWpDLEVBQVF5SixFQUFXbE8sR0FDekMsTUFBTyxDQUFDLE9BQUFpTyxHQUFBLEdBQU9DLEVBQVdsTyxFQUFsQixDQUEyQixPQUFBOEUsR0FBQSxHQUFVTCxJQUFVLE9BQUF3SixHQUFBLEdBQU8sT0FBQXlxQixHQUFBLEdBQUl4cUIsRUFBV2xPLEdBQXRCLENBQWdDLE9BQUE4RSxHQUFBLEdBQVVMLEssY0NGOUYsU0FBUytqQyxHQUFNeHVCLEVBQU9wSSxFQUFPeEUsR0FLaEMsR0FKYSxNQUFUd0UsSUFDQUEsRUFBUW9JLEVBQ1JBLEVBQVEsR0FFUnBJLEdBQVMsRUFDVCxPQUFPLEtBRVgsSUFBSXFJLEVBQU1ySSxFQUFRb0ksRUFDbEIsT0FBTyxJQUFJeFQsRUFBQSxFQUFXNEcsRUFFZCxTQUFVbkksR0FDTixJQUFJcEcsRUFBSW1iLEVBQ1IsT0FBTzVNLEVBQVVLLFVBQVMsV0FDbEI1TyxFQUFJb2IsR0FDSmhWLEVBQVd4RSxLQUFLNUIsS0FDaEJnQixLQUFLNE4sWUFHTHhJLEVBQVdJLGVBS3ZCLFNBQVVKLEdBRU4sSUFEQSxJQUFJcEcsRUFBSW1iLEVBQ0RuYixFQUFJb2IsSUFBUWhWLEVBQVdWLFFBQzFCVSxFQUFXeEUsS0FBSzVCLEtBRXBCb0csRUFBV0ksYSx1QkM1QnBCLFNBQVNvakMsR0FBTUMsRUFBaUIxQyxHQUNuQyxPQUFPLElBQUl4L0IsRUFBQSxHQUFXLFNBQVV2QixHQUM1QixJQUFJMGpDLEVBQVdELElBQ1g5bkMsRUFBU29sQyxFQUFrQjJDLEdBRy9CLE9BRmEvbkMsRUFBUyxPQUFBa0UsR0FBQSxHQUFVbEUsR0FBVSxNQUNuQ3VFLFVBQVVGLEdBQ1YsV0FDQzBqQyxHQUNBQSxFQUFTeGtDLGtCLHM4TUNUbEIsU0FBU29rQyxHQUFVcjZCLEVBQVdsTyxHQUNqQyxPQUFPLFNBQVV5RSxHQUNiLE1BQU8sQ0FBQyxPQUFBd0osRUFBQSxHQUFPQyxFQUFXbE8sRUFBbEIsQ0FBMkJ5RSxHQUFTLE9BQUF3SixFQUFBLEdBQU8sT0FBQXlxQixHQUFBLEdBQUl4cUIsRUFBV2xPLEdBQXRCLENBQWdDeUUsSyxnRkNEN0UsU0FBUzB5QixLQUVaLElBREEsSUFBSXZ1QixFQUFPLEdBQ0Z0QixFQUFLLEVBQUdBLEVBQUs3RSxVQUFVVixPQUFRdUYsSUFDcENzQixFQUFLdEIsR0FBTTdFLFVBQVU2RSxHQUV6QixPQUFPaVcsR0FBQSxFQUFTeGMsV0FBTSxFQUFRLGFBQWMsR0FBSSxhQUFPLE9BQUF5TyxHQUFBLEdBQWU1RyxNLHdkQ1IxRSw2QkFHSWdnQyxFQUhKLE1BRzhCLEdBQTRCLEtBRTFEQSxFQUF3QjVtQyxLQUFLLENBQUM3RSxFQUFPQyxFQUFJLDhCQUErQixHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyxtQ0FBbUMsTUFBUSxHQUFHLFNBQVcsc0JBQXNCLGVBQWlCLENBQUMsK0JBQStCLFdBQWEsTUFFak8sTyw2QkNQZiw2QkFHSXdyQyxFQUhKLE1BRzhCLEdBQTRCLEtBRTFEQSxFQUF3QjVtQyxLQUFLLENBQUM3RSxFQUFPQyxFQUFJLG9DQUFxQyxHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyx5REFBeUQsTUFBUSxHQUFHLFNBQVcseUJBQXlCLGVBQWlCLENBQUMscUNBQXFDLFdBQWEsTUFFdFEsTyw2QkNQZiw2QkFHSXdyQyxFQUhKLE1BRzhCLEdBQTRCLEtBRTFEQSxFQUF3QjVtQyxLQUFLLENBQUM3RSxFQUFPQyxFQUFJLDhGQUErRixHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyxrQ0FBa0MsTUFBUSxHQUFHLFNBQVcsdURBQXVELGVBQWlCLENBQUMsK0ZBQStGLFdBQWEsTUFFalksTyw2QkNQZiw2QkFHSXdyQyxFQUhKLE1BRzhCLEdBQTRCLEtBRTFEQSxFQUF3QjVtQyxLQUFLLENBQUM3RSxFQUFPQyxFQUFJLHVEQUF3RCxHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyxtQ0FBbUMsTUFBUSxHQUFHLFNBQVcseUJBQXlCLGVBQWlCLENBQUMsd0RBQXdELFdBQWEsTUFFdFIsTyxnQkNQZkQsRUFBT0QsUUFBVSxJQUEwQix3QyxnQkNBM0NDLEVBQU9ELFFBQVUsSUFBMEIsd0MsZ0JDQTNDQyxFQUFPRCxRQUFVLElBQTBCLHdDLDZCQ0EzQyxtRkFRSTByQyxFQUEwQixJQUE0QixLQUMxREEsRUFBd0J4ckMsRUFBRSxLQUMxQndyQyxFQUF3QnhyQyxFQUFFLEtBQzFCd3JDLEVBQXdCeHJDLEVBQUUsS0FDMUJ3ckMsRUFBd0J4ckMsRUFBRSxLQUMxQndyQyxFQUF3QnhyQyxFQUFFLEtBRTFCd3JDLEVBQXdCNW1DLEtBQUssQ0FBQzdFLEVBQU9DLEVBQUksR0FBSSxHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsR0FBRyxNQUFRLEdBQUcsU0FBVyxHQUFHLFdBQWEsTUFFakcsTyw2QkNqQmYsNkJBR0l3ckMsRUFISixNQUc4QixHQUE0QixLQUUxREEsRUFBd0I1bUMsS0FBSyxDQUFDN0UsRUFBT0MsRUFBSSxnOERBQWk4RCxHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyxrREFBa0QsTUFBUSxHQUFHLFNBQVcsdzZCQUF3NkIsZUFBaUIsQ0FBQyxpOERBQWk4RCxXQUFhLE1BRXQ4SixPLDZCQ1BmLDZCQUdJd3JDLEVBSEosTUFHOEIsR0FBNEIsS0FFMURBLEVBQXdCNW1DLEtBQUssQ0FBQzdFLEVBQU9DLEVBQUksOHFCQUFtckIsR0FBRyxDQUFDLFFBQVUsRUFBRSxRQUFVLENBQUMsMkNBQTJDLE1BQVEsR0FBRyxTQUFXLGtTQUFrUyxlQUFpQixDQUFDLCtxQkFBbXJCLFdBQWEsTUFFN3hELE8sNkJDUGYsNkJBR0l3ckMsRUFISixNQUc4QixHQUE0QixLQUUxREEsRUFBd0I1bUMsS0FBSyxDQUFDN0UsRUFBT0MsRUFBSSx3d0RBQXl3RCxHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQywwQ0FBMEMsTUFBUSxHQUFHLFNBQVcsNDhCQUE0OEIsZUFBaUIsQ0FBQyx5d0RBQXl3RCxXQUFhLE1BRWxuSixPLDZCQ1BmLDZCQUdJd3JDLEVBSEosTUFHOEIsR0FBNEIsS0FFMURBLEVBQXdCNW1DLEtBQUssQ0FBQzdFLEVBQU9DLEVBQUksK2ZBQWdnQixHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyxpREFBaUQsTUFBUSxHQUFHLFNBQVcsNE9BQTRPLGVBQWlCLENBQUMsZ2dCQUFnZ0IsV0FBYSxNQUV2NEMsTyw2QkNQZiw2QkFHSXdyQyxFQUhKLE1BRzhCLEdBQTRCLEtBRTFEQSxFQUF3QjVtQyxLQUFLLENBQUM3RSxFQUFPQyxFQUFJLDZNQUE4TSxHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyx5Q0FBeUMsTUFBUSxHQUFHLFNBQVcsMkZBQTJGLGVBQWlCLENBQUMsOE1BQThNLFdBQWEsTUFFMW9CLE8sZ0JDUGZELEVBQU9ELFFBQVUsSUFBMEIsd0IsZ0JDQTNDQyxFQUFPRCxRQUFVLElBQTBCLHNCLDhCQ0EzQ2tVLEVBQVEsS0FDUkEsRUFBUSxLQU9SLElBQUlFLEVBTFFGLEVBQVEsSUFBbUJFLEtBRXhCRixFQUFRLEtBQ0RBLEVBQVEsTUFFQ3kzQix1QkFBdUJDLG1CQUFtQmptQixPQUFPaVgsVyxnQkNQaEYsSUFBSTF2QixFQUFVLEVBQVEsS0FFQSxpQkFBWkEsSUFBc0JBLEVBQVUsQ0FBQyxDQUFDak4sRUFBT0MsRUFBSWdOLEVBQVMsTUFPaEUsSUFBSTJRLEVBQVUsQ0FBQyxLQUFNLEVBRXJCLGVBUEltTCxFQVFKLGdCQUFxQnJkLEdBRVIsRUFBUSxHQUFSLENBQTZEdUIsRUFBUzJRLEdBRWhGM1EsRUFBUTIrQixTQUFRNXJDLEVBQU9ELFFBQVVrTixFQUFRMitCLFMsNkJDakI1QyxpRkFPSUgsRUFBMEIsSUFBNEIsS0FDMURBLEVBQXdCeHJDLEVBQUUsS0FDMUJ3ckMsRUFBd0J4ckMsRUFBRSxLQUMxQndyQyxFQUF3QnhyQyxFQUFFLEtBQzFCd3JDLEVBQXdCeHJDLEVBQUUsS0FFMUJ3ckMsRUFBd0I1bUMsS0FBSyxDQUFDN0UsRUFBT0MsRUFBSSxLQUFNLEdBQUcsQ0FBQyxRQUFVLEVBQUUsUUFBVSxHQUFHLE1BQVEsR0FBRyxTQUFXLEdBQUcsV0FBYSxNQUVuRyxhLGNDRGZELEVBQU9ELFFBQVUsU0FBVXNuQixHQUV6QixJQUFJc1YsRUFBNkIsb0JBQVhqWCxRQUEwQkEsT0FBT2lYLFNBRXZELElBQUtBLEVBQ0gsTUFBTSxJQUFJM3FCLE1BQU0sb0NBSW5CLElBQUtxVixHQUFzQixpQkFBUkEsRUFDakIsT0FBT0EsRUFHUixJQUFJd2tCLEVBQVVsUCxFQUFTbVAsU0FBVyxLQUFPblAsRUFBU29QLEtBQzlDQyxFQUFhSCxFQUFVbFAsRUFBU3NQLFNBQVMxMkIsUUFBUSxZQUFhLEtBMkRuRSxPQS9CZThSLEVBQUk5UixRQUFRLHVEQUF1RCxTQUFTMjJCLEVBQVdDLEdBRXJHLElBV0lDLEVBWEFDLEVBQWtCRixFQUNwQkcsT0FDQS8yQixRQUFRLFlBQVksU0FBUzdVLEVBQUc2ckMsR0FBSyxPQUFPQSxLQUM1Q2gzQixRQUFRLFlBQVksU0FBUzdVLEVBQUc2ckMsR0FBSyxPQUFPQSxLQUc5QyxNQUFJLG9EQUFvRDcvQixLQUFLMi9CLEdBQ3BESCxHQVFSRSxFQUZxQyxJQUFsQ0MsRUFBZ0JuN0IsUUFBUSxNQUVsQm03QixFQUNrQyxJQUFqQ0EsRUFBZ0JuN0IsUUFBUSxLQUV6QjI2QixFQUFVUSxFQUdWTCxFQUFhSyxFQUFnQjkyQixRQUFRLFFBQVMsSUFJakQsT0FBU2hJLEtBQUtDLFVBQVU0K0IsR0FBVSxVLDZCQ25GM0MsSUFBTS8zQixFQUFhSixFQUFRLElBQW1CSSxXQUN4QzVHLEVBQU93RyxFQUFRLEtBQ3JCSSxFQUFXbTRCLFFBQVEvK0IsR0FDbkI0RyxFQUFXbzRCLFFBQVEsUUFBUyxVLDZCQ29CNUIsSUFPSUMsRUFQQUMsRUFBdUIsaUJBQVpDLFFBQXVCQSxRQUFVLEtBQzVDQyxFQUFlRixHQUF3QixtQkFBWkEsRUFBRS9vQyxNQUM3QitvQyxFQUFFL29DLE1BQ0YsU0FBc0JtaUIsRUFBUSttQixFQUFVcmhDLEdBQ3hDLE9BQU8wSCxTQUFTdFIsVUFBVStCLE1BQU14RCxLQUFLMmxCLEVBQVErbUIsRUFBVXJoQyxJQUt6RGloQyxFQURFQyxHQUEwQixtQkFBZEEsRUFBRUksUUFDQ0osRUFBRUksUUFDVnBzQyxPQUFPcXNDLHNCQUNDLFNBQXdCam5CLEdBQ3ZDLE9BQU9wbEIsT0FBT3NzQyxvQkFBb0JsbkIsR0FDL0J2Z0IsT0FBTzdFLE9BQU9xc0Msc0JBQXNCam5CLEtBR3hCLFNBQXdCQSxHQUN2QyxPQUFPcGxCLE9BQU9zc0Msb0JBQW9CbG5CLElBUXRDLElBQUltbkIsRUFBY3ZGLE9BQU9wakIsT0FBUyxTQUFxQnJqQixHQUNyRCxPQUFPQSxHQUFVQSxHQUduQixTQUFTNHBCLElBQ1BBLEVBQWFyakIsS0FBS3JILEtBQUtzQyxNQUV6QjFDLEVBQU9ELFFBQVUrcUIsRUFDakI5cUIsRUFBT0QsUUFBUW90QyxLQXdZZixTQUFjQyxFQUFTNXNDLEdBQ3JCLE9BQU8sSUFBSXlDLFNBQVEsU0FBVUMsRUFBU0MsR0FDcEMsU0FBU2txQyxTQUNlM2hDLElBQWxCNGhDLEdBQ0ZGLEVBQVF2RCxlQUFlLFFBQVN5RCxHQUVsQ3BxQyxFQUFRLEdBQUdxQyxNQUFNbkYsS0FBS2tGLFlBRXhCLElBQUlnb0MsRUFRUyxVQUFUOXNDLElBQ0Y4c0MsRUFBZ0IsU0FBdUJ4bUMsR0FDckNzbUMsRUFBUXZELGVBQWVycEMsRUFBTTZzQyxHQUM3QmxxQyxFQUFPMkQsSUFHVHNtQyxFQUFRRCxLQUFLLFFBQVNHLElBR3hCRixFQUFRRCxLQUFLM3NDLEVBQU02c0MsT0E5WnZCdmlCLEVBQWFBLGFBQWVBLEVBRTVCQSxFQUFhanBCLFVBQVUwckMsYUFBVTdoQyxFQUNqQ29mLEVBQWFqcEIsVUFBVTJyQyxhQUFlLEVBQ3RDMWlCLEVBQWFqcEIsVUFBVTRyQyxtQkFBZ0IvaEMsRUFJdkMsSUFBSWdpQyxFQUFzQixHQUUxQixTQUFTQyxFQUFjQyxHQUNyQixHQUF3QixtQkFBYkEsRUFDVCxNQUFNLElBQUlyckMsVUFBVSwwRUFBNEVxckMsR0FzQ3BHLFNBQVNDLEVBQWlCQyxHQUN4QixZQUEyQnBpQyxJQUF2Qm9pQyxFQUFLTCxjQUNBM2lCLEVBQWE0aUIsb0JBQ2ZJLEVBQUtMLGNBbURkLFNBQVNNLEVBQWFob0IsRUFBUXlDLEVBQU1vbEIsRUFBVUksR0FDNUMsSUFBSTN0QyxFQUNBNHRDLEVBQ0FDLEVBMUhzQkMsRUFnSjFCLEdBcEJBUixFQUFjQyxRQUdDbGlDLEtBRGZ1aUMsRUFBU2xvQixFQUFPd25CLFVBRWRVLEVBQVNsb0IsRUFBT3duQixRQUFVNXNDLE9BQU9ZLE9BQU8sTUFDeEN3a0IsRUFBT3luQixhQUFlLFNBSUs5aEMsSUFBdkJ1aUMsRUFBT0csY0FDVHJvQixFQUFPakcsS0FBSyxjQUFlMEksRUFDZm9sQixFQUFTQSxTQUFXQSxFQUFTQSxTQUFXQSxHQUlwREssRUFBU2xvQixFQUFPd25CLFNBRWxCVyxFQUFXRCxFQUFPemxCLFNBR0g5YyxJQUFid2lDLEVBRUZBLEVBQVdELEVBQU96bEIsR0FBUW9sQixJQUN4QjduQixFQUFPeW5CLGtCQWVULEdBYndCLG1CQUFiVSxFQUVUQSxFQUFXRCxFQUFPemxCLEdBQ2hCd2xCLEVBQVUsQ0FBQ0osRUFBVU0sR0FBWSxDQUFDQSxFQUFVTixHQUVyQ0ksRUFDVEUsRUFBU0csUUFBUVQsR0FFakJNLEVBQVNycEMsS0FBSytvQyxJQUloQnZ0QyxFQUFJd3RDLEVBQWlCOW5CLElBQ2IsR0FBS21vQixFQUFTdHBDLE9BQVN2RSxJQUFNNnRDLEVBQVNJLE9BQVEsQ0FDcERKLEVBQVNJLFFBQVMsRUFHbEIsSUFBSUMsRUFBSSxJQUFJdjhCLE1BQU0sK0NBQ0VrOEIsRUFBU3RwQyxPQUFTLElBQU1wQyxPQUFPZ21CLEdBRGpDLHFFQUlsQitsQixFQUFFL3RDLEtBQU8sOEJBQ1QrdEMsRUFBRW5CLFFBQVVybkIsRUFDWndvQixFQUFFL2xCLEtBQU9BLEVBQ1QrbEIsRUFBRTk1QixNQUFReTVCLEVBQVN0cEMsT0E3S0d1cEMsRUE4S0hJLEVBN0tuQm5PLFNBQVdBLFFBQVFvTyxNQUFNcE8sUUFBUW9PLEtBQUtMLEdBaUwxQyxPQUFPcG9CLEVBY1QsU0FBUzBvQixJQUNQLElBQUsvckMsS0FBS2dzQyxNQUdSLE9BRkFoc0MsS0FBS3FqQixPQUFPOGpCLGVBQWVubkMsS0FBSzhsQixLQUFNOWxCLEtBQUtpc0MsUUFDM0Nqc0MsS0FBS2dzQyxPQUFRLEVBQ1ksSUFBckJwcEMsVUFBVVYsT0FDTGxDLEtBQUtrckMsU0FBU3h0QyxLQUFLc0MsS0FBS3FqQixRQUMxQnJqQixLQUFLa3JDLFNBQVNocUMsTUFBTWxCLEtBQUtxakIsT0FBUXpnQixXQUk1QyxTQUFTc3BDLEVBQVU3b0IsRUFBUXlDLEVBQU1vbEIsR0FDL0IsSUFBSXYyQixFQUFRLENBQUVxM0IsT0FBTyxFQUFPQyxZQUFRampDLEVBQVdxYSxPQUFRQSxFQUFReUMsS0FBTUEsRUFBTW9sQixTQUFVQSxHQUNqRmlCLEVBQVVKLEVBQVlodEMsS0FBSzRWLEdBRy9CLE9BRkF3M0IsRUFBUWpCLFNBQVdBLEVBQ25CdjJCLEVBQU1zM0IsT0FBU0UsRUFDUkEsRUEwSFQsU0FBU0MsRUFBVy9vQixFQUFReUMsRUFBTXVtQixHQUNoQyxJQUFJZCxFQUFTbG9CLEVBQU93bkIsUUFFcEIsUUFBZTdoQyxJQUFYdWlDLEVBQ0YsTUFBTyxHQUVULElBQUllLEVBQWFmLEVBQU96bEIsR0FDeEIsWUFBbUI5YyxJQUFmc2pDLEVBQ0ssR0FFaUIsbUJBQWZBLEVBQ0ZELEVBQVMsQ0FBQ0MsRUFBV3BCLFVBQVlvQixHQUFjLENBQUNBLEdBRWxERCxFQXNEVCxTQUF5QnhqQyxHQUV2QixJQURBLElBQUkwakMsRUFBTSxJQUFJNXNDLE1BQU1rSixFQUFJM0csUUFDZjNFLEVBQUksRUFBR0EsRUFBSWd2QyxFQUFJcnFDLFNBQVUzRSxFQUNoQ2d2QyxFQUFJaHZDLEdBQUtzTCxFQUFJdEwsR0FBRzJ0QyxVQUFZcmlDLEVBQUl0TCxHQUVsQyxPQUFPZ3ZDLEVBMURMQyxDQUFnQkYsR0FBY0csRUFBV0gsRUFBWUEsRUFBV3BxQyxRQW9CcEUsU0FBU3dxQyxFQUFjNW1CLEdBQ3JCLElBQUl5bEIsRUFBU3ZyQyxLQUFLNnFDLFFBRWxCLFFBQWU3aEMsSUFBWHVpQyxFQUFzQixDQUN4QixJQUFJZSxFQUFhZixFQUFPemxCLEdBRXhCLEdBQTBCLG1CQUFmd21CLEVBQ1QsT0FBTyxFQUNGLFFBQW1CdGpDLElBQWZzakMsRUFDVCxPQUFPQSxFQUFXcHFDLE9BSXRCLE9BQU8sRUFPVCxTQUFTdXFDLEVBQVc1akMsRUFBSzdKLEdBRXZCLElBREEsSUFBSWdoQixFQUFPLElBQUlyZ0IsTUFBTVgsR0FDWnpCLEVBQUksRUFBR0EsRUFBSXlCLElBQUt6QixFQUN2QnlpQixFQUFLemlCLEdBQUtzTCxFQUFJdEwsR0FDaEIsT0FBT3lpQixFQXBXVC9oQixPQUFPQyxlQUFla3FCLEVBQWMsc0JBQXVCLENBQ3pEanFCLFlBQVksRUFDWkMsSUFBSyxXQUNILE9BQU80c0MsR0FFVDFoQixJQUFLLFNBQVNxakIsR0FDWixHQUFtQixpQkFBUkEsR0FBb0JBLEVBQU0sR0FBS25DLEVBQVltQyxHQUNwRCxNQUFNLElBQUlDLFdBQVcsa0dBQW9HRCxFQUFNLEtBRWpJM0IsRUFBc0IyQixLQUkxQnZrQixFQUFhcmpCLEtBQU8sZ0JBRUdpRSxJQUFqQmhKLEtBQUs2cUMsU0FDTDdxQyxLQUFLNnFDLFVBQVk1c0MsT0FBT3M2QixlQUFldjRCLE1BQU02cUMsVUFDL0M3cUMsS0FBSzZxQyxRQUFVNXNDLE9BQU9ZLE9BQU8sTUFDN0JtQixLQUFLOHFDLGFBQWUsR0FHdEI5cUMsS0FBSytxQyxjQUFnQi9xQyxLQUFLK3FDLG9CQUFpQi9oQyxHQUs3Q29mLEVBQWFqcEIsVUFBVTB0QyxnQkFBa0IsU0FBeUI3dEMsR0FDaEUsR0FBaUIsaUJBQU5BLEdBQWtCQSxFQUFJLEdBQUt3ckMsRUFBWXhyQyxHQUNoRCxNQUFNLElBQUk0dEMsV0FBVyxnRkFBa0Y1dEMsRUFBSSxLQUc3RyxPQURBZ0IsS0FBSytxQyxjQUFnQi9yQyxFQUNkZ0IsTUFTVG9vQixFQUFhanBCLFVBQVUydEMsZ0JBQWtCLFdBQ3ZDLE9BQU8zQixFQUFpQm5yQyxPQUcxQm9vQixFQUFhanBCLFVBQVVpZSxLQUFPLFNBQWMwSSxHQUUxQyxJQURBLElBQUkvYyxFQUFPLEdBQ0Z4TCxFQUFJLEVBQUdBLEVBQUlxRixVQUFVVixPQUFRM0UsSUFBS3dMLEVBQUs1RyxLQUFLUyxVQUFVckYsSUFDL0QsSUFBSXd2QyxFQUFvQixVQUFUam5CLEVBRVh5bEIsRUFBU3ZyQyxLQUFLNnFDLFFBQ2xCLFFBQWU3aEMsSUFBWHVpQyxFQUNGd0IsRUFBV0EsUUFBNEIvakMsSUFBakJ1aUMsRUFBT2hwQyxXQUMxQixJQUFLd3FDLEVBQ1IsT0FBTyxFQUdULEdBQUlBLEVBQVMsQ0FDWCxJQUFJQyxFQUdKLEdBRklqa0MsRUFBSzdHLE9BQVMsSUFDaEI4cUMsRUFBS2prQyxFQUFLLElBQ1Jpa0MsYUFBYzE5QixNQUdoQixNQUFNMDlCLEVBR1IsSUFBSTVvQyxFQUFNLElBQUlrTCxNQUFNLG9CQUFzQjA5QixFQUFLLEtBQU9BLEVBQUdyK0IsUUFBVSxJQUFNLEtBRXpFLE1BREF2SyxFQUFJaVYsUUFBVTJ6QixFQUNSNW9DLEVBR1IsSUFBSTJRLEVBQVV3MkIsRUFBT3psQixHQUVyQixRQUFnQjljLElBQVorTCxFQUNGLE9BQU8sRUFFVCxHQUF1QixtQkFBWkEsRUFDVG8xQixFQUFhcDFCLEVBQVMvVSxLQUFNK0ksT0FFNUIsS0FBSW9CLEVBQU00SyxFQUFRN1MsT0FDZCtxQyxFQUFZUixFQUFXMTNCLEVBQVM1SyxHQUNwQyxJQUFTNU0sRUFBSSxFQUFHQSxFQUFJNE0sSUFBTzVNLEVBQ3pCNHNDLEVBQWE4QyxFQUFVMXZDLEdBQUl5QyxLQUFNK0ksR0FHckMsT0FBTyxHQWlFVHFmLEVBQWFqcEIsVUFBVStuQyxZQUFjLFNBQXFCcGhCLEVBQU1vbEIsR0FDOUQsT0FBT0csRUFBYXJyQyxLQUFNOGxCLEVBQU1vbEIsR0FBVSxJQUc1QzlpQixFQUFhanBCLFVBQVV3ZixHQUFLeUosRUFBYWpwQixVQUFVK25DLFlBRW5EOWUsRUFBYWpwQixVQUFVK3RDLGdCQUNuQixTQUF5QnBuQixFQUFNb2xCLEdBQzdCLE9BQU9HLEVBQWFyckMsS0FBTThsQixFQUFNb2xCLEdBQVUsSUFxQmhEOWlCLEVBQWFqcEIsVUFBVXNyQyxLQUFPLFNBQWMza0IsRUFBTW9sQixHQUdoRCxPQUZBRCxFQUFjQyxHQUNkbHJDLEtBQUsyZSxHQUFHbUgsRUFBTW9tQixFQUFVbHNDLEtBQU04bEIsRUFBTW9sQixJQUM3QmxyQyxNQUdUb29CLEVBQWFqcEIsVUFBVWd1QyxvQkFDbkIsU0FBNkJybkIsRUFBTW9sQixHQUdqQyxPQUZBRCxFQUFjQyxHQUNkbHJDLEtBQUtrdEMsZ0JBQWdCcG5CLEVBQU1vbUIsRUFBVWxzQyxLQUFNOGxCLEVBQU1vbEIsSUFDMUNsckMsTUFJYm9vQixFQUFhanBCLFVBQVVnb0MsZUFDbkIsU0FBd0JyaEIsRUFBTW9sQixHQUM1QixJQUFJMy9CLEVBQU1nZ0MsRUFBUTZCLEVBQVU3dkMsRUFBRzh2QyxFQUsvQixHQUhBcEMsRUFBY0MsUUFHQ2xpQyxLQURmdWlDLEVBQVN2ckMsS0FBSzZxQyxTQUVaLE9BQU83cUMsS0FHVCxRQUFhZ0osS0FEYnVDLEVBQU9nZ0MsRUFBT3psQixJQUVaLE9BQU85bEIsS0FFVCxHQUFJdUwsSUFBUzIvQixHQUFZMy9CLEVBQUsyL0IsV0FBYUEsRUFDYixLQUF0QmxyQyxLQUFLOHFDLGFBQ1Q5cUMsS0FBSzZxQyxRQUFVNXNDLE9BQU9ZLE9BQU8sY0FFdEIwc0MsRUFBT3psQixHQUNWeWxCLEVBQU9wRSxnQkFDVG5uQyxLQUFLb2QsS0FBSyxpQkFBa0IwSSxFQUFNdmEsRUFBSzIvQixVQUFZQSxTQUVsRCxHQUFvQixtQkFBVDMvQixFQUFxQixDQUdyQyxJQUZBNmhDLEdBQVksRUFFUDd2QyxFQUFJZ08sRUFBS3JKLE9BQVMsRUFBRzNFLEdBQUssRUFBR0EsSUFDaEMsR0FBSWdPLEVBQUtoTyxLQUFPMnRDLEdBQVkzL0IsRUFBS2hPLEdBQUcydEMsV0FBYUEsRUFBVSxDQUN6RG1DLEVBQW1COWhDLEVBQUtoTyxHQUFHMnRDLFNBQzNCa0MsRUFBVzd2QyxFQUNYLE1BSUosR0FBSTZ2QyxFQUFXLEVBQ2IsT0FBT3B0QyxLQUVRLElBQWJvdEMsRUFDRjdoQyxFQUFLaEksUUFpSWYsU0FBbUJnSSxFQUFNK0MsR0FDdkIsS0FBT0EsRUFBUSxFQUFJL0MsRUFBS3JKLE9BQVFvTSxJQUM5Qi9DLEVBQUsrQyxHQUFTL0MsRUFBSytDLEVBQVEsR0FDN0IvQyxFQUFLdEosTUFsSUdxckMsQ0FBVS9oQyxFQUFNNmhDLEdBR0UsSUFBaEI3aEMsRUFBS3JKLFNBQ1BxcEMsRUFBT3psQixHQUFRdmEsRUFBSyxTQUVRdkMsSUFBMUJ1aUMsRUFBT3BFLGdCQUNUbm5DLEtBQUtvZCxLQUFLLGlCQUFrQjBJLEVBQU11bkIsR0FBb0JuQyxHQUcxRCxPQUFPbHJDLE1BR2Jvb0IsRUFBYWpwQixVQUFVbW9DLElBQU1sZixFQUFhanBCLFVBQVVnb0MsZUFFcEQvZSxFQUFhanBCLFVBQVV5cEIsbUJBQ25CLFNBQTRCOUMsR0FDMUIsSUFBSW1uQixFQUFXMUIsRUFBUWh1QyxFQUd2QixRQUFleUwsS0FEZnVpQyxFQUFTdnJDLEtBQUs2cUMsU0FFWixPQUFPN3FDLEtBR1QsUUFBOEJnSixJQUExQnVpQyxFQUFPcEUsZUFVVCxPQVR5QixJQUFyQnZrQyxVQUFVVixRQUNabEMsS0FBSzZxQyxRQUFVNXNDLE9BQU9ZLE9BQU8sTUFDN0JtQixLQUFLOHFDLGFBQWUsUUFDTTloQyxJQUFqQnVpQyxFQUFPemxCLEtBQ1ksS0FBdEI5bEIsS0FBSzhxQyxhQUNUOXFDLEtBQUs2cUMsUUFBVTVzQyxPQUFPWSxPQUFPLGFBRXRCMHNDLEVBQU96bEIsSUFFWDlsQixLQUlULEdBQXlCLElBQXJCNEMsVUFBVVYsT0FBYyxDQUMxQixJQUNJcEQsRUFEQTJoQixFQUFPeGlCLE9BQU93aUIsS0FBSzhxQixHQUV2QixJQUFLaHVDLEVBQUksRUFBR0EsRUFBSWtqQixFQUFLdmUsU0FBVTNFLEVBRWpCLG9CQURadUIsRUFBTTJoQixFQUFLbGpCLEtBRVh5QyxLQUFLNG9CLG1CQUFtQjlwQixHQUsxQixPQUhBa0IsS0FBSzRvQixtQkFBbUIsa0JBQ3hCNW9CLEtBQUs2cUMsUUFBVTVzQyxPQUFPWSxPQUFPLE1BQzdCbUIsS0FBSzhxQyxhQUFlLEVBQ2I5cUMsS0FLVCxHQUF5QixtQkFGekJpdEMsRUFBWTFCLEVBQU96bEIsSUFHakI5bEIsS0FBS21uQyxlQUFlcmhCLEVBQU1tbkIsUUFDckIsUUFBa0Jqa0MsSUFBZGlrQyxFQUVULElBQUsxdkMsRUFBSTB2QyxFQUFVL3FDLE9BQVMsRUFBRzNFLEdBQUssRUFBR0EsSUFDckN5QyxLQUFLbW5DLGVBQWVyaEIsRUFBTW1uQixFQUFVMXZDLElBSXhDLE9BQU95QyxNQW9CYm9vQixFQUFhanBCLFVBQVU4dEMsVUFBWSxTQUFtQm5uQixHQUNwRCxPQUFPc21CLEVBQVdwc0MsS0FBTThsQixHQUFNLElBR2hDc0MsRUFBYWpwQixVQUFVb3VDLGFBQWUsU0FBc0J6bkIsR0FDMUQsT0FBT3NtQixFQUFXcHNDLEtBQU04bEIsR0FBTSxJQUdoQ3NDLEVBQWFza0IsY0FBZ0IsU0FBU2hDLEVBQVM1a0IsR0FDN0MsTUFBcUMsbUJBQTFCNGtCLEVBQVFnQyxjQUNWaEMsRUFBUWdDLGNBQWM1bUIsR0FFdEI0bUIsRUFBY2h2QyxLQUFLZ3RDLEVBQVM1a0IsSUFJdkNzQyxFQUFhanBCLFVBQVV1dEMsY0FBZ0JBLEVBaUJ2Q3RrQixFQUFhanBCLFVBQVVxdUMsV0FBYSxXQUNsQyxPQUFPeHRDLEtBQUs4cUMsYUFBZSxFQUFJZCxFQUFlaHFDLEtBQUs2cUMsU0FBVyxLLGdCQ3hhaEUsSUFBSTRDLEVBQWEsRUFBUSxJQUN6Qm53QyxFQUFPRCxTQUFXb3dDLEVBQW9CLFNBQUtBLEdBQVl0VCxTQUFTLENBQUMsU0FBVyxDQUFDLEVBQUUsWUFBWSxLQUFPLFNBQVN1VCxFQUFVQyxFQUFPbFMsRUFBUUMsRUFBUzN3QixHQUN6SSxJQUFJNmlDLEVBQVFDLEVBQWlCSCxFQUFVRyxnQkFBa0IsU0FBU2hoQyxFQUFRK3hCLEdBQ3RFLEdBQUkzZ0MsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLbVAsRUFBUSt4QixHQUMvQyxPQUFPL3hCLEVBQU8reEIsSUFLdEIsTUFBTyxzQkFDSDhPLEVBQVVqN0IsaUJBQThNLG1CQUEzTG03QixFQUF5SCxPQUEvR0EsRUFBU0MsRUFBZXBTLEVBQVEsYUFBeUIsTUFBVmtTLEVBQWlCRSxFQUFlRixFQUFPLFdBQWFBLElBQW1CQyxFQUFTRixFQUFVdlEsTUFBTTJRLGVBQStDRixFQUFPbHdDLEtBQWUsTUFBVml3QyxFQUFpQkEsRUFBVUQsRUFBVUssYUFBZSxHQUFJLENBQUMsS0FBTyxVQUFVLEtBQU8sR0FBRyxLQUFPaGpDLEVBQUssSUFBTSxDQUFDLE1BQVEsQ0FBQyxLQUFPLEVBQUUsT0FBUyxJQUFJLElBQU0sQ0FBQyxLQUFPLEVBQUUsT0FBUyxPQUFTNmlDLEdBQ3paLE1BQ0osU0FBVSxLLDZCQ1BaLFNBQVN2VCxFQUF1QmwxQixHQUFPLE9BQU9BLEdBQU9BLEVBQUl4RyxXQUFhd0csRUFBTSxDQUFFLFFBQVdBLEdBSXpGLFNBQVM0NUIsRUFBd0I1NUIsR0FBTyxHQUFJQSxHQUFPQSxFQUFJeEcsV0FBYyxPQUFPd0csRUFBYyxJQUFJK2hCLEVBQVMsR0FBSSxHQUFXLE1BQVAvaEIsRUFBZSxJQUFLLElBQUlyRyxLQUFPcUcsRUFBV2xILE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS3lILEVBQUtyRyxLQUFNb29CLEVBQU9wb0IsR0FBT3FHLEVBQUlyRyxJQUFtQyxPQUF6Qm9vQixFQUFnQixRQUFJL2hCLEVBQVkraEIsRUFQclE3cEIsRUFBUXNCLFlBQWEsRUFTckIsSUFFSThsQixFQUFPc2EsRUFGVyxFQUFRLE1BUzFCaVAsRUFBeUIzVCxFQUZELEVBQVEsTUFNaEM0VCxFQUF3QjVULEVBRkQsRUFBUSxLQU0vQjZULEVBQVFuUCxFQUZXLEVBQVEsS0FNM0JvUCxFQUFVcFAsRUFGVyxFQUFRLE1BTTdCcVAsRUFBeUIvVCxFQUZELEVBQVEsTUFLcEMsU0FBU3g3QixJQUNQLElBQUl3dkMsRUFBSyxJQUFJNXBCLEVBQUs2VixzQkFhbEIsT0FYQTRULEVBQU0xN0IsT0FBTzY3QixFQUFJNXBCLEdBQ2pCNHBCLEVBQUdDLFdBQWFOLEVBQWdDLFFBQ2hESyxFQUFHejBCLFVBQVlxMEIsRUFBK0IsUUFDOUNJLEVBQUdILE1BQVFBLEVBQ1hHLEVBQUc1N0IsaUJBQW1CeTdCLEVBQU16N0IsaUJBRTVCNDdCLEVBQUdFLEdBQUtKLEVBQ1JFLEVBQUdsVSxTQUFXLFNBQVVxVSxHQUN0QixPQUFPTCxFQUFRaFUsU0FBU3FVLEVBQU1ILElBR3pCQSxFQUdULElBQUlJLEVBQU81dkMsSUFDWDR2QyxFQUFLNXZDLE9BQVNBLEVBRWR1dkMsRUFBZ0MsUUFBRUssR0FFbENBLEVBQWMsUUFBSUEsRUFFbEJweEMsRUFBaUIsUUFBSW94QyxFQUNyQm54QyxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQzlEbENBLEVBQVFzQixZQUFhLEVBRXJCLElBQUk0N0IsRUFBUyxFQUFRLElBRXJCbDlCLEVBQWlCLFFBQUksU0FBVWdTLEdBQzdCQSxFQUFTMnNCLGVBQWUsc0JBQXNCLFNBQVUzaUIsRUFBUzZCLEdBQy9ELElBQUl3ekIsRUFBVXh6QixFQUFRd3pCLFFBQ2xCai9CLEVBQUt5TCxFQUFRekwsR0FFakIsSUFBZ0IsSUFBWjRKLEVBQ0YsT0FBTzVKLEVBQUd6UCxNQUNMLElBQWdCLElBQVpxWixHQUFnQyxNQUFYQSxFQUM5QixPQUFPcTFCLEVBQVExdUMsTUFDVixHQUFJdTZCLEVBQU9seEIsUUFBUWdRLEdBQ3hCLE9BQUlBLEVBQVFuWCxPQUFTLEdBQ2ZnWixFQUFRNUgsTUFDVjRILEVBQVE1SCxJQUFNLENBQUM0SCxFQUFRcGQsT0FHbEJ1UixFQUFTb3NCLFFBQVFua0IsS0FBSytCLEVBQVM2QixJQUUvQnd6QixFQUFRMXVDLE1BR2pCLEdBQUlrYixFQUFRblEsTUFBUW1RLEVBQVE1SCxJQUFLLENBQy9CLElBQUl2SSxFQUFPd3ZCLEVBQU90bkIsWUFBWWlJLEVBQVFuUSxNQUN0Q0EsRUFBSzBJLFlBQWM4bUIsRUFBTy9tQixrQkFBa0IwSCxFQUFRblEsS0FBSzBJLFlBQWF5SCxFQUFRcGQsTUFDOUVvZCxFQUFVLENBQUVuUSxLQUFNQSxHQUdwQixPQUFPMEUsRUFBRzRKLEVBQVM2QixPQUt6QjVkLEVBQU9ELFFBQVVBLEVBQWlCLFMsOEJDckNsQyxZQUVBQSxFQUFRc0IsWUFBYSxFQUtyQixJQUZnQ3dHLEVBRTVCbzFCLEVBQVMsRUFBUSxJQUVqQm9VLEVBQWEsRUFBUSxJQUVyQm5VLEdBTjRCcjFCLEVBTVN3cEMsSUFOWXhwQyxFQUFJeEcsV0FBYXdHLEVBQU0sQ0FBRSxRQUFXQSxHQVF6RjlILEVBQWlCLFFBQUksU0FBVWdTLEdBQzdCQSxFQUFTMnNCLGVBQWUsUUFBUSxTQUFVM2lCLEVBQVM2QixHQUNqRCxJQUFLQSxFQUNILE1BQU0sSUFBSXNmLEVBQXFCLFFBQUUsK0JBR25DLElBd0RVb1UsRUF4RE5uL0IsRUFBS3lMLEVBQVF6TCxHQUNiaS9CLEVBQVV4ekIsRUFBUXd6QixRQUNsQm54QyxFQUFJLEVBQ0pndkMsRUFBTSxHQUNOeGhDLE9BQU8vQixFQUNQeUssT0FBY3pLLEVBY2xCLFNBQVM2bEMsRUFBY0MsRUFBT3hnQyxFQUFPMUYsR0FDL0JtQyxJQUNGQSxFQUFLak0sSUFBTWd3QyxFQUNYL2pDLEVBQUt1RCxNQUFRQSxFQUNidkQsRUFBS3NNLE1BQWtCLElBQVYvSSxFQUNidkQsRUFBS25DLE9BQVNBLEVBRVY2SyxJQUNGMUksRUFBSzBJLFlBQWNBLEVBQWNxN0IsSUFJckN2QyxHQUFZOThCLEVBQUc0SixFQUFReTFCLEdBQVEsQ0FDN0IvakMsS0FBTUEsRUFDTnFJLFlBQWFtbkIsRUFBT25uQixZQUFZLENBQUNpRyxFQUFReTFCLEdBQVFBLEdBQVEsQ0FBQ3I3QixFQUFjcTdCLEVBQU8sU0FJbkYsR0E5Qkk1ekIsRUFBUW5RLE1BQVFtUSxFQUFRNUgsTUFDMUJHLEVBQWM4bUIsRUFBTy9tQixrQkFBa0IwSCxFQUFRblEsS0FBSzBJLFlBQWF5SCxFQUFRNUgsSUFBSSxJQUFNLEtBR2pGaW5CLEVBQU83ekIsV0FBVzJTLEtBQ3BCQSxFQUFVQSxFQUFRM2IsS0FBS3NDLE9BR3JCa2IsRUFBUW5RLE9BQ1ZBLEVBQU93dkIsRUFBT3RuQixZQUFZaUksRUFBUW5RLE9BcUJoQ3NPLEdBQThCLGlCQUFaQSxFQUNwQixHQUFJa2hCLEVBQU9seEIsUUFBUWdRLEdBQ2pCLElBQUssSUFBSStLLEVBQUkvSyxFQUFRblgsT0FBUTNFLEVBQUk2bUIsRUFBRzdtQixJQUM5QkEsS0FBSzhiLEdBQ1B3MUIsRUFBY3R4QyxFQUFHQSxFQUFHQSxJQUFNOGIsRUFBUW5YLE9BQVMsUUFHMUMsR0FBSTQ5QixFQUFPeGhDLFFBQVUrYSxFQUFReW1CLEVBQU94aEMsT0FBT3dELFVBQVcsQ0FHM0QsSUFGQSxJQUFJaXRDLEVBQWEsR0FDYmp0QyxFQUFXdVgsRUFBUXltQixFQUFPeGhDLE9BQU93RCxZQUM1Qmt0QyxFQUFLbHRDLEVBQVNsQixRQUFTb3VDLEVBQUdodUMsS0FBTWd1QyxFQUFLbHRDLEVBQVNsQixPQUNyRG11QyxFQUFXNXNDLEtBQUs2c0MsRUFBR3h3QyxPQUdyQixJQUFTNGxCLEdBRFQvSyxFQUFVMDFCLEdBQ1c3c0MsT0FBUTNFLEVBQUk2bUIsRUFBRzdtQixJQUNsQ3N4QyxFQUFjdHhDLEVBQUdBLEVBQUdBLElBQU04YixFQUFRblgsT0FBUyxRQUl2QzBzQyxPQUFXNWxDLEVBRWYvSyxPQUFPd2lCLEtBQUtwSCxHQUFTalMsU0FBUSxTQUFVdEksUUFJcEJrSyxJQUFiNGxDLEdBQ0ZDLEVBQWNELEVBQVVyeEMsRUFBSSxHQUU5QnF4QyxFQUFXOXZDLEVBQ1h2QixZQUVleUwsSUFBYjRsQyxHQUNGQyxFQUFjRCxFQUFVcnhDLEVBQUksR0FBRyxHQVV2QyxPQUpVLElBQU5BLElBQ0ZndkMsRUFBTW1DLEVBQVExdUMsT0FHVHVzQyxNQUlYanZDLEVBQU9ELFFBQVVBLEVBQWlCLFUsZ0RDcEdsQ0EsRUFBUXNCLFlBQWEsRUFLckIsSUFGZ0N3RyxFQUU1QndwQyxFQUFhLEVBQVEsSUFFckJuVSxHQUo0QnIxQixFQUlTd3BDLElBSll4cEMsRUFBSXhHLFdBQWF3RyxFQUFNLENBQUUsUUFBV0EsR0FNekY5SCxFQUFpQixRQUFJLFNBQVVnUyxHQUM3QkEsRUFBUzJzQixlQUFlLGlCQUFpQixXQUN2QyxHQUF5QixJQUFyQnA1QixVQUFVVixPQUtaLE1BQU0sSUFBSXM0QixFQUFxQixRQUFFLG9CQUFzQjUzQixVQUFVQSxVQUFVVixPQUFTLEdBQUdwRSxLQUFPLFNBS3BHUixFQUFPRCxRQUFVQSxFQUFpQixTLDZCQ3JCbENBLEVBQVFzQixZQUFhLEVBS3JCLElBRmdDd0csRUFFNUJvMUIsRUFBUyxFQUFRLElBRWpCb1UsRUFBYSxFQUFRLElBRXJCblUsR0FONEJyMUIsRUFNU3dwQyxJQU5ZeHBDLEVBQUl4RyxXQUFhd0csRUFBTSxDQUFFLFFBQVdBLEdBUXpGOUgsRUFBaUIsUUFBSSxTQUFVZ1MsR0FDN0JBLEVBQVMyc0IsZUFBZSxNQUFNLFNBQVVpVCxFQUFhL3pCLEdBQ25ELEdBQXdCLEdBQXBCdFksVUFBVVYsT0FDWixNQUFNLElBQUlzNEIsRUFBcUIsUUFBRSxxQ0FTbkMsT0FQSUQsRUFBTzd6QixXQUFXdW9DLEtBQ3BCQSxFQUFjQSxFQUFZdnhDLEtBQUtzQyxRQU01QmtiLEVBQVFFLEtBQUs4ekIsY0FBZ0JELEdBQWUxVSxFQUFPdm5CLFFBQVFpOEIsR0FDdkQvekIsRUFBUXd6QixRQUFRMXVDLE1BRWhCa2IsRUFBUXpMLEdBQUd6UCxTQUl0QnFQLEVBQVMyc0IsZUFBZSxVQUFVLFNBQVVpVCxFQUFhL3pCLEdBQ3ZELEdBQXdCLEdBQXBCdFksVUFBVVYsT0FDWixNQUFNLElBQUlzNEIsRUFBcUIsUUFBRSx5Q0FFbkMsT0FBT25yQixFQUFTb3NCLFFBQVksR0FBRS85QixLQUFLc0MsS0FBTWl2QyxFQUFhLENBQ3BEeC9CLEdBQUl5TCxFQUFRd3pCLFFBQ1pBLFFBQVN4ekIsRUFBUXpMLEdBQ2pCMkwsS0FBTUYsRUFBUUUsV0FLcEI5ZCxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQzFDbENBLEVBQVFzQixZQUFhLEVBRXJCdEIsRUFBaUIsUUFBSSxTQUFVZ1MsR0FDN0JBLEVBQVMyc0IsZUFBZSxPQUFPLFdBRzdCLElBRkEsSUFBSWp6QixFQUFPLE1BQUNDLEdBQ1JrUyxFQUFVdFksVUFBVUEsVUFBVVYsT0FBUyxHQUNsQzNFLEVBQUksRUFBR0EsRUFBSXFGLFVBQVVWLE9BQVMsRUFBRzNFLElBQ3hDd0wsRUFBSzVHLEtBQUtTLFVBQVVyRixJQUd0QixJQUFJOC9CLEVBQVEsRUFDYyxNQUF0Qm5pQixFQUFRRSxLQUFLaWlCLE1BQ2ZBLEVBQVFuaUIsRUFBUUUsS0FBS2lpQixNQUNabmlCLEVBQVFuUSxNQUE4QixNQUF0Qm1RLEVBQVFuUSxLQUFLc3lCLFFBQ3RDQSxFQUFRbmlCLEVBQVFuUSxLQUFLc3lCLE9BRXZCdDBCLEVBQUssR0FBS3MwQixFQUVWaHVCLEVBQVMwc0IsSUFBSTc2QixNQUFNbU8sRUFBVXRHLE9BSWpDekwsRUFBT0QsUUFBVUEsRUFBaUIsUyw2QkN0QmxDQSxFQUFRc0IsWUFBYSxFQUVyQnRCLEVBQWlCLFFBQUksU0FBVWdTLEdBQzdCQSxFQUFTMnNCLGVBQWUsVUFBVSxTQUFVNzJCLEVBQUsycEMsRUFBTzV6QixHQUN0RCxPQUFLL1YsRUFJRStWLEVBQVEyeUIsZUFBZTFvQyxFQUFLMnBDLEdBRjFCM3BDLE1BTWI3SCxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQ1psQ0EsRUFBUXNCLFlBQWEsRUFLckIsSUFGZ0N3RyxFQUU1Qm8xQixFQUFTLEVBQVEsSUFFakJvVSxFQUFhLEVBQVEsSUFFckJuVSxHQU40QnIxQixFQU1Td3BDLElBTll4cEMsRUFBSXhHLFdBQWF3RyxFQUFNLENBQUUsUUFBV0EsR0FRekY5SCxFQUFpQixRQUFJLFNBQVVnUyxHQUM3QkEsRUFBUzJzQixlQUFlLFFBQVEsU0FBVTNpQixFQUFTNkIsR0FDakQsR0FBd0IsR0FBcEJ0WSxVQUFVVixPQUNaLE1BQU0sSUFBSXM0QixFQUFxQixRQUFFLHVDQUUvQkQsRUFBTzd6QixXQUFXMlMsS0FDcEJBLEVBQVVBLEVBQVEzYixLQUFLc0MsT0FHekIsSUFBSXlQLEVBQUt5TCxFQUFRekwsR0FFakIsR0FBSzhxQixFQUFPdm5CLFFBQVFxRyxHQVlsQixPQUFPNkIsRUFBUXd6QixRQUFRMXVDLE1BWHZCLElBQUkrSyxFQUFPbVEsRUFBUW5RLEtBTW5CLE9BTEltUSxFQUFRblEsTUFBUW1RLEVBQVE1SCxPQUMxQnZJLEVBQU93dkIsRUFBT3RuQixZQUFZaUksRUFBUW5RLE9BQzdCMEksWUFBYzhtQixFQUFPL21CLGtCQUFrQjBILEVBQVFuUSxLQUFLMEksWUFBYXlILEVBQVE1SCxJQUFJLEtBRzdFN0QsRUFBRzRKLEVBQVMsQ0FDakJ0TyxLQUFNQSxFQUNOcUksWUFBYW1uQixFQUFPbm5CLFlBQVksQ0FBQ2lHLEdBQVUsQ0FBQ3RPLEdBQVFBLEVBQUswSSxvQkFRakVuVyxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQ3ZDbENBLEVBQVFzQixZQUFhLEVBQ3JCdEIsRUFBUXcrQiwwQkFTUixTQUFtQ3hzQixHQUNqQzgvQixFQUE0QixRQUFFOS9CLElBTGhDLElBRmdDbEssRUFFNUJpcUMsRUFBb0IsRUFBUSxLQUU1QkQsR0FKNEJocUMsRUFJZ0JpcUMsSUFKS2pxQyxFQUFJeEcsV0FBYXdHLEVBQU0sQ0FBRSxRQUFXQSxJLDZCQ0p6RjlILEVBQVFzQixZQUFhLEVBRXJCLElBQUk0N0IsRUFBUyxFQUFRLElBRXJCbDlCLEVBQWlCLFFBQUksU0FBVWdTLEdBQzdCQSxFQUFTZ3RCLGtCQUFrQixVQUFVLFNBQVU1c0IsRUFBSWlaLEVBQU9nbEIsRUFBV3h5QixHQUNuRSxJQUFJcXhCLEVBQU05OEIsRUFlVixPQWRLaVosRUFBTWdULFdBQ1RoVCxFQUFNZ1QsU0FBVyxHQUNqQjZRLEVBQU0sU0FBVWx6QixFQUFTNkIsR0FFdkIsSUFBSW0wQixFQUFXM0IsRUFBVWhTLFNBQ3pCZ1MsRUFBVWhTLFNBQVduQixFQUFPL25CLE9BQU8sR0FBSTY4QixFQUFVM21CLEVBQU1nVCxVQUN2RCxJQUFJNlEsRUFBTTk4QixFQUFHNEosRUFBUzZCLEdBRXRCLE9BREF3eUIsRUFBVWhTLFNBQVcyVCxFQUNkOUMsSUFJWDdqQixFQUFNZ1QsU0FBU3hnQixFQUFRblMsS0FBSyxJQUFNbVMsRUFBUXpMLEdBRW5DODhCLE1BSVhqdkMsRUFBT0QsUUFBVUEsRUFBaUIsUyw2QkN6QmxDQSxFQUFRc0IsWUFBYSxFQUNyQnRCLEVBQVErZ0Msc0JBV1IsV0FDRSxJQUFLLElBQUlSLEVBQU9oN0IsVUFBVVYsT0FBUWdKLEVBQVV2TCxNQUFNaStCLEdBQU9DLEVBQU8sRUFBR0EsRUFBT0QsRUFBTUMsSUFDOUUzeUIsRUFBUTJ5QixHQUFRajdCLFVBQVVpN0IsR0FHNUIsT0FBT3RELEVBQU8vbkIsT0FBT3RSLFdBQU04SCxFQUFXLENBQUMvSyxPQUFPWSxPQUFPLE9BQU9pRSxPQUFPb0ksS0FkckUsSUFBSXF2QixFQUFTLEVBQVEsSyw2QkNEckIsU0FBUytULEVBQVc1N0IsR0FDbEIxUyxLQUFLMFMsT0FBU0EsRUFGaEJyVixFQUFRc0IsWUFBYSxFQUtyQjJ2QyxFQUFXbnZDLFVBQVU0SyxTQUFXdWtDLEVBQVdudkMsVUFBVXdULE9BQVMsV0FDNUQsTUFBTyxHQUFLM1MsS0FBSzBTLFFBR25CclYsRUFBaUIsUUFBSWl4QyxFQUNyQmh4QyxFQUFPRCxRQUFVQSxFQUFpQixTLDZCQ1hsQ0EsRUFBUXNCLFlBQWEsRUFDckJ0QixFQUFRaXlDLGNBOEJSLFNBQXVCQyxHQUNyQixJQUFJQyxFQUFtQkQsR0FBZ0JBLEVBQWEsSUFBTSxFQUN0REUsRUFBa0JDLEVBQU01VSxrQkFFNUIsR0FBSTBVLEdBQW9CRSxFQUFNM1UsbUNBQXFDeVUsR0FBb0JFLEVBQU01VSxrQkFDM0YsT0FHRixHQUFJMFUsRUFBbUJFLEVBQU0zVSxrQ0FBbUMsQ0FDOUQsSUFBSTRVLEVBQWtCRCxFQUFNMVUsaUJBQWlCeVUsR0FDekNHLEVBQW1CRixFQUFNMVUsaUJBQWlCd1UsR0FDOUMsTUFBTSxJQUFJaFYsRUFBcUIsUUFBRSw2SUFBb0ptVixFQUFrQixvREFBc0RDLEVBQW1CLE1BR2hSLE1BQU0sSUFBSXBWLEVBQXFCLFFBQUUsd0lBQStJK1UsRUFBYSxHQUFLLE9BM0N0TWx5QyxFQUFRODhCLFNBK0NSLFNBQWtCMFYsRUFBY0MsR0FFOUIsSUFBS0EsRUFDSCxNQUFNLElBQUl0VixFQUFxQixRQUFFLHFDQUVuQyxJQUFLcVYsSUFBaUJBLEVBQWFFLEtBQ2pDLE1BQU0sSUFBSXZWLEVBQXFCLFFBQUUsbUNBQXFDcVYsR0FHeEVBLEVBQWFFLEtBQUtDLFVBQVlILEVBQWFJLE9BSTNDSCxFQUFJdkIsR0FBR2UsY0FBY08sRUFBYUssVUFHbEMsSUFBSUMsRUFBdUNOLEVBQWFLLFVBQXlDLElBQTdCTCxFQUFhSyxTQUFTLEdBeUMxRixJQUFJeEMsRUFBWSxDQUNkMEMsT0FBUSxTQUFnQmpyQyxFQUFLckgsRUFBTWdjLEdBQ2pDLElBQUszVSxLQUFTckgsS0FBUXFILEdBQ3BCLE1BQU0sSUFBSXExQixFQUFxQixRQUFFLElBQU0xOEIsRUFBTyxvQkFBc0JxSCxFQUFLLENBQ3ZFMlUsSUFBS0EsSUFHVCxPQUFPNHpCLEVBQVVHLGVBQWUxb0MsRUFBS3JILElBRXZDK3ZDLGVBQWdCLFNBQXdCaGhDLEVBQVEreEIsR0FDOUMsSUFBSTc5QixFQUFTOEwsRUFBTyt4QixHQUNwQixPQUFjLE1BQVY3OUIsR0FHQTlDLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS21QLEVBQVEreEIsSUFJN0NoRSxFQUFxQjhELGdCQUFnQjM5QixFQUFRMnNDLEVBQVUvTyxtQkFBb0JDLEdBTnRFNzlCLE9BTVQsR0FLRnN2QyxPQUFRLFNBQWdCQyxFQUFReHlDLEdBRTlCLElBREEsSUFBSXFNLEVBQU1tbUMsRUFBT3B1QyxPQUNSM0UsRUFBSSxFQUFHQSxFQUFJNE0sRUFBSzVNLElBQUssQ0FFNUIsR0FBYyxPQUREK3lDLEVBQU8veUMsSUFBTW13QyxFQUFVRyxlQUFleUMsRUFBTy95QyxHQUFJTyxJQUU1RCxPQUFPd3lDLEVBQU8veUMsR0FBR08sS0FJdkJ5eUMsT0FBUSxTQUFnQkMsRUFBU24zQixHQUMvQixNQUEwQixtQkFBWm0zQixFQUF5QkEsRUFBUTl5QyxLQUFLMmIsR0FBV20zQixHQUdqRS85QixpQkFBa0J5N0IsRUFBTXo3QixpQkFDeEJnK0IsY0E1RUYsU0FBOEJ0VSxFQUFTOWlCLEVBQVM2QixHQUMxQ0EsRUFBUUUsT0FDVi9CLEVBQVU2MEIsRUFBTTE3QixPQUFPLEdBQUk2RyxFQUFTNkIsRUFBUUUsTUFDeENGLEVBQVE1SCxNQUNWNEgsRUFBUTVILElBQUksSUFBSyxJQUdyQjZvQixFQUFVMlQsRUFBSXZCLEdBQUdtQyxlQUFlaHpDLEtBQUtzQyxLQUFNbThCLEVBQVM5aUIsRUFBUzZCLEdBRTdELElBQUl5MUIsRUFBa0J6QyxFQUFNMTdCLE9BQU8sR0FBSTBJLEVBQVMsQ0FDOUNpaUIsTUFBT245QixLQUFLbTlCLE1BQ1p3QixtQkFBb0IzK0IsS0FBSzIrQixxQkFHdkI1OUIsRUFBUyt1QyxFQUFJdkIsR0FBR2tDLGNBQWMveUMsS0FBS3NDLEtBQU1tOEIsRUFBUzlpQixFQUFTczNCLEdBTS9ELEdBSmMsTUFBVjV2QyxHQUFrQit1QyxFQUFJYyxVQUN4QjExQixFQUFRd2dCLFNBQVN4Z0IsRUFBUXBkLE1BQVFneUMsRUFBSWMsUUFBUXpVLEVBQVMwVCxFQUFhZ0IsZ0JBQWlCZixHQUNwRi91QyxFQUFTbWEsRUFBUXdnQixTQUFTeGdCLEVBQVFwZCxNQUFNdWIsRUFBU3MzQixJQUVyQyxNQUFWNXZDLEVBQWdCLENBQ2xCLEdBQUltYSxFQUFRNDFCLE9BQVEsQ0FFbEIsSUFEQSxJQUFJQyxFQUFRaHdDLEVBQU9pd0MsTUFBTSxNQUNoQnp6QyxFQUFJLEVBQUdDLEVBQUl1ekMsRUFBTTd1QyxPQUFRM0UsRUFBSUMsSUFDL0J1ekMsRUFBTXh6QyxJQUFNQSxFQUFJLElBQU1DLEdBRFlELElBS3ZDd3pDLEVBQU14ekMsR0FBSzJkLEVBQVE0MUIsT0FBU0MsRUFBTXh6QyxHQUVwQ3dELEVBQVNnd0MsRUFBTTFsQyxLQUFLLE1BRXRCLE9BQU90SyxFQUVQLE1BQU0sSUFBSXk1QixFQUFxQixRQUFFLGVBQWlCdGYsRUFBUXBkLEtBQU8sNkRBNENuRTJSLEdBQUksU0FBWWxTLEdBQ2QsSUFBSWd2QyxFQUFNc0QsRUFBYXR5QyxHQUV2QixPQURBZ3ZDLEVBQUl5RCxVQUFZSCxFQUFhdHlDLEVBQUksTUFDMUJndkMsR0FHVDBFLFNBQVUsR0FDVkMsUUFBUyxTQUFpQjN6QyxFQUFHd04sRUFBTW9tQyxFQUFxQi85QixFQUFhazlCLEdBQ25FLElBQUljLEVBQWlCcHhDLEtBQUtpeEMsU0FBUzF6QyxHQUMvQmtTLEVBQUt6UCxLQUFLeVAsR0FBR2xTLEdBTWpCLE9BTEl3TixHQUFRdWxDLEdBQVVsOUIsR0FBZSs5QixFQUNuQ0MsRUFBaUJDLEVBQVlyeEMsS0FBTXpDLEVBQUdrUyxFQUFJMUUsRUFBTW9tQyxFQUFxQi85QixFQUFhazlCLEdBQ3hFYyxJQUNWQSxFQUFpQnB4QyxLQUFLaXhDLFNBQVMxekMsR0FBSzh6QyxFQUFZcnhDLEtBQU16QyxFQUFHa1MsSUFFcEQyaEMsR0FHVHJtQyxLQUFNLFNBQWN2TSxFQUFPOHlDLEdBQ3pCLEtBQU85eUMsR0FBUzh5QyxLQUNkOXlDLEVBQVFBLEVBQU0yVSxRQUVoQixPQUFPM1UsR0FFVCt5QyxjQUFlLFNBQXVCQyxFQUFPQyxHQUMzQyxJQUFJdHNDLEVBQU1xc0MsR0FBU0MsRUFNbkIsT0FKSUQsR0FBU0MsR0FBVUQsSUFBVUMsSUFDL0J0c0MsRUFBTStvQyxFQUFNMTdCLE9BQU8sR0FBSWkvQixFQUFRRCxJQUcxQnJzQyxHQUdUNG9DLFlBQWE5dkMsT0FBT3l6QyxLQUFLLElBRXpCOXBDLEtBQU1rb0MsRUFBSXZCLEdBQUczbUMsS0FDYjJuQyxhQUFjTSxFQUFhSyxVQUc3QixTQUFTM0QsRUFBSWx6QixHQUNYLElBQUk2QixFQUFVdFksVUFBVVYsUUFBVSxRQUFzQjhHLElBQWpCcEcsVUFBVSxHQUFtQixHQUFLQSxVQUFVLEdBRS9FbUksRUFBT21RLEVBQVFuUSxLQUVuQndoQyxFQUFJb0YsT0FBT3oyQixJQUNOQSxFQUFRaWhCLFNBQVcwVCxFQUFhK0IsVUFDbkM3bUMsRUFBTzhtQyxFQUFTeDRCLEVBQVN0TyxJQUUzQixJQUFJdWxDLE9BQVN0bkMsRUFDVG9LLEVBQWN5OEIsRUFBYWlDLGVBQWlCLFFBQUs5b0MsRUFTckQsU0FBUyttQyxFQUFLMTJCLEdBQ1osTUFBTyxHQUFLdzJCLEVBQWFFLEtBQUtyQyxFQUFXcjBCLEVBQVNxMEIsRUFBVWpTLFFBQVNpUyxFQUFVaFMsU0FBVTN3QixFQUFNcUksRUFBYWs5QixHQUk5RyxPQWJJVCxFQUFha0MsWUFFYnpCLEVBREVwMUIsRUFBUW8xQixPQUNEajNCLEdBQVc2QixFQUFRbzFCLE9BQU8sR0FBSyxDQUFDajNCLEdBQVN2VyxPQUFPb1ksRUFBUW8xQixRQUFVcDFCLEVBQVFvMUIsT0FFMUUsQ0FBQ2ozQixLQVFkMDJCLEVBQU9pQyxFQUFrQm5DLEVBQWFFLEtBQU1BLEVBQU1yQyxFQUFXeHlCLEVBQVFvMUIsUUFBVSxHQUFJdmxDLEVBQU1xSSxJQUM3RWlHLEVBQVM2QixHQTRDdkIsT0F6Q0FxeEIsRUFBSTBGLE9BQVEsRUFFWjFGLEVBQUlvRixPQUFTLFNBQVV6MkIsR0FDckIsR0FBS0EsRUFBUWloQixRQW9CWHVSLEVBQVUvTyxtQkFBcUJ6akIsRUFBUXlqQixtQkFDdkMrTyxFQUFValMsUUFBVXZnQixFQUFRdWdCLFFBQzVCaVMsRUFBVWhTLFNBQVd4Z0IsRUFBUXdnQixTQUM3QmdTLEVBQVUvUixXQUFhemdCLEVBQVF5Z0IsV0FDL0IrUixFQUFVdlEsTUFBUWppQixFQUFRaWlCLFVBeEJOLENBQ3BCLElBQUkrVSxFQUFnQmhFLEVBQU0xN0IsT0FBTyxHQUFJczlCLEVBQUlyVSxRQUFTdmdCLEVBQVF1Z0IsVUE0SWhFLFNBQXlDeVcsRUFBZXhFLEdBQ3REenZDLE9BQU93aUIsS0FBS3l4QixHQUFlOXFDLFNBQVEsU0FBVTYxQixHQUMzQyxJQUFJMlEsRUFBU3NFLEVBQWNqVixHQUMzQmlWLEVBQWNqVixHQUlsQixTQUFrQzJRLEVBQVFGLEdBQ3hDLElBQUlHLEVBQWlCSCxFQUFVRyxlQUMvQixPQUFPc0UsRUFBb0JDLFdBQVd4RSxHQUFRLFNBQVUxeUIsR0FDdEQsT0FBT2d6QixFQUFNMTdCLE9BQU8sQ0FBRXE3QixlQUFnQkEsR0FBa0IzeUIsTUFQNUJtM0IsQ0FBeUJ6RSxFQUFRRixNQTlJM0Q0RSxDQUFnQ0osRUFBZXhFLEdBQy9DQSxFQUFValMsUUFBVXlXLEVBRWhCckMsRUFBYTBDLGFBRWY3RSxFQUFVaFMsU0FBV2dTLEVBQVU2RCxjQUFjcjJCLEVBQVF3Z0IsU0FBVW9VLEVBQUlwVSxZQUVqRW1VLEVBQWEwQyxZQUFjMUMsRUFBYTJDLGlCQUMxQzlFLEVBQVUvUixXQUFhdVMsRUFBTTE3QixPQUFPLEdBQUlzOUIsRUFBSW5VLFdBQVl6Z0IsRUFBUXlnQixhQUdsRStSLEVBQVV2USxNQUFRLEdBQ2xCdVEsRUFBVS9PLG1CQUFxQi9ELEVBQXFCa0QseUJBQXlCNWlCLEdBRTdFLElBQUl1M0IsRUFBc0J2M0IsRUFBUXczQiwyQkFBNkJ2QyxFQUMvRDFWLEVBQVN1QyxrQkFBa0IwUSxFQUFXLGdCQUFpQitFLEdBQ3ZEaFksRUFBU3VDLGtCQUFrQjBRLEVBQVcscUJBQXNCK0UsS0FVaEVsRyxFQUFJb0csT0FBUyxTQUFVcDFDLEVBQUd3TixFQUFNcUksRUFBYWs5QixHQUMzQyxHQUFJVCxFQUFhaUMsaUJBQW1CMStCLEVBQ2xDLE1BQU0sSUFBSW9uQixFQUFxQixRQUFFLDBCQUVuQyxHQUFJcVYsRUFBYWtDLFlBQWN6QixFQUM3QixNQUFNLElBQUk5VixFQUFxQixRQUFFLDJCQUduQyxPQUFPNlcsRUFBWTNELEVBQVdud0MsRUFBR3N5QyxFQUFhdHlDLEdBQUl3TixFQUFNLEVBQUdxSSxFQUFhazlCLElBRW5FL0QsR0ExUFRsdkMsRUFBUWcwQyxZQUFjQSxFQUN0QmgwQyxFQUFRcXpDLGVBb1JSLFNBQXdCdlUsRUFBUzlpQixFQUFTNkIsR0FDbkNpaEIsRUFNT0EsRUFBUXorQixNQUFTd2QsRUFBUXBkLE9BRW5Db2QsRUFBUXBkLEtBQU9xK0IsRUFDZkEsRUFBVWpoQixFQUFRd2dCLFNBQVNTLElBUHpCQSxFQURtQixtQkFBakJqaEIsRUFBUXBkLEtBQ0FvZCxFQUFRblEsS0FBSyxpQkFFYm1RLEVBQVF3Z0IsU0FBU3hnQixFQUFRcGQsTUFPdkMsT0FBT3ErQixHQS9SVDkrQixFQUFRb3pDLGNBa1NSLFNBQXVCdFUsRUFBUzlpQixFQUFTNkIsR0FFdkMsSUFBSTAzQixFQUFzQjEzQixFQUFRblEsTUFBUW1RLEVBQVFuUSxLQUFLLGlCQUN2RG1RLEVBQVFpaEIsU0FBVSxFQUNkamhCLEVBQVE1SCxNQUNWNEgsRUFBUW5RLEtBQUswSSxZQUFjeUgsRUFBUTVILElBQUksSUFBTTRILEVBQVFuUSxLQUFLMEksYUFHNUQsSUFBSW8vQixPQUFlN3BDLEVBQ2ZrUyxFQUFRekwsSUFBTXlMLEVBQVF6TCxLQUFPN0gsR0FDL0IsV0FDRXNULEVBQVFuUSxLQUFPMmtDLEVBQU16OEIsWUFBWWlJLEVBQVFuUSxNQUV6QyxJQUFJMEUsRUFBS3lMLEVBQVF6TCxHQUNqQm9qQyxFQUFlMzNCLEVBQVFuUSxLQUFLLGlCQUFtQixTQUE2QnNPLEdBQzFFLElBQUk2QixFQUFVdFksVUFBVVYsUUFBVSxRQUFzQjhHLElBQWpCcEcsVUFBVSxHQUFtQixHQUFLQSxVQUFVLEdBTW5GLE9BRkFzWSxFQUFRblEsS0FBTzJrQyxFQUFNejhCLFlBQVlpSSxFQUFRblEsTUFDekNtUSxFQUFRblEsS0FBSyxpQkFBbUI2bkMsRUFDekJuakMsRUFBRzRKLEVBQVM2QixJQUVqQnpMLEVBQUdpc0IsV0FDTHhnQixFQUFRd2dCLFNBQVd3UyxFQUFNMTdCLE9BQU8sR0FBSTBJLEVBQVF3Z0IsU0FBVWpzQixFQUFHaXNCLFdBZDdELFFBbUJjMXlCLElBQVptekIsR0FBeUIwVyxJQUMzQjFXLEVBQVUwVyxHQUdaLFFBQWdCN3BDLElBQVptekIsRUFDRixNQUFNLElBQUkzQixFQUFxQixRQUFFLGVBQWlCdGYsRUFBUXBkLEtBQU8sdUJBQzVELEdBQUlxK0IsYUFBbUIxckIsU0FDNUIsT0FBTzByQixFQUFROWlCLEVBQVM2QixJQXJVNUI3ZCxFQUFRdUssS0FBT0EsRUFTZixJQU5nQ3pDLEVBUTVCK29DLEVBSkosU0FBaUMvb0MsR0FBTyxHQUFJQSxHQUFPQSxFQUFJeEcsV0FBYyxPQUFPd0csRUFBYyxJQUFJK2hCLEVBQVMsR0FBSSxHQUFXLE1BQVAvaEIsRUFBZSxJQUFLLElBQUlyRyxLQUFPcUcsRUFBV2xILE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS3lILEVBQUtyRyxLQUFNb29CLEVBQU9wb0IsR0FBT3FHLEVBQUlyRyxJQUFtQyxPQUF6Qm9vQixFQUFnQixRQUFJL2hCLEVBQVkraEIsRUFJelA2WCxDQUZDLEVBQVEsS0FJakI0UCxFQUFhLEVBQVEsSUFFckJuVSxHQVo0QnIxQixFQVlTd3BDLElBWll4cEMsRUFBSXhHLFdBQWF3RyxFQUFNLENBQUUsUUFBV0EsR0FjckZ1cUMsRUFBUSxFQUFRLEtBRWhCalYsRUFBVyxFQUFRLEtBRW5CMFgsRUFBc0IsRUFBUSxLQUU5QnZYLEVBQXVCLEVBQVEsS0FtT25DLFNBQVN5VyxFQUFZM0QsRUFBV253QyxFQUFHa1MsRUFBSTFFLEVBQU1vbUMsRUFBcUIvOUIsRUFBYWs5QixHQUM3RSxTQUFTd0MsRUFBS3o1QixHQUNaLElBQUk2QixFQUFVdFksVUFBVVYsUUFBVSxRQUFzQjhHLElBQWpCcEcsVUFBVSxHQUFtQixHQUFLQSxVQUFVLEdBRS9FbXdDLEVBQWdCekMsRUFLcEIsT0FKSUEsR0FBVWozQixHQUFXaTNCLEVBQU8sSUFBUWozQixJQUFZcTBCLEVBQVVLLGFBQTZCLE9BQWR1QyxFQUFPLEtBQ2xGeUMsRUFBZ0IsQ0FBQzE1QixHQUFTdlcsT0FBT3d0QyxJQUc1QjdnQyxFQUFHaStCLEVBQVdyMEIsRUFBU3EwQixFQUFValMsUUFBU2lTLEVBQVVoUyxTQUFVeGdCLEVBQVFuUSxNQUFRQSxFQUFNcUksR0FBZSxDQUFDOEgsRUFBUTlILGFBQWF0USxPQUFPc1EsR0FBYzIvQixHQVF2SixPQUxBRCxFQUFPZCxFQUFrQnZpQyxFQUFJcWpDLEVBQU1wRixFQUFXNEMsRUFBUXZsQyxFQUFNcUksSUFFdkQ4OUIsUUFBVTN6QyxFQUNmdTFDLEVBQUt4QixNQUFRaEIsRUFBU0EsRUFBT3B1QyxPQUFTLEVBQ3RDNHdDLEVBQUsxL0IsWUFBYys5QixHQUF1QixFQUNuQzJCLEVBOERULFNBQVNsckMsSUFDUCxNQUFPLEdBR1QsU0FBU2lxQyxFQUFTeDRCLEVBQVN0TyxHQUt6QixPQUpLQSxHQUFVLFNBQVVBLEtBQ3ZCQSxFQUFPQSxFQUFPMmtDLEVBQU16OEIsWUFBWWxJLEdBQVEsSUFDbkNrTCxLQUFPb0QsR0FFUHRPLEVBR1QsU0FBU2luQyxFQUFrQnZpQyxFQUFJcWpDLEVBQU1wRixFQUFXNEMsRUFBUXZsQyxFQUFNcUksR0FDNUQsR0FBSTNELEVBQUd1Z0MsVUFBVyxDQUNoQixJQUFJdG5CLEVBQVEsR0FDWm9xQixFQUFPcmpDLEVBQUd1Z0MsVUFBVThDLEVBQU1wcUIsRUFBT2dsQixFQUFXNEMsR0FBVUEsRUFBTyxHQUFJdmxDLEVBQU1xSSxFQUFhazlCLEdBQ3BGcEMsRUFBTTE3QixPQUFPc2dDLEVBQU1wcUIsR0FFckIsT0FBT29xQixJLDZCQ2pXVHoxQyxFQUFRc0IsWUFBYSxFQUNyQnRCLEVBQVErMEMsV0FFUixTQUFvQnhFLEVBQVFvRixHQUMxQixHQUFzQixtQkFBWHBGLEVBR1QsT0FBT0EsRUFPVCxPQUxjLFdBQ1osSUFBSTF5QixFQUFVdFksVUFBVUEsVUFBVVYsT0FBUyxHQUUzQyxPQURBVSxVQUFVQSxVQUFVVixPQUFTLEdBQUs4d0MsRUFBbUI5M0IsR0FDOUMweUIsRUFBTzFzQyxNQUFNbEIsS0FBTTRDLGMsOEJDZDlCLFlBRUF2RixFQUFRc0IsWUFBYSxFQUVyQnRCLEVBQWlCLFFBQUksU0FBVW93QyxHQUU3QixJQUFJeDNCLE9BQXlCLElBQVg2cEIsRUFBeUJBLEVBQVM5YyxPQUNoRGl3QixFQUFjaDlCLEVBQUt3M0IsV0FFdkJBLEVBQVd5RixXQUFhLFdBSXRCLE9BSElqOUIsRUFBS3czQixhQUFlQSxJQUN0QngzQixFQUFLdzNCLFdBQWF3RixHQUVieEYsSUFJWG53QyxFQUFPRCxRQUFVQSxFQUFpQixVLGdEQ1ZsQyxJLEVBQUEsRyxFQUFBLFMsdzNCQVBBa1UsRUFBUSxLQUNSQSxFQUFRLEtBQ1IsSUFBTTRoQyxFQUFtQjVoQyxFQUFRLEtBQzNCTSxFQUFrQk4sRUFBUSxJQUNoQyxFQUErREEsRUFBUSxLQUEvRDZoQyxFQUFSLEVBQVFBLGNBQWVDLEVBQXZCLEVBQXVCQSxxQkFBc0JDLEVBQTdDLEVBQTZDQSxjQUNyQzFNLEVBQWNyMUIsRUFBUSxLQUF0QnExQixVQUNSLEVBQThDcjFCLEVBQVEsS0FBOUNwRyxFQUFSLEVBQVFBLElBQUtzc0IsRUFBYixFQUFhQSxNQUFPeGxCLEVBQXBCLEVBQW9CQSxVQUFwQixFQUErQjhLLFdBRy9CemYsRUFBT0QsUUFBUCxXQUNFLFdBQVlrMkMsRUFBUUMsR0FBZSxZLDRGQUFBLFNBQ2pDeHpDLEtBQUtrNkIsU0FBV2w2QixLQUFLazZCLFNBQVNuN0IsS0FBS2lCLE1BQ25DQSxLQUFLaXBDLG1CQUFxQmpwQyxLQUFLaXBDLG1CQUFtQmxxQyxLQUFLaUIsTUFDdkRBLEtBQUt5ekMsT0FBU3p6QyxLQUFLeXpDLE9BQU8xMEMsS0FBS2lCLE1BQy9CQSxLQUFLMHpDLFdBQWExekMsS0FBSzB6QyxXQUFXMzBDLEtBQUtpQixNQUN2Q0EsS0FBSzJ6QyxZQUFjM3pDLEtBQUsyekMsWUFBWTUwQyxLQUFLaUIsTUFFekNBLEtBQUt1ekMsT0FBU0EsRUFDZHZ6QyxLQUFLNHpDLGlCQUFtQixJQUFJVCxFQUFpQkssRUFBZXh6QyxLQUFLeXpDLFFBRWpFenpDLEtBQUtnNkIsVUFBWS9XLFNBQVM0d0IsZUFBZSxjQUN6Qzd6QyxLQUFLOHpDLFdBQWE3d0IsU0FBUzR3QixlQUFlLGVBQzFDN3pDLEtBQUsrekMsWUFBYzl3QixTQUFTNHdCLGVBQWUsZ0JBQzNDN3pDLEtBQUtnMEMsVUFBWS93QixTQUFTNHdCLGVBQWUsY0FDekM3ekMsS0FBS2kwQyxhQUFlaHhCLFNBQVM0d0IsZUFBZSxpQkFDNUM3ekMsS0FBS2swQyxzQkFBd0JqeEIsU0FBUzR3QixlQUFlLDBCQUNyRDd6QyxLQUFLbTBDLFVBQVlseEIsU0FBUzdoQixLQUMxQnBCLEtBQUtvMEMsZUFBaUJueEIsU0FBUzR3QixlQUFlLFNBRTlDN3pDLEtBQUtxMEMsT0FBUyxFQUNkcjBDLEtBQUtzMEMsYUFBZSxLQU1wQnR4QixPQUFPdXhCLGFBQWUsU0FBQ0MsR0FDckIsR0FBSUEsRUFBZ0JDLFNBQVdELEVBQWdCRSxPQUFRLENBQ3JELElBQU1uaEMsRUFBT2loQyxFQUFnQkMsT0FBT3pELE1BQU0sS0FBSyxHQUMvQyxFQUFLMEMsV0FBV25nQyxLQUlwQjFCLEVBQWdCMlcsUUFYUyxXQUN2QixFQUFLeWdCLG1CQUFtQmptQixPQUFPaVgsU0FBVSxFQUFLMGEsY0FZaEQzMEMsS0FBSzQwQyxxQixVQXBDVCxPLEVBQUEsRyxFQUFBLG1DQXVDRSxXQUVFLE9BREFDLGVBQWVDLE9BQU8sU0FBVUMsV0FDekIvMEMsT0F6Q1gsZ0NBNENFLFNBQW1CaTZCLEdBQXNCLElBQVp2UixFQUFZLHVEQUFKLEdBQy9CblYsRUFBTzBtQixFQUFTN2UsS0FBS3ZZLE1BQU0sR0FDbEIsS0FBVDBRLElBQ0ZBLEVBQU8sS0FFVHZULEtBQUswekMsV0FBV25nQyxFQUFNbVYsS0FqRDFCLGdDQW9ERSxXQUNFMW9CLEtBQUtnMUMsZ0JBQWtCcE8sRUFBVTVtQyxLQUFLbzBDLGVBQWdCLGFBQWE3c0MsS0FBSzZyQyxLQUN4RXB6QyxLQUFLaTFDLGNBQWdCck8sRUFBVTVtQyxLQUFLbzBDLGVBQWdCLFdBQVc3c0MsS0FBSzZyQyxLQUNwRXB6QyxLQUFLazFDLGNBQWdCdE8sRUFBVTVtQyxLQUFLbTBDLFVBQVcsV0FBVzVzQyxLQUFLOHJDLEtBQy9EcnpDLEtBQUttMUMsWUFBY3ZPLEVBQVU1bUMsS0FBS20wQyxVQUFXLFNBQVM1c0MsS0FBSzhyQyxLQUUzRHJ6QyxLQUFLbzFDLGNBQ0xwMUMsS0FBS3ExQyxzQkEzRFQseUJBOERFLFdBQ0VyMUMsS0FBS3MxQyxXQUFhdDFDLEtBQUtnMUMsZ0JBQWdCenRDLEtBQ3JDa3dCLEVBQU16M0IsS0FBS2sxQyxlQUNYNUIsS0FFRnR6QyxLQUFLdTFDLFNBQVd2MUMsS0FBS2kxQyxjQUFjMXRDLEtBQ2pDa3dCLEVBQU16M0IsS0FBS20xQyxhQUNYN0IsT0FyRU4sdUJBeUVFLFdBQW1CLGtDQUFOdnFDLEVBQU0seUJBQU5BLEVBQU0sZ0JBQ2pCL0ksS0FBS3EwQyxTQUNEcjBDLEtBQUtzMEMsYUFDSHQwQyxLQUFLcTBDLFFBQVUsRUFDakJyMEMsS0FBS3cxQyxpQkFBZ0IsV0FBTyxFQUFLQyxrQkFBTCxRQUEwQjFzQyxNQUV0RC9JLEtBQUt3MUMsaUJBQWdCLGdCQUd2QjlYLFFBQVEzQixJQUFJLzdCLE1BQ1pBLEtBQUt3MUMsaUJBQWdCLFdBQU8sRUFBSzdCLFlBQUwsUUFBb0I1cUMsU0FuRnRELDZCQXVGRSxTQUFnQndRLEdBQUksV0FDbEI4ZSxhQUFhcjRCLEtBQUtzMEMsY0FDbEJ0MEMsS0FBS3MwQyxhQUFlcGpDLFlBQVcsV0FDN0IsRUFBS29qQyxhQUFlLEtBQ3BCLEVBQUtELE9BQVMsRUFDZDk2QixNQUNDLE9BN0ZQLCtCQWdHRSxXQUFvQixXQUNsQnZaLEtBQUswMUMsWUFBYzExQyxLQUFLczFDLFdBQVcvdEMsS0FDakMwSyxHQUFVLFNBQUMwakMsR0FBRCxPQUFlLEVBQUtKLFNBQVNodUMsS0FDckM0RCxHQUFJLFNBQUN5cUMsR0FDSCxNQUFPLENBQ0x2eUIsT0FBUXV5QixFQUFRdnlCLE9BQ2hCd3lCLFVBQVdELEVBQVFoaEIsVUFBWStnQixFQUFVL2dCLG1CQUtqRDUwQixLQUFLMDFDLFlBQVlwd0MsV0FBVSxXQUFjLEVBQUt3d0MsVUFBTCxRQUFJLGdCQTNHakQseUJBOEdFLFlBQW1DLElBRTdCQyxFQUZRMXlCLEVBQXFCLEVBQXJCQSxPQUFRd3lCLEVBQWEsRUFBYkEsVUFDaEJoUCxFQUFZLEdBQUgsT0FBTXhqQixFQUFOLGVBRVR3eUIsRUFBWSxNQUNkaFAsRUFBWSxHQUFILE9BQU1BLEVBQU4sUUFDVGtQLEVBQXFCLENBQUVGLGNBRXpCLElBQU1HLEVBQVdoMkMsS0FBS2kyQyxZQUFZaDJDLFlBQVluQyxLQUV4Q280QyxFQUFlbDJDLEtBQUtpMkMsWUFBWXBQLEdBQ2xDcVAsR0FDRnhZLFFBQVEzQixJQUFSLHFCQUEwQjhLLEVBQTFCLGtCQUE2Q21QLElBQzdDRSxFQUFhbjNDLEtBQUtpQixLQUFLaTJDLFlBQXZCQyxDQUFvQ0gsSUFFcENyWSxRQUFRbjdCLE1BQVIsVUFBaUJ5ekMsRUFBakIsbUJBQW9DblAsRUFBcEMseUJBNUhOLCtCQWdJRSxZQUF5QyxJQUFyQnhqQixFQUFxQixFQUFyQkEsT0FDZHdqQixHQURtQyxFQUFiZ1AsVUFDVixHQUFILE9BQU14eUIsRUFBTiwyQkFFUDJ5QixFQUFXaDJDLEtBQUtpMkMsWUFBWWgyQyxZQUFZbkMsS0FDeENvNEMsRUFBZWwyQyxLQUFLaTJDLFlBQVlwUCxHQUNsQ3FQLEdBQ0Z4WSxRQUFRM0IsSUFBUixxQkFBMEI4SyxFQUExQixrQkFBNkNtUCxJQUM3Q0UsRUFBYW4zQyxLQUFLaUIsS0FBS2kyQyxZQUF2QkMsTUFMRUgsSUFPRnJZLFFBQVFuN0IsTUFBUixVQUFpQnl6QyxFQUFqQixtQkFBb0NuUCxFQUFwQyx5QkF6SU4sc0JBNklFLFNBQVN0ekIsR0FDUHlQLE9BQU9pWCxTQUFTN2UsS0FBTzdILElBOUkzQixvQkFpSkUsU0FBTzhhLEVBQVM4bkIsRUFBVXp0QixHQUN4QjFvQixLQUFLMjBDLFVBQVlqc0IsRUFFakIsSUFBTTB0QixFQUFPLElBQUlELEVBQUosT0FDUnp0QixHQURRLElBRVh3UixTQUFVbDZCLEtBQUtrNkIsU0FDZkYsVUFBV2g2QixLQUFLZzZCLGFBR2xCaDZCLEtBQUtpMkMsWUFBY0csRUFFbkJBLEVBQUtDLGVBQ0xob0IsRUFBUWlvQixVQUFZRixFQUFLM0MsU0FDekIyQyxFQUFLRyxnQkE5SlQsd0JBaUtFLFNBQVdoakMsRUFBS21WLEdBQ2QsSUFBTTh0QixFQUFPeDJDLEtBQUt1ekMsT0FBT2hnQyxJQUFTdlQsS0FBS3V6QyxPQUFPLEtBQzlDdnpDLEtBQUt5ekMsT0FBT3p6QyxLQUFLZzZCLFVBQVd3YyxFQUFNOXRCLFEsMkJBbkt0QyxNLG9VQ1RBLEksRUFBQSxHLEVBQUEsUyxtbkRBQ0EsTyxJQUVxQjZGLEUsNlpBQ2pCLGFBQWMsYSw0RkFBQSxVQUNWLGdCQUNLa29CLFlBRkssRSxzQ0FLZCxXQUNFL1ksUUFBUTNCLElBQUksaUJBQ1ovN0IsS0FBS21MLElBQU11ckMsVUFBRXZyQyxJQUFJLE1BQU0sQ0FDckJ3ckMsT0FBUSxDQUFDLEtBQUssT0FDZEMsS0FBTSxFQUNOQyxhQUFhLElBRWZILFVBQUVJLFVBQVUscURBQXNELENBQ2xFQyxZQUFhLDRGQUNWQyxNQUFNaDNDLEtBQUttTCxVLGdDQWZhOHJDLGM7Ozs7O0NDTXpCLFNBQVc1NUMsR0FBVyxhQVk1QixTQUFTbVYsRUFBT2lNLEdBQ2YsSUFBSWxoQixFQUFHNm1CLEVBQUdqYSxFQUFLK3NDLEVBRWYsSUFBSzl5QixFQUFJLEVBQUdqYSxFQUFNdkgsVUFBVVYsT0FBUWtpQixFQUFJamEsRUFBS2lhLElBRTVDLElBQUs3bUIsS0FETDI1QyxFQUFNdDBDLFVBQVV3aEIsR0FFZjNGLEVBQUtsaEIsR0FBSzI1QyxFQUFJMzVDLEdBR2hCLE9BQU9raEIsRUFLUixJQUFJNWYsRUFBU1osT0FBT1ksUUFBVSxXQUM3QixTQUFTczRDLEtBQ1QsT0FBTyxTQUFVQyxHQUVoQixPQURBRCxFQUFFaDRDLFVBQVlpNEMsRUFDUCxJQUFJRCxHQUppQixHQVc5QixTQUFTcDRDLEVBQUswUSxFQUFJdEssR0FDakIsSUFBSXRDLEVBQVFsRCxNQUFNUixVQUFVMEQsTUFFNUIsR0FBSTRNLEVBQUcxUSxLQUNOLE9BQU8wUSxFQUFHMVEsS0FBS21DLE1BQU11TyxFQUFJNU0sRUFBTW5GLEtBQUtrRixVQUFXLElBR2hELElBQUltRyxFQUFPbEcsRUFBTW5GLEtBQUtrRixVQUFXLEdBRWpDLE9BQU8sV0FDTixPQUFPNk0sRUFBR3ZPLE1BQU1pRSxFQUFLNEQsRUFBSzdHLE9BQVM2RyxFQUFLakcsT0FBT0QsRUFBTW5GLEtBQUtrRixZQUFjQSxZQU0xRSxJQUFJeTBDLEVBQVMsRUFJYixTQUFTQyxFQUFNbnlDLEdBR2QsT0FEQUEsRUFBSW95QyxZQUFjcHlDLEVBQUlveUMsZUFBaUJGLEVBQ2hDbHlDLEVBQUlveUMsWUFXWixTQUFTMTRCLEVBQVNwUCxFQUFJK25DLEVBQU1uK0IsR0FDM0IsSUFBSW8rQixFQUFNMXVDLEVBQU0ydUMsRUFBV0MsRUF3QjNCLE9BdEJBQSxFQUFRLFdBRVBGLEdBQU8sRUFDSDF1QyxJQUNIMnVDLEVBQVV4MkMsTUFBTW1ZLEVBQVN0USxHQUN6QkEsR0FBTyxJQUlUMnVDLEVBQVksV0FDUEQsRUFFSDF1QyxFQUFPbkcsV0FJUDZNLEVBQUd2TyxNQUFNbVksRUFBU3pXLFdBQ2xCc08sV0FBV3ltQyxFQUFPSCxHQUNsQkMsR0FBTyxJQVdWLFNBQVNHLEVBQVFqd0MsRUFBR2doQyxFQUFPa1AsR0FDMUIsSUFBSWg0QixFQUFNOG9CLEVBQU0sR0FDWmhaLEVBQU1nWixFQUFNLEdBQ1o5cUMsRUFBSWdpQixFQUFNOFAsRUFDZCxPQUFPaG9CLElBQU1rWSxHQUFPZzRCLEVBQWFsd0MsSUFBTUEsRUFBSWdvQixHQUFPOXhCLEVBQUlBLEdBQUtBLEVBQUk4eEIsRUFLaEUsU0FBU21vQixJQUFZLE9BQU8sRUFJNUIsU0FBU0MsRUFBVUMsRUFBS0MsR0FDdkIsSUFBSUMsRUFBTXQ0QixLQUFLczRCLElBQUksUUFBZ0JsdkMsSUFBWGl2QyxFQUF1QixFQUFJQSxHQUNuRCxPQUFPcjRCLEtBQUt1NEIsTUFBTUgsRUFBTUUsR0FBT0EsRUFLaEMsU0FBU3RPLEVBQUt3TyxHQUNiLE9BQU9BLEVBQUl4TyxLQUFPd08sRUFBSXhPLE9BQVN3TyxFQUFJdmxDLFFBQVEsYUFBYyxJQUsxRCxTQUFTd2xDLEVBQVdELEdBQ25CLE9BQU94TyxFQUFLd08sR0FBS3BILE1BQU0sT0FLeEIsU0FBU3NILEVBQVduekMsRUFBSytWLEdBSXhCLElBQUssSUFBSTNkLEtBSEpVLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBS3lILEVBQUssYUFDOUNBLEVBQUkrVixRQUFVL1YsRUFBSStWLFFBQVVyYyxFQUFPc0csRUFBSStWLFNBQVcsSUFFckNBLEVBQ2IvVixFQUFJK1YsUUFBUTNkLEdBQUsyZCxFQUFRM2QsR0FFMUIsT0FBTzRILEVBQUkrVixRQVFaLFNBQVNxOUIsRUFBZXB6QyxFQUFLcXpDLEVBQWFDLEdBQ3pDLElBQUlwbEMsRUFBUyxHQUNiLElBQUssSUFBSTlWLEtBQUs0SCxFQUNia08sRUFBT2xSLEtBQUt5SSxtQkFBbUI2dEMsRUFBWWw3QyxFQUFFbTdDLGNBQWdCbjdDLEdBQUssSUFBTXFOLG1CQUFtQnpGLEVBQUk1SCxLQUVoRyxPQUFVaTdDLElBQTZDLElBQTlCQSxFQUFZaHFDLFFBQVEsS0FBcUIsSUFBTixLQUFhNkUsRUFBT2hJLEtBQUssS0FHdEYsSUFBSXN0QyxFQUFhLHFCQU9qQixTQUFTeGUsRUFBU2llLEVBQUtydEMsR0FDdEIsT0FBT3F0QyxFQUFJdmxDLFFBQVE4bEMsR0FBWSxTQUFVUCxFQUFLdDVDLEdBQzdDLElBQUlOLEVBQVF1TSxFQUFLak0sR0FFakIsUUFBY2tLLElBQVZ4SyxFQUNILE1BQU0sSUFBSThRLE1BQU0sa0NBQW9DOG9DLEdBS3JELE1BSDRCLG1CQUFWNTVDLElBQ2pCQSxFQUFRQSxFQUFNdU0sSUFFUnZNLEtBTVQsSUFBSTZLLEVBQVUxSixNQUFNMEosU0FBVyxTQUFVbEUsR0FDeEMsTUFBZ0QsbUJBQXhDbEgsT0FBT2tCLFVBQVU0SyxTQUFTck0sS0FBS3lILElBS3hDLFNBQVNxSixFQUFRakosRUFBTzJnQixHQUN2QixJQUFLLElBQUkzb0IsRUFBSSxFQUFHQSxFQUFJZ0ksRUFBTXJELE9BQVEzRSxJQUNqQyxHQUFJZ0ksRUFBTWhJLEtBQU8yb0IsRUFBTSxPQUFPM29CLEVBRS9CLE9BQVEsRUFPVCxJQUFJcTdDLEVBQWdCLDZEQUlwQixTQUFTQyxFQUFZLzZDLEdBQ3BCLE9BQU9rbEIsT0FBTyxTQUFXbGxCLElBQVNrbEIsT0FBTyxNQUFRbGxCLElBQVNrbEIsT0FBTyxLQUFPbGxCLEdBR3pFLElBQUlxdkIsRUFBVyxFQUdmLFNBQVMyckIsRUFBYXJwQyxHQUNyQixJQUFJK25DLEdBQVEsSUFBSTkxQixLQUNacTNCLEVBQWFuNUIsS0FBS0MsSUFBSSxFQUFHLElBQU0yM0IsRUFBT3JxQixJQUcxQyxPQURBQSxFQUFXcXFCLEVBQU91QixFQUNYLzFCLE9BQU85UixXQUFXekIsRUFBSXNwQyxHQUc5QixJQUFJQyxFQUFZaDJCLE9BQU8rZix1QkFBeUI4VixFQUFZLDBCQUE0QkMsRUFDcEZHLEVBQVdqMkIsT0FBT2lnQixzQkFBd0I0VixFQUFZLHlCQUN4REEsRUFBWSxnQ0FBa0MsU0FBVWx0QyxHQUFNcVgsT0FBT3FWLGFBQWExc0IsSUFRcEYsU0FBU3V0QyxFQUFpQnpwQyxFQUFJNEosRUFBUzgvQixHQUN0QyxJQUFJQSxHQUFhSCxJQUFjRixFQUc5QixPQUFPRSxFQUFVdDdDLEtBQUtzbEIsT0FBUWprQixFQUFLMFEsRUFBSTRKLElBRnZDNUosRUFBRy9SLEtBQUsyYixHQVFWLFNBQVMrL0IsRUFBZ0J6dEMsR0FDcEJBLEdBQ0hzdEMsRUFBU3Y3QyxLQUFLc2xCLE9BQVFyWCxHQUl4QixJQUFJMHRDLEVBQU8sQ0FDVDdtQyxPQUFRQSxFQUNSM1QsT0FBUUEsRUFDUkUsS0FBTUEsRUFDTnM0QyxPQUFRQSxFQUNSQyxNQUFPQSxFQUNQejRCLFNBQVVBLEVBQ1YrNEIsUUFBU0EsRUFDVEUsUUFBU0EsRUFDVEMsVUFBV0EsRUFDWG5PLEtBQU1BLEVBQ055TyxXQUFZQSxFQUNaQyxXQUFZQSxFQUNaQyxlQUFnQkEsRUFDaEJwZSxTQUFVQSxFQUNWOXdCLFFBQVNBLEVBQ1RtRixRQUFTQSxFQUNUb3FDLGNBQWVBLEVBQ2ZJLFVBQVdBLEVBQ1hDLFNBQVVBLEVBQ1ZDLGlCQUFrQkEsRUFDbEJFLGdCQUFpQkEsR0FXbkIsU0FBU0UsS0FFVEEsRUFBTTltQyxPQUFTLFNBQVVrVyxHQUt4QixJQUFJNndCLEVBQVcsV0FHVnY1QyxLQUFLdzVDLFlBQ1J4NUMsS0FBS3c1QyxXQUFXdDRDLE1BQU1sQixLQUFNNEMsV0FJN0I1QyxLQUFLeTVDLGlCQUdGQyxFQUFjSCxFQUFTSSxVQUFZMzVDLEtBQUtiLFVBRXhDaTRDLEVBQVF2NEMsRUFBTzY2QyxHQU1uQixJQUFLLElBQUluOEMsS0FMVDY1QyxFQUFNbjNDLFlBQWNzNUMsRUFFcEJBLEVBQVNwNkMsVUFBWWk0QyxFQUdQcDNDLEtBQ1QvQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUtzQyxLQUFNekMsSUFBWSxjQUFOQSxHQUEyQixjQUFOQSxJQUN6RWc4QyxFQUFTaDhDLEdBQUt5QyxLQUFLekMsSUEyQ3JCLE9BdENJbXJCLEVBQU1reEIsVUFDVHBuQyxFQUFPK21DLEVBQVU3d0IsRUFBTWt4QixnQkFDaEJseEIsRUFBTWt4QixTQUlWbHhCLEVBQU01YixXQWdFWCxTQUFvQ0EsR0FDbkMsR0FBaUIsb0JBQU40cEMsR0FBc0JBLEdBQU1BLEVBQUVtRCxNQUF6QyxDQUVBL3NDLEVBQVd6RCxFQUFReUQsR0FBWUEsRUFBVyxDQUFDQSxHQUUzQyxJQUFLLElBQUl2UCxFQUFJLEVBQUdBLEVBQUl1UCxFQUFTNUssT0FBUTNFLElBQ2hDdVAsRUFBU3ZQLEtBQU9tNUMsRUFBRW1ELE1BQU1DLFFBQzNCcGMsUUFBUW9PLEtBQUssa0lBRThCLElBQUl4OEIsT0FBUUMsUUF4RXhEd3FDLENBQTJCcnhCLEVBQU01YixVQUNqQzBGLEVBQU90UixNQUFNLEtBQU0sQ0FBQ2syQyxHQUFPdDBDLE9BQU80bEIsRUFBTTViLGtCQUNqQzRiLEVBQU01YixVQUlWc3FDLEVBQU1sOEIsVUFDVHdOLEVBQU14TixRQUFVMUksRUFBTzNULEVBQU91NEMsRUFBTWw4QixTQUFVd04sRUFBTXhOLFVBSXJEMUksRUFBTzRrQyxFQUFPMXVCLEdBRWQwdUIsRUFBTTRDLFdBQWEsR0FHbkI1QyxFQUFNcUMsY0FBZ0IsV0FFckIsSUFBSXo1QyxLQUFLaTZDLGlCQUFULENBRUlQLEVBQVlELGVBQ2ZDLEVBQVlELGNBQWMvN0MsS0FBS3NDLE1BR2hDQSxLQUFLaTZDLGtCQUFtQixFQUV4QixJQUFLLElBQUkxOEMsRUFBSSxFQUFHNE0sRUFBTWl0QyxFQUFNNEMsV0FBVzkzQyxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUN2RDY1QyxFQUFNNEMsV0FBV3o4QyxHQUFHRyxLQUFLc0MsUUFJcEJ1NUMsR0FNUkQsRUFBTVksUUFBVSxTQUFVeHhCLEdBRXpCLE9BREFsVyxFQUFPeFMsS0FBS2IsVUFBV3VwQixHQUNoQjFvQixNQUtSczVDLEVBQU1hLGFBQWUsU0FBVWovQixHQUU5QixPQURBMUksRUFBT3hTLEtBQUtiLFVBQVUrYixRQUFTQSxHQUN4QmxiLE1BS1JzNUMsRUFBTWMsWUFBYyxTQUFVM3FDLEdBQzdCLElBQUkxRyxFQUFPcEosTUFBTVIsVUFBVTBELE1BQU1uRixLQUFLa0YsVUFBVyxHQUU3Q21DLEVBQXFCLG1CQUFQMEssRUFBb0JBLEVBQUssV0FDMUN6UCxLQUFLeVAsR0FBSXZPLE1BQU1sQixLQUFNK0ksSUFLdEIsT0FGQS9JLEtBQUtiLFVBQVU2NkMsV0FBYWg2QyxLQUFLYixVQUFVNjZDLFlBQWMsR0FDekRoNkMsS0FBS2IsVUFBVTY2QyxXQUFXNzNDLEtBQUs0QyxHQUN4Qi9FLE1BMENSLElBQUk4NUMsRUFBUyxDQVFabjdCLEdBQUksU0FBVTA3QixFQUFPNXFDLEVBQUk0SixHQUd4QixHQUFxQixpQkFBVmdoQyxFQUNWLElBQUssSUFBSXYwQixLQUFRdTBCLEVBR2hCcjZDLEtBQUtzNkMsSUFBSXgwQixFQUFNdTBCLEVBQU12MEIsR0FBT3JXLFFBTzdCLElBQUssSUFBSWxTLEVBQUksRUFBRzRNLEdBRmhCa3dDLEVBQVFoQyxFQUFXZ0MsSUFFU240QyxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUM1Q3lDLEtBQUtzNkMsSUFBSUQsRUFBTTk4QyxHQUFJa1MsRUFBSTRKLEdBSXpCLE9BQU9yWixNQWNSc25DLElBQUssU0FBVStTLEVBQU81cUMsRUFBSTRKLEdBRXpCLEdBQUtnaEMsRUFJRSxHQUFxQixpQkFBVkEsRUFDakIsSUFBSyxJQUFJdjBCLEtBQVF1MEIsRUFDaEJyNkMsS0FBS3U2QyxLQUFLejBCLEVBQU11MEIsRUFBTXYwQixHQUFPclcsUUFNOUIsSUFBSyxJQUFJbFMsRUFBSSxFQUFHNE0sR0FGaEJrd0MsRUFBUWhDLEVBQVdnQyxJQUVTbjRDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQzVDeUMsS0FBS3U2QyxLQUFLRixFQUFNOThDLEdBQUlrUyxFQUFJNEosZUFYbEJyWixLQUFLNnFDLFFBZWIsT0FBTzdxQyxNQUlSczZDLElBQUssU0FBVXgwQixFQUFNclcsRUFBSTRKLEdBQ3hCclosS0FBSzZxQyxRQUFVN3FDLEtBQUs2cUMsU0FBVyxHQUcvQixJQUFJMlAsRUFBZ0J4NkMsS0FBSzZxQyxRQUFRL2tCLEdBQzVCMDBCLElBQ0pBLEVBQWdCLEdBQ2hCeDZDLEtBQUs2cUMsUUFBUS9rQixHQUFRMDBCLEdBR2xCbmhDLElBQVlyWixPQUVmcVosT0FBVXJRLEdBTVgsSUFKQSxJQUFJMGlDLEVBQWMsQ0FBQ2o4QixHQUFJQSxFQUFJZ3JDLElBQUtwaEMsR0FDNUI0ekIsRUFBWXVOLEVBR1BqOUMsRUFBSSxFQUFHNE0sRUFBTThpQyxFQUFVL3FDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQ2hELEdBQUkwdkMsRUFBVTF2QyxHQUFHa1MsS0FBT0EsR0FBTXc5QixFQUFVMXZDLEdBQUdrOUMsTUFBUXBoQyxFQUNsRCxPQUlGNHpCLEVBQVU5cUMsS0FBS3VwQyxJQUdoQjZPLEtBQU0sU0FBVXowQixFQUFNclcsRUFBSTRKLEdBQ3pCLElBQUk0ekIsRUFDQTF2QyxFQUNBNE0sRUFFSixHQUFLbkssS0FBSzZxQyxVQUVWb0MsRUFBWWp0QyxLQUFLNnFDLFFBQVEva0IsSUFNekIsR0FBS3JXLEdBY0wsR0FKSTRKLElBQVlyWixPQUNmcVosT0FBVXJRLEdBR1Bpa0MsRUFHSCxJQUFLMXZDLEVBQUksRUFBRzRNLEVBQU04aUMsRUFBVS9xQyxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUFLLENBQ2pELElBQUlDLEVBQUl5dkMsRUFBVTF2QyxHQUNsQixHQUFJQyxFQUFFaTlDLE1BQVFwaEMsR0FDVjdiLEVBQUVpUyxLQUFPQSxFQVdaLE9BUkFqUyxFQUFFaVMsR0FBS3FvQyxFQUVIOTNDLEtBQUswNkMsZUFFUjE2QyxLQUFLNnFDLFFBQVEva0IsR0FBUW1uQixFQUFZQSxFQUFVcHFDLGNBRTVDb3FDLEVBQVV4K0IsT0FBT2xSLEVBQUcsUUE3QnZCLENBRUMsSUFBS0EsRUFBSSxFQUFHNE0sRUFBTThpQyxFQUFVL3FDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQzVDMHZDLEVBQVUxdkMsR0FBR2tTLEdBQUtxb0MsU0FHWjkzQyxLQUFLNnFDLFFBQVEva0IsS0FtQ3RCNjBCLEtBQU0sU0FBVTcwQixFQUFNL2EsRUFBTTZ2QyxHQUMzQixJQUFLNTZDLEtBQUs2NkMsUUFBUS8wQixFQUFNODBCLEdBQWMsT0FBTzU2QyxLQUU3QyxJQUFJODZDLEVBQVF0b0MsRUFBTyxHQUFJekgsRUFBTSxDQUM1QithLEtBQU1BLEVBQ056QyxPQUFRcmpCLEtBQ1IrNkMsYUFBY2h3QyxHQUFRQSxFQUFLZ3dDLGNBQWdCLzZDLE9BRzVDLEdBQUlBLEtBQUs2cUMsUUFBUyxDQUNqQixJQUFJb0MsRUFBWWp0QyxLQUFLNnFDLFFBQVEva0IsR0FFN0IsR0FBSW1uQixFQUFXLENBQ2RqdEMsS0FBSzA2QyxhQUFnQjE2QyxLQUFLMDZDLGFBQWUsR0FBTSxFQUMvQyxJQUFLLElBQUluOUMsRUFBSSxFQUFHNE0sRUFBTThpQyxFQUFVL3FDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQUssQ0FDckQsSUFBSUMsRUFBSXl2QyxFQUFVMXZDLEdBQ2xCQyxFQUFFaVMsR0FBRy9SLEtBQUtGLEVBQUVpOUMsS0FBT3o2QyxLQUFNODZDLEdBRzFCOTZDLEtBQUswNkMsZ0JBU1AsT0FMSUUsR0FFSDU2QyxLQUFLZzdDLGdCQUFnQkYsR0FHZjk2QyxNQUtSNjZDLFFBQVMsU0FBVS8wQixFQUFNODBCLEdBQ3hCLElBQUkzTixFQUFZanRDLEtBQUs2cUMsU0FBVzdxQyxLQUFLNnFDLFFBQVEva0IsR0FDN0MsR0FBSW1uQixHQUFhQSxFQUFVL3FDLE9BQVUsT0FBTyxFQUU1QyxHQUFJMDRDLEVBRUgsSUFBSyxJQUFJanZDLEtBQU0zTCxLQUFLaTdDLGNBQ25CLEdBQUlqN0MsS0FBS2k3QyxjQUFjdHZDLEdBQUlrdkMsUUFBUS8wQixFQUFNODBCLEdBQWMsT0FBTyxFQUdoRSxPQUFPLEdBS1JuUSxLQUFNLFNBQVU0UCxFQUFPNXFDLEVBQUk0SixHQUUxQixHQUFxQixpQkFBVmdoQyxFQUFvQixDQUM5QixJQUFLLElBQUl2MEIsS0FBUXUwQixFQUNoQnI2QyxLQUFLeXFDLEtBQUsza0IsRUFBTXUwQixFQUFNdjBCLEdBQU9yVyxHQUU5QixPQUFPelAsS0FHUixJQUFJK1UsRUFBVWhXLEdBQUssV0FDbEJpQixLQUNLc25DLElBQUkrUyxFQUFPNXFDLEVBQUk0SixHQUNmaXVCLElBQUkrUyxFQUFPdGxDLEVBQVNzRSxLQUN2QnJaLE1BR0gsT0FBT0EsS0FDRjJlLEdBQUcwN0IsRUFBTzVxQyxFQUFJNEosR0FDZHNGLEdBQUcwN0IsRUFBT3RsQyxFQUFTc0UsSUFLekI2aEMsZUFBZ0IsU0FBVS8xQyxHQUd6QixPQUZBbkYsS0FBS2k3QyxjQUFnQmo3QyxLQUFLaTdDLGVBQWlCLEdBQzNDajdDLEtBQUtpN0MsY0FBYzNELEVBQU1ueUMsSUFBUUEsRUFDMUJuRixNQUtSbTdDLGtCQUFtQixTQUFVaDJDLEdBSTVCLE9BSEluRixLQUFLaTdDLHNCQUNEajdDLEtBQUtpN0MsY0FBYzNELEVBQU1ueUMsSUFFMUJuRixNQUdSZzdDLGdCQUFpQixTQUFVbjZDLEdBQzFCLElBQUssSUFBSThLLEtBQU0zTCxLQUFLaTdDLGNBQ25CajdDLEtBQUtpN0MsY0FBY3R2QyxHQUFJZ3ZDLEtBQUs5NUMsRUFBRWlsQixLQUFNdFQsRUFBTyxDQUMxQzRvQyxNQUFPdjZDLEVBQUV3aUIsT0FDVGc0QixlQUFnQng2QyxFQUFFd2lCLFFBQ2hCeGlCLElBQUksS0FTVmk1QyxFQUFPaFQsaUJBQW1CZ1QsRUFBT243QixHQU9qQ203QixFQUFPL1Msb0JBQXNCK1MsRUFBT3dCLHVCQUF5QnhCLEVBQU94UyxJQUlwRXdTLEVBQU95Qix3QkFBMEJ6QixFQUFPclAsS0FJeENxUCxFQUFPMEIsVUFBWTFCLEVBQU9hLEtBSTFCYixFQUFPMkIsa0JBQW9CM0IsRUFBT2UsUUFFbEMsSUFBSWEsRUFBVXBDLEVBQU05bUMsT0FBT3NuQyxHQTBCM0IsU0FBUzZCLEVBQU1oMEMsRUFBR3JHLEVBQUc2MkMsR0FFcEJuNEMsS0FBSzJILEVBQUt3d0MsRUFBUXY0QixLQUFLdTRCLE1BQU14d0MsR0FBS0EsRUFFbEMzSCxLQUFLc0IsRUFBSzYyQyxFQUFRdjRCLEtBQUt1NEIsTUFBTTcyQyxHQUFLQSxFQUduQyxJQUFJczZDLEVBQVFoOEIsS0FBS2c4QixPQUFTLFNBQVU3NUMsR0FDbkMsT0FBT0EsRUFBSSxFQUFJNmQsS0FBS2k4QixNQUFNOTVDLEdBQUs2ZCxLQUFLazhCLEtBQUsvNUMsSUE2SzFDLFNBQVNnNkMsRUFBUXAwQyxFQUFHckcsRUFBRzYyQyxHQUN0QixPQUFJeHdDLGFBQWFnMEMsRUFDVGgwQyxFQUVKMEIsRUFBUTFCLEdBQ0osSUFBSWcwQyxFQUFNaDBDLEVBQUUsR0FBSUEsRUFBRSxJQUV0QkEsUUFDSUEsRUFFUyxpQkFBTkEsR0FBa0IsTUFBT0EsR0FBSyxNQUFPQSxFQUN4QyxJQUFJZzBDLEVBQU1oMEMsRUFBRUEsRUFBR0EsRUFBRXJHLEdBRWxCLElBQUlxNkMsRUFBTWgwQyxFQUFHckcsRUFBRzYyQyxHQTRCeEIsU0FBUzZELEVBQU83NEMsRUFBRzNELEdBQ2xCLEdBQUsyRCxFQUlMLElBRkEsSUFBSTg0QyxFQUFTejhDLEVBQUksQ0FBQzJELEVBQUczRCxHQUFLMkQsRUFFakI1RixFQUFJLEVBQUc0TSxFQUFNOHhDLEVBQU8vNUMsT0FBUTNFLEVBQUk0TSxFQUFLNU0sSUFDN0N5QyxLQUFLd1MsT0FBT3lwQyxFQUFPMStDLElBc0lyQixTQUFTMitDLEVBQVMvNEMsRUFBRzNELEdBQ3BCLE9BQUsyRCxHQUFLQSxhQUFhNjRDLEVBQ2Y3NEMsRUFFRCxJQUFJNjRDLEVBQU83NEMsRUFBRzNELEdBaUN0QixTQUFTMjhDLEVBQWFDLEVBQVNDLEdBQzlCLEdBQUtELEVBSUwsSUFGQSxJQUFJRSxFQUFVRCxFQUFVLENBQUNELEVBQVNDLEdBQVdELEVBRXBDNytDLEVBQUksRUFBRzRNLEVBQU1teUMsRUFBUXA2QyxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUM5Q3lDLEtBQUt3UyxPQUFPOHBDLEVBQVEvK0MsSUErTXRCLFNBQVNnL0MsRUFBZXA1QyxFQUFHM0QsR0FDMUIsT0FBSTJELGFBQWFnNUMsRUFDVGg1QyxFQUVELElBQUlnNUMsRUFBYWg1QyxFQUFHM0QsR0E0QjVCLFNBQVNnOUMsRUFBT0MsRUFBS0MsRUFBS0MsR0FDekIsR0FBSTk2QixNQUFNNDZCLElBQVE1NkIsTUFBTTY2QixHQUN2QixNQUFNLElBQUlwdEMsTUFBTSwyQkFBNkJtdEMsRUFBTSxLQUFPQyxFQUFNLEtBS2pFMThDLEtBQUt5OEMsS0FBT0EsRUFJWno4QyxLQUFLMDhDLEtBQU9BLE9BSUExekMsSUFBUjJ6QyxJQUNIMzhDLEtBQUsyOEMsS0FBT0EsR0FvRWQsU0FBU0MsRUFBU3o1QyxFQUFHM0QsRUFBRzVCLEdBQ3ZCLE9BQUl1RixhQUFhcTVDLEVBQ1RyNUMsRUFFSmtHLEVBQVFsRyxJQUFzQixpQkFBVEEsRUFBRSxHQUNULElBQWJBLEVBQUVqQixPQUNFLElBQUlzNkMsRUFBT3I1QyxFQUFFLEdBQUlBLEVBQUUsR0FBSUEsRUFBRSxJQUVoQixJQUFiQSxFQUFFakIsT0FDRSxJQUFJczZDLEVBQU9yNUMsRUFBRSxHQUFJQSxFQUFFLElBRXBCLEtBRUpBLFFBQ0lBLEVBRVMsaUJBQU5BLEdBQWtCLFFBQVNBLEVBQzlCLElBQUlxNUMsRUFBT3I1QyxFQUFFczVDLElBQUssUUFBU3Q1QyxFQUFJQSxFQUFFdTVDLElBQU12NUMsRUFBRTA1QyxJQUFLMTVDLEVBQUV3NUMsVUFFOUMzekMsSUFBTnhKLEVBQ0ksS0FFRCxJQUFJZzlDLEVBQU9yNUMsRUFBRzNELEVBQUc1QixHQW51QnpCKzlDLEVBQU14OEMsVUFBWSxDQUlqQjI5QyxNQUFPLFdBQ04sT0FBTyxJQUFJbkIsRUFBTTM3QyxLQUFLMkgsRUFBRzNILEtBQUtzQixJQUsvQjJGLElBQUssU0FBVTgxQyxHQUVkLE9BQU8vOEMsS0FBSzg4QyxRQUFRRSxLQUFLakIsRUFBUWdCLEtBR2xDQyxLQUFNLFNBQVVELEdBSWYsT0FGQS84QyxLQUFLMkgsR0FBS28xQyxFQUFNcDFDLEVBQ2hCM0gsS0FBS3NCLEdBQUt5N0MsRUFBTXo3QyxFQUNUdEIsTUFLUmk5QyxTQUFVLFNBQVVGLEdBQ25CLE9BQU8vOEMsS0FBSzg4QyxRQUFRSSxVQUFVbkIsRUFBUWdCLEtBR3ZDRyxVQUFXLFNBQVVILEdBR3BCLE9BRkEvOEMsS0FBSzJILEdBQUtvMUMsRUFBTXAxQyxFQUNoQjNILEtBQUtzQixHQUFLeTdDLEVBQU16N0MsRUFDVHRCLE1BS1JtOUMsU0FBVSxTQUFVbkYsR0FDbkIsT0FBT2g0QyxLQUFLODhDLFFBQVFNLFVBQVVwRixJQUcvQm9GLFVBQVcsU0FBVXBGLEdBR3BCLE9BRkFoNEMsS0FBSzJILEdBQUtxd0MsRUFDVmg0QyxLQUFLc0IsR0FBSzAyQyxFQUNIaDRDLE1BS1JxOUMsV0FBWSxTQUFVckYsR0FDckIsT0FBT2g0QyxLQUFLODhDLFFBQVFRLFlBQVl0RixJQUdqQ3NGLFlBQWEsU0FBVXRGLEdBR3RCLE9BRkFoNEMsS0FBSzJILEdBQUtxd0MsRUFDVmg0QyxLQUFLc0IsR0FBSzAyQyxFQUNIaDRDLE1BUVJ1OUMsUUFBUyxTQUFVUixHQUNsQixPQUFPLElBQUlwQixFQUFNMzdDLEtBQUsySCxFQUFJbzFDLEVBQU1wMUMsRUFBRzNILEtBQUtzQixFQUFJeTdDLEVBQU16N0MsSUFNbkRrOEMsVUFBVyxTQUFVVCxHQUNwQixPQUFPLElBQUlwQixFQUFNMzdDLEtBQUsySCxFQUFJbzFDLEVBQU1wMUMsRUFBRzNILEtBQUtzQixFQUFJeTdDLEVBQU16N0MsSUFLbkQ2MkMsTUFBTyxXQUNOLE9BQU9uNEMsS0FBSzg4QyxRQUFRVyxVQUdyQkEsT0FBUSxXQUdQLE9BRkF6OUMsS0FBSzJILEVBQUlpWSxLQUFLdTRCLE1BQU1uNEMsS0FBSzJILEdBQ3pCM0gsS0FBS3NCLEVBQUlzZSxLQUFLdTRCLE1BQU1uNEMsS0FBS3NCLEdBQ2xCdEIsTUFLUjY3QyxNQUFPLFdBQ04sT0FBTzc3QyxLQUFLODhDLFFBQVFZLFVBR3JCQSxPQUFRLFdBR1AsT0FGQTE5QyxLQUFLMkgsRUFBSWlZLEtBQUtpOEIsTUFBTTc3QyxLQUFLMkgsR0FDekIzSCxLQUFLc0IsRUFBSXNlLEtBQUtpOEIsTUFBTTc3QyxLQUFLc0IsR0FDbEJ0QixNQUtSODdDLEtBQU0sV0FDTCxPQUFPOTdDLEtBQUs4OEMsUUFBUWEsU0FHckJBLE1BQU8sV0FHTixPQUZBMzlDLEtBQUsySCxFQUFJaVksS0FBS2s4QixLQUFLOTdDLEtBQUsySCxHQUN4QjNILEtBQUtzQixFQUFJc2UsS0FBS2s4QixLQUFLOTdDLEtBQUtzQixHQUNqQnRCLE1BS1I0N0MsTUFBTyxXQUNOLE9BQU81N0MsS0FBSzg4QyxRQUFRYyxVQUdyQkEsT0FBUSxXQUdQLE9BRkE1OUMsS0FBSzJILEVBQUlpMEMsRUFBTTU3QyxLQUFLMkgsR0FDcEIzSCxLQUFLc0IsRUFBSXM2QyxFQUFNNTdDLEtBQUtzQixHQUNidEIsTUFLUjY5QyxXQUFZLFNBQVVkLEdBR3JCLElBQUlwMUMsR0FGSm8xQyxFQUFRaEIsRUFBUWdCLElBRUZwMUMsRUFBSTNILEtBQUsySCxFQUNuQnJHLEVBQUl5N0MsRUFBTXo3QyxFQUFJdEIsS0FBS3NCLEVBRXZCLE9BQU9zZSxLQUFLaytCLEtBQUtuMkMsRUFBSUEsRUFBSXJHLEVBQUlBLElBSzlCeThDLE9BQVEsU0FBVWhCLEdBR2pCLE9BRkFBLEVBQVFoQixFQUFRZ0IsSUFFSHAxQyxJQUFNM0gsS0FBSzJILEdBQ2pCbzFDLEVBQU16N0MsSUFBTXRCLEtBQUtzQixHQUt6QjA4QyxTQUFVLFNBQVVqQixHQUduQixPQUZBQSxFQUFRaEIsRUFBUWdCLEdBRVRuOUIsS0FBS3ErQixJQUFJbEIsRUFBTXAxQyxJQUFNaVksS0FBS3ErQixJQUFJaitDLEtBQUsySCxJQUNuQ2lZLEtBQUtxK0IsSUFBSWxCLEVBQU16N0MsSUFBTXNlLEtBQUtxK0IsSUFBSWorQyxLQUFLc0IsSUFLM0N5SSxTQUFVLFdBQ1QsTUFBTyxTQUNDZ3VDLEVBQVUvM0MsS0FBSzJILEdBQUssS0FDcEJvd0MsRUFBVS8zQyxLQUFLc0IsR0FBSyxNQWlFOUIwNkMsRUFBTzc4QyxVQUFZLENBR2xCcVQsT0FBUSxTQUFVdXFDLEdBZ0JqQixPQWZBQSxFQUFRaEIsRUFBUWdCLEdBTVgvOEMsS0FBSzJ2QixLQUFRM3ZCLEtBQUs2ZixLQUl0QjdmLEtBQUsydkIsSUFBSWhvQixFQUFJaVksS0FBSytQLElBQUlvdEIsRUFBTXAxQyxFQUFHM0gsS0FBSzJ2QixJQUFJaG9CLEdBQ3hDM0gsS0FBSzZmLElBQUlsWSxFQUFJaVksS0FBS0MsSUFBSWs5QixFQUFNcDFDLEVBQUczSCxLQUFLNmYsSUFBSWxZLEdBQ3hDM0gsS0FBSzJ2QixJQUFJcnVCLEVBQUlzZSxLQUFLK1AsSUFBSW90QixFQUFNejdDLEVBQUd0QixLQUFLMnZCLElBQUlydUIsR0FDeEN0QixLQUFLNmYsSUFBSXZlLEVBQUlzZSxLQUFLQyxJQUFJazlCLEVBQU16N0MsRUFBR3RCLEtBQUs2ZixJQUFJdmUsS0FOeEN0QixLQUFLMnZCLElBQU1vdEIsRUFBTUQsUUFDakI5OEMsS0FBSzZmLElBQU1rOUIsRUFBTUQsU0FPWDk4QyxNQUtSaytDLFVBQVcsU0FBVS9GLEdBQ3BCLE9BQU8sSUFBSXdELEdBQ0YzN0MsS0FBSzJ2QixJQUFJaG9CLEVBQUkzSCxLQUFLNmYsSUFBSWxZLEdBQUssR0FDM0IzSCxLQUFLMnZCLElBQUlydUIsRUFBSXRCLEtBQUs2ZixJQUFJdmUsR0FBSyxFQUFHNjJDLElBS3hDZ0csY0FBZSxXQUNkLE9BQU8sSUFBSXhDLEVBQU0zN0MsS0FBSzJ2QixJQUFJaG9CLEVBQUczSCxLQUFLNmYsSUFBSXZlLElBS3ZDODhDLFlBQWEsV0FDWixPQUFPLElBQUl6QyxFQUFNMzdDLEtBQUs2ZixJQUFJbFksRUFBRzNILEtBQUsydkIsSUFBSXJ1QixJQUt2Qys4QyxXQUFZLFdBQ1gsT0FBT3IrQyxLQUFLMnZCLEtBS2IydUIsZUFBZ0IsV0FDZixPQUFPdCtDLEtBQUs2ZixLQUtiMCtCLFFBQVMsV0FDUixPQUFPditDLEtBQUs2ZixJQUFJbzlCLFNBQVNqOUMsS0FBSzJ2QixNQVEvQnF1QixTQUFVLFNBQVU3NEMsR0FDbkIsSUFBSXdxQixFQUFLOVAsRUFlVCxPQVpDMWEsRUFEcUIsaUJBQVhBLEVBQUksSUFBbUJBLGFBQWV3MkMsRUFDMUNJLEVBQVE1MkMsR0FFUisyQyxFQUFTLzJDLGNBR0c2MkMsR0FDbEJyc0IsRUFBTXhxQixFQUFJd3FCLElBQ1Y5UCxFQUFNMWEsRUFBSTBhLEtBRVY4UCxFQUFNOVAsRUFBTTFhLEVBR0x3cUIsRUFBSWhvQixHQUFLM0gsS0FBSzJ2QixJQUFJaG9CLEdBQ2xCa1ksRUFBSWxZLEdBQUszSCxLQUFLNmYsSUFBSWxZLEdBQ2xCZ29CLEVBQUlydUIsR0FBS3RCLEtBQUsydkIsSUFBSXJ1QixHQUNsQnVlLEVBQUl2ZSxHQUFLdEIsS0FBSzZmLElBQUl2ZSxHQU0zQms5QyxXQUFZLFNBQVVDLEdBQ3JCQSxFQUFTdkMsRUFBU3VDLEdBRWxCLElBQUk5dUIsRUFBTTN2QixLQUFLMnZCLElBQ1g5UCxFQUFNN2YsS0FBSzZmLElBQ1g2K0IsRUFBT0QsRUFBTzl1QixJQUNkZ3ZCLEVBQU9GLEVBQU81K0IsSUFDZCsrQixFQUFlRCxFQUFLaDNDLEdBQUtnb0IsRUFBSWhvQixHQUFPKzJDLEVBQUsvMkMsR0FBS2tZLEVBQUlsWSxFQUNsRGszQyxFQUFlRixFQUFLcjlDLEdBQUtxdUIsRUFBSXJ1QixHQUFPbzlDLEVBQUtwOUMsR0FBS3VlLEVBQUl2ZSxFQUV0RCxPQUFPczlDLEdBQWVDLEdBTXZCQyxTQUFVLFNBQVVMLEdBQ25CQSxFQUFTdkMsRUFBU3VDLEdBRWxCLElBQUk5dUIsRUFBTTN2QixLQUFLMnZCLElBQ1g5UCxFQUFNN2YsS0FBSzZmLElBQ1g2K0IsRUFBT0QsRUFBTzl1QixJQUNkZ3ZCLEVBQU9GLEVBQU81K0IsSUFDZGsvQixFQUFhSixFQUFLaDNDLEVBQUlnb0IsRUFBSWhvQixHQUFPKzJDLEVBQUsvMkMsRUFBSWtZLEVBQUlsWSxFQUM5Q3EzQyxFQUFhTCxFQUFLcjlDLEVBQUlxdUIsRUFBSXJ1QixHQUFPbzlDLEVBQUtwOUMsRUFBSXVlLEVBQUl2ZSxFQUVsRCxPQUFPeTlDLEdBQWFDLEdBR3JCQyxRQUFTLFdBQ1IsU0FBVWovQyxLQUFLMnZCLE1BQU8zdkIsS0FBSzZmLE9BeUQ3QnM4QixFQUFhaDlDLFVBQVksQ0FReEJxVCxPQUFRLFNBQVVyTixHQUNqQixJQUVJKzVDLEVBQUtDLEVBRkxDLEVBQUtwL0MsS0FBS3EvQyxXQUNWQyxFQUFLdC9DLEtBQUt1L0MsV0FHZCxHQUFJcDZDLGFBQWVxM0MsRUFDbEIwQyxFQUFNLzVDLEVBQ05nNkMsRUFBTWg2QyxNQUVBLE1BQUlBLGFBQWVnM0MsR0FPekIsT0FBT2gzQyxFQUFNbkYsS0FBS3dTLE9BQU9vcUMsRUFBU3ozQyxJQUFRbzNDLEVBQWVwM0MsSUFBUW5GLEtBSGpFLEdBSEFrL0MsRUFBTS81QyxFQUFJazZDLFdBQ1ZGLEVBQU1oNkMsRUFBSW82QyxZQUVMTCxJQUFRQyxFQUFPLE9BQU9uL0MsS0FnQjVCLE9BVktvL0MsR0FBT0UsR0FJWEYsRUFBRzNDLElBQU03OEIsS0FBSytQLElBQUl1dkIsRUFBSXpDLElBQUsyQyxFQUFHM0MsS0FDOUIyQyxFQUFHMUMsSUFBTTk4QixLQUFLK1AsSUFBSXV2QixFQUFJeEMsSUFBSzBDLEVBQUcxQyxLQUM5QjRDLEVBQUc3QyxJQUFNNzhCLEtBQUtDLElBQUlzL0IsRUFBSTFDLElBQUs2QyxFQUFHN0MsS0FDOUI2QyxFQUFHNUMsSUFBTTk4QixLQUFLQyxJQUFJcy9CLEVBQUl6QyxJQUFLNEMsRUFBRzVDLE9BTjlCMThDLEtBQUtxL0MsV0FBYSxJQUFJN0MsRUFBTzBDLEVBQUl6QyxJQUFLeUMsRUFBSXhDLEtBQzFDMThDLEtBQUt1L0MsV0FBYSxJQUFJL0MsRUFBTzJDLEVBQUkxQyxJQUFLMEMsRUFBSXpDLE1BUXBDMThDLE1BT1J3L0MsSUFBSyxTQUFVQyxHQUNkLElBQUlMLEVBQUtwL0MsS0FBS3EvQyxXQUNWQyxFQUFLdC9DLEtBQUt1L0MsV0FDVkcsRUFBZTkvQixLQUFLcStCLElBQUltQixFQUFHM0MsSUFBTTZDLEVBQUc3QyxLQUFPZ0QsRUFDM0NFLEVBQWMvL0IsS0FBS3ErQixJQUFJbUIsRUFBRzFDLElBQU00QyxFQUFHNUMsS0FBTytDLEVBRTlDLE9BQU8sSUFBSXRELEVBQ0gsSUFBSUssRUFBTzRDLEVBQUczQyxJQUFNaUQsRUFBY04sRUFBRzFDLElBQU1pRCxHQUMzQyxJQUFJbkQsRUFBTzhDLEVBQUc3QyxJQUFNaUQsRUFBY0osRUFBRzVDLElBQU1pRCxLQUtwRHpCLFVBQVcsV0FDVixPQUFPLElBQUkxQixHQUNGeDhDLEtBQUtxL0MsV0FBVzVDLElBQU16OEMsS0FBS3UvQyxXQUFXOUMsS0FBTyxHQUM3Q3o4QyxLQUFLcS9DLFdBQVczQyxJQUFNMThDLEtBQUt1L0MsV0FBVzdDLEtBQU8sSUFLdkRrRCxhQUFjLFdBQ2IsT0FBTzUvQyxLQUFLcS9DLFlBS2JRLGFBQWMsV0FDYixPQUFPNy9DLEtBQUt1L0MsWUFLYk8sYUFBYyxXQUNiLE9BQU8sSUFBSXRELEVBQU94OEMsS0FBSysvQyxXQUFZLy9DLEtBQUtnZ0QsWUFLekNDLGFBQWMsV0FDYixPQUFPLElBQUl6RCxFQUFPeDhDLEtBQUtrZ0QsV0FBWWxnRCxLQUFLbWdELFlBS3pDSCxRQUFTLFdBQ1IsT0FBT2hnRCxLQUFLcS9DLFdBQVczQyxLQUt4QndELFNBQVUsV0FDVCxPQUFPbGdELEtBQUtxL0MsV0FBVzVDLEtBS3hCMEQsUUFBUyxXQUNSLE9BQU9uZ0QsS0FBS3UvQyxXQUFXN0MsS0FLeEJxRCxTQUFVLFdBQ1QsT0FBTy8vQyxLQUFLdS9DLFdBQVc5QyxLQVN4QnVCLFNBQVUsU0FBVTc0QyxHQUVsQkEsRUFEcUIsaUJBQVhBLEVBQUksSUFBbUJBLGFBQWVxM0MsR0FBVSxRQUFTcjNDLEVBQzdEeTNDLEVBQVN6M0MsR0FFVG8zQyxFQUFlcDNDLEdBR3RCLElBRUkrNUMsRUFBS0MsRUFGTEMsRUFBS3AvQyxLQUFLcS9DLFdBQ1ZDLEVBQUt0L0MsS0FBS3UvQyxXQVVkLE9BUElwNkMsYUFBZWczQyxHQUNsQitDLEVBQU0vNUMsRUFBSXk2QyxlQUNWVCxFQUFNaDZDLEVBQUkwNkMsZ0JBRVZYLEVBQU1DLEVBQU1oNkMsRUFHTCs1QyxFQUFJekMsS0FBTzJDLEVBQUczQyxLQUFTMEMsRUFBSTFDLEtBQU82QyxFQUFHN0MsS0FDckN5QyxFQUFJeEMsS0FBTzBDLEVBQUcxQyxLQUFTeUMsRUFBSXpDLEtBQU80QyxFQUFHNUMsS0FLOUM4QixXQUFZLFNBQVVDLEdBQ3JCQSxFQUFTbEMsRUFBZWtDLEdBRXhCLElBQUlXLEVBQUtwL0MsS0FBS3EvQyxXQUNWQyxFQUFLdC9DLEtBQUt1L0MsV0FDVkwsRUFBTVQsRUFBT21CLGVBQ2JULEVBQU1WLEVBQU9vQixlQUViTyxFQUFpQmpCLEVBQUkxQyxLQUFPMkMsRUFBRzNDLEtBQVN5QyxFQUFJekMsS0FBTzZDLEVBQUc3QyxJQUN0RDRELEVBQWlCbEIsRUFBSXpDLEtBQU8wQyxFQUFHMUMsS0FBU3dDLEVBQUl4QyxLQUFPNEMsRUFBRzVDLElBRTFELE9BQU8wRCxHQUFpQkMsR0FLekJ2QixTQUFVLFNBQVVMLEdBQ25CQSxFQUFTbEMsRUFBZWtDLEdBRXhCLElBQUlXLEVBQUtwL0MsS0FBS3EvQyxXQUNWQyxFQUFLdC9DLEtBQUt1L0MsV0FDVkwsRUFBTVQsRUFBT21CLGVBQ2JULEVBQU1WLEVBQU9vQixlQUViUyxFQUFlbkIsRUFBSTFDLElBQU0yQyxFQUFHM0MsS0FBU3lDLEVBQUl6QyxJQUFNNkMsRUFBRzdDLElBQ2xEOEQsRUFBZXBCLEVBQUl6QyxJQUFNMEMsRUFBRzFDLEtBQVN3QyxFQUFJeEMsSUFBTTRDLEVBQUc1QyxJQUV0RCxPQUFPNEQsR0FBZUMsR0FLdkJDLGFBQWMsV0FDYixNQUFPLENBQUN4Z0QsS0FBS2dnRCxVQUFXaGdELEtBQUtrZ0QsV0FBWWxnRCxLQUFLbWdELFVBQVduZ0QsS0FBSysvQyxZQUFZMTBDLEtBQUssTUFLaEYweUMsT0FBUSxTQUFVVSxFQUFRZ0MsR0FDekIsUUFBS2hDLElBRUxBLEVBQVNsQyxFQUFla0MsR0FFakJ6K0MsS0FBS3EvQyxXQUFXdEIsT0FBT1UsRUFBT21CLGVBQWdCYSxJQUM5Q3pnRCxLQUFLdS9DLFdBQVd4QixPQUFPVSxFQUFPb0IsZUFBZ0JZLEtBS3REeEIsUUFBUyxXQUNSLFNBQVVqL0MsS0FBS3EvQyxhQUFjci9DLEtBQUt1L0MsY0FnRXBDL0MsRUFBT3I5QyxVQUFZLENBR2xCNCtDLE9BQVEsU0FBVTU0QyxFQUFLczdDLEdBQ3RCLFFBQUt0N0MsSUFFTEEsRUFBTXkzQyxFQUFTejNDLEdBRUZ5YSxLQUFLQyxJQUNWRCxLQUFLcStCLElBQUlqK0MsS0FBS3k4QyxJQUFNdDNDLEVBQUlzM0MsS0FDeEI3OEIsS0FBS3ErQixJQUFJaitDLEtBQUswOEMsSUFBTXYzQyxFQUFJdTNDLGFBRUExekMsSUFBZHkzQyxFQUEwQixLQUFTQSxLQUt0RDEyQyxTQUFVLFNBQVUyMkMsR0FDbkIsTUFBTyxVQUNDM0ksRUFBVS8zQyxLQUFLeThDLElBQUtpRSxHQUFhLEtBQ2pDM0ksRUFBVS8zQyxLQUFLMDhDLElBQUtnRSxHQUFhLEtBSzFDN0MsV0FBWSxTQUFVbGUsR0FDckIsT0FBT2doQixFQUFNQyxTQUFTNWdELEtBQU00OEMsRUFBU2pkLEtBS3RDa2hCLEtBQU0sV0FDTCxPQUFPRixFQUFNRyxXQUFXOWdELE9BS3pCazhDLFNBQVUsU0FBVTZFLEdBQ25CLElBQUlDLEVBQWMsSUFBTUQsRUFBZSxTQUNuQ0UsRUFBY0QsRUFBY3BoQyxLQUFLc2hDLElBQUt0aEMsS0FBS3VoQyxHQUFLLElBQU9uaEQsS0FBS3k4QyxLQUVoRSxPQUFPRixFQUNDLENBQUN2OEMsS0FBS3k4QyxJQUFNdUUsRUFBYWhoRCxLQUFLMDhDLElBQU11RSxHQUNwQyxDQUFDamhELEtBQUt5OEMsSUFBTXVFLEVBQWFoaEQsS0FBSzA4QyxJQUFNdUUsS0FHN0NuRSxNQUFPLFdBQ04sT0FBTyxJQUFJTixFQUFPeDhDLEtBQUt5OEMsSUFBS3o4QyxLQUFLMDhDLElBQUsxOEMsS0FBSzI4QyxPQTJEN0MsSUF3TE05K0MsRUF4TEZ1akQsRUFBTSxDQUdUQyxjQUFlLFNBQVVDLEVBQVExSyxHQUNoQyxJQUFJMkssRUFBaUJ2aEQsS0FBS3doRCxXQUFXenpDLFFBQVF1ekMsR0FDekNHLEVBQVF6aEQsS0FBS3loRCxNQUFNN0ssR0FFdkIsT0FBTzUyQyxLQUFLMGhELGVBQWVDLFdBQVdKLEVBQWdCRSxJQU12REcsY0FBZSxTQUFVN0UsRUFBT25HLEdBQy9CLElBQUk2SyxFQUFRemhELEtBQUt5aEQsTUFBTTdLLEdBQ25CaUwsRUFBcUI3aEQsS0FBSzBoRCxlQUFlSSxZQUFZL0UsRUFBTzBFLEdBRWhFLE9BQU96aEQsS0FBS3doRCxXQUFXTyxVQUFVRixJQU1sQzl6QyxRQUFTLFNBQVV1ekMsR0FDbEIsT0FBT3RoRCxLQUFLd2hELFdBQVd6ekMsUUFBUXV6QyxJQU1oQ1MsVUFBVyxTQUFVaEYsR0FDcEIsT0FBTy84QyxLQUFLd2hELFdBQVdPLFVBQVVoRixJQU9sQzBFLE1BQU8sU0FBVTdLLEdBQ2hCLE9BQU8sSUFBTWgzQixLQUFLczRCLElBQUksRUFBR3RCLElBTTFCQSxLQUFNLFNBQVU2SyxHQUNmLE9BQU83aEMsS0FBS21jLElBQUkwbEIsRUFBUSxLQUFPN2hDLEtBQUtvaUMsS0FLckNDLG1CQUFvQixTQUFVckwsR0FDN0IsR0FBSTUyQyxLQUFLa2lELFNBQVksT0FBTyxLQUU1QixJQUFJMWlELEVBQUlRLEtBQUt3aEQsV0FBVy9DLE9BQ3BCbi9DLEVBQUlVLEtBQUt5aEQsTUFBTTdLLEdBSW5CLE9BQU8sSUFBSW9GLEVBSERoOEMsS0FBSzBoRCxlQUFlcjdCLFVBQVU3bUIsRUFBRW13QixJQUFLcndCLEdBQ3JDVSxLQUFLMGhELGVBQWVyN0IsVUFBVTdtQixFQUFFcWdCLElBQUt2Z0IsS0F3QmhENGlELFVBQVUsRUFLVnBCLFdBQVksU0FBVVEsR0FDckIsSUFBSTVFLEVBQU0xOEMsS0FBS21pRCxRQUFVdkssRUFBUTBKLEVBQU81RSxJQUFLMThDLEtBQUttaUQsU0FBUyxHQUFRYixFQUFPNUUsSUFJMUUsT0FBTyxJQUFJRixFQUhEeDhDLEtBQUtvaUQsUUFBVXhLLEVBQVEwSixFQUFPN0UsSUFBS3o4QyxLQUFLb2lELFNBQVMsR0FBUWQsRUFBTzdFLElBR25EQyxFQUZiNEUsRUFBTzNFLE1BU2xCMEYsaUJBQWtCLFNBQVU1RCxHQUMzQixJQUFJOUgsRUFBUzhILEVBQU9QLFlBQ2hCb0UsRUFBWXRpRCxLQUFLOGdELFdBQVduSyxHQUM1QjRMLEVBQVc1TCxFQUFPOEYsSUFBTTZGLEVBQVU3RixJQUNsQytGLEVBQVc3TCxFQUFPK0YsSUFBTTRGLEVBQVU1RixJQUV0QyxHQUFpQixJQUFiNkYsR0FBK0IsSUFBYkMsRUFDckIsT0FBTy9ELEVBR1IsSUFBSVcsRUFBS1gsRUFBT21CLGVBQ1pOLEVBQUtiLEVBQU9vQixlQUloQixPQUFPLElBQUkxRCxFQUhDLElBQUlLLEVBQU80QyxFQUFHM0MsSUFBTThGLEVBQVVuRCxFQUFHMUMsSUFBTThGLEdBQ3ZDLElBQUloRyxFQUFPOEMsRUFBRzdDLElBQU04RixFQUFVakQsRUFBRzVDLElBQU04RixNQWdCakQ3QixFQUFRbnVDLEVBQU8sR0FBSTR1QyxFQUFLLENBQzNCZSxRQUFTLEVBQUUsSUFBSyxLQUtoQmxZLEVBQUcsT0FHSDJXLFNBQVUsU0FBVTZCLEVBQVNDLEdBQzVCLElBQUlDLEVBQU0vaUMsS0FBS3VoQyxHQUFLLElBQ2hCeUIsRUFBT0gsRUFBUWhHLElBQU1rRyxFQUNyQkUsRUFBT0gsRUFBUWpHLElBQU1rRyxFQUNyQkcsRUFBVWxqQyxLQUFLbWpDLEtBQUtMLEVBQVFqRyxJQUFNZ0csRUFBUWhHLEtBQU9rRyxFQUFNLEdBQ3ZESyxFQUFVcGpDLEtBQUttakMsS0FBS0wsRUFBUWhHLElBQU0rRixFQUFRL0YsS0FBT2lHLEVBQU0sR0FDdkR4L0MsRUFBSTIvQyxFQUFVQSxFQUFVbGpDLEtBQUtzaEMsSUFBSTBCLEdBQVFoakMsS0FBS3NoQyxJQUFJMkIsR0FBUUcsRUFBVUEsRUFDcEVwbEQsRUFBSSxFQUFJZ2lCLEtBQUtxakMsTUFBTXJqQyxLQUFLaytCLEtBQUszNkMsR0FBSXljLEtBQUtrK0IsS0FBSyxFQUFJMzZDLElBQ25ELE9BQU9uRCxLQUFLaXFDLEVBQUlyc0MsS0FlZHNsRCxFQUFvQixDQUV2QmpaLEVBSmlCLFFBS2pCa1osYUFBYyxjQUVkcDFDLFFBQVMsU0FBVXV6QyxHQUNsQixJQUFJempELEVBQUkraEIsS0FBS3VoQyxHQUFLLElBQ2R0aEMsRUFBTTdmLEtBQUttakQsYUFDWDFHLEVBQU03OEIsS0FBS0MsSUFBSUQsS0FBSytQLElBQUk5UCxFQUFLeWhDLEVBQU83RSxNQUFPNThCLEdBQzNDa2pDLEVBQU1uakMsS0FBS21qQyxJQUFJdEcsRUFBTTUrQyxHQUV6QixPQUFPLElBQUk4OUMsRUFDVjM3QyxLQUFLaXFDLEVBQUlxWCxFQUFPNUUsSUFBTTcrQyxFQUN0Qm1DLEtBQUtpcUMsRUFBSXJxQixLQUFLbWMsS0FBSyxFQUFJZ25CLElBQVEsRUFBSUEsSUFBUSxJQUc3Q2hCLFVBQVcsU0FBVWhGLEdBQ3BCLElBQUlsL0MsRUFBSSxJQUFNK2hCLEtBQUt1aEMsR0FFbkIsT0FBTyxJQUFJM0UsR0FDVCxFQUFJNThCLEtBQUt3akMsS0FBS3hqQyxLQUFLeWpDLElBQUl0RyxFQUFNejdDLEVBQUl0QixLQUFLaXFDLElBQU9ycUIsS0FBS3VoQyxHQUFLLEdBQU10akQsRUFDOURrL0MsRUFBTXAxQyxFQUFJOUosRUFBSW1DLEtBQUtpcUMsSUFHckJ3VSxRQUNLNWdELEVBM0JZLFFBMkJNK2hCLEtBQUt1aEMsR0FDcEIsSUFBSW5GLEVBQU8sRUFBRW4rQyxHQUFJQSxHQUFJLENBQUNBLEVBQUdBLE1BeUJsQyxTQUFTeWxELEVBQWVuZ0QsRUFBRzNELEVBQUc1QixFQUFHQyxHQUNoQyxHQUFJd0wsRUFBUWxHLEdBTVgsT0FKQW5ELEtBQUt3RSxHQUFLckIsRUFBRSxHQUNabkQsS0FBS3VHLEdBQUtwRCxFQUFFLEdBQ1puRCxLQUFLdUksR0FBS3BGLEVBQUUsUUFDWm5ELEtBQUsySixHQUFLeEcsRUFBRSxJQUdibkQsS0FBS3dFLEdBQUtyQixFQUNWbkQsS0FBS3VHLEdBQUsvRyxFQUNWUSxLQUFLdUksR0FBSzNLLEVBQ1ZvQyxLQUFLMkosR0FBSzlMLEVBd0NYLFNBQVMwbEQsRUFBaUJwZ0QsRUFBRzNELEVBQUc1QixFQUFHQyxHQUNsQyxPQUFPLElBQUl5bEQsRUFBZW5nRCxFQUFHM0QsRUFBRzVCLEVBQUdDLEdBdENwQ3lsRCxFQUFlbmtELFVBQVksQ0FJMUJrbkIsVUFBVyxTQUFVMDJCLEVBQU8wRSxHQUMzQixPQUFPemhELEtBQUsyaEQsV0FBVzVFLEVBQU1ELFFBQVMyRSxJQUl2Q0UsV0FBWSxTQUFVNUUsRUFBTzBFLEdBSTVCLE9BSEFBLEVBQVFBLEdBQVMsRUFDakIxRSxFQUFNcDFDLEVBQUk4NUMsR0FBU3poRCxLQUFLd0UsR0FBS3U0QyxFQUFNcDFDLEVBQUkzSCxLQUFLdUcsSUFDNUN3MkMsRUFBTXo3QyxFQUFJbWdELEdBQVN6aEQsS0FBS3VJLEdBQUt3MEMsRUFBTXo3QyxFQUFJdEIsS0FBSzJKLElBQ3JDb3pDLEdBTVIrRSxZQUFhLFNBQVUvRSxFQUFPMEUsR0FFN0IsT0FEQUEsRUFBUUEsR0FBUyxFQUNWLElBQUk5RixHQUNGb0IsRUFBTXAxQyxFQUFJODVDLEVBQVF6aEQsS0FBS3VHLElBQU12RyxLQUFLd0UsSUFDbEN1NEMsRUFBTXo3QyxFQUFJbWdELEVBQVF6aEQsS0FBSzJKLElBQU0zSixLQUFLdUksTUEyQjdDLElBQUlpN0MsRUFBV2h4QyxFQUFPLEdBQUltdUMsRUFBTyxDQUNoQzhDLEtBQU0sWUFDTmpDLFdBQVkwQixFQUVaeEIsZUFBaUIsV0FDaEIsSUFBSUQsRUFBUSxJQUFPN2hDLEtBQUt1aEMsR0FBSytCLEVBQWtCalosR0FDL0MsT0FBT3NaLEVBQWlCOUIsRUFBTyxJQUFNQSxFQUFPLElBRjdCLEtBTWJpQyxFQUFhbHhDLEVBQU8sR0FBSWd4QyxFQUFVLENBQ3JDQyxLQUFNLGdCQVVQLFNBQVNFLEVBQVU3bEQsR0FDbEIsT0FBT21sQixTQUFTMmdDLGdCQUFnQiw2QkFBOEI5bEQsR0FNL0QsU0FBUytsRCxFQUFhQyxFQUFPcC9DLEdBQzVCLElBQ0FuSCxFQUFHNm1CLEVBQUdqYSxFQUFLNDVDLEVBQU05SCxFQUFRNThDLEVBRHJCKzRDLEVBQU0sR0FHVixJQUFLNzZDLEVBQUksRUFBRzRNLEVBQU0yNUMsRUFBTTVoRCxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUFLLENBRzdDLElBQUs2bUIsRUFBSSxFQUFHMi9CLEdBRlo5SCxFQUFTNkgsRUFBTXZtRCxJQUVXMkUsT0FBUWtpQixFQUFJMi9CLEVBQU0zL0IsSUFFM0NnMEIsSUFBUWgwQixFQUFJLElBQU0sTUFEbEIva0IsRUFBSTQ4QyxFQUFPNzNCLElBQ2dCemMsRUFBSSxJQUFNdEksRUFBRWlDLEVBSXhDODJDLEdBQU8xekMsRUFBVXMvQyxHQUFNLElBQU0sSUFBTyxHQUlyQyxPQUFPNUwsR0FBTyxPQWtCZixJQUFJNkwsRUFBVWhoQyxTQUFTaWhDLGdCQUFnQm4vQixNQUduQ28vQixFQUFLLGtCQUFtQm5oQyxPQUd4Qm9oQyxFQUFRRCxJQUFPbGhDLFNBQVM2akIsaUJBR3hCdWQsRUFBTyxnQkFBaUJDLGFBQWUsaUJBQWtCcmhDLFVBSXpEc2hDLEdBQVNDLEdBQWtCLFVBSTNCQyxHQUFVRCxHQUFrQixXQUc1QkUsR0FBWUYsR0FBa0IsY0FBZ0JBLEdBQWtCLGFBR2hFRyxHQUFZbG5CLFNBQVMscUJBQXFCbW5CLEtBQUtOLFVBQVVPLFdBQVcsR0FBSSxJQUV4RUMsR0FBZUwsSUFBV0QsR0FBa0IsV0FBYUcsR0FBWSxPQUFTLGNBQWUzaEMsUUFHN0YraEMsS0FBVS9oQyxPQUFPK2hDLE1BR2pCQyxJQUFVWCxHQUFRRyxHQUFrQixVQUdwQ1MsR0FBUVQsR0FBa0IsV0FBYUQsS0FBV1EsS0FBVVosRUFHNURlLElBQVVGLElBQVVSLEdBQWtCLFVBRXRDVyxHQUFVWCxHQUFrQixXQUk1QlksR0FBVSxnQkFBaUJuQixFQUczQm9CLEdBQTRDLElBQXRDZixVQUFVZ0IsU0FBUzkyQyxRQUFRLE9BR2pDKzJDLEdBQU9wQixHQUFPLGVBQWdCRixFQUc5QnVCLEdBQVksb0JBQXFCeGlDLFFBQVksUUFBUyxJQUFJQSxPQUFPeWlDLGtCQUF1QmYsR0FHeEZnQixHQUFVLG1CQUFvQnpCLEVBSTlCMEIsSUFBUzNpQyxPQUFPNGlDLGVBQWlCTCxJQUFRQyxJQUFZRSxNQUFhTixLQUFZRCxHQUc5RVUsR0FBZ0Msb0JBQWhCQyxhQUErQnRCLEdBQWtCLFVBR2pFdUIsR0FBZUYsSUFBVXRCLEdBSXpCeUIsR0FBaUJILElBQVVMLEdBSTNCUyxJQUFhampDLE9BQU9rakMsY0FBZ0JsakMsT0FBT21qQyxlQUkzQ0MsTUFBYXBqQyxPQUFPa2pDLGVBQWdCRCxJQU9wQ0ksSUFBU3JqQyxPQUFPc2pDLGFBQWVGLElBQVcsaUJBQWtCcGpDLFFBQzdEQSxPQUFPdWpDLGVBQWlCdGpDLG9CQUFvQkQsT0FBT3VqQyxlQUdsREMsR0FBY1gsSUFBVWQsR0FJeEIwQixHQUFjWixJQUFVWixHQUl4QnlCLElBQVUxakMsT0FBTzJqQyxrQkFBcUIzakMsT0FBTzRqQyxPQUFPQyxXQUFhN2pDLE9BQU80akMsT0FBT0UsYUFBZ0IsRUFJL0ZDLEdBQWlCLFdBQ3BCLElBQUlDLEdBQXdCLEVBQzVCLElBQ0MsSUFBSUMsRUFBT2hwRCxPQUFPQyxlQUFlLEdBQUksVUFBVyxDQUMvQ0UsSUFBSyxXQUNKNG9ELEdBQXdCLEtBRzFCaGtDLE9BQU84akIsaUJBQWlCLDBCQUEyQmdSLEVBQVNtUCxHQUM1RGprQyxPQUFPK2pCLG9CQUFvQiwwQkFBMkIrUSxFQUFTbVAsR0FDOUQsTUFBT3BtRCxJQUdULE9BQU9tbUQsRUFiWSxHQWtCaEJFLEtBQ01qa0MsU0FBUzJDLGNBQWMsVUFBVXVoQyxXQUt2Q25ELE1BQVMvZ0MsU0FBUzJnQyxrQkFBbUJELEVBQVUsT0FBT3lELGVBSXREQyxJQUFPckQsSUFBUSxXQUNsQixJQUNDLElBQUlzRCxFQUFNcmtDLFNBQVMyQyxjQUFjLE9BQ2pDMGhDLEVBQUloUixVQUFZLHFCQUVoQixJQUFJaVIsRUFBUUQsRUFBSWhpQyxXQUdoQixPQUZBaWlDLEVBQU14aUMsTUFBTXlpQyxTQUFXLG9CQUVoQkQsR0FBK0IsaUJBQWRBLEVBQU1FLElBRTdCLE1BQU81bUQsR0FDUixPQUFPLEdBWFMsR0FnQmxCLFNBQVMyakQsR0FBa0JwTSxHQUMxQixPQUFPa00sVUFBVU8sVUFBVXJuQixjQUFjaHZCLFFBQVE0cEMsSUFBUSxFQUcxRCxJQUFJc1AsR0FBVSxDQUNadkQsR0FBSUEsRUFDSkMsTUFBT0EsRUFDUEMsS0FBTUEsRUFDTkUsT0FBUUEsR0FDUkUsUUFBU0EsR0FDVEMsVUFBV0EsR0FDWEksYUFBY0EsR0FDZEMsTUFBT0EsR0FDUEMsT0FBUUEsR0FDUkMsTUFBT0EsR0FDUEMsT0FBUUEsR0FDUkMsUUFBU0EsR0FDVEMsUUFBU0EsR0FDVEMsSUFBS0EsR0FDTEUsS0FBTUEsR0FDTkMsU0FBVUEsR0FDVkUsUUFBU0EsR0FDVEMsTUFBT0EsR0FDUEUsT0FBUUEsR0FDUkUsYUFBY0EsR0FDZEMsZUFBZ0JBLEdBQ2hCQyxVQUFXQSxHQUNYRyxRQUFTQSxHQUNUQyxNQUFPQSxHQUNQRyxZQUFhQSxHQUNiQyxZQUFhQSxHQUNiQyxPQUFRQSxHQUNSSyxjQUFlQSxHQUNmRyxPQUFRQSxHQUNSbEQsSUFBS0EsR0FDTHFELElBQUtBLElBUUhNLEdBQWlCMUIsR0FBWSxnQkFBb0IsY0FDakQyQixHQUFpQjNCLEdBQVksZ0JBQW9CLGNBQ2pENEIsR0FBaUI1QixHQUFZLGNBQW9CLFlBQ2pENkIsR0FBaUI3QixHQUFZLGtCQUFvQixnQkFFakQ4QixHQUFZLEdBQ1pDLElBQXNCLEVBSzFCLFNBQVNDLEdBQW1COWlELEVBQUsyZ0IsRUFBTS9RLEVBQVNwSixHQVcvQyxNQVZhLGVBQVRtYSxFQThCTCxTQUEwQjNnQixFQUFLNFAsRUFBU3BKLEdBQ3ZDLElBQUl1OEMsRUFBU25wRCxHQUFLLFNBQVU4QixHQUV2QkEsRUFBRXNuRCxzQkFBd0J0bkQsRUFBRXVuRCxjQUFnQnZuRCxFQUFFc25ELHNCQUNqREUsR0FBZXhuRCxHQUdoQnluRCxHQUFlem5ELEVBQUdrVSxNQUduQjVQLEVBQUksc0JBQXdCd0csR0FBTXU4QyxFQUNsQy9pRCxFQUFJMmhDLGlCQUFpQjZnQixHQUFjTyxHQUFRLEdBR3RDRixLQUVKL2tDLFNBQVM2akIsaUJBQWlCNmdCLEdBQWNZLElBQW9CLEdBQzVEdGxDLFNBQVM2akIsaUJBQWlCOGdCLEdBQWNZLElBQW9CLEdBQzVEdmxDLFNBQVM2akIsaUJBQWlCK2dCLEdBQVlZLElBQWtCLEdBQ3hEeGxDLFNBQVM2akIsaUJBQWlCZ2hCLEdBQWdCVyxJQUFrQixHQUU1RFQsSUFBc0IsR0FsRHRCVSxDQUFpQnZqRCxFQUFLNFAsRUFBU3BKLEdBRVosY0FBVG1hLEVBNEVaLFNBQXlCM2dCLEVBQUs0UCxFQUFTcEosR0FDdEMsSUFBSWc5QyxFQUFTLFNBQVU5bkQsR0FFakJBLEVBQUV1bkQsZUFBaUJ2bkQsRUFBRStuRCxzQkFBd0IsVUFBMkIsSUFBZC9uRCxFQUFFZ29ELFNBSWpFUCxHQUFlem5ELEVBQUdrVSxJQUduQjVQLEVBQUkscUJBQXVCd0csR0FBTWc5QyxFQUNqQ3hqRCxFQUFJMmhDLGlCQUFpQjhnQixHQUFjZSxHQUFRLEdBdEYxQ0csQ0FBZ0IzakQsRUFBSzRQLEVBQVNwSixHQUVYLGFBQVRtYSxHQXVGWixTQUF3QjNnQixFQUFLNFAsRUFBU3BKLEdBQ3JDLElBQUlvOUMsRUFBTyxTQUFVbG9ELEdBQ3BCeW5ELEdBQWV6bkQsRUFBR2tVLElBR25CNVAsRUFBSSxvQkFBc0J3RyxHQUFNbzlDLEVBQ2hDNWpELEVBQUkyaEMsaUJBQWlCK2dCLEdBQVlrQixHQUFNLEdBQ3ZDNWpELEVBQUkyaEMsaUJBQWlCZ2hCLEdBQWdCaUIsR0FBTSxHQTdGMUNDLENBQWU3akQsRUFBSzRQLEVBQVNwSixHQUd2QjNMLEtBNkNSLFNBQVN1b0QsR0FBbUIxbkQsR0FDM0JrbkQsR0FBVWxuRCxFQUFFb29ELFdBQWFwb0QsRUFHMUIsU0FBUzJuRCxHQUFtQjNuRCxHQUN2QmtuRCxHQUFVbG5ELEVBQUVvb0QsYUFDZmxCLEdBQVVsbkQsRUFBRW9vRCxXQUFhcG9ELEdBSTNCLFNBQVM0bkQsR0FBaUI1bkQsVUFDbEJrbkQsR0FBVWxuRCxFQUFFb29ELFdBR3BCLFNBQVNYLEdBQWV6bkQsRUFBR2tVLEdBRTFCLElBQUssSUFBSXhYLEtBRFRzRCxFQUFFcW9ELFFBQVUsR0FDRW5CLEdBQ2JsbkQsRUFBRXFvRCxRQUFRL21ELEtBQUs0bEQsR0FBVXhxRCxJQUUxQnNELEVBQUVzb0QsZUFBaUIsQ0FBQ3RvRCxHQUVwQmtVLEVBQVFsVSxHQStCVCxJQXdVSXVvRCxHQUNBQyxHQUNBQyxHQXdDQUMsR0FBaUJDLEdBbFhqQkMsR0FBY3hELEdBQVksZ0JBQWtCRyxHQUFVLGNBQWdCLGFBQ3RFc0QsR0FBWXpELEdBQVksY0FBZ0JHLEdBQVUsWUFBYyxXQUNoRXVELEdBQU8sWUF3RlBDLEdBQVlDLEdBQ2YsQ0FBQyxZQUFhLGtCQUFtQixhQUFjLGVBQWdCLGdCQU81REMsR0FBYUQsR0FDaEIsQ0FBQyxtQkFBb0IsYUFBYyxjQUFlLGdCQUFpQixpQkFJaEVFLEdBQ1kscUJBQWZELElBQW9ELGdCQUFmQSxHQUErQkEsR0FBYSxNQUFRLGdCQU0xRixTQUFTMXJELEdBQUl1TixHQUNaLE1BQXFCLGlCQUFQQSxFQUFrQnNYLFNBQVM0d0IsZUFBZWxvQyxHQUFNQSxFQU0vRCxTQUFTcStDLEdBQVM5akMsRUFBSW5CLEdBQ3JCLElBQUl2bUIsRUFBUTBuQixFQUFHbkIsTUFBTUEsSUFBV21CLEVBQUcrakMsY0FBZ0IvakMsRUFBRytqQyxhQUFhbGxDLEdBRW5FLEtBQU12bUIsR0FBbUIsU0FBVkEsSUFBcUJ5a0IsU0FBU2luQyxZQUFhLENBQ3pELElBQUl2bEMsRUFBTTFCLFNBQVNpbkMsWUFBWUMsaUJBQWlCamtDLEVBQUksTUFDcEQxbkIsRUFBUW1tQixFQUFNQSxFQUFJSSxHQUFTLEtBRTVCLE1BQWlCLFNBQVZ2bUIsRUFBbUIsS0FBT0EsRUFLbEMsU0FBUzRyRCxHQUFTQyxFQUFTQyxFQUFXNWMsR0FDckMsSUFBSXhuQixFQUFLakQsU0FBUzJDLGNBQWN5a0MsR0FNaEMsT0FMQW5rQyxFQUFHb2tDLFVBQVlBLEdBQWEsR0FFeEI1YyxHQUNIQSxFQUFVcm9CLFlBQVlhLEdBRWhCQSxFQUtSLFNBQVM5WixHQUFPOFosR0FDZixJQUFJclosRUFBU3FaLEVBQUdULFdBQ1o1WSxHQUNIQSxFQUFPNlksWUFBWVEsR0FNckIsU0FBU2xhLEdBQU1rYSxHQUNkLEtBQU9BLEVBQUdaLFlBQ1RZLEVBQUdSLFlBQVlRLEVBQUdaLFlBTXBCLFNBQVNpbEMsR0FBUXJrQyxHQUNoQixJQUFJclosRUFBU3FaLEVBQUdULFdBQ1o1WSxHQUFVQSxFQUFPMjlDLFlBQWN0a0MsR0FDbENyWixFQUFPd1ksWUFBWWEsR0FNckIsU0FBU3VrQyxHQUFPdmtDLEdBQ2YsSUFBSXJaLEVBQVNxWixFQUFHVCxXQUNaNVksR0FBVUEsRUFBT3lZLGFBQWVZLEdBQ25DclosRUFBT3VZLGFBQWFjLEVBQUlyWixFQUFPeVksWUFNakMsU0FBU29sQyxHQUFTeGtDLEVBQUlwb0IsR0FDckIsUUFBcUJrTCxJQUFqQmtkLEVBQUd5a0MsVUFDTixPQUFPemtDLEVBQUd5a0MsVUFBVTNNLFNBQVNsZ0QsR0FFOUIsSUFBSXdzRCxFQUFZTSxHQUFTMWtDLEdBQ3pCLE9BQU9va0MsRUFBVXBvRCxPQUFTLEdBQUssSUFBSTJvRCxPQUFPLFVBQVkvc0QsRUFBTyxXQUFXa00sS0FBS3NnRCxHQUs5RSxTQUFTUSxHQUFTNWtDLEVBQUlwb0IsR0FDckIsUUFBcUJrTCxJQUFqQmtkLEVBQUd5a0MsVUFFTixJQURBLElBQUlJLEVBQVUxUyxFQUFXdjZDLEdBQ2hCUCxFQUFJLEVBQUc0TSxFQUFNNGdELEVBQVE3b0QsT0FBUTNFLEVBQUk0TSxFQUFLNU0sSUFDOUMyb0IsRUFBR3lrQyxVQUFVMWpELElBQUk4akQsRUFBUXh0RCxTQUVwQixJQUFLbXRELEdBQVN4a0MsRUFBSXBvQixHQUFPLENBQy9CLElBQUl3c0QsRUFBWU0sR0FBUzFrQyxHQUN6QjhrQyxHQUFTOWtDLEdBQUtva0MsRUFBWUEsRUFBWSxJQUFNLElBQU14c0QsSUFNcEQsU0FBU210RCxHQUFZL2tDLEVBQUlwb0IsUUFDSGtMLElBQWpCa2QsRUFBR3lrQyxVQUNOemtDLEVBQUd5a0MsVUFBVXYrQyxPQUFPdE8sR0FFcEJrdEQsR0FBUzlrQyxFQUFJMGpCLEdBQU0sSUFBTWdoQixHQUFTMWtDLEdBQU0sS0FBS3JULFFBQVEsSUFBTS9VLEVBQU8sSUFBSyxPQU16RSxTQUFTa3RELEdBQVM5a0MsRUFBSXBvQixRQUNRa0wsSUFBekJrZCxFQUFHb2tDLFVBQVVZLFFBQ2hCaGxDLEVBQUdva0MsVUFBWXhzRCxFQUdmb29CLEVBQUdva0MsVUFBVVksUUFBVXB0RCxFQU16QixTQUFTOHNELEdBQVMxa0MsR0FNakIsT0FISUEsRUFBR2lsQyx1QkFDTmpsQyxFQUFLQSxFQUFHaWxDLDJCQUV1Qm5pRCxJQUF6QmtkLEVBQUdva0MsVUFBVVksUUFBd0JobEMsRUFBR29rQyxVQUFZcGtDLEVBQUdva0MsVUFBVVksUUFNekUsU0FBU0UsR0FBV2xsQyxFQUFJMW5CLEdBQ25CLFlBQWEwbkIsRUFBR25CLE1BQ25CbUIsRUFBR25CLE1BQU1zbUMsUUFBVTdzRCxFQUNULFdBQVkwbkIsRUFBR25CLE9BSzNCLFNBQXVCbUIsRUFBSTFuQixHQUMxQixJQUFJNFAsR0FBUyxFQUNUazlDLEVBQWEsbUNBR2pCLElBQ0NsOUMsRUFBUzhYLEVBQUdxbEMsUUFBUWxoRCxLQUFLaWhELEdBQ3hCLE1BQU96cUQsR0FHUixHQUFjLElBQVZyQyxFQUFlLE9BR3BCQSxFQUFRb2hCLEtBQUt1NEIsTUFBYyxJQUFSMzVDLEdBRWY0UCxHQUNIQSxFQUFPbzlDLFFBQXFCLE1BQVZodEQsRUFDbEI0UCxFQUFPcTlDLFFBQVVqdEQsR0FFakIwbkIsRUFBR25CLE1BQU0zVyxRQUFVLFdBQWFrOUMsRUFBYSxZQUFjOXNELEVBQVEsSUF2Qm5Fa3RELENBQWN4bEMsRUFBSTFuQixHQStCcEIsU0FBU3FyRCxHQUFTbmhDLEdBR2pCLElBRkEsSUFBSTNELEVBQVE5QixTQUFTaWhDLGdCQUFnQm4vQixNQUU1QnhuQixFQUFJLEVBQUdBLEVBQUltckIsRUFBTXhtQixPQUFRM0UsSUFDakMsR0FBSW1yQixFQUFNbnJCLEtBQU13bkIsRUFDZixPQUFPMkQsRUFBTW5yQixHQUdmLE9BQU8sRUFPUixTQUFTb3VELEdBQWF6bEMsRUFBSTBsQyxFQUFRbkssR0FDakMsSUFBSW9LLEVBQU1ELEdBQVUsSUFBSWpRLEVBQU0sRUFBRyxHQUVqQ3oxQixFQUFHbkIsTUFBTTZrQyxLQUNQckUsR0FDQSxhQUFlc0csRUFBSWxrRCxFQUFJLE1BQVFra0QsRUFBSXZxRCxFQUFJLE1BQ3ZDLGVBQWlCdXFELEVBQUlsa0QsRUFBSSxNQUFRa2tELEVBQUl2cUQsRUFBSSxVQUN6Q21nRCxFQUFRLFVBQVlBLEVBQVEsSUFBTSxJQU9yQyxTQUFTcUssR0FBWTVsQyxFQUFJNjJCLEdBR3hCNzJCLEVBQUc2bEMsYUFBZWhQLEVBR2Q0SSxHQUNIZ0csR0FBYXpsQyxFQUFJNjJCLElBRWpCNzJCLEVBQUduQixNQUFNaW5DLEtBQU9qUCxFQUFNcDFDLEVBQUksS0FDMUJ1ZSxFQUFHbkIsTUFBTWtuQyxJQUFNbFAsRUFBTXo3QyxFQUFJLE1BTTNCLFNBQVM0cUQsR0FBWWhtQyxHQUlwQixPQUFPQSxFQUFHNmxDLGNBQWdCLElBQUlwUSxFQUFNLEVBQUcsR0FjeEMsR0FBSSxrQkFBbUIxNEIsU0FDdEJtbUMsR0FBdUIsV0FDdEJ6cUMsR0FBR3FFLE9BQVEsY0FBZXFsQyxLQUUzQmdCLEdBQXNCLFdBQ3JCL2hCLEdBQUl0a0IsT0FBUSxjQUFlcWxDLFNBRXRCLENBQ04sSUFBSThELEdBQXFCdEMsR0FDeEIsQ0FBQyxhQUFjLG1CQUFvQixjQUFlLGdCQUFpQixpQkFFcEVULEdBQXVCLFdBQ3RCLEdBQUkrQyxHQUFvQixDQUN2QixJQUFJcG5DLEVBQVE5QixTQUFTaWhDLGdCQUFnQm4vQixNQUNyQ3VrQyxHQUFjdmtDLEVBQU1vbkMsSUFDcEJwbkMsRUFBTW9uQyxJQUFzQixTQUc5QjlDLEdBQXNCLFdBQ2pCOEMsS0FDSGxwQyxTQUFTaWhDLGdCQUFnQm4vQixNQUFNb25DLElBQXNCN0MsR0FDckRBLFFBQWN0Z0QsSUFRakIsU0FBU29qRCxLQUNSenRDLEdBQUdxRSxPQUFRLFlBQWFxbEMsSUFLekIsU0FBU2dFLEtBQ1Iva0IsR0FBSXRrQixPQUFRLFlBQWFxbEMsSUFTMUIsU0FBU2lFLEdBQWVqK0IsR0FDdkIsTUFBNkIsSUFBdEJBLEVBQVFrK0IsVUFDZGwrQixFQUFVQSxFQUFRNUksV0FFZDRJLEVBQVF0SixRQUNieW5DLEtBQ0FqRCxHQUFrQmw3QixFQUNsQm03QixHQUFnQm43QixFQUFRdEosTUFBTTBuQyxRQUM5QnArQixFQUFRdEosTUFBTTBuQyxRQUFVLE9BQ3hCOXRDLEdBQUdxRSxPQUFRLFVBQVd3cEMsS0FLdkIsU0FBU0EsS0FDSGpELEtBQ0xBLEdBQWdCeGtDLE1BQU0wbkMsUUFBVWpELEdBQ2hDRCxRQUFrQnZnRCxFQUNsQndnRCxRQUFnQnhnRCxFQUNoQnMrQixHQUFJdGtCLE9BQVEsVUFBV3dwQyxLQUt4QixTQUFTRSxHQUFtQnIrQixHQUMzQixHQUNDQSxFQUFVQSxFQUFRNUksbUJBQ1I0SSxFQUFRcytCLGFBQWdCdCtCLEVBQVF1K0IsY0FBaUJ2K0IsSUFBWXBMLFNBQVM3aEIsT0FDakYsT0FBT2l0QixFQU9SLFNBQVN3K0IsR0FBU3grQixHQUNqQixJQUFJeStCLEVBQU96K0IsRUFBUTArQix3QkFFbkIsTUFBTyxDQUNOcGxELEVBQUdtbEQsRUFBS0UsTUFBUTMrQixFQUFRcytCLGFBQWUsRUFDdkNyckQsRUFBR3dyRCxFQUFLRyxPQUFTNStCLEVBQVF1K0IsY0FBZ0IsRUFDekNNLG1CQUFvQkosR0FJdEIsSUFBSUssR0FBVSxDQUNadkQsVUFBV0EsR0FDWEUsV0FBWUEsR0FDWkMsZUFBZ0JBLEdBQ2hCM3JELElBQUtBLEdBQ0w0ckQsU0FBVUEsR0FDVm5yRCxPQUFRdXJELEdBQ1JoK0MsT0FBUUEsR0FDUkosTUFBT0EsR0FDUHUrQyxRQUFTQSxHQUNURSxPQUFRQSxHQUNSQyxTQUFVQSxHQUNWSSxTQUFVQSxHQUNWRyxZQUFhQSxHQUNiRCxTQUFVQSxHQUNWSixTQUFVQSxHQUNWUSxXQUFZQSxHQUNadkIsU0FBVUEsR0FDVjhCLGFBQWNBLEdBQ2RHLFlBQWFBLEdBQ2JJLFlBQWFBLEdBQ2I5QyxxQkFBc0JBLEdBQ3RCQyxvQkFBcUJBLEdBQ3JCK0MsaUJBQWtCQSxHQUNsQkMsZ0JBQWlCQSxHQUNqQkMsZUFBZ0JBLEdBQ2hCRSxlQUFnQkEsR0FDaEJFLG1CQUFvQkEsR0FDcEJHLFNBQVVBLElBbUJaLFNBQVNsdUMsR0FBR3haLEVBQUtrMUMsRUFBTzVxQyxFQUFJNEosR0FFM0IsR0FBcUIsaUJBQVZnaEMsRUFDVixJQUFLLElBQUl2MEIsS0FBUXUwQixFQUNoQitTLEdBQU9qb0QsRUFBSzJnQixFQUFNdTBCLEVBQU12MEIsR0FBT3JXLFFBS2hDLElBQUssSUFBSWxTLEVBQUksRUFBRzRNLEdBRmhCa3dDLEVBQVFoQyxFQUFXZ0MsSUFFU240QyxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUM1QzZ2RCxHQUFPam9ELEVBQUtrMUMsRUFBTTk4QyxHQUFJa1MsRUFBSTRKLEdBSTVCLE9BQU9yWixLQUdSLElBQUlxdEQsR0FBWSxrQkFVaEIsU0FBUy9sQixHQUFJbmlDLEVBQUtrMUMsRUFBTzVxQyxFQUFJNEosR0FFNUIsR0FBcUIsaUJBQVZnaEMsRUFDVixJQUFLLElBQUl2MEIsS0FBUXUwQixFQUNoQmlULEdBQVVub0QsRUFBSzJnQixFQUFNdTBCLEVBQU12MEIsR0FBT3JXLFFBRTdCLEdBQUk0cUMsRUFHVixJQUFLLElBQUk5OEMsRUFBSSxFQUFHNE0sR0FGaEJrd0MsRUFBUWhDLEVBQVdnQyxJQUVTbjRDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQzVDK3ZELEdBQVVub0QsRUFBS2sxQyxFQUFNOThDLEdBQUlrUyxFQUFJNEosT0FFeEIsQ0FDTixJQUFLLElBQUkrSyxLQUFLamYsRUFBSWtvRCxJQUNqQkMsR0FBVW5vRCxFQUFLaWYsRUFBR2pmLEVBQUlrb0QsSUFBV2pwQyxXQUUzQmpmLEVBQUlrb0QsSUFHWixPQUFPcnRELEtBR1IsU0FBU3V0RCxLQUVSLEdBQUluSCxHQUNILFFBQVMvQixHQUFRYSxJQUluQixJQUFJc0ksR0FBYSxDQUNoQkMsV0FBWSxZQUNaQyxXQUFZLFdBQ1pDLFFBQVMsWUFBYTNxQyxTQUFXLGNBR2xDLFNBQVNvcUMsR0FBT2pvRCxFQUFLMmdCLEVBQU1yVyxFQUFJNEosR0FDOUIsSUFBSTFOLEVBQUttYSxFQUFPd3hCLEVBQU03bkMsSUFBTzRKLEVBQVUsSUFBTWkrQixFQUFNaitCLEdBQVcsSUFFOUQsR0FBSWxVLEVBQUlrb0QsS0FBY2xvRCxFQUFJa29ELElBQVcxaEQsR0FBTyxPQUFPM0wsS0FFbkQsSUFBSStVLEVBQVUsU0FBVWxVLEdBQ3ZCLE9BQU80TyxFQUFHL1IsS0FBSzJiLEdBQVdsVSxFQUFLdEUsR0FBS21pQixPQUFPODNCLFFBR3hDOFMsRUFBa0I3NEMsRUFFbEJxeEMsSUFBcUMsSUFBMUJ0Z0MsRUFBS3RYLFFBQVEsU0FFM0J5NUMsR0FBbUI5aUQsRUFBSzJnQixFQUFNL1EsRUFBU3BKLEdBRTdCMDZDLElBQW1CLGFBQVR2Z0MsSUFBeUJ5bkMsS0E1aEIvQyxTQUE4QnBvRCxFQUFLNFAsRUFBU3BKLEdBQzNDLElBQUkvQyxFQUFNaWxELEVBQ05DLEdBQVksRUFHaEIsU0FBU0MsRUFBYWx0RCxHQUVyQixHQUFJdWxELEdBQVMsQ0FDWixJQUFLdmxELEVBQUVtdEQsVUFBYSxPQUNwQixHQUFzQixVQUFsQm50RCxFQUFFdW5ELFlBQTJCLFlBQzNCLEdBQUl2bkQsRUFBRXFvRCxRQUFRaG5ELE9BQVMsRUFDN0IsT0FHRCxJQUFJK00sRUFBTXlTLEtBQUt6UyxNQUNYZy9DLEVBQVFoL0MsR0FBT3JHLEdBQVFxRyxHQUUzQjQrQyxFQUFXaHRELEVBQUVxb0QsUUFBVXJvRCxFQUFFcW9ELFFBQVEsR0FBS3JvRCxFQUN0Q2l0RCxFQUFhRyxFQUFRLEdBQUtBLEdBZmYsSUFnQlhybEQsRUFBT3FHLEVBR1IsU0FBU2kvQyxFQUFXcnRELEdBQ25CLEdBQUlpdEQsSUFBY0QsRUFBU00sYUFBYyxDQUN4QyxHQUFJL0gsR0FBUyxDQUNaLEdBQXNCLFVBQWxCdmxELEVBQUV1bkQsWUFBMkIsT0FFakMsSUFDSWdHLEVBQU03d0QsRUFETjh3RCxFQUFXLEdBR2YsSUFBSzl3RCxLQUFLc3dELEVBQ1RPLEVBQU9QLEVBQVN0d0QsR0FDaEI4d0QsRUFBUzl3RCxHQUFLNndELEdBQVFBLEVBQUtydkQsS0FBT3F2RCxFQUFLcnZELEtBQUs4dUQsR0FBWU8sRUFFekRQLEVBQVdRLEVBRVpSLEVBQVMvbkMsS0FBTyxXQUNoQituQyxFQUFTUyxPQUFTLEVBQ2xCdjVDLEVBQVE4NEMsR0FDUmpsRCxFQUFPLE1BSVR6RCxFQUFJd2tELEdBQU9GLEdBQWM5OUMsR0FBTW9pRCxFQUMvQjVvRCxFQUFJd2tELEdBQU9ELEdBQVkvOUMsR0FBTXVpRCxFQUM3Qi9vRCxFQUFJd2tELEdBQU8sV0FBYWgrQyxHQUFNb0osRUFFOUI1UCxFQUFJMmhDLGlCQUFpQjJpQixHQUFhc0UsSUFBY2hILElBQWdCLENBQUN3SCxTQUFTLElBQzFFcHBELEVBQUkyaEMsaUJBQWlCNGlCLEdBQVd3RSxJQUFZbkgsSUFBZ0IsQ0FBQ3dILFNBQVMsSUFNdEVwcEQsRUFBSTJoQyxpQkFBaUIsV0FBWS94QixHQUFTLEdBdWV6Q3k1QyxDQUFxQnJwRCxFQUFLNFAsRUFBU3BKLEdBRXpCLHFCQUFzQnhHLEVBRW5CLGVBQVQyZ0IsR0FBa0MsY0FBVEEsR0FBaUMsVUFBVEEsR0FBOEIsZUFBVEEsRUFDekUzZ0IsRUFBSTJoQyxpQkFBaUIwbUIsR0FBVzFuQyxJQUFTQSxFQUFNL1EsSUFBU2d5QyxJQUFnQixDQUFDd0gsU0FBUyxJQUUvRCxlQUFUem9DLEdBQWtDLGVBQVRBLEdBQ25DL1EsRUFBVSxTQUFVbFUsR0FDbkJBLEVBQUlBLEdBQUttaUIsT0FBTzgzQixNQUNaMlQsR0FBaUJ0cEQsRUFBS3RFLElBQ3pCK3NELEVBQWdCL3NELElBR2xCc0UsRUFBSTJoQyxpQkFBaUIwbUIsR0FBVzFuQyxHQUFPL1EsR0FBUyxJQUdoRDVQLEVBQUkyaEMsaUJBQWlCaGhCLEVBQU04bkMsR0FBaUIsR0FHbkMsZ0JBQWlCem9ELEdBQzNCQSxFQUFJdXBELFlBQVksS0FBTzVvQyxFQUFNL1EsR0FHOUI1UCxFQUFJa29ELElBQWFsb0QsRUFBSWtvRCxLQUFjLEdBQ25DbG9ELEVBQUlrb0QsSUFBVzFoRCxHQUFNb0osRUFHdEIsU0FBU3U0QyxHQUFVbm9ELEVBQUsyZ0IsRUFBTXJXLEVBQUk0SixHQUVqQyxJQUFJMU4sRUFBS21hLEVBQU93eEIsRUFBTTduQyxJQUFPNEosRUFBVSxJQUFNaStCLEVBQU1qK0IsR0FBVyxJQUMxRHRFLEVBQVU1UCxFQUFJa29ELEtBQWNsb0QsRUFBSWtvRCxJQUFXMWhELEdBRS9DLElBQUtvSixFQUFXLE9BQU8vVSxLQUVuQm9tRCxJQUFxQyxJQUExQnRnQyxFQUFLdFgsUUFBUSxTQW5xQjdCLFNBQStCckosRUFBSzJnQixFQUFNbmEsR0FDekMsSUFBSW9KLEVBQVU1UCxFQUFJLFlBQWMyZ0IsRUFBT25hLEdBRTFCLGVBQVRtYSxFQUNIM2dCLEVBQUk0aEMsb0JBQW9CNGdCLEdBQWM1eUMsR0FBUyxHQUU1QixjQUFUK1EsRUFDVjNnQixFQUFJNGhDLG9CQUFvQjZnQixHQUFjN3lDLEdBQVMsR0FFNUIsYUFBVCtRLElBQ1YzZ0IsRUFBSTRoQyxvQkFBb0I4Z0IsR0FBWTl5QyxHQUFTLEdBQzdDNVAsRUFBSTRoQyxvQkFBb0IrZ0IsR0FBZ0IveUMsR0FBUyxJQXlwQmpENDVDLENBQXNCeHBELEVBQUsyZ0IsRUFBTW5hLEdBRXZCMDZDLElBQW1CLGFBQVR2Z0MsSUFBeUJ5bkMsS0F4Z0IvQyxTQUFpQ3BvRCxFQUFLd0csR0FDckMsSUFBSWlqRCxFQUFhenBELEVBQUl3a0QsR0FBT0YsR0FBYzk5QyxHQUN0Q2tqRCxFQUFXMXBELEVBQUl3a0QsR0FBT0QsR0FBWS85QyxHQUNsQ21qRCxFQUFXM3BELEVBQUl3a0QsR0FBTyxXQUFhaCtDLEdBRXZDeEcsRUFBSTRoQyxvQkFBb0IwaUIsR0FBYW1GLElBQVk3SCxJQUFnQixDQUFDd0gsU0FBUyxJQUMzRXBwRCxFQUFJNGhDLG9CQUFvQjJpQixHQUFXbUYsSUFBVTlILElBQWdCLENBQUN3SCxTQUFTLElBQ3ZFcHBELEVBQUk0aEMsb0JBQW9CLFdBQVkrbkIsR0FBVSxHQWtnQjdDQyxDQUF3QjVwRCxFQUFLd0csR0FFbkIsd0JBQXlCeEcsRUFFbkNBLEVBQUk0aEMsb0JBQW9CeW1CLEdBQVcxbkMsSUFBU0EsRUFBTS9RLEdBQVMsR0FFakQsZ0JBQWlCNVAsR0FDM0JBLEVBQUk2cEQsWUFBWSxLQUFPbHBDLEVBQU0vUSxHQUc5QjVQLEVBQUlrb0QsSUFBVzFoRCxHQUFNLEtBVXRCLFNBQVNzakQsR0FBZ0JwdUQsR0FXeEIsT0FUSUEsRUFBRW91RCxnQkFDTHB1RCxFQUFFb3VELGtCQUNRcHVELEVBQUVxdUQsY0FDWnJ1RCxFQUFFcXVELGNBQWNDLFVBQVcsRUFFM0J0dUQsRUFBRXN0RCxjQUFlLEVBRWxCaUIsR0FBUXZ1RCxHQUVEYixLQUtSLFNBQVNxdkQsR0FBeUJucEMsR0FFakMsT0FEQWtuQyxHQUFPbG5DLEVBQUksUUFBUytvQyxJQUNianZELEtBTVIsU0FBU3N2RCxHQUF3QnBwQyxHQUdoQyxPQUZBdkgsR0FBR3VILEVBQUksZ0NBQWlDK29DLElBQ3hDN0IsR0FBT2xuQyxFQUFJLFFBQVNxcEMsSUFDYnZ2RCxLQVFSLFNBQVNxb0QsR0FBZXhuRCxHQU12QixPQUxJQSxFQUFFd25ELGVBQ0x4bkQsRUFBRXduRCxpQkFFRnhuRCxFQUFFMnVELGFBQWMsRUFFVnh2RCxLQUtSLFNBQVN5dkQsR0FBSzV1RCxHQUdiLE9BRkF3bkQsR0FBZXhuRCxHQUNmb3VELEdBQWdCcHVELEdBQ1RiLEtBTVIsU0FBUzB2RCxHQUFpQjd1RCxFQUFHNnNDLEdBQzVCLElBQUtBLEVBQ0osT0FBTyxJQUFJaU8sRUFBTTk2QyxFQUFFOHVELFFBQVM5dUQsRUFBRSt1RCxTQUcvQixJQUFJbk8sRUFBUW9MLEdBQVNuZixHQUNqQmtlLEVBQVNuSyxFQUFNeUwsbUJBRW5CLE9BQU8sSUFBSXZSLEdBR1Q5NkMsRUFBRTh1RCxRQUFVL0QsRUFBT0ksTUFBUXZLLEVBQU05NUMsRUFBSStsQyxFQUFVbWlCLFlBQy9DaHZELEVBQUUrdUQsUUFBVWhFLEVBQU9LLEtBQU94SyxFQUFNbmdELEVBQUlvc0MsRUFBVW9pQixXQU1qRCxJQUFJQyxHQUNGMUssSUFBT0wsR0FBVSxFQUFJaGlDLE9BQU8yakMsaUJBQzdCMUIsR0FBUWppQyxPQUFPMmpDLGlCQUFtQixFQU9uQyxTQUFTcUosR0FBY252RCxHQUN0QixPQUFPLEVBQVNBLEVBQUVvdkQsWUFBYyxFQUN4QnB2RCxFQUFFcXZELFFBQTBCLElBQWhCcnZELEVBQUVzdkQsV0FBb0J0dkQsRUFBRXF2RCxPQUFTSCxHQUM3Q2x2RCxFQUFFcXZELFFBQTBCLElBQWhCcnZELEVBQUVzdkQsVUFBK0IsSUFBWHR2RCxFQUFFcXZELE9BQ3BDcnZELEVBQUVxdkQsUUFBMEIsSUFBaEJydkQsRUFBRXN2RCxVQUErQixJQUFYdHZELEVBQUVxdkQsT0FDcENydkQsRUFBRXV2RCxRQUFVdnZELEVBQUV3dkQsT0FBVSxFQUN6Qnh2RCxFQUFFeXZELFlBQWN6dkQsRUFBRW92RCxhQUFlcHZELEVBQUV5dkQsWUFBYyxFQUNoRHp2RCxFQUFFMHZELFFBQVUzd0MsS0FBS3ErQixJQUFJcDlDLEVBQUUwdkQsUUFBVSxNQUFxQixJQUFYMXZELEVBQUUwdkQsT0FDOUMxdkQsRUFBRTB2RCxPQUFTMXZELEVBQUUwdkQsUUFBVSxNQUFRLEdBQy9CLEVBR1IsSUFBSUMsR0FBYSxHQUVqQixTQUFTakIsR0FBUzF1RCxHQUVqQjJ2RCxHQUFXM3ZELEVBQUVpbEIsT0FBUSxFQUd0QixTQUFTc3BDLEdBQVF2dUQsR0FDaEIsSUFBSTBxQyxFQUFTaWxCLEdBQVczdkQsRUFBRWlsQixNQUcxQixPQURBMHFDLEdBQVczdkQsRUFBRWlsQixPQUFRLEVBQ2R5bEIsRUFJUixTQUFTa2pCLEdBQWlCdm9DLEVBQUlybEIsR0FFN0IsSUFBSTR2RCxFQUFVNXZELEVBQUU2dkQsY0FFaEIsSUFBS0QsRUFBVyxPQUFPLEVBRXZCLElBQ0MsS0FBT0EsR0FBWUEsSUFBWXZxQyxHQUM5QnVxQyxFQUFVQSxFQUFRaHJDLFdBRWxCLE1BQU9yaEIsR0FDUixPQUFPLEVBRVIsT0FBUXFzRCxJQUFZdnFDLEVBR3JCLElBQUl5cUMsR0FBVyxDQUNiaHlDLEdBQUlBLEdBQ0oyb0IsSUFBS0EsR0FDTDJuQixnQkFBaUJBLEdBQ2pCSSx5QkFBMEJBLEdBQzFCQyx3QkFBeUJBLEdBQ3pCakgsZUFBZ0JBLEdBQ2hCb0gsS0FBTUEsR0FDTkMsaUJBQWtCQSxHQUNsQk0sY0FBZUEsR0FDZlQsU0FBVUEsR0FDVkgsUUFBU0EsR0FDVFgsaUJBQWtCQSxHQUNsQnZuQixZQUFhdm9CLEdBQ2J3b0IsZUFBZ0JHLElBb0Jkc3BCLEdBQWVsVixFQUFRbHBDLE9BQU8sQ0FPakM4d0IsSUFBSyxTQUFVcGQsRUFBSTJxQyxFQUFRNW1DLEVBQVU2bUMsR0FDcEM5d0QsS0FBS3l2RCxPQUVMenZELEtBQUsrd0QsSUFBTTdxQyxFQUNYbG1CLEtBQUtneEQsYUFBYyxFQUNuQmh4RCxLQUFLaXhELFVBQVlobkMsR0FBWSxJQUM3QmpxQixLQUFLa3hELGNBQWdCLEVBQUl0eEMsS0FBS0MsSUFBSWl4QyxHQUFpQixHQUFLLElBRXhEOXdELEtBQUtteEQsVUFBWWpGLEdBQVlobUMsR0FDN0JsbUIsS0FBS294RCxRQUFVUCxFQUFPNVQsU0FBU2o5QyxLQUFLbXhELFdBQ3BDbnhELEtBQUtxeEQsWUFBYyxJQUFJM3ZDLEtBSXZCMWhCLEtBQUsyNkMsS0FBSyxTQUVWMzZDLEtBQUtzeEQsWUFLTjdCLEtBQU0sV0FDQXp2RCxLQUFLZ3hELGNBRVZoeEQsS0FBS3V4RCxPQUFNLEdBQ1h2eEQsS0FBS3VFLGNBR04rc0QsU0FBVSxXQUVUdHhELEtBQUt3eEQsUUFBVXRZLEVBQWlCbDVDLEtBQUtzeEQsU0FBVXR4RCxNQUMvQ0EsS0FBS3V4RCxTQUdOQSxNQUFPLFNBQVVwWixHQUNoQixJQUFJNVUsR0FBWSxJQUFJN2hCLEtBQVUxaEIsS0FBS3F4RCxXQUMvQnBuQyxFQUE0QixJQUFqQmpxQixLQUFLaXhELFVBRWhCMXRCLEVBQVV0WixFQUNianFCLEtBQUt5eEQsVUFBVXp4RCxLQUFLMHhELFNBQVNudUIsRUFBVXRaLEdBQVdrdUIsSUFFbERuNEMsS0FBS3l4RCxVQUFVLEdBQ2Z6eEQsS0FBS3VFLGNBSVBrdEQsVUFBVyxTQUFVRSxFQUFVeFosR0FDOUIsSUFBSTBULEVBQU03ckQsS0FBS214RCxVQUFVbHFELElBQUlqSCxLQUFLb3hELFFBQVEvVCxXQUFXc1UsSUFDakR4WixHQUNIMFQsRUFBSXBPLFNBRUxxTyxHQUFZOXJELEtBQUsrd0QsSUFBS2xGLEdBSXRCN3JELEtBQUsyNkMsS0FBSyxTQUdYcDJDLFVBQVcsV0FDVjYwQyxFQUFnQnA1QyxLQUFLd3hELFNBRXJCeHhELEtBQUtneEQsYUFBYyxFQUduQmh4RCxLQUFLMjZDLEtBQUssUUFHWCtXLFNBQVUsU0FBVWp6RCxHQUNuQixPQUFPLEVBQUltaEIsS0FBS3M0QixJQUFJLEVBQUl6NUMsRUFBR3VCLEtBQUtreEQsa0JBdUI5QjNpQyxHQUFNbXRCLEVBQVFscEMsT0FBTyxDQUV4QjBJLFFBQVMsQ0FLUjAyQyxJQUFLcE8sRUFJTDdNLFlBQVEzdEMsRUFJUjR0QyxVQUFNNXRDLEVBTU42b0QsYUFBUzdvRCxFQU1UOG9ELGFBQVM5b0QsRUFJVCtvRCxPQUFRLEdBT1JDLGVBQVdocEQsRUFLWGlwRCxjQUFVanBELEVBT1ZrcEQsZUFBZSxFQUlmQyx1QkFBd0IsRUFLeEJDLGVBQWUsRUFNZkMscUJBQXFCLEVBTXJCQyxpQkFBa0IsUUFTbEJDLFNBQVUsRUFPVkMsVUFBVyxFQUlYQyxhQUFhLEdBR2RqWixXQUFZLFNBQVU3dEMsRUFBSXVQLEdBQ3pCQSxFQUFVbzlCLEVBQVd0NEMsS0FBTWtiLEdBSTNCbGIsS0FBSzB5RCxVQUFZLEdBQ2pCMXlELEtBQUsyeUQsUUFBVSxHQUNmM3lELEtBQUs0eUQsaUJBQW1CLEdBQ3hCNXlELEtBQUs2eUQsY0FBZSxFQUVwQjd5RCxLQUFLOHlELGVBQWVubkQsR0FDcEIzTCxLQUFLK3lELGNBR0wveUQsS0FBS2d6RCxVQUFZajBELEVBQUtpQixLQUFLZ3pELFVBQVdoekQsTUFFdENBLEtBQUtpekQsY0FFRC8zQyxFQUFRODJDLFdBQ1hoeUQsS0FBS2t6RCxhQUFhaDRDLEVBQVE4MkMsZ0JBR05ocEQsSUFBakJrUyxFQUFRMDdCLE9BQ1g1MkMsS0FBS216RCxNQUFRbnpELEtBQUtvekQsV0FBV2w0QyxFQUFRMDdCLE9BR2xDMTdCLEVBQVF5N0IsYUFBMkIzdEMsSUFBakJrUyxFQUFRMDdCLE1BQzdCNTJDLEtBQUtxekQsUUFBUXpXLEVBQVMxaEMsRUFBUXk3QixRQUFTejdCLEVBQVEwN0IsS0FBTSxDQUFDcjRCLE9BQU8sSUFHOUR2ZSxLQUFLeTVDLGdCQUdMejVDLEtBQUtzekQsY0FBZ0J4SixJQUFjbkUsS0FBVWEsSUFDM0N4bUQsS0FBS2tiLFFBQVFnM0MsY0FJWGx5RCxLQUFLc3pELGdCQUNSdHpELEtBQUt1ekQsbUJBQ0w1MEMsR0FBRzNlLEtBQUt3ekQsT0FBUXpKLEdBQWdCL3BELEtBQUt5ekQsb0JBQXFCenpELE9BRzNEQSxLQUFLMHpELFdBQVcxekQsS0FBS2tiLFFBQVE2MkMsU0FTOUJzQixRQUFTLFNBQVUxYyxFQUFRQyxFQUFNMTdCLEdBUWhDLE9BTkEwN0IsT0FBZ0I1dEMsSUFBVDR0QyxFQUFxQjUyQyxLQUFLbXpELE1BQVFuekQsS0FBS296RCxXQUFXeGMsR0FDekRELEVBQVMzMkMsS0FBSzJ6RCxhQUFhL1csRUFBU2pHLEdBQVNDLEVBQU01MkMsS0FBS2tiLFFBQVE4MkMsV0FDaEU5MkMsRUFBVUEsR0FBVyxHQUVyQmxiLEtBQUs0ekQsUUFFRDV6RCxLQUFLNnpELFVBQVkzNEMsRUFBUXFELFFBQXFCLElBQVpyRCxTQUVibFMsSUFBcEJrUyxFQUFRNDRDLFVBQ1g1NEMsRUFBUTA3QixLQUFPcGtDLEVBQU8sQ0FBQ3NoRCxRQUFTNTRDLEVBQVE0NEMsU0FBVTU0QyxFQUFRMDdCLE1BQzFEMTdCLEVBQVE2NEMsSUFBTXZoRCxFQUFPLENBQUNzaEQsUUFBUzU0QyxFQUFRNDRDLFFBQVM3cEMsU0FBVS9PLEVBQVErTyxVQUFXL08sRUFBUTY0QyxNQUl6RS96RCxLQUFLbXpELFFBQVV2YyxFQUMzQjUyQyxLQUFLZzBELGtCQUFvQmgwRCxLQUFLZzBELGlCQUFpQnJkLEVBQVFDLEVBQU0xN0IsRUFBUTA3QixNQUNyRTUyQyxLQUFLaTBELGdCQUFnQnRkLEVBQVF6N0IsRUFBUTY0QyxPQUlyQzE3QixhQUFhcjRCLEtBQUtrMEQsWUFDWGwwRCxPQUtUQSxLQUFLbTBELFdBQVd4ZCxFQUFRQyxHQUVqQjUyQyxPQUtSbzBELFFBQVMsU0FBVXhkLEVBQU0xN0IsR0FDeEIsT0FBS2xiLEtBQUs2ekQsUUFJSDd6RCxLQUFLcXpELFFBQVFyekQsS0FBS2srQyxZQUFhdEgsRUFBTSxDQUFDQSxLQUFNMTdCLEtBSGxEbGIsS0FBS216RCxNQUFRdmMsRUFDTjUyQyxPQU9UcTBELE9BQVEsU0FBVXBHLEVBQU8veUMsR0FFeEIsT0FEQSt5QyxFQUFRQSxJQUFVdEksR0FBUTNsRCxLQUFLa2IsUUFBUXMzQyxVQUFZLEdBQzVDeHlELEtBQUtvMEQsUUFBUXAwRCxLQUFLbXpELE1BQVFsRixFQUFPL3lDLElBS3pDbzVDLFFBQVMsU0FBVXJHLEVBQU8veUMsR0FFekIsT0FEQSt5QyxFQUFRQSxJQUFVdEksR0FBUTNsRCxLQUFLa2IsUUFBUXMzQyxVQUFZLEdBQzVDeHlELEtBQUtvMEQsUUFBUXAwRCxLQUFLbXpELE1BQVFsRixFQUFPL3lDLElBU3pDcTVDLGNBQWUsU0FBVWpULEVBQVExSyxFQUFNMTdCLEdBQ3RDLElBQUl1bUMsRUFBUXpoRCxLQUFLdzBELGFBQWE1ZCxHQUMxQjZkLEVBQVd6MEQsS0FBS3UrQyxVQUFVcEIsU0FBUyxHQUduQ3VYLEdBRmlCcFQsYUFBa0IzRixFQUFRMkYsRUFBU3RoRCxLQUFLMjBELHVCQUF1QnJULElBRWxEckUsU0FBU3dYLEdBQVVwWCxXQUFXLEVBQUksRUFBSW9FLEdBQ3BFYSxFQUFZdGlELEtBQUs0MEQsdUJBQXVCSCxFQUFTeHRELElBQUl5dEQsSUFFekQsT0FBTzEwRCxLQUFLcXpELFFBQVEvUSxFQUFXMUwsRUFBTSxDQUFDQSxLQUFNMTdCLEtBRzdDMjVDLHFCQUFzQixTQUFVcFcsRUFBUXZqQyxHQUV2Q0EsRUFBVUEsR0FBVyxHQUNyQnVqQyxFQUFTQSxFQUFPcVcsVUFBWXJXLEVBQU9xVyxZQUFjdlksRUFBZWtDLEdBRWhFLElBQUlzVyxFQUFZaFosRUFBUTdnQyxFQUFRODVDLGdCQUFrQjk1QyxFQUFRKzVDLFNBQVcsQ0FBQyxFQUFHLElBQ3JFQyxFQUFZblosRUFBUTdnQyxFQUFRaTZDLG9CQUFzQmo2QyxFQUFRKzVDLFNBQVcsQ0FBQyxFQUFHLElBRXpFcmUsRUFBTzUyQyxLQUFLbzFELGNBQWMzVyxHQUFRLEVBQU9zVyxFQUFVOXRELElBQUlpdUQsSUFJM0QsSUFGQXRlLEVBQW1DLGlCQUFwQjE3QixFQUFRNDJDLFFBQXdCbHlDLEtBQUsrUCxJQUFJelUsRUFBUTQyQyxRQUFTbGIsR0FBUUEsS0FFcEUxb0MsSUFDWixNQUFPLENBQ055b0MsT0FBUThILEVBQU9QLFlBQ2Z0SCxLQUFNQSxHQUlSLElBQUl5ZSxFQUFnQkgsRUFBVWpZLFNBQVM4WCxHQUFXNVgsU0FBUyxHQUV2RG1ZLEVBQVV0MUQsS0FBSytOLFFBQVEwd0MsRUFBT21CLGVBQWdCaEosR0FDOUMyZSxFQUFVdjFELEtBQUsrTixRQUFRMHdDLEVBQU9vQixlQUFnQmpKLEdBR2xELE1BQU8sQ0FDTkQsT0FIWTMyQyxLQUFLK2hELFVBQVV1VCxFQUFRcnVELElBQUlzdUQsR0FBU3BZLFNBQVMsR0FBR2wyQyxJQUFJb3VELEdBQWdCemUsR0FJaEZBLEtBQU1BLElBT1I0ZSxVQUFXLFNBQVUvVyxFQUFRdmpDLEdBSTVCLEtBRkF1akMsRUFBU2xDLEVBQWVrQyxJQUVaUSxVQUNYLE1BQU0sSUFBSTN2QyxNQUFNLHlCQUdqQixJQUFJK1QsRUFBU3JqQixLQUFLNjBELHFCQUFxQnBXLEVBQVF2akMsR0FDL0MsT0FBT2xiLEtBQUtxekQsUUFBUWh3QyxFQUFPc3pCLE9BQVF0ekIsRUFBT3V6QixLQUFNMTdCLElBTWpEdTZDLFNBQVUsU0FBVXY2QyxHQUNuQixPQUFPbGIsS0FBS3cxRCxVQUFVLENBQUMsRUFBRSxJQUFLLEtBQU0sQ0FBQyxHQUFJLE1BQU90NkMsSUFLakR3NkMsTUFBTyxTQUFVL2UsRUFBUXo3QixHQUN4QixPQUFPbGIsS0FBS3F6RCxRQUFRMWMsRUFBUTMyQyxLQUFLbXpELE1BQU8sQ0FBQ1ksSUFBSzc0QyxLQUsvQ3k2QyxNQUFPLFNBQVUvSixFQUFRMXdDLEdBSXhCLEdBRkFBLEVBQVVBLEdBQVcsS0FEckIwd0MsRUFBUzdQLEVBQVE2UCxHQUFRelQsU0FHYnh3QyxJQUFNaWtELEVBQU90cUQsRUFDeEIsT0FBT3RCLEtBQUsyNkMsS0FBSyxXQUlsQixJQUF3QixJQUFwQnovQixFQUFRNDRDLFVBQXFCOXpELEtBQUt1K0MsVUFBVVAsU0FBUzROLEdBRXhELE9BREE1ckQsS0FBS20wRCxXQUFXbjBELEtBQUsraEQsVUFBVS9oRCxLQUFLK04sUUFBUS9OLEtBQUtrK0MsYUFBYWozQyxJQUFJMmtELElBQVU1ckQsS0FBSzQxRCxXQUMxRTUxRCxLQWtCUixHQWZLQSxLQUFLNjFELFdBQ1Q3MUQsS0FBSzYxRCxTQUFXLElBQUlqRixHQUVwQjV3RCxLQUFLNjFELFNBQVNsM0MsR0FBRyxDQUNoQixLQUFRM2UsS0FBSzgxRCxxQkFDYixJQUFPOTFELEtBQUsrMUQscUJBQ1YvMUQsT0FJQ2tiLEVBQVE4NkMsYUFDWmgyRCxLQUFLMjZDLEtBQUssY0FJYSxJQUFwQnovQixFQUFRNDRDLFFBQW1CLENBQzlCaEosR0FBUzlxRCxLQUFLaTJELFNBQVUsb0JBRXhCLElBQUlwRixFQUFTN3dELEtBQUtrMkQsaUJBQWlCalosU0FBUzJPLEdBQVF6VCxRQUNwRG40QyxLQUFLNjFELFNBQVN2eUIsSUFBSXRqQyxLQUFLaTJELFNBQVVwRixFQUFRMzFDLEVBQVErTyxVQUFZLElBQU0vTyxFQUFRNDFDLG9CQUUzRTl3RCxLQUFLbTJELFVBQVV2SyxHQUNmNXJELEtBQUsyNkMsS0FBSyxRQUFRQSxLQUFLLFdBR3hCLE9BQU8zNkMsTUFNUm8yRCxNQUFPLFNBQVVDLEVBQWNDLEVBQVlwN0MsR0FHMUMsSUFBd0IsS0FEeEJBLEVBQVVBLEdBQVcsSUFDVDQ0QyxVQUFzQm5PLEdBQ2pDLE9BQU8zbEQsS0FBS3F6RCxRQUFRZ0QsRUFBY0MsRUFBWXA3QyxHQUcvQ2xiLEtBQUs0ekQsUUFFTCxJQUFJbHhELEVBQU8xQyxLQUFLK04sUUFBUS9OLEtBQUtrK0MsYUFDekJ6N0MsRUFBS3pDLEtBQUsrTixRQUFRc29ELEdBQ2xCMzJCLEVBQU8xL0IsS0FBS3UrQyxVQUNaZ1ksRUFBWXYyRCxLQUFLbXpELE1BRXJCa0QsRUFBZXpaLEVBQVN5WixHQUN4QkMsT0FBNEJ0dEQsSUFBZnN0RCxFQUEyQkMsRUFBWUQsRUFFcEQsSUFBSUUsRUFBSzUyQyxLQUFLQyxJQUFJNmYsRUFBSy8zQixFQUFHKzNCLEVBQUtwK0IsR0FDM0JtMUQsRUFBS0QsRUFBS3gyRCxLQUFLdzBELGFBQWErQixFQUFXRCxHQUN2Q0ksRUFBTWowRCxFQUFHbzdDLFdBQVduN0MsSUFBVSxFQUlsQyxTQUFTckUsRUFBRWQsR0FDVixJQUlJaUMsR0FGS2kzRCxFQUFLQSxFQUFLRCxFQUFLQSxFQUxkRyxRQUdEcDVELEdBQUssRUFBSSxHQUhSbzVELE9BS3NDRCxFQUFLQSxJQUM1QyxHQUZBbjVELEVBQUlrNUQsRUFBS0QsR0FKUkcsT0FNZUQsR0FFckJFLEVBQUtoM0MsS0FBS2srQixLQUFLdCtDLEVBQUlBLEVBQUksR0FBS0EsRUFNaEMsT0FGY28zRCxFQUFLLE1BQWUsR0FBS2gzQyxLQUFLbWMsSUFBSTY2QixHQUtqRCxTQUFTQyxFQUFLNzNELEdBQUssT0FBUTRnQixLQUFLeWpDLElBQUlya0QsR0FBSzRnQixLQUFLeWpDLEtBQUtya0QsSUFBTSxFQUN6RCxTQUFTODNELEVBQUs5M0QsR0FBSyxPQUFRNGdCLEtBQUt5akMsSUFBSXJrRCxHQUFLNGdCLEtBQUt5akMsS0FBS3JrRCxJQUFNLEVBR3pELElBQUkrM0QsRUFBSzE0RCxFQUFFLEdBR1gsU0FBUzI0RCxFQUFFMTNELEdBQUssT0FBT2szRCxHQUFNTSxFQUFLQyxJQUxSRixFQUFaNzNELEVBSytCKzNELEVBekJuQyxLQXlCOEN6M0QsR0FMcEJ3M0QsRUFBSzkzRCxJQUtvQjYzRCxFQUFLRSxJQXhCdkRKLE9BbUJYLElBQWMzM0QsRUFTZCxJQUFJbWIsRUFBUXVILEtBQUt6UyxNQUNiZ29ELEdBQUs1NEQsRUFBRSxHQUFLMDRELEdBOUJOLEtBK0JOOXNDLEVBQVcvTyxFQUFRK08sU0FBVyxJQUFPL08sRUFBUStPLFNBQVcsSUFBT2d0QyxFQUFJLEdBd0J2RSxPQUhBajNELEtBQUtrM0QsWUFBVyxFQUFNaDhDLEVBQVE4NkMsYUFuQjlCLFNBQVM5aUQsSUFDUixJQUFJelUsR0FBS2lqQixLQUFLelMsTUFBUWtMLEdBQVM4UCxFQUMzQjNxQixFQVJMLFNBQWlCYixHQUFLLE9BQU8sRUFBSW1oQixLQUFLczRCLElBQUksRUFBSXo1QyxFQUFHLEtBUXhDMDRELENBQVExNEQsR0FBS3c0RCxFQUVqQng0RCxHQUFLLEdBQ1J1QixLQUFLbzNELFlBQWNsZSxFQUFpQmhtQyxFQUFPbFQsTUFFM0NBLEtBQUtxM0QsTUFDSnIzRCxLQUFLK2hELFVBQVVyL0MsRUFBS3VFLElBQUl4RSxFQUFHdzZDLFNBQVN2NkMsR0FBTTI2QyxXQUFXMlosRUFBRTEzRCxHQUFLbzNELElBQU1ILEdBQ2xFdjJELEtBQUtzM0QsYUFBYWQsRUFsQnJCLFNBQVdsM0QsR0FBSyxPQUFPazNELEdBQU1NLEVBQUtDLEdBQU1ELEVBQUtDLEVBeEJuQyxLQXdCOEN6M0QsSUFrQjlCdXNDLENBQUV2c0MsR0FBSWkzRCxHQUM3QixDQUFDSCxPQUFPLEtBR1RwMkQsS0FDRXEzRCxNQUFNaEIsRUFBY0MsR0FDcEJpQixVQUFTLElBTVA3NUQsS0FBS3NDLE1BQ0pBLE1BTVJ3M0QsWUFBYSxTQUFVL1ksRUFBUXZqQyxHQUM5QixJQUFJbUksRUFBU3JqQixLQUFLNjBELHFCQUFxQnBXLEVBQVF2akMsR0FDL0MsT0FBT2xiLEtBQUtvMkQsTUFBTS95QyxFQUFPc3pCLE9BQVF0ekIsRUFBT3V6QixLQUFNMTdCLElBSy9DZzRDLGFBQWMsU0FBVXpVLEdBR3ZCLE9BRkFBLEVBQVNsQyxFQUFla0MsSUFFWlEsV0FHRGovQyxLQUFLa2IsUUFBUTgyQyxXQUN2Qmh5RCxLQUFLc25DLElBQUksVUFBV3RuQyxLQUFLeTNELHFCQUcxQnozRCxLQUFLa2IsUUFBUTgyQyxVQUFZdlQsRUFFckJ6K0MsS0FBSzZ6RCxTQUNSN3pELEtBQUt5M0Qsc0JBR0N6M0QsS0FBSzJlLEdBQUcsVUFBVzNlLEtBQUt5M0QsdUJBWjlCejNELEtBQUtrYixRQUFRODJDLFVBQVksS0FDbEJoeUQsS0FBS3NuQyxJQUFJLFVBQVd0bkMsS0FBS3kzRCx1QkFnQmxDQyxXQUFZLFNBQVU5Z0IsR0FDckIsSUFBSStnQixFQUFVMzNELEtBQUtrYixRQUFRMjJDLFFBRzNCLE9BRkE3eEQsS0FBS2tiLFFBQVEyMkMsUUFBVWpiLEVBRW5CNTJDLEtBQUs2ekQsU0FBVzhELElBQVkvZ0IsSUFDL0I1MkMsS0FBSzI2QyxLQUFLLG9CQUVOMzZDLEtBQUs0MUQsVUFBWTUxRCxLQUFLa2IsUUFBUTIyQyxTQUMxQjd4RCxLQUFLbzBELFFBQVF4ZCxHQUlmNTJDLE1BS1I0M0QsV0FBWSxTQUFVaGhCLEdBQ3JCLElBQUkrZ0IsRUFBVTMzRCxLQUFLa2IsUUFBUTQyQyxRQUczQixPQUZBOXhELEtBQUtrYixRQUFRNDJDLFFBQVVsYixFQUVuQjUyQyxLQUFLNnpELFNBQVc4RCxJQUFZL2dCLElBQy9CNTJDLEtBQUsyNkMsS0FBSyxvQkFFTjM2QyxLQUFLNDFELFVBQVk1MUQsS0FBS2tiLFFBQVE0MkMsU0FDMUI5eEQsS0FBS28wRCxRQUFReGQsR0FJZjUyQyxNQUtSNjNELGdCQUFpQixTQUFVcFosRUFBUXZqQyxHQUNsQ2xiLEtBQUs4M0Qsa0JBQW1CLEVBQ3hCLElBQUluaEIsRUFBUzMyQyxLQUFLaytDLFlBQ2RvRSxFQUFZdGlELEtBQUsyekQsYUFBYWhkLEVBQVEzMkMsS0FBS216RCxNQUFPNVcsRUFBZWtDLElBT3JFLE9BTEs5SCxFQUFPb0gsT0FBT3VFLElBQ2xCdGlELEtBQUswMUQsTUFBTXBULEVBQVdwbkMsR0FHdkJsYixLQUFLODNELGtCQUFtQixFQUNqQjkzRCxNQVNSKzNELFVBQVcsU0FBVXpXLEVBQVFwbUMsR0FHNUIsSUFBSTY1QyxFQUFZaFosR0FGaEI3Z0MsRUFBVUEsR0FBVyxJQUVXODVDLGdCQUFrQjk1QyxFQUFRKzVDLFNBQVcsQ0FBQyxFQUFHLElBQ3JFQyxFQUFZblosRUFBUTdnQyxFQUFRaTZDLG9CQUFzQmo2QyxFQUFRKzVDLFNBQVcsQ0FBQyxFQUFHLElBQ3pFdGUsRUFBUzMyQyxLQUFLaytDLFlBQ2Q4WixFQUFjaDRELEtBQUsrTixRQUFRNG9DLEdBQzNCc2hCLEVBQWFqNEQsS0FBSytOLFFBQVF1ekMsR0FDMUI0VyxFQUFjbDRELEtBQUttNEQsaUJBQ25CQyxFQUFrQkYsRUFBWTNaLFVBQVVwQixTQUFTLEdBQ2pEa2IsRUFBZW5jLEVBQVMsQ0FBQ2djLEVBQVl2b0MsSUFBSTFvQixJQUFJOHRELEdBQVltRCxFQUFZcjRDLElBQUlvOUIsU0FBU2lZLEtBRXRGLElBQUttRCxFQUFhcmEsU0FBU2lhLEdBQWEsQ0FDdkNqNEQsS0FBSzgzRCxrQkFBbUIsRUFDeEIsSUFBSVEsRUFBT04sRUFBWS9hLFNBQVNnYixHQUM1QjNWLEVBQVl2RyxFQUFRa2MsRUFBV3R3RCxFQUFJMndELEVBQUszd0QsRUFBR3N3RCxFQUFXMzJELEVBQUlnM0QsRUFBS2gzRCxJQUUvRDIyRCxFQUFXdHdELEVBQUkwd0QsRUFBYTFvQyxJQUFJaG9CLEdBQUtzd0QsRUFBV3R3RCxFQUFJMHdELEVBQWF4NEMsSUFBSWxZLEtBQ3hFMjZDLEVBQVUzNkMsRUFBSXF3RCxFQUFZcndELEVBQUkyd0QsRUFBSzN3RCxFQUMvQjJ3RCxFQUFLM3dELEVBQUksRUFDWjI2QyxFQUFVMzZDLEdBQUt5d0QsRUFBZ0J6d0QsRUFBSW90RCxFQUFVcHRELEVBRTdDMjZDLEVBQVUzNkMsR0FBS3l3RCxFQUFnQnp3RCxFQUFJdXRELEVBQVV2dEQsSUFHM0Nzd0QsRUFBVzMyRCxFQUFJKzJELEVBQWExb0MsSUFBSXJ1QixHQUFLMjJELEVBQVczMkQsRUFBSSsyRCxFQUFheDRDLElBQUl2ZSxLQUN4RWdoRCxFQUFVaGhELEVBQUkwMkQsRUFBWTEyRCxFQUFJZzNELEVBQUtoM0QsRUFDL0JnM0QsRUFBS2gzRCxFQUFJLEVBQ1pnaEQsRUFBVWhoRCxHQUFLODJELEVBQWdCOTJELEVBQUl5ekQsRUFBVXp6RCxFQUU3Q2doRCxFQUFVaGhELEdBQUs4MkQsRUFBZ0I5MkQsRUFBSTR6RCxFQUFVNXpELEdBRy9DdEIsS0FBSzAxRCxNQUFNMTFELEtBQUsraEQsVUFBVU8sR0FBWXBuQyxHQUN0Q2xiLEtBQUs4M0Qsa0JBQW1CLEVBRXpCLE9BQU85M0QsTUFnQlJ1NEQsZUFBZ0IsU0FBVXI5QyxHQUN6QixJQUFLbGIsS0FBSzZ6RCxRQUFXLE9BQU83ekQsS0FFNUJrYixFQUFVMUksRUFBTyxDQUNoQnNoRCxTQUFTLEVBQ1RDLEtBQUssSUFDUyxJQUFaNzRDLEVBQW1CLENBQUM0NEMsU0FBUyxHQUFRNTRDLEdBRXhDLElBQUlzOUMsRUFBVXg0RCxLQUFLdStDLFVBQ25CditDLEtBQUs2eUQsY0FBZSxFQUNwQjd5RCxLQUFLeTRELFlBQWMsS0FFbkIsSUFBSUMsRUFBVTE0RCxLQUFLdStDLFVBQ2ZvYSxFQUFZSCxFQUFRcmIsU0FBUyxHQUFHaEYsUUFDaENtSyxFQUFZb1csRUFBUXZiLFNBQVMsR0FBR2hGLFFBQ2hDeVQsRUFBUytNLEVBQVUxYixTQUFTcUYsR0FFaEMsT0FBS3NKLEVBQU9qa0QsR0FBTWlrRCxFQUFPdHFELEdBRXJCNFosRUFBUTQ0QyxTQUFXNTRDLEVBQVE2NEMsSUFDOUIvekQsS0FBSzIxRCxNQUFNL0osSUFHUDF3QyxFQUFRNjRDLEtBQ1gvekQsS0FBS20yRCxVQUFVdkssR0FHaEI1ckQsS0FBSzI2QyxLQUFLLFFBRU56L0IsRUFBUTA5QyxpQkFDWHZnQyxhQUFhcjRCLEtBQUtrMEQsWUFDbEJsMEQsS0FBS2swRCxXQUFhaGpELFdBQVduUyxFQUFLaUIsS0FBSzI2QyxLQUFNMzZDLEtBQU0sV0FBWSxNQUUvREEsS0FBSzI2QyxLQUFLLFlBT0wzNkMsS0FBSzI2QyxLQUFLLFNBQVUsQ0FDMUI2ZCxRQUFTQSxFQUNURSxRQUFTQSxLQXpCMkIxNEQsTUFnQ3RDeXZELEtBQU0sV0FLTCxPQUpBenZELEtBQUtvMEQsUUFBUXAwRCxLQUFLb3pELFdBQVdwekQsS0FBS216RCxRQUM3Qm56RCxLQUFLa2IsUUFBUXEzQyxVQUNqQnZ5RCxLQUFLMjZDLEtBQUssYUFFSjM2QyxLQUFLNHpELFNBWWJpRixPQUFRLFNBQVUzOUMsR0FXakIsR0FUQUEsRUFBVWxiLEtBQUs4NEQsZUFBaUJ0bUQsRUFBTyxDQUN0Q3dDLFFBQVMsSUFDVCtqRCxPQUFPLEdBS0w3OUMsS0FFRyxnQkFBaUJvcEMsV0FLdEIsT0FKQXRrRCxLQUFLZzVELHdCQUF3QixDQUM1QnZWLEtBQU0sRUFDTjkwQyxRQUFTLCtCQUVIM08sS0FHUixJQUFJaTVELEVBQWFsNkQsRUFBS2lCLEtBQUtrNUQsMkJBQTRCbDVELE1BQ25ENkQsRUFBVTlFLEVBQUtpQixLQUFLZzVELHdCQUF5Qmg1RCxNQVFqRCxPQU5Ja2IsRUFBUTY5QyxNQUNYLzRELEtBQUttNUQsaUJBQ0c3VSxVQUFVOFUsWUFBWUMsY0FBY0osRUFBWXAxRCxFQUFTcVgsR0FFakVvcEMsVUFBVThVLFlBQVlFLG1CQUFtQkwsRUFBWXAxRCxFQUFTcVgsR0FFeERsYixNQU9SdTVELFdBQVksV0FPWCxPQU5JalYsVUFBVThVLGFBQWU5VSxVQUFVOFUsWUFBWUksWUFDbERsVixVQUFVOFUsWUFBWUksV0FBV3g1RCxLQUFLbTVELGtCQUVuQ241RCxLQUFLODRELGlCQUNSOTRELEtBQUs4NEQsZUFBZXpGLFNBQVUsR0FFeEJyekQsTUFHUmc1RCx3QkFBeUIsU0FBVXoyRCxHQUNsQyxJQUFJM0UsRUFBSTJFLEVBQU1raEQsS0FDVjkwQyxFQUFVcE0sRUFBTW9NLFVBQ0QsSUFBTi9RLEVBQVUsb0JBQ0osSUFBTkEsRUFBVSx1QkFBeUIsV0FFNUNvQyxLQUFLODRELGVBQWV6RixVQUFZcnpELEtBQUs2ekQsU0FDeEM3ekQsS0FBS3kxRCxXQU1OejFELEtBQUsyNkMsS0FBSyxnQkFBaUIsQ0FDMUI4SSxLQUFNN2xELEVBQ04rUSxRQUFTLHNCQUF3QkEsRUFBVSxPQUk3Q3VxRCwyQkFBNEIsU0FBVXJOLEdBQ3JDLElBRUl2SyxFQUFTLElBQUk5RSxFQUZQcVAsRUFBSTROLE9BQU9DLFNBQ1g3TixFQUFJNE4sT0FBT0UsV0FFakJsYixFQUFTNkMsRUFBT3BGLFNBQStCLEVBQXRCMlAsRUFBSTROLE9BQU9HLFVBQ3BDMStDLEVBQVVsYixLQUFLODRELGVBRW5CLEdBQUk1OUMsRUFBUW00QyxRQUFTLENBQ3BCLElBQUl6YyxFQUFPNTJDLEtBQUtvMUQsY0FBYzNXLEdBQzlCeitDLEtBQUtxekQsUUFBUS9SLEVBQVFwbUMsRUFBUTQyQyxRQUFVbHlDLEtBQUsrUCxJQUFJaW5CLEVBQU0xN0IsRUFBUTQyQyxTQUFXbGIsR0FHMUUsSUFBSTdyQyxFQUFPLENBQ1Z1MkMsT0FBUUEsRUFDUjdDLE9BQVFBLEVBQ1I3cEIsVUFBV2kzQixFQUFJajNCLFdBR2hCLElBQUssSUFBSXIzQixLQUFLc3VELEVBQUk0TixPQUNZLGlCQUFsQjVOLEVBQUk0TixPQUFPbDhELEtBQ3JCd04sRUFBS3hOLEdBQUtzdUQsRUFBSTROLE9BQU9sOEQsSUFPdkJ5QyxLQUFLMjZDLEtBQUssZ0JBQWlCNXZDLElBTzVCMjhCLFdBQVksU0FBVTVwQyxFQUFNKzdELEdBQzNCLElBQUtBLEVBQWdCLE9BQU83NUQsS0FFNUIsSUFBSStVLEVBQVUvVSxLQUFLbEMsR0FBUSxJQUFJKzdELEVBQWE3NUQsTUFRNUMsT0FOQUEsS0FBSzB5RCxVQUFVdndELEtBQUs0UyxHQUVoQi9VLEtBQUtrYixRQUFRcGQsSUFDaEJpWCxFQUFRK2tELFNBR0Y5NUQsTUFLUm9NLE9BQVEsV0FLUCxHQUhBcE0sS0FBS2l6RCxhQUFZLEdBQ2pCanpELEtBQUtzbkMsSUFBSSxVQUFXdG5DLEtBQUt5M0QscUJBRXJCejNELEtBQUsrNUQsZUFBaUIvNUQsS0FBS2c2RCxXQUFXemlCLFlBQ3pDLE1BQU0sSUFBSWpvQyxNQUFNLHFEQUdqQixXQUVRdFAsS0FBS2c2RCxXQUFXemlCLG1CQUNoQnYzQyxLQUFLKzVELGFBQ1gsTUFBT2w1RCxHQUVSYixLQUFLZzZELFdBQVd6aUIsaUJBQWN2dUMsRUFFOUJoSixLQUFLKzVELGtCQUFlL3dELEVBNEJyQixJQUFJekwsRUFDSixJQUFLQSxVQTFCeUJ5TCxJQUExQmhKLEtBQUttNUQsa0JBQ1JuNUQsS0FBS3U1RCxhQUdOdjVELEtBQUs0ekQsUUFFTHhuRCxHQUFPcE0sS0FBS2kyRCxVQUVSajJELEtBQUtpNkQsa0JBQ1JqNkQsS0FBS2k2RCxtQkFFRmo2RCxLQUFLazZELGlCQUNSOWdCLEVBQWdCcDVDLEtBQUtrNkQsZ0JBQ3JCbDZELEtBQUtrNkQsZUFBaUIsTUFHdkJsNkQsS0FBS202RCxpQkFFRG42RCxLQUFLNnpELFNBSVI3ekQsS0FBSzI2QyxLQUFLLFVBSUQzNkMsS0FBSzJ5RCxRQUNkM3lELEtBQUsyeUQsUUFBUXAxRCxHQUFHNk8sU0FFakIsSUFBSzdPLEtBQUt5QyxLQUFLbzZELE9BQ2RodUQsR0FBT3BNLEtBQUtvNkQsT0FBTzc4RCxJQVFwQixPQUxBeUMsS0FBSzJ5RCxRQUFVLEdBQ2YzeUQsS0FBS282RCxPQUFTLFVBQ1BwNkQsS0FBS2kyRCxnQkFDTGoyRCxLQUFLcTZELFVBRUxyNkQsTUFRUnM2RCxXQUFZLFNBQVV4OEQsRUFBTTR2QyxHQUMzQixJQUNJNnNCLEVBQU9uUSxHQUFTLE1BREosZ0JBQWtCdHNELEVBQU8sWUFBY0EsRUFBSytVLFFBQVEsT0FBUSxJQUFNLFFBQVUsSUFDdEQ2NkIsR0FBYTF0QyxLQUFLaTJELFVBS3hELE9BSEluNEQsSUFDSGtDLEtBQUtvNkQsT0FBT3Q4RCxHQUFReThELEdBRWRBLEdBT1JyYyxVQUFXLFdBR1YsT0FGQWwrQyxLQUFLdzZELGlCQUVEeDZELEtBQUt5NEQsY0FBZ0J6NEQsS0FBS3k2RCxTQUN0Qno2RCxLQUFLeTRELFlBRU56NEQsS0FBSzA2RCxtQkFBbUIxNkQsS0FBSzI2RCx5QkFLckMvRSxRQUFTLFdBQ1IsT0FBTzUxRCxLQUFLbXpELE9BS2IyQixVQUFXLFdBQ1YsSUFBSXJXLEVBQVN6K0MsS0FBS200RCxpQkFJbEIsT0FBTyxJQUFJaGMsRUFIRm44QyxLQUFLK2hELFVBQVV0RCxFQUFPTixpQkFDdEJuK0MsS0FBSytoRCxVQUFVdEQsRUFBT0wsaUJBT2hDd2MsV0FBWSxXQUNYLFlBQWdDNXhELElBQXpCaEosS0FBS2tiLFFBQVEyMkMsUUFBd0I3eEQsS0FBSzY2RCxnQkFBa0IsRUFBSTc2RCxLQUFLa2IsUUFBUTIyQyxTQUtyRmlKLFdBQVksV0FDWCxZQUFnQzl4RCxJQUF6QmhKLEtBQUtrYixRQUFRNDJDLGFBQ005b0QsSUFBeEJoSixLQUFLKzZELGVBQStCN3NELElBQVdsTyxLQUFLKzZELGVBQ3JELzZELEtBQUtrYixRQUFRNDJDLFNBUWZzRCxjQUFlLFNBQVUzVyxFQUFRdWMsRUFBUS9GLEdBQ3hDeFcsRUFBU2xDLEVBQWVrQyxHQUN4QndXLEVBQVVsWixFQUFRa1osR0FBVyxDQUFDLEVBQUcsSUFFakMsSUFBSXJlLEVBQU81MkMsS0FBSzQxRCxXQUFhLEVBQ3pCam1DLEVBQU0zdkIsS0FBSzQ2RCxhQUNYLzZDLEVBQU03ZixLQUFLODZELGFBQ1hHLEVBQUt4YyxFQUFPcUIsZUFDWm9iLEVBQUt6YyxFQUFPd0IsZUFDWnZnQixFQUFPMS9CLEtBQUt1K0MsVUFBVXRCLFNBQVNnWSxHQUMvQmtHLEVBQWFqZixFQUFTbDhDLEtBQUsrTixRQUFRbXRELEVBQUl0a0IsR0FBTzUyQyxLQUFLK04sUUFBUWt0RCxFQUFJcmtCLElBQU8ySCxVQUN0RTZjLEVBQU96VixHQUFRM2xELEtBQUtrYixRQUFRcTNDLFNBQVcsRUFDdkM4SSxFQUFTMzdCLEVBQUsvM0IsRUFBSXd6RCxFQUFXeHpELEVBQzdCMnpELEVBQVM1N0IsRUFBS3ArQixFQUFJNjVELEVBQVc3NUQsRUFDN0JtZ0QsRUFBUXVaLEVBQVNwN0MsS0FBS0MsSUFBSXc3QyxFQUFRQyxHQUFVMTdDLEtBQUsrUCxJQUFJMHJDLEVBQVFDLEdBU2pFLE9BUEExa0IsRUFBTzUyQyxLQUFLczNELGFBQWE3VixFQUFPN0ssR0FFNUJ3a0IsSUFDSHhrQixFQUFPaDNCLEtBQUt1NEIsTUFBTXZCLEdBQVF3a0IsRUFBTyxPQUFTQSxFQUFPLEtBQ2pEeGtCLEVBQU9va0IsRUFBU3A3QyxLQUFLazhCLEtBQUtsRixFQUFPd2tCLEdBQVFBLEVBQU94N0MsS0FBS2k4QixNQUFNakYsRUFBT3drQixHQUFRQSxHQUdwRXg3QyxLQUFLQyxJQUFJOFAsRUFBSy9QLEtBQUsrUCxJQUFJOVAsRUFBSysyQixLQUtwQzJILFFBQVMsV0FRUixPQVBLditDLEtBQUt1N0QsUUFBU3Y3RCxLQUFLNnlELGVBQ3ZCN3lELEtBQUt1N0QsTUFBUSxJQUFJNWYsRUFDaEIzN0MsS0FBS2c2RCxXQUFXd0IsYUFBZSxFQUMvQng3RCxLQUFLZzZELFdBQVd5QixjQUFnQixHQUVqQ3o3RCxLQUFLNnlELGNBQWUsR0FFZDd5RCxLQUFLdTdELE1BQU16ZSxTQU1uQnFiLGVBQWdCLFNBQVV4aEIsRUFBUUMsR0FDakMsSUFBSThrQixFQUFlMTdELEtBQUsyN0QsaUJBQWlCaGxCLEVBQVFDLEdBQ2pELE9BQU8sSUFBSW9GLEVBQU8wZixFQUFjQSxFQUFhejBELElBQUlqSCxLQUFLdStDLGFBU3ZEcWQsZUFBZ0IsV0FFZixPQURBNTdELEtBQUt3NkQsaUJBQ0V4NkQsS0FBSzY3RCxjQU1iQyxvQkFBcUIsU0FBVWxsQixHQUM5QixPQUFPNTJDLEtBQUtrYixRQUFRMDJDLElBQUkzUCx3QkFBNEJqNUMsSUFBVDR0QyxFQUFxQjUyQyxLQUFLNDFELFVBQVloZixJQU9sRm1sQixRQUFTLFNBQVV4QixHQUNsQixNQUF1QixpQkFBVEEsRUFBb0J2NkQsS0FBS282RCxPQUFPRyxHQUFRQSxHQU12RHlCLFNBQVUsV0FDVCxPQUFPaDhELEtBQUtvNkQsUUFLYjZCLGFBQWMsV0FDYixPQUFPajhELEtBQUtnNkQsWUFTYnhGLGFBQWMsU0FBVTBILEVBQVFDLEdBRS9CLElBQUl2SyxFQUFNNXhELEtBQUtrYixRQUFRMDJDLElBRXZCLE9BREF1SyxPQUF3Qm56RCxJQUFibXpELEVBQXlCbjhELEtBQUttekQsTUFBUWdKLEVBQzFDdkssRUFBSW5RLE1BQU15YSxHQUFVdEssRUFBSW5RLE1BQU0wYSxJQU90QzdFLGFBQWMsU0FBVTdWLEVBQU8wYSxHQUM5QixJQUFJdkssRUFBTTV4RCxLQUFLa2IsUUFBUTAyQyxJQUN2QnVLLE9BQXdCbnpELElBQWJtekQsRUFBeUJuOEQsS0FBS216RCxNQUFRZ0osRUFDakQsSUFBSXZsQixFQUFPZ2IsRUFBSWhiLEtBQUs2SyxFQUFRbVEsRUFBSW5RLE1BQU0wYSxJQUN0QyxPQUFPdDZDLE1BQU0rMEIsR0FBUTFvQyxJQUFXMG9DLEdBUWpDN29DLFFBQVMsU0FBVXV6QyxFQUFRMUssR0FFMUIsT0FEQUEsT0FBZ0I1dEMsSUFBVDR0QyxFQUFxQjUyQyxLQUFLbXpELE1BQVF2YyxFQUNsQzUyQyxLQUFLa2IsUUFBUTAyQyxJQUFJdlEsY0FBY3pFLEVBQVMwRSxHQUFTMUssSUFLekRtTCxVQUFXLFNBQVVoRixFQUFPbkcsR0FFM0IsT0FEQUEsT0FBZ0I1dEMsSUFBVDR0QyxFQUFxQjUyQyxLQUFLbXpELE1BQVF2YyxFQUNsQzUyQyxLQUFLa2IsUUFBUTAyQyxJQUFJaFEsY0FBYzdGLEVBQVFnQixHQUFRbkcsSUFNdkQ4akIsbUJBQW9CLFNBQVUzZCxHQUM3QixJQUFJd0UsRUFBaUJ4RixFQUFRZ0IsR0FBTzkxQyxJQUFJakgsS0FBSzQ3RCxrQkFDN0MsT0FBTzU3RCxLQUFLK2hELFVBQVVSLElBTXZCNmEsbUJBQW9CLFNBQVU5YSxHQUU3QixPQURxQnRoRCxLQUFLK04sUUFBUTZ1QyxFQUFTMEUsSUFBUzdELFNBQzlCUCxVQUFVbDlDLEtBQUs0N0QsbUJBU3RDOWEsV0FBWSxTQUFVUSxHQUNyQixPQUFPdGhELEtBQUtrYixRQUFRMDJDLElBQUk5USxXQUFXbEUsRUFBUzBFLEtBUzdDZSxpQkFBa0IsU0FBVWYsR0FDM0IsT0FBT3RoRCxLQUFLa2IsUUFBUTAyQyxJQUFJdlAsaUJBQWlCOUYsRUFBZStFLEtBTXpEVixTQUFVLFNBQVU2QixFQUFTQyxHQUM1QixPQUFPMWlELEtBQUtrYixRQUFRMDJDLElBQUloUixTQUFTaEUsRUFBUzZGLEdBQVU3RixFQUFTOEYsS0FNOUQyWiwyQkFBNEIsU0FBVXRmLEdBQ3JDLE9BQU9oQixFQUFRZ0IsR0FBT0UsU0FBU2o5QyxLQUFLazJELG1CQU1yQ29HLDJCQUE0QixTQUFVdmYsR0FDckMsT0FBT2hCLEVBQVFnQixHQUFPOTFDLElBQUlqSCxLQUFLazJELG1CQU1oQ3RCLHVCQUF3QixTQUFVN1gsR0FDakMsSUFBSXdmLEVBQWF2OEQsS0FBS3E4RCwyQkFBMkJ0Z0IsRUFBUWdCLElBQ3pELE9BQU8vOEMsS0FBSzA2RCxtQkFBbUI2QixJQU1oQzVILHVCQUF3QixTQUFVclQsR0FDakMsT0FBT3RoRCxLQUFLczhELDJCQUEyQnQ4RCxLQUFLbzhELG1CQUFtQnhmLEVBQVMwRSxNQU16RWtiLDJCQUE0QixTQUFVMzdELEdBQ3JDLE9BQU82dUQsR0FBaUI3dUQsRUFBR2IsS0FBS2c2RCxhQU1qQ3lDLHVCQUF3QixTQUFVNTdELEdBQ2pDLE9BQU9iLEtBQUtxOEQsMkJBQTJCcjhELEtBQUt3OEQsMkJBQTJCMzdELEtBTXhFNjdELG1CQUFvQixTQUFVNzdELEdBQzdCLE9BQU9iLEtBQUswNkQsbUJBQW1CMTZELEtBQUt5OEQsdUJBQXVCNTdELEtBTTVEaXlELGVBQWdCLFNBQVVubkQsR0FDekIsSUFBSStoQyxFQUFZMXRDLEtBQUtnNkQsV0FBYTU3RCxHQUFJdU4sR0FFdEMsSUFBSytoQyxFQUNKLE1BQU0sSUFBSXArQixNQUFNLDRCQUNWLEdBQUlvK0IsRUFBVTZKLFlBQ3BCLE1BQU0sSUFBSWpvQyxNQUFNLHlDQUdqQnFQLEdBQUcrdUIsRUFBVyxTQUFVMXRDLEtBQUsyOEQsVUFBVzM4RCxNQUN4Q0EsS0FBSys1RCxhQUFlemlCLEVBQU01SixJQUczQnFsQixZQUFhLFdBQ1osSUFBSXJsQixFQUFZMXRDLEtBQUtnNkQsV0FFckJoNkQsS0FBSzQ4RCxjQUFnQjU4RCxLQUFLa2IsUUFBUWszQyxlQUFpQnpNLEdBRW5EbUYsR0FBU3BkLEVBQVcscUJBQ2xCMlksR0FBUSxpQkFBbUIsS0FDM0JLLEdBQVMsa0JBQW9CLEtBQzdCdEMsRUFBUSxpQkFBbUIsS0FDM0JjLEdBQVMsa0JBQW9CLEtBQzdCbGxELEtBQUs0OEQsY0FBZ0IscUJBQXVCLEtBRTlDLElBQUl4dkIsRUFBVzRjLEdBQVN0YyxFQUFXLFlBRWxCLGFBQWJOLEdBQXdDLGFBQWJBLEdBQXdDLFVBQWJBLElBQ3pETSxFQUFVM29CLE1BQU1xb0IsU0FBVyxZQUc1QnB0QyxLQUFLNjhELGFBRUQ3OEQsS0FBSzg4RCxpQkFDUjk4RCxLQUFLODhELG1CQUlQRCxXQUFZLFdBQ1gsSUFBSUUsRUFBUS84RCxLQUFLbzZELE9BQVMsR0FDMUJwNkQsS0FBS2c5RCxlQUFpQixHQWN0Qmg5RCxLQUFLaTJELFNBQVdqMkQsS0FBS3M2RCxXQUFXLFVBQVd0NkQsS0FBS2c2RCxZQUNoRGxPLEdBQVk5ckQsS0FBS2kyRCxTQUFVLElBQUl0YSxFQUFNLEVBQUcsSUFJeEMzN0MsS0FBS3M2RCxXQUFXLFlBR2hCdDZELEtBQUtzNkQsV0FBVyxjQUdoQnQ2RCxLQUFLczZELFdBQVcsZUFHaEJ0NkQsS0FBS3M2RCxXQUFXLGNBR2hCdDZELEtBQUtzNkQsV0FBVyxlQUdoQnQ2RCxLQUFLczZELFdBQVcsYUFFWHQ2RCxLQUFLa2IsUUFBUW0zQyxzQkFDakJ2SCxHQUFTaVMsRUFBTUUsV0FBWSxxQkFDM0JuUyxHQUFTaVMsRUFBTUcsV0FBWSx1QkFRN0IvSSxXQUFZLFNBQVV4ZCxFQUFRQyxHQUM3QmtWLEdBQVk5ckQsS0FBS2kyRCxTQUFVLElBQUl0YSxFQUFNLEVBQUcsSUFFeEMsSUFBSXdoQixHQUFXbjlELEtBQUs2ekQsUUFDcEI3ekQsS0FBSzZ6RCxTQUFVLEVBQ2ZqZCxFQUFPNTJDLEtBQUtvekQsV0FBV3hjLEdBRXZCNTJDLEtBQUsyNkMsS0FBSyxnQkFFVixJQUFJeWlCLEVBQWNwOUQsS0FBS216RCxRQUFVdmMsRUFDakM1MkMsS0FDRWszRCxXQUFXa0csR0FBYSxHQUN4Qi9GLE1BQU0xZ0IsRUFBUUMsR0FDZDJnQixTQUFTNkYsR0FLWHA5RCxLQUFLMjZDLEtBQUssYUFLTndpQixHQUNIbjlELEtBQUsyNkMsS0FBSyxTQUladWMsV0FBWSxTQUFVa0csRUFBYXBILEdBV2xDLE9BTklvSCxHQUNIcDlELEtBQUsyNkMsS0FBSyxhQUVOcWIsR0FDSmgyRCxLQUFLMjZDLEtBQUssYUFFSjM2QyxNQUdScTNELE1BQU8sU0FBVTFnQixFQUFRQyxFQUFNN3JDLFFBQ2pCL0IsSUFBVDR0QyxJQUNIQSxFQUFPNTJDLEtBQUttekQsT0FFYixJQUFJaUssRUFBY3A5RCxLQUFLbXpELFFBQVV2YyxFQWdCakMsT0FkQTUyQyxLQUFLbXpELE1BQVF2YyxFQUNiNTJDLEtBQUt5NEQsWUFBYzloQixFQUNuQjMyQyxLQUFLNjdELGFBQWU3N0QsS0FBS3E5RCxtQkFBbUIxbUIsSUFLeEN5bUIsR0FBZ0JyeUQsR0FBUUEsRUFBS3V5RCxRQUNoQ3Q5RCxLQUFLMjZDLEtBQUssT0FBUTV2QyxHQU1aL0ssS0FBSzI2QyxLQUFLLE9BQVE1dkMsSUFHMUJ3c0QsU0FBVSxTQUFVNkYsR0FVbkIsT0FQSUEsR0FDSHA5RCxLQUFLMjZDLEtBQUssV0FNSjM2QyxLQUFLMjZDLEtBQUssWUFHbEJpWixNQUFPLFdBS04sT0FKQXhhLEVBQWdCcDVDLEtBQUtvM0QsYUFDakJwM0QsS0FBSzYxRCxVQUNSNzFELEtBQUs2MUQsU0FBU3BHLE9BRVJ6dkQsTUFHUm0yRCxVQUFXLFNBQVV2SyxHQUNwQkUsR0FBWTlyRCxLQUFLaTJELFNBQVVqMkQsS0FBS2syRCxpQkFBaUJqWixTQUFTMk8sS0FHM0QyUixhQUFjLFdBQ2IsT0FBT3Y5RCxLQUFLODZELGFBQWU5NkQsS0FBSzQ2RCxjQUdqQ25ELG9CQUFxQixXQUNmejNELEtBQUs4M0Qsa0JBQ1Q5M0QsS0FBSzYzRCxnQkFBZ0I3M0QsS0FBS2tiLFFBQVE4MkMsWUFJcEN3SSxlQUFnQixXQUNmLElBQUt4NkQsS0FBSzZ6RCxRQUNULE1BQU0sSUFBSXZrRCxNQUFNLG1DQU9sQjJqRCxZQUFhLFNBQVV1SyxHQUN0Qng5RCxLQUFLeTlELFNBQVcsR0FDaEJ6OUQsS0FBS3k5RCxTQUFTbm1CLEVBQU10M0MsS0FBS2c2RCxhQUFlaDZELEtBRXhDLElBQUkwOUQsRUFBUUYsRUFBWWwyQixHQUFNM29CLEdBNkI5QisrQyxFQUFNMTlELEtBQUtnNkQsV0FBWSxtR0FDNkNoNkQsS0FBSzI5RCxnQkFBaUIzOUQsTUFFdEZBLEtBQUtrYixRQUFRdTNDLGFBQ2hCaUwsRUFBTTE2QyxPQUFRLFNBQVVoakIsS0FBS2d6RCxVQUFXaHpELE1BR3JDMmxELElBQVMzbEQsS0FBS2tiLFFBQVFvM0MsbUJBQ3hCa0wsRUFBWXg5RCxLQUFLc25DLElBQU10bkMsS0FBSzJlLElBQUlqaEIsS0FBS3NDLEtBQU0sVUFBV0EsS0FBSzQ5RCxhQUk5RDVLLFVBQVcsV0FDVjVaLEVBQWdCcDVDLEtBQUtrNkQsZ0JBQ3JCbDZELEtBQUtrNkQsZUFBaUJoaEIsR0FDZCxXQUFjbDVDLEtBQUt1NEQsZUFBZSxDQUFDSyxpQkFBaUIsTUFBVzU0RCxPQUd4RTI4RCxVQUFXLFdBQ1YzOEQsS0FBS2c2RCxXQUFXNkQsVUFBYSxFQUM3Qjc5RCxLQUFLZzZELFdBQVc4RCxXQUFhLEdBRzlCRixXQUFZLFdBQ1gsSUFBSS9SLEVBQU03ckQsS0FBS2syRCxpQkFDWHQyQyxLQUFLQyxJQUFJRCxLQUFLcStCLElBQUk0TixFQUFJbGtELEdBQUlpWSxLQUFLcStCLElBQUk0TixFQUFJdnFELEtBQU90QixLQUFLa2IsUUFBUW8zQyxrQkFHOUR0eUQsS0FBS20wRCxXQUFXbjBELEtBQUtrK0MsWUFBYWwrQyxLQUFLNDFELFlBSXpDbUksa0JBQW1CLFNBQVVsOUQsRUFBR2lsQixHQU8vQixJQU5BLElBQ0l6QyxFQURBMjZDLEVBQVUsR0FFVkMsRUFBbUIsYUFBVG40QyxHQUFnQyxjQUFUQSxFQUNqQ294QixFQUFNcjJDLEVBQUV3aUIsUUFBVXhpQixFQUFFcTlELFdBQ3BCQyxHQUFXLEVBRVJqbkIsR0FBSyxDQUVYLElBREE3ekIsRUFBU3JqQixLQUFLeTlELFNBQVNubUIsRUFBTUosT0FDTCxVQUFUcHhCLEdBQTZCLGFBQVRBLEtBQXlCamxCLEVBQUV1OUQsWUFBY3ArRCxLQUFLcStELGdCQUFnQmg3QyxHQUFTLENBRXpHODZDLEdBQVcsRUFDWCxNQUVELEdBQUk5NkMsR0FBVUEsRUFBT3czQixRQUFRLzBCLEdBQU0sR0FBTyxDQUN6QyxHQUFJbTRDLElBQVl4UCxHQUFpQnZYLEVBQUtyMkMsR0FBTSxNQUU1QyxHQURBbTlELEVBQVE3N0QsS0FBS2toQixHQUNUNDZDLEVBQVcsTUFFaEIsR0FBSS9tQixJQUFRbDNDLEtBQUtnNkQsV0FBYyxNQUMvQjlpQixFQUFNQSxFQUFJenhCLFdBS1gsT0FIS3U0QyxFQUFROTdELFFBQVdpOEQsR0FBYUYsSUFBV3hQLEdBQWlCdlgsRUFBS3IyQyxLQUNyRW05RCxFQUFVLENBQUNoK0QsT0FFTGcrRCxHQUdSTCxnQkFBaUIsU0FBVTk4RCxHQUMxQixHQUFLYixLQUFLNnpELFVBQVd6RSxHQUFRdnVELEdBQTdCLENBRUEsSUFBSWlsQixFQUFPamxCLEVBQUVpbEIsS0FFQSxjQUFUQSxHQUFpQyxhQUFUQSxHQUFnQyxVQUFUQSxHQUE2QixZQUFUQSxHQUV0RXdtQyxHQUFlenJELEVBQUV3aUIsUUFBVXhpQixFQUFFcTlELFlBRzlCbCtELEtBQUtzK0QsY0FBY3o5RCxFQUFHaWxCLEtBR3ZCeTRDLGFBQWMsQ0FBQyxRQUFTLFdBQVksWUFBYSxXQUFZLGVBRTdERCxjQUFlLFNBQVV6OUQsRUFBR2lsQixFQUFNazRDLEdBRWpDLEdBQWUsVUFBWG45RCxFQUFFaWxCLEtBQWtCLENBTXZCLElBQUkwNEMsRUFBUWhzRCxFQUFPLEdBQUkzUixHQUN2QjI5RCxFQUFNMTRDLEtBQU8sV0FDYjlsQixLQUFLcytELGNBQWNFLEVBQU9BLEVBQU0xNEMsS0FBTWs0QyxHQUd2QyxJQUFJbjlELEVBQUVzdUQsV0FHTjZPLEdBQVdBLEdBQVcsSUFBSWw3RCxPQUFPOUMsS0FBSys5RCxrQkFBa0JsOUQsRUFBR2lsQixLQUU5QzVqQixPQUFiLENBRUEsSUFBSW1oQixFQUFTMjZDLEVBQVEsR0FDUixnQkFBVGw0QyxHQUEwQnpDLEVBQU93M0IsUUFBUS8wQixHQUFNLElBQ2xEdWlDLEdBQWV4bkQsR0FHaEIsSUFBSWtLLEVBQU8sQ0FDVm1rRCxjQUFlcnVELEdBR2hCLEdBQWUsYUFBWEEsRUFBRWlsQixNQUFrQyxZQUFYamxCLEVBQUVpbEIsTUFBaUMsVUFBWGpsQixFQUFFaWxCLEtBQWtCLENBQ3hFLElBQUkyNEMsRUFBV3A3QyxFQUFPcTdDLGFBQWVyN0MsRUFBT3M3QyxTQUFXdDdDLEVBQU9zN0MsU0FBVyxJQUN6RTV6RCxFQUFLNnpELGVBQWlCSCxFQUNyQnorRCxLQUFLMjBELHVCQUF1QnR4QyxFQUFPcTdDLGFBQWUxK0QsS0FBS3c4RCwyQkFBMkIzN0QsR0FDbkZrSyxFQUFLd3hELFdBQWF2OEQsS0FBS3E4RCwyQkFBMkJ0eEQsRUFBSzZ6RCxnQkFDdkQ3ekQsRUFBS3UyQyxPQUFTbWQsRUFBV3A3QyxFQUFPcTdDLFlBQWMxK0QsS0FBSzA2RCxtQkFBbUIzdkQsRUFBS3d4RCxZQUc1RSxJQUFLLElBQUloL0QsRUFBSSxFQUFHQSxFQUFJeWdFLEVBQVE5N0QsT0FBUTNFLElBRW5DLEdBREF5Z0UsRUFBUXpnRSxHQUFHbzlDLEtBQUs3MEIsRUFBTS9hLEdBQU0sR0FDeEJBLEVBQUtta0QsY0FBY0MsV0FDc0IsSUFBM0M2TyxFQUFRemdFLEdBQUcyZCxRQUFRMmpELHNCQUF1RSxJQUF0Q3J3RCxFQUFReE8sS0FBS3UrRCxhQUFjejRDLEdBQWlCLFNBSXBHdTRDLGdCQUFpQixTQUFVbDVELEdBRTFCLE9BREFBLEVBQU1BLEVBQUlnNUQsVUFBWWg1RCxFQUFJZzVELFNBQVNXLFVBQVkzNUQsRUFBTW5GLE1BQ3pDbStELFVBQVloNUQsRUFBSWc1RCxTQUFTWSxTQUFhLytELEtBQUtnL0QsU0FBV2gvRCxLQUFLZy9ELFFBQVFELFNBR2hGNUUsZUFBZ0IsV0FDZixJQUFLLElBQUk1OEQsRUFBSSxFQUFHNE0sRUFBTW5LLEtBQUsweUQsVUFBVXh3RCxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUNyRHlDLEtBQUsweUQsVUFBVW4xRCxHQUFHMGhFLFdBVXBCQyxVQUFXLFNBQVVoeEMsRUFBVTdVLEdBTTlCLE9BTElyWixLQUFLNnpELFFBQ1IzbEMsRUFBU3h3QixLQUFLMmIsR0FBV3JaLEtBQU0sQ0FBQ3FqQixPQUFRcmpCLE9BRXhDQSxLQUFLMmUsR0FBRyxPQUFRdVAsRUFBVTdVLEdBRXBCclosTUFNUmsyRCxlQUFnQixXQUNmLE9BQU9oSyxHQUFZbHNELEtBQUtpMkQsV0FBYSxJQUFJdGEsRUFBTSxFQUFHLElBR25EOGUsT0FBUSxXQUNQLElBQUk1TyxFQUFNN3JELEtBQUtrMkQsaUJBQ2YsT0FBT3JLLElBQVFBLEVBQUk5TixPQUFPLENBQUMsRUFBRyxLQUcvQjRkLGlCQUFrQixTQUFVaGxCLEVBQVFDLEdBSW5DLE9BSGtCRCxRQUFtQjN0QyxJQUFUNHRDLEVBQzNCNTJDLEtBQUtxOUQsbUJBQW1CMW1CLEVBQVFDLEdBQ2hDNTJDLEtBQUs0N0Qsa0JBQ2EzZSxTQUFTajlDLEtBQUtrMkQsbUJBR2xDbUgsbUJBQW9CLFNBQVUxbUIsRUFBUUMsR0FDckMsSUFBSTZkLEVBQVd6MEQsS0FBS3UrQyxVQUFVbkIsVUFBVSxHQUN4QyxPQUFPcDlDLEtBQUsrTixRQUFRNG9DLEVBQVFDLEdBQU1zRyxVQUFVdVgsR0FBVXpYLEtBQUtoOUMsS0FBS2syRCxrQkFBa0J6WSxVQUduRjBoQix1QkFBd0IsU0FBVTdkLEVBQVExSyxFQUFNRCxHQUMvQyxJQUFJeW9CLEVBQVVwL0QsS0FBS3E5RCxtQkFBbUIxbUIsRUFBUUMsR0FDOUMsT0FBTzUyQyxLQUFLK04sUUFBUXV6QyxFQUFRMUssR0FBTXNHLFVBQVVraUIsSUFHN0NDLDhCQUErQixTQUFVQyxFQUFjMW9CLEVBQU1ELEdBQzVELElBQUl5b0IsRUFBVXAvRCxLQUFLcTlELG1CQUFtQjFtQixFQUFRQyxHQUM5QyxPQUFPc0YsRUFBUyxDQUNmbDhDLEtBQUsrTixRQUFRdXhELEVBQWExZixlQUFnQmhKLEdBQU1zRyxVQUFVa2lCLEdBQzFEcC9ELEtBQUsrTixRQUFRdXhELEVBQWF4ZixlQUFnQmxKLEdBQU1zRyxVQUFVa2lCLEdBQzFEcC9ELEtBQUsrTixRQUFRdXhELEVBQWFyZixlQUFnQnJKLEdBQU1zRyxVQUFVa2lCLEdBQzFEcC9ELEtBQUsrTixRQUFRdXhELEVBQWF6ZixlQUFnQmpKLEdBQU1zRyxVQUFVa2lCLE1BSzVEekUscUJBQXNCLFdBQ3JCLE9BQU8zNkQsS0FBS3E4RCwyQkFBMkJyOEQsS0FBS3UrQyxVQUFVbkIsVUFBVSxLQUlqRW1pQixpQkFBa0IsU0FBVWplLEdBQzNCLE9BQU90aEQsS0FBS284RCxtQkFBbUI5YSxHQUFRckUsU0FBU2o5QyxLQUFLMjZELHlCQUl0RGhILGFBQWMsU0FBVWhkLEVBQVFDLEVBQU02SCxHQUVyQyxJQUFLQSxFQUFVLE9BQU85SCxFQUV0QixJQUFJNm9CLEVBQWN4L0QsS0FBSytOLFFBQVE0b0MsRUFBUUMsR0FDbkM2ZCxFQUFXejBELEtBQUt1K0MsVUFBVXBCLFNBQVMsR0FDbkNzaUIsRUFBYSxJQUFJempCLEVBQU93akIsRUFBWXZpQixTQUFTd1gsR0FBVytLLEVBQVl2NEQsSUFBSXd0RCxJQUN4RTdJLEVBQVM1ckQsS0FBSzAvRCxpQkFBaUJELEVBQVloaEIsRUFBUTdILEdBS3ZELE9BQUlnVixFQUFPelQsUUFBUTRGLE9BQU8sQ0FBQyxFQUFHLElBQ3RCcEgsRUFHRDMyQyxLQUFLK2hELFVBQVV5ZCxFQUFZdjRELElBQUkya0QsR0FBU2hWLElBSWhEK29CLGFBQWMsU0FBVS9ULEVBQVFuTixHQUMvQixJQUFLQSxFQUFVLE9BQU9tTixFQUV0QixJQUFJNlQsRUFBYXovRCxLQUFLbTRELGlCQUNsQnlILEVBQVksSUFBSTVqQixFQUFPeWpCLEVBQVc5dkMsSUFBSTFvQixJQUFJMmtELEdBQVM2VCxFQUFXNS9DLElBQUk1WSxJQUFJMmtELElBRTFFLE9BQU9BLEVBQU8za0QsSUFBSWpILEtBQUswL0QsaUJBQWlCRSxFQUFXbmhCLEtBSXBEaWhCLGlCQUFrQixTQUFVRyxFQUFVN04sRUFBV3BiLEdBQ2hELElBQUlrcEIsRUFBcUI1akIsRUFDakJsOEMsS0FBSytOLFFBQVFpa0QsRUFBVW5TLGVBQWdCakosR0FDdkM1MkMsS0FBSytOLFFBQVFpa0QsRUFBVXBTLGVBQWdCaEosSUFFM0NtcEIsRUFBWUQsRUFBbUJud0MsSUFBSXN0QixTQUFTNGlCLEVBQVNsd0MsS0FDckRxd0MsRUFBWUYsRUFBbUJqZ0QsSUFBSW85QixTQUFTNGlCLEVBQVNoZ0QsS0FLekQsT0FBTyxJQUFJODdCLEVBSEYzN0MsS0FBS2lnRSxTQUFTRixFQUFVcDRELEdBQUlxNEQsRUFBVXI0RCxHQUN0QzNILEtBQUtpZ0UsU0FBU0YsRUFBVXorRCxHQUFJMCtELEVBQVUxK0QsS0FLaEQyK0QsU0FBVSxTQUFValUsRUFBTWtVLEdBQ3pCLE9BQU9sVSxFQUFPa1UsRUFBUSxFQUNyQnRnRCxLQUFLdTRCLE1BQU02VCxFQUFPa1UsR0FBUyxFQUMzQnRnRCxLQUFLQyxJQUFJLEVBQUdELEtBQUtrOEIsS0FBS2tRLElBQVNwc0MsS0FBS0MsSUFBSSxFQUFHRCxLQUFLaThCLE1BQU1xa0IsS0FHeEQ5TSxXQUFZLFNBQVV4YyxHQUNyQixJQUFJam5CLEVBQU0zdkIsS0FBSzQ2RCxhQUNYLzZDLEVBQU03ZixLQUFLODZELGFBQ1hNLEVBQU96VixHQUFRM2xELEtBQUtrYixRQUFRcTNDLFNBQVcsRUFJM0MsT0FISTZJLElBQ0h4a0IsRUFBT2gzQixLQUFLdTRCLE1BQU12QixFQUFPd2tCLEdBQVFBLEdBRTNCeDdDLEtBQUtDLElBQUk4UCxFQUFLL1AsS0FBSytQLElBQUk5UCxFQUFLKzJCLEtBR3BDa2YscUJBQXNCLFdBQ3JCOTFELEtBQUsyNkMsS0FBSyxTQUdYb2Isb0JBQXFCLFdBQ3BCOUssR0FBWWpyRCxLQUFLaTJELFNBQVUsb0JBQzNCajJELEtBQUsyNkMsS0FBSyxZQUdYc1osZ0JBQWlCLFNBQVV0ZCxFQUFRejdCLEdBRWxDLElBQUkwd0MsRUFBUzVyRCxLQUFLdS9ELGlCQUFpQjVvQixHQUFRaUgsU0FHM0MsU0FBcUMsS0FBaEMxaUMsR0FBV0EsRUFBUTQ0QyxXQUFzQjl6RCxLQUFLdStDLFVBQVVQLFNBQVM0TixLQUV0RTVyRCxLQUFLMjFELE1BQU0vSixFQUFRMXdDLEdBRVosS0FHUnE0QyxpQkFBa0IsV0FFakIsSUFBSTRNLEVBQVFuZ0UsS0FBS3d6RCxPQUFTcEosR0FBUyxNQUFPLHVDQUMxQ3BxRCxLQUFLbzZELE9BQU9nRyxRQUFRLzZDLFlBQVk4NkMsR0FFaENuZ0UsS0FBSzJlLEdBQUcsWUFBWSxTQUFVOWQsR0FDN0IsSUFBSXV0RCxFQUFPeEUsR0FDUHZqQyxFQUFZcm1CLEtBQUt3ekQsT0FBT3p1QyxNQUFNcXBDLEdBRWxDekMsR0FBYTNyRCxLQUFLd3pELE9BQVF4ekQsS0FBSytOLFFBQVFsTixFQUFFODFDLE9BQVE5MUMsRUFBRSsxQyxNQUFPNTJDLEtBQUt3MEQsYUFBYTN6RCxFQUFFKzFDLEtBQU0sSUFHaEZ2d0IsSUFBY3JtQixLQUFLd3pELE9BQU96dUMsTUFBTXFwQyxJQUFTcHVELEtBQUtxZ0UsZ0JBQ2pEcmdFLEtBQUtzZ0UseUJBRUp0Z0UsTUFFSEEsS0FBSzJlLEdBQUcsZUFBZ0IzZSxLQUFLdWdFLGFBQWN2Z0UsTUFFM0NBLEtBQUtzNkMsSUFBSSxTQUFVdDZDLEtBQUt3Z0Usa0JBQW1CeGdFLE9BRzVDd2dFLGtCQUFtQixXQUNsQnAwRCxHQUFPcE0sS0FBS3d6RCxRQUNaeHpELEtBQUtzbkMsSUFBSSxlQUFnQnRuQyxLQUFLdWdFLGFBQWN2Z0UsYUFDckNBLEtBQUt3ekQsUUFHYitNLGFBQWMsV0FDYixJQUFJM2lFLEVBQUlvQyxLQUFLaytDLFlBQ1R1aUIsRUFBSXpnRSxLQUFLNDFELFVBQ2JqSyxHQUFhM3JELEtBQUt3ekQsT0FBUXh6RCxLQUFLK04sUUFBUW5RLEVBQUc2aUUsR0FBSXpnRSxLQUFLdzBELGFBQWFpTSxFQUFHLEtBR3BFaE4sb0JBQXFCLFNBQVU1eUQsR0FDMUJiLEtBQUtxZ0UsZ0JBQWtCeC9ELEVBQUUrOUIsYUFBYXB3QixRQUFRLGNBQWdCLEdBQ2pFeE8sS0FBS3NnRSx3QkFJUEksa0JBQW1CLFdBQ2xCLE9BQVExZ0UsS0FBS2c2RCxXQUFXMkcsdUJBQXVCLHlCQUF5QnorRCxRQUd6RTh4RCxpQkFBa0IsU0FBVXJkLEVBQVFDLEVBQU0xN0IsR0FFekMsR0FBSWxiLEtBQUtxZ0UsZUFBa0IsT0FBTyxFQUtsQyxHQUhBbmxELEVBQVVBLEdBQVcsSUFHaEJsYixLQUFLc3pELGdCQUFxQyxJQUFwQnA0QyxFQUFRNDRDLFNBQXFCOXpELEtBQUswZ0UscUJBQ3JEOWdELEtBQUtxK0IsSUFBSXJILEVBQU81MkMsS0FBS216RCxPQUFTbnpELEtBQUtrYixRQUFRaTNDLHVCQUEwQixPQUFPLEVBR3BGLElBQUkxUSxFQUFRemhELEtBQUt3MEQsYUFBYTVkLEdBQzFCZ1YsRUFBUzVyRCxLQUFLdS9ELGlCQUFpQjVvQixHQUFReUcsVUFBVSxFQUFJLEVBQUlxRSxHQUc3RCxTQUF3QixJQUFwQnZtQyxFQUFRNDRDLFVBQXFCOXpELEtBQUt1K0MsVUFBVVAsU0FBUzROLEtBRXpEMVMsR0FBaUIsV0FDaEJsNUMsS0FDS2szRCxZQUFXLEdBQU0sR0FDakIwSixhQUFhanFCLEVBQVFDLEdBQU0sS0FDOUI1MkMsTUFFSSxLQUdSNGdFLGFBQWMsU0FBVWpxQixFQUFRQyxFQUFNaXFCLEVBQVdDLEdBQzNDOWdFLEtBQUtpMkQsV0FFTjRLLElBQ0g3Z0UsS0FBS3FnRSxnQkFBaUIsRUFHdEJyZ0UsS0FBSytnRSxpQkFBbUJwcUIsRUFDeEIzMkMsS0FBS2doRSxlQUFpQnBxQixFQUV0QmtVLEdBQVM5cUQsS0FBS2kyRCxTQUFVLHNCQU16QmoyRCxLQUFLMjZDLEtBQUssV0FBWSxDQUNyQmhFLE9BQVFBLEVBQ1JDLEtBQU1BLEVBQ05rcUIsU0FBVUEsSUFJWDV2RCxXQUFXblMsRUFBS2lCLEtBQUtzZ0UscUJBQXNCdGdFLE1BQU8sT0FHbkRzZ0UscUJBQXNCLFdBQ2hCdGdFLEtBQUtxZ0UsaUJBRU5yZ0UsS0FBS2kyRCxVQUNSaEwsR0FBWWpyRCxLQUFLaTJELFNBQVUscUJBRzVCajJELEtBQUtxZ0UsZ0JBQWlCLEVBRXRCcmdFLEtBQUtxM0QsTUFBTXIzRCxLQUFLK2dFLGlCQUFrQi9nRSxLQUFLZ2hFLGdCQUd2QzluQixHQUFpQixXQUNoQmw1QyxLQUFLdTNELFVBQVMsS0FDWnYzRCxVQTJCRGloRSxHQUFVM25CLEVBQU05bUMsT0FBTyxDQUcxQjBJLFFBQVMsQ0FJUmt5QixTQUFVLFlBR1hvTSxXQUFZLFNBQVV0K0IsR0FDckJvOUIsRUFBV3Q0QyxLQUFNa2IsSUFTbEJneEMsWUFBYSxXQUNaLE9BQU9sc0QsS0FBS2tiLFFBQVFreUIsVUFLckIwZSxZQUFhLFNBQVUxZSxHQUN0QixJQUFJamlDLEVBQU1uTCxLQUFLa2hFLEtBWWYsT0FWSS8xRCxHQUNIQSxFQUFJZzJELGNBQWNuaEUsTUFHbkJBLEtBQUtrYixRQUFRa3lCLFNBQVdBLEVBRXBCamlDLEdBQ0hBLEVBQUlpMkQsV0FBV3BoRSxNQUdUQSxNQUtSaThELGFBQWMsV0FDYixPQUFPajhELEtBQUtnNkQsWUFLYmhqQixNQUFPLFNBQVU3ckMsR0FDaEJuTCxLQUFLb00sU0FDTHBNLEtBQUtraEUsS0FBTy8xRCxFQUVaLElBQUl1aUMsRUFBWTF0QyxLQUFLZzZELFdBQWFoNkQsS0FBS3FoRSxNQUFNbDJELEdBQ3pDMGdELEVBQU03ckQsS0FBS2tzRCxjQUNYb1YsRUFBU24yRCxFQUFJbzJELGdCQUFnQjFWLEdBWWpDLE9BVkFmLEdBQVNwZCxFQUFXLG9CQUVXLElBQTNCbWUsRUFBSXI5QyxRQUFRLFVBQ2Y4eUQsRUFBT2w4QyxhQUFhc29CLEVBQVc0ekIsRUFBT2g4QyxZQUV0Q2c4QyxFQUFPajhDLFlBQVlxb0IsR0FHcEIxdEMsS0FBS2toRSxLQUFLdmlELEdBQUcsU0FBVTNlLEtBQUtvTSxPQUFRcE0sTUFFN0JBLE1BS1JvTSxPQUFRLFdBQ1AsT0FBS3BNLEtBQUtraEUsTUFJVjkwRCxHQUFPcE0sS0FBS2c2RCxZQUVSaDZELEtBQUt3aEUsVUFDUnhoRSxLQUFLd2hFLFNBQVN4aEUsS0FBS2toRSxNQUdwQmxoRSxLQUFLa2hFLEtBQUs1NUIsSUFBSSxTQUFVdG5DLEtBQUtvTSxPQUFRcE0sTUFDckNBLEtBQUtraEUsS0FBTyxLQUVMbGhFLE1BWkNBLE1BZVR5aEUsY0FBZSxTQUFVNWdFLEdBRXBCYixLQUFLa2hFLE1BQVFyZ0UsR0FBS0EsRUFBRTZnRSxRQUFVLEdBQUs3Z0UsRUFBRThnRSxRQUFVLEdBQ2xEM2hFLEtBQUtraEUsS0FBS2pGLGVBQWUyRixXQUt4QkMsR0FBVSxTQUFVM21ELEdBQ3ZCLE9BQU8sSUFBSStsRCxHQUFRL2xELElBa0JwQnFULEdBQUkyckIsUUFBUSxDQUdYa25CLFdBQVksU0FBVVMsR0FFckIsT0FEQUEsRUFBUTdxQixNQUFNaDNDLE1BQ1BBLE1BS1JtaEUsY0FBZSxTQUFVVSxHQUV4QixPQURBQSxFQUFRejFELFNBQ0RwTSxNQUdSODhELGdCQUFpQixXQUNoQixJQUFJZ0YsRUFBVTloRSxLQUFLdWhFLGdCQUFrQixHQUNqQy9qRSxFQUFJLFdBQ0prd0MsRUFBWTF0QyxLQUFLK2hFLGtCQUNUM1gsR0FBUyxNQUFPNXNELEVBQUksb0JBQXFCd0MsS0FBS2c2RCxZQUUxRCxTQUFTZ0ksRUFBYUMsRUFBT0MsR0FDNUIsSUFBSTVYLEVBQVk5c0QsRUFBSXlrRSxFQUFRLElBQU16a0UsRUFBSTBrRSxFQUV0Q0osRUFBUUcsRUFBUUMsR0FBUzlYLEdBQVMsTUFBT0UsRUFBVzVjLEdBR3JEczBCLEVBQWEsTUFBTyxRQUNwQkEsRUFBYSxNQUFPLFNBQ3BCQSxFQUFhLFNBQVUsUUFDdkJBLEVBQWEsU0FBVSxVQUd4Qi9ILGlCQUFrQixXQUNqQixJQUFLLElBQUkxOEQsS0FBS3lDLEtBQUt1aEUsZ0JBQ2xCbjFELEdBQU9wTSxLQUFLdWhFLGdCQUFnQmhrRSxJQUU3QjZPLEdBQU9wTSxLQUFLK2hFLDBCQUNML2hFLEtBQUt1aEUsdUJBQ0x2aEUsS0FBSytoRSxxQkEyQ2QsSUFBSUksR0FBU2xCLEdBQVF6dUQsT0FBTyxDQUczQjBJLFFBQVMsQ0FHUmtuRCxXQUFXLEVBQ1hoMUIsU0FBVSxXQUlWaTFCLFlBQVksRUFJWkMsZ0JBQWdCLEVBS2hCQyxZQUFZLEVBUVpDLGFBQWMsU0FBVUMsRUFBUUMsRUFBUUMsRUFBT0MsR0FDOUMsT0FBT0QsRUFBUUMsR0FBUyxFQUFLQSxFQUFRRCxFQUFRLEVBQUksSUFJbkRucEIsV0FBWSxTQUFVcXBCLEVBQVlDLEVBQVU1bkQsR0FRM0MsSUFBSyxJQUFJM2QsS0FQVCs2QyxFQUFXdDRDLEtBQU1rYixHQUVqQmxiLEtBQUsraUUsb0JBQXNCLEdBQzNCL2lFLEtBQUsyeUQsUUFBVSxHQUNmM3lELEtBQUtnakUsWUFBYyxFQUNuQmhqRSxLQUFLaWpFLGdCQUFpQixFQUVSSixFQUNiN2lFLEtBQUtrakUsVUFBVUwsRUFBV3RsRSxHQUFJQSxHQUcvQixJQUFLQSxLQUFLdWxFLEVBQ1Q5aUUsS0FBS2tqRSxVQUFVSixFQUFTdmxFLEdBQUlBLEdBQUcsSUFJakM4akUsTUFBTyxTQUFVbDJELEdBQ2hCbkwsS0FBSyt5RCxjQUNML3lELEtBQUttakUsVUFFTG5qRSxLQUFLa2hFLEtBQU8vMUQsRUFDWkEsRUFBSXdULEdBQUcsVUFBVzNlLEtBQUtvakUscUJBQXNCcGpFLE1BRTdDLElBQUssSUFBSXpDLEVBQUksRUFBR0EsRUFBSXlDLEtBQUsyeUQsUUFBUXp3RCxPQUFRM0UsSUFDeEN5QyxLQUFLMnlELFFBQVFwMUQsR0FBRzY5QyxNQUFNejhCLEdBQUcsYUFBYzNlLEtBQUtxakUsZUFBZ0JyakUsTUFHN0QsT0FBT0EsS0FBS2c2RCxZQUdiaGpCLE1BQU8sU0FBVTdyQyxHQUdoQixPQUZBODFELEdBQVE5aEUsVUFBVTYzQyxNQUFNdDVDLEtBQUtzQyxLQUFNbUwsR0FFNUJuTCxLQUFLc2pFLHlCQUdiOUIsU0FBVSxXQUNUeGhFLEtBQUtraEUsS0FBSzU1QixJQUFJLFVBQVd0bkMsS0FBS29qRSxxQkFBc0JwakUsTUFFcEQsSUFBSyxJQUFJekMsRUFBSSxFQUFHQSxFQUFJeUMsS0FBSzJ5RCxRQUFRendELE9BQVEzRSxJQUN4Q3lDLEtBQUsyeUQsUUFBUXAxRCxHQUFHNjlDLE1BQU05VCxJQUFJLGFBQWN0bkMsS0FBS3FqRSxlQUFnQnJqRSxPQU0vRHVqRSxhQUFjLFNBQVVub0IsRUFBT3Q5QyxHQUU5QixPQURBa0MsS0FBS2tqRSxVQUFVOW5CLEVBQU90OUMsR0FDZGtDLEtBQVMsS0FBSUEsS0FBS21qRSxVQUFZbmpFLE1BS3ZDd2pFLFdBQVksU0FBVXBvQixFQUFPdDlDLEdBRTVCLE9BREFrQyxLQUFLa2pFLFVBQVU5bkIsRUFBT3Q5QyxHQUFNLEdBQ3BCa0MsS0FBUyxLQUFJQSxLQUFLbWpFLFVBQVluakUsTUFLdkN5akUsWUFBYSxTQUFVcm9CLEdBQ3RCQSxFQUFNOVQsSUFBSSxhQUFjdG5DLEtBQUtxakUsZUFBZ0JyakUsTUFFN0MsSUFBSW1GLEVBQU1uRixLQUFLMGpFLFVBQVVwc0IsRUFBTThELElBSS9CLE9BSElqMkMsR0FDSG5GLEtBQUsyeUQsUUFBUWxrRCxPQUFPek8sS0FBSzJ5RCxRQUFRbmtELFFBQVFySixHQUFNLEdBRXhDbkYsS0FBUyxLQUFJQSxLQUFLbWpFLFVBQVluakUsTUFLdkNnaUIsT0FBUSxXQUNQOG9DLEdBQVM5cUQsS0FBS2c2RCxXQUFZLG1DQUMxQmg2RCxLQUFLMmpFLFNBQVM1K0MsTUFBTWtvQyxPQUFTLEtBQzdCLElBQUkyVyxFQUFtQjVqRSxLQUFLa2hFLEtBQUszaUIsVUFBVWo5QyxHQUFLdEIsS0FBS2c2RCxXQUFXNkosVUFBWSxJQVE1RSxPQVBJRCxFQUFtQjVqRSxLQUFLMmpFLFNBQVNsSSxjQUNwQzNRLEdBQVM5cUQsS0FBSzJqRSxTQUFVLG9DQUN4QjNqRSxLQUFLMmpFLFNBQVM1K0MsTUFBTWtvQyxPQUFTMlcsRUFBbUIsTUFFaEQzWSxHQUFZanJELEtBQUsyakUsU0FBVSxvQ0FFNUIzakUsS0FBS29qRSx1QkFDRXBqRSxNQUtSOGpFLFNBQVUsV0FFVCxPQURBN1ksR0FBWWpyRCxLQUFLZzZELFdBQVksbUNBQ3RCaDZELE1BR1IreUQsWUFBYSxXQUNaLElBQUl6SSxFQUFZLHlCQUNaNWMsRUFBWTF0QyxLQUFLZzZELFdBQWE1UCxHQUFTLE1BQU9FLEdBQzlDOFgsRUFBWXBpRSxLQUFLa2IsUUFBUWtuRCxVQUc3QjEwQixFQUFVdm5CLGFBQWEsaUJBQWlCLEdBRXhDbXBDLEdBQXdCNWhCLEdBQ3hCMmhCLEdBQXlCM2hCLEdBRXpCLElBQUlxMkIsRUFBVS9qRSxLQUFLMmpFLFNBQVd2WixHQUFTLFVBQVdFLEVBQVksU0FFMUQ4WCxJQUNIcGlFLEtBQUtraEUsS0FBS3ZpRCxHQUFHLFFBQVMzZSxLQUFLOGpFLFNBQVU5akUsTUFFaEN5a0QsSUFDSjlsQyxHQUFHK3VCLEVBQVcsQ0FDYitmLFdBQVl6dEQsS0FBS2dpQixPQUNqQjByQyxXQUFZMXRELEtBQUs4akUsVUFDZjlqRSxPQUlMLElBQUk0bUIsRUFBTzVtQixLQUFLZ2tFLFlBQWM1WixHQUFTLElBQUtFLEVBQVksVUFBVzVjLEdBQ25FOW1CLEVBQUtJLEtBQU8sSUFDWkosRUFBS3E5QyxNQUFRLFNBRVQ1ZCxJQUNIMW5DLEdBQUdpSSxFQUFNLFFBQVM2b0MsSUFDbEI5d0MsR0FBR2lJLEVBQU0sUUFBUzVtQixLQUFLZ2lCLE9BQVFoaUIsT0FFL0IyZSxHQUFHaUksRUFBTSxRQUFTNW1CLEtBQUtnaUIsT0FBUWhpQixNQUczQm9pRSxHQUNKcGlFLEtBQUtnaUIsU0FHTmhpQixLQUFLa2tFLGdCQUFrQjlaLEdBQVMsTUFBT0UsRUFBWSxRQUFTeVosR0FDNUQvakUsS0FBS21rRSxXQUFhL1osR0FBUyxNQUFPRSxFQUFZLGFBQWN5WixHQUM1RC9qRSxLQUFLb2tFLGNBQWdCaGEsR0FBUyxNQUFPRSxFQUFZLFlBQWF5WixHQUU5RHIyQixFQUFVcm9CLFlBQVkwK0MsSUFHdkJMLFVBQVcsU0FBVS8zRCxHQUNwQixJQUFLLElBQUlwTyxFQUFJLEVBQUdBLEVBQUl5QyxLQUFLMnlELFFBQVF6d0QsT0FBUTNFLElBRXhDLEdBQUl5QyxLQUFLMnlELFFBQVFwMUQsSUFBTSs1QyxFQUFNdDNDLEtBQUsyeUQsUUFBUXAxRCxHQUFHNjlDLFNBQVd6dkMsRUFDdkQsT0FBTzNMLEtBQUsyeUQsUUFBUXAxRCxJQUt2QjJsRSxVQUFXLFNBQVU5bkIsRUFBT3Q5QyxFQUFNdW1FLEdBQzdCcmtFLEtBQUtraEUsTUFDUjlsQixFQUFNejhCLEdBQUcsYUFBYzNlLEtBQUtxakUsZUFBZ0JyakUsTUFHN0NBLEtBQUsyeUQsUUFBUXh3RCxLQUFLLENBQ2pCaTVDLE1BQU9BLEVBQ1B0OUMsS0FBTUEsRUFDTnVtRSxRQUFTQSxJQUdOcmtFLEtBQUtrYixRQUFRcW5ELFlBQ2hCdmlFLEtBQUsyeUQsUUFBUXh0QixLQUFLcG1DLEdBQUssU0FBVW9FLEVBQUczRCxHQUNuQyxPQUFPUSxLQUFLa2IsUUFBUXNuRCxhQUFhci9ELEVBQUVpNEMsTUFBTzU3QyxFQUFFNDdDLE1BQU9qNEMsRUFBRXJGLEtBQU0wQixFQUFFMUIsUUFDM0RrQyxPQUdBQSxLQUFLa2IsUUFBUW1uRCxZQUFjam5CLEVBQU1rcEIsWUFDcEN0a0UsS0FBS2dqRSxjQUNMNW5CLEVBQU1rcEIsVUFBVXRrRSxLQUFLZ2pFLGNBR3RCaGpFLEtBQUtzakUseUJBR05ILFFBQVMsV0FDUixJQUFLbmpFLEtBQUtnNkQsV0FBYyxPQUFPaDZELEtBRS9CZ00sR0FBTWhNLEtBQUtra0UsaUJBQ1hsNEQsR0FBTWhNLEtBQUtva0UsZUFFWHBrRSxLQUFLK2lFLG9CQUFzQixHQUMzQixJQUFJd0IsRUFBbUJDLEVBQWlCam5FLEVBQUc0SCxFQUFLcy9ELEVBQWtCLEVBRWxFLElBQUtsbkUsRUFBSSxFQUFHQSxFQUFJeUMsS0FBSzJ5RCxRQUFRendELE9BQVEzRSxJQUNwQzRILEVBQU1uRixLQUFLMnlELFFBQVFwMUQsR0FDbkJ5QyxLQUFLMGtFLFNBQVN2L0QsR0FDZHEvRCxFQUFrQkEsR0FBbUJyL0QsRUFBSWsvRCxRQUN6Q0UsRUFBb0JBLElBQXNCcC9ELEVBQUlrL0QsUUFDOUNJLEdBQW9CdC9ELEVBQUlrL0QsUUFBYyxFQUFKLEVBV25DLE9BUElya0UsS0FBS2tiLFFBQVFvbkQsaUJBQ2hCaUMsRUFBb0JBLEdBQXFCRSxFQUFrQixFQUMzRHprRSxLQUFLa2tFLGdCQUFnQm4vQyxNQUFNNC9DLFFBQVVKLEVBQW9CLEdBQUssUUFHL0R2a0UsS0FBS21rRSxXQUFXcC9DLE1BQU00L0MsUUFBVUgsR0FBbUJELEVBQW9CLEdBQUssT0FFckV2a0UsTUFHUnFqRSxlQUFnQixTQUFVeGlFLEdBQ3BCYixLQUFLaWpFLGdCQUNUampFLEtBQUttakUsVUFHTixJQUFJaCtELEVBQU1uRixLQUFLMGpFLFVBQVVwc0IsRUFBTXoyQyxFQUFFd2lCLFNBVzdCeUMsRUFBTzNnQixFQUFJay9ELFFBQ0YsUUFBWHhqRSxFQUFFaWxCLEtBQWlCLGFBQWUsZ0JBQ3ZCLFFBQVhqbEIsRUFBRWlsQixLQUFpQixrQkFBb0IsS0FFckNBLEdBQ0g5bEIsS0FBS2toRSxLQUFLdm1CLEtBQUs3MEIsRUFBTTNnQixJQUt2QnkvRCxvQkFBcUIsU0FBVTltRSxFQUFNK21FLEdBRXBDLElBQUlDLEVBQVkscUVBQ2RobkUsRUFBTyxLQUFPK21FLEVBQVUscUJBQXVCLElBQU0sS0FFbkRFLEVBQWdCOWhELFNBQVMyQyxjQUFjLE9BRzNDLE9BRkFtL0MsRUFBY3p1QixVQUFZd3VCLEVBRW5CQyxFQUFjei9DLFlBR3RCby9DLFNBQVUsU0FBVXYvRCxHQUNuQixJQUVJRCxFQUZBekQsRUFBUXdoQixTQUFTMkMsY0FBYyxTQUMvQmkvQyxFQUFVN2tFLEtBQUtraEUsS0FBSzhELFNBQVM3L0QsRUFBSWkyQyxPQUdqQ2oyQyxFQUFJay9ELFVBQ1BuL0QsRUFBUStkLFNBQVMyQyxjQUFjLFVBQ3pCRSxLQUFPLFdBQ2I1Z0IsRUFBTW9sRCxVQUFZLGtDQUNsQnBsRCxFQUFNKy9ELGVBQWlCSixHQUV2QjMvRCxFQUFRbEYsS0FBSzRrRSxvQkFBb0IsdUJBQXlCdHRCLEVBQU10M0MsTUFBTzZrRSxHQUd4RTdrRSxLQUFLK2lFLG9CQUFvQjVnRSxLQUFLK0MsR0FDOUJBLEVBQU1nZ0UsUUFBVTV0QixFQUFNbnlDLEVBQUlpMkMsT0FFMUJ6OEIsR0FBR3paLEVBQU8sUUFBU2xGLEtBQUttbEUsY0FBZW5sRSxNQUV2QyxJQUFJbEMsRUFBT21sQixTQUFTMkMsY0FBYyxRQUNsQzluQixFQUFLdzRDLFVBQVksSUFBTW54QyxFQUFJckgsS0FJM0IsSUFBSXNuRSxFQUFTbmlELFNBQVMyQyxjQUFjLE9BVXBDLE9BUkFua0IsRUFBTTRqQixZQUFZKy9DLEdBQ2xCQSxFQUFPLy9DLFlBQVluZ0IsR0FDbkJrZ0UsRUFBTy8vQyxZQUFZdm5CLElBRUhxSCxFQUFJay9ELFFBQVVya0UsS0FBS29rRSxjQUFnQnBrRSxLQUFLa2tFLGlCQUM5QzcrQyxZQUFZNWpCLEdBRXRCekIsS0FBS29qRSx1QkFDRTNoRSxHQUdSMGpFLGNBQWUsV0FDZCxJQUNJamdFLEVBQU9rMkMsRUFEUDVrQixFQUFTeDJCLEtBQUsraUUsb0JBRWRzQyxFQUFjLEdBQ2RDLEVBQWdCLEdBRXBCdGxFLEtBQUtpakUsZ0JBQWlCLEVBRXRCLElBQUssSUFBSTFsRSxFQUFJaTVCLEVBQU90MEIsT0FBUyxFQUFHM0UsR0FBSyxFQUFHQSxJQUN2QzJILEVBQVFzeEIsRUFBT2o1QixHQUNmNjlDLEVBQVFwN0MsS0FBSzBqRSxVQUFVeCtELEVBQU1nZ0UsU0FBUzlwQixNQUVsQ2wyQyxFQUFNMi9ELFFBQ1RRLEVBQVlsakUsS0FBS2k1QyxHQUNObDJDLEVBQU0yL0QsU0FDakJTLEVBQWNuakUsS0FBS2k1QyxHQUtyQixJQUFLNzlDLEVBQUksRUFBR0EsRUFBSStuRSxFQUFjcGpFLE9BQVEzRSxJQUNqQ3lDLEtBQUtraEUsS0FBSzhELFNBQVNNLEVBQWMvbkUsS0FDcEN5QyxLQUFLa2hFLEtBQUt1QyxZQUFZNkIsRUFBYy9uRSxJQUd0QyxJQUFLQSxFQUFJLEVBQUdBLEVBQUk4bkUsRUFBWW5qRSxPQUFRM0UsSUFDOUJ5QyxLQUFLa2hFLEtBQUs4RCxTQUFTSyxFQUFZOW5FLEtBQ25DeUMsS0FBS2toRSxLQUFLcUUsU0FBU0YsRUFBWTluRSxJQUlqQ3lDLEtBQUtpakUsZ0JBQWlCLEVBRXRCampFLEtBQUt5aEUsaUJBR04yQixxQkFBc0IsV0FNckIsSUFMQSxJQUNJbCtELEVBQ0FrMkMsRUFGQTVrQixFQUFTeDJCLEtBQUsraUUsb0JBR2Ruc0IsRUFBTzUyQyxLQUFLa2hFLEtBQUt0TCxVQUVacjRELEVBQUlpNUIsRUFBT3QwQixPQUFTLEVBQUczRSxHQUFLLEVBQUdBLElBQ3ZDMkgsRUFBUXN4QixFQUFPajVCLEdBQ2Y2OUMsRUFBUXA3QyxLQUFLMGpFLFVBQVV4K0QsRUFBTWdnRSxTQUFTOXBCLE1BQ3RDbDJDLEVBQU1zZ0UsY0FBc0N4OEQsSUFBMUJveUMsRUFBTWxnQyxRQUFRMjJDLFNBQXlCamIsRUFBT3dFLEVBQU1sZ0MsUUFBUTIyQyxjQUNsQzdvRCxJQUExQm95QyxFQUFNbGdDLFFBQVE0MkMsU0FBeUJsYixFQUFPd0UsRUFBTWxnQyxRQUFRNDJDLFNBS2hGd1Isc0JBQXVCLFdBSXRCLE9BSEl0akUsS0FBS2toRSxPQUFTbGhFLEtBQUtrYixRQUFRa25ELFdBQzlCcGlFLEtBQUtnaUIsU0FFQ2hpQixNQUdSeWxFLFFBQVMsV0FFUixPQUFPemxFLEtBQUtnaUIsVUFHYjBqRCxVQUFXLFdBRVYsT0FBTzFsRSxLQUFLOGpFLGNBb0JWNkIsR0FBTzFFLEdBQVF6dUQsT0FBTyxDQUd6QjBJLFFBQVMsQ0FDUmt5QixTQUFVLFVBSVZ3NEIsV0FBWSxJQUlaQyxZQUFhLFVBSWJDLFlBQWEsV0FJYkMsYUFBYyxZQUdmMUUsTUFBTyxTQUFVbDJELEdBQ2hCLElBQUk2NkQsRUFBVyx1QkFDWHQ0QixFQUFZMGMsR0FBUyxNQUFPNGIsRUFBVyxnQkFDdkM5cUQsRUFBVWxiLEtBQUtrYixRQVVuQixPQVJBbGIsS0FBS2ltRSxjQUFpQmptRSxLQUFLa21FLGNBQWNockQsRUFBUTBxRCxXQUFZMXFELEVBQVEycUQsWUFDN0RHLEVBQVcsTUFBUXQ0QixFQUFXMXRDLEtBQUttbUUsU0FDM0NubUUsS0FBS29tRSxlQUFpQnBtRSxLQUFLa21FLGNBQWNockQsRUFBUTRxRCxZQUFhNXFELEVBQVE2cUQsYUFDOURDLEVBQVcsT0FBUXQ0QixFQUFXMXRDLEtBQUtxbUUsVUFFM0NybUUsS0FBS3NtRSxrQkFDTG43RCxFQUFJd1QsR0FBRywyQkFBNEIzZSxLQUFLc21FLGdCQUFpQnRtRSxNQUVsRDB0QyxHQUdSOHpCLFNBQVUsU0FBVXIyRCxHQUNuQkEsRUFBSW04QixJQUFJLDJCQUE0QnRuQyxLQUFLc21FLGdCQUFpQnRtRSxPQUczRGkvRCxRQUFTLFdBR1IsT0FGQWovRCxLQUFLdW1FLFdBQVksRUFDakJ2bUUsS0FBS3NtRSxrQkFDRXRtRSxNQUdSODVELE9BQVEsV0FHUCxPQUZBOTVELEtBQUt1bUUsV0FBWSxFQUNqQnZtRSxLQUFLc21FLGtCQUNFdG1FLE1BR1JtbUUsUUFBUyxTQUFVdGxFLElBQ2JiLEtBQUt1bUUsV0FBYXZtRSxLQUFLa2hFLEtBQUsvTixNQUFRbnpELEtBQUtraEUsS0FBS3BHLGNBQ2xEOTZELEtBQUtraEUsS0FBSzdNLE9BQU9yMEQsS0FBS2toRSxLQUFLaG1ELFFBQVFzM0MsV0FBYTN4RCxFQUFFMmxFLFNBQVcsRUFBSSxLQUluRUgsU0FBVSxTQUFVeGxFLElBQ2RiLEtBQUt1bUUsV0FBYXZtRSxLQUFLa2hFLEtBQUsvTixNQUFRbnpELEtBQUtraEUsS0FBS3RHLGNBQ2xENTZELEtBQUtraEUsS0FBSzVNLFFBQVF0MEQsS0FBS2toRSxLQUFLaG1ELFFBQVFzM0MsV0FBYTN4RCxFQUFFMmxFLFNBQVcsRUFBSSxLQUlwRU4sY0FBZSxTQUFVTyxFQUFNeEMsRUFBTzNaLEVBQVc1YyxFQUFXaitCLEdBQzNELElBQUltWCxFQUFPd2pDLEdBQVMsSUFBS0UsRUFBVzVjLEdBZ0JwQyxPQWZBOW1CLEVBQUswdkIsVUFBWW13QixFQUNqQjcvQyxFQUFLSSxLQUFPLElBQ1pKLEVBQUtxOUMsTUFBUUEsRUFLYnI5QyxFQUFLVCxhQUFhLE9BQVEsVUFDMUJTLEVBQUtULGFBQWEsYUFBYzg5QyxHQUVoQzNVLEdBQXdCMW9DLEdBQ3hCakksR0FBR2lJLEVBQU0sUUFBUzZvQyxJQUNsQjl3QyxHQUFHaUksRUFBTSxRQUFTblgsRUFBSXpQLE1BQ3RCMmUsR0FBR2lJLEVBQU0sUUFBUzVtQixLQUFLeWhFLGNBQWV6aEUsTUFFL0I0bUIsR0FHUjAvQyxnQkFBaUIsV0FDaEIsSUFBSW43RCxFQUFNbkwsS0FBS2toRSxLQUNYNVcsRUFBWSxtQkFFaEJXLEdBQVlqckQsS0FBS2ltRSxjQUFlM2IsR0FDaENXLEdBQVlqckQsS0FBS29tRSxlQUFnQjliLElBRTdCdHFELEtBQUt1bUUsV0FBYXA3RCxFQUFJZ29ELFFBQVVob0QsRUFBSXl2RCxlQUN2QzlQLEdBQVM5cUQsS0FBS29tRSxlQUFnQjliLElBRTNCdHFELEtBQUt1bUUsV0FBYXA3RCxFQUFJZ29ELFFBQVVob0QsRUFBSTJ2RCxlQUN2Q2hRLEdBQVM5cUQsS0FBS2ltRSxjQUFlM2IsTUFTaEMvN0IsR0FBSTRyQixhQUFhLENBQ2hCdEQsYUFBYSxJQUdkdG9CLEdBQUk2ckIsYUFBWSxXQUNYcDZDLEtBQUtrYixRQUFRMjdCLGNBS2hCNzJDLEtBQUs2MkMsWUFBYyxJQUFJOHVCLEdBQ3ZCM2xFLEtBQUtvaEUsV0FBV3BoRSxLQUFLNjJDLGlCQU92QixJQWtCSTZ2QixHQUFRekYsR0FBUXp1RCxPQUFPLENBRzFCMEksUUFBUyxDQUNSa3lCLFNBQVUsYUFJVnU1QixTQUFVLElBSVZDLFFBQVEsRUFJUkMsVUFBVSxHQU1YeEYsTUFBTyxTQUFVbDJELEdBQ2hCLElBQ0l1aUMsRUFBWTBjLEdBQVMsTUFEVCx5QkFFWmx2QyxFQUFVbGIsS0FBS2tiLFFBT25CLE9BTEFsYixLQUFLOG1FLFdBQVc1ckQsRUFBU292Qyw2QkFBcUI1YyxHQUU5Q3ZpQyxFQUFJd1QsR0FBR3pELEVBQVE2ckQsZUFBaUIsVUFBWSxPQUFRL21FLEtBQUttakUsUUFBU25qRSxNQUNsRW1MLEVBQUkrekQsVUFBVWwvRCxLQUFLbWpFLFFBQVNuakUsTUFFckIwdEMsR0FHUjh6QixTQUFVLFNBQVVyMkQsR0FDbkJBLEVBQUltOEIsSUFBSXRuQyxLQUFLa2IsUUFBUTZyRCxlQUFpQixVQUFZLE9BQVEvbUUsS0FBS21qRSxRQUFTbmpFLE9BR3pFOG1FLFdBQVksU0FBVTVyRCxFQUFTb3ZDLEVBQVc1YyxHQUNyQ3h5QixFQUFRMHJELFNBQ1g1bUUsS0FBS2duRSxRQUFVNWMsR0FBUyxNQUFPRSxFQUFXNWMsSUFFdkN4eUIsRUFBUTJyRCxXQUNYN21FLEtBQUtpbkUsUUFBVTdjLEdBQVMsTUFBT0UsRUFBVzVjLEtBSTVDeTFCLFFBQVMsV0FDUixJQUFJaDRELEVBQU1uTCxLQUFLa2hFLEtBQ1g1L0QsRUFBSTZKLEVBQUlvekMsVUFBVWo5QyxFQUFJLEVBRXRCNGxFLEVBQVkvN0QsRUFBSXkxQyxTQUNuQnoxQyxFQUFJeXBELHVCQUF1QixDQUFDLEVBQUd0ekQsSUFDL0I2SixFQUFJeXBELHVCQUF1QixDQUFDNTBELEtBQUtrYixRQUFReXJELFNBQVVybEUsS0FFcER0QixLQUFLbW5FLGNBQWNELElBR3BCQyxjQUFlLFNBQVVELEdBQ3BCbG5FLEtBQUtrYixRQUFRMHJELFFBQVVNLEdBQzFCbG5FLEtBQUtvbkUsY0FBY0YsR0FFaEJsbkUsS0FBS2tiLFFBQVEyckQsVUFBWUssR0FDNUJsbkUsS0FBS3FuRSxnQkFBZ0JILElBSXZCRSxjQUFlLFNBQVVGLEdBQ3hCLElBQUlJLEVBQVN0bkUsS0FBS3VuRSxhQUFhTCxHQUMzQnpsRSxFQUFRNmxFLEVBQVMsSUFBT0EsRUFBUyxLQUFRQSxFQUFTLElBQVEsTUFFOUR0bkUsS0FBS3duRSxhQUFheG5FLEtBQUtnbkUsUUFBU3ZsRSxFQUFPNmxFLEVBQVNKLElBR2pERyxnQkFBaUIsU0FBVUgsR0FDMUIsSUFDSU8sRUFBVUMsRUFBT0MsRUFEakJDLEVBQXNCLFVBQVpWLEVBR1ZVLEVBQVUsTUFDYkgsRUFBV0csRUFBVSxLQUNyQkYsRUFBUTFuRSxLQUFLdW5FLGFBQWFFLEdBQzFCem5FLEtBQUt3bkUsYUFBYXhuRSxLQUFLaW5FLFFBQVNTLEVBQVEsTUFBT0EsRUFBUUQsS0FHdkRFLEVBQU8zbkUsS0FBS3VuRSxhQUFhSyxHQUN6QjVuRSxLQUFLd25FLGFBQWF4bkUsS0FBS2luRSxRQUFTVSxFQUFPLE1BQU9BLEVBQU9DLEtBSXZESixhQUFjLFNBQVUvbEIsRUFBT29tQixFQUFNQyxHQUNwQ3JtQixFQUFNMThCLE1BQU1pb0MsTUFBUXB0QyxLQUFLdTRCLE1BQU1uNEMsS0FBS2tiLFFBQVF5ckQsU0FBV21CLEdBQVMsS0FDaEVybUIsRUFBTW5MLFVBQVl1eEIsR0FHbkJOLGFBQWMsU0FBVXZ2QixHQUN2QixJQUFJK3ZCLEVBQVFub0QsS0FBS3M0QixJQUFJLElBQUt0NEIsS0FBS2k4QixNQUFNN0QsR0FBTyxJQUFJOTFDLE9BQVMsR0FDckRyRSxFQUFJbTZDLEVBQU0rdkIsRUFPZCxPQUFPQSxHQUxQbHFFLEVBQUlBLEdBQUssR0FBSyxHQUNWQSxHQUFLLEVBQUksRUFDVEEsR0FBSyxFQUFJLEVBQ1RBLEdBQUssRUFBSSxFQUFJLE1BcUJmbXFFLEdBQWMvRyxHQUFRenVELE9BQU8sQ0FHaEMwSSxRQUFTLENBQ1JreUIsU0FBVSxjQUlWNjZCLE9BQVEseUZBR1R6dUIsV0FBWSxTQUFVdCtCLEdBQ3JCbzlCLEVBQVd0NEMsS0FBTWtiLEdBRWpCbGIsS0FBS2tvRSxjQUFnQixJQUd0QjdHLE1BQU8sU0FBVWwyRCxHQU1oQixJQUFLLElBQUk1TixLQUxUNE4sRUFBSWc5RCxtQkFBcUJub0UsS0FDekJBLEtBQUtnNkQsV0FBYTVQLEdBQVMsTUFBTywrQkFDbENrRixHQUF3QnR2RCxLQUFLZzZELFlBR2Y3dUQsRUFBSXduRCxRQUNieG5ELEVBQUl3bkQsUUFBUXAxRCxHQUFHNnFFLGdCQUNsQnBvRSxLQUFLcW9FLGVBQWVsOUQsRUFBSXduRCxRQUFRcDFELEdBQUc2cUUsa0JBTXJDLE9BRkFwb0UsS0FBS21qRSxVQUVFbmpFLEtBQUtnNkQsWUFLYnNPLFVBQVcsU0FBVUwsR0FHcEIsT0FGQWpvRSxLQUFLa2IsUUFBUStzRCxPQUFTQSxFQUN0QmpvRSxLQUFLbWpFLFVBQ0VuakUsTUFLUnFvRSxlQUFnQixTQUFVUixHQUN6QixPQUFLQSxHQUVBN25FLEtBQUtrb0UsY0FBY0wsS0FDdkI3bkUsS0FBS2tvRSxjQUFjTCxHQUFRLEdBRTVCN25FLEtBQUtrb0UsY0FBY0wsS0FFbkI3bkUsS0FBS21qRSxVQUVFbmpFLE1BVGFBLE1BY3JCdW9FLGtCQUFtQixTQUFVVixHQUM1QixPQUFLQSxHQUVEN25FLEtBQUtrb0UsY0FBY0wsS0FDdEI3bkUsS0FBS2tvRSxjQUFjTCxLQUNuQjduRSxLQUFLbWpFLFdBR0NuakUsTUFQYUEsTUFVckJtakUsUUFBUyxXQUNSLEdBQUtuakUsS0FBS2toRSxLQUFWLENBRUEsSUFBSXNILEVBQVUsR0FFZCxJQUFLLElBQUlqckUsS0FBS3lDLEtBQUtrb0UsY0FDZGxvRSxLQUFLa29FLGNBQWMzcUUsSUFDdEJpckUsRUFBUXJtRSxLQUFLNUUsR0FJZixJQUFJa3JFLEVBQW1CLEdBRW5Cem9FLEtBQUtrYixRQUFRK3NELFFBQ2hCUSxFQUFpQnRtRSxLQUFLbkMsS0FBS2tiLFFBQVErc0QsUUFFaENPLEVBQVF0bUUsUUFDWHVtRSxFQUFpQnRtRSxLQUFLcW1FLEVBQVFuOUQsS0FBSyxPQUdwQ3JMLEtBQUtnNkQsV0FBVzFqQixVQUFZbXlCLEVBQWlCcDlELEtBQUssV0FRcERrakIsR0FBSTRyQixhQUFhLENBQ2hCZ3VCLG9CQUFvQixJQUdyQjU1QyxHQUFJNnJCLGFBQVksV0FDWHA2QyxLQUFLa2IsUUFBUWl0RCxxQkFDaEIsSUFBSUgsSUFBY2h4QixNQUFNaDNDLFNBVzFCaWhFLEdBQVFrQixPQUFTQSxHQUNqQmxCLEdBQVEwRSxLQUFPQSxHQUNmMUUsR0FBUXlGLE1BQVFBLEdBQ2hCekYsR0FBUStHLFlBQWNBLEdBRXRCbkcsR0FBUTlQLE9BOVlLLFNBQVU4USxFQUFZQyxFQUFVNW5ELEdBQzVDLE9BQU8sSUFBSWluRCxHQUFPVSxFQUFZQyxFQUFVNW5ELElBOFl6QzJtRCxHQUFRanJCLEtBdFFHLFNBQVUxN0IsR0FDcEIsT0FBTyxJQUFJeXFELEdBQUt6cUQsSUFzUWpCMm1ELEdBQVFwZ0IsTUF0SUksU0FBVXZtQyxHQUNyQixPQUFPLElBQUl3ckQsR0FBTXhyRCxJQXNJbEIybUQsR0FBUTlxQixZQVpVLFNBQVU3N0IsR0FDM0IsT0FBTyxJQUFJOHNELEdBQVk5c0QsSUFzQnhCLElBQUl3dEQsR0FBVXB2QixFQUFNOW1DLE9BQU8sQ0FDMUJnbkMsV0FBWSxTQUFVcnVDLEdBQ3JCbkwsS0FBS2toRSxLQUFPLzFELEdBS2IydUQsT0FBUSxXQUNQLE9BQUk5NUQsS0FBSzJvRSxXQUVUM29FLEtBQUsyb0UsVUFBVyxFQUNoQjNvRSxLQUFLNG9FLFlBSHVCNW9FLE1BUzdCaS9ELFFBQVMsV0FDUixPQUFLai9ELEtBQUsyb0UsVUFFVjNvRSxLQUFLMm9FLFVBQVcsRUFDaEIzb0UsS0FBSzZvRSxjQUNFN29FLE1BSnNCQSxNQVM5QjgrRCxRQUFTLFdBQ1IsUUFBUzkrRCxLQUFLMm9FLFlBY2hCRCxHQUFRMXhCLE1BQVEsU0FBVTdyQyxFQUFLck4sR0FFOUIsT0FEQXFOLEVBQUl1OEIsV0FBVzVwQyxFQUFNa0MsTUFDZEEsTUFHUixJQWtWSThvRSxHQWxWQWp2QixHQUFRLENBQUNDLE9BQVFBLEdBa0JqQml2QixHQUFRMWlCLEdBQVEsdUJBQXlCLFlBQ3pDMmlCLEdBQU0sQ0FDVEMsVUFBVyxVQUNYcmEsV0FBWSxXQUNac2EsWUFBYSxXQUNiQyxjQUFlLFlBRVpDLEdBQU8sQ0FDVkgsVUFBVyxZQUNYcmEsV0FBWSxZQUNac2EsWUFBYSxZQUNiQyxjQUFlLGFBSVpFLEdBQVkzdEIsRUFBUWxwQyxPQUFPLENBRTlCMEksUUFBUyxDQU1Sb3VELGVBQWdCLEdBS2pCOXZCLFdBQVksU0FBVW5yQixFQUFTazdDLEVBQWlCQyxFQUFtQnR1RCxHQUNsRW85QixFQUFXdDRDLEtBQU1rYixHQUVqQmxiLEtBQUt5cEUsU0FBV3A3QyxFQUNoQnJ1QixLQUFLMHBFLGlCQUFtQkgsR0FBbUJsN0MsRUFDM0NydUIsS0FBSzJwRSxnQkFBa0JILEdBS3hCMVAsT0FBUSxXQUNIOTVELEtBQUsyb0UsV0FFVGhxRCxHQUFHM2UsS0FBSzBwRSxpQkFBa0JYLEdBQU8vb0UsS0FBSzRwRSxRQUFTNXBFLE1BRS9DQSxLQUFLMm9FLFVBQVcsSUFLakIxSixRQUFTLFdBQ0hqL0QsS0FBSzJvRSxXQUlOVSxHQUFVUSxZQUFjN3BFLE1BQzNCQSxLQUFLOHBFLGFBR054aUMsR0FBSXRuQyxLQUFLMHBFLGlCQUFrQlgsR0FBTy9vRSxLQUFLNHBFLFFBQVM1cEUsTUFFaERBLEtBQUsyb0UsVUFBVyxFQUNoQjNvRSxLQUFLeTZELFFBQVMsSUFHZm1QLFFBQVMsU0FBVS9vRSxHQU1sQixJQUFJQSxFQUFFdTlELFlBQWVwK0QsS0FBSzJvRSxXQUUxQjNvRSxLQUFLeTZELFFBQVMsR0FFVi9QLEdBQVMxcUQsS0FBS3lwRSxTQUFVLHdCQUV4QkosR0FBVVEsV0FBYWhwRSxFQUFFMmxFLFVBQTBCLElBQVozbEUsRUFBRWtwRSxPQUE4QixJQUFibHBFLEVBQUV5dEQsU0FBa0J6dEQsRUFBRXFvRCxVQUNwRm1nQixHQUFVUSxVQUFZN3BFLEtBRWxCQSxLQUFLMnBFLGlCQUNScmQsR0FBZXRzRCxLQUFLeXBFLFVBR3JCcmQsS0FDQWhELEtBRUlwcEQsS0FBS2dxRSxXQUFULENBSUFocUUsS0FBSzI2QyxLQUFLLFFBRVYsSUFBSXRqQyxFQUFReFcsRUFBRXFvRCxRQUFVcm9ELEVBQUVxb0QsUUFBUSxHQUFLcm9ELEVBQ25Db3BFLEVBQWN2ZCxHQUFtQjFzRCxLQUFLeXBFLFVBRTFDenBFLEtBQUtrcUUsWUFBYyxJQUFJdnVCLEVBQU10a0MsRUFBTXM0QyxRQUFTdDRDLEVBQU11NEMsU0FHbEQ1dkQsS0FBS21xRSxhQUFldGQsR0FBU29kLEdBRTdCdHJELEdBQUdzRSxTQUFVbW1ELEdBQUt2b0UsRUFBRWlsQixNQUFPOWxCLEtBQUtvcUUsUUFBU3BxRSxNQUN6QzJlLEdBQUdzRSxTQUFVK2xELEdBQUlub0UsRUFBRWlsQixNQUFPOWxCLEtBQUtxcUUsTUFBT3JxRSxRQUd2Q29xRSxRQUFTLFNBQVV2cEUsR0FNbEIsSUFBSUEsRUFBRXU5RCxZQUFlcCtELEtBQUsyb0UsU0FFMUIsR0FBSTluRSxFQUFFcW9ELFNBQVdyb0QsRUFBRXFvRCxRQUFRaG5ELE9BQVMsRUFDbkNsQyxLQUFLeTZELFFBQVMsTUFEZixDQUtBLElBQUlwakQsRUFBU3hXLEVBQUVxb0QsU0FBZ0MsSUFBckJyb0QsRUFBRXFvRCxRQUFRaG5ELE9BQWVyQixFQUFFcW9ELFFBQVEsR0FBS3JvRCxFQUM5RCtxRCxFQUFTLElBQUlqUSxFQUFNdGtDLEVBQU1zNEMsUUFBU3Q0QyxFQUFNdTRDLFNBQVMxUyxVQUFVbDlDLEtBQUtrcUUsY0FFL0R0ZSxFQUFPamtELEdBQU1pa0QsRUFBT3RxRCxLQUNyQnNlLEtBQUtxK0IsSUFBSTJOLEVBQU9qa0QsR0FBS2lZLEtBQUtxK0IsSUFBSTJOLEVBQU90cUQsR0FBS3RCLEtBQUtrYixRQUFRb3VELGlCQUszRDFkLEVBQU9qa0QsR0FBSzNILEtBQUttcUUsYUFBYXhpRSxFQUM5QmlrRCxFQUFPdHFELEdBQUt0QixLQUFLbXFFLGFBQWE3b0UsRUFFOUIrbUQsR0FBZXhuRCxHQUVWYixLQUFLeTZELFNBR1R6NkQsS0FBSzI2QyxLQUFLLGFBRVYzNkMsS0FBS3k2RCxRQUFTLEVBQ2R6NkQsS0FBS214RCxVQUFZakYsR0FBWWxzRCxLQUFLeXBFLFVBQVV4c0IsU0FBUzJPLEdBRXJEZCxHQUFTN25DLFNBQVM3aEIsS0FBTSxvQkFFeEJwQixLQUFLc3FFLFlBQWN6cEUsRUFBRXdpQixRQUFVeGlCLEVBQUVxOUQsV0FHN0JsN0MsT0FBT3VuRCxvQkFBc0J2cUUsS0FBS3NxRSx1QkFBdUJ0bkQsT0FBT3VuRCxxQkFDbkV2cUUsS0FBS3NxRSxZQUFjdHFFLEtBQUtzcUUsWUFBWUUseUJBRXJDMWYsR0FBUzlxRCxLQUFLc3FFLFlBQWEsd0JBRzVCdHFFLEtBQUt5cUUsUUFBVXpxRSxLQUFLbXhELFVBQVVscUQsSUFBSTJrRCxHQUNsQzVyRCxLQUFLZ3FFLFNBQVUsRUFFZjV3QixFQUFnQnA1QyxLQUFLMHFFLGNBQ3JCMXFFLEtBQUsycUUsV0FBYTlwRSxFQUNsQmIsS0FBSzBxRSxhQUFleHhCLEVBQWlCbDVDLEtBQUs0cUUsZ0JBQWlCNXFFLE1BQU0sT0FHbEU0cUUsZ0JBQWlCLFdBQ2hCLElBQUkvcEUsRUFBSSxDQUFDcXVELGNBQWVsdkQsS0FBSzJxRSxZQUs3QjNxRSxLQUFLMjZDLEtBQUssVUFBVzk1QyxHQUNyQmlyRCxHQUFZOXJELEtBQUt5cEUsU0FBVXpwRSxLQUFLeXFFLFNBSWhDenFFLEtBQUsyNkMsS0FBSyxPQUFROTVDLElBR25Cd3BFLE1BQU8sU0FBVXhwRSxJQU1aQSxFQUFFdTlELFlBQWVwK0QsS0FBSzJvRSxVQUMxQjNvRSxLQUFLOHBFLGNBR05BLFdBQVksV0FRWCxJQUFLLElBQUl2c0UsS0FQVDB0RCxHQUFZaG9DLFNBQVM3aEIsS0FBTSxvQkFFdkJwQixLQUFLc3FFLGNBQ1JyZixHQUFZanJELEtBQUtzcUUsWUFBYSx1QkFDOUJ0cUUsS0FBS3NxRSxZQUFjLE1BR05sQixHQUNiOWhDLEdBQUlya0IsU0FBVW1tRCxHQUFLN3JFLEdBQUl5QyxLQUFLb3FFLFFBQVNwcUUsTUFDckNzbkMsR0FBSXJrQixTQUFVK2xELEdBQUl6ckUsR0FBSXlDLEtBQUtxcUUsTUFBT3JxRSxNQUduQ3FzRCxLQUNBaEQsS0FFSXJwRCxLQUFLeTZELFFBQVV6NkQsS0FBS2dxRSxVQUV2QjV3QixFQUFnQnA1QyxLQUFLMHFFLGNBSXJCMXFFLEtBQUsyNkMsS0FBSyxVQUFXLENBQ3BCaUcsU0FBVTVnRCxLQUFLeXFFLFFBQVE1c0IsV0FBVzc5QyxLQUFLbXhELGNBSXpDbnhELEtBQUtncUUsU0FBVSxFQUNmWCxHQUFVUSxXQUFZLEtBc0J4QixTQUFTZ0IsR0FBUzV1QixFQUFRNnVCLEdBQ3pCLElBQUtBLElBQWM3dUIsRUFBTy81QyxPQUN6QixPQUFPKzVDLEVBQU9wNUMsUUFHZixJQUFJa29FLEVBQWNELEVBQVlBLEVBUTlCLE9BRkk3dUIsRUFrQkwsU0FBcUJBLEVBQVE4dUIsR0FFNUIsSUFBSTVnRSxFQUFNOHhDLEVBQU8vNUMsT0FFYjhvRSxFQUFVLFdBRGdCQyxpQkFBZWppRSxFQUFZLEdBQUtpaUUsV0FBYXRyRSxPQUN4Q3dLLEdBRS9CNmdFLEVBQVEsR0FBS0EsRUFBUTdnRSxFQUFNLEdBQUssRUFnQnJDLFNBQVMrZ0UsRUFBZ0JqdkIsRUFBUSt1QixFQUFTRCxFQUFhMXpELEVBQU96TyxHQUU3RCxJQUNBMEYsRUFBTy9RLEVBQUc0dEUsRUFETkMsRUFBWSxFQUdoQixJQUFLN3RFLEVBQUk4WixFQUFRLEVBQUc5WixHQUFLcUwsRUFBTyxFQUFHckwsS0FDbEM0dEUsRUFBU0UsR0FBeUJwdkIsRUFBTzErQyxHQUFJMCtDLEVBQU81a0MsR0FBUTRrQyxFQUFPcnpDLElBQU8sSUFFN0R3aUUsSUFDWjk4RCxFQUFRL1EsRUFDUjZ0RSxFQUFZRCxHQUlWQyxFQUFZTCxJQUNmQyxFQUFRMThELEdBQVMsRUFFakI0OEQsRUFBZ0JqdkIsRUFBUSt1QixFQUFTRCxFQUFhMXpELEVBQU8vSSxHQUNyRDQ4RCxFQUFnQmp2QixFQUFRK3VCLEVBQVNELEVBQWF6OEQsRUFBTzFGLElBaEN0RHNpRSxDQUFnQmp2QixFQUFRK3VCLEVBQVNELEVBQWEsRUFBRzVnRSxFQUFNLEdBRXZELElBQUk1TSxFQUNBK3RFLEVBQVksR0FFaEIsSUFBSy90RSxFQUFJLEVBQUdBLEVBQUk0TSxFQUFLNU0sSUFDaEJ5dEUsRUFBUXp0RSxJQUNYK3RFLEVBQVVucEUsS0FBSzg1QyxFQUFPMStDLElBSXhCLE9BQU8rdEUsRUFyQ01DLENBSFR0dkIsRUFrRUwsU0FBdUJBLEVBQVE4dUIsR0FHOUIsSUFGQSxJQUFJUyxFQUFnQixDQUFDdnZCLEVBQU8sSUFFbkIxK0MsRUFBSSxFQUFHbWIsRUFBTyxFQUFHdk8sRUFBTTh4QyxFQUFPLzVDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBb0d4Q2t1RSxFQW5HSHh2QixFQUFPMStDLEdBbUdBbXVFLEVBbkdJenZCLEVBQU92akMsR0FvRzNCaXpELFNBQ0FDLFNBREFELEVBQUtELEVBQUcvakUsRUFBSThqRSxFQUFHOWpFLEVBQ2Zpa0UsRUFBS0YsRUFBR3BxRSxFQUFJbXFFLEVBQUducUUsRUFDWnFxRSxFQUFLQSxFQUFLQyxFQUFLQSxFQXRHa0JiLElBQ3RDUyxFQUFjcnBFLEtBQUs4NUMsRUFBTzErQyxJQUMxQm1iLEVBQU9uYixHQWlHVixJQUFpQmt1RSxFQUFJQyxFQUNoQkMsRUFDQUMsRUE3RkosT0FISWx6RCxFQUFPdk8sRUFBTSxHQUNoQnFoRSxFQUFjcnBFLEtBQUs4NUMsRUFBTzl4QyxFQUFNLElBRTFCcWhFLEVBOUVNSyxDQUFjNXZCLEVBQVE4dUIsR0FHRkEsR0FPbEMsU0FBU2UsR0FBdUJ6c0UsRUFBR29zRSxFQUFJQyxHQUN0QyxPQUFPOXJELEtBQUtrK0IsS0FBS3V0QixHQUF5QmhzRSxFQUFHb3NFLEVBQUlDLEdBQUksSUE2RXRELFNBQVNLLEdBQVk1b0UsRUFBRzNELEVBQUdpL0MsRUFBUXV0QixFQUFhN3pCLEdBQy9DLElBR0k4ekIsRUFBUzVzRSxFQUFHNnNFLEVBSFpDLEVBQVFILEVBQWNsRCxHQUFZc0QsR0FBWWpwRSxFQUFHczdDLEdBQ2pENHRCLEVBQVFELEdBQVk1c0UsRUFBR2kvQyxHQU8zQixJQUZJcXFCLEdBQVl1RCxJQUVILENBRVosS0FBTUYsRUFBUUUsR0FDYixNQUFPLENBQUNscEUsRUFBRzNELEdBSVosR0FBSTJzRSxFQUFRRSxFQUNYLE9BQU8sRUFNUkgsRUFBVUUsR0FEVi9zRSxFQUFJaXRFLEdBQXFCbnBFLEVBQUczRCxFQUQ1QnlzRSxFQUFVRSxHQUFTRSxFQUNxQjV0QixFQUFRdEcsR0FDdkJzRyxHQUVyQnd0QixJQUFZRSxHQUNmaHBFLEVBQUk5RCxFQUNKOHNFLEVBQVFELElBRVIxc0UsRUFBSUgsRUFDSmd0RSxFQUFRSCxJQUtYLFNBQVNJLEdBQXFCbnBFLEVBQUczRCxFQUFHaWtELEVBQU1oRixFQUFRdEcsR0FDakQsSUFJSXh3QyxFQUFHckcsRUFKSHFxRSxFQUFLbnNFLEVBQUVtSSxFQUFJeEUsRUFBRXdFLEVBQ2Jpa0UsRUFBS3BzRSxFQUFFOEIsRUFBSTZCLEVBQUU3QixFQUNicXVCLEVBQU04dUIsRUFBTzl1QixJQUNiOVAsRUFBTTQrQixFQUFPNStCLElBb0JqQixPQWpCVyxFQUFQNGpDLEdBQ0g5N0MsRUFBSXhFLEVBQUV3RSxFQUFJZ2tFLEdBQU05ckQsRUFBSXZlLEVBQUk2QixFQUFFN0IsR0FBS3NxRSxFQUMvQnRxRSxFQUFJdWUsRUFBSXZlLEdBRVMsRUFBUG1pRCxHQUNWOTdDLEVBQUl4RSxFQUFFd0UsRUFBSWdrRSxHQUFNaDhDLEVBQUlydUIsRUFBSTZCLEVBQUU3QixHQUFLc3FFLEVBQy9CdHFFLEVBQUlxdUIsRUFBSXJ1QixHQUVTLEVBQVBtaUQsR0FDVjk3QyxFQUFJa1ksRUFBSWxZLEVBQ1JyRyxFQUFJNkIsRUFBRTdCLEVBQUlzcUUsR0FBTS9yRCxFQUFJbFksRUFBSXhFLEVBQUV3RSxHQUFLZ2tFLEdBRWQsRUFBUGxvQixJQUNWOTdDLEVBQUlnb0IsRUFBSWhvQixFQUNSckcsRUFBSTZCLEVBQUU3QixFQUFJc3FFLEdBQU1qOEMsRUFBSWhvQixFQUFJeEUsRUFBRXdFLEdBQUtna0UsR0FHekIsSUFBSWh3QixFQUFNaDBDLEVBQUdyRyxFQUFHNjJDLEdBR3hCLFNBQVNpMEIsR0FBWS9zRSxFQUFHby9DLEdBQ3ZCLElBQUlnRixFQUFPLEVBY1gsT0FaSXBrRCxFQUFFc0ksRUFBSTgyQyxFQUFPOXVCLElBQUlob0IsRUFDcEI4N0MsR0FBUSxFQUNFcGtELEVBQUVzSSxFQUFJODJDLEVBQU81K0IsSUFBSWxZLElBQzNCODdDLEdBQVEsR0FHTHBrRCxFQUFFaUMsRUFBSW05QyxFQUFPOXVCLElBQUlydUIsRUFDcEJtaUQsR0FBUSxFQUNFcGtELEVBQUVpQyxFQUFJbTlDLEVBQU81K0IsSUFBSXZlLElBQzNCbWlELEdBQVEsR0FHRkEsRUFXUixTQUFTNG5CLEdBQXlCaHNFLEVBQUdvc0UsRUFBSUMsRUFBSVAsR0FDNUMsSUFLSTFzRSxFQUxBa0osRUFBSThqRSxFQUFHOWpFLEVBQ1ByRyxFQUFJbXFFLEVBQUducUUsRUFDUHFxRSxFQUFLRCxFQUFHL2pFLEVBQUlBLEVBQ1ppa0UsRUFBS0YsRUFBR3BxRSxFQUFJQSxFQUNaaXJFLEVBQU1aLEVBQUtBLEVBQUtDLEVBQUtBLEVBa0J6QixPQWZJVyxFQUFNLEtBQ1Q5dEUsSUFBTVksRUFBRXNJLEVBQUlBLEdBQUtna0UsR0FBTXRzRSxFQUFFaUMsRUFBSUEsR0FBS3NxRSxHQUFNVyxHQUVoQyxHQUNQNWtFLEVBQUkrakUsRUFBRy9qRSxFQUNQckcsRUFBSW9xRSxFQUFHcHFFLEdBQ0c3QyxFQUFJLElBQ2RrSixHQUFLZ2tFLEVBQUtsdEUsRUFDVjZDLEdBQUtzcUUsRUFBS250RSxJQUlaa3RFLEVBQUt0c0UsRUFBRXNJLEVBQUlBLEVBQ1hpa0UsRUFBS3ZzRSxFQUFFaUMsRUFBSUEsRUFFSjZwRSxFQUFTUSxFQUFLQSxFQUFLQyxFQUFLQSxFQUFLLElBQUlqd0IsRUFBTWgwQyxFQUFHckcsR0FNbEQsU0FBU2tyRSxHQUFPbHdCLEdBQ2YsT0FBUWp6QyxFQUFRaXpDLEVBQVEsS0FBaUMsaUJBQWxCQSxFQUFRLEdBQUcsU0FBNEMsSUFBbEJBLEVBQVEsR0FBRyxHQUd4RixTQUFTbXdCLEdBQU1ud0IsR0FFZCxPQURBNWUsUUFBUW9PLEtBQUssa0VBQ04wZ0MsR0FBT2x3QixHQUdmLElBQUlvd0IsR0FBVyxDQUNiN0IsU0FBVUEsR0FDVmlCLHVCQUF3QkEsR0FDeEJhLHNCQXpNRixTQUErQnR0RSxFQUFHb3NFLEVBQUlDLEdBQ3JDLE9BQU9MLEdBQXlCaHNFLEVBQUdvc0UsRUFBSUMsSUF5TXRDSyxZQUFhQSxHQUNiTyxxQkFBc0JBLEdBQ3RCRixZQUFhQSxHQUNiZix5QkFBMEJBLEdBQzFCbUIsT0FBUUEsR0FDUkMsTUFBT0EsSUFjVCxTQUFTRyxHQUFZM3dCLEVBQVF3QyxFQUFRdEcsR0FDcEMsSUFBSTAwQixFQUVBdHZFLEVBQUc2bUIsRUFBRzBvRCxFQUNOM3BFLEVBQUczRCxFQUNIMkssRUFBS2s2QyxFQUFNaGxELEVBSFgwdEUsRUFBUSxDQUFDLEVBQUcsRUFBRyxFQUFHLEdBS3RCLElBQUt4dkUsRUFBSSxFQUFHNE0sRUFBTTh4QyxFQUFPLzVDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQ3pDMCtDLEVBQU8xK0MsR0FBR3l2RSxNQUFRWixHQUFZbndCLEVBQU8xK0MsR0FBSWtoRCxHQUkxQyxJQUFLcXVCLEVBQUksRUFBR0EsRUFBSSxFQUFHQSxJQUFLLENBSXZCLElBSEF6b0IsRUFBTzBvQixFQUFNRCxHQUNiRCxFQUFnQixHQUVYdHZFLEVBQUksRUFBd0I2bUIsR0FBckJqYSxFQUFNOHhDLEVBQU8vNUMsUUFBa0IsRUFBRzNFLEVBQUk0TSxFQUFLaWEsRUFBSTdtQixJQUMxRDRGLEVBQUk4NEMsRUFBTzErQyxHQUNYaUMsRUFBSXk4QyxFQUFPNzNCLEdBR0xqaEIsRUFBRTZwRSxNQUFRM29CLEVBVUg3a0QsRUFBRXd0RSxNQUFRM29CLEtBQ3RCaGxELEVBQUlpdEUsR0FBcUI5c0UsRUFBRzJELEVBQUdraEQsRUFBTTVGLEVBQVF0RyxJQUMzQzYwQixNQUFRWixHQUFZL3NFLEVBQUdvL0MsR0FDekJvdUIsRUFBYzFxRSxLQUFLOUMsS0FYZkcsRUFBRXd0RSxNQUFRM29CLEtBQ2JobEQsRUFBSWl0RSxHQUFxQjlzRSxFQUFHMkQsRUFBR2toRCxFQUFNNUYsRUFBUXRHLElBQzNDNjBCLE1BQVFaLEdBQVkvc0UsRUFBR28vQyxHQUN6Qm91QixFQUFjMXFFLEtBQUs5QyxJQUVwQnd0RSxFQUFjMXFFLEtBQUtnQixJQVNyQjg0QyxFQUFTNHdCLEVBR1YsT0FBTzV3QixFQUdSLElBQUlneEIsR0FBVyxDQUNiTCxZQUFhQSxJQWdCWE0sR0FBUyxDQUNabi9ELFFBQVMsU0FBVXV6QyxHQUNsQixPQUFPLElBQUkzRixFQUFNMkYsRUFBTzVFLElBQUs0RSxFQUFPN0UsTUFHckNzRixVQUFXLFNBQVVoRixHQUNwQixPQUFPLElBQUlQLEVBQU9PLEVBQU16N0MsRUFBR3k3QyxFQUFNcDFDLElBR2xDODJDLE9BQVEsSUFBSXpDLEVBQU8sRUFBRSxLQUFNLElBQUssQ0FBQyxJQUFLLE1BVW5DbXhCLEdBQVcsQ0FDZGxqQyxFQUFHLFFBQ0htakMsUUFBUyxrQkFFVDN1QixPQUFRLElBQUl6QyxFQUFPLEVBQUUsZ0JBQWlCLGdCQUFpQixDQUFDLGVBQWdCLGlCQUV4RWp1QyxRQUFTLFNBQVV1ekMsR0FDbEIsSUFBSXpqRCxFQUFJK2hCLEtBQUt1aEMsR0FBSyxJQUNkOWlELEVBQUkyQixLQUFLaXFDLEVBQ1Qzb0MsRUFBSWdnRCxFQUFPN0UsSUFBTTUrQyxFQUNqQndjLEVBQU1yYSxLQUFLb3RFLFFBQVUvdUUsRUFDckJ3QyxFQUFJK2UsS0FBS2srQixLQUFLLEVBQUl6akMsRUFBTUEsR0FDeEJnekQsRUFBTXhzRSxFQUFJK2UsS0FBS21qQyxJQUFJemhELEdBRW5CZ3NFLEVBQUsxdEQsS0FBSzJ0RCxJQUFJM3RELEtBQUt1aEMsR0FBSyxFQUFJNy9DLEVBQUksR0FBS3NlLEtBQUtzNEIsS0FBSyxFQUFJbTFCLElBQVEsRUFBSUEsR0FBTXhzRSxFQUFJLEdBRzdFLE9BRkFTLEdBQUtqRCxFQUFJdWhCLEtBQUttYyxJQUFJbmMsS0FBS0MsSUFBSXl0RCxFQUFJLFFBRXhCLElBQUkzeEIsRUFBTTJGLEVBQU81RSxJQUFNNytDLEVBQUlRLEVBQUdpRCxJQUd0Q3lnRCxVQUFXLFNBQVVoRixHQVFwQixJQVBBLElBTzRCc3dCLEVBUHhCeHZFLEVBQUksSUFBTStoQixLQUFLdWhDLEdBQ2Y5aUQsRUFBSTJCLEtBQUtpcUMsRUFDVDV2QixFQUFNcmEsS0FBS290RSxRQUFVL3VFLEVBQ3JCd0MsRUFBSStlLEtBQUtrK0IsS0FBSyxFQUFJempDLEVBQU1BLEdBQ3hCaXpELEVBQUsxdEQsS0FBS3lqQyxLQUFLdEcsRUFBTXo3QyxFQUFJakQsR0FDekJtdkUsRUFBTTV0RCxLQUFLdWhDLEdBQUssRUFBSSxFQUFJdmhDLEtBQUt3akMsS0FBS2txQixHQUU3Qi92RSxFQUFJLEVBQUdrd0UsRUFBTyxHQUFVbHdFLEVBQUksSUFBTXFpQixLQUFLcStCLElBQUl3dkIsR0FBUSxLQUFNbHdFLElBQ2pFOHZFLEVBQU14c0UsRUFBSStlLEtBQUttakMsSUFBSXlxQixHQUNuQkgsRUFBTXp0RCxLQUFLczRCLEtBQUssRUFBSW0xQixJQUFRLEVBQUlBLEdBQU14c0UsRUFBSSxHQUUxQzJzRSxHQURBQyxFQUFPN3RELEtBQUt1aEMsR0FBSyxFQUFJLEVBQUl2aEMsS0FBS3dqQyxLQUFLa3FCLEVBQUtELEdBQU9HLEVBSWhELE9BQU8sSUFBSWh4QixFQUFPZ3hCLEVBQU0zdkUsRUFBR2svQyxFQUFNcDFDLEVBQUk5SixFQUFJUSxLQTJCdkNpUSxHQUFRLENBQ1Y0K0QsT0FBUUEsR0FDUkMsU0FBVUEsR0FDVmpxQixrQkFBbUJBLEdBU2pCd3FCLEdBQVdsN0QsRUFBTyxHQUFJbXVDLEVBQU8sQ0FDaEM4QyxLQUFNLFlBQ05qQyxXQUFZMnJCLEdBRVp6ckIsZUFBaUIsV0FDaEIsSUFBSUQsRUFBUSxJQUFPN2hDLEtBQUt1aEMsR0FBS2dzQixHQUFTbGpDLEdBQ3RDLE9BQU9zWixFQUFpQjlCLEVBQU8sSUFBTUEsRUFBTyxJQUY3QixLQW1CYmtzQixHQUFXbjdELEVBQU8sR0FBSW11QyxFQUFPLENBQ2hDOEMsS0FBTSxZQUNOakMsV0FBWTByQixHQUNaeHJCLGVBQWdCNkIsRUFBaUIsRUFBSSxJQUFLLEdBQUksRUFBSSxJQUFLLE1BYXBEcXFCLEdBQVNwN0QsRUFBTyxHQUFJNHVDLEVBQUssQ0FDNUJJLFdBQVkwckIsR0FDWnhyQixlQUFnQjZCLEVBQWlCLEVBQUcsR0FBSSxFQUFHLEdBRTNDOUIsTUFBTyxTQUFVN0ssR0FDaEIsT0FBT2gzQixLQUFLczRCLElBQUksRUFBR3RCLElBR3BCQSxLQUFNLFNBQVU2SyxHQUNmLE9BQU83aEMsS0FBS21jLElBQUkwbEIsR0FBUzdoQyxLQUFLb2lDLEtBRy9CcEIsU0FBVSxTQUFVNkIsRUFBU0MsR0FDNUIsSUFBSWlwQixFQUFLanBCLEVBQVFoRyxJQUFNK0YsRUFBUS9GLElBQzNCa3ZCLEVBQUtscEIsRUFBUWpHLElBQU1nRyxFQUFRaEcsSUFFL0IsT0FBTzc4QixLQUFLaytCLEtBQUs2dEIsRUFBS0EsRUFBS0MsRUFBS0EsSUFHakMxcEIsVUFBVSxJQUdYZCxFQUFJVCxNQUFRQSxFQUNaUyxFQUFJc3NCLFNBQVdBLEdBQ2Z0c0IsRUFBSW9DLFNBQVdBLEVBQ2ZwQyxFQUFJc0MsV0FBYUEsRUFDakJ0QyxFQUFJdXNCLFNBQVdBLEdBQ2Z2c0IsRUFBSXdzQixPQUFTQSxHQTJCYixJQUFJQyxHQUFRbnlCLEVBQVFscEMsT0FBTyxDQUcxQjBJLFFBQVMsQ0FHUnEvQyxLQUFNLGNBSU54akIsWUFBYSxLQUViOG5CLHFCQUFxQixHQVN0QjduQixNQUFPLFNBQVU3ckMsR0FFaEIsT0FEQUEsRUFBSW82RCxTQUFTdmxFLE1BQ05BLE1BS1JvTSxPQUFRLFdBQ1AsT0FBT3BNLEtBQUs4dEUsV0FBVzl0RSxLQUFLa2hFLE1BQVFsaEUsS0FBSyt0RSxZQVMxQ0QsV0FBWSxTQUFVM29FLEdBSXJCLE9BSElBLEdBQ0hBLEVBQUlzK0QsWUFBWXpqRSxNQUVWQSxNQUtSKzdELFFBQVMsU0FBVWorRCxHQUNsQixPQUFPa0MsS0FBS2toRSxLQUFLbkYsUUFBUWorRCxFQUFRa0MsS0FBS2tiLFFBQVFwZCxJQUFTQSxFQUFRa0MsS0FBS2tiLFFBQVFxL0MsT0FHN0V5VCxxQkFBc0IsU0FBVUMsR0FFL0IsT0FEQWp1RSxLQUFLa2hFLEtBQUt6RCxTQUFTbm1CLEVBQU0yMkIsSUFBYWp1RSxLQUMvQkEsTUFHUmt1RSx3QkFBeUIsU0FBVUQsR0FFbEMsY0FET2p1RSxLQUFLa2hFLEtBQUt6RCxTQUFTbm1CLEVBQU0yMkIsSUFDekJqdUUsTUFLUm9vRSxlQUFnQixXQUNmLE9BQU9wb0UsS0FBS2tiLFFBQVE2N0IsYUFHckJvM0IsVUFBVyxTQUFVdHRFLEdBQ3BCLElBQUlzSyxFQUFNdEssRUFBRXdpQixPQUdaLEdBQUtsWSxFQUFJNjVELFNBQVNobEUsTUFBbEIsQ0FLQSxHQUhBQSxLQUFLa2hFLEtBQU8vMUQsRUFDWm5MLEtBQUtzekQsY0FBZ0Jub0QsRUFBSW1vRCxjQUVyQnR6RCxLQUFLb3VFLFVBQVcsQ0FDbkIsSUFBSTdpQyxFQUFTdnJDLEtBQUtvdUUsWUFDbEJqakUsRUFBSXdULEdBQUc0c0IsRUFBUXZyQyxNQUNmQSxLQUFLeXFDLEtBQUssVUFBVSxXQUNuQnQvQixFQUFJbThCLElBQUlpRSxFQUFRdnJDLFFBQ2RBLE1BR0pBLEtBQUtxaEUsTUFBTWwyRCxHQUVQbkwsS0FBS29vRSxnQkFBa0JqOUQsRUFBSWc5RCxvQkFDOUJoOUQsRUFBSWc5RCxtQkFBbUJFLGVBQWVyb0UsS0FBS29vRSxrQkFHNUNwb0UsS0FBSzI2QyxLQUFLLE9BQ1Z4dkMsRUFBSXd2QyxLQUFLLFdBQVksQ0FBQ1MsTUFBT3A3QyxXQXFDL0J1dUIsR0FBSTJyQixRQUFRLENBR1hxckIsU0FBVSxTQUFVbnFCLEdBQ25CLElBQUtBLEVBQU0reUIsVUFDVixNQUFNLElBQUk3K0QsTUFBTSx1Q0FHakIsSUFBSTNELEVBQUsyckMsRUFBTThELEdBQ2YsT0FBSXA3QyxLQUFLMnlELFFBQVFobkQsS0FDakIzTCxLQUFLMnlELFFBQVFobkQsR0FBTXl2QyxFQUVuQkEsRUFBTTJ5QixVQUFZL3RFLEtBRWRvN0MsRUFBTWl6QixXQUNUanpCLEVBQU1pekIsVUFBVXJ1RSxNQUdqQkEsS0FBS2svRCxVQUFVOWpCLEVBQU0reUIsVUFBVy95QixJQVREcDdDLE1BZ0JoQ3lqRSxZQUFhLFNBQVVyb0IsR0FDdEIsSUFBSXp2QyxFQUFLMnJDLEVBQU04RCxHQUVmLE9BQUtwN0MsS0FBSzJ5RCxRQUFRaG5ELElBRWQzTCxLQUFLNnpELFNBQ1J6WSxFQUFNb21CLFNBQVN4aEUsTUFHWm83QyxFQUFNZ3RCLGdCQUFrQnBvRSxLQUFLbW9FLG9CQUNoQ25vRSxLQUFLbW9FLG1CQUFtQkksa0JBQWtCbnRCLEVBQU1ndEIseUJBRzFDcG9FLEtBQUsyeUQsUUFBUWhuRCxHQUVoQjNMLEtBQUs2ekQsVUFDUjd6RCxLQUFLMjZDLEtBQUssY0FBZSxDQUFDUyxNQUFPQSxJQUNqQ0EsRUFBTVQsS0FBSyxXQUdaUyxFQUFNOGxCLEtBQU85bEIsRUFBTTJ5QixVQUFZLEtBRXhCL3RFLE1BbkJ5QkEsTUF3QmpDZ2xFLFNBQVUsU0FBVTVwQixHQUNuQixRQUFTQSxHQUFVOUQsRUFBTThELEtBQVVwN0MsS0FBSzJ5RCxTQVd6QzJiLFVBQVcsU0FBVTN3QyxFQUFRdGtCLEdBQzVCLElBQUssSUFBSTliLEtBQUt5QyxLQUFLMnlELFFBQ2xCaDFCLEVBQU9qZ0MsS0FBSzJiLEVBQVNyWixLQUFLMnlELFFBQVFwMUQsSUFFbkMsT0FBT3lDLE1BR1IwekQsV0FBWSxTQUFVM0IsR0FHckIsSUFBSyxJQUFJeDBELEVBQUksRUFBRzRNLEdBRmhCNG5ELEVBQVNBLEVBQVUxb0QsRUFBUTBvRCxHQUFVQSxFQUFTLENBQUNBLEdBQVcsSUFFN0I3dkQsT0FBUTNFLEVBQUk0TSxFQUFLNU0sSUFDN0N5QyxLQUFLdWxFLFNBQVN4VCxFQUFPeDBELEtBSXZCZ3hFLGNBQWUsU0FBVW56QixJQUNwQnY1QixNQUFNdTVCLEVBQU1sZ0MsUUFBUTQyQyxVQUFhandDLE1BQU11NUIsRUFBTWxnQyxRQUFRMjJDLFdBQ3hEN3hELEtBQUs0eUQsaUJBQWlCdGIsRUFBTThELElBQVVBLEVBQ3RDcDdDLEtBQUt3dUUsc0JBSVBDLGlCQUFrQixTQUFVcnpCLEdBQzNCLElBQUl6dkMsRUFBSzJyQyxFQUFNOEQsR0FFWHA3QyxLQUFLNHlELGlCQUFpQmpuRCxZQUNsQjNMLEtBQUs0eUQsaUJBQWlCam5ELEdBQzdCM0wsS0FBS3d1RSxzQkFJUEEsa0JBQW1CLFdBQ2xCLElBQUkzYyxFQUFVM2pELElBQ1Y0akQsR0FBVSxJQUNWNGMsRUFBYzF1RSxLQUFLdTlELGVBRXZCLElBQUssSUFBSWhnRSxLQUFLeUMsS0FBSzR5RCxpQkFBa0IsQ0FDcEMsSUFBSTEzQyxFQUFVbGIsS0FBSzR5RCxpQkFBaUJyMUQsR0FBRzJkLFFBRXZDMjJDLE9BQThCN29ELElBQXBCa1MsRUFBUTIyQyxRQUF3QkEsRUFBVWp5QyxLQUFLK1AsSUFBSWtpQyxFQUFTMzJDLEVBQVEyMkMsU0FDOUVDLE9BQThCOW9ELElBQXBCa1MsRUFBUTQyQyxRQUF3QkEsRUFBVWx5QyxLQUFLQyxJQUFJaXlDLEVBQVM1MkMsRUFBUTQyQyxTQUcvRTl4RCxLQUFLKzZELGVBQWlCakosS0FBWSxTQUFZOW9ELEVBQVk4b0QsRUFDMUQ5eEQsS0FBSzY2RCxlQUFpQmhKLElBQVkzakQsU0FBV2xGLEVBQVk2b0QsRUFNckQ2YyxJQUFnQjF1RSxLQUFLdTlELGdCQUN4QnY5RCxLQUFLMjZDLEtBQUsseUJBR2tCM3hDLElBQXpCaEosS0FBS2tiLFFBQVE0MkMsU0FBeUI5eEQsS0FBSys2RCxnQkFBa0IvNkQsS0FBSzQxRCxVQUFZNTFELEtBQUsrNkQsZ0JBQ3RGLzZELEtBQUtvMEQsUUFBUXAwRCxLQUFLKzZELHFCQUVVL3hELElBQXpCaEosS0FBS2tiLFFBQVEyMkMsU0FBeUI3eEQsS0FBSzY2RCxnQkFBa0I3NkQsS0FBSzQxRCxVQUFZNTFELEtBQUs2NkQsZ0JBQ3RGNzZELEtBQUtvMEQsUUFBUXAwRCxLQUFLNjZELG1CQXVCckIsSUFBSThULEdBQWFkLEdBQU1yN0QsT0FBTyxDQUU3QmduQyxXQUFZLFNBQVV1WSxFQUFRNzJDLEdBSzdCLElBQUkzZCxFQUFHNE0sRUFFUCxHQU5BbXVDLEVBQVd0NEMsS0FBTWtiLEdBRWpCbGIsS0FBSzJ5RCxRQUFVLEdBSVhaLEVBQ0gsSUFBS3gwRCxFQUFJLEVBQUc0TSxFQUFNNG5ELEVBQU83dkQsT0FBUTNFLEVBQUk0TSxFQUFLNU0sSUFDekN5QyxLQUFLdWxFLFNBQVN4VCxFQUFPeDBELEtBT3hCZ29FLFNBQVUsU0FBVW5xQixHQUNuQixJQUFJenZDLEVBQUszTCxLQUFLNHVFLFdBQVd4ekIsR0FRekIsT0FOQXA3QyxLQUFLMnlELFFBQVFobkQsR0FBTXl2QyxFQUVmcDdDLEtBQUtraEUsTUFDUmxoRSxLQUFLa2hFLEtBQUtxRSxTQUFTbnFCLEdBR2JwN0MsTUFRUnlqRSxZQUFhLFNBQVVyb0IsR0FDdEIsSUFBSXp2QyxFQUFLeXZDLEtBQVNwN0MsS0FBSzJ5RCxRQUFVdlgsRUFBUXA3QyxLQUFLNHVFLFdBQVd4ekIsR0FRekQsT0FOSXA3QyxLQUFLa2hFLE1BQVFsaEUsS0FBSzJ5RCxRQUFRaG5ELElBQzdCM0wsS0FBS2toRSxLQUFLdUMsWUFBWXpqRSxLQUFLMnlELFFBQVFobkQsV0FHN0IzTCxLQUFLMnlELFFBQVFobkQsR0FFYjNMLE1BUVJnbEUsU0FBVSxTQUFVNXBCLEdBQ25CLFFBQUtBLElBQzBCLGlCQUFWQSxFQUFxQkEsRUFBUXA3QyxLQUFLNHVFLFdBQVd4ekIsTUFDaERwN0MsS0FBSzJ5RCxTQUt4QmtjLFlBQWEsV0FDWixPQUFPN3VFLEtBQUtzdUUsVUFBVXR1RSxLQUFLeWpFLFlBQWF6akUsT0FPekM4dUUsT0FBUSxTQUFVN25DLEdBQ2pCLElBQ0kxcEMsRUFBRzY5QyxFQURIcnlDLEVBQU9wSixNQUFNUixVQUFVMEQsTUFBTW5GLEtBQUtrRixVQUFXLEdBR2pELElBQUtyRixLQUFLeUMsS0FBSzJ5RCxTQUNkdlgsRUFBUXA3QyxLQUFLMnlELFFBQVFwMUQsSUFFWDBwQyxJQUNUbVUsRUFBTW5VLEdBQVkvbEMsTUFBTWs2QyxFQUFPcnlDLEdBSWpDLE9BQU8vSSxNQUdScWhFLE1BQU8sU0FBVWwyRCxHQUNoQm5MLEtBQUtzdUUsVUFBVW5qRSxFQUFJbzZELFNBQVVwNkQsSUFHOUJxMkQsU0FBVSxTQUFVcjJELEdBQ25CbkwsS0FBS3N1RSxVQUFVbmpFLEVBQUlzNEQsWUFBYXQ0RCxJQVVqQ21qRSxVQUFXLFNBQVUzd0MsRUFBUXRrQixHQUM1QixJQUFLLElBQUk5YixLQUFLeUMsS0FBSzJ5RCxRQUNsQmgxQixFQUFPamdDLEtBQUsyYixFQUFTclosS0FBSzJ5RCxRQUFRcDFELElBRW5DLE9BQU95QyxNQUtSK3VFLFNBQVUsU0FBVXBqRSxHQUNuQixPQUFPM0wsS0FBSzJ5RCxRQUFRaG5ELElBS3JCcWpFLFVBQVcsV0FDVixJQUFJamQsRUFBUyxHQUViLE9BREEveEQsS0FBS3N1RSxVQUFVdmMsRUFBTzV2RCxLQUFNNHZELEdBQ3JCQSxHQUtSdVMsVUFBVyxTQUFVMkssR0FDcEIsT0FBT2p2RSxLQUFLOHVFLE9BQU8sWUFBYUcsSUFLakNMLFdBQVksU0FBVXh6QixHQUNyQixPQUFPOUQsRUFBTThELE1BaUNYOHpCLEdBQWVQLEdBQVduOEQsT0FBTyxDQUVwQyt5RCxTQUFVLFNBQVVucUIsR0FDbkIsT0FBSXA3QyxLQUFLZ2xFLFNBQVM1cEIsR0FDVnA3QyxNQUdSbzdDLEVBQU1GLGVBQWVsN0MsTUFFckIydUUsR0FBV3h2RSxVQUFVb21FLFNBQVM3bkUsS0FBS3NDLEtBQU1vN0MsR0FJbENwN0MsS0FBSzI2QyxLQUFLLFdBQVksQ0FBQ1MsTUFBT0EsTUFHdENxb0IsWUFBYSxTQUFVcm9CLEdBQ3RCLE9BQUtwN0MsS0FBS2dsRSxTQUFTNXBCLElBR2ZBLEtBQVNwN0MsS0FBSzJ5RCxVQUNqQnZYLEVBQVFwN0MsS0FBSzJ5RCxRQUFRdlgsSUFHdEJBLEVBQU1ELGtCQUFrQm43QyxNQUV4QjJ1RSxHQUFXeHZFLFVBQVVza0UsWUFBWS9sRSxLQUFLc0MsS0FBTW83QyxHQUlyQ3A3QyxLQUFLMjZDLEtBQUssY0FBZSxDQUFDUyxNQUFPQSxLQVpoQ3A3QyxNQWlCVG12RSxTQUFVLFNBQVVwcUQsR0FDbkIsT0FBTy9rQixLQUFLOHVFLE9BQU8sV0FBWS9wRCxJQUtoQ3FxRCxhQUFjLFdBQ2IsT0FBT3B2RSxLQUFLOHVFLE9BQU8saUJBS3BCTyxZQUFhLFdBQ1osT0FBT3J2RSxLQUFLOHVFLE9BQU8sZ0JBS3BCaGEsVUFBVyxXQUNWLElBQUlyVyxFQUFTLElBQUl0QyxFQUVqQixJQUFLLElBQUl4d0MsS0FBTTNMLEtBQUsyeUQsUUFBUyxDQUM1QixJQUFJdlgsRUFBUXA3QyxLQUFLMnlELFFBQVFobkQsR0FDekI4eUMsRUFBT2pzQyxPQUFPNG9DLEVBQU0wWixVQUFZMVosRUFBTTBaLFlBQWMxWixFQUFNc2pCLGFBRTNELE9BQU9qZ0IsS0FzQ0w2d0IsR0FBT2gyQixFQUFNOW1DLE9BQU8sQ0EwQ3ZCMEksUUFBUyxDQUNScTBELFlBQWEsQ0FBQyxFQUFHLEdBQ2pCQyxjQUFlLENBQUMsRUFBRyxJQUdwQmgyQixXQUFZLFNBQVV0K0IsR0FDckJvOUIsRUFBV3Q0QyxLQUFNa2IsSUFNbEJ1MEQsV0FBWSxTQUFVQyxHQUNyQixPQUFPMXZFLEtBQUsydkUsWUFBWSxPQUFRRCxJQUtqQ0UsYUFBYyxTQUFVRixHQUN2QixPQUFPMXZFLEtBQUsydkUsWUFBWSxTQUFVRCxJQUduQ0MsWUFBYSxTQUFVN3hFLEVBQU00eEUsR0FDNUIsSUFBSXg0QixFQUFNbDNDLEtBQUs2dkUsWUFBWS94RSxHQUUzQixJQUFLbzVDLEVBQUssQ0FDVCxHQUFhLFNBQVRwNUMsRUFDSCxNQUFNLElBQUl3UixNQUFNLG1EQUVqQixPQUFPLEtBR1IsSUFBSXdnRSxFQUFNOXZFLEtBQUsrdkUsV0FBVzc0QixFQUFLdzRCLEdBQStCLFFBQXBCQSxFQUFRcmxCLFFBQW9CcWxCLEVBQVUsTUFHaEYsT0FGQTF2RSxLQUFLZ3dFLGVBQWVGLEVBQUtoeUUsR0FFbEJneUUsR0FHUkUsZUFBZ0IsU0FBVUYsRUFBS2h5RSxHQUM5QixJQUFJb2QsRUFBVWxiLEtBQUtrYixRQUNmKzBELEVBQWEvMEQsRUFBUXBkLEVBQU8sUUFFTixpQkFBZm15RSxJQUNWQSxFQUFhLENBQUNBLEVBQVlBLElBRzNCLElBQUl2d0MsRUFBT3FjLEVBQVFrMEIsR0FDZkMsRUFBU24wQixFQUFpQixXQUFUaitDLEdBQXFCb2QsRUFBUWkxRCxjQUFnQmoxRCxFQUFRazFELFlBQzlEMXdDLEdBQVFBLEVBQUt5ZCxTQUFTLEdBQUcsSUFFckMyeUIsRUFBSXhsQixVQUFZLGtCQUFvQnhzRCxFQUFPLEtBQU9vZCxFQUFRb3ZDLFdBQWEsSUFFbkU0bEIsSUFDSEosRUFBSS9xRCxNQUFNc3JELFlBQWVILEVBQU92b0UsRUFBSyxLQUNyQ21vRSxFQUFJL3FELE1BQU11ckQsV0FBZUosRUFBTzV1RSxFQUFLLE1BR2xDbytCLElBQ0hvd0MsRUFBSS9xRCxNQUFNaW9DLE1BQVN0dEIsRUFBSy8zQixFQUFJLEtBQzVCbW9FLEVBQUkvcUQsTUFBTWtvQyxPQUFTdnRCLEVBQUtwK0IsRUFBSSxPQUk5Qnl1RSxXQUFZLFNBQVU3NEIsRUFBS2h4QixHQUcxQixPQUZBQSxFQUFLQSxHQUFNakQsU0FBUzJDLGNBQWMsUUFDL0JzeEIsSUFBTUEsRUFDRmh4QixHQUdSMnBELFlBQWEsU0FBVS94RSxHQUN0QixPQUFPNG9ELElBQVUxbUQsS0FBS2tiLFFBQVFwZCxFQUFPLGNBQWdCa0MsS0FBS2tiLFFBQVFwZCxFQUFPLFVBMkJ2RXl5RSxHQUFjakIsR0FBSzk4RCxPQUFPLENBRTdCMEksUUFBUyxDQUNSczFELFFBQWUsa0JBQ2ZDLGNBQWUscUJBQ2ZDLFVBQWUsb0JBQ2ZDLFNBQWEsQ0FBQyxHQUFJLElBQ2xCUCxXQUFhLENBQUMsR0FBSSxJQUNsQmIsWUFBYSxDQUFDLEdBQUksSUFDbEJDLGNBQWUsQ0FBQyxJQUFLLElBQ3JCb0IsV0FBYSxDQUFDLEdBQUksS0FHbkJmLFlBQWEsU0FBVS94RSxHQVN0QixPQVJLeXlFLEdBQVlNLFlBQ2hCTixHQUFZTSxVQUFZN3dFLEtBQUs4d0Usb0JBT3RCOXdFLEtBQUtrYixRQUFRMjFELFdBQWFOLEdBQVlNLFdBQWF2QixHQUFLbndFLFVBQVUwd0UsWUFBWW55RSxLQUFLc0MsS0FBTWxDLElBR2xHZ3pFLGdCQUFpQixXQUNoQixJQUFJNXFELEVBQUtra0MsR0FBUyxNQUFRLDRCQUE2Qm5uQyxTQUFTN2hCLE1BQzVEbVMsRUFBT3kyQyxHQUFTOWpDLEVBQUkscUJBQ2I4akMsR0FBUzlqQyxFQUFJLG1CQVV4QixPQVJBakQsU0FBUzdoQixLQUFLc2tCLFlBQVlRLEdBR3pCM1MsRUFEWSxPQUFUQSxHQUF5QyxJQUF4QkEsRUFBSy9FLFFBQVEsT0FDMUIsR0FFQStFLEVBQUtWLFFBQVEsY0FBZSxJQUFJQSxRQUFRLDJCQUE0QixPQXlCMUVrK0QsR0FBYXJJLEdBQVFsMkQsT0FBTyxDQUMvQmduQyxXQUFZLFNBQVV3M0IsR0FDckJoeEUsS0FBS2l4RSxRQUFVRCxHQUdoQnBJLFNBQVUsV0FDVCxJQUFJc0ksRUFBT2x4RSxLQUFLaXhFLFFBQVFFLE1BRW5CbnhFLEtBQUtveEUsYUFDVHB4RSxLQUFLb3hFLFdBQWEsSUFBSS9ILEdBQVU2SCxFQUFNQSxHQUFNLElBRzdDbHhFLEtBQUtveEUsV0FBV3p5RCxHQUFHLENBQ2xCMHlELFVBQVdyeEUsS0FBS3N4RSxhQUNoQkMsUUFBU3Z4RSxLQUFLd3hFLFdBQ2RDLEtBQU16eEUsS0FBSzB4RSxRQUNYQyxRQUFTM3hFLEtBQUs0eEUsWUFDWjV4RSxNQUFNODVELFNBRVRoUCxHQUFTb21CLEVBQU0sNkJBR2hCckksWUFBYSxXQUNaN29FLEtBQUtveEUsV0FBVzlwQyxJQUFJLENBQ25CK3BDLFVBQVdyeEUsS0FBS3N4RSxhQUNoQkMsUUFBU3Z4RSxLQUFLd3hFLFdBQ2RDLEtBQU16eEUsS0FBSzB4RSxRQUNYQyxRQUFTM3hFLEtBQUs0eEUsWUFDWjV4RSxNQUFNaS9ELFVBRUxqL0QsS0FBS2l4RSxRQUFRRSxPQUNoQmxtQixHQUFZanJELEtBQUtpeEUsUUFBUUUsTUFBTyw2QkFJbENwUyxNQUFPLFdBQ04sT0FBTy8rRCxLQUFLb3hFLFlBQWNweEUsS0FBS294RSxXQUFXM1csUUFHM0NvWCxXQUFZLFNBQVVoeEUsR0FDckIsSUFBSW13RSxFQUFTaHhFLEtBQUtpeEUsUUFDZDlsRSxFQUFNNmxFLEVBQU85UCxLQUNiNFEsRUFBUTl4RSxLQUFLaXhFLFFBQVEvMUQsUUFBUTYyRCxhQUM3QjljLEVBQVVqMUQsS0FBS2l4RSxRQUFRLzFELFFBQVE4MkQsZUFDL0JDLEVBQVUvbEIsR0FBWThrQixFQUFPRyxPQUM3QjF5QixFQUFTdHpDLEVBQUlndEQsaUJBQ2IrWixFQUFTL21FLEVBQUl5d0QsaUJBRWJ1VyxFQUFZajJCLEVBQ2Z1QyxFQUFPOXVCLElBQUl1dEIsVUFBVWcxQixHQUFRanJFLElBQUlndUQsR0FDakN4VyxFQUFPNStCLElBQUlxOUIsVUFBVWcxQixHQUFRajFCLFNBQVNnWSxJQUd2QyxJQUFLa2QsRUFBVW4wQixTQUFTaTBCLEdBQVUsQ0FFakMsSUFBSUcsRUFBV3IyQixHQUNibjhCLEtBQUtDLElBQUlzeUQsRUFBVXR5RCxJQUFJbFksRUFBR3NxRSxFQUFRdHFFLEdBQUt3cUUsRUFBVXR5RCxJQUFJbFksSUFBTTgyQyxFQUFPNStCLElBQUlsWSxFQUFJd3FFLEVBQVV0eUQsSUFBSWxZLElBQ3hGaVksS0FBSytQLElBQUl3aUQsRUFBVXhpRCxJQUFJaG9CLEVBQUdzcUUsRUFBUXRxRSxHQUFLd3FFLEVBQVV4aUQsSUFBSWhvQixJQUFNODJDLEVBQU85dUIsSUFBSWhvQixFQUFJd3FFLEVBQVV4aUQsSUFBSWhvQixJQUV4RmlZLEtBQUtDLElBQUlzeUQsRUFBVXR5RCxJQUFJdmUsRUFBRzJ3RSxFQUFRM3dFLEdBQUs2d0UsRUFBVXR5RCxJQUFJdmUsSUFBTW05QyxFQUFPNStCLElBQUl2ZSxFQUFJNndFLEVBQVV0eUQsSUFBSXZlLElBQ3hGc2UsS0FBSytQLElBQUl3aUQsRUFBVXhpRCxJQUFJcnVCLEVBQUcyd0UsRUFBUTN3RSxHQUFLNndFLEVBQVV4aUQsSUFBSXJ1QixJQUFNbTlDLEVBQU85dUIsSUFBSXJ1QixFQUFJNndFLEVBQVV4aUQsSUFBSXJ1QixJQUN4Ris3QyxXQUFXeTBCLEdBRWIzbUUsRUFBSXdxRCxNQUFNeWMsRUFBVSxDQUFDdGUsU0FBUyxJQUU5Qjl6RCxLQUFLb3hFLFdBQVczRyxRQUFRenRCLEtBQUtvMUIsR0FDN0JweUUsS0FBS294RSxXQUFXamdCLFVBQVVuVSxLQUFLbzFCLEdBRS9CdG1CLEdBQVlrbEIsRUFBT0csTUFBT254RSxLQUFLb3hFLFdBQVczRyxTQUMxQ3pxRSxLQUFLMHhFLFFBQVE3d0UsR0FFYmIsS0FBS3F5RSxZQUFjbjVCLEVBQWlCbDVDLEtBQUs2eEUsV0FBVzl5RSxLQUFLaUIsS0FBTWEsTUFJakV5d0UsYUFBYyxXQVFidHhFLEtBQUtzeUUsV0FBYXR5RSxLQUFLaXhFLFFBQVF2UyxZQUcvQjErRCxLQUFLaXhFLFFBQVFzQixZQUFjdnlFLEtBQUtpeEUsUUFBUXNCLGFBRXhDdnlFLEtBQUtpeEUsUUFDSHQyQixLQUFLLGFBQ0xBLEtBQUssY0FHUjYyQixXQUFZLFNBQVUzd0UsR0FDakJiLEtBQUtpeEUsUUFBUS8xRCxRQUFRczNELFVBQ3hCcDVCLEVBQWdCcDVDLEtBQUtxeUUsYUFDckJyeUUsS0FBS3F5RSxZQUFjbjVCLEVBQWlCbDVDLEtBQUs2eEUsV0FBVzl5RSxLQUFLaUIsS0FBTWEsTUFJakU2d0UsUUFBUyxTQUFVN3dFLEdBQ2xCLElBQUltd0UsRUFBU2h4RSxLQUFLaXhFLFFBQ2R3QixFQUFTekIsRUFBTzBCLFFBQ2hCVCxFQUFVL2xCLEdBQVk4a0IsRUFBT0csT0FDN0I3dkIsRUFBUzB2QixFQUFPOVAsS0FBS3hHLG1CQUFtQnVYLEdBR3hDUSxHQUNIM21CLEdBQVkybUIsRUFBUVIsR0FHckJqQixFQUFPMkIsUUFBVXJ4QixFQUNqQnpnRCxFQUFFeWdELE9BQVNBLEVBQ1h6Z0QsRUFBRSt4RSxVQUFZNXlFLEtBQUtzeUUsV0FJbkJ0QixFQUNLcjJCLEtBQUssT0FBUTk1QyxHQUNiODVDLEtBQUssT0FBUTk1QyxJQUduQit3RSxXQUFZLFNBQVUvd0UsR0FJcEJ1NEMsRUFBZ0JwNUMsS0FBS3F5RSxvQkFJZnJ5RSxLQUFLc3lFLFdBQ1p0eUUsS0FBS2l4RSxRQUNBdDJCLEtBQUssV0FDTEEsS0FBSyxVQUFXOTVDLE1BaUJuQmd5RSxHQUFTaEYsR0FBTXI3RCxPQUFPLENBSXpCMEksUUFBUyxDQUtSZzJELEtBQU0sSUFBSVgsR0FHVnVDLGFBQWEsRUFJYkMsVUFBVSxFQUlWOU8sTUFBTyxHQUlQdG5CLElBQUssR0FJTHEyQixhQUFjLEVBSWQzbkIsUUFBUyxFQUlUNG5CLGFBQWEsRUFJYkMsV0FBWSxJQUlaM1ksS0FBTSxhQUlOMkMsV0FBWSxhQUtaMkIscUJBQXFCLEVBS3JCc1UsV0FBVyxFQUlYWCxTQUFTLEVBS1RSLGVBQWdCLENBQUMsR0FBSSxJQUlyQkQsYUFBYyxJQVFmdjRCLFdBQVksU0FBVThILEVBQVFwbUMsR0FDN0JvOUIsRUFBV3Q0QyxLQUFNa2IsR0FDakJsYixLQUFLMnlFLFFBQVUvMUIsRUFBUzBFLElBR3pCK2YsTUFBTyxTQUFVbDJELEdBQ2hCbkwsS0FBS3N6RCxjQUFnQnR6RCxLQUFLc3pELGVBQWlCbm9ELEVBQUkrUCxRQUFRbTNDLG9CQUVuRHJ5RCxLQUFLc3pELGVBQ1Jub0QsRUFBSXdULEdBQUcsV0FBWTNlLEtBQUs0Z0UsYUFBYzVnRSxNQUd2Q0EsS0FBS296RSxZQUNMcHpFLEtBQUtvbUIsVUFHTm83QyxTQUFVLFNBQVVyMkQsR0FDZm5MLEtBQUttK0QsVUFBWW4rRCxLQUFLbStELFNBQVNXLFlBQ2xDOStELEtBQUtrYixRQUFRaTRELFdBQVksRUFDekJuekUsS0FBS20rRCxTQUFTMEssc0JBRVI3b0UsS0FBS20rRCxTQUVSbitELEtBQUtzekQsZUFDUm5vRCxFQUFJbThCLElBQUksV0FBWXRuQyxLQUFLNGdFLGFBQWM1Z0UsTUFHeENBLEtBQUtxekUsY0FDTHJ6RSxLQUFLc3pFLGlCQUdObEYsVUFBVyxXQUNWLE1BQU8sQ0FDTngzQixLQUFNNTJDLEtBQUtvbUIsT0FDWG10RCxVQUFXdnpFLEtBQUtvbUIsU0FNbEJzNEMsVUFBVyxXQUNWLE9BQU8xK0QsS0FBSzJ5RSxTQUtiYSxVQUFXLFNBQVVseUIsR0FDcEIsSUFBSXN4QixFQUFZNXlFLEtBQUsyeUUsUUFNckIsT0FMQTN5RSxLQUFLMnlFLFFBQVUvMUIsRUFBUzBFLEdBQ3hCdGhELEtBQUtvbUIsU0FJRXBtQixLQUFLMjZDLEtBQUssT0FBUSxDQUFDaTRCLFVBQVdBLEVBQVd0eEIsT0FBUXRoRCxLQUFLMnlFLFdBSzlEYyxnQkFBaUIsU0FBVTduQixHQUUxQixPQURBNXJELEtBQUtrYixRQUFRODNELGFBQWVwbkIsRUFDckI1ckQsS0FBS29tQixVQUtic3RELFFBQVMsV0FDUixPQUFPMXpFLEtBQUtrYixRQUFRZzJELE1BS3JCeUMsUUFBUyxTQUFVekMsR0FhbEIsT0FYQWx4RSxLQUFLa2IsUUFBUWcyRCxLQUFPQSxFQUVoQmx4RSxLQUFLa2hFLE9BQ1JsaEUsS0FBS296RSxZQUNMcHpFLEtBQUtvbUIsVUFHRnBtQixLQUFLNHpFLFFBQ1I1ekUsS0FBSzZ6RSxVQUFVN3pFLEtBQUs0ekUsT0FBUTV6RSxLQUFLNHpFLE9BQU8xNEQsU0FHbENsYixNQUdSdWpCLFdBQVksV0FDWCxPQUFPdmpCLEtBQUtteEUsT0FHYi9xRCxPQUFRLFdBRVAsR0FBSXBtQixLQUFLbXhFLE9BQVNueEUsS0FBS2toRSxLQUFNLENBQzVCLElBQUlyVixFQUFNN3JELEtBQUtraEUsS0FBSzlFLG1CQUFtQnA4RCxLQUFLMnlFLFNBQVN4NkIsUUFDckRuNEMsS0FBSzh6RSxRQUFRam9CLEdBR2QsT0FBTzdyRCxNQUdSb3pFLFVBQVcsV0FDVixJQUFJbDRELEVBQVVsYixLQUFLa2IsUUFDZjY0RCxFQUFhLGlCQUFtQi96RSxLQUFLc3pELGNBQWdCLFdBQWEsUUFFbEU0ZCxFQUFPaDJELEVBQVFnMkQsS0FBS3pCLFdBQVd6dkUsS0FBS214RSxPQUNwQzZDLEdBQVUsRUFHVjlDLElBQVNseEUsS0FBS214RSxRQUNibnhFLEtBQUtteEUsT0FDUm54RSxLQUFLcXpFLGNBRU5XLEdBQVUsRUFFTjk0RCxFQUFRK29ELFFBQ1hpTixFQUFLak4sTUFBUS9vRCxFQUFRK29ELE9BR0QsUUFBakJpTixFQUFLN21CLFVBQ1I2bUIsRUFBS3YwQixJQUFNemhDLEVBQVF5aEMsS0FBTyxLQUk1Qm1PLEdBQVNvbUIsRUFBTTZDLEdBRVg3NEQsRUFBUTYzRCxXQUNYN0IsRUFBSzNrQixTQUFXLEtBR2pCdnNELEtBQUtteEUsTUFBUUQsRUFFVGgyRCxFQUFRKzNELGFBQ1hqekUsS0FBSzJlLEdBQUcsQ0FDUHMxRCxVQUFXajBFLEtBQUtrMEUsY0FDaEJDLFNBQVVuMEUsS0FBS28wRSxlQUlqQixJQUFJQyxFQUFZbjVELEVBQVFnMkQsS0FBS3RCLGFBQWE1dkUsS0FBSzB5RSxTQUMzQzRCLEdBQVksRUFFWkQsSUFBY3IwRSxLQUFLMHlFLFVBQ3RCMXlFLEtBQUtzekUsZ0JBQ0xnQixHQUFZLEdBR1RELElBQ0h2cEIsR0FBU3VwQixFQUFXTixHQUNwQk0sRUFBVTEzQixJQUFNLElBRWpCMzhDLEtBQUsweUUsUUFBVTJCLEVBR1huNUQsRUFBUW13QyxRQUFVLEdBQ3JCcnJELEtBQUt1MEUsaUJBSUZQLEdBQ0hoMEUsS0FBSys3RCxVQUFVMTJDLFlBQVlybEIsS0FBS214RSxPQUVqQ254RSxLQUFLdzBFLG1CQUNESCxHQUFhQyxHQUNoQnQwRSxLQUFLKzdELFFBQVE3Z0QsRUFBUWdpRCxZQUFZNzNDLFlBQVlybEIsS0FBSzB5RSxVQUlwRFcsWUFBYSxXQUNScnpFLEtBQUtrYixRQUFRKzNELGFBQ2hCanpFLEtBQUtzbkMsSUFBSSxDQUNSMnNDLFVBQVdqMEUsS0FBS2swRSxjQUNoQkMsU0FBVW4wRSxLQUFLbzBFLGVBSWpCaG9FLEdBQU9wTSxLQUFLbXhFLE9BQ1pueEUsS0FBS2t1RSx3QkFBd0JsdUUsS0FBS214RSxPQUVsQ254RSxLQUFLbXhFLE1BQVEsTUFHZG1DLGNBQWUsV0FDVnR6RSxLQUFLMHlFLFNBQ1J0bUUsR0FBT3BNLEtBQUsweUUsU0FFYjF5RSxLQUFLMHlFLFFBQVUsTUFHaEJvQixRQUFTLFNBQVVqb0IsR0FFZDdyRCxLQUFLbXhFLE9BQ1JybEIsR0FBWTlyRCxLQUFLbXhFLE1BQU90bEIsR0FHckI3ckQsS0FBSzB5RSxTQUNSNW1CLEdBQVk5ckQsS0FBSzB5RSxRQUFTN21CLEdBRzNCN3JELEtBQUt5MEUsUUFBVTVvQixFQUFJdnFELEVBQUl0QixLQUFLa2IsUUFBUTgzRCxhQUVwQ2h6RSxLQUFLbzBFLGdCQUdOTSxjQUFlLFNBQVU5b0IsR0FDcEI1ckQsS0FBS214RSxRQUNSbnhFLEtBQUtteEUsTUFBTXBzRCxNQUFNa3FELE9BQVNqdkUsS0FBS3kwRSxRQUFVN29CLElBSTNDZ1YsYUFBYyxTQUFVK1QsR0FDdkIsSUFBSTlvQixFQUFNN3JELEtBQUtraEUsS0FBSy9CLHVCQUF1Qm4vRCxLQUFLMnlFLFFBQVNnQyxFQUFJLzlCLEtBQU0rOUIsRUFBSWgrQixRQUFRd0IsUUFFL0VuNEMsS0FBSzh6RSxRQUFRam9CLElBR2Qyb0IsaUJBQWtCLFdBRWpCLEdBQUt4MEUsS0FBS2tiLFFBQVE0M0QsY0FFbEJob0IsR0FBUzlxRCxLQUFLbXhFLE1BQU8sdUJBRXJCbnhFLEtBQUtndUUscUJBQXFCaHVFLEtBQUtteEUsT0FFM0JKLElBQVksQ0FDZixJQUFJb0MsRUFBWW56RSxLQUFLa2IsUUFBUWk0RCxVQUN6Qm56RSxLQUFLbStELFdBQ1JnVixFQUFZbnpFLEtBQUttK0QsU0FBU1csVUFDMUI5K0QsS0FBS20rRCxTQUFTYyxXQUdmai9ELEtBQUttK0QsU0FBVyxJQUFJNFMsR0FBVy93RSxNQUUzQm16RSxHQUNIbnpFLEtBQUttK0QsU0FBU3JFLFdBT2pCMU8sV0FBWSxTQUFVQyxHQU1yQixPQUxBcnJELEtBQUtrYixRQUFRbXdDLFFBQVVBLEVBQ25CcnJELEtBQUtraEUsTUFDUmxoRSxLQUFLdTBFLGlCQUdDdjBFLE1BR1J1MEUsZUFBZ0IsV0FDZixJQUFJbHBCLEVBQVVyckQsS0FBS2tiLFFBQVFtd0MsUUFFdkJyckQsS0FBS214RSxPQUNSL2xCLEdBQVdwckQsS0FBS214RSxNQUFPOWxCLEdBR3BCcnJELEtBQUsweUUsU0FDUnRuQixHQUFXcHJELEtBQUsweUUsUUFBU3JuQixJQUkzQjZvQixjQUFlLFdBQ2RsMEUsS0FBSzAwRSxjQUFjMTBFLEtBQUtrYixRQUFRZzRELGFBR2pDa0IsYUFBYyxXQUNicDBFLEtBQUswMEUsY0FBYyxJQUdwQkUsZ0JBQWlCLFdBQ2hCLE9BQU81MEUsS0FBS2tiLFFBQVFnMkQsS0FBS2gyRCxRQUFRcTBELGFBR2xDc0Ysa0JBQW1CLFdBQ2xCLE9BQU83MEUsS0FBS2tiLFFBQVFnMkQsS0FBS2gyRCxRQUFRczBELGlCQXNCL0JzRixHQUFPakgsR0FBTXI3RCxPQUFPLENBSXZCMEksUUFBUyxDQUdSNjVELFFBQVEsRUFJUkMsTUFBTyxVQUlQQyxPQUFRLEVBSVI1cEIsUUFBUyxFQUlUNnBCLFFBQVMsUUFJVEMsU0FBVSxRQUlWQyxVQUFXLEtBSVhDLFdBQVksS0FJWkMsTUFBTSxFQUlOQyxVQUFXLEtBSVhDLFlBQWEsR0FJYkMsU0FBVSxVQUtWM0MsYUFBYSxFQUtialUscUJBQXFCLEdBR3RCd1AsVUFBVyxTQUFVbGpFLEdBR3BCbkwsS0FBS3E2RCxVQUFZbHZELEVBQUl1cUUsWUFBWTExRSxPQUdsQ3FoRSxNQUFPLFdBQ05yaEUsS0FBS3E2RCxVQUFVc2IsVUFBVTMxRSxNQUN6QkEsS0FBSzQxRSxTQUNMNTFFLEtBQUtxNkQsVUFBVXdiLFNBQVM3MUUsT0FHekJ3aEUsU0FBVSxXQUNUeGhFLEtBQUtxNkQsVUFBVXliLFlBQVk5MUUsT0FLNUIrMUUsT0FBUSxXQUlQLE9BSEkvMUUsS0FBS2toRSxNQUNSbGhFLEtBQUtxNkQsVUFBVTJiLFlBQVloMkUsTUFFckJBLE1BS1JtdkUsU0FBVSxTQUFVcHFELEdBUW5CLE9BUEF1ekIsRUFBV3Q0QyxLQUFNK2tCLEdBQ2Iva0IsS0FBS3E2RCxZQUNScjZELEtBQUtxNkQsVUFBVTRiLGFBQWFqMkUsTUFDeEJBLEtBQUtrYixRQUFRNjVELFFBQVVod0QsR0FBUzltQixPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUtxbkIsRUFBTyxXQUMvRS9rQixLQUFLazJFLGlCQUdBbDJFLE1BS1JvdkUsYUFBYyxXQUliLE9BSElwdkUsS0FBS3E2RCxXQUNScjZELEtBQUtxNkQsVUFBVTZaLGNBQWNsMEUsTUFFdkJBLE1BS1JxdkUsWUFBYSxXQUlaLE9BSElydkUsS0FBS3E2RCxXQUNScjZELEtBQUtxNkQsVUFBVThiLGFBQWFuMkUsTUFFdEJBLE1BR1J1akIsV0FBWSxXQUNYLE9BQU92akIsS0FBS28yRSxPQUdiUixPQUFRLFdBRVA1MUUsS0FBS3EyRSxXQUNMcjJFLEtBQUttakUsV0FHTm1ULGdCQUFpQixXQUVoQixPQUFRdDJFLEtBQUtrYixRQUFRNjVELE9BQVMvMEUsS0FBS2tiLFFBQVErNUQsT0FBUyxFQUFJLEdBQUtqMUUsS0FBS3E2RCxVQUFVbi9DLFFBQVE0dkQsYUFZbEZ5TCxHQUFlekIsR0FBS3RpRSxPQUFPLENBSTlCMEksUUFBUyxDQUNSbzZELE1BQU0sRUFJTmtCLE9BQVEsSUFHVGg5QixXQUFZLFNBQVU4SCxFQUFRcG1DLEdBQzdCbzlCLEVBQVd0NEMsS0FBTWtiLEdBQ2pCbGIsS0FBSzJ5RSxRQUFVLzFCLEVBQVMwRSxHQUN4QnRoRCxLQUFLMitELFFBQVUzK0QsS0FBS2tiLFFBQVFzN0QsUUFLN0JoRCxVQUFXLFNBQVVseUIsR0FDcEIsSUFBSXN4QixFQUFZNXlFLEtBQUsyeUUsUUFNckIsT0FMQTN5RSxLQUFLMnlFLFFBQVUvMUIsRUFBUzBFLEdBQ3hCdGhELEtBQUsrMUUsU0FJRS8xRSxLQUFLMjZDLEtBQUssT0FBUSxDQUFDaTRCLFVBQVdBLEVBQVd0eEIsT0FBUXRoRCxLQUFLMnlFLFdBSzlEalUsVUFBVyxXQUNWLE9BQU8xK0QsS0FBSzJ5RSxTQUtiOEQsVUFBVyxTQUFVRCxHQUVwQixPQURBeDJFLEtBQUtrYixRQUFRczdELE9BQVN4MkUsS0FBSzIrRCxRQUFVNlgsRUFDOUJ4MkUsS0FBSysxRSxVQUtiVyxVQUFXLFdBQ1YsT0FBTzEyRSxLQUFLMitELFNBR2J3USxTQUFXLFNBQVVqMEQsR0FDcEIsSUFBSXM3RCxFQUFTdDdELEdBQVdBLEVBQVFzN0QsUUFBVXgyRSxLQUFLMitELFFBRy9DLE9BRkFtVyxHQUFLMzFFLFVBQVVnd0UsU0FBU3p4RSxLQUFLc0MsS0FBTWtiLEdBQ25DbGIsS0FBS3kyRSxVQUFVRCxHQUNSeDJFLE1BR1JxMkUsU0FBVSxXQUNUcjJFLEtBQUsyMkUsT0FBUzMyRSxLQUFLa2hFLEtBQUs5RSxtQkFBbUJwOEQsS0FBSzJ5RSxTQUNoRDN5RSxLQUFLazJFLGlCQUdOQSxjQUFlLFdBQ2QsSUFBSTczRSxFQUFJMkIsS0FBSzIrRCxRQUNUaVksRUFBSzUyRSxLQUFLNjJFLFVBQVl4NEUsRUFDdEJ3dEMsRUFBSTdyQyxLQUFLczJFLGtCQUNUajNFLEVBQUksQ0FBQ2hCLEVBQUl3dEMsRUFBRytxQyxFQUFLL3FDLEdBQ3JCN3JDLEtBQUs4MkUsVUFBWSxJQUFJOTZCLEVBQU9oOEMsS0FBSzIyRSxPQUFPMTVCLFNBQVM1OUMsR0FBSVcsS0FBSzIyRSxPQUFPMXZFLElBQUk1SCxLQUd0RThqRSxRQUFTLFdBQ0puakUsS0FBS2toRSxNQUNSbGhFLEtBQUtnMkUsZUFJUEEsWUFBYSxXQUNaaDJFLEtBQUtxNkQsVUFBVTBjLGNBQWMvMkUsT0FHOUJnM0UsT0FBUSxXQUNQLE9BQU9oM0UsS0FBSzIrRCxVQUFZMytELEtBQUtxNkQsVUFBVTRjLFFBQVF6NEIsV0FBV3grQyxLQUFLODJFLFlBSWhFSSxlQUFnQixTQUFVNzNFLEdBQ3pCLE9BQU9BLEVBQUV3K0MsV0FBVzc5QyxLQUFLMjJFLFNBQVczMkUsS0FBSzIrRCxRQUFVMytELEtBQUtzMkUscUJBMkJ0RGEsR0FBU1osR0FBYS9qRSxPQUFPLENBRWhDZ25DLFdBQVksU0FBVThILEVBQVFwbUMsRUFBU2s4RCxHQVF0QyxHQVB1QixpQkFBWmw4RCxJQUVWQSxFQUFVMUksRUFBTyxHQUFJNGtFLEVBQWUsQ0FBQ1osT0FBUXQ3RCxLQUU5Q285QixFQUFXdDRDLEtBQU1rYixHQUNqQmxiLEtBQUsyeUUsUUFBVS8xQixFQUFTMEUsR0FFcEJ6L0IsTUFBTTdoQixLQUFLa2IsUUFBUXM3RCxRQUFXLE1BQU0sSUFBSWxuRSxNQUFNLCtCQUtsRHRQLEtBQUtxM0UsU0FBV3IzRSxLQUFLa2IsUUFBUXM3RCxRQUs5QkMsVUFBVyxTQUFVRCxHQUVwQixPQURBeDJFLEtBQUtxM0UsU0FBV2IsRUFDVHgyRSxLQUFLKzFFLFVBS2JXLFVBQVcsV0FDVixPQUFPMTJFLEtBQUtxM0UsVUFLYnZpQixVQUFXLFdBQ1YsSUFBSXdpQixFQUFPLENBQUN0M0UsS0FBSzIrRCxRQUFTMytELEtBQUs2MkUsVUFBWTcyRSxLQUFLMitELFNBRWhELE9BQU8sSUFBSXhpQixFQUNWbjhDLEtBQUtraEUsS0FBS3hHLG1CQUFtQjE2RCxLQUFLMjJFLE9BQU8xNUIsU0FBU3E2QixJQUNsRHQzRSxLQUFLa2hFLEtBQUt4RyxtQkFBbUIxNkQsS0FBSzIyRSxPQUFPMXZFLElBQUlxd0UsTUFHL0NuSSxTQUFVMkYsR0FBSzMxRSxVQUFVZ3dFLFNBRXpCa0gsU0FBVSxXQUVULElBQUkzNUIsRUFBTTE4QyxLQUFLMnlFLFFBQVFqMkIsSUFDbkJELEVBQU16OEMsS0FBSzJ5RSxRQUFRbDJCLElBQ25CdHhDLEVBQU1uTCxLQUFLa2hFLEtBQ1h0UCxFQUFNem1ELEVBQUkrUCxRQUFRMDJDLElBRXRCLEdBQUlBLEVBQUloUixXQUFhRCxFQUFNQyxTQUFVLENBQ3BDLElBQUkvaUQsRUFBSStoQixLQUFLdWhDLEdBQUssSUFDZG8yQixFQUFRdjNFLEtBQUtxM0UsU0FBVzEyQixFQUFNMVcsRUFBS3BzQyxFQUNuQ291RCxFQUFNOWdELEVBQUk0QyxRQUFRLENBQUMwdUMsRUFBTTg2QixFQUFNNzZCLElBQy9CODZCLEVBQVNyc0UsRUFBSTRDLFFBQVEsQ0FBQzB1QyxFQUFNODZCLEVBQU03NkIsSUFDbENyOUMsRUFBSTRzRCxFQUFJaGxELElBQUl1d0UsR0FBUXI2QixTQUFTLEdBQzdCMEYsRUFBTzEzQyxFQUFJNDJDLFVBQVUxaUQsR0FBR285QyxJQUN4Qmc3QixFQUFPNzNELEtBQUs4M0QsTUFBTTkzRCxLQUFLc2hDLElBQUlxMkIsRUFBTzE1RSxHQUFLK2hCLEtBQUttakMsSUFBSXRHLEVBQU01K0MsR0FBSytoQixLQUFLbWpDLElBQUlGLEVBQU9obEQsS0FDbEUraEIsS0FBS3NoQyxJQUFJekUsRUFBTTUrQyxHQUFLK2hCLEtBQUtzaEMsSUFBSTJCLEVBQU9obEQsS0FBT0EsR0FFcERna0IsTUFBTTQxRCxJQUFrQixJQUFUQSxLQUNsQkEsRUFBT0YsRUFBTzMzRCxLQUFLc2hDLElBQUl0aEMsS0FBS3VoQyxHQUFLLElBQU0xRSxJQUd4Q3o4QyxLQUFLMjJFLE9BQVN0M0UsRUFBRTQ5QyxTQUFTOXhDLEVBQUl5d0Qsa0JBQzdCNTdELEtBQUsyK0QsUUFBVTk4QyxNQUFNNDFELEdBQVEsRUFBSXA0RSxFQUFFc0ksRUFBSXdELEVBQUk0QyxRQUFRLENBQUM4MEMsRUFBTW5HLEVBQU0rNkIsSUFBTzl2RSxFQUN2RTNILEtBQUs2MkUsU0FBV3gzRSxFQUFFaUMsRUFBSTJxRCxFQUFJM3FELE1BRXBCLENBQ04sSUFBSW9oRCxFQUFVa1AsRUFBSTdQLFVBQVU2UCxFQUFJN2pELFFBQVEvTixLQUFLMnlFLFNBQVMxMUIsU0FBUyxDQUFDajlDLEtBQUtxM0UsU0FBVSxLQUUvRXIzRSxLQUFLMjJFLE9BQVN4ckUsRUFBSWl4RCxtQkFBbUJwOEQsS0FBSzJ5RSxTQUMxQzN5RSxLQUFLMitELFFBQVUzK0QsS0FBSzIyRSxPQUFPaHZFLEVBQUl3RCxFQUFJaXhELG1CQUFtQjFaLEdBQVMvNkMsRUFHaEUzSCxLQUFLazJFLG1CQXNESHlCLEdBQVc3QyxHQUFLdGlFLE9BQU8sQ0FJMUIwSSxRQUFTLENBSVIwOEQsYUFBYyxFQUlkQyxRQUFRLEdBR1RyK0IsV0FBWSxTQUFVOEMsRUFBU3BoQyxHQUM5Qm85QixFQUFXdDRDLEtBQU1rYixHQUNqQmxiLEtBQUs4M0UsWUFBWXg3QixJQUtsQnk3QixXQUFZLFdBQ1gsT0FBTy8zRSxLQUFLZzRFLFVBS2JDLFdBQVksU0FBVTM3QixHQUVyQixPQURBdDhDLEtBQUs4M0UsWUFBWXg3QixHQUNWdDhDLEtBQUsrMUUsVUFLYi9pRSxRQUFTLFdBQ1IsT0FBUWhULEtBQUtnNEUsU0FBUzkxRSxRQUt2QmcyRSxrQkFBbUIsU0FBVTc0RSxHQU01QixJQUxBLElBR0lvc0UsRUFBSUMsRUFISnlNLEVBQWNqcUUsSUFDZGtxRSxFQUFXLEtBQ1hDLEVBQVVoTixHQUdMam5ELEVBQUksRUFBR2swRCxFQUFPdDRFLEtBQUt1NEUsT0FBT3IyRSxPQUFRa2lCLEVBQUlrMEQsRUFBTWwwRCxJQUdwRCxJQUZBLElBQUk2M0IsRUFBU2o4QyxLQUFLdTRFLE9BQU9uMEQsR0FFaEI3bUIsRUFBSSxFQUFHNE0sRUFBTTh4QyxFQUFPLzVDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQUssQ0FJbEQsSUFBSTR0RSxFQUFTa04sRUFBUWg1RSxFQUhyQm9zRSxFQUFLeHZCLEVBQU8xK0MsRUFBSSxHQUNoQm11RSxFQUFLenZCLEVBQU8xK0MsSUFFb0IsR0FFNUI0dEUsRUFBU2dOLElBQ1pBLEVBQWNoTixFQUNkaU4sRUFBV0MsRUFBUWg1RSxFQUFHb3NFLEVBQUlDLElBTzdCLE9BSEkwTSxJQUNIQSxFQUFTeDNCLFNBQVdoaEMsS0FBS2srQixLQUFLcTZCLElBRXhCQyxHQUtSbDZCLFVBQVcsV0FFVixJQUFLbCtDLEtBQUtraEUsS0FDVCxNQUFNLElBQUk1eEQsTUFBTSxrREFHakIsSUFBSS9SLEVBQUdpN0UsRUFBVUMsRUFBU0MsRUFBTWpOLEVBQUlDLEVBQUk1RCxFQUNwQzdyQixFQUFTajhDLEtBQUsyNEUsT0FBTyxHQUNyQnh1RSxFQUFNOHhDLEVBQU8vNUMsT0FFakIsSUFBS2lJLEVBQU8sT0FBTyxLQUluQixJQUFLNU0sRUFBSSxFQUFHaTdFLEVBQVcsRUFBR2o3RSxFQUFJNE0sRUFBTSxFQUFHNU0sSUFDdENpN0UsR0FBWXY4QixFQUFPMStDLEdBQUdzZ0QsV0FBVzVCLEVBQU8xK0MsRUFBSSxJQUFNLEVBSW5ELEdBQWlCLElBQWJpN0UsRUFDSCxPQUFPeDRFLEtBQUtraEUsS0FBS3hHLG1CQUFtQnplLEVBQU8sSUFHNUMsSUFBSzErQyxFQUFJLEVBQUdtN0UsRUFBTyxFQUFHbjdFLEVBQUk0TSxFQUFNLEVBQUc1TSxJQU1sQyxHQUxBa3VFLEVBQUt4dkIsRUFBTzErQyxHQUNabXVFLEVBQUt6dkIsRUFBTzErQyxFQUFJLElBRWhCbTdFLEdBREFELEVBQVVoTixFQUFHNXRCLFdBQVc2dEIsSUFHYjhNLEVBRVYsT0FEQTFRLEdBQVM0USxFQUFPRixHQUFZQyxFQUNyQno0RSxLQUFLa2hFLEtBQUt4RyxtQkFBbUIsQ0FDbkNnUixFQUFHL2pFLEVBQUltZ0UsR0FBUzRELEVBQUcvakUsRUFBSThqRSxFQUFHOWpFLEdBQzFCK2pFLEVBQUdwcUUsRUFBSXdtRSxHQUFTNEQsRUFBR3BxRSxFQUFJbXFFLEVBQUducUUsTUFROUJ3ekQsVUFBVyxXQUNWLE9BQU85MEQsS0FBS2kzRSxTQU9iMkIsVUFBVyxTQUFVdDNCLEVBQVFoRixHQUs1QixPQUpBQSxFQUFVQSxHQUFXdDhDLEtBQUs2NEUsZ0JBQzFCdjNCLEVBQVMxRSxFQUFTMEUsR0FDbEJoRixFQUFRbjZDLEtBQUttL0MsR0FDYnRoRCxLQUFLaTNFLFFBQVF6a0UsT0FBTzh1QyxHQUNidGhELEtBQUsrMUUsVUFHYitCLFlBQWEsU0FBVXg3QixHQUN0QnQ4QyxLQUFLaTNFLFFBQVUsSUFBSTk2QixFQUNuQm44QyxLQUFLZzRFLFNBQVdoNEUsS0FBSzg0RSxnQkFBZ0J4OEIsSUFHdEN1OEIsY0FBZSxXQUNkLE9BQU9yTSxHQUFPeHNFLEtBQUtnNEUsVUFBWWg0RSxLQUFLZzRFLFNBQVdoNEUsS0FBS2c0RSxTQUFTLElBSTlEYyxnQkFBaUIsU0FBVXg4QixHQUkxQixJQUhBLElBQUl2N0MsRUFBUyxHQUNUZzRFLEVBQU92TSxHQUFPbHdCLEdBRVQvK0MsRUFBSSxFQUFHNE0sRUFBTW15QyxFQUFRcDZDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQzFDdzdFLEdBQ0hoNEUsRUFBT3hELEdBQUtxL0MsRUFBU04sRUFBUS8rQyxJQUM3QnlDLEtBQUtpM0UsUUFBUXprRSxPQUFPelIsRUFBT3hELEtBRTNCd0QsRUFBT3hELEdBQUt5QyxLQUFLODRFLGdCQUFnQng4QixFQUFRLytDLElBSTNDLE9BQU93RCxHQUdSczFFLFNBQVUsV0FDVCxJQUFJeFcsRUFBVyxJQUFJN2pCLEVBQ25CaDhDLEtBQUsyNEUsT0FBUyxHQUNkMzRFLEtBQUtnNUUsZ0JBQWdCaDVFLEtBQUtnNEUsU0FBVWg0RSxLQUFLMjRFLE9BQVE5WSxHQUU3QzcvRCxLQUFLaTNFLFFBQVFoNEIsV0FBYTRnQixFQUFTNWdCLFlBQ3RDai9DLEtBQUtpNUUsYUFBZXBaLEVBQ3BCNy9ELEtBQUtrMkUsa0JBSVBBLGNBQWUsV0FDZCxJQUFJcnFDLEVBQUk3ckMsS0FBS3MyRSxrQkFDVGozRSxFQUFJLElBQUlzOEMsRUFBTTlQLEVBQUdBLEdBQ3JCN3JDLEtBQUs4MkUsVUFBWSxJQUFJOTZCLEVBQU8sQ0FDM0JoOEMsS0FBS2k1RSxhQUFhdHBELElBQUlzdEIsU0FBUzU5QyxHQUMvQlcsS0FBS2k1RSxhQUFhcDVELElBQUk1WSxJQUFJNUgsTUFLNUIyNUUsZ0JBQWlCLFNBQVUxOEIsRUFBU3Y3QyxFQUFRbTRFLEdBQzNDLElBRUkzN0UsRUFBRzYxQixFQUZIMmxELEVBQU96OEIsRUFBUSxhQUFjRSxFQUM3QnJ5QyxFQUFNbXlDLEVBQVFwNkMsT0FHbEIsR0FBSTYyRSxFQUFNLENBRVQsSUFEQTNsRCxFQUFPLEdBQ0Y3MUIsRUFBSSxFQUFHQSxFQUFJNE0sRUFBSzVNLElBQ3BCNjFCLEVBQUs3MUIsR0FBS3lDLEtBQUtraEUsS0FBSzlFLG1CQUFtQjlmLEVBQVEvK0MsSUFDL0MyN0UsRUFBZ0IxbUUsT0FBTzRnQixFQUFLNzFCLElBRTdCd0QsRUFBT29CLEtBQUtpeEIsUUFFWixJQUFLNzFCLEVBQUksRUFBR0EsRUFBSTRNLEVBQUs1TSxJQUNwQnlDLEtBQUtnNUUsZ0JBQWdCMThCLEVBQVEvK0MsR0FBSXdELEVBQVFtNEUsSUFNNUNDLFlBQWEsV0FDWixJQUFJMTZCLEVBQVN6K0MsS0FBS3E2RCxVQUFVNGMsUUFHNUIsR0FEQWozRSxLQUFLdTRFLE9BQVMsR0FDVHY0RSxLQUFLODJFLFdBQWM5MkUsS0FBSzgyRSxVQUFVdDRCLFdBQVdDLEdBSWxELEdBQUl6K0MsS0FBS2tiLFFBQVEyOEQsT0FDaEI3M0UsS0FBS3U0RSxPQUFTdjRFLEtBQUsyNEUsV0FEcEIsQ0FLQSxJQUNJcDdFLEVBQUc2bUIsRUFBRzBvRCxFQUFHM2lFLEVBQUs0NUMsRUFBTXExQixFQUFTbjlCLEVBRDdCNTNCLEVBQVFya0IsS0FBS3U0RSxPQUdqQixJQUFLaDdFLEVBQUksRUFBR3V2RSxFQUFJLEVBQUczaUUsRUFBTW5LLEtBQUsyNEUsT0FBT3oyRSxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUdyRCxJQUFLNm1CLEVBQUksRUFBRzIvQixHQUZaOUgsRUFBU2o4QyxLQUFLMjRFLE9BQU9wN0UsSUFFSzJFLE9BQVFraUIsRUFBSTIvQixFQUFPLEVBQUczL0IsS0FDL0NnMUQsRUFBVXJOLEdBQVk5dkIsRUFBTzczQixHQUFJNjNCLEVBQU83M0IsRUFBSSxHQUFJcTZCLEVBQVFyNkIsR0FBRyxNQUkzREMsRUFBTXlvRCxHQUFLem9ELEVBQU15b0QsSUFBTSxHQUN2QnpvRCxFQUFNeW9ELEdBQUczcUUsS0FBS2kzRSxFQUFRLElBR2pCQSxFQUFRLEtBQU9uOUIsRUFBTzczQixFQUFJLElBQVFBLElBQU0yL0IsRUFBTyxJQUNuRDEvQixFQUFNeW9ELEdBQUczcUUsS0FBS2kzRSxFQUFRLElBQ3RCdE0sUUFPSnVNLGdCQUFpQixXQUloQixJQUhBLElBQUloMUQsRUFBUXJrQixLQUFLdTRFLE9BQ2J6TixFQUFZOXFFLEtBQUtrYixRQUFRMDhELGFBRXBCcjZFLEVBQUksRUFBRzRNLEVBQU1rYSxFQUFNbmlCLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQzVDOG1CLEVBQU05bUIsR0FBS3N0RSxHQUFTeG1ELEVBQU05bUIsR0FBSXV0RSxJQUloQzNILFFBQVMsV0FDSG5qRSxLQUFLa2hFLE9BRVZsaEUsS0FBS201RSxjQUNMbjVFLEtBQUtxNUUsa0JBQ0xyNUUsS0FBS2cyRSxnQkFHTkEsWUFBYSxXQUNaaDJFLEtBQUtxNkQsVUFBVWlmLFlBQVl0NUUsT0FJNUJrM0UsZUFBZ0IsU0FBVTczRSxFQUFHcUYsR0FDNUIsSUFBSW5ILEVBQUc2bUIsRUFBRzBvRCxFQUFHM2lFLEVBQUs0NUMsRUFBTXIvQixFQUNwQm1uQixFQUFJN3JDLEtBQUtzMkUsa0JBRWIsSUFBS3QyRSxLQUFLODJFLFlBQWM5MkUsS0FBSzgyRSxVQUFVOTRCLFNBQVMzK0MsR0FBTSxPQUFPLEVBRzdELElBQUs5QixFQUFJLEVBQUc0TSxFQUFNbkssS0FBS3U0RSxPQUFPcjJFLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBRzlDLElBQUs2bUIsRUFBSSxFQUF1QjBvRCxHQUFwQi9vQixHQUZaci9CLEVBQU8xa0IsS0FBS3U0RSxPQUFPaDdFLElBRUsyRSxRQUFtQixFQUFHa2lCLEVBQUkyL0IsRUFBTStvQixFQUFJMW9ELElBQzNELElBQUsxZixHQUFpQixJQUFOMGYsSUFFWjBuRCxHQUF1QnpzRSxFQUFHcWxCLEVBQUtvb0QsR0FBSXBvRCxFQUFLTixLQUFPeW5CLEVBQ2xELE9BQU8sRUFJVixPQUFPLEtBY1Q4ckMsR0FBU2xMLE1BQVFBLEdBZ0RqQixJQUFJOE0sR0FBVTVCLEdBQVNubEUsT0FBTyxDQUU3QjBJLFFBQVMsQ0FDUm82RCxNQUFNLEdBR1B0aUUsUUFBUyxXQUNSLE9BQVFoVCxLQUFLZzRFLFNBQVM5MUUsU0FBV2xDLEtBQUtnNEUsU0FBUyxHQUFHOTFFLFFBR25EZzhDLFVBQVcsV0FFVixJQUFLbCtDLEtBQUtraEUsS0FDVCxNQUFNLElBQUk1eEQsTUFBTSxrREFHakIsSUFBSS9SLEVBQUc2bUIsRUFBR3FuRCxFQUFJQyxFQUFJcnFFLEVBQUdtNEUsRUFBTTd4RSxFQUFHckcsRUFBR3ExQyxFQUM3QnNGLEVBQVNqOEMsS0FBSzI0RSxPQUFPLEdBQ3JCeHVFLEVBQU04eEMsRUFBTy81QyxPQUVqQixJQUFLaUksRUFBTyxPQUFPLEtBTW5CLElBRkFxdkUsRUFBTzd4RSxFQUFJckcsRUFBSSxFQUVWL0QsRUFBSSxFQUFHNm1CLEVBQUlqYSxFQUFNLEVBQUc1TSxFQUFJNE0sRUFBS2lhLEVBQUk3bUIsSUFDckNrdUUsRUFBS3h2QixFQUFPMStDLEdBQ1ptdUUsRUFBS3p2QixFQUFPNzNCLEdBRVovaUIsRUFBSW9xRSxFQUFHbnFFLEVBQUlvcUUsRUFBRy9qRSxFQUFJK2pFLEVBQUdwcUUsRUFBSW1xRSxFQUFHOWpFLEVBQzVCQSxJQUFNOGpFLEVBQUc5akUsRUFBSStqRSxFQUFHL2pFLEdBQUt0RyxFQUNyQkMsSUFBTW1xRSxFQUFHbnFFLEVBQUlvcUUsRUFBR3BxRSxHQUFLRCxFQUNyQm00RSxHQUFZLEVBQUpuNEUsRUFTVCxPQUpDczFDLEVBRlksSUFBVDZpQyxFQUVNdjlCLEVBQU8sR0FFUCxDQUFDdDBDLEVBQUk2eEUsRUFBTWw0RSxFQUFJazRFLEdBRWxCeDVFLEtBQUtraEUsS0FBS3hHLG1CQUFtQi9qQixJQUdyQ21pQyxnQkFBaUIsU0FBVXg4QixHQUMxQixJQUFJdjdDLEVBQVM0MkUsR0FBU3g0RSxVQUFVMjVFLGdCQUFnQnA3RSxLQUFLc0MsS0FBTXM4QyxHQUN2RG55QyxFQUFNcEosRUFBT21CLE9BTWpCLE9BSElpSSxHQUFPLEdBQUtwSixFQUFPLGFBQWN5N0MsR0FBVXo3QyxFQUFPLEdBQUdnOUMsT0FBT2g5QyxFQUFPb0osRUFBTSxLQUM1RXBKLEVBQU9rQixNQUVEbEIsR0FHUisyRSxZQUFhLFNBQVV4N0IsR0FDdEJxN0IsR0FBU3g0RSxVQUFVMjRFLFlBQVlwNkUsS0FBS3NDLEtBQU1zOEMsR0FDdENrd0IsR0FBT3hzRSxLQUFLZzRFLFlBQ2ZoNEUsS0FBS2c0RSxTQUFXLENBQUNoNEUsS0FBS2c0RSxZQUl4QmEsY0FBZSxXQUNkLE9BQU9yTSxHQUFPeHNFLEtBQUtnNEUsU0FBUyxJQUFNaDRFLEtBQUtnNEUsU0FBUyxHQUFLaDRFLEtBQUtnNEUsU0FBUyxHQUFHLElBR3ZFbUIsWUFBYSxXQUdaLElBQUkxNkIsRUFBU3orQyxLQUFLcTZELFVBQVU0YyxRQUN4QnByQyxFQUFJN3JDLEtBQUtrYixRQUFRKzVELE9BQ2pCNTFFLEVBQUksSUFBSXM4QyxFQUFNOVAsRUFBR0EsR0FNckIsR0FIQTRTLEVBQVMsSUFBSXpDLEVBQU95QyxFQUFPOXVCLElBQUlzdEIsU0FBUzU5QyxHQUFJby9DLEVBQU81K0IsSUFBSTVZLElBQUk1SCxJQUUzRFcsS0FBS3U0RSxPQUFTLEdBQ1R2NEUsS0FBSzgyRSxXQUFjOTJFLEtBQUs4MkUsVUFBVXQ0QixXQUFXQyxHQUlsRCxHQUFJeitDLEtBQUtrYixRQUFRMjhELE9BQ2hCNzNFLEtBQUt1NEUsT0FBU3Y0RSxLQUFLMjRFLFlBSXBCLElBQUssSUFBcUNjLEVBQWpDbDhFLEVBQUksRUFBRzRNLEVBQU1uSyxLQUFLMjRFLE9BQU96MkUsT0FBaUIzRSxFQUFJNE0sRUFBSzVNLEtBQzNEazhFLEVBQVU3TSxHQUFZNXNFLEtBQUsyNEUsT0FBT3A3RSxHQUFJa2hELEdBQVEsSUFDbEN2OEMsUUFDWGxDLEtBQUt1NEUsT0FBT3AyRSxLQUFLczNFLElBS3BCekQsWUFBYSxXQUNaaDJFLEtBQUtxNkQsVUFBVWlmLFlBQVl0NUUsTUFBTSxJQUlsQ2szRSxlQUFnQixTQUFVNzNFLEdBQ3pCLElBQ0lxbEIsRUFBTSttRCxFQUFJQyxFQUFJbnVFLEVBQUc2bUIsRUFBRzBvRCxFQUFHM2lFLEVBQUs0NUMsRUFENUJpWCxHQUFTLEVBR2IsSUFBS2g3RCxLQUFLODJFLFlBQWM5MkUsS0FBSzgyRSxVQUFVOTRCLFNBQVMzK0MsR0FBTSxPQUFPLEVBRzdELElBQUs5QixFQUFJLEVBQUc0TSxFQUFNbkssS0FBS3U0RSxPQUFPcjJFLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBRzlDLElBQUs2bUIsRUFBSSxFQUF1QjBvRCxHQUFwQi9vQixHQUZaci9CLEVBQU8xa0IsS0FBS3U0RSxPQUFPaDdFLElBRUsyRSxRQUFtQixFQUFHa2lCLEVBQUkyL0IsRUFBTStvQixFQUFJMW9ELElBQzNEcW5ELEVBQUsvbUQsRUFBS04sR0FDVnNuRCxFQUFLaG5ELEVBQUtvb0QsR0FFSnJCLEVBQUducUUsRUFBSWpDLEVBQUVpQyxHQUFRb3FFLEVBQUdwcUUsRUFBSWpDLEVBQUVpQyxHQUFRakMsRUFBRXNJLEdBQUsrakUsRUFBRy9qRSxFQUFJOGpFLEVBQUc5akUsSUFBTXRJLEVBQUVpQyxFQUFJbXFFLEVBQUducUUsSUFBTW9xRSxFQUFHcHFFLEVBQUltcUUsRUFBR25xRSxHQUFLbXFFLEVBQUc5akUsSUFDL0ZxekQsR0FBVUEsR0FNYixPQUFPQSxHQUFVMmMsR0FBU3g0RSxVQUFVKzNFLGVBQWV4NUUsS0FBS3NDLEtBQU1YLEdBQUcsTUFnQy9EcTZFLEdBQVV4SyxHQUFhMThELE9BQU8sQ0FvRGpDZ25DLFdBQVksU0FBVW1nQyxFQUFTeitELEdBQzlCbzlCLEVBQVd0NEMsS0FBTWtiLEdBRWpCbGIsS0FBSzJ5RCxRQUFVLEdBRVhnbkIsR0FDSDM1RSxLQUFLNDVFLFFBQVFELElBTWZDLFFBQVMsU0FBVUQsR0FDbEIsSUFDSXA4RSxFQUFHNE0sRUFBSzB2RSxFQURSQyxFQUFXendFLEVBQVFzd0UsR0FBV0EsRUFBVUEsRUFBUUcsU0FHcEQsR0FBSUEsRUFBVSxDQUNiLElBQUt2OEUsRUFBSSxFQUFHNE0sRUFBTTJ2RSxFQUFTNTNFLE9BQVEzRSxFQUFJNE0sRUFBSzVNLE1BRTNDczhFLEVBQVVDLEVBQVN2OEUsSUFDUHc4RSxZQUFjRixFQUFRRyxVQUFZSCxFQUFRQyxVQUFZRCxFQUFRSSxjQUN6RWo2RSxLQUFLNDVFLFFBQVFDLEdBR2YsT0FBTzc1RSxLQUdSLElBQUlrYixFQUFVbGIsS0FBS2tiLFFBRW5CLEdBQUlBLEVBQVE5TSxTQUFXOE0sRUFBUTlNLE9BQU91ckUsR0FBWSxPQUFPMzVFLEtBRXpELElBQUlvN0MsRUFBUTgrQixHQUFnQlAsRUFBU3orRCxHQUNyQyxPQUFLa2dDLEdBR0xBLEVBQU15K0IsUUFBVU0sR0FBVVIsR0FFMUJ2K0IsRUFBTWcvQixlQUFpQmgvQixFQUFNbGdDLFFBQzdCbGIsS0FBS3E2RSxXQUFXai9CLEdBRVpsZ0MsRUFBUW8vRCxlQUNYcC9ELEVBQVFvL0QsY0FBY1gsRUFBU3YrQixHQUd6QnA3QyxLQUFLdWxFLFNBQVNucUIsSUFYYnA3QyxNQWlCVHE2RSxXQUFZLFNBQVVqL0IsR0FDckIsWUFBY3B5QyxJQUFWb3lDLEVBQ0lwN0MsS0FBS3N1RSxVQUFVdHVFLEtBQUtxNkUsV0FBWXI2RSxPQUd4Q283QyxFQUFNbGdDLFFBQVUxSSxFQUFPLEdBQUk0b0MsRUFBTWcvQixnQkFDakNwNkUsS0FBS3U2RSxlQUFlbi9CLEVBQU9wN0MsS0FBS2tiLFFBQVE2SixPQUNqQy9rQixPQUtSbXZFLFNBQVUsU0FBVXBxRCxHQUNuQixPQUFPL2tCLEtBQUtzdUUsV0FBVSxTQUFVbHpCLEdBQy9CcDdDLEtBQUt1NkUsZUFBZW4vQixFQUFPcjJCLEtBQ3pCL2tCLE9BR0p1NkUsZUFBZ0IsU0FBVW4vQixFQUFPcjJCLEdBQzVCcTJCLEVBQU0rekIsV0FDWSxtQkFBVnBxRCxJQUNWQSxFQUFRQSxFQUFNcTJCLEVBQU15K0IsVUFFckJ6K0IsRUFBTSt6QixTQUFTcHFELE9BWWxCLFNBQVNtMUQsR0FBZ0JQLEVBQVN6K0QsR0FFakMsSUFLSW9tQyxFQUFRaEYsRUFBUy8rQyxFQUFHNE0sRUFMcEI2dkUsRUFBNEIsWUFBakJMLEVBQVE3ekQsS0FBcUI2ekQsRUFBUUssU0FBV0wsRUFDM0RsZ0IsRUFBU3VnQixFQUFXQSxFQUFTQyxZQUFjLEtBQzNDbG9CLEVBQVMsR0FDVHlvQixFQUFldC9ELEdBQVdBLEVBQVFzL0QsYUFDbENDLEVBQWtCdi9ELEdBQVdBLEVBQVF3L0QsZ0JBQWtCQSxHQUczRCxJQUFLamhCLElBQVd1Z0IsRUFDZixPQUFPLEtBR1IsT0FBUUEsRUFBU2wwRCxNQUNqQixJQUFLLFFBRUosT0FBTzYwRCxHQUFjSCxFQUFjYixFQURuQ3I0QixFQUFTbTVCLEVBQWdCaGhCLEdBQzJCditDLEdBRXJELElBQUssYUFDSixJQUFLM2QsRUFBSSxFQUFHNE0sRUFBTXN2RCxFQUFPdjNELE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQ3pDK2pELEVBQVNtNUIsRUFBZ0JoaEIsRUFBT2w4RCxJQUNoQ3cwRCxFQUFPNXZELEtBQUt3NEUsR0FBY0gsRUFBY2IsRUFBU3I0QixFQUFRcG1DLElBRTFELE9BQU8sSUFBSWcwRCxHQUFhbmQsR0FFekIsSUFBSyxhQUNMLElBQUssa0JBRUosT0FEQXpWLEVBQVVzK0IsR0FBZ0JuaEIsRUFBMEIsZUFBbEJ1Z0IsRUFBU2wwRCxLQUF3QixFQUFJLEVBQUcyMEQsR0FDbkUsSUFBSTlDLEdBQVNyN0IsRUFBU3BoQyxHQUU5QixJQUFLLFVBQ0wsSUFBSyxlQUVKLE9BREFvaEMsRUFBVXMrQixHQUFnQm5oQixFQUEwQixZQUFsQnVnQixFQUFTbDBELEtBQXFCLEVBQUksRUFBRzIwRCxHQUNoRSxJQUFJbEIsR0FBUWo5QixFQUFTcGhDLEdBRTdCLElBQUsscUJBQ0osSUFBSzNkLEVBQUksRUFBRzRNLEVBQU02dkUsRUFBU0QsV0FBVzczRSxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUFLLENBQzNELElBQUk2OUMsRUFBUTgrQixHQUFnQixDQUMzQkYsU0FBVUEsRUFBU0QsV0FBV3g4RSxHQUM5QnVvQixLQUFNLFVBQ05vSyxXQUFZeXBELEVBQVF6cEQsWUFDbEJoVixHQUVDa2dDLEdBQ0gyVyxFQUFPNXZELEtBQUtpNUMsR0FHZCxPQUFPLElBQUk4ekIsR0FBYW5kLEdBRXpCLFFBQ0MsTUFBTSxJQUFJemlELE1BQU0sNEJBSWxCLFNBQVNxckUsR0FBY0UsRUFBZ0JsQixFQUFTcjRCLEVBQVFwbUMsR0FDdkQsT0FBTzIvRCxFQUNOQSxFQUFlbEIsRUFBU3I0QixHQUN4QixJQUFJdXhCLEdBQU92eEIsRUFBUXBtQyxHQUFXQSxFQUFRNC9ELHVCQUF5QjUvRCxHQU1qRSxTQUFTdy9ELEdBQWVqaEIsR0FDdkIsT0FBTyxJQUFJamQsRUFBT2lkLEVBQU8sR0FBSUEsRUFBTyxHQUFJQSxFQUFPLElBT2hELFNBQVNtaEIsR0FBZ0JuaEIsRUFBUXNoQixFQUFZTixHQUc1QyxJQUZBLElBRXFDbjVCLEVBRmpDaEYsRUFBVSxHQUVMLytDLEVBQUksRUFBRzRNLEVBQU1zdkQsRUFBT3YzRCxPQUFnQjNFLEVBQUk0TSxFQUFLNU0sSUFDckQrakQsRUFBU3k1QixFQUNSSCxHQUFnQm5oQixFQUFPbDhELEdBQUl3OUUsRUFBYSxFQUFHTixJQUMxQ0EsR0FBbUJDLElBQWdCamhCLEVBQU9sOEQsSUFFNUMrK0MsRUFBUW42QyxLQUFLbS9DLEdBR2QsT0FBT2hGLEVBS1IsU0FBUzArQixHQUFlMTVCLEVBQVFaLEdBRS9CLE9BREFBLEVBQWlDLGlCQUFkQSxFQUF5QkEsRUFBWSxPQUNsQzEzQyxJQUFmczRDLEVBQU8zRSxJQUNiLENBQUM1RSxFQUFVdUosRUFBTzVFLElBQUtnRSxHQUFZM0ksRUFBVXVKLEVBQU83RSxJQUFLaUUsR0FBWTNJLEVBQVV1SixFQUFPM0UsSUFBSytELElBQzNGLENBQUMzSSxFQUFVdUosRUFBTzVFLElBQUtnRSxHQUFZM0ksRUFBVXVKLEVBQU83RSxJQUFLaUUsSUFNM0QsU0FBU3U2QixHQUFnQjMrQixFQUFTeStCLEVBQVlyMkUsRUFBUWc4QyxHQUdyRCxJQUZBLElBQUkrWSxFQUFTLEdBRUpsOEQsRUFBSSxFQUFHNE0sRUFBTW15QyxFQUFRcDZDLE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQzlDazhELEVBQU90M0QsS0FBSzQ0RSxFQUNYRSxHQUFnQjMrQixFQUFRLytDLEdBQUl3OUUsRUFBYSxFQUFHcjJFLEVBQVFnOEMsR0FDcERzNkIsR0FBZTErQixFQUFRLytDLEdBQUltakQsSUFPN0IsT0FKS3E2QixHQUFjcjJFLEdBQ2xCKzBELEVBQU90M0QsS0FBS3MzRCxFQUFPLElBR2JBLEVBR1IsU0FBU3loQixHQUFXOS9CLEVBQU8rL0IsR0FDMUIsT0FBTy8vQixFQUFNeStCLFFBQ1pybkUsRUFBTyxHQUFJNG9DLEVBQU15K0IsUUFBUyxDQUFDRyxTQUFVbUIsSUFDckNoQixHQUFVZ0IsR0FLWixTQUFTaEIsR0FBVVIsR0FDbEIsTUFBcUIsWUFBakJBLEVBQVE3ekQsTUFBdUMsc0JBQWpCNnpELEVBQVE3ekQsS0FDbEM2ekQsRUFHRCxDQUNON3pELEtBQU0sVUFDTm9LLFdBQVksR0FDWjhwRCxTQUFVTCxHQUlaLElBQUl5QixHQUFpQixDQUNwQkMsVUFBVyxTQUFVMzZCLEdBQ3BCLE9BQU93NkIsR0FBV2w3RSxLQUFNLENBQ3ZCOGxCLEtBQU0sUUFDTm0wRCxZQUFhZSxHQUFlaDdFLEtBQUswK0QsWUFBYWhlLE9Ba0lqRCxTQUFTNDZCLEdBQVEzQixFQUFTeitELEdBQ3pCLE9BQU8sSUFBSXcrRCxHQUFRQyxFQUFTeitELEdBeEg3QjIzRCxHQUFPMzRCLFFBQVFraEMsSUFPZmpFLEdBQU9qOUIsUUFBUWtoQyxJQUNmN0UsR0FBYXI4QixRQUFRa2hDLElBUXJCekQsR0FBU3o5QixRQUFRLENBQ2hCbWhDLFVBQVcsU0FBVTM2QixHQUNwQixJQUFJNjZCLEdBQVMvTyxHQUFPeHNFLEtBQUtnNEUsVUFJekIsT0FBT2tELEdBQVdsN0UsS0FBTSxDQUN2QjhsQixNQUFPeTFELEVBQVEsUUFBVSxJQUFNLGFBQy9CdEIsWUFKWWdCLEdBQWdCajdFLEtBQUtnNEUsU0FBVXVELEVBQVEsRUFBSSxHQUFHLEVBQU83NkIsUUFjcEU2NEIsR0FBUXIvQixRQUFRLENBQ2ZtaEMsVUFBVyxTQUFVMzZCLEdBQ3BCLElBQUk4NkIsR0FBU2hQLEdBQU94c0UsS0FBS2c0RSxVQUNyQnVELEVBQVFDLElBQVVoUCxHQUFPeHNFLEtBQUtnNEUsU0FBUyxJQUV2Q3ZlLEVBQVN3aEIsR0FBZ0JqN0UsS0FBS2c0RSxTQUFVdUQsRUFBUSxFQUFJQyxFQUFRLEVBQUksR0FBRyxFQUFNOTZCLEdBTTdFLE9BSks4NkIsSUFDSi9oQixFQUFTLENBQUNBLElBR0p5aEIsR0FBV2w3RSxLQUFNLENBQ3ZCOGxCLE1BQU95MUQsRUFBUSxRQUFVLElBQU0sVUFDL0J0QixZQUFheGdCLE9BT2hCa1YsR0FBV3owQixRQUFRLENBQ2xCdWhDLGFBQWMsU0FBVS82QixHQUN2QixJQUFJK1ksRUFBUyxHQU1iLE9BSkF6NUQsS0FBS3N1RSxXQUFVLFNBQVVsekIsR0FDeEJxZSxFQUFPdDNELEtBQUtpNUMsRUFBTWlnQyxVQUFVMzZCLEdBQVdzNUIsU0FBU0MsZ0JBRzFDaUIsR0FBV2w3RSxLQUFNLENBQ3ZCOGxCLEtBQU0sYUFDTm0wRCxZQUFheGdCLEtBUWY0aEIsVUFBVyxTQUFVMzZCLEdBRXBCLElBQUk1NkIsRUFBTzlsQixLQUFLNjVFLFNBQVc3NUUsS0FBSzY1RSxRQUFRRyxVQUFZaDZFLEtBQUs2NUUsUUFBUUcsU0FBU2wwRCxLQUUxRSxHQUFhLGVBQVRBLEVBQ0gsT0FBTzlsQixLQUFLeTdFLGFBQWEvNkIsR0FHMUIsSUFBSWc3QixFQUFnQyx1QkFBVDUxRCxFQUN2QjYxRCxFQUFRLEdBbUJaLE9BakJBMzdFLEtBQUtzdUUsV0FBVSxTQUFVbHpCLEdBQ3hCLEdBQUlBLEVBQU1pZ0MsVUFBVyxDQUNwQixJQUFJTyxFQUFPeGdDLEVBQU1pZ0MsVUFBVTM2QixHQUMzQixHQUFJZzdCLEVBQ0hDLEVBQU14NUUsS0FBS3k1RSxFQUFLNUIsY0FDVixDQUNOLElBQUlILEVBQVVNLEdBQVV5QixHQUVILHNCQUFqQi9CLEVBQVEvekQsS0FDWDYxRCxFQUFNeDVFLEtBQUtqQixNQUFNeTZFLEVBQU85QixFQUFRQyxVQUVoQzZCLEVBQU14NUUsS0FBSzAzRSxRQU1YNkIsRUFDSVIsR0FBV2w3RSxLQUFNLENBQ3ZCKzVFLFdBQVk0QixFQUNaNzFELEtBQU0sdUJBSUQsQ0FDTkEsS0FBTSxvQkFDTmcwRCxTQUFVNkIsTUFlYixJQUFJRSxHQUFVUCxHQWtCVlEsR0FBZWpPLEdBQU1yN0QsT0FBTyxDQUkvQjBJLFFBQVMsQ0FHUm13QyxRQUFTLEVBSVQxTyxJQUFLLEdBSUxtMkIsYUFBYSxFQU1iaUosYUFBYSxFQUliQyxnQkFBaUIsR0FJakIvTSxPQUFRLEVBSVIza0IsVUFBVyxJQUdaOVEsV0FBWSxTQUFVditCLEVBQUt3akMsRUFBUXZqQyxHQUNsQ2xiLEtBQUtpOEUsS0FBT2hoRSxFQUNaamIsS0FBS2kzRSxRQUFVMTZCLEVBQWVrQyxHQUU5Qm5HLEVBQVd0NEMsS0FBTWtiLElBR2xCbW1ELE1BQU8sV0FDRHJoRSxLQUFLazhFLFNBQ1RsOEUsS0FBS204RSxhQUVEbjhFLEtBQUtrYixRQUFRbXdDLFFBQVUsR0FDMUJyckQsS0FBS3UwRSxrQkFJSHYwRSxLQUFLa2IsUUFBUTQzRCxjQUNoQmhvQixHQUFTOXFELEtBQUtrOEUsT0FBUSx1QkFDdEJsOEUsS0FBS2d1RSxxQkFBcUJodUUsS0FBS2s4RSxTQUdoQ2w4RSxLQUFLKzdELFVBQVUxMkMsWUFBWXJsQixLQUFLazhFLFFBQ2hDbDhFLEtBQUs0MUUsVUFHTnBVLFNBQVUsV0FDVHAxRCxHQUFPcE0sS0FBS2s4RSxRQUNSbDhFLEtBQUtrYixRQUFRNDNELGFBQ2hCOXlFLEtBQUtrdUUsd0JBQXdCbHVFLEtBQUtrOEUsU0FNcEM5d0IsV0FBWSxTQUFVQyxHQU1yQixPQUxBcnJELEtBQUtrYixRQUFRbXdDLFFBQVVBLEVBRW5CcnJELEtBQUtrOEUsUUFDUmw4RSxLQUFLdTBFLGlCQUVDdjBFLE1BR1JtdkUsU0FBVSxTQUFVaU4sR0FJbkIsT0FISUEsRUFBVS93QixTQUNicnJELEtBQUtvckQsV0FBV2d4QixFQUFVL3dCLFNBRXBCcnJELE1BS1JvdkUsYUFBYyxXQUliLE9BSElwdkUsS0FBS2toRSxNQUNSM1csR0FBUXZxRCxLQUFLazhFLFFBRVBsOEUsTUFLUnF2RSxZQUFhLFdBSVosT0FISXJ2RSxLQUFLa2hFLE1BQ1J6VyxHQUFPenFELEtBQUtrOEUsUUFFTmw4RSxNQUtScThFLE9BQVEsU0FBVXBoRSxHQU1qQixPQUxBamIsS0FBS2k4RSxLQUFPaGhFLEVBRVJqYixLQUFLazhFLFNBQ1JsOEUsS0FBS2s4RSxPQUFPaGxDLElBQU1qOEIsR0FFWmpiLE1BS1JzOEUsVUFBVyxTQUFVNzlCLEdBTXBCLE9BTEF6K0MsS0FBS2kzRSxRQUFVMTZCLEVBQWVrQyxHQUUxQnorQyxLQUFLa2hFLE1BQ1JsaEUsS0FBSzQxRSxTQUVDNTFFLE1BR1JvdUUsVUFBVyxXQUNWLElBQUk3aUMsRUFBUyxDQUNacUwsS0FBTTUyQyxLQUFLNDFFLE9BQ1hyQyxVQUFXdnpFLEtBQUs0MUUsUUFPakIsT0FKSTUxRSxLQUFLc3pELGdCQUNSL25CLEVBQU9neEMsU0FBV3Y4RSxLQUFLNGdFLGNBR2pCcjFCLEdBS1IrNEIsVUFBVyxTQUFVOWxFLEdBR3BCLE9BRkF3QixLQUFLa2IsUUFBUSt6RCxPQUFTendFLEVBQ3RCd0IsS0FBSzAwRSxnQkFDRTEwRSxNQUtSODBELFVBQVcsV0FDVixPQUFPOTBELEtBQUtpM0UsU0FNYjF6RCxXQUFZLFdBQ1gsT0FBT3ZqQixLQUFLazhFLFFBR2JDLFdBQVksV0FDWCxJQUFJSyxFQUEyQyxRQUF0Qng4RSxLQUFLaThFLEtBQUs1eEIsUUFDL0J5bEIsRUFBTTl2RSxLQUFLazhFLE9BQVNNLEVBQXFCeDhFLEtBQUtpOEUsS0FBTzd4QixHQUFTLE9BRWxFVSxHQUFTZ2xCLEVBQUssdUJBQ1Y5dkUsS0FBS3N6RCxlQUFpQnhJLEdBQVNnbEIsRUFBSyx5QkFDcEM5dkUsS0FBS2tiLFFBQVFvdkMsV0FBYVEsR0FBU2dsQixFQUFLOXZFLEtBQUtrYixRQUFRb3ZDLFdBRXpEd2xCLEVBQUkyTSxjQUFnQjNrQyxFQUNwQmc0QixFQUFJNE0sWUFBYzVrQyxFQUlsQmc0QixFQUFJNk0sT0FBUzU5RSxFQUFLaUIsS0FBSzI2QyxLQUFNMzZDLEtBQU0sUUFDbkM4dkUsRUFBSThNLFFBQVU3OUUsRUFBS2lCLEtBQUs2OEUsZ0JBQWlCNzhFLEtBQU0sVUFFM0NBLEtBQUtrYixRQUFRNmdFLGFBQTRDLEtBQTdCLzdFLEtBQUtrYixRQUFRNmdFLGVBQzVDak0sRUFBSWlNLGFBQTJDLElBQTdCLzdFLEtBQUtrYixRQUFRNmdFLFlBQXVCLEdBQUsvN0UsS0FBS2tiLFFBQVE2Z0UsYUFHckUvN0UsS0FBS2tiLFFBQVErekQsUUFDaEJqdkUsS0FBSzAwRSxnQkFHRjhILEVBQ0h4OEUsS0FBS2k4RSxLQUFPbk0sRUFBSTU0QixLQUlqQjQ0QixFQUFJNTRCLElBQU1sM0MsS0FBS2k4RSxLQUNmbk0sRUFBSW56QixJQUFNMzhDLEtBQUtrYixRQUFReWhDLE1BR3hCaWtCLGFBQWMsU0FBVS8vRCxHQUN2QixJQUFJNGdELEVBQVF6aEQsS0FBS2toRSxLQUFLMU0sYUFBYTN6RCxFQUFFKzFDLE1BQ2pDZ1YsRUFBUzVyRCxLQUFLa2hFLEtBQUs3Qiw4QkFBOEJyL0QsS0FBS2kzRSxRQUFTcDJFLEVBQUUrMUMsS0FBTS8xQyxFQUFFODFDLFFBQVFobkIsSUFFckZnOEIsR0FBYTNyRCxLQUFLazhFLE9BQVF0d0IsRUFBUW5LLElBR25DbTBCLE9BQVEsV0FDUCxJQUFJa0gsRUFBUTk4RSxLQUFLazhFLE9BQ2J6OUIsRUFBUyxJQUFJekMsRUFDVGg4QyxLQUFLa2hFLEtBQUs5RSxtQkFBbUJwOEQsS0FBS2kzRSxRQUFRbjNCLGdCQUMxQzkvQyxLQUFLa2hFLEtBQUs5RSxtQkFBbUJwOEQsS0FBS2kzRSxRQUFRaDNCLGlCQUM5Q3ZnQixFQUFPK2UsRUFBT0YsVUFFbEJ1TixHQUFZZ3hCLEVBQU9yK0IsRUFBTzl1QixLQUUxQm10RCxFQUFNLzNELE1BQU1pb0MsTUFBU3R0QixFQUFLLzNCLEVBQUksS0FDOUJtMUUsRUFBTS8zRCxNQUFNa29DLE9BQVN2dEIsRUFBS3ArQixFQUFJLE1BRy9CaXpFLGVBQWdCLFdBQ2ZucEIsR0FBV3ByRCxLQUFLazhFLE9BQVFsOEUsS0FBS2tiLFFBQVFtd0MsVUFHdENxcEIsY0FBZSxXQUNWMTBFLEtBQUtrOEUsYUFBa0NsekUsSUFBeEJoSixLQUFLa2IsUUFBUSt6RCxRQUFnRCxPQUF4Qmp2RSxLQUFLa2IsUUFBUSt6RCxTQUNwRWp2RSxLQUFLazhFLE9BQU9uM0QsTUFBTWtxRCxPQUFTanZFLEtBQUtrYixRQUFRK3pELFNBSTFDNE4sZ0JBQWlCLFdBR2hCNzhFLEtBQUsyNkMsS0FBSyxTQUVWLElBQUlvaUMsRUFBVy84RSxLQUFLa2IsUUFBUThnRSxnQkFDeEJlLEdBQVkvOEUsS0FBS2k4RSxPQUFTYyxJQUM3Qi84RSxLQUFLaThFLEtBQU9jLEVBQ1ovOEUsS0FBS2s4RSxPQUFPaGxDLElBQU02bEMsTUErQmpCQyxHQUFlbEIsR0FBYXRwRSxPQUFPLENBSXRDMEksUUFBUyxDQUdSK2hFLFVBQVUsRUFJVmxuRCxNQUFNLEVBS05tbkQsaUJBQWlCLEVBSWpCQyxPQUFPLEdBR1JoQixXQUFZLFdBQ1gsSUFBSUssRUFBMkMsVUFBdEJ4OEUsS0FBS2k4RSxLQUFLNXhCLFFBQy9CK3lCLEVBQU1wOUUsS0FBS2s4RSxPQUFTTSxFQUFxQng4RSxLQUFLaThFLEtBQU83eEIsR0FBUyxTQWFsRSxHQVhBVSxHQUFTc3lCLEVBQUssdUJBQ1ZwOUUsS0FBS3N6RCxlQUFpQnhJLEdBQVNzeUIsRUFBSyx5QkFDcENwOUUsS0FBS2tiLFFBQVFvdkMsV0FBYVEsR0FBU3N5QixFQUFLcDlFLEtBQUtrYixRQUFRb3ZDLFdBRXpEOHlCLEVBQUlYLGNBQWdCM2tDLEVBQ3BCc2xDLEVBQUlWLFlBQWM1a0MsRUFJbEJzbEMsRUFBSUMsYUFBZXQrRSxFQUFLaUIsS0FBSzI2QyxLQUFNMzZDLEtBQU0sUUFFckN3OEUsRUFBSixDQUdDLElBRkEsSUFBSWMsRUFBaUJGLEVBQUlHLHFCQUFxQixVQUMxQ3J5RSxFQUFVLEdBQ0xrWixFQUFJLEVBQUdBLEVBQUlrNUQsRUFBZXA3RSxPQUFRa2lCLElBQzFDbFosRUFBUS9JLEtBQUttN0UsRUFBZWw1RCxHQUFHOHlCLEtBR2hDbDNDLEtBQUtpOEUsS0FBUXFCLEVBQWVwN0UsT0FBUyxFQUFLZ0osRUFBVSxDQUFDa3lFLEVBQUlsbUMsU0FQMUQsQ0FXSzd0QyxFQUFRckosS0FBS2k4RSxRQUFTajhFLEtBQUtpOEUsS0FBTyxDQUFDajhFLEtBQUtpOEUsUUFFeENqOEUsS0FBS2tiLFFBQVFnaUUsaUJBQW1Cai9FLE9BQU9rQixVQUFVQyxlQUFlMUIsS0FBSzAvRSxFQUFJcjRELE1BQU8sZUFDcEZxNEQsRUFBSXI0RCxNQUFpQixVQUFJLFFBRTFCcTRELEVBQUlILFdBQWFqOUUsS0FBS2tiLFFBQVEraEUsU0FDOUJHLEVBQUlybkQsT0FBUy8xQixLQUFLa2IsUUFBUTZhLEtBQzFCcW5ELEVBQUlELFFBQVVuOUUsS0FBS2tiLFFBQVFpaUUsTUFDM0IsSUFBSyxJQUFJNS9FLEVBQUksRUFBR0EsRUFBSXlDLEtBQUtpOEUsS0FBSy81RSxPQUFRM0UsSUFBSyxDQUMxQyxJQUFJcUgsRUFBU3dsRCxHQUFTLFVBQ3RCeGxELEVBQU9zeUMsSUFBTWwzQyxLQUFLaThFLEtBQUsxK0UsR0FDdkI2L0UsRUFBSS8zRCxZQUFZemdCLFFBdUNmNDRFLEdBQWExQixHQUFhdHBFLE9BQU8sQ0FDcEMycEUsV0FBWSxXQUNYLElBQUlqMkQsRUFBS2xtQixLQUFLazhFLE9BQVNsOEUsS0FBS2k4RSxLQUU1Qm54QixHQUFTNWtDLEVBQUksdUJBQ1RsbUIsS0FBS3N6RCxlQUFpQnhJLEdBQVM1a0MsRUFBSSx5QkFDbkNsbUIsS0FBS2tiLFFBQVFvdkMsV0FBYVEsR0FBUzVrQyxFQUFJbG1CLEtBQUtrYixRQUFRb3ZDLFdBRXhEcGtDLEVBQUd1MkQsY0FBZ0Iza0MsRUFDbkI1eEIsRUFBR3cyRCxZQUFjNWtDLEtBeUJmMmxDLEdBQWE1UCxHQUFNcjdELE9BQU8sQ0FJN0IwSSxRQUFTLENBSVIwd0MsT0FBUSxDQUFDLEVBQUcsR0FJWnRCLFVBQVcsR0FJWGlRLEtBQU0sYUFHUC9nQixXQUFZLFNBQVV0K0IsRUFBU3RXLEdBQzlCMHpDLEVBQVd0NEMsS0FBTWtiLEdBRWpCbGIsS0FBSzA5RSxRQUFVOTRFLEdBR2hCeThELE1BQU8sU0FBVWwyRCxHQUNoQm5MLEtBQUtzekQsY0FBZ0Jub0QsRUFBSW1vRCxjQUVwQnR6RCxLQUFLZzZELFlBQ1RoNkQsS0FBSyt5RCxjQUdGNW5ELEVBQUl5eEQsZUFDUHhSLEdBQVdwckQsS0FBS2c2RCxXQUFZLEdBRzdCM2hDLGFBQWFyNEIsS0FBSzI5RSxnQkFDbEIzOUUsS0FBSys3RCxVQUFVMTJDLFlBQVlybEIsS0FBS2c2RCxZQUNoQ2g2RCxLQUFLb21CLFNBRURqYixFQUFJeXhELGVBQ1B4UixHQUFXcHJELEtBQUtnNkQsV0FBWSxHQUc3Qmg2RCxLQUFLb3ZFLGdCQUdONU4sU0FBVSxTQUFVcjJELEdBQ2ZBLEVBQUl5eEQsZUFDUHhSLEdBQVdwckQsS0FBS2c2RCxXQUFZLEdBQzVCaDZELEtBQUsyOUUsZUFBaUJ6c0UsV0FBV25TLEVBQUtxTixRQUFRcEQsRUFBV2hKLEtBQUtnNkQsWUFBYSxNQUUzRTV0RCxHQUFPcE0sS0FBS2c2RCxhQU9kMEUsVUFBVyxXQUNWLE9BQU8xK0QsS0FBSzJ5RSxTQUtiYSxVQUFXLFNBQVVseUIsR0FNcEIsT0FMQXRoRCxLQUFLMnlFLFFBQVUvMUIsRUFBUzBFLEdBQ3BCdGhELEtBQUtraEUsT0FDUmxoRSxLQUFLNHFFLGtCQUNMNXFFLEtBQUs2eEUsY0FFQzd4RSxNQUtSNDlFLFdBQVksV0FDWCxPQUFPNTlFLEtBQUs2OUUsVUFLYkMsV0FBWSxTQUFVdnpFLEdBR3JCLE9BRkF2SyxLQUFLNjlFLFNBQVd0ekUsRUFDaEJ2SyxLQUFLb21CLFNBQ0VwbUIsTUFLUnVqQixXQUFZLFdBQ1gsT0FBT3ZqQixLQUFLZzZELFlBS2I1ekMsT0FBUSxXQUNGcG1CLEtBQUtraEUsT0FFVmxoRSxLQUFLZzZELFdBQVdqMUMsTUFBTWc1RCxXQUFhLFNBRW5DLzlFLEtBQUtnK0UsaUJBQ0xoK0UsS0FBS2krRSxnQkFDTGorRSxLQUFLNHFFLGtCQUVMNXFFLEtBQUtnNkQsV0FBV2oxQyxNQUFNZzVELFdBQWEsR0FFbkMvOUUsS0FBSzZ4RSxlQUdOekQsVUFBVyxXQUNWLElBQUk3aUMsRUFBUyxDQUNacUwsS0FBTTUyQyxLQUFLNHFFLGdCQUNYMkksVUFBV3Z6RSxLQUFLNHFFLGlCQU1qQixPQUhJNXFFLEtBQUtzekQsZ0JBQ1IvbkIsRUFBT2d4QyxTQUFXdjhFLEtBQUs0Z0UsY0FFakJyMUIsR0FLUjJ5QyxPQUFRLFdBQ1AsUUFBU2wrRSxLQUFLa2hFLE1BQVFsaEUsS0FBS2toRSxLQUFLOEQsU0FBU2hsRSxPQUsxQ292RSxhQUFjLFdBSWIsT0FISXB2RSxLQUFLa2hFLE1BQ1IzVyxHQUFRdnFELEtBQUtnNkQsWUFFUGg2RCxNQUtScXZFLFlBQWEsV0FJWixPQUhJcnZFLEtBQUtraEUsTUFDUnpXLEdBQU96cUQsS0FBS2c2RCxZQUVOaDZELE1BR1JtK0UsYUFBYyxTQUFVdHhFLEVBQVF1dUMsRUFBT2tHLEdBTXRDLEdBTE1sRyxhQUFpQnl5QixLQUN0QnZzQixFQUFTbEcsRUFDVEEsRUFBUXZ1QyxHQUdMdXVDLGFBQWlCOHpCLEdBQ3BCLElBQUssSUFBSXZqRSxLQUFNa0IsRUFBTzhsRCxRQUFTLENBQzlCdlgsRUFBUXZ1QyxFQUFPOGxELFFBQVFobkQsR0FDdkIsTUFJRixJQUFLMjFDLEVBQ0osR0FBSWxHLEVBQU04QyxVQUNUb0QsRUFBU2xHLEVBQU04QyxnQkFDVCxLQUFJOUMsRUFBTXNqQixVQUdoQixNQUFNLElBQUlwdkQsTUFBTSxzQ0FGaEJneUMsRUFBU2xHLEVBQU1zakIsWUFZakIsT0FMQTErRCxLQUFLMDlFLFFBQVV0aUMsRUFHZnA3QyxLQUFLb21CLFNBRUVrN0IsR0FHUjA4QixlQUFnQixXQUNmLEdBQUtoK0UsS0FBSzY5RSxTQUFWLENBRUEsSUFBSWhrRSxFQUFPN1osS0FBS28rRSxhQUNaN3pFLEVBQW9DLG1CQUFsQnZLLEtBQUs2OUUsU0FBMkI3OUUsS0FBSzY5RSxTQUFTNzlFLEtBQUswOUUsU0FBVzE5RSxNQUFRQSxLQUFLNjlFLFNBRWpHLEdBQXVCLGlCQUFadHpFLEVBQ1ZzUCxFQUFLeThCLFVBQVkvckMsTUFDWCxDQUNOLEtBQU9zUCxFQUFLd2tFLGlCQUNYeGtFLEVBQUs2TCxZQUFZN0wsRUFBS3lMLFlBRXZCekwsRUFBS3dMLFlBQVk5YSxHQUVsQnZLLEtBQUsyNkMsS0FBSyxtQkFHWGl3QixnQkFBaUIsV0FDaEIsR0FBSzVxRSxLQUFLa2hFLEtBQVYsQ0FFQSxJQUFJclYsRUFBTTdyRCxLQUFLa2hFLEtBQUs5RSxtQkFBbUJwOEQsS0FBSzJ5RSxTQUN4Qy9tQixFQUFTN1AsRUFBUS83QyxLQUFLa2IsUUFBUTB3QyxRQUM5QnNrQixFQUFTbHdFLEtBQUtzK0UsYUFFZHQrRSxLQUFLc3pELGNBQ1J4SCxHQUFZOXJELEtBQUtnNkQsV0FBWW5PLEVBQUk1a0QsSUFBSWlwRSxJQUVyQ3RrQixFQUFTQSxFQUFPM2tELElBQUk0a0QsR0FBSzVrRCxJQUFJaXBFLEdBRzlCLElBQUlzSCxFQUFTeDNFLEtBQUt1K0Usa0JBQW9CM3lCLEVBQU90cUQsRUFDekMwcUQsRUFBT2hzRCxLQUFLdytFLGdCQUFrQjUrRCxLQUFLdTRCLE1BQU1uNEMsS0FBS3krRSxnQkFBa0IsR0FBSzd5QixFQUFPamtELEVBR2hGM0gsS0FBS2c2RCxXQUFXajFDLE1BQU15eUQsT0FBU0EsRUFBUyxLQUN4Q3gzRSxLQUFLZzZELFdBQVdqMUMsTUFBTWluQyxLQUFPQSxFQUFPLE9BR3JDc3lCLFdBQVksV0FDWCxNQUFPLENBQUMsRUFBRyxNQWlDVEksR0FBUWpCLEdBQVdqckUsT0FBTyxDQUk3QjBJLFFBQVMsQ0FHUnlyRCxTQUFVLElBSVZnWSxTQUFVLEdBS1ZDLFVBQVcsS0FLWHBNLFNBQVMsRUFLVHFNLHNCQUF1QixLQUt2QkMsMEJBQTJCLEtBSTNCOU0sZUFBZ0IsQ0FBQyxFQUFHLEdBS3BCK00sWUFBWSxFQUlaQyxhQUFhLEVBS2JDLFdBQVcsRUFLWEMsa0JBQWtCLEVBUWxCNTBCLFVBQVcsSUFNWjYwQixPQUFRLFNBQVVoMEUsR0FFakIsT0FEQUEsRUFBSWkwRSxVQUFVcC9FLE1BQ1BBLE1BR1JxaEUsTUFBTyxTQUFVbDJELEdBQ2hCc3lFLEdBQVd0K0UsVUFBVWtpRSxNQUFNM2pFLEtBQUtzQyxLQUFNbUwsR0FNdENBLEVBQUl3dkMsS0FBSyxZQUFhLENBQUMwa0MsTUFBT3IvRSxPQUUxQkEsS0FBSzA5RSxVQUtSMTlFLEtBQUswOUUsUUFBUS9pQyxLQUFLLFlBQWEsQ0FBQzBrQyxNQUFPci9FLE9BQU8sR0FHeENBLEtBQUswOUUsbUJBQW1CNUksSUFDN0I5MEUsS0FBSzA5RSxRQUFRLytELEdBQUcsV0FBWXN3QyxNQUsvQnVTLFNBQVUsU0FBVXIyRCxHQUNuQnN5RSxHQUFXdCtFLFVBQVVxaUUsU0FBUzlqRSxLQUFLc0MsS0FBTW1MLEdBTXpDQSxFQUFJd3ZDLEtBQUssYUFBYyxDQUFDMGtDLE1BQU9yL0UsT0FFM0JBLEtBQUswOUUsVUFLUjE5RSxLQUFLMDlFLFFBQVEvaUMsS0FBSyxhQUFjLENBQUMwa0MsTUFBT3IvRSxPQUFPLEdBQ3pDQSxLQUFLMDlFLG1CQUFtQjVJLElBQzdCOTBFLEtBQUswOUUsUUFBUXAyQyxJQUFJLFdBQVkybkIsTUFLaENtZixVQUFXLFdBQ1YsSUFBSTdpQyxFQUFTa3lDLEdBQVd0K0UsVUFBVWl2RSxVQUFVMXdFLEtBQUtzQyxNQVVqRCxZQVJrQ2dKLElBQTlCaEosS0FBS2tiLFFBQVFva0UsYUFBNkJ0L0UsS0FBS2tiLFFBQVFva0UsYUFBZXQvRSxLQUFLa2hFLEtBQUtobUQsUUFBUXFrRSxxQkFDM0ZoMEMsRUFBT2kwQyxTQUFXeC9FLEtBQUt5L0UsUUFHcEJ6L0UsS0FBS2tiLFFBQVE2akUsYUFDaEJ4ekMsRUFBT20wQyxRQUFVMS9FLEtBQUs2eEUsWUFHaEJ0bUMsR0FHUmswQyxPQUFRLFdBQ0h6L0UsS0FBS2toRSxNQUNSbGhFLEtBQUtraEUsS0FBS3FSLFdBQVd2eUUsT0FJdkIreUQsWUFBYSxXQUNaLElBQUlrVixFQUFTLGdCQUNUdjZCLEVBQVkxdEMsS0FBS2c2RCxXQUFhNVAsR0FBUyxNQUMxQzZkLEVBQVMsS0FBT2pvRSxLQUFLa2IsUUFBUW92QyxXQUFhLElBQzFDLDBCQUVHcTFCLEVBQVUzL0UsS0FBSzQvRSxTQUFXeDFCLEdBQVMsTUFBTzZkLEVBQVMsbUJBQW9CdjZCLEdBVTNFLEdBVEExdEMsS0FBS28rRSxhQUFlaDBCLEdBQVMsTUFBTzZkLEVBQVMsV0FBWTBYLEdBRXpEcndCLEdBQXdCNWhCLEdBQ3hCMmhCLEdBQXlCcnZELEtBQUtvK0UsY0FDOUJ6L0QsR0FBRyt1QixFQUFXLGNBQWV1aEIsSUFFN0JqdkQsS0FBSzYvRSxjQUFnQnoxQixHQUFTLE1BQU82ZCxFQUFTLGlCQUFrQnY2QixHQUNoRTF0QyxLQUFLOC9FLEtBQU8xMUIsR0FBUyxNQUFPNmQsRUFBUyxPQUFRam9FLEtBQUs2L0UsZUFFOUM3L0UsS0FBS2tiLFFBQVE4akUsWUFBYSxDQUM3QixJQUFJQSxFQUFjaC9FLEtBQUsrL0UsYUFBZTMxQixHQUFTLElBQUs2ZCxFQUFTLGdCQUFpQnY2QixHQUM5RXN4QyxFQUFZaDRELEtBQU8sU0FDbkJnNEQsRUFBWTFvQyxVQUFZLFNBRXhCMzNCLEdBQUdxZ0UsRUFBYSxRQUFTaC9FLEtBQUtnZ0Ysb0JBQXFCaGdGLFFBSXJEaStFLGNBQWUsV0FDZCxJQUFJdndDLEVBQVkxdEMsS0FBS28rRSxhQUNqQnI1RCxFQUFRMm9CLEVBQVUzb0IsTUFFdEJBLEVBQU1pb0MsTUFBUSxHQUNkam9DLEVBQU1rN0QsV0FBYSxTQUVuQixJQUFJanpCLEVBQVF0ZixFQUFVaWYsWUFDdEJLLEVBQVFwdEMsS0FBSytQLElBQUlxOUIsRUFBT2h0RCxLQUFLa2IsUUFBUXlyRCxVQUNyQzNaLEVBQVFwdEMsS0FBS0MsSUFBSW10QyxFQUFPaHRELEtBQUtrYixRQUFReWpFLFVBRXJDNTVELEVBQU1pb0MsTUFBU0EsRUFBUSxFQUFLLEtBQzVCam9DLEVBQU1rN0QsV0FBYSxHQUVuQmw3RCxFQUFNa29DLE9BQVMsR0FFZixJQUFJQSxFQUFTdmYsRUFBVWtmLGFBQ25CZ3lCLEVBQVk1K0UsS0FBS2tiLFFBQVEwakUsVUFHekJBLEdBQWEzeEIsRUFBUzJ4QixHQUN6Qjc1RCxFQUFNa29DLE9BQVMyeEIsRUFBWSxLQUMzQjl6QixHQUFTcGQsRUFKVSwyQkFNbkJ1ZCxHQUFZdmQsRUFOTywwQkFTcEIxdEMsS0FBS3krRSxnQkFBa0J6K0UsS0FBS2c2RCxXQUFXck4sYUFHeENpVSxhQUFjLFNBQVUvL0QsR0FDdkIsSUFBSWdyRCxFQUFNN3JELEtBQUtraEUsS0FBSy9CLHVCQUF1Qm4vRCxLQUFLMnlFLFFBQVM5eEUsRUFBRSsxQyxLQUFNLzFDLEVBQUU4MUMsUUFDL0R1NUIsRUFBU2x3RSxLQUFLcytFLGFBQ2xCeHlCLEdBQVk5ckQsS0FBS2c2RCxXQUFZbk8sRUFBSTVrRCxJQUFJaXBFLEtBR3RDMkIsV0FBWSxXQUNYLEdBQUs3eEUsS0FBS2tiLFFBQVFzM0QsUUFBbEIsQ0FDSXh5RSxLQUFLa2hFLEtBQUtyTCxVQUFZNzFELEtBQUtraEUsS0FBS3JMLFNBQVNwRyxPQUU3QyxJQUFJdGtELEVBQU1uTCxLQUFLa2hFLEtBQ1hnZixFQUFlemlELFNBQVN1c0IsR0FBU2hxRCxLQUFLZzZELFdBQVksZ0JBQWlCLEtBQU8sRUFDMUVtbUIsRUFBa0JuZ0YsS0FBS2c2RCxXQUFXcE4sYUFBZXN6QixFQUNqREUsRUFBaUJwZ0YsS0FBS3krRSxnQkFDdEI0QixFQUFXLElBQUkxa0MsRUFBTTM3QyxLQUFLdytFLGdCQUFpQjJCLEVBQWtCbmdGLEtBQUt1K0Usa0JBRXRFOEIsRUFBU3JqQyxLQUFLa1AsR0FBWWxzRCxLQUFLZzZELGFBRS9CLElBQUlzbUIsRUFBZW4xRSxFQUFJbXhELDJCQUEyQitqQixHQUM5Q3ByQixFQUFVbFosRUFBUS83QyxLQUFLa2IsUUFBUTgyRCxnQkFDL0JqZCxFQUFZaFosRUFBUS83QyxLQUFLa2IsUUFBUTJqRSx1QkFBeUI1cEIsR0FDMURDLEVBQVluWixFQUFRLzdDLEtBQUtrYixRQUFRNGpFLDJCQUE2QjdwQixHQUM5RHYxQixFQUFPdjBCLEVBQUlvekMsVUFDWG90QixFQUFLLEVBQ0xDLEVBQUssRUFFTDBVLEVBQWEzNEUsRUFBSXk0RSxFQUFpQmxyQixFQUFVdnRELEVBQUkrM0IsRUFBSy8zQixJQUN4RGdrRSxFQUFLMlUsRUFBYTM0RSxFQUFJeTRFLEVBQWlCMWdELEVBQUsvM0IsRUFBSXV0RCxFQUFVdnRELEdBRXZEMjRFLEVBQWEzNEUsRUFBSWdrRSxFQUFLNVcsRUFBVXB0RCxFQUFJLElBQ3ZDZ2tFLEVBQUsyVSxFQUFhMzRFLEVBQUlvdEQsRUFBVXB0RCxHQUU3QjI0RSxFQUFhaC9FLEVBQUk2K0UsRUFBa0JqckIsRUFBVTV6RCxFQUFJbytCLEVBQUtwK0IsSUFDekRzcUUsRUFBSzBVLEVBQWFoL0UsRUFBSTYrRSxFQUFrQnpnRCxFQUFLcCtCLEVBQUk0ekQsRUFBVTV6RCxHQUV4RGcvRSxFQUFhaC9FLEVBQUlzcUUsRUFBSzdXLEVBQVV6ekQsRUFBSSxJQUN2Q3NxRSxFQUFLMFUsRUFBYWgvRSxFQUFJeXpELEVBQVV6ekQsSUFPN0JxcUUsR0FBTUMsSUFDVHpnRSxFQUNLd3ZDLEtBQUssZ0JBQ0xnYixNQUFNLENBQUNnVyxFQUFJQyxNQUlsQm9VLG9CQUFxQixTQUFVbi9FLEdBQzlCYixLQUFLeS9FLFNBQ0xod0IsR0FBSzV1RCxJQUdOeTlFLFdBQVksV0FFWCxPQUFPdmlDLEVBQVEvN0MsS0FBSzA5RSxTQUFXMTlFLEtBQUswOUUsUUFBUTlJLGdCQUFrQjUwRSxLQUFLMDlFLFFBQVE5SSxrQkFBb0IsQ0FBQyxFQUFHLE9Ba0JyR3JtRCxHQUFJNHJCLGFBQWEsQ0FDaEJvbEMsbUJBQW1CLElBTXBCaHhELEdBQUkyckIsUUFBUSxDQU1Ya2xDLFVBQVcsU0FBVUMsRUFBTy85QixFQUFRcG1DLEdBU25DLE9BUk1ta0UsYUFBaUJYLEtBQ3RCVyxFQUFRLElBQUlYLEdBQU14akUsR0FBUzRpRSxXQUFXdUIsSUFHbkMvOUIsR0FDSCs5QixFQUFNN0wsVUFBVWx5QixHQUdidGhELEtBQUtnbEUsU0FBU3FhLEdBQ1ZyL0UsTUFHSkEsS0FBSzR6RSxRQUFVNXpFLEtBQUs0ekUsT0FBTzE0RCxRQUFRK2pFLFdBQ3RDai9FLEtBQUt1eUUsYUFHTnZ5RSxLQUFLNHpFLE9BQVN5TCxFQUNQci9FLEtBQUt1bEUsU0FBUzhaLEtBS3RCOU0sV0FBWSxTQUFVOE0sR0FRckIsT0FQS0EsR0FBU0EsSUFBVXIvRSxLQUFLNHpFLFNBQzVCeUwsRUFBUXIvRSxLQUFLNHpFLE9BQ2I1ekUsS0FBSzR6RSxPQUFTLE1BRVh5TCxHQUNIci9FLEtBQUt5akUsWUFBWTRiLEdBRVhyL0UsUUFvQlQ2dEUsR0FBTTN6QixRQUFRLENBTWIyNUIsVUFBVyxTQUFVdHBFLEVBQVMyUSxHQXVCN0IsT0FyQkkzUSxhQUFtQm0wRSxJQUN0QnBtQyxFQUFXL3RDLEVBQVMyUSxHQUNwQmxiLEtBQUs0ekUsT0FBU3JwRSxFQUNkQSxFQUFRbXpFLFFBQVUxOUUsT0FFYkEsS0FBSzR6RSxTQUFVMTRELElBQ25CbGIsS0FBSzR6RSxPQUFTLElBQUk4SyxHQUFNeGpFLEVBQVNsYixPQUVsQ0EsS0FBSzR6RSxPQUFPa0ssV0FBV3Z6RSxJQUduQnZLLEtBQUt1Z0Ysc0JBQ1R2Z0YsS0FBSzJlLEdBQUcsQ0FDUDZoRSxNQUFPeGdGLEtBQUt5Z0YsV0FDWkMsU0FBVTFnRixLQUFLMmdGLFlBQ2Z2MEUsT0FBUXBNLEtBQUt1eUUsV0FDYnFPLEtBQU01Z0YsS0FBSzZnRixhQUVaN2dGLEtBQUt1Z0YscUJBQXNCLEdBR3JCdmdGLE1BS1I4Z0YsWUFBYSxXQVdaLE9BVkk5Z0YsS0FBSzR6RSxTQUNSNXpFLEtBQUtzbkMsSUFBSSxDQUNSazVDLE1BQU94Z0YsS0FBS3lnRixXQUNaQyxTQUFVMWdGLEtBQUsyZ0YsWUFDZnYwRSxPQUFRcE0sS0FBS3V5RSxXQUNicU8sS0FBTTVnRixLQUFLNmdGLGFBRVo3Z0YsS0FBS3VnRixxQkFBc0IsRUFDM0J2Z0YsS0FBSzR6RSxPQUFTLE1BRVI1ekUsTUFLUm8vRSxVQUFXLFNBQVVoa0MsRUFBT2tHLEdBUTNCLE9BUEl0aEQsS0FBSzR6RSxRQUFVNXpFLEtBQUtraEUsT0FDdkI1ZixFQUFTdGhELEtBQUs0ekUsT0FBT3VLLGFBQWFuK0UsS0FBTW83QyxFQUFPa0csR0FHL0N0aEQsS0FBS2toRSxLQUFLa2UsVUFBVXAvRSxLQUFLNHpFLE9BQVF0eUIsSUFHM0J0aEQsTUFLUnV5RSxXQUFZLFdBSVgsT0FISXZ5RSxLQUFLNHpFLFFBQ1I1ekUsS0FBSzR6RSxPQUFPNkwsU0FFTnovRSxNQUtSK2dGLFlBQWEsU0FBVTE5RCxHQVF0QixPQVBJcmpCLEtBQUs0ekUsU0FDSjV6RSxLQUFLNHpFLE9BQU8xUyxLQUNmbGhFLEtBQUt1eUUsYUFFTHZ5RSxLQUFLby9FLFVBQVUvN0QsSUFHVnJqQixNQUtSZ2hGLFlBQWEsV0FDWixRQUFRaGhGLEtBQUs0ekUsUUFBUzV6RSxLQUFLNHpFLE9BQU9zSyxVQUtuQytDLGdCQUFpQixTQUFVMTJFLEdBSTFCLE9BSEl2SyxLQUFLNHpFLFFBQ1I1ekUsS0FBSzR6RSxPQUFPa0ssV0FBV3Z6RSxHQUVqQnZLLE1BS1JraEYsU0FBVSxXQUNULE9BQU9saEYsS0FBSzR6RSxRQUdiNk0sV0FBWSxTQUFVNS9FLEdBQ3JCLElBQUl1NkMsRUFBUXY2QyxFQUFFdTZDLE9BQVN2NkMsRUFBRXdpQixPQUVwQnJqQixLQUFLNHpFLFFBSUw1ekUsS0FBS2toRSxPQUtWelIsR0FBSzV1RCxHQUlEdTZDLGFBQWlCMDVCLEdBQ3BCOTBFLEtBQUtvL0UsVUFBVXYrRSxFQUFFdTZDLE9BQVN2NkMsRUFBRXdpQixPQUFReGlCLEVBQUV5Z0QsUUFNbkN0aEQsS0FBS2toRSxLQUFLOEQsU0FBU2hsRSxLQUFLNHpFLFNBQVc1ekUsS0FBSzR6RSxPQUFPOEosVUFBWXRpQyxFQUM5RHA3QyxLQUFLdXlFLGFBRUx2eUUsS0FBS28vRSxVQUFVaGtDLEVBQU92NkMsRUFBRXlnRCxVQUkxQnUvQixXQUFZLFNBQVVoZ0YsR0FDckJiLEtBQUs0ekUsT0FBT0osVUFBVTN5RSxFQUFFeWdELFNBR3pCcS9CLFlBQWEsU0FBVTkvRSxHQUNVLEtBQTVCQSxFQUFFcXVELGNBQWNpeUIsU0FDbkJuaEYsS0FBS3lnRixXQUFXNS9FLE1BMkJuQixJQUFJdWdGLEdBQVUzRCxHQUFXanJFLE9BQU8sQ0FJL0IwSSxRQUFTLENBR1JxL0MsS0FBTSxjQUlOM08sT0FBUSxDQUFDLEVBQUcsR0FPWnkxQixVQUFXLE9BSVhDLFdBQVcsRUFJWEMsUUFBUSxFQUlSek8sYUFBYSxFQUliem5CLFFBQVMsSUFHVmdXLE1BQU8sU0FBVWwyRCxHQUNoQnN5RSxHQUFXdCtFLFVBQVVraUUsTUFBTTNqRSxLQUFLc0MsS0FBTW1MLEdBQ3RDbkwsS0FBS29yRCxXQUFXcHJELEtBQUtrYixRQUFRbXdDLFNBTTdCbGdELEVBQUl3dkMsS0FBSyxjQUFlLENBQUM2bUMsUUFBU3hoRixPQUU5QkEsS0FBSzA5RSxTQUtSMTlFLEtBQUswOUUsUUFBUS9pQyxLQUFLLGNBQWUsQ0FBQzZtQyxRQUFTeGhGLE9BQU8sSUFJcER3aEUsU0FBVSxTQUFVcjJELEdBQ25Cc3lFLEdBQVd0K0UsVUFBVXFpRSxTQUFTOWpFLEtBQUtzQyxLQUFNbUwsR0FNekNBLEVBQUl3dkMsS0FBSyxlQUFnQixDQUFDNm1DLFFBQVN4aEYsT0FFL0JBLEtBQUswOUUsU0FLUjE5RSxLQUFLMDlFLFFBQVEvaUMsS0FBSyxlQUFnQixDQUFDNm1DLFFBQVN4aEYsT0FBTyxJQUlyRG91RSxVQUFXLFdBQ1YsSUFBSTdpQyxFQUFTa3lDLEdBQVd0K0UsVUFBVWl2RSxVQUFVMXdFLEtBQUtzQyxNQU1qRCxPQUpJcW1ELEtBQVVybUQsS0FBS2tiLFFBQVFvbUUsWUFDMUIvMUMsRUFBT2kwQyxTQUFXeC9FLEtBQUt5L0UsUUFHakJsMEMsR0FHUmswQyxPQUFRLFdBQ0h6L0UsS0FBS2toRSxNQUNSbGhFLEtBQUtraEUsS0FBS3VnQixhQUFhemhGLE9BSXpCK3lELFlBQWEsV0FDWixJQUNJekksRUFBWTJkLG9CQUFnQmpvRSxLQUFLa2IsUUFBUW92QyxXQUFhLElBQU0sa0JBQW9CdHFELEtBQUtzekQsY0FBZ0IsV0FBYSxRQUV0SHR6RCxLQUFLbytFLGFBQWVwK0UsS0FBS2c2RCxXQUFhNVAsR0FBUyxNQUFPRSxJQUd2RDJ6QixjQUFlLGFBRWZwTSxXQUFZLGFBRVo2UCxhQUFjLFNBQVU3MUIsR0FDdkIsSUFBSTgxQixFQUFNQyxFQUNOejJFLEVBQU1uTCxLQUFLa2hFLEtBQ1h4ekIsRUFBWTF0QyxLQUFLZzZELFdBQ2pCd0YsRUFBY3IwRCxFQUFJd3BELHVCQUF1QnhwRCxFQUFJK3lDLGFBQzdDMmpDLEVBQWUxMkUsRUFBSW14RCwyQkFBMkJ6USxHQUM5Q3cxQixFQUFZcmhGLEtBQUtrYixRQUFRbW1FLFVBQ3pCUyxFQUFlcDBDLEVBQVVpZixZQUN6Qm8xQixFQUFnQnIwQyxFQUFVa2YsYUFDMUJoQixFQUFTN1AsRUFBUS83QyxLQUFLa2IsUUFBUTB3QyxRQUM5QnNrQixFQUFTbHdFLEtBQUtzK0UsYUFFQSxRQUFkK0MsR0FDSE0sRUFBT0csRUFBZSxFQUN0QkYsRUFBT0csR0FDaUIsV0FBZFYsR0FDVk0sRUFBT0csRUFBZSxFQUN0QkYsRUFBTyxHQUNpQixXQUFkUCxHQUNWTSxFQUFPRyxFQUFlLEVBQ3RCRixFQUFPRyxFQUFnQixHQUNDLFVBQWRWLEdBQ1ZNLEVBQU8sRUFDUEMsRUFBT0csRUFBZ0IsR0FDQyxTQUFkVixHQUNWTSxFQUFPRyxFQUNQRixFQUFPRyxFQUFnQixHQUNiRixFQUFhbDZFLEVBQUk2M0QsRUFBWTczRCxHQUN2QzA1RSxFQUFZLFFBQ1pNLEVBQU8sRUFDUEMsRUFBT0csRUFBZ0IsSUFFdkJWLEVBQVksT0FDWk0sRUFBT0csRUFBdUMsR0FBdkJsMkIsRUFBT2prRCxFQUFJdW9FLEVBQU92b0UsR0FDekNpNkUsRUFBT0csRUFBZ0IsR0FHeEJsMkIsRUFBTUEsRUFBSTVPLFNBQVNsQixFQUFRNGxDLEVBQU1DLEdBQU0sSUFBTzM2RSxJQUFJMmtELEdBQVEza0QsSUFBSWlwRSxHQUU5RGpsQixHQUFZdmQsRUFBVyx5QkFDdkJ1ZCxHQUFZdmQsRUFBVyx3QkFDdkJ1ZCxHQUFZdmQsRUFBVyx1QkFDdkJ1ZCxHQUFZdmQsRUFBVywwQkFDdkJvZCxHQUFTcGQsRUFBVyxtQkFBcUIyekMsR0FDekN2MUIsR0FBWXBlLEVBQVdtZSxJQUd4QitlLGdCQUFpQixXQUNoQixJQUFJL2UsRUFBTTdyRCxLQUFLa2hFLEtBQUs5RSxtQkFBbUJwOEQsS0FBSzJ5RSxTQUM1QzN5RSxLQUFLMGhGLGFBQWE3MUIsSUFHbkJULFdBQVksU0FBVUMsR0FDckJyckQsS0FBS2tiLFFBQVFtd0MsUUFBVUEsRUFFbkJyckQsS0FBS2c2RCxZQUNSNU8sR0FBV3ByRCxLQUFLZzZELFdBQVkzTyxJQUk5QnVWLGFBQWMsU0FBVS8vRCxHQUN2QixJQUFJZ3JELEVBQU03ckQsS0FBS2toRSxLQUFLL0IsdUJBQXVCbi9ELEtBQUsyeUUsUUFBUzl4RSxFQUFFKzFDLEtBQU0vMUMsRUFBRTgxQyxRQUNuRTMyQyxLQUFLMGhGLGFBQWE3MUIsSUFHbkJ5eUIsV0FBWSxXQUVYLE9BQU92aUMsRUFBUS83QyxLQUFLMDlFLFNBQVcxOUUsS0FBSzA5RSxRQUFRN0ksb0JBQXNCNzBFLEtBQUtrYixRQUFRcW1FLE9BQVN2aEYsS0FBSzA5RSxRQUFRN0ksb0JBQXNCLENBQUMsRUFBRyxPQWNqSXRtRCxHQUFJMnJCLFFBQVEsQ0FPWDhuQyxZQUFhLFNBQVVSLEVBQVNsZ0MsRUFBUXBtQyxHQVN2QyxPQVJNc21FLGFBQW1CSixLQUN4QkksRUFBVSxJQUFJSixHQUFRbG1FLEdBQVM0aUUsV0FBVzBELElBR3ZDbGdDLEdBQ0hrZ0MsRUFBUWhPLFVBQVVseUIsR0FHZnRoRCxLQUFLZ2xFLFNBQVN3YyxHQUNWeGhGLEtBR0RBLEtBQUt1bEUsU0FBU2ljLElBS3RCQyxhQUFjLFNBQVVELEdBSXZCLE9BSElBLEdBQ0h4aEYsS0FBS3lqRSxZQUFZK2QsR0FFWHhoRixRQW1CVDZ0RSxHQUFNM3pCLFFBQVEsQ0FNYituQyxZQUFhLFNBQVUxM0UsRUFBUzJRLEdBb0IvQixPQWxCSTNRLGFBQW1CNjJFLElBQ3RCOW9DLEVBQVcvdEMsRUFBUzJRLEdBQ3BCbGIsS0FBS2tpRixTQUFXMzNFLEVBQ2hCQSxFQUFRbXpFLFFBQVUxOUUsT0FFYkEsS0FBS2tpRixXQUFZaG5FLElBQ3JCbGIsS0FBS2tpRixTQUFXLElBQUlkLEdBQVFsbUUsRUFBU2xiLE9BRXRDQSxLQUFLa2lGLFNBQVNwRSxXQUFXdnpFLElBSTFCdkssS0FBS21pRiwyQkFFRG5pRixLQUFLa2lGLFNBQVNobkUsUUFBUW9tRSxXQUFhdGhGLEtBQUtraEUsTUFBUWxoRSxLQUFLa2hFLEtBQUs4RCxTQUFTaGxFLE9BQ3RFQSxLQUFLZ2lGLGNBR0NoaUYsTUFLUm9pRixjQUFlLFdBTWQsT0FMSXBpRixLQUFLa2lGLFdBQ1JsaUYsS0FBS21pRiwwQkFBeUIsR0FDOUJuaUYsS0FBS3loRixlQUNMemhGLEtBQUtraUYsU0FBVyxNQUVWbGlGLE1BR1JtaUYseUJBQTBCLFNBQVUza0IsR0FDbkMsR0FBS0EsSUFBYXg5RCxLQUFLcWlGLHNCQUF2QixDQUNBLElBQUkza0IsRUFBUUYsRUFBWSxNQUFRLEtBQzVCanlCLEVBQVMsQ0FDWm4vQixPQUFRcE0sS0FBS3loRixhQUNiYixLQUFNNWdGLEtBQUtzaUYsY0FFUHRpRixLQUFLa2lGLFNBQVNobkUsUUFBUW9tRSxVQVUxQi8xQyxFQUFPdGtDLElBQU1qSCxLQUFLdWlGLGNBVGxCaDNDLEVBQU8wb0MsVUFBWWowRSxLQUFLdWlGLGFBQ3hCaDNDLEVBQU80b0MsU0FBV24wRSxLQUFLeWhGLGFBQ25CemhGLEtBQUtraUYsU0FBU2huRSxRQUFRcW1FLFNBQ3pCaDJDLEVBQU9pM0MsVUFBWXhpRixLQUFLc2lGLGNBRXJCajhCLEtBQ0g5YSxFQUFPaTFDLE1BQVF4Z0YsS0FBS3VpRixlQUt0QnZpRixLQUFLMDlELEdBQU9ueUIsR0FDWnZyQyxLQUFLcWlGLHVCQUF5QjdrQixJQUsvQndrQixZQUFhLFNBQVU1bUMsRUFBT2tHLEdBZTdCLE9BZEl0aEQsS0FBS2tpRixVQUFZbGlGLEtBQUtraEUsT0FDekI1ZixFQUFTdGhELEtBQUtraUYsU0FBUy9ELGFBQWFuK0UsS0FBTW83QyxFQUFPa0csR0FHakR0aEQsS0FBS2toRSxLQUFLOGdCLFlBQVloaUYsS0FBS2tpRixTQUFVNWdDLEdBSWpDdGhELEtBQUtraUYsU0FBU2huRSxRQUFRNDNELGFBQWU5eUUsS0FBS2tpRixTQUFTbG9CLGFBQ3REbFAsR0FBUzlxRCxLQUFLa2lGLFNBQVNsb0IsV0FBWSxxQkFDbkNoNkQsS0FBS2d1RSxxQkFBcUJodUUsS0FBS2tpRixTQUFTbG9CLGNBSW5DaDZELE1BS1J5aEYsYUFBYyxXQVFiLE9BUEl6aEYsS0FBS2tpRixXQUNSbGlGLEtBQUtraUYsU0FBU3pDLFNBQ1Z6L0UsS0FBS2tpRixTQUFTaG5FLFFBQVE0M0QsYUFBZTl5RSxLQUFLa2lGLFNBQVNsb0IsYUFDdEQvTyxHQUFZanJELEtBQUtraUYsU0FBU2xvQixXQUFZLHFCQUN0Q2g2RCxLQUFLa3VFLHdCQUF3Qmx1RSxLQUFLa2lGLFNBQVNsb0IsY0FHdENoNkQsTUFLUnlpRixjQUFlLFNBQVVwL0QsR0FReEIsT0FQSXJqQixLQUFLa2lGLFdBQ0psaUYsS0FBS2tpRixTQUFTaGhCLEtBQ2pCbGhFLEtBQUt5aEYsZUFFTHpoRixLQUFLZ2lGLFlBQVkzK0QsSUFHWnJqQixNQUtSMGlGLGNBQWUsV0FDZCxPQUFPMWlGLEtBQUtraUYsU0FBU2hFLFVBS3RCeUUsa0JBQW1CLFNBQVVwNEUsR0FJNUIsT0FISXZLLEtBQUtraUYsVUFDUmxpRixLQUFLa2lGLFNBQVNwRSxXQUFXdnpFLEdBRW5CdkssTUFLUjRpRixXQUFZLFdBQ1gsT0FBTzVpRixLQUFLa2lGLFVBR2JLLGFBQWMsU0FBVTFoRixHQUN2QixJQUFJdTZDLEVBQVF2NkMsRUFBRXU2QyxPQUFTdjZDLEVBQUV3aUIsT0FFcEJyakIsS0FBS2tpRixVQUFhbGlGLEtBQUtraEUsTUFHNUJsaEUsS0FBS2dpRixZQUFZNW1DLEVBQU9wN0MsS0FBS2tpRixTQUFTaG5FLFFBQVFxbUUsT0FBUzFnRixFQUFFeWdELFlBQVN0NEMsSUFHbkVzNUUsYUFBYyxTQUFVemhGLEdBQ3ZCLElBQXVCKzlELEVBQWdCckMsRUFBbkNqYixFQUFTemdELEVBQUV5Z0QsT0FDWHRoRCxLQUFLa2lGLFNBQVNobkUsUUFBUXFtRSxRQUFVMWdGLEVBQUVxdUQsZ0JBQ3JDMFAsRUFBaUI1K0QsS0FBS2toRSxLQUFLMUUsMkJBQTJCMzdELEVBQUVxdUQsZUFDeERxTixFQUFhdjhELEtBQUtraEUsS0FBSzdFLDJCQUEyQnVDLEdBQ2xEdGQsRUFBU3RoRCxLQUFLa2hFLEtBQUt4RyxtQkFBbUI2QixJQUV2Q3Y4RCxLQUFLa2lGLFNBQVMxTyxVQUFVbHlCLE1BdUIxQixJQUFJdWhDLEdBQVV2VCxHQUFLOThELE9BQU8sQ0FDekIwSSxRQUFTLENBR1J5MUQsU0FBVSxDQUFDLEdBQUksSUFRZmxLLE1BQU0sRUFJTnFjLE1BQU8sS0FFUHg0QixVQUFXLG9CQUdabWxCLFdBQVksU0FBVUMsR0FDckIsSUFBSXBvQixFQUFPb29CLEdBQStCLFFBQXBCQSxFQUFRcmxCLFFBQXFCcWxCLEVBQVV6c0QsU0FBUzJDLGNBQWMsT0FDaEYxSyxFQUFVbGIsS0FBS2tiLFFBU25CLEdBUElBLEVBQVF1ckQsZ0JBQWdCc2MsU0FDM0IvMkUsR0FBTXM3QyxHQUNOQSxFQUFJamlDLFlBQVluSyxFQUFRdXJELE9BRXhCbmYsRUFBSWhSLFdBQTZCLElBQWpCcDdCLEVBQVF1ckQsS0FBaUJ2ckQsRUFBUXVyRCxLQUFPLEdBR3JEdnJELEVBQVE0bkUsTUFBTyxDQUNsQixJQUFJQSxFQUFRL21DLEVBQVE3Z0MsRUFBUTRuRSxPQUM1Qng3QixFQUFJdmlDLE1BQU1pK0Qsb0JBQXVCRixFQUFNbjdFLEVBQUssT0FBVW03RSxFQUFNeGhGLEVBQUssS0FJbEUsT0FGQXRCLEtBQUtnd0UsZUFBZTFvQixFQUFLLFFBRWxCQSxHQUdSc29CLGFBQWMsV0FDYixPQUFPLFFBVVROLEdBQUsyVCxRQUFVMVMsR0FvRWYsSUFBSTJTLEdBQVlyVixHQUFNcjdELE9BQU8sQ0FJNUIwSSxRQUFTLENBR1Jpb0UsU0FBVSxJQUlWOTNCLFFBQVMsRUFPVDBiLGVBQWdCbGhCLEdBSWhCdTlCLG1CQUFtQixFQUluQkMsZUFBZ0IsSUFJaEJwVSxPQUFRLEVBSVJ4d0IsT0FBUSxLQUlSb1QsUUFBUyxFQUlUQyxhQUFTOW9ELEVBTVRzNkUsbUJBQWV0NkUsRUFNZnU2RSxtQkFBZXY2RSxFQVFmdzZFLFFBQVEsRUFJUmpwQixLQUFNLFdBSU5qUSxVQUFXLEdBSVhtNUIsV0FBWSxHQUdianFDLFdBQVksU0FBVXQrQixHQUNyQm85QixFQUFXdDRDLEtBQU1rYixJQUdsQm1tRCxNQUFPLFdBQ05yaEUsS0FBSzh5RCxpQkFFTDl5RCxLQUFLMGpGLFFBQVUsR0FDZjFqRixLQUFLMmpGLE9BQVMsR0FFZDNqRixLQUFLbTBELGFBQ0xuMEQsS0FBS21qRSxXQUdOa0wsVUFBVyxTQUFVbGpFLEdBQ3BCQSxFQUFJb2pFLGNBQWN2dUUsT0FHbkJ3aEUsU0FBVSxTQUFVcjJELEdBQ25CbkwsS0FBSzRqRixrQkFDTHgzRSxHQUFPcE0sS0FBS2c2RCxZQUNaN3VELEVBQUlzakUsaUJBQWlCenVFLE1BQ3JCQSxLQUFLZzZELFdBQWEsS0FDbEJoNkQsS0FBSzZqRixlQUFZNzZFLEdBS2xCb21FLGFBQWMsV0FLYixPQUpJcHZFLEtBQUtraEUsT0FDUjNXLEdBQVF2cUQsS0FBS2c2RCxZQUNiaDZELEtBQUs4akYsZUFBZWxrRSxLQUFLQyxNQUVuQjdmLE1BS1JxdkUsWUFBYSxXQUtaLE9BSklydkUsS0FBS2toRSxPQUNSelcsR0FBT3pxRCxLQUFLZzZELFlBQ1poNkQsS0FBSzhqRixlQUFlbGtFLEtBQUsrUCxNQUVuQjN2QixNQUtSaThELGFBQWMsV0FDYixPQUFPajhELEtBQUtnNkQsWUFLYjVPLFdBQVksU0FBVUMsR0FHckIsT0FGQXJyRCxLQUFLa2IsUUFBUW13QyxRQUFVQSxFQUN2QnJyRCxLQUFLdTBFLGlCQUNFdjBFLE1BS1Jza0UsVUFBVyxTQUFVMkssR0FJcEIsT0FIQWp2RSxLQUFLa2IsUUFBUSt6RCxPQUFTQSxFQUN0Qmp2RSxLQUFLMDBFLGdCQUVFMTBFLE1BS1IrakYsVUFBVyxXQUNWLE9BQU8vakYsS0FBS2drRixVQUtiak8sT0FBUSxXQUtQLE9BSkkvMUUsS0FBS2toRSxPQUNSbGhFLEtBQUs0akYsa0JBQ0w1akYsS0FBS21qRSxXQUVDbmpFLE1BR1JvdUUsVUFBVyxXQUNWLElBQUk3aUMsRUFBUyxDQUNaMDRDLGFBQWNqa0YsS0FBS2trRixlQUNuQjNRLFVBQVd2ekUsS0FBS20wRCxXQUNoQnZkLEtBQU01MkMsS0FBS20wRCxXQUNYdXJCLFFBQVMxL0UsS0FBSzQ5RCxZQWdCZixPQWJLNTlELEtBQUtrYixRQUFRNnJELGlCQUVaL21FLEtBQUtvcUUsVUFDVHBxRSxLQUFLb3FFLFFBQVV2ckQsRUFBUzdlLEtBQUs0OUQsV0FBWTU5RCxLQUFLa2IsUUFBUW1vRSxlQUFnQnJqRixPQUd2RXVyQyxFQUFPcTFDLEtBQU81Z0YsS0FBS29xRSxTQUdoQnBxRSxLQUFLc3pELGdCQUNSL25CLEVBQU9neEMsU0FBV3Y4RSxLQUFLNGdFLGNBR2pCcjFCLEdBU1I0NEMsV0FBWSxXQUNYLE9BQU9saEUsU0FBUzJDLGNBQWMsUUFNL0J3K0QsWUFBYSxXQUNaLElBQUk5a0YsRUFBSVUsS0FBS2tiLFFBQVFpb0UsU0FDckIsT0FBTzdqRixhQUFhcThDLEVBQVFyOEMsRUFBSSxJQUFJcThDLEVBQU1yOEMsRUFBR0EsSUFHOUNvMUUsY0FBZSxXQUNWMTBFLEtBQUtnNkQsaUJBQXNDaHhELElBQXhCaEosS0FBS2tiLFFBQVErekQsUUFBZ0QsT0FBeEJqdkUsS0FBS2tiLFFBQVErekQsU0FDeEVqdkUsS0FBS2c2RCxXQUFXajFDLE1BQU1rcUQsT0FBU2p2RSxLQUFLa2IsUUFBUSt6RCxTQUk5QzZVLGVBQWdCLFNBQVVsMkQsR0FNekIsSUFIQSxJQUdxQ3FoRCxFQUhqQ2xkLEVBQVMveEQsS0FBSys3RCxVQUFVajZCLFNBQ3hCdWlELEdBQWN6MkQsR0FBUSxJQUFXMWYsS0FFNUIzUSxFQUFJLEVBQUc0TSxFQUFNNG5ELEVBQU83dkQsT0FBZ0IzRSxFQUFJNE0sRUFBSzVNLElBRXJEMHhFLEVBQVNsZCxFQUFPeDBELEdBQUd3bkIsTUFBTWtxRCxPQUVyQmxkLEVBQU94MEQsS0FBT3lDLEtBQUtnNkQsWUFBY2lWLElBQ3BDb1YsRUFBYXoyRCxFQUFReTJELEdBQWFwVixJQUloQy9wQyxTQUFTbS9DLEtBQ1pya0YsS0FBS2tiLFFBQVErekQsT0FBU29WLEVBQWF6MkQsR0FBUyxFQUFHLEdBQy9DNXRCLEtBQUswMEUsa0JBSVBILGVBQWdCLFdBQ2YsR0FBS3YwRSxLQUFLa2hFLE9BR045YyxFQUFKLENBRUFnSCxHQUFXcHJELEtBQUtnNkQsV0FBWWg2RCxLQUFLa2IsUUFBUW13QyxTQUV6QyxJQUFJcDhDLEdBQU8sSUFBSXlTLEtBQ1g0aUUsR0FBWSxFQUNaQyxHQUFZLEVBRWhCLElBQUssSUFBSXpsRixLQUFPa0IsS0FBSzJqRixPQUFRLENBQzVCLElBQUlhLEVBQU94a0YsS0FBSzJqRixPQUFPN2tGLEdBQ3ZCLEdBQUswbEYsRUFBS2gwQyxTQUFZZzBDLEVBQUtDLE9BQTNCLENBRUEsSUFBSUMsRUFBTzlrRSxLQUFLK1AsSUFBSSxHQUFJMWdCLEVBQU11MUUsRUFBS0MsUUFBVSxLQUU3Q3I1QixHQUFXbzVCLEVBQUt0K0QsR0FBSXcrRCxHQUNoQkEsRUFBTyxFQUNWSixHQUFZLEdBRVJFLEVBQUsxakUsT0FDUnlqRSxHQUFZLEVBRVp2a0YsS0FBSzJrRixjQUFjSCxHQUVwQkEsRUFBSzFqRSxRQUFTLElBSVp5akUsSUFBY3ZrRixLQUFLNGtGLFVBQVk1a0YsS0FBSzZrRixjQUVwQ1AsSUFDSGxyQyxFQUFnQnA1QyxLQUFLOGtGLFlBQ3JCOWtGLEtBQUs4a0YsV0FBYTVyQyxFQUFpQmw1QyxLQUFLdTBFLGVBQWdCdjBFLFNBSTFEMmtGLGNBQWU3c0MsRUFFZmdiLGVBQWdCLFdBQ1g5eUQsS0FBS2c2RCxhQUVUaDZELEtBQUtnNkQsV0FBYTVQLEdBQVMsTUFBTyxrQkFBb0JwcUQsS0FBS2tiLFFBQVFvdkMsV0FBYSxLQUNoRnRxRCxLQUFLMDBFLGdCQUVEMTBFLEtBQUtrYixRQUFRbXdDLFFBQVUsR0FDMUJyckQsS0FBS3UwRSxpQkFHTnYwRSxLQUFLKzdELFVBQVUxMkMsWUFBWXJsQixLQUFLZzZELGNBR2pDK3FCLGNBQWUsV0FFZCxJQUFJbnVDLEVBQU81MkMsS0FBSzZqRixVQUNaL3hCLEVBQVU5eEQsS0FBS2tiLFFBQVE0MkMsUUFFM0IsUUFBYTlvRCxJQUFUNHRDLEVBQUosQ0FFQSxJQUFLLElBQUk2cEIsS0FBS3pnRSxLQUFLMGpGLFFBQ2xCampCLEVBQUl4N0IsT0FBT3c3QixHQUNQemdFLEtBQUswakYsUUFBUWpqQixHQUFHdjZDLEdBQUc0YixTQUFTNS9CLFFBQVV1K0QsSUFBTTdwQixHQUMvQzUyQyxLQUFLMGpGLFFBQVFqakIsR0FBR3Y2QyxHQUFHbkIsTUFBTWtxRCxPQUFTbmQsRUFBVWx5QyxLQUFLcStCLElBQUlySCxFQUFPNnBCLEdBQzVEemdFLEtBQUtnbEYsZUFBZXZrQixLQUVwQnIwRCxHQUFPcE0sS0FBSzBqRixRQUFRampCLEdBQUd2NkMsSUFDdkJsbUIsS0FBS2lsRixtQkFBbUJ4a0IsR0FDeEJ6Z0UsS0FBS2tsRixlQUFlemtCLFVBQ2J6Z0UsS0FBSzBqRixRQUFRampCLElBSXRCLElBQUlwakMsRUFBUXI5QixLQUFLMGpGLFFBQVE5c0MsR0FDckJ6ckMsRUFBTW5MLEtBQUtraEUsS0FxQmYsT0FuQks3akMsS0FDSkEsRUFBUXI5QixLQUFLMGpGLFFBQVE5c0MsR0FBUSxJQUV2QjF3QixHQUFLa2tDLEdBQVMsTUFBTywrQ0FBZ0RwcUQsS0FBS2c2RCxZQUNoRjM4QixFQUFNblgsR0FBR25CLE1BQU1rcUQsT0FBU25kLEVBRXhCejBCLEVBQU02MEMsT0FBUy9tRSxFQUFJNEMsUUFBUTVDLEVBQUk0MkMsVUFBVTUyQyxFQUFJeXdELGtCQUFtQmhsQixHQUFNdUIsUUFDdEU5YSxFQUFNdVosS0FBT0EsRUFFYjUyQyxLQUFLbWxGLGtCQUFrQjluRCxFQUFPbHlCLEVBQUkreUMsWUFBYS95QyxFQUFJeXFELFdBRzNDdjRCLEVBQU1uWCxHQUFHeW1DLFlBRWpCM3NELEtBQUtvbEYsZUFBZS9uRCxJQUdyQnI5QixLQUFLcWxGLE9BQVNob0QsRUFFUEEsSUFHUjJuRCxlQUFnQmx0QyxFQUVoQm90QyxlQUFnQnB0QyxFQUVoQnN0QyxlQUFnQnR0QyxFQUVoQitzQyxZQUFhLFdBQ1osR0FBSzdrRixLQUFLa2hFLEtBQVYsQ0FJQSxJQUFJcGlFLEVBQUswbEYsRUFFTDV0QyxFQUFPNTJDLEtBQUtraEUsS0FBS3RMLFVBQ3JCLEdBQUloZixFQUFPNTJDLEtBQUtrYixRQUFRNDJDLFNBQ3ZCbGIsRUFBTzUyQyxLQUFLa2IsUUFBUTIyQyxRQUNwQjd4RCxLQUFLNGpGLHNCQUZOLENBTUEsSUFBSzlrRixLQUFPa0IsS0FBSzJqRixRQUNoQmEsRUFBT3hrRixLQUFLMmpGLE9BQU83a0YsSUFDZHdtRixPQUFTZCxFQUFLaDBDLFFBR3BCLElBQUsxeEMsS0FBT2tCLEtBQUsyakYsT0FFaEIsSUFEQWEsRUFBT3hrRixLQUFLMmpGLE9BQU83a0YsSUFDVjB4QyxVQUFZZzBDLEVBQUsxakUsT0FBUSxDQUNqQyxJQUFJMjRDLEVBQVMrcUIsRUFBSy9xQixPQUNiejVELEtBQUt1bEYsY0FBYzlyQixFQUFPOXhELEVBQUc4eEQsRUFBT240RCxFQUFHbTRELEVBQU9nSCxFQUFHaEgsRUFBT2dILEVBQUksSUFDaEV6Z0UsS0FBS3dsRixnQkFBZ0IvckIsRUFBTzl4RCxFQUFHOHhELEVBQU9uNEQsRUFBR200RCxFQUFPZ0gsRUFBR2hILEVBQU9nSCxFQUFJLEdBS2pFLElBQUszaEUsS0FBT2tCLEtBQUsyakYsT0FDWDNqRixLQUFLMmpGLE9BQU83a0YsR0FBS3dtRixRQUNyQnRsRixLQUFLeWxGLFlBQVkzbUYsTUFLcEJtbUYsbUJBQW9CLFNBQVVydUMsR0FDN0IsSUFBSyxJQUFJOTNDLEtBQU9rQixLQUFLMmpGLE9BQ2hCM2pGLEtBQUsyakYsT0FBTzdrRixHQUFLMjZELE9BQU9nSCxJQUFNN3BCLEdBR2xDNTJDLEtBQUt5bEYsWUFBWTNtRixJQUluQjhrRixnQkFBaUIsV0FDaEIsSUFBSyxJQUFJOWtGLEtBQU9rQixLQUFLMmpGLE9BQ3BCM2pGLEtBQUt5bEYsWUFBWTNtRixJQUluQm9sRixlQUFnQixXQUNmLElBQUssSUFBSXpqQixLQUFLemdFLEtBQUswakYsUUFDbEJ0M0UsR0FBT3BNLEtBQUswakYsUUFBUWpqQixHQUFHdjZDLElBQ3ZCbG1CLEtBQUtrbEYsZUFBZWpnRCxPQUFPdzdCLFdBQ3BCemdFLEtBQUswakYsUUFBUWpqQixHQUVyQnpnRSxLQUFLNGpGLGtCQUVMNWpGLEtBQUs2akYsZUFBWTc2RSxHQUdsQnU4RSxjQUFlLFNBQVU1OUUsRUFBR3JHLEVBQUdtL0QsRUFBRzVPLEdBQ2pDLElBQUk2ekIsRUFBSzlsRSxLQUFLaThCLE1BQU1sMEMsRUFBSSxHQUNwQmcrRSxFQUFLL2xFLEtBQUtpOEIsTUFBTXY2QyxFQUFJLEdBQ3BCc2tGLEVBQUtubEIsRUFBSSxFQUNUb2xCLEVBQVUsSUFBSWxxQyxHQUFPK3BDLEdBQUtDLEdBQzlCRSxFQUFRcGxCLEdBQUttbEIsRUFFYixJQUFJOW1GLEVBQU1rQixLQUFLOGxGLGlCQUFpQkQsR0FDNUJyQixFQUFPeGtGLEtBQUsyakYsT0FBTzdrRixHQUV2QixPQUFJMGxGLEdBQVFBLEVBQUsxakUsUUFDaEIwakUsRUFBS2MsUUFBUyxHQUNQLElBRUdkLEdBQVFBLEVBQUtDLFNBQ3ZCRCxFQUFLYyxRQUFTLEdBR1hNLEVBQUsvekIsR0FDRDd4RCxLQUFLdWxGLGNBQWNHLEVBQUlDLEVBQUlDLEVBQUkvekIsS0FNeEMyekIsZ0JBQWlCLFNBQVU3OUUsRUFBR3JHLEVBQUdtL0QsRUFBRzNPLEdBRW5DLElBQUssSUFBSXYwRCxFQUFJLEVBQUlvSyxFQUFHcEssRUFBSSxFQUFJb0ssRUFBSSxFQUFHcEssSUFDbEMsSUFBSyxJQUFJNm1CLEVBQUksRUFBSTlpQixFQUFHOGlCLEVBQUksRUFBSTlpQixFQUFJLEVBQUc4aUIsSUFBSyxDQUV2QyxJQUFJcTFDLEVBQVMsSUFBSTlkLEVBQU1wK0MsRUFBRzZtQixHQUMxQnExQyxFQUFPZ0gsRUFBSUEsRUFBSSxFQUVmLElBQUkzaEUsRUFBTWtCLEtBQUs4bEYsaUJBQWlCcnNCLEdBQzVCK3FCLEVBQU94a0YsS0FBSzJqRixPQUFPN2tGLEdBRW5CMGxGLEdBQVFBLEVBQUsxakUsT0FDaEIwakUsRUFBS2MsUUFBUyxHQUdKZCxHQUFRQSxFQUFLQyxTQUN2QkQsRUFBS2MsUUFBUyxHQUdYN2tCLEVBQUksRUFBSTNPLEdBQ1g5eEQsS0FBS3dsRixnQkFBZ0Jqb0YsRUFBRzZtQixFQUFHcThDLEVBQUksRUFBRzNPLE1BTXRDcUMsV0FBWSxTQUFVdHpELEdBQ3JCLElBQUlrbEYsRUFBWWxsRixJQUFNQSxFQUFFeThELE9BQVN6OEQsRUFBRXUxRCxPQUNuQ3AyRCxLQUFLZ21GLFNBQVNobUYsS0FBS2toRSxLQUFLaGpCLFlBQWFsK0MsS0FBS2toRSxLQUFLdEwsVUFBV213QixFQUFXQSxJQUd0RW5sQixhQUFjLFNBQVUvL0QsR0FDdkJiLEtBQUtnbUYsU0FBU25sRixFQUFFODFDLE9BQVE5MUMsRUFBRSsxQyxNQUFNLEVBQU0vMUMsRUFBRWlnRSxXQUd6Q21sQixXQUFZLFNBQVVydkMsR0FDckIsSUFBSTE3QixFQUFVbGIsS0FBS2tiLFFBRW5CLFlBQUlsUyxJQUFja1MsRUFBUXFvRSxlQUFpQjNzQyxFQUFPMTdCLEVBQVFxb0UsY0FDbERyb0UsRUFBUXFvRSxtQkFHWnY2RSxJQUFja1MsRUFBUW9vRSxlQUFpQnBvRSxFQUFRb29FLGNBQWdCMXNDLEVBQzNEMTdCLEVBQVFvb0UsY0FHVDFzQyxHQUdSb3ZDLFNBQVUsU0FBVXJ2QyxFQUFRQyxFQUFNc3ZDLEVBQVNwbEIsR0FDMUMsSUFBSXFsQixFQUFXdm1FLEtBQUt1NEIsTUFBTXZCLEdBR3pCdXZDLE9BRjZCbjlFLElBQXpCaEosS0FBS2tiLFFBQVE0MkMsU0FBeUJxMEIsRUFBV25tRixLQUFLa2IsUUFBUTQyQyxjQUNyQzlvRCxJQUF6QmhKLEtBQUtrYixRQUFRMjJDLFNBQXlCczBCLEVBQVdubUYsS0FBS2tiLFFBQVEyMkMsYUFDdkQ3b0QsRUFFQWhKLEtBQUtpbUYsV0FBV0UsR0FHNUIsSUFBSUMsRUFBa0JwbUYsS0FBS2tiLFFBQVFrb0UsbUJBQXNCK0MsSUFBYW5tRixLQUFLNmpGLFVBRXRFL2lCLElBQVlzbEIsSUFFaEJwbUYsS0FBSzZqRixVQUFZc0MsRUFFYm5tRixLQUFLcW1GLGVBQ1JybUYsS0FBS3FtRixnQkFHTnJtRixLQUFLK2tGLGdCQUNML2tGLEtBQUtzbUYsa0JBRVl0OUUsSUFBYm05RSxHQUNIbm1GLEtBQUttakUsUUFBUXhzQixHQUdUdXZDLEdBQ0psbUYsS0FBSzZrRixjQUtON2tGLEtBQUs0a0YsV0FBYXNCLEdBR25CbG1GLEtBQUt1bUYsbUJBQW1CNXZDLEVBQVFDLElBR2pDMnZDLG1CQUFvQixTQUFVNXZDLEVBQVFDLEdBQ3JDLElBQUssSUFBSXI1QyxLQUFLeUMsS0FBSzBqRixRQUNsQjFqRixLQUFLbWxGLGtCQUFrQm5sRixLQUFLMGpGLFFBQVFubUYsR0FBSW81QyxFQUFRQyxJQUlsRHV1QyxrQkFBbUIsU0FBVTluRCxFQUFPc1osRUFBUUMsR0FDM0MsSUFBSTZLLEVBQVF6aEQsS0FBS2toRSxLQUFLMU0sYUFBYTVkLEVBQU12WixFQUFNdVosTUFDM0M0dkMsRUFBWW5wRCxFQUFNNjBDLE9BQU83MEIsV0FBV29FLEdBQy9CeEUsU0FBU2o5QyxLQUFLa2hFLEtBQUs3RCxtQkFBbUIxbUIsRUFBUUMsSUFBT3VCLFFBRTFEd04sR0FDSGdHLEdBQWF0dUIsRUFBTW5YLEdBQUlzZ0UsRUFBVy9rQyxHQUVsQ3FLLEdBQVl6dUIsRUFBTW5YLEdBQUlzZ0UsSUFJeEJGLFdBQVksV0FDWCxJQUFJbjdFLEVBQU1uTCxLQUFLa2hFLEtBQ1h0UCxFQUFNem1ELEVBQUkrUCxRQUFRMDJDLElBQ2xCdXhCLEVBQVduakYsS0FBS3ltRixVQUFZem1GLEtBQUtva0YsY0FDakMrQixFQUFXbm1GLEtBQUs2akYsVUFFaEJwbEMsRUFBU3orQyxLQUFLa2hFLEtBQUtwRixvQkFBb0I5N0QsS0FBSzZqRixXQUM1Q3BsQyxJQUNIeitDLEtBQUswbUYsaUJBQW1CMW1GLEtBQUsybUYscUJBQXFCbG9DLElBR25EeitDLEtBQUs0bUYsT0FBU2gxQixFQUFJelAsVUFBWW5pRCxLQUFLa2IsUUFBUXNvRSxRQUFVLENBQ3BENWpFLEtBQUtpOEIsTUFBTTF3QyxFQUFJNEMsUUFBUSxDQUFDLEVBQUc2akQsRUFBSXpQLFFBQVEsSUFBS2drQyxHQUFVeCtFLEVBQUl3N0UsRUFBU3g3RSxHQUNuRWlZLEtBQUtrOEIsS0FBSzN3QyxFQUFJNEMsUUFBUSxDQUFDLEVBQUc2akQsRUFBSXpQLFFBQVEsSUFBS2drQyxHQUFVeCtFLEVBQUl3N0UsRUFBUzdoRixJQUVuRXRCLEtBQUs2bUYsT0FBU2oxQixFQUFJeFAsVUFBWXBpRCxLQUFLa2IsUUFBUXNvRSxRQUFVLENBQ3BENWpFLEtBQUtpOEIsTUFBTTF3QyxFQUFJNEMsUUFBUSxDQUFDNmpELEVBQUl4UCxRQUFRLEdBQUksR0FBSStqQyxHQUFVN2tGLEVBQUk2aEYsRUFBU3g3RSxHQUNuRWlZLEtBQUtrOEIsS0FBSzN3QyxFQUFJNEMsUUFBUSxDQUFDNmpELEVBQUl4UCxRQUFRLEdBQUksR0FBSStqQyxHQUFVN2tGLEVBQUk2aEYsRUFBUzdoRixLQUlwRXM4RCxXQUFZLFdBQ041OUQsS0FBS2toRSxPQUFRbGhFLEtBQUtraEUsS0FBS2IsZ0JBRTVCcmdFLEtBQUttakUsV0FHTjJqQixxQkFBc0IsU0FBVW53QyxHQUMvQixJQUFJeHJDLEVBQU1uTCxLQUFLa2hFLEtBQ1g2bEIsRUFBVTU3RSxFQUFJazFELGVBQWlCemdELEtBQUtDLElBQUkxVSxFQUFJNjFELGVBQWdCNzFELEVBQUl5cUQsV0FBYXpxRCxFQUFJeXFELFVBQ2pGblUsRUFBUXQyQyxFQUFJcXBELGFBQWF1eUIsRUFBUy9tRixLQUFLNmpGLFdBQ3ZDN3JCLEVBQWM3c0QsRUFBSTRDLFFBQVE0b0MsRUFBUTMyQyxLQUFLNmpGLFdBQVdob0MsUUFDbERtckMsRUFBVzc3RSxFQUFJb3pDLFVBQVVwQixTQUFpQixFQUFSc0UsR0FFdEMsT0FBTyxJQUFJekYsRUFBT2djLEVBQVkvYSxTQUFTK3BDLEdBQVdodkIsRUFBWS93RCxJQUFJKy9FLEtBSW5FN2pCLFFBQVMsU0FBVXhzQixHQUNsQixJQUFJeHJDLEVBQU1uTCxLQUFLa2hFLEtBQ2YsR0FBSy8xRCxFQUFMLENBQ0EsSUFBSXlyQyxFQUFPNTJDLEtBQUtpbUYsV0FBVzk2RSxFQUFJeXFELFdBRy9CLFFBRGU1c0QsSUFBWDJ0QyxJQUF3QkEsRUFBU3hyQyxFQUFJK3lDLGtCQUNsQmwxQyxJQUFuQmhKLEtBQUs2akYsVUFBVCxDQUVBLElBQUkzckIsRUFBY2w0RCxLQUFLOG1GLHFCQUFxQm53QyxHQUN4Q3N3QyxFQUFZam5GLEtBQUsybUYscUJBQXFCenVCLEdBQ3RDZ3ZCLEVBQWFELEVBQVUvb0MsWUFDdkIxWixFQUFRLEdBQ1IyaUQsRUFBU25uRixLQUFLa2IsUUFBUXVvRSxXQUN0QjJELEVBQWUsSUFBSXByQyxFQUFPaXJDLEVBQVU5b0MsZ0JBQWdCbEIsU0FBUyxDQUFDa3FDLEdBQVNBLElBQzdDRixFQUFVN29DLGNBQWNuM0MsSUFBSSxDQUFDa2dGLEdBQVNBLEtBR3BFLEtBQU1qaUQsU0FBUytoRCxFQUFVdDNELElBQUlob0IsSUFDdkJ1OUIsU0FBUytoRCxFQUFVdDNELElBQUlydUIsSUFDdkI0akMsU0FBUytoRCxFQUFVcG5FLElBQUlsWSxJQUN2QnU5QixTQUFTK2hELEVBQVVwbkUsSUFBSXZlLElBQU8sTUFBTSxJQUFJZ08sTUFBTSxpREFFcEQsSUFBSyxJQUFJeFEsS0FBT2tCLEtBQUsyakYsT0FBUSxDQUM1QixJQUFJL2xGLEVBQUlvQyxLQUFLMmpGLE9BQU83a0YsR0FBSzI2RCxPQUNyQjc3RCxFQUFFNmlFLElBQU16Z0UsS0FBSzZqRixXQUFjdUQsRUFBYXBwQyxTQUFTLElBQUlyQyxFQUFNLzlDLEVBQUUrSixFQUFHL0osRUFBRTBELE1BQ3JFdEIsS0FBSzJqRixPQUFPN2tGLEdBQUsweEMsU0FBVSxHQU03QixHQUFJNXdCLEtBQUtxK0IsSUFBSXJILEVBQU81MkMsS0FBSzZqRixXQUFhLEVBQUs3akYsS0FBS2dtRixTQUFTcnZDLEVBQVFDLE9BQWpFLENBR0EsSUFBSyxJQUFJeHlCLEVBQUk2aUUsRUFBVXQzRCxJQUFJcnVCLEVBQUc4aUIsR0FBSzZpRSxFQUFVcG5FLElBQUl2ZSxFQUFHOGlCLElBQ25ELElBQUssSUFBSTdtQixFQUFJMHBGLEVBQVV0M0QsSUFBSWhvQixFQUFHcEssR0FBSzBwRixFQUFVcG5FLElBQUlsWSxFQUFHcEssSUFBSyxDQUN4RCxJQUFJazhELEVBQVMsSUFBSTlkLEVBQU1wK0MsRUFBRzZtQixHQUcxQixHQUZBcTFDLEVBQU9nSCxFQUFJemdFLEtBQUs2akYsVUFFWDdqRixLQUFLcW5GLGFBQWE1dEIsR0FBdkIsQ0FFQSxJQUFJK3FCLEVBQU94a0YsS0FBSzJqRixPQUFPM2pGLEtBQUs4bEYsaUJBQWlCcnNCLElBQ3pDK3FCLEVBQ0hBLEVBQUtoMEMsU0FBVSxFQUVmaE0sRUFBTXJpQyxLQUFLczNELElBVWQsR0FKQWoxQixFQUFNVyxNQUFLLFNBQVVoaUMsRUFBRzNELEdBQ3ZCLE9BQU8yRCxFQUFFMDZDLFdBQVdxcEMsR0FBYzFuRixFQUFFcStDLFdBQVdxcEMsTUFHM0IsSUFBakIxaUQsRUFBTXRpQyxPQUFjLENBRWxCbEMsS0FBS2drRixXQUNUaGtGLEtBQUtna0YsVUFBVyxFQUdoQmhrRixLQUFLMjZDLEtBQUssWUFJWCxJQUFJMnNDLEVBQVdya0UsU0FBU3NrRSx5QkFFeEIsSUFBS2hxRixFQUFJLEVBQUdBLEVBQUlpbkMsRUFBTXRpQyxPQUFRM0UsSUFDN0J5QyxLQUFLd25GLFNBQVNoakQsRUFBTWpuQyxHQUFJK3BGLEdBR3pCdG5GLEtBQUtxbEYsT0FBT24vRCxHQUFHYixZQUFZaWlFLFFBSTdCRCxhQUFjLFNBQVU1dEIsR0FDdkIsSUFBSTdILEVBQU01eEQsS0FBS2toRSxLQUFLaG1ELFFBQVEwMkMsSUFFNUIsSUFBS0EsRUFBSTFQLFNBQVUsQ0FFbEIsSUFBSXpELEVBQVN6K0MsS0FBSzBtRixpQkFDbEIsSUFBTTkwQixFQUFJelAsVUFBWXNYLEVBQU85eEQsRUFBSTgyQyxFQUFPOXVCLElBQUlob0IsR0FBSzh4RCxFQUFPOXhELEVBQUk4MkMsRUFBTzUrQixJQUFJbFksS0FDakVpcUQsRUFBSXhQLFVBQVlxWCxFQUFPbjRELEVBQUltOUMsRUFBTzl1QixJQUFJcnVCLEdBQUttNEQsRUFBT240RCxFQUFJbTlDLEVBQU81K0IsSUFBSXZlLEdBQU8sT0FBTyxFQUd0RixJQUFLdEIsS0FBS2tiLFFBQVF1akMsT0FBVSxPQUFPLEVBR25DLElBQUlncEMsRUFBYXpuRixLQUFLMG5GLG9CQUFvQmp1QixHQUMxQyxPQUFPbGQsRUFBZXY4QyxLQUFLa2IsUUFBUXVqQyxRQUFRSyxTQUFTMm9DLElBR3JERSxhQUFjLFNBQVU3b0YsR0FDdkIsT0FBT2tCLEtBQUswbkYsb0JBQW9CMW5GLEtBQUs0bkYsaUJBQWlCOW9GLEtBR3ZEK29GLGtCQUFtQixTQUFVcHVCLEdBQzVCLElBQUl0dUQsRUFBTW5MLEtBQUtraEUsS0FDWGlpQixFQUFXbmpGLEtBQUtva0YsY0FDaEIwRCxFQUFVcnVCLEVBQU9sYyxRQUFRNGxDLEdBQ3pCNEUsRUFBVUQsRUFBUTdnRixJQUFJazhFLEdBRzFCLE1BQU8sQ0FGRWg0RSxFQUFJNDJDLFVBQVUrbEMsRUFBU3J1QixFQUFPZ0gsR0FDOUJ0MUQsRUFBSTQyQyxVQUFVZ21DLEVBQVN0dUIsRUFBT2dILEtBS3hDaW5CLG9CQUFxQixTQUFVanVCLEdBQzlCLElBQUl1dUIsRUFBS2hvRixLQUFLNm5GLGtCQUFrQnB1QixHQUM1QmhiLEVBQVMsSUFBSXRDLEVBQWE2ckMsRUFBRyxHQUFJQSxFQUFHLElBS3hDLE9BSEtob0YsS0FBS2tiLFFBQVFzb0UsU0FDakIva0MsRUFBU3orQyxLQUFLa2hFLEtBQUs3ZSxpQkFBaUI1RCxJQUU5QkEsR0FHUnFuQyxpQkFBa0IsU0FBVXJzQixHQUMzQixPQUFPQSxFQUFPOXhELEVBQUksSUFBTTh4RCxFQUFPbjRELEVBQUksSUFBTW00RCxFQUFPZ0gsR0FJakRtbkIsaUJBQWtCLFNBQVU5b0YsR0FDM0IsSUFBSWd1RSxFQUFJaHVFLEVBQUlreUMsTUFBTSxLQUNkeW9CLEVBQVMsSUFBSTlkLEdBQU9teEIsRUFBRSxJQUFLQSxFQUFFLElBRWpDLE9BREFyVCxFQUFPZ0gsR0FBS3FNLEVBQUUsR0FDUHJULEdBR1Jnc0IsWUFBYSxTQUFVM21GLEdBQ3RCLElBQUkwbEYsRUFBT3hrRixLQUFLMmpGLE9BQU83a0YsR0FDbEIwbEYsSUFFTHA0RSxHQUFPbzRFLEVBQUt0K0QsV0FFTGxtQixLQUFLMmpGLE9BQU83a0YsR0FJbkJrQixLQUFLMjZDLEtBQUssYUFBYyxDQUN2QjZwQyxLQUFNQSxFQUFLdCtELEdBQ1h1ekMsT0FBUXo1RCxLQUFLNG5GLGlCQUFpQjlvRixPQUloQ21wRixVQUFXLFNBQVV6RCxHQUNwQjE1QixHQUFTMDVCLEVBQU0sZ0JBRWYsSUFBSXJCLEVBQVduakYsS0FBS29rRixjQUNwQkksRUFBS3ovRCxNQUFNaW9DLE1BQVFtMkIsRUFBU3g3RSxFQUFJLEtBQ2hDNjhFLEVBQUt6L0QsTUFBTWtvQyxPQUFTazJCLEVBQVM3aEYsRUFBSSxLQUVqQ2tqRixFQUFLL0gsY0FBZ0Iza0MsRUFDckIwc0MsRUFBSzlILFlBQWM1a0MsRUFHZnNNLEdBQVNwa0QsS0FBS2tiLFFBQVFtd0MsUUFBVSxHQUNuQ0QsR0FBV281QixFQUFNeGtGLEtBQUtrYixRQUFRbXdDLFNBSzNCNUcsS0FBWUMsS0FDZjgvQixFQUFLei9ELE1BQU1takUseUJBQTJCLFdBSXhDVixTQUFVLFNBQVUvdEIsRUFBUS9yQixHQUMzQixJQUFJeTZDLEVBQVVub0YsS0FBS29vRixZQUFZM3VCLEdBQzNCMzZELEVBQU1rQixLQUFLOGxGLGlCQUFpQnJzQixHQUU1QitxQixFQUFPeGtGLEtBQUtta0YsV0FBV25rRixLQUFLcW9GLFlBQVk1dUIsR0FBUzE2RCxFQUFLaUIsS0FBS3NvRixXQUFZdG9GLEtBQU15NUQsSUFFakZ6NUQsS0FBS2lvRixVQUFVekQsR0FJWHhrRixLQUFLbWtGLFdBQVdqaUYsT0FBUyxHQUU1QmczQyxFQUFpQm42QyxFQUFLaUIsS0FBS3NvRixXQUFZdG9GLEtBQU15NUQsRUFBUSxLQUFNK3FCLElBRzVEMTRCLEdBQVkwNEIsRUFBTTJELEdBR2xCbm9GLEtBQUsyakYsT0FBTzdrRixHQUFPLENBQ2xCb25CLEdBQUlzK0QsRUFDSi9xQixPQUFRQSxFQUNSanBCLFNBQVMsR0FHVjlDLEVBQVVyb0IsWUFBWW0vRCxHQUd0QnhrRixLQUFLMjZDLEtBQUssZ0JBQWlCLENBQzFCNnBDLEtBQU1BLEVBQ04vcUIsT0FBUUEsS0FJVjZ1QixXQUFZLFNBQVU3dUIsRUFBUXIxRCxFQUFLb2dGLEdBQzlCcGdGLEdBR0hwRSxLQUFLMjZDLEtBQUssWUFBYSxDQUN0QnA0QyxNQUFPNkIsRUFDUG9nRixLQUFNQSxFQUNOL3FCLE9BQVFBLElBSVYsSUFBSTM2RCxFQUFNa0IsS0FBSzhsRixpQkFBaUJyc0IsSUFFaEMrcUIsRUFBT3hrRixLQUFLMmpGLE9BQU83a0YsTUFHbkIwbEYsRUFBS0MsUUFBVSxJQUFJL2lFLEtBQ2YxaEIsS0FBS2toRSxLQUFLdEUsZUFDYnhSLEdBQVdvNUIsRUFBS3QrRCxHQUFJLEdBQ3BCa3pCLEVBQWdCcDVDLEtBQUs4a0YsWUFDckI5a0YsS0FBSzhrRixXQUFhNXJDLEVBQWlCbDVDLEtBQUt1MEUsZUFBZ0J2MEUsUUFFeER3a0YsRUFBSzFqRSxRQUFTLEVBQ2Q5Z0IsS0FBSzZrRixlQUdEemdGLElBQ0owbUQsR0FBUzA1QixFQUFLdCtELEdBQUksdUJBSWxCbG1CLEtBQUsyNkMsS0FBSyxXQUFZLENBQ3JCNnBDLEtBQU1BLEVBQUt0K0QsR0FDWHV6QyxPQUFRQSxLQUlOejVELEtBQUt1b0YsbUJBQ1J2b0YsS0FBS2drRixVQUFXLEVBR2hCaGtGLEtBQUsyNkMsS0FBSyxRQUVOeUosSUFBVXBrRCxLQUFLa2hFLEtBQUt0RSxjQUN2QjFqQixFQUFpQmw1QyxLQUFLNmtGLFlBQWE3a0YsTUFJbkNrUixXQUFXblMsRUFBS2lCLEtBQUs2a0YsWUFBYTdrRixNQUFPLFFBSzVDb29GLFlBQWEsU0FBVTN1QixHQUN0QixPQUFPQSxFQUFPbGMsUUFBUXY5QyxLQUFLb2tGLGVBQWVubkMsU0FBU2o5QyxLQUFLcWxGLE9BQU9uVCxTQUdoRW1XLFlBQWEsU0FBVTV1QixHQUN0QixJQUFJK3VCLEVBQVksSUFBSTdzQyxFQUNuQjM3QyxLQUFLNG1GLE9BQVNodkMsRUFBUTZoQixFQUFPOXhELEVBQUczSCxLQUFLNG1GLFFBQVVudEIsRUFBTzl4RCxFQUN0RDNILEtBQUs2bUYsT0FBU2p2QyxFQUFRNmhCLEVBQU9uNEQsRUFBR3RCLEtBQUs2bUYsUUFBVXB0QixFQUFPbjRELEdBRXZELE9BREFrbkYsRUFBVS9uQixFQUFJaEgsRUFBT2dILEVBQ2QrbkIsR0FHUjdCLHFCQUFzQixTQUFVbG9DLEdBQy9CLElBQUkwa0MsRUFBV25qRixLQUFLb2tGLGNBQ3BCLE9BQU8sSUFBSXBvQyxFQUNWeUMsRUFBTzl1QixJQUFJNnRCLFVBQVUybEMsR0FBVXRuQyxRQUMvQjRDLEVBQU81K0IsSUFBSTI5QixVQUFVMmxDLEdBQVVybkMsT0FBT21CLFNBQVMsQ0FBQyxFQUFHLE1BR3JEc3JDLGVBQWdCLFdBQ2YsSUFBSyxJQUFJenBGLEtBQU9rQixLQUFLMmpGLE9BQ3BCLElBQUszakYsS0FBSzJqRixPQUFPN2tGLEdBQUsybEYsT0FBVSxPQUFPLEVBRXhDLE9BQU8sS0F5Q0xnRSxHQUFZdkYsR0FBVTF3RSxPQUFPLENBSWhDMEksUUFBUyxDQUdSMjJDLFFBQVMsRUFJVEMsUUFBUyxHQUlUNDJCLFdBQVksTUFJWkMsYUFBYyxHQUlkQyxXQUFZLEVBSVpDLEtBQUssRUFJTEMsYUFBYSxFQUliQyxjQUFjLEVBTWRoTixhQUFhLEdBR2R2aUMsV0FBWSxTQUFVditCLEVBQUtDLEdBRTFCbGIsS0FBS2k4RSxLQUFPaGhFLEdBRVpDLEVBQVVvOUIsRUFBV3Q0QyxLQUFNa2IsSUFHZjZ0RSxjQUFnQnJpQyxJQUFVeHJDLEVBQVE0MkMsUUFBVSxJQUV2RDUyQyxFQUFRaW9FLFNBQVd2akUsS0FBS2k4QixNQUFNM2dDLEVBQVFpb0UsU0FBVyxHQUU1Q2pvRSxFQUFRNHRFLGFBSVo1dEUsRUFBUTB0RSxhQUNSMXRFLEVBQVEyMkMsWUFKUjMyQyxFQUFRMHRFLGFBQ1IxdEUsRUFBUTQyQyxXQU1UNTJDLEVBQVEyMkMsUUFBVWp5QyxLQUFLQyxJQUFJLEVBQUczRSxFQUFRMjJDLFVBR0wsaUJBQXZCMzJDLEVBQVF3dEUsYUFDbEJ4dEUsRUFBUXd0RSxXQUFheHRFLEVBQVF3dEUsV0FBVzEzQyxNQUFNLEtBSTFDeVQsSUFDSnprRCxLQUFLMmUsR0FBRyxhQUFjM2UsS0FBS2dwRixnQkFRN0IzTSxPQUFRLFNBQVVwaEUsRUFBS2d1RSxHQVV0QixPQVRJanBGLEtBQUtpOEUsT0FBU2hoRSxRQUFvQmpTLElBQWJpZ0YsSUFDeEJBLEdBQVcsR0FHWmpwRixLQUFLaThFLEtBQU9oaEUsRUFFUGd1RSxHQUNKanBGLEtBQUsrMUUsU0FFQy8xRSxNQU9SbWtGLFdBQVksU0FBVTFxQixFQUFRejRELEdBQzdCLElBQUl3akYsRUFBT3ZoRSxTQUFTMkMsY0FBYyxPQXVCbEMsT0FyQkFqSCxHQUFHNmxFLEVBQU0sT0FBUXpsRixFQUFLaUIsS0FBS2twRixZQUFhbHBGLEtBQU1nQixFQUFNd2pGLElBQ3BEN2xFLEdBQUc2bEUsRUFBTSxRQUFTemxGLEVBQUtpQixLQUFLbXBGLGFBQWNucEYsS0FBTWdCLEVBQU13akYsS0FFbER4a0YsS0FBS2tiLFFBQVE2Z0UsYUFBNEMsS0FBN0IvN0UsS0FBS2tiLFFBQVE2Z0UsZUFDNUN5SSxFQUFLekksYUFBMkMsSUFBN0IvN0UsS0FBS2tiLFFBQVE2Z0UsWUFBdUIsR0FBSy83RSxLQUFLa2IsUUFBUTZnRSxhQU8xRXlJLEVBQUs3bkMsSUFBTSxHQU1YNm5DLEVBQUtyK0QsYUFBYSxPQUFRLGdCQUUxQnErRCxFQUFLdHRDLElBQU1sM0MsS0FBS29wRixXQUFXM3ZCLEdBRXBCK3FCLEdBU1I0RSxXQUFZLFNBQVUzdkIsR0FDckIsSUFBSTF1RCxFQUFPLENBQ1YxTSxFQUFHcW9ELEdBQVMsTUFBUSxHQUNwQnBuRCxFQUFHVSxLQUFLcXBGLGNBQWM1dkIsR0FDdEI5eEQsRUFBRzh4RCxFQUFPOXhELEVBQ1ZyRyxFQUFHbTRELEVBQU9uNEQsRUFDVm0vRCxFQUFHemdFLEtBQUtzcEYsa0JBRVQsR0FBSXRwRixLQUFLa2hFLE9BQVNsaEUsS0FBS2toRSxLQUFLaG1ELFFBQVEwMkMsSUFBSTFQLFNBQVUsQ0FDakQsSUFBSXFuQyxFQUFZdnBGLEtBQUswbUYsaUJBQWlCN21FLElBQUl2ZSxFQUFJbTRELEVBQU9uNEQsRUFDakR0QixLQUFLa2IsUUFBUTJ0RSxNQUNoQjk5RSxFQUFRLEVBQUl3K0UsR0FFYngrRSxFQUFLLE1BQVF3K0UsRUFHZCxPQUFPcHZELEVBQVNuNkIsS0FBS2k4RSxLQUFNenBFLEVBQU96SCxFQUFNL0ssS0FBS2tiLFdBRzlDZ3VFLFlBQWEsU0FBVWxvRixFQUFNd2pGLEdBRXhCcGdDLEVBQ0hsekMsV0FBV25TLEVBQUtpQyxFQUFNaEIsS0FBTSxLQUFNd2tGLEdBQU8sR0FFekN4akYsRUFBSyxLQUFNd2pGLElBSWIyRSxhQUFjLFNBQVVub0YsRUFBTXdqRixFQUFNM2pGLEdBQ25DLElBQUlrOEUsRUFBVy84RSxLQUFLa2IsUUFBUXl0RSxhQUN4QjVMLEdBQVl5SCxFQUFLZ0YsYUFBYSxTQUFXek0sSUFDNUN5SCxFQUFLdHRDLElBQU02bEMsR0FFWi83RSxFQUFLSCxFQUFHMmpGLElBR1R3RSxjQUFlLFNBQVVub0YsR0FDeEJBLEVBQUUyakYsS0FBSzdILE9BQVMsTUFHakIyTSxlQUFnQixXQUNmLElBQUkxeUMsRUFBTzUyQyxLQUFLNmpGLFVBQ2hCL3hCLEVBQVU5eEQsS0FBS2tiLFFBQVE0MkMsUUFRdkIsT0FQYzl4RCxLQUFLa2IsUUFBUTR0RSxjQUkxQmx5QyxFQUFPa2IsRUFBVWxiLEdBR1hBLEVBTk01MkMsS0FBS2tiLFFBQVEwdEUsWUFTM0JTLGNBQWUsU0FBVUksR0FDeEIsSUFBSW43RSxFQUFRc1IsS0FBS3ErQixJQUFJd3JDLEVBQVU5aEYsRUFBSThoRixFQUFVbm9GLEdBQUt0QixLQUFLa2IsUUFBUXd0RSxXQUFXeG1GLE9BQzFFLE9BQU9sQyxLQUFLa2IsUUFBUXd0RSxXQUFXcDZFLElBSWhDKzNFLGNBQWUsV0FDZCxJQUFJOW9GLEVBQUdpbkYsRUFDUCxJQUFLam5GLEtBQUt5QyxLQUFLMmpGLE9BQ1YzakYsS0FBSzJqRixPQUFPcG1GLEdBQUdrOEQsT0FBT2dILElBQU16Z0UsS0FBSzZqRixhQUNwQ1csRUFBT3hrRixLQUFLMmpGLE9BQU9wbUYsR0FBRzJvQixJQUVqQnkyRCxPQUFTN2tDLEVBQ2Qwc0MsRUFBSzVILFFBQVU5a0MsRUFFVjBzQyxFQUFLaC9FLFdBQ1RnL0UsRUFBS3R0QyxJQUFNMEIsRUFDWHhzQyxHQUFPbzRFLFVBQ0F4a0YsS0FBSzJqRixPQUFPcG1GLE1BTXZCa29GLFlBQWEsU0FBVTNtRixHQUN0QixJQUFJMGxGLEVBQU94a0YsS0FBSzJqRixPQUFPN2tGLEdBQ3ZCLEdBQUswbEYsRUFTTCxPQUpLMS9CLElBQ0owL0IsRUFBS3QrRCxHQUFHQyxhQUFhLE1BQU95eUIsR0FHdEJzcUMsR0FBVS9qRixVQUFVc21GLFlBQVkvbkYsS0FBS3NDLEtBQU1sQixJQUduRHdwRixXQUFZLFNBQVU3dUIsRUFBUXIxRCxFQUFLb2dGLEdBQ2xDLEdBQUt4a0YsS0FBS2toRSxRQUFTc2pCLEdBQVFBLEVBQUtnRixhQUFhLFNBQVc1d0MsR0FJeEQsT0FBT3NxQyxHQUFVL2pGLFVBQVVtcEYsV0FBVzVxRixLQUFLc0MsS0FBTXk1RCxFQUFRcjFELEVBQUtvZ0YsTUFRaEUsU0FBUzF0QyxHQUFVNzdCLEVBQUtDLEdBQ3ZCLE9BQU8sSUFBSXV0RSxHQUFVeHRFLEVBQUtDLEdBcUIzQixJQUFJd3VFLEdBQWVqQixHQUFVajJFLE9BQU8sQ0FPbkNtM0UsaUJBQWtCLENBQ2pCQyxRQUFTLE1BQ1Q5bUQsUUFBUyxTQUlUaXZCLE9BQVEsR0FJUjl0QyxPQUFRLEdBSVI0bEUsT0FBUSxhQUlSQyxhQUFhLEVBSWJDLFFBQVMsU0FHVjd1RSxRQUFTLENBSVIwMkMsSUFBSyxLQUlMblosV0FBVyxHQUdaZSxXQUFZLFNBQVV2K0IsRUFBS0MsR0FFMUJsYixLQUFLaThFLEtBQU9oaEUsRUFFWixJQUFJK3VFLEVBQVl4M0UsRUFBTyxHQUFJeFMsS0FBSzJwRixrQkFHaEMsSUFBSyxJQUFJcHNGLEtBQUsyZCxFQUNQM2QsS0FBS3lDLEtBQUtrYixVQUNmOHVFLEVBQVV6c0YsR0FBSzJkLEVBQVEzZCxJQU16QixJQUFJMHNGLEdBRkovdUUsRUFBVW85QixFQUFXdDRDLEtBQU1rYixJQUVGNnRFLGNBQWdCcmlDLEdBQVMsRUFBSSxFQUNsRHk4QixFQUFXbmpGLEtBQUtva0YsY0FDcEI0RixFQUFVaDlCLE1BQVFtMkIsRUFBU3g3RSxFQUFJc2lGLEVBQy9CRCxFQUFVLzhCLE9BQVNrMkIsRUFBUzdoRixFQUFJMm9GLEVBRWhDanFGLEtBQUtncUYsVUFBWUEsR0FHbEIzb0IsTUFBTyxTQUFVbDJELEdBRWhCbkwsS0FBS2txRixLQUFPbHFGLEtBQUtrYixRQUFRMDJDLEtBQU96bUQsRUFBSStQLFFBQVEwMkMsSUFDNUM1eEQsS0FBS21xRixZQUFjQyxXQUFXcHFGLEtBQUtncUYsVUFBVUQsU0FFN0MsSUFBSU0sRUFBZ0JycUYsS0FBS21xRixhQUFlLElBQU0sTUFBUSxNQUN0RG5xRixLQUFLZ3FGLFVBQVVLLEdBQWlCcnFGLEtBQUtrcUYsS0FBS3ptQyxLQUUxQ2dsQyxHQUFVdHBGLFVBQVVraUUsTUFBTTNqRSxLQUFLc0MsS0FBTW1MLElBR3RDaStFLFdBQVksU0FBVTN2QixHQUVyQixJQUFJZ3VCLEVBQWF6bkYsS0FBSzZuRixrQkFBa0JwdUIsR0FDcEM3SCxFQUFNNXhELEtBQUtrcUYsS0FDWHpyQyxFQUFTdkMsRUFBUzBWLEVBQUk3akQsUUFBUTA1RSxFQUFXLElBQUs3MUIsRUFBSTdqRCxRQUFRMDVFLEVBQVcsS0FDckU5M0QsRUFBTTh1QixFQUFPOXVCLElBQ2I5UCxFQUFNNCtCLEVBQU81K0IsSUFDYnlxRSxHQUFRdHFGLEtBQUttcUYsYUFBZSxLQUFPbnFGLEtBQUtrcUYsT0FBU3ZjLEdBQ2pELENBQUNoK0MsRUFBSXJ1QixFQUFHcXVCLEVBQUlob0IsRUFBR2tZLEVBQUl2ZSxFQUFHdWUsRUFBSWxZLEdBQzFCLENBQUNnb0IsRUFBSWhvQixFQUFHZ29CLEVBQUlydUIsRUFBR3VlLEVBQUlsWSxFQUFHa1ksRUFBSXZlLElBQUkrSixLQUFLLEtBQ25DNFAsRUFBTXd0RSxHQUFVdHBGLFVBQVVpcUYsV0FBVzFyRixLQUFLc0MsS0FBTXk1RCxHQUNwRCxPQUFPeCtDLEVBQ05zOUIsRUFBZXY0QyxLQUFLZ3FGLFVBQVcvdUUsRUFBS2piLEtBQUtrYixRQUFRdTlCLFlBQ2hEejRDLEtBQUtrYixRQUFRdTlCLFVBQVksU0FBVyxVQUFZNnhDLEdBS25EQyxVQUFXLFNBQVVsM0UsRUFBUTQxRSxHQVE1QixPQU5BejJFLEVBQU94UyxLQUFLZ3FGLFVBQVczMkUsR0FFbEI0MUUsR0FDSmpwRixLQUFLKzFFLFNBR0MvMUUsUUFXVHlvRixHQUFVK0IsSUFBTWQsR0FDaEI1eUMsR0FBVTJ6QyxJQUxWLFNBQXNCeHZFLEVBQUtDLEdBQzFCLE9BQU8sSUFBSXd1RSxHQUFhenVFLEVBQUtDLElBMEI5QixJQUFJd3ZFLEdBQVc3YyxHQUFNcjdELE9BQU8sQ0FJM0IwSSxRQUFTLENBSVIrNUMsUUFBUyxHQUlUNlYsVUFBWSxHQUdidHhCLFdBQVksU0FBVXQrQixHQUNyQm85QixFQUFXdDRDLEtBQU1rYixHQUNqQm84QixFQUFNdDNDLE1BQ05BLEtBQUsyeUQsUUFBVTN5RCxLQUFLMnlELFNBQVcsSUFHaEMwTyxNQUFPLFdBQ0RyaEUsS0FBS2c2RCxhQUNUaDZELEtBQUs4eUQsaUJBRUQ5eUQsS0FBS3N6RCxlQUNSeEksR0FBUzlxRCxLQUFLZzZELFdBQVksMEJBSTVCaDZELEtBQUsrN0QsVUFBVTEyQyxZQUFZcmxCLEtBQUtnNkQsWUFDaENoNkQsS0FBS21qRSxVQUNMbmpFLEtBQUsyZSxHQUFHLFNBQVUzZSxLQUFLMnFGLGFBQWMzcUYsT0FHdEN3aEUsU0FBVSxXQUNUeGhFLEtBQUtzbkMsSUFBSSxTQUFVdG5DLEtBQUsycUYsYUFBYzNxRixNQUN0Q0EsS0FBSzRxRixxQkFHTnhjLFVBQVcsV0FDVixJQUFJN2lDLEVBQVMsQ0FDWmdvQyxVQUFXdnpFLEtBQUs0MUUsT0FDaEJoL0IsS0FBTTUyQyxLQUFLNnFGLFFBQ1huTCxRQUFTMS9FLEtBQUttakUsUUFDZDJuQixRQUFTOXFGLEtBQUsrcUYsWUFLZixPQUhJL3FGLEtBQUtzekQsZ0JBQ1IvbkIsRUFBT2d4QyxTQUFXdjhFLEtBQUtnckYsYUFFakJ6L0MsR0FHUnkvQyxZQUFhLFNBQVVDLEdBQ3RCanJGLEtBQUtrckYsaUJBQWlCRCxFQUFHdDBDLE9BQVFzMEMsRUFBR3IwQyxPQUdyQ2kwQyxRQUFTLFdBQ1I3cUYsS0FBS2tyRixpQkFBaUJsckYsS0FBS2toRSxLQUFLaGpCLFlBQWFsK0MsS0FBS2toRSxLQUFLdEwsWUFHeERzMUIsaUJBQWtCLFNBQVV2MEMsRUFBUUMsR0FDbkMsSUFBSTZLLEVBQVF6aEQsS0FBS2toRSxLQUFLMU0sYUFBYTVkLEVBQU01MkMsS0FBS216RCxPQUMxQy9sQixFQUFXOGUsR0FBWWxzRCxLQUFLZzZELFlBQzVCdkYsRUFBV3owRCxLQUFLa2hFLEtBQUszaUIsVUFBVWxCLFdBQVcsR0FBTXI5QyxLQUFLa2IsUUFBUSs1QyxTQUM3RGsyQixFQUFxQm5yRixLQUFLa2hFLEtBQUtuekQsUUFBUS9OLEtBQUtvckYsUUFBU3gwQyxHQUVyRDhkLEVBRGtCMTBELEtBQUtraEUsS0FBS256RCxRQUFRNG9DLEVBQVFDLEdBQ2JxRyxTQUFTa3VDLEdBRXhDRSxFQUFnQjUyQixFQUFTcFgsWUFBWW9FLEdBQU94NkMsSUFBSW1tQyxHQUFVbm1DLElBQUl3dEQsR0FBVXhYLFNBQVN5WCxHQUVqRi9PLEdBQ0hnRyxHQUFhM3JELEtBQUtnNkQsV0FBWXF4QixFQUFlNXBDLEdBRTdDcUssR0FBWTlyRCxLQUFLZzZELFdBQVlxeEIsSUFJL0J6VixPQUFRLFdBSVAsSUFBSyxJQUFJanFFLEtBSFQzTCxLQUFLbWpFLFVBQ0xuakUsS0FBS2tyRixpQkFBaUJsckYsS0FBS29yRixRQUFTcHJGLEtBQUttekQsT0FFMUJuekQsS0FBSzJ5RCxRQUNuQjN5RCxLQUFLMnlELFFBQVFobkQsR0FBSWlxRSxVQUluQm1WLFdBQVksV0FDWCxJQUFLLElBQUlwL0UsS0FBTTNMLEtBQUsyeUQsUUFDbkIzeUQsS0FBSzJ5RCxRQUFRaG5ELEdBQUkwcUUsWUFJbkJzVSxhQUFjLFdBQ2IsSUFBSyxJQUFJaC9FLEtBQU0zTCxLQUFLMnlELFFBQ25CM3lELEtBQUsyeUQsUUFBUWhuRCxHQUFJdzNELFdBSW5CQSxRQUFTLFdBR1IsSUFBSTlqRSxFQUFJVyxLQUFLa2IsUUFBUSs1QyxRQUNqQnYxQixFQUFPMS9CLEtBQUtraEUsS0FBSzNpQixVQUNqQjV1QixFQUFNM3ZCLEtBQUtraEUsS0FBSzdFLDJCQUEyQjM4QixFQUFLMmQsWUFBWWgrQyxJQUFJODRDLFFBRXBFbjRDLEtBQUtpM0UsUUFBVSxJQUFJajdCLEVBQU9yc0IsRUFBS0EsRUFBSTFvQixJQUFJeTRCLEVBQUsyZCxXQUFXLEVBQVEsRUFBSmgrQyxJQUFRODRDLFNBRW5FbjRDLEtBQUtvckYsUUFBVXByRixLQUFLa2hFLEtBQUtoakIsWUFDekJsK0MsS0FBS216RCxNQUFRbnpELEtBQUtraEUsS0FBS3RMLGFBb0NyQjAxQixHQUFTWixHQUFTbDRFLE9BQU8sQ0FDNUI0N0QsVUFBVyxXQUNWLElBQUk3aUMsRUFBU20vQyxHQUFTdnJGLFVBQVVpdkUsVUFBVTF3RSxLQUFLc0MsTUFFL0MsT0FEQXVyQyxFQUFPMDRDLGFBQWVqa0YsS0FBS3VyRixnQkFDcEJoZ0QsR0FHUmdnRCxnQkFBaUIsV0FFaEJ2ckYsS0FBS3dyRixzQkFBdUIsR0FHN0JucUIsTUFBTyxXQUNOcXBCLEdBQVN2ckYsVUFBVWtpRSxNQUFNM2pFLEtBQUtzQyxNQUk5QkEsS0FBS3lyRixTQUdOMzRCLGVBQWdCLFdBQ2YsSUFBSXBsQixFQUFZMXRDLEtBQUtnNkQsV0FBYS8yQyxTQUFTMkMsY0FBYyxVQUV6RGpILEdBQUcrdUIsRUFBVyxZQUFhMXRDLEtBQUswckYsYUFBYzFyRixNQUM5QzJlLEdBQUcrdUIsRUFBVywrQ0FBZ0QxdEMsS0FBSzJyRixTQUFVM3JGLE1BQzdFMmUsR0FBRyt1QixFQUFXLFdBQVkxdEMsS0FBSzRyRixnQkFBaUI1ckYsTUFFaERBLEtBQUs2ckYsS0FBT24rQyxFQUFVeVosV0FBVyxPQUdsQ3lqQyxrQkFBbUIsV0FDbEJ4eEMsRUFBZ0JwNUMsS0FBSzhyRix1QkFDZDlyRixLQUFLNnJGLEtBQ1p6L0UsR0FBT3BNLEtBQUtnNkQsWUFDWjF5QixHQUFJdG5DLEtBQUtnNkQsbUJBQ0ZoNkQsS0FBS2c2RCxZQUdiMndCLGFBQWMsV0FDYixJQUFJM3FGLEtBQUt3ckYscUJBQVQsQ0FJQSxJQUFLLElBQUk3L0UsS0FEVDNMLEtBQUsrckYsY0FBZ0IsS0FDTi9yRixLQUFLMnlELFFBQ1gzeUQsS0FBSzJ5RCxRQUFRaG5ELEdBQ2Z3M0QsVUFFUG5qRSxLQUFLZ3NGLFlBR043b0IsUUFBUyxXQUNSLElBQUluakUsS0FBS2toRSxLQUFLYixpQkFBa0JyZ0UsS0FBS2kzRSxRQUFyQyxDQUVBeVQsR0FBU3ZyRixVQUFVZ2tFLFFBQVF6bEUsS0FBS3NDLE1BRWhDLElBQUlSLEVBQUlRLEtBQUtpM0UsUUFDVHZwQyxFQUFZMXRDLEtBQUtnNkQsV0FDakJ0NkIsRUFBT2xnQyxFQUFFKytDLFVBQ1Q1Z0QsRUFBSStvRCxHQUFTLEVBQUksRUFFckJvRixHQUFZcGUsRUFBV2x1QyxFQUFFbXdCLEtBR3pCK2QsRUFBVXNmLE1BQVFydkQsRUFBSStoQyxFQUFLLzNCLEVBQzNCK2xDLEVBQVV1ZixPQUFTdHZELEVBQUkraEMsRUFBS3ArQixFQUM1Qm9zQyxFQUFVM29CLE1BQU1pb0MsTUFBUXR0QixFQUFLLzNCLEVBQUksS0FDakMrbEMsRUFBVTNvQixNQUFNa29DLE9BQVN2dEIsRUFBS3ArQixFQUFJLEtBRTlCb2xELElBQ0gxbUQsS0FBSzZyRixLQUFLcHFDLE1BQU0sRUFBRyxHQUlwQnpoRCxLQUFLNnJGLEtBQUtyRixXQUFXaG5GLEVBQUVtd0IsSUFBSWhvQixHQUFJbkksRUFBRW13QixJQUFJcnVCLEdBR3JDdEIsS0FBSzI2QyxLQUFLLFlBR1hpN0IsT0FBUSxXQUNQOFUsR0FBU3ZyRixVQUFVeTJFLE9BQU9sNEUsS0FBS3NDLE1BRTNCQSxLQUFLd3JGLHVCQUNSeHJGLEtBQUt3ckYsc0JBQXVCLEVBQzVCeHJGLEtBQUsycUYsaUJBSVBoVixVQUFXLFNBQVV2NkIsR0FDcEJwN0MsS0FBS2lzRixpQkFBaUI3d0MsR0FDdEJwN0MsS0FBSzJ5RCxRQUFRcmIsRUFBTThELElBQVVBLEVBRTdCLElBQUk4d0MsRUFBUTl3QyxFQUFNK3dDLE9BQVMsQ0FDMUIvd0MsTUFBT0EsRUFDUDFpQyxLQUFNMVksS0FBS29zRixVQUNYeHJGLEtBQU0sTUFFSFosS0FBS29zRixZQUFhcHNGLEtBQUtvc0YsVUFBVXhyRixLQUFPc3JGLEdBQzVDbHNGLEtBQUtvc0YsVUFBWUYsRUFDakJsc0YsS0FBS3FzRixXQUFhcnNGLEtBQUtxc0YsWUFBY3JzRixLQUFLb3NGLFdBRzNDdlcsU0FBVSxTQUFVejZCLEdBQ25CcDdDLEtBQUtzc0YsZUFBZWx4QyxJQUdyQjA2QixZQUFhLFNBQVUxNkIsR0FDdEIsSUFBSTh3QyxFQUFROXdDLEVBQU0rd0MsT0FDZHZyRixFQUFPc3JGLEVBQU10ckYsS0FDYjhYLEVBQU93ekUsRUFBTXh6RSxLQUViOVgsRUFDSEEsRUFBSzhYLEtBQU9BLEVBRVoxWSxLQUFLb3NGLFVBQVkxekUsRUFFZEEsRUFDSEEsRUFBSzlYLEtBQU9BLEVBRVpaLEtBQUtxc0YsV0FBYXpyRixTQUdadzZDLEVBQU0rd0MsY0FFTm5zRixLQUFLMnlELFFBQVFyYixFQUFNOEQsSUFFMUJwN0MsS0FBS3NzRixlQUFlbHhDLElBR3JCNDZCLFlBQWEsU0FBVTU2QixHQUd0QnA3QyxLQUFLdXNGLG9CQUFvQm54QyxHQUN6QkEsRUFBTWk3QixXQUNOajdCLEVBQU0rbkIsVUFHTm5qRSxLQUFLc3NGLGVBQWVseEMsSUFHckI2NkIsYUFBYyxTQUFVNzZCLEdBQ3ZCcDdDLEtBQUtpc0YsaUJBQWlCN3dDLEdBQ3RCcDdDLEtBQUtzc0YsZUFBZWx4QyxJQUdyQjZ3QyxpQkFBa0IsU0FBVTd3QyxHQUMzQixHQUF1QyxpQkFBNUJBLEVBQU1sZ0MsUUFBUWs2RCxVQUF3QixDQUNoRCxJQUVJb1gsRUFDQWp2RixFQUhBOG1CLEVBQVErMkIsRUFBTWxnQyxRQUFRazZELFVBQVVwa0MsTUFBTSxTQUN0Q29rQyxFQUFZLEdBR2hCLElBQUs3M0UsRUFBSSxFQUFHQSxFQUFJOG1CLEVBQU1uaUIsT0FBUTNFLElBQUssQ0FHbEMsR0FGQWl2RixFQUFZdm5ELE9BQU81Z0IsRUFBTTltQixJQUVyQnNrQixNQUFNMnFFLEdBQWMsT0FDeEJwWCxFQUFVanpFLEtBQUtxcUYsR0FFaEJweEMsRUFBTWxnQyxRQUFRdXhFLFdBQWFyWCxPQUUzQmg2QixFQUFNbGdDLFFBQVF1eEUsV0FBYXJ4QyxFQUFNbGdDLFFBQVFrNkQsV0FJM0NrWCxlQUFnQixTQUFVbHhDLEdBQ3BCcDdDLEtBQUtraEUsT0FFVmxoRSxLQUFLdXNGLG9CQUFvQm54QyxHQUN6QnA3QyxLQUFLOHJGLGVBQWlCOXJGLEtBQUs4ckYsZ0JBQWtCNXlDLEVBQWlCbDVDLEtBQUtnc0YsUUFBU2hzRixRQUc3RXVzRixvQkFBcUIsU0FBVW54QyxHQUM5QixHQUFJQSxFQUFNMDdCLFVBQVcsQ0FDcEIsSUFBSTdoQixHQUFXN1osRUFBTWxnQyxRQUFRKzVELFFBQVUsR0FBSyxFQUM1Q2oxRSxLQUFLK3JGLGNBQWdCL3JGLEtBQUsrckYsZUFBaUIsSUFBSS92QyxFQUMvQ2g4QyxLQUFLK3JGLGNBQWN2NUUsT0FBTzRvQyxFQUFNMDdCLFVBQVVubkQsSUFBSXN0QixTQUFTLENBQUNnWSxFQUFTQSxLQUNqRWoxRCxLQUFLK3JGLGNBQWN2NUUsT0FBTzRvQyxFQUFNMDdCLFVBQVVqM0QsSUFBSTVZLElBQUksQ0FBQ2d1RCxFQUFTQSxPQUk5RCsyQixRQUFTLFdBQ1Joc0YsS0FBSzhyRixlQUFpQixLQUVsQjlyRixLQUFLK3JGLGdCQUNSL3JGLEtBQUsrckYsY0FBY3A4RCxJQUFJK3RCLFNBQ3ZCMTlDLEtBQUsrckYsY0FBY2xzRSxJQUFJODlCLFNBR3hCMzlDLEtBQUswc0YsU0FDTDFzRixLQUFLeXJGLFFBRUx6ckYsS0FBSytyRixjQUFnQixNQUd0QlcsT0FBUSxXQUNQLElBQUlqdUMsRUFBU3orQyxLQUFLK3JGLGNBQ2xCLEdBQUl0dEMsRUFBUSxDQUNYLElBQUkvZSxFQUFPK2UsRUFBT0YsVUFDbEJ2K0MsS0FBSzZyRixLQUFLYyxVQUFVbHVDLEVBQU85dUIsSUFBSWhvQixFQUFHODJDLEVBQU85dUIsSUFBSXJ1QixFQUFHbytCLEVBQUsvM0IsRUFBRyszQixFQUFLcCtCLFFBRTdEdEIsS0FBSzZyRixLQUFLZSxPQUNWNXNGLEtBQUs2ckYsS0FBS2xnQyxhQUFhLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxHQUN0QzNyRCxLQUFLNnJGLEtBQUtjLFVBQVUsRUFBRyxFQUFHM3NGLEtBQUtnNkQsV0FBV2hOLE1BQU9odEQsS0FBS2c2RCxXQUFXL00sUUFDakVqdEQsS0FBSzZyRixLQUFLZ0IsV0FJWnBCLE1BQU8sV0FDTixJQUFJcndDLEVBQU9xRCxFQUFTeitDLEtBQUsrckYsY0FFekIsR0FEQS9yRixLQUFLNnJGLEtBQUtlLE9BQ05udUMsRUFBUSxDQUNYLElBQUkvZSxFQUFPK2UsRUFBT0YsVUFDbEJ2K0MsS0FBSzZyRixLQUFLaUIsWUFDVjlzRixLQUFLNnJGLEtBQUsvK0IsS0FBS3JPLEVBQU85dUIsSUFBSWhvQixFQUFHODJDLEVBQU85dUIsSUFBSXJ1QixFQUFHbytCLEVBQUsvM0IsRUFBRyszQixFQUFLcCtCLEdBQ3hEdEIsS0FBSzZyRixLQUFLa0IsT0FHWC9zRixLQUFLZ3RGLFVBQVcsRUFFaEIsSUFBSyxJQUFJZCxFQUFRbHNGLEtBQUtxc0YsV0FBWUgsRUFBT0EsRUFBUUEsRUFBTXRyRixLQUN0RHc2QyxFQUFROHdDLEVBQU05d0MsUUFDVHFELEdBQVdyRCxFQUFNMDdCLFdBQWExN0IsRUFBTTA3QixVQUFVdDRCLFdBQVdDLEtBQzdEckQsRUFBTTQ2QixjQUlSaDJFLEtBQUtndEYsVUFBVyxFQUVoQmh0RixLQUFLNnJGLEtBQUtnQixXQUdYdlQsWUFBYSxTQUFVbCtCLEVBQU8xMkMsR0FDN0IsR0FBSzFFLEtBQUtndEYsU0FBVixDQUVBLElBQUl6dkYsRUFBRzZtQixFQUFHMi9CLEVBQU0xa0QsRUFDWmdsQixFQUFRKzJCLEVBQU1tOUIsT0FDZHB1RSxFQUFNa2EsRUFBTW5pQixPQUNadTRDLEVBQU16NkMsS0FBSzZyRixLQUVmLEdBQUsxaEYsRUFBTCxDQUlBLElBRkFzd0MsRUFBSXF5QyxZQUVDdnZGLEVBQUksRUFBR0EsRUFBSTRNLEVBQUs1TSxJQUFLLENBQ3pCLElBQUs2bUIsRUFBSSxFQUFHMi9CLEVBQU8xL0IsRUFBTTltQixHQUFHMkUsT0FBUWtpQixFQUFJMi9CLEVBQU0zL0IsSUFDN0Mva0IsRUFBSWdsQixFQUFNOW1CLEdBQUc2bUIsR0FDYnEyQixFQUFJcjJCLEVBQUksU0FBVyxVQUFVL2tCLEVBQUVzSSxFQUFHdEksRUFBRWlDLEdBRWpDb0QsR0FDSCsxQyxFQUFJd3lDLFlBSU5qdEYsS0FBS2t0RixZQUFZenlDLEVBQUtXLE1BS3ZCMjdCLGNBQWUsU0FBVTM3QixHQUV4QixHQUFLcDdDLEtBQUtndEYsV0FBWTV4QyxFQUFNNDdCLFNBQTVCLENBRUEsSUFBSTMzRSxFQUFJKzdDLEVBQU11N0IsT0FDVmw4QixFQUFNejZDLEtBQUs2ckYsS0FDWHh0RixFQUFJdWhCLEtBQUtDLElBQUlELEtBQUt1NEIsTUFBTWlELEVBQU11akIsU0FBVSxHQUN4Q3IvRCxHQUFLc2dCLEtBQUtDLElBQUlELEtBQUt1NEIsTUFBTWlELEVBQU15N0IsVUFBVyxJQUFNeDRFLEdBQUtBLEVBRS9DLElBQU5pQixJQUNIbTdDLEVBQUlteUMsT0FDSm55QyxFQUFJZ0gsTUFBTSxFQUFHbmlELElBR2RtN0MsRUFBSXF5QyxZQUNKcnlDLEVBQUkweUMsSUFBSTl0RixFQUFFc0ksRUFBR3RJLEVBQUVpQyxFQUFJaEMsRUFBR2pCLEVBQUcsRUFBYSxFQUFWdWhCLEtBQUt1aEMsSUFBUSxHQUUvQixJQUFON2hELEdBQ0htN0MsRUFBSW95QyxVQUdMN3NGLEtBQUtrdEYsWUFBWXp5QyxFQUFLVyxLQUd2Qjh4QyxZQUFhLFNBQVV6eUMsRUFBS1csR0FDM0IsSUFBSWxnQyxFQUFVa2dDLEVBQU1sZ0MsUUFFaEJBLEVBQVFvNkQsT0FDWDc2QixFQUFJMnlDLFlBQWNseUUsRUFBUXM2RCxZQUMxQi82QixFQUFJNHlDLFVBQVlueUUsRUFBUXE2RCxXQUFhcjZELEVBQVE4NUQsTUFDN0N2NkIsRUFBSTY2QixLQUFLcDZELEVBQVF1NkQsVUFBWSxZQUcxQnY2RCxFQUFRNjVELFFBQTZCLElBQW5CNzVELEVBQVErNUQsU0FDekJ4NkIsRUFBSTZ5QyxhQUNQN3lDLEVBQUk2eUMsWUFBWWx5QyxFQUFNbGdDLFNBQVdrZ0MsRUFBTWxnQyxRQUFRdXhFLFlBQWMsSUFFOURoeUMsRUFBSTJ5QyxZQUFjbHlFLEVBQVFtd0MsUUFDMUI1USxFQUFJOHlDLFVBQVlyeUUsRUFBUSs1RCxPQUN4Qng2QixFQUFJK3lDLFlBQWN0eUUsRUFBUTg1RCxNQUMxQnY2QixFQUFJeTZCLFFBQVVoNkQsRUFBUWc2RCxRQUN0Qno2QixFQUFJMDZCLFNBQVdqNkQsRUFBUWk2RCxTQUN2QjE2QixFQUFJczZCLFdBT040VyxTQUFVLFNBQVU5cUYsR0FHbkIsSUFGQSxJQUFpRHU2QyxFQUFPcXlDLEVBQXBEMXdDLEVBQVEvOEMsS0FBS2toRSxLQUFLekUsdUJBQXVCNTdELEdBRXBDcXJGLEVBQVFsc0YsS0FBS3FzRixXQUFZSCxFQUFPQSxFQUFRQSxFQUFNdHJGLE1BQ3REdzZDLEVBQVE4d0MsRUFBTTl3QyxPQUNKbGdDLFFBQVE0M0QsYUFBZTEzQixFQUFNODdCLGVBQWVuNkIsS0FDcEMsVUFBWGw4QyxFQUFFaWxCLE1BQStCLGFBQVhqbEIsRUFBRWlsQixPQUF5QjlsQixLQUFLa2hFLEtBQUs3QyxnQkFBZ0JqakIsTUFDaEZxeUMsRUFBZXJ5QyxHQUlkcXlDLElBQ0hsK0IsR0FBUzF1RCxHQUNUYixLQUFLMHRGLFdBQVcsQ0FBQ0QsR0FBZTVzRixLQUlsQzZxRixhQUFjLFNBQVU3cUYsR0FDdkIsR0FBS2IsS0FBS2toRSxPQUFRbGhFLEtBQUtraEUsS0FBSy9DLFNBQVN3dkIsV0FBWTN0RixLQUFLa2hFLEtBQUtiLGVBQTNELENBRUEsSUFBSXRqQixFQUFRLzhDLEtBQUtraEUsS0FBS3pFLHVCQUF1QjU3RCxHQUM3Q2IsS0FBSzR0RixrQkFBa0Ivc0YsRUFBR2s4QyxLQUkzQjZ1QyxnQkFBaUIsU0FBVS9xRixHQUMxQixJQUFJdTZDLEVBQVFwN0MsS0FBSzZ0RixjQUNienlDLElBRUg2UCxHQUFZanJELEtBQUtnNkQsV0FBWSx1QkFDN0JoNkQsS0FBSzB0RixXQUFXLENBQUN0eUMsR0FBUXY2QyxFQUFHLFlBQzVCYixLQUFLNnRGLGNBQWdCLEtBQ3JCN3RGLEtBQUs4dEYsc0JBQXVCLElBSTlCRixrQkFBbUIsU0FBVS9zRixFQUFHazhDLEdBQy9CLElBQUkvOEMsS0FBSzh0RixxQkFBVCxDQU1BLElBRkEsSUFBSTF5QyxFQUFPMnlDLEVBRUY3QixFQUFRbHNGLEtBQUtxc0YsV0FBWUgsRUFBT0EsRUFBUUEsRUFBTXRyRixNQUN0RHc2QyxFQUFROHdDLEVBQU05d0MsT0FDSmxnQyxRQUFRNDNELGFBQWUxM0IsRUFBTTg3QixlQUFlbjZCLEtBQ3JEZ3hDLEVBQXdCM3lDLEdBSXRCMnlDLElBQTBCL3RGLEtBQUs2dEYsZ0JBQ2xDN3RGLEtBQUs0ckYsZ0JBQWdCL3FGLEdBRWpCa3RGLElBQ0hqakMsR0FBUzlxRCxLQUFLZzZELFdBQVksdUJBQzFCaDZELEtBQUswdEYsV0FBVyxDQUFDSyxHQUF3Qmx0RixFQUFHLGFBQzVDYixLQUFLNnRGLGNBQWdCRSxJQUluQi90RixLQUFLNnRGLGVBQ1I3dEYsS0FBSzB0RixXQUFXLENBQUMxdEYsS0FBSzZ0RixlQUFnQmh0RixHQUd2Q2IsS0FBSzh0RixzQkFBdUIsRUFDNUI1OEUsV0FBV25TLEdBQUssV0FDZmlCLEtBQUs4dEYsc0JBQXVCLElBQzFCOXRGLE1BQU8sTUFHWDB0RixXQUFZLFNBQVUzN0IsRUFBUWx4RCxFQUFHaWxCLEdBQ2hDOWxCLEtBQUtraEUsS0FBSzVDLGNBQWN6OUQsRUFBR2lsQixHQUFRamxCLEVBQUVpbEIsS0FBTWlzQyxJQUc1Q21pQixjQUFlLFNBQVU5NEIsR0FDeEIsSUFBSTh3QyxFQUFROXdDLEVBQU0rd0MsT0FFbEIsR0FBS0QsRUFBTCxDQUVBLElBQUl0ckYsRUFBT3NyRixFQUFNdHJGLEtBQ2I4WCxFQUFPd3pFLEVBQU14ekUsS0FFYjlYLElBQ0hBLEVBQUs4WCxLQUFPQSxFQUtUQSxFQUNIQSxFQUFLOVgsS0FBT0EsRUFDRkEsSUFHVlosS0FBS3FzRixXQUFhenJGLEdBR25Cc3JGLEVBQU14ekUsS0FBTzFZLEtBQUtvc0YsVUFDbEJwc0YsS0FBS29zRixVQUFVeHJGLEtBQU9zckYsRUFFdEJBLEVBQU10ckYsS0FBTyxLQUNiWixLQUFLb3NGLFVBQVlGLEVBRWpCbHNGLEtBQUtzc0YsZUFBZWx4QyxNQUdyQis2QixhQUFjLFNBQVUvNkIsR0FDdkIsSUFBSTh3QyxFQUFROXdDLEVBQU0rd0MsT0FFbEIsR0FBS0QsRUFBTCxDQUVBLElBQUl0ckYsRUFBT3NyRixFQUFNdHJGLEtBQ2I4WCxFQUFPd3pFLEVBQU14ekUsS0FFYkEsSUFDSEEsRUFBSzlYLEtBQU9BLEVBS1RBLEVBQ0hBLEVBQUs4WCxLQUFPQSxFQUNGQSxJQUdWMVksS0FBS29zRixVQUFZMXpFLEdBR2xCd3pFLEVBQU14ekUsS0FBTyxLQUVid3pFLEVBQU10ckYsS0FBT1osS0FBS3FzRixXQUNsQnJzRixLQUFLcXNGLFdBQVczekUsS0FBT3d6RSxFQUN2QmxzRixLQUFLcXNGLFdBQWFILEVBRWxCbHNGLEtBQUtzc0YsZUFBZWx4QyxRQU10QixTQUFTNHlDLEdBQVM5eUUsR0FDakIsT0FBT2dzQyxHQUFTLElBQUlva0MsR0FBT3B3RSxHQUFXLEtBUXZDLElBQUkreUUsR0FBWSxXQUNmLElBRUMsT0FEQWhyRSxTQUFTaXJFLFdBQVdqbkYsSUFBSSxPQUFRLGlDQUN6QixTQUFVbkosR0FDaEIsT0FBT21sQixTQUFTMkMsY0FBYyxTQUFXOW5CLEVBQU8sbUJBRWhELE1BQU8rQyxHQUNSLE9BQU8sU0FBVS9DLEdBQ2hCLE9BQU9tbEIsU0FBUzJDLGNBQWMsSUFBTTluQixFQUFPLDBEQVI5QixHQXVCWnF3RixHQUFXLENBRWRyN0IsZUFBZ0IsV0FDZjl5RCxLQUFLZzZELFdBQWE1UCxHQUFTLE1BQU8sMEJBR25DK1ksUUFBUyxXQUNKbmpFLEtBQUtraEUsS0FBS2IsaUJBQ2RxcUIsR0FBU3ZyRixVQUFVZ2tFLFFBQVF6bEUsS0FBS3NDLE1BQ2hDQSxLQUFLMjZDLEtBQUssWUFHWGc3QixVQUFXLFNBQVV2NkIsR0FDcEIsSUFBSTFOLEVBQVkwTixFQUFNNGUsV0FBYWkwQixHQUFVLFNBRTdDbmpDLEdBQVNwZCxFQUFXLHNCQUF3QjF0QyxLQUFLa2IsUUFBUW92QyxXQUFhLEtBRXRFNWMsRUFBVTBnRCxVQUFZLE1BRXRCaHpDLEVBQU1nN0IsTUFBUTZYLEdBQVUsUUFDeEJ2Z0QsRUFBVXJvQixZQUFZKzFCLEVBQU1nN0IsT0FFNUJwMkUsS0FBS2kyRSxhQUFhNzZCLEdBQ2xCcDdDLEtBQUsyeUQsUUFBUXJiLEVBQU04RCxJQUFVQSxHQUc5Qnk2QixTQUFVLFNBQVV6NkIsR0FDbkIsSUFBSTFOLEVBQVkwTixFQUFNNGUsV0FDdEJoNkQsS0FBS2c2RCxXQUFXMzBDLFlBQVlxb0IsR0FFeEIwTixFQUFNbGdDLFFBQVE0M0QsYUFDakIxM0IsRUFBTTR5QixxQkFBcUJ0Z0MsSUFJN0Jvb0MsWUFBYSxTQUFVMTZCLEdBQ3RCLElBQUkxTixFQUFZME4sRUFBTTRlLFdBQ3RCNXRELEdBQU9zaEMsR0FDUDBOLEVBQU04eUIsd0JBQXdCeGdDLFVBQ3ZCMXRDLEtBQUsyeUQsUUFBUXJiLEVBQU04RCxLQUczQjY2QixhQUFjLFNBQVU3NkIsR0FDdkIsSUFBSTI1QixFQUFTMzVCLEVBQU1pekMsUUFDZi9ZLEVBQU9sNkIsRUFBTWt6QyxNQUNicHpFLEVBQVVrZ0MsRUFBTWxnQyxRQUNoQnd5QixFQUFZME4sRUFBTTRlLFdBRXRCdHNCLEVBQVU2Z0QsVUFBWXJ6RSxFQUFRNjVELE9BQzlCcm5DLEVBQVU4Z0QsU0FBV3R6RSxFQUFRbzZELEtBRXpCcDZELEVBQVE2NUQsUUFDTkEsSUFDSkEsRUFBUzM1QixFQUFNaXpDLFFBQVVKLEdBQVUsV0FFcEN2Z0QsRUFBVXJvQixZQUFZMHZELEdBQ3RCQSxFQUFPRSxPQUFTLzVELEVBQVErNUQsT0FBUyxLQUNqQ0YsRUFBT0MsTUFBUTk1RCxFQUFRODVELE1BQ3ZCRCxFQUFPMXBCLFFBQVVud0MsRUFBUW13QyxRQUVyQm53QyxFQUFRazZELFVBQ1hMLEVBQU8wWixVQUFZcGxGLEVBQVE2UixFQUFRazZELFdBQy9CbDZELEVBQVFrNkQsVUFBVS9wRSxLQUFLLEtBQ3ZCNlAsRUFBUWs2RCxVQUFVdmlFLFFBQVEsV0FBWSxLQUUxQ2tpRSxFQUFPMFosVUFBWSxHQUVwQjFaLEVBQU8yWixPQUFTeHpFLEVBQVFnNkQsUUFBUXJpRSxRQUFRLE9BQVEsUUFDaERraUUsRUFBTzRaLFVBQVl6ekUsRUFBUWk2RCxVQUVqQkosSUFDVnJuQyxFQUFVaG9CLFlBQVlxdkQsR0FDdEIzNUIsRUFBTWl6QyxRQUFVLE1BR2JuekUsRUFBUW82RCxNQUNOQSxJQUNKQSxFQUFPbDZCLEVBQU1rekMsTUFBUUwsR0FBVSxTQUVoQ3ZnRCxFQUFVcm9CLFlBQVlpd0QsR0FDdEJBLEVBQUtOLE1BQVE5NUQsRUFBUXE2RCxXQUFhcjZELEVBQVE4NUQsTUFDMUNNLEVBQUtqcUIsUUFBVW53QyxFQUFRczZELGFBRWJGLElBQ1Y1bkMsRUFBVWhvQixZQUFZNHZELEdBQ3RCbDZCLEVBQU1rekMsTUFBUSxPQUloQnZYLGNBQWUsU0FBVTM3QixHQUN4QixJQUFJLzdDLEVBQUkrN0MsRUFBTXU3QixPQUFPeCtCLFFBQ2pCOTVDLEVBQUl1aEIsS0FBS3U0QixNQUFNaUQsRUFBTXVqQixTQUNyQmlZLEVBQUtoM0QsS0FBS3U0QixNQUFNaUQsRUFBTXk3QixVQUFZeDRFLEdBRXRDMkIsS0FBSzR1RixTQUFTeHpDLEVBQU9BLEVBQU00N0IsU0FBVyxPQUNyQyxNQUFRMzNFLEVBQUVzSSxFQUFJLElBQU10SSxFQUFFaUMsRUFBSSxJQUFNakQsRUFBSSxJQUFNdTRFLEVBQTFDLGdCQUdGZ1ksU0FBVSxTQUFVeHpDLEVBQU83bkMsR0FDMUI2bkMsRUFBTWc3QixNQUFNcjBFLEVBQUl3UixHQUdqQjJnRSxjQUFlLFNBQVU5NEIsR0FDeEJtUCxHQUFRblAsRUFBTTRlLGFBR2ZtYyxhQUFjLFNBQVUvNkIsR0FDdkJxUCxHQUFPclAsRUFBTTRlLGNBSVg2MEIsR0FBV3huQyxHQUFNNG1DLEdBQVl0cUMsRUFzQzdCbXJDLEdBQU1wRSxHQUFTbDRFLE9BQU8sQ0FFekI0N0QsVUFBVyxXQUNWLElBQUk3aUMsRUFBU20vQyxHQUFTdnJGLFVBQVVpdkUsVUFBVTF3RSxLQUFLc0MsTUFFL0MsT0FEQXVyQyxFQUFPd2pELFVBQVkvdUYsS0FBS2d2RixhQUNqQnpqRCxHQUdSdW5CLGVBQWdCLFdBQ2Y5eUQsS0FBS2c2RCxXQUFhNjBCLEdBQVMsT0FHM0I3dUYsS0FBS2c2RCxXQUFXN3pDLGFBQWEsaUJBQWtCLFFBRS9Dbm1CLEtBQUtpdkYsV0FBYUosR0FBUyxLQUMzQjd1RixLQUFLZzZELFdBQVczMEMsWUFBWXJsQixLQUFLaXZGLGFBR2xDckUsa0JBQW1CLFdBQ2xCeCtFLEdBQU9wTSxLQUFLZzZELFlBQ1oxeUIsR0FBSXRuQyxLQUFLZzZELG1CQUNGaDZELEtBQUtnNkQsa0JBQ0xoNkQsS0FBS2l2RixrQkFDTGp2RixLQUFLa3ZGLFVBR2JGLGFBQWMsV0FJYmh2RixLQUFLbWpFLFdBR05BLFFBQVMsV0FDUixJQUFJbmpFLEtBQUtraEUsS0FBS2IsaUJBQWtCcmdFLEtBQUtpM0UsUUFBckMsQ0FFQXlULEdBQVN2ckYsVUFBVWdrRSxRQUFRemxFLEtBQUtzQyxNQUVoQyxJQUFJUixFQUFJUSxLQUFLaTNFLFFBQ1R2M0MsRUFBT2xnQyxFQUFFKytDLFVBQ1Q3USxFQUFZMXRDLEtBQUtnNkQsV0FHaEJoNkQsS0FBS2t2RixVQUFhbHZGLEtBQUtrdkYsU0FBU254QyxPQUFPcmUsS0FDM0MxL0IsS0FBS2t2RixTQUFXeHZELEVBQ2hCZ08sRUFBVXZuQixhQUFhLFFBQVN1WixFQUFLLzNCLEdBQ3JDK2xDLEVBQVV2bkIsYUFBYSxTQUFVdVosRUFBS3ArQixJQUl2Q3dxRCxHQUFZcGUsRUFBV2x1QyxFQUFFbXdCLEtBQ3pCK2QsRUFBVXZuQixhQUFhLFVBQVcsQ0FBQzNtQixFQUFFbXdCLElBQUlob0IsRUFBR25JLEVBQUVtd0IsSUFBSXJ1QixFQUFHbytCLEVBQUsvM0IsRUFBRyszQixFQUFLcCtCLEdBQUcrSixLQUFLLE1BRTFFckwsS0FBSzI2QyxLQUFLLFlBS1hnN0IsVUFBVyxTQUFVdjZCLEdBQ3BCLElBQUk3bkMsRUFBTzZuQyxFQUFNZzdCLE1BQVF5WSxHQUFTLFFBSzlCenpDLEVBQU1sZ0MsUUFBUW92QyxXQUNqQlEsR0FBU3YzQyxFQUFNNm5DLEVBQU1sZ0MsUUFBUW92QyxXQUcxQmxQLEVBQU1sZ0MsUUFBUTQzRCxhQUNqQmhvQixHQUFTdjNDLEVBQU0sdUJBR2hCdlQsS0FBS2kyRSxhQUFhNzZCLEdBQ2xCcDdDLEtBQUsyeUQsUUFBUXJiLEVBQU04RCxJQUFVQSxHQUc5Qnk2QixTQUFVLFNBQVV6NkIsR0FDZHA3QyxLQUFLaXZGLFlBQWNqdkYsS0FBSzh5RCxpQkFDN0I5eUQsS0FBS2l2RixXQUFXNXBFLFlBQVkrMUIsRUFBTWc3QixPQUNsQ2g3QixFQUFNNHlCLHFCQUFxQjV5QixFQUFNZzdCLFFBR2xDTixZQUFhLFNBQVUxNkIsR0FDdEJodkMsR0FBT2d2QyxFQUFNZzdCLE9BQ2JoN0IsRUFBTTh5Qix3QkFBd0I5eUIsRUFBTWc3QixjQUM3QnAyRSxLQUFLMnlELFFBQVFyYixFQUFNOEQsS0FHM0I0NkIsWUFBYSxTQUFVNTZCLEdBQ3RCQSxFQUFNaTdCLFdBQ05qN0IsRUFBTStuQixXQUdQOFMsYUFBYyxTQUFVNzZCLEdBQ3ZCLElBQUk3bkMsRUFBTzZuQyxFQUFNZzdCLE1BQ2JsN0QsRUFBVWtnQyxFQUFNbGdDLFFBRWYzSCxJQUVEMkgsRUFBUTY1RCxRQUNYeGhFLEVBQUs0UyxhQUFhLFNBQVVqTCxFQUFRODVELE9BQ3BDemhFLEVBQUs0UyxhQUFhLGlCQUFrQmpMLEVBQVFtd0MsU0FDNUM5M0MsRUFBSzRTLGFBQWEsZUFBZ0JqTCxFQUFRKzVELFFBQzFDMWhFLEVBQUs0UyxhQUFhLGlCQUFrQmpMLEVBQVFnNkQsU0FDNUMzaEUsRUFBSzRTLGFBQWEsa0JBQW1CakwsRUFBUWk2RCxVQUV6Q2o2RCxFQUFRazZELFVBQ1g3aEUsRUFBSzRTLGFBQWEsbUJBQW9CakwsRUFBUWs2RCxXQUU5QzdoRSxFQUFLNDdFLGdCQUFnQixvQkFHbEJqMEUsRUFBUW02RCxXQUNYOWhFLEVBQUs0UyxhQUFhLG9CQUFxQmpMLEVBQVFtNkQsWUFFL0M5aEUsRUFBSzQ3RSxnQkFBZ0Isc0JBR3RCNTdFLEVBQUs0UyxhQUFhLFNBQVUsUUFHekJqTCxFQUFRbzZELE1BQ1gvaEUsRUFBSzRTLGFBQWEsT0FBUWpMLEVBQVFxNkQsV0FBYXI2RCxFQUFRODVELE9BQ3ZEemhFLEVBQUs0UyxhQUFhLGVBQWdCakwsRUFBUXM2RCxhQUMxQ2ppRSxFQUFLNFMsYUFBYSxZQUFhakwsRUFBUXU2RCxVQUFZLFlBRW5EbGlFLEVBQUs0UyxhQUFhLE9BQVEsVUFJNUJtekQsWUFBYSxTQUFVbCtCLEVBQU8xMkMsR0FDN0IxRSxLQUFLNHVGLFNBQVN4ekMsRUFBT3lJLEVBQWF6SSxFQUFNbTlCLE9BQVE3ekUsS0FHakRxeUUsY0FBZSxTQUFVMzdCLEdBQ3hCLElBQUkvN0MsRUFBSSs3QyxFQUFNdTdCLE9BQ1Z0NEUsRUFBSXVoQixLQUFLQyxJQUFJRCxLQUFLdTRCLE1BQU1pRCxFQUFNdWpCLFNBQVUsR0FFeEN3dUIsRUFBTSxJQUFNOXVGLEVBQUksS0FEWHVoQixLQUFLQyxJQUFJRCxLQUFLdTRCLE1BQU1pRCxFQUFNeTdCLFVBQVcsSUFBTXg0RSxHQUNyQixVQUczQlIsRUFBSXU5QyxFQUFNNDdCLFNBQVcsT0FDeEIsS0FBTzMzRSxFQUFFc0ksRUFBSXRKLEdBQUssSUFBTWdCLEVBQUVpQyxFQUMxQjZyRixFQUFXLEVBQUo5dUYsRUFBUyxNQUNoQjh1RixFQUFZLEdBQUo5dUYsRUFBUyxNQUVsQjJCLEtBQUs0dUYsU0FBU3h6QyxFQUFPdjlDLElBR3RCK3dGLFNBQVUsU0FBVXh6QyxFQUFPN25DLEdBQzFCNm5DLEVBQU1nN0IsTUFBTWp3RCxhQUFhLElBQUs1UyxJQUkvQjJnRSxjQUFlLFNBQVU5NEIsR0FDeEJtUCxHQUFRblAsRUFBTWc3QixRQUdmRCxhQUFjLFNBQVUvNkIsR0FDdkJxUCxHQUFPclAsRUFBTWc3QixVQVdmLFNBQVNnWixHQUFNbDBFLEdBQ2QsT0FBTzhvQyxJQUFPcUQsR0FBTSxJQUFJeW5DLEdBQUk1ekUsR0FBVyxLQVJwQ21zQyxJQUNIeW5DLEdBQUk1MEMsUUFBUWkwQyxJQVViNS9ELEdBQUkyckIsUUFBUSxDQUtYdzdCLFlBQWEsU0FBVXQ2QixHQUl0QixJQUFJNlcsRUFBVzdXLEVBQU1sZ0MsUUFBUSsyQyxVQUFZanlELEtBQUtxdkYsaUJBQWlCajBDLEVBQU1sZ0MsUUFBUXEvQyxPQUFTdjZELEtBQUtrYixRQUFRKzJDLFVBQVlqeUQsS0FBS3E2RCxVQVNwSCxPQVBLcEksSUFDSkEsRUFBV2p5RCxLQUFLcTZELFVBQVlyNkQsS0FBS3N2RixtQkFHN0J0dkYsS0FBS2dsRSxTQUFTL1MsSUFDbEJqeUQsS0FBS3VsRSxTQUFTdFQsR0FFUkEsR0FHUm85QixpQkFBa0IsU0FBVXZ4RixHQUMzQixHQUFhLGdCQUFUQSxRQUFtQ2tMLElBQVRsTCxFQUM3QixPQUFPLEVBR1IsSUFBSW0wRCxFQUFXanlELEtBQUtnOUQsZUFBZWwvRCxHQUtuQyxZQUppQmtMLElBQWJpcEQsSUFDSEEsRUFBV2p5RCxLQUFLc3ZGLGdCQUFnQixDQUFDLzBCLEtBQU16OEQsSUFDdkNrQyxLQUFLZzlELGVBQWVsL0QsR0FBUW0wRCxHQUV0QkEsR0FHUnE5QixnQkFBaUIsU0FBVXAwRSxHQUkxQixPQUFRbGIsS0FBS2tiLFFBQVFxMEUsY0FBZ0J2QixHQUFTOXlFLElBQWFrMEUsR0FBTWwwRSxNQStCbkUsSUFBSXMwRSxHQUFZalcsR0FBUS9tRSxPQUFPLENBQzlCZ25DLFdBQVksU0FBVThsQixFQUFjcGtELEdBQ25DcStELEdBQVFwNkUsVUFBVXE2QyxXQUFXOTdDLEtBQUtzQyxLQUFNQSxLQUFLeXZGLGlCQUFpQm53QixHQUFlcGtELElBSzlFb2hFLFVBQVcsU0FBVWhkLEdBQ3BCLE9BQU90L0QsS0FBS2k0RSxXQUFXajRFLEtBQUt5dkYsaUJBQWlCbndCLEtBRzlDbXdCLGlCQUFrQixTQUFVbndCLEdBRTNCLE1BQU8sRUFEUEEsRUFBZS9pQixFQUFlK2lCLElBRWhCMWYsZUFDYjBmLEVBQWF4ZixlQUNid2YsRUFBYXpmLGVBQ2J5ZixFQUFhcmYsbUJBV2hCNnVDLEdBQUlqd0YsT0FBU2d3RixHQUNiQyxHQUFJanJDLGFBQWVBLEVBRW5CNjFCLEdBQVFRLGdCQUFrQkEsR0FDMUJSLEdBQVFnQixlQUFpQkEsR0FDekJoQixHQUFRa0IsZ0JBQWtCQSxHQUMxQmxCLEdBQVFzQixlQUFpQkEsR0FDekJ0QixHQUFRdUIsZ0JBQWtCQSxHQUMxQnZCLEdBQVF3QixXQUFhQSxHQUNyQnhCLEdBQVFTLFVBQVlBLEdBU3BCNXJELEdBQUk0ckIsYUFBYSxDQUloQjZrQixTQUFTLElBR1YsSUFBSTB3QixHQUFVaG5CLEdBQVFsMkQsT0FBTyxDQUM1QmduQyxXQUFZLFNBQVVydUMsR0FDckJuTCxLQUFLa2hFLEtBQU8vMUQsRUFDWm5MLEtBQUtnNkQsV0FBYTd1RCxFQUFJNnVELFdBQ3RCaDZELEtBQUsydkYsTUFBUXhrRixFQUFJaXZELE9BQU93MUIsWUFDeEI1dkYsS0FBSzZ2RixtQkFBcUIsRUFDMUIxa0YsRUFBSXdULEdBQUcsU0FBVTNlLEtBQUs4dkYsU0FBVTl2RixPQUdqQzRvRSxTQUFVLFdBQ1RqcUQsR0FBRzNlLEtBQUtnNkQsV0FBWSxZQUFhaDZELEtBQUsrdkYsYUFBYy92RixPQUdyRDZvRSxZQUFhLFdBQ1p2aEMsR0FBSXRuQyxLQUFLZzZELFdBQVksWUFBYWg2RCxLQUFLK3ZGLGFBQWMvdkYsT0FHdEQrK0QsTUFBTyxXQUNOLE9BQU8vK0QsS0FBS3k2RCxRQUdicTFCLFNBQVUsV0FDVDFqRixHQUFPcE0sS0FBSzJ2RixjQUNMM3ZGLEtBQUsydkYsT0FHYkssWUFBYSxXQUNaaHdGLEtBQUs2dkYsbUJBQXFCLEVBQzFCN3ZGLEtBQUt5NkQsUUFBUyxHQUdmdzFCLHlCQUEwQixXQUNPLElBQTVCandGLEtBQUs2dkYscUJBQ1J4M0QsYUFBYXI0QixLQUFLNnZGLG9CQUNsQjd2RixLQUFLNnZGLG1CQUFxQixJQUk1QkUsYUFBYyxTQUFVbHZGLEdBQ3ZCLElBQUtBLEVBQUUybEUsVUFBMEIsSUFBWjNsRSxFQUFFa3BFLE9BQThCLElBQWJscEUsRUFBRXl0RCxPQUFrQixPQUFPLEVBSW5FdHVELEtBQUtpd0YsMkJBQ0xqd0YsS0FBS2d3RixjQUVMNW1DLEtBQ0FnRCxLQUVBcHNELEtBQUtrcUUsWUFBY2xxRSxLQUFLa2hFLEtBQUsxRSwyQkFBMkIzN0QsR0FFeEQ4ZCxHQUFHc0UsU0FBVSxDQUNaaXRFLFlBQWF6Z0MsR0FDYit5QixVQUFXeGlGLEtBQUswckYsYUFDaEJ5RSxRQUFTbndGLEtBQUtvd0YsV0FDZEMsUUFBU3J3RixLQUFLc3dGLFlBQ1p0d0YsT0FHSjByRixhQUFjLFNBQVU3cUYsR0FDbEJiLEtBQUt5NkQsU0FDVHo2RCxLQUFLeTZELFFBQVMsRUFFZHo2RCxLQUFLdXdGLEtBQU9ubUMsR0FBUyxNQUFPLG1CQUFvQnBxRCxLQUFLZzZELFlBQ3JEbFAsR0FBUzlxRCxLQUFLZzZELFdBQVkscUJBRTFCaDZELEtBQUtraEUsS0FBS3ZtQixLQUFLLGlCQUdoQjM2QyxLQUFLMjJFLE9BQVMzMkUsS0FBS2toRSxLQUFLMUUsMkJBQTJCMzdELEdBRW5ELElBQUk0OUMsRUFBUyxJQUFJekMsRUFBT2g4QyxLQUFLMjJFLE9BQVEzMkUsS0FBS2txRSxhQUN0Q3hxQyxFQUFPK2UsRUFBT0YsVUFFbEJ1TixHQUFZOXJELEtBQUt1d0YsS0FBTTl4QyxFQUFPOXVCLEtBRTlCM3ZCLEtBQUt1d0YsS0FBS3hyRSxNQUFNaW9DLE1BQVN0dEIsRUFBSy8zQixFQUFJLEtBQ2xDM0gsS0FBS3V3RixLQUFLeHJFLE1BQU1rb0MsT0FBU3Z0QixFQUFLcCtCLEVBQUksTUFHbkNrdkYsUUFBUyxXQUNKeHdGLEtBQUt5NkQsU0FDUnJ1RCxHQUFPcE0sS0FBS3V3RixNQUNadGxDLEdBQVlqckQsS0FBS2c2RCxXQUFZLHNCQUc5QjNRLEtBQ0FnRCxLQUVBL2tCLEdBQUlya0IsU0FBVSxDQUNiaXRFLFlBQWF6Z0MsR0FDYit5QixVQUFXeGlGLEtBQUswckYsYUFDaEJ5RSxRQUFTbndGLEtBQUtvd0YsV0FDZEMsUUFBU3J3RixLQUFLc3dGLFlBQ1p0d0YsT0FHSm93RixXQUFZLFNBQVV2dkYsR0FDckIsSUFBaUIsSUFBWkEsRUFBRWtwRSxPQUE4QixJQUFibHBFLEVBQUV5dEQsVUFFMUJ0dUQsS0FBS3d3RixVQUVBeHdGLEtBQUt5NkQsUUFBVixDQUdBejZELEtBQUtpd0YsMkJBQ0xqd0YsS0FBSzZ2RixtQkFBcUIzK0UsV0FBV25TLEVBQUtpQixLQUFLZ3dGLFlBQWFod0YsTUFBTyxHQUVuRSxJQUFJeStDLEVBQVMsSUFBSXRDLEVBQ1RuOEMsS0FBS2toRSxLQUFLdE0sdUJBQXVCNTBELEtBQUtrcUUsYUFDdENscUUsS0FBS2toRSxLQUFLdE0sdUJBQXVCNTBELEtBQUsyMkUsU0FFOUMzMkUsS0FBS2toRSxLQUNIMUwsVUFBVS9XLEdBQ1Y5RCxLQUFLLGFBQWMsQ0FBQzgxQyxjQUFlaHlDLE1BR3RDNnhDLFdBQVksU0FBVXp2RixHQUNILEtBQWRBLEVBQUVzZ0YsU0FDTG5oRixLQUFLd3dGLGFBUVJqaUUsR0FBSTZyQixZQUFZLGFBQWMsVUFBV3MxQyxJQVN6Q25oRSxHQUFJNHJCLGFBQWEsQ0FNaEJ1MkMsaUJBQWlCLElBR2xCLElBQUlDLEdBQWtCam9CLEdBQVFsMkQsT0FBTyxDQUNwQ28yRCxTQUFVLFdBQ1Q1b0UsS0FBS2toRSxLQUFLdmlELEdBQUcsV0FBWTNlLEtBQUs0d0YsZUFBZ0I1d0YsT0FHL0M2b0UsWUFBYSxXQUNaN29FLEtBQUtraEUsS0FBSzU1QixJQUFJLFdBQVl0bkMsS0FBSzR3RixlQUFnQjV3RixPQUdoRDR3RixlQUFnQixTQUFVL3ZGLEdBQ3pCLElBQUlzSyxFQUFNbkwsS0FBS2toRSxLQUNYdkosRUFBVXhzRCxFQUFJeXFELFVBQ2QzSCxFQUFROWlELEVBQUkrUCxRQUFRczNDLFVBQ3BCNWIsRUFBTy8xQyxFQUFFcXVELGNBQWNzWCxTQUFXN08sRUFBVTFKLEVBQVEwSixFQUFVMUosRUFFOUIsV0FBaEM5aUQsRUFBSStQLFFBQVF3MUUsZ0JBQ2Z2bEYsRUFBSWlwRCxRQUFReGQsR0FFWnpyQyxFQUFJb3BELGNBQWMxekQsRUFBRSs5RCxlQUFnQmhvQixNQWlCdkNyb0IsR0FBSTZyQixZQUFZLGFBQWMsa0JBQW1CdTJDLElBUWpEcGlFLEdBQUk0ckIsYUFBYSxDQUdoQmdrQixVQUFVLEVBUVYweUIsU0FBVW5zQyxHQUlWb3NDLG9CQUFxQixLQUlyQkMsZ0JBQWlCN2lGLElBR2pCNGlELGNBQWUsR0FPZmtnQyxlQUFlLEVBUWZDLG1CQUFvQixJQUdyQixJQUFJQyxHQUFPeG9CLEdBQVFsMkQsT0FBTyxDQUN6Qm8yRCxTQUFVLFdBQ1QsSUFBSzVvRSxLQUFLb3hFLFdBQVksQ0FDckIsSUFBSWptRSxFQUFNbkwsS0FBS2toRSxLQUVmbGhFLEtBQUtveEUsV0FBYSxJQUFJL0gsR0FBVWwrRCxFQUFJOHFELFNBQVU5cUQsRUFBSTZ1RCxZQUVsRGg2RCxLQUFLb3hFLFdBQVd6eUQsR0FBRyxDQUNsQjB5RCxVQUFXcnhFLEtBQUtzeEUsYUFDaEJHLEtBQU16eEUsS0FBSzB4RSxRQUNYQyxRQUFTM3hFLEtBQUs0eEUsWUFDWjV4RSxNQUVIQSxLQUFLb3hFLFdBQVd6eUQsR0FBRyxVQUFXM2UsS0FBS214RixnQkFBaUJueEYsTUFDaERtTCxFQUFJK1AsUUFBUTgxRSxnQkFDZmh4RixLQUFLb3hFLFdBQVd6eUQsR0FBRyxVQUFXM2UsS0FBS294RixlQUFnQnB4RixNQUNuRG1MLEVBQUl3VCxHQUFHLFVBQVczZSxLQUFLK3FGLFdBQVkvcUYsTUFFbkNtTCxFQUFJK3pELFVBQVVsL0QsS0FBSytxRixXQUFZL3FGLE9BR2pDOHFELEdBQVM5cUQsS0FBS2toRSxLQUFLbEgsV0FBWSxtQ0FDL0JoNkQsS0FBS294RSxXQUFXdFgsU0FDaEI5NUQsS0FBS3F4RixXQUFhLEdBQ2xCcnhGLEtBQUtzeEYsT0FBUyxJQUdmem9CLFlBQWEsV0FDWjVkLEdBQVlqckQsS0FBS2toRSxLQUFLbEgsV0FBWSxnQkFDbEMvTyxHQUFZanJELEtBQUtraEUsS0FBS2xILFdBQVksc0JBQ2xDaDZELEtBQUtveEUsV0FBV25TLFdBR2pCRixNQUFPLFdBQ04sT0FBTy8rRCxLQUFLb3hFLFlBQWNweEUsS0FBS294RSxXQUFXM1csUUFHM0NrekIsT0FBUSxXQUNQLE9BQU8zdEYsS0FBS294RSxZQUFjcHhFLEtBQUtveEUsV0FBV3BILFNBRzNDc0gsYUFBYyxXQUNiLElBQUlubUUsRUFBTW5MLEtBQUtraEUsS0FHZixHQURBLzFELEVBQUl5b0QsUUFDQTV6RCxLQUFLa2hFLEtBQUtobUQsUUFBUTgyQyxXQUFhaHlELEtBQUtraEUsS0FBS2htRCxRQUFRKzFFLG1CQUFvQixDQUN4RSxJQUFJeHlDLEVBQVNsQyxFQUFldjhDLEtBQUtraEUsS0FBS2htRCxRQUFRODJDLFdBRTlDaHlELEtBQUt1eEYsYUFBZXIxQyxFQUNuQmw4QyxLQUFLa2hFLEtBQUt2TSx1QkFBdUJsVyxFQUFPcUIsZ0JBQWdCekMsWUFBWSxHQUNwRXI5QyxLQUFLa2hFLEtBQUt2TSx1QkFBdUJsVyxFQUFPd0IsZ0JBQWdCNUMsWUFBWSxHQUNsRXAyQyxJQUFJakgsS0FBS2toRSxLQUFLM2lCLFlBRWpCditDLEtBQUt3eEYsV0FBYTV4RSxLQUFLK1AsSUFBSSxFQUFLL1AsS0FBS0MsSUFBSSxFQUFLN2YsS0FBS2toRSxLQUFLaG1ELFFBQVErMUUsMEJBRWhFanhGLEtBQUt1eEYsYUFBZSxLQUdyQnBtRixFQUNLd3ZDLEtBQUssYUFDTEEsS0FBSyxhQUVOeHZDLEVBQUkrUCxRQUFRMjFFLFVBQ2Y3d0YsS0FBS3F4RixXQUFhLEdBQ2xCcnhGLEtBQUtzeEYsT0FBUyxLQUloQjVmLFFBQVMsU0FBVTd3RSxHQUNsQixHQUFJYixLQUFLa2hFLEtBQUtobUQsUUFBUTIxRSxRQUFTLENBQzlCLElBQUlyNUMsRUFBT3gzQyxLQUFLeXhGLFdBQWEsSUFBSS92RSxLQUM3Qm1xQyxFQUFNN3JELEtBQUsweEYsU0FBVzF4RixLQUFLb3hFLFdBQVd1Z0IsU0FBVzN4RixLQUFLb3hFLFdBQVczRyxRQUVyRXpxRSxLQUFLcXhGLFdBQVdsdkYsS0FBSzBwRCxHQUNyQjdyRCxLQUFLc3hGLE9BQU9udkYsS0FBS3ExQyxHQUVqQngzQyxLQUFLNHhGLGdCQUFnQnA2QyxHQUd0QngzQyxLQUFLa2hFLEtBQ0F2bUIsS0FBSyxPQUFROTVDLEdBQ2I4NUMsS0FBSyxPQUFROTVDLElBR25CK3dGLGdCQUFpQixTQUFVcDZDLEdBQzFCLEtBQU94M0MsS0FBS3F4RixXQUFXbnZGLE9BQVMsR0FBS3MxQyxFQUFPeDNDLEtBQUtzeEYsT0FBTyxHQUFLLElBQzVEdHhGLEtBQUtxeEYsV0FBVzl0RixRQUNoQnZELEtBQUtzeEYsT0FBTy90RixTQUlkd25GLFdBQVksV0FDWCxJQUFJOEcsRUFBVzd4RixLQUFLa2hFLEtBQUszaUIsVUFBVXBCLFNBQVMsR0FDeEMyMEMsRUFBZ0I5eEYsS0FBS2toRSxLQUFLOUUsbUJBQW1CLENBQUMsRUFBRyxJQUVyRHA4RCxLQUFLK3hGLG9CQUFzQkQsRUFBYzcwQyxTQUFTNDBDLEdBQVVscUYsRUFDNUQzSCxLQUFLZ3lGLFlBQWNoeUYsS0FBS2toRSxLQUFLcEYsc0JBQXNCdmQsVUFBVTUyQyxHQUc5RHNxRixjQUFlLFNBQVV6ekYsRUFBTzB6RixHQUMvQixPQUFPMXpGLEdBQVNBLEVBQVEwekYsR0FBYWx5RixLQUFLd3hGLFlBRzNDTCxnQkFBaUIsV0FDaEIsR0FBS254RixLQUFLd3hGLFlBQWV4eEYsS0FBS3V4RixhQUE5QixDQUVBLElBQUkzbEMsRUFBUzVyRCxLQUFLb3hFLFdBQVczRyxRQUFReHRCLFNBQVNqOUMsS0FBS294RSxXQUFXamdCLFdBRTFEZ2hDLEVBQVFueUYsS0FBS3V4RixhQUNiM2xDLEVBQU9qa0QsRUFBSXdxRixFQUFNeGlFLElBQUlob0IsSUFBS2lrRCxFQUFPamtELEVBQUkzSCxLQUFLaXlGLGNBQWNybUMsRUFBT2prRCxFQUFHd3FGLEVBQU14aUUsSUFBSWhvQixJQUM1RWlrRCxFQUFPdHFELEVBQUk2d0YsRUFBTXhpRSxJQUFJcnVCLElBQUtzcUQsRUFBT3RxRCxFQUFJdEIsS0FBS2l5RixjQUFjcm1DLEVBQU90cUQsRUFBRzZ3RixFQUFNeGlFLElBQUlydUIsSUFDNUVzcUQsRUFBT2prRCxFQUFJd3FGLEVBQU10eUUsSUFBSWxZLElBQUtpa0QsRUFBT2prRCxFQUFJM0gsS0FBS2l5RixjQUFjcm1DLEVBQU9qa0QsRUFBR3dxRixFQUFNdHlFLElBQUlsWSxJQUM1RWlrRCxFQUFPdHFELEVBQUk2d0YsRUFBTXR5RSxJQUFJdmUsSUFBS3NxRCxFQUFPdHFELEVBQUl0QixLQUFLaXlGLGNBQWNybUMsRUFBT3RxRCxFQUFHNndGLEVBQU10eUUsSUFBSXZlLElBRWhGdEIsS0FBS294RSxXQUFXM0csUUFBVXpxRSxLQUFLb3hFLFdBQVdqZ0IsVUFBVWxxRCxJQUFJMmtELEtBR3pEd2xDLGVBQWdCLFdBRWYsSUFBSWdCLEVBQWFweUYsS0FBS2d5RixZQUNsQkssRUFBWXp5RSxLQUFLdTRCLE1BQU1pNkMsRUFBYSxHQUNwQ3ptQixFQUFLM3JFLEtBQUsreEYsb0JBQ1ZwcUYsRUFBSTNILEtBQUtveEUsV0FBVzNHLFFBQVE5aUUsRUFDNUIycUYsR0FBUzNxRixFQUFJMHFGLEVBQVkxbUIsR0FBTXltQixFQUFhQyxFQUFZMW1CLEVBQ3hENG1CLEdBQVM1cUYsRUFBSTBxRixFQUFZMW1CLEdBQU15bUIsRUFBYUMsRUFBWTFtQixFQUN4RDZtQixFQUFPNXlFLEtBQUtxK0IsSUFBSXEwQyxFQUFRM21CLEdBQU0vckQsS0FBS3ErQixJQUFJczBDLEVBQVE1bUIsR0FBTTJtQixFQUFRQyxFQUVqRXZ5RixLQUFLb3hFLFdBQVd1Z0IsUUFBVTN4RixLQUFLb3hFLFdBQVczRyxRQUFRM3RCLFFBQ2xEOThDLEtBQUtveEUsV0FBVzNHLFFBQVE5aUUsRUFBSTZxRixHQUc3QjVnQixXQUFZLFNBQVUvd0UsR0FDckIsSUFBSXNLLEVBQU1uTCxLQUFLa2hFLEtBQ1hobUQsRUFBVS9QLEVBQUkrUCxRQUVkdTNFLEdBQWF2M0UsRUFBUTIxRSxTQUFXN3dGLEtBQUtzeEYsT0FBT3B2RixPQUFTLEVBSXpELEdBRkFpSixFQUFJd3ZDLEtBQUssVUFBVzk1QyxHQUVoQjR4RixFQUNIdG5GLEVBQUl3dkMsS0FBSyxlQUVILENBQ04zNkMsS0FBSzR4RixpQkFBaUIsSUFBSWx3RSxNQUUxQixJQUFJMi9ELEVBQVlyaEYsS0FBSzB4RixTQUFTejBDLFNBQVNqOUMsS0FBS3F4RixXQUFXLElBQ25EcG5FLEdBQVlqcUIsS0FBS3l4RixVQUFZenhGLEtBQUtzeEYsT0FBTyxJQUFNLElBQy9Db0IsRUFBT3gzRSxFQUFRNDFDLGNBRWY2aEMsRUFBY3RSLEVBQVVoa0MsV0FBV3ExQyxFQUFPem9FLEdBQzFDNm5ELEVBQVE2Z0IsRUFBWTkwQyxXQUFXLENBQUMsRUFBRyxJQUVuQyswQyxFQUFlaHpFLEtBQUsrUCxJQUFJelUsRUFBUTYxRSxnQkFBaUJqZixHQUNqRCtnQixFQUFxQkYsRUFBWXQxQyxXQUFXdTFDLEVBQWU5Z0IsR0FFM0RnaEIsRUFBdUJGLEdBQWdCMTNFLEVBQVE0MUUsb0JBQXNCNEIsR0FDckU5bUMsRUFBU2luQyxFQUFtQngxQyxZQUFZeTFDLEVBQXVCLEdBQUczNkMsUUFFakV5VCxFQUFPamtELEdBQU1pa0QsRUFBT3RxRCxHQUl4QnNxRCxFQUFTemdELEVBQUl3MEQsYUFBYS9ULEVBQVF6Z0QsRUFBSStQLFFBQVE4MkMsV0FFOUM5WSxHQUFpQixXQUNoQi90QyxFQUFJd3FELE1BQU0vSixFQUFRLENBQ2pCM2hDLFNBQVU2b0UsRUFDVmhpQyxjQUFlNGhDLEVBQ2YxOEIsYUFBYSxFQUNibEMsU0FBUyxRQVZYM29ELEVBQUl3dkMsS0FBSyxlQXFCYnBzQixHQUFJNnJCLFlBQVksYUFBYyxXQUFZODJDLElBUTFDM2lFLEdBQUk0ckIsYUFBYSxDQUloQjQ0QixVQUFVLEVBSVZnZ0IsaUJBQWtCLEtBR25CLElBQUlDLEdBQVd0cUIsR0FBUWwyRCxPQUFPLENBRTdCeWdGLFNBQVUsQ0FDVGpuQyxLQUFTLENBQUMsSUFDVmtVLE1BQVMsQ0FBQyxJQUNWZ3pCLEtBQVMsQ0FBQyxJQUNWQyxHQUFTLENBQUMsSUFDVjkrQixPQUFTLENBQUMsSUFBSyxJQUFLLEdBQUksS0FDeEJDLFFBQVMsQ0FBQyxJQUFLLElBQUssR0FBSSxNQUd6QjlhLFdBQVksU0FBVXJ1QyxHQUNyQm5MLEtBQUtraEUsS0FBTy8xRCxFQUVabkwsS0FBS296RixhQUFham9GLEVBQUkrUCxRQUFRNjNFLGtCQUM5Qi95RixLQUFLcXpGLGNBQWNsb0YsRUFBSStQLFFBQVFzM0MsWUFHaENvVyxTQUFVLFdBQ1QsSUFBSWw3QixFQUFZMXRDLEtBQUtraEUsS0FBS2xILFdBR3RCdHNCLEVBQVU2ZSxVQUFZLElBQ3pCN2UsRUFBVTZlLFNBQVcsS0FHdEI1dEMsR0FBRyt1QixFQUFXLENBQ2JrMEIsTUFBTzVoRSxLQUFLc3pGLFNBQ1pDLEtBQU12ekYsS0FBS3d6RixRQUNYdnFCLFVBQVdqcEUsS0FBSyt2RixjQUNkL3ZGLE1BRUhBLEtBQUtraEUsS0FBS3ZpRCxHQUFHLENBQ1ppakQsTUFBTzVoRSxLQUFLeXpGLFVBQ1pGLEtBQU12ekYsS0FBSzB6RixjQUNUMXpGLE9BR0o2b0UsWUFBYSxXQUNaN29FLEtBQUswekYsZUFFTHBzRCxHQUFJdG5DLEtBQUtraEUsS0FBS2xILFdBQVksQ0FDekI0SCxNQUFPNWhFLEtBQUtzekYsU0FDWkMsS0FBTXZ6RixLQUFLd3pGLFFBQ1h2cUIsVUFBV2pwRSxLQUFLK3ZGLGNBQ2QvdkYsTUFFSEEsS0FBS2toRSxLQUFLNTVCLElBQUksQ0FDYnM2QixNQUFPNWhFLEtBQUt5ekYsVUFDWkYsS0FBTXZ6RixLQUFLMHpGLGNBQ1QxekYsT0FHSit2RixhQUFjLFdBQ2IsSUFBSS92RixLQUFLMnpGLFNBQVQsQ0FFQSxJQUFJdnlGLEVBQU82aEIsU0FBUzdoQixLQUNoQnd5RixFQUFRM3dFLFNBQVNpaEMsZ0JBQ2pCK0gsRUFBTTdxRCxFQUFLeThELFdBQWErMUIsRUFBTS8xQixVQUM5QjdSLEVBQU81cUQsRUFBSzA4RCxZQUFjODFCLEVBQU05MUIsV0FFcEM5OUQsS0FBS2toRSxLQUFLbEgsV0FBVzRILFFBRXJCNStDLE9BQU82d0UsU0FBUzduQyxFQUFNQyxLQUd2QnFuQyxTQUFVLFdBQ1R0ekYsS0FBSzJ6RixVQUFXLEVBQ2hCM3pGLEtBQUtraEUsS0FBS3ZtQixLQUFLLFVBR2hCNjRDLFFBQVMsV0FDUnh6RixLQUFLMnpGLFVBQVcsRUFDaEIzekYsS0FBS2toRSxLQUFLdm1CLEtBQUssU0FHaEJ5NEMsYUFBYyxTQUFVVSxHQUN2QixJQUVJdjJGLEVBQUc0TSxFQUZIc1csRUFBT3pnQixLQUFLK3pGLFNBQVcsR0FDdkJDLEVBQVFoMEYsS0FBS2l6RixTQUdqQixJQUFLMTFGLEVBQUksRUFBRzRNLEVBQU02cEYsRUFBTWhvQyxLQUFLOXBELE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQzdDa2pCLEVBQUt1ekUsRUFBTWhvQyxLQUFLenVELElBQU0sRUFBRSxFQUFJdTJGLEVBQVUsR0FFdkMsSUFBS3YyRixFQUFJLEVBQUc0TSxFQUFNNnBGLEVBQU05ekIsTUFBTWgrRCxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUM5Q2tqQixFQUFLdXpFLEVBQU05ekIsTUFBTTNpRSxJQUFNLENBQUN1MkYsRUFBVSxHQUVuQyxJQUFLdjJGLEVBQUksRUFBRzRNLEVBQU02cEYsRUFBTWQsS0FBS2h4RixPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUM3Q2tqQixFQUFLdXpFLEVBQU1kLEtBQUszMUYsSUFBTSxDQUFDLEVBQUd1MkYsR0FFM0IsSUFBS3YyRixFQUFJLEVBQUc0TSxFQUFNNnBGLEVBQU1iLEdBQUdqeEYsT0FBUTNFLEVBQUk0TSxFQUFLNU0sSUFDM0NrakIsRUFBS3V6RSxFQUFNYixHQUFHNTFGLElBQU0sQ0FBQyxHQUFJLEVBQUl1MkYsSUFJL0JULGNBQWUsU0FBVTdnQyxHQUN4QixJQUVJajFELEVBQUc0TSxFQUZIc1csRUFBT3pnQixLQUFLaTBGLFVBQVksR0FDeEJELEVBQVFoMEYsS0FBS2l6RixTQUdqQixJQUFLMTFGLEVBQUksRUFBRzRNLEVBQU02cEYsRUFBTTMvQixPQUFPbnlELE9BQVEzRSxFQUFJNE0sRUFBSzVNLElBQy9Da2pCLEVBQUt1ekUsRUFBTTMvQixPQUFPOTJELElBQU1pMUQsRUFFekIsSUFBS2oxRCxFQUFJLEVBQUc0TSxFQUFNNnBGLEVBQU0xL0IsUUFBUXB5RCxPQUFRM0UsRUFBSTRNLEVBQUs1TSxJQUNoRGtqQixFQUFLdXpFLEVBQU0xL0IsUUFBUS8yRCxLQUFPaTFELEdBSTVCaWhDLFVBQVcsV0FDVjkwRSxHQUFHc0UsU0FBVSxVQUFXampCLEtBQUtzd0YsV0FBWXR3RixPQUcxQzB6RixhQUFjLFdBQ2Jwc0QsR0FBSXJrQixTQUFVLFVBQVdqakIsS0FBS3N3RixXQUFZdHdGLE9BRzNDc3dGLFdBQVksU0FBVXp2RixHQUNyQixLQUFJQSxFQUFFcXpGLFFBQVVyekYsRUFBRXN6RixTQUFXdHpGLEVBQUV1ekYsU0FBL0IsQ0FFQSxJQUVJeG9DLEVBRkE5c0QsRUFBTStCLEVBQUVzZ0YsUUFDUmgyRSxFQUFNbkwsS0FBS2toRSxLQUdmLEdBQUlwaUUsS0FBT2tCLEtBQUsrekYsU0FDVjVvRixFQUFJMHFELFVBQWExcUQsRUFBSTBxRCxTQUFTN0UsY0FDbENwRixFQUFTNXJELEtBQUsrekYsU0FBU2oxRixHQUNuQitCLEVBQUUybEUsV0FDTDVhLEVBQVM3UCxFQUFRNlAsR0FBUXZPLFdBQVcsSUFHckNseUMsRUFBSXdxRCxNQUFNL0osR0FFTnpnRCxFQUFJK1AsUUFBUTgyQyxXQUNmN21ELEVBQUkwc0QsZ0JBQWdCMXNELEVBQUkrUCxRQUFRODJDLGlCQUc1QixHQUFJbHpELEtBQU9rQixLQUFLaTBGLFVBQ3RCOW9GLEVBQUlpcEQsUUFBUWpwRCxFQUFJeXFELFdBQWEvMEQsRUFBRTJsRSxTQUFXLEVBQUksR0FBS3htRSxLQUFLaTBGLFVBQVVuMUYsUUFFNUQsSUFBWSxLQUFSQSxJQUFjcU0sRUFBSXlvRSxTQUFVem9FLEVBQUl5b0UsT0FBTzE0RCxRQUFRZ2tFLGlCQUl6RCxPQUhBL3pFLEVBQUlvbkUsYUFNTDlpQixHQUFLNXVELE9BUVAwdEIsR0FBSTZyQixZQUFZLGFBQWMsV0FBWTQ0QyxJQVExQ3prRSxHQUFJNHJCLGFBQWEsQ0FLaEJrNkMsaUJBQWlCLEVBS2pCQyxrQkFBbUIsR0FNbkJDLG9CQUFxQixLQUd0QixJQUFJQyxHQUFrQjlyQixHQUFRbDJELE9BQU8sQ0FDcENvMkQsU0FBVSxXQUNUanFELEdBQUczZSxLQUFLa2hFLEtBQUtsSCxXQUFZLFFBQVNoNkQsS0FBS3kwRixlQUFnQnowRixNQUV2REEsS0FBSzAwRixPQUFTLEdBR2Y3ckIsWUFBYSxXQUNadmhDLEdBQUl0bkMsS0FBS2toRSxLQUFLbEgsV0FBWSxRQUFTaDZELEtBQUt5MEYsZUFBZ0J6MEYsT0FHekR5MEYsZUFBZ0IsU0FBVTV6RixHQUN6QixJQUFJb3RELEVBQVErQixHQUFjbnZELEdBRXRCbXNCLEVBQVdodEIsS0FBS2toRSxLQUFLaG1ELFFBQVFvNUUsa0JBRWpDdDBGLEtBQUswMEYsUUFBVXptQyxFQUNmanVELEtBQUsyMEYsY0FBZ0IzMEYsS0FBS2toRSxLQUFLMUUsMkJBQTJCMzdELEdBRXJEYixLQUFLcXhELGFBQ1RyeEQsS0FBS3F4RCxZQUFjLElBQUkzdkMsTUFHeEIsSUFBSXNxQyxFQUFPcHNDLEtBQUtDLElBQUltTixJQUFhLElBQUl0TCxLQUFTMWhCLEtBQUtxeEQsWUFBYSxHQUVoRWg1QixhQUFhcjRCLEtBQUs0MEYsUUFDbEI1MEYsS0FBSzQwRixPQUFTMWpGLFdBQVduUyxFQUFLaUIsS0FBSzYwRixhQUFjNzBGLE1BQU9nc0QsR0FFeER5RCxHQUFLNXVELElBR05nMEYsYUFBYyxXQUNiLElBQUkxcEYsRUFBTW5MLEtBQUtraEUsS0FDWHRxQixFQUFPenJDLEVBQUl5cUQsVUFDWHdGLEVBQU9wN0QsS0FBS2toRSxLQUFLaG1ELFFBQVFxM0MsVUFBWSxFQUV6Q3BuRCxFQUFJeW9ELFFBR0osSUFBSWtoQyxFQUFLOTBGLEtBQUswMEYsUUFBa0QsRUFBeEMxMEYsS0FBS2toRSxLQUFLaG1ELFFBQVFxNUUscUJBQ3RDUSxFQUFLLEVBQUluMUUsS0FBS21jLElBQUksR0FBSyxFQUFJbmMsS0FBS3lqQyxLQUFLempDLEtBQUtxK0IsSUFBSTYyQyxNQUFTbDFFLEtBQUtvaUMsSUFDNURnekMsRUFBSzU1QixFQUFPeDdDLEtBQUtrOEIsS0FBS2k1QyxFQUFLMzVCLEdBQVFBLEVBQU8yNUIsRUFDMUM5bUMsRUFBUTlpRCxFQUFJaW9ELFdBQVd4YyxHQUFRNTJDLEtBQUswMEYsT0FBUyxFQUFJTSxHQUFNQSxJQUFPcCtDLEVBRWxFNTJDLEtBQUswMEYsT0FBUyxFQUNkMTBGLEtBQUtxeEQsV0FBYSxLQUVicEQsSUFFK0IsV0FBaEM5aUQsRUFBSStQLFFBQVFtNUUsZ0JBQ2ZscEYsRUFBSWlwRCxRQUFReGQsRUFBT3FYLEdBRW5COWlELEVBQUlvcEQsY0FBY3YwRCxLQUFLMjBGLGNBQWUvOUMsRUFBT3FYLE9BUWhEMS9CLEdBQUk2ckIsWUFBWSxhQUFjLGtCQUFtQm82QyxJQVFqRGptRSxHQUFJNHJCLGFBQWEsQ0FLaEJqbUIsS0FBSyxFQUtMK2dFLGFBQWMsS0FHZixJQUFJQyxHQUFNeHNCLEdBQVFsMkQsT0FBTyxDQUN4Qm8yRCxTQUFVLFdBQ1RqcUQsR0FBRzNlLEtBQUtraEUsS0FBS2xILFdBQVksYUFBY2g2RCxLQUFLNHBFLFFBQVM1cEUsT0FHdEQ2b0UsWUFBYSxXQUNadmhDLEdBQUl0bkMsS0FBS2toRSxLQUFLbEgsV0FBWSxhQUFjaDZELEtBQUs0cEUsUUFBUzVwRSxPQUd2RDRwRSxRQUFTLFNBQVUvb0UsR0FDbEIsR0FBS0EsRUFBRXFvRCxRQUFQLENBT0EsR0FMQWIsR0FBZXhuRCxHQUVmYixLQUFLbTFGLFlBQWEsRUFHZHQwRixFQUFFcW9ELFFBQVFobkQsT0FBUyxFQUd0QixPQUZBbEMsS0FBS20xRixZQUFhLE9BQ2xCOThELGFBQWFyNEIsS0FBS28xRixjQUluQixJQUFJLzlFLEVBQVF4VyxFQUFFcW9ELFFBQVEsR0FDbEJoakMsRUFBSzdPLEVBQU1nTSxPQUVmcmpCLEtBQUtteEQsVUFBWW54RCxLQUFLeXFFLFFBQVUsSUFBSTl1QixFQUFNdGtDLEVBQU1zNEMsUUFBU3Q0QyxFQUFNdTRDLFNBRzNEMXBDLEVBQUdta0MsU0FBd0MsTUFBN0Jua0MsRUFBR21rQyxRQUFRN3NCLGVBQzVCc3RCLEdBQVM1a0MsRUFBSSxrQkFJZGxtQixLQUFLbzFGLGFBQWVsa0YsV0FBV25TLEdBQUssV0FDL0JpQixLQUFLcTFGLGdCQUNScjFGLEtBQUttMUYsWUFBYSxFQUNsQm4xRixLQUFLcXFFLFFBQ0xycUUsS0FBS3MxRixlQUFlLGNBQWVqK0UsTUFFbENyWCxNQUFPLEtBRVZBLEtBQUtzMUYsZUFBZSxZQUFhaitFLEdBRWpDc0gsR0FBR3NFLFNBQVUsQ0FDWnN5RSxVQUFXdjFGLEtBQUtvcUUsUUFDaEJ2YixTQUFVN3VELEtBQUtxcUUsT0FDYnJxRSxRQUdKcXFFLE1BQU8sU0FBVXhwRSxHQVFoQixHQVBBdzNCLGFBQWFyNEIsS0FBS28xRixjQUVsQjl0RCxHQUFJcmtCLFNBQVUsQ0FDYnN5RSxVQUFXdjFGLEtBQUtvcUUsUUFDaEJ2YixTQUFVN3VELEtBQUtxcUUsT0FDYnJxRSxNQUVDQSxLQUFLbTFGLFlBQWN0MEYsR0FBS0EsRUFBRXNvRCxlQUFnQixDQUU3QyxJQUFJOXhDLEVBQVF4VyxFQUFFc29ELGVBQWUsR0FDekJqakMsRUFBSzdPLEVBQU1nTSxPQUVYNkMsR0FBTUEsRUFBR21rQyxTQUF3QyxNQUE3Qm5rQyxFQUFHbWtDLFFBQVE3c0IsZUFDbEN5dEIsR0FBWS9rQyxFQUFJLGtCQUdqQmxtQixLQUFLczFGLGVBQWUsVUFBV2orRSxHQUczQnJYLEtBQUtxMUYsZUFDUnIxRixLQUFLczFGLGVBQWUsUUFBU2orRSxLQUtoQ2crRSxZQUFhLFdBQ1osT0FBT3IxRixLQUFLeXFFLFFBQVE1c0IsV0FBVzc5QyxLQUFLbXhELFlBQWNueEQsS0FBS2toRSxLQUFLaG1ELFFBQVErNUUsY0FHckU3cUIsUUFBUyxTQUFVdnBFLEdBQ2xCLElBQUl3VyxFQUFReFcsRUFBRXFvRCxRQUFRLEdBQ3RCbHBELEtBQUt5cUUsUUFBVSxJQUFJOXVCLEVBQU10a0MsRUFBTXM0QyxRQUFTdDRDLEVBQU11NEMsU0FDOUM1dkQsS0FBS3MxRixlQUFlLFlBQWFqK0UsSUFHbENpK0UsZUFBZ0IsU0FBVXh2RSxFQUFNamxCLEdBQy9CLElBQUkyMEYsRUFBaUJ2eUUsU0FBU3d5RSxZQUFZLGVBRTFDRCxFQUFlcDNCLFlBQWEsRUFDNUJ2OUQsRUFBRXdpQixPQUFPcXlFLGlCQUFrQixFQUUzQkYsRUFBZUcsZUFDUDd2RSxHQUFNLEdBQU0sRUFBTTlDLE9BQVEsRUFDMUJuaUIsRUFBRTZnRSxRQUFTN2dFLEVBQUU4Z0UsUUFDYjlnRSxFQUFFOHVELFFBQVM5dUQsRUFBRSt1RCxTQUNiLEdBQU8sR0FBTyxHQUFPLEVBQU8sRUFBRyxNQUV2Qy91RCxFQUFFd2lCLE9BQU91eUUsY0FBY0osT0FPckJudkMsSUFBV0QsS0FBV2xCLElBQ3pCMzJCLEdBQUk2ckIsWUFBWSxhQUFjLE1BQU84NkMsSUFTdEMzbUUsR0FBSTRyQixhQUFhLENBT2hCMDdDLFVBQVd4dkMsS0FBVTNCLEdBS3JCb3hDLG9CQUFvQixJQUdyQixJQUFJQyxHQUFZcnRCLEdBQVFsMkQsT0FBTyxDQUM5Qm8yRCxTQUFVLFdBQ1Q5ZCxHQUFTOXFELEtBQUtraEUsS0FBS2xILFdBQVksc0JBQy9CcjdDLEdBQUczZSxLQUFLa2hFLEtBQUtsSCxXQUFZLGFBQWNoNkQsS0FBS2cyRixjQUFlaDJGLE9BRzVENm9FLFlBQWEsV0FDWjVkLEdBQVlqckQsS0FBS2toRSxLQUFLbEgsV0FBWSxzQkFDbEMxeUIsR0FBSXRuQyxLQUFLa2hFLEtBQUtsSCxXQUFZLGFBQWNoNkQsS0FBS2cyRixjQUFlaDJGLE9BRzdEZzJGLGNBQWUsU0FBVW4xRixHQUN4QixJQUFJc0ssRUFBTW5MLEtBQUtraEUsS0FDZixHQUFLcmdFLEVBQUVxb0QsU0FBZ0MsSUFBckJyb0QsRUFBRXFvRCxRQUFRaG5ELFNBQWdCaUosRUFBSWsxRCxpQkFBa0JyZ0UsS0FBS2kyRixTQUF2RSxDQUVBLElBQUl4cUIsRUFBS3RnRSxFQUFJcXhELDJCQUEyQjM3RCxFQUFFcW9ELFFBQVEsSUFDOUN3aUIsRUFBS3ZnRSxFQUFJcXhELDJCQUEyQjM3RCxFQUFFcW9ELFFBQVEsSUFFbERscEQsS0FBS2syRixhQUFlL3FGLEVBQUlvekMsVUFBVW5CLFVBQVUsR0FDNUNwOUMsS0FBS20yRixhQUFlaHJGLEVBQUl5cEQsdUJBQXVCNTBELEtBQUtrMkYsY0FDdEIsV0FBMUIvcUYsRUFBSStQLFFBQVEyNkUsWUFDZjcxRixLQUFLbzJGLGtCQUFvQmpyRixFQUFJeXBELHVCQUF1QjZXLEVBQUd4a0UsSUFBSXlrRSxHQUFJdHVCLFVBQVUsS0FHMUVwOUMsS0FBS3EyRixXQUFhNXFCLEVBQUc1dEIsV0FBVzZ0QixHQUNoQzFyRSxLQUFLczJGLFdBQWFuckYsRUFBSXlxRCxVQUV0QjUxRCxLQUFLeTZELFFBQVMsRUFDZHo2RCxLQUFLaTJGLFVBQVcsRUFFaEI5cUYsRUFBSXlvRCxRQUVKajFDLEdBQUdzRSxTQUFVLFlBQWFqakIsS0FBS3UyRixhQUFjdjJGLE1BQzdDMmUsR0FBR3NFLFNBQVUsV0FBWWpqQixLQUFLdzJGLFlBQWF4MkYsTUFFM0Nxb0QsR0FBZXhuRCxLQUdoQjAxRixhQUFjLFNBQVUxMUYsR0FDdkIsR0FBS0EsRUFBRXFvRCxTQUFnQyxJQUFyQnJvRCxFQUFFcW9ELFFBQVFobkQsUUFBaUJsQyxLQUFLaTJGLFNBQWxELENBRUEsSUFBSTlxRixFQUFNbkwsS0FBS2toRSxLQUNYdUssRUFBS3RnRSxFQUFJcXhELDJCQUEyQjM3RCxFQUFFcW9ELFFBQVEsSUFDOUN3aUIsRUFBS3ZnRSxFQUFJcXhELDJCQUEyQjM3RCxFQUFFcW9ELFFBQVEsSUFDOUN6SCxFQUFRZ3FCLEVBQUc1dEIsV0FBVzZ0QixHQUFNMXJFLEtBQUtxMkYsV0FVckMsR0FSQXIyRixLQUFLbXpELE1BQVFob0QsRUFBSW1zRCxhQUFhN1YsRUFBT3poRCxLQUFLczJGLGFBRXJDbnJGLEVBQUkrUCxRQUFRNDZFLHFCQUNmOTFGLEtBQUttekQsTUFBUWhvRCxFQUFJeXZELGNBQWdCblosRUFBUSxHQUN6Q3poRCxLQUFLbXpELE1BQVFob0QsRUFBSTJ2RCxjQUFnQnJaLEVBQVEsS0FDMUN6aEQsS0FBS216RCxNQUFRaG9ELEVBQUlpb0QsV0FBV3B6RCxLQUFLbXpELFFBR0osV0FBMUJob0QsRUFBSStQLFFBQVEyNkUsV0FFZixHQURBNzFGLEtBQUtvckYsUUFBVXByRixLQUFLbTJGLGFBQ04sSUFBVjEwQyxFQUFlLFdBQ2IsQ0FFTixJQUFJd00sRUFBUXdkLEVBQUd6dUIsS0FBSzB1QixHQUFJdHVCLFVBQVUsR0FBR0YsVUFBVWw5QyxLQUFLazJGLGNBQ3BELEdBQWMsSUFBVnowQyxHQUEyQixJQUFad00sRUFBTXRtRCxHQUF1QixJQUFac21ELEVBQU0zc0QsRUFBVyxPQUNyRHRCLEtBQUtvckYsUUFBVWpnRixFQUFJNDJDLFVBQVU1MkMsRUFBSTRDLFFBQVEvTixLQUFLbzJGLGtCQUFtQnAyRixLQUFLbXpELE9BQU9sVyxTQUFTZ1IsR0FBUWp1RCxLQUFLbXpELE9BRy9GbnpELEtBQUt5NkQsU0FDVHR2RCxFQUFJK3JELFlBQVcsR0FBTSxHQUNyQmwzRCxLQUFLeTZELFFBQVMsR0FHZnJoQixFQUFnQnA1QyxLQUFLMHFFLGNBRXJCLElBQUkrckIsRUFBUzEzRixFQUFLb00sRUFBSWtzRCxNQUFPbHNELEVBQUtuTCxLQUFLb3JGLFFBQVNwckYsS0FBS216RCxNQUFPLENBQUNtSyxPQUFPLEVBQU1ubEIsT0FBTyxJQUNqRm40QyxLQUFLMHFFLGFBQWV4eEIsRUFBaUJ1OUMsRUFBUXoyRixNQUFNLEdBRW5EcW9ELEdBQWV4bkQsS0FHaEIyMUYsWUFBYSxXQUNQeDJGLEtBQUt5NkQsUUFBV3o2RCxLQUFLaTJGLFVBSzFCajJGLEtBQUtpMkYsVUFBVyxFQUNoQjc4QyxFQUFnQnA1QyxLQUFLMHFFLGNBRXJCcGpDLEdBQUlya0IsU0FBVSxZQUFhampCLEtBQUt1MkYsYUFBY3YyRixNQUM5Q3NuQyxHQUFJcmtCLFNBQVUsV0FBWWpqQixLQUFLdzJGLFlBQWF4MkYsTUFHeENBLEtBQUtraEUsS0FBS2htRCxRQUFRZzNDLGNBQ3JCbHlELEtBQUtraEUsS0FBS04sYUFBYTVnRSxLQUFLb3JGLFFBQVNwckYsS0FBS2toRSxLQUFLOU4sV0FBV3B6RCxLQUFLbXpELFFBQVEsRUFBTW56RCxLQUFLa2hFLEtBQUtobUQsUUFBUXEzQyxVQUUvRnZ5RCxLQUFLa2hFLEtBQUsvTSxXQUFXbjBELEtBQUtvckYsUUFBU3ByRixLQUFLa2hFLEtBQUs5TixXQUFXcHpELEtBQUttekQsU0FkN0RuekQsS0FBS2kyRixVQUFXLEtBc0JuQjFuRSxHQUFJNnJCLFlBQVksYUFBYyxZQUFhMjdDLElBRTNDeG5FLEdBQUltaEUsUUFBVUEsR0FDZG5oRSxHQUFJb2lFLGdCQUFrQkEsR0FDdEJwaUUsR0FBSTJpRSxLQUFPQSxHQUNYM2lFLEdBQUl5a0UsU0FBV0EsR0FDZnprRSxHQUFJaW1FLGdCQUFrQkEsR0FDdEJqbUUsR0FBSTJtRSxJQUFNQSxHQUNWM21FLEdBQUl3bkUsVUFBWUEsR0FFaEIxNEYsRUFBUTBzRixRQXpvYk0sUUEwb2JkMXNGLEVBQVE0akUsUUFBVUEsR0FDbEI1akUsRUFBUXdrRSxRQUFVQSxHQUNsQnhrRSxFQUFRcXFELFFBQVVBLEdBQ2xCcnFELEVBQVFxK0MsUUFBVUEsRUFDbEJyK0MsRUFBUXc4QyxNQUFRQSxHQUNoQng4QyxFQUFRZzhDLEtBQU9BLEVBQ2ZoOEMsRUFBUWk4QyxNQUFRQSxFQUNoQmo4QyxFQUFRcXJFLFFBQVVBLEdBQ2xCcnJFLEVBQVFtVixPQUFTQSxFQUNqQm5WLEVBQVEwQixLQUFPQSxFQUNmMUIsRUFBUWk2QyxNQUFRQSxFQUNoQmo2QyxFQUFRaTdDLFdBQWFBLEVBQ3JCajdDLEVBQVFzekQsU0FBV0EsR0FDbkJ0ekQsRUFBUTh2RCxRQUFVQSxHQUNsQjl2RCxFQUFRdXpELGFBQWVBLEdBQ3ZCdnpELEVBQVFnc0UsVUFBWUEsR0FDcEJoc0UsRUFBUXF2RSxTQUFXQSxHQUNuQnJ2RSxFQUFRNHZFLFNBQVdBLEdBQ25CNXZFLEVBQVFzK0MsTUFBUUEsRUFDaEJ0K0MsRUFBUTAvQyxNQUFRaEIsRUFDaEIxK0MsRUFBUTIrQyxPQUFTQSxFQUNqQjMrQyxFQUFRb2hELE9BQVN2QyxFQUNqQjcrQyxFQUFRaW1ELGVBQWlCQSxFQUN6QmptRCxFQUFRcWtELGVBQWlCNkIsRUFDekJsbUQsRUFBUXE1RixXQUFhcG9GLEdBQ3JCalIsRUFBUW0vQyxPQUFTQSxFQUNqQm4vQyxFQUFRczVGLE9BQVMvNUMsRUFDakJ2L0MsRUFBUTgrQyxhQUFlQSxFQUN2QjkrQyxFQUFRaWlFLGFBQWUvaUIsRUFDdkJsL0MsRUFBUStqRCxJQUFNQSxFQUNkL2pELEVBQVFxOEUsUUFBVUEsR0FDbEJyOEUsRUFBUWkrRSxRQUFVQSxHQUNsQmorRSxFQUFRdytFLFFBQVVBLEdBQ2xCeCtFLEVBQVF3d0UsTUFBUUEsR0FDaEJ4d0UsRUFBUXN4RSxXQUFhQSxHQUNyQnR4RSxFQUFRdTVGLFdBOThOUyxTQUFVN2tDLEVBQVE3MkMsR0FDbEMsT0FBTyxJQUFJeXpELEdBQVc1YyxFQUFRNzJDLElBODhOL0I3ZCxFQUFRNnhFLGFBQWVBLEdBQ3ZCN3hFLEVBQVF3NUYsYUFwM05XLFNBQVU5a0MsRUFBUTcyQyxHQUNwQyxPQUFPLElBQUlnMEQsR0FBYW5kLEVBQVE3MkMsSUFvM05qQzdkLEVBQVF5K0UsYUFBZUEsR0FDdkJ6K0UsRUFBUXk1RixhQWhvSlcsU0FBVTc3RSxFQUFLd2pDLEVBQVF2akMsR0FDekMsT0FBTyxJQUFJNGdFLEdBQWE3Z0UsRUFBS3dqQyxFQUFRdmpDLElBZ29KdEM3ZCxFQUFRMi9FLGFBQWVBLEdBQ3ZCMy9FLEVBQVEwNUYsYUFqaUpSLFNBQXNCQyxFQUFPdjRDLEVBQVF2akMsR0FDcEMsT0FBTyxJQUFJOGhFLEdBQWFnYSxFQUFPdjRDLEVBQVF2akMsSUFpaUp4QzdkLEVBQVFtZ0YsV0FBYUEsR0FDckJuZ0YsRUFBUTQ1RixXQXAvSVIsU0FBb0Ivd0UsRUFBSXU0QixFQUFRdmpDLEdBQy9CLE9BQU8sSUFBSXNpRSxHQUFXdDNELEVBQUl1NEIsRUFBUXZqQyxJQW8vSW5DN2QsRUFBUW9nRixXQUFhQSxHQUNyQnBnRixFQUFRcWhGLE1BQVFBLEdBQ2hCcmhGLEVBQVFnaUYsTUFoL0hJLFNBQVVua0UsRUFBU3RXLEdBQzlCLE9BQU8sSUFBSTg1RSxHQUFNeGpFLEVBQVN0VyxJQWcvSDNCdkgsRUFBUStqRixRQUFVQSxHQUNsQi9qRixFQUFRbWtGLFFBamxITSxTQUFVdG1FLEVBQVN0VyxHQUNoQyxPQUFPLElBQUl3OEUsR0FBUWxtRSxFQUFTdFcsSUFpbEg3QnZILEVBQVFpeUUsS0FBT0EsR0FDZmp5RSxFQUFRNnpFLEtBMXVOUixTQUFjaDJELEdBQ2IsT0FBTyxJQUFJbzBELEdBQUtwMEQsSUEwdU5qQjdkLEVBQVF3bEYsUUFBVUEsR0FDbEJ4bEYsRUFBUTY1RixRQXQwR1IsU0FBaUJoOEUsR0FDaEIsT0FBTyxJQUFJMm5FLEdBQVEzbkUsSUFzMEdwQjdkLEVBQVF3MUUsT0FBU0EsR0FDakJ4MUUsRUFBUTJ6RSxPQTdwTVIsU0FBZ0IxdkIsRUFBUXBtQyxHQUN2QixPQUFPLElBQUkyM0QsR0FBT3Z4QixFQUFRcG1DLElBNnBNM0I3ZCxFQUFRb3JGLFVBQVlBLEdBQ3BCcHJGLEVBQVF5NUMsVUFBWUEsR0FDcEJ6NUMsRUFBUTZsRixVQUFZQSxHQUNwQjdsRixFQUFRODVGLFVBcDdFUixTQUFtQmo4RSxHQUNsQixPQUFPLElBQUlnb0UsR0FBVWhvRSxJQW83RXRCN2QsRUFBUXl4RixJQUFNQSxHQUNkenhGLEVBQVEybUQsSUFBTW9yQyxHQUNkL3hGLEVBQVFxdEYsU0FBV0EsR0FDbkJydEYsRUFBUWl1RixPQUFTQSxHQUNqQmp1RixFQUFRNnBELE9BQVM4bUMsR0FDakIzd0YsRUFBUXkzRSxLQUFPQSxHQUNmejNFLEVBQVFrNUUsYUFBZUEsR0FDdkJsNUUsRUFBUSs1RixhQWg3TFIsU0FBc0I5MUMsRUFBUXBtQyxHQUM3QixPQUFPLElBQUlxN0QsR0FBYWoxQixFQUFRcG1DLElBZzdMakM3ZCxFQUFRODVFLE9BQVNBLEdBQ2pCOTVFLEVBQVFnNkYsT0F4MExSLFNBQWdCLzFDLEVBQVFwbUMsRUFBU2s4RCxHQUNoQyxPQUFPLElBQUlELEdBQU83MUIsRUFBUXBtQyxFQUFTazhELElBdzBMcEMvNUUsRUFBUXM2RSxTQUFXQSxHQUNuQnQ2RSxFQUFRaTZGLFNBdmdMUixTQUFrQmg3QyxFQUFTcGhDLEdBQzFCLE9BQU8sSUFBSXk4RCxHQUFTcjdCLEVBQVNwaEMsSUF1Z0w5QjdkLEVBQVFrOEUsUUFBVUEsR0FDbEJsOEUsRUFBUWs2RixRQXAxS1IsU0FBaUJqN0MsRUFBU3BoQyxHQUN6QixPQUFPLElBQUlxK0QsR0FBUWo5QixFQUFTcGhDLElBbzFLN0I3ZCxFQUFRbXlGLFVBQVlBLEdBQ3BCbnlGLEVBQVFtNkYsVUExZ0NSLFNBQW1CbDRCLEVBQWNwa0QsR0FDaEMsT0FBTyxJQUFJczBFLEdBQVVsd0IsRUFBY3BrRCxJQTBnQ3BDN2QsRUFBUWt4QixJQUFNQSxHQUNkbHhCLEVBQVE4TixJQWhwU1IsU0FBbUJRLEVBQUl1UCxHQUN0QixPQUFPLElBQUlxVCxHQUFJNWlCLEVBQUl1UCxJQWlwU3BCLElBQUl1OEUsR0FBT3owRSxPQUFPMHpCLEVBQ2xCcjVDLEVBQVE2MUMsV0FBYSxXQUVwQixPQURBbHdCLE9BQU8wekIsRUFBSStnRCxHQUNKejNGLE1BSVJnakIsT0FBTzB6QixFQUFJcjVDLEVBcHVib0RxNkYsQ0FBUXI2RixJLGdCQ0x6RSxJQUFJa04sRUFBVSxFQUFRLEtBRUEsaUJBQVpBLElBQXNCQSxFQUFVLENBQUMsQ0FBQ2pOLEVBQU9DLEVBQUlnTixFQUFTLE1BT2hFLElBQUkyUSxFQUFVLENBQUMsS0FBTSxFQUVyQixlQVBJbUwsRUFRSixnQkFBcUJyZCxHQUVSLEVBQVEsR0FBUixDQUFnRHVCLEVBQVMyUSxHQUVuRTNRLEVBQVEyK0IsU0FBUTVyQyxFQUFPRCxRQUFVa04sRUFBUTIrQixTLDZCQ2pCNUMsb0hBT0lILEVBQTBCLElBQTRCLEtBQ3RENHVELEVBQXFDLElBQWdDLEtBQ3JFQyxFQUFxQyxJQUFnQyxLQUNyRUMsRUFBcUMsSUFBZ0MsS0FFekU5dUQsRUFBd0I1bUMsS0FBSyxDQUFDN0UsRUFBT0MsRUFBSSx1cFJBQXlwUm82RixFQUFxQyxpSUFBbUlDLEVBQXFDLGloQ0FBbWhDQyxFQUFxQywydUxBQWd2TCxHQUFHLENBQUMsUUFBVSxFQUFFLFFBQVUsQ0FBQyxxREFBcUQsTUFBUSxHQUFHLFNBQVcsOC9KQUE4L0osZUFBaUIsQ0FBQyx3a2ZBQTJrZixXQUFhLE1BRXQzb0MsYSxnQkNiZixJQUFJdHRGLEVBQVUsRUFBUSxLQUVBLGlCQUFaQSxJQUFzQkEsRUFBVSxDQUFDLENBQUNqTixFQUFPQyxFQUFJZ04sRUFBUyxNQU9oRSxJQUFJMlEsRUFBVSxDQUFDLEtBQU0sRUFFckIsZUFQSW1MLEVBUUosZ0JBQXFCcmQsR0FFUixFQUFRLEdBQVIsQ0FBNkR1QixFQUFTMlEsR0FFaEYzUSxFQUFRMitCLFNBQVE1ckMsRUFBT0QsUUFBVWtOLEVBQVEyK0IsUyw2QkNqQjVDLHNEQUlJSCxFQUEwQixJQUE0QixLQUMxREEsRUFBd0J4ckMsRUFBRSxLQUUxQndyQyxFQUF3QjVtQyxLQUFLLENBQUM3RSxFQUFPQyxFQUFJLDAvSEFBMGdJLEdBQUcsQ0FBQyxRQUFVLEVBQUUsUUFBVSxDQUFDLHlDQUF5QyxNQUFRLEdBQUcsU0FBVyx1K0NBQXUrQyxlQUFpQixDQUFDLG1oSUFBZ2lJLFdBQWEsTUFFcHFULGEsZ0JDUmYsSUFBSWdOLEVBQVUsRUFBUSxLQUVBLGlCQUFaQSxJQUFzQkEsRUFBVSxDQUFDLENBQUNqTixFQUFPQyxFQUFJZ04sRUFBUyxNQU9oRSxJQUFJMlEsRUFBVSxDQUFDLEtBQU0sRUFFckIsZUFQSW1MLEVBUUosZ0JBQXFCcmQsR0FFUixFQUFRLEdBQVIsQ0FBNkR1QixFQUFTMlEsR0FFaEYzUSxFQUFRMitCLFNBQVE1ckMsRUFBT0QsUUFBVWtOLEVBQVEyK0IsUyw2QkNqQjVDLGtHQU1JSCxFQUEwQixJQUE0QixLQUN0RDR1RCxFQUFxQyxJQUFnQyxLQUNyRUMsRUFBcUMsSUFBZ0MsS0FFekU3dUQsRUFBd0I1bUMsS0FBSyxDQUFDN0UsRUFBT0MsRUFBSSwwREFBNERvNkYsRUFBcUMseUVBQTJFQyxFQUFxQyxZQUFhLEdBQUcsQ0FBQyxRQUFVLEVBQUUsUUFBVSxDQUFDLHlDQUF5QyxNQUFRLEdBQUcsU0FBVywyRUFBMkUsZUFBaUIsQ0FBQyxnTEFBZ0wsV0FBYSxNQUU1bUIsYSxtTUNaZixJQUFNMTZFLEVBQU8zTCxFQUFRLEtBRWZ1bUYsRUFBd0J2bUYsRUFBUSxLQUNoQ0MsRUFBbUJELEVBQVEsS0FFM0JNLEVBQWtCTixFQUFRLElBRWhDalUsRUFBT0QsUUFBUCxXQUNFLFdBQVltMkMsRUFBZUMsSSw0RkFBUSxTQUNqQ3p6QyxLQUFLeW9CLEtBQU96b0IsS0FBS3lvQixLQUFLMXBCLEtBQUtpQixNQUMzQkEsS0FBS3VvQixLQUFPdm9CLEtBQUt1b0IsS0FBS3hwQixLQUFLaUIsTUFFM0JBLEtBQUt3ekMsY0FBZ0JBLEVBQ3JCeHpDLEtBQUt5ekMsT0FBU0EsRUFFZHp6QyxLQUFLMHRDLFVBQVl6cUIsU0FBUzR3QixlQUFlLDBCQUV6Q2lrRCxFQUFzQnRrRCxHQUV0QjNoQyxFQUFnQjJXLE9BQU94b0IsS0FBS3VvQixNQUM1QjFXLEVBQWdCOFcsT0FBTzNvQixLQUFLeW9CLE0sVUFiaEMsTyxFQUFBLEcsRUFBQSxtQkFnQkUsU0FBSzNDLEVBQU00QyxHQUNULElBQU1xdkUsRUFBb0I3NkUsRUFBS2xkLEtBQUt3ekMsY0FBZSxDQUFFMXRCLFVBQVcsR0FDMUQzUCxFQUFlNGhGLEVBQWtCM2hELEtBQU8yaEQsRUFBa0IzaEQsS0FBTzVrQyxFQUN2RXhSLEtBQUt5ekMsT0FBT3p6QyxLQUFLMHRDLFVBQVd2M0IsRUFBY3VTLEdBQzFDMW9CLEtBQUswdEMsVUFBVXNxRCxRQUFTLElBcEI1QixrQkF1QkUsV0FDRWg0RixLQUFLMHRDLFVBQVVzcUQsUUFBUyxPLDJCQXhCNUIsTSxnQkNQQSxJQUFJQyxFQUFlLEVBQVEsS0FDdkJ0MkUsRUFBYyxFQUFRLEtBQ3RCbEIsRUFBTyxFQUFRLEtBc0JuQm5qQixFQUFPRCxRQWJQLFNBQW9CNjZGLEdBQ2xCLE9BQU8sU0FBU0MsRUFBWTlwRixFQUFXK3BGLEdBQ3JDLElBQUl6eUYsRUFBVzFILE9BQU9rNkYsR0FDdEIsSUFBS3gyRSxFQUFZdzJFLEdBQWEsQ0FDNUIsSUFBSUUsRUFBV0osRUFBYTVwRixFQUFXLEdBQ3ZDOHBGLEVBQWExM0UsRUFBSzAzRSxHQUNsQjlwRixFQUFZLFNBQVN2UCxHQUFPLE9BQU91NUYsRUFBUzF5RixFQUFTN0csR0FBTUEsRUFBSzZHLElBRWxFLElBQUkySSxFQUFRNHBGLEVBQWNDLEVBQVk5cEYsRUFBVytwRixHQUNqRCxPQUFPOXBGLEdBQVMsRUFBSTNJLEVBQVMweUYsRUFBV0YsRUFBVzdwRixHQUFTQSxRQUFTdEYsSyxnQkNwQnpFLElBQUlzdkYsRUFBYyxFQUFRLEtBQ3RCQyxFQUFlLEVBQVEsS0FDdkJDLEVBQTBCLEVBQVEsS0FtQnRDbDdGLEVBQU9ELFFBVlAsU0FBcUJ1SCxHQUNuQixJQUFJNnpGLEVBQVlGLEVBQWEzekYsR0FDN0IsT0FBd0IsR0FBcEI2ekYsRUFBVXYyRixRQUFldTJGLEVBQVUsR0FBRyxHQUNqQ0QsRUFBd0JDLEVBQVUsR0FBRyxHQUFJQSxFQUFVLEdBQUcsSUFFeEQsU0FBU3g1RixHQUNkLE9BQU9BLElBQVcyRixHQUFVMHpGLEVBQVlyNUYsRUFBUTJGLEVBQVE2ekYsTSxnQkNqQjVELElBQUloNUQsRUFBUSxFQUFRLEtBQ2hCUyxFQUFjLEVBQVEsS0E0RDFCNWlDLEVBQU9ELFFBNUNQLFNBQXFCNEIsRUFBUTJGLEVBQVE2ekYsRUFBV3I0RCxHQUM5QyxJQUFJOXhCLEVBQVFtcUYsRUFBVXYyRixPQUNsQkEsRUFBU29NLEVBQ1RvcUYsR0FBZ0J0NEQsRUFFcEIsR0FBYyxNQUFWbmhDLEVBQ0YsT0FBUWlELEVBR1YsSUFEQWpELEVBQVNoQixPQUFPZ0IsR0FDVHFQLEtBQVMsQ0FDZCxJQUFJdkQsRUFBTzB0RixFQUFVbnFGLEdBQ3JCLEdBQUtvcUYsR0FBZ0IzdEYsRUFBSyxHQUNsQkEsRUFBSyxLQUFPOUwsRUFBTzhMLEVBQUssTUFDdEJBLEVBQUssS0FBTTlMLEdBRW5CLE9BQU8sRUFHWCxPQUFTcVAsRUFBUXBNLEdBQVEsQ0FFdkIsSUFBSXBELEdBREppTSxFQUFPMHRGLEVBQVVucUYsSUFDRixHQUNYcXFGLEVBQVcxNUYsRUFBT0gsR0FDbEJ3akMsRUFBV3YzQixFQUFLLEdBRXBCLEdBQUkydEYsR0FBZ0IzdEYsRUFBSyxJQUN2QixRQUFpQi9CLElBQWIydkYsS0FBNEI3NUYsS0FBT0csR0FDckMsT0FBTyxNQUVKLENBQ0wsSUFBSXNRLEVBQVEsSUFBSWt3QixFQUNoQixHQUFJVyxFQUNGLElBQUlyL0IsRUFBU3EvQixFQUFXdTRELEVBQVVyMkQsRUFBVXhqQyxFQUFLRyxFQUFRMkYsRUFBUTJLLEdBRW5FLFVBQWlCdkcsSUFBWGpJLEVBQ0VtL0IsRUFBWW9DLEVBQVVxMkQsRUFBVUMsRUFBK0N4NEQsRUFBWTd3QixHQUMzRnhPLEdBRU4sT0FBTyxHQUliLE9BQU8sSSxjQzlDVHpELEVBQU9ELFFBTFAsV0FDRTJDLEtBQUs0cEIsU0FBVyxHQUNoQjVwQixLQUFLMC9CLEtBQU8sSSxnQkNUZCxJQUFJbTVELEVBQWUsRUFBUSxJQU12QnBxRixFQUhhOU8sTUFBTVIsVUFHQ3NQLE9BNEJ4Qm5SLEVBQU9ELFFBakJQLFNBQXlCeUIsR0FDdkIsSUFBSWlNLEVBQU8vSyxLQUFLNHBCLFNBQ1p0YixFQUFRdXFGLEVBQWE5dEYsRUFBTWpNLEdBRS9CLFFBQUl3UCxFQUFRLEtBSVJBLEdBRFl2RCxFQUFLN0ksT0FBUyxFQUU1QjZJLEVBQUs5SSxNQUVMd00sRUFBTy9RLEtBQUtxTixFQUFNdUQsRUFBTyxLQUV6QnRPLEtBQUswL0IsTUFDQSxLLGdCQy9CVCxJQUFJbTVELEVBQWUsRUFBUSxJQWtCM0J2N0YsRUFBT0QsUUFQUCxTQUFzQnlCLEdBQ3BCLElBQUlpTSxFQUFPL0ssS0FBSzRwQixTQUNadGIsRUFBUXVxRixFQUFhOXRGLEVBQU1qTSxHQUUvQixPQUFPd1AsRUFBUSxPQUFJdEYsRUFBWStCLEVBQUt1RCxHQUFPLEssZ0JDZjdDLElBQUl1cUYsRUFBZSxFQUFRLElBZTNCdjdGLEVBQU9ELFFBSlAsU0FBc0J5QixHQUNwQixPQUFPKzVGLEVBQWE3NEYsS0FBSzRwQixTQUFVOXFCLElBQVEsSSxnQkNaN0MsSUFBSSs1RixFQUFlLEVBQVEsSUF5QjNCdjdGLEVBQU9ELFFBYlAsU0FBc0J5QixFQUFLTixHQUN6QixJQUFJdU0sRUFBTy9LLEtBQUs0cEIsU0FDWnRiLEVBQVF1cUYsRUFBYTl0RixFQUFNak0sR0FRL0IsT0FOSXdQLEVBQVEsS0FDUnRPLEtBQUswL0IsS0FDUDMwQixFQUFLNUksS0FBSyxDQUFDckQsRUFBS04sS0FFaEJ1TSxFQUFLdUQsR0FBTyxHQUFLOVAsRUFFWndCLE8sZ0JDdEJULElBQUlrcEIsRUFBWSxFQUFRLElBY3hCNXJCLEVBQU9ELFFBTFAsV0FDRTJDLEtBQUs0cEIsU0FBVyxJQUFJVixFQUNwQmxwQixLQUFLMC9CLEtBQU8sSSxjQ01kcGlDLEVBQU9ELFFBUlAsU0FBcUJ5QixHQUNuQixJQUFJaU0sRUFBTy9LLEtBQUs0cEIsU0FDWjdvQixFQUFTZ0ssRUFBYSxPQUFFak0sR0FHNUIsT0FEQWtCLEtBQUswL0IsS0FBTzMwQixFQUFLMjBCLEtBQ1YzK0IsSSxjQ0RUekQsRUFBT0QsUUFKUCxTQUFrQnlCLEdBQ2hCLE9BQU9rQixLQUFLNHBCLFNBQVN4ckIsSUFBSVUsSyxjQ0czQnhCLEVBQU9ELFFBSlAsU0FBa0J5QixHQUNoQixPQUFPa0IsS0FBSzRwQixTQUFTTCxJQUFJenFCLEssZ0JDVjNCLElBQUlvcUIsRUFBWSxFQUFRLElBQ3BCcUYsRUFBTSxFQUFRLEtBQ2RvTCxFQUFXLEVBQVEsS0ErQnZCcjhCLEVBQU9ELFFBaEJQLFNBQWtCeUIsRUFBS04sR0FDckIsSUFBSXVNLEVBQU8vSyxLQUFLNHBCLFNBQ2hCLEdBQUk3ZSxhQUFnQm1lLEVBQVcsQ0FDN0IsSUFBSXVmLEVBQVExOUIsRUFBSzZlLFNBQ2pCLElBQUsyRSxHQUFRa2EsRUFBTXZtQyxPQUFTNDJGLElBRzFCLE9BRkFyd0QsRUFBTXRtQyxLQUFLLENBQUNyRCxFQUFLTixJQUNqQndCLEtBQUswL0IsT0FBUzMwQixFQUFLMjBCLEtBQ1oxL0IsS0FFVCtLLEVBQU8vSyxLQUFLNHBCLFNBQVcsSUFBSStQLEVBQVM4TyxHQUl0QyxPQUZBMTlCLEVBQUt1ZSxJQUFJeHFCLEVBQUtOLEdBQ2R3QixLQUFLMC9CLEtBQU8zMEIsRUFBSzIwQixLQUNWMS9CLE8sZ0JDOUJULElBQUkwRyxFQUFhLEVBQVEsS0FDckJxeUYsRUFBVyxFQUFRLEtBQ25CbjVELEVBQVcsRUFBUSxJQUNuQm81RCxFQUFXLEVBQVEsS0FTbkJDLEVBQWUsOEJBR2ZDLEVBQVl6b0YsU0FBU3RSLFVBQ3JCcTVCLEVBQWN2NkIsT0FBT2tCLFVBR3JCNGdDLEVBQWVtNUQsRUFBVW52RixTQUd6QjNLLEVBQWlCbzVCLEVBQVlwNUIsZUFHN0IrNUYsRUFBYXR1QyxPQUFPLElBQ3RCOXFCLEVBQWFyaUMsS0FBSzBCLEdBQWdCeVQsUUFqQmpCLHNCQWlCdUMsUUFDdkRBLFFBQVEseURBQTBELFNBQVcsS0FtQmhGdlYsRUFBT0QsUUFSUCxTQUFzQm1CLEdBQ3BCLFNBQUtvaEMsRUFBU3BoQyxJQUFVdTZGLEVBQVN2NkYsTUFHbkJrSSxFQUFXbEksR0FBUzI2RixFQUFhRixHQUNoQ2p2RixLQUFLZ3ZGLEVBQVN4NkYsTSxnQkMzQy9CLElBQUlGLEVBQVMsRUFBUSxJQUdqQms2QixFQUFjdjZCLE9BQU9rQixVQUdyQkMsRUFBaUJvNUIsRUFBWXA1QixlQU83Qmc2RixFQUF1QjVnRSxFQUFZenVCLFNBR25DMFksRUFBaUJua0IsRUFBU0EsRUFBT0MsaUJBQWN5SyxFQTZCbkQxTCxFQUFPRCxRQXBCUCxTQUFtQm1CLEdBQ2pCLElBQUk2NkYsRUFBUWo2RixFQUFlMUIsS0FBS2MsRUFBT2lrQixHQUNuQ29kLEVBQU1yaEMsRUFBTWlrQixHQUVoQixJQUNFamtCLEVBQU1pa0IsUUFBa0J6WixFQUN4QixJQUFJc3dGLEdBQVcsRUFDZixNQUFPejRGLElBRVQsSUFBSUUsRUFBU3E0RixFQUFxQjE3RixLQUFLYyxHQVF2QyxPQVBJODZGLElBQ0VELEVBQ0Y3NkYsRUFBTWlrQixHQUFrQm9kLFNBRWpCcmhDLEVBQU1pa0IsSUFHVjFoQixJLGNDekNULElBT0lxNEYsRUFQY243RixPQUFPa0IsVUFPYzRLLFNBYXZDek0sRUFBT0QsUUFKUCxTQUF3Qm1CLEdBQ3RCLE9BQU80NkYsRUFBcUIxN0YsS0FBS2MsSyxnQkNsQm5DLElBSU0rNkYsRUFKRkMsRUFBYSxFQUFRLEtBR3JCQyxHQUNFRixFQUFNLFNBQVMzMEMsS0FBSzQwQyxHQUFjQSxFQUFXLzRFLE1BQVErNEUsRUFBVy80RSxLQUFLaTVFLFVBQVksS0FDdkUsaUJBQW1CSCxFQUFPLEdBYzFDajhGLEVBQU9ELFFBSlAsU0FBa0IyaUMsR0FDaEIsUUFBU3k1RCxHQUFlQSxLQUFjejVELEksZ0JDaEJ4QyxJQUdJdzVELEVBSE8sRUFBUSxJQUdHLHNCQUV0Qmw4RixFQUFPRCxRQUFVbThGLEcsY0NPakJsOEYsRUFBT0QsUUFKUCxTQUFrQjRCLEVBQVFILEdBQ3hCLE9BQWlCLE1BQVZHLE9BQWlCK0osRUFBWS9KLEVBQU9ILEssZ0JDVDdDLElBQUk2NkYsRUFBTyxFQUFRLEtBQ2Z6d0UsRUFBWSxFQUFRLElBQ3BCcUYsRUFBTSxFQUFRLEtBa0JsQmp4QixFQUFPRCxRQVRQLFdBQ0UyQyxLQUFLMC9CLEtBQU8sRUFDWjEvQixLQUFLNHBCLFNBQVcsQ0FDZCxLQUFRLElBQUkrdkUsRUFDWixJQUFPLElBQUtwckUsR0FBT3JGLEdBQ25CLE9BQVUsSUFBSXl3RSxLLGdCQ2hCbEIsSUFBSUMsRUFBWSxFQUFRLEtBQ3BCQyxFQUFhLEVBQVEsS0FDckJDLEVBQVUsRUFBUSxLQUNsQkMsRUFBVSxFQUFRLEtBQ2xCQyxFQUFVLEVBQVEsS0FTdEIsU0FBU0wsRUFBS3h3RSxHQUNaLElBQUk3YSxHQUFTLEVBQ1RwTSxFQUFvQixNQUFYaW5CLEVBQWtCLEVBQUlBLEVBQVFqbkIsT0FHM0MsSUFEQWxDLEtBQUtvcEIsVUFDSTlhLEVBQVFwTSxHQUFRLENBQ3ZCLElBQUltbkIsRUFBUUYsRUFBUTdhLEdBQ3BCdE8sS0FBS3NwQixJQUFJRCxFQUFNLEdBQUlBLEVBQU0sS0FLN0Jzd0UsRUFBS3g2RixVQUFVaXFCLE1BQVF3d0UsRUFDdkJELEVBQUt4NkYsVUFBa0IsT0FBSTA2RixFQUMzQkYsRUFBS3g2RixVQUFVZixJQUFNMDdGLEVBQ3JCSCxFQUFLeDZGLFVBQVVvcUIsSUFBTXd3RSxFQUNyQkosRUFBS3g2RixVQUFVbXFCLElBQU0wd0UsRUFFckIxOEYsRUFBT0QsUUFBVXM4RixHLGdCQy9CakIsSUFBSWx3RSxFQUFlLEVBQVEsSUFjM0Juc0IsRUFBT0QsUUFMUCxXQUNFMkMsS0FBSzRwQixTQUFXSCxFQUFlQSxFQUFhLE1BQVEsR0FDcER6cEIsS0FBSzAvQixLQUFPLEksY0NLZHBpQyxFQUFPRCxRQU5QLFNBQW9CeUIsR0FDbEIsSUFBSWlDLEVBQVNmLEtBQUt1cEIsSUFBSXpxQixXQUFla0IsS0FBSzRwQixTQUFTOXFCLEdBRW5ELE9BREFrQixLQUFLMC9CLE1BQVEzK0IsRUFBUyxFQUFJLEVBQ25CQSxJLGdCQ2JULElBQUkwb0IsRUFBZSxFQUFRLElBU3ZCcnFCLEVBSGNuQixPQUFPa0IsVUFHUUMsZUFvQmpDOUIsRUFBT0QsUUFUUCxTQUFpQnlCLEdBQ2YsSUFBSWlNLEVBQU8vSyxLQUFLNHBCLFNBQ2hCLEdBQUlILEVBQWMsQ0FDaEIsSUFBSTFvQixFQUFTZ0ssRUFBS2pNLEdBQ2xCLE1BckJpQiw4QkFxQlZpQyxPQUE0QmlJLEVBQVlqSSxFQUVqRCxPQUFPM0IsRUFBZTFCLEtBQUtxTixFQUFNak0sR0FBT2lNLEVBQUtqTSxRQUFPa0ssSSxnQkMxQnRELElBQUl5Z0IsRUFBZSxFQUFRLElBTXZCcnFCLEVBSGNuQixPQUFPa0IsVUFHUUMsZUFnQmpDOUIsRUFBT0QsUUFMUCxTQUFpQnlCLEdBQ2YsSUFBSWlNLEVBQU8vSyxLQUFLNHBCLFNBQ2hCLE9BQU9ILE9BQThCemdCLElBQWQrQixFQUFLak0sR0FBc0JNLEVBQWUxQixLQUFLcU4sRUFBTWpNLEssZ0JDbkI5RSxJQUFJMnFCLEVBQWUsRUFBUSxJQXNCM0Juc0IsRUFBT0QsUUFQUCxTQUFpQnlCLEVBQUtOLEdBQ3BCLElBQUl1TSxFQUFPL0ssS0FBSzRwQixTQUdoQixPQUZBNXBCLEtBQUswL0IsTUFBUTEvQixLQUFLdXBCLElBQUl6cUIsR0FBTyxFQUFJLEVBQ2pDaU0sRUFBS2pNLEdBQVEycUIsUUFBMEJ6Z0IsSUFBVnhLLEVBZlYsNEJBZWtEQSxFQUM5RHdCLE8sZ0JDbkJULElBQUlpNkYsRUFBYSxFQUFRLElBaUJ6QjM4RixFQUFPRCxRQU5QLFNBQXdCeUIsR0FDdEIsSUFBSWlDLEVBQVNrNUYsRUFBV2o2RixLQUFNbEIsR0FBYSxPQUFFQSxHQUU3QyxPQURBa0IsS0FBSzAvQixNQUFRMytCLEVBQVMsRUFBSSxFQUNuQkEsSSxjQ0FUekQsRUFBT0QsUUFQUCxTQUFtQm1CLEdBQ2pCLElBQUlzbkIsU0FBY3RuQixFQUNsQixNQUFnQixVQUFSc25CLEdBQTRCLFVBQVJBLEdBQTRCLFVBQVJBLEdBQTRCLFdBQVJBLEVBQ3JELGNBQVZ0bkIsRUFDVSxPQUFWQSxJLGdCQ1hQLElBQUl5N0YsRUFBYSxFQUFRLElBZXpCMzhGLEVBQU9ELFFBSlAsU0FBcUJ5QixHQUNuQixPQUFPbTdGLEVBQVdqNkYsS0FBTWxCLEdBQUtWLElBQUlVLEssZ0JDWm5DLElBQUltN0YsRUFBYSxFQUFRLElBZXpCMzhGLEVBQU9ELFFBSlAsU0FBcUJ5QixHQUNuQixPQUFPbTdGLEVBQVdqNkYsS0FBTWxCLEdBQUt5cUIsSUFBSXpxQixLLGdCQ1puQyxJQUFJbTdGLEVBQWEsRUFBUSxJQXFCekIzOEYsRUFBT0QsUUFUUCxTQUFxQnlCLEVBQUtOLEdBQ3hCLElBQUl1TSxFQUFPa3ZGLEVBQVdqNkYsS0FBTWxCLEdBQ3hCNGdDLEVBQU8zMEIsRUFBSzIwQixLQUloQixPQUZBMzBCLEVBQUt1ZSxJQUFJeHFCLEVBQUtOLEdBQ2R3QixLQUFLMC9CLE1BQVEzMEIsRUFBSzIwQixNQUFRQSxFQUFPLEVBQUksRUFDOUIxL0IsTyxnQkNsQlQsSUFBSXkvQixFQUFRLEVBQVEsS0FDaEJ5NkQsRUFBYyxFQUFRLEtBQ3RCQyxFQUFhLEVBQVEsS0FDckJDLEVBQWUsRUFBUSxLQUN2QkMsRUFBUyxFQUFRLEtBQ2pCaHhGLEVBQVUsRUFBUSxJQUNsQnE0QixFQUFXLEVBQVEsS0FDbkJVLEVBQWUsRUFBUSxLQVF2Qms0RCxFQUFZLGtCQU1abDdGLEVBSGNuQixPQUFPa0IsVUFHUUMsZUE2RGpDOUIsRUFBT0QsUUE3Q1AsU0FBeUI0QixFQUFRMGdDLEVBQU9RLEVBQVNDLEVBQVlJLEVBQVdqeEIsR0FDdEUsSUFBSWdyRixFQUFXbHhGLEVBQVFwSyxHQUNuQnU3RixFQUFXbnhGLEVBQVFzMkIsR0FDbkI4NkQsRUFBU0YsRUExQkEsaUJBMEJzQkYsRUFBT3A3RixHQUN0Q3k3RixFQUFTRixFQTNCQSxpQkEyQnNCSCxFQUFPMTZELEdBS3RDZzdELEdBSEpGLEVBOUJZLHNCQThCSEEsRUFBb0JILEVBQVlHLElBR2hCSCxFQUNyQk0sR0FISkYsRUEvQlksc0JBK0JIQSxFQUFvQkosRUFBWUksSUFHaEJKLEVBQ3JCTyxFQUFZSixHQUFVQyxFQUUxQixHQUFJRyxHQUFhbjVELEVBQVN6aUMsR0FBUyxDQUNqQyxJQUFLeWlDLEVBQVMvQixHQUNaLE9BQU8sRUFFVDQ2RCxHQUFXLEVBQ1hJLEdBQVcsRUFFYixHQUFJRSxJQUFjRixFQUVoQixPQURBcHJGLElBQVVBLEVBQVEsSUFBSWt3QixHQUNkODZELEdBQVluNEQsRUFBYW5qQyxHQUM3Qmk3RixFQUFZajdGLEVBQVEwZ0MsRUFBT1EsRUFBU0MsRUFBWUksRUFBV2p4QixHQUMzRDRxRixFQUFXbDdGLEVBQVEwZ0MsRUFBTzg2RCxFQUFRdDZELEVBQVNDLEVBQVlJLEVBQVdqeEIsR0FFeEUsS0FyRHlCLEVBcURuQjR3QixHQUFpQyxDQUNyQyxJQUFJMjZELEVBQWVILEdBQVl2N0YsRUFBZTFCLEtBQUt1QixFQUFRLGVBQ3ZEODdGLEVBQWVILEdBQVl4N0YsRUFBZTFCLEtBQUtpaUMsRUFBTyxlQUUxRCxHQUFJbTdELEdBQWdCQyxFQUFjLENBQ2hDLElBQUlDLEVBQWVGLEVBQWU3N0YsRUFBT1QsUUFBVVMsRUFDL0NnOEYsRUFBZUYsRUFBZXA3RCxFQUFNbmhDLFFBQVVtaEMsRUFHbEQsT0FEQXB3QixJQUFVQSxFQUFRLElBQUlrd0IsR0FDZmUsRUFBVXc2RCxFQUFjQyxFQUFjOTZELEVBQVNDLEVBQVk3d0IsSUFHdEUsUUFBS3NyRixJQUdMdHJGLElBQVVBLEVBQVEsSUFBSWt3QixHQUNmMjZELEVBQWFuN0YsRUFBUTBnQyxFQUFPUSxFQUFTQyxFQUFZSSxFQUFXanhCLE0sZ0JDL0VyRSxJQUFJb3FCLEVBQVcsRUFBUSxLQUNuQnVoRSxFQUFjLEVBQVEsS0FDdEJDLEVBQWMsRUFBUSxLQVUxQixTQUFTOTZELEVBQVMxZixHQUNoQixJQUFJclMsR0FBUyxFQUNUcE0sRUFBbUIsTUFBVnllLEVBQWlCLEVBQUlBLEVBQU96ZSxPQUd6QyxJQURBbEMsS0FBSzRwQixTQUFXLElBQUkrUCxJQUNYcnJCLEVBQVFwTSxHQUNmbEMsS0FBS2lILElBQUkwWixFQUFPclMsSUFLcEIreEIsRUFBU2xoQyxVQUFVOEgsSUFBTW81QixFQUFTbGhDLFVBQVVnRCxLQUFPKzRGLEVBQ25ENzZELEVBQVNsaEMsVUFBVW9xQixJQUFNNHhFLEVBRXpCNzlGLEVBQU9ELFFBQVVnakMsRyxjQ1JqQi9pQyxFQUFPRCxRQUxQLFNBQXFCbUIsR0FFbkIsT0FEQXdCLEtBQUs0cEIsU0FBU04sSUFBSTlxQixFQWJDLDZCQWNad0IsTyxjQ0ZUMUMsRUFBT0QsUUFKUCxTQUFxQm1CLEdBQ25CLE9BQU93QixLQUFLNHBCLFNBQVNMLElBQUkvcUIsSyxjQ1kzQmxCLEVBQU9ELFFBWlAsU0FBbUJrSSxFQUFPOEksR0FJeEIsSUFIQSxJQUFJQyxHQUFTLEVBQ1RwTSxFQUFrQixNQUFUcUQsRUFBZ0IsRUFBSUEsRUFBTXJELFNBRTlCb00sRUFBUXBNLEdBQ2YsR0FBSW1NLEVBQVU5SSxFQUFNK0ksR0FBUUEsRUFBTy9JLEdBQ2pDLE9BQU8sRUFHWCxPQUFPLEksY0NQVGpJLEVBQU9ELFFBSlAsU0FBa0IrOUYsRUFBT3Q4RixHQUN2QixPQUFPczhGLEVBQU03eEUsSUFBSXpxQixLLGdCQ1RuQixJQUFJUixFQUFTLEVBQVEsSUFDakIyc0UsRUFBYSxFQUFRLEtBQ3JCemhELEVBQUssRUFBUSxLQUNiMHdFLEVBQWMsRUFBUSxLQUN0Qm1CLEVBQWEsRUFBUSxLQUNyQkMsRUFBYSxFQUFRLEtBcUJyQkMsRUFBY2o5RixFQUFTQSxFQUFPYSxlQUFZNkosRUFDMUN3eUYsRUFBZ0JELEVBQWNBLEVBQVlFLGFBQVV6eUYsRUFvRnhEMUwsRUFBT0QsUUFqRVAsU0FBb0I0QixFQUFRMGdDLEVBQU9FLEVBQUtNLEVBQVNDLEVBQVlJLEVBQVdqeEIsR0FDdEUsT0FBUXN3QixHQUNOLElBekJjLG9CQTBCWixHQUFLNWdDLEVBQU95OEYsWUFBYy83RCxFQUFNKzdELFlBQzNCejhGLEVBQU8wOEYsWUFBY2g4RCxFQUFNZzhELFdBQzlCLE9BQU8sRUFFVDE4RixFQUFTQSxFQUFPc2UsT0FDaEJvaUIsRUFBUUEsRUFBTXBpQixPQUVoQixJQWxDaUIsdUJBbUNmLFFBQUt0ZSxFQUFPeThGLFlBQWMvN0QsRUFBTSs3RCxhQUMzQmw3RCxFQUFVLElBQUl5cUMsRUFBV2hzRSxHQUFTLElBQUlnc0UsRUFBV3RyQyxLQUt4RCxJQW5EVSxtQkFvRFYsSUFuRFUsZ0JBb0RWLElBakRZLGtCQW9EVixPQUFPblcsR0FBSXZxQixHQUFTMGdDLEdBRXRCLElBeERXLGlCQXlEVCxPQUFPMWdDLEVBQU9uQixNQUFRNmhDLEVBQU03aEMsTUFBUW1CLEVBQU8wUCxTQUFXZ3hCLEVBQU1oeEIsUUFFOUQsSUF4RFksa0JBeURaLElBdkRZLGtCQTJEVixPQUFPMVAsR0FBVzBnQyxFQUFRLEdBRTVCLElBakVTLGVBa0VQLElBQUlpOEQsRUFBVVAsRUFFaEIsSUFqRVMsZUFrRVAsSUFBSTU2RCxFQTVFaUIsRUE0RUxOLEVBR2hCLEdBRkF5N0QsSUFBWUEsRUFBVU4sR0FFbEJyOEYsRUFBT3lnQyxNQUFRQyxFQUFNRCxPQUFTZSxFQUNoQyxPQUFPLEVBR1QsSUFBSW83RCxFQUFVdHNGLEVBQU1uUixJQUFJYSxHQUN4QixHQUFJNDhGLEVBQ0YsT0FBT0EsR0FBV2w4RCxFQUVwQlEsR0F0RnVCLEVBeUZ2QjV3QixFQUFNK1osSUFBSXJxQixFQUFRMGdDLEdBQ2xCLElBQUk1K0IsRUFBU201RixFQUFZMEIsRUFBUTM4RixHQUFTMjhGLEVBQVFqOEQsR0FBUVEsRUFBU0MsRUFBWUksRUFBV2p4QixHQUUxRixPQURBQSxFQUFjLE9BQUV0USxHQUNUOEIsRUFFVCxJQW5GWSxrQkFvRlYsR0FBSXk2RixFQUNGLE9BQU9BLEVBQWM5OUYsS0FBS3VCLElBQVd1OEYsRUFBYzk5RixLQUFLaWlDLEdBRzlELE9BQU8sSSxnQkM1R1QsSUFHSXNyQyxFQUhPLEVBQVEsSUFHR0EsV0FFdEIzdEUsRUFBT0QsUUFBVTR0RSxHLGNDWWpCM3RFLEVBQU9ELFFBVlAsU0FBb0I4TixHQUNsQixJQUFJbUQsR0FBUyxFQUNUdk4sRUFBU3BCLE1BQU13TCxFQUFJdTBCLE1BS3ZCLE9BSEF2MEIsRUFBSS9ELFNBQVEsU0FBUzVJLEVBQU9NLEdBQzFCaUMsSUFBU3VOLEdBQVMsQ0FBQ3hQLEVBQUtOLE1BRW5CdUMsSSxjQ0dUekQsRUFBT0QsUUFWUCxTQUFvQmlzQixHQUNsQixJQUFJaGIsR0FBUyxFQUNUdk4sRUFBU3BCLE1BQU0ycEIsRUFBSW9XLE1BS3ZCLE9BSEFwVyxFQUFJbGlCLFNBQVEsU0FBUzVJLEdBQ25CdUMsSUFBU3VOLEdBQVM5UCxLQUVidUMsSSxnQkNkVCxJQUFJKzZGLEVBQWEsRUFBUSxLQVNyQjE4RixFQUhjbkIsT0FBT2tCLFVBR1FDLGVBZ0ZqQzlCLEVBQU9ELFFBakVQLFNBQXNCNEIsRUFBUTBnQyxFQUFPUSxFQUFTQyxFQUFZSSxFQUFXanhCLEdBQ25FLElBQUlreEIsRUF0QnFCLEVBc0JUTixFQUNaNDdELEVBQVdELEVBQVc3OEYsR0FDdEIrOEYsRUFBWUQsRUFBUzc1RixPQUl6QixHQUFJODVGLEdBSFdGLEVBQVduOEQsR0FDRHo5QixTQUVNdStCLEVBQzdCLE9BQU8sRUFHVCxJQURBLElBQUlueUIsRUFBUTB0RixFQUNMMXRGLEtBQVMsQ0FDZCxJQUFJeFAsRUFBTWk5RixFQUFTenRGLEdBQ25CLEtBQU1teUIsRUFBWTNoQyxLQUFPNmdDLEVBQVF2Z0MsRUFBZTFCLEtBQUtpaUMsRUFBTzdnQyxJQUMxRCxPQUFPLEVBSVgsSUFBSW05RixFQUFhMXNGLEVBQU1uUixJQUFJYSxHQUN2QjRoQyxFQUFhdHhCLEVBQU1uUixJQUFJdWhDLEdBQzNCLEdBQUlzOEQsR0FBY3A3RCxFQUNoQixPQUFPbzdELEdBQWN0OEQsR0FBU2tCLEdBQWM1aEMsRUFFOUMsSUFBSThCLEdBQVMsRUFDYndPLEVBQU0rWixJQUFJcnFCLEVBQVEwZ0MsR0FDbEJwd0IsRUFBTStaLElBQUlxVyxFQUFPMWdDLEdBR2pCLElBREEsSUFBSWk5RixFQUFXejdELElBQ05ueUIsRUFBUTB0RixHQUFXLENBRTFCLElBQUlyRCxFQUFXMTVGLEVBRGZILEVBQU1pOUYsRUFBU3p0RixJQUVYeXlCLEVBQVdwQixFQUFNN2dDLEdBRXJCLEdBQUlzaEMsRUFDRixJQUFJWSxFQUFXUCxFQUNYTCxFQUFXVyxFQUFVNDNELEVBQVU3NUYsRUFBSzZnQyxFQUFPMWdDLEVBQVFzUSxHQUNuRDZ3QixFQUFXdTRELEVBQVU1M0QsRUFBVWppQyxFQUFLRyxFQUFRMGdDLEVBQU9wd0IsR0FHekQsVUFBbUJ2RyxJQUFiZzRCLEVBQ0cyM0QsSUFBYTUzRCxHQUFZUCxFQUFVbTRELEVBQVU1M0QsRUFBVVosRUFBU0MsRUFBWTd3QixHQUM3RXl4QixHQUNELENBQ0xqZ0MsR0FBUyxFQUNULE1BRUZtN0YsSUFBYUEsRUFBa0IsZUFBUHA5RixHQUUxQixHQUFJaUMsSUFBV203RixFQUFVLENBQ3ZCLElBQUlDLEVBQVVsOUYsRUFBT2dCLFlBQ2pCbThGLEVBQVV6OEQsRUFBTTEvQixZQUdoQms4RixHQUFXQyxLQUNWLGdCQUFpQm45RixNQUFVLGdCQUFpQjBnQyxJQUN6QixtQkFBWHc4RCxHQUF5QkEsYUFBbUJBLEdBQ2pDLG1CQUFYQyxHQUF5QkEsYUFBbUJBLElBQ3ZEcjdGLEdBQVMsR0FLYixPQUZBd08sRUFBYyxPQUFFdFEsR0FDaEJzUSxFQUFjLE9BQUVvd0IsR0FDVDUrQixJLGdCQ3RGVCxJQUFJczdGLEVBQWlCLEVBQVEsS0FDekJDLEVBQWEsRUFBUSxLQUNyQjc3RSxFQUFPLEVBQVEsS0FhbkJuakIsRUFBT0QsUUFKUCxTQUFvQjRCLEdBQ2xCLE9BQU9vOUYsRUFBZXA5RixFQUFRd2hCLEVBQU02N0UsSyxnQkNadEMsSUFBSUMsRUFBWSxFQUFRLEtBQ3BCbHpGLEVBQVUsRUFBUSxJQWtCdEIvTCxFQUFPRCxRQUxQLFNBQXdCNEIsRUFBUXU5RixFQUFVQyxHQUN4QyxJQUFJMTdGLEVBQVN5N0YsRUFBU3Y5RixHQUN0QixPQUFPb0ssRUFBUXBLLEdBQVU4QixFQUFTdzdGLEVBQVV4N0YsRUFBUTA3RixFQUFZeDlGLE0sY0NHbEUzQixFQUFPRCxRQVhQLFNBQW1Ca0ksRUFBT29iLEdBS3hCLElBSkEsSUFBSXJTLEdBQVMsRUFDVHBNLEVBQVN5ZSxFQUFPemUsT0FDaEIwcEQsRUFBU3JtRCxFQUFNckQsU0FFVm9NLEVBQVFwTSxHQUNmcUQsRUFBTXFtRCxFQUFTdDlDLEdBQVNxUyxFQUFPclMsR0FFakMsT0FBTy9JLEksZ0JDaEJULElBQUltM0YsRUFBYyxFQUFRLEtBQ3RCQyxFQUFZLEVBQVEsS0FNcEJ4N0QsRUFIY2xqQyxPQUFPa0IsVUFHY2dpQyxxQkFHbkN5N0QsRUFBbUIzK0YsT0FBT3FzQyxzQkFTMUJneUQsRUFBY00sRUFBK0IsU0FBUzM5RixHQUN4RCxPQUFjLE1BQVZBLEVBQ0ssSUFFVEEsRUFBU2hCLE9BQU9nQixHQUNUeTlGLEVBQVlFLEVBQWlCMzlGLElBQVMsU0FBUzQ5RixHQUNwRCxPQUFPMTdELEVBQXFCempDLEtBQUt1QixFQUFRNDlGLFFBTlJGLEVBVXJDci9GLEVBQU9ELFFBQVVpL0YsRyxjQ0xqQmgvRixFQUFPRCxRQWZQLFNBQXFCa0ksRUFBTzhJLEdBTTFCLElBTEEsSUFBSUMsR0FBUyxFQUNUcE0sRUFBa0IsTUFBVHFELEVBQWdCLEVBQUlBLEVBQU1yRCxPQUNuQzQ2RixFQUFXLEVBQ1gvN0YsRUFBUyxLQUVKdU4sRUFBUXBNLEdBQVEsQ0FDdkIsSUFBSTFELEVBQVErRyxFQUFNK0ksR0FDZEQsRUFBVTdQLEVBQU84UCxFQUFPL0ksS0FDMUJ4RSxFQUFPKzdGLEtBQWN0K0YsR0FHekIsT0FBT3VDLEksY0NDVHpELEVBQU9ELFFBSlAsV0FDRSxNQUFPLEssZ0JDbkJULElBQUkwL0YsRUFBWSxFQUFRLEtBQ3BCMzdELEVBQWMsRUFBUSxLQUN0Qi8zQixFQUFVLEVBQVEsSUFDbEJxNEIsRUFBVyxFQUFRLEtBQ25CczdELEVBQVUsRUFBUSxLQUNsQjU2RCxFQUFlLEVBQVEsS0FNdkJoakMsRUFIY25CLE9BQU9rQixVQUdRQyxlQXFDakM5QixFQUFPRCxRQTNCUCxTQUF1Qm1CLEVBQU95K0YsR0FDNUIsSUFBSUMsRUFBUTd6RixFQUFRN0ssR0FDaEIyK0YsR0FBU0QsR0FBUzk3RCxFQUFZNWlDLEdBQzlCNCtGLEdBQVVGLElBQVVDLEdBQVN6N0QsRUFBU2xqQyxHQUN0QzYrRixHQUFVSCxJQUFVQyxJQUFVQyxHQUFVaDdELEVBQWE1akMsR0FDckQ4K0YsRUFBY0osR0FBU0MsR0FBU0MsR0FBVUMsRUFDMUN0OEYsRUFBU3U4RixFQUFjUCxFQUFVditGLEVBQU0wRCxPQUFRcEMsUUFBVSxHQUN6RG9DLEVBQVNuQixFQUFPbUIsT0FFcEIsSUFBSyxJQUFJcEQsS0FBT04sR0FDVHkrRixJQUFhNzlGLEVBQWUxQixLQUFLYyxFQUFPTSxJQUN2Q3crRixJQUVRLFVBQVB4K0YsR0FFQ3MrRixJQUFrQixVQUFQdCtGLEdBQTBCLFVBQVBBLElBRTlCdStGLElBQWtCLFVBQVB2K0YsR0FBMEIsY0FBUEEsR0FBOEIsY0FBUEEsSUFFdERrK0YsRUFBUWwrRixFQUFLb0QsS0FFbEJuQixFQUFPb0IsS0FBS3JELEdBR2hCLE9BQU9pQyxJLGNDMUJUekQsRUFBT0QsUUFWUCxTQUFtQjJCLEVBQUdxNUYsR0FJcEIsSUFIQSxJQUFJL3BGLEdBQVMsRUFDVHZOLEVBQVNwQixNQUFNWCxLQUVWc1AsRUFBUXRQLEdBQ2YrQixFQUFPdU4sR0FBUytwRixFQUFTL3BGLEdBRTNCLE9BQU92TixJLGdCQ2hCVCxJQUFJOG9CLEVBQWEsRUFBUSxJQUNyQkMsRUFBZSxFQUFRLElBZ0IzQnhzQixFQUFPRCxRQUpQLFNBQXlCbUIsR0FDdkIsT0FBT3NyQixFQUFhdHJCLElBVlIsc0JBVWtCcXJCLEVBQVdyckIsSyxjQ0czQ2xCLEVBQU9ELFFBSlAsV0FDRSxPQUFPLEksZ0JDZFQsSUFBSXdzQixFQUFhLEVBQVEsSUFDckJ3WSxFQUFXLEVBQVEsS0FDbkJ2WSxFQUFlLEVBQVEsSUE4QnZCeXpFLEVBQWlCLEdBQ3JCQSxFQVppQix5QkFZWUEsRUFYWix5QkFZakJBLEVBWGMsc0JBV1lBLEVBVlgsdUJBV2ZBLEVBVmUsdUJBVVlBLEVBVFosdUJBVWZBLEVBVHNCLDhCQVNZQSxFQVJsQix3QkFTaEJBLEVBUmdCLHlCQVFZLEVBQzVCQSxFQWpDYyxzQkFpQ1lBLEVBaENYLGtCQWlDZkEsRUFwQnFCLHdCQW9CWUEsRUFoQ25CLG9CQWlDZEEsRUFwQmtCLHFCQW9CWUEsRUFoQ2hCLGlCQWlDZEEsRUFoQ2Usa0JBZ0NZQSxFQS9CYixxQkFnQ2RBLEVBL0JhLGdCQStCWUEsRUE5QlQsbUJBK0JoQkEsRUE5QmdCLG1CQThCWUEsRUE3QlosbUJBOEJoQkEsRUE3QmEsZ0JBNkJZQSxFQTVCVCxtQkE2QmhCQSxFQTVCaUIscUJBNEJZLEVBYzdCamdHLEVBQU9ELFFBTFAsU0FBMEJtQixHQUN4QixPQUFPc3JCLEVBQWF0ckIsSUFDbEI2akMsRUFBUzdqQyxFQUFNMEQsV0FBYXE3RixFQUFlMXpFLEVBQVdyckIsTSxjQzNDMURsQixFQUFPRCxRQU5QLFNBQW1CMmlDLEdBQ2pCLE9BQU8sU0FBU3hoQyxHQUNkLE9BQU93aEMsRUFBS3hoQyxNLGlCQ1RoQixrQkFBaUIsRUFBUSxLQUdyQjhpQyxFQUE0Q2prQyxJQUFZQSxFQUFRa2tDLFVBQVlsa0MsRUFHNUVta0MsRUFBYUYsR0FBZ0MsaUJBQVZoa0MsR0FBc0JBLElBQVdBLEVBQU9pa0MsVUFBWWprQyxFQU12RmtnRyxFQUhnQmg4RCxHQUFjQSxFQUFXbmtDLFVBQVlpa0MsR0FHdEJ4ckIsRUFBV3RQLFFBRzFDMDdCLEVBQVksV0FDZCxJQUVFLElBQUltWSxFQUFRN1ksR0FBY0EsRUFBV2p3QixTQUFXaXdCLEVBQVdqd0IsUUFBUSxRQUFROG9DLE1BRTNFLE9BQUlBLEdBS0dtakQsR0FBZUEsRUFBWUMsU0FBV0QsRUFBWUMsUUFBUSxRQUNqRSxNQUFPNThGLEtBWEksR0FjZnZELEVBQU9ELFFBQVU2a0MsSSxzQ0M3QmpCLElBQUl3N0QsRUFBYyxFQUFRLEtBQ3RCQyxFQUFhLEVBQVEsS0FNckJ2K0YsRUFIY25CLE9BQU9rQixVQUdRQyxlQXNCakM5QixFQUFPRCxRQWJQLFNBQWtCNEIsR0FDaEIsSUFBS3krRixFQUFZeitGLEdBQ2YsT0FBTzArRixFQUFXMStGLEdBRXBCLElBQUk4QixFQUFTLEdBQ2IsSUFBSyxJQUFJakMsS0FBT2IsT0FBT2dCLEdBQ2pCRyxFQUFlMUIsS0FBS3VCLEVBQVFILElBQWUsZUFBUEEsR0FDdENpQyxFQUFPb0IsS0FBS3JELEdBR2hCLE9BQU9pQyxJLGNDekJULElBQUl5M0IsRUFBY3Y2QixPQUFPa0IsVUFnQnpCN0IsRUFBT0QsUUFQUCxTQUFxQm1CLEdBQ25CLElBQUlvL0YsRUFBT3AvRixHQUFTQSxFQUFNeUIsWUFHMUIsT0FBT3pCLEtBRnFCLG1CQUFSby9GLEdBQXNCQSxFQUFLeitGLFdBQWNxNUIsSyxnQkNaL0QsSUFHSW1sRSxFQUhVLEVBQVEsSUFHTEUsQ0FBUTUvRixPQUFPd2lCLEtBQU14aUIsUUFFdENYLEVBQU9ELFFBQVVzZ0csRyxjQ1NqQnJnRyxFQUFPRCxRQU5QLFNBQWlCMmlDLEVBQU0zWixHQUNyQixPQUFPLFNBQVNzbUIsR0FDZCxPQUFPM00sRUFBSzNaLEVBQVVzbUIsTyxnQkNWMUIsSUFBSW14RCxFQUFXLEVBQVEsS0FDbkJ2dkUsRUFBTSxFQUFRLEtBQ2RodUIsRUFBVSxFQUFRLEtBQ2xCbXRCLEVBQU0sRUFBUSxLQUNkcXdFLEVBQVUsRUFBUSxLQUNsQmwwRSxFQUFhLEVBQVEsSUFDckJtdkUsRUFBVyxFQUFRLEtBWW5CZ0YsRUFBcUJoRixFQUFTOEUsR0FDOUJHLEVBQWdCakYsRUFBU3pxRSxHQUN6QjJ2RSxFQUFvQmxGLEVBQVN6NEYsR0FDN0I0OUYsRUFBZ0JuRixFQUFTdHJFLEdBQ3pCMHdFLEVBQW9CcEYsRUFBUytFLEdBUzdCMUQsRUFBU3h3RSxHQUdSaTBFLEdBbkJhLHFCQW1CRHpELEVBQU8sSUFBSXlELEVBQVMsSUFBSU8sWUFBWSxNQUNoRDl2RSxHQTFCUSxnQkEwQkQ4ckUsRUFBTyxJQUFJOXJFLElBQ2xCaHVCLEdBekJZLG9CQXlCRDg1RixFQUFPOTVGLEVBQVFDLFlBQzFCa3RCLEdBekJRLGdCQXlCRDJzRSxFQUFPLElBQUkzc0UsSUFDbEJxd0UsR0F6Qlksb0JBeUJEMUQsRUFBTyxJQUFJMEQsTUFDekIxRCxFQUFTLFNBQVM3N0YsR0FDaEIsSUFBSXVDLEVBQVM4b0IsRUFBV3JyQixHQUNwQm8vRixFQS9CUSxtQkErQkQ3OEYsRUFBc0J2QyxFQUFNeUIsaUJBQWMrSSxFQUNqRHMxRixFQUFhVixFQUFPNUUsRUFBUzRFLEdBQVEsR0FFekMsR0FBSVUsRUFDRixPQUFRQSxHQUNOLEtBQUtOLEVBQW9CLE1BL0JmLG9CQWdDVixLQUFLQyxFQUFlLE1BdENmLGVBdUNMLEtBQUtDLEVBQW1CLE1BckNmLG1CQXNDVCxLQUFLQyxFQUFlLE1BckNmLGVBc0NMLEtBQUtDLEVBQW1CLE1BckNmLG1CQXdDYixPQUFPcjlGLElBSVh6RCxFQUFPRCxRQUFVZzlGLEcsZ0JDekRqQixJQUlJeUQsRUFKWSxFQUFRLEdBSVRwMEUsQ0FISixFQUFRLElBR1ksWUFFL0Jwc0IsRUFBT0QsUUFBVXlnRyxHLGdCQ05qQixJQUlJdjlGLEVBSlksRUFBUSxHQUlWbXBCLENBSEgsRUFBUSxJQUdXLFdBRTlCcHNCLEVBQU9ELFFBQVVrRCxHLGdCQ05qQixJQUlJbXRCLEVBSlksRUFBUSxHQUlkaEUsQ0FIQyxFQUFRLElBR08sT0FFMUJwc0IsRUFBT0QsUUFBVXF3QixHLGdCQ05qQixJQUlJcXdFLEVBSlksRUFBUSxHQUlWcjBFLENBSEgsRUFBUSxJQUdXLFdBRTlCcHNCLEVBQU9ELFFBQVUwZ0csRyxnQkNOakIsSUFBSVEsRUFBcUIsRUFBUSxLQUM3Qjk5RSxFQUFPLEVBQVEsS0FzQm5CbmpCLEVBQU9ELFFBYlAsU0FBc0I0QixHQUlwQixJQUhBLElBQUk4QixFQUFTMGYsRUFBS3hoQixHQUNkaUQsRUFBU25CLEVBQU9tQixPQUViQSxLQUFVLENBQ2YsSUFBSXBELEVBQU1pQyxFQUFPbUIsR0FDYjFELEVBQVFTLEVBQU9ILEdBRW5CaUMsRUFBT21CLEdBQVUsQ0FBQ3BELEVBQUtOLEVBQU8rL0YsRUFBbUIvL0YsSUFFbkQsT0FBT3VDLEksZ0JDcEJULElBQUltL0IsRUFBYyxFQUFRLEtBQ3RCOWhDLEVBQU0sRUFBUSxLQUNkb2dHLEVBQVEsRUFBUSxLQUNoQi83RCxFQUFRLEVBQVEsS0FDaEI4N0QsRUFBcUIsRUFBUSxLQUM3Qi9GLEVBQTBCLEVBQVEsS0FDbENoMkQsRUFBUSxFQUFRLElBMEJwQmxsQyxFQUFPRCxRQVpQLFNBQTZCa1csRUFBTSt1QixHQUNqQyxPQUFJRyxFQUFNbHZCLElBQVNnckYsRUFBbUJqOEQsR0FDN0JrMkQsRUFBd0JoMkQsRUFBTWp2QixHQUFPK3VCLEdBRXZDLFNBQVNyakMsR0FDZCxJQUFJMDVGLEVBQVd2NkYsRUFBSWEsRUFBUXNVLEdBQzNCLFlBQXFCdkssSUFBYjJ2RixHQUEwQkEsSUFBYXIyRCxFQUMzQ2s4RCxFQUFNdi9GLEVBQVFzVSxHQUNkMnNCLEVBQVlvQyxFQUFVcTJELEVBQVVDLE0sZ0JDNUJ4QyxJQUFJNkYsRUFBVSxFQUFRLEtBZ0N0Qm5oRyxFQUFPRCxRQUxQLFNBQWE0QixFQUFRc1UsRUFBTXBLLEdBQ3pCLElBQUlwSSxFQUFtQixNQUFWOUIsT0FBaUIrSixFQUFZeTFGLEVBQVF4L0YsRUFBUXNVLEdBQzFELFlBQWtCdkssSUFBWGpJLEVBQXVCb0ksRUFBZXBJLEksZ0JDN0IvQyxJQUFJMjlGLEVBQWdCLEVBQVEsS0FHeEJDLEVBQWEsbUdBR2JDLEVBQWUsV0FTZmw4RCxFQUFlZzhELEdBQWMsU0FBU2hzRixHQUN4QyxJQUFJM1IsRUFBUyxHQU9iLE9BTjZCLEtBQXpCMlIsRUFBT21zRixXQUFXLElBQ3BCOTlGLEVBQU9vQixLQUFLLElBRWR1USxFQUFPRyxRQUFROHJGLEdBQVksU0FBU0csRUFBT0MsRUFBUUMsRUFBT0MsR0FDeERsK0YsRUFBT29CLEtBQUs2OEYsRUFBUUMsRUFBVXBzRixRQUFRK3JGLEVBQWMsTUFBU0csR0FBVUQsTUFFbEUvOUYsS0FHVHpELEVBQU9ELFFBQVVxbEMsRyxnQkMxQmpCLElBQUl3OEQsRUFBVSxFQUFRLEtBeUJ0QjVoRyxFQUFPRCxRQVpQLFNBQXVCMmlDLEdBQ3JCLElBQUlqL0IsRUFBU20rRixFQUFRbC9ELEdBQU0sU0FBU2xoQyxHQUlsQyxPQWZtQixNQVlmczhGLEVBQU0xN0QsTUFDUjA3RCxFQUFNaHlFLFFBRUR0cUIsS0FHTHM4RixFQUFRcjZGLEVBQU9xNkYsTUFDbkIsT0FBT3I2RixJLGdCQ3RCVCxJQUFJNDRCLEVBQVcsRUFBUSxLQWlEdkIsU0FBU3VsRSxFQUFRbC9ELEVBQU1tL0QsR0FDckIsR0FBbUIsbUJBQVJuL0QsR0FBbUMsTUFBWm0vRCxHQUF1QyxtQkFBWkEsRUFDM0QsTUFBTSxJQUFJdC9GLFVBaERRLHVCQWtEcEIsSUFBSXUvRixFQUFXLFdBQ2IsSUFBSXIyRixFQUFPbkcsVUFDUDlELEVBQU1xZ0csRUFBV0EsRUFBU2orRixNQUFNbEIsS0FBTStJLEdBQVFBLEVBQUssR0FDbkRxeUYsRUFBUWdFLEVBQVNoRSxNQUVyQixHQUFJQSxFQUFNN3hFLElBQUl6cUIsR0FDWixPQUFPczhGLEVBQU1oOUYsSUFBSVUsR0FFbkIsSUFBSWlDLEVBQVNpL0IsRUFBSzkrQixNQUFNbEIsS0FBTStJLEdBRTlCLE9BREFxMkYsRUFBU2hFLE1BQVFBLEVBQU05eEUsSUFBSXhxQixFQUFLaUMsSUFBV3E2RixFQUNwQ3I2RixHQUdULE9BREFxK0YsRUFBU2hFLE1BQVEsSUFBSzhELEVBQVFHLE9BQVMxbEUsR0FDaEN5bEUsRUFJVEYsRUFBUUcsTUFBUTFsRSxFQUVoQnI4QixFQUFPRCxRQUFVNmhHLEcsZ0JDeEVqQixJQUFJSSxFQUFlLEVBQVEsS0EyQjNCaGlHLEVBQU9ELFFBSlAsU0FBa0JtQixHQUNoQixPQUFnQixNQUFUQSxFQUFnQixHQUFLOGdHLEVBQWE5Z0csSyxnQkN4QjNDLElBQUlGLEVBQVMsRUFBUSxJQUNqQmloRyxFQUFXLEVBQVEsS0FDbkJsMkYsRUFBVSxFQUFRLElBQ2xCMGdCLEVBQVcsRUFBUSxJQU1uQnd4RSxFQUFjajlGLEVBQVNBLEVBQU9hLGVBQVk2SixFQUMxQ3cyRixFQUFpQmpFLEVBQWNBLEVBQVl4eEYsY0FBV2YsRUEwQjFEMUwsRUFBT0QsUUFoQlAsU0FBU2lpRyxFQUFhOWdHLEdBRXBCLEdBQW9CLGlCQUFUQSxFQUNULE9BQU9BLEVBRVQsR0FBSTZLLEVBQVE3SyxHQUVWLE9BQU8rZ0csRUFBUy9nRyxFQUFPOGdHLEdBQWdCLEdBRXpDLEdBQUl2MUUsRUFBU3ZyQixHQUNYLE9BQU9naEcsRUFBaUJBLEVBQWU5aEcsS0FBS2MsR0FBUyxHQUV2RCxJQUFJdUMsRUFBVXZDLEVBQVEsR0FDdEIsTUFBa0IsS0FBVnVDLEdBQWtCLEVBQUl2QyxJQTNCakIsSUEyQndDLEtBQU91QyxJLGNDYjlEekQsRUFBT0QsUUFYUCxTQUFrQmtJLEVBQU84eUYsR0FLdkIsSUFKQSxJQUFJL3BGLEdBQVMsRUFDVHBNLEVBQWtCLE1BQVRxRCxFQUFnQixFQUFJQSxFQUFNckQsT0FDbkNuQixFQUFTcEIsTUFBTXVDLEtBRVZvTSxFQUFRcE0sR0FDZm5CLEVBQU91TixHQUFTK3BGLEVBQVM5eUYsRUFBTStJLEdBQVFBLEVBQU8vSSxHQUVoRCxPQUFPeEUsSSxnQkNqQlQsSUFBSTArRixFQUFZLEVBQVEsS0FDcEJDLEVBQVUsRUFBUSxLQWdDdEJwaUcsRUFBT0QsUUFKUCxTQUFlNEIsRUFBUXNVLEdBQ3JCLE9BQWlCLE1BQVZ0VSxHQUFrQnlnRyxFQUFRemdHLEVBQVFzVSxFQUFNa3NGLEssY0NsQmpEbmlHLEVBQU9ELFFBSlAsU0FBbUI0QixFQUFRSCxHQUN6QixPQUFpQixNQUFWRyxHQUFrQkgsS0FBT2IsT0FBT2dCLEssZ0JDVHpDLElBQUlzakMsRUFBVyxFQUFRLEtBQ25CbkIsRUFBYyxFQUFRLEtBQ3RCLzNCLEVBQVUsRUFBUSxJQUNsQjJ6RixFQUFVLEVBQVEsS0FDbEIzNkQsRUFBVyxFQUFRLEtBQ25CRyxFQUFRLEVBQVEsSUFpQ3BCbGxDLEVBQU9ELFFBdEJQLFNBQWlCNEIsRUFBUXNVLEVBQU1vc0YsR0FPN0IsSUFKQSxJQUFJcnhGLEdBQVMsRUFDVHBNLEdBSEpxUixFQUFPZ3ZCLEVBQVNodkIsRUFBTXRVLElBR0ppRCxPQUNkbkIsR0FBUyxJQUVKdU4sRUFBUXBNLEdBQVEsQ0FDdkIsSUFBSXBELEVBQU0wakMsRUFBTWp2QixFQUFLakYsSUFDckIsS0FBTXZOLEVBQW1CLE1BQVY5QixHQUFrQjBnRyxFQUFRMWdHLEVBQVFILElBQy9DLE1BRUZHLEVBQVNBLEVBQU9ILEdBRWxCLE9BQUlpQyxLQUFZdU4sR0FBU3BNLEVBQ2hCbkIsS0FFVG1CLEVBQW1CLE1BQVZqRCxFQUFpQixFQUFJQSxFQUFPaUQsU0FDbEJtZ0MsRUFBU25nQyxJQUFXODZGLEVBQVFsK0YsRUFBS29ELEtBQ2pEbUgsRUFBUXBLLElBQVdtaUMsRUFBWW5pQyxNLGNDZnBDM0IsRUFBT0QsUUFKUCxTQUFrQm1CLEdBQ2hCLE9BQU9BLEksZ0JDakJULElBQUlvaEcsRUFBZSxFQUFRLEtBQ3ZCQyxFQUFtQixFQUFRLEtBQzNCcDlELEVBQVEsRUFBUSxLQUNoQkQsRUFBUSxFQUFRLElBNEJwQmxsQyxFQUFPRCxRQUpQLFNBQWtCa1csR0FDaEIsT0FBT2t2QixFQUFNbHZCLEdBQVFxc0YsRUFBYXA5RCxFQUFNanZCLElBQVNzc0YsRUFBaUJ0c0YsSyxjQ2ZwRWpXLEVBQU9ELFFBTlAsU0FBc0J5QixHQUNwQixPQUFPLFNBQVNHLEdBQ2QsT0FBaUIsTUFBVkEsT0FBaUIrSixFQUFZL0osRUFBT0gsTSxnQkNUL0MsSUFBSTIvRixFQUFVLEVBQVEsS0FldEJuaEcsRUFBT0QsUUFOUCxTQUEwQmtXLEdBQ3hCLE9BQU8sU0FBU3RVLEdBQ2QsT0FBT3cvRixFQUFReC9GLEVBQVFzVSxNLGdCQ1gzQixJQUFJdXNGLEVBQWdCLEVBQVEsS0FDeEI3SCxFQUFlLEVBQVEsS0FDdkI4SCxFQUFZLEVBQVEsS0FHcEJDLEVBQVlwZ0YsS0FBS0MsSUFpRHJCdmlCLEVBQU9ELFFBWlAsU0FBbUJrSSxFQUFPOEksRUFBVytwRixHQUNuQyxJQUFJbDJGLEVBQWtCLE1BQVRxRCxFQUFnQixFQUFJQSxFQUFNckQsT0FDdkMsSUFBS0EsRUFDSCxPQUFRLEVBRVYsSUFBSW9NLEVBQXFCLE1BQWI4cEYsRUFBb0IsRUFBSTJILEVBQVUzSCxHQUk5QyxPQUhJOXBGLEVBQVEsSUFDVkEsRUFBUTB4RixFQUFVOTlGLEVBQVNvTSxFQUFPLElBRTdCd3hGLEVBQWN2NkYsRUFBTzB5RixFQUFhNXBGLEVBQVcsR0FBSUMsSyxjQzVCMURoUixFQUFPRCxRQVpQLFNBQXVCa0ksRUFBTzhJLEVBQVcrcEYsRUFBVzZILEdBSWxELElBSEEsSUFBSS85RixFQUFTcUQsRUFBTXJELE9BQ2ZvTSxFQUFROHBGLEdBQWE2SCxFQUFZLEdBQUssR0FFbENBLEVBQVkzeEYsTUFBWUEsRUFBUXBNLEdBQ3RDLEdBQUltTSxFQUFVOUksRUFBTStJLEdBQVFBLEVBQU8vSSxHQUNqQyxPQUFPK0ksRUFHWCxPQUFRLEksZ0JDcEJWLElBQUk0eEYsRUFBVyxFQUFRLEtBbUN2QjVpRyxFQUFPRCxRQVBQLFNBQW1CbUIsR0FDakIsSUFBSXVDLEVBQVNtL0YsRUFBUzFoRyxHQUNsQjJoRyxFQUFZcC9GLEVBQVMsRUFFekIsT0FBT0EsR0FBV0EsRUFBVW8vRixFQUFZcC9GLEVBQVNvL0YsRUFBWXAvRixFQUFVLEksZ0JDaEN6RSxJQUFJcS9GLEVBQVcsRUFBUSxLQXlDdkI5aUcsRUFBT0QsUUFaUCxTQUFrQm1CLEdBQ2hCLE9BQUtBLEdBR0xBLEVBQVE0aEcsRUFBUzVoRyxNQTlCSixLQStCYUEsS0EvQmIsSUFDRyx1QkErQkZBLEVBQVEsR0FBSyxFQUFJLEdBR3hCQSxHQUFVQSxFQUFRQSxFQUFRLEVBUGQsSUFBVkEsRUFBY0EsRUFBUSxJLGdCQy9CakMsSUFBSTZoRyxFQUFXLEVBQVEsS0FDbkJ6Z0UsRUFBVyxFQUFRLElBQ25CN1YsRUFBVyxFQUFRLElBTW5CdTJFLEVBQWEscUJBR2JDLEVBQWEsYUFHYkMsRUFBWSxjQUdaQyxFQUFlaGpFLFNBOENuQm5nQyxFQUFPRCxRQXJCUCxTQUFrQm1CLEdBQ2hCLEdBQW9CLGlCQUFUQSxFQUNULE9BQU9BLEVBRVQsR0FBSXVyQixFQUFTdnJCLEdBQ1gsT0ExQ00sSUE0Q1IsR0FBSW9oQyxFQUFTcGhDLEdBQVEsQ0FDbkIsSUFBSW1oQyxFQUFnQyxtQkFBakJuaEMsRUFBTWk5RixRQUF3Qmo5RixFQUFNaTlGLFVBQVlqOUYsRUFDbkVBLEVBQVFvaEMsRUFBU0QsR0FBVUEsRUFBUSxHQUFNQSxFQUUzQyxHQUFvQixpQkFBVG5oQyxFQUNULE9BQWlCLElBQVZBLEVBQWNBLEdBQVNBLEVBRWhDQSxFQUFRNmhHLEVBQVM3aEcsR0FDakIsSUFBSWtpRyxFQUFXSCxFQUFXdjJGLEtBQUt4TCxHQUMvQixPQUFRa2lHLEdBQVlGLEVBQVV4MkYsS0FBS3hMLEdBQy9CaWlHLEVBQWFqaUcsRUFBTXFFLE1BQU0sR0FBSTY5RixFQUFXLEVBQUksR0FDM0NKLEVBQVd0MkYsS0FBS3hMLEdBdkRiLEtBdUQ2QkEsSSxnQkM1RHZDLElBQUltaUcsRUFBa0IsRUFBUSxLQUcxQkMsRUFBYyxPQWVsQnRqRyxFQUFPRCxRQU5QLFNBQWtCcVYsR0FDaEIsT0FBT0EsRUFDSEEsRUFBTzdQLE1BQU0sRUFBRzg5RixFQUFnQmp1RixHQUFVLEdBQUdHLFFBQVErdEYsRUFBYSxJQUNsRWx1RixJLGNDZE4sSUFBSW11RixFQUFlLEtBaUJuQnZqRyxFQUFPRCxRQVBQLFNBQXlCcVYsR0FHdkIsSUFGQSxJQUFJcEUsRUFBUW9FLEVBQU94USxPQUVab00sS0FBV3V5RixFQUFhNzJGLEtBQUswSSxFQUFPb3VGLE9BQU94eUYsTUFDbEQsT0FBT0EsSSw2QkNmVCxJQUFNNE8sRUFBTzNMLEVBQVEsS0FDZjhGLEVBQVE5RixFQUFRLEtBQ2hCTSxFQUFrQk4sRUFBUSxJQTRCaENqVSxFQUFPRCxRQUFVLFNBQUNtMkMsR0FDaEIsSUFBTXV0RCxFQUFXOTlFLFNBQVM0d0IsZUFBZSwwQkFDbkNtdEQsRUFBYy85RSxTQUFTNHdCLGVBQWUsNkJBQ3RDb3RELEVBQWlCaCtFLFNBQVM0d0IsZUFBZSxpQ0FFekN4NkIsRUFBVSxDQUNkbTZCLGdCQUNBdXRELFdBQ0FDLGNBQ0FDLGtCQU9GLE9BMUMwQixTQUFDenRELEVBQWV5dEQsR0FDMUN6dEQsRUFBY3BzQyxTQUFRLFNBQUE0SixHQUNwQixJQUFROFUsRUFBZ0I5VSxFQUFoQjhVLEtBQU1ya0IsRUFBVXVQLEVBQVZ2UCxNQUNkdy9GLEVBQWU1N0UsWUFBWSxJQUFJNjdFLE9BQU96L0YsRUFBT3FrQixPQW1DL0NxN0UsQ0FBb0IzdEQsRUFBZXl0RCxHQS9CVCxTQUFDenRELEVBQWV3dEQsRUFBYUMsR0FDdkRELEVBQVl4aUcsTUFBUTZZLEVBQU1tOEIsR0FBZXJxQyxhQUN6QzgzRixFQUFlbjZELGlCQUFpQixVQUFVLFNBQUFnVSxHQUN4QyxJQUFNaDFCLEVBQU9nMUIsRUFBTXozQixPQUFPN2tCLE1BQ3BCNGlHLEVBQXVCbGtGLEVBQUtzMkIsRUFBZSxDQUFFMXRCLFNBQ25EazdFLEVBQVl4aUcsTUFBUTRpRyxFQUFxQmo0RixnQkEyQjNDazRGLENBQW9CN3RELEVBQWV3dEQsRUFBYUMsR0F2QnhCLFNBQUE1bkYsR0FDeEIsSUFBUTBuRixFQUEwQzFuRixFQUExQzBuRixTQUFVQyxFQUFnQzNuRixFQUFoQzJuRixZQUFhQyxFQUFtQjVuRixFQUFuQjRuRixlQUUvQkYsRUFBU2o2RCxpQkFBaUIsU0FBUyxXQUNqQyxJQUFNaGhCLEVBQU9tN0UsRUFBZXppRyxNQUN0QjhpRyxFQUFVLENBQUUzeUYsUUFBU3F5RixFQUFZeGlHLE9BQ3ZDcVQsRUFBZ0I0VyxLQUFLM0MsRUFBTXc3RSxNQWtCN0JDLENBQWtCbG9GLEdBRVgsQ0FDTDBuRixXQUNBQyxjQUNBQyxvQixnQkNqREozakcsRUFBT0QsUUFBVSxFQUFRLE0sY0NzQnpCQyxFQUFPRCxRQUpQLFNBQWNrSSxHQUNaLE9BQVFBLEdBQVNBLEVBQU1yRCxPQUFVcUQsRUFBTSxRQUFLeUQsSSwySkNuQjlDLElBQVF6QixFQUFTZ0ssRUFBUSxLQUFqQmhLLEtBQ1IsRUFBNkJnSyxFQUFRLEtBQTdCcEcsRUFBUixFQUFRQSxJQUFLaUQsRUFBYixFQUFhQSxPQUFROGxCLEVBQXJCLEVBQXFCQSxJQVFmc3RFLEdBQVksT0FOSyxHQU9ILFFBREYsSUFKTSxHQU1ILFNBRkgsSUFMRyxHQVFILE9BSEEsSUFISyxHQU9ILFVBSkYsSUFGSSxHQU9ILFFBTEQsR0E0QmxCbGtHLEVBQU9ELFFBQVUsQ0FDZisxQyxjQXJCb0Isa0JBQU03ckMsRUFDMUI0RCxHQUFJLFNBQUMydkMsR0FBRCxPQUFXQSxFQUFNejNCLE9BQU9nMUQsUUFBUSx5QkFDcENqcUUsR0FBTyxTQUFDaWdCLEdBQUQsUUFBZUEsS0FDdEJsakIsR0FBSSxTQUFDa2pCLEdBQUQsT0FBYUEsRUFBUW96RSxRQUFRQyxnQkFtQmpDcnVELHFCQWhCMkIsa0JBQU05ckMsRUFDakM2RyxHQUFPLFNBQUMwc0MsR0FBRCxRQUFjMG1ELEVBQWExbUQsRUFBTWl2QixRQUF3Qyw2QkFBN0I5bUQsU0FBUzArRSxjQUFjaDJGLE1BQzFFdW9CLEdBQUksU0FBQzRtQixHQUFELE9BQVdBLEVBQU11TixvQkFDckJqNkMsR0FBTyxTQUFDMHNDLEdBQUQsT0FBWUEsRUFBTXB0QyxVQUN6QnZDLEdBQUksU0FBQzJ2QyxHQUFELE9BQVcwbUQsRUFBYTFtRCxFQUFNaXZCLFlBYWxDejJCLGNBVm9CLGtCQUFNL3JDLEVBQzFCNEQsR0FBSSxTQUFDa1ksR0FBRCxNQUFhLENBQ2ZBLFNBQ0F1UixVQUFXbFQsS0FBS3pTLGMsNkJDakNwQixJQUVNMnlGLEVBQXFCLElBRlJyd0YsRUFBUSxNQUkzQmpVLEVBQU9ELFFBQVUsQ0FDZndrRyxRQUFTRCxFQUFtQkMsUUFDNUI5M0QsUUFBUzYzRCxFQUFtQjczRCxRQUM1QnhyQixNQUFPcWpGLEVBQW1CcmpGLE1BQzFCdWpGLFNBQVVGLEVBQW1CRSxTQUM3QjVrRixLQUFNMGtGLEVBQW1CMWtGLEtBQ3pCNHNCLFFBQVM4M0QsRUFBbUI5M0QsVSx3OUJDVm5CdjRCLEVBQVEsS0FBbkIsSUFDTUksRSxXQUNKLGFBQTJCLFVBQ3pCM1IsS0FBSytoRyxNQUFRLEdBQ2IvaEcsS0FBS2dpRyxhQUFjLEUsOENBR3JCLFNBQVFwbUIsR0FDTjU3RSxLQUFLK2hHLE1BQVFubUIsSSxzQkFHZixTQUFTb21CLEdBQ1BoaUcsS0FBS2dpRyxZQUFjQSxJLHFCQUdyQixTQUFRbHpELEVBQU90d0MsR0FFYixHQUFxQixpQkFBVnN3QyxFQUNULE1BQU0sSUFBSXgvQixNQUFNLG9DQUdkdFAsS0FBS2dpRyxhQUNQdGtFLFFBQVF1a0UsTUFBTSx1QkFBd0JqaUcsS0FBSytoRyxPQUU3Qy9oRyxLQUFLK2hHLE1BQUwsT0FDSy9oRyxLQUFLK2hHLE9BRFYsUUFFR2p6RCxFQUFRdHdDLElBR1B3QixLQUFLZ2lHLGFBQ1B0a0UsUUFBUXVrRSxNQUFNLHNCQUF1QmppRyxLQUFLK2hHLFMscUJBSTlDLFNBQVFqekQsR0FDTixPQUFPOXVDLEtBQUsraEcsTUFBTWp6RCxLLG1CQUdwQixXQUNFOXVDLEtBQUsraEcsTUFBUSxLLGtCQUdmLFNBQUtqekQsRUFBT296RCxHQUNWLElBQU1DLEVBQWdCbmlHLEtBQUs2aEcsUUFBUS95RCxHQUNuQyxPQUFLbnZDLE1BQU0wSixRQUFRODRGLElBQXNDLG1CQUFiRCxHQUlwQ0MsR0FBaUIsSUFBSWh4RixRQUFPLFNBQUNpeEYsRUFBS3IzRixHQUl4QyxPQUhHbTNGLEVBQVFuM0YsSUFDVHEzRixFQUFJamdHLEtBQUs0SSxHQUVKcTNGLElBQ04sSUFSTSxRLGdDQVliOWtHLEVBQU9ELFFBQVVzVSxHLDZDQ3pEakIsSUFFTTB3RixFQUFtQixJQUZSOXdGLEVBQVEsTUFJekJqVSxFQUFPRCxRQUFVLENBQ2ZpbEcsVUFBV0QsRUFBaUJDLFksdU1DTHhCMXdGLEUsOEtBRUosU0FBVTJ3RixHQUFvQixJQUFWQyxFQUFVLHVEQUFILEVBQ3JCQyxFQUFRLElBQUlDLE1BQU1ILEdBQ3RCLEtBQUlDLEdBQVUsR0FBS0EsR0FBVSxHQUczQixNQUFNLElBQUlsekYsTUFBTSxnQ0FGaEJtekYsRUFBTUQsT0FBU0EsRUFJakJDLEVBQU1FLFksZ0NBSVZybEcsRUFBT0QsUUFBVXVVLEcsNDRCQ2JqQixJQUFNZ3hGLEVBQVdyeEYsRUFBUSxLQUNuQnN4RixFQUFldHhGLEVBQVEsS0FDdkJ1eEYsRUFBV3Z4RixFQUFRLEtBQ25Cd3hGLEVBQWF4eEYsRUFBUSxLQUUzQmpVLEVBQU9ELFFBQVUsQ0FDZixJQUFLdWxHLEVBQ0wsU0FBWUMsRUFDWixLQUFRQyxFQUNSLElBQU9DLEksOGlEQ1RULElBQU16eEYsRUFBV0MsRUFBUSxJQUFtQkQsU0FDdENLLEVBQWFKLEVBQVEsSUFBbUJJLFdBQ3hDQyxFQUFXTCxFQUFRLElBQW1CSyxTQUN0Q294RixFQUFPenhGLEVBQVEsS0FJZnF4RixFLHFhQUNPcnhGLEVBQVEsTSwyQ0FFbkIsV0FDRUksRUFBV280QixRQUFRLFdBQVksQ0FDN0IsQ0FBRWpzQyxLQUFNLE1BQU9tbEcsWUFBYSxnQkFDNUIsQ0FBRW5sRyxLQUFNLFFBQVNtbEcsWUFBYSxnQkFDOUIsQ0FBRW5sRyxLQUFNLFNBQVVtbEcsWUFBYSxrQkFHakNqakcsS0FBS2tqRyx3QkFDTCxJQUFNQyxFQUFXbmpHLEtBQUtvakcsY0FDdEJwakcsS0FBS3FqRyxLQUFPRixFQUFTRSxLQUNyQnJqRyxLQUFLdzNDLEtBQU8yckQsRUFBUzNyRCxLQUNyQngzQyxLQUFLZ2pHLEtBQU9BLEkseUJBR2QsV0FDRSxJQUFNRyxFQUFXLElBQUl6aEYsS0FBS0EsS0FBS3pTLE9BQU9xMEYsZUFBZSxTQUFTdHlELE1BQU0sS0FDcEUsTUFBTyxDQUNMcXlELEtBQU1GLEVBQVMsR0FDZjNyRCxLQUFNMnJELEVBQVMsTSxtQ0FJbkIsV0FBd0IsV0FDdEJydUYsYUFBWSxrQkFBTSxFQUFLeXVGLGtCQUFrQixFQUFLSCxlQUFjLE8sK0JBRzlELFNBQWtCSSxHQUNoQixJQUFNQyxFQUFZeGdGLFNBQVM0d0IsZUFBZSxjQUN0QzR2RCxJQUNGQSxFQUFVQyxZQUFjRixJQUFVaHNELFEsOEJBSXRDLFdBQ0V4M0MsS0FBS2s2QixTQUFTLGMsNkJBR2hCLFdBQ0V0b0IsRUFBUzB3RixVQTVDQSx1Qiw0QkErQ1gsV0FDRXRpRyxLQUFLZzZCLFVBQVU2akMsV0FBYSxLLCtCQUc5QixXQUNFNzlELEtBQUtnNkIsVUFBVTZqQyxXQUFhLFEsOEJBakRUdnNELEdBcUR2QmhVLEVBQU9ELFFBQVV1bEcsRyxnQkM1RGpCdGxHLEVBQU9ELFFBQVUsSUFBMEIsd0MsZ0JDQTNDLElBQUlvd0MsRUFBYSxFQUFRLElBQ3pCbndDLEVBQU9ELFNBQVdvd0MsRUFBb0IsU0FBS0EsR0FBWXRULFNBQVMsQ0FBQyxTQUFXLENBQUMsRUFBRSxZQUFZLEtBQU8sU0FBU3VULEVBQVVDLEVBQU9sUyxFQUFRQyxFQUFTM3dCLEdBQ3pJLElBQUk2aUMsRUFBUSsxRCxFQUFpQixNQUFWaDJELEVBQWlCQSxFQUFVRCxFQUFVSyxhQUFlLEdBQUs2MUQsRUFBT2wyRCxFQUFVdlEsTUFBTTJRLGNBQWtDKzFELEVBQU9uMkQsRUFBVWo3QixpQkFBa0JvN0IsRUFBaUJILEVBQVVHLGdCQUFrQixTQUFTaGhDLEVBQVEreEIsR0FDbE8sR0FBSTNnQyxPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUttUCxFQUFRK3hCLEdBQy9DLE9BQU8veEIsRUFBTyt4QixJQUt0QixNQUFPLHFEQUNIaWxFLEVBUnVILG1CQVE5R2oyRCxFQUFtSCxPQUF6R0EsRUFBU0MsRUFBZXBTLEVBQVEsVUFBc0IsTUFBVmtTLEVBQWlCRSxFQUFlRixFQUFPLFFBQVVBLElBQW1CQyxFQUFTZzJELEdBQW9DaDJELEVBQU9sd0MsS0FBS2ltRyxFQUFPLENBQUMsS0FBTyxPQUFPLEtBQU8sR0FBRyxLQUFPNTRGLEVBQUssSUFBTSxDQUFDLE1BQVEsQ0FBQyxLQUFPLEVBQUUsT0FBUyxJQUFJLElBQU0sQ0FBQyxLQUFPLEVBQUUsT0FBUyxPQUFTNmlDLEdBQ2hULGlEQUNBaTJELEVBVnVILG1CQVU5R2oyRCxFQUFtSCxPQUF6R0EsRUFBU0MsRUFBZXBTLEVBQVEsVUFBc0IsTUFBVmtTLEVBQWlCRSxFQUFlRixFQUFPLFFBQVVBLElBQW1CQyxFQUFTZzJELEdBQW9DaDJELEVBQU9sd0MsS0FBS2ltRyxFQUFPLENBQUMsS0FBTyxPQUFPLEtBQU8sR0FBRyxLQUFPNTRGLEVBQUssSUFBTSxDQUFDLE1BQVEsQ0FBQyxLQUFPLEVBQUUsT0FBUyxJQUFJLElBQU0sQ0FBQyxLQUFPLEVBQUUsT0FBUyxPQUFTNmlDLEdBQ2hULDRCQUNBaTJELEVBWnVILG1CQVk5R2oyRCxFQUFtSCxPQUF6R0EsRUFBU0MsRUFBZXBTLEVBQVEsVUFBc0IsTUFBVmtTLEVBQWlCRSxFQUFlRixFQUFPLFFBQVVBLElBQW1CQyxFQUFTZzJELEdBQW9DaDJELEVBQU9sd0MsS0FBS2ltRyxFQUFPLENBQUMsS0FBTyxPQUFPLEtBQU8sR0FBRyxLQUFPNTRGLEVBQUssSUFBTSxDQUFDLE1BQVEsQ0FBQyxLQUFPLEVBQUUsT0FBUyxJQUFJLElBQU0sQ0FBQyxLQUFPLEVBQUUsT0FBUyxPQUFTNmlDLEdBQ2hULGl2Q0FDSixTQUFVLEssOGlEQ2hCWixJQUFNdDhCLEVBQVdDLEVBQVEsSUFBbUJELFNBQ3RDSyxFQUFhSixFQUFRLElBQW1CSSxXQUV4Q2t4RixFLHFhQUNPdHhGLEVBQVEsTSwyQ0FFbkIsV0FDRXZSLEtBQUs4akcsU0FBV255RixFQUFXa3dGLFFBQVEsYyw2QkFHckMsV0FDRTdoRyxLQUFLazZCLFNBQVMsVSw4QkFSUzVvQixHQVkzQmhVLEVBQU9ELFFBQVV3bEcsRyxnQkNmakIsSUFBSXAxRCxFQUFhLEVBQVEsSUFDekJud0MsRUFBT0QsU0FBV293QyxFQUFvQixTQUFLQSxHQUFZdFQsU0FBUyxDQUFDLEVBQUksU0FBU3VULEVBQVVDLEVBQU9sUyxFQUFRQyxFQUFTM3dCLEdBQzVHLElBQUk0NEYsRUFBT2oyRCxFQUFVNkMsT0FBUXF6RCxFQUFPbDJELEVBQVVqN0IsaUJBQWtCbzdCLEVBQWlCSCxFQUFVRyxnQkFBa0IsU0FBU2hoQyxFQUFRK3hCLEdBQzFILEdBQUkzZ0MsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLbVAsRUFBUSt4QixHQUMvQyxPQUFPL3hCLEVBQU8reEIsSUFLdEIsTUFBTyxtQ0FDSGdsRSxFQUFPRCxFQUFrQixNQUFWaDJELEVBQWlCRSxFQUFlRixFQUFPLFFBQVVBLEVBQVNBLElBQ3pFLGdEQUNBaTJELEVBQU9ELEVBQWtCLE1BQVZoMkQsRUFBaUJFLEVBQWVGLEVBQU8sZUFBaUJBLEVBQVNBLElBQ2hGLDBCQUNKLFNBQVcsQ0FBQyxFQUFFLFlBQVksS0FBTyxTQUFTRCxFQUFVQyxFQUFPbFMsRUFBUUMsRUFBUzN3QixHQUMxRSxJQUFJZzVGLEVBQVFsMkQsRUFBaUJILEVBQVVHLGdCQUFrQixTQUFTaGhDLEVBQVEreEIsR0FDdEUsR0FBSTNnQyxPQUFPa0IsVUFBVUMsZUFBZTFCLEtBQUttUCxFQUFRK3hCLEdBQy9DLE9BQU8veEIsRUFBTyt4QixJQUt0QixNQUFPLHNEQUM2VSxPQUE5VW1sRSxFQUFTbDJELEVBQWVwUyxFQUFRLFFBQVEvOUIsS0FBZSxNQUFWaXdDLEVBQWlCQSxFQUFVRCxFQUFVSyxhQUFlLEdBQWUsTUFBVkosRUFBaUJFLEVBQWVGLEVBQU8sWUFBY0EsRUFBUSxDQUFDLEtBQU8sT0FBTyxLQUFPLEdBQUcsR0FBS0QsRUFBVXdELFFBQVEsRUFBR25tQyxFQUFNLEdBQUcsUUFBVTJpQyxFQUFVOWxDLEtBQUssS0FBT21ELEVBQUssSUFBTSxDQUFDLE1BQVEsQ0FBQyxLQUFPLEVBQUUsT0FBUyxHQUFHLElBQU0sQ0FBQyxLQUFPLEdBQUcsT0FBUyxRQUFrQmc1RixFQUFTLElBQ2hXLG1CQUNKLFNBQVUsSyx3NENDekJaLElBQ01qQixFLCtaQUNPdnhGLEVBQVEsTSxZQUZKQSxFQUFRLElBQW1CRCxVQUs1Q2hVLEVBQU9ELFFBQVV5bEcsRyxnQkNMakIsSUFBSXIxRCxFQUFhLEVBQVEsSUFDekJud0MsRUFBT0QsU0FBV293QyxFQUFvQixTQUFLQSxHQUFZdFQsU0FBUyxDQUFDLFNBQVcsQ0FBQyxFQUFFLFlBQVksS0FBTyxTQUFTdVQsRUFBVUMsRUFBT2xTLEVBQVFDLEVBQVMzd0IsR0FDekksTUFBTywySkFDVCxTQUFVLEssOGlEQ0haLElBRU1pNUYsRSxxYUFDT3p5RixFQUFRLE0sOENBRW5CLFdBQ0V2UixLQUFLazZCLFNBQVMsTyw4QkFFaEIsV0FDRWw2QixLQUFLazZCLFNBQVMsTyw0QkFFaEIsV0FDRWw2QixLQUFLazZCLFNBQVMsTywrQkFFaEIsV0FDRWw2QixLQUFLazZCLFNBQVMsVSw4QkFmRDNvQixFQUFRLElBQW1CRCxVQW1CNUNoVSxFQUFPRCxRQUFVMm1HLEcsZ0JDbkJqQixJQUFJdjJELEVBQWEsRUFBUSxJQUN6Qm53QyxFQUFPRCxTQUFXb3dDLEVBQW9CLFNBQUtBLEdBQVl0VCxTQUFTLENBQUMsU0FBVyxDQUFDLEVBQUUsWUFBWSxLQUFPLFNBQVN1VCxFQUFVQyxFQUFPbFMsRUFBUUMsRUFBUzN3QixHQUN6SSxNQUFPLDRFQUNULFNBQVUsSyw2QkNIWixJQUVNeW9DLEVBQWdCLENBQ3BCLENBQ0UxdEIsS0FBTSxRQUNOcmtCLE1BQU8sUUFDUDBILGFBQWMsdUJBQ2RpdEMsS0FQc0I3a0MsRUFBUSxNQVNoQyxDQUNFdVUsS0FBTSxPQUNOcmtCLE1BQU8sT0FDUDBILGFBQWMscUNBS2xCN0wsRUFBT0QsUUFBVW0yQyxHLDhpRENqQmpCLElBQU1oaUMsRUFBbUJELEVBQVEsSUFBbUJDLGlCQUM5Q0ssRUFBa0JOLEVBQVEsSUFBbUJNLGdCQUNuRHZVLEVBQU9ELFFBQVAsYSxrT0FBQSxVLE1BQUEsc0tBQ2FrVSxFQUFRLE1BRHJCLFMsRUFBQSxHLEVBQUEsOEJBR0UsV0FDRW1zQixRQUFRM0IsSUFBSSxRQUNabHFCLEVBQWdCMFcsWSwyQkFMcEIsR0FBaUQvVyxJLGdCQ0ZqRCxJQUFJaThCLEVBQWEsRUFBUSxJQUN6Qm53QyxFQUFPRCxTQUFXb3dDLEVBQW9CLFNBQUtBLEdBQVl0VCxTQUFTLENBQUMsU0FBVyxDQUFDLEVBQUUsWUFBWSxLQUFPLFNBQVN1VCxFQUFVQyxFQUFPbFMsRUFBUUMsRUFBUzN3QixHQUN6SSxJQUFJNmlDLEVBQVFDLEVBQWlCSCxFQUFVRyxnQkFBa0IsU0FBU2hoQyxFQUFRK3hCLEdBQ3RFLEdBQUkzZ0MsT0FBT2tCLFVBQVVDLGVBQWUxQixLQUFLbVAsRUFBUSt4QixHQUMvQyxPQUFPL3hCLEVBQU8reEIsSUFLdEIsTUFBTyxtQkFDSDhPLEVBQVVqN0IsaUJBQThNLG1CQUEzTG03QixFQUF5SCxPQUEvR0EsRUFBU0MsRUFBZXBTLEVBQVEsYUFBeUIsTUFBVmtTLEVBQWlCRSxFQUFlRixFQUFPLFdBQWFBLElBQW1CQyxFQUFTRixFQUFVdlEsTUFBTTJRLGVBQStDRixFQUFPbHdDLEtBQWUsTUFBVml3QyxFQUFpQkEsRUFBVUQsRUFBVUssYUFBZSxHQUFJLENBQUMsS0FBTyxVQUFVLEtBQU8sR0FBRyxLQUFPaGpDLEVBQUssSUFBTSxDQUFDLE1BQVEsQ0FBQyxLQUFPLEVBQUUsT0FBUyxHQUFHLElBQU0sQ0FBQyxLQUFPLEVBQUUsT0FBUyxPQUFTNmlDLEdBQ3haLGNBQ0osU0FBVSIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDI1MSk7XG4iLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBfX2V4dGVuZHMsXHJcbiAgICBfX2Fzc2lnbixcclxuICAgIF9fcmVzdCxcclxuICAgIF9fZGVjb3JhdGUsXHJcbiAgICBfX3BhcmFtLFxyXG4gICAgX19tZXRhZGF0YSxcclxuICAgIF9fYXdhaXRlcixcclxuICAgIF9fZ2VuZXJhdG9yLFxyXG4gICAgX19jcmVhdGVCaW5kaW5nLFxyXG4gICAgX19leHBvcnRTdGFyLFxyXG4gICAgX192YWx1ZXMsXHJcbiAgICBfX3JlYWQsXHJcbiAgICBfX3NwcmVhZCxcclxuICAgIF9fc3ByZWFkQXJyYXlzLFxyXG4gICAgX19zcHJlYWRBcnJheSxcclxuICAgIF9fYXdhaXQsXHJcbiAgICBfX2FzeW5jR2VuZXJhdG9yLFxyXG4gICAgX19hc3luY0RlbGVnYXRvcixcclxuICAgIF9fYXN5bmNWYWx1ZXMsXHJcbiAgICBfX21ha2VUZW1wbGF0ZU9iamVjdCxcclxuICAgIF9faW1wb3J0U3RhcixcclxuICAgIF9faW1wb3J0RGVmYXVsdCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEluLFxyXG59O1xyXG4iLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUpO1xufVxudmFyIE9wZXJhdG9yU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKE9wZXJhdG9yU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSwgc2hvdWxkVW5zdWJzY3JpYmUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9uRmluYWxpemUgPSBvbkZpbmFsaXplO1xuICAgICAgICBfdGhpcy5zaG91bGRVbnN1YnNjcmliZSA9IHNob3VsZFVuc3Vic2NyaWJlO1xuICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dFxuICAgICAgICAgICAgPyBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbk5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBfc3VwZXIucHJvdG90eXBlLl9uZXh0O1xuICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yXG4gICAgICAgICAgICA/IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2Vycm9yO1xuICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlXG4gICAgICAgICAgICA/IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE9wZXJhdG9yU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGhpcykpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT3BlcmF0b3JTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5leHBvcnQgeyBPcGVyYXRvclN1YnNjcmliZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9wZXJhdG9yU3Vic2NyaWJlci5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvcGVyYXRlKGluaXQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQoZnVuY3Rpb24gKGxpZnRlZFNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpbml0KGxpZnRlZFNvdXJjZSwgdGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlJyk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxpZnQuanMubWFwIiwiaW1wb3J0IHsgX19hc3luY1ZhbHVlcywgX19hd2FpdGVyLCBfX2dlbmVyYXRvciwgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5TGlrZSc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi91dGlsL2lzUHJvbWlzZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0ludGVyb3BPYnNlcnZhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzQXN5bmNJdGVyYWJsZSB9IGZyb20gJy4uL3V0aWwvaXNBc3luY0l0ZXJhYmxlJztcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIH0gZnJvbSAnLi4vdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yJztcbmltcG9ydCB7IGlzSXRlcmFibGUgfSBmcm9tICcuLi91dGlsL2lzSXRlcmFibGUnO1xuaW1wb3J0IHsgaXNSZWFkYWJsZVN0cmVhbUxpa2UsIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IgfSBmcm9tICcuLi91dGlsL2lzUmVhZGFibGVTdHJlYW1MaWtlJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgcmVwb3J0VW5oYW5kbGVkRXJyb3IgfSBmcm9tICcuLi91dGlsL3JlcG9ydFVuaGFuZGxlZEVycm9yJztcbmltcG9ydCB7IG9ic2VydmFibGUgYXMgU3ltYm9sX29ic2VydmFibGUgfSBmcm9tICcuLi9zeW1ib2wvb2JzZXJ2YWJsZSc7XG5leHBvcnQgZnVuY3Rpb24gaW5uZXJGcm9tKGlucHV0KSB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgIGlmIChpc0ludGVyb3BPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzQXJyYXlMaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbVByb21pc2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21JdGVyYWJsZShpbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvYnMgPSBvYmpbU3ltYm9sX29ic2VydmFibGVdKCk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21BcnJheUxpa2UoYXJyYXkpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Qcm9taXNlKHByb21pc2UpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvbWlzZVxuICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpdGVyYWJsZV8xID0gX192YWx1ZXMoaXRlcmFibGUpLCBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKTsgIWl0ZXJhYmxlXzFfMS5kb25lOyBpdGVyYWJsZV8xXzEgPSBpdGVyYWJsZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZXJhYmxlXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlcmFibGVfMV8xICYmICFpdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2EgPSBpdGVyYWJsZV8xLnJldHVybikpIF9hLmNhbGwoaXRlcmFibGVfMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgIH1cbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21Bc3luY0l0ZXJhYmxlKGFzeW5jSXRlcmFibGUpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pO1xuICAgIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpO1xufVxuZnVuY3Rpb24gcHJvY2Vzcyhhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKSB7XG4gICAgdmFyIGFzeW5jSXRlcmFibGVfMSwgYXN5bmNJdGVyYWJsZV8xXzE7XG4gICAgdmFyIGVfMiwgX2E7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgdmFsdWUsIGVfMl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYi50cnlzLnB1c2goWzAsIDUsIDYsIDExXSk7XG4gICAgICAgICAgICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6IHJldHVybiBbNCwgYXN5bmNJdGVyYWJsZV8xLm5leHQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGFzeW5jSXRlcmFibGVfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFszLCAxXTtcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGVfMiA9IHsgZXJyb3I6IGVfMl8xIH07XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGFzeW5jSXRlcmFibGVfMV8xICYmICFhc3luY0l0ZXJhYmxlXzFfMS5kb25lICYmIChfYSA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfYS5jYWxsKGFzeW5jSXRlcmFibGVfMSldO1xuICAgICAgICAgICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgICAgICAgICAgX2Iuc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYi5sYWJlbCA9IDg7XG4gICAgICAgICAgICAgICAgY2FzZSA4OiByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXR1cm4gWzddO1xuICAgICAgICAgICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbm5lckZyb20uanMubWFwIiwiZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNGdW5jdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBTYWZlU3Vic2NyaWJlciwgU3Vic2NyaWJlciB9IGZyb20gJy4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpc1N1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IG9ic2VydmFibGUgYXMgU3ltYm9sX29ic2VydmFibGUgfSBmcm9tICcuL3N5bWJvbC9vYnNlcnZhYmxlJztcbmltcG9ydCB7IHBpcGVGcm9tQXJyYXkgfSBmcm9tICcuL3V0aWwvcGlwZSc7XG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgZXJyb3JDb250ZXh0IH0gZnJvbSAnLi91dGlsL2Vycm9yQ29udGV4dCc7XG52YXIgT2JzZXJ2YWJsZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gT2JzZXJ2YWJsZShzdWJzY3JpYmUpIHtcbiAgICAgICAgaWYgKHN1YnNjcmliZSkge1xuICAgICAgICAgICAgdGhpcy5fc3Vic2NyaWJlID0gc3Vic2NyaWJlO1xuICAgICAgICB9XG4gICAgfVxuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbiAob3BlcmF0b3IpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIG9ic2VydmFibGUub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGU7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IGlzU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCkgPyBvYnNlcnZlck9yTmV4dCA6IG5ldyBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLCBvcGVyYXRvciA9IF9hLm9wZXJhdG9yLCBzb3VyY2UgPSBfYS5zb3VyY2U7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChvcGVyYXRvclxuICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpXG4gICAgICAgICAgICAgICAgOiBzb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKVxuICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5fdHJ5U3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChuZXh0LCBwcm9taXNlQ3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTtcbiAgICAgICAgcmV0dXJuIG5ldyBwcm9taXNlQ3RvcihmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTYWZlU3Vic2NyaWJlcih7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgICAgICBjb21wbGV0ZTogcmVzb2x2ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW1N5bWJvbF9vYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwaXBlRnJvbUFycmF5KG9wZXJhdGlvbnMpKHRoaXMpO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24gKHByb21pc2VDdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHByb21pc2VDdG9yID0gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpO1xuICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgIF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAoeCkgeyByZXR1cm4gKHZhbHVlID0geCk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZXhwb3J0IHsgT2JzZXJ2YWJsZSB9O1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIChfYSA9IHByb21pc2VDdG9yICE9PSBudWxsICYmIHByb21pc2VDdG9yICE9PSB2b2lkIDAgPyBwcm9taXNlQ3RvciA6IGNvbmZpZy5Qcm9taXNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUuZXJyb3IpICYmIGlzRnVuY3Rpb24odmFsdWUuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlKSB7XG4gICAgcmV0dXJuICh2YWx1ZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHx8IChpc09ic2VydmVyKHZhbHVlKSAmJiBpc1N1YnNjcmlwdGlvbih2YWx1ZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T2JzZXJ2YWJsZS5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gbm9vcCgpIHsgfVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm9vcC5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWRlbnRpdHkuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzLCBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24sIEVNUFRZX1NVQlNDUklQVElPTiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yIH0gZnJvbSAnLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4vdXRpbC9hcnJSZW1vdmUnO1xuaW1wb3J0IHsgZXJyb3JDb250ZXh0IH0gZnJvbSAnLi91dGlsL2Vycm9yQ29udGV4dCc7XG52YXIgU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICBfdGhpcy5vYnNlcnZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFub255bW91c1N1YmplY3QodGhpcywgdGhpcyk7XG4gICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgcmV0dXJuIHN1YmplY3Q7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmN1cnJlbnRPYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IEFycmF5LmZyb20oX3RoaXMub2JzZXJ2ZXJzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhfdGhpcy5jdXJyZW50T2JzZXJ2ZXJzKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG9ic2VydmVyID0gX2MudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudGhyb3duRXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7XG4gICAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdWJqZWN0LnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuICgoX2EgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlbmd0aCkgPiAwO1xuICAgICAgICB9LFxuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHRoaXMuX3Rocm93SWZDbG9zZWQoKTtcbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgaXNTdG9wcGVkID0gX2EuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYS5vYnNlcnZlcnM7XG4gICAgICAgIGlmIChoYXNFcnJvciB8fCBpc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBFTVBUWV9TVUJTQ1JJUFRJT047XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgICAgICAgb2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKG9ic2VydmVycywgc3Vic2NyaWJlcik7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQ7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xuZXhwb3J0IHsgU3ViamVjdCB9O1xudmFyIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EsIHZhbHVlKTtcbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBlcnIpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIChfYiA9IChfYSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OO1xuICAgIH07XG4gICAgcmV0dXJuIEFub255bW91c1N1YmplY3Q7XG59KFN1YmplY3QpKTtcbmV4cG9ydCB7IEFub255bW91c1N1YmplY3QgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YmplY3QuanMubWFwIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBpc1NjaGVkdWxlciB9IGZyb20gJy4vaXNTY2hlZHVsZXInO1xuZnVuY3Rpb24gbGFzdChhcnIpIHtcbiAgICByZXR1cm4gYXJyW2Fyci5sZW5ndGggLSAxXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwb3BSZXN1bHRTZWxlY3RvcihhcmdzKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24obGFzdChhcmdzKSkgPyBhcmdzLnBvcCgpIDogdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBvcFNjaGVkdWxlcihhcmdzKSB7XG4gICAgcmV0dXJuIGlzU2NoZWR1bGVyKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHVuZGVmaW5lZDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwb3BOdW1iZXIoYXJncywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBsYXN0KGFyZ3MpID09PSAnbnVtYmVyJyA/IGFyZ3MucG9wKCkgOiBkZWZhdWx0VmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcmdzLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShhcnIsIGkpIHsgcmV0dXJuIF9hcnJheVdpdGhIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXlMaW1pdChhcnIsIGkpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIsIGkpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgeyB2YXIgX2kgPSBhcnIgJiYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgYXJyW1N5bWJvbC5pdGVyYXRvcl0gfHwgYXJyW1wiQEBpdGVyYXRvclwiXSk7IGlmIChfaSA9PSBudWxsKSByZXR1cm47IHZhciBfYXJyID0gW107IHZhciBfbiA9IHRydWU7IHZhciBfZCA9IGZhbHNlOyB2YXIgX3MsIF9lOyB0cnkgeyBmb3IgKF9pID0gX2kuY2FsbChhcnIpOyAhKF9uID0gKF9zID0gX2kubmV4dCgpKS5kb25lKTsgX24gPSB0cnVlKSB7IF9hcnIucHVzaChfcy52YWx1ZSk7IGlmIChpICYmIF9hcnIubGVuZ3RoID09PSBpKSBicmVhazsgfSB9IGNhdGNoIChlcnIpIHsgX2QgPSB0cnVlOyBfZSA9IGVycjsgfSBmaW5hbGx5IHsgdHJ5IHsgaWYgKCFfbiAmJiBfaVtcInJldHVyblwiXSAhPSBudWxsKSBfaVtcInJldHVyblwiXSgpOyB9IGZpbmFsbHkgeyBpZiAoX2QpIHRocm93IF9lOyB9IH0gcmV0dXJuIF9hcnI7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gYXJyOyB9XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKSB7XG4gIHZhciBfaXRlbSA9IF9zbGljZWRUb0FycmF5KGl0ZW0sIDQpLFxuICAgICAgY29udGVudCA9IF9pdGVtWzFdLFxuICAgICAgY3NzTWFwcGluZyA9IF9pdGVtWzNdO1xuXG4gIGlmICghY3NzTWFwcGluZykge1xuICAgIHJldHVybiBjb250ZW50O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBidG9hID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZcbiAgICB2YXIgYmFzZTY0ID0gYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoY3NzTWFwcGluZykpKSk7XG4gICAgdmFyIGRhdGEgPSBcInNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LFwiLmNvbmNhdChiYXNlNjQpO1xuICAgIHZhciBzb3VyY2VNYXBwaW5nID0gXCIvKiMgXCIuY29uY2F0KGRhdGEsIFwiICovXCIpO1xuICAgIHZhciBzb3VyY2VVUkxzID0gY3NzTWFwcGluZy5zb3VyY2VzLm1hcChmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICByZXR1cm4gXCIvKiMgc291cmNlVVJMPVwiLmNvbmNhdChjc3NNYXBwaW5nLnNvdXJjZVJvb3QgfHwgXCJcIikuY29uY2F0KHNvdXJjZSwgXCIgKi9cIik7XG4gICAgfSk7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoc291cmNlVVJMcykuY29uY2F0KFtzb3VyY2VNYXBwaW5nXSkuam9pbihcIlxcblwiKTtcbiAgfVxuXG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qXG4gIE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG4gIEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG4vLyBjc3MgYmFzZSBjb2RlLCBpbmplY3RlZCBieSB0aGUgY3NzLWxvYWRlclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTsgLy8gcmV0dXJuIHRoZSBsaXN0IG9mIG1vZHVsZXMgYXMgY3NzIHN0cmluZ1xuXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgcmV0dXJuIFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChjb250ZW50LCBcIn1cIik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH0pLmpvaW4oXCJcIik7XG4gIH07IC8vIGltcG9ydCBhIGxpc3Qgb2YgbW9kdWxlcyBpbnRvIHRoZSBsaXN0XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5cblxuICBsaXN0LmkgPSBmdW5jdGlvbiAobW9kdWxlcywgbWVkaWFRdWVyeSwgZGVkdXBlKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIG1vZHVsZXMgPSBbW251bGwsIG1vZHVsZXMsIFwiXCJdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgICAgICB2YXIgaWQgPSB0aGlzW2ldWzBdO1xuXG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG1vZHVsZXMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgaXRlbSA9IFtdLmNvbmNhdChtb2R1bGVzW19pXSk7XG5cbiAgICAgIGlmIChkZWR1cGUgJiYgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpdGVtWzBdXSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udGludWVcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChtZWRpYVF1ZXJ5KSB7XG4gICAgICAgIGlmICghaXRlbVsyXSkge1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYVF1ZXJ5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMl0gPSBcIlwiLmNvbmNhdChtZWRpYVF1ZXJ5LCBcIiBhbmQgXCIpLmNvbmNhdChpdGVtWzJdKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXksIF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgVW5zdWJzY3JpcHRpb25FcnJvciB9IGZyb20gJy4vdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4vdXRpbC9hcnJSZW1vdmUnO1xudmFyIFN1YnNjcmlwdGlvbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uKGluaXRpYWxUZWFyZG93bikge1xuICAgICAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IGluaXRpYWxUZWFyZG93bjtcbiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgICAgIGlmIChfcGFyZW50YWdlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShfcGFyZW50YWdlKSkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRhZ2VfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9wYXJlbnRhZ2VfMV8xICYmICFfcGFyZW50YWdlXzFfMS5kb25lICYmIChfYSA9IF9wYXJlbnRhZ2VfMS5yZXR1cm4pKSBfYS5jYWxsKF9wYXJlbnRhZ2VfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbml0aWFsRmluYWxpemVyID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihpbml0aWFsRmluYWxpemVyKSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGaW5hbGl6ZXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlLmVycm9ycyA6IFtlXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgICAgICAgaWYgKF9maW5hbGl6ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBlcnJvcnMgIT09IG51bGwgJiYgZXJyb3JzICE9PSB2b2lkIDAgPyBlcnJvcnMgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVW5zdWJzY3JpcHRpb25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMgPSBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChlcnJvcnMpKSwgX19yZWFkKGVyci5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlXzJfMSkgeyBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OyB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVW5zdWJzY3JpcHRpb25FcnJvcihlcnJvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uICh0ZWFyZG93bikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0ZWFyZG93biAmJiB0ZWFyZG93biAhPT0gdGhpcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24uX2FkZFBhcmVudCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2EgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSkucHVzaCh0ZWFyZG93bik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHJldHVybiBfcGFyZW50YWdlID09PSBwYXJlbnQgfHwgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgJiYgX3BhcmVudGFnZS5pbmNsdWRlcyhwYXJlbnQpKTtcbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uIChwYXJlbnQpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50O1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24gKHBhcmVudCkge1xuICAgICAgICB2YXIgX3BhcmVudGFnZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpKSB7XG4gICAgICAgICAgICBhcnJSZW1vdmUoX3BhcmVudGFnZSwgcGFyZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodGVhcmRvd24pIHtcbiAgICAgICAgdmFyIF9maW5hbGl6ZXJzID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgICAgX2ZpbmFsaXplcnMgJiYgYXJyUmVtb3ZlKF9maW5hbGl6ZXJzLCB0ZWFyZG93bik7XG4gICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGVhcmRvd24uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVtcHR5ID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfSkoKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbmV4cG9ydCB7IFN1YnNjcmlwdGlvbiB9O1xuZXhwb3J0IHZhciBFTVBUWV9TVUJTQ1JJUFRJT04gPSBTdWJzY3JpcHRpb24uRU1QVFk7XG5leHBvcnQgZnVuY3Rpb24gaXNTdWJzY3JpcHRpb24odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGluc3RhbmNlb2YgU3Vic2NyaXB0aW9uIHx8XG4gICAgICAgICh2YWx1ZSAmJiAnY2xvc2VkJyBpbiB2YWx1ZSAmJiBpc0Z1bmN0aW9uKHZhbHVlLnJlbW92ZSkgJiYgaXNGdW5jdGlvbih2YWx1ZS5hZGQpICYmIGlzRnVuY3Rpb24odmFsdWUudW5zdWJzY3JpYmUpKSk7XG59XG5mdW5jdGlvbiBleGVjRmluYWxpemVyKGZpbmFsaXplcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKGZpbmFsaXplcikpIHtcbiAgICAgICAgZmluYWxpemVyKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBmaW5hbGl6ZXIudW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpcHRpb24uanMubWFwIiwiaW1wb3J0IHsgQXN5bmNBY3Rpb24gfSBmcm9tICcuL0FzeW5jQWN0aW9uJztcbmltcG9ydCB7IEFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi9Bc3luY1NjaGVkdWxlcic7XG5leHBvcnQgdmFyIGFzeW5jU2NoZWR1bGVyID0gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcbmV4cG9ydCB2YXIgYXN5bmMgPSBhc3luY1NjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzeW5jLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5LCByZXBlYXQpIHtcbiAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICBpZiAocmVwZWF0ID09PSB2b2lkIDApIHsgcmVwZWF0ID0gZmFsc2U7IH1cbiAgICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICB3b3JrKCk7XG4gICAgICAgIGlmIChyZXBlYXQpIHtcbiAgICAgICAgICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBkZWxheSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfSwgZGVsYXkpO1xuICAgIHBhcmVudFN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVTdWJzY3JpcHRpb24pO1xuICAgIGlmICghcmVwZWF0KSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGVjdXRlU2NoZWR1bGUuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuZXhwb3J0IHZhciBFTVBUWSA9IG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0pO1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5KHNjaGVkdWxlcikge1xuICAgIHJldHVybiBzY2hlZHVsZXIgPyBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIDogRU1QVFk7XG59XG5mdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH0pOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVtcHR5LmpzLm1hcCIsImltcG9ydCB7IG1hcCB9IGZyb20gJy4vbWFwJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgbWVyZ2VJbnRlcm5hbHMgfSBmcm9tICcuL21lcmdlSW50ZXJuYWxzJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlTWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHRTZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlTWFwKGZ1bmN0aW9uIChhLCBpKSB7IHJldHVybiBtYXAoZnVuY3Rpb24gKGIsIGlpKSB7IHJldHVybiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSk7IH0pKGlubmVyRnJvbShwcm9qZWN0KGEsIGkpKSk7IH0sIGNvbmN1cnJlbnQpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgcmVzdWx0U2VsZWN0b3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbmN1cnJlbnQgPSByZXN1bHRTZWxlY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikgeyByZXR1cm4gbWVyZ2VJbnRlcm5hbHMoc291cmNlLCBzdWJzY3JpYmVyLCBwcm9qZWN0LCBjb25jdXJyZW50KTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZU1hcC5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpbmRleCsrKSAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUpOyB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWx0ZXIuanMubWFwIiwiaW1wb3J0IHsgc2NoZWR1bGVkIH0gZnJvbSAnLi4vc2NoZWR1bGVkL3NjaGVkdWxlZCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuL2lubmVyRnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIHNjaGVkdWxlciA/IHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSA6IGlubmVyRnJvbShpbnB1dCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBhcnJSZW1vdmUoYXJyLCBpdGVtKSB7XG4gICAgaWYgKGFycikge1xuICAgICAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICAgICAgMCA8PSBpbmRleCAmJiBhcnIuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hcnJSZW1vdmUuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWFwKHByb2plY3QsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHByb2plY3QuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgrKykpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXAuanMubWFwIiwiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5leHBvcnQgdmFyIEVtcHR5RXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHsgcmV0dXJuIGZ1bmN0aW9uIEVtcHR5RXJyb3JJbXBsKCkge1xuICAgIF9zdXBlcih0aGlzKTtcbiAgICB0aGlzLm5hbWUgPSAnRW1wdHlFcnJvcic7XG4gICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbn07IH0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RW1wdHlFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBhc3luYyBhcyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBpc1NjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvaXNTY2hlZHVsZXInO1xuaW1wb3J0IHsgaXNWYWxpZERhdGUgfSBmcm9tICcuLi91dGlsL2lzRGF0ZSc7XG5leHBvcnQgZnVuY3Rpb24gdGltZXIoZHVlVGltZSwgaW50ZXJ2YWxPclNjaGVkdWxlciwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGR1ZVRpbWUgPT09IHZvaWQgMCkgeyBkdWVUaW1lID0gMDsgfVxuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY1NjaGVkdWxlcjsgfVxuICAgIHZhciBpbnRlcnZhbER1cmF0aW9uID0gLTE7XG4gICAgaWYgKGludGVydmFsT3JTY2hlZHVsZXIgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNTY2hlZHVsZXIoaW50ZXJ2YWxPclNjaGVkdWxlcikpIHtcbiAgICAgICAgICAgIHNjaGVkdWxlciA9IGludGVydmFsT3JTY2hlZHVsZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbnRlcnZhbER1cmF0aW9uID0gaW50ZXJ2YWxPclNjaGVkdWxlcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGR1ZSA9IGlzVmFsaWREYXRlKGR1ZVRpbWUpID8gK2R1ZVRpbWUgLSBzY2hlZHVsZXIubm93KCkgOiBkdWVUaW1lO1xuICAgICAgICBpZiAoZHVlIDwgMCkge1xuICAgICAgICAgICAgZHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbiA9IDA7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICAgIGlmICgwIDw9IGludGVydmFsRHVyYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIGludGVydmFsRHVyYXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZHVlKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFcnJvckNsYXNzKGNyZWF0ZUltcGwpIHtcbiAgICB2YXIgX3N1cGVyID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIEVycm9yLmNhbGwoaW5zdGFuY2UpO1xuICAgICAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICAgIH07XG4gICAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpO1xuICAgIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYztcbiAgICByZXR1cm4gY3RvckZ1bmM7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jcmVhdGVFcnJvckNsYXNzLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSBcIi4uL29wZXJhdG9ycy9tYXBcIjtcbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikge1xuICAgIHJldHVybiBtYXAoZnVuY3Rpb24gKGFyZ3MpIHsgcmV0dXJuIGNhbGxPckFwcGx5KGZuLCBhcmdzKTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBPbmVPck1hbnlBcmdzLmpzLm1hcCIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmV4cG9ydCBmdW5jdGlvbiBhcmdzT3JBcmdBcnJheShhcmdzKSB7XG4gICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAxICYmIGlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJncztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3NPckFyZ0FycmF5LmpzLm1hcCIsImV4cG9ydCB2YXIgY29uZmlnID0ge1xuICAgIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gICAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICAgIFByb21pc2U6IHVuZGVmaW5lZCxcbiAgICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiBmYWxzZSxcbiAgICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6IGZhbHNlLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXAiLCJleHBvcnQgdmFyIENPTVBMRVRFX05PVElGSUNBVElPTiA9IChmdW5jdGlvbiAoKSB7IHJldHVybiBjcmVhdGVOb3RpZmljYXRpb24oJ0MnLCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7IH0pKCk7XG5leHBvcnQgZnVuY3Rpb24gZXJyb3JOb3RpZmljYXRpb24oZXJyb3IpIHtcbiAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCdFJywgdW5kZWZpbmVkLCBlcnJvcik7XG59XG5leHBvcnQgZnVuY3Rpb24gbmV4dE5vdGlmaWNhdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBjcmVhdGVOb3RpZmljYXRpb24oJ04nLCB2YWx1ZSwgdW5kZWZpbmVkKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVOb3RpZmljYXRpb24oa2luZCwgdmFsdWUsIGVycm9yKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vdGlmaWNhdGlvbkZhY3Rvcmllcy5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBpc1N1YnNjcmlwdGlvbiwgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgcmVwb3J0VW5oYW5kbGVkRXJyb3IgfSBmcm9tICcuL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3InO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4vdXRpbC9ub29wJztcbmltcG9ydCB7IG5leHROb3RpZmljYXRpb24sIGVycm9yTm90aWZpY2F0aW9uLCBDT01QTEVURV9OT1RJRklDQVRJT04gfSBmcm9tICcuL05vdGlmaWNhdGlvbkZhY3Rvcmllcyc7XG5pbXBvcnQgeyB0aW1lb3V0UHJvdmlkZXIgfSBmcm9tICcuL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXInO1xuaW1wb3J0IHsgY2FwdHVyZUVycm9yIH0gZnJvbSAnLi91dGlsL2Vycm9yQ29udGV4dCc7XG52YXIgU3Vic2NyaWJlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgaWYgKGlzU3Vic2NyaXB0aW9uKGRlc3RpbmF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IEVNUFRZX09CU0VSVkVSO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlci5jcmVhdGUgPSBmdW5jdGlvbiAobmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2FmZVN1YnNjcmliZXIobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKG5leHROb3RpZmljYXRpb24odmFsdWUpLCB0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX25leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKGVycm9yTm90aWZpY2F0aW9uKGVyciksIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihDT01QTEVURV9OT1RJRklDQVRJT04sIHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbmV4cG9ydCB7IFN1YnNjcmliZXIgfTtcbnZhciBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICAgIHJldHVybiBfYmluZC5jYWxsKGZuLCB0aGlzQXJnKTtcbn1cbnZhciBDb25zdW1lck9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb25zdW1lck9ic2VydmVyKHBhcnRpYWxPYnNlcnZlcikge1xuICAgICAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHBhcnRpYWxPYnNlcnZlcjtcbiAgICB9XG4gICAgQ29uc3VtZXJPYnNlcnZlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIubmV4dCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbnN1bWVyT2JzZXJ2ZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb25zdW1lck9ic2VydmVyLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgICAgICBpZiAocGFydGlhbE9ic2VydmVyLmNvbXBsZXRlKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ29uc3VtZXJPYnNlcnZlcjtcbn0oKSk7XG52YXIgU2FmZVN1YnNjcmliZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihvYnNlcnZlck9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIHZhciBwYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCAhb2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IHtcbiAgICAgICAgICAgICAgICBuZXh0OiAob2JzZXJ2ZXJPck5leHQgIT09IG51bGwgJiYgb2JzZXJ2ZXJPck5leHQgIT09IHZvaWQgMCA/IG9ic2VydmVyT3JOZXh0IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3IgIT09IG51bGwgJiYgZXJyb3IgIT09IHZvaWQgMCA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBjb21wbGV0ZSAhPT0gbnVsbCAmJiBjb21wbGV0ZSAhPT0gdm9pZCAwID8gY29tcGxldGUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMTtcbiAgICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgY29udGV4dF8xLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsgfTtcbiAgICAgICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogb2JzZXJ2ZXJPck5leHQuZXJyb3IgJiYgYmluZChvYnNlcnZlck9yTmV4dC5lcnJvciwgY29udGV4dF8xKSxcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlICYmIGJpbmQob2JzZXJ2ZXJPck5leHQuY29tcGxldGUsIGNvbnRleHRfMSksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlciA9IG9ic2VydmVyT3JOZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IENvbnN1bWVyT2JzZXJ2ZXIocGFydGlhbE9ic2VydmVyKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU2FmZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IFNhZmVTdWJzY3JpYmVyIH07XG5mdW5jdGlvbiBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnJvcikge1xuICAgIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICBjYXB0dXJlRXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyb3IpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRlZmF1bHRFcnJvckhhbmRsZXIoZXJyKSB7XG4gICAgdGhyb3cgZXJyO1xufVxuZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpIHtcbiAgICB2YXIgb25TdG9wcGVkTm90aWZpY2F0aW9uID0gY29uZmlnLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjtcbiAgICBvblN0b3BwZWROb3RpZmljYXRpb24gJiYgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gb25TdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7IH0pO1xufVxuZXhwb3J0IHZhciBFTVBUWV9PQlNFUlZFUiA9IHtcbiAgICBjbG9zZWQ6IHRydWUsXG4gICAgbmV4dDogbm9vcCxcbiAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlcixcbiAgICBjb21wbGV0ZTogbm9vcCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpYmVyLmpzLm1hcCIsImltcG9ydCB7IHNjYW5JbnRlcm5hbHMgfSBmcm9tICcuL3NjYW5JbnRlcm5hbHMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlKGFjY3VtdWxhdG9yLCBzZWVkKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoc2NhbkludGVybmFscyhhY2N1bXVsYXRvciwgc2VlZCwgYXJndW1lbnRzLmxlbmd0aCA+PSAyLCBmYWxzZSwgdHJ1ZSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdWNlLmpzLm1hcCIsImNvbnN0IEJhc2VQYWdlID0gcmVxdWlyZSgnLi9zcmMvQmFzZVBhZ2UnKTtcbmNvbnN0IEJhc2VOb3RpZmljYXRpb24gPSByZXF1aXJlKCcuL3NyYy9CYXNlTm90aWZpY2F0aW9uJyk7XG5jb25zdCBBcHAgPSByZXF1aXJlKCcuL3NyYy9BcHAnKTtcbmNvbnN0IFB1YmxpY05vdGlmaWNhdGlvbkh1YiA9IHJlcXVpcmUoJy4vUHVibGljTm90aWZpY2F0aW9uSHViJyk7XG5jb25zdCBTdG9yYWdlSHViID0gcmVxdWlyZSgnLi9QdWJsaWNTdG9yYWdlSHViJyk7XG5jb25zdCBBdWRpb0h1YiA9IHJlcXVpcmUoJy4vUHVibGljQXVkaW9IdWInKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJhc2VQYWdlLFxuICBCYXNlTm90aWZpY2F0aW9uLFxuICBBcHAsXG4gIE5vdGlmaWNhdGlvbkh1YjogUHVibGljTm90aWZpY2F0aW9uSHViLFxuICBTdG9yYWdlSHViLFxuICBBdWRpb0h1Yixcbn07XG4iLCJpbXBvcnQgeyBFTVBUWSB9IGZyb20gJy4uL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gdGFrZShjb3VudCkge1xuICAgIHJldHVybiBjb3VudCA8PSAwXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEVNUFRZOyB9XG4gICAgICAgIDogb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoKytzZWVuIDw9IGNvdW50KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA8PSBzZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZS5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbm5lclN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgY2hlY2tDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzQ29tcGxldGUgJiYgIWlubmVyU3Vic2NyaWJlciAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7IH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaW5uZXJTdWJzY3JpYmVyID09PSBudWxsIHx8IGlubmVyU3Vic2NyaWJlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5uZXJTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB2YXIgaW5uZXJJbmRleCA9IDA7XG4gICAgICAgICAgICB2YXIgb3V0ZXJJbmRleCA9IGluZGV4Kys7XG4gICAgICAgICAgICBpbm5lckZyb20ocHJvamVjdCh2YWx1ZSwgb3V0ZXJJbmRleCkpLnN1YnNjcmliZSgoaW5uZXJTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChpbm5lclZhbHVlKSB7IHJldHVybiBzdWJzY3JpYmVyLm5leHQocmVzdWx0U2VsZWN0b3IgPyByZXN1bHRTZWxlY3Rvcih2YWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCsrKSA6IGlubmVyVmFsdWUpOyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KSkpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoTWFwLmpzLm1hcCIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuZXh0ZW5kID0gZXh0ZW5kO1xuZXhwb3J0cy5pbmRleE9mID0gaW5kZXhPZjtcbmV4cG9ydHMuZXNjYXBlRXhwcmVzc2lvbiA9IGVzY2FwZUV4cHJlc3Npb247XG5leHBvcnRzLmlzRW1wdHkgPSBpc0VtcHR5O1xuZXhwb3J0cy5jcmVhdGVGcmFtZSA9IGNyZWF0ZUZyYW1lO1xuZXhwb3J0cy5ibG9ja1BhcmFtcyA9IGJsb2NrUGFyYW1zO1xuZXhwb3J0cy5hcHBlbmRDb250ZXh0UGF0aCA9IGFwcGVuZENvbnRleHRQYXRoO1xudmFyIGVzY2FwZSA9IHtcbiAgJyYnOiAnJmFtcDsnLFxuICAnPCc6ICcmbHQ7JyxcbiAgJz4nOiAnJmd0OycsXG4gICdcIic6ICcmcXVvdDsnLFxuICBcIidcIjogJyYjeDI3OycsXG4gICdgJzogJyYjeDYwOycsXG4gICc9JzogJyYjeDNEOydcbn07XG5cbnZhciBiYWRDaGFycyA9IC9bJjw+XCInYD1dL2csXG4gICAgcG9zc2libGUgPSAvWyY8PlwiJ2A9XS87XG5cbmZ1bmN0aW9uIGVzY2FwZUNoYXIoY2hyKSB7XG4gIHJldHVybiBlc2NhcGVbY2hyXTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKG9iaiAvKiAsIC4uLnNvdXJjZSAqLykge1xuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGtleSBpbiBhcmd1bWVudHNbaV0pIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndW1lbnRzW2ldLCBrZXkpKSB7XG4gICAgICAgIG9ialtrZXldID0gYXJndW1lbnRzW2ldW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuZXhwb3J0cy50b1N0cmluZyA9IHRvU3RyaW5nO1xuLy8gU291cmNlZCBmcm9tIGxvZGFzaFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Jlc3RpZWpzL2xvZGFzaC9ibG9iL21hc3Rlci9MSUNFTlNFLnR4dFxuLyogZXNsaW50LWRpc2FibGUgZnVuYy1zdHlsZSAqL1xudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbic7XG59O1xuLy8gZmFsbGJhY2sgZm9yIG9sZGVyIHZlcnNpb25zIG9mIENocm9tZSBhbmQgU2FmYXJpXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuaWYgKGlzRnVuY3Rpb24oL3gvKSkge1xuICBleHBvcnRzLmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyAmJiB0b1N0cmluZy5jYWxsKHZhbHVlKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbiAgfTtcbn1cbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5cbi8qIGVzbGludC1lbmFibGUgZnVuYy1zdHlsZSAqL1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyA/IHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBBcnJheV0nIDogZmFsc2U7XG59O1xuXG5leHBvcnRzLmlzQXJyYXkgPSBpc0FycmF5O1xuLy8gT2xkZXIgSUUgdmVyc2lvbnMgZG8gbm90IGRpcmVjdGx5IHN1cHBvcnQgaW5kZXhPZiBzbyB3ZSBtdXN0IGltcGxlbWVudCBvdXIgb3duLCBzYWRseS5cblxuZnVuY3Rpb24gaW5kZXhPZihhcnJheSwgdmFsdWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKGFycmF5W2ldID09PSB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGk7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlRXhwcmVzc2lvbihzdHJpbmcpIHtcbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgLy8gZG9uJ3QgZXNjYXBlIFNhZmVTdHJpbmdzLCBzaW5jZSB0aGV5J3JlIGFscmVhZHkgc2FmZVxuICAgIGlmIChzdHJpbmcgJiYgc3RyaW5nLnRvSFRNTCkge1xuICAgICAgcmV0dXJuIHN0cmluZy50b0hUTUwoKTtcbiAgICB9IGVsc2UgaWYgKHN0cmluZyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSBlbHNlIGlmICghc3RyaW5nKSB7XG4gICAgICByZXR1cm4gc3RyaW5nICsgJyc7XG4gICAgfVxuXG4gICAgLy8gRm9yY2UgYSBzdHJpbmcgY29udmVyc2lvbiBhcyB0aGlzIHdpbGwgYmUgZG9uZSBieSB0aGUgYXBwZW5kIHJlZ2FyZGxlc3MgYW5kXG4gICAgLy8gdGhlIHJlZ2V4IHRlc3Qgd2lsbCBkbyB0aGlzIHRyYW5zcGFyZW50bHkgYmVoaW5kIHRoZSBzY2VuZXMsIGNhdXNpbmcgaXNzdWVzIGlmXG4gICAgLy8gYW4gb2JqZWN0J3MgdG8gc3RyaW5nIGhhcyBlc2NhcGVkIGNoYXJhY3RlcnMgaW4gaXQuXG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmc7XG4gIH1cblxuICBpZiAoIXBvc3NpYmxlLnRlc3Qoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5yZXBsYWNlKGJhZENoYXJzLCBlc2NhcGVDaGFyKTtcbn1cblxuZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICBpZiAoIXZhbHVlICYmIHZhbHVlICE9PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSBpZiAoaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYW1lKG9iamVjdCkge1xuICB2YXIgZnJhbWUgPSBleHRlbmQoe30sIG9iamVjdCk7XG4gIGZyYW1lLl9wYXJlbnQgPSBvYmplY3Q7XG4gIHJldHVybiBmcmFtZTtcbn1cblxuZnVuY3Rpb24gYmxvY2tQYXJhbXMocGFyYW1zLCBpZHMpIHtcbiAgcGFyYW1zLnBhdGggPSBpZHM7XG4gIHJldHVybiBwYXJhbXM7XG59XG5cbmZ1bmN0aW9uIGFwcGVuZENvbnRleHRQYXRoKGNvbnRleHRQYXRoLCBpZCkge1xuICByZXR1cm4gKGNvbnRleHRQYXRoID8gY29udGV4dFBhdGggKyAnLicgOiAnJykgKyBpZDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDNWMGFXeHpMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN096czdPenM3UVVGQlFTeEpRVUZOTEUxQlFVMHNSMEZCUnp0QlFVTmlMRXRCUVVjc1JVRkJSU3hQUVVGUE8wRkJRMW9zUzBGQlJ5eEZRVUZGTEUxQlFVMDdRVUZEV0N4TFFVRkhMRVZCUVVVc1RVRkJUVHRCUVVOWUxFdEJRVWNzUlVGQlJTeFJRVUZSTzBGQlEySXNTMEZCUnl4RlFVRkZMRkZCUVZFN1FVRkRZaXhMUVVGSExFVkJRVVVzVVVGQlVUdEJRVU5pTEV0QlFVY3NSVUZCUlN4UlFVRlJPME5CUTJRc1EwRkJRenM3UVVGRlJpeEpRVUZOTEZGQlFWRXNSMEZCUnl4WlFVRlpPMGxCUXpOQ0xGRkJRVkVzUjBGQlJ5eFhRVUZYTEVOQlFVTTdPMEZCUlhwQ0xGTkJRVk1zVlVGQlZTeERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTjJRaXhUUVVGUExFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0RFFVTndRanM3UVVGRlRTeFRRVUZUTEUxQlFVMHNRMEZCUXl4SFFVRkhMRzlDUVVGdlFqdEJRVU0xUXl4UFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU42UXl4VFFVRkxMRWxCUVVrc1IwRkJSeXhKUVVGSkxGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0QlFVTTFRaXhWUVVGSkxFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRVZCUVVVN1FVRkRNMFFzVjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRk5CUVZNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UFFVTTVRanRMUVVOR08wZEJRMFk3TzBGQlJVUXNVMEZCVHl4SFFVRkhMRU5CUVVNN1EwRkRXanM3UVVGRlRTeEpRVUZKTEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExGRkJRVkVzUTBGQlF6czdPenM3TzBGQlMyaEVMRWxCUVVrc1ZVRkJWU3hIUVVGSExHOUNRVUZUTEV0QlFVc3NSVUZCUlR0QlFVTXZRaXhUUVVGUExFOUJRVThzUzBGQlN5eExRVUZMTEZWQlFWVXNRMEZCUXp0RFFVTndReXhEUVVGRE96czdRVUZIUml4SlFVRkpMRlZCUVZVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJUdEJRVU51UWl4VlFVOVBMRlZCUVZVc1IwRlFha0lzVlVGQlZTeEhRVUZITEZWQlFWTXNTMEZCU3l4RlFVRkZPMEZCUXpOQ0xGZEJRMFVzVDBGQlR5eExRVUZMTEV0QlFVc3NWVUZCVlN4SlFVTXpRaXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRzFDUVVGdFFpeERRVU0xUXp0SFFVTklMRU5CUVVNN1EwRkRTRHRSUVVOUkxGVkJRVlVzUjBGQlZpeFZRVUZWT3pzN096dEJRVWxhTEVsQlFVMHNUMEZCVHl4SFFVTnNRaXhMUVVGTExFTkJRVU1zVDBGQlR5eEpRVU5pTEZWQlFWTXNTMEZCU3l4RlFVRkZPMEZCUTJRc1UwRkJUeXhMUVVGTExFbEJRVWtzVDBGQlR5eExRVUZMTEV0QlFVc3NVVUZCVVN4SFFVTnlReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMR2RDUVVGblFpeEhRVU42UXl4TFFVRkxMRU5CUVVNN1EwRkRXQ3hEUVVGRE96czdPenRCUVVkSExGTkJRVk1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVVN1FVRkRjRU1zVDBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdEJRVU5vUkN4UlFVRkpMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUzBGQlN5eExRVUZMTEVWQlFVVTdRVUZEZEVJc1lVRkJUeXhEUVVGRExFTkJRVU03UzBGRFZqdEhRVU5HTzBGQlEwUXNVMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenREUVVOWU96dEJRVVZOTEZOQlFWTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEzWkRMRTFCUVVrc1QwRkJUeXhOUVVGTkxFdEJRVXNzVVVGQlVTeEZRVUZGT3p0QlFVVTVRaXhSUVVGSkxFMUJRVTBzU1VGQlNTeE5RVUZOTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUXpOQ0xHRkJRVThzVFVGQlRTeERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMHRCUTNoQ0xFMUJRVTBzU1VGQlNTeE5RVUZOTEVsQlFVa3NTVUZCU1N4RlFVRkZPMEZCUTNwQ0xHRkJRVThzUlVGQlJTeERRVUZETzB0QlExZ3NUVUZCVFN4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMnhDTEdGQlFVOHNUVUZCVFN4SFFVRkhMRVZCUVVVc1EwRkJRenRMUVVOd1FqczdPenM3UVVGTFJDeFZRVUZOTEVkQlFVY3NSVUZCUlN4SFFVRkhMRTFCUVUwc1EwRkJRenRIUVVOMFFqczdRVUZGUkN4TlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlR0QlFVTXhRaXhYUVVGUExFMUJRVTBzUTBGQlF6dEhRVU5tTzBGQlEwUXNVMEZCVHl4TlFVRk5MRU5CUVVNc1QwRkJUeXhEUVVGRExGRkJRVkVzUlVGQlJTeFZRVUZWTEVOQlFVTXNRMEZCUXp0RFFVTTNRenM3UVVGRlRTeFRRVUZUTEU5QlFVOHNRMEZCUXl4TFFVRkxMRVZCUVVVN1FVRkROMElzVFVGQlNTeERRVUZETEV0QlFVc3NTVUZCU1N4TFFVRkxMRXRCUVVzc1EwRkJReXhGUVVGRk8wRkJRM3BDTEZkQlFVOHNTVUZCU1N4RFFVRkRPMGRCUTJJc1RVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1RVRkJUU3hMUVVGTExFTkJRVU1zUlVGQlJUdEJRVU12UXl4WFFVRlBMRWxCUVVrc1EwRkJRenRIUVVOaUxFMUJRVTA3UVVGRFRDeFhRVUZQTEV0QlFVc3NRMEZCUXp0SFFVTmtPME5CUTBZN08wRkJSVTBzVTBGQlV5eFhRVUZYTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4RExFMUJRVWtzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4RlFVRkZMRVZCUVVVc1RVRkJUU3hEUVVGRExFTkJRVU03UVVGREwwSXNUMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRGRrSXNVMEZCVHl4TFFVRkxMRU5CUVVNN1EwRkRaRHM3UVVGRlRTeFRRVUZUTEZkQlFWY3NRMEZCUXl4TlFVRk5MRVZCUVVVc1IwRkJSeXhGUVVGRk8wRkJRM1pETEZGQlFVMHNRMEZCUXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRE8wRkJRMnhDTEZOQlFVOHNUVUZCVFN4RFFVRkRPME5CUTJZN08wRkJSVTBzVTBGQlV5eHBRa0ZCYVVJc1EwRkJReXhYUVVGWExFVkJRVVVzUlVGQlJTeEZRVUZGTzBGQlEycEVMRk5CUVU4c1EwRkJReXhYUVVGWExFZEJRVWNzVjBGQlZ5eEhRVUZITEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVFc1IwRkJTU3hGUVVGRkxFTkJRVU03UTBGRGNFUWlMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpqYjI1emRDQmxjMk5oY0dVZ1BTQjdYRzRnSUNjbUp6b2dKeVpoYlhBN0p5eGNiaUFnSnp3bk9pQW5KbXgwT3ljc1hHNGdJQ2MrSnpvZ0p5Wm5kRHNuTEZ4dUlDQW5YQ0luT2lBbkpuRjFiM1E3Snl4Y2JpQWdYQ0luWENJNklDY21JM2d5TnpzbkxGeHVJQ0FuWUNjNklDY21JM2cyTURzbkxGeHVJQ0FuUFNjNklDY21JM2d6UkRzblhHNTlPMXh1WEc1amIyNXpkQ0JpWVdSRGFHRnljeUE5SUM5YkpqdytYQ0luWUQxZEwyY3NYRzRnSUhCdmMzTnBZbXhsSUQwZ0wxc21QRDVjSWlkZ1BWMHZPMXh1WEc1bWRXNWpkR2x2YmlCbGMyTmhjR1ZEYUdGeUtHTm9jaWtnZTF4dUlDQnlaWFIxY200Z1pYTmpZWEJsVzJOb2NsMDdYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCbGVIUmxibVFvYjJKcUlDOHFJQ3dnTGk0dWMyOTFjbU5sSUNvdktTQjdYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXhPeUJwSUR3Z1lYSm5kVzFsYm5SekxteGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdabTl5SUNoc1pYUWdhMlY1SUdsdUlHRnlaM1Z0Wlc1MGMxdHBYU2tnZTF4dUlDQWdJQ0FnYVdZZ0tFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGt1WTJGc2JDaGhjbWQxYldWdWRITmJhVjBzSUd0bGVTa3BJSHRjYmlBZ0lDQWdJQ0FnYjJKcVcydGxlVjBnUFNCaGNtZDFiV1Z1ZEhOYmFWMWJhMlY1WFR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCeVpYUjFjbTRnYjJKcU8xeHVmVnh1WEc1bGVIQnZjblFnYkdWMElIUnZVM1J5YVc1bklEMGdUMkpxWldOMExuQnliM1J2ZEhsd1pTNTBiMU4wY21sdVp6dGNibHh1THk4Z1UyOTFjbU5sWkNCbWNtOXRJR3h2WkdGemFGeHVMeThnYUhSMGNITTZMeTluYVhSb2RXSXVZMjl0TDJKbGMzUnBaV3B6TDJ4dlpHRnphQzlpYkc5aUwyMWhjM1JsY2k5TVNVTkZUbE5GTG5SNGRGeHVMeW9nWlhOc2FXNTBMV1JwYzJGaWJHVWdablZ1WXkxemRIbHNaU0FxTDF4dWJHVjBJR2x6Um5WdVkzUnBiMjRnUFNCbWRXNWpkR2x2YmloMllXeDFaU2tnZTF4dUlDQnlaWFIxY200Z2RIbHdaVzltSUhaaGJIVmxJRDA5UFNBblpuVnVZM1JwYjI0bk8xeHVmVHRjYmk4dklHWmhiR3hpWVdOcklHWnZjaUJ2YkdSbGNpQjJaWEp6YVc5dWN5QnZaaUJEYUhKdmJXVWdZVzVrSUZOaFptRnlhVnh1THlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUc1bGVIUWdLaTljYm1sbUlDaHBjMFoxYm1OMGFXOXVLQzk0THlrcElIdGNiaUFnYVhOR2RXNWpkR2x2YmlBOUlHWjFibU4wYVc5dUtIWmhiSFZsS1NCN1hHNGdJQ0FnY21WMGRYSnVJQ2hjYmlBZ0lDQWdJSFI1Y0dWdlppQjJZV3gxWlNBOVBUMGdKMloxYm1OMGFXOXVKeUFtSmx4dUlDQWdJQ0FnZEc5VGRISnBibWN1WTJGc2JDaDJZV3gxWlNrZ1BUMDlJQ2RiYjJKcVpXTjBJRVoxYm1OMGFXOXVYU2RjYmlBZ0lDQXBPMXh1SUNCOU8xeHVmVnh1Wlhod2IzSjBJSHNnYVhOR2RXNWpkR2x2YmlCOU8xeHVMeW9nWlhOc2FXNTBMV1Z1WVdKc1pTQm1kVzVqTFhOMGVXeGxJQ292WEc1Y2JpOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwSUNvdlhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVhOQmNuSmhlU0E5WEc0Z0lFRnljbUY1TG1selFYSnlZWGtnZkh4Y2JpQWdablZ1WTNScGIyNG9kbUZzZFdVcElIdGNiaUFnSUNCeVpYUjFjbTRnZG1Gc2RXVWdKaVlnZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuYjJKcVpXTjBKMXh1SUNBZ0lDQWdQeUIwYjFOMGNtbHVaeTVqWVd4c0tIWmhiSFZsS1NBOVBUMGdKMXR2WW1wbFkzUWdRWEp5WVhsZEoxeHVJQ0FnSUNBZ09pQm1ZV3h6WlR0Y2JpQWdmVHRjYmx4dUx5OGdUMnhrWlhJZ1NVVWdkbVZ5YzJsdmJuTWdaRzhnYm05MElHUnBjbVZqZEd4NUlITjFjSEJ2Y25RZ2FXNWtaWGhQWmlCemJ5QjNaU0J0ZFhOMElHbHRjR3hsYldWdWRDQnZkWElnYjNkdUxDQnpZV1JzZVM1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCcGJtUmxlRTltS0dGeWNtRjVMQ0IyWVd4MVpTa2dlMXh1SUNCbWIzSWdLR3hsZENCcElEMGdNQ3dnYkdWdUlEMGdZWEp5WVhrdWJHVnVaM1JvT3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQnBaaUFvWVhKeVlYbGJhVjBnUFQwOUlIWmhiSFZsS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYVR0Y2JpQWdJQ0I5WEc0Z0lIMWNiaUFnY21WMGRYSnVJQzB4TzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdaWE5qWVhCbFJYaHdjbVZ6YzJsdmJpaHpkSEpwYm1jcElIdGNiaUFnYVdZZ0tIUjVjR1Z2WmlCemRISnBibWNnSVQwOUlDZHpkSEpwYm1jbktTQjdYRzRnSUNBZ0x5OGdaRzl1SjNRZ1pYTmpZWEJsSUZOaFptVlRkSEpwYm1kekxDQnphVzVqWlNCMGFHVjVKM0psSUdGc2NtVmhaSGtnYzJGbVpWeHVJQ0FnSUdsbUlDaHpkSEpwYm1jZ0ppWWdjM1J5YVc1bkxuUnZTRlJOVENrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUhOMGNtbHVaeTUwYjBoVVRVd29LVHRjYmlBZ0lDQjlJR1ZzYzJVZ2FXWWdLSE4wY21sdVp5QTlQU0J1ZFd4c0tTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z0p5YzdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDZ2hjM1J5YVc1bktTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2MzUnlhVzVuSUNzZ0p5YzdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ0x5OGdSbTl5WTJVZ1lTQnpkSEpwYm1jZ1kyOXVkbVZ5YzJsdmJpQmhjeUIwYUdseklIZHBiR3dnWW1VZ1pHOXVaU0JpZVNCMGFHVWdZWEJ3Wlc1a0lISmxaMkZ5Wkd4bGMzTWdZVzVrWEc0Z0lDQWdMeThnZEdobElISmxaMlY0SUhSbGMzUWdkMmxzYkNCa2J5QjBhR2x6SUhSeVlXNXpjR0Z5Wlc1MGJIa2dZbVZvYVc1a0lIUm9aU0J6WTJWdVpYTXNJR05oZFhOcGJtY2dhWE56ZFdWeklHbG1YRzRnSUNBZ0x5OGdZVzRnYjJKcVpXTjBKM01nZEc4Z2MzUnlhVzVuSUdoaGN5QmxjMk5oY0dWa0lHTm9ZWEpoWTNSbGNuTWdhVzRnYVhRdVhHNGdJQ0FnYzNSeWFXNW5JRDBnSnljZ0t5QnpkSEpwYm1jN1hHNGdJSDFjYmx4dUlDQnBaaUFvSVhCdmMzTnBZbXhsTG5SbGMzUW9jM1J5YVc1bktTa2dlMXh1SUNBZ0lISmxkSFZ5YmlCemRISnBibWM3WEc0Z0lIMWNiaUFnY21WMGRYSnVJSE4wY21sdVp5NXlaWEJzWVdObEtHSmhaRU5vWVhKekxDQmxjMk5oY0dWRGFHRnlLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHbHpSVzF3ZEhrb2RtRnNkV1VwSUh0Y2JpQWdhV1lnS0NGMllXeDFaU0FtSmlCMllXeDFaU0FoUFQwZ01Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOUlHVnNjMlVnYVdZZ0tHbHpRWEp5WVhrb2RtRnNkV1VwSUNZbUlIWmhiSFZsTG14bGJtZDBhQ0E5UFQwZ01Da2dlMXh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOUlHVnNjMlVnZTF4dUlDQWdJSEpsZEhWeWJpQm1ZV3h6WlR0Y2JpQWdmVnh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kzSmxZWFJsUm5KaGJXVW9iMkpxWldOMEtTQjdYRzRnSUd4bGRDQm1jbUZ0WlNBOUlHVjRkR1Z1WkNoN2ZTd2diMkpxWldOMEtUdGNiaUFnWm5KaGJXVXVYM0JoY21WdWRDQTlJRzlpYW1WamREdGNiaUFnY21WMGRYSnVJR1p5WVcxbE8xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWW14dlkydFFZWEpoYlhNb2NHRnlZVzF6TENCcFpITXBJSHRjYmlBZ2NHRnlZVzF6TG5CaGRHZ2dQU0JwWkhNN1hHNGdJSEpsZEhWeWJpQndZWEpoYlhNN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJoY0hCbGJtUkRiMjUwWlhoMFVHRjBhQ2hqYjI1MFpYaDBVR0YwYUN3Z2FXUXBJSHRjYmlBZ2NtVjBkWEp1SUNoamIyNTBaWGgwVUdGMGFDQS9JR052Ym5SbGVIUlFZWFJvSUNzZ0p5NG5JRG9nSnljcElDc2dhV1E3WEc1OVhHNGlYWDA9XG4iLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmV4cG9ydCBmdW5jdGlvbiBzdWJzY3JpYmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsgfSwgZGVsYXkpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjcmliZU9uLmpzLm1hcCIsImltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0sIGRlbGF5KTsgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9LCBkZWxheSk7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSwgZGVsYXkpOyB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vYnNlcnZlT24uanMubWFwIiwiaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL21lcmdlTWFwJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbGwoY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsgY29uY3VycmVudCA9IEluZmluaXR5OyB9XG4gICAgcmV0dXJuIG1lcmdlTWFwKGlkZW50aXR5LCBjb25jdXJyZW50KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlQWxsLmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChkZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZhdWx0SWZFbXB0eS5qcy5tYXAiLCJpbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi4vdXRpbC9FbXB0eUVycm9yJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHRocm93SWZFbXB0eShlcnJvckZhY3RvcnkpIHtcbiAgICBpZiAoZXJyb3JGYWN0b3J5ID09PSB2b2lkIDApIHsgZXJyb3JGYWN0b3J5ID0gZGVmYXVsdEVycm9yRmFjdG9yeTsgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gKGhhc1ZhbHVlID8gc3Vic2NyaWJlci5jb21wbGV0ZSgpIDogc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSkpOyB9KSk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgRW1wdHlFcnJvcigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dJZkVtcHR5LmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2NoZWR1bGVyIH0gZnJvbSAnLi4vU2NoZWR1bGVyJztcbnZhciBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkgeyBub3cgPSBTY2hlZHVsZXIubm93OyB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIFNjaGVkdWxlckFjdGlvbiwgbm93KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1NjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoYWN0aW9uKSB7XG4gICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zO1xuICAgICAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICAgICAgICBhY3Rpb25zLnB1c2goYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKTtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpKSB7XG4gICAgICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyO1xufShTY2hlZHVsZXIpKTtcbmV4cG9ydCB7IEFzeW5jU2NoZWR1bGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY1NjaGVkdWxlci5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG52YXIgQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuZXhwb3J0IHsgQWN0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BY3Rpb24uanMubWFwIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5leHBvcnQgdmFyIGludGVydmFsUHJvdmlkZXIgPSB7XG4gICAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGludGVydmFsUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0SW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbC5hcHBseShkZWxlZ2F0ZSwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIsIHRpbWVvdXRdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFySW50ZXJ2YWwpIHx8IGNsZWFySW50ZXJ2YWwpKGhhbmRsZSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWludGVydmFsUHJvdmlkZXIuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tICcuL0FjdGlvbic7XG5pbXBvcnQgeyBpbnRlcnZhbFByb3ZpZGVyIH0gZnJvbSAnLi9pbnRlcnZhbFByb3ZpZGVyJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4uL3V0aWwvYXJyUmVtb3ZlJztcbnZhciBBc3luY0FjdGlvbiA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIF90aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gKF9hID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzY2hlZHVsZXIsIHRoaXMuaWQsIGRlbGF5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBfaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICByZXR1cm4gaW50ZXJ2YWxQcm92aWRlci5zZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoX3NjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheSAmJiB0aGlzLnBlbmRpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICByZXR1cm4gaWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGludGVydmFsUHJvdmlkZXIuY2xlYXJJbnRlcnZhbChpZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRXJyb3IoJ2V4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb24nKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBlbmRpbmcgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yID0gdGhpcy5fZXhlY3V0ZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLnBlbmRpbmcgPT09IGZhbHNlICYmIHRoaXMuaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIF9kZWxheSkge1xuICAgICAgICB2YXIgZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3JWYWx1ZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMud29yayhzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICAgICAgZXJyb3JWYWx1ZSA9IGUgPyBlIDogbmV3IEVycm9yKCdTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIGlkID0gX2EuaWQsIHNjaGVkdWxlciA9IF9hLnNjaGVkdWxlcjtcbiAgICAgICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgICAgICBhcnJSZW1vdmUoYWN0aW9ucywgdGhpcyk7XG4gICAgICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHNjaGVkdWxlciwgaWQsIG51bGwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBc3luY0FjdGlvbjtcbn0oQWN0aW9uKSk7XG5leHBvcnQgeyBBc3luY0FjdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXN5bmNBY3Rpb24uanMubWFwIiwidmFyIGZyZWVHbG9iYWwgPSByZXF1aXJlKCcuL19mcmVlR2xvYmFsJyk7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxubW9kdWxlLmV4cG9ydHMgPSByb290O1xuIiwiaW1wb3J0IHsgRU1QVFkgfSBmcm9tICcuL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0IHsgb2YgfSBmcm9tICcuL29ic2VydmFibGUvb2YnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJy4vb2JzZXJ2YWJsZS90aHJvd0Vycm9yJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL3V0aWwvaXNGdW5jdGlvbic7XG5leHBvcnQgdmFyIE5vdGlmaWNhdGlvbktpbmQ7XG4oZnVuY3Rpb24gKE5vdGlmaWNhdGlvbktpbmQpIHtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiTkVYVFwiXSA9IFwiTlwiO1xuICAgIE5vdGlmaWNhdGlvbktpbmRbXCJFUlJPUlwiXSA9IFwiRVwiO1xuICAgIE5vdGlmaWNhdGlvbktpbmRbXCJDT01QTEVURVwiXSA9IFwiQ1wiO1xufSkoTm90aWZpY2F0aW9uS2luZCB8fCAoTm90aWZpY2F0aW9uS2luZCA9IHt9KSk7XG52YXIgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24oa2luZCwgdmFsdWUsIGVycm9yKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0ga2luZCA9PT0gJ04nO1xuICAgIH1cbiAgICBOb3RpZmljYXRpb24ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uIChuZXh0SGFuZGxlciwgZXJyb3JIYW5kbGVyLCBjb21wbGV0ZUhhbmRsZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywga2luZCA9IF9hLmtpbmQsIHZhbHVlID0gX2EudmFsdWUsIGVycm9yID0gX2EuZXJyb3I7XG4gICAgICAgIHJldHVybiBraW5kID09PSAnTicgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUpIDoga2luZCA9PT0gJ0UnID8gZXJyb3JIYW5kbGVyID09PSBudWxsIHx8IGVycm9ySGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogZXJyb3JIYW5kbGVyKGVycm9yKSA6IGNvbXBsZXRlSGFuZGxlciA9PT0gbnVsbCB8fCBjb21wbGV0ZUhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbXBsZXRlSGFuZGxlcigpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbiAobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKChfYSA9IG5leHRPck9ic2VydmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubmV4dClcbiAgICAgICAgICAgID8gdGhpcy5vYnNlcnZlKG5leHRPck9ic2VydmVyKVxuICAgICAgICAgICAgOiB0aGlzLmRvKG5leHRPck9ic2VydmVyLCBlcnJvciwgY29tcGxldGUpO1xuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS50b09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGtpbmQgPSBfYS5raW5kLCB2YWx1ZSA9IF9hLnZhbHVlLCBlcnJvciA9IF9hLmVycm9yO1xuICAgICAgICB2YXIgcmVzdWx0ID0ga2luZCA9PT0gJ04nXG4gICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgb2YodmFsdWUpXG4gICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAga2luZCA9PT0gJ0UnXG4gICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93RXJyb3IoZnVuY3Rpb24gKCkgeyByZXR1cm4gZXJyb3I7IH0pXG4gICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbmQgPT09ICdDJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU1QVFlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDA7XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5leHBlY3RlZCBub3RpZmljYXRpb24ga2luZCBcIiArIGtpbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IE5vdGlmaWNhdGlvbignTicsIHZhbHVlKTtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ0UnLCB1bmRlZmluZWQsIGVycik7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb247XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKCdDJyk7XG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbjtcbn0oKSk7XG5leHBvcnQgeyBOb3RpZmljYXRpb24gfTtcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgb2JzZXJ2ZXIpIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICB2YXIgX2QgPSBub3RpZmljYXRpb24sIGtpbmQgPSBfZC5raW5kLCB2YWx1ZSA9IF9kLnZhbHVlLCBlcnJvciA9IF9kLmVycm9yO1xuICAgIGlmICh0eXBlb2Yga2luZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgXCJraW5kXCInKTtcbiAgICB9XG4gICAga2luZCA9PT0gJ04nID8gKF9hID0gb2JzZXJ2ZXIubmV4dCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob2JzZXJ2ZXIsIHZhbHVlKSA6IGtpbmQgPT09ICdFJyA/IChfYiA9IG9ic2VydmVyLmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChvYnNlcnZlciwgZXJyb3IpIDogKF9jID0gb2JzZXJ2ZXIuY29tcGxldGUpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKG9ic2VydmVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vdGlmaWNhdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBjb25jYXRBbGwgfSBmcm9tICcuLi9vcGVyYXRvcnMvY29uY2F0QWxsJztcbmltcG9ydCB7IHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBjb25jYXRBbGwoKShmcm9tKGFyZ3MsIHBvcFNjaGVkdWxlcihhcmdzKSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0LmpzLm1hcCIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhbiBgQXJyYXlgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJyYXkoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXkoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheSgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNBcnJheShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXk7XG4iLCJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBpc1ZhbGlkRGF0ZSB9IGZyb20gJy4uL3V0aWwvaXNEYXRlJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4uL3V0aWwvY3JlYXRlRXJyb3JDbGFzcyc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgdmFyIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHtcbiAgICAgICAgaWYgKGluZm8gPT09IHZvaWQgMCkgeyBpbmZvID0gbnVsbDsgfVxuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9ICdUaW1lb3V0IGhhcyBvY2N1cnJlZCc7XG4gICAgICAgIHRoaXMubmFtZSA9ICdUaW1lb3V0RXJyb3InO1xuICAgICAgICB0aGlzLmluZm8gPSBpbmZvO1xuICAgIH07XG59KTtcbmV4cG9ydCBmdW5jdGlvbiB0aW1lb3V0KGNvbmZpZywgc2NoZWR1bGVyQXJnKSB7XG4gICAgdmFyIF9hID0gKGlzVmFsaWREYXRlKGNvbmZpZykgPyB7IGZpcnN0OiBjb25maWcgfSA6IHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInID8geyBlYWNoOiBjb25maWcgfSA6IGNvbmZpZyksIGZpcnN0ID0gX2EuZmlyc3QsIGVhY2ggPSBfYS5lYWNoLCBfYiA9IF9hLndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYS5zY2hlZHVsZXIsIHNjaGVkdWxlciA9IF9jID09PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgIT09IG51bGwgJiYgc2NoZWR1bGVyQXJnICE9PSB2b2lkIDAgPyBzY2hlZHVsZXJBcmcgOiBhc3luY1NjaGVkdWxlciA6IF9jLCBfZCA9IF9hLm1ldGEsIG1ldGEgPSBfZCA9PT0gdm9pZCAwID8gbnVsbCA6IF9kO1xuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjtcbiAgICAgICAgdmFyIHRpbWVyU3Vic2NyaXB0aW9uO1xuICAgICAgICB2YXIgbGFzdFZhbHVlID0gbnVsbDtcbiAgICAgICAgdmFyIHNlZW4gPSAwO1xuICAgICAgICB2YXIgc3RhcnRUaW1lciA9IGZ1bmN0aW9uIChkZWxheSkge1xuICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKF93aXRoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGE6IG1ldGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0VmFsdWU6IGxhc3RWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlZW46IHNlZW4sXG4gICAgICAgICAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIGRlbGF5KTtcbiAgICAgICAgfTtcbiAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgc2VlbisrO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KChsYXN0VmFsdWUgPSB2YWx1ZSkpO1xuICAgICAgICAgICAgZWFjaCA+IDAgJiYgc3RhcnRUaW1lcihlYWNoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7XG4gICAgICAgICAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QgIT0gbnVsbCA/ICh0eXBlb2YgZmlyc3QgPT09ICdudW1iZXInID8gZmlyc3QgOiArZmlyc3QgLSBzY2hlZHVsZXIubm93KCkpIDogZWFjaCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHtcbiAgICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dC5qcy5tYXAiLCJpbXBvcnQgeyBtZXJnZUFsbCB9IGZyb20gJy4vbWVyZ2VBbGwnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdEFsbCgpIHtcbiAgICByZXR1cm4gbWVyZ2VBbGwoMSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRBbGwuanMubWFwIiwiaW1wb3J0IHsgQ29ubmVjdGFibGVPYnNlcnZhYmxlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBjb25uZWN0IH0gZnJvbSAnLi9jb25uZWN0JztcbmV4cG9ydCBmdW5jdGlvbiBtdWx0aWNhc3Qoc3ViamVjdE9yU3ViamVjdEZhY3RvcnksIHNlbGVjdG9yKSB7XG4gICAgdmFyIHN1YmplY3RGYWN0b3J5ID0gaXNGdW5jdGlvbihzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSkgPyBzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmplY3RPclN1YmplY3RGYWN0b3J5OyB9O1xuICAgIGlmIChpc0Z1bmN0aW9uKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gY29ubmVjdChzZWxlY3Rvciwge1xuICAgICAgICAgICAgY29ubmVjdG9yOiBzdWJqZWN0RmFjdG9yeSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgc3ViamVjdEZhY3RvcnkpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bXVsdGljYXN0LmpzLm1hcCIsImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgZnJvbVN1YnNjcmliYWJsZSB9IGZyb20gJy4uL29ic2VydmFibGUvZnJvbVN1YnNjcmliYWJsZSc7XG52YXIgREVGQVVMVF9DT05GSUcgPSB7XG4gICAgY29ubmVjdG9yOiBmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3ViamVjdCgpOyB9LFxufTtcbmV4cG9ydCBmdW5jdGlvbiBjb25uZWN0KHNlbGVjdG9yLCBjb25maWcpIHtcbiAgICBpZiAoY29uZmlnID09PSB2b2lkIDApIHsgY29uZmlnID0gREVGQVVMVF9DT05GSUc7IH1cbiAgICB2YXIgY29ubmVjdG9yID0gY29uZmlnLmNvbm5lY3RvcjtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gY29ubmVjdG9yKCk7XG4gICAgICAgIGlubmVyRnJvbShzZWxlY3Rvcihmcm9tU3Vic2NyaWJhYmxlKHN1YmplY3QpKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBzdWJzY3JpYmVyLmFkZChzb3VyY2Uuc3Vic2NyaWJlKHN1YmplY3QpKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbm5lY3QuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21TdWJzY3JpYmFibGUoc3Vic2NyaWJhYmxlKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzdWJzY3JpYmFibGUuc3Vic2NyaWJlKHN1YnNjcmliZXIpOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21TdWJzY3JpYmFibGUuanMubWFwIiwiZXhwb3J0IHZhciBvYnNlcnZhYmxlID0gKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5vYnNlcnZhYmxlKSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9ic2VydmFibGUuanMubWFwIiwiaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiBwaXBlKCkge1xuICAgIHZhciBmbnMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBmbnNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkoZm5zKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwaXBlRnJvbUFycmF5KGZucykge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBpZGVudGl0eTtcbiAgICB9XG4gICAgaWYgKGZucy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZuc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBmbnMucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBmbikgeyByZXR1cm4gZm4ocHJldik7IH0sIGlucHV0KTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGlwZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyByZWZDb3VudCBhcyBoaWdoZXJPcmRlclJlZkNvdW50IH0gZnJvbSAnLi4vb3BlcmF0b3JzL3JlZkNvdW50JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaGFzTGlmdCB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQ29ubmVjdGFibGVPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIHN1YmplY3RGYWN0b3J5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgX3RoaXMuc3ViamVjdEZhY3RvcnkgPSBzdWJqZWN0RmFjdG9yeTtcbiAgICAgICAgX3RoaXMuX3N1YmplY3QgPSBudWxsO1xuICAgICAgICBfdGhpcy5fcmVmQ291bnQgPSAwO1xuICAgICAgICBfdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHtcbiAgICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFN1YmplY3QoKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLmdldFN1YmplY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDtcbiAgICAgICAgaWYgKCFzdWJqZWN0IHx8IHN1YmplY3QuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5zdWJqZWN0RmFjdG9yeSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0O1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX3JlZkNvdW50ID0gMDtcbiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjtcbiAgICAgICAgdGhpcy5fc3ViamVjdCA9IHRoaXMuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBfY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBfY29ubmVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Nvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uO1xuICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpO1xuICAgICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpO1xuICAgICAgICAgICAgICAgIHN1YmplY3RfMS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX3RlYXJkb3duKCk7IH0pKSk7XG4gICAgICAgICAgICBpZiAoY29ubmVjdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb25uZWN0aW9uO1xuICAgIH07XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5yZWZDb3VudCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGhpZ2hlck9yZGVyUmVmQ291bnQoKSh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGU7XG59KE9ic2VydmFibGUpKTtcbmV4cG9ydCB7IENvbm5lY3RhYmxlT2JzZXJ2YWJsZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29ubmVjdGFibGVPYnNlcnZhYmxlLmpzLm1hcCIsImltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZWR1bGVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIGlzRnVuY3Rpb24odmFsdWUuc2NoZWR1bGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNTY2hlZHVsZXIuanMubWFwIiwiaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi4vY29uZmlnJztcbnZhciBjb250ZXh0ID0gbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBlcnJvckNvbnRleHQoY2IpIHtcbiAgICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgdmFyIGlzUm9vdCA9ICFjb250ZXh0O1xuICAgICAgICBpZiAoaXNSb290KSB7XG4gICAgICAgICAgICBjb250ZXh0ID0geyBlcnJvclRocm93bjogZmFsc2UsIGVycm9yOiBudWxsIH07XG4gICAgICAgIH1cbiAgICAgICAgY2IoKTtcbiAgICAgICAgaWYgKGlzUm9vdCkge1xuICAgICAgICAgICAgdmFyIF9hID0gY29udGV4dCwgZXJyb3JUaHJvd24gPSBfYS5lcnJvclRocm93biwgZXJyb3IgPSBfYS5lcnJvcjtcbiAgICAgICAgICAgIGNvbnRleHQgPSBudWxsO1xuICAgICAgICAgICAgaWYgKGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNiKCk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNhcHR1cmVFcnJvcihlcnIpIHtcbiAgICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcgJiYgY29udGV4dCkge1xuICAgICAgICBjb250ZXh0LmVycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgY29udGV4dC5lcnJvciA9IGVycjtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lcnJvckNvbnRleHQuanMubWFwIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xudmFyIGVycm9yUHJvcHMgPSBbJ2Rlc2NyaXB0aW9uJywgJ2ZpbGVOYW1lJywgJ2xpbmVOdW1iZXInLCAnZW5kTGluZU51bWJlcicsICdtZXNzYWdlJywgJ25hbWUnLCAnbnVtYmVyJywgJ3N0YWNrJ107XG5cbmZ1bmN0aW9uIEV4Y2VwdGlvbihtZXNzYWdlLCBub2RlKSB7XG4gIHZhciBsb2MgPSBub2RlICYmIG5vZGUubG9jLFxuICAgICAgbGluZSA9IHVuZGVmaW5lZCxcbiAgICAgIGVuZExpbmVOdW1iZXIgPSB1bmRlZmluZWQsXG4gICAgICBjb2x1bW4gPSB1bmRlZmluZWQsXG4gICAgICBlbmRDb2x1bW4gPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGxvYykge1xuICAgIGxpbmUgPSBsb2Muc3RhcnQubGluZTtcbiAgICBlbmRMaW5lTnVtYmVyID0gbG9jLmVuZC5saW5lO1xuICAgIGNvbHVtbiA9IGxvYy5zdGFydC5jb2x1bW47XG4gICAgZW5kQ29sdW1uID0gbG9jLmVuZC5jb2x1bW47XG5cbiAgICBtZXNzYWdlICs9ICcgLSAnICsgbGluZSArICc6JyArIGNvbHVtbjtcbiAgfVxuXG4gIHZhciB0bXAgPSBFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IuY2FsbCh0aGlzLCBtZXNzYWdlKTtcblxuICAvLyBVbmZvcnR1bmF0ZWx5IGVycm9ycyBhcmUgbm90IGVudW1lcmFibGUgaW4gQ2hyb21lIChhdCBsZWFzdCksIHNvIGBmb3IgcHJvcCBpbiB0bXBgIGRvZXNuJ3Qgd29yay5cbiAgZm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgZXJyb3JQcm9wcy5sZW5ndGg7IGlkeCsrKSB7XG4gICAgdGhpc1tlcnJvclByb3BzW2lkeF1dID0gdG1wW2Vycm9yUHJvcHNbaWR4XV07XG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBFeGNlcHRpb24pO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAobG9jKSB7XG4gICAgICB0aGlzLmxpbmVOdW1iZXIgPSBsaW5lO1xuICAgICAgdGhpcy5lbmRMaW5lTnVtYmVyID0gZW5kTGluZU51bWJlcjtcblxuICAgICAgLy8gV29yayBhcm91bmQgaXNzdWUgdW5kZXIgc2FmYXJpIHdoZXJlIHdlIGNhbid0IGRpcmVjdGx5IHNldCB0aGUgY29sdW1uIHZhbHVlXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2NvbHVtbicsIHtcbiAgICAgICAgICB2YWx1ZTogY29sdW1uLFxuICAgICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnZW5kQ29sdW1uJywge1xuICAgICAgICAgIHZhbHVlOiBlbmRDb2x1bW4sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY29sdW1uID0gY29sdW1uO1xuICAgICAgICB0aGlzLmVuZENvbHVtbiA9IGVuZENvbHVtbjtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2ggKG5vcCkge1xuICAgIC8qIElnbm9yZSBpZiB0aGUgYnJvd3NlciBpcyB2ZXJ5IHBhcnRpY3VsYXIgKi9cbiAgfVxufVxuXG5FeGNlcHRpb24ucHJvdG90eXBlID0gbmV3IEVycm9yKCk7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IEV4Y2VwdGlvbjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMlY0WTJWd2RHbHZiaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN1FVRkJRU3hKUVVGTkxGVkJRVlVzUjBGQlJ5eERRVU5xUWl4aFFVRmhMRVZCUTJJc1ZVRkJWU3hGUVVOV0xGbEJRVmtzUlVGRFdpeGxRVUZsTEVWQlEyWXNVMEZCVXl4RlFVTlVMRTFCUVUwc1JVRkRUaXhSUVVGUkxFVkJRMUlzVDBGQlR5eERRVU5TTEVOQlFVTTdPMEZCUlVZc1UwRkJVeXhUUVVGVExFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NSVUZCUlR0QlFVTm9ReXhOUVVGSkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVsQlFVa3NTVUZCU1N4RFFVRkRMRWRCUVVjN1RVRkRlRUlzU1VGQlNTeFpRVUZCTzAxQlEwb3NZVUZCWVN4WlFVRkJPMDFCUTJJc1RVRkJUU3haUVVGQk8wMUJRMDRzVTBGQlV5eFpRVUZCTEVOQlFVTTdPMEZCUlZvc1RVRkJTU3hIUVVGSExFVkJRVVU3UVVGRFVDeFJRVUZKTEVkQlFVY3NSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU03UVVGRGRFSXNhVUpCUVdFc1IwRkJSeXhIUVVGSExFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXp0QlFVTTNRaXhWUVVGTkxFZEJRVWNzUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNN1FVRkRNVUlzWVVGQlV5eEhRVUZITEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRE96dEJRVVV6UWl4WFFVRlBMRWxCUVVrc1MwRkJTeXhIUVVGSExFbEJRVWtzUjBGQlJ5eEhRVUZITEVkQlFVY3NUVUZCVFN4RFFVRkRPMGRCUTNoRE96dEJRVVZFTEUxQlFVa3NSMEZCUnl4SFFVRkhMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU03T3p0QlFVY3hSQ3hQUVVGTExFbEJRVWtzUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUlN4SFFVRkhMRWRCUVVjc1ZVRkJWU3hEUVVGRExFMUJRVTBzUlVGQlJTeEhRVUZITEVWQlFVVXNSVUZCUlR0QlFVTm9SQ3hSUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGRCUXpsRE96czdRVUZIUkN4TlFVRkpMRXRCUVVzc1EwRkJReXhwUWtGQmFVSXNSVUZCUlR0QlFVTXpRaXhUUVVGTExFTkJRVU1zYVVKQlFXbENMRU5CUVVNc1NVRkJTU3hGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzBkQlF6RkRPenRCUVVWRUxFMUJRVWs3UVVGRFJpeFJRVUZKTEVkQlFVY3NSVUZCUlR0QlFVTlFMRlZCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETzBGQlEzWkNMRlZCUVVrc1EwRkJReXhoUVVGaExFZEJRVWNzWVVGQllTeERRVUZET3pzN08wRkJTVzVETEZWQlFVa3NUVUZCVFN4RFFVRkRMR05CUVdNc1JVRkJSVHRCUVVONlFpeGpRVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hSUVVGUkxFVkJRVVU3UVVGRGNFTXNaVUZCU3l4RlFVRkZMRTFCUVUwN1FVRkRZaXh2UWtGQlZTeEZRVUZGTEVsQlFVazdVMEZEYWtJc1EwRkJReXhEUVVGRE8wRkJRMGdzWTBGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1YwRkJWeXhGUVVGRk8wRkJRM1pETEdWQlFVc3NSVUZCUlN4VFFVRlRPMEZCUTJoQ0xHOUNRVUZWTEVWQlFVVXNTVUZCU1R0VFFVTnFRaXhEUVVGRExFTkJRVU03VDBGRFNpeE5RVUZOTzBGQlEwd3NXVUZCU1N4RFFVRkRMRTFCUVUwc1IwRkJSeXhOUVVGTkxFTkJRVU03UVVGRGNrSXNXVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhUUVVGVExFTkJRVU03VDBGRE5VSTdTMEZEUmp0SFFVTkdMRU5CUVVNc1QwRkJUeXhIUVVGSExFVkJRVVU3TzBkQlJXSTdRMEZEUmpzN1FVRkZSQ3hUUVVGVExFTkJRVU1zVTBGQlV5eEhRVUZITEVsQlFVa3NTMEZCU3l4RlFVRkZMRU5CUVVNN08zRkNRVVZ1UWl4VFFVRlRJaXdpWm1sc1pTSTZJbVY0WTJWd2RHbHZiaTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltTnZibk4wSUdWeWNtOXlVSEp2Y0hNZ1BTQmJYRzRnSUNka1pYTmpjbWx3ZEdsdmJpY3NYRzRnSUNkbWFXeGxUbUZ0WlNjc1hHNGdJQ2RzYVc1bFRuVnRZbVZ5Snl4Y2JpQWdKMlZ1WkV4cGJtVk9kVzFpWlhJbkxGeHVJQ0FuYldWemMyRm5aU2NzWEc0Z0lDZHVZVzFsSnl4Y2JpQWdKMjUxYldKbGNpY3NYRzRnSUNkemRHRmpheWRjYmwwN1hHNWNibVoxYm1OMGFXOXVJRVY0WTJWd2RHbHZiaWh0WlhOellXZGxMQ0J1YjJSbEtTQjdYRzRnSUd4bGRDQnNiMk1nUFNCdWIyUmxJQ1ltSUc1dlpHVXViRzlqTEZ4dUlDQWdJR3hwYm1Vc1hHNGdJQ0FnWlc1a1RHbHVaVTUxYldKbGNpeGNiaUFnSUNCamIyeDFiVzRzWEc0Z0lDQWdaVzVrUTI5c2RXMXVPMXh1WEc0Z0lHbG1JQ2hzYjJNcElIdGNiaUFnSUNCc2FXNWxJRDBnYkc5akxuTjBZWEowTG14cGJtVTdYRzRnSUNBZ1pXNWtUR2x1WlU1MWJXSmxjaUE5SUd4dll5NWxibVF1YkdsdVpUdGNiaUFnSUNCamIyeDFiVzRnUFNCc2IyTXVjM1JoY25RdVkyOXNkVzF1TzF4dUlDQWdJR1Z1WkVOdmJIVnRiaUE5SUd4dll5NWxibVF1WTI5c2RXMXVPMXh1WEc0Z0lDQWdiV1Z6YzJGblpTQXJQU0FuSUMwZ0p5QXJJR3hwYm1VZ0t5QW5PaWNnS3lCamIyeDFiVzQ3WEc0Z0lIMWNibHh1SUNCc1pYUWdkRzF3SUQwZ1JYSnliM0l1Y0hKdmRHOTBlWEJsTG1OdmJuTjBjblZqZEc5eUxtTmhiR3dvZEdocGN5d2diV1Z6YzJGblpTazdYRzVjYmlBZ0x5OGdWVzVtYjNKMGRXNWhkR1ZzZVNCbGNuSnZjbk1nWVhKbElHNXZkQ0JsYm5WdFpYSmhZbXhsSUdsdUlFTm9jbTl0WlNBb1lYUWdiR1ZoYzNRcExDQnpieUJnWm05eUlIQnliM0FnYVc0Z2RHMXdZQ0JrYjJWemJpZDBJSGR2Y21zdVhHNGdJR1p2Y2lBb2JHVjBJR2xrZUNBOUlEQTdJR2xrZUNBOElHVnljbTl5VUhKdmNITXViR1Z1WjNSb095QnBaSGdyS3lrZ2UxeHVJQ0FnSUhSb2FYTmJaWEp5YjNKUWNtOXdjMXRwWkhoZFhTQTlJSFJ0Y0Z0bGNuSnZjbEJ5YjNCelcybGtlRjFkTzF4dUlDQjlYRzVjYmlBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHVnNjMlVnS2k5Y2JpQWdhV1lnS0VWeWNtOXlMbU5oY0hSMWNtVlRkR0ZqYTFSeVlXTmxLU0I3WEc0Z0lDQWdSWEp5YjNJdVkyRndkSFZ5WlZOMFlXTnJWSEpoWTJVb2RHaHBjeXdnUlhoalpYQjBhVzl1S1R0Y2JpQWdmVnh1WEc0Z0lIUnllU0I3WEc0Z0lDQWdhV1lnS0d4dll5a2dlMXh1SUNBZ0lDQWdkR2hwY3k1c2FXNWxUblZ0WW1WeUlEMGdiR2x1WlR0Y2JpQWdJQ0FnSUhSb2FYTXVaVzVrVEdsdVpVNTFiV0psY2lBOUlHVnVaRXhwYm1WT2RXMWlaWEk3WEc1Y2JpQWdJQ0FnSUM4dklGZHZjbXNnWVhKdmRXNWtJR2x6YzNWbElIVnVaR1Z5SUhOaFptRnlhU0IzYUdWeVpTQjNaU0JqWVc0bmRDQmthWEpsWTNSc2VTQnpaWFFnZEdobElHTnZiSFZ0YmlCMllXeDFaVnh1SUNBZ0lDQWdMeW9nYVhOMFlXNWlkV3dnYVdkdWIzSmxJRzVsZUhRZ0tpOWNiaUFnSUNBZ0lHbG1JQ2hQWW1wbFkzUXVaR1ZtYVc1bFVISnZjR1Z5ZEhrcElIdGNiaUFnSUNBZ0lDQWdUMkpxWldOMExtUmxabWx1WlZCeWIzQmxjblI1S0hSb2FYTXNJQ2RqYjJ4MWJXNG5MQ0I3WEc0Z0lDQWdJQ0FnSUNBZ2RtRnNkV1U2SUdOdmJIVnRiaXhjYmlBZ0lDQWdJQ0FnSUNCbGJuVnRaWEpoWW14bE9pQjBjblZsWEc0Z0lDQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtvZEdocGN5d2dKMlZ1WkVOdmJIVnRiaWNzSUh0Y2JpQWdJQ0FnSUNBZ0lDQjJZV3gxWlRvZ1pXNWtRMjlzZFcxdUxGeHVJQ0FnSUNBZ0lDQWdJR1Z1ZFcxbGNtRmliR1U2SUhSeWRXVmNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmlBOUlHTnZiSFZ0Ymp0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVsYm1SRGIyeDFiVzRnUFNCbGJtUkRiMngxYlc0N1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dUlDQjlJR05oZEdOb0lDaHViM0FwSUh0Y2JpQWdJQ0F2S2lCSloyNXZjbVVnYVdZZ2RHaGxJR0p5YjNkelpYSWdhWE1nZG1WeWVTQndZWEowYVdOMWJHRnlJQ292WEc0Z0lIMWNibjFjYmx4dVJYaGpaWEIwYVc5dUxuQnliM1J2ZEhsd1pTQTlJRzVsZHlCRmNuSnZjaWdwTzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCRmVHTmxjSFJwYjI0N1hHNGlYWDA9XG4iLCJpbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4vbWVyZ2VNYXAnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gY29uY2F0TWFwKHByb2plY3QsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpID8gbWVyZ2VNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIDEpIDogbWVyZ2VNYXAocHJvamVjdCwgMSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRNYXAuanMubWFwIiwiaW1wb3J0IHsgX19hc3luY0dlbmVyYXRvciwgX19hd2FpdCwgX19nZW5lcmF0b3IgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3IocmVhZGFibGVTdHJlYW0pIHtcbiAgICByZXR1cm4gX19hc3luY0dlbmVyYXRvcih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtTGlrZVRvQXN5bmNHZW5lcmF0b3JfMSgpIHtcbiAgICAgICAgdmFyIHJlYWRlciwgX2EsIHZhbHVlLCBkb25lO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTtcbiAgICAgICAgICAgICAgICAgICAgX2IubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgX2IudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSk7XG4gICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGlmICghdHJ1ZSkgcmV0dXJuIFszLCA4XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCBfX2F3YWl0KHJlYWRlci5yZWFkKCkpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCB2YWx1ZSA9IF9hLnZhbHVlLCBkb25lID0gX2EuZG9uZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkb25lKSByZXR1cm4gWzMsIDVdO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07XG4gICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIsIF9iLnNlbnQoKV07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiByZXR1cm4gWzQsIF9fYXdhaXQodmFsdWUpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDY6IHJldHVybiBbNCwgX2Iuc2VudCgpXTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgIF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszLCAyXTtcbiAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMywgMTBdO1xuICAgICAgICAgICAgICAgIGNhc2UgOTpcbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlbGVhc2VMb2NrKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgICAgICAgICAgY2FzZSAxMDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNSZWFkYWJsZVN0cmVhbUxpa2Uob2JqKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqLmdldFJlYWRlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodXJsLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG9wdGlvbnMgPSB7fTtcbiAgfSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGUsIG5vLXBhcmFtLXJlYXNzaWduXG5cblxuICB1cmwgPSB1cmwgJiYgdXJsLl9fZXNNb2R1bGUgPyB1cmwuZGVmYXVsdCA6IHVybDtcblxuICBpZiAodHlwZW9mIHVybCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiB1cmw7XG4gIH0gLy8gSWYgdXJsIGlzIGFscmVhZHkgd3JhcHBlZCBpbiBxdW90ZXMsIHJlbW92ZSB0aGVtXG5cblxuICBpZiAoL15bJ1wiXS4qWydcIl0kLy50ZXN0KHVybCkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB1cmwgPSB1cmwuc2xpY2UoMSwgLTEpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuaGFzaCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCArPSBvcHRpb25zLmhhc2g7XG4gIH0gLy8gU2hvdWxkIHVybCBiZSB3cmFwcGVkP1xuICAvLyBTZWUgaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtMy8jdXJsc1xuXG5cbiAgaWYgKC9bXCInKCkgXFx0XFxuXS8udGVzdCh1cmwpIHx8IG9wdGlvbnMubmVlZFF1b3Rlcykge1xuICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQodXJsLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKS5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKSwgXCJcXFwiXCIpO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn07IiwiLy8gQ3JlYXRlIGEgc2ltcGxlIHBhdGggYWxpYXMgdG8gYWxsb3cgYnJvd3NlcmlmeSB0byByZXNvbHZlXG4vLyB0aGUgcnVudGltZSBvbiBhIHN1cHBvcnRlZCBwYXRoLlxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Rpc3QvY2pzL2hhbmRsZWJhcnMucnVudGltZScpWydkZWZhdWx0J107XG4iLCJ2YXIgYmFzZUlzTmF0aXZlID0gcmVxdWlyZSgnLi9fYmFzZUlzTmF0aXZlJyksXG4gICAgZ2V0VmFsdWUgPSByZXF1aXJlKCcuL19nZXRWYWx1ZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIG5hdGl2ZSBmdW5jdGlvbiBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBtZXRob2QgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZ1bmN0aW9uIGlmIGl0J3MgbmF0aXZlLCBlbHNlIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkpIHtcbiAgdmFyIHZhbHVlID0gZ2V0VmFsdWUob2JqZWN0LCBrZXkpO1xuICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlKSA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE5hdGl2ZTtcbiIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZkNvdW50KCkge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBzb3VyY2UuX3JlZkNvdW50Kys7XG4gICAgICAgIHZhciByZWZDb3VudGVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghc291cmNlIHx8IHNvdXJjZS5fcmVmQ291bnQgPD0gMCB8fCAwIDwgLS1zb3VyY2UuX3JlZkNvdW50KSB7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHNoYXJlZENvbm5lY3Rpb24gPSBzb3VyY2UuX2Nvbm5lY3Rpb247XG4gICAgICAgICAgICB2YXIgY29ubiA9IGNvbm5lY3Rpb247XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChzaGFyZWRDb25uZWN0aW9uICYmICghY29ubiB8fCBzaGFyZWRDb25uZWN0aW9uID09PSBjb25uKSkge1xuICAgICAgICAgICAgICAgIHNoYXJlZENvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUocmVmQ291bnRlcik7XG4gICAgICAgIGlmICghcmVmQ291bnRlci5jbG9zZWQpIHtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBzb3VyY2UuY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWZDb3VudC5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBhdWRpdChkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgZW5kRHVyYXRpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxhc3RWYWx1ZTtcbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc0NvbXBsZXRlICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGNsZWFudXBEdXJhdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgICAgICBpc0NvbXBsZXRlICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghZHVyYXRpb25TdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUpKS5zdWJzY3JpYmUoKGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbmREdXJhdGlvbiwgY2xlYW51cER1cmF0aW9uKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICghaGFzVmFsdWUgfHwgIWR1cmF0aW9uU3Vic2NyaWJlciB8fCBkdXJhdGlvblN1YnNjcmliZXIuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWF1ZGl0LmpzLm1hcCIsImltcG9ydCB7IGNvbWJpbmVMYXRlc3QgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2NvbWJpbmVMYXRlc3QnO1xuaW1wb3J0IHsgam9pbkFsbEludGVybmFscyB9IGZyb20gJy4vam9pbkFsbEludGVybmFscyc7XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdEFsbChwcm9qZWN0KSB7XG4gICAgcmV0dXJuIGpvaW5BbGxJbnRlcm5hbHMoY29tYmluZUxhdGVzdCwgcHJvamVjdCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0QWxsLmpzLm1hcCIsImltcG9ydCB7IHJlZHVjZSB9IGZyb20gJy4vcmVkdWNlJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xudmFyIGFyclJlZHVjZXIgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZSkgeyByZXR1cm4gKGFyci5wdXNoKHZhbHVlKSwgYXJyKTsgfTtcbmV4cG9ydCBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmVkdWNlKGFyclJlZHVjZXIsIFtdKShzb3VyY2UpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRvQXJyYXkuanMubWFwIiwiaW1wb3J0IHsgY29uY2F0IH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9jb25jYXQnO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJy4vdGFrZSc7XG5pbXBvcnQgeyBpZ25vcmVFbGVtZW50cyB9IGZyb20gJy4vaWdub3JlRWxlbWVudHMnO1xuaW1wb3J0IHsgbWFwVG8gfSBmcm9tICcuL21hcFRvJztcbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAnLi9tZXJnZU1hcCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3Rvciwgc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25jYXQoc3Vic2NyaXB0aW9uRGVsYXkucGlwZSh0YWtlKDEpLCBpZ25vcmVFbGVtZW50cygpKSwgc291cmNlLnBpcGUoZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3RvcikpKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlTWFwKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHsgcmV0dXJuIGlubmVyRnJvbShkZWxheUR1cmF0aW9uU2VsZWN0b3IodmFsdWUsIGluZGV4KSkucGlwZSh0YWtlKDEpLCBtYXBUbyh2YWx1ZSkpOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbGF5V2hlbi5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlsL25vb3AnO1xuZXhwb3J0IGZ1bmN0aW9uIGlnbm9yZUVsZW1lbnRzKCkge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgbm9vcCkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlRWxlbWVudHMuanMubWFwIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvKHZhbHVlKSB7XG4gICAgcmV0dXJuIG1hcChmdW5jdGlvbiAoKSB7IHJldHVybiB2YWx1ZTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXBUby5qcy5tYXAiLCJpbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQoY29tcGFyYXRvciwga2V5U2VsZWN0b3IpIHtcbiAgICBpZiAoa2V5U2VsZWN0b3IgPT09IHZvaWQgMCkgeyBrZXlTZWxlY3RvciA9IGlkZW50aXR5OyB9XG4gICAgY29tcGFyYXRvciA9IGNvbXBhcmF0b3IgIT09IG51bGwgJiYgY29tcGFyYXRvciAhPT0gdm9pZCAwID8gY29tcGFyYXRvciA6IGRlZmF1bHRDb21wYXJlO1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHByZXZpb3VzS2V5O1xuICAgICAgICB2YXIgZmlyc3QgPSB0cnVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50S2V5ID0ga2V5U2VsZWN0b3IodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGZpcnN0IHx8ICFjb21wYXJhdG9yKHByZXZpb3VzS2V5LCBjdXJyZW50S2V5KSkge1xuICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcHJldmlvdXNLZXkgPSBjdXJyZW50S2V5O1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDb21wYXJlKGEsIGIpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc3RpbmN0VW50aWxDaGFuZ2VkLmpzLm1hcCIsImltcG9ydCB7IGV4aGF1c3RNYXAgfSBmcm9tICcuL2V4aGF1c3RNYXAnO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiBleGhhdXN0QWxsKCkge1xuICAgIHJldHVybiBleGhhdXN0TWFwKGlkZW50aXR5KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4aGF1c3RBbGwuanMubWFwIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZXhoYXVzdE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5waXBlKGV4aGF1c3RNYXAoZnVuY3Rpb24gKGEsIGkpIHsgcmV0dXJuIGlubmVyRnJvbShwcm9qZWN0KGEsIGkpKS5waXBlKG1hcChmdW5jdGlvbiAoYiwgaWkpIHsgcmV0dXJuIHJlc3VsdFNlbGVjdG9yKGEsIGIsIGksIGlpKTsgfSkpOyB9KSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgdmFyIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKG91dGVyVmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghaW5uZXJTdWIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1YiA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpc0NvbXBsZXRlICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpbm5lckZyb20ocHJvamVjdChvdXRlclZhbHVlLCBpbmRleCsrKSkuc3Vic2NyaWJlKGlubmVyU3ViKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAhaW5uZXJTdWIgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0TWFwLmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmQocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICd2YWx1ZScpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaW5kKHByZWRpY2F0ZSwgdGhpc0FyZywgZW1pdCkge1xuICAgIHZhciBmaW5kSW5kZXggPSBlbWl0ID09PSAnaW5kZXgnO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGkgPSBpbmRleCsrO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZS5jYWxsKHRoaXNBcmcsIHZhbHVlLCBpLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGZpbmRJbmRleCA/IGkgOiB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmluZEluZGV4ID8gLTEgOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbmQuanMubWFwIiwiaW1wb3J0IHsgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9lbXB0eSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiB0YWtlTGFzdChjb3VudCkge1xuICAgIHJldHVybiBjb3VudCA8PSAwXG4gICAgICAgID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gRU1QVFk7IH1cbiAgICAgICAgOiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICBjb3VudCA8IGJ1ZmZlci5sZW5ndGggJiYgYnVmZmVyLnNoaWZ0KCk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgYnVmZmVyXzEgPSBfX3ZhbHVlcyhidWZmZXIpLCBidWZmZXJfMV8xID0gYnVmZmVyXzEubmV4dCgpOyAhYnVmZmVyXzFfMS5kb25lOyBidWZmZXJfMV8xID0gYnVmZmVyXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBidWZmZXJfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcl8xXzEgJiYgIWJ1ZmZlcl8xXzEuZG9uZSAmJiAoX2EgPSBidWZmZXJfMS5yZXR1cm4pKSBfYS5jYWxsKGJ1ZmZlcl8xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGJ1ZmZlciA9IG51bGw7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZUxhc3QuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyByYWNlSW5pdCB9IGZyb20gJy4uL29ic2VydmFibGUvcmFjZSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gcmFjZVdpdGgoKSB7XG4gICAgdmFyIG90aGVyU291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyU291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gIW90aGVyU291cmNlcy5sZW5ndGhcbiAgICAgICAgPyBpZGVudGl0eVxuICAgICAgICA6IG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgcmFjZUluaXQoX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKG90aGVyU291cmNlcykpKShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYWNlV2l0aC5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlsL25vb3AnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHNhbXBsZShub3RpZmllcikge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHZhciBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9KSk7XG4gICAgICAgIGlubmVyRnJvbShub3RpZmllcikuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxhc3RWYWx1ZTtcbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIG5vb3ApKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNhbXBsZS5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IFNhZmVTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmV4cG9ydCBmdW5jdGlvbiBzaGFyZShvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgX2EgPSBvcHRpb25zLmNvbm5lY3RvciwgY29ubmVjdG9yID0gX2EgPT09IHZvaWQgMCA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdWJqZWN0KCk7IH0gOiBfYSwgX2IgPSBvcHRpb25zLnJlc2V0T25FcnJvciwgcmVzZXRPbkVycm9yID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBvcHRpb25zLnJlc2V0T25Db21wbGV0ZSwgcmVzZXRPbkNvbXBsZXRlID0gX2MgPT09IHZvaWQgMCA/IHRydWUgOiBfYywgX2QgPSBvcHRpb25zLnJlc2V0T25SZWZDb3VudFplcm8sIHJlc2V0T25SZWZDb3VudFplcm8gPSBfZCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9kO1xuICAgIHJldHVybiBmdW5jdGlvbiAod3JhcHBlclNvdXJjZSkge1xuICAgICAgICB2YXIgY29ubmVjdGlvbjtcbiAgICAgICAgdmFyIHJlc2V0Q29ubmVjdGlvbjtcbiAgICAgICAgdmFyIHN1YmplY3Q7XG4gICAgICAgIHZhciByZWZDb3VudCA9IDA7XG4gICAgICAgIHZhciBoYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGhhc0Vycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGNhbmNlbFJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmVzZXRDb25uZWN0aW9uID09PSBudWxsIHx8IHJlc2V0Q29ubmVjdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVzZXRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gc3ViamVjdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGhhc0NvbXBsZXRlZCA9IGhhc0Vycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHJlc2V0QW5kVW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgY29ubiA9IGNvbm5lY3Rpb247XG4gICAgICAgICAgICByZXNldCgpO1xuICAgICAgICAgICAgY29ubiA9PT0gbnVsbCB8fCBjb25uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHJlZkNvdW50Kys7XG4gICAgICAgICAgICBpZiAoIWhhc0Vycm9yZWQgJiYgIWhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZGVzdCA9IChzdWJqZWN0ID0gc3ViamVjdCAhPT0gbnVsbCAmJiBzdWJqZWN0ICE9PSB2b2lkIDAgPyBzdWJqZWN0IDogY29ubmVjdG9yKCkpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJlZkNvdW50LS07XG4gICAgICAgICAgICAgICAgaWYgKHJlZkNvdW50ID09PSAwICYmICFoYXNFcnJvcmVkICYmICFoYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzZXRDb25uZWN0aW9uID0gaGFuZGxlUmVzZXQocmVzZXRBbmRVbnN1YnNjcmliZSwgcmVzZXRPblJlZkNvdW50WmVybyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkZXN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIGlmICghY29ubmVjdGlvbiAmJlxuICAgICAgICAgICAgICAgIHJlZkNvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gPSBuZXcgU2FmZVN1YnNjcmliZXIoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGRlc3QubmV4dCh2YWx1ZSk7IH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNFcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldCwgcmVzZXRPbkVycm9yLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVzdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFJlc2V0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNldENvbm5lY3Rpb24gPSBoYW5kbGVSZXNldChyZXNldCwgcmVzZXRPbkNvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpbm5lckZyb20oc291cmNlKS5zdWJzY3JpYmUoY29ubmVjdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKHdyYXBwZXJTb3VyY2UpO1xuICAgIH07XG59XG5mdW5jdGlvbiBoYW5kbGVSZXNldChyZXNldCwgb24pIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2kgLSAyXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIGlmIChvbiA9PT0gdHJ1ZSkge1xuICAgICAgICByZXNldCgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChvbiA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgb25TdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgb25TdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICByZXNldCgpO1xuICAgICAgICB9LFxuICAgIH0pO1xuICAgIHJldHVybiBpbm5lckZyb20ob24uYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKSkuc3Vic2NyaWJlKG9uU3Vic2NyaWJlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zaGFyZS5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiB0aHJvdHRsZShkdXJhdGlvblNlbGVjdG9yLCBjb25maWcpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBfYSA9IGNvbmZpZyAhPT0gbnVsbCAmJiBjb25maWcgIT09IHZvaWQgMCA/IGNvbmZpZyA6IHt9LCBfYiA9IF9hLmxlYWRpbmcsIGxlYWRpbmcgPSBfYiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9iLCBfYyA9IF9hLnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jO1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIHNlbmRWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciB0aHJvdHRsZWQgPSBudWxsO1xuICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgZW5kVGhyb3R0bGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhyb3R0bGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0cmFpbGluZykge1xuICAgICAgICAgICAgICAgIHNlbmQoKTtcbiAgICAgICAgICAgICAgICBpc0NvbXBsZXRlICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGNsZWFudXBUaHJvdHRsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhyb3R0bGVkID0gbnVsbDtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgc3RhcnRUaHJvdHRsZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuICh0aHJvdHRsZWQgPSBpbm5lckZyb20oZHVyYXRpb25TZWxlY3Rvcih2YWx1ZSkpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBzZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhhc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzZW5kVmFsdWU7XG4gICAgICAgICAgICAgICAgc2VuZFZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgICFpc0NvbXBsZXRlICYmIHN0YXJ0VGhyb3R0bGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbmRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgISh0aHJvdHRsZWQgJiYgIXRocm90dGxlZC5jbG9zZWQpICYmIChsZWFkaW5nID8gc2VuZCgpIDogc3RhcnRUaHJvdHRsZSh2YWx1ZSkpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxlLmpzLm1hcCIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgeyBkYXRlVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXInO1xudmFyIFJlcGxheVN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhSZXBsYXlTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlcGxheVN1YmplY3QoX2J1ZmZlclNpemUsIF93aW5kb3dUaW1lLCBfdGltZXN0YW1wUHJvdmlkZXIpIHtcbiAgICAgICAgaWYgKF9idWZmZXJTaXplID09PSB2b2lkIDApIHsgX2J1ZmZlclNpemUgPSBJbmZpbml0eTsgfVxuICAgICAgICBpZiAoX3dpbmRvd1RpbWUgPT09IHZvaWQgMCkgeyBfd2luZG93VGltZSA9IEluZmluaXR5OyB9XG4gICAgICAgIGlmIChfdGltZXN0YW1wUHJvdmlkZXIgPT09IHZvaWQgMCkgeyBfdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXI7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBfYnVmZmVyU2l6ZTtcbiAgICAgICAgX3RoaXMuX3dpbmRvd1RpbWUgPSBfd2luZG93VGltZTtcbiAgICAgICAgX3RoaXMuX3RpbWVzdGFtcFByb3ZpZGVyID0gX3RpbWVzdGFtcFByb3ZpZGVyO1xuICAgICAgICBfdGhpcy5fYnVmZmVyID0gW107XG4gICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSB0cnVlO1xuICAgICAgICBfdGhpcy5faW5maW5pdGVUaW1lV2luZG93ID0gX3dpbmRvd1RpbWUgPT09IEluZmluaXR5O1xuICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IE1hdGgubWF4KDEsIF9idWZmZXJTaXplKTtcbiAgICAgICAgX3RoaXMuX3dpbmRvd1RpbWUgPSBNYXRoLm1heCgxLCBfd2luZG93VGltZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBpc1N0b3BwZWQgPSBfYS5pc1N0b3BwZWQsIF9idWZmZXIgPSBfYS5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdywgX3RpbWVzdGFtcFByb3ZpZGVyID0gX2EuX3RpbWVzdGFtcFByb3ZpZGVyLCBfd2luZG93VGltZSA9IF9hLl93aW5kb3dUaW1lO1xuICAgICAgICBpZiAoIWlzU3RvcHBlZCkge1xuICAgICAgICAgICAgX2J1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICFfaW5maW5pdGVUaW1lV2luZG93ICYmIF9idWZmZXIucHVzaChfdGltZXN0YW1wUHJvdmlkZXIubm93KCkgKyBfd2luZG93VGltZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJpbUJ1ZmZlcigpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICB0aGlzLl90cmltQnVmZmVyKCk7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2luZmluaXRlVGltZVdpbmRvdyA9IF9hLl9pbmZpbml0ZVRpbWVXaW5kb3csIF9idWZmZXIgPSBfYS5fYnVmZmVyO1xuICAgICAgICB2YXIgY29weSA9IF9idWZmZXIuc2xpY2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3B5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkgKz0gX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29weVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIFJlcGxheVN1YmplY3QucHJvdG90eXBlLl90cmltQnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfYnVmZmVyU2l6ZSA9IF9hLl9idWZmZXJTaXplLCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYS5fdGltZXN0YW1wUHJvdmlkZXIsIF9idWZmZXIgPSBfYS5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2EuX2luZmluaXRlVGltZVdpbmRvdztcbiAgICAgICAgdmFyIGFkanVzdGVkQnVmZmVyU2l6ZSA9IChfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpICogX2J1ZmZlclNpemU7XG4gICAgICAgIF9idWZmZXJTaXplIDwgSW5maW5pdHkgJiYgYWRqdXN0ZWRCdWZmZXJTaXplIDwgX2J1ZmZlci5sZW5ndGggJiYgX2J1ZmZlci5zcGxpY2UoMCwgX2J1ZmZlci5sZW5ndGggLSBhZGp1c3RlZEJ1ZmZlclNpemUpO1xuICAgICAgICBpZiAoIV9pbmZpbml0ZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgICAgIHZhciBub3cgPSBfdGltZXN0YW1wUHJvdmlkZXIubm93KCk7XG4gICAgICAgICAgICB2YXIgbGFzdCA9IDA7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9idWZmZXIubGVuZ3RoICYmIF9idWZmZXJbaV0gPD0gbm93OyBpICs9IDIpIHtcbiAgICAgICAgICAgICAgICBsYXN0ID0gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxhc3QgJiYgX2J1ZmZlci5zcGxpY2UoMCwgbGFzdCArIDEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gUmVwbGF5U3ViamVjdDtcbn0oU3ViamVjdCkpO1xuZXhwb3J0IHsgUmVwbGF5U3ViamVjdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UmVwbGF5U3ViamVjdC5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuL1N1YmplY3QnO1xudmFyIEFzeW5jU3ViamVjdCA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzeW5jU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1N1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fdmFsdWUgPSBudWxsO1xuICAgICAgICBfdGhpcy5faGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuX2lzQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgaGFzRXJyb3IgPSBfYS5oYXNFcnJvciwgX2hhc1ZhbHVlID0gX2EuX2hhc1ZhbHVlLCBfdmFsdWUgPSBfYS5fdmFsdWUsIHRocm93bkVycm9yID0gX2EudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZCwgX2lzQ29tcGxldGUgPSBfYS5faXNDb21wbGV0ZTtcbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1N0b3BwZWQgfHwgX2lzQ29tcGxldGUpIHtcbiAgICAgICAgICAgIF9oYXNWYWx1ZSAmJiBzdWJzY3JpYmVyLm5leHQoX3ZhbHVlKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQXN5bmNTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLl9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIF9oYXNWYWx1ZSA9IF9hLl9oYXNWYWx1ZSwgX3ZhbHVlID0gX2EuX3ZhbHVlLCBfaXNDb21wbGV0ZSA9IF9hLl9pc0NvbXBsZXRlO1xuICAgICAgICBpZiAoIV9pc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIF9oYXNWYWx1ZSAmJiBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCBfdmFsdWUpO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnQgeyBBc3luY1N1YmplY3QgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jU3ViamVjdC5qcy5tYXAiLCJpbXBvcnQgeyBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4vZnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBwb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgcmV0dXJuIGZyb20oYXJncywgc2NoZWR1bGVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9mLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGFyZ3NBcmdBcnJheU9yT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9hcmdzQXJnQXJyYXlPck9iamVjdCc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IHBvcFJlc3VsdFNlbGVjdG9yLCBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgY3JlYXRlT2JqZWN0IH0gZnJvbSAnLi4vdXRpbC9jcmVhdGVPYmplY3QnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdCgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICB2YXIgcmVzdWx0U2VsZWN0b3IgPSBwb3BSZXN1bHRTZWxlY3RvcihhcmdzKTtcbiAgICB2YXIgX2EgPSBhcmdzQXJnQXJyYXlPck9iamVjdChhcmdzKSwgb2JzZXJ2YWJsZXMgPSBfYS5hcmdzLCBrZXlzID0gX2Eua2V5cztcbiAgICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBmcm9tKFtdLCBzY2hlZHVsZXIpO1xuICAgIH1cbiAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGUoY29tYmluZUxhdGVzdEluaXQob2JzZXJ2YWJsZXMsIHNjaGVkdWxlciwga2V5c1xuICAgICAgICA/XG4gICAgICAgICAgICBmdW5jdGlvbiAodmFsdWVzKSB7IHJldHVybiBjcmVhdGVPYmplY3Qoa2V5cywgdmFsdWVzKTsgfVxuICAgICAgICA6XG4gICAgICAgICAgICBpZGVudGl0eSkpO1xuICAgIHJldHVybiByZXN1bHRTZWxlY3RvciA/IHJlc3VsdC5waXBlKG1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKSA6IHJlc3VsdDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lTGF0ZXN0SW5pdChvYnNlcnZhYmxlcywgc2NoZWR1bGVyLCB2YWx1ZVRyYW5zZm9ybSkge1xuICAgIGlmICh2YWx1ZVRyYW5zZm9ybSA9PT0gdm9pZCAwKSB7IHZhbHVlVHJhbnNmb3JtID0gaWRlbnRpdHk7IH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBsZW5ndGggPSBvYnNlcnZhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgICAgICB2YXIgYWN0aXZlID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIHJlbWFpbmluZ0ZpcnN0VmFsdWVzID0gbGVuZ3RoO1xuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgIG1heWJlU2NoZWR1bGUoc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzb3VyY2UgPSBmcm9tKG9ic2VydmFibGVzW2ldLCBzY2hlZHVsZXIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaGFzRmlyc3RWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNGaXJzdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzRmlyc3RWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtYWluaW5nRmlyc3RWYWx1ZXMtLTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVtYWluaW5nRmlyc3RWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWVUcmFuc2Zvcm0odmFsdWVzLnNsaWNlKCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEtLWFjdGl2ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIH0sIHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBfbG9vcF8xKGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBzdWJzY3JpYmVyKTtcbiAgICB9O1xufVxuZnVuY3Rpb24gbWF5YmVTY2hlZHVsZShzY2hlZHVsZXIsIGV4ZWN1dGUsIHN1YnNjcmlwdGlvbikge1xuICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmlwdGlvbiwgc2NoZWR1bGVyLCBleGVjdXRlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGV4ZWN1dGUoKTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi9pbm5lckZyb20nO1xuaW1wb3J0IHsgYXJnc09yQXJnQXJyYXkgfSBmcm9tICcuLi91dGlsL2FyZ3NPckFyZ0FycmF5JztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi9lbXB0eSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuLi9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IHBvcFJlc3VsdFNlbGVjdG9yIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmV4cG9ydCBmdW5jdGlvbiB6aXAoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHZhciBzb3VyY2VzID0gYXJnc09yQXJnQXJyYXkoYXJncyk7XG4gICAgcmV0dXJuIHNvdXJjZXMubGVuZ3RoXG4gICAgICAgID8gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBidWZmZXJzID0gc291cmNlcy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gW107IH0pO1xuICAgICAgICAgICAgdmFyIGNvbXBsZXRlZCA9IHNvdXJjZXMubWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZhbHNlOyB9KTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gY29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICBpbm5lckZyb20oc291cmNlc1tzb3VyY2VJbmRleF0pLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlcnNbc291cmNlSW5kZXhdLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVycy5ldmVyeShmdW5jdGlvbiAoYnVmZmVyKSB7IHJldHVybiBidWZmZXIubGVuZ3RoOyB9KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGJ1ZmZlcnMubWFwKGZ1bmN0aW9uIChidWZmZXIpIHsgcmV0dXJuIGJ1ZmZlci5zaGlmdCgpOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChyZXN1bHRTZWxlY3RvciA/IHJlc3VsdFNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKHJlc3VsdCkpKSA6IHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVycy5zb21lKGZ1bmN0aW9uIChidWZmZXIsIGkpIHsgcmV0dXJuICFidWZmZXIubGVuZ3RoICYmIGNvbXBsZXRlZFtpXTsgfSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZFtzb3VyY2VJbmRleF0gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAhYnVmZmVyc1tzb3VyY2VJbmRleF0ubGVuZ3RoICYmIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZm9yICh2YXIgc291cmNlSW5kZXggPSAwOyAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlSW5kZXggPCBzb3VyY2VzLmxlbmd0aDsgc291cmNlSW5kZXgrKykge1xuICAgICAgICAgICAgICAgIF9sb29wXzEoc291cmNlSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzID0gY29tcGxldGVkID0gbnVsbDtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIDogRU1QVFk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD16aXAuanMubWFwIiwiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5leHBvcnQgdmFyIFVuc3Vic2NyaXB0aW9uRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gZXJyb3JzXG4gICAgICAgICAgICA/IGVycm9ycy5sZW5ndGggKyBcIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxcblwiICsgZXJyb3JzLm1hcChmdW5jdGlvbiAoZXJyLCBpKSB7IHJldHVybiBpICsgMSArIFwiKSBcIiArIGVyci50b1N0cmluZygpOyB9KS5qb2luKCdcXG4gICcpXG4gICAgICAgICAgICA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgIH07XG59KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVuc3Vic2NyaXB0aW9uRXJyb3IuanMubWFwIiwiZXhwb3J0IHZhciBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7XG4gICAgbm93OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IERhdGUpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMubWFwIiwiZXhwb3J0IHZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzQXJyYXlMaWtlLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBpc1ZhbGlkRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHZhbHVlKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzRGF0ZS5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VJbnRlcm5hbHMoc291cmNlLCBzdWJzY3JpYmVyLCBwcm9qZWN0LCBjb25jdXJyZW50LCBvbkJlZm9yZU5leHQsIGV4cGFuZCwgaW5uZXJTdWJTY2hlZHVsZXIsIGFkZGl0aW9uYWxGaW5hbGl6ZXIpIHtcbiAgICB2YXIgYnVmZmVyID0gW107XG4gICAgdmFyIGFjdGl2ZSA9IDA7XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHZhciBjaGVja0NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNDb21wbGV0ZSAmJiAhYnVmZmVyLmxlbmd0aCAmJiAhYWN0aXZlKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBvdXRlck5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIChhY3RpdmUgPCBjb25jdXJyZW50ID8gZG9Jbm5lclN1Yih2YWx1ZSkgOiBidWZmZXIucHVzaCh2YWx1ZSkpOyB9O1xuICAgIHZhciBkb0lubmVyU3ViID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGV4cGFuZCAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICBhY3RpdmUrKztcbiAgICAgICAgdmFyIGlubmVyQ29tcGxldGUgPSBmYWxzZTtcbiAgICAgICAgaW5uZXJGcm9tKHByb2plY3QodmFsdWUsIGluZGV4KyspKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChpbm5lclZhbHVlKSB7XG4gICAgICAgICAgICBvbkJlZm9yZU5leHQgPT09IG51bGwgfHwgb25CZWZvcmVOZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJlZm9yZU5leHQoaW5uZXJWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoZXhwYW5kKSB7XG4gICAgICAgICAgICAgICAgb3V0ZXJOZXh0KGlubmVyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlubmVyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpbm5lckNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaW5uZXJDb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZS0tO1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXJlZFZhbHVlID0gYnVmZmVyLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5uZXJTdWJTY2hlZHVsZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgaW5uZXJTdWJTY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvSW5uZXJTdWIoYnVmZmVyZWRWYWx1ZSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJ1ZmZlci5sZW5ndGggJiYgYWN0aXZlIDwgY29uY3VycmVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgX2xvb3BfMSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgfTtcbiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBvdXRlck5leHQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIGNoZWNrQ29tcGxldGUoKTtcbiAgICB9KSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgYWRkaXRpb25hbEZpbmFsaXplciA9PT0gbnVsbCB8fCBhZGRpdGlvbmFsRmluYWxpemVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhZGRpdGlvbmFsRmluYWxpemVyKCk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlSW50ZXJuYWxzLmpzLm1hcCIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCJpbXBvcnQgeyBkYXRlVGltZXN0YW1wUHJvdmlkZXIgfSBmcm9tICcuL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXInO1xudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHsgbm93ID0gU2NoZWR1bGVyLm5vdzsgfVxuICAgICAgICB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IgPSBzY2hlZHVsZXJBY3Rpb25DdG9yO1xuICAgICAgICB0aGlzLm5vdyA9IG5vdztcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICh3b3JrLCBkZWxheSwgc3RhdGUpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdztcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcbmV4cG9ydCB7IFNjaGVkdWxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2NoZWR1bGVyLmpzLm1hcCIsImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuZXhwb3J0IHZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiBBcmd1bWVudE91dE9mUmFuZ2VFcnJvckltcGwoKSB7XG4gICAgICAgIF9zdXBlcih0aGlzKTtcbiAgICAgICAgdGhpcy5uYW1lID0gJ0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ2FyZ3VtZW50IG91dCBvZiByYW5nZSc7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXJndW1lbnRPdXRPZlJhbmdlRXJyb3IuanMubWFwIiwiLypcblx0TUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcblx0QXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cblxudmFyIHN0eWxlc0luRG9tID0ge307XG5cbnZhclx0bWVtb2l6ZSA9IGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbztcblxuXHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdGlmICh0eXBlb2YgbWVtbyA9PT0gXCJ1bmRlZmluZWRcIikgbWVtbyA9IGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0cmV0dXJuIG1lbW87XG5cdH07XG59O1xuXG52YXIgaXNPbGRJRSA9IG1lbW9pemUoZnVuY3Rpb24gKCkge1xuXHQvLyBUZXN0IGZvciBJRSA8PSA5IGFzIHByb3Bvc2VkIGJ5IEJyb3dzZXJoYWNrc1xuXHQvLyBAc2VlIGh0dHA6Ly9icm93c2VyaGFja3MuY29tLyNoYWNrLWU3MWQ4NjkyZjY1MzM0MTczZmVlNzE1YzIyMmNiODA1XG5cdC8vIFRlc3RzIGZvciBleGlzdGVuY2Ugb2Ygc3RhbmRhcmQgZ2xvYmFscyBpcyB0byBhbGxvdyBzdHlsZS1sb2FkZXJcblx0Ly8gdG8gb3BlcmF0ZSBjb3JyZWN0bHkgaW50byBub24tc3RhbmRhcmQgZW52aXJvbm1lbnRzXG5cdC8vIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYnBhY2stY29udHJpYi9zdHlsZS1sb2FkZXIvaXNzdWVzLzE3N1xuXHRyZXR1cm4gd2luZG93ICYmIGRvY3VtZW50ICYmIGRvY3VtZW50LmFsbCAmJiAhd2luZG93LmF0b2I7XG59KTtcblxudmFyIGdldFRhcmdldCA9IGZ1bmN0aW9uICh0YXJnZXQsIHBhcmVudCkge1xuICBpZiAocGFyZW50KXtcbiAgICByZXR1cm4gcGFyZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0YXJnZXQpO1xufTtcblxudmFyIGdldEVsZW1lbnQgPSAoZnVuY3Rpb24gKGZuKSB7XG5cdHZhciBtZW1vID0ge307XG5cblx0cmV0dXJuIGZ1bmN0aW9uKHRhcmdldCwgcGFyZW50KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgcGFzc2luZyBmdW5jdGlvbiBpbiBvcHRpb25zLCB0aGVuIHVzZSBpdCBmb3IgcmVzb2x2ZSBcImhlYWRcIiBlbGVtZW50LlxuICAgICAgICAgICAgICAgIC8vIFVzZWZ1bCBmb3IgU2hhZG93IFJvb3Qgc3R5bGUgaS5lXG4gICAgICAgICAgICAgICAgLy8ge1xuICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0SW50bzogZnVuY3Rpb24gKCkgeyByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNmb29cIikuc2hhZG93Um9vdCB9XG4gICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWVtb1t0YXJnZXRdID09PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHR2YXIgc3R5bGVUYXJnZXQgPSBnZXRUYXJnZXQuY2FsbCh0aGlzLCB0YXJnZXQsIHBhcmVudCk7XG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuXHRcdFx0aWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG5cdFx0XHRcdFx0Ly8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IHN0eWxlVGFyZ2V0LmNvbnRlbnREb2N1bWVudC5oZWFkO1xuXHRcdFx0XHR9IGNhdGNoKGUpIHtcblx0XHRcdFx0XHRzdHlsZVRhcmdldCA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG1lbW9bdGFyZ2V0XSA9IHN0eWxlVGFyZ2V0O1xuXHRcdH1cblx0XHRyZXR1cm4gbWVtb1t0YXJnZXRdXG5cdH07XG59KSgpO1xuXG52YXIgc2luZ2xldG9uID0gbnVsbDtcbnZhclx0c2luZ2xldG9uQ291bnRlciA9IDA7XG52YXJcdHN0eWxlc0luc2VydGVkQXRUb3AgPSBbXTtcblxudmFyXHRmaXhVcmxzID0gcmVxdWlyZShcIi4vdXJsc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihsaXN0LCBvcHRpb25zKSB7XG5cdGlmICh0eXBlb2YgREVCVUcgIT09IFwidW5kZWZpbmVkXCIgJiYgREVCVUcpIHtcblx0XHRpZiAodHlwZW9mIGRvY3VtZW50ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgc3R5bGUtbG9hZGVyIGNhbm5vdCBiZSB1c2VkIGluIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnRcIik7XG5cdH1cblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmF0dHJzID0gdHlwZW9mIG9wdGlvbnMuYXR0cnMgPT09IFwib2JqZWN0XCIgPyBvcHRpb25zLmF0dHJzIDoge307XG5cblx0Ly8gRm9yY2Ugc2luZ2xlLXRhZyBzb2x1dGlvbiBvbiBJRTYtOSwgd2hpY2ggaGFzIGEgaGFyZCBsaW1pdCBvbiB0aGUgIyBvZiA8c3R5bGU+XG5cdC8vIHRhZ3MgaXQgd2lsbCBhbGxvdyBvbiBhIHBhZ2Vcblx0aWYgKCFvcHRpb25zLnNpbmdsZXRvbiAmJiB0eXBlb2Ygb3B0aW9ucy5zaW5nbGV0b24gIT09IFwiYm9vbGVhblwiKSBvcHRpb25zLnNpbmdsZXRvbiA9IGlzT2xkSUUoKTtcblxuXHQvLyBCeSBkZWZhdWx0LCBhZGQgPHN0eWxlPiB0YWdzIHRvIHRoZSA8aGVhZD4gZWxlbWVudFxuICAgICAgICBpZiAoIW9wdGlvbnMuaW5zZXJ0SW50bykgb3B0aW9ucy5pbnNlcnRJbnRvID0gXCJoZWFkXCI7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgYm90dG9tIG9mIHRoZSB0YXJnZXRcblx0aWYgKCFvcHRpb25zLmluc2VydEF0KSBvcHRpb25zLmluc2VydEF0ID0gXCJib3R0b21cIjtcblxuXHR2YXIgc3R5bGVzID0gbGlzdFRvU3R5bGVzKGxpc3QsIG9wdGlvbnMpO1xuXG5cdGFkZFN0eWxlc1RvRG9tKHN0eWxlcywgb3B0aW9ucyk7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSAobmV3TGlzdCkge1xuXHRcdHZhciBtYXlSZW1vdmUgPSBbXTtcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0XHRkb21TdHlsZS5yZWZzLS07XG5cdFx0XHRtYXlSZW1vdmUucHVzaChkb21TdHlsZSk7XG5cdFx0fVxuXG5cdFx0aWYobmV3TGlzdCkge1xuXHRcdFx0dmFyIG5ld1N0eWxlcyA9IGxpc3RUb1N0eWxlcyhuZXdMaXN0LCBvcHRpb25zKTtcblx0XHRcdGFkZFN0eWxlc1RvRG9tKG5ld1N0eWxlcywgb3B0aW9ucyk7XG5cdFx0fVxuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXlSZW1vdmUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBkb21TdHlsZSA9IG1heVJlbW92ZVtpXTtcblxuXHRcdFx0aWYoZG9tU3R5bGUucmVmcyA9PT0gMCkge1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSBkb21TdHlsZS5wYXJ0c1tqXSgpO1xuXG5cdFx0XHRcdGRlbGV0ZSBzdHlsZXNJbkRvbVtkb21TdHlsZS5pZF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufTtcblxuZnVuY3Rpb24gYWRkU3R5bGVzVG9Eb20gKHN0eWxlcywgb3B0aW9ucykge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gc3R5bGVzW2ldO1xuXHRcdHZhciBkb21TdHlsZSA9IHN0eWxlc0luRG9tW2l0ZW0uaWRdO1xuXG5cdFx0aWYoZG9tU3R5bGUpIHtcblx0XHRcdGRvbVN0eWxlLnJlZnMrKztcblxuXHRcdFx0Zm9yKHZhciBqID0gMDsgaiA8IGRvbVN0eWxlLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGRvbVN0eWxlLnBhcnRzW2pdKGl0ZW0ucGFydHNbal0pO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IoOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHBhcnRzID0gW107XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBpdGVtLnBhcnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHBhcnRzLnB1c2goYWRkU3R5bGUoaXRlbS5wYXJ0c1tqXSwgb3B0aW9ucykpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdHlsZXNJbkRvbVtpdGVtLmlkXSA9IHtpZDogaXRlbS5pZCwgcmVmczogMSwgcGFydHM6IHBhcnRzfTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gbGlzdFRvU3R5bGVzIChsaXN0LCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZXMgPSBbXTtcblx0dmFyIG5ld1N0eWxlcyA9IHt9O1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBpdGVtID0gbGlzdFtpXTtcblx0XHR2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcblx0XHR2YXIgY3NzID0gaXRlbVsxXTtcblx0XHR2YXIgbWVkaWEgPSBpdGVtWzJdO1xuXHRcdHZhciBzb3VyY2VNYXAgPSBpdGVtWzNdO1xuXHRcdHZhciBwYXJ0ID0ge2NzczogY3NzLCBtZWRpYTogbWVkaWEsIHNvdXJjZU1hcDogc291cmNlTWFwfTtcblxuXHRcdGlmKCFuZXdTdHlsZXNbaWRdKSBzdHlsZXMucHVzaChuZXdTdHlsZXNbaWRdID0ge2lkOiBpZCwgcGFydHM6IFtwYXJ0XX0pO1xuXHRcdGVsc2UgbmV3U3R5bGVzW2lkXS5wYXJ0cy5wdXNoKHBhcnQpO1xuXHR9XG5cblx0cmV0dXJuIHN0eWxlcztcbn1cblxuZnVuY3Rpb24gaW5zZXJ0U3R5bGVFbGVtZW50IChvcHRpb25zLCBzdHlsZSkge1xuXHR2YXIgdGFyZ2V0ID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEludG8pXG5cblx0aWYgKCF0YXJnZXQpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDb3VsZG4ndCBmaW5kIGEgc3R5bGUgdGFyZ2V0LiBUaGlzIHByb2JhYmx5IG1lYW5zIHRoYXQgdGhlIHZhbHVlIGZvciB0aGUgJ2luc2VydEludG8nIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcblx0fVxuXG5cdHZhciBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcCA9IHN0eWxlc0luc2VydGVkQXRUb3Bbc3R5bGVzSW5zZXJ0ZWRBdFRvcC5sZW5ndGggLSAxXTtcblxuXHRpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJ0b3BcIikge1xuXHRcdGlmICghbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3ApIHtcblx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIHRhcmdldC5maXJzdENoaWxkKTtcblx0XHR9IGVsc2UgaWYgKGxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wLm5leHRTaWJsaW5nKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdFx0fVxuXHRcdHN0eWxlc0luc2VydGVkQXRUb3AucHVzaChzdHlsZSk7XG5cdH0gZWxzZSBpZiAob3B0aW9ucy5pbnNlcnRBdCA9PT0gXCJib3R0b21cIikge1xuXHRcdHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwib2JqZWN0XCIgJiYgb3B0aW9ucy5pbnNlcnRBdC5iZWZvcmUpIHtcblx0XHR2YXIgbmV4dFNpYmxpbmcgPSBnZXRFbGVtZW50KG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlLCB0YXJnZXQpO1xuXHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoc3R5bGUsIG5leHRTaWJsaW5nKTtcblx0fSBlbHNlIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJbU3R5bGUgTG9hZGVyXVxcblxcbiBJbnZhbGlkIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ2luc2VydEF0JyAoJ29wdGlvbnMuaW5zZXJ0QXQnKSBmb3VuZC5cXG4gTXVzdCBiZSAndG9wJywgJ2JvdHRvbScsIG9yIE9iamVjdC5cXG4gKGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyI2luc2VydGF0KVxcblwiKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW1vdmVTdHlsZUVsZW1lbnQgKHN0eWxlKSB7XG5cdGlmIChzdHlsZS5wYXJlbnROb2RlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG5cdHN0eWxlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGUpO1xuXG5cdHZhciBpZHggPSBzdHlsZXNJbnNlcnRlZEF0VG9wLmluZGV4T2Yoc3R5bGUpO1xuXHRpZihpZHggPj0gMCkge1xuXHRcdHN0eWxlc0luc2VydGVkQXRUb3Auc3BsaWNlKGlkeCwgMSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXG5cdGlmKG9wdGlvbnMuYXR0cnMubm9uY2UgPT09IHVuZGVmaW5lZCkge1xuXHRcdHZhciBub25jZSA9IGdldE5vbmNlKCk7XG5cdFx0aWYgKG5vbmNlKSB7XG5cdFx0XHRvcHRpb25zLmF0dHJzLm5vbmNlID0gbm9uY2U7XG5cdFx0fVxuXHR9XG5cblx0YWRkQXR0cnMoc3R5bGUsIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgc3R5bGUpO1xuXG5cdHJldHVybiBzdHlsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlua0VsZW1lbnQgKG9wdGlvbnMpIHtcblx0dmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKTtcblxuXHRpZihvcHRpb25zLmF0dHJzLnR5cGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG9wdGlvbnMuYXR0cnMudHlwZSA9IFwidGV4dC9jc3NcIjtcblx0fVxuXHRvcHRpb25zLmF0dHJzLnJlbCA9IFwic3R5bGVzaGVldFwiO1xuXG5cdGFkZEF0dHJzKGxpbmssIG9wdGlvbnMuYXR0cnMpO1xuXHRpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucywgbGluayk7XG5cblx0cmV0dXJuIGxpbms7XG59XG5cbmZ1bmN0aW9uIGFkZEF0dHJzIChlbCwgYXR0cnMpIHtcblx0T2JqZWN0LmtleXMoYXR0cnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuXHRcdGVsLnNldEF0dHJpYnV0ZShrZXksIGF0dHJzW2tleV0pO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gZ2V0Tm9uY2UoKSB7XG5cdGlmICh0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gX193ZWJwYWNrX25vbmNlX187XG59XG5cbmZ1bmN0aW9uIGFkZFN0eWxlIChvYmosIG9wdGlvbnMpIHtcblx0dmFyIHN0eWxlLCB1cGRhdGUsIHJlbW92ZSwgcmVzdWx0O1xuXG5cdC8vIElmIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHdhcyBkZWZpbmVkLCBydW4gaXQgb24gdGhlIGNzc1xuXHRpZiAob3B0aW9ucy50cmFuc2Zvcm0gJiYgb2JqLmNzcykge1xuXHQgICAgcmVzdWx0ID0gdHlwZW9mIG9wdGlvbnMudHJhbnNmb3JtID09PSAnZnVuY3Rpb24nXG5cdFx0ID8gb3B0aW9ucy50cmFuc2Zvcm0ob2JqLmNzcykgXG5cdFx0IDogb3B0aW9ucy50cmFuc2Zvcm0uZGVmYXVsdChvYmouY3NzKTtcblxuXHQgICAgaWYgKHJlc3VsdCkge1xuXHQgICAgXHQvLyBJZiB0cmFuc2Zvcm0gcmV0dXJucyBhIHZhbHVlLCB1c2UgdGhhdCBpbnN0ZWFkIG9mIHRoZSBvcmlnaW5hbCBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIHJ1bm5pbmcgcnVudGltZSB0cmFuc2Zvcm1hdGlvbnMgb24gdGhlIGNzcy5cblx0ICAgIFx0b2JqLmNzcyA9IHJlc3VsdDtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdC8vIElmIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24gcmV0dXJucyBhIGZhbHN5IHZhbHVlLCBkb24ndCBhZGQgdGhpcyBjc3MuXG5cdCAgICBcdC8vIFRoaXMgYWxsb3dzIGNvbmRpdGlvbmFsIGxvYWRpbmcgb2YgY3NzXG5cdCAgICBcdHJldHVybiBmdW5jdGlvbigpIHtcblx0ICAgIFx0XHQvLyBub29wXG5cdCAgICBcdH07XG5cdCAgICB9XG5cdH1cblxuXHRpZiAob3B0aW9ucy5zaW5nbGV0b24pIHtcblx0XHR2YXIgc3R5bGVJbmRleCA9IHNpbmdsZXRvbkNvdW50ZXIrKztcblxuXHRcdHN0eWxlID0gc2luZ2xldG9uIHx8IChzaW5nbGV0b24gPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykpO1xuXG5cdFx0dXBkYXRlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCBmYWxzZSk7XG5cdFx0cmVtb3ZlID0gYXBwbHlUb1NpbmdsZXRvblRhZy5iaW5kKG51bGwsIHN0eWxlLCBzdHlsZUluZGV4LCB0cnVlKTtcblxuXHR9IGVsc2UgaWYgKFxuXHRcdG9iai5zb3VyY2VNYXAgJiZcblx0XHR0eXBlb2YgVVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgVVJMLmNyZWF0ZU9iamVjdFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5yZXZva2VPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBCbG9iID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiXG5cdCkge1xuXHRcdHN0eWxlID0gY3JlYXRlTGlua0VsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gdXBkYXRlTGluay5iaW5kKG51bGwsIHN0eWxlLCBvcHRpb25zKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXG5cdFx0XHRpZihzdHlsZS5ocmVmKSBVUkwucmV2b2tlT2JqZWN0VVJMKHN0eWxlLmhyZWYpO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0c3R5bGUgPSBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucyk7XG5cdFx0dXBkYXRlID0gYXBwbHlUb1RhZy5iaW5kKG51bGwsIHN0eWxlKTtcblx0XHRyZW1vdmUgPSBmdW5jdGlvbiAoKSB7XG5cdFx0XHRyZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGUpO1xuXHRcdH07XG5cdH1cblxuXHR1cGRhdGUob2JqKTtcblxuXHRyZXR1cm4gZnVuY3Rpb24gdXBkYXRlU3R5bGUgKG5ld09iaikge1xuXHRcdGlmIChuZXdPYmopIHtcblx0XHRcdGlmIChcblx0XHRcdFx0bmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJlxuXHRcdFx0XHRuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJlxuXHRcdFx0XHRuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR1cGRhdGUob2JqID0gbmV3T2JqKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVtb3ZlKCk7XG5cdFx0fVxuXHR9O1xufVxuXG52YXIgcmVwbGFjZVRleHQgPSAoZnVuY3Rpb24gKCkge1xuXHR2YXIgdGV4dFN0b3JlID0gW107XG5cblx0cmV0dXJuIGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQpIHtcblx0XHR0ZXh0U3RvcmVbaW5kZXhdID0gcmVwbGFjZW1lbnQ7XG5cblx0XHRyZXR1cm4gdGV4dFN0b3JlLmZpbHRlcihCb29sZWFuKS5qb2luKCdcXG4nKTtcblx0fTtcbn0pKCk7XG5cbmZ1bmN0aW9uIGFwcGx5VG9TaW5nbGV0b25UYWcgKHN0eWxlLCBpbmRleCwgcmVtb3ZlLCBvYmopIHtcblx0dmFyIGNzcyA9IHJlbW92ZSA/IFwiXCIgOiBvYmouY3NzO1xuXG5cdGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gcmVwbGFjZVRleHQoaW5kZXgsIGNzcyk7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIGNzc05vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpO1xuXHRcdHZhciBjaGlsZE5vZGVzID0gc3R5bGUuY2hpbGROb2RlcztcblxuXHRcdGlmIChjaGlsZE5vZGVzW2luZGV4XSkgc3R5bGUucmVtb3ZlQ2hpbGQoY2hpbGROb2Rlc1tpbmRleF0pO1xuXG5cdFx0aWYgKGNoaWxkTm9kZXMubGVuZ3RoKSB7XG5cdFx0XHRzdHlsZS5pbnNlcnRCZWZvcmUoY3NzTm9kZSwgY2hpbGROb2Rlc1tpbmRleF0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdHlsZS5hcHBlbmRDaGlsZChjc3NOb2RlKTtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gYXBwbHlUb1RhZyAoc3R5bGUsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIG1lZGlhID0gb2JqLm1lZGlhO1xuXG5cdGlmKG1lZGlhKSB7XG5cdFx0c3R5bGUuc2V0QXR0cmlidXRlKFwibWVkaWFcIiwgbWVkaWEpXG5cdH1cblxuXHRpZihzdHlsZS5zdHlsZVNoZWV0KSB7XG5cdFx0c3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuXHR9IGVsc2Uge1xuXHRcdHdoaWxlKHN0eWxlLmZpcnN0Q2hpbGQpIHtcblx0XHRcdHN0eWxlLnJlbW92ZUNoaWxkKHN0eWxlLmZpcnN0Q2hpbGQpO1xuXHRcdH1cblxuXHRcdHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUxpbmsgKGxpbmssIG9wdGlvbnMsIG9iaikge1xuXHR2YXIgY3NzID0gb2JqLmNzcztcblx0dmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG5cblx0Lypcblx0XHRJZiBjb252ZXJ0VG9BYnNvbHV0ZVVybHMgaXNuJ3QgZGVmaW5lZCwgYnV0IHNvdXJjZW1hcHMgYXJlIGVuYWJsZWRcblx0XHRhbmQgdGhlcmUgaXMgbm8gcHVibGljUGF0aCBkZWZpbmVkIHRoZW4gbGV0cyB0dXJuIGNvbnZlcnRUb0Fic29sdXRlVXJsc1xuXHRcdG9uIGJ5IGRlZmF1bHQuICBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgY29udmVydFRvQWJzb2x1dGVVcmxzIG9wdGlvblxuXHRcdGRpcmVjdGx5XG5cdCovXG5cdHZhciBhdXRvRml4VXJscyA9IG9wdGlvbnMuY29udmVydFRvQWJzb2x1dGVVcmxzID09PSB1bmRlZmluZWQgJiYgc291cmNlTWFwO1xuXG5cdGlmIChvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyB8fCBhdXRvRml4VXJscykge1xuXHRcdGNzcyA9IGZpeFVybHMoY3NzKTtcblx0fVxuXG5cdGlmIChzb3VyY2VNYXApIHtcblx0XHQvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yNjYwMzg3NVxuXHRcdGNzcyArPSBcIlxcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXCIgKyBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpICsgXCIgKi9cIjtcblx0fVxuXG5cdHZhciBibG9iID0gbmV3IEJsb2IoW2Nzc10sIHsgdHlwZTogXCJ0ZXh0L2Nzc1wiIH0pO1xuXG5cdHZhciBvbGRTcmMgPSBsaW5rLmhyZWY7XG5cblx0bGluay5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcblxuXHRpZihvbGRTcmMpIFVSTC5yZXZva2VPYmplY3RVUkwob2xkU3JjKTtcbn1cbiIsImNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpLkV2ZW50RW1pdHRlcjtcbmNvbnN0IGV2ZW50RW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbmNvbnN0IEhJREVfRVZFTlQgPSAnaGlkZU5vdGlmaWNhdGlvbic7XG5jb25zdCBTSE9XX0VWRU5UID0gJ3Nob3dOb3RpZmljYXRpb24nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RXZlbnRFbWl0dGVyOiAoKSA9PiBldmVudEVtaXR0ZXIsXG4gIGhpZGU6ICgpID0+IHtcbiAgICBldmVudEVtaXR0ZXIuZW1pdChISURFX0VWRU5UKVxuICB9LFxuICBvbkhpZGU6IChoYW5kbGVyKSA9PiB7XG4gICAgZXZlbnRFbWl0dGVyLm9uKEhJREVfRVZFTlQsIGhhbmRsZXIpXG4gIH0sXG4gIHNob3c6ICguLi5wcm9wcykgPT4ge1xuICAgIGV2ZW50RW1pdHRlci5lbWl0KFNIT1dfRVZFTlQsIC4uLnByb3BzKVxuICB9LFxuICBvblNob3c6IChoYW5kbGVyKSA9PiB7XG4gICAgZXZlbnRFbWl0dGVyLm9uKFNIT1dfRVZFTlQsIGhhbmRsZXIpXG4gIH0sXG4gIHJlc2V0OiAoKSA9PiB7XG4gICAgZXZlbnRFbWl0dGVyLnJlbW92ZUFsbExpc3RlbmVycyhTSE9XX0VWRU5UKVxuICAgIGV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoSElERV9FVkVOVClcbiAgfVxufVxuIiwidmFyIGxpc3RDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlQ2xlYXInKSxcbiAgICBsaXN0Q2FjaGVEZWxldGUgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVEZWxldGUnKSxcbiAgICBsaXN0Q2FjaGVHZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVHZXQnKSxcbiAgICBsaXN0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVIYXMnKSxcbiAgICBsaXN0Q2FjaGVTZXQgPSByZXF1aXJlKCcuL19saXN0Q2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGxpc3QgY2FjaGUgb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPT0gbnVsbCA/IDAgOiBlbnRyaWVzLmxlbmd0aDtcblxuICB0aGlzLmNsZWFyKCk7XG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleF07XG4gICAgdGhpcy5zZXQoZW50cnlbMF0sIGVudHJ5WzFdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IExpc3RDYWNoZTtcbiIsInZhciBlcSA9IHJlcXVpcmUoJy4vZXEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhc3NvY0luZGV4T2Y7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgU3ltYm9sID0gcm9vdC5TeW1ib2w7XG5cbm1vZHVsZS5leHBvcnRzID0gU3ltYm9sO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyB0aGVcbiAqIFtsYW5ndWFnZSB0eXBlXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtZWNtYXNjcmlwdC1sYW5ndWFnZS10eXBlcylcbiAqIG9mIGBPYmplY3RgLiAoZS5nLiBhcnJheXMsIGZ1bmN0aW9ucywgb2JqZWN0cywgcmVnZXhlcywgYG5ldyBOdW1iZXIoMClgLCBhbmQgYG5ldyBTdHJpbmcoJycpYClcbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBvYmplY3QsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc09iamVjdCh7fSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoXy5ub29wKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmICh0eXBlID09ICdvYmplY3QnIHx8IHR5cGUgPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNPYmplY3Q7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gbmF0aXZlQ3JlYXRlO1xuIiwidmFyIGlzS2V5YWJsZSA9IHJlcXVpcmUoJy4vX2lzS2V5YWJsZScpO1xuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TWFwRGF0YTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1ib2xUYWcgPSAnW29iamVjdCBTeW1ib2xdJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYFN5bWJvbGAgcHJpbWl0aXZlIG9yIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHN5bWJvbCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzU3ltYm9sKFN5bWJvbC5pdGVyYXRvcik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1N5bWJvbCgnYWJjJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N5bWJvbCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdzeW1ib2wnIHx8XG4gICAgKGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgYmFzZUdldFRhZyh2YWx1ZSkgPT0gc3ltYm9sVGFnKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N5bWJvbDtcbiIsInZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMDtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nIGtleSBpZiBpdCdzIG5vdCBhIHN0cmluZyBvciBzeW1ib2wuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGluc3BlY3QuXG4gKiBAcmV0dXJucyB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICovXG5mdW5jdGlvbiB0b0tleSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlID09ICdzdHJpbmcnIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXk7XG4iLCJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBhdWRpdCB9IGZyb20gJy4vYXVkaXQnO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tICcuLi9vYnNlcnZhYmxlL3RpbWVyJztcbmV4cG9ydCBmdW5jdGlvbiBhdWRpdFRpbWUoZHVyYXRpb24sIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY1NjaGVkdWxlcjsgfVxuICAgIHJldHVybiBhdWRpdChmdW5jdGlvbiAoKSB7IHJldHVybiB0aW1lcihkdXJhdGlvbiwgc2NoZWR1bGVyKTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1hdWRpdFRpbWUuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIGN1cnJlbnRCdWZmZXIucHVzaCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChjdXJyZW50QnVmZmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgICAgICBpbm5lckZyb20oY2xvc2luZ05vdGlmaWVyKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBiID0gY3VycmVudEJ1ZmZlcjtcbiAgICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChiKTtcbiAgICAgICAgfSwgbm9vcCkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3VycmVudEJ1ZmZlciA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXIuanMubWFwIiwiaW1wb3J0IHsgX192YWx1ZXMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgYXJyUmVtb3ZlIH0gZnJvbSAnLi4vdXRpbC9hcnJSZW1vdmUnO1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpIHtcbiAgICBpZiAoc3RhcnRCdWZmZXJFdmVyeSA9PT0gdm9pZCAwKSB7IHN0YXJ0QnVmZmVyRXZlcnkgPSBudWxsOyB9XG4gICAgc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnkgIT09IG51bGwgJiYgc3RhcnRCdWZmZXJFdmVyeSAhPT0gdm9pZCAwID8gc3RhcnRCdWZmZXJFdmVyeSA6IGJ1ZmZlclNpemU7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgYnVmZmVycyA9IFtdO1xuICAgICAgICB2YXIgY291bnQgPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBlXzEsIF9hLCBlXzIsIF9iO1xuICAgICAgICAgICAgdmFyIHRvRW1pdCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoY291bnQrKyAlIHN0YXJ0QnVmZmVyRXZlcnkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnB1c2goW10pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBidWZmZXJzXzEgPSBfX3ZhbHVlcyhidWZmZXJzKSwgYnVmZmVyc18xXzEgPSBidWZmZXJzXzEubmV4dCgpOyAhYnVmZmVyc18xXzEuZG9uZTsgYnVmZmVyc18xXzEgPSBidWZmZXJzXzEubmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyU2l6ZSA8PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b0VtaXQgPSB0b0VtaXQgIT09IG51bGwgJiYgdG9FbWl0ICE9PSB2b2lkIDAgPyB0b0VtaXQgOiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvRW1pdC5wdXNoKGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZmZlcnNfMV8xICYmICFidWZmZXJzXzFfMS5kb25lICYmIChfYSA9IGJ1ZmZlcnNfMS5yZXR1cm4pKSBfYS5jYWxsKGJ1ZmZlcnNfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0b0VtaXQpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciB0b0VtaXRfMSA9IF9fdmFsdWVzKHRvRW1pdCksIHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCk7ICF0b0VtaXRfMV8xLmRvbmU7IHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBidWZmZXIgPSB0b0VtaXRfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyUmVtb3ZlKGJ1ZmZlcnMsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXRjaCAoZV8yXzEpIHsgZV8yID0geyBlcnJvcjogZV8yXzEgfTsgfVxuICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRvRW1pdF8xXzEgJiYgIXRvRW1pdF8xXzEuZG9uZSAmJiAoX2IgPSB0b0VtaXRfMS5yZXR1cm4pKSBfYi5jYWxsKHRvRW1pdF8xKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMikgdGhyb3cgZV8yLmVycm9yOyB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZV8zLCBfYTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgYnVmZmVyc18yID0gX192YWx1ZXMoYnVmZmVycyksIGJ1ZmZlcnNfMl8xID0gYnVmZmVyc18yLm5leHQoKTsgIWJ1ZmZlcnNfMl8xLmRvbmU7IGJ1ZmZlcnNfMl8xID0gYnVmZmVyc18yLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gYnVmZmVyc18yXzEudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlXzNfMSkgeyBlXzMgPSB7IGVycm9yOiBlXzNfMSB9OyB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYnVmZmVyc18yXzEgJiYgIWJ1ZmZlcnNfMl8xLmRvbmUgJiYgKF9hID0gYnVmZmVyc18yLnJldHVybikpIF9hLmNhbGwoYnVmZmVyc18yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzMpIHRocm93IGVfMy5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJ1ZmZlcnMgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJDb3VudC5qcy5tYXAiLCJpbXBvcnQgeyBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgYXJyUmVtb3ZlIH0gZnJvbSAnLi4vdXRpbC9hcnJSZW1vdmUnO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUaW1lKGJ1ZmZlclRpbWVTcGFuKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgb3RoZXJBcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJBcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gKF9hID0gcG9wU2NoZWR1bGVyKG90aGVyQXJncykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGFzeW5jU2NoZWR1bGVyO1xuICAgIHZhciBidWZmZXJDcmVhdGlvbkludGVydmFsID0gKF9iID0gb3RoZXJBcmdzWzBdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xuICAgIHZhciBtYXhCdWZmZXJTaXplID0gb3RoZXJBcmdzWzFdIHx8IEluZmluaXR5O1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGJ1ZmZlclJlY29yZHMgPSBbXTtcbiAgICAgICAgdmFyIHJlc3RhcnRPbkVtaXQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVtaXQgPSBmdW5jdGlvbiAocmVjb3JkKSB7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gcmVjb3JkLmJ1ZmZlciwgc3VicyA9IHJlY29yZC5zdWJzO1xuICAgICAgICAgICAgc3Vicy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgYXJyUmVtb3ZlKGJ1ZmZlclJlY29yZHMsIHJlY29yZCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIHJlc3RhcnRPbkVtaXQgJiYgc3RhcnRCdWZmZXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHN0YXJ0QnVmZmVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGJ1ZmZlclJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTtcbiAgICAgICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG4gICAgICAgICAgICAgICAgdmFyIHJlY29yZF8xID0ge1xuICAgICAgICAgICAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgICAgICAgICAgICAgICAgc3Viczogc3VicyxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmRfMSk7XG4gICAgICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZW1pdChyZWNvcmRfMSk7IH0sIGJ1ZmZlclRpbWVTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBzdGFydEJ1ZmZlciwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN0YXJ0T25FbWl0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGFydEJ1ZmZlcigpO1xuICAgICAgICB2YXIgYnVmZmVyVGltZVN1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIHZhciByZWNvcmRzQ29weSA9IGJ1ZmZlclJlY29yZHMuc2xpY2UoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgcmVjb3Jkc0NvcHlfMSA9IF9fdmFsdWVzKHJlY29yZHNDb3B5KSwgcmVjb3Jkc0NvcHlfMV8xID0gcmVjb3Jkc0NvcHlfMS5uZXh0KCk7ICFyZWNvcmRzQ29weV8xXzEuZG9uZTsgcmVjb3Jkc0NvcHlfMV8xID0gcmVjb3Jkc0NvcHlfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlY29yZCA9IHJlY29yZHNDb3B5XzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IHJlY29yZC5idWZmZXI7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgbWF4QnVmZmVyU2l6ZSA8PSBidWZmZXIubGVuZ3RoICYmIGVtaXQocmVjb3JkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZHNDb3B5XzFfMSAmJiAhcmVjb3Jkc0NvcHlfMV8xLmRvbmUgJiYgKF9hID0gcmVjb3Jkc0NvcHlfMS5yZXR1cm4pKSBfYS5jYWxsKHJlY29yZHNDb3B5XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXJSZWNvcmRzID09PSBudWxsIHx8IGJ1ZmZlclJlY29yZHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclJlY29yZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKS5idWZmZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVmZmVyVGltZVN1YnNjcmliZXIgPT09IG51bGwgfHwgYnVmZmVyVGltZVN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclRpbWVTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gKGJ1ZmZlclJlY29yZHMgPSBudWxsKTsgfSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoYnVmZmVyVGltZVN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyVGltZS5qcy5tYXAiLCJpbXBvcnQgeyBfX3ZhbHVlcyB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5pbXBvcnQgeyBhcnJSZW1vdmUgfSBmcm9tICcuLi91dGlsL2FyclJlbW92ZSc7XG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyVG9nZ2xlKG9wZW5pbmdzLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXJzID0gW107XG4gICAgICAgIGlubmVyRnJvbShvcGVuaW5ncykuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAob3BlblZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgYnVmZmVyID0gW107XG4gICAgICAgICAgICBidWZmZXJzLnB1c2goYnVmZmVyKTtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdmFyIGVtaXRCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgYXJyUmVtb3ZlKGJ1ZmZlcnMsIGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlcik7XG4gICAgICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpcHRpb24uYWRkKGlubmVyRnJvbShjbG9zaW5nU2VsZWN0b3Iob3BlblZhbHVlKSkuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0QnVmZmVyLCBub29wKSkpO1xuICAgICAgICB9LCBub29wKSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMSA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCk7ICFidWZmZXJzXzFfMS5kb25lOyBidWZmZXJzXzFfMSA9IGJ1ZmZlcnNfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChidWZmZXJzXzFfMSAmJiAhYnVmZmVyc18xXzEuZG9uZSAmJiAoX2EgPSBidWZmZXJzXzEucmV0dXJuKSkgX2EuY2FsbChidWZmZXJzXzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdoaWxlIChidWZmZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVycy5zaGlmdCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyVG9nZ2xlLmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyV2hlbihjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSBudWxsO1xuICAgICAgICB2YXIgY2xvc2luZ1N1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB2YXIgb3BlbkJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpYmVyID09PSBudWxsIHx8IGNsb3NpbmdTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbG9zaW5nU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdmFyIGIgPSBidWZmZXI7XG4gICAgICAgICAgICBidWZmZXIgPSBbXTtcbiAgICAgICAgICAgIGIgJiYgc3Vic2NyaWJlci5uZXh0KGIpO1xuICAgICAgICAgICAgaW5uZXJGcm9tKGNsb3NpbmdTZWxlY3RvcigpKS5zdWJzY3JpYmUoKGNsb3NpbmdTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIG9wZW5CdWZmZXIsIG5vb3ApKSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5CdWZmZXIoKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiBidWZmZXIgPT09IG51bGwgfHwgYnVmZmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXIucHVzaCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGJ1ZmZlciAmJiBzdWJzY3JpYmVyLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7IHJldHVybiAoYnVmZmVyID0gY2xvc2luZ1N1YnNjcmliZXIgPSBudWxsKTsgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YnVmZmVyV2hlbi5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmV4cG9ydCBmdW5jdGlvbiBjYXRjaEVycm9yKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgIHZhciBoYW5kbGVkUmVzdWx0O1xuICAgICAgICBpbm5lclN1YiA9IHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBoYW5kbGVkUmVzdWx0ID0gaW5uZXJGcm9tKHNlbGVjdG9yKGVyciwgY2F0Y2hFcnJvcihzZWxlY3Rvcikoc291cmNlKSkpO1xuICAgICAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaGFuZGxlZFJlc3VsdC5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzeW5jVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIGlmIChzeW5jVW5zdWIpIHtcbiAgICAgICAgICAgIGlubmVyU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICBoYW5kbGVkUmVzdWx0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y2F0Y2hFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBjb21iaW5lTGF0ZXN0QWxsIH0gZnJvbSAnLi9jb21iaW5lTGF0ZXN0QWxsJztcbmV4cG9ydCB2YXIgY29tYmluZUFsbCA9IGNvbWJpbmVMYXRlc3RBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lQWxsLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgY29tYmluZUxhdGVzdCB9IGZyb20gJy4vY29tYmluZUxhdGVzdCc7XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdFdpdGgoKSB7XG4gICAgdmFyIG90aGVyU291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyU291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gY29tYmluZUxhdGVzdC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChvdGhlclNvdXJjZXMpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0V2l0aC5qcy5tYXAiLCJpbXBvcnQgeyBjb25jYXRNYXAgfSBmcm9tICcuL2NvbmNhdE1hcCc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpID8gY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IpIDogY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRNYXBUby5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGNvbmNhdCB9IGZyb20gJy4vY29uY2F0JztcbmV4cG9ydCBmdW5jdGlvbiBjb25jYXRXaXRoKCkge1xuICAgIHZhciBvdGhlclNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvdGhlclNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmNhdC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChvdGhlclNvdXJjZXMpKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRXaXRoLmpzLm1hcCIsImltcG9ydCB7IHJlZHVjZSB9IGZyb20gJy4vcmVkdWNlJztcbmV4cG9ydCBmdW5jdGlvbiBjb3VudChwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gcmVkdWNlKGZ1bmN0aW9uICh0b3RhbCwgdmFsdWUsIGkpIHsgcmV0dXJuICghcHJlZGljYXRlIHx8IHByZWRpY2F0ZSh2YWx1ZSwgaSkgPyB0b3RhbCArIDEgOiB0b3RhbCk7IH0sIDApO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y291bnQuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZShkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICB2YXIgZW1pdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFzdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGVtaXQsIG5vb3ApO1xuICAgICAgICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUpKS5zdWJzY3JpYmUoZHVyYXRpb25TdWJzY3JpYmVyKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZW1pdCgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IGR1cmF0aW9uU3Vic2NyaWJlciA9IG51bGw7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlYm91bmNlLmpzLm1hcCIsImltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlVGltZShkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7IH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgIHZhciBsYXN0VGltZSA9IG51bGw7XG4gICAgICAgIHZhciBlbWl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gbGFzdFZhbHVlO1xuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkge1xuICAgICAgICAgICAgdmFyIHRhcmdldFRpbWUgPSBsYXN0VGltZSArIGR1ZVRpbWU7XG4gICAgICAgICAgICB2YXIgbm93ID0gc2NoZWR1bGVyLm5vdygpO1xuICAgICAgICAgICAgaWYgKG5vdyA8IHRhcmdldFRpbWUpIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gdGhpcy5zY2hlZHVsZSh1bmRlZmluZWQsIHRhcmdldFRpbWUgLSBub3cpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgfVxuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgbGFzdFRpbWUgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgICAgICBpZiAoIWFjdGl2ZVRhc2spIHtcbiAgICAgICAgICAgICAgICBhY3RpdmVUYXNrID0gc2NoZWR1bGVyLnNjaGVkdWxlKGVtaXRXaGVuSWRsZSwgZHVlVGltZSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoYWN0aXZlVGFzayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGVtaXQoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVib3VuY2VUaW1lLmpzLm1hcCIsImltcG9ydCB7IGFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IGRlbGF5V2hlbiB9IGZyb20gJy4vZGVsYXlXaGVuJztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS90aW1lcic7XG5leHBvcnQgZnVuY3Rpb24gZGVsYXkoZHVlLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7IH1cbiAgICB2YXIgZHVyYXRpb24gPSB0aW1lcihkdWUsIHNjaGVkdWxlcik7XG4gICAgcmV0dXJuIGRlbGF5V2hlbihmdW5jdGlvbiAoKSB7IHJldHVybiBkdXJhdGlvbjsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheS5qcy5tYXAiLCJpbXBvcnQgeyBvYnNlcnZlTm90aWZpY2F0aW9uIH0gZnJvbSAnLi4vTm90aWZpY2F0aW9uJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGRlbWF0ZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAobm90aWZpY2F0aW9uKSB7IHJldHVybiBvYnNlcnZlTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7IH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlbWF0ZXJpYWxpemUuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBkaXN0aW5jdChrZXlTZWxlY3RvciwgZmx1c2hlcykge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGRpc3RpbmN0S2V5cyA9IG5ldyBTZXQoKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5U2VsZWN0b3IgPyBrZXlTZWxlY3Rvcih2YWx1ZSkgOiB2YWx1ZTtcbiAgICAgICAgICAgIGlmICghZGlzdGluY3RLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZGlzdGluY3RLZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgICAgZmx1c2hlcyAmJiBpbm5lckZyb20oZmx1c2hlcykuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBkaXN0aW5jdEtleXMuY2xlYXIoKTsgfSwgbm9vcCkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3QuanMubWFwIiwiaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICcuL2Rpc3RpbmN0VW50aWxDaGFuZ2VkJztcbmV4cG9ydCBmdW5jdGlvbiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZChrZXksIGNvbXBhcmUpIHtcbiAgICByZXR1cm4gZGlzdGluY3RVbnRpbENoYW5nZWQoZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIGNvbXBhcmUgPyBjb21wYXJlKHhba2V5XSwgeVtrZXldKSA6IHhba2V5XSA9PT0geVtrZXldOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLmpzLm1hcCIsImltcG9ydCB7IEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIH0gZnJvbSAnLi4vdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQgeyB0aHJvd0lmRW1wdHkgfSBmcm9tICcuL3Rocm93SWZFbXB0eSc7XG5pbXBvcnQgeyBkZWZhdWx0SWZFbXB0eSB9IGZyb20gJy4vZGVmYXVsdElmRW1wdHknO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJy4vdGFrZSc7XG5leHBvcnQgZnVuY3Rpb24gZWxlbWVudEF0KGluZGV4LCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcigpO1xuICAgIH1cbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShmaWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIGkgPT09IGluZGV4OyB9KSwgdGFrZSgxKSwgaGFzRGVmYXVsdFZhbHVlID8gZGVmYXVsdElmRW1wdHkoZGVmYXVsdFZhbHVlKSA6IHRocm93SWZFbXB0eShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IoKTsgfSkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbGVtZW50QXQuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBjb25jYXQgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2NvbmNhdCc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJy4uL29ic2VydmFibGUvb2YnO1xuZXhwb3J0IGZ1bmN0aW9uIGVuZFdpdGgoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhbHVlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gY29uY2F0KHNvdXJjZSwgb2YuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFsdWVzKSkpKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVuZFdpdGguanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZXZlcnkocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUsIGluZGV4KyssIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHRydWUpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ldmVyeS5qcy5tYXAiLCJpbXBvcnQgeyBleGhhdXN0QWxsIH0gZnJvbSAnLi9leGhhdXN0QWxsJztcbmV4cG9ydCB2YXIgZXhoYXVzdCA9IGV4aGF1c3RBbGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1leGhhdXN0LmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgbWVyZ2VJbnRlcm5hbHMgfSBmcm9tICcuL21lcmdlSW50ZXJuYWxzJztcbmV4cG9ydCBmdW5jdGlvbiBleHBhbmQocHJvamVjdCwgY29uY3VycmVudCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgeyBjb25jdXJyZW50ID0gSW5maW5pdHk7IH1cbiAgICBjb25jdXJyZW50ID0gKGNvbmN1cnJlbnQgfHwgMCkgPCAxID8gSW5maW5pdHkgOiBjb25jdXJyZW50O1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgcHJvamVjdCwgY29uY3VycmVudCwgdW5kZWZpbmVkLCB0cnVlLCBzY2hlZHVsZXIpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwYW5kLmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuYWRkKGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluYWxpemUuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVGaW5kIH0gZnJvbSAnLi9maW5kJztcbmV4cG9ydCBmdW5jdGlvbiBmaW5kSW5kZXgocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoY3JlYXRlRmluZChwcmVkaWNhdGUsIHRoaXNBcmcsICdpbmRleCcpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbmRJbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi4vdXRpbC9FbXB0eUVycm9yJztcbmltcG9ydCB7IGZpbHRlciB9IGZyb20gJy4vZmlsdGVyJztcbmltcG9ydCB7IHRha2UgfSBmcm9tICcuL3Rha2UnO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHkgfSBmcm9tICcuL2RlZmF1bHRJZkVtcHR5JztcbmltcG9ydCB7IHRocm93SWZFbXB0eSB9IGZyb20gJy4vdGhyb3dJZkVtcHR5JztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gZmlyc3QocHJlZGljYXRlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgaGFzRGVmYXVsdFZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+PSAyO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UucGlwZShwcmVkaWNhdGUgPyBmaWx0ZXIoZnVuY3Rpb24gKHYsIGkpIHsgcmV0dXJuIHByZWRpY2F0ZSh2LCBpLCBzb3VyY2UpOyB9KSA6IGlkZW50aXR5LCB0YWtlKDEpLCBoYXNEZWZhdWx0VmFsdWUgPyBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yKCk7IH0pKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmlyc3QuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIsIE9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBncm91cEJ5KGtleVNlbGVjdG9yLCBlbGVtZW50T3JPcHRpb25zLCBkdXJhdGlvbiwgY29ubmVjdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgZWxlbWVudDtcbiAgICAgICAgaWYgKCFlbGVtZW50T3JPcHRpb25zIHx8IHR5cGVvZiBlbGVtZW50T3JPcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudE9yT3B0aW9ucztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIChkdXJhdGlvbiA9IGVsZW1lbnRPck9wdGlvbnMuZHVyYXRpb24sIGVsZW1lbnQgPSBlbGVtZW50T3JPcHRpb25zLmVsZW1lbnQsIGNvbm5lY3RvciA9IGVsZW1lbnRPck9wdGlvbnMuY29ubmVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZ3JvdXBzID0gbmV3IE1hcCgpO1xuICAgICAgICB2YXIgbm90aWZ5ID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgICAgICBncm91cHMuZm9yRWFjaChjYik7XG4gICAgICAgICAgICBjYihzdWJzY3JpYmVyKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIGhhbmRsZUVycm9yID0gZnVuY3Rpb24gKGVycikgeyByZXR1cm4gbm90aWZ5KGZ1bmN0aW9uIChjb25zdW1lcikgeyByZXR1cm4gY29uc3VtZXIuZXJyb3IoZXJyKTsgfSk7IH07XG4gICAgICAgIHZhciBhY3RpdmVHcm91cHMgPSAwO1xuICAgICAgICB2YXIgdGVhcmRvd25BdHRlbXB0ZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGdyb3VwQnlTb3VyY2VTdWJzY3JpYmVyID0gbmV3IE9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleV8xID0ga2V5U2VsZWN0b3IodmFsdWUpO1xuICAgICAgICAgICAgICAgIHZhciBncm91cF8xID0gZ3JvdXBzLmdldChrZXlfMSk7XG4gICAgICAgICAgICAgICAgaWYgKCFncm91cF8xKSB7XG4gICAgICAgICAgICAgICAgICAgIGdyb3Vwcy5zZXQoa2V5XzEsIChncm91cF8xID0gY29ubmVjdG9yID8gY29ubmVjdG9yKCkgOiBuZXcgU3ViamVjdCgpKSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBncm91cGVkID0gY3JlYXRlR3JvdXBlZE9ic2VydmFibGUoa2V5XzEsIGdyb3VwXzEpO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZ3JvdXBlZCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uU3Vic2NyaWJlcl8xID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKGdyb3VwXzEsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cF8xLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb25TdWJzY3JpYmVyXzEgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyXzEgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlcl8xLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gZ3JvdXBzLmRlbGV0ZShrZXlfMSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBCeVNvdXJjZVN1YnNjcmliZXIuYWRkKGlubmVyRnJvbShkdXJhdGlvbihncm91cGVkKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcl8xKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZ3JvdXBfMS5uZXh0KGVsZW1lbnQgPyBlbGVtZW50KHZhbHVlKSA6IHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBoYW5kbGVFcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiBub3RpZnkoZnVuY3Rpb24gKGNvbnN1bWVyKSB7IHJldHVybiBjb25zdW1lci5jb21wbGV0ZSgpOyB9KTsgfSwgaGFuZGxlRXJyb3IsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdyb3Vwcy5jbGVhcigpOyB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0ZWFyZG93bkF0dGVtcHRlZCA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gYWN0aXZlR3JvdXBzID09PSAwO1xuICAgICAgICB9KTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShncm91cEJ5U291cmNlU3Vic2NyaWJlcik7XG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZUdyb3VwZWRPYnNlcnZhYmxlKGtleSwgZ3JvdXBTdWJqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKGdyb3VwU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIGFjdGl2ZUdyb3VwcysrO1xuICAgICAgICAgICAgICAgIHZhciBpbm5lclN1YiA9IGdyb3VwU3ViamVjdC5zdWJzY3JpYmUoZ3JvdXBTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAtLWFjdGl2ZUdyb3VwcyA9PT0gMCAmJiB0ZWFyZG93bkF0dGVtcHRlZCAmJiBncm91cEJ5U291cmNlU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJlc3VsdC5rZXkgPSBrZXk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncm91cEJ5LmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoZmFsc2UpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodHJ1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzRW1wdHkuanMubWFwIiwiaW1wb3J0IHsgRW1wdHlFcnJvciB9IGZyb20gJy4uL3V0aWwvRW1wdHlFcnJvcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQgeyB0YWtlTGFzdCB9IGZyb20gJy4vdGFrZUxhc3QnO1xuaW1wb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi90aHJvd0lmRW1wdHknO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHkgfSBmcm9tICcuL2RlZmF1bHRJZkVtcHR5JztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gbGFzdChwcmVkaWNhdGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBoYXNEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5waXBlKHByZWRpY2F0ZSA/IGZpbHRlcihmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSk7IH0pIDogaWRlbnRpdHksIHRha2VMYXN0KDEpLCBoYXNEZWZhdWx0VmFsdWUgPyBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yKCk7IH0pKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFzdC5qcy5tYXAiLCJpbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuLi9Ob3RpZmljYXRpb24nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWF0ZXJpYWxpemUoKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChOb3RpZmljYXRpb24uY3JlYXRlTmV4dCh2YWx1ZSkpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoTm90aWZpY2F0aW9uLmNyZWF0ZUNvbXBsZXRlKCkpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoTm90aWZpY2F0aW9uLmNyZWF0ZUVycm9yKGVycikpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXRlcmlhbGl6ZS5qcy5tYXAiLCJpbXBvcnQgeyByZWR1Y2UgfSBmcm9tICcuL3JlZHVjZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBtYXgoY29tcGFyZXIpIHtcbiAgICByZXR1cm4gcmVkdWNlKGlzRnVuY3Rpb24oY29tcGFyZXIpID8gZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIChjb21wYXJlcih4LCB5KSA+IDAgPyB4IDogeSk7IH0gOiBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKHggPiB5ID8geCA6IHkpOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1heC5qcy5tYXAiLCJpbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4vbWVyZ2VNYXAnO1xuZXhwb3J0IHZhciBmbGF0TWFwID0gbWVyZ2VNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mbGF0TWFwLmpzLm1hcCIsImltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAnLi9tZXJnZU1hcCc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBJbmZpbml0eTsgfVxuICAgIGlmIChpc0Z1bmN0aW9uKHJlc3VsdFNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXJPYnNlcnZhYmxlOyB9LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0U2VsZWN0b3IgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGNvbmN1cnJlbnQgPSByZXN1bHRTZWxlY3RvcjtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlTWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgY29uY3VycmVudCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZU1hcFRvLmpzLm1hcCIsImltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgbWVyZ2VJbnRlcm5hbHMgfSBmcm9tICcuL21lcmdlSW50ZXJuYWxzJztcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVNjYW4oYWNjdW11bGF0b3IsIHNlZWQsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7IGNvbmN1cnJlbnQgPSBJbmZpbml0eTsgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gc2VlZDtcbiAgICAgICAgcmV0dXJuIG1lcmdlSW50ZXJuYWxzKHNvdXJjZSwgc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gYWNjdW11bGF0b3Ioc3RhdGUsIHZhbHVlLCBpbmRleCk7IH0sIGNvbmN1cnJlbnQsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgc3RhdGUgPSB2YWx1ZTtcbiAgICAgICAgfSwgZmFsc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyByZXR1cm4gKHN0YXRlID0gbnVsbCk7IH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VTY2FuLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgbWVyZ2UgfSBmcm9tICcuL21lcmdlJztcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZVdpdGgoKSB7XG4gICAgdmFyIG90aGVyU291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG90aGVyU291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2UuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQob3RoZXJTb3VyY2VzKSkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VXaXRoLmpzLm1hcCIsImltcG9ydCB7IHJlZHVjZSB9IGZyb20gJy4vcmVkdWNlJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIG1pbihjb21wYXJlcikge1xuICAgIHJldHVybiByZWR1Y2UoaXNGdW5jdGlvbihjb21wYXJlcikgPyBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gKGNvbXBhcmVyKHgsIHkpIDwgMCA/IHggOiB5KTsgfSA6IGZ1bmN0aW9uICh4LCB5KSB7IHJldHVybiAoeCA8IHkgPyB4IDogeSk7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWluLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgYXJnc09yQXJnQXJyYXkgfSBmcm9tICcuLi91dGlsL2FyZ3NPckFyZ0FycmF5JztcbmltcG9ydCB7IG9uRXJyb3JSZXN1bWVOZXh0IGFzIG9FUk5DcmVhdGUgfSBmcm9tICcuLi9vYnNlcnZhYmxlL29uRXJyb3JSZXN1bWVOZXh0JztcbmV4cG9ydCBmdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dFdpdGgoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBuZXh0U291cmNlcyA9IGFyZ3NPckFyZ0FycmF5KHNvdXJjZXMpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBvRVJOQ3JlYXRlLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKG5leHRTb3VyY2VzKSkpOyB9O1xufVxuZXhwb3J0IHZhciBvbkVycm9yUmVzdW1lTmV4dCA9IG9uRXJyb3JSZXN1bWVOZXh0V2l0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBwYWlyd2lzZSgpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBwcmV2O1xuICAgICAgICB2YXIgaGFzUHJldiA9IGZhbHNlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBwID0gcHJldjtcbiAgICAgICAgICAgIHByZXYgPSB2YWx1ZTtcbiAgICAgICAgICAgIGhhc1ByZXYgJiYgc3Vic2NyaWJlci5uZXh0KFtwLCB2YWx1ZV0pO1xuICAgICAgICAgICAgaGFzUHJldiA9IHRydWU7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhaXJ3aXNlLmpzLm1hcCIsImltcG9ydCB7IG1hcCB9IGZyb20gJy4vbWFwJztcbmV4cG9ydCBmdW5jdGlvbiBwbHVjaygpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHByb3BlcnRpZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGxlbmd0aCA9IHByb3BlcnRpZXMubGVuZ3RoO1xuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsaXN0IG9mIHByb3BlcnRpZXMgY2Fubm90IGJlIGVtcHR5LicpO1xuICAgIH1cbiAgICByZXR1cm4gbWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHZhciBjdXJyZW50UHJvcCA9IHg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gY3VycmVudFByb3AgPT09IG51bGwgfHwgY3VycmVudFByb3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGN1cnJlbnRQcm9wW3Byb3BlcnRpZXNbaV1dO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBwICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wID0gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQcm9wO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGx1Y2suanMubWFwIiwiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi9tdWx0aWNhc3QnO1xuaW1wb3J0IHsgY29ubmVjdCB9IGZyb20gJy4vY29ubmVjdCc7XG5leHBvcnQgZnVuY3Rpb24gcHVibGlzaChzZWxlY3Rvcikge1xuICAgIHJldHVybiBzZWxlY3RvciA/IGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIGNvbm5lY3Qoc2VsZWN0b3IpKHNvdXJjZSk7IH0gOiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3QobmV3IFN1YmplY3QoKSkoc291cmNlKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2guanMubWFwIiwiaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAnLi4vQmVoYXZpb3JTdWJqZWN0JztcbmltcG9ydCB7IENvbm5lY3RhYmxlT2JzZXJ2YWJsZSB9IGZyb20gJy4uL29ic2VydmFibGUvQ29ubmVjdGFibGVPYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoQmVoYXZpb3IoaW5pdGlhbFZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29ubmVjdGFibGVPYnNlcnZhYmxlKHNvdXJjZSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ViamVjdDsgfSk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2hCZWhhdmlvci5qcy5tYXAiLCJpbXBvcnQgeyBBc3luY1N1YmplY3QgfSBmcm9tICcuLi9Bc3luY1N1YmplY3QnO1xuaW1wb3J0IHsgQ29ubmVjdGFibGVPYnNlcnZhYmxlIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hMYXN0KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFzeW5jU3ViamVjdCgpO1xuICAgICAgICByZXR1cm4gbmV3IENvbm5lY3RhYmxlT2JzZXJ2YWJsZShzb3VyY2UsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmplY3Q7IH0pO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoTGFzdC5qcy5tYXAiLCJpbXBvcnQgeyBSZXBsYXlTdWJqZWN0IH0gZnJvbSAnLi4vUmVwbGF5U3ViamVjdCc7XG5pbXBvcnQgeyBtdWx0aWNhc3QgfSBmcm9tICcuL211bHRpY2FzdCc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoUmVwbGF5KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNlbGVjdG9yT3JTY2hlZHVsZXIsIHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgaWYgKHNlbGVjdG9yT3JTY2hlZHVsZXIgJiYgIWlzRnVuY3Rpb24oc2VsZWN0b3JPclNjaGVkdWxlcikpIHtcbiAgICAgICAgdGltZXN0YW1wUHJvdmlkZXIgPSBzZWxlY3Rvck9yU2NoZWR1bGVyO1xuICAgIH1cbiAgICB2YXIgc2VsZWN0b3IgPSBpc0Z1bmN0aW9uKHNlbGVjdG9yT3JTY2hlZHVsZXIpID8gc2VsZWN0b3JPclNjaGVkdWxlciA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gbXVsdGljYXN0KG5ldyBSZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHRpbWVzdGFtcFByb3ZpZGVyKSwgc2VsZWN0b3IpKHNvdXJjZSk7IH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoUmVwbGF5LmpzLm1hcCIsImltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9lbXB0eSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IHRpbWVyIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS90aW1lcic7XG5leHBvcnQgZnVuY3Rpb24gcmVwZWF0KGNvdW50T3JDb25maWcpIHtcbiAgICB2YXIgX2E7XG4gICAgdmFyIGNvdW50ID0gSW5maW5pdHk7XG4gICAgdmFyIGRlbGF5O1xuICAgIGlmIChjb3VudE9yQ29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjb3VudE9yQ29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgKF9hID0gY291bnRPckNvbmZpZy5jb3VudCwgY291bnQgPSBfYSA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfYSwgZGVsYXkgPSBjb3VudE9yQ29uZmlnLmRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvdW50ID0gY291bnRPckNvbmZpZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY291bnQgPD0gMFxuICAgICAgICA/IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEVNUFRZOyB9XG4gICAgICAgIDogb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgc29GYXIgPSAwO1xuICAgICAgICAgICAgdmFyIHNvdXJjZVN1YjtcbiAgICAgICAgICAgIHZhciByZXN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzb3VyY2VTdWIgPT09IG51bGwgfHwgc291cmNlU3ViID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2VTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBzb3VyY2VTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChkZWxheSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3RpZmllciA9IHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgPyB0aW1lcihkZWxheSkgOiBpbm5lckZyb20oZGVsYXkoc29GYXIpKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdGlmaWVyU3Vic2NyaWJlcl8xID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyU3Vic2NyaWJlcl8xLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbm90aWZpZXIuc3Vic2NyaWJlKG5vdGlmaWVyU3Vic2NyaWJlcl8xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpYmVUb1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3luY1Vuc3ViID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc291cmNlU3ViID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICgrK3NvRmFyIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2VTdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3luY1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgICAgICBpZiAoc3luY1Vuc3ViKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwZWF0LmpzLm1hcCIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGVhdFdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbm5lclN1YjtcbiAgICAgICAgdmFyIHN5bmNSZXN1YiA9IGZhbHNlO1xuICAgICAgICB2YXIgY29tcGxldGlvbnMkO1xuICAgICAgICB2YXIgaXNOb3RpZmllckNvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHZhciBpc01haW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgY2hlY2tDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlzTWFpbkNvbXBsZXRlICYmIGlzTm90aWZpZXJDb21wbGV0ZSAmJiAoc3Vic2NyaWJlci5jb21wbGV0ZSgpLCB0cnVlKTsgfTtcbiAgICAgICAgdmFyIGdldENvbXBsZXRpb25TdWJqZWN0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFjb21wbGV0aW9ucyQpIHtcbiAgICAgICAgICAgICAgICBjb21wbGV0aW9ucyQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbShub3RpZmllcihjb21wbGV0aW9ucyQpKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlubmVyU3ViKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXBlYXRXaGVuKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzeW5jUmVzdWIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBpc05vdGlmaWVyQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjaGVja0NvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25zJDtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHN1YnNjcmliZUZvclJlcGVhdFdoZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpc01haW5Db21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaW5uZXJTdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpc01haW5Db21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgIWNoZWNrQ29tcGxldGUoKSAmJiBnZXRDb21wbGV0aW9uU3ViamVjdCgpLm5leHQoKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChzeW5jUmVzdWIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXBlYXRXaGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHN1YnNjcmliZUZvclJlcGVhdFdoZW4oKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tICcuLi9vYnNlcnZhYmxlL3RpbWVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiByZXRyeShjb25maWdPckNvdW50KSB7XG4gICAgaWYgKGNvbmZpZ09yQ291bnQgPT09IHZvaWQgMCkgeyBjb25maWdPckNvdW50ID0gSW5maW5pdHk7IH1cbiAgICB2YXIgY29uZmlnO1xuICAgIGlmIChjb25maWdPckNvdW50ICYmIHR5cGVvZiBjb25maWdPckNvdW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25maWcgPSBjb25maWdPckNvdW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uZmlnID0ge1xuICAgICAgICAgICAgY291bnQ6IGNvbmZpZ09yQ291bnQsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHZhciBfYSA9IGNvbmZpZy5jb3VudCwgY291bnQgPSBfYSA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfYSwgZGVsYXkgPSBjb25maWcuZGVsYXksIF9iID0gY29uZmlnLnJlc2V0T25TdWNjZXNzLCByZXNldE9uU3VjY2VzcyA9IF9iID09PSB2b2lkIDAgPyBmYWxzZSA6IF9iO1xuICAgIHJldHVybiBjb3VudCA8PSAwXG4gICAgICAgID8gaWRlbnRpdHlcbiAgICAgICAgOiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBzb0ZhciA9IDA7XG4gICAgICAgICAgICB2YXIgaW5uZXJTdWI7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaWJlRm9yUmV0cnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIHN5bmNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNldE9uU3VjY2Vzcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc29GYXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzb0ZhcisrIDwgY291bnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZXN1Yl8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbm5lclN1Yikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lclN1YiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUZvclJldHJ5KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jVW5zdWIgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVsYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RpZmllciA9IHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgPyB0aW1lcihkZWxheSkgOiBpbm5lckZyb20oZGVsYXkoZXJyLCBzb0ZhcikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBub3RpZmllclN1YnNjcmliZXJfMSA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGlmaWVyU3Vic2NyaWJlcl8xLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3ViXzEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZmllci5zdWJzY3JpYmUobm90aWZpZXJTdWJzY3JpYmVyXzEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWJfMSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICAgIGlmIChzeW5jVW5zdWIpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeSgpO1xuICAgICAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5LmpzLm1hcCIsImltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHJldHJ5V2hlbihub3RpZmllcikge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGlubmVyU3ViO1xuICAgICAgICB2YXIgc3luY1Jlc3ViID0gZmFsc2U7XG4gICAgICAgIHZhciBlcnJvcnMkO1xuICAgICAgICB2YXIgc3Vic2NyaWJlRm9yUmV0cnlXaGVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaW5uZXJTdWIgPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3JzJCkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcnMkID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgaW5uZXJGcm9tKG5vdGlmaWVyKGVycm9ycyQpKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbm5lclN1YiA/IHN1YnNjcmliZUZvclJldHJ5V2hlbigpIDogKHN5bmNSZXN1YiA9IHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlcnJvcnMkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9ycyQubmV4dChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIGlmIChzeW5jUmVzdWIpIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGlubmVyU3ViID0gbnVsbDtcbiAgICAgICAgICAgICAgICBzeW5jUmVzdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVGb3JSZXRyeVdoZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgc3Vic2NyaWJlRm9yUmV0cnlXaGVuKCk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXRyeVdoZW4uanMubWFwIiwiaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgc2FtcGxlIH0gZnJvbSAnLi9zYW1wbGUnO1xuaW1wb3J0IHsgaW50ZXJ2YWwgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2ludGVydmFsJztcbmV4cG9ydCBmdW5jdGlvbiBzYW1wbGVUaW1lKHBlcmlvZCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyOyB9XG4gICAgcmV0dXJuIHNhbXBsZShpbnRlcnZhbChwZXJpb2QsIHNjaGVkdWxlcikpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlVGltZS5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IHNjYW5JbnRlcm5hbHMgfSBmcm9tICcuL3NjYW5JbnRlcm5hbHMnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjYW4oYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShzY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBhcmd1bWVudHMubGVuZ3RoID49IDIsIHRydWUpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjYW4uanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gc2VxdWVuY2VFcXVhbChjb21wYXJlVG8sIGNvbXBhcmF0b3IpIHtcbiAgICBpZiAoY29tcGFyYXRvciA9PT0gdm9pZCAwKSB7IGNvbXBhcmF0b3IgPSBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSA9PT0gYjsgfTsgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGFTdGF0ZSA9IGNyZWF0ZVN0YXRlKCk7XG4gICAgICAgIHZhciBiU3RhdGUgPSBjcmVhdGVTdGF0ZSgpO1xuICAgICAgICB2YXIgZW1pdCA9IGZ1bmN0aW9uIChpc0VxdWFsKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaXNFcXVhbCk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciBjcmVhdGVTdWJzY3JpYmVyID0gZnVuY3Rpb24gKHNlbGZTdGF0ZSwgb3RoZXJTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IG90aGVyU3RhdGUuYnVmZmVyLCBjb21wbGV0ZSA9IG90aGVyU3RhdGUuY29tcGxldGU7XG4gICAgICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGUgPyBlbWl0KGZhbHNlKSA6IHNlbGZTdGF0ZS5idWZmZXIucHVzaChhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICFjb21wYXJhdG9yKGEsIGJ1ZmZlci5zaGlmdCgpKSAmJiBlbWl0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgc2VsZlN0YXRlLmNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB2YXIgY29tcGxldGUgPSBvdGhlclN0YXRlLmNvbXBsZXRlLCBidWZmZXIgPSBvdGhlclN0YXRlLmJ1ZmZlcjtcbiAgICAgICAgICAgICAgICBjb21wbGV0ZSAmJiBlbWl0KGJ1ZmZlci5sZW5ndGggPT09IDApO1xuICAgICAgICAgICAgICAgIHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSBudWxsIHx8IHNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZXF1ZW5jZUVxdWFsU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gc2VxdWVuY2VFcXVhbFN1YnNjcmliZXI7XG4gICAgICAgIH07XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihhU3RhdGUsIGJTdGF0ZSkpO1xuICAgICAgICBpbm5lckZyb20oY29tcGFyZVRvKS5zdWJzY3JpYmUoY3JlYXRlU3Vic2NyaWJlcihiU3RhdGUsIGFTdGF0ZSkpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gY3JlYXRlU3RhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgYnVmZmVyOiBbXSxcbiAgICAgICAgY29tcGxldGU6IGZhbHNlLFxuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zZXF1ZW5jZUVxdWFsLmpzLm1hcCIsImltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICcuLi9SZXBsYXlTdWJqZWN0JztcbmltcG9ydCB7IHNoYXJlIH0gZnJvbSAnLi9zaGFyZSc7XG5leHBvcnQgZnVuY3Rpb24gc2hhcmVSZXBsYXkoY29uZmlnT3JCdWZmZXJTaXplLCB3aW5kb3dUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgX2EsIF9iLCBfYztcbiAgICB2YXIgYnVmZmVyU2l6ZTtcbiAgICB2YXIgcmVmQ291bnQgPSBmYWxzZTtcbiAgICBpZiAoY29uZmlnT3JCdWZmZXJTaXplICYmIHR5cGVvZiBjb25maWdPckJ1ZmZlclNpemUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIChfYSA9IGNvbmZpZ09yQnVmZmVyU2l6ZS5idWZmZXJTaXplLCBidWZmZXJTaXplID0gX2EgPT09IHZvaWQgMCA/IEluZmluaXR5IDogX2EsIF9iID0gY29uZmlnT3JCdWZmZXJTaXplLndpbmRvd1RpbWUsIHdpbmRvd1RpbWUgPSBfYiA9PT0gdm9pZCAwID8gSW5maW5pdHkgOiBfYiwgX2MgPSBjb25maWdPckJ1ZmZlclNpemUucmVmQ291bnQsIHJlZkNvdW50ID0gX2MgPT09IHZvaWQgMCA/IGZhbHNlIDogX2MsIHNjaGVkdWxlciA9IGNvbmZpZ09yQnVmZmVyU2l6ZS5zY2hlZHVsZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgYnVmZmVyU2l6ZSA9IChjb25maWdPckJ1ZmZlclNpemUgIT09IG51bGwgJiYgY29uZmlnT3JCdWZmZXJTaXplICE9PSB2b2lkIDAgPyBjb25maWdPckJ1ZmZlclNpemUgOiBJbmZpbml0eSk7XG4gICAgfVxuICAgIHJldHVybiBzaGFyZSh7XG4gICAgICAgIGNvbm5lY3RvcjogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFJlcGxheVN1YmplY3QoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2NoZWR1bGVyKTsgfSxcbiAgICAgICAgcmVzZXRPbkVycm9yOiB0cnVlLFxuICAgICAgICByZXNldE9uQ29tcGxldGU6IGZhbHNlLFxuICAgICAgICByZXNldE9uUmVmQ291bnRaZXJvOiByZWZDb3VudCxcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNoYXJlUmVwbGF5LmpzLm1hcCIsImltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgU2VxdWVuY2VFcnJvciB9IGZyb20gJy4uL3V0aWwvU2VxdWVuY2VFcnJvcic7XG5pbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi4vdXRpbC9Ob3RGb3VuZEVycm9yJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZShwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgc2luZ2xlVmFsdWU7XG4gICAgICAgIHZhciBzZWVuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBzZWVuVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUgfHwgcHJlZGljYXRlKHZhbHVlLCBpbmRleCsrLCBzb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgaGFzVmFsdWUgJiYgc3Vic2NyaWJlci5lcnJvcihuZXcgU2VxdWVuY2VFcnJvcignVG9vIG1hbnkgbWF0Y2hpbmcgdmFsdWVzJykpO1xuICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzaW5nbGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoc2luZ2xlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3Ioc2VlblZhbHVlID8gbmV3IE5vdEZvdW5kRXJyb3IoJ05vIG1hdGNoaW5nIHZhbHVlcycpIDogbmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNpbmdsZS5qcy5tYXAiLCJpbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuL2ZpbHRlcic7XG5leHBvcnQgZnVuY3Rpb24gc2tpcChjb3VudCkge1xuICAgIHJldHVybiBmaWx0ZXIoZnVuY3Rpb24gKF8sIGluZGV4KSB7IHJldHVybiBjb3VudCA8PSBpbmRleDsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwLmpzLm1hcCIsImltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBza2lwTGFzdChza2lwQ291bnQpIHtcbiAgICByZXR1cm4gc2tpcENvdW50IDw9IDBcbiAgICAgICAgP1xuICAgICAgICAgICAgaWRlbnRpdHlcbiAgICAgICAgOiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciByaW5nID0gbmV3IEFycmF5KHNraXBDb3VudCk7XG4gICAgICAgICAgICB2YXIgc2VlbiA9IDA7XG4gICAgICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVJbmRleCA9IHNlZW4rKztcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVJbmRleCA8IHNraXBDb3VudCkge1xuICAgICAgICAgICAgICAgICAgICByaW5nW3ZhbHVlSW5kZXhdID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSB2YWx1ZUluZGV4ICUgc2tpcENvdW50O1xuICAgICAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSByaW5nW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgcmluZ1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG9sZFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJpbmcgPSBudWxsO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwTGFzdC5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlsL25vb3AnO1xuZXhwb3J0IGZ1bmN0aW9uIHNraXBVbnRpbChub3RpZmllcikge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHRha2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgc2tpcFN1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2tpcFN1YnNjcmliZXIgPT09IG51bGwgfHwgc2tpcFN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNraXBTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0YWtpbmcgPSB0cnVlO1xuICAgICAgICB9LCBub29wKTtcbiAgICAgICAgaW5uZXJGcm9tKG5vdGlmaWVyKS5zdWJzY3JpYmUoc2tpcFN1YnNjcmliZXIpO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuIHRha2luZyAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUpOyB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwIiwiaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHRha2luZyA9IGZhbHNlO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHsgcmV0dXJuICh0YWtpbmcgfHwgKHRha2luZyA9ICFwcmVkaWNhdGUodmFsdWUsIGluZGV4KyspKSkgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTsgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcFdoaWxlLmpzLm1hcCIsImltcG9ydCB7IGNvbmNhdCB9IGZyb20gJy4uL29ic2VydmFibGUvY29uY2F0JztcbmltcG9ydCB7IHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmV4cG9ydCBmdW5jdGlvbiBzdGFydFdpdGgoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHZhbHVlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKHZhbHVlcyk7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICAoc2NoZWR1bGVyID8gY29uY2F0KHZhbHVlcywgc291cmNlLCBzY2hlZHVsZXIpIDogY29uY2F0KHZhbHVlcywgc291cmNlKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3RhcnRXaXRoLmpzLm1hcCIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJy4vc3dpdGNoTWFwJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoQWxsKCkge1xuICAgIHJldHVybiBzd2l0Y2hNYXAoaWRlbnRpdHkpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoQWxsLmpzLm1hcCIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJy4vc3dpdGNoTWFwJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaE1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihyZXN1bHRTZWxlY3RvcikgPyBzd2l0Y2hNYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXJPYnNlcnZhYmxlOyB9LCByZXN1bHRTZWxlY3RvcikgOiBzd2l0Y2hNYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXJPYnNlcnZhYmxlOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcFRvLmpzLm1hcCIsImltcG9ydCB7IHN3aXRjaE1hcCB9IGZyb20gJy4vc3dpdGNoTWFwJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaFNjYW4oYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IHNlZWQ7XG4gICAgICAgIHN3aXRjaE1hcChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7IHJldHVybiBhY2N1bXVsYXRvcihzdGF0ZSwgdmFsdWUsIGluZGV4KTsgfSwgZnVuY3Rpb24gKF8sIGlubmVyVmFsdWUpIHsgcmV0dXJuICgoc3RhdGUgPSBpbm5lclZhbHVlKSwgaW5uZXJWYWx1ZSk7IH0pKHNvdXJjZSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3RhdGUgPSBudWxsO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoU2Nhbi5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvaW5uZXJGcm9tJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlsL25vb3AnO1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VVbnRpbChub3RpZmllcikge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgaW5uZXJGcm9tKG5vdGlmaWVyKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSwgbm9vcCkpO1xuICAgICAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2VVbnRpbC5qcy5tYXAiLCJpbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiB0YWtlV2hpbGUocHJlZGljYXRlLCBpbmNsdXNpdmUpIHtcbiAgICBpZiAoaW5jbHVzaXZlID09PSB2b2lkIDApIHsgaW5jbHVzaXZlID0gZmFsc2U7IH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHByZWRpY2F0ZSh2YWx1ZSwgaW5kZXgrKyk7XG4gICAgICAgICAgICAocmVzdWx0IHx8IGluY2x1c2l2ZSkgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICFyZXN1bHQgJiYgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YWtlV2hpbGUuanMubWFwIiwiaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gdGFwKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICB2YXIgdGFwT2JzZXJ2ZXIgPSBpc0Z1bmN0aW9uKG9ic2VydmVyT3JOZXh0KSB8fCBlcnJvciB8fCBjb21wbGV0ZVxuICAgICAgICA/XG4gICAgICAgICAgICB7IG5leHQ6IG9ic2VydmVyT3JOZXh0LCBlcnJvcjogZXJyb3IsIGNvbXBsZXRlOiBjb21wbGV0ZSB9XG4gICAgICAgIDogb2JzZXJ2ZXJPck5leHQ7XG4gICAgcmV0dXJuIHRhcE9ic2VydmVyXG4gICAgICAgID8gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAoX2EgPSB0YXBPYnNlcnZlci5zdWJzY3JpYmUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHRhcE9ic2VydmVyKTtcbiAgICAgICAgICAgIHZhciBpc1Vuc3ViID0gdHJ1ZTtcbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0YXBPYnNlcnZlci5uZXh0KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlciwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGlzVW5zdWIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAoX2EgPSB0YXBPYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgaXNVbnN1YiA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIChfYSA9IHRhcE9ic2VydmVyLmVycm9yKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0YXBPYnNlcnZlciwgZXJyKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICBpZiAoaXNVbnN1Yikge1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSB0YXBPYnNlcnZlci51bnN1YnNjcmliZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAoX2IgPSB0YXBPYnNlcnZlci5maW5hbGl6ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwodGFwT2JzZXJ2ZXIpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KVxuICAgICAgICA6XG4gICAgICAgICAgICBpZGVudGl0eTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRhcC5qcy5tYXAiLCJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyB0aHJvdHRsZSB9IGZyb20gJy4vdGhyb3R0bGUnO1xuaW1wb3J0IHsgdGltZXIgfSBmcm9tICcuLi9vYnNlcnZhYmxlL3RpbWVyJztcbmV4cG9ydCBmdW5jdGlvbiB0aHJvdHRsZVRpbWUoZHVyYXRpb24sIHNjaGVkdWxlciwgY29uZmlnKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyOyB9XG4gICAgdmFyIGR1cmF0aW9uJCA9IHRpbWVyKGR1cmF0aW9uLCBzY2hlZHVsZXIpO1xuICAgIHJldHVybiB0aHJvdHRsZShmdW5jdGlvbiAoKSB7IHJldHVybiBkdXJhdGlvbiQ7IH0sIGNvbmZpZyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsZVRpbWUuanMubWFwIiwiaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gdGltZUludGVydmFsKHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgeyBzY2hlZHVsZXIgPSBhc3luY1NjaGVkdWxlcjsgfVxuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGxhc3QgPSBzY2hlZHVsZXIubm93KCk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdmFyIG5vdyA9IHNjaGVkdWxlci5ub3coKTtcbiAgICAgICAgICAgIHZhciBpbnRlcnZhbCA9IG5vdyAtIGxhc3Q7XG4gICAgICAgICAgICBsYXN0ID0gbm93O1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KG5ldyBUaW1lSW50ZXJ2YWwodmFsdWUsIGludGVydmFsKSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcbn1cbnZhciBUaW1lSW50ZXJ2YWwgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRpbWVJbnRlcnZhbCh2YWx1ZSwgaW50ZXJ2YWwpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmludGVydmFsID0gaW50ZXJ2YWw7XG4gICAgfVxuICAgIHJldHVybiBUaW1lSW50ZXJ2YWw7XG59KCkpO1xuZXhwb3J0IHsgVGltZUludGVydmFsIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lSW50ZXJ2YWwuanMubWFwIiwiaW1wb3J0IHsgYXN5bmMgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgaXNWYWxpZERhdGUgfSBmcm9tICcuLi91dGlsL2lzRGF0ZSc7XG5pbXBvcnQgeyB0aW1lb3V0IH0gZnJvbSAnLi90aW1lb3V0JztcbmV4cG9ydCBmdW5jdGlvbiB0aW1lb3V0V2l0aChkdWUsIHdpdGhPYnNlcnZhYmxlLCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgZmlyc3Q7XG4gICAgdmFyIGVhY2g7XG4gICAgdmFyIF93aXRoO1xuICAgIHNjaGVkdWxlciA9IHNjaGVkdWxlciAhPT0gbnVsbCAmJiBzY2hlZHVsZXIgIT09IHZvaWQgMCA/IHNjaGVkdWxlciA6IGFzeW5jO1xuICAgIGlmIChpc1ZhbGlkRGF0ZShkdWUpKSB7XG4gICAgICAgIGZpcnN0ID0gZHVlO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICBlYWNoID0gZHVlO1xuICAgIH1cbiAgICBpZiAod2l0aE9ic2VydmFibGUpIHtcbiAgICAgICAgX3dpdGggPSBmdW5jdGlvbiAoKSB7IHJldHVybiB3aXRoT2JzZXJ2YWJsZTsgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9ic2VydmFibGUgcHJvdmlkZWQgdG8gc3dpdGNoIHRvJyk7XG4gICAgfVxuICAgIGlmIChmaXJzdCA9PSBudWxsICYmIGVhY2ggPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyB0aW1lb3V0IHByb3ZpZGVkLicpO1xuICAgIH1cbiAgICByZXR1cm4gdGltZW91dCh7XG4gICAgICAgIGZpcnN0OiBmaXJzdCxcbiAgICAgICAgZWFjaDogZWFjaCxcbiAgICAgICAgc2NoZWR1bGVyOiBzY2hlZHVsZXIsXG4gICAgICAgIHdpdGg6IF93aXRoLFxuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dFdpdGguanMubWFwIiwiaW1wb3J0IHsgZGF0ZVRpbWVzdGFtcFByb3ZpZGVyIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlcic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuL21hcCc7XG5leHBvcnQgZnVuY3Rpb24gdGltZXN0YW1wKHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgaWYgKHRpbWVzdGFtcFByb3ZpZGVyID09PSB2b2lkIDApIHsgdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXI7IH1cbiAgICByZXR1cm4gbWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gKHsgdmFsdWU6IHZhbHVlLCB0aW1lc3RhbXA6IHRpbWVzdGFtcFByb3ZpZGVyLm5vdygpIH0pOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVzdGFtcC5qcy5tYXAiLCJpbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmltcG9ydCB7IG5vb3AgfSBmcm9tICcuLi91dGlsL25vb3AnO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvdyh3aW5kb3dCb3VuZGFyaWVzKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgd2luZG93U3ViamVjdCA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgdmFyIGVycm9ySGFuZGxlciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB3aW5kb3dTdWJqZWN0ID09PSBudWxsIHx8IHdpbmRvd1N1YmplY3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvd1N1YmplY3QubmV4dCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgZXJyb3JIYW5kbGVyKSk7XG4gICAgICAgIGlubmVyRnJvbSh3aW5kb3dCb3VuZGFyaWVzKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgod2luZG93U3ViamVjdCA9IG5ldyBTdWJqZWN0KCkpKTtcbiAgICAgICAgfSwgbm9vcCwgZXJyb3JIYW5kbGVyKSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB3aW5kb3dTdWJqZWN0ID09PSBudWxsIHx8IHdpbmRvd1N1YmplY3QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHdpbmRvd1N1YmplY3QudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHdpbmRvd1N1YmplY3QgPSBudWxsO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93LmpzLm1hcCIsImltcG9ydCB7IF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dDb3VudCh3aW5kb3dTaXplLCBzdGFydFdpbmRvd0V2ZXJ5KSB7XG4gICAgaWYgKHN0YXJ0V2luZG93RXZlcnkgPT09IHZvaWQgMCkgeyBzdGFydFdpbmRvd0V2ZXJ5ID0gMDsgfVxuICAgIHZhciBzdGFydEV2ZXJ5ID0gc3RhcnRXaW5kb3dFdmVyeSA+IDAgPyBzdGFydFdpbmRvd0V2ZXJ5IDogd2luZG93U2l6ZTtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gW25ldyBTdWJqZWN0KCldO1xuICAgICAgICB2YXIgc3RhcnRzID0gW107XG4gICAgICAgIHZhciBjb3VudCA9IDA7XG4gICAgICAgIHN1YnNjcmliZXIubmV4dCh3aW5kb3dzWzBdLmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgd2luZG93c18xID0gX192YWx1ZXMod2luZG93cyksIHdpbmRvd3NfMV8xID0gd2luZG93c18xLm5leHQoKTsgIXdpbmRvd3NfMV8xLmRvbmU7IHdpbmRvd3NfMV8xID0gd2luZG93c18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgd2luZG93XzEgPSB3aW5kb3dzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93XzEubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh3aW5kb3dzXzFfMSAmJiAhd2luZG93c18xXzEuZG9uZSAmJiAoX2EgPSB3aW5kb3dzXzEucmV0dXJuKSkgX2EuY2FsbCh3aW5kb3dzXzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgYyA9IGNvdW50IC0gd2luZG93U2l6ZSArIDE7XG4gICAgICAgICAgICBpZiAoYyA+PSAwICYmIGMgJSBzdGFydEV2ZXJ5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKytjb3VudCAlIHN0YXJ0RXZlcnkgPT09IDApIHtcbiAgICAgICAgICAgICAgICB2YXIgd2luZG93XzIgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIHdpbmRvd3MucHVzaCh3aW5kb3dfMik7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvd18yLmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2hpbGUgKHdpbmRvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd3Muc2hpZnQoKS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICB3aGlsZSAod2luZG93cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN0YXJ0cyA9IG51bGw7XG4gICAgICAgICAgICB3aW5kb3dzID0gbnVsbDtcbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93Q291bnQuanMubWFwIiwiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgYXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgYXJyUmVtb3ZlIH0gZnJvbSAnLi4vdXRpbC9hcnJSZW1vdmUnO1xuaW1wb3J0IHsgcG9wU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGV4ZWN1dGVTY2hlZHVsZSB9IGZyb20gJy4uL3V0aWwvZXhlY3V0ZVNjaGVkdWxlJztcbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dUaW1lKHdpbmRvd1RpbWVTcGFuKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgb3RoZXJBcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJBcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gKF9hID0gcG9wU2NoZWR1bGVyKG90aGVyQXJncykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGFzeW5jU2NoZWR1bGVyO1xuICAgIHZhciB3aW5kb3dDcmVhdGlvbkludGVydmFsID0gKF9iID0gb3RoZXJBcmdzWzBdKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudWxsO1xuICAgIHZhciBtYXhXaW5kb3dTaXplID0gb3RoZXJBcmdzWzFdIHx8IEluZmluaXR5O1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHdpbmRvd1JlY29yZHMgPSBbXTtcbiAgICAgICAgdmFyIHJlc3RhcnRPbkNsb3NlID0gZmFsc2U7XG4gICAgICAgIHZhciBjbG9zZVdpbmRvdyA9IGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3cgPSByZWNvcmQud2luZG93LCBzdWJzID0gcmVjb3JkLnN1YnM7XG4gICAgICAgICAgICB3aW5kb3cuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHN1YnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGFyclJlbW92ZSh3aW5kb3dSZWNvcmRzLCByZWNvcmQpO1xuICAgICAgICAgICAgcmVzdGFydE9uQ2xvc2UgJiYgc3RhcnRXaW5kb3coKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHN0YXJ0V2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHdpbmRvd1JlY29yZHMpIHtcbiAgICAgICAgICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTtcbiAgICAgICAgICAgICAgICB2YXIgd2luZG93XzEgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAgICAgICAgIHZhciByZWNvcmRfMSA9IHtcbiAgICAgICAgICAgICAgICAgICAgd2luZG93OiB3aW5kb3dfMSxcbiAgICAgICAgICAgICAgICAgICAgc3Viczogc3VicyxcbiAgICAgICAgICAgICAgICAgICAgc2VlbjogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHdpbmRvd1JlY29yZHMucHVzaChyZWNvcmRfMSk7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvd18xLmFzT2JzZXJ2YWJsZSgpKTtcbiAgICAgICAgICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vicywgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjbG9zZVdpbmRvdyhyZWNvcmRfMSk7IH0sIHdpbmRvd1RpbWVTcGFuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBzdGFydFdpbmRvdywgd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN0YXJ0T25DbG9zZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhcnRXaW5kb3coKTtcbiAgICAgICAgdmFyIGxvb3AgPSBmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIHdpbmRvd1JlY29yZHMuc2xpY2UoKS5mb3JFYWNoKGNiKTsgfTtcbiAgICAgICAgdmFyIHRlcm1pbmF0ZSA9IGZ1bmN0aW9uIChjYikge1xuICAgICAgICAgICAgbG9vcChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIgd2luZG93ID0gX2Eud2luZG93O1xuICAgICAgICAgICAgICAgIHJldHVybiBjYih3aW5kb3cpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjYihzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBsb29wKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgICAgICAgICAgICByZWNvcmQud2luZG93Lm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIG1heFdpbmRvd1NpemUgPD0gKytyZWNvcmQuc2VlbiAmJiBjbG9zZVdpbmRvdyhyZWNvcmQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRlcm1pbmF0ZShmdW5jdGlvbiAoY29uc3VtZXIpIHsgcmV0dXJuIGNvbnN1bWVyLmNvbXBsZXRlKCk7IH0pOyB9LCBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiB0ZXJtaW5hdGUoZnVuY3Rpb24gKGNvbnN1bWVyKSB7IHJldHVybiBjb25zdW1lci5lcnJvcihlcnIpOyB9KTsgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgd2luZG93UmVjb3JkcyA9IG51bGw7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dUaW1lLmpzLm1hcCIsImltcG9ydCB7IF9fdmFsdWVzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGFyclJlbW92ZSB9IGZyb20gJy4uL3V0aWwvYXJyUmVtb3ZlJztcbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHdpbmRvd3MgPSBbXTtcbiAgICAgICAgdmFyIGhhbmRsZUVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgd2hpbGUgKDAgPCB3aW5kb3dzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd3Muc2hpZnQoKS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICB9O1xuICAgICAgICBpbm5lckZyb20ob3BlbmluZ3MpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKG9wZW5WYWx1ZSkge1xuICAgICAgICAgICAgdmFyIHdpbmRvdyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgICAgICB3aW5kb3dzLnB1c2god2luZG93KTtcbiAgICAgICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICAgICAgdmFyIGNsb3NlV2luZG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGFyclJlbW92ZSh3aW5kb3dzLCB3aW5kb3cpO1xuICAgICAgICAgICAgICAgIHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB2YXIgY2xvc2luZ05vdGlmaWVyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nTm90aWZpZXIgPSBpbm5lckZyb20oY2xvc2luZ1NlbGVjdG9yKG9wZW5WYWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvdy5hc09ic2VydmFibGUoKSk7XG4gICAgICAgICAgICBjbG9zaW5nU3Vic2NyaXB0aW9uLmFkZChjbG9zaW5nTm90aWZpZXIuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBjbG9zZVdpbmRvdywgbm9vcCwgaGFuZGxlRXJyb3IpKSk7XG4gICAgICAgIH0sIG5vb3ApKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgICAgIHZhciB3aW5kb3dzQ29weSA9IHdpbmRvd3Muc2xpY2UoKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgd2luZG93c0NvcHlfMSA9IF9fdmFsdWVzKHdpbmRvd3NDb3B5KSwgd2luZG93c0NvcHlfMV8xID0gd2luZG93c0NvcHlfMS5uZXh0KCk7ICF3aW5kb3dzQ29weV8xXzEuZG9uZTsgd2luZG93c0NvcHlfMV8xID0gd2luZG93c0NvcHlfMS5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHdpbmRvd18xID0gd2luZG93c0NvcHlfMV8xLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB3aW5kb3dfMS5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHdpbmRvd3NDb3B5XzFfMSAmJiAhd2luZG93c0NvcHlfMV8xLmRvbmUgJiYgKF9hID0gd2luZG93c0NvcHlfMS5yZXR1cm4pKSBfYS5jYWxsKHdpbmRvd3NDb3B5XzEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOyB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdoaWxlICgwIDwgd2luZG93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfSwgaGFuZGxlRXJyb3IsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdoaWxlICgwIDwgd2luZG93cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VG9nZ2xlLmpzLm1hcCIsImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IG9wZXJhdGUgfSBmcm9tICcuLi91dGlsL2xpZnQnO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd1doZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgd2luZG93O1xuICAgICAgICB2YXIgY2xvc2luZ1N1YnNjcmliZXI7XG4gICAgICAgIHZhciBoYW5kbGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIHdpbmRvdy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgb3BlbldpbmRvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNsb3NpbmdTdWJzY3JpYmVyID09PSBudWxsIHx8IGNsb3NpbmdTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjbG9zaW5nU3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgd2luZG93ID09PSBudWxsIHx8IHdpbmRvdyA9PT0gdm9pZCAwID8gdm9pZCAwIDogd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB3aW5kb3cgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHdpbmRvdy5hc09ic2VydmFibGUoKSk7XG4gICAgICAgICAgICB2YXIgY2xvc2luZ05vdGlmaWVyO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjbG9zaW5nTm90aWZpZXIgPSBpbm5lckZyb20oY2xvc2luZ1NlbGVjdG9yKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGhhbmRsZUVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2xvc2luZ05vdGlmaWVyLnN1YnNjcmliZSgoY2xvc2luZ1N1YnNjcmliZXIgPSBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3BlbldpbmRvdywgb3BlbldpbmRvdywgaGFuZGxlRXJyb3IpKSk7XG4gICAgICAgIH07XG4gICAgICAgIG9wZW5XaW5kb3coKTtcbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB3aW5kb3cubmV4dCh2YWx1ZSk7IH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9LCBoYW5kbGVFcnJvciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY2xvc2luZ1N1YnNjcmliZXIgPT09IG51bGwgfHwgY2xvc2luZ1N1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNsb3NpbmdTdWJzY3JpYmVyLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB3aW5kb3cgPSBudWxsO1xuICAgICAgICB9KSk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dXaGVuLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIgfSBmcm9tICcuL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5pbXBvcnQgeyBwb3BSZXN1bHRTZWxlY3RvciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5leHBvcnQgZnVuY3Rpb24gd2l0aExhdGVzdEZyb20oKSB7XG4gICAgdmFyIGlucHV0cyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGlucHV0c1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgcHJvamVjdCA9IHBvcFJlc3VsdFNlbGVjdG9yKGlucHV0cyk7XG4gICAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgbGVuID0gaW5wdXRzLmxlbmd0aDtcbiAgICAgICAgdmFyIG90aGVyVmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIHZhciBoYXNWYWx1ZSA9IGlucHV0cy5tYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gZmFsc2U7IH0pO1xuICAgICAgICB2YXIgcmVhZHkgPSBmYWxzZTtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgaW5uZXJGcm9tKGlucHV0c1tpXSkuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBvdGhlclZhbHVlc1tpXSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICghcmVhZHkgJiYgIWhhc1ZhbHVlW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlW2ldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgKHJlYWR5ID0gaGFzVmFsdWUuZXZlcnkoaWRlbnRpdHkpKSAmJiAoaGFzVmFsdWUgPSBudWxsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBub29wKSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoaSk7XG4gICAgICAgIH1cbiAgICAgICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAocmVhZHkpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVzID0gX19zcHJlYWRBcnJheShbdmFsdWVdLCBfX3JlYWQob3RoZXJWYWx1ZXMpKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocHJvamVjdCA/IHByb2plY3QuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFsdWVzKSkpIDogdmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2l0aExhdGVzdEZyb20uanMubWFwIiwiaW1wb3J0IHsgemlwIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS96aXAnO1xuaW1wb3J0IHsgam9pbkFsbEludGVybmFscyB9IGZyb20gJy4vam9pbkFsbEludGVybmFscyc7XG5leHBvcnQgZnVuY3Rpb24gemlwQWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gam9pbkFsbEludGVybmFscyh6aXAsIHByb2plY3QpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwQWxsLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgemlwIH0gZnJvbSAnLi96aXAnO1xuZXhwb3J0IGZ1bmN0aW9uIHppcFdpdGgoKSB7XG4gICAgdmFyIG90aGVySW5wdXRzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb3RoZXJJbnB1dHNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIHppcC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChvdGhlcklucHV0cykpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcFdpdGguanMubWFwIiwiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5leHBvcnQgdmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnb2JqZWN0IHVuc3Vic2NyaWJlZCc7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9TdWJqZWN0JztcbnZhciBCZWhhdmlvclN1YmplY3QgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCZWhhdmlvclN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQmVoYXZpb3JTdWJqZWN0KF92YWx1ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fdmFsdWUgPSBfdmFsdWU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUsIFwidmFsdWVcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gX3N1cGVyLnByb3RvdHlwZS5fc3Vic2NyaWJlLmNhbGwodGhpcywgc3Vic2NyaWJlcik7XG4gICAgICAgICFzdWJzY3JpcHRpb24uY2xvc2VkICYmIHN1YnNjcmliZXIubmV4dCh0aGlzLl92YWx1ZSk7XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfTtcbiAgICBCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBoYXNFcnJvciA9IF9hLmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hLnRocm93bkVycm9yLCBfdmFsdWUgPSBfYS5fdmFsdWU7XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgdGhyb3duRXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpO1xuICAgICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH07XG4gICAgQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsICh0aGlzLl92YWx1ZSA9IHZhbHVlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gQmVoYXZpb3JTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnQgeyBCZWhhdmlvclN1YmplY3QgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUJlaGF2aW9yU3ViamVjdC5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yT3JFcnJvckZhY3RvcnksIHNjaGVkdWxlcikge1xuICAgIHZhciBlcnJvckZhY3RvcnkgPSBpc0Z1bmN0aW9uKGVycm9yT3JFcnJvckZhY3RvcnkpID8gZXJyb3JPckVycm9yRmFjdG9yeSA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVycm9yT3JFcnJvckZhY3Rvcnk7IH07XG4gICAgdmFyIGluaXQgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7IH07XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHNjaGVkdWxlciA/IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoaW5pdCwgMCwgc3Vic2NyaWJlcik7IH0gOiBpbml0KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm93RXJyb3IuanMubWFwIiwiaW1wb3J0IHsgY3JlYXRlRXJyb3JDbGFzcyB9IGZyb20gJy4vY3JlYXRlRXJyb3JDbGFzcyc7XG5leHBvcnQgdmFyIE5vdEZvdW5kRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gTm90Rm91bmRFcnJvckltcGwobWVzc2FnZSkge1xuICAgICAgICBfc3VwZXIodGhpcyk7XG4gICAgICAgIHRoaXMubmFtZSA9ICdOb3RGb3VuZEVycm9yJztcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgICB9O1xufSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Ob3RGb3VuZEVycm9yLmpzLm1hcCIsImltcG9ydCB7IGNyZWF0ZUVycm9yQ2xhc3MgfSBmcm9tICcuL2NyZWF0ZUVycm9yQ2xhc3MnO1xuZXhwb3J0IHZhciBTZXF1ZW5jZUVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIFNlcXVlbmNlRXJyb3JJbXBsKG1lc3NhZ2UpIHtcbiAgICAgICAgX3N1cGVyKHRoaXMpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnU2VxdWVuY2VFcnJvcic7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgfTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U2VxdWVuY2VFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBhc3luY1NjaGVkdWxlciB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyB0aW1lciB9IGZyb20gJy4vdGltZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGludGVydmFsKHBlcmlvZCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHBlcmlvZCA9PT0gdm9pZCAwKSB7IHBlcmlvZCA9IDA7IH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7IH1cbiAgICBpZiAocGVyaW9kIDwgMCkge1xuICAgICAgICBwZXJpb2QgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gdGltZXIocGVyaW9kLCBwZXJpb2QsIHNjaGVkdWxlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbnRlcnZhbC5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBhcmdzT3JBcmdBcnJheSB9IGZyb20gJy4uL3V0aWwvYXJnc09yQXJnQXJyYXknO1xuaW1wb3J0IHsgT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dCgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIG5leHRTb3VyY2VzID0gYXJnc09yQXJnQXJyYXkoc291cmNlcyk7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzb3VyY2VJbmRleCA9IDA7XG4gICAgICAgIHZhciBzdWJzY3JpYmVOZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHNvdXJjZUluZGV4IDwgbmV4dFNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHRTb3VyY2UgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dFNvdXJjZSA9IGlubmVyRnJvbShuZXh0U291cmNlc1tzb3VyY2VJbmRleCsrXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlTmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBpbm5lclN1YnNjcmliZXIgPSBuZXcgT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHVuZGVmaW5lZCwgbm9vcCwgbm9vcCk7XG4gICAgICAgICAgICAgICAgbmV4dFNvdXJjZS5zdWJzY3JpYmUoaW5uZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmliZXIuYWRkKHN1YnNjcmliZU5leHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzdWJzY3JpYmVOZXh0KCk7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1vbkVycm9yUmVzdW1lTmV4dC5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBhcmdzT3JBcmdBcnJheSB9IGZyb20gJy4uL3V0aWwvYXJnc09yQXJnQXJyYXknO1xuaW1wb3J0IHsgY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gcmFjZSgpIHtcbiAgICB2YXIgc291cmNlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIHNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgc291cmNlcyA9IGFyZ3NPckFyZ0FycmF5KHNvdXJjZXMpO1xuICAgIHJldHVybiBzb3VyY2VzLmxlbmd0aCA9PT0gMSA/IGlubmVyRnJvbShzb3VyY2VzWzBdKSA6IG5ldyBPYnNlcnZhYmxlKHJhY2VJbml0KHNvdXJjZXMpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByYWNlSW5pdChzb3VyY2VzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMucHVzaChpbm5lckZyb20oc291cmNlc1tpXSkuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBzID0gMDsgcyA8IHN1YnNjcmlwdGlvbnMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgIT09IGkgJiYgc3Vic2NyaXB0aW9uc1tzXS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfSkpKTtcbiAgICAgICAgfTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IHN1YnNjcmlwdGlvbnMgJiYgIXN1YnNjcmliZXIuY2xvc2VkICYmIGkgPCBzb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBfbG9vcF8xKGkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhY2UuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBjb21iaW5lTGF0ZXN0SW5pdCB9IGZyb20gJy4uL29ic2VydmFibGUvY29tYmluZUxhdGVzdCc7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGFyZ3NPckFyZ0FycmF5IH0gZnJvbSAnLi4vdXRpbC9hcmdzT3JBcmdBcnJheSc7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IHBpcGUgfSBmcm9tICcuLi91dGlsL3BpcGUnO1xuaW1wb3J0IHsgcG9wUmVzdWx0U2VsZWN0b3IgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHJldHVybiByZXN1bHRTZWxlY3RvclxuICAgICAgICA/IHBpcGUoY29tYmluZUxhdGVzdC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpLCBtYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSlcbiAgICAgICAgOiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIGNvbWJpbmVMYXRlc3RJbml0KF9fc3ByZWFkQXJyYXkoW3NvdXJjZV0sIF9fcmVhZChhcmdzT3JBcmdBcnJheShhcmdzKSkpKShzdWJzY3JpYmVyKTtcbiAgICAgICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5pbXBvcnQgeyBjb25jYXRBbGwgfSBmcm9tICcuL2NvbmNhdEFsbCc7XG5pbXBvcnQgeyBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvZnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpO1xuICAgIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uIChzb3VyY2UsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgY29uY2F0QWxsKCkoZnJvbShfX3NwcmVhZEFycmF5KFtzb3VyY2VdLCBfX3JlYWQoYXJncykpLCBzY2hlZHVsZXIpKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBvcGVyYXRlIH0gZnJvbSAnLi4vdXRpbC9saWZ0JztcbmltcG9ydCB7IGFyZ3NPckFyZ0FycmF5IH0gZnJvbSAnLi4vdXRpbC9hcmdzT3JBcmdBcnJheSc7XG5pbXBvcnQgeyBtZXJnZUFsbCB9IGZyb20gJy4vbWVyZ2VBbGwnO1xuaW1wb3J0IHsgcG9wTnVtYmVyLCBwb3BTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2FyZ3MnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvZnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBwb3BTY2hlZHVsZXIoYXJncyk7XG4gICAgdmFyIGNvbmN1cnJlbnQgPSBwb3BOdW1iZXIoYXJncywgSW5maW5pdHkpO1xuICAgIGFyZ3MgPSBhcmdzT3JBcmdBcnJheShhcmdzKTtcbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIG1lcmdlQWxsKGNvbmN1cnJlbnQpKGZyb20oX19zcHJlYWRBcnJheShbc291cmNlXSwgX19yZWFkKGFyZ3MpKSwgc2NoZWR1bGVyKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2UuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkLCBfX3NwcmVhZEFycmF5IH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB6aXAgYXMgemlwU3RhdGljIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS96aXAnO1xuaW1wb3J0IHsgb3BlcmF0ZSB9IGZyb20gJy4uL3V0aWwvbGlmdCc7XG5leHBvcnQgZnVuY3Rpb24gemlwKCkge1xuICAgIHZhciBzb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgc291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbiAoc291cmNlLCBzdWJzY3JpYmVyKSB7XG4gICAgICAgIHppcFN0YXRpYy5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW3NvdXJjZV0sIF9fcmVhZChzb3VyY2VzKSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcC5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoIWlucHV0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSXRlcmFibGUgY2Fubm90IGJlIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBpdGVyYXRvciA9IGlucHV0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuICAgICAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGl0ZXJhdG9yLm5leHQoKS50aGVuKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgMCwgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzLm1hcCIsImltcG9ydCB7IHNjaGVkdWxlT2JzZXJ2YWJsZSB9IGZyb20gJy4vc2NoZWR1bGVPYnNlcnZhYmxlJztcbmltcG9ydCB7IHNjaGVkdWxlUHJvbWlzZSB9IGZyb20gJy4vc2NoZWR1bGVQcm9taXNlJztcbmltcG9ydCB7IHNjaGVkdWxlQXJyYXkgfSBmcm9tICcuL3NjaGVkdWxlQXJyYXknO1xuaW1wb3J0IHsgc2NoZWR1bGVJdGVyYWJsZSB9IGZyb20gJy4vc2NoZWR1bGVJdGVyYWJsZSc7XG5pbXBvcnQgeyBzY2hlZHVsZUFzeW5jSXRlcmFibGUgfSBmcm9tICcuL3NjaGVkdWxlQXN5bmNJdGVyYWJsZSc7XG5pbXBvcnQgeyBpc0ludGVyb3BPYnNlcnZhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4uL3V0aWwvaXNQcm9taXNlJztcbmltcG9ydCB7IGlzQXJyYXlMaWtlIH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5TGlrZSc7XG5pbXBvcnQgeyBpc0l0ZXJhYmxlIH0gZnJvbSAnLi4vdXRpbC9pc0l0ZXJhYmxlJztcbmltcG9ydCB7IGlzQXN5bmNJdGVyYWJsZSB9IGZyb20gJy4uL3V0aWwvaXNBc3luY0l0ZXJhYmxlJztcbmltcG9ydCB7IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yIH0gZnJvbSAnLi4vdXRpbC90aHJvd1Vub2JzZXJ2YWJsZUVycm9yJztcbmltcG9ydCB7IGlzUmVhZGFibGVTdHJlYW1MaWtlIH0gZnJvbSAnLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZSc7XG5pbXBvcnQgeyBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSB9IGZyb20gJy4vc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FzeW5jSXRlcmFibGUoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVBc3luY0l0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlZC5qcy5tYXAiLCJpbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBvYnNlcnZlT24gfSBmcm9tICcuLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uJztcbmltcG9ydCB7IHN1YnNjcmliZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL3N1YnNjcmliZU9uJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVPYnNlcnZhYmxlLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpID09PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5wdXRbaSsrXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlQXJyYXkuanMubWFwIiwiaW1wb3J0IHsgaW5uZXJGcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9pbm5lckZyb20nO1xuaW1wb3J0IHsgb2JzZXJ2ZU9uIH0gZnJvbSAnLi4vb3BlcmF0b3JzL29ic2VydmVPbic7XG5pbXBvcnQgeyBzdWJzY3JpYmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9zdWJzY3JpYmVPbic7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNjaGVkdWxlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgeyBzY2hlZHVsZUFzeW5jSXRlcmFibGUgfSBmcm9tICcuL3NjaGVkdWxlQXN5bmNJdGVyYWJsZSc7XG5pbXBvcnQgeyByZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yIH0gZnJvbSAnLi4vdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVSZWFkYWJsZVN0cmVhbUxpa2UoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBzY2hlZHVsZUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihpbnB1dCksIHNjaGVkdWxlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcy5tYXAiLCJpbXBvcnQgeyBjb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dFByb3ZpZGVyIH0gZnJvbSAnLi4vc2NoZWR1bGVyL3RpbWVvdXRQcm92aWRlcic7XG5leHBvcnQgZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7XG4gICAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb25VbmhhbmRsZWRFcnJvciA9IGNvbmZpZy5vblVuaGFuZGxlZEVycm9yO1xuICAgICAgICBpZiAob25VbmhhbmRsZWRFcnJvcikge1xuICAgICAgICAgICAgb25VbmhhbmRsZWRFcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZXBvcnRVbmhhbmRsZWRFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmV4cG9ydCB2YXIgdGltZW91dFByb3ZpZGVyID0ge1xuICAgIHNldFRpbWVvdXQ6IGZ1bmN0aW9uIChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgaWYgKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRUaW1lb3V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZGVsZWdhdGUuc2V0VGltZW91dC5hcHBseShkZWxlZ2F0ZSwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbaGFuZGxlciwgdGltZW91dF0sIF9fcmVhZChhcmdzKSkpO1xuICAgIH0sXG4gICAgY2xlYXJUaW1lb3V0OiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IHRpbWVvdXRQcm92aWRlci5kZWxlZ2F0ZTtcbiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lb3V0UHJvdmlkZXIuanMubWFwIiwiaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4uL3N5bWJvbC9vYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dFtTeW1ib2xfb2JzZXJ2YWJsZV0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNJbnRlcm9wT2JzZXJ2YWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSBcIi4vaXNGdW5jdGlvblwiO1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZS50aGVuKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi9pc0Z1bmN0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7XG4gICAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0FzeW5jSXRlcmFibGUuanMubWFwIiwiaW1wb3J0IHsgaXRlcmF0b3IgYXMgU3ltYm9sX2l0ZXJhdG9yIH0gZnJvbSAnLi4vc3ltYm9sL2l0ZXJhdG9yJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSXRlcmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbihpbnB1dCA9PT0gbnVsbCB8fCBpbnB1dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogaW5wdXRbU3ltYm9sX2l0ZXJhdG9yXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0l0ZXJhYmxlLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG5leHBvcnQgdmFyIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWl0ZXJhdG9yLmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCkge1xuICAgIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcgPyAnYW4gaW52YWxpZCBvYmplY3QnIDogXCInXCIgKyBpbnB1dCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dVbm9ic2VydmFibGVFcnJvci5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpdGVyYXRvciBhcyBTeW1ib2xfaXRlcmF0b3IgfSBmcm9tICcuLi9zeW1ib2wvaXRlcmF0b3InO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBleGVjdXRlU2NoZWR1bGUgfSBmcm9tICcuLi91dGlsL2V4ZWN1dGVTY2hlZHVsZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcjtcbiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnNjcmliZXIsIHNjaGVkdWxlciwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXRlcmF0b3IgPSBpbnB1dFtTeW1ib2xfaXRlcmF0b3JdKCk7XG4gICAgICAgICAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZTtcbiAgICAgICAgICAgICAgICB2YXIgZG9uZTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBpdGVyYXRvci5uZXh0KCksIHZhbHVlID0gX2EudmFsdWUsIGRvbmUgPSBfYS5kb25lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAwLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBpc0Z1bmN0aW9uKGl0ZXJhdG9yID09PSBudWxsIHx8IGl0ZXJhdG9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpdGVyYXRvci5yZXR1cm4pICYmIGl0ZXJhdG9yLnJldHVybigpOyB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVJdGVyYWJsZS5qcy5tYXAiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZSwgZ2V0S2V5cyA9IE9iamVjdC5rZXlzO1xuZXhwb3J0IGZ1bmN0aW9uIGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpIHtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgdmFyIGZpcnN0XzEgPSBhcmdzWzBdO1xuICAgICAgICBpZiAoaXNBcnJheShmaXJzdF8xKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgYXJnczogZmlyc3RfMSwga2V5czogbnVsbCB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1BPSk8oZmlyc3RfMSkpIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gZ2V0S2V5cyhmaXJzdF8xKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgYXJnczoga2V5cy5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZmlyc3RfMVtrZXldOyB9KSxcbiAgICAgICAgICAgICAgICBrZXlzOiBrZXlzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBhcmdzOiBhcmdzLCBrZXlzOiBudWxsIH07XG59XG5mdW5jdGlvbiBpc1BPSk8ob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBnZXRQcm90b3R5cGVPZihvYmopID09PSBvYmplY3RQcm90bztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFyZ3NBcmdBcnJheU9yT2JqZWN0LmpzLm1hcCIsImV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPYmplY3Qoa2V5cywgdmFsdWVzKSB7XG4gICAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSwgaSkgeyByZXR1cm4gKChyZXN1bHRba2V5XSA9IHZhbHVlc1tpXSksIHJlc3VsdCk7IH0sIHt9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNyZWF0ZU9iamVjdC5qcy5tYXAiLCJleHBvcnQgZnVuY3Rpb24gbm90KHByZWQsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkgeyByZXR1cm4gIXByZWQuY2FsbCh0aGlzQXJnLCB2YWx1ZSwgaW5kZXgpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcCIsImltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IHBpcGUgfSBmcm9tICcuLi91dGlsL3BpcGUnO1xuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL21lcmdlTWFwJztcbmltcG9ydCB7IHRvQXJyYXkgfSBmcm9tICcuL3RvQXJyYXknO1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5BbGxJbnRlcm5hbHMoam9pbkZuLCBwcm9qZWN0KSB7XG4gICAgcmV0dXJuIHBpcGUodG9BcnJheSgpLCBtZXJnZU1hcChmdW5jdGlvbiAoc291cmNlcykgeyByZXR1cm4gam9pbkZuKHNvdXJjZXMpOyB9KSwgcHJvamVjdCA/IG1hcE9uZU9yTWFueUFyZ3MocHJvamVjdCkgOiBpZGVudGl0eSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1qb2luQWxsSW50ZXJuYWxzLmpzLm1hcCIsImltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4vT3BlcmF0b3JTdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBzY2FuSW50ZXJuYWxzKGFjY3VtdWxhdG9yLCBzZWVkLCBoYXNTZWVkLCBlbWl0T25OZXh0LCBlbWl0QmVmb3JlQ29tcGxldGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSwgc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFzU3RhdGUgPSBoYXNTZWVkO1xuICAgICAgICB2YXIgc3RhdGUgPSBzZWVkO1xuICAgICAgICB2YXIgaW5kZXggPSAwO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBpID0gaW5kZXgrKztcbiAgICAgICAgICAgIHN0YXRlID0gaGFzU3RhdGVcbiAgICAgICAgICAgICAgICA/XG4gICAgICAgICAgICAgICAgICAgIGFjY3VtdWxhdG9yKHN0YXRlLCB2YWx1ZSwgaSlcbiAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICgoaGFzU3RhdGUgPSB0cnVlKSwgdmFsdWUpO1xuICAgICAgICAgICAgZW1pdE9uTmV4dCAmJiBzdWJzY3JpYmVyLm5leHQoc3RhdGUpO1xuICAgICAgICB9LCBlbWl0QmVmb3JlQ29tcGxldGUgJiZcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaGFzU3RhdGUgJiYgc3Vic2NyaWJlci5uZXh0KHN0YXRlKTtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KSkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2FuSW50ZXJuYWxzLmpzLm1hcCIsInZhciBnO1xuXG4vLyBUaGlzIHdvcmtzIGluIG5vbi1zdHJpY3QgbW9kZVxuZyA9IChmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59KSgpO1xuXG50cnkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIGV2YWwgaXMgYWxsb3dlZCAoc2VlIENTUClcblx0ZyA9IGcgfHwgbmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcbn0gY2F0Y2ggKGUpIHtcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcblx0aWYgKHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIpIGcgPSB3aW5kb3c7XG59XG5cbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cbi8vIFdlIHJldHVybiB1bmRlZmluZWQsIGluc3RlYWQgb2Ygbm90aGluZyBoZXJlLCBzbyBpdCdzXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XG5cbm1vZHVsZS5leHBvcnRzID0gZztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBNYXA7XG4iLCJ2YXIgbWFwQ2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX21hcENhY2hlQ2xlYXInKSxcbiAgICBtYXBDYWNoZURlbGV0ZSA9IHJlcXVpcmUoJy4vX21hcENhY2hlRGVsZXRlJyksXG4gICAgbWFwQ2FjaGVHZXQgPSByZXF1aXJlKCcuL19tYXBDYWNoZUdldCcpLFxuICAgIG1hcENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVIYXMnKSxcbiAgICBtYXBDYWNoZVNldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG1hcCBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBNYXBDYWNoZShlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBNYXBDYWNoZWAuXG5NYXBDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBtYXBDYWNoZUNsZWFyO1xuTWFwQ2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IG1hcENhY2hlRGVsZXRlO1xuTWFwQ2FjaGUucHJvdG90eXBlLmdldCA9IG1hcENhY2hlR2V0O1xuTWFwQ2FjaGUucHJvdG90eXBlLmhhcyA9IG1hcENhY2hlSGFzO1xuTWFwQ2FjaGUucHJvdG90eXBlLnNldCA9IG1hcENhY2hlU2V0O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcENhY2hlO1xuIiwidmFyIGFycmF5TGlrZUtleXMgPSByZXF1aXJlKCcuL19hcnJheUxpa2VLZXlzJyksXG4gICAgYmFzZUtleXMgPSByZXF1aXJlKCcuL19iYXNlS2V5cycpLFxuICAgIGlzQXJyYXlMaWtlID0gcmVxdWlyZSgnLi9pc0FycmF5TGlrZScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyYXkgb2YgdGhlIG93biBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIGBvYmplY3RgLlxuICpcbiAqICoqTm90ZToqKiBOb24tb2JqZWN0IHZhbHVlcyBhcmUgY29lcmNlZCB0byBvYmplY3RzLiBTZWUgdGhlXG4gKiBbRVMgc3BlY10oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LmtleXMpXG4gKiBmb3IgbW9yZSBkZXRhaWxzLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBzaW5jZSAwLjEuMFxuICogQG1lbWJlck9mIF9cbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcHJvcGVydHkgbmFtZXMuXG4gKiBAZXhhbXBsZVxuICpcbiAqIGZ1bmN0aW9uIEZvbygpIHtcbiAqICAgdGhpcy5hID0gMTtcbiAqICAgdGhpcy5iID0gMjtcbiAqIH1cbiAqXG4gKiBGb28ucHJvdG90eXBlLmMgPSAzO1xuICpcbiAqIF8ua2V5cyhuZXcgRm9vKTtcbiAqIC8vID0+IFsnYScsICdiJ10gKGl0ZXJhdGlvbiBvcmRlciBpcyBub3QgZ3VhcmFudGVlZClcbiAqXG4gKiBfLmtleXMoJ2hpJyk7XG4gKiAvLyA9PiBbJzAnLCAnMSddXG4gKi9cbmZ1bmN0aW9uIGtleXMob2JqZWN0KSB7XG4gIHJldHVybiBpc0FycmF5TGlrZShvYmplY3QpID8gYXJyYXlMaWtlS2V5cyhvYmplY3QpIDogYmFzZUtleXMob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBrZXlzO1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGxlbmd0aC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0xlbmd0aGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXRvbGVuZ3RoKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGxlbmd0aCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzTGVuZ3RoKDMpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNMZW5ndGgoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoSW5maW5pdHkpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmlzTGVuZ3RoKCczJyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09ICdudW1iZXInICYmXG4gICAgdmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8PSBNQVhfU0FGRV9JTlRFR0VSO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzTGVuZ3RoO1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc1N5bWJvbCA9IHJlcXVpcmUoJy4vaXNTeW1ib2wnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggcHJvcGVydHkgbmFtZXMgd2l0aGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHJlSXNEZWVwUHJvcCA9IC9cXC58XFxbKD86W15bXFxdXSp8KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSo/XFwxKVxcXS8sXG4gICAgcmVJc1BsYWluUHJvcCA9IC9eXFx3KiQvO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgcHJvcGVydHkgbmFtZSBhbmQgbm90IGEgcHJvcGVydHkgcGF0aC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeSBrZXlzIG9uLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzS2V5KHZhbHVlLCBvYmplY3QpIHtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBpZiAodHlwZSA9PSAnbnVtYmVyJyB8fCB0eXBlID09ICdzeW1ib2wnIHx8IHR5cGUgPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICB2YWx1ZSA9PSBudWxsIHx8IGlzU3ltYm9sKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiByZUlzUGxhaW5Qcm9wLnRlc3QodmFsdWUpIHx8ICFyZUlzRGVlcFByb3AudGVzdCh2YWx1ZSkgfHxcbiAgICAob2JqZWN0ICE9IG51bGwgJiYgdmFsdWUgaW4gT2JqZWN0KG9iamVjdCkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzS2V5O1xuIiwiY2xhc3MgQmFzZVBhZ2Uge1xuXG4gIHRlbXBsYXRlO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzID0ge30pIHtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgdGhpc1trZXldID0gcHJvcHNba2V5XTtcbiAgICB9KTtcbiAgICB0aGlzLndhdGNoRmFjZSA9IHByb3BzLndhdGNoRmFjZTtcbiAgfVxuXG4gIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZShsb2NhdGlvbilcbiAgfVxuXG4gIHBhZ2VXaWxsTG9hZCgpIHtcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoIXRoaXMudGVtcGxhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIlRlbXBsYXRlIG5vdCBkZWZpbmVkOiBEaWQgeW91IGZvcmdldCBgdGVtcGxhdGUgPSByZXF1aXJlKCdwYXRoL3RvL3RlbXBsYXRlLmhicycpO2A/XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMpKVxuXG4gICAgcmV0dXJuIHRoaXMudGVtcGxhdGUoY29udGV4dCk7XG4gIH1cblxuICBwYWdlRGlkTG9hZCgpIHtcbiAgfVxuXG4gIHJpZ2h0QnV0dG9uRXZlbnQoKSB7XG4gIH1cblxuICBsZWZ0QnV0dG9uRXZlbnQoKSB7XG4gIH1cblxuICB0b3BCdXR0b25FdmVudCgpIHtcbiAgfVxuXG4gIGJvdHRvbUJ1dHRvbkV2ZW50KCkge1xuICB9XG5cbiAgZmFjZUJ1dHRvbkV2ZW50KCkge1xuICB9XG5cbiAgLy8gZG91YmxlIGNsaWNrc1xuICByaWdodEJ1dHRvbkV2ZW50RG91YmxlQ2xpY2soKSB7XG4gIH1cblxuICBsZWZ0QnV0dG9uRXZlbnREb3VibGVDbGljaygpIHtcbiAgfVxuXG4gIHRvcEJ1dHRvbkV2ZW50RG91YmxlQ2xpY2soKSB7XG4gIH1cblxuICBib3R0b21CdXR0b25FdmVudERvdWJsZUNsaWNrKCkge1xuICB9XG5cbiAgZmFjZUJ1dHRvbkV2ZW50RG91YmxlQ2xpY2soKSB7XG4gIH1cblxuICAvLyBsb25nIGhvbGRcblxuICByaWdodEJ1dHRvbkV2ZW50SG9sZCgpIHtcbiAgfVxuXG4gIGxlZnRCdXR0b25FdmVudEhvbGQoKSB7XG4gIH1cblxuICB0b3BCdXR0b25FdmVudEhvbGQoKSB7XG4gIH1cblxuICBib3R0b21CdXR0b25FdmVudEhvbGQoKSB7XG4gIH1cblxuICBmYWNlQnV0dG9uRXZlbnRIb2xkKCkge1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYXNlUGFnZTtcbiIsImNvbnN0IEJhc2VQYWdlID0gcmVxdWlyZSgnLi9CYXNlUGFnZScpO1xuY29uc3QgTm90aWZpY2F0aW9uSHViID0gcmVxdWlyZSgnLi4vUHVibGljTm90aWZpY2F0aW9uSHViJyk7XG5cbmNsYXNzIEJhc2VOb3RpZmljYXRpb24gZXh0ZW5kcyBCYXNlUGFnZSB7XG4gIHRlbXBsYXRlID0gcmVxdWlyZSgnLi4vdGVtcGxhdGVzL2Jhc2VOb3RpZmljYXRpb24uaGJzJylcbiAgXG4gIGxlZnRCdXR0b25FdmVudCgpIHtcbiAgICBOb3RpZmljYXRpb25IdWIuaGlkZSgpO1xuICB9XG4gIHJpZ2h0QnV0dG9uRXZlbnQoKSB7XG4gICAgTm90aWZpY2F0aW9uSHViLmhpZGUoKTtcbiAgfVxuICB0b3BCdXR0b25FdmVudCgpIHtcbiAgICBOb3RpZmljYXRpb25IdWIuaGlkZSgpO1xuICB9XG4gIGJvdHRvbUJ1dHRvbkV2ZW50KCkge1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5oaWRlKCk7XG4gIH1cbiAgZmFjZUJ1dHRvbkV2ZW50KCkge1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5oaWRlKCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYXNlTm90aWZpY2F0aW9uO1xuIiwiY29uc3QgTm90aWZpY2F0aW9uSHViID0gcmVxdWlyZSgnLi9zcmMvTm90aWZpY2F0aW9uSHViJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzaG93OiBOb3RpZmljYXRpb25IdWIuc2hvdyxcbiAgaGlkZTogTm90aWZpY2F0aW9uSHViLmhpZGUsXG59XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLkhhbmRsZWJhcnNFbnZpcm9ubWVudCA9IEhhbmRsZWJhcnNFbnZpcm9ubWVudDtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIF9leGNlcHRpb24gPSByZXF1aXJlKCcuL2V4Y2VwdGlvbicpO1xuXG52YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuXG52YXIgX2hlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcblxudmFyIF9kZWNvcmF0b3JzID0gcmVxdWlyZSgnLi9kZWNvcmF0b3JzJyk7XG5cbnZhciBfbG9nZ2VyID0gcmVxdWlyZSgnLi9sb2dnZXInKTtcblxudmFyIF9sb2dnZXIyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfbG9nZ2VyKTtcblxudmFyIF9pbnRlcm5hbFByb3RvQWNjZXNzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnKTtcblxudmFyIFZFUlNJT04gPSAnNC43LjcnO1xuZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcbnZhciBDT01QSUxFUl9SRVZJU0lPTiA9IDg7XG5leHBvcnRzLkNPTVBJTEVSX1JFVklTSU9OID0gQ09NUElMRVJfUkVWSVNJT047XG52YXIgTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OID0gNztcblxuZXhwb3J0cy5MQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gPSBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT047XG52YXIgUkVWSVNJT05fQ0hBTkdFUyA9IHtcbiAgMTogJzw9IDEuMC5yYy4yJywgLy8gMS4wLnJjLjIgaXMgYWN0dWFsbHkgcmV2MiBidXQgZG9lc24ndCByZXBvcnQgaXRcbiAgMjogJz09IDEuMC4wLXJjLjMnLFxuICAzOiAnPT0gMS4wLjAtcmMuNCcsXG4gIDQ6ICc9PSAxLngueCcsXG4gIDU6ICc9PSAyLjAuMC1hbHBoYS54JyxcbiAgNjogJz49IDIuMC4wLWJldGEuMScsXG4gIDc6ICc+PSA0LjAuMCA8NC4zLjAnLFxuICA4OiAnPj0gNC4zLjAnXG59O1xuXG5leHBvcnRzLlJFVklTSU9OX0NIQU5HRVMgPSBSRVZJU0lPTl9DSEFOR0VTO1xudmFyIG9iamVjdFR5cGUgPSAnW29iamVjdCBPYmplY3RdJztcblxuZnVuY3Rpb24gSGFuZGxlYmFyc0Vudmlyb25tZW50KGhlbHBlcnMsIHBhcnRpYWxzLCBkZWNvcmF0b3JzKSB7XG4gIHRoaXMuaGVscGVycyA9IGhlbHBlcnMgfHwge307XG4gIHRoaXMucGFydGlhbHMgPSBwYXJ0aWFscyB8fCB7fTtcbiAgdGhpcy5kZWNvcmF0b3JzID0gZGVjb3JhdG9ycyB8fCB7fTtcblxuICBfaGVscGVycy5yZWdpc3RlckRlZmF1bHRIZWxwZXJzKHRoaXMpO1xuICBfZGVjb3JhdG9ycy5yZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzKHRoaXMpO1xufVxuXG5IYW5kbGViYXJzRW52aXJvbm1lbnQucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogSGFuZGxlYmFyc0Vudmlyb25tZW50LFxuXG4gIGxvZ2dlcjogX2xvZ2dlcjJbJ2RlZmF1bHQnXSxcbiAgbG9nOiBfbG9nZ2VyMlsnZGVmYXVsdCddLmxvZyxcblxuICByZWdpc3RlckhlbHBlcjogZnVuY3Rpb24gcmVnaXN0ZXJIZWxwZXIobmFtZSwgZm4pIHtcbiAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnQXJnIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBoZWxwZXJzJyk7XG4gICAgICB9XG4gICAgICBfdXRpbHMuZXh0ZW5kKHRoaXMuaGVscGVycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVscGVyc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckhlbHBlcjogZnVuY3Rpb24gdW5yZWdpc3RlckhlbHBlcihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuaGVscGVyc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uIHJlZ2lzdGVyUGFydGlhbChuYW1lLCBwYXJ0aWFsKSB7XG4gICAgaWYgKF91dGlscy50b1N0cmluZy5jYWxsKG5hbWUpID09PSBvYmplY3RUeXBlKSB7XG4gICAgICBfdXRpbHMuZXh0ZW5kKHRoaXMucGFydGlhbHMsIG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdBdHRlbXB0aW5nIHRvIHJlZ2lzdGVyIGEgcGFydGlhbCBjYWxsZWQgXCInICsgbmFtZSArICdcIiBhcyB1bmRlZmluZWQnKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFydGlhbHNbbmFtZV0gPSBwYXJ0aWFsO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlclBhcnRpYWw6IGZ1bmN0aW9uIHVucmVnaXN0ZXJQYXJ0aWFsKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5wYXJ0aWFsc1tuYW1lXTtcbiAgfSxcblxuICByZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24gcmVnaXN0ZXJEZWNvcmF0b3IobmFtZSwgZm4pIHtcbiAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIGlmIChmbikge1xuICAgICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnQXJnIG5vdCBzdXBwb3J0ZWQgd2l0aCBtdWx0aXBsZSBkZWNvcmF0b3JzJyk7XG4gICAgICB9XG4gICAgICBfdXRpbHMuZXh0ZW5kKHRoaXMuZGVjb3JhdG9ycywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVjb3JhdG9yc1tuYW1lXSA9IGZuO1xuICAgIH1cbiAgfSxcbiAgdW5yZWdpc3RlckRlY29yYXRvcjogZnVuY3Rpb24gdW5yZWdpc3RlckRlY29yYXRvcihuYW1lKSB7XG4gICAgZGVsZXRlIHRoaXMuZGVjb3JhdG9yc1tuYW1lXTtcbiAgfSxcbiAgLyoqXG4gICAqIFJlc2V0IHRoZSBtZW1vcnkgb2YgaWxsZWdhbCBwcm9wZXJ0eSBhY2Nlc3NlcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGxvZ2dlZC5cbiAgICogQGRlcHJlY2F0ZWQgc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBoYW5kbGViYXJzIHRlc3QtY2FzZXNcbiAgICovXG4gIHJlc2V0TG9nZ2VkUHJvcGVydHlBY2Nlc3NlczogZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0eUFjY2Vzc2VzKCkge1xuICAgIF9pbnRlcm5hbFByb3RvQWNjZXNzLnJlc2V0TG9nZ2VkUHJvcGVydGllcygpO1xuICB9XG59O1xuXG52YXIgbG9nID0gX2xvZ2dlcjJbJ2RlZmF1bHQnXS5sb2c7XG5cbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5jcmVhdGVGcmFtZSA9IF91dGlscy5jcmVhdGVGcmFtZTtcbmV4cG9ydHMubG9nZ2VyID0gX2xvZ2dlcjJbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJKaGMyVXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdjVUpCUVRoRExGTkJRVk03TzNsQ1FVTnFReXhoUVVGaE96czdPM1ZDUVVOSkxGZEJRVmM3T3pCQ1FVTlNMR05CUVdNN08zTkNRVU55UXl4VlFVRlZPenM3TzIxRFFVTlRMSGxDUVVGNVFqczdRVUZGZUVRc1NVRkJUU3hQUVVGUExFZEJRVWNzVDBGQlR5eERRVUZET3p0QlFVTjRRaXhKUVVGTkxHbENRVUZwUWl4SFFVRkhMRU5CUVVNc1EwRkJRenM3UVVGRE5VSXNTVUZCVFN4cFEwRkJhVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdPenRCUVVVMVF5eEpRVUZOTEdkQ1FVRm5RaXhIUVVGSE8wRkJRemxDTEVkQlFVTXNSVUZCUlN4aFFVRmhPMEZCUTJoQ0xFZEJRVU1zUlVGQlJTeGxRVUZsTzBGQlEyeENMRWRCUVVNc1JVRkJSU3hsUVVGbE8wRkJRMnhDTEVkQlFVTXNSVUZCUlN4VlFVRlZPMEZCUTJJc1IwRkJReXhGUVVGRkxHdENRVUZyUWp0QlFVTnlRaXhIUVVGRExFVkJRVVVzYVVKQlFXbENPMEZCUTNCQ0xFZEJRVU1zUlVGQlJTeHBRa0ZCYVVJN1FVRkRjRUlzUjBGQlF5eEZRVUZGTEZWQlFWVTdRMEZEWkN4RFFVRkRPenM3UVVGRlJpeEpRVUZOTEZWQlFWVXNSMEZCUnl4cFFrRkJhVUlzUTBGQlF6czdRVUZGT1VJc1UwRkJVeXh4UWtGQmNVSXNRMEZCUXl4UFFVRlBMRVZCUVVVc1VVRkJVU3hGUVVGRkxGVkJRVlVzUlVGQlJUdEJRVU51UlN4TlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFOUJRVThzU1VGQlNTeEZRVUZGTEVOQlFVTTdRVUZETjBJc1RVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eFJRVUZSTEVsQlFVa3NSVUZCUlN4RFFVRkRPMEZCUXk5Q0xFMUJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NWVUZCVlN4SlFVRkpMRVZCUVVVc1EwRkJRenM3UVVGRmJrTXNhME5CUVhWQ0xFbEJRVWtzUTBGQlF5eERRVUZETzBGQlF6ZENMSGREUVVFd1FpeEpRVUZKTEVOQlFVTXNRMEZCUXp0RFFVTnFRenM3UVVGRlJDeHhRa0ZCY1VJc1EwRkJReXhUUVVGVExFZEJRVWM3UVVGRGFFTXNZVUZCVnl4RlFVRkZMSEZDUVVGeFFqczdRVUZGYkVNc1VVRkJUU3h4UWtGQlVUdEJRVU5rTEV0QlFVY3NSVUZCUlN4dlFrRkJUeXhIUVVGSE96dEJRVVZtTEdkQ1FVRmpMRVZCUVVVc2QwSkJRVk1zU1VGQlNTeEZRVUZGTEVWQlFVVXNSVUZCUlR0QlFVTnFReXhSUVVGSkxHZENRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhWUVVGVkxFVkJRVVU3UVVGRGRFTXNWVUZCU1N4RlFVRkZMRVZCUVVVN1FVRkRUaXhqUVVGTkxESkNRVUZqTEhsRFFVRjVReXhEUVVGRExFTkJRVU03VDBGRGFFVTdRVUZEUkN4dlFrRkJUeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUXpWQ0xFMUJRVTA3UVVGRFRDeFZRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dExRVU42UWp0SFFVTkdPMEZCUTBRc2EwSkJRV2RDTEVWQlFVVXNNRUpCUVZNc1NVRkJTU3hGUVVGRk8wRkJReTlDTEZkQlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEhRVU16UWpzN1FVRkZSQ3hwUWtGQlpTeEZRVUZGTEhsQ1FVRlRMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVU3UVVGRGRrTXNVVUZCU1N4blFrRkJVeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NWVUZCVlN4RlFVRkZPMEZCUTNSRExHOUNRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE4wSXNUVUZCVFR0QlFVTk1MRlZCUVVrc1QwRkJUeXhQUVVGUExFdEJRVXNzVjBGQlZ5eEZRVUZGTzBGQlEyeERMR05CUVUwc2VVVkJRM2RETEVsQlFVa3NiMEpCUTJwRUxFTkJRVU03VDBGRFNEdEJRVU5FTEZWQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETzB0QlF5OUNPMGRCUTBZN1FVRkRSQ3h0UWtGQmFVSXNSVUZCUlN3eVFrRkJVeXhKUVVGSkxFVkJRVVU3UVVGRGFFTXNWMEZCVHl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzBkQlF6VkNPenRCUVVWRUxHMUNRVUZwUWl4RlFVRkZMREpDUVVGVExFbEJRVWtzUlVGQlJTeEZRVUZGTEVWQlFVVTdRVUZEY0VNc1VVRkJTU3huUWtGQlV5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8wRkJRM1JETEZWQlFVa3NSVUZCUlN4RlFVRkZPMEZCUTA0c1kwRkJUU3d5UWtGQll5dzBRMEZCTkVNc1EwRkJReXhEUVVGRE8wOUJRMjVGTzBGQlEwUXNiMEpCUVU4c1NVRkJTU3hEUVVGRExGVkJRVlVzUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0TFFVTXZRaXhOUVVGTk8wRkJRMHdzVlVGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03UzBGRE5VSTdSMEZEUmp0QlFVTkVMSEZDUVVGdFFpeEZRVUZGTERaQ1FVRlRMRWxCUVVrc1JVRkJSVHRCUVVOc1F5eFhRVUZQTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UjBGRE9VSTdPenM3TzBGQlMwUXNOa0pCUVRKQ0xFVkJRVUVzZFVOQlFVYzdRVUZETlVJc1owUkJRWFZDTEVOQlFVTTdSMEZEZWtJN1EwRkRSaXhEUVVGRE96dEJRVVZMTEVsQlFVa3NSMEZCUnl4SFFVRkhMRzlDUVVGUExFZEJRVWNzUTBGQlF6czdPMUZCUlc1Q0xGZEJRVmM3VVVGQlJTeE5RVUZOSWl3aVptbHNaU0k2SW1KaGMyVXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCamNtVmhkR1ZHY21GdFpTd2daWGgwWlc1a0xDQjBiMU4wY21sdVp5QjlJR1p5YjIwZ0p5NHZkWFJwYkhNbk8xeHVhVzF3YjNKMElFVjRZMlZ3ZEdsdmJpQm1jbTl0SUNjdUwyVjRZMlZ3ZEdsdmJpYzdYRzVwYlhCdmNuUWdleUJ5WldkcGMzUmxja1JsWm1GMWJIUklaV3h3WlhKeklIMGdabkp2YlNBbkxpOW9aV3h3WlhKekp6dGNibWx0Y0c5eWRDQjdJSEpsWjJsemRHVnlSR1ZtWVhWc2RFUmxZMjl5WVhSdmNuTWdmU0JtY205dElDY3VMMlJsWTI5eVlYUnZjbk1uTzF4dWFXMXdiM0owSUd4dloyZGxjaUJtY205dElDY3VMMnh2WjJkbGNpYzdYRzVwYlhCdmNuUWdleUJ5WlhObGRFeHZaMmRsWkZCeWIzQmxjblJwWlhNZ2ZTQm1jbTl0SUNjdUwybHVkR1Z5Ym1Gc0wzQnliM1J2TFdGalkyVnpjeWM3WEc1Y2JtVjRjRzl5ZENCamIyNXpkQ0JXUlZKVFNVOU9JRDBnSnpRdU55NDNKenRjYm1WNGNHOXlkQ0JqYjI1emRDQkRUMDFRU1V4RlVsOVNSVlpKVTBsUFRpQTlJRGc3WEc1bGVIQnZjblFnWTI5dWMzUWdURUZUVkY5RFQwMVFRVlJKUWt4RlgwTlBUVkJKVEVWU1gxSkZWa2xUU1U5T0lEMGdOenRjYmx4dVpYaHdiM0owSUdOdmJuTjBJRkpGVmtsVFNVOU9YME5JUVU1SFJWTWdQU0I3WEc0Z0lERTZJQ2M4UFNBeExqQXVjbU11TWljc0lDOHZJREV1TUM1eVl5NHlJR2x6SUdGamRIVmhiR3g1SUhKbGRqSWdZblYwSUdSdlpYTnVKM1FnY21Wd2IzSjBJR2wwWEc0Z0lESTZJQ2M5UFNBeExqQXVNQzF5WXk0ekp5eGNiaUFnTXpvZ0p6MDlJREV1TUM0d0xYSmpMalFuTEZ4dUlDQTBPaUFuUFQwZ01TNTRMbmduTEZ4dUlDQTFPaUFuUFQwZ01pNHdMakF0WVd4d2FHRXVlQ2NzWEc0Z0lEWTZJQ2MrUFNBeUxqQXVNQzFpWlhSaExqRW5MRnh1SUNBM09pQW5QajBnTkM0d0xqQWdQRFF1TXk0d0p5eGNiaUFnT0RvZ0p6NDlJRFF1TXk0d0oxeHVmVHRjYmx4dVkyOXVjM1FnYjJKcVpXTjBWSGx3WlNBOUlDZGJiMkpxWldOMElFOWlhbVZqZEYwbk8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdTR0Z1Wkd4bFltRnljMFZ1ZG1seWIyNXRaVzUwS0dobGJIQmxjbk1zSUhCaGNuUnBZV3h6TENCa1pXTnZjbUYwYjNKektTQjdYRzRnSUhSb2FYTXVhR1ZzY0dWeWN5QTlJR2hsYkhCbGNuTWdmSHdnZTMwN1hHNGdJSFJvYVhNdWNHRnlkR2xoYkhNZ1BTQndZWEowYVdGc2N5QjhmQ0I3ZlR0Y2JpQWdkR2hwY3k1a1pXTnZjbUYwYjNKeklEMGdaR1ZqYjNKaGRHOXljeUI4ZkNCN2ZUdGNibHh1SUNCeVpXZHBjM1JsY2tSbFptRjFiSFJJWld4d1pYSnpLSFJvYVhNcE8xeHVJQ0J5WldkcGMzUmxja1JsWm1GMWJIUkVaV052Y21GMGIzSnpLSFJvYVhNcE8xeHVmVnh1WEc1SVlXNWtiR1ZpWVhKelJXNTJhWEp2Ym0xbGJuUXVjSEp2ZEc5MGVYQmxJRDBnZTF4dUlDQmpiMjV6ZEhKMVkzUnZjam9nU0dGdVpHeGxZbUZ5YzBWdWRtbHliMjV0Wlc1MExGeHVYRzRnSUd4dloyZGxjam9nYkc5bloyVnlMRnh1SUNCc2IyYzZJR3h2WjJkbGNpNXNiMmNzWEc1Y2JpQWdjbVZuYVhOMFpYSklaV3h3WlhJNklHWjFibU4wYVc5dUtHNWhiV1VzSUdadUtTQjdYRzRnSUNBZ2FXWWdLSFJ2VTNSeWFXNW5MbU5oYkd3b2JtRnRaU2tnUFQwOUlHOWlhbVZqZEZSNWNHVXBJSHRjYmlBZ0lDQWdJR2xtSUNobWJpa2dlMXh1SUNBZ0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NkQmNtY2dibTkwSUhOMWNIQnZjblJsWkNCM2FYUm9JRzExYkhScGNHeGxJR2hsYkhCbGNuTW5LVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR1Y0ZEdWdVpDaDBhR2x6TG1obGJIQmxjbk1zSUc1aGJXVXBPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCMGFHbHpMbWhsYkhCbGNuTmJibUZ0WlYwZ1BTQm1ianRjYmlBZ0lDQjlYRzRnSUgwc1hHNGdJSFZ1Y21WbmFYTjBaWEpJWld4d1pYSTZJR1oxYm1OMGFXOXVLRzVoYldVcElIdGNiaUFnSUNCa1pXeGxkR1VnZEdocGN5NW9aV3h3WlhKelcyNWhiV1ZkTzF4dUlDQjlMRnh1WEc0Z0lISmxaMmx6ZEdWeVVHRnlkR2xoYkRvZ1puVnVZM1JwYjI0b2JtRnRaU3dnY0dGeWRHbGhiQ2tnZTF4dUlDQWdJR2xtSUNoMGIxTjBjbWx1Wnk1allXeHNLRzVoYldVcElEMDlQU0J2WW1wbFkzUlVlWEJsS1NCN1hHNGdJQ0FnSUNCbGVIUmxibVFvZEdocGN5NXdZWEowYVdGc2N5d2dibUZ0WlNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR2xtSUNoMGVYQmxiMllnY0dGeWRHbGhiQ0E5UFQwZ0ozVnVaR1ZtYVc1bFpDY3BJSHRjYmlBZ0lDQWdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmloY2JpQWdJQ0FnSUNBZ0lDQmdRWFIwWlcxd2RHbHVaeUIwYnlCeVpXZHBjM1JsY2lCaElIQmhjblJwWVd3Z1kyRnNiR1ZrSUZ3aUpIdHVZVzFsZlZ3aUlHRnpJSFZ1WkdWbWFXNWxaR0JjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUhSb2FYTXVjR0Z5ZEdsaGJITmJibUZ0WlYwZ1BTQndZWEowYVdGc08xeHVJQ0FnSUgxY2JpQWdmU3hjYmlBZ2RXNXlaV2RwYzNSbGNsQmhjblJwWVd3NklHWjFibU4wYVc5dUtHNWhiV1VwSUh0Y2JpQWdJQ0JrWld4bGRHVWdkR2hwY3k1d1lYSjBhV0ZzYzF0dVlXMWxYVHRjYmlBZ2ZTeGNibHh1SUNCeVpXZHBjM1JsY2tSbFkyOXlZWFJ2Y2pvZ1puVnVZM1JwYjI0b2JtRnRaU3dnWm00cElIdGNiaUFnSUNCcFppQW9kRzlUZEhKcGJtY3VZMkZzYkNodVlXMWxLU0E5UFQwZ2IySnFaV04wVkhsd1pTa2dlMXh1SUNBZ0lDQWdhV1lnS0dadUtTQjdYRzRnSUNBZ0lDQWdJSFJvY205M0lHNWxkeUJGZUdObGNIUnBiMjRvSjBGeVp5QnViM1FnYzNWd2NHOXlkR1ZrSUhkcGRHZ2diWFZzZEdsd2JHVWdaR1ZqYjNKaGRHOXljeWNwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnWlhoMFpXNWtLSFJvYVhNdVpHVmpiM0poZEc5eWN5d2dibUZ0WlNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvYVhNdVpHVmpiM0poZEc5eWMxdHVZVzFsWFNBOUlHWnVPMXh1SUNBZ0lIMWNiaUFnZlN4Y2JpQWdkVzV5WldkcGMzUmxja1JsWTI5eVlYUnZjam9nWm5WdVkzUnBiMjRvYm1GdFpTa2dlMXh1SUNBZ0lHUmxiR1YwWlNCMGFHbHpMbVJsWTI5eVlYUnZjbk5iYm1GdFpWMDdYRzRnSUgwc1hHNGdJQzhxS2x4dUlDQWdLaUJTWlhObGRDQjBhR1VnYldWdGIzSjVJRzltSUdsc2JHVm5ZV3dnY0hKdmNHVnlkSGtnWVdOalpYTnpaWE1nZEdoaGRDQm9ZWFpsSUdGc2NtVmhaSGtnWW1WbGJpQnNiMmRuWldRdVhHNGdJQ0FxSUVCa1pYQnlaV05oZEdWa0lITm9iM1ZzWkNCdmJteDVJR0psSUhWelpXUWdhVzRnYUdGdVpHeGxZbUZ5Y3lCMFpYTjBMV05oYzJWelhHNGdJQ0FxTDF4dUlDQnlaWE5sZEV4dloyZGxaRkJ5YjNCbGNuUjVRV05qWlhOelpYTW9LU0I3WEc0Z0lDQWdjbVZ6WlhSTWIyZG5aV1JRY205d1pYSjBhV1Z6S0NrN1hHNGdJSDFjYm4wN1hHNWNibVY0Y0c5eWRDQnNaWFFnYkc5bklEMGdiRzluWjJWeUxteHZaenRjYmx4dVpYaHdiM0owSUhzZ1kzSmxZWFJsUm5KaGJXVXNJR3h2WjJkbGNpQjlPMXh1SWwxOVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5yZWdpc3RlckRlZmF1bHRIZWxwZXJzID0gcmVnaXN0ZXJEZWZhdWx0SGVscGVycztcbmV4cG9ydHMubW92ZUhlbHBlclRvSG9va3MgPSBtb3ZlSGVscGVyVG9Ib29rcztcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nID0gcmVxdWlyZSgnLi9oZWxwZXJzL2Jsb2NrLWhlbHBlci1taXNzaW5nJyk7XG5cbnZhciBfaGVscGVyc0Jsb2NrSGVscGVyTWlzc2luZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nKTtcblxudmFyIF9oZWxwZXJzRWFjaCA9IHJlcXVpcmUoJy4vaGVscGVycy9lYWNoJyk7XG5cbnZhciBfaGVscGVyc0VhY2gyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc0VhY2gpO1xuXG52YXIgX2hlbHBlcnNIZWxwZXJNaXNzaW5nID0gcmVxdWlyZSgnLi9oZWxwZXJzL2hlbHBlci1taXNzaW5nJyk7XG5cbnZhciBfaGVscGVyc0hlbHBlck1pc3NpbmcyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc0hlbHBlck1pc3NpbmcpO1xuXG52YXIgX2hlbHBlcnNJZiA9IHJlcXVpcmUoJy4vaGVscGVycy9pZicpO1xuXG52YXIgX2hlbHBlcnNJZjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzSWYpO1xuXG52YXIgX2hlbHBlcnNMb2cgPSByZXF1aXJlKCcuL2hlbHBlcnMvbG9nJyk7XG5cbnZhciBfaGVscGVyc0xvZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzTG9nKTtcblxudmFyIF9oZWxwZXJzTG9va3VwID0gcmVxdWlyZSgnLi9oZWxwZXJzL2xvb2t1cCcpO1xuXG52YXIgX2hlbHBlcnNMb29rdXAyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc0xvb2t1cCk7XG5cbnZhciBfaGVscGVyc1dpdGggPSByZXF1aXJlKCcuL2hlbHBlcnMvd2l0aCcpO1xuXG52YXIgX2hlbHBlcnNXaXRoMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNXaXRoKTtcblxuZnVuY3Rpb24gcmVnaXN0ZXJEZWZhdWx0SGVscGVycyhpbnN0YW5jZSkge1xuICBfaGVscGVyc0Jsb2NrSGVscGVyTWlzc2luZzJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7XG4gIF9oZWxwZXJzRWFjaDJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7XG4gIF9oZWxwZXJzSGVscGVyTWlzc2luZzJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7XG4gIF9oZWxwZXJzSWYyWydkZWZhdWx0J10oaW5zdGFuY2UpO1xuICBfaGVscGVyc0xvZzJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7XG4gIF9oZWxwZXJzTG9va3VwMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNXaXRoMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbn1cblxuZnVuY3Rpb24gbW92ZUhlbHBlclRvSG9va3MoaW5zdGFuY2UsIGhlbHBlck5hbWUsIGtlZXBIZWxwZXIpIHtcbiAgaWYgKGluc3RhbmNlLmhlbHBlcnNbaGVscGVyTmFtZV0pIHtcbiAgICBpbnN0YW5jZS5ob29rc1toZWxwZXJOYW1lXSA9IGluc3RhbmNlLmhlbHBlcnNbaGVscGVyTmFtZV07XG4gICAgaWYgKCFrZWVwSGVscGVyKSB7XG4gICAgICBkZWxldGUgaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICB9XG4gIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJobGJIQmxjbk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3TzNsRFFVRjFReXhuUTBGQlowTTdPenM3TWtKQlF6bERMR2RDUVVGblFqczdPenR2UTBGRFVDd3dRa0ZCTUVJN096czdlVUpCUTNKRExHTkJRV003T3pzN01FSkJRMklzWlVGQlpUczdPenMyUWtGRFdpeHJRa0ZCYTBJN096czdNa0pCUTNCQ0xHZENRVUZuUWpzN096dEJRVVZzUXl4VFFVRlRMSE5DUVVGelFpeERRVUZETEZGQlFWRXNSVUZCUlR0QlFVTXZReXg1UTBGQk1rSXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkRja01zTWtKQlFXRXNVVUZCVVN4RFFVRkRMRU5CUVVNN1FVRkRka0lzYjBOQlFYTkNMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRMmhETEhsQ1FVRlhMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRM0pDTERCQ1FVRlpMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRM1JDTERaQ1FVRmxMRkZCUVZFc1EwRkJReXhEUVVGRE8wRkJRM3BDTERKQ1FVRmhMRkZCUVZFc1EwRkJReXhEUVVGRE8wTkJRM2hDT3p0QlFVVk5MRk5CUVZNc2FVSkJRV2xDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRlZCUVZVc1JVRkJSU3hWUVVGVkxFVkJRVVU3UVVGRGJFVXNUVUZCU1N4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eEZRVUZGTzBGQlEyaERMRmxCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlZTeERRVUZETEVkQlFVY3NVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF6dEJRVU14UkN4UlFVRkpMRU5CUVVNc1ZVRkJWU3hGUVVGRk8wRkJRMllzWVVGQlR5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8wdEJRM0pETzBkQlEwWTdRMEZEUmlJc0ltWnBiR1VpT2lKb1pXeHdaWEp6TG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElISmxaMmx6ZEdWeVFteHZZMnRJWld4d1pYSk5hWE56YVc1bklHWnliMjBnSnk0dmFHVnNjR1Z5Y3k5aWJHOWpheTFvWld4d1pYSXRiV2x6YzJsdVp5YzdYRzVwYlhCdmNuUWdjbVZuYVhOMFpYSkZZV05vSUdaeWIyMGdKeTR2YUdWc2NHVnljeTlsWVdOb0p6dGNibWx0Y0c5eWRDQnlaV2RwYzNSbGNraGxiSEJsY2sxcGMzTnBibWNnWm5KdmJTQW5MaTlvWld4d1pYSnpMMmhsYkhCbGNpMXRhWE56YVc1bkp6dGNibWx0Y0c5eWRDQnlaV2RwYzNSbGNrbG1JR1p5YjIwZ0p5NHZhR1ZzY0dWeWN5OXBaaWM3WEc1cGJYQnZjblFnY21WbmFYTjBaWEpNYjJjZ1puSnZiU0FuTGk5b1pXeHdaWEp6TDJ4dlp5YzdYRzVwYlhCdmNuUWdjbVZuYVhOMFpYSk1iMjlyZFhBZ1puSnZiU0FuTGk5b1pXeHdaWEp6TDJ4dmIydDFjQ2M3WEc1cGJYQnZjblFnY21WbmFYTjBaWEpYYVhSb0lHWnliMjBnSnk0dmFHVnNjR1Z5Y3k5M2FYUm9KenRjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKbFoybHpkR1Z5UkdWbVlYVnNkRWhsYkhCbGNuTW9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2NtVm5hWE4wWlhKQ2JHOWphMGhsYkhCbGNrMXBjM05wYm1jb2FXNXpkR0Z1WTJVcE8xeHVJQ0J5WldkcGMzUmxja1ZoWTJnb2FXNXpkR0Z1WTJVcE8xeHVJQ0J5WldkcGMzUmxja2hsYkhCbGNrMXBjM05wYm1jb2FXNXpkR0Z1WTJVcE8xeHVJQ0J5WldkcGMzUmxja2xtS0dsdWMzUmhibU5sS1R0Y2JpQWdjbVZuYVhOMFpYSk1iMmNvYVc1emRHRnVZMlVwTzF4dUlDQnlaV2RwYzNSbGNreHZiMnQxY0NocGJuTjBZVzVqWlNrN1hHNGdJSEpsWjJsemRHVnlWMmwwYUNocGJuTjBZVzVqWlNrN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJ0YjNabFNHVnNjR1Z5Vkc5SWIyOXJjeWhwYm5OMFlXNWpaU3dnYUdWc2NHVnlUbUZ0WlN3Z2EyVmxjRWhsYkhCbGNpa2dlMXh1SUNCcFppQW9hVzV6ZEdGdVkyVXVhR1ZzY0dWeWMxdG9aV3h3WlhKT1lXMWxYU2tnZTF4dUlDQWdJR2x1YzNSaGJtTmxMbWh2YjJ0elcyaGxiSEJsY2s1aGJXVmRJRDBnYVc1emRHRnVZMlV1YUdWc2NHVnljMXRvWld4d1pYSk9ZVzFsWFR0Y2JpQWdJQ0JwWmlBb0lXdGxaWEJJWld4d1pYSXBJSHRjYmlBZ0lDQWdJR1JsYkdWMFpTQnBibk4wWVc1alpTNW9aV3h3WlhKelcyaGxiSEJsY2s1aGJXVmRPMXh1SUNBZ0lIMWNiaUFnZlZ4dWZWeHVJbDE5XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG5cbnZhciBsb2dnZXIgPSB7XG4gIG1ldGhvZE1hcDogWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSxcbiAgbGV2ZWw6ICdpbmZvJyxcblxuICAvLyBNYXBzIGEgZ2l2ZW4gbGV2ZWwgdmFsdWUgdG8gdGhlIGBtZXRob2RNYXBgIGluZGV4ZXMgYWJvdmUuXG4gIGxvb2t1cExldmVsOiBmdW5jdGlvbiBsb29rdXBMZXZlbChsZXZlbCkge1xuICAgIGlmICh0eXBlb2YgbGV2ZWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbGV2ZWxNYXAgPSBfdXRpbHMuaW5kZXhPZihsb2dnZXIubWV0aG9kTWFwLCBsZXZlbC50b0xvd2VyQ2FzZSgpKTtcbiAgICAgIGlmIChsZXZlbE1hcCA+PSAwKSB7XG4gICAgICAgIGxldmVsID0gbGV2ZWxNYXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsZXZlbCA9IHBhcnNlSW50KGxldmVsLCAxMCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGxldmVsO1xuICB9LFxuXG4gIC8vIENhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBob3N0IGVudmlyb25tZW50XG4gIGxvZzogZnVuY3Rpb24gbG9nKGxldmVsKSB7XG4gICAgbGV2ZWwgPSBsb2dnZXIubG9va3VwTGV2ZWwobGV2ZWwpO1xuXG4gICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBsb2dnZXIubG9va3VwTGV2ZWwobG9nZ2VyLmxldmVsKSA8PSBsZXZlbCkge1xuICAgICAgdmFyIG1ldGhvZCA9IGxvZ2dlci5tZXRob2RNYXBbbGV2ZWxdO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGlmICghY29uc29sZVttZXRob2RdKSB7XG4gICAgICAgIG1ldGhvZCA9ICdsb2cnO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbWVzc2FnZSA9IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgICAgbWVzc2FnZVtfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgICB9XG5cbiAgICAgIGNvbnNvbGVbbWV0aG9kXS5hcHBseShjb25zb2xlLCBtZXNzYWdlKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBsb2dnZXI7XG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJ4dloyZGxjaTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN08zRkNRVUYzUWl4VFFVRlRPenRCUVVWcVF5eEpRVUZKTEUxQlFVMHNSMEZCUnp0QlFVTllMRmRCUVZNc1JVRkJSU3hEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRTlCUVU4c1EwRkJRenRCUVVNM1F5eFBRVUZMTEVWQlFVVXNUVUZCVFRzN08wRkJSMklzWVVGQlZ5eEZRVUZGTEhGQ1FVRlRMRXRCUVVzc1JVRkJSVHRCUVVNelFpeFJRVUZKTEU5QlFVOHNTMEZCU3l4TFFVRkxMRkZCUVZFc1JVRkJSVHRCUVVNM1FpeFZRVUZKTEZGQlFWRXNSMEZCUnl4bFFVRlJMRTFCUVUwc1EwRkJReXhUUVVGVExFVkJRVVVzUzBGQlN5eERRVUZETEZkQlFWY3NSVUZCUlN4RFFVRkRMRU5CUVVNN1FVRkRPVVFzVlVGQlNTeFJRVUZSTEVsQlFVa3NRMEZCUXl4RlFVRkZPMEZCUTJwQ0xHRkJRVXNzUjBGQlJ5eFJRVUZSTEVOQlFVTTdUMEZEYkVJc1RVRkJUVHRCUVVOTUxHRkJRVXNzUjBGQlJ5eFJRVUZSTEVOQlFVTXNTMEZCU3l4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8wOUJRemRDTzB0QlEwWTdPMEZCUlVRc1YwRkJUeXhMUVVGTExFTkJRVU03UjBGRFpEczdPMEZCUjBRc1MwRkJSeXhGUVVGRkxHRkJRVk1zUzBGQlN5eEZRVUZqTzBGQlF5OUNMRk5CUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPenRCUVVWc1F5eFJRVU5GTEU5QlFVOHNUMEZCVHl4TFFVRkxMRmRCUVZjc1NVRkRPVUlzVFVGQlRTeERRVUZETEZkQlFWY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUzBGQlN5eEZRVU42UXp0QlFVTkJMRlZCUVVrc1RVRkJUU3hIUVVGSExFMUJRVTBzUTBGQlF5eFRRVUZUTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSWEpETEZWQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVU3UVVGRGNFSXNZMEZCVFN4SFFVRkhMRXRCUVVzc1EwRkJRenRQUVVOb1FqczdkME5CV0cxQ0xFOUJRVTg3UVVGQlVDeGxRVUZQT3pzN1FVRlpNMElzWVVGQlR5eERRVUZETEUxQlFVMHNUMEZCUXl4RFFVRm1MRTlCUVU4c1JVRkJXU3hQUVVGUExFTkJRVU1zUTBGQlF6dExRVU0zUWp0SFFVTkdPME5CUTBZc1EwRkJRenM3Y1VKQlJXRXNUVUZCVFNJc0ltWnBiR1VpT2lKc2IyZG5aWEl1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2V5QnBibVJsZUU5bUlIMGdabkp2YlNBbkxpOTFkR2xzY3ljN1hHNWNibXhsZENCc2IyZG5aWElnUFNCN1hHNGdJRzFsZEdodlpFMWhjRG9nV3lka1pXSjFaeWNzSUNkcGJtWnZKeXdnSjNkaGNtNG5MQ0FuWlhKeWIzSW5YU3hjYmlBZ2JHVjJaV3c2SUNkcGJtWnZKeXhjYmx4dUlDQXZMeUJOWVhCeklHRWdaMmwyWlc0Z2JHVjJaV3dnZG1Gc2RXVWdkRzhnZEdobElHQnRaWFJvYjJSTllYQmdJR2x1WkdWNFpYTWdZV0p2ZG1VdVhHNGdJR3h2YjJ0MWNFeGxkbVZzT2lCbWRXNWpkR2x2Ymloc1pYWmxiQ2tnZTF4dUlDQWdJR2xtSUNoMGVYQmxiMllnYkdWMlpXd2dQVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnSUNCc1pYUWdiR1YyWld4TllYQWdQU0JwYm1SbGVFOW1LR3h2WjJkbGNpNXRaWFJvYjJSTllYQXNJR3hsZG1Wc0xuUnZURzkzWlhKRFlYTmxLQ2twTzF4dUlDQWdJQ0FnYVdZZ0tHeGxkbVZzVFdGd0lENDlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjJaV3dnUFNCc1pYWmxiRTFoY0R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUd4bGRtVnNJRDBnY0dGeWMyVkpiblFvYkdWMlpXd3NJREV3S1R0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdiR1YyWld3N1hHNGdJSDBzWEc1Y2JpQWdMeThnUTJGdUlHSmxJRzkyWlhKeWFXUmtaVzRnYVc0Z2RHaGxJR2h2YzNRZ1pXNTJhWEp2Ym0xbGJuUmNiaUFnYkc5bk9pQm1kVzVqZEdsdmJpaHNaWFpsYkN3Z0xpNHViV1Z6YzJGblpTa2dlMXh1SUNBZ0lHeGxkbVZzSUQwZ2JHOW5aMlZ5TG14dmIydDFjRXhsZG1Wc0tHeGxkbVZzS1R0Y2JseHVJQ0FnSUdsbUlDaGNiaUFnSUNBZ0lIUjVjR1Z2WmlCamIyNXpiMnhsSUNFOVBTQW5kVzVrWldacGJtVmtKeUFtSmx4dUlDQWdJQ0FnYkc5bloyVnlMbXh2YjJ0MWNFeGxkbVZzS0d4dloyZGxjaTVzWlhabGJDa2dQRDBnYkdWMlpXeGNiaUFnSUNBcElIdGNiaUFnSUNBZ0lHeGxkQ0J0WlhSb2IyUWdQU0JzYjJkblpYSXViV1YwYUc5a1RXRndXMnhsZG1Wc1hUdGNiaUFnSUNBZ0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTFqYjI1emIyeGxYRzRnSUNBZ0lDQnBaaUFvSVdOdmJuTnZiR1ZiYldWMGFHOWtYU2tnZTF4dUlDQWdJQ0FnSUNCdFpYUm9iMlFnUFNBbmJHOW5KenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR052Ym5OdmJHVmJiV1YwYUc5a1hTZ3VMaTV0WlhOellXZGxLVHNnTHk4Z1pYTnNhVzUwTFdScGMyRmliR1V0YkdsdVpTQnVieTFqYjI1emIyeGxYRzRnSUNBZ2ZWeHVJQ0I5WEc1OU8xeHVYRzVsZUhCdmNuUWdaR1ZtWVhWc2RDQnNiMmRuWlhJN1hHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLmNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbCA9IGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbDtcbmV4cG9ydHMucmVzdWx0SXNBbGxvd2VkID0gcmVzdWx0SXNBbGxvd2VkO1xuZXhwb3J0cy5yZXNldExvZ2dlZFByb3BlcnRpZXMgPSByZXNldExvZ2dlZFByb3BlcnRpZXM7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqWydkZWZhdWx0J10gPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG52YXIgX2NyZWF0ZU5ld0xvb2t1cE9iamVjdCA9IHJlcXVpcmUoJy4vY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0Jyk7XG5cbnZhciBfbG9nZ2VyID0gcmVxdWlyZSgnLi4vbG9nZ2VyJyk7XG5cbnZhciBsb2dnZXIgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfbG9nZ2VyKTtcblxudmFyIGxvZ2dlZFByb3BlcnRpZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG5mdW5jdGlvbiBjcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wocnVudGltZU9wdGlvbnMpIHtcbiAgdmFyIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0Wydjb25zdHJ1Y3RvciddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lR2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2RlZmluZVNldHRlcl9fJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19sb29rdXBHZXR0ZXJfXyddID0gZmFsc2U7XG5cbiAgdmFyIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b1xuICBkZWZhdWx0UHJvcGVydHlXaGl0ZUxpc3RbJ19fcHJvdG9fXyddID0gZmFsc2U7XG5cbiAgcmV0dXJuIHtcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IF9jcmVhdGVOZXdMb29rdXBPYmplY3QuY3JlYXRlTmV3TG9va3VwT2JqZWN0KGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCwgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvUHJvcGVydGllcyksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0XG4gICAgfSxcbiAgICBtZXRob2RzOiB7XG4gICAgICB3aGl0ZWxpc3Q6IF9jcmVhdGVOZXdMb29rdXBPYmplY3QuY3JlYXRlTmV3TG9va3VwT2JqZWN0KGRlZmF1bHRNZXRob2RXaGl0ZUxpc3QsIHJ1bnRpbWVPcHRpb25zLmFsbG93ZWRQcm90b01ldGhvZHMpLFxuICAgICAgZGVmYXVsdFZhbHVlOiBydW50aW1lT3B0aW9ucy5hbGxvd1Byb3RvTWV0aG9kc0J5RGVmYXVsdFxuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgcHJvdG9BY2Nlc3NDb250cm9sLCBwcm9wZXJ0eU5hbWUpIHtcbiAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLm1ldGhvZHMsIHByb3BlcnR5TmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbC5wcm9wZXJ0aWVzLCBwcm9wZXJ0eU5hbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrV2hpdGVMaXN0KHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUsIHByb3BlcnR5TmFtZSkge1xuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUud2hpdGVsaXN0W3Byb3BlcnR5TmFtZV0gPT09IHRydWU7XG4gIH1cbiAgaWYgKHByb3RvQWNjZXNzQ29udHJvbEZvclR5cGUuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWU7XG4gIH1cbiAgbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gbG9nVW5leHBlY2VkUHJvcGVydHlBY2Nlc3NPbmNlKHByb3BlcnR5TmFtZSkge1xuICBpZiAobG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdICE9PSB0cnVlKSB7XG4gICAgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdID0gdHJ1ZTtcbiAgICBsb2dnZXIubG9nKCdlcnJvcicsICdIYW5kbGViYXJzOiBBY2Nlc3MgaGFzIGJlZW4gZGVuaWVkIHRvIHJlc29sdmUgdGhlIHByb3BlcnR5IFwiJyArIHByb3BlcnR5TmFtZSArICdcIiBiZWNhdXNlIGl0IGlzIG5vdCBhbiBcIm93biBwcm9wZXJ0eVwiIG9mIGl0cyBwYXJlbnQuXFxuJyArICdZb3UgY2FuIGFkZCBhIHJ1bnRpbWUgb3B0aW9uIHRvIGRpc2FibGUgdGhlIGNoZWNrIG9yIHRoaXMgd2FybmluZzpcXG4nICsgJ1NlZSBodHRwczovL2hhbmRsZWJhcnNqcy5jb20vYXBpLXJlZmVyZW5jZS9ydW50aW1lLW9wdGlvbnMuaHRtbCNvcHRpb25zLXRvLWNvbnRyb2wtcHJvdG90eXBlLWFjY2VzcyBmb3IgZGV0YWlscycpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlc2V0TG9nZ2VkUHJvcGVydGllcygpIHtcbiAgT2JqZWN0LmtleXMobG9nZ2VkUHJvcGVydGllcykuZm9yRWFjaChmdW5jdGlvbiAocHJvcGVydHlOYW1lKSB7XG4gICAgZGVsZXRlIGxvZ2dlZFByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmx1ZEdWeWJtRnNMM0J5YjNSdkxXRmpZMlZ6Y3k1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3T3pzN08zRkRRVUZ6UXl3MFFrRkJORUk3TzNOQ1FVTXhReXhYUVVGWE96dEpRVUYyUWl4TlFVRk5PenRCUVVWc1FpeEpRVUZOTEdkQ1FVRm5RaXhIUVVGSExFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN08wRkJSWFJETEZOQlFWTXNkMEpCUVhkQ0xFTkJRVU1zWTBGQll5eEZRVUZGTzBGQlEzWkVMRTFCUVVrc2MwSkJRWE5DTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEJRVU5xUkN4M1FrRkJjMElzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRPVU1zZDBKQlFYTkNMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRia1FzZDBKQlFYTkNMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRia1FzZDBKQlFYTkNMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN08wRkJSVzVFTEUxQlFVa3NkMEpCUVhkQ0xFZEJRVWNzVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRmJrUXNNRUpCUVhkQ0xFTkJRVU1zVjBGQlZ5eERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRPenRCUVVVNVF5eFRRVUZQTzBGQlEwd3NZMEZCVlN4RlFVRkZPMEZCUTFZc1pVRkJVeXhGUVVGRkxEWkRRVU5VTEhkQ1FVRjNRaXhGUVVONFFpeGpRVUZqTEVOQlFVTXNjMEpCUVhOQ0xFTkJRM1JETzBGQlEwUXNhMEpCUVZrc1JVRkJSU3hqUVVGakxFTkJRVU1zTmtKQlFUWkNPMHRCUXpORU8wRkJRMFFzVjBGQlR5eEZRVUZGTzBGQlExQXNaVUZCVXl4RlFVRkZMRFpEUVVOVUxITkNRVUZ6UWl4RlFVTjBRaXhqUVVGakxFTkJRVU1zYlVKQlFXMUNMRU5CUTI1RE8wRkJRMFFzYTBKQlFWa3NSVUZCUlN4alFVRmpMRU5CUVVNc01FSkJRVEJDTzB0QlEzaEVPMGRCUTBZc1EwRkJRenREUVVOSU96dEJRVVZOTEZOQlFWTXNaVUZCWlN4RFFVRkRMRTFCUVUwc1JVRkJSU3hyUWtGQmEwSXNSVUZCUlN4WlFVRlpMRVZCUVVVN1FVRkRlRVVzVFVGQlNTeFBRVUZQTEUxQlFVMHNTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRhRU1zVjBGQlR5eGpRVUZqTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eEZRVUZGTEZsQlFWa3NRMEZCUXl4RFFVRkRPMGRCUTJwRkxFMUJRVTA3UVVGRFRDeFhRVUZQTEdOQlFXTXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eFZRVUZWTEVWQlFVVXNXVUZCV1N4RFFVRkRMRU5CUVVNN1IwRkRjRVU3UTBGRFJqczdRVUZGUkN4VFFVRlRMR05CUVdNc1EwRkJReXg1UWtGQmVVSXNSVUZCUlN4WlFVRlpMRVZCUVVVN1FVRkRMMFFzVFVGQlNTeDVRa0ZCZVVJc1EwRkJReXhUUVVGVExFTkJRVU1zV1VGQldTeERRVUZETEV0QlFVc3NVMEZCVXl4RlFVRkZPMEZCUTI1RkxGZEJRVThzZVVKQlFYbENMRU5CUVVNc1UwRkJVeXhEUVVGRExGbEJRVmtzUTBGQlF5eExRVUZMTEVsQlFVa3NRMEZCUXp0SFFVTnVSVHRCUVVORUxFMUJRVWtzZVVKQlFYbENMRU5CUVVNc1dVRkJXU3hMUVVGTExGTkJRVk1zUlVGQlJUdEJRVU40UkN4WFFVRlBMSGxDUVVGNVFpeERRVUZETEZsQlFWa3NRMEZCUXp0SFFVTXZRenRCUVVORUxHZERRVUU0UWl4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRemRETEZOQlFVOHNTMEZCU3l4RFFVRkRPME5CUTJRN08wRkJSVVFzVTBGQlV5dzRRa0ZCT0VJc1EwRkJReXhaUVVGWkxFVkJRVVU3UVVGRGNFUXNUVUZCU1N4blFrRkJaMElzUTBGQlF5eFpRVUZaTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVN1FVRkRNME1zYjBKQlFXZENMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzBGQlEzUkRMRlZCUVUwc1EwRkJReXhIUVVGSExFTkJRMUlzVDBGQlR5eEZRVU5RTEdsRlFVRXJSQ3haUVVGWkxHOUpRVU5JTEc5SVFVTXlReXhEUVVOd1NDeERRVUZETzBkQlEwZzdRMEZEUmpzN1FVRkZUU3hUUVVGVExIRkNRVUZ4UWl4SFFVRkhPMEZCUTNSRExGRkJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eFBRVUZQTEVOQlFVTXNWVUZCUVN4WlFVRlpMRVZCUVVrN1FVRkRjRVFzVjBGQlR5eG5Ra0ZCWjBJc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF6dEhRVU4yUXl4RFFVRkRMRU5CUVVNN1EwRkRTaUlzSW1acGJHVWlPaUp3Y205MGJ5MWhZMk5sYzNNdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJqY21WaGRHVk9aWGRNYjI5cmRYQlBZbXBsWTNRZ2ZTQm1jbTl0SUNjdUwyTnlaV0YwWlMxdVpYY3RiRzl2YTNWd0xXOWlhbVZqZENjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJzYjJkblpYSWdabkp2YlNBbkxpNHZiRzluWjJWeUp6dGNibHh1WTI5dWMzUWdiRzluWjJWa1VISnZjR1Z5ZEdsbGN5QTlJRTlpYW1WamRDNWpjbVZoZEdVb2JuVnNiQ2s3WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCamNtVmhkR1ZRY205MGIwRmpZMlZ6YzBOdmJuUnliMndvY25WdWRHbHRaVTl3ZEdsdmJuTXBJSHRjYmlBZ2JHVjBJR1JsWm1GMWJIUk5aWFJvYjJSWGFHbDBaVXhwYzNRZ1BTQlBZbXBsWTNRdVkzSmxZWFJsS0c1MWJHd3BPMXh1SUNCa1pXWmhkV3gwVFdWMGFHOWtWMmhwZEdWTWFYTjBXeWRqYjI1emRISjFZM1J2Y2lkZElEMGdabUZzYzJVN1hHNGdJR1JsWm1GMWJIUk5aWFJvYjJSWGFHbDBaVXhwYzNSYkoxOWZaR1ZtYVc1bFIyVjBkR1Z5WDE4blhTQTlJR1poYkhObE8xeHVJQ0JrWldaaGRXeDBUV1YwYUc5a1YyaHBkR1ZNYVhOMFd5ZGZYMlJsWm1sdVpWTmxkSFJsY2w5ZkoxMGdQU0JtWVd4elpUdGNiaUFnWkdWbVlYVnNkRTFsZEdodlpGZG9hWFJsVEdsemRGc25YMTlzYjI5cmRYQkhaWFIwWlhKZlh5ZGRJRDBnWm1Gc2MyVTdYRzVjYmlBZ2JHVjBJR1JsWm1GMWJIUlFjbTl3WlhKMGVWZG9hWFJsVEdsemRDQTlJRTlpYW1WamRDNWpjbVZoZEdVb2JuVnNiQ2s3WEc0Z0lDOHZJR1Z6YkdsdWRDMWthWE5oWW14bExXNWxlSFF0YkdsdVpTQnVieTF3Y205MGIxeHVJQ0JrWldaaGRXeDBVSEp2Y0dWeWRIbFhhR2wwWlV4cGMzUmJKMTlmY0hKdmRHOWZYeWRkSUQwZ1ptRnNjMlU3WEc1Y2JpQWdjbVYwZFhKdUlIdGNiaUFnSUNCd2NtOXdaWEowYVdWek9pQjdYRzRnSUNBZ0lDQjNhR2wwWld4cGMzUTZJR055WldGMFpVNWxkMHh2YjJ0MWNFOWlhbVZqZENoY2JpQWdJQ0FnSUNBZ1pHVm1ZWFZzZEZCeWIzQmxjblI1VjJocGRHVk1hWE4wTEZ4dUlDQWdJQ0FnSUNCeWRXNTBhVzFsVDNCMGFXOXVjeTVoYkd4dmQyVmtVSEp2ZEc5UWNtOXdaWEowYVdWelhHNGdJQ0FnSUNBcExGeHVJQ0FnSUNBZ1pHVm1ZWFZzZEZaaGJIVmxPaUJ5ZFc1MGFXMWxUM0IwYVc5dWN5NWhiR3h2ZDFCeWIzUnZVSEp2Y0dWeWRHbGxjMEo1UkdWbVlYVnNkRnh1SUNBZ0lIMHNYRzRnSUNBZ2JXVjBhRzlrY3pvZ2UxeHVJQ0FnSUNBZ2QyaHBkR1ZzYVhOME9pQmpjbVZoZEdWT1pYZE1iMjlyZFhCUFltcGxZM1FvWEc0Z0lDQWdJQ0FnSUdSbFptRjFiSFJOWlhSb2IyUlhhR2wwWlV4cGMzUXNYRzRnSUNBZ0lDQWdJSEoxYm5ScGJXVlBjSFJwYjI1ekxtRnNiRzkzWldSUWNtOTBiMDFsZEdodlpITmNiaUFnSUNBZ0lDa3NYRzRnSUNBZ0lDQmtaV1poZFd4MFZtRnNkV1U2SUhKMWJuUnBiV1ZQY0hScGIyNXpMbUZzYkc5M1VISnZkRzlOWlhSb2IyUnpRbmxFWldaaGRXeDBYRzRnSUNBZ2ZWeHVJQ0I5TzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZ6ZFd4MFNYTkJiR3h2ZDJWa0tISmxjM1ZzZEN3Z2NISnZkRzlCWTJObGMzTkRiMjUwY205c0xDQndjbTl3WlhKMGVVNWhiV1VwSUh0Y2JpQWdhV1lnS0hSNWNHVnZaaUJ5WlhOMWJIUWdQVDA5SUNkbWRXNWpkR2x2YmljcElIdGNiaUFnSUNCeVpYUjFjbTRnWTJobFkydFhhR2wwWlV4cGMzUW9jSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNMbTFsZEdodlpITXNJSEJ5YjNCbGNuUjVUbUZ0WlNrN1hHNGdJSDBnWld4elpTQjdYRzRnSUNBZ2NtVjBkWEp1SUdOb1pXTnJWMmhwZEdWTWFYTjBLSEJ5YjNSdlFXTmpaWE56UTI5dWRISnZiQzV3Y205d1pYSjBhV1Z6TENCd2NtOXdaWEowZVU1aGJXVXBPMXh1SUNCOVhHNTlYRzVjYm1aMWJtTjBhVzl1SUdOb1pXTnJWMmhwZEdWTWFYTjBLSEJ5YjNSdlFXTmpaWE56UTI5dWRISnZiRVp2Y2xSNWNHVXNJSEJ5YjNCbGNuUjVUbUZ0WlNrZ2UxeHVJQ0JwWmlBb2NISnZkRzlCWTJObGMzTkRiMjUwY205c1JtOXlWSGx3WlM1M2FHbDBaV3hwYzNSYmNISnZjR1Z5ZEhsT1lXMWxYU0FoUFQwZ2RXNWtaV1pwYm1Wa0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhCeWIzUnZRV05qWlhOelEyOXVkSEp2YkVadmNsUjVjR1V1ZDJocGRHVnNhWE4wVzNCeWIzQmxjblI1VG1GdFpWMGdQVDA5SUhSeWRXVTdYRzRnSUgxY2JpQWdhV1lnS0hCeWIzUnZRV05qWlhOelEyOXVkSEp2YkVadmNsUjVjR1V1WkdWbVlYVnNkRlpoYkhWbElDRTlQU0IxYm1SbFptbHVaV1FwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdjSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNSbTl5Vkhsd1pTNWtaV1poZFd4MFZtRnNkV1U3WEc0Z0lIMWNiaUFnYkc5blZXNWxlSEJsWTJWa1VISnZjR1Z5ZEhsQlkyTmxjM05QYm1ObEtIQnliM0JsY25SNVRtRnRaU2s3WEc0Z0lISmxkSFZ5YmlCbVlXeHpaVHRjYm4xY2JseHVablZ1WTNScGIyNGdiRzluVlc1bGVIQmxZMlZrVUhKdmNHVnlkSGxCWTJObGMzTlBibU5sS0hCeWIzQmxjblI1VG1GdFpTa2dlMXh1SUNCcFppQW9iRzluWjJWa1VISnZjR1Z5ZEdsbGMxdHdjbTl3WlhKMGVVNWhiV1ZkSUNFOVBTQjBjblZsS1NCN1hHNGdJQ0FnYkc5bloyVmtVSEp2Y0dWeWRHbGxjMXR3Y205d1pYSjBlVTVoYldWZElEMGdkSEoxWlR0Y2JpQWdJQ0JzYjJkblpYSXViRzluS0Z4dUlDQWdJQ0FnSjJWeWNtOXlKeXhjYmlBZ0lDQWdJR0JJWVc1a2JHVmlZWEp6T2lCQlkyTmxjM01nYUdGeklHSmxaVzRnWkdWdWFXVmtJSFJ2SUhKbGMyOXNkbVVnZEdobElIQnliM0JsY25SNUlGd2lKSHR3Y205d1pYSjBlVTVoYldWOVhDSWdZbVZqWVhWelpTQnBkQ0JwY3lCdWIzUWdZVzRnWENKdmQyNGdjSEp2Y0dWeWRIbGNJaUJ2WmlCcGRITWdjR0Z5Wlc1MExseGNibUFnSzF4dUlDQWdJQ0FnSUNCZ1dXOTFJR05oYmlCaFpHUWdZU0J5ZFc1MGFXMWxJRzl3ZEdsdmJpQjBieUJrYVhOaFlteGxJSFJvWlNCamFHVmpheUJ2Y2lCMGFHbHpJSGRoY201cGJtYzZYRnh1WUNBclhHNGdJQ0FnSUNBZ0lHQlRaV1VnYUhSMGNITTZMeTlvWVc1a2JHVmlZWEp6YW5NdVkyOXRMMkZ3YVMxeVpXWmxjbVZ1WTJVdmNuVnVkR2x0WlMxdmNIUnBiMjV6TG1oMGJXd2piM0IwYVc5dWN5MTBieTFqYjI1MGNtOXNMWEJ5YjNSdmRIbHdaUzFoWTJObGMzTWdabTl5SUdSbGRHRnBiSE5nWEc0Z0lDQWdLVHRjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnY21WelpYUk1iMmRuWldSUWNtOXdaWEowYVdWektDa2dlMXh1SUNCUFltcGxZM1F1YTJWNWN5aHNiMmRuWldSUWNtOXdaWEowYVdWektTNW1iM0pGWVdOb0tIQnliM0JsY25SNVRtRnRaU0E5UGlCN1hHNGdJQ0FnWkdWc1pYUmxJR3h2WjJkbFpGQnliM0JsY25ScFpYTmJjSEp2Y0dWeWRIbE9ZVzFsWFR0Y2JpQWdmU2s3WEc1OVhHNGlYWDA9XG4iLCJ2YXIgY3JlYXRlRmluZCA9IHJlcXVpcmUoJy4vX2NyZWF0ZUZpbmQnKSxcbiAgICBmaW5kSW5kZXggPSByZXF1aXJlKCcuL2ZpbmRJbmRleCcpO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWxlbWVudHMgb2YgYGNvbGxlY3Rpb25gLCByZXR1cm5pbmcgdGhlIGZpcnN0IGVsZW1lbnRcbiAqIGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvci4gVGhlIHByZWRpY2F0ZSBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAqIGFyZ3VtZW50czogKHZhbHVlLCBpbmRleHxrZXksIGNvbGxlY3Rpb24pLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBDb2xsZWN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fE9iamVjdH0gY29sbGVjdGlvbiBUaGUgY29sbGVjdGlvbiB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hdGNoZWQgZWxlbWVudCwgZWxzZSBgdW5kZWZpbmVkYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWdlJzogMzYsICdhY3RpdmUnOiB0cnVlIH0sXG4gKiAgIHsgJ3VzZXInOiAnZnJlZCcsICAgICdhZ2UnOiA0MCwgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhZ2UnOiAxLCAgJ2FjdGl2ZSc6IHRydWUgfVxuICogXTtcbiAqXG4gKiBfLmZpbmQodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8uYWdlIDwgNDA7IH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzYCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIHsgJ2FnZSc6IDEsICdhY3RpdmUnOiB0cnVlIH0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAncGViYmxlcydcbiAqXG4gKiAvLyBUaGUgYF8ubWF0Y2hlc1Byb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2ZyZWQnXG4gKlxuICogLy8gVGhlIGBfLnByb3BlcnR5YCBpdGVyYXRlZSBzaG9ydGhhbmQuXG4gKiBfLmZpbmQodXNlcnMsICdhY3RpdmUnKTtcbiAqIC8vID0+IG9iamVjdCBmb3IgJ2Jhcm5leSdcbiAqL1xudmFyIGZpbmQgPSBjcmVhdGVGaW5kKGZpbmRJbmRleCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmluZDtcbiIsInZhciBiYXNlTWF0Y2hlcyA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzJyksXG4gICAgYmFzZU1hdGNoZXNQcm9wZXJ0eSA9IHJlcXVpcmUoJy4vX2Jhc2VNYXRjaGVzUHJvcGVydHknKSxcbiAgICBpZGVudGl0eSA9IHJlcXVpcmUoJy4vaWRlbnRpdHknKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgcHJvcGVydHkgPSByZXF1aXJlKCcuL3Byb3BlcnR5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXRlcmF0ZWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IFt2YWx1ZT1fLmlkZW50aXR5XSBUaGUgdmFsdWUgdG8gY29udmVydCB0byBhbiBpdGVyYXRlZS5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgaXRlcmF0ZWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJdGVyYXRlZSh2YWx1ZSkge1xuICAvLyBEb24ndCBzdG9yZSB0aGUgYHR5cGVvZmAgcmVzdWx0IGluIGEgdmFyaWFibGUgdG8gYXZvaWQgYSBKSVQgYnVnIGluIFNhZmFyaSA5LlxuICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NjAzNCBmb3IgbW9yZSBkZXRhaWxzLlxuICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gaWRlbnRpdHk7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBpc0FycmF5KHZhbHVlKVxuICAgICAgPyBiYXNlTWF0Y2hlc1Byb3BlcnR5KHZhbHVlWzBdLCB2YWx1ZVsxXSlcbiAgICAgIDogYmFzZU1hdGNoZXModmFsdWUpO1xuICB9XG4gIHJldHVybiBwcm9wZXJ0eSh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUl0ZXJhdGVlO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIHN0YWNrQ2xlYXIgPSByZXF1aXJlKCcuL19zdGFja0NsZWFyJyksXG4gICAgc3RhY2tEZWxldGUgPSByZXF1aXJlKCcuL19zdGFja0RlbGV0ZScpLFxuICAgIHN0YWNrR2V0ID0gcmVxdWlyZSgnLi9fc3RhY2tHZXQnKSxcbiAgICBzdGFja0hhcyA9IHJlcXVpcmUoJy4vX3N0YWNrSGFzJyksXG4gICAgc3RhY2tTZXQgPSByZXF1aXJlKCcuL19zdGFja1NldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBzdGFjayBjYWNoZSBvYmplY3QgdG8gc3RvcmUga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoZW50cmllcyk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYFN0YWNrYC5cblN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7XG5TdGFjay5wcm90b3R5cGVbJ2RlbGV0ZSddID0gc3RhY2tEZWxldGU7XG5TdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7XG5TdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7XG5TdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RhY2s7XG4iLCIvKipcbiAqIFBlcmZvcm1zIGFcbiAqIFtgU2FtZVZhbHVlWmVyb2BdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXNhbWV2YWx1ZXplcm8pXG4gKiBjb21wYXJpc29uIGJldHdlZW4gdHdvIHZhbHVlcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1aXZhbGVudC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Kn0gb3RoZXIgVGhlIG90aGVyIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0ID0geyAnYSc6IDEgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2EnOiAxIH07XG4gKlxuICogXy5lcShvYmplY3QsIG9iamVjdCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcShvYmplY3QsIG90aGVyKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcSgnYScsICdhJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5lcSgnYScsIE9iamVjdCgnYScpKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5lcShOYU4sIE5hTik7XG4gKiAvLyA9PiB0cnVlXG4gKi9cbmZ1bmN0aW9uIGVxKHZhbHVlLCBvdGhlcikge1xuICByZXR1cm4gdmFsdWUgPT09IG90aGVyIHx8ICh2YWx1ZSAhPT0gdmFsdWUgJiYgb3RoZXIgIT09IG90aGVyKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBlcTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXN5bmNUYWcgPSAnW29iamVjdCBBc3luY0Z1bmN0aW9uXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJyxcbiAgICBwcm94eVRhZyA9ICdbb2JqZWN0IFByb3h5XSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBGdW5jdGlvbmAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgZnVuY3Rpb24sIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0Z1bmN0aW9uKF8pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNGdW5jdGlvbigvYWJjLyk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICghaXNPYmplY3QodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIFRoZSB1c2Ugb2YgYE9iamVjdCN0b1N0cmluZ2AgYXZvaWRzIGlzc3VlcyB3aXRoIHRoZSBgdHlwZW9mYCBvcGVyYXRvclxuICAvLyBpbiBTYWZhcmkgOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheXMgYW5kIG90aGVyIGNvbnN0cnVjdG9ycy5cbiAgdmFyIHRhZyA9IGJhc2VHZXRUYWcodmFsdWUpO1xuICByZXR1cm4gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZyB8fCB0YWcgPT0gYXN5bmNUYWcgfHwgdGFnID09IHByb3h5VGFnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRnVuY3Rpb247XG4iLCIvKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGdsb2JhbGAgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVHbG9iYWwgPSB0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCAmJiBnbG9iYWwuT2JqZWN0ID09PSBPYmplY3QgJiYgZ2xvYmFsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZyZWVHbG9iYWw7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byByZXNvbHZlIHRoZSBkZWNvbXBpbGVkIHNvdXJjZSBvZiBmdW5jdGlvbnMuICovXG52YXIgZnVuY1RvU3RyaW5nID0gZnVuY1Byb3RvLnRvU3RyaW5nO1xuXG4vKipcbiAqIENvbnZlcnRzIGBmdW5jYCB0byBpdHMgc291cmNlIGNvZGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBzb3VyY2UgY29kZS5cbiAqL1xuZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykge1xuICBpZiAoZnVuYyAhPSBudWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gKGZ1bmMgKyAnJyk7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgfVxuICByZXR1cm4gJyc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9Tb3VyY2U7XG4iLCJ2YXIgYmFzZUlzRXF1YWxEZWVwID0gcmVxdWlyZSgnLi9fYmFzZUlzRXF1YWxEZWVwJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc0VxdWFsYCB3aGljaCBzdXBwb3J0cyBwYXJ0aWFsIGNvbXBhcmlzb25zXG4gKiBhbmQgdHJhY2tzIHRyYXZlcnNlZCBvYmplY3RzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy5cbiAqICAxIC0gVW5vcmRlcmVkIGNvbXBhcmlzb25cbiAqICAyIC0gUGFydGlhbCBjb21wYXJpc29uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYHZhbHVlYCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUlzRXF1YWwodmFsdWUsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjaykge1xuICBpZiAodmFsdWUgPT09IG90aGVyKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHZhbHVlID09IG51bGwgfHwgb3RoZXIgPT0gbnVsbCB8fCAoIWlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgIWlzT2JqZWN0TGlrZShvdGhlcikpKSB7XG4gICAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXI7XG4gIH1cbiAgcmV0dXJuIGJhc2VJc0VxdWFsRGVlcCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGJhc2VJc0VxdWFsLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWw7XG4iLCJ2YXIgU2V0Q2FjaGUgPSByZXF1aXJlKCcuL19TZXRDYWNoZScpLFxuICAgIGFycmF5U29tZSA9IHJlcXVpcmUoJy4vX2FycmF5U29tZScpLFxuICAgIGNhY2hlSGFzID0gcmVxdWlyZSgnLi9fY2FjaGVIYXMnKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZUlzRXF1YWxEZWVwYCBmb3IgYXJyYXlzIHdpdGggc3VwcG9ydCBmb3JcbiAqIHBhcnRpYWwgZGVlcCBjb21wYXJpc29ucy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge0FycmF5fSBvdGhlciBUaGUgb3RoZXIgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLiBTZWUgYGJhc2VJc0VxdWFsYCBmb3IgbW9yZSBkZXRhaWxzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY3VzdG9taXplciBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXF1YWxGdW5jIFRoZSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgZXF1aXZhbGVudHMgb2YgdmFsdWVzLlxuICogQHBhcmFtIHtPYmplY3R9IHN0YWNrIFRyYWNrcyB0cmF2ZXJzZWQgYGFycmF5YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBhcnJheXMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxBcnJheXMoYXJyYXksIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUcsXG4gICAgICBhcnJMZW5ndGggPSBhcnJheS5sZW5ndGgsXG4gICAgICBvdGhMZW5ndGggPSBvdGhlci5sZW5ndGg7XG5cbiAgaWYgKGFyckxlbmd0aCAhPSBvdGhMZW5ndGggJiYgIShpc1BhcnRpYWwgJiYgb3RoTGVuZ3RoID4gYXJyTGVuZ3RoKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBDaGVjayB0aGF0IGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICB2YXIgYXJyU3RhY2tlZCA9IHN0YWNrLmdldChhcnJheSk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKGFyclN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBhcnJTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gYXJyYXk7XG4gIH1cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgc2VlbiA9IChiaXRtYXNrICYgQ09NUEFSRV9VTk9SREVSRURfRkxBRykgPyBuZXcgU2V0Q2FjaGUgOiB1bmRlZmluZWQ7XG5cbiAgc3RhY2suc2V0KGFycmF5LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgYXJyYXkpO1xuXG4gIC8vIElnbm9yZSBub24taW5kZXggcHJvcGVydGllcy5cbiAgd2hpbGUgKCsraW5kZXggPCBhcnJMZW5ndGgpIHtcbiAgICB2YXIgYXJyVmFsdWUgPSBhcnJheVtpbmRleF0sXG4gICAgICAgIG90aFZhbHVlID0gb3RoZXJbaW5kZXhdO1xuXG4gICAgaWYgKGN1c3RvbWl6ZXIpIHtcbiAgICAgIHZhciBjb21wYXJlZCA9IGlzUGFydGlhbFxuICAgICAgICA/IGN1c3RvbWl6ZXIob3RoVmFsdWUsIGFyclZhbHVlLCBpbmRleCwgb3RoZXIsIGFycmF5LCBzdGFjaylcbiAgICAgICAgOiBjdXN0b21pemVyKGFyclZhbHVlLCBvdGhWYWx1ZSwgaW5kZXgsIGFycmF5LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICBpZiAoY29tcGFyZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKGNvbXBhcmVkKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgY29tcGFyZSBhcnJheXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoc2Vlbikge1xuICAgICAgaWYgKCFhcnJheVNvbWUob3RoZXIsIGZ1bmN0aW9uKG90aFZhbHVlLCBvdGhJbmRleCkge1xuICAgICAgICAgICAgaWYgKCFjYWNoZUhhcyhzZWVuLCBvdGhJbmRleCkgJiZcbiAgICAgICAgICAgICAgICAoYXJyVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHNlZW4ucHVzaChvdGhJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkpIHtcbiAgICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoIShcbiAgICAgICAgICBhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHxcbiAgICAgICAgICAgIGVxdWFsRnVuYyhhcnJWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKVxuICAgICAgICApKSB7XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBzdGFja1snZGVsZXRlJ10oYXJyYXkpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQXJyYXlzO1xuIiwidmFyIGJhc2VJc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vX2Jhc2VJc0FyZ3VtZW50cycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGNoZWNrIG9iamVjdHMgZm9yIG93biBwcm9wZXJ0aWVzLiAqL1xudmFyIGhhc093blByb3BlcnR5ID0gb2JqZWN0UHJvdG8uaGFzT3duUHJvcGVydHk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgbGlrZWx5IGFuIGBhcmd1bWVudHNgIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhbiBgYXJndW1lbnRzYCBvYmplY3QsXG4gKiAgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoWzEsIDIsIDNdKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbnZhciBpc0FyZ3VtZW50cyA9IGJhc2VJc0FyZ3VtZW50cyhmdW5jdGlvbigpIHsgcmV0dXJuIGFyZ3VtZW50czsgfSgpKSA/IGJhc2VJc0FyZ3VtZW50cyA6IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdjYWxsZWUnKSAmJlxuICAgICFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlLCAnY2FsbGVlJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJndW1lbnRzO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290JyksXG4gICAgc3R1YkZhbHNlID0gcmVxdWlyZSgnLi9zdHViRmFsc2UnKTtcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBleHBvcnRzYC4gKi9cbnZhciBmcmVlRXhwb3J0cyA9IHR5cGVvZiBleHBvcnRzID09ICdvYmplY3QnICYmIGV4cG9ydHMgJiYgIWV4cG9ydHMubm9kZVR5cGUgJiYgZXhwb3J0cztcblxuLyoqIERldGVjdCBmcmVlIHZhcmlhYmxlIGBtb2R1bGVgLiAqL1xudmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICdvYmplY3QnICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTtcblxuLyoqIERldGVjdCB0aGUgcG9wdWxhciBDb21tb25KUyBleHRlbnNpb24gYG1vZHVsZS5leHBvcnRzYC4gKi9cbnZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBCdWZmZXIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdC5CdWZmZXIgOiB1bmRlZmluZWQ7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVJc0J1ZmZlciA9IEJ1ZmZlciA/IEJ1ZmZlci5pc0J1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlci5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMy4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGJ1ZmZlciwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzQnVmZmVyKG5ldyBCdWZmZXIoMikpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IFVpbnQ4QXJyYXkoMikpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQnVmZmVyO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihtb2R1bGUpIHtcblx0aWYgKCFtb2R1bGUud2VicGFja1BvbHlmaWxsKSB7XG5cdFx0bW9kdWxlLmRlcHJlY2F0ZSA9IGZ1bmN0aW9uKCkge307XG5cdFx0bW9kdWxlLnBhdGhzID0gW107XG5cdFx0Ly8gbW9kdWxlLnBhcmVudCA9IHVuZGVmaW5lZCBieSBkZWZhdWx0XG5cdFx0aWYgKCFtb2R1bGUuY2hpbGRyZW4pIG1vZHVsZS5jaGlsZHJlbiA9IFtdO1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2R1bGUsIFwibG9hZGVkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmw7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJpZFwiLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIG1vZHVsZS5pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG1vZHVsZS53ZWJwYWNrUG9seWZpbGwgPSAxO1xuXHR9XG5cdHJldHVybiBtb2R1bGU7XG59O1xuIiwiLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgTUFYX1NBRkVfSU5URUdFUiA9IDkwMDcxOTkyNTQ3NDA5OTE7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCB1bnNpZ25lZCBpbnRlZ2VyIHZhbHVlcy4gKi9cbnZhciByZUlzVWludCA9IC9eKD86MHxbMS05XVxcZCopJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBhcnJheS1saWtlIGluZGV4LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPU1BWF9TQUZFX0lOVEVHRVJdIFRoZSB1cHBlciBib3VuZHMgb2YgYSB2YWxpZCBpbmRleC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgaW5kZXgsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNJbmRleCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICBsZW5ndGggPSBsZW5ndGggPT0gbnVsbCA/IE1BWF9TQUZFX0lOVEVHRVIgOiBsZW5ndGg7XG5cbiAgcmV0dXJuICEhbGVuZ3RoICYmXG4gICAgKHR5cGUgPT0gJ251bWJlcicgfHxcbiAgICAgICh0eXBlICE9ICdzeW1ib2wnICYmIHJlSXNVaW50LnRlc3QodmFsdWUpKSkgJiZcbiAgICAgICAgKHZhbHVlID4gLTEgJiYgdmFsdWUgJSAxID09IDAgJiYgdmFsdWUgPCBsZW5ndGgpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzSW5kZXg7XG4iLCJ2YXIgYmFzZUlzVHlwZWRBcnJheSA9IHJlcXVpcmUoJy4vX2Jhc2VJc1R5cGVkQXJyYXknKSxcbiAgICBiYXNlVW5hcnkgPSByZXF1aXJlKCcuL19iYXNlVW5hcnknKSxcbiAgICBub2RlVXRpbCA9IHJlcXVpcmUoJy4vX25vZGVVdGlsJyk7XG5cbi8qIE5vZGUuanMgaGVscGVyIHJlZmVyZW5jZXMuICovXG52YXIgbm9kZUlzVHlwZWRBcnJheSA9IG5vZGVVdGlsICYmIG5vZGVVdGlsLmlzVHlwZWRBcnJheTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgdHlwZWQgYXJyYXkuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShuZXcgVWludDhBcnJheSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc1R5cGVkQXJyYXkoW10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzVHlwZWRBcnJheSA9IG5vZGVJc1R5cGVkQXJyYXkgPyBiYXNlVW5hcnkobm9kZUlzVHlwZWRBcnJheSkgOiBiYXNlSXNUeXBlZEFycmF5O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzVHlwZWRBcnJheTtcbiIsInZhciBpc0Z1bmN0aW9uID0gcmVxdWlyZSgnLi9pc0Z1bmN0aW9uJyksXG4gICAgaXNMZW5ndGggPSByZXF1aXJlKCcuL2lzTGVuZ3RoJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYXJyYXktbGlrZS4gQSB2YWx1ZSBpcyBjb25zaWRlcmVkIGFycmF5LWxpa2UgaWYgaXQnc1xuICogbm90IGEgZnVuY3Rpb24gYW5kIGhhcyBhIGB2YWx1ZS5sZW5ndGhgIHRoYXQncyBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiBvclxuICogZXF1YWwgdG8gYDBgIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYE51bWJlci5NQVhfU0FGRV9JTlRFR0VSYC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzQXJyYXlMaWtlKGRvY3VtZW50LmJvZHkuY2hpbGRyZW4pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoJ2FiYycpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoXy5ub29wKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIGlzTGVuZ3RoKHZhbHVlLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24odmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzQXJyYXlMaWtlO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIHN1aXRhYmxlIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaWYgc3VpdGFibGUgZm9yIHN0cmljdFxuICogIGVxdWFsaXR5IGNvbXBhcmlzb25zLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaWN0Q29tcGFyYWJsZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IHZhbHVlICYmICFpc09iamVjdCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTdHJpY3RDb21wYXJhYmxlO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYG1hdGNoZXNQcm9wZXJ0eWAgZm9yIHNvdXJjZSB2YWx1ZXMgc3VpdGFibGVcbiAqIGZvciBzdHJpY3QgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGkuZS4gYD09PWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZShrZXksIHNyY1ZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmplY3QpIHtcbiAgICBpZiAob2JqZWN0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG9iamVjdFtrZXldID09PSBzcmNWYWx1ZSAmJlxuICAgICAgKHNyY1ZhbHVlICE9PSB1bmRlZmluZWQgfHwgKGtleSBpbiBPYmplY3Qob2JqZWN0KSkpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlO1xuIiwidmFyIGNhc3RQYXRoID0gcmVxdWlyZSgnLi9fY2FzdFBhdGgnKSxcbiAgICB0b0tleSA9IHJlcXVpcmUoJy4vX3RvS2V5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uZ2V0YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZmF1bHQgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlc29sdmVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBiYXNlR2V0KG9iamVjdCwgcGF0aCkge1xuICBwYXRoID0gY2FzdFBhdGgocGF0aCwgb2JqZWN0KTtcblxuICB2YXIgaW5kZXggPSAwLFxuICAgICAgbGVuZ3RoID0gcGF0aC5sZW5ndGg7XG5cbiAgd2hpbGUgKG9iamVjdCAhPSBudWxsICYmIGluZGV4IDwgbGVuZ3RoKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0W3RvS2V5KHBhdGhbaW5kZXgrK10pXTtcbiAgfVxuICByZXR1cm4gKGluZGV4ICYmIGluZGV4ID09IGxlbmd0aCkgPyBvYmplY3QgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUdldDtcbiIsInZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNLZXkgPSByZXF1aXJlKCcuL19pc0tleScpLFxuICAgIHN0cmluZ1RvUGF0aCA9IHJlcXVpcmUoJy4vX3N0cmluZ1RvUGF0aCcpLFxuICAgIHRvU3RyaW5nID0gcmVxdWlyZSgnLi90b1N0cmluZycpO1xuXG4vKipcbiAqIENhc3RzIGB2YWx1ZWAgdG8gYSBwYXRoIGFycmF5IGlmIGl0J3Mgbm90IG9uZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNhc3QgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xuZnVuY3Rpb24gY2FzdFBhdGgodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIGlzS2V5KHZhbHVlLCBvYmplY3QpID8gW3ZhbHVlXSA6IHN0cmluZ1RvUGF0aCh0b1N0cmluZyh2YWx1ZSkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNhc3RQYXRoO1xuIiwiZXhwb3J0IHZhciBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyID0ge1xuICAgIG5vdzogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgcGVyZm9ybWFuY2UpLm5vdygpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmV4cG9ydCB2YXIgYW5pbWF0aW9uRnJhbWVQcm92aWRlciA9IHtcbiAgICBzY2hlZHVsZTogZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciByZXF1ZXN0ID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB2YXIgY2FuY2VsID0gY2FuY2VsQW5pbWF0aW9uRnJhbWU7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgICAgcmVxdWVzdCA9IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZTtcbiAgICAgICAgICAgIGNhbmNlbCA9IGRlbGVnYXRlLmNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuICAgICAgICB9XG4gICAgICAgIHZhciBoYW5kbGUgPSByZXF1ZXN0KGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcbiAgICAgICAgICAgIGNhbmNlbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbihmdW5jdGlvbiAoKSB7IHJldHVybiBjYW5jZWwgPT09IG51bGwgfHwgY2FuY2VsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjYW5jZWwoaGFuZGxlKTsgfSk7XG4gICAgfSxcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVsZWdhdGUgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB8fCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBjYW5jZWxBbmltYXRpb25GcmFtZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZSkgfHwgY2FuY2VsQW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSk7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZTogdW5kZWZpbmVkLFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uLy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciB9IGZyb20gJy4uLy4uL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyJztcbmltcG9ydCB7IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWVQcm92aWRlcic7XG5leHBvcnQgZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzKHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgcmV0dXJuIHRpbWVzdGFtcFByb3ZpZGVyID8gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgOiBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVM7XG59XG5mdW5jdGlvbiBhbmltYXRpb25GcmFtZXNGYWN0b3J5KHRpbWVzdGFtcFByb3ZpZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBwcm92aWRlciA9IHRpbWVzdGFtcFByb3ZpZGVyIHx8IHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXI7XG4gICAgICAgIHZhciBzdGFydCA9IHByb3ZpZGVyLm5vdygpO1xuICAgICAgICB2YXIgaWQgPSAwO1xuICAgICAgICB2YXIgcnVuID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIGlkID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlci5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBpZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhciBub3cgPSBwcm92aWRlci5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wUHJvdmlkZXIgPyBub3cgOiB0aW1lc3RhbXAsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGFwc2VkOiBub3cgLSBzdGFydCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJ1bigpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBydW4oKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxudmFyIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUyA9IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuaW1hdGlvbkZyYW1lcy5qcy5tYXAiLCJ2YXIgbmV4dEhhbmRsZSA9IDE7XG52YXIgcmVzb2x2ZWQ7XG52YXIgYWN0aXZlSGFuZGxlcyA9IHt9O1xuZnVuY3Rpb24gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSkge1xuICAgIGlmIChoYW5kbGUgaW4gYWN0aXZlSGFuZGxlcykge1xuICAgICAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGVdO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZXhwb3J0IHZhciBJbW1lZGlhdGUgPSB7XG4gICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbiAoY2IpIHtcbiAgICAgICAgdmFyIGhhbmRsZSA9IG5leHRIYW5kbGUrKztcbiAgICAgICAgYWN0aXZlSGFuZGxlc1toYW5kbGVdID0gdHJ1ZTtcbiAgICAgICAgaWYgKCFyZXNvbHZlZCkge1xuICAgICAgICAgICAgcmVzb2x2ZWQgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlZC50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUpICYmIGNiKCk7IH0pO1xuICAgICAgICByZXR1cm4gaGFuZGxlO1xuICAgIH0sXG4gICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uIChoYW5kbGUpIHtcbiAgICAgICAgZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSk7XG4gICAgfSxcbn07XG5leHBvcnQgdmFyIFRlc3RUb29scyA9IHtcbiAgICBwZW5kaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhhY3RpdmVIYW5kbGVzKS5sZW5ndGg7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUltbWVkaWF0ZS5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEltbWVkaWF0ZSB9IGZyb20gJy4uL3V0aWwvSW1tZWRpYXRlJztcbnZhciBzZXRJbW1lZGlhdGUgPSBJbW1lZGlhdGUuc2V0SW1tZWRpYXRlLCBjbGVhckltbWVkaWF0ZSA9IEltbWVkaWF0ZS5jbGVhckltbWVkaWF0ZTtcbmV4cG9ydCB2YXIgaW1tZWRpYXRlUHJvdmlkZXIgPSB7XG4gICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW1tZWRpYXRlUHJvdmlkZXIuZGVsZWdhdGU7XG4gICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTtcbiAgICB9LFxuICAgIGNsZWFySW1tZWRpYXRlOiBmdW5jdGlvbiAoaGFuZGxlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGltbWVkaWF0ZVByb3ZpZGVyLmRlbGVnYXRlO1xuICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbW1lZGlhdGUpIHx8IGNsZWFySW1tZWRpYXRlKShoYW5kbGUpO1xuICAgIH0sXG4gICAgZGVsZWdhdGU6IHVuZGVmaW5lZCxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbW1lZGlhdGVQcm92aWRlci5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBpbW1lZGlhdGVQcm92aWRlciB9IGZyb20gJy4vaW1tZWRpYXRlUHJvdmlkZXInO1xudmFyIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzYXBBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc2FwQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGltbWVkaWF0ZVByb3ZpZGVyLnNldEltbWVkaWF0ZShzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHVuZGVmaW5lZCkpKTtcbiAgICB9O1xuICAgIEFzYXBBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIGlmIChkZWxheSAhPSBudWxsID8gZGVsYXkgPiAwIDogdGhpcy5kZWxheSA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2EgPSBhY3Rpb25zW2FjdGlvbnMubGVuZ3RoIC0gMV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pZCkgIT09IGlkKSB7XG4gICAgICAgICAgICBpbW1lZGlhdGVQcm92aWRlci5jbGVhckltbWVkaWF0ZShpZCk7XG4gICAgICAgICAgICBpZiAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHJldHVybiBBc2FwQWN0aW9uO1xufShBc3luY0FjdGlvbikpO1xuZXhwb3J0IHsgQXNhcEFjdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXNhcEFjdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBBc2FwQWN0aW9uIH0gZnJvbSAnLi9Bc2FwQWN0aW9uJztcbmltcG9ydCB7IEFzYXBTY2hlZHVsZXIgfSBmcm9tICcuL0FzYXBTY2hlZHVsZXInO1xuZXhwb3J0IHZhciBhc2FwU2NoZWR1bGVyID0gbmV3IEFzYXBTY2hlZHVsZXIoQXNhcEFjdGlvbik7XG5leHBvcnQgdmFyIGFzYXAgPSBhc2FwU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNhcC5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi9Bc3luY1NjaGVkdWxlcic7XG52YXIgQXNhcFNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEFzYXBTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXNhcFNjaGVkdWxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBBc2FwU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdmFyIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7XG4gICAgICAgIHRoaXMuX3NjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIHZhciBlcnJvcjtcbiAgICAgICAgYWN0aW9uID0gYWN0aW9uIHx8IGFjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpO1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXNhcFNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydCB7IEFzYXBTY2hlZHVsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzYXBTY2hlZHVsZXIuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xudmFyIFF1ZXVlQWN0aW9uID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoUXVldWVBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUXVldWVBY3Rpb24oc2NoZWR1bGVyLCB3b3JrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53b3JrID0gd29yaztcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBRdWV1ZUFjdGlvbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7IGRlbGF5ID0gMDsgfVxuICAgICAgICBpZiAoZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFF1ZXVlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gZGVsYXkgPiAwIHx8IHRoaXMuY2xvc2VkID8gX3N1cGVyLnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KSA6IHRoaXMuX2V4ZWN1dGUoc3RhdGUsIGRlbGF5KTtcbiAgICB9O1xuICAgIFF1ZXVlQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKChkZWxheSAhPSBudWxsICYmIGRlbGF5ID4gMCkgfHwgKGRlbGF5ID09IG51bGwgJiYgdGhpcy5kZWxheSA+IDApKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlZHVsZXIuZmx1c2godGhpcyk7XG4gICAgICAgIHJldHVybiAwO1xuICAgIH07XG4gICAgcmV0dXJuIFF1ZXVlQWN0aW9uO1xufShBc3luY0FjdGlvbikpO1xuZXhwb3J0IHsgUXVldWVBY3Rpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVF1ZXVlQWN0aW9uLmpzLm1hcCIsImltcG9ydCB7IFF1ZXVlQWN0aW9uIH0gZnJvbSAnLi9RdWV1ZUFjdGlvbic7XG5pbXBvcnQgeyBRdWV1ZVNjaGVkdWxlciB9IGZyb20gJy4vUXVldWVTY2hlZHVsZXInO1xuZXhwb3J0IHZhciBxdWV1ZVNjaGVkdWxlciA9IG5ldyBRdWV1ZVNjaGVkdWxlcihRdWV1ZUFjdGlvbik7XG5leHBvcnQgdmFyIHF1ZXVlID0gcXVldWVTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWV1ZS5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi9Bc3luY1NjaGVkdWxlcic7XG52YXIgUXVldWVTY2hlZHVsZXIgPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhRdWV1ZVNjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWV1ZVNjaGVkdWxlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICByZXR1cm4gUXVldWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnQgeyBRdWV1ZVNjaGVkdWxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9UXVldWVTY2hlZHVsZXIuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xuaW1wb3J0IHsgYW5pbWF0aW9uRnJhbWVQcm92aWRlciB9IGZyb20gJy4vYW5pbWF0aW9uRnJhbWVQcm92aWRlcic7XG52YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBbmltYXRpb25GcmFtZUFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZUFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh1bmRlZmluZWQpOyB9KSk7XG4gICAgfTtcbiAgICBBbmltYXRpb25GcmFtZUFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKGRlbGF5ICE9IG51bGwgPyBkZWxheSA+IDAgOiB0aGlzLmRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgKChfYSA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmlkKSAhPT0gaWQpIHtcbiAgICAgICAgICAgIGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgICAgICAgc2NoZWR1bGVyLl9zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHJldHVybiBBbmltYXRpb25GcmFtZUFjdGlvbjtcbn0oQXN5bmNBY3Rpb24pKTtcbmV4cG9ydCB7IEFuaW1hdGlvbkZyYW1lQWN0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BbmltYXRpb25GcmFtZUFjdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBBbmltYXRpb25GcmFtZUFjdGlvbiB9IGZyb20gJy4vQW5pbWF0aW9uRnJhbWVBY3Rpb24nO1xuaW1wb3J0IHsgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgfSBmcm9tICcuL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyJztcbmV4cG9ydCB2YXIgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoQW5pbWF0aW9uRnJhbWVBY3Rpb24pO1xuZXhwb3J0IHZhciBhbmltYXRpb25GcmFtZSA9IGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YW5pbWF0aW9uRnJhbWUuanMubWFwIiwiaW1wb3J0IHsgX19leHRlbmRzIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xudmFyIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgICB2YXIgZmx1c2hJZCA9IHRoaXMuX3NjaGVkdWxlZDtcbiAgICAgICAgdGhpcy5fc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICBhY3Rpb24gPSBhY3Rpb24gfHwgYWN0aW9ucy5zaGlmdCgpO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICBpZiAoKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSk7XG4gICAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSkge1xuICAgICAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydCB7IEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BbmltYXRpb25GcmFtZVNjaGVkdWxlci5qcy5tYXAiLCJpbXBvcnQgeyBfX2V4dGVuZHMgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgQXN5bmNTY2hlZHVsZXIgfSBmcm9tICcuL0FzeW5jU2NoZWR1bGVyJztcbnZhciBWaXJ0dWFsVGltZVNjaGVkdWxlciA9IChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFZpcnR1YWxUaW1lU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyKHNjaGVkdWxlckFjdGlvbkN0b3IsIG1heEZyYW1lcykge1xuICAgICAgICBpZiAoc2NoZWR1bGVyQWN0aW9uQ3RvciA9PT0gdm9pZCAwKSB7IHNjaGVkdWxlckFjdGlvbkN0b3IgPSBWaXJ0dWFsQWN0aW9uOyB9XG4gICAgICAgIGlmIChtYXhGcmFtZXMgPT09IHZvaWQgMCkgeyBtYXhGcmFtZXMgPSBJbmZpbml0eTsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXJBY3Rpb25DdG9yLCBmdW5jdGlvbiAoKSB7IHJldHVybiBfdGhpcy5mcmFtZTsgfSkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubWF4RnJhbWVzID0gbWF4RnJhbWVzO1xuICAgICAgICBfdGhpcy5mcmFtZSA9IDA7XG4gICAgICAgIF90aGlzLmluZGV4ID0gLTE7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVmlydHVhbFRpbWVTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBhY3Rpb25zID0gX2EuYWN0aW9ucywgbWF4RnJhbWVzID0gX2EubWF4RnJhbWVzO1xuICAgICAgICB2YXIgZXJyb3I7XG4gICAgICAgIHZhciBhY3Rpb247XG4gICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmRlbGF5IDw9IG1heEZyYW1lcykge1xuICAgICAgICAgICAgYWN0aW9ucy5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5mcmFtZSA9IGFjdGlvbi5kZWxheTtcbiAgICAgICAgICAgIGlmICgoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWaXJ0dWFsVGltZVNjaGVkdWxlci5mcmFtZVRpbWVGYWN0b3IgPSAxMDtcbiAgICByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnQgeyBWaXJ0dWFsVGltZVNjaGVkdWxlciB9O1xudmFyIFZpcnR1YWxBY3Rpb24gPSAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhWaXJ0dWFsQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFZpcnR1YWxBY3Rpb24oc2NoZWR1bGVyLCB3b3JrLCBpbmRleCkge1xuICAgICAgICBpZiAoaW5kZXggPT09IHZvaWQgMCkgeyBpbmRleCA9IChzY2hlZHVsZXIuaW5kZXggKz0gMSk7IH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBfdGhpcy5pbmRleCA9IHNjaGVkdWxlci5pbmRleCA9IGluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkgeyBkZWxheSA9IDA7IH1cbiAgICAgICAgaWYgKE51bWJlci5pc0Zpbml0ZShkZWxheSkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5pZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgYWN0aW9uID0gbmV3IFZpcnR1YWxBY3Rpb24odGhpcy5zY2hlZHVsZXIsIHRoaXMud29yayk7XG4gICAgICAgICAgICB0aGlzLmFkZChhY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIGFjdGlvbi5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHRoaXMuZGVsYXkgPSBzY2hlZHVsZXIuZnJhbWUgKyBkZWxheTtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSBzY2hlZHVsZXIuYWN0aW9ucztcbiAgICAgICAgYWN0aW9ucy5wdXNoKHRoaXMpO1xuICAgICAgICBhY3Rpb25zLnNvcnQoVmlydHVhbEFjdGlvbi5zb3J0QWN0aW9ucyk7XG4gICAgICAgIHJldHVybiAxO1xuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHsgZGVsYXkgPSAwOyB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBWaXJ0dWFsQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlID09PSB0cnVlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5fZXhlY3V0ZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24uc29ydEFjdGlvbnMgPSBmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICBpZiAoYS5kZWxheSA9PT0gYi5kZWxheSkge1xuICAgICAgICAgICAgaWYgKGEuaW5kZXggPT09IGIuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGEuaW5kZXggPiBiLmluZGV4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYS5kZWxheSA+IGIuZGVsYXkpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gVmlydHVhbEFjdGlvbjtcbn0oQXN5bmNBY3Rpb24pKTtcbmV4cG9ydCB7IFZpcnR1YWxBY3Rpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JzZXJ2YWJsZShvYmopIHtcbiAgICByZXR1cm4gISFvYmogJiYgKG9iaiBpbnN0YW5jZW9mIE9ic2VydmFibGUgfHwgKGlzRnVuY3Rpb24ob2JqLmxpZnQpICYmIGlzRnVuY3Rpb24ob2JqLnN1YnNjcmliZSkpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzT2JzZXJ2YWJsZS5qcy5tYXAiLCJpbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi91dGlsL0VtcHR5RXJyb3InO1xuZXhwb3J0IGZ1bmN0aW9uIGxhc3RWYWx1ZUZyb20oc291cmNlLCBjb25maWcpIHtcbiAgICB2YXIgaGFzQ29uZmlnID0gdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCc7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIF9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgX3ZhbHVlO1xuICAgICAgICBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIF9oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXJyb3I6IHJlamVjdCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF92YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGhhc0NvbmZpZykge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbmZpZy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KG5ldyBFbXB0eUVycm9yKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bGFzdFZhbHVlRnJvbS5qcy5tYXAiLCJpbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgU2FmZVN1YnNjcmliZXIgfSBmcm9tICcuL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0VmFsdWVGcm9tKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgdmFyIGhhc0NvbmZpZyA9IHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHtcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogcmVqZWN0LFxuICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzQ29uZmlnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29uZmlnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QobmV3IEVtcHR5RXJyb3IoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maXJzdFZhbHVlRnJvbS5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBzdWJzY3JpYmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9zdWJzY3JpYmVPbic7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbmltcG9ydCB7IG9ic2VydmVPbiB9IGZyb20gJy4uL29wZXJhdG9ycy9vYnNlcnZlT24nO1xuaW1wb3J0IHsgQXN5bmNTdWJqZWN0IH0gZnJvbSAnLi4vQXN5bmNTdWJqZWN0JztcbmV4cG9ydCBmdW5jdGlvbiBiaW5kQ2FsbGJhY2tJbnRlcm5hbHMoaXNOb2RlU3R5bGUsIGNhbGxiYWNrRnVuYywgcmVzdWx0U2VsZWN0b3IsIHNjaGVkdWxlcikge1xuICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICBpZiAoaXNTY2hlZHVsZXIocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kQ2FsbGJhY2tJbnRlcm5hbHMoaXNOb2RlU3R5bGUsIGNhbGxiYWNrRnVuYywgc2NoZWR1bGVyKVxuICAgICAgICAgICAgICAgICAgICAuYXBwbHkodGhpcywgYXJncylcbiAgICAgICAgICAgICAgICAgICAgLnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmluZENhbGxiYWNrSW50ZXJuYWxzKGlzTm9kZVN0eWxlLCBjYWxsYmFja0Z1bmMpXG4gICAgICAgICAgICAgICAgLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICAgICAgICAgICAgLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzdWJqZWN0ID0gbmV3IEFzeW5jU3ViamVjdCgpO1xuICAgICAgICB2YXIgdW5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIHN1YnMgPSBzdWJqZWN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIGlmICh1bmluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICAgICAgdW5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHZhciBpc0FzeW5jXzEgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB2YXIgaXNDb21wbGV0ZV8xID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2tGdW5jLmFwcGx5KF90aGlzLCBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSksIFtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdHMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0c1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzTm9kZVN0eWxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlc3VsdHMuc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KDEgPCByZXN1bHRzLmxlbmd0aCA/IHJlc3VsdHMgOiByZXN1bHRzWzBdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGxldGVfMSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBc3luY18xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIF0pKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNDb21wbGV0ZV8xKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNBc3luY18xID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWJzO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmluZENhbGxiYWNrSW50ZXJuYWxzLmpzLm1hcCIsImltcG9ydCB7IGJpbmRDYWxsYmFja0ludGVybmFscyB9IGZyb20gJy4vYmluZENhbGxiYWNrSW50ZXJuYWxzJztcbmV4cG9ydCBmdW5jdGlvbiBiaW5kQ2FsbGJhY2soY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIGJpbmRDYWxsYmFja0ludGVybmFscyhmYWxzZSwgY2FsbGJhY2tGdW5jLCByZXN1bHRTZWxlY3Rvciwgc2NoZWR1bGVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJpbmRDYWxsYmFjay5qcy5tYXAiLCJpbXBvcnQgeyBiaW5kQ2FsbGJhY2tJbnRlcm5hbHMgfSBmcm9tICcuL2JpbmRDYWxsYmFja0ludGVybmFscyc7XG5leHBvcnQgZnVuY3Rpb24gYmluZE5vZGVDYWxsYmFjayhjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gYmluZENhbGxiYWNrSW50ZXJuYWxzKHRydWUsIGNhbGxiYWNrRnVuYywgcmVzdWx0U2VsZWN0b3IsIHNjaGVkdWxlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iaW5kTm9kZUNhbGxiYWNrLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBkZWZlcihvYnNlcnZhYmxlRmFjdG9yeSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBpbm5lckZyb20ob2JzZXJ2YWJsZUZhY3RvcnkoKSkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVmZXIuanMubWFwIiwiaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICcuL2RlZmVyJztcbnZhciBERUZBVUxUX0NPTkZJRyA9IHtcbiAgICBjb25uZWN0b3I6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdWJqZWN0KCk7IH0sXG4gICAgcmVzZXRPbkRpc2Nvbm5lY3Q6IHRydWUsXG59O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbm5lY3RhYmxlKHNvdXJjZSwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7IGNvbmZpZyA9IERFRkFVTFRfQ09ORklHOyB9XG4gICAgdmFyIGNvbm5lY3Rpb24gPSBudWxsO1xuICAgIHZhciBjb25uZWN0b3IgPSBjb25maWcuY29ubmVjdG9yLCBfYSA9IGNvbmZpZy5yZXNldE9uRGlzY29ubmVjdCwgcmVzZXRPbkRpc2Nvbm5lY3QgPSBfYSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9hO1xuICAgIHZhciBzdWJqZWN0ID0gY29ubmVjdG9yKCk7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHJldHVybiBzdWJqZWN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9KTtcbiAgICByZXN1bHQuY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFjb25uZWN0aW9uIHx8IGNvbm5lY3Rpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gZGVmZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gc291cmNlOyB9KS5zdWJzY3JpYmUoc3ViamVjdCk7XG4gICAgICAgICAgICBpZiAocmVzZXRPbkRpc2Nvbm5lY3QpIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLmFkZChmdW5jdGlvbiAoKSB7IHJldHVybiAoc3ViamVjdCA9IGNvbm5lY3RvcigpKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247XG4gICAgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29ubmVjdGFibGUuanMubWFwIiwiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgYXJnc0FyZ0FycmF5T3JPYmplY3QgfSBmcm9tICcuLi91dGlsL2FyZ3NBcmdBcnJheU9yT2JqZWN0JztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmltcG9ydCB7IHBvcFJlc3VsdFNlbGVjdG9yIH0gZnJvbSAnLi4vdXRpbC9hcmdzJztcbmltcG9ydCB7IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlciB9IGZyb20gJy4uL29wZXJhdG9ycy9PcGVyYXRvclN1YnNjcmliZXInO1xuaW1wb3J0IHsgbWFwT25lT3JNYW55QXJncyB9IGZyb20gJy4uL3V0aWwvbWFwT25lT3JNYW55QXJncyc7XG5pbXBvcnQgeyBjcmVhdGVPYmplY3QgfSBmcm9tICcuLi91dGlsL2NyZWF0ZU9iamVjdCc7XG5leHBvcnQgZnVuY3Rpb24gZm9ya0pvaW4oKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IHBvcFJlc3VsdFNlbGVjdG9yKGFyZ3MpO1xuICAgIHZhciBfYSA9IGFyZ3NBcmdBcnJheU9yT2JqZWN0KGFyZ3MpLCBzb3VyY2VzID0gX2EuYXJncywga2V5cyA9IF9hLmtleXM7XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBsZW5ndGggPSBzb3VyY2VzLmxlbmd0aDtcbiAgICAgICAgaWYgKCFsZW5ndGgpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdmFsdWVzID0gbmV3IEFycmF5KGxlbmd0aCk7XG4gICAgICAgIHZhciByZW1haW5pbmdDb21wbGV0aW9ucyA9IGxlbmd0aDtcbiAgICAgICAgdmFyIHJlbWFpbmluZ0VtaXNzaW9ucyA9IGxlbmd0aDtcbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlSW5kZXgpIHtcbiAgICAgICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaW5uZXJGcm9tKHNvdXJjZXNbc291cmNlSW5kZXhdKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZW1haW5pbmdFbWlzc2lvbnMtLTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVzW3NvdXJjZUluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtYWluaW5nQ29tcGxldGlvbnMtLTsgfSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdDb21wbGV0aW9ucyB8fCAhaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdFbWlzc2lvbnMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChrZXlzID8gY3JlYXRlT2JqZWN0KGtleXMsIHZhbHVlcykgOiB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIHNvdXJjZUluZGV4ID0gMDsgc291cmNlSW5kZXggPCBsZW5ndGg7IHNvdXJjZUluZGV4KyspIHtcbiAgICAgICAgICAgIF9sb29wXzEoc291cmNlSW5kZXgpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdFNlbGVjdG9yID8gcmVzdWx0LnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpIDogcmVzdWx0O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9ya0pvaW4uanMubWFwIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpbm5lckZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2lubmVyRnJvbSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4uL29wZXJhdG9ycy9tZXJnZU1hcCc7XG5pbXBvcnQgeyBpc0FycmF5TGlrZSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheUxpa2UnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBtYXBPbmVPck1hbnlBcmdzIH0gZnJvbSAnLi4vdXRpbC9tYXBPbmVPck1hbnlBcmdzJztcbnZhciBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcyA9IFsnYWRkTGlzdGVuZXInLCAncmVtb3ZlTGlzdGVuZXInXTtcbnZhciBldmVudFRhcmdldE1ldGhvZHMgPSBbJ2FkZEV2ZW50TGlzdGVuZXInLCAncmVtb3ZlRXZlbnRMaXN0ZW5lciddO1xudmFyIGpxdWVyeU1ldGhvZHMgPSBbJ29uJywgJ29mZiddO1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudCh0YXJnZXQsIGV2ZW50TmFtZSwgb3B0aW9ucywgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAoaXNGdW5jdGlvbihvcHRpb25zKSkge1xuICAgICAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7XG4gICAgICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKS5waXBlKG1hcE9uZU9yTWFueUFyZ3MocmVzdWx0U2VsZWN0b3IpKTtcbiAgICB9XG4gICAgdmFyIF9hID0gX19yZWFkKGlzRXZlbnRUYXJnZXQodGFyZ2V0KVxuICAgICAgICA/IGV2ZW50VGFyZ2V0TWV0aG9kcy5tYXAoZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKTsgfTsgfSlcbiAgICAgICAgOlxuICAgICAgICAgICAgaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KVxuICAgICAgICAgICAgICAgID8gbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSlcbiAgICAgICAgICAgICAgICA6IGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KVxuICAgICAgICAgICAgICAgICAgICA/IGpxdWVyeU1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSlcbiAgICAgICAgICAgICAgICAgICAgOiBbXSwgMiksIGFkZCA9IF9hWzBdLCByZW1vdmUgPSBfYVsxXTtcbiAgICBpZiAoIWFkZCkge1xuICAgICAgICBpZiAoaXNBcnJheUxpa2UodGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG1lcmdlTWFwKGZ1bmN0aW9uIChzdWJUYXJnZXQpIHsgcmV0dXJuIGZyb21FdmVudChzdWJUYXJnZXQsIGV2ZW50TmFtZSwgb3B0aW9ucyk7IH0pKGlubmVyRnJvbSh0YXJnZXQpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWFkZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGV2ZW50IHRhcmdldCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KDEgPCBhcmdzLmxlbmd0aCA/IGFyZ3MgOiBhcmdzWzBdKTtcbiAgICAgICAgfTtcbiAgICAgICAgYWRkKGhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlKGhhbmRsZXIpOyB9O1xuICAgIH0pO1xufVxuZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1ldGhvZE5hbWUpIHsgcmV0dXJuIGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyKTsgfTsgfTtcbn1cbmZ1bmN0aW9uIGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHRhcmdldC5hZGRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbih0YXJnZXQucmVtb3ZlTGlzdGVuZXIpO1xufVxuZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpIHtcbiAgICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7XG59XG5mdW5jdGlvbiBpc0V2ZW50VGFyZ2V0KHRhcmdldCkge1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKHRhcmdldC5hZGRFdmVudExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21FdmVudC5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IG1hcE9uZU9yTWFueUFyZ3MgfSBmcm9tICcuLi91dGlsL21hcE9uZU9yTWFueUFyZ3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlciwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZyb21FdmVudFBhdHRlcm4oYWRkSGFuZGxlciwgcmVtb3ZlSGFuZGxlcikucGlwZShtYXBPbmVPck1hbnlBcmdzKHJlc3VsdFNlbGVjdG9yKSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaGFuZGxlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBlID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGVbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzdWJzY3JpYmVyLm5leHQoZS5sZW5ndGggPT09IDEgPyBlWzBdIDogZSk7XG4gICAgICAgIH07XG4gICAgICAgIHZhciByZXRWYWx1ZSA9IGFkZEhhbmRsZXIoaGFuZGxlcik7XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKHJlbW92ZUhhbmRsZXIpID8gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVtb3ZlSGFuZGxlcihoYW5kbGVyLCByZXRWYWx1ZSk7IH0gOiB1bmRlZmluZWQ7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tRXZlbnRQYXR0ZXJuLmpzLm1hcCIsImltcG9ydCB7IF9fZ2VuZXJhdG9yIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuaW1wb3J0IHsgaXNTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2lzU2NoZWR1bGVyJztcbmltcG9ydCB7IGRlZmVyIH0gZnJvbSAnLi9kZWZlcic7XG5pbXBvcnQgeyBzY2hlZHVsZUl0ZXJhYmxlIH0gZnJvbSAnLi4vc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlKGluaXRpYWxTdGF0ZU9yT3B0aW9ucywgY29uZGl0aW9uLCBpdGVyYXRlLCByZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyLCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciByZXN1bHRTZWxlY3RvcjtcbiAgICB2YXIgaW5pdGlhbFN0YXRlO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIChfYSA9IGluaXRpYWxTdGF0ZU9yT3B0aW9ucywgaW5pdGlhbFN0YXRlID0gX2EuaW5pdGlhbFN0YXRlLCBjb25kaXRpb24gPSBfYS5jb25kaXRpb24sIGl0ZXJhdGUgPSBfYS5pdGVyYXRlLCBfYiA9IF9hLnJlc3VsdFNlbGVjdG9yLCByZXN1bHRTZWxlY3RvciA9IF9iID09PSB2b2lkIDAgPyBpZGVudGl0eSA6IF9iLCBzY2hlZHVsZXIgPSBfYS5zY2hlZHVsZXIpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXRlID0gaW5pdGlhbFN0YXRlT3JPcHRpb25zO1xuICAgICAgICBpZiAoIXJlc3VsdFNlbGVjdG9yT3JTY2hlZHVsZXIgfHwgaXNTY2hlZHVsZXIocmVzdWx0U2VsZWN0b3JPclNjaGVkdWxlcikpIHtcbiAgICAgICAgICAgIHJlc3VsdFNlbGVjdG9yID0gaWRlbnRpdHk7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSByZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSByZXN1bHRTZWxlY3Rvck9yU2NoZWR1bGVyO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdlbigpIHtcbiAgICAgICAgdmFyIHN0YXRlO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGluaXRpYWxTdGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIWNvbmRpdGlvbiB8fCBjb25kaXRpb24oc3RhdGUpKSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0LCByZXN1bHRTZWxlY3RvcihzdGF0ZSldO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDM7XG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IGl0ZXJhdGUoc3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkZWZlcigoc2NoZWR1bGVyXG4gICAgICAgID9cbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVkdWxlSXRlcmFibGUoZ2VuKCksIHNjaGVkdWxlcik7IH1cbiAgICAgICAgOlxuICAgICAgICAgICAgZ2VuKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZW5lcmF0ZS5qcy5tYXAiLCJpbXBvcnQgeyBkZWZlciB9IGZyb20gJy4vZGVmZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGlpZihjb25kaXRpb24sIHRydWVSZXN1bHQsIGZhbHNlUmVzdWx0KSB7XG4gICAgcmV0dXJuIGRlZmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIChjb25kaXRpb24oKSA/IHRydWVSZXN1bHQgOiBmYWxzZVJlc3VsdCk7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWlmLmpzLm1hcCIsImltcG9ydCB7IG1lcmdlQWxsIH0gZnJvbSAnLi4vb3BlcmF0b3JzL21lcmdlQWxsJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi9lbXB0eSc7XG5pbXBvcnQgeyBwb3BOdW1iZXIsIHBvcFNjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvYXJncyc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBtZXJnZSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcihhcmdzKTtcbiAgICB2YXIgY29uY3VycmVudCA9IHBvcE51bWJlcihhcmdzLCBJbmZpbml0eSk7XG4gICAgdmFyIHNvdXJjZXMgPSBhcmdzO1xuICAgIHJldHVybiAhc291cmNlcy5sZW5ndGhcbiAgICAgICAgP1xuICAgICAgICAgICAgRU1QVFlcbiAgICAgICAgOiBzb3VyY2VzLmxlbmd0aCA9PT0gMVxuICAgICAgICAgICAgP1xuICAgICAgICAgICAgICAgIGlubmVyRnJvbShzb3VyY2VzWzBdKVxuICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgIG1lcmdlQWxsKGNvbmN1cnJlbnQpKGZyb20oc291cmNlcywgc2NoZWR1bGVyKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXAiLCJpbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmV4cG9ydCB2YXIgTkVWRVIgPSBuZXcgT2JzZXJ2YWJsZShub29wKTtcbmV4cG9ydCBmdW5jdGlvbiBuZXZlcigpIHtcbiAgICByZXR1cm4gTkVWRVI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXZlci5qcy5tYXAiLCJpbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi9mcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBwYWlycyhvYmosIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBmcm9tKE9iamVjdC5lbnRyaWVzKG9iaiksIHNjaGVkdWxlcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYWlycy5qcy5tYXAiLCJpbXBvcnQgeyBub3QgfSBmcm9tICcuLi91dGlsL25vdCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuLi9vcGVyYXRvcnMvZmlsdGVyJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmV4cG9ydCBmdW5jdGlvbiBwYXJ0aXRpb24oc291cmNlLCBwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gW2ZpbHRlcihwcmVkaWNhdGUsIHRoaXNBcmcpKGlubmVyRnJvbShzb3VyY2UpKSwgZmlsdGVyKG5vdChwcmVkaWNhdGUsIHRoaXNBcmcpKShpbm5lckZyb20oc291cmNlKSldO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFydGl0aW9uLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi9lbXB0eSc7XG5leHBvcnQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIGNvdW50LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkge1xuICAgICAgICBjb3VudCA9IHN0YXJ0O1xuICAgICAgICBzdGFydCA9IDA7XG4gICAgfVxuICAgIGlmIChjb3VudCA8PSAwKSB7XG4gICAgICAgIHJldHVybiBFTVBUWTtcbiAgICB9XG4gICAgdmFyIGVuZCA9IGNvdW50ICsgc3RhcnQ7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHNjaGVkdWxlclxuICAgICAgICA/XG4gICAgICAgICAgICBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIHZhciBuID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuIDwgZW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobisrKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICA6XG4gICAgICAgICAgICBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgICAgIHZhciBuID0gc3RhcnQ7XG4gICAgICAgICAgICAgICAgd2hpbGUgKG4gPCBlbmQgJiYgIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChuKyspO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhbmdlLmpzLm1hcCIsImltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlubmVyRnJvbSB9IGZyb20gJy4vaW5uZXJGcm9tJztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi9lbXB0eSc7XG5leHBvcnQgZnVuY3Rpb24gdXNpbmcocmVzb3VyY2VGYWN0b3J5LCBvYnNlcnZhYmxlRmFjdG9yeSkge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgcmVzb3VyY2UgPSByZXNvdXJjZUZhY3RvcnkoKTtcbiAgICAgICAgdmFyIHJlc3VsdCA9IG9ic2VydmFibGVGYWN0b3J5KHJlc291cmNlKTtcbiAgICAgICAgdmFyIHNvdXJjZSA9IHJlc3VsdCA/IGlubmVyRnJvbShyZXN1bHQpIDogRU1QVFk7XG4gICAgICAgIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgICAgICAgICByZXNvdXJjZS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNpbmcuanMubWFwIiwiaW1wb3J0IHsgbm90IH0gZnJvbSAnLi4vdXRpbC9ub3QnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnRpdGlvbihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gW2ZpbHRlcihwcmVkaWNhdGUsIHRoaXNBcmcpKHNvdXJjZSksIGZpbHRlcihub3QocHJlZGljYXRlLCB0aGlzQXJnKSkoc291cmNlKV07XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnRpdGlvbi5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQsIF9fc3ByZWFkQXJyYXkgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFyZ3NPckFyZ0FycmF5IH0gZnJvbSAnLi4vdXRpbC9hcmdzT3JBcmdBcnJheSc7XG5pbXBvcnQgeyByYWNlV2l0aCB9IGZyb20gJy4vcmFjZVdpdGgnO1xuZXhwb3J0IGZ1bmN0aW9uIHJhY2UoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiByYWNlV2l0aC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzT3JBcmdBcnJheShhcmdzKSkpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhY2UuanMubWFwIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjd2F0Y2gge1xcbiAgY29sb3I6ICNmZmY7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NsaWVudC9zcmMvbWFpbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI3dhdGNoIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjaG9tZSB7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NsaWVudC9zcmMvanMvcGFnZXMvaG9tZVBhZ2UvaG9tZVBhZ2UuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0Usa0JBQWtCO0FBQ3BCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNob21lIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiI21hcCB7XFxuICAgIHdpZHRoOiAyMDBweDtcXG4gICAgaGVpZ2h0OiAyMDBweDtcXG4gICAgZmxvYXQ6IGxlZnQ7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY2xpZW50L3NyYy9tYXAuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksWUFBWTtJQUNaLGFBQWE7SUFDYixXQUFXO0lBQ1gsa0JBQWtCO0FBQ3RCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNtYXAge1xcbiAgICB3aWR0aDogMjAwcHg7XFxuICAgIGhlaWdodDogMjAwcHg7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIltkYXRhLXNlbGVjdGVkPXRydWVde1xcbiAgY29sb3I6IG1lZGl1bXNlYWdyZWVuO1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9jbGllbnQvc3JjL21lbnUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UscUJBQXFCO0FBQ3ZCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIltkYXRhLXNlbGVjdGVkPXRydWVde1xcbiAgY29sb3I6IG1lZGl1bXNlYWdyZWVuO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiYTYxMzc0NTZlZDE2MGQ3NjA2OTgxYWE1N2M1NTk4OTgucG5nXCI7IiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiNGYwMjgzYzZjZTI4ZTg4ODAwMGU5NzhlNTM3YTZhNTYucG5nXCI7IiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiMjI3M2UzZDhhZDkyNjRiN2RhYTViZGJmOGU2YjQ3ZjgucG5nXCI7IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8wX19fIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9ybWFsaXplLm1pbi5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzFfX18gZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9sYXlvdXQuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yX19fIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vd2F0Y2guY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8zX19fIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm90aWZpY2F0aW9uLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNF9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21lbnUuY3NzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfM19fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJcIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiXCIsXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIvKiEgbm9ybWFsaXplLmNzcyB2My4wLjIgfCBNSVQgTGljZW5zZSB8IGdpdC5pby9ub3JtYWxpemUgKi9odG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1ib2R5e21hcmdpbjowfWFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfVtoaWRkZW5dLHRlbXBsYXRle2Rpc3BsYXk6bm9uZX1he2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9YTphY3RpdmUsYTpob3ZlcntvdXRsaW5lOjB9YWJiclt0aXRsZV17Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkfWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OjcwMH1kZm57Zm9udC1zdHlsZTppdGFsaWN9aDF7Zm9udC1zaXplOjJlbTttYXJnaW46LjY3ZW0gMH1tYXJre2JhY2tncm91bmQ6I2ZmMDtjb2xvcjojMDAwfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vwe3RvcDotLjVlbX1zdWJ7Ym90dG9tOi0uMjVlbX1pbWd7Ym9yZGVyOjB9c3ZnOm5vdCg6cm9vdCl7b3ZlcmZsb3c6aGlkZGVufWZpZ3VyZXttYXJnaW46MWVtIDQwcHh9aHJ7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7aGVpZ2h0OjB9cHJle292ZXJmbG93OmF1dG99Y29kZSxrYmQscHJlLHNhbXB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bWFyZ2luOjB9YnV0dG9ue292ZXJmbG93OnZpc2libGV9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixodG1sIGlucHV0W3R5cGU9YnV0dG9uXSxpbnB1dFt0eXBlPXJlc2V0XSxpbnB1dFt0eXBlPXN1Ym1pdF17LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtjdXJzb3I6cG9pbnRlcn1idXR0b25bZGlzYWJsZWRdLGh0bWwgaW5wdXRbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dDo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MDtwYWRkaW5nOjB9aW5wdXR7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9Y2hlY2tib3hdLGlucHV0W3R5cGU9cmFkaW9de2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9aW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3h9aW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLGlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46MCAycHg7cGFkZGluZzouMzVlbSAuNjI1ZW0gLjc1ZW19bGVnZW5ke2JvcmRlcjowO3BhZGRpbmc6MH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH10YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH10ZCx0aHtwYWRkaW5nOjB9XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vZnJhbWV3b3JrL3N0eWxlcy9ub3JtYWxpemUubWluLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSwyREFBMkQsQ0FBQyxLQUFLLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLDZCQUE2QixDQUFDLEtBQUssUUFBUSxDQUFDLDJGQUEyRixhQUFhLENBQUMsNEJBQTRCLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLHNCQUFzQixZQUFZLENBQUMsUUFBUSxDQUFDLGtCQUFrQixZQUFZLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxpQkFBaUIsU0FBUyxDQUFDLFlBQVksd0JBQXdCLENBQUMsU0FBUyxlQUFlLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sYUFBYSxDQUFDLFFBQVEsYUFBYSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxHQUFHLDJCQUEyQixDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxrQkFBa0IsK0JBQStCLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLGNBQWMsbUJBQW1CLENBQUMsb0VBQW9FLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxzQ0FBc0MsY0FBYyxDQUFDLGlEQUFpRCxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sa0JBQWtCLENBQUMsdUNBQXVDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyw0RkFBNEYsV0FBVyxDQUFDLG1CQUFtQiw0QkFBNEIsQ0FBQywyQkFBMkIsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsQ0FBQywrRkFBK0YsdUJBQXVCLENBQUMsU0FBUyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsYUFBYSxDQUFDLFNBQVMsZUFBZSxDQUFDLE1BQU0sd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxTQUFTXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qISBub3JtYWxpemUuY3NzIHYzLjAuMiB8IE1JVCBMaWNlbnNlIHwgZ2l0LmlvL25vcm1hbGl6ZSAqL2h0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9YXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbWVudSxuYXYsc2VjdGlvbixzdW1tYXJ5e2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHByb2dyZXNzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmU7aGVpZ2h0OjB9W2hpZGRlbl0sdGVtcGxhdGV7ZGlzcGxheTpub25lfWF7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hOmFjdGl2ZSxhOmhvdmVye291dGxpbmU6MH1hYmJyW3RpdGxlXXtib3JkZXItYm90dG9tOjFweCBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfWRmbntmb250LXN0eWxlOml0YWxpY31oMXtmb250LXNpemU6MmVtO21hcmdpbjouNjdlbSAwfW1hcmt7YmFja2dyb3VuZDojZmYwO2NvbG9yOiMwMDB9c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0uNWVtfXN1Yntib3R0b206LS4yNWVtfWltZ3tib3JkZXI6MH1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59ZmlndXJle21hcmdpbjoxZW0gNDBweH1ocnstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MH1wcmV7b3ZlcmZsb3c6YXV0b31jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDttYXJnaW46MH1idXR0b257b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgaW5wdXRbdHlwZT1idXR0b25dLGlucHV0W3R5cGU9cmVzZXRdLGlucHV0W3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2N1cnNvcjpwb2ludGVyfWJ1dHRvbltkaXNhYmxlZF0saHRtbCBpbnB1dFtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH1pbnB1dHtsaW5lLWhlaWdodDpub3JtYWx9aW5wdXRbdHlwZT1jaGVja2JveF0saW5wdXRbdHlwZT1yYWRpb117Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1pbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24saW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkOy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveH1pbnB1dFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24saW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfWZpZWxkc2V0e2JvcmRlcjoxcHggc29saWQgc2lsdmVyO21hcmdpbjowIDJweDtwYWRkaW5nOi4zNWVtIC42MjVlbSAuNzVlbX1sZWdlbmR7Ym9yZGVyOjA7cGFkZGluZzowfXRleHRhcmVhe292ZXJmbG93OmF1dG99b3B0Z3JvdXB7Zm9udC13ZWlnaHQ6NzAwfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfXRkLHRoe3BhZGRpbmc6MH1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjbGVmdCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDAgNSU7XFxuICBmb250LWZhbWlseTogXFxcIlRyZWJ1Y2hldCBNU1xcXCIsIE9wZW5TYW5zLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbn1cXG5cXG4jbGVmdCBoMSB7XFxuICAgIGZvbnQtZmFtaWx5OiBcXFwiVHJlYnVjaGV0IE1TXFxcIiwgT3BlblNhbnMtTGlnaHQsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XFxuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICAgIGZvbnQtc2l6ZTogNDJwdDtcXG4gICAgY29sb3I6ICM1ZTVlNWU7XFxufVxcblxcbiNsZWZ0IHAge1xcbiAgICBmb250LXNpemU6IDE2cHQ7XFxuICAgIGNvbG9yOiAjOTk5OTk5O1xcbn1cXG5cXG4jbGVmdCAubm90aWZpY2F0aW9uLWZvcm0ge1xcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XFxuICAgIHBhZGRpbmc6IDIwcHg7XFxufVxcblxcbiNsZWZ0IC5ub3RpZmljYXRpb24tZm9ybSBsYWJlbCB7XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgICAgY29sb3I6IGJsYWNrO1xcbn1cXG5cXG4jbGVmdCAubm90aWZpY2F0aW9uLWZvcm0gcCB7XFxuICAgICAgY29sb3I6IGJsYWNrO1xcbiAgICAgIGZvbnQtc2l6ZTogMzBweDtcXG4gICAgICBtYXJnaW46IDA7XFxufVxcblxcbiNyaWdodCB7XFxuICBtYXJnaW4tdG9wOiA2MHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2ZyYW1ld29yay9zdHlsZXMvbGF5b3V0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLFdBQVc7RUFDWCxhQUFhO0VBQ2IsbUVBQW1FO0FBQ3JFOztBQUVBO0lBQ0kseUVBQXlFO0lBQ3pFLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsY0FBYztBQUNsQjs7QUFFQTtJQUNJLGVBQWU7SUFDZixjQUFjO0FBQ2xCOztBQUVBO0lBQ0kscUJBQXFCO0lBQ3JCLGFBQWE7QUFDakI7O0FBRUE7TUFDTSxjQUFjO01BQ2QsaUJBQWlCO01BQ2pCLFlBQVk7QUFDbEI7O0FBRUE7TUFDTSxZQUFZO01BQ1osZUFBZTtNQUNmLFNBQVM7QUFDZjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI2xlZnQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwIDUlO1xcbiAgZm9udC1mYW1pbHk6IFxcXCJUcmVidWNoZXQgTVNcXFwiLCBPcGVuU2FucywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcXG59XFxuXFxuI2xlZnQgaDEge1xcbiAgICBmb250LWZhbWlseTogXFxcIlRyZWJ1Y2hldCBNU1xcXCIsIE9wZW5TYW5zLUxpZ2h0LCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgICBmb250LXNpemU6IDQycHQ7XFxuICAgIGNvbG9yOiAjNWU1ZTVlO1xcbn1cXG5cXG4jbGVmdCBwIHtcXG4gICAgZm9udC1zaXplOiAxNnB0O1xcbiAgICBjb2xvcjogIzk5OTk5OTtcXG59XFxuXFxuI2xlZnQgLm5vdGlmaWNhdGlvbi1mb3JtIHtcXG4gICAgYmFja2dyb3VuZDogbGlnaHRncmV5O1xcbiAgICBwYWRkaW5nOiAyMHB4O1xcbn1cXG5cXG4jbGVmdCAubm90aWZpY2F0aW9uLWZvcm0gbGFiZWwge1xcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICAgIGNvbG9yOiBibGFjaztcXG59XFxuXFxuI2xlZnQgLm5vdGlmaWNhdGlvbi1mb3JtIHAge1xcbiAgICAgIGNvbG9yOiBibGFjaztcXG4gICAgICBmb250LXNpemU6IDMwcHg7XFxuICAgICAgbWFyZ2luOiAwO1xcbn1cXG5cXG4jcmlnaHQge1xcbiAgbWFyZ2luLXRvcDogNjBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuc2NyZWVue1xcbiAgcGFkZGluZy1sZWZ0OiAxLjVlbTtcXG4gIGZvbnQtZmFtaWx5OiBPcGVuU2Fucy1MaWdodDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG5cXG4jd2F0Y2gtZmFjZXtcXG4gIGhlaWdodDogMjQwcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMjQwcHg7XFxuICB0b3A6IDMwcHg7XFxuICBsZWZ0OiAyMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4jd2F0Y2h7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y0ODRBO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG59XFxuXFxuLndhdGNoe1xcbiAgcG9zaXRpb246cmVsYXRpdmU7XFxuICBtYXJnaW46MCBhdXRvO1xcbiAgd2lkdGg6MzIwcHg7XFxuICBwYWRkaW5nOjcuM2VtIDBcXG59XFxuXFxuLnBvd2VyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnBvd2VyOm50aC1jaGlsZCgxKXtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgcmlnaHQ6LTEuNGVtO1xcbiAgdG9wOiA3LjNlbTtcXG4gIGhlaWdodDozLjVlbTtcXG4gIHdpZHRoOjAuOGVtO1xcbiAgYmFja2dyb3VuZDojZTRlNGU0O1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDIpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0Oi0xLjRlbTtcXG4gIHRvcDogNy4zZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDMpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0OiA4LjhlbTtcXG4gIGJvdHRvbTotMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZyk7XFxufVxcblxcbi5wb3dlcjpudGgtY2hpbGQoNCl7XFxuICBwb3NpdGlvbjphYnNvbHV0ZTtcXG4gIGxlZnQ6IDguOGVtO1xcbiAgdG9wOiAtMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZykgcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4uY2FzZXtcXG4gIHBvc2l0aW9uOnJlbGF0aXZlO1xcbiAgei1pbmRleDoyO1xcbiAgYmFja2dyb3VuZDojMDMwMzAzO1xcbiAgd2lkdGg6MzAwcHg7XFxuICBoZWlnaHQ6MzAwcHg7XFxuICBib3JkZXItcmFkaXVzOjRlbTtcXG4gIGJhY2tncm91bmQ6ICMzRjQ4NEE7IC8qIERpYWwgY29sb3VyICovXFxuICBib3JkZXI6IDEwcHggc29saWQgc2lsdmVyOyAvKiBGYWNlIGJvcmRlciAqL1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpLCAxcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XFxufVxcblxcblxcbi5zdHJhcHtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgei1pbmRleDoxO1xcbiAgbGVmdDo0LjRlbTtcXG4gIHdpZHRoOjExLjJlbTtcXG4gIGhlaWdodDo3LjZlbTtcXG4gIGJhY2tncm91bmQ6IGRpbWdyZXk7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4IDEwcHggMCAwO1xcbn1cXG5cXG4uc3RyYXAuc3RyYXAtdG9we1xcbiAgdG9wOjA7XFxufVxcblxcbi5zdHJhcC5zdHJhcC1ib3R0b217XFxuICBib3R0b206MDtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5yZXNpemVye1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICB0b3A6MWVtO1xcbiAgbGVmdDoxZW07XFxuICB3aWR0aDoyMzBweDtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vZnJhbWV3b3JrL3N0eWxlcy93YXRjaC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxtQkFBbUI7RUFDbkIsMkJBQTJCO0VBQzNCLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osU0FBUztFQUNULFVBQVU7RUFDVixjQUFjO0VBQ2QsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLHFCQUFxQjtFQUNyQixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsYUFBYTtFQUNiLFdBQVc7RUFDWDtBQUNGOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0VBQ1osVUFBVTtFQUNWLFlBQVk7RUFDWixXQUFXO0VBQ1gsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFdBQVc7RUFDWCxVQUFVO0VBQ1YsWUFBWTtFQUNaLFdBQVc7RUFDWCxrQkFBa0I7RUFDbEIsMEJBQTBCO0FBQzVCOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFdBQVc7RUFDWCxhQUFhO0VBQ2IsWUFBWTtFQUNaLFdBQVc7RUFDWCxrQkFBa0I7RUFDbEIseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFdBQVc7RUFDWCxXQUFXO0VBQ1gsWUFBWTtFQUNaLFdBQVc7RUFDWCxrQkFBa0I7RUFDbEIseUNBQXlDO0FBQzNDOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFNBQVM7RUFDVCxrQkFBa0I7RUFDbEIsV0FBVztFQUNYLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsbUJBQW1CLEVBQUUsZ0JBQWdCO0VBQ3JDLHlCQUF5QixFQUFFLGdCQUFnQjtFQUMzQyw2RUFBNkU7QUFDL0U7OztBQUdBO0VBQ0UsaUJBQWlCO0VBQ2pCLFNBQVM7RUFDVCxVQUFVO0VBQ1YsWUFBWTtFQUNaLFlBQVk7RUFDWixtQkFBbUI7RUFDbkIsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsS0FBSztBQUNQOztBQUVBO0VBQ0UsUUFBUTtFQUNSLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixPQUFPO0VBQ1AsUUFBUTtFQUNSLFdBQVc7QUFDYlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuc2NyZWVue1xcbiAgcGFkZGluZy1sZWZ0OiAxLjVlbTtcXG4gIGZvbnQtZmFtaWx5OiBPcGVuU2Fucy1MaWdodDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG5cXG4jd2F0Y2gtZmFjZXtcXG4gIGhlaWdodDogMjQwcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMjQwcHg7XFxuICB0b3A6IDMwcHg7XFxuICBsZWZ0OiAyMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4jd2F0Y2h7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y0ODRBO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG59XFxuXFxuLndhdGNoe1xcbiAgcG9zaXRpb246cmVsYXRpdmU7XFxuICBtYXJnaW46MCBhdXRvO1xcbiAgd2lkdGg6MzIwcHg7XFxuICBwYWRkaW5nOjcuM2VtIDBcXG59XFxuXFxuLnBvd2VyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnBvd2VyOm50aC1jaGlsZCgxKXtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgcmlnaHQ6LTEuNGVtO1xcbiAgdG9wOiA3LjNlbTtcXG4gIGhlaWdodDozLjVlbTtcXG4gIHdpZHRoOjAuOGVtO1xcbiAgYmFja2dyb3VuZDojZTRlNGU0O1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDIpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0Oi0xLjRlbTtcXG4gIHRvcDogNy4zZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDMpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0OiA4LjhlbTtcXG4gIGJvdHRvbTotMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZyk7XFxufVxcblxcbi5wb3dlcjpudGgtY2hpbGQoNCl7XFxuICBwb3NpdGlvbjphYnNvbHV0ZTtcXG4gIGxlZnQ6IDguOGVtO1xcbiAgdG9wOiAtMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZykgcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4uY2FzZXtcXG4gIHBvc2l0aW9uOnJlbGF0aXZlO1xcbiAgei1pbmRleDoyO1xcbiAgYmFja2dyb3VuZDojMDMwMzAzO1xcbiAgd2lkdGg6MzAwcHg7XFxuICBoZWlnaHQ6MzAwcHg7XFxuICBib3JkZXItcmFkaXVzOjRlbTtcXG4gIGJhY2tncm91bmQ6ICMzRjQ4NEE7IC8qIERpYWwgY29sb3VyICovXFxuICBib3JkZXI6IDEwcHggc29saWQgc2lsdmVyOyAvKiBGYWNlIGJvcmRlciAqL1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpLCAxcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XFxufVxcblxcblxcbi5zdHJhcHtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgei1pbmRleDoxO1xcbiAgbGVmdDo0LjRlbTtcXG4gIHdpZHRoOjExLjJlbTtcXG4gIGhlaWdodDo3LjZlbTtcXG4gIGJhY2tncm91bmQ6IGRpbWdyZXk7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4IDEwcHggMCAwO1xcbn1cXG5cXG4uc3RyYXAuc3RyYXAtdG9we1xcbiAgdG9wOjA7XFxufVxcblxcbi5zdHJhcC5zdHJhcC1ib3R0b217XFxuICBib3R0b206MDtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5yZXNpemVye1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICB0b3A6MWVtO1xcbiAgbGVmdDoxZW07XFxuICB3aWR0aDoyMzBweDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiI25vdGlmaWNhdGlvbi1jb250YWluZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XFxuICBjb2xvcjogd2hpdGU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDE2MHB4O1xcbiAgd2lkdGg6IDE2MHB4O1xcbiAgdG9wOiA1MHB4O1xcbiAgbGVmdDogNTBweDtcXG4gIG9wYWNpdHk6IDAuOTtcXG4gIHotaW5kZXg6IDEwMDtcXG4gIHBhZGRpbmc6IDIwcHg7XFxufVxcblxcbiNub3RpZmljYXRpb24tbWVzc2FnZS1kaXNwbGF5IHtcXG4gIGhlaWdodDogNzAlO1xcbn1cXG5cXG4jbm90aWZpY2F0aW9uLWJ1dHRvbnMge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLm5vdGlmaWNhdGlvbi1idXR0b24ge1xcbiAgZmxleDogMTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuI25vdGlmaWNhdGlvbi1idXR0b24tcmlnaHQge1xcbiB0ZXh0LWFsaWduOiByaWdodFxcbn1cXG5cXG4jbm90aWZpY2F0aW9uLWJ1dHRvbi1sZWZ0IHtcXG4gdGV4dC1hbGlnbjogbGVmdFxcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9mcmFtZXdvcmsvc3R5bGVzL25vdGlmaWNhdGlvbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSx1QkFBdUI7RUFDdkIsWUFBWTtFQUNaLGtCQUFrQjtFQUNsQixhQUFhO0VBQ2IsWUFBWTtFQUNaLFNBQVM7RUFDVCxVQUFVO0VBQ1YsWUFBWTtFQUNaLFlBQVk7RUFDWixhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxXQUFXO0FBQ2I7O0FBRUE7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxPQUFPO0VBQ1AsZUFBZTtFQUNmLGtCQUFrQjtBQUNwQjs7QUFFQTtDQUNDO0FBQ0Q7O0FBRUE7Q0FDQztBQUNEXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNub3RpZmljYXRpb24tY29udGFpbmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xcbiAgY29sb3I6IHdoaXRlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiAxNjBweDtcXG4gIHdpZHRoOiAxNjBweDtcXG4gIHRvcDogNTBweDtcXG4gIGxlZnQ6IDUwcHg7XFxuICBvcGFjaXR5OiAwLjk7XFxuICB6LWluZGV4OiAxMDA7XFxuICBwYWRkaW5nOiAyMHB4O1xcbn1cXG5cXG4jbm90aWZpY2F0aW9uLW1lc3NhZ2UtZGlzcGxheSB7XFxuICBoZWlnaHQ6IDcwJTtcXG59XFxuXFxuI25vdGlmaWNhdGlvbi1idXR0b25zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5ub3RpZmljYXRpb24tYnV0dG9uIHtcXG4gIGZsZXg6IDE7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbiNub3RpZmljYXRpb24tYnV0dG9uLXJpZ2h0IHtcXG4gdGV4dC1hbGlnbjogcmlnaHRcXG59XFxuXFxuI25vdGlmaWNhdGlvbi1idXR0b24tbGVmdCB7XFxuIHRleHQtYWxpZ246IGxlZnRcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnBhZ2Utd2l0aC1tZW51IC5tZW51IHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5wYWdlLXdpdGgtbWVudSBsaSB7XFxuICAgICAgcGFkZGluZzogNHB4O1xcbn1cXG5cXG4ucGFnZS13aXRoLW1lbnUgIC5zZWxlY3RlZCB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9mcmFtZXdvcmsvc3R5bGVzL21lbnUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksU0FBUztJQUNULFVBQVU7SUFDVixxQkFBcUI7QUFDekI7O0FBRUE7TUFDTSxZQUFZO0FBQ2xCOztBQUVBO01BQ00scUJBQXFCO0FBQzNCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5wYWdlLXdpdGgtbWVudSAubWVudSB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4ucGFnZS13aXRoLW1lbnUgbGkge1xcbiAgICAgIHBhZGRpbmc6IDRweDtcXG59XFxuXFxuLnBhZ2Utd2l0aC1tZW51ICAuc2VsZWN0ZWQge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcIk9wZW5TYW5zLVJlZ3VsYXIudHRmXCI7IiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiT3BlblNhbnMtTGlnaHQudHRmXCI7IiwicmVxdWlyZSgnLi9hcHAuY3NzJyk7XG5yZXF1aXJlKCcuL2pzL3N0b3JhZ2UnKTtcblxuY29uc3QgQXBwID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuQXBwO1xuXG5jb25zdCByb3V0ZXMgPSByZXF1aXJlKFwiLi9qcy9yb3V0ZXNcIik7XG5jb25zdCBub3RpZmljYXRpb25zID0gcmVxdWlyZShcIi4vanMvbm90aWZpY2F0aW9uc1wiKTtcblxubmV3IEFwcChyb3V0ZXMsIG5vdGlmaWNhdGlvbnMpLmRlZmluZUN1c3RvbUVsZW1lbnRzKCkubmF2aWdhdGVUb0xvY2F0aW9uKHdpbmRvdy5sb2NhdGlvbik7XG4iLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9hcHAuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FwcC5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FwcC5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzBfX18gZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tYWluLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2pzL3BhZ2VzL2hvbWVQYWdlL2hvbWVQYWdlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMl9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21hcC5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzNfX18gZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tZW51LmNzc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzBfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzFfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzJfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzNfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W10sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIlwiLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiY29uc3QgU3RvcmFnZUh1YiA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLlN0b3JhZ2VIdWI7XG5jb25zdCBkYXRhID0gcmVxdWlyZSgnLi4vLi4vcmVzb3VyY2VzL21lbnUuanNvbicpO1xuU3RvcmFnZUh1Yi5zZXRKU09OKGRhdGEpO1xuU3RvcmFnZUh1Yi5zZXREYXRhKCdoZWxsbycsICd3b3JsZCcpXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBldmVudExpc3RlbmVyKCkge1xuICAgICAgaWYgKGVycm9yTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG4gICAgdmFyIGVycm9yTGlzdGVuZXI7XG5cbiAgICAvLyBBZGRpbmcgYW4gZXJyb3IgbGlzdGVuZXIgaXMgbm90IG9wdGlvbmFsIGJlY2F1c2VcbiAgICAvLyBpZiBhbiBlcnJvciBpcyB0aHJvd24gb24gYW4gZXZlbnQgZW1pdHRlciB3ZSBjYW5ub3RcbiAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgYWN0dWFsIGV2ZW50IHdlIGFyZSB3YWl0aW5nIHdpbGxcbiAgICAvLyBiZSBmaXJlZC4gVGhlIHJlc3VsdCBjb3VsZCBiZSBhIHNpbGVudCB3YXkgdG8gY3JlYXRlXG4gICAgLy8gbWVtb3J5IG9yIGZpbGUgZGVzY3JpcHRvciBsZWFrcywgd2hpY2ggaXMgc29tZXRoaW5nXG4gICAgLy8gd2Ugc2hvdWxkIGF2b2lkLlxuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBlcnJvckxpc3RlbmVyID0gZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCBldmVudExpc3RlbmVyKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9O1xuXG4gICAgICBlbWl0dGVyLm9uY2UoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZW1pdHRlci5vbmNlKG5hbWUsIGV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cbiIsInZhciBIYW5kbGViYXJzID0gcmVxdWlyZSgnL2hvbWUvY2lyY2xlY2kvcHJvamVjdC9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9ydW50aW1lLmpzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IChIYW5kbGViYXJzWydkZWZhdWx0J10gfHwgSGFuZGxlYmFycykudGVtcGxhdGUoe1wiY29tcGlsZXJcIjpbOCxcIj49IDQuMy4wXCJdLFwibWFpblwiOmZ1bmN0aW9uKGNvbnRhaW5lcixkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gICAgdmFyIGhlbHBlciwgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH07XG5cbiAgcmV0dXJuIFwiQmFzZSBub3RpZmljYXRpb246IFwiXG4gICAgKyBjb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbigoKGhlbHBlciA9IChoZWxwZXIgPSBsb29rdXBQcm9wZXJ0eShoZWxwZXJzLFwibWVzc2FnZVwiKSB8fCAoZGVwdGgwICE9IG51bGwgPyBsb29rdXBQcm9wZXJ0eShkZXB0aDAsXCJtZXNzYWdlXCIpIDogZGVwdGgwKSkgIT0gbnVsbCA/IGhlbHBlciA6IGNvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nKSwodHlwZW9mIGhlbHBlciA9PT0gXCJmdW5jdGlvblwiID8gaGVscGVyLmNhbGwoZGVwdGgwICE9IG51bGwgPyBkZXB0aDAgOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KSx7XCJuYW1lXCI6XCJtZXNzYWdlXCIsXCJoYXNoXCI6e30sXCJkYXRhXCI6ZGF0YSxcImxvY1wiOntcInN0YXJ0XCI6e1wibGluZVwiOjEsXCJjb2x1bW5cIjoxOX0sXCJlbmRcIjp7XCJsaW5lXCI6MSxcImNvbHVtblwiOjMwfX19KSA6IGhlbHBlcikpKVxuICAgICsgXCJcXG5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09ialsnZGVmYXVsdCddID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxudmFyIF9oYW5kbGViYXJzQmFzZSA9IHJlcXVpcmUoJy4vaGFuZGxlYmFycy9iYXNlJyk7XG5cbnZhciBiYXNlID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hhbmRsZWJhcnNCYXNlKTtcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcblxudmFyIF9oYW5kbGViYXJzU2FmZVN0cmluZyA9IHJlcXVpcmUoJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZycpO1xuXG52YXIgX2hhbmRsZWJhcnNTYWZlU3RyaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhbmRsZWJhcnNTYWZlU3RyaW5nKTtcblxudmFyIF9oYW5kbGViYXJzRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL2V4Y2VwdGlvbicpO1xuXG52YXIgX2hhbmRsZWJhcnNFeGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc0V4Y2VwdGlvbik7XG5cbnZhciBfaGFuZGxlYmFyc1V0aWxzID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL3V0aWxzJyk7XG5cbnZhciBVdGlscyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9oYW5kbGViYXJzVXRpbHMpO1xuXG52YXIgX2hhbmRsZWJhcnNSdW50aW1lID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL3J1bnRpbWUnKTtcblxudmFyIHJ1bnRpbWUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfaGFuZGxlYmFyc1J1bnRpbWUpO1xuXG52YXIgX2hhbmRsZWJhcnNOb0NvbmZsaWN0ID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0Jyk7XG5cbnZhciBfaGFuZGxlYmFyc05vQ29uZmxpY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc05vQ29uZmxpY3QpO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IF9oYW5kbGViYXJzU2FmZVN0cmluZzJbJ2RlZmF1bHQnXTtcbiAgaGIuRXhjZXB0aW9uID0gX2hhbmRsZWJhcnNFeGNlcHRpb24yWydkZWZhdWx0J107XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbiAoc3BlYykge1xuICAgIHJldHVybiBydW50aW1lLnRlbXBsYXRlKHNwZWMsIGhiKTtcbiAgfTtcblxuICByZXR1cm4gaGI7XG59XG5cbnZhciBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxuX2hhbmRsZWJhcnNOb0NvbmZsaWN0MlsnZGVmYXVsdCddKGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBpbnN0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TG5KMWJuUnBiV1V1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3T3pzN09FSkJRWE5DTEcxQ1FVRnRRanM3U1VGQk4wSXNTVUZCU1RzN096czdiME5CU1U4c01FSkJRVEJDT3pzN08yMURRVU16UWl4M1FrRkJkMEk3T3pzN0swSkJRM1pDTEc5Q1FVRnZRanM3U1VGQkwwSXNTMEZCU3pzN2FVTkJRMUVzYzBKQlFYTkNPenRKUVVGdVF5eFBRVUZQT3p0dlEwRkZTU3d3UWtGQk1FSTdPenM3TzBGQlIycEVMRk5CUVZNc1RVRkJUU3hIUVVGSE8wRkJRMmhDTEUxQlFVa3NSVUZCUlN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RlFVRkZMRU5CUVVNN08wRkJSVEZETEU5QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEzWkNMRWxCUVVVc1EwRkJReXhWUVVGVkxHOURRVUZoTEVOQlFVTTdRVUZETTBJc1NVRkJSU3hEUVVGRExGTkJRVk1zYlVOQlFWa3NRMEZCUXp0QlFVTjZRaXhKUVVGRkxFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTnFRaXhKUVVGRkxFTkJRVU1zWjBKQlFXZENMRWRCUVVjc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4RFFVRkRPenRCUVVVM1F5eEpRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJRenRCUVVOb1FpeEpRVUZGTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZNc1NVRkJTU3hGUVVGRk8wRkJRek5DTEZkQlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdSMEZEYmtNc1EwRkJRenM3UVVGRlJpeFRRVUZQTEVWQlFVVXNRMEZCUXp0RFFVTllPenRCUVVWRUxFbEJRVWtzU1VGQlNTeEhRVUZITEUxQlFVMHNSVUZCUlN4RFFVRkRPMEZCUTNCQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPenRCUVVWeVFpeHJRMEZCVnl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRmFrSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6czdjVUpCUlZJc1NVRkJTU0lzSW1acGJHVWlPaUpvWVc1a2JHVmlZWEp6TG5KMWJuUnBiV1V1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJpWVhObElHWnliMjBnSnk0dmFHRnVaR3hsWW1GeWN5OWlZWE5sSnp0Y2JseHVMeThnUldGamFDQnZaaUIwYUdWelpTQmhkV2R0Wlc1MElIUm9aU0JJWVc1a2JHVmlZWEp6SUc5aWFtVmpkQzRnVG04Z2JtVmxaQ0IwYnlCelpYUjFjQ0JvWlhKbExseHVMeThnS0ZSb2FYTWdhWE1nWkc5dVpTQjBieUJsWVhOcGJIa2djMmhoY21VZ1kyOWtaU0JpWlhSM1pXVnVJR052YlcxdmJtcHpJR0Z1WkNCaWNtOTNjMlVnWlc1MmN5bGNibWx0Y0c5eWRDQlRZV1psVTNSeWFXNW5JR1p5YjIwZ0p5NHZhR0Z1Wkd4bFltRnljeTl6WVdabExYTjBjbWx1WnljN1hHNXBiWEJ2Y25RZ1JYaGpaWEIwYVc5dUlHWnliMjBnSnk0dmFHRnVaR3hsWW1GeWN5OWxlR05sY0hScGIyNG5PMXh1YVcxd2IzSjBJQ29nWVhNZ1ZYUnBiSE1nWm5KdmJTQW5MaTlvWVc1a2JHVmlZWEp6TDNWMGFXeHpKenRjYm1sdGNHOXlkQ0FxSUdGeklISjFiblJwYldVZ1puSnZiU0FuTGk5b1lXNWtiR1ZpWVhKekwzSjFiblJwYldVbk8xeHVYRzVwYlhCdmNuUWdibTlEYjI1bWJHbGpkQ0JtY205dElDY3VMMmhoYm1Sc1pXSmhjbk12Ym04dFkyOXVabXhwWTNRbk8xeHVYRzR2THlCR2IzSWdZMjl0Y0dGMGFXSnBiR2wwZVNCaGJtUWdkWE5oWjJVZ2IzVjBjMmxrWlNCdlppQnRiMlIxYkdVZ2MzbHpkR1Z0Y3l3Z2JXRnJaU0IwYUdVZ1NHRnVaR3hsWW1GeWN5QnZZbXBsWTNRZ1lTQnVZVzFsYzNCaFkyVmNibVoxYm1OMGFXOXVJR055WldGMFpTZ3BJSHRjYmlBZ2JHVjBJR2hpSUQwZ2JtVjNJR0poYzJVdVNHRnVaR3hsWW1GeWMwVnVkbWx5YjI1dFpXNTBLQ2s3WEc1Y2JpQWdWWFJwYkhNdVpYaDBaVzVrS0doaUxDQmlZWE5sS1R0Y2JpQWdhR0l1VTJGbVpWTjBjbWx1WnlBOUlGTmhabVZUZEhKcGJtYzdYRzRnSUdoaUxrVjRZMlZ3ZEdsdmJpQTlJRVY0WTJWd2RHbHZianRjYmlBZ2FHSXVWWFJwYkhNZ1BTQlZkR2xzY3p0Y2JpQWdhR0l1WlhOallYQmxSWGh3Y21WemMybHZiaUE5SUZWMGFXeHpMbVZ6WTJGd1pVVjRjSEpsYzNOcGIyNDdYRzVjYmlBZ2FHSXVWazBnUFNCeWRXNTBhVzFsTzF4dUlDQm9ZaTUwWlcxd2JHRjBaU0E5SUdaMWJtTjBhVzl1S0hOd1pXTXBJSHRjYmlBZ0lDQnlaWFIxY200Z2NuVnVkR2x0WlM1MFpXMXdiR0YwWlNoemNHVmpMQ0JvWWlrN1hHNGdJSDA3WEc1Y2JpQWdjbVYwZFhKdUlHaGlPMXh1ZlZ4dVhHNXNaWFFnYVc1emRDQTlJR055WldGMFpTZ3BPMXh1YVc1emRDNWpjbVZoZEdVZ1BTQmpjbVZoZEdVN1hHNWNibTV2UTI5dVpteHBZM1FvYVc1emRDazdYRzVjYm1sdWMzUmJKMlJsWm1GMWJIUW5YU0E5SUdsdWMzUTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR2x1YzNRN1hHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uIChjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoX3V0aWxzLmlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmIChjb250ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICB2YXIgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gX3V0aWxzLmFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJobGJIQmxjbk12WW14dlkyc3RhR1ZzY0dWeUxXMXBjM05wYm1jdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenR4UWtGQmQwUXNWVUZCVlRzN2NVSkJSVzVFTEZWQlFWTXNVVUZCVVN4RlFVRkZPMEZCUTJoRExGVkJRVkVzUTBGQlF5eGpRVUZqTEVOQlFVTXNiMEpCUVc5Q0xFVkJRVVVzVlVGQlV5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkZPMEZCUTNaRkxGRkJRVWtzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4UFFVRlBPMUZCUXpOQ0xFVkJRVVVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRPenRCUVVWc1FpeFJRVUZKTEU5QlFVOHNTMEZCU3l4SlFVRkpMRVZCUVVVN1FVRkRjRUlzWVVGQlR5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRha0lzVFVGQlRTeEpRVUZKTEU5QlFVOHNTMEZCU3l4TFFVRkxMRWxCUVVrc1QwRkJUeXhKUVVGSkxFbEJRVWtzUlVGQlJUdEJRVU12UXl4aFFVRlBMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dExRVU4wUWl4TlFVRk5MRWxCUVVrc1pVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJUdEJRVU16UWl4VlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEzUkNMRmxCUVVrc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJUdEJRVU5tTEdsQ1FVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUXpsQ096dEJRVVZFTEdWQlFVOHNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMDlCUTJoRUxFMUJRVTA3UVVGRFRDeGxRVUZQTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRQUVVOMFFqdExRVU5HTEUxQlFVMDdRVUZEVEN4VlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTXZRaXhaUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCV1N4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGNrTXNXVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXg1UWtGRGFrSXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRM2hDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUTJJc1EwRkJRenRCUVVOR0xHVkJRVThzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1EwRkJRenRQUVVNeFFqczdRVUZGUkN4aFFVRlBMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdTMEZETjBJN1IwRkRSaXhEUVVGRExFTkJRVU03UTBGRFNpSXNJbVpwYkdVaU9pSmliRzlqYXkxb1pXeHdaWEl0YldsemMybHVaeTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lHRndjR1Z1WkVOdmJuUmxlSFJRWVhSb0xDQmpjbVZoZEdWR2NtRnRaU3dnYVhOQmNuSmhlU0I5SUdaeWIyMGdKeTR1TDNWMGFXeHpKenRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWm5WdVkzUnBiMjRvYVc1emRHRnVZMlVwSUh0Y2JpQWdhVzV6ZEdGdVkyVXVjbVZuYVhOMFpYSklaV3h3WlhJb0oySnNiMk5yU0dWc2NHVnlUV2x6YzJsdVp5Y3NJR1oxYm1OMGFXOXVLR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnNaWFFnYVc1MlpYSnpaU0E5SUc5d2RHbHZibk11YVc1MlpYSnpaU3hjYmlBZ0lDQWdJR1p1SUQwZ2IzQjBhVzl1Y3k1bWJqdGNibHh1SUNBZ0lHbG1JQ2hqYjI1MFpYaDBJRDA5UFNCMGNuVmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdabTRvZEdocGN5azdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMjUwWlhoMElEMDlQU0JtWVd4elpTQjhmQ0JqYjI1MFpYaDBJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnBiblpsY25ObEtIUm9hWE1wTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvYVhOQmNuSmhlU2hqYjI1MFpYaDBLU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHTnZiblJsZUhRdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1cFpITXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6TG1sa2N5QTlJRnR2Y0hScGIyNXpMbTVoYldWZE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR2x1YzNSaGJtTmxMbWhsYkhCbGNuTXVaV0ZqYUNoamIyNTBaWGgwTENCdmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJwYm5abGNuTmxLSFJvYVhNcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1a1lYUmhJQ1ltSUc5d2RHbHZibk11YVdSektTQjdYRzRnSUNBZ0lDQWdJR3hsZENCa1lYUmhJRDBnWTNKbFlYUmxSbkpoYldVb2IzQjBhVzl1Y3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnWkdGMFlTNWpiMjUwWlhoMFVHRjBhQ0E5SUdGd2NHVnVaRU52Ym5SbGVIUlFZWFJvS0Z4dUlDQWdJQ0FnSUNBZ0lHOXdkR2x2Ym5NdVpHRjBZUzVqYjI1MFpYaDBVR0YwYUN4Y2JpQWdJQ0FnSUNBZ0lDQnZjSFJwYjI1ekxtNWhiV1ZjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ2IzQjBhVzl1Y3lBOUlIc2daR0YwWVRvZ1pHRjBZU0I5TzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnWm00b1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3lrN1hHNGdJQ0FnZlZ4dUlDQjlLVHRjYm4xY2JpSmRmUT09XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4uL2V4Y2VwdGlvbicpO1xuXG52YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2VhY2gnLCBmdW5jdGlvbiAoY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIHZhciBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSA9IHVuZGVmaW5lZCxcbiAgICAgICAgY29udGV4dFBhdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKSArICcuJztcbiAgICB9XG5cbiAgICBpZiAoX3V0aWxzLmlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBfdXRpbHMuYmxvY2tQYXJhbXMoW2NvbnRleHRbZmllbGRdLCBmaWVsZF0sIFtjb250ZXh0UGF0aCArIGZpZWxkLCBudWxsXSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKF91dGlscy5pc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIHZhciBuZXdDb250ZXh0ID0gW107XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGNvbnRleHRbZ2xvYmFsLlN5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgZm9yICh2YXIgaXQgPSBpdGVyYXRvci5uZXh0KCk7ICFpdC5kb25lOyBpdCA9IGl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgIG5ld0NvbnRleHQucHVzaChpdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dCA9IG5ld0NvbnRleHQ7XG4gICAgICAgIGZvciAodmFyIGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgcHJpb3JLZXkgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYW4gaXRlcm1lZGlhdGUga2V5cyBhcnJheS5cbiAgICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICByZXQgPSBpbnZlcnNlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZaV0ZqYUM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3TzNGQ1FVMVBMRlZCUVZVN08zbENRVU5MTEdOQlFXTTdPenM3Y1VKQlJYSkNMRlZCUVZNc1VVRkJVU3hGUVVGRk8wRkJRMmhETEZWQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1RVRkJUU3hGUVVGRkxGVkJRVk1zVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlR0QlFVTjZSQ3hSUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlExb3NXVUZCVFN3eVFrRkJZeXcyUWtGQk5rSXNRMEZCUXl4RFFVRkRPMHRCUTNCRU96dEJRVVZFTEZGQlFVa3NSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJReXhGUVVGRk8xRkJRMnBDTEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNc1QwRkJUenRSUVVONlFpeERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTk1MRWRCUVVjc1IwRkJSeXhGUVVGRk8xRkJRMUlzU1VGQlNTeFpRVUZCTzFGQlEwb3NWMEZCVnl4WlFVRkJMRU5CUVVNN08wRkJSV1FzVVVGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4SlFVRkpMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVU3UVVGREwwSXNhVUpCUVZjc1IwRkRWQ3g1UWtGQmEwSXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF6dExRVU55UlRzN1FVRkZSQ3hSUVVGSkxHdENRVUZYTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUTNaQ0xHRkJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRemxDT3p0QlFVVkVMRkZCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJUdEJRVU5vUWl4VlFVRkpMRWRCUVVjc2JVSkJRVmtzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUTJ4RE96dEJRVVZFTEdGQlFWTXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFVkJRVVVzU1VGQlNTeEZRVUZGTzBGQlEzcERMRlZCUVVrc1NVRkJTU3hGUVVGRk8wRkJRMUlzV1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRha0lzV1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRia0lzV1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM3BDTEZsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6czdRVUZGYmtJc1dVRkJTU3hYUVVGWExFVkJRVVU3UVVGRFppeGpRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU03VTBGRGVFTTdUMEZEUmpzN1FVRkZSQ3hUUVVGSExFZEJRMFFzUjBGQlJ5eEhRVU5JTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVU3UVVGRGFrSXNXVUZCU1N4RlFVRkZMRWxCUVVrN1FVRkRWaXh0UWtGQlZ5eEZRVUZGTEcxQ1FVTllMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVTjJRaXhEUVVGRExGZEJRVmNzUjBGQlJ5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUXpWQ08wOUJRMFlzUTBGQlF5eERRVUZETzB0QlEwNDdPMEZCUlVRc1VVRkJTU3hQUVVGUExFbEJRVWtzVDBGQlR5eFBRVUZQTEV0QlFVc3NVVUZCVVN4RlFVRkZPMEZCUXpGRExGVkJRVWtzWlVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTndRaXhoUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTjJReXhqUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVWQlFVVTdRVUZEYUVJc2VVSkJRV0VzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWRCUXk5RE8xTkJRMFk3VDBGRFJpeE5RVUZOTEVsQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1NVRkJTU3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRCUVVNelJDeFpRVUZOTEZWQlFWVXNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRkRUlzV1VGQlRTeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXp0QlFVTnVSQ3hoUVVGTExFbEJRVWtzUlVGQlJTeEhRVUZITEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlN4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJUdEJRVU0zUkN4dlFrRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1UwRkRNMEk3UVVGRFJDeGxRVUZQTEVkQlFVY3NWVUZCVlN4RFFVRkRPMEZCUTNKQ0xHRkJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNaRExIVkNRVUZoTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXNzVDBGQlR5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNdlF6dFBRVU5HTEUxQlFVMDdPMEZCUTB3c1kwRkJTU3hSUVVGUkxGbEJRVUVzUTBGQlF6czdRVUZGWWl4blFrRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJRU3hIUVVGSExFVkJRVWs3T3pzN1FVRkpiRU1zWjBKQlFVa3NVVUZCVVN4TFFVRkxMRk5CUVZNc1JVRkJSVHRCUVVNeFFpd3lRa0ZCWVN4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYUVNN1FVRkRSQ3h2UWtGQlVTeEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTm1MR0ZCUVVNc1JVRkJSU3hEUVVGRE8xZEJRMHdzUTBGQlF5eERRVUZETzBGQlEwZ3NZMEZCU1N4UlFVRlJMRXRCUVVzc1UwRkJVeXhGUVVGRk8wRkJRekZDTEhsQ1FVRmhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1YwRkRkRU03TzA5QlEwWTdTMEZEUmpzN1FVRkZSQ3hSUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdRVUZEV0N4VFFVRkhMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEzSkNPenRCUVVWRUxGZEJRVThzUjBGQlJ5eERRVUZETzBkQlExb3NRMEZCUXl4RFFVRkRPME5CUTBvaUxDSm1hV3hsSWpvaVpXRmphQzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1hHNGdJR0Z3Y0dWdVpFTnZiblJsZUhSUVlYUm9MRnh1SUNCaWJHOWphMUJoY21GdGN5eGNiaUFnWTNKbFlYUmxSbkpoYldVc1hHNGdJR2x6UVhKeVlYa3NYRzRnSUdselJuVnVZM1JwYjI1Y2JuMGdabkp2YlNBbkxpNHZkWFJwYkhNbk8xeHVhVzF3YjNKMElFVjRZMlZ3ZEdsdmJpQm1jbTl0SUNjdUxpOWxlR05sY0hScGIyNG5PMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaWhwYm5OMFlXNWpaU2tnZTF4dUlDQnBibk4wWVc1alpTNXlaV2RwYzNSbGNraGxiSEJsY2lnblpXRmphQ2NzSUdaMWJtTjBhVzl1S0dOdmJuUmxlSFFzSUc5d2RHbHZibk1wSUh0Y2JpQWdJQ0JwWmlBb0lXOXdkR2x2Ym5NcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9KMDExYzNRZ2NHRnpjeUJwZEdWeVlYUnZjaUIwYnlBalpXRmphQ2NwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCbWJpQTlJRzl3ZEdsdmJuTXVabTRzWEc0Z0lDQWdJQ0JwYm5abGNuTmxJRDBnYjNCMGFXOXVjeTVwYm5abGNuTmxMRnh1SUNBZ0lDQWdhU0E5SURBc1hHNGdJQ0FnSUNCeVpYUWdQU0FuSnl4Y2JpQWdJQ0FnSUdSaGRHRXNYRzRnSUNBZ0lDQmpiMjUwWlhoMFVHRjBhRHRjYmx4dUlDQWdJR2xtSUNodmNIUnBiMjV6TG1SaGRHRWdKaVlnYjNCMGFXOXVjeTVwWkhNcElIdGNiaUFnSUNBZ0lHTnZiblJsZUhSUVlYUm9JRDFjYmlBZ0lDQWdJQ0FnWVhCd1pXNWtRMjl1ZEdWNGRGQmhkR2dvYjNCMGFXOXVjeTVrWVhSaExtTnZiblJsZUhSUVlYUm9MQ0J2Y0hScGIyNXpMbWxrYzFzd1hTa2dLeUFuTGljN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHbHpSblZ1WTNScGIyNG9ZMjl1ZEdWNGRDa3BJSHRjYmlBZ0lDQWdJR052Ym5SbGVIUWdQU0JqYjI1MFpYaDBMbU5oYkd3b2RHaHBjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11WkdGMFlTa2dlMXh1SUNBZ0lDQWdaR0YwWVNBOUlHTnlaV0YwWlVaeVlXMWxLRzl3ZEdsdmJuTXVaR0YwWVNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnWlhobFkwbDBaWEpoZEdsdmJpaG1hV1ZzWkN3Z2FXNWtaWGdzSUd4aGMzUXBJSHRjYmlBZ0lDQWdJR2xtSUNoa1lYUmhLU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRXVhMlY1SUQwZ1ptbGxiR1E3WEc0Z0lDQWdJQ0FnSUdSaGRHRXVhVzVrWlhnZ1BTQnBibVJsZUR0Y2JpQWdJQ0FnSUNBZ1pHRjBZUzVtYVhKemRDQTlJR2x1WkdWNElEMDlQU0F3TzF4dUlDQWdJQ0FnSUNCa1lYUmhMbXhoYzNRZ1BTQWhJV3hoYzNRN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJuUmxlSFJRWVhSb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnWkdGMFlTNWpiMjUwWlhoMFVHRjBhQ0E5SUdOdmJuUmxlSFJRWVhSb0lDc2dabWxsYkdRN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVYwSUQxY2JpQWdJQ0FnSUNBZ2NtVjBJQ3RjYmlBZ0lDQWdJQ0FnWm00b1kyOXVkR1Y0ZEZ0bWFXVnNaRjBzSUh0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdJQ0FnSUdKc2IyTnJVR0Z5WVcxek9pQmliRzlqYTFCaGNtRnRjeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lGdGpiMjUwWlhoMFcyWnBaV3hrWFN3Z1ptbGxiR1JkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdXMk52Ym5SbGVIUlFZWFJvSUNzZ1ptbGxiR1FzSUc1MWJHeGRYRzRnSUNBZ0lDQWdJQ0FnS1Z4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9ZMjl1ZEdWNGRDQW1KaUIwZVhCbGIyWWdZMjl1ZEdWNGRDQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUdsbUlDaHBjMEZ5Y21GNUtHTnZiblJsZUhRcEtTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNCamIyNTBaWGgwTG14bGJtZDBhRHNnYVNBOElHbzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNocElHbHVJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVjRaV05KZEdWeVlYUnBiMjRvYVN3Z2FTd2dhU0E5UFQwZ1kyOXVkR1Y0ZEM1c1pXNW5kR2dnTFNBeEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1oyeHZZbUZzTGxONWJXSnZiQ0FtSmlCamIyNTBaWGgwVzJkc2IySmhiQzVUZVcxaWIyd3VhWFJsY21GMGIzSmRLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzVsZDBOdmJuUmxlSFFnUFNCYlhUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FYUmxjbUYwYjNJZ1BTQmpiMjUwWlhoMFcyZHNiMkpoYkM1VGVXMWliMnd1YVhSbGNtRjBiM0pkS0NrN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHbDBJRDBnYVhSbGNtRjBiM0l1Ym1WNGRDZ3BPeUFoYVhRdVpHOXVaVHNnYVhRZ1BTQnBkR1Z5WVhSdmNpNXVaWGgwS0NrcElIdGNiaUFnSUNBZ0lDQWdJQ0J1WlhkRGIyNTBaWGgwTG5CMWMyZ29hWFF1ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOdmJuUmxlSFFnUFNCdVpYZERiMjUwWlhoME8xeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnWTI5dWRHVjRkQzVzWlc1bmRHZzdJR2tnUENCcU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmxlR1ZqU1hSbGNtRjBhVzl1S0drc0lHa3NJR2tnUFQwOUlHTnZiblJsZUhRdWJHVnVaM1JvSUMwZ01TazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR3hsZENCd2NtbHZja3RsZVR0Y2JseHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdWEyVjVjeWhqYjI1MFpYaDBLUzVtYjNKRllXTm9LR3RsZVNBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1YyVW5jbVVnY25WdWJtbHVaeUIwYUdVZ2FYUmxjbUYwYVc5dWN5QnZibVVnYzNSbGNDQnZkWFFnYjJZZ2MzbHVZeUJ6YnlCM1pTQmpZVzRnWkdWMFpXTjBYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2RHaGxJR3hoYzNRZ2FYUmxjbUYwYVc5dUlIZHBkR2h2ZFhRZ2FHRjJaU0IwYnlCelkyRnVJSFJvWlNCdlltcGxZM1FnZEhkcFkyVWdZVzVrSUdOeVpXRjBaVnh1SUNBZ0lDQWdJQ0FnSUM4dklHRnVJR2wwWlhKdFpXUnBZWFJsSUd0bGVYTWdZWEp5WVhrdVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hCeWFXOXlTMlY1SUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVjRaV05KZEdWeVlYUnBiMjRvY0hKcGIzSkxaWGtzSUdrZ0xTQXhLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdjSEpwYjNKTFpYa2dQU0JyWlhrN1hHNGdJQ0FnSUNBZ0lDQWdhU3NyTzF4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hCeWFXOXlTMlY1SUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCbGVHVmpTWFJsY21GMGFXOXVLSEJ5YVc5eVMyVjVMQ0JwSUMwZ01Td2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9hU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdjbVYwSUQwZ2FXNTJaWEp6WlNoMGFHbHpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVjBPMXh1SUNCOUtUdGNibjFjYmlKZGZRPT1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9leGNlcHRpb24gPSByZXF1aXJlKCcuLi9leGNlcHRpb24nKTtcblxudmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24gKCkgLyogW2FyZ3MsIF1vcHRpb25zICove1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBBIG1pc3NpbmcgZmllbGQgaW4gYSB7e2Zvb319IGNvbnN0cnVjdC5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNvbWVvbmUgaXMgYWN0dWFsbHkgdHJ5aW5nIHRvIGNhbGwgc29tZXRoaW5nLCBibG93IHVwLlxuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZhR1ZzY0dWeUxXMXBjM05wYm1jdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3p0NVFrRkJjMElzWTBGQll6czdPenR4UWtGRmNrSXNWVUZCVXl4UlFVRlJMRVZCUVVVN1FVRkRhRU1zVlVGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4bFFVRmxMRVZCUVVVc2FVTkJRV2RETzBGQlEzWkZMRkZCUVVrc1UwRkJVeXhEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETEVWQlFVVTdPMEZCUlRGQ0xHRkJRVThzVTBGQlV5eERRVUZETzB0QlEyeENMRTFCUVUwN08wRkJSVXdzV1VGQlRTd3lRa0ZEU2l4dFFrRkJiVUlzUjBGQlJ5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVTnFSU3hEUVVGRE8wdEJRMGc3UjBGRFJpeERRVUZETEVOQlFVTTdRMEZEU2lJc0ltWnBiR1VpT2lKb1pXeHdaWEl0YldsemMybHVaeTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRmVHTmxjSFJwYjI0Z1puSnZiU0FuTGk0dlpYaGpaWEIwYVc5dUp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKSVpXeHdaWElvSjJobGJIQmxjazFwYzNOcGJtY25MQ0JtZFc1amRHbHZiaWd2S2lCYllYSm5jeXdnWFc5d2RHbHZibk1nS2k4cElIdGNiaUFnSUNCcFppQW9ZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQTlQVDBnTVNrZ2UxeHVJQ0FnSUNBZ0x5OGdRU0J0YVhOemFXNW5JR1pwWld4a0lHbHVJR0VnZTN0bWIyOTlmU0JqYjI1emRISjFZM1F1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QlRiMjFsYjI1bElHbHpJR0ZqZEhWaGJHeDVJSFJ5ZVdsdVp5QjBieUJqWVd4c0lITnZiV1YwYUdsdVp5d2dZbXh2ZHlCMWNDNWNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9YRzRnSUNBZ0lDQWdJQ2ROYVhOemFXNW5JR2hsYkhCbGNqb2dYQ0luSUNzZ1lYSm5kVzFsYm5SelcyRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ0xTQXhYUzV1WVcxbElDc2dKMXdpSjF4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc0Z0lIMHBPMXh1ZlZ4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBfZXhjZXB0aW9uID0gcmVxdWlyZSgnLi4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbiAoY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnI2lmIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChfdXRpbHMuaXNGdW5jdGlvbihjb25kaXRpb25hbCkpIHtcbiAgICAgIGNvbmRpdGlvbmFsID0gY29uZGl0aW9uYWwuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHJlbmRlciB0aGUgcG9zaXRpdmUgcGF0aCBpZiB0aGUgdmFsdWUgaXMgdHJ1dGh5IGFuZCBub3QgZW1wdHkuXG4gICAgLy8gVGhlIGBpbmNsdWRlWmVyb2Agb3B0aW9uIG1heSBiZSBzZXQgdG8gdHJlYXQgdGhlIGNvbmR0aW9uYWwgYXMgcHVyZWx5IG5vdCBlbXB0eSBiYXNlZCBvbiB0aGVcbiAgICAvLyBiZWhhdmlvciBvZiBpc0VtcHR5LiBFZmZlY3RpdmVseSB0aGlzIGRldGVybWluZXMgaWYgMCBpcyBoYW5kbGVkIGJ5IHRoZSBwb3NpdGl2ZSBwYXRoIG9yIG5lZ2F0aXZlLlxuICAgIGlmICghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCB8fCBfdXRpbHMuaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uIChjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZhV1l1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenR4UWtGQmIwTXNWVUZCVlRzN2VVSkJRM2hDTEdOQlFXTTdPenM3Y1VKQlJYSkNMRlZCUVZNc1VVRkJVU3hGUVVGRk8wRkJRMmhETEZWQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hGUVVGRkxGVkJRVk1zVjBGQlZ5eEZRVUZGTEU5QlFVOHNSVUZCUlR0QlFVTXpSQ3hSUVVGSkxGTkJRVk1zUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4RlFVRkZPMEZCUTNwQ0xGbEJRVTBzTWtKQlFXTXNiVU5CUVcxRExFTkJRVU1zUTBGQlF6dExRVU14UkR0QlFVTkVMRkZCUVVrc2EwSkJRVmNzVjBGQlZ5eERRVUZETEVWQlFVVTdRVUZETTBJc2FVSkJRVmNzUjBGQlJ5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRM1JET3pzN096dEJRVXRFTEZGQlFVa3NRVUZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SlFVRkxMR1ZCUVZFc1YwRkJWeXhEUVVGRExFVkJRVVU3UVVGRGRrVXNZVUZCVHl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlF6bENMRTFCUVUwN1FVRkRUQ3hoUVVGUExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRla0k3UjBGRFJpeERRVUZETEVOQlFVTTdPMEZCUlVnc1ZVRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eFJRVUZSTEVWQlFVVXNWVUZCVXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRk8wRkJReTlFTEZGQlFVa3NVMEZCVXl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFVkJRVVU3UVVGRGVrSXNXVUZCVFN3eVFrRkJZeXgxUTBGQmRVTXNRMEZCUXl4RFFVRkRPMHRCUXpsRU8wRkJRMFFzVjBGQlR5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNWMEZCVnl4RlFVRkZPMEZCUTNCRUxGRkJRVVVzUlVGQlJTeFBRVUZQTEVOQlFVTXNUMEZCVHp0QlFVTnVRaXhoUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVWQlFVVTdRVUZEYmtJc1ZVRkJTU3hGUVVGRkxFOUJRVThzUTBGQlF5eEpRVUZKTzB0QlEyNUNMRU5CUVVNc1EwRkJRenRIUVVOS0xFTkJRVU1zUTBGQlF6dERRVU5LSWl3aVptbHNaU0k2SW1sbUxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHNnYVhORmJYQjBlU3dnYVhOR2RXNWpkR2x2YmlCOUlHWnliMjBnSnk0dUwzVjBhV3h6Snp0Y2JtbHRjRzl5ZENCRmVHTmxjSFJwYjI0Z1puSnZiU0FuTGk0dlpYaGpaWEIwYVc5dUp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKSVpXeHdaWElvSjJsbUp5d2dablZ1WTNScGIyNG9ZMjl1WkdsMGFXOXVZV3dzSUc5d2RHbHZibk1wSUh0Y2JpQWdJQ0JwWmlBb1lYSm5kVzFsYm5SekxteGxibWQwYUNBaFBTQXlLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NjamFXWWdjbVZ4ZFdseVpYTWdaWGhoWTNSc2VTQnZibVVnWVhKbmRXMWxiblFuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0dselJuVnVZM1JwYjI0b1kyOXVaR2wwYVc5dVlXd3BLU0I3WEc0Z0lDQWdJQ0JqYjI1a2FYUnBiMjVoYkNBOUlHTnZibVJwZEdsdmJtRnNMbU5oYkd3b2RHaHBjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnUkdWbVlYVnNkQ0JpWldoaGRtbHZjaUJwY3lCMGJ5QnlaVzVrWlhJZ2RHaGxJSEJ2YzJsMGFYWmxJSEJoZEdnZ2FXWWdkR2hsSUhaaGJIVmxJR2x6SUhSeWRYUm9lU0JoYm1RZ2JtOTBJR1Z0Y0hSNUxseHVJQ0FnSUM4dklGUm9aU0JnYVc1amJIVmtaVnBsY205Z0lHOXdkR2x2YmlCdFlYa2dZbVVnYzJWMElIUnZJSFJ5WldGMElIUm9aU0JqYjI1a2RHbHZibUZzSUdGeklIQjFjbVZzZVNCdWIzUWdaVzF3ZEhrZ1ltRnpaV1FnYjI0Z2RHaGxYRzRnSUNBZ0x5OGdZbVZvWVhacGIzSWdiMllnYVhORmJYQjBlUzRnUldabVpXTjBhWFpsYkhrZ2RHaHBjeUJrWlhSbGNtMXBibVZ6SUdsbUlEQWdhWE1nYUdGdVpHeGxaQ0JpZVNCMGFHVWdjRzl6YVhScGRtVWdjR0YwYUNCdmNpQnVaV2RoZEdsMlpTNWNiaUFnSUNCcFppQW9LQ0Z2Y0hScGIyNXpMbWhoYzJndWFXNWpiSFZrWlZwbGNtOGdKaVlnSVdOdmJtUnBkR2x2Ym1Gc0tTQjhmQ0JwYzBWdGNIUjVLR052Ym1ScGRHbHZibUZzS1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc5d2RHbHZibk11YVc1MlpYSnpaU2gwYUdsektUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzl3ZEdsdmJuTXVabTRvZEdocGN5azdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JseHVJQ0JwYm5OMFlXNWpaUzV5WldkcGMzUmxja2hsYkhCbGNpZ25kVzVzWlhOekp5d2dablZ1WTNScGIyNG9ZMjl1WkdsMGFXOXVZV3dzSUc5d2RHbHZibk1wSUh0Y2JpQWdJQ0JwWmlBb1lYSm5kVzFsYm5SekxteGxibWQwYUNBaFBTQXlLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NjamRXNXNaWE56SUhKbGNYVnBjbVZ6SUdWNFlXTjBiSGtnYjI1bElHRnlaM1Z0Wlc1MEp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJwYm5OMFlXNWpaUzVvWld4d1pYSnpXeWRwWmlkZExtTmhiR3dvZEdocGN5d2dZMjl1WkdsMGFXOXVZV3dzSUh0Y2JpQWdJQ0FnSUdadU9pQnZjSFJwYjI1ekxtbHVkbVZ5YzJVc1hHNGdJQ0FnSUNCcGJuWmxjbk5sT2lCdmNIUnBiMjV6TG1adUxGeHVJQ0FnSUNBZ2FHRnphRG9nYjNCMGFXOXVjeTVvWVhOb1hHNGdJQ0FnZlNrN1hHNGdJSDBwTzF4dWZWeHVJbDE5XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24gKCkgLyogbWVzc2FnZSwgb3B0aW9ucyAqL3tcbiAgICB2YXIgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIHZhciBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZy5hcHBseShpbnN0YW5jZSwgYXJncyk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZiRzluTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdjVUpCUVdVc1ZVRkJVeXhSUVVGUkxFVkJRVVU3UVVGRGFFTXNWVUZCVVN4RFFVRkRMR05CUVdNc1EwRkJReXhMUVVGTExFVkJRVVVzYTBOQlFXbERPMEZCUXpsRUxGRkJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTNCQ0xFOUJRVThzUjBGQlJ5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0xUXl4VFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZETjBNc1ZVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVONlFqczdRVUZGUkN4UlFVRkpMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRFpDeFJRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFbEJRVWtzUlVGQlJUdEJRVU01UWl4WFFVRkxMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdTMEZETlVJc1RVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eEpRVUZKTEVsQlFVa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWtzU1VGQlNTeEZRVUZGTzBGQlEzSkVMRmRCUVVzc1IwRkJSeXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0TFFVTTFRanRCUVVORUxGRkJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN08wRkJSV2hDTEZsQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVVFc1EwRkJXaXhSUVVGUkxFVkJRVkVzU1VGQlNTeERRVUZETEVOQlFVTTdSMEZEZGtJc1EwRkJReXhEUVVGRE8wTkJRMG9pTENKbWFXeGxJam9pYkc5bkxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKSVpXeHdaWElvSjJ4dlp5Y3NJR1oxYm1OMGFXOXVLQzhxSUcxbGMzTmhaMlVzSUc5d2RHbHZibk1nS2k4cElIdGNiaUFnSUNCc1pYUWdZWEpuY3lBOUlGdDFibVJsWm1sdVpXUmRMRnh1SUNBZ0lDQWdiM0IwYVc5dWN5QTlJR0Z5WjNWdFpXNTBjMXRoY21kMWJXVnVkSE11YkdWdVozUm9JQzBnTVYwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvSUMwZ01Uc2dhU3NyS1NCN1hHNGdJQ0FnSUNCaGNtZHpMbkIxYzJnb1lYSm5kVzFsYm5SelcybGRLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnYkdWMlpXd2dQU0F4TzF4dUlDQWdJR2xtSUNodmNIUnBiMjV6TG1oaGMyZ3ViR1YyWld3Z0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ2JHVjJaV3dnUFNCdmNIUnBiMjV6TG1oaGMyZ3ViR1YyWld3N1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNodmNIUnBiMjV6TG1SaGRHRWdKaVlnYjNCMGFXOXVjeTVrWVhSaExteGxkbVZzSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUd4bGRtVnNJRDBnYjNCMGFXOXVjeTVrWVhSaExteGxkbVZzTzF4dUlDQWdJSDFjYmlBZ0lDQmhjbWR6V3pCZElEMGdiR1YyWld3N1hHNWNiaUFnSUNCcGJuTjBZVzVqWlM1c2IyY29MaTR1WVhKbmN5azdYRzRnSUgwcE8xeHVmVnh1SWwxOVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvb2t1cCcsIGZ1bmN0aW9uIChvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJobGJIQmxjbk12Ykc5dmEzVndMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN2NVSkJRV1VzVlVGQlV5eFJRVUZSTEVWQlFVVTdRVUZEYUVNc1ZVRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eFJRVUZSTEVWQlFVVXNWVUZCVXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJUdEJRVU01UkN4UlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRk96dEJRVVZTTEdGQlFVOHNSMEZCUnl4RFFVRkRPMHRCUTFvN1FVRkRSQ3hYUVVGUExFOUJRVThzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wZEJRek5ETEVOQlFVTXNRMEZCUXp0RFFVTktJaXdpWm1sc1pTSTZJbXh2YjJ0MWNDNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1WNGNHOXlkQ0JrWldaaGRXeDBJR1oxYm1OMGFXOXVLR2x1YzNSaGJtTmxLU0I3WEc0Z0lHbHVjM1JoYm1ObExuSmxaMmx6ZEdWeVNHVnNjR1Z5S0Nkc2IyOXJkWEFuTENCbWRXNWpkR2x2Ymlodlltb3NJR1pwWld4a0xDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vcElIdGNiaUFnSUNBZ0lDOHZJRTV2ZEdVZ1ptOXlJRFV1TURvZ1EyaGhibWRsSUhSdklGd2liMkpxSUQwOUlHNTFiR3hjSWlCcGJpQTFMakJjYmlBZ0lDQWdJSEpsZEhWeWJpQnZZbW83WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdmNIUnBiMjV6TG14dmIydDFjRkJ5YjNCbGNuUjVLRzlpYWl3Z1ptbGxiR1FwTzF4dUlDQjlLVHRjYm4xY2JpSmRmUT09XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4uL2V4Y2VwdGlvbicpO1xuXG52YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbiAoY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCcjd2l0aCByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBpZiAoX3V0aWxzLmlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgdmFyIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghX3V0aWxzLmlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gX3V0aWxzLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBfdXRpbHMuYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBfdXRpbHMuYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyaGxiSEJsY25NdmQybDBhQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPM0ZDUVUxUExGVkJRVlU3TzNsQ1FVTkxMR05CUVdNN096czdjVUpCUlhKQ0xGVkJRVk1zVVVGQlVTeEZRVUZGTzBGQlEyaERMRlZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSVHRCUVVONlJDeFJRVUZKTEZOQlFWTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRM3BDTEZsQlFVMHNNa0pCUVdNc2NVTkJRWEZETEVOQlFVTXNRMEZCUXp0TFFVTTFSRHRCUVVORUxGRkJRVWtzYTBKQlFWY3NUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRka0lzWVVGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE9VSTdPMEZCUlVRc1VVRkJTU3hGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXpzN1FVRkZjRUlzVVVGQlNTeERRVUZETEdWQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRja0lzVlVGQlNTeEpRVUZKTEVkQlFVY3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVONFFpeFZRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRWxCUVVrc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJUdEJRVU12UWl4WlFVRkpMRWRCUVVjc2JVSkJRVmtzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJwRExGbEJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NlVUpCUTJwQ0xFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVTjRRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVTm1MRU5CUVVNN1QwRkRTRHM3UVVGRlJDeGhRVUZQTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkRha0lzV1VGQlNTeEZRVUZGTEVsQlFVazdRVUZEVml4dFFrRkJWeXhGUVVGRkxHMUNRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMDlCUTJoRkxFTkJRVU1zUTBGQlF6dExRVU5LTEUxQlFVMDdRVUZEVEN4aFFVRlBMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTMEZET1VJN1IwRkRSaXhEUVVGRExFTkJRVU03UTBGRFNpSXNJbVpwYkdVaU9pSjNhWFJvTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdGNiaUFnWVhCd1pXNWtRMjl1ZEdWNGRGQmhkR2dzWEc0Z0lHSnNiMk5yVUdGeVlXMXpMRnh1SUNCamNtVmhkR1ZHY21GdFpTeGNiaUFnYVhORmJYQjBlU3hjYmlBZ2FYTkdkVzVqZEdsdmJseHVmU0JtY205dElDY3VMaTkxZEdsc2N5YzdYRzVwYlhCdmNuUWdSWGhqWlhCMGFXOXVJR1p5YjIwZ0p5NHVMMlY0WTJWd2RHbHZiaWM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdaMWJtTjBhVzl1S0dsdWMzUmhibU5sS1NCN1hHNGdJR2x1YzNSaGJtTmxMbkpsWjJsemRHVnlTR1ZzY0dWeUtDZDNhWFJvSnl3Z1puVnVZM1JwYjI0b1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUdsbUlDaGhjbWQxYldWdWRITXViR1Z1WjNSb0lDRTlJRElwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmVHTmxjSFJwYjI0b0p5TjNhWFJvSUhKbGNYVnBjbVZ6SUdWNFlXTjBiSGtnYjI1bElHRnlaM1Z0Wlc1MEp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHBjMFoxYm1OMGFXOXVLR052Ym5SbGVIUXBLU0I3WEc0Z0lDQWdJQ0JqYjI1MFpYaDBJRDBnWTI5dWRHVjRkQzVqWVd4c0tIUm9hWE1wTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCbWJpQTlJRzl3ZEdsdmJuTXVabTQ3WEc1Y2JpQWdJQ0JwWmlBb0lXbHpSVzF3ZEhrb1kyOXVkR1Y0ZENrcElIdGNiaUFnSUNBZ0lHeGxkQ0JrWVhSaElEMGdiM0IwYVc5dWN5NWtZWFJoTzF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdVpHRjBZU0FtSmlCdmNIUnBiMjV6TG1sa2N5a2dlMXh1SUNBZ0lDQWdJQ0JrWVhSaElEMGdZM0psWVhSbFJuSmhiV1VvYjNCMGFXOXVjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdaR0YwWVM1amIyNTBaWGgwVUdGMGFDQTlJR0Z3Y0dWdVpFTnZiblJsZUhSUVlYUm9LRnh1SUNBZ0lDQWdJQ0FnSUc5d2RHbHZibk11WkdGMFlTNWpiMjUwWlhoMFVHRjBhQ3hjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6TG1sa2Mxc3dYVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnWm00b1kyOXVkR1Y0ZEN3Z2UxeHVJQ0FnSUNBZ0lDQmtZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdJQ0JpYkc5amExQmhjbUZ0Y3pvZ1lteHZZMnRRWVhKaGJYTW9XMk52Ym5SbGVIUmRMQ0JiWkdGMFlTQW1KaUJrWVhSaExtTnZiblJsZUhSUVlYUm9YU2xjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2IzQjBhVzl1Y3k1cGJuWmxjbk5sS0hSb2FYTXBPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNTlYRzRpWFgwPVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5yZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzID0gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycztcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9kZWNvcmF0b3JzSW5saW5lID0gcmVxdWlyZSgnLi9kZWNvcmF0b3JzL2lubGluZScpO1xuXG52YXIgX2RlY29yYXRvcnNJbmxpbmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVjb3JhdG9yc0lubGluZSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMoaW5zdGFuY2UpIHtcbiAgX2RlY29yYXRvcnNJbmxpbmUyWydkZWZhdWx0J10oaW5zdGFuY2UpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMlJsWTI5eVlYUnZjbk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3WjBOQlFUSkNMSEZDUVVGeFFqczdPenRCUVVWNlF5eFRRVUZUTEhsQ1FVRjVRaXhEUVVGRExGRkJRVkVzUlVGQlJUdEJRVU5zUkN4blEwRkJaU3hSUVVGUkxFTkJRVU1zUTBGQlF6dERRVU14UWlJc0ltWnBiR1VpT2lKa1pXTnZjbUYwYjNKekxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsWjJsemRHVnlTVzVzYVc1bElHWnliMjBnSnk0dlpHVmpiM0poZEc5eWN5OXBibXhwYm1Vbk8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZuYVhOMFpYSkVaV1poZFd4MFJHVmpiM0poZEc5eWN5aHBibk4wWVc1alpTa2dlMXh1SUNCeVpXZHBjM1JsY2tsdWJHbHVaU2hwYm5OMFlXNWpaU2s3WEc1OVhHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uIChmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIHZhciByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24gKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhcnRpYWxzIHN0YWNrIGZyYW1lIHByaW9yIHRvIGV4ZWMuXG4gICAgICAgIHZhciBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFscztcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gX3V0aWxzLmV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgdmFyIHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJSbFkyOXlZWFJ2Y25NdmFXNXNhVzVsTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdjVUpCUVhWQ0xGVkJRVlU3TzNGQ1FVVnNRaXhWUVVGVExGRkJRVkVzUlVGQlJUdEJRVU5vUXl4VlFVRlJMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRlZCUVZNc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVWQlFVVXNUMEZCVHl4RlFVRkZPMEZCUXpORkxGRkJRVWtzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTmlMRkZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeEZRVUZGTzBGQlEyNUNMRmRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEzQkNMRk5CUVVjc1IwRkJSeXhWUVVGVExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVTdPMEZCUlM5Q0xGbEJRVWtzVVVGQlVTeEhRVUZITEZOQlFWTXNRMEZCUXl4UlFVRlJMRU5CUVVNN1FVRkRiRU1zYVVKQlFWTXNRMEZCUXl4UlFVRlJMRWRCUVVjc1kwRkJUeXhGUVVGRkxFVkJRVVVzVVVGQlVTeEZRVUZGTEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVNeFJDeFpRVUZKTEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBGQlF5OUNMR2xDUVVGVExFTkJRVU1zVVVGQlVTeEhRVUZITEZGQlFWRXNRMEZCUXp0QlFVTTVRaXhsUVVGUExFZEJRVWNzUTBGQlF6dFBRVU5hTEVOQlFVTTdTMEZEU0RzN1FVRkZSQ3hUUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRPenRCUVVVM1F5eFhRVUZQTEVkQlFVY3NRMEZCUXp0SFFVTmFMRU5CUVVNc1EwRkJRenREUVVOS0lpd2labWxzWlNJNkltbHViR2x1WlM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJR1Y0ZEdWdVpDQjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKRVpXTnZjbUYwYjNJb0oybHViR2x1WlNjc0lHWjFibU4wYVc5dUtHWnVMQ0J3Y205d2N5d2dZMjl1ZEdGcGJtVnlMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdiR1YwSUhKbGRDQTlJR1p1TzF4dUlDQWdJR2xtSUNnaGNISnZjSE11Y0dGeWRHbGhiSE1wSUh0Y2JpQWdJQ0FnSUhCeWIzQnpMbkJoY25ScFlXeHpJRDBnZTMwN1hHNGdJQ0FnSUNCeVpYUWdQU0JtZFc1amRHbHZiaWhqYjI1MFpYaDBMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFTnlaV0YwWlNCaElHNWxkeUJ3WVhKMGFXRnNjeUJ6ZEdGamF5Qm1jbUZ0WlNCd2NtbHZjaUIwYnlCbGVHVmpMbHh1SUNBZ0lDQWdJQ0JzWlhRZ2IzSnBaMmx1WVd3Z1BTQmpiMjUwWVdsdVpYSXVjR0Z5ZEdsaGJITTdYRzRnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTV3WVhKMGFXRnNjeUE5SUdWNGRHVnVaQ2g3ZlN3Z2IzSnBaMmx1WVd3c0lIQnliM0J6TG5CaGNuUnBZV3h6S1R0Y2JpQWdJQ0FnSUNBZ2JHVjBJSEpsZENBOUlHWnVLR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBPMXh1SUNBZ0lDQWdJQ0JqYjI1MFlXbHVaWEl1Y0dGeWRHbGhiSE1nUFNCdmNtbG5hVzVoYkR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGREdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NISnZjSE11Y0dGeWRHbGhiSE5iYjNCMGFXOXVjeTVoY21keld6QmRYU0E5SUc5d2RHbHZibk11Wm00N1hHNWNiaUFnSUNCeVpYUjFjbTRnY21WME8xeHVJQ0I5S1R0Y2JuMWNiaUpkZlE9PVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVOZXdMb29rdXBPYmplY3QgPSBjcmVhdGVOZXdMb29rdXBPYmplY3Q7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlTmV3TG9va3VwT2JqZWN0KCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgc291cmNlcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHNvdXJjZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gX3V0aWxzLmV4dGVuZC5hcHBseSh1bmRlZmluZWQsIFtPYmplY3QuY3JlYXRlKG51bGwpXS5jb25jYXQoc291cmNlcykpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJsdWRHVnlibUZzTDJOeVpXRjBaUzF1WlhjdGJHOXZhM1Z3TFc5aWFtVmpkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096dHhRa0ZCZFVJc1ZVRkJWVHM3T3pzN096czdPMEZCVVRGQ0xGTkJRVk1zY1VKQlFYRkNMRWRCUVdFN2IwTkJRVlFzVDBGQlR6dEJRVUZRTEZkQlFVODdPenRCUVVNNVF5eFRRVUZQTEdkRFFVRlBMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFVc3NUMEZCVHl4RlFVRkRMRU5CUVVNN1EwRkRhRVFpTENKbWFXeGxJam9pWTNKbFlYUmxMVzVsZHkxc2IyOXJkWEF0YjJKcVpXTjBMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1pYaDBaVzVrSUgwZ1puSnZiU0FuTGk0dmRYUnBiSE1uTzF4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlNCaElHNWxkeUJ2WW1wbFkzUWdkMmwwYUNCY0ltNTFiR3hjSWkxd2NtOTBiM1I1Y0dVZ2RHOGdZWFp2YVdRZ2RISjFkR2g1SUhKbGMzVnNkSE1nYjI0Z2NISnZkRzkwZVhCbElIQnliM0JsY25ScFpYTXVYRzRnS2lCVWFHVWdjbVZ6ZFd4MGFXNW5JRzlpYW1WamRDQmpZVzRnWW1VZ2RYTmxaQ0IzYVhSb0lGd2liMkpxWldOMFczQnliM0JsY25SNVhWd2lJSFJ2SUdOb1pXTnJJR2xtSUdFZ2NISnZjR1Z5ZEhrZ1pYaHBjM1J6WEc0Z0tpQkFjR0Z5WVcwZ2V5NHVMbTlpYW1WamRIMGdjMjkxY21ObGN5QmhJSFpoY21GeVozTWdjR0Z5WVcxbGRHVnlJRzltSUhOdmRYSmpaU0J2WW1wbFkzUnpJSFJvWVhRZ2QybHNiQ0JpWlNCdFpYSm5aV1JjYmlBcUlFQnlaWFIxY201eklIdHZZbXBsWTNSOVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqY21WaGRHVk9aWGRNYjI5cmRYQlBZbXBsWTNRb0xpNHVjMjkxY21ObGN5a2dlMXh1SUNCeVpYUjFjbTRnWlhoMFpXNWtLRTlpYW1WamRDNWpjbVZoZEdVb2JuVnNiQ2tzSUM0dUxuTnZkWEpqWlhNcE8xeHVmVnh1SWwxOVxuIiwiLy8gQnVpbGQgb3V0IG91ciBiYXNpYyBTYWZlU3RyaW5nIHR5cGVcbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmZ1bmN0aW9uIFNhZmVTdHJpbmcoc3RyaW5nKSB7XG4gIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xufVxuXG5TYWZlU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyA9IFNhZmVTdHJpbmcucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICcnICsgdGhpcy5zdHJpbmc7XG59O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBTYWZlU3RyaW5nO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwzTmhabVV0YzNSeWFXNW5MbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1FVRkRRU3hUUVVGVExGVkJRVlVzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZETVVJc1RVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRMEZEZEVJN08wRkJSVVFzVlVGQlZTeERRVUZETEZOQlFWTXNRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJWU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NXVUZCVnp0QlFVTjJSU3hUUVVGUExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPME5CUTNwQ0xFTkJRVU03TzNGQ1FVVmhMRlZCUVZVaUxDSm1hV3hsSWpvaWMyRm1aUzF6ZEhKcGJtY3Vhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdkx5QkNkV2xzWkNCdmRYUWdiM1Z5SUdKaGMybGpJRk5oWm1WVGRISnBibWNnZEhsd1pWeHVablZ1WTNScGIyNGdVMkZtWlZOMGNtbHVaeWh6ZEhKcGJtY3BJSHRjYmlBZ2RHaHBjeTV6ZEhKcGJtY2dQU0J6ZEhKcGJtYzdYRzU5WEc1Y2JsTmhabVZUZEhKcGJtY3VjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5JRDBnVTJGbVpWTjBjbWx1Wnk1d2NtOTBiM1I1Y0dVdWRHOUlWRTFNSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUFuSnlBcklIUm9hWE11YzNSeWFXNW5PMXh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1UyRm1aVk4wY21sdVp6dGNiaUpkZlE9PVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jaGVja1JldmlzaW9uID0gY2hlY2tSZXZpc2lvbjtcbmV4cG9ydHMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbmV4cG9ydHMud3JhcFByb2dyYW0gPSB3cmFwUHJvZ3JhbTtcbmV4cG9ydHMucmVzb2x2ZVBhcnRpYWwgPSByZXNvbHZlUGFydGlhbDtcbmV4cG9ydHMuaW52b2tlUGFydGlhbCA9IGludm9rZVBhcnRpYWw7XG5leHBvcnRzLm5vb3AgPSBub29wO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqWydkZWZhdWx0J10gPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG52YXIgX3V0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgVXRpbHMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfdXRpbHMpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xuXG52YXIgX2hlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcblxudmFyIF9pbnRlcm5hbFdyYXBIZWxwZXIgPSByZXF1aXJlKCcuL2ludGVybmFsL3dyYXBIZWxwZXInKTtcblxudmFyIF9pbnRlcm5hbFByb3RvQWNjZXNzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnKTtcblxuZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgdmFyIGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsXG4gICAgICBjdXJyZW50UmV2aXNpb24gPSBfYmFzZS5DT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiA+PSBfYmFzZS5MQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gJiYgY29tcGlsZXJSZXZpc2lvbiA8PSBfYmFzZS5DT01QSUxFUl9SRVZJU0lPTikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb21waWxlclJldmlzaW9uIDwgX2Jhc2UuTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgdmFyIHJ1bnRpbWVWZXJzaW9ucyA9IF9iYXNlLlJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IF9iYXNlLlJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgKyAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVWZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICsgJ1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVySW5mb1sxXSArICcpLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghZW52KSB7XG4gICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgdmFyIHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNyA9IHRlbXBsYXRlU3BlYy5jb21waWxlciAmJiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJbMF0gPT09IDc7XG5cbiAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7XG4gICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgb3B0aW9ucy5pZHNbMF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICB2YXIgZXh0ZW5kZWRPcHRpb25zID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICBob29rczogdGhpcy5ob29rcyxcbiAgICAgIHByb3RvQWNjZXNzQ29udHJvbDogdGhpcy5wcm90b0FjY2Vzc0NvbnRyb2xcbiAgICB9KTtcblxuICAgIHZhciByZXN1bHQgPSBlbnYuVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIGV4dGVuZGVkT3B0aW9ucyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgdmFyIGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIHZhciBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbiBzdHJpY3Qob2JqLCBuYW1lLCBsb2MpIHtcbiAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmosIHtcbiAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXIubG9va3VwUHJvcGVydHkob2JqLCBuYW1lKTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbiBsb29rdXBQcm9wZXJ0eShwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoX2ludGVybmFsUHJvdG9BY2Nlc3MucmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKGRlcHRocywgbmFtZSkge1xuICAgICAgdmFyIGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkZXB0aHNbaV0gJiYgY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KGRlcHRoc1tpXSwgbmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBkZXB0aHNbaV1bbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxhbWJkYTogZnVuY3Rpb24gbGFtYmRhKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24gZm4oaSkge1xuICAgICAgdmFyIHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uIHByb2dyYW0oaSwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgICAgdmFyIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSxcbiAgICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSh2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlSWZOZWVkZWQ6IGZ1bmN0aW9uIG1lcmdlSWZOZWVkZWQocGFyYW0sIGNvbW1vbikge1xuICAgICAgdmFyIG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIHZhciBkZXB0aHMgPSB1bmRlZmluZWQsXG4gICAgICAgIGJsb2NrUGFyYW1zID0gdGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRlcHRocykge1xuICAgICAgICBkZXB0aHMgPSBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuICcnICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIHZhciBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKG9wdGlvbnMucGFydGlhbHMsIGVudi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5kZWNvcmF0b3JzLCBvcHRpb25zLmRlY29yYXRvcnMpO1xuICAgICAgfVxuXG4gICAgICBjb250YWluZXIuaG9va3MgPSB7fTtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBfaW50ZXJuYWxQcm90b0FjY2Vzcy5jcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wob3B0aW9ucyk7XG5cbiAgICAgIHZhciBrZWVwSGVscGVySW5IZWxwZXJzID0gb3B0aW9ucy5hbGxvd0NhbGxzVG9IZWxwZXJNaXNzaW5nIHx8IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNztcbiAgICAgIF9oZWxwZXJzLm1vdmVIZWxwZXJUb0hvb2tzKGNvbnRhaW5lciwgJ2hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICAgIF9oZWxwZXJzLm1vdmVIZWxwZXJUb0hvb2tzKGNvbnRhaW5lciwgJ2Jsb2NrSGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gb3B0aW9ucy5wcm90b0FjY2Vzc0NvbnRyb2w7IC8vIGludGVybmFsIG9wdGlvblxuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBvcHRpb25zLmhlbHBlcnM7XG4gICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzO1xuICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBvcHRpb25zLmRlY29yYXRvcnM7XG4gICAgICBjb250YWluZXIuaG9va3MgPSBvcHRpb25zLmhvb2tzO1xuICAgIH1cbiAgfTtcblxuICByZXQuX2NoaWxkID0gZnVuY3Rpb24gKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ211c3QgcGFzcyBwYXJlbnQgZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgdGVtcGxhdGVTcGVjW2ldLCBkYXRhLCAwLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICBmdW5jdGlvbiBwcm9nKGNvbnRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgdmFyIGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSAmJiAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIG9wdGlvbnMuZGF0YSB8fCBkYXRhLCBibG9ja1BhcmFtcyAmJiBbb3B0aW9ucy5ibG9ja1BhcmFtc10uY29uY2F0KGJsb2NrUGFyYW1zKSwgY3VycmVudERlcHRocyk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuXG5mdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nXG4gICAgb3B0aW9ucy5uYW1lID0gcGFydGlhbDtcbiAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1twYXJ0aWFsXTtcbiAgfVxuICByZXR1cm4gcGFydGlhbDtcbn1cblxuZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgdmFyIGN1cnJlbnRQYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gIG9wdGlvbnMucGFydGlhbCA9IHRydWU7XG4gIGlmIChvcHRpb25zLmlkcykge1xuICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCA9IG9wdGlvbnMuaWRzWzBdIHx8IG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aDtcbiAgfVxuXG4gIHZhciBwYXJ0aWFsQmxvY2sgPSB1bmRlZmluZWQ7XG4gIGlmIChvcHRpb25zLmZuICYmIG9wdGlvbnMuZm4gIT09IG5vb3ApIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgb3B0aW9ucy5kYXRhID0gX2Jhc2UuY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgIC8vIFdyYXBwZXIgZnVuY3Rpb24gdG8gZ2V0IGFjY2VzcyB0byBjdXJyZW50UGFydGlhbEJsb2NrIGZyb20gdGhlIGNsb3N1cmVcbiAgICAgIHZhciBmbiA9IG9wdGlvbnMuZm47XG4gICAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoY29udGV4dCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgICAgIC8vIFJlc3RvcmUgdGhlIHBhcnRpYWwtYmxvY2sgZnJvbSB0aGUgY2xvc3VyZSBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IF9iYXNlLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddID0gY3VycmVudFBhcnRpYWxCbG9jaztcbiAgICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICAgIGlmIChmbi5wYXJ0aWFscykge1xuICAgICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQgJiYgcGFydGlhbEJsb2NrKSB7XG4gICAgcGFydGlhbCA9IHBhcnRpYWxCbG9jaztcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gX2Jhc2UuY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG5cbmZ1bmN0aW9uIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKSB7XG4gIE9iamVjdC5rZXlzKG1lcmdlZEhlbHBlcnMpLmZvckVhY2goZnVuY3Rpb24gKGhlbHBlck5hbWUpIHtcbiAgICB2YXIgaGVscGVyID0gbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdID0gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcikge1xuICB2YXIgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiBfaW50ZXJuYWxXcmFwSGVscGVyLndyYXBIZWxwZXIoaGVscGVyLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eTogbG9va3VwUHJvcGVydHkgfSwgb3B0aW9ucyk7XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMM0oxYm5ScGJXVXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenM3T3pzN096czdjVUpCUVhWQ0xGTkJRVk03TzBsQlFYQkNMRXRCUVVzN08zbENRVU5MTEdGQlFXRTdPenM3YjBKQlRUVkNMRkZCUVZFN08zVkNRVU50UWl4WFFVRlhPenRyUTBGRGJFSXNkVUpCUVhWQ096dHRRMEZKTTBNc2VVSkJRWGxDT3p0QlFVVjZRaXhUUVVGVExHRkJRV0VzUTBGQlF5eFpRVUZaTEVWQlFVVTdRVUZETVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4QlFVRkRMRmxCUVZrc1NVRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVc3NRMEZCUXp0TlFVTTNSQ3hsUVVGbExEQkNRVUZ2UWl4RFFVRkRPenRCUVVWMFF5eE5RVU5GTEdkQ1FVRm5RaXd5UTBGQmNVTXNTVUZEY2tRc1owSkJRV2RDTERKQ1FVRnhRaXhGUVVOeVF6dEJRVU5CTEZkQlFVODdSMEZEVWpzN1FVRkZSQ3hOUVVGSkxHZENRVUZuUWl3d1EwRkJiME1zUlVGQlJUdEJRVU40UkN4UlFVRk5MR1ZCUVdVc1IwRkJSeXgxUWtGQmFVSXNaVUZCWlN4RFFVRkRPMUZCUTNaRUxHZENRVUZuUWl4SFFVRkhMSFZDUVVGcFFpeG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8wRkJRM2hFTEZWQlFVMHNNa0pCUTBvc2VVWkJRWGxHTEVkQlEzWkdMSEZFUVVGeFJDeEhRVU55UkN4bFFVRmxMRWRCUTJZc2JVUkJRVzFFTEVkQlEyNUVMR2RDUVVGblFpeEhRVU5vUWl4SlFVRkpMRU5CUTFBc1EwRkJRenRIUVVOSUxFMUJRVTA3TzBGQlJVd3NWVUZCVFN3eVFrRkRTaXgzUmtGQmQwWXNSMEZEZEVZc2FVUkJRV2xFTEVkQlEycEVMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGRFppeEpRVUZKTEVOQlExQXNRMEZCUXp0SFFVTklPME5CUTBZN08wRkJSVTBzVTBGQlV5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RlFVRkZMRWRCUVVjc1JVRkJSVHM3UVVGRk1VTXNUVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVOU0xGVkJRVTBzTWtKQlFXTXNiVU5CUVcxRExFTkJRVU1zUTBGQlF6dEhRVU14UkR0QlFVTkVMRTFCUVVrc1EwRkJReXhaUVVGWkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTNaRExGVkJRVTBzTWtKQlFXTXNNa0pCUVRKQ0xFZEJRVWNzVDBGQlR5eFpRVUZaTEVOQlFVTXNRMEZCUXp0SFFVTjRSVHM3UVVGRlJDeGpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZET3pzN08wRkJTV3hFTEV0QlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN08wRkJSelZETEUxQlFVMHNiME5CUVc5RExFZEJRM2hETEZsQlFWa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1dVRkJXU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSVEZFTEZkQlFWTXNiMEpCUVc5Q0xFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVN1FVRkRka1FzVVVGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTJoQ0xHRkJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJ4RUxGVkJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTm1MR1ZCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMDlCUTNaQ08wdEJRMFk3UVVGRFJDeFhRVUZQTEVkQlFVY3NSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVjBSU3hSUVVGSkxHVkJRV1VzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVVU3UVVGRE9VTXNWMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEhkQ1FVRnJRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJN1MwRkROVU1zUTBGQlF5eERRVUZET3p0QlFVVklMRkZCUVVrc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkRjRU1zU1VGQlNTeEZRVU5LTEU5QlFVOHNSVUZEVUN4UFFVRlBMRVZCUTFBc1pVRkJaU3hEUVVOb1FpeERRVUZET3p0QlFVVkdMRkZCUVVrc1RVRkJUU3hKUVVGSkxFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJwRExHRkJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlF6RkRMRTlCUVU4c1JVRkRVQ3haUVVGWkxFTkJRVU1zWlVGQlpTeEZRVU0xUWl4SFFVRkhMRU5CUTBvc1EwRkJRenRCUVVOR0xGbEJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNaVUZCWlN4RFFVRkRMRU5CUVVNN1MwRkRia1U3UVVGRFJDeFJRVUZKTEUxQlFVMHNTVUZCU1N4SlFVRkpMRVZCUVVVN1FVRkRiRUlzVlVGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4Q0xGbEJRVWtzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGREwwSXNZVUZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTTFReXhqUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzBGQlF6VkNMR3RDUVVGTk8xZEJRMUE3TzBGQlJVUXNaVUZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JETzBGQlEwUXNZMEZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdUMEZETTBJN1FVRkRSQ3hoUVVGUExFMUJRVTBzUTBGQlF6dExRVU5tTEUxQlFVMDdRVUZEVEN4WlFVRk5MREpDUVVOS0xHTkJRV01zUjBGRFdpeFBRVUZQTEVOQlFVTXNTVUZCU1N4SFFVTmFMREJFUVVFd1JDeERRVU0zUkN4RFFVRkRPMHRCUTBnN1IwRkRSanM3TzBGQlIwUXNUVUZCU1N4VFFVRlRMRWRCUVVjN1FVRkRaQ3hWUVVGTkxFVkJRVVVzWjBKQlFWTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hIUVVGSExFVkJRVVU3UVVGREwwSXNWVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVRXNRVUZCUXl4RlFVRkZPMEZCUXpGQ0xHTkJRVTBzTWtKQlFXTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1IwRkJSeXh0UWtGQmJVSXNSMEZCUnl4SFFVRkhMRVZCUVVVN1FVRkRNVVFzWVVGQlJ5eEZRVUZGTEVkQlFVYzdVMEZEVkN4RFFVRkRMRU5CUVVNN1QwRkRTanRCUVVORUxHRkJRVThzVTBGQlV5eERRVUZETEdOQlFXTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE5VTTdRVUZEUkN4clFrRkJZeXhGUVVGRkxIZENRVUZUTEUxQlFVMHNSVUZCUlN4WlFVRlpMRVZCUVVVN1FVRkROME1zVlVGQlNTeE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRMnhETEZWQlFVa3NUVUZCVFN4SlFVRkpMRWxCUVVrc1JVRkJSVHRCUVVOc1FpeGxRVUZQTEUxQlFVMHNRMEZCUXp0UFFVTm1PMEZCUTBRc1ZVRkJTU3hOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEZRVUZGTzBGQlF6bEVMR1ZCUVU4c1RVRkJUU3hEUVVGRE8wOUJRMlk3TzBGQlJVUXNWVUZCU1N4eFEwRkJaMElzVFVGQlRTeEZRVUZGTEZOQlFWTXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeFpRVUZaTEVOQlFVTXNSVUZCUlR0QlFVTjJSU3hsUVVGUExFMUJRVTBzUTBGQlF6dFBRVU5tTzBGQlEwUXNZVUZCVHl4VFFVRlRMRU5CUVVNN1MwRkRiRUk3UVVGRFJDeFZRVUZOTEVWQlFVVXNaMEpCUVZNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJUdEJRVU0zUWl4VlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF6RkNMRmRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRE5VSXNXVUZCU1N4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEZOQlFWTXNRMEZCUXl4alFVRmpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNCRkxGbEJRVWtzVFVGQlRTeEpRVUZKTEVsQlFVa3NSVUZCUlR0QlFVTnNRaXhwUWtGQlR5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRGVFSTdUMEZEUmp0TFFVTkdPMEZCUTBRc1ZVRkJUU3hGUVVGRkxHZENRVUZUTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVN1FVRkRha01zWVVGQlR5eFBRVUZQTEU5QlFVOHNTMEZCU3l4VlFVRlZMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1MwRkRlRVU3TzBGQlJVUXNiMEpCUVdkQ0xFVkJRVVVzUzBGQlN5eERRVUZETEdkQ1FVRm5RanRCUVVONFF5eHBRa0ZCWVN4RlFVRkZMRzlDUVVGdlFqczdRVUZGYmtNc1RVRkJSU3hGUVVGRkxGbEJRVk1zUTBGQlF5eEZRVUZGTzBGQlEyUXNWVUZCU1N4SFFVRkhMRWRCUVVjc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6RkNMRk5CUVVjc1EwRkJReXhUUVVGVExFZEJRVWNzV1VGQldTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOMlF5eGhRVUZQTEVkQlFVY3NRMEZCUXp0TFFVTmFPenRCUVVWRUxGbEJRVkVzUlVGQlJTeEZRVUZGTzBGQlExb3NWMEZCVHl4RlFVRkZMR2xDUVVGVExFTkJRVU1zUlVGQlJTeEpRVUZKTEVWQlFVVXNiVUpCUVcxQ0xFVkJRVVVzVjBGQlZ5eEZRVUZGTEUxQlFVMHNSVUZCUlR0QlFVTnVSU3hWUVVGSkxHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRWUVVOdVF5eEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5zUWl4VlFVRkpMRWxCUVVrc1NVRkJTU3hOUVVGTkxFbEJRVWtzVjBGQlZ5eEpRVUZKTEcxQ1FVRnRRaXhGUVVGRk8wRkJRM2hFTEhOQ1FVRmpMRWRCUVVjc1YwRkJWeXhEUVVNeFFpeEpRVUZKTEVWQlEwb3NRMEZCUXl4RlFVTkVMRVZCUVVVc1JVRkRSaXhKUVVGSkxFVkJRMG9zYlVKQlFXMUNMRVZCUTI1Q0xGZEJRVmNzUlVGRFdDeE5RVUZOTEVOQlExQXNRMEZCUXp0UFFVTklMRTFCUVUwc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJUdEJRVU14UWl4elFrRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1YwRkJWeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1QwRkRPVVE3UVVGRFJDeGhRVUZQTEdOQlFXTXNRMEZCUXp0TFFVTjJRanM3UVVGRlJDeFJRVUZKTEVWQlFVVXNZMEZCVXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRk8wRkJRek5DTEdGQlFVOHNTMEZCU3l4SlFVRkpMRXRCUVVzc1JVRkJSU3hGUVVGRk8wRkJRM1pDTEdGQlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRE8wOUJRM1pDTzBGQlEwUXNZVUZCVHl4TFFVRkxMRU5CUVVNN1MwRkRaRHRCUVVORUxHbENRVUZoTEVWQlFVVXNkVUpCUVZNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJUdEJRVU55UXl4VlFVRkpMRWRCUVVjc1IwRkJSeXhMUVVGTExFbEJRVWtzVFVGQlRTeERRVUZET3p0QlFVVXhRaXhWUVVGSkxFdEJRVXNzU1VGQlNTeE5RVUZOTEVsQlFVa3NTMEZCU3l4TFFVRkxMRTFCUVUwc1JVRkJSVHRCUVVOMlF5eFhRVUZITEVkQlFVY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMDlCUTNaRE96dEJRVVZFTEdGQlFVOHNSMEZCUnl4RFFVRkRPMHRCUTFvN08wRkJSVVFzWlVGQlZ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRE96dEJRVVUxUWl4UlFVRkpMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTzBGQlEycENMR2RDUVVGWkxFVkJRVVVzV1VGQldTeERRVUZETEZGQlFWRTdSMEZEY0VNc1EwRkJRenM3UVVGRlJpeFhRVUZUTEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVdkQ08xRkJRV1FzVDBGQlR5eDVSRUZCUnl4RlFVRkZPenRCUVVOb1F5eFJRVUZKTEVsQlFVa3NSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRE96dEJRVVY0UWl4UFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzQkNMRkZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eEpRVUZKTEZsQlFWa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkROVU1zVlVGQlNTeEhRVUZITEZGQlFWRXNRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGFFTTdRVUZEUkN4UlFVRkpMRTFCUVUwc1dVRkJRVHRSUVVOU0xGZEJRVmNzUjBGQlJ5eFpRVUZaTEVOQlFVTXNZMEZCWXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRE4wUXNVVUZCU1N4WlFVRlpMRU5CUVVNc1UwRkJVeXhGUVVGRk8wRkJRekZDTEZWQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOc1FpeGpRVUZOTEVkQlEwb3NUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlEzaENMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkRhRU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXp0UFFVTjBRaXhOUVVGTk8wRkJRMHdzWTBGQlRTeEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1QwRkRjRUk3UzBGRFJqczdRVUZGUkN4aFFVRlRMRWxCUVVrc1EwRkJReXhQUVVGUExHZENRVUZuUWp0QlFVTnVReXhoUVVORkxFVkJRVVVzUjBGRFJpeFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVTm1MRk5CUVZNc1JVRkRWQ3hQUVVGUExFVkJRMUFzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZEYWtJc1UwRkJVeXhEUVVGRExGRkJRVkVzUlVGRGJFSXNTVUZCU1N4RlFVTktMRmRCUVZjc1JVRkRXQ3hOUVVGTkxFTkJRMUFzUTBGRFJEdExRVU5JT3p0QlFVVkVMRkZCUVVrc1IwRkJSeXhwUWtGQmFVSXNRMEZEZEVJc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGRGFrSXNTVUZCU1N4RlFVTktMRk5CUVZNc1JVRkRWQ3hQUVVGUExFTkJRVU1zVFVGQlRTeEpRVUZKTEVWQlFVVXNSVUZEY0VJc1NVRkJTU3hGUVVOS0xGZEJRVmNzUTBGRFdpeERRVUZETzBGQlEwWXNWMEZCVHl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBkQlF5OUNPenRCUVVWRUxFdEJRVWNzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRPenRCUVVWcVFpeExRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkhMRlZCUVZNc1QwRkJUeXhGUVVGRk8wRkJRemRDTEZGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhGUVVGRk8wRkJRM0JDTEZWQlFVa3NZVUZCWVN4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEyNUZMSEZEUVVFclFpeERRVUZETEdGQlFXRXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRCUVVNeFJDeGxRVUZUTEVOQlFVTXNUMEZCVHl4SFFVRkhMR0ZCUVdFc1EwRkJRenM3UVVGRmJFTXNWVUZCU1N4WlFVRlpMRU5CUVVNc1ZVRkJWU3hGUVVGRk96dEJRVVV6UWl4cFFrRkJVeXhEUVVGRExGRkJRVkVzUjBGQlJ5eFRRVUZUTEVOQlFVTXNZVUZCWVN4RFFVTXhReXhQUVVGUExFTkJRVU1zVVVGQlVTeEZRVU5vUWl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVOaUxFTkJRVU03VDBGRFNEdEJRVU5FTEZWQlFVa3NXVUZCV1N4RFFVRkRMRlZCUVZVc1NVRkJTU3haUVVGWkxFTkJRVU1zWVVGQllTeEZRVUZGTzBGQlEzcEVMR2xDUVVGVExFTkJRVU1zVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUTJwRExFVkJRVVVzUlVGRFJpeEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVTmtMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRMjVDTEVOQlFVTTdUMEZEU0RzN1FVRkZSQ3hsUVVGVExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTnlRaXhsUVVGVExFTkJRVU1zYTBKQlFXdENMRWRCUVVjc09FTkJRWGxDTEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVWcVJTeFZRVUZKTEcxQ1FVRnRRaXhIUVVOeVFpeFBRVUZQTEVOQlFVTXNlVUpCUVhsQ0xFbEJRMnBETEc5RFFVRnZReXhEUVVGRE8wRkJRM1pETEdsRFFVRnJRaXhUUVVGVExFVkJRVVVzWlVGQlpTeEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExFTkJRVU03UVVGRGJrVXNhVU5CUVd0Q0xGTkJRVk1zUlVGQlJTeHZRa0ZCYjBJc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMHRCUTNwRkxFMUJRVTA3UVVGRFRDeGxRVUZUTEVOQlFVTXNhMEpCUVd0Q0xFZEJRVWNzVDBGQlR5eERRVUZETEd0Q1FVRnJRaXhEUVVGRE8wRkJRekZFTEdWQlFWTXNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF6dEJRVU53UXl4bFFVRlRMRU5CUVVNc1VVRkJVU3hIUVVGSExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZEZEVNc1pVRkJVeXhEUVVGRExGVkJRVlVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNWVUZCVlN4RFFVRkRPMEZCUXpGRExHVkJRVk1zUTBGQlF5eExRVUZMTEVkQlFVY3NUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJRenRMUVVOcVF6dEhRVU5HTEVOQlFVTTdPMEZCUlVZc1MwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZUTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1YwRkJWeXhGUVVGRkxFMUJRVTBzUlVGQlJUdEJRVU5zUkN4UlFVRkpMRmxCUVZrc1EwRkJReXhqUVVGakxFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVTdRVUZETDBNc1dVRkJUU3d5UWtGQll5eDNRa0ZCZDBJc1EwRkJReXhEUVVGRE8wdEJReTlETzBGQlEwUXNVVUZCU1N4WlFVRlpMRU5CUVVNc1UwRkJVeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEzSkRMRmxCUVUwc01rSkJRV01zZVVKQlFYbENMRU5CUVVNc1EwRkJRenRMUVVOb1JEczdRVUZGUkN4WFFVRlBMRmRCUVZjc1EwRkRhRUlzVTBGQlV5eEZRVU5VTEVOQlFVTXNSVUZEUkN4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRMllzU1VGQlNTeEZRVU5LTEVOQlFVTXNSVUZEUkN4WFFVRlhMRVZCUTFnc1RVRkJUU3hEUVVOUUxFTkJRVU03UjBGRFNDeERRVUZETzBGQlEwWXNVMEZCVHl4SFFVRkhMRU5CUVVNN1EwRkRXanM3UVVGRlRTeFRRVUZUTEZkQlFWY3NRMEZEZWtJc1UwRkJVeXhGUVVOVUxFTkJRVU1zUlVGRFJDeEZRVUZGTEVWQlEwWXNTVUZCU1N4RlFVTktMRzFDUVVGdFFpeEZRVU51UWl4WFFVRlhMRVZCUTFnc1RVRkJUU3hGUVVOT08wRkJRMEVzVjBGQlV5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRm5RanRSUVVGa0xFOUJRVThzZVVSQlFVY3NSVUZCUlRzN1FVRkRha01zVVVGQlNTeGhRVUZoTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUXpOQ0xGRkJRMFVzVFVGQlRTeEpRVU5PTEU5QlFVOHNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRM0JDTEVWQlFVVXNUMEZCVHl4TFFVRkxMRk5CUVZNc1EwRkJReXhYUVVGWExFbEJRVWtzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRU3hCUVVGRExFVkJRekZFTzBGQlEwRXNiVUpCUVdFc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRMUVVNeFF6czdRVUZGUkN4WFFVRlBMRVZCUVVVc1EwRkRVQ3hUUVVGVExFVkJRMVFzVDBGQlR5eEZRVU5RTEZOQlFWTXNRMEZCUXl4UFFVRlBMRVZCUTJwQ0xGTkJRVk1zUTBGQlF5eFJRVUZSTEVWQlEyeENMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeEZRVU53UWl4WFFVRlhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVONFJDeGhRVUZoTEVOQlEyUXNRMEZCUXp0SFFVTklPenRCUVVWRUxFMUJRVWtzUjBGQlJ5eHBRa0ZCYVVJc1EwRkJReXhGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEZOQlFWTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZET3p0QlFVVjZSU3hOUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhOUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU40UXl4TlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExHMUNRVUZ0UWl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVNMVF5eFRRVUZQTEVsQlFVa3NRMEZCUXp0RFFVTmlPenM3T3pzN1FVRkxUU3hUUVVGVExHTkJRV01zUTBGQlF5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSVHRCUVVONFJDeE5RVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTFvc1VVRkJTU3hQUVVGUExFTkJRVU1zU1VGQlNTeExRVUZMTEdkQ1FVRm5RaXhGUVVGRk8wRkJRM0pETEdGQlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzB0QlEzcERMRTFCUVUwN1FVRkRUQ3hoUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE1VTTdSMEZEUml4TlFVRk5MRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSVHM3UVVGRmVrTXNWMEZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhQUVVGUExFTkJRVU03UVVGRGRrSXNWMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdSMEZEY2tNN1FVRkRSQ3hUUVVGUExFOUJRVThzUTBGQlF6dERRVU5vUWpzN1FVRkZUU3hUUVVGVExHRkJRV0VzUTBGQlF5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSVHM3UVVGRmRrUXNUVUZCVFN4dFFrRkJiVUlzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTTdRVUZETVVVc1UwRkJUeXhEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTTdRVUZEZGtJc1RVRkJTU3hQUVVGUExFTkJRVU1zUjBGQlJ5eEZRVUZGTzBGQlEyWXNWMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXp0SFFVTjJSVHM3UVVGRlJDeE5RVUZKTEZsQlFWa3NXVUZCUVN4RFFVRkRPMEZCUTJwQ0xFMUJRVWtzVDBGQlR5eERRVUZETEVWQlFVVXNTVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFbEJRVWtzUlVGQlJUczdRVUZEY2tNc1lVRkJUeXhEUVVGRExFbEJRVWtzUjBGQlJ5eHJRa0ZCV1N4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03TzBGQlJYcERMRlZCUVVrc1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTTdRVUZEY0VJc2EwSkJRVmtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExGTkJRVk1zYlVKQlFXMUNMRU5CUTNwRkxFOUJRVThzUlVGRlVEdFpRVVJCTEU5QlFVOHNlVVJCUVVjc1JVRkJSVHM3T3p0QlFVbGFMR1ZCUVU4c1EwRkJReXhKUVVGSkxFZEJRVWNzYTBKQlFWa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRM3BETEdWQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzYlVKQlFXMUNMRU5CUVVNN1FVRkRjRVFzWlVGQlR5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wOUJRemRDTEVOQlFVTTdRVUZEUml4VlFVRkpMRVZCUVVVc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRFppeGxRVUZQTEVOQlFVTXNVVUZCVVN4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzA5QlEzQkZPenRIUVVOR096dEJRVVZFTEUxQlFVa3NUMEZCVHl4TFFVRkxMRk5CUVZNc1NVRkJTU3haUVVGWkxFVkJRVVU3UVVGRGVrTXNWMEZCVHl4SFFVRkhMRmxCUVZrc1EwRkJRenRIUVVONFFqczdRVUZGUkN4TlFVRkpMRTlCUVU4c1MwRkJTeXhUUVVGVExFVkJRVVU3UVVGRGVrSXNWVUZCVFN3eVFrRkJZeXhqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NSMEZCUnl4eFFrRkJjVUlzUTBGQlF5eERRVUZETzBkQlF6VkZMRTFCUVUwc1NVRkJTU3hQUVVGUExGbEJRVmtzVVVGQlVTeEZRVUZGTzBGQlEzUkRMRmRCUVU4c1QwRkJUeXhEUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0SFFVTnNRenREUVVOR096dEJRVVZOTEZOQlFWTXNTVUZCU1N4SFFVRkhPMEZCUTNKQ0xGTkJRVThzUlVGQlJTeERRVUZETzBOQlExZzdPMEZCUlVRc1UwRkJVeXhSUVVGUkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NSVUZCUlR0QlFVTXZRaXhOUVVGSkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVXNUVUZCVFN4SlFVRkpMRWxCUVVrc1EwRkJRU3hCUVVGRExFVkJRVVU3UVVGRE9VSXNVVUZCU1N4SFFVRkhMRWxCUVVrc1IwRkJSeXhyUWtGQldTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRja01zVVVGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4UFFVRlBMRU5CUVVNN1IwRkRja0k3UVVGRFJDeFRRVUZQTEVsQlFVa3NRMEZCUXp0RFFVTmlPenRCUVVWRUxGTkJRVk1zYVVKQlFXbENMRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFRRVUZUTEVWQlFVVXNUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hYUVVGWExFVkJRVVU3UVVGRGVrVXNUVUZCU1N4RlFVRkZMRU5CUVVNc1UwRkJVeXhGUVVGRk8wRkJRMmhDTEZGQlFVa3NTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVObUxGRkJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVTnFRaXhKUVVGSkxFVkJRMG9zUzBGQlN5eEZRVU5NTEZOQlFWTXNSVUZEVkN4TlFVRk5MRWxCUVVrc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVU51UWl4SlFVRkpMRVZCUTBvc1YwRkJWeXhGUVVOWUxFMUJRVTBzUTBGRFVDeERRVUZETzBGQlEwWXNVMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdSMEZETTBJN1FVRkRSQ3hUUVVGUExFbEJRVWtzUTBGQlF6dERRVU5pT3p0QlFVVkVMRk5CUVZNc0swSkJRU3RDTEVOQlFVTXNZVUZCWVN4RlFVRkZMRk5CUVZNc1JVRkJSVHRCUVVOcVJTeFJRVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZCTEZWQlFWVXNSVUZCU1R0QlFVTXZReXhSUVVGSkxFMUJRVTBzUjBGQlJ5eGhRVUZoTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRka01zYVVKQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXgzUWtGQmQwSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03UjBGRGVrVXNRMEZCUXl4RFFVRkRPME5CUTBvN08wRkJSVVFzVTBGQlV5eDNRa0ZCZDBJc1EwRkJReXhOUVVGTkxFVkJRVVVzVTBGQlV5eEZRVUZGTzBGQlEyNUVMRTFCUVUwc1kwRkJZeXhIUVVGSExGTkJRVk1zUTBGQlF5eGpRVUZqTEVOQlFVTTdRVUZEYUVRc1UwRkJUeXdyUWtGQlZ5eE5RVUZOTEVWQlFVVXNWVUZCUVN4UFFVRlBMRVZCUVVrN1FVRkRia01zVjBGQlR5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1kwRkJZeXhGUVVGa0xHTkJRV01zUlVGQlJTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMGRCUTJ4RUxFTkJRVU1zUTBGQlF6dERRVU5LSWl3aVptbHNaU0k2SW5KMWJuUnBiV1V1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJWZEdsc2N5Qm1jbTl0SUNjdUwzVjBhV3h6Snp0Y2JtbHRjRzl5ZENCRmVHTmxjSFJwYjI0Z1puSnZiU0FuTGk5bGVHTmxjSFJwYjI0bk8xeHVhVzF3YjNKMElIdGNiaUFnUTA5TlVFbE1SVkpmVWtWV1NWTkpUMDRzWEc0Z0lHTnlaV0YwWlVaeVlXMWxMRnh1SUNCTVFWTlVYME5QVFZCQlZFbENURVZmUTA5TlVFbE1SVkpmVWtWV1NWTkpUMDRzWEc0Z0lGSkZWa2xUU1U5T1gwTklRVTVIUlZOY2JuMGdabkp2YlNBbkxpOWlZWE5sSnp0Y2JtbHRjRzl5ZENCN0lHMXZkbVZJWld4d1pYSlViMGh2YjJ0eklIMGdabkp2YlNBbkxpOW9aV3h3WlhKekp6dGNibWx0Y0c5eWRDQjdJSGR5WVhCSVpXeHdaWElnZlNCbWNtOXRJQ2N1TDJsdWRHVnlibUZzTDNkeVlYQklaV3h3WlhJbk8xeHVhVzF3YjNKMElIdGNiaUFnWTNKbFlYUmxVSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNMRnh1SUNCeVpYTjFiSFJKYzBGc2JHOTNaV1JjYm4wZ1puSnZiU0FuTGk5cGJuUmxjbTVoYkM5d2NtOTBieTFoWTJObGMzTW5PMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJobFkydFNaWFpwYzJsdmJpaGpiMjF3YVd4bGNrbHVabThwSUh0Y2JpQWdZMjl1YzNRZ1kyOXRjR2xzWlhKU1pYWnBjMmx2YmlBOUlDaGpiMjF3YVd4bGNrbHVabThnSmlZZ1kyOXRjR2xzWlhKSmJtWnZXekJkS1NCOGZDQXhMRnh1SUNBZ0lHTjFjbkpsYm5SU1pYWnBjMmx2YmlBOUlFTlBUVkJKVEVWU1gxSkZWa2xUU1U5T08xeHVYRzRnSUdsbUlDaGNiaUFnSUNCamIyMXdhV3hsY2xKbGRtbHphVzl1SUQ0OUlFeEJVMVJmUTA5TlVFRlVTVUpNUlY5RFQwMVFTVXhGVWw5U1JWWkpVMGxQVGlBbUpseHVJQ0FnSUdOdmJYQnBiR1Z5VW1WMmFYTnBiMjRnUEQwZ1EwOU5VRWxNUlZKZlVrVldTVk5KVDA1Y2JpQWdLU0I3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0dOdmJYQnBiR1Z5VW1WMmFYTnBiMjRnUENCTVFWTlVYME5QVFZCQlZFbENURVZmUTA5TlVFbE1SVkpmVWtWV1NWTkpUMDRwSUh0Y2JpQWdJQ0JqYjI1emRDQnlkVzUwYVcxbFZtVnljMmx2Ym5NZ1BTQlNSVlpKVTBsUFRsOURTRUZPUjBWVFcyTjFjbkpsYm5SU1pYWnBjMmx2Ymwwc1hHNGdJQ0FnSUNCamIyMXdhV3hsY2xabGNuTnBiMjV6SUQwZ1VrVldTVk5KVDA1ZlEwaEJUa2RGVTF0amIyMXdhV3hsY2xKbGRtbHphVzl1WFR0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0Z4dUlDQWdJQ0FnSjFSbGJYQnNZWFJsSUhkaGN5QndjbVZqYjIxd2FXeGxaQ0IzYVhSb0lHRnVJRzlzWkdWeUlIWmxjbk5wYjI0Z2IyWWdTR0Z1Wkd4bFltRnljeUIwYUdGdUlIUm9aU0JqZFhKeVpXNTBJSEoxYm5ScGJXVXVJQ2NnSzF4dUlDQWdJQ0FnSUNBblVHeGxZWE5sSUhWd1pHRjBaU0I1YjNWeUlIQnlaV052YlhCcGJHVnlJSFJ2SUdFZ2JtVjNaWElnZG1WeWMybHZiaUFvSnlBclhHNGdJQ0FnSUNBZ0lISjFiblJwYldWV1pYSnphVzl1Y3lBclhHNGdJQ0FnSUNBZ0lDY3BJRzl5SUdSdmQyNW5jbUZrWlNCNWIzVnlJSEoxYm5ScGJXVWdkRzhnWVc0Z2IyeGtaWElnZG1WeWMybHZiaUFvSnlBclhHNGdJQ0FnSUNBZ0lHTnZiWEJwYkdWeVZtVnljMmx2Ym5NZ0sxeHVJQ0FnSUNBZ0lDQW5LUzRuWEc0Z0lDQWdLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0F2THlCVmMyVWdkR2hsSUdWdFltVmtaR1ZrSUhabGNuTnBiMjRnYVc1bWJ5QnphVzVqWlNCMGFHVWdjblZ1ZEdsdFpTQmtiMlZ6YmlkMElHdHViM2NnWVdKdmRYUWdkR2hwY3lCeVpYWnBjMmx2YmlCNVpYUmNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYaGpaWEIwYVc5dUtGeHVJQ0FnSUNBZ0oxUmxiWEJzWVhSbElIZGhjeUJ3Y21WamIyMXdhV3hsWkNCM2FYUm9JR0VnYm1WM1pYSWdkbVZ5YzJsdmJpQnZaaUJJWVc1a2JHVmlZWEp6SUhSb1lXNGdkR2hsSUdOMWNuSmxiblFnY25WdWRHbHRaUzRnSnlBclhHNGdJQ0FnSUNBZ0lDZFFiR1ZoYzJVZ2RYQmtZWFJsSUhsdmRYSWdjblZ1ZEdsdFpTQjBieUJoSUc1bGQyVnlJSFpsY25OcGIyNGdLQ2NnSzF4dUlDQWdJQ0FnSUNCamIyMXdhV3hsY2tsdVptOWJNVjBnSzF4dUlDQWdJQ0FnSUNBbktTNG5YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdkR1Z0Y0d4aGRHVW9kR1Z0Y0d4aGRHVlRjR1ZqTENCbGJuWXBJSHRjYmlBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHNWxlSFFnS2k5Y2JpQWdhV1lnS0NGbGJuWXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLQ2RPYnlCbGJuWnBjbTl1YldWdWRDQndZWE56WldRZ2RHOGdkR1Z0Y0d4aGRHVW5LVHRjYmlBZ2ZWeHVJQ0JwWmlBb0lYUmxiWEJzWVhSbFUzQmxZeUI4ZkNBaGRHVnRjR3hoZEdWVGNHVmpMbTFoYVc0cElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYaGpaWEIwYVc5dUtDZFZibXR1YjNkdUlIUmxiWEJzWVhSbElHOWlhbVZqZERvZ0p5QXJJSFI1Y0dWdlppQjBaVzF3YkdGMFpWTndaV01wTzF4dUlDQjlYRzVjYmlBZ2RHVnRjR3hoZEdWVGNHVmpMbTFoYVc0dVpHVmpiM0poZEc5eUlEMGdkR1Z0Y0d4aGRHVlRjR1ZqTG0xaGFXNWZaRHRjYmx4dUlDQXZMeUJPYjNSbE9pQlZjMmx1WnlCbGJuWXVWazBnY21WbVpYSmxibU5sY3lCeVlYUm9aWElnZEdoaGJpQnNiMk5oYkNCMllYSWdjbVZtWlhKbGJtTmxjeUIwYUhKdmRXZG9iM1YwSUhSb2FYTWdjMlZqZEdsdmJpQjBieUJoYkd4dmQxeHVJQ0F2THlCbWIzSWdaWGgwWlhKdVlXd2dkWE5sY25NZ2RHOGdiM1psY25KcFpHVWdkR2hsYzJVZ1lYTWdjSE5sZFdSdkxYTjFjSEJ2Y25SbFpDQkJVRWx6TGx4dUlDQmxibll1VmswdVkyaGxZMnRTWlhacGMybHZiaWgwWlcxd2JHRjBaVk53WldNdVkyOXRjR2xzWlhJcE8xeHVYRzRnSUM4dklHSmhZMnQzWVhKa2N5QmpiMjF3WVhScFltbHNhWFI1SUdadmNpQndjbVZqYjIxd2FXeGxaQ0IwWlcxd2JHRjBaWE1nZDJsMGFDQmpiMjF3YVd4bGNpMTJaWEp6YVc5dUlEY2dLRHcwTGpNdU1DbGNiaUFnWTI5dWMzUWdkR1Z0Y0d4aGRHVlhZWE5RY21WamIyMXdhV3hsWkZkcGRHaERiMjF3YVd4bGNsWTNJRDFjYmlBZ0lDQjBaVzF3YkdGMFpWTndaV011WTI5dGNHbHNaWElnSmlZZ2RHVnRjR3hoZEdWVGNHVmpMbU52YlhCcGJHVnlXekJkSUQwOVBTQTNPMXh1WEc0Z0lHWjFibU4wYVc5dUlHbHVkbTlyWlZCaGNuUnBZV3hYY21Gd2NHVnlLSEJoY25ScFlXd3NJR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjeTVvWVhOb0tTQjdYRzRnSUNBZ0lDQmpiMjUwWlhoMElEMGdWWFJwYkhNdVpYaDBaVzVrS0h0OUxDQmpiMjUwWlhoMExDQnZjSFJwYjI1ekxtaGhjMmdwTzF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWFXUnpLU0I3WEc0Z0lDQWdJQ0FnSUc5d2RHbHZibk11YVdSeld6QmRJRDBnZEhKMVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY0dGeWRHbGhiQ0E5SUdWdWRpNVdUUzV5WlhOdmJIWmxVR0Z5ZEdsaGJDNWpZV3hzS0hSb2FYTXNJSEJoY25ScFlXd3NJR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBPMXh1WEc0Z0lDQWdiR1YwSUdWNGRHVnVaR1ZrVDNCMGFXOXVjeUE5SUZWMGFXeHpMbVY0ZEdWdVpDaDdmU3dnYjNCMGFXOXVjeXdnZTF4dUlDQWdJQ0FnYUc5dmEzTTZJSFJvYVhNdWFHOXZhM01zWEc0Z0lDQWdJQ0J3Y205MGIwRmpZMlZ6YzBOdmJuUnliMnc2SUhSb2FYTXVjSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQnNaWFFnY21WemRXeDBJRDBnWlc1MkxsWk5MbWx1ZG05clpWQmhjblJwWVd3dVkyRnNiQ2hjYmlBZ0lDQWdJSFJvYVhNc1hHNGdJQ0FnSUNCd1lYSjBhV0ZzTEZ4dUlDQWdJQ0FnWTI5dWRHVjRkQ3hjYmlBZ0lDQWdJR1Y0ZEdWdVpHVmtUM0IwYVc5dWMxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCcFppQW9jbVZ6ZFd4MElEMDlJRzUxYkd3Z0ppWWdaVzUyTG1OdmJYQnBiR1VwSUh0Y2JpQWdJQ0FnSUc5d2RHbHZibk11Y0dGeWRHbGhiSE5iYjNCMGFXOXVjeTV1WVcxbFhTQTlJR1Z1ZGk1amIyMXdhV3hsS0Z4dUlDQWdJQ0FnSUNCd1lYSjBhV0ZzTEZ4dUlDQWdJQ0FnSUNCMFpXMXdiR0YwWlZOd1pXTXVZMjl0Y0dsc1pYSlBjSFJwYjI1ekxGeHVJQ0FnSUNBZ0lDQmxiblpjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0J5WlhOMWJIUWdQU0J2Y0hScGIyNXpMbkJoY25ScFlXeHpXMjl3ZEdsdmJuTXVibUZ0WlYwb1kyOXVkR1Y0ZEN3Z1pYaDBaVzVrWldSUGNIUnBiMjV6S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hKbGMzVnNkQ0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1cGJtUmxiblFwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR3hwYm1WeklEMGdjbVZ6ZFd4MExuTndiR2wwS0NkY1hHNG5LVHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3dnUFNCc2FXNWxjeTVzWlc1bmRHZzdJR2tnUENCc095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVd4cGJtVnpXMmxkSUNZbUlHa2dLeUF4SUQwOVBTQnNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNCc2FXNWxjMXRwWFNBOUlHOXdkR2x2Ym5NdWFXNWtaVzUwSUNzZ2JHbHVaWE5iYVYwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVZ6ZFd4MElEMGdiR2x1WlhNdWFtOXBiaWduWEZ4dUp5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLRnh1SUNBZ0lDQWdJQ0FuVkdobElIQmhjblJwWVd3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnYjNCMGFXOXVjeTV1WVcxbElDdGNiaUFnSUNBZ0lDQWdJQ0FuSUdOdmRXeGtJRzV2ZENCaVpTQmpiMjF3YVd4bFpDQjNhR1Z1SUhKMWJtNXBibWNnYVc0Z2NuVnVkR2x0WlMxdmJteDVJRzF2WkdVblhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRXAxYzNRZ1lXUmtJSGRoZEdWeVhHNGdJR3hsZENCamIyNTBZV2x1WlhJZ1BTQjdYRzRnSUNBZ2MzUnlhV04wT2lCbWRXNWpkR2x2Ymlodlltb3NJRzVoYldVc0lHeHZZeWtnZTF4dUlDQWdJQ0FnYVdZZ0tDRnZZbW9nZkh3Z0lTaHVZVzFsSUdsdUlHOWlhaWtwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVjRZMlZ3ZEdsdmJpZ25YQ0luSUNzZ2JtRnRaU0FySUNkY0lpQnViM1FnWkdWbWFXNWxaQ0JwYmlBbklDc2diMkpxTENCN1hHNGdJQ0FnSUNBZ0lDQWdiRzlqT2lCc2IyTmNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZMjl1ZEdGcGJtVnlMbXh2YjJ0MWNGQnliM0JsY25SNUtHOWlhaXdnYm1GdFpTazdYRzRnSUNBZ2ZTeGNiaUFnSUNCc2IyOXJkWEJRY205d1pYSjBlVG9nWm5WdVkzUnBiMjRvY0dGeVpXNTBMQ0J3Y205d1pYSjBlVTVoYldVcElIdGNiaUFnSUNBZ0lHeGxkQ0J5WlhOMWJIUWdQU0J3WVhKbGJuUmJjSEp2Y0dWeWRIbE9ZVzFsWFR0Y2JpQWdJQ0FnSUdsbUlDaHlaWE4xYkhRZ1BUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGt1WTJGc2JDaHdZWEpsYm5Rc0lIQnliM0JsY25SNVRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tISmxjM1ZzZEVselFXeHNiM2RsWkNoeVpYTjFiSFFzSUdOdmJuUmhhVzVsY2k1d2NtOTBiMEZqWTJWemMwTnZiblJ5YjJ3c0lIQnliM0JsY25SNVRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUNBZ2ZTeGNiaUFnSUNCc2IyOXJkWEE2SUdaMWJtTjBhVzl1S0dSbGNIUm9jeXdnYm1GdFpTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JHVnVJRDBnWkdWd2RHaHpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlHUmxjSFJvYzF0cFhTQW1KaUJqYjI1MFlXbHVaWEl1Ykc5dmEzVndVSEp2Y0dWeWRIa29aR1Z3ZEdoelcybGRMQ0J1WVcxbEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hKbGMzVnNkQ0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSbGNIUm9jMXRwWFZ0dVlXMWxYVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBzWEc0Z0lDQWdiR0Z0WW1SaE9pQm1kVzVqZEdsdmJpaGpkWEp5Wlc1MExDQmpiMjUwWlhoMEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RIbHdaVzltSUdOMWNuSmxiblFnUFQwOUlDZG1kVzVqZEdsdmJpY2dQeUJqZFhKeVpXNTBMbU5oYkd3b1kyOXVkR1Y0ZENrZ09pQmpkWEp5Wlc1ME8xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCbGMyTmhjR1ZGZUhCeVpYTnphVzl1T2lCVmRHbHNjeTVsYzJOaGNHVkZlSEJ5WlhOemFXOXVMRnh1SUNBZ0lHbHVkbTlyWlZCaGNuUnBZV3c2SUdsdWRtOXJaVkJoY25ScFlXeFhjbUZ3Y0dWeUxGeHVYRzRnSUNBZ1ptNDZJR1oxYm1OMGFXOXVLR2twSUh0Y2JpQWdJQ0FnSUd4bGRDQnlaWFFnUFNCMFpXMXdiR0YwWlZOd1pXTmJhVjA3WEc0Z0lDQWdJQ0J5WlhRdVpHVmpiM0poZEc5eUlEMGdkR1Z0Y0d4aGRHVlRjR1ZqVzJrZ0t5QW5YMlFuWFR0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhCeWIyZHlZVzF6T2lCYlhTeGNiaUFnSUNCd2NtOW5jbUZ0T2lCbWRXNWpkR2x2YmlocExDQmtZWFJoTENCa1pXTnNZWEpsWkVKc2IyTnJVR0Z5WVcxekxDQmliRzlqYTFCaGNtRnRjeXdnWkdWd2RHaHpLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2NISnZaM0poYlZkeVlYQndaWElnUFNCMGFHbHpMbkJ5YjJkeVlXMXpXMmxkTEZ4dUlDQWdJQ0FnSUNCbWJpQTlJSFJvYVhNdVptNG9hU2s3WEc0Z0lDQWdJQ0JwWmlBb1pHRjBZU0I4ZkNCa1pYQjBhSE1nZkh3Z1lteHZZMnRRWVhKaGJYTWdmSHdnWkdWamJHRnlaV1JDYkc5amExQmhjbUZ0Y3lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTluY21GdFYzSmhjSEJsY2lBOUlIZHlZWEJRY205bmNtRnRLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXNYRzRnSUNBZ0lDQWdJQ0FnYVN4Y2JpQWdJQ0FnSUNBZ0lDQm1iaXhjYmlBZ0lDQWdJQ0FnSUNCa1lYUmhMRnh1SUNBZ0lDQWdJQ0FnSUdSbFkyeGhjbVZrUW14dlkydFFZWEpoYlhNc1hHNGdJQ0FnSUNBZ0lDQWdZbXh2WTJ0UVlYSmhiWE1zWEc0Z0lDQWdJQ0FnSUNBZ1pHVndkR2h6WEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tDRndjbTluY21GdFYzSmhjSEJsY2lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTluY21GdFYzSmhjSEJsY2lBOUlIUm9hWE11Y0hKdlozSmhiWE5iYVYwZ1BTQjNjbUZ3VUhKdlozSmhiU2gwYUdsekxDQnBMQ0JtYmlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnY0hKdlozSmhiVmR5WVhCd1pYSTdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lHUmhkR0U2SUdaMWJtTjBhVzl1S0haaGJIVmxMQ0JrWlhCMGFDa2dlMXh1SUNBZ0lDQWdkMmhwYkdVZ0tIWmhiSFZsSUNZbUlHUmxjSFJvTFMwcElIdGNiaUFnSUNBZ0lDQWdkbUZzZFdVZ1BTQjJZV3gxWlM1ZmNHRnlaVzUwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJSFpoYkhWbE8xeHVJQ0FnSUgwc1hHNGdJQ0FnYldWeVoyVkpaazVsWldSbFpEb2dablZ1WTNScGIyNG9jR0Z5WVcwc0lHTnZiVzF2YmlrZ2UxeHVJQ0FnSUNBZ2JHVjBJRzlpYWlBOUlIQmhjbUZ0SUh4OElHTnZiVzF2Ymp0Y2JseHVJQ0FnSUNBZ2FXWWdLSEJoY21GdElDWW1JR052YlcxdmJpQW1KaUJ3WVhKaGJTQWhQVDBnWTI5dGJXOXVLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJRlYwYVd4ekxtVjRkR1Z1WkNoN2ZTd2dZMjl0Ylc5dUxDQndZWEpoYlNrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCdlltbzdYRzRnSUNBZ2ZTeGNiaUFnSUNBdkx5QkJiaUJsYlhCMGVTQnZZbXBsWTNRZ2RHOGdkWE5sSUdGeklISmxjR3hoWTJWdFpXNTBJR1p2Y2lCdWRXeHNMV052Ym5SbGVIUnpYRzRnSUNBZ2JuVnNiRU52Ym5SbGVIUTZJRTlpYW1WamRDNXpaV0ZzS0h0OUtTeGNibHh1SUNBZ0lHNXZiM0E2SUdWdWRpNVdUUzV1YjI5d0xGeHVJQ0FnSUdOdmJYQnBiR1Z5U1c1bWJ6b2dkR1Z0Y0d4aGRHVlRjR1ZqTG1OdmJYQnBiR1Z5WEc0Z0lIMDdYRzVjYmlBZ1puVnVZM1JwYjI0Z2NtVjBLR052Ym5SbGVIUXNJRzl3ZEdsdmJuTWdQU0I3ZlNrZ2UxeHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ2IzQjBhVzl1Y3k1a1lYUmhPMXh1WEc0Z0lDQWdjbVYwTGw5elpYUjFjQ2h2Y0hScGIyNXpLVHRjYmlBZ0lDQnBaaUFvSVc5d2RHbHZibk11Y0dGeWRHbGhiQ0FtSmlCMFpXMXdiR0YwWlZOd1pXTXVkWE5sUkdGMFlTa2dlMXh1SUNBZ0lDQWdaR0YwWVNBOUlHbHVhWFJFWVhSaEtHTnZiblJsZUhRc0lHUmhkR0VwTzF4dUlDQWdJSDFjYmlBZ0lDQnNaWFFnWkdWd2RHaHpMRnh1SUNBZ0lDQWdZbXh2WTJ0UVlYSmhiWE1nUFNCMFpXMXdiR0YwWlZOd1pXTXVkWE5sUW14dlkydFFZWEpoYlhNZ1B5QmJYU0E2SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0JwWmlBb2RHVnRjR3hoZEdWVGNHVmpMblZ6WlVSbGNIUm9jeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdVpHVndkR2h6S1NCN1hHNGdJQ0FnSUNBZ0lHUmxjSFJvY3lBOVhHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDQWhQU0J2Y0hScGIyNXpMbVJsY0hSb2Mxc3dYVnh1SUNBZ0lDQWdJQ0FnSUNBZ1B5QmJZMjl1ZEdWNGRGMHVZMjl1WTJGMEtHOXdkR2x2Ym5NdVpHVndkR2h6S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdPaUJ2Y0hScGIyNXpMbVJsY0hSb2N6dGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHUmxjSFJvY3lBOUlGdGpiMjUwWlhoMFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCdFlXbHVLR052Ym5SbGVIUWdMeW9zSUc5d2RHbHZibk1xTHlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUNoY2JpQWdJQ0FnSUNBZ0p5Y2dLMXh1SUNBZ0lDQWdJQ0IwWlcxd2JHRjBaVk53WldNdWJXRnBiaWhjYmlBZ0lDQWdJQ0FnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDeGNiaUFnSUNBZ0lDQWdJQ0JqYjI1MFlXbHVaWEl1YUdWc2NHVnljeXhjYmlBZ0lDQWdJQ0FnSUNCamIyNTBZV2x1WlhJdWNHRnlkR2xoYkhNc1hHNGdJQ0FnSUNBZ0lDQWdaR0YwWVN4Y2JpQWdJQ0FnSUNBZ0lDQmliRzlqYTFCaGNtRnRjeXhjYmlBZ0lDQWdJQ0FnSUNCa1pYQjBhSE5jYmlBZ0lDQWdJQ0FnS1Z4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J0WVdsdUlEMGdaWGhsWTNWMFpVUmxZMjl5WVhSdmNuTW9YRzRnSUNBZ0lDQjBaVzF3YkdGMFpWTndaV011YldGcGJpeGNiaUFnSUNBZ0lHMWhhVzRzWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWElzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbVJsY0hSb2N5QjhmQ0JiWFN4Y2JpQWdJQ0FnSUdSaGRHRXNYRzRnSUNBZ0lDQmliRzlqYTFCaGNtRnRjMXh1SUNBZ0lDazdYRzRnSUNBZ2NtVjBkWEp1SUcxaGFXNG9ZMjl1ZEdWNGRDd2diM0IwYVc5dWN5azdYRzRnSUgxY2JseHVJQ0J5WlhRdWFYTlViM0FnUFNCMGNuVmxPMXh1WEc0Z0lISmxkQzVmYzJWMGRYQWdQU0JtZFc1amRHbHZiaWh2Y0hScGIyNXpLU0I3WEc0Z0lDQWdhV1lnS0NGdmNIUnBiMjV6TG5CaGNuUnBZV3dwSUh0Y2JpQWdJQ0FnSUd4bGRDQnRaWEpuWldSSVpXeHdaWEp6SUQwZ1ZYUnBiSE11WlhoMFpXNWtLSHQ5TENCbGJuWXVhR1ZzY0dWeWN5d2diM0IwYVc5dWN5NW9aV3h3WlhKektUdGNiaUFnSUNBZ0lIZHlZWEJJWld4d1pYSnpWRzlRWVhOelRHOXZhM1Z3VUhKdmNHVnlkSGtvYldWeVoyVmtTR1ZzY0dWeWN5d2dZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTVvWld4d1pYSnpJRDBnYldWeVoyVmtTR1ZzY0dWeWN6dGNibHh1SUNBZ0lDQWdhV1lnS0hSbGJYQnNZWFJsVTNCbFl5NTFjMlZRWVhKMGFXRnNLU0I3WEc0Z0lDQWdJQ0FnSUM4dklGVnpaU0J0WlhKblpVbG1UbVZsWkdWa0lHaGxjbVVnZEc4Z2NISmxkbVZ1ZENCamIyMXdhV3hwYm1jZ1oyeHZZbUZzSUhCaGNuUnBZV3h6SUcxMWJIUnBjR3hsSUhScGJXVnpYRzRnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTV3WVhKMGFXRnNjeUE5SUdOdmJuUmhhVzVsY2k1dFpYSm5aVWxtVG1WbFpHVmtLRnh1SUNBZ0lDQWdJQ0FnSUc5d2RHbHZibk11Y0dGeWRHbGhiSE1zWEc0Z0lDQWdJQ0FnSUNBZ1pXNTJMbkJoY25ScFlXeHpYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2RHVnRjR3hoZEdWVGNHVmpMblZ6WlZCaGNuUnBZV3dnZkh3Z2RHVnRjR3hoZEdWVGNHVmpMblZ6WlVSbFkyOXlZWFJ2Y25NcElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbVJsWTI5eVlYUnZjbk1nUFNCVmRHbHNjeTVsZUhSbGJtUW9YRzRnSUNBZ0lDQWdJQ0FnZTMwc1hHNGdJQ0FnSUNBZ0lDQWdaVzUyTG1SbFkyOXlZWFJ2Y25Nc1hHNGdJQ0FnSUNBZ0lDQWdiM0IwYVc5dWN5NWtaV052Y21GMGIzSnpYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2k1b2IyOXJjeUE5SUh0OU8xeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxuQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDQTlJR055WldGMFpWQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDaHZjSFJwYjI1ektUdGNibHh1SUNBZ0lDQWdiR1YwSUd0bFpYQklaV3h3WlhKSmJraGxiSEJsY25NZ1BWeHVJQ0FnSUNBZ0lDQnZjSFJwYjI1ekxtRnNiRzkzUTJGc2JITlViMGhsYkhCbGNrMXBjM05wYm1jZ2ZIeGNiaUFnSUNBZ0lDQWdkR1Z0Y0d4aGRHVlhZWE5RY21WamIyMXdhV3hsWkZkcGRHaERiMjF3YVd4bGNsWTNPMXh1SUNBZ0lDQWdiVzkyWlVobGJIQmxjbFJ2U0c5dmEzTW9ZMjl1ZEdGcGJtVnlMQ0FuYUdWc2NHVnlUV2x6YzJsdVp5Y3NJR3RsWlhCSVpXeHdaWEpKYmtobGJIQmxjbk1wTzF4dUlDQWdJQ0FnYlc5MlpVaGxiSEJsY2xSdlNHOXZhM01vWTI5dWRHRnBibVZ5TENBbllteHZZMnRJWld4d1pYSk5hWE56YVc1bkp5d2dhMlZsY0VobGJIQmxja2x1U0dWc2NHVnljeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpNXdjbTkwYjBGalkyVnpjME52Ym5SeWIyd2dQU0J2Y0hScGIyNXpMbkJ5YjNSdlFXTmpaWE56UTI5dWRISnZiRHNnTHk4Z2FXNTBaWEp1WVd3Z2IzQjBhVzl1WEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEl1YUdWc2NHVnljeUE5SUc5d2RHbHZibk11YUdWc2NHVnljenRjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTV3WVhKMGFXRnNjeUE5SUc5d2RHbHZibk11Y0dGeWRHbGhiSE03WEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEl1WkdWamIzSmhkRzl5Y3lBOUlHOXdkR2x2Ym5NdVpHVmpiM0poZEc5eWN6dGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpNW9iMjlyY3lBOUlHOXdkR2x2Ym5NdWFHOXZhM003WEc0Z0lDQWdmVnh1SUNCOU8xeHVYRzRnSUhKbGRDNWZZMmhwYkdRZ1BTQm1kVzVqZEdsdmJpaHBMQ0JrWVhSaExDQmliRzlqYTFCaGNtRnRjeXdnWkdWd2RHaHpLU0I3WEc0Z0lDQWdhV1lnS0hSbGJYQnNZWFJsVTNCbFl5NTFjMlZDYkc5amExQmhjbUZ0Y3lBbUppQWhZbXh2WTJ0UVlYSmhiWE1wSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmVHTmxjSFJwYjI0b0oyMTFjM1FnY0dGemN5QmliRzlqYXlCd1lYSmhiWE1uS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hSbGJYQnNZWFJsVTNCbFl5NTFjMlZFWlhCMGFITWdKaVlnSVdSbGNIUm9jeWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmlnbmJYVnpkQ0J3WVhOeklIQmhjbVZ1ZENCa1pYQjBhSE1uS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkM0poY0ZCeWIyZHlZVzBvWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWElzWEc0Z0lDQWdJQ0JwTEZ4dUlDQWdJQ0FnZEdWdGNHeGhkR1ZUY0dWalcybGRMRnh1SUNBZ0lDQWdaR0YwWVN4Y2JpQWdJQ0FnSURBc1hHNGdJQ0FnSUNCaWJHOWphMUJoY21GdGN5eGNiaUFnSUNBZ0lHUmxjSFJvYzF4dUlDQWdJQ2s3WEc0Z0lIMDdYRzRnSUhKbGRIVnliaUJ5WlhRN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIzY21Gd1VISnZaM0poYlNoY2JpQWdZMjl1ZEdGcGJtVnlMRnh1SUNCcExGeHVJQ0JtYml4Y2JpQWdaR0YwWVN4Y2JpQWdaR1ZqYkdGeVpXUkNiRzlqYTFCaGNtRnRjeXhjYmlBZ1lteHZZMnRRWVhKaGJYTXNYRzRnSUdSbGNIUm9jMXh1S1NCN1hHNGdJR1oxYm1OMGFXOXVJSEJ5YjJjb1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lDQWdiR1YwSUdOMWNuSmxiblJFWlhCMGFITWdQU0JrWlhCMGFITTdYRzRnSUNBZ2FXWWdLRnh1SUNBZ0lDQWdaR1Z3ZEdoeklDWW1YRzRnSUNBZ0lDQmpiMjUwWlhoMElDRTlJR1JsY0hSb2Mxc3dYU0FtSmx4dUlDQWdJQ0FnSVNoamIyNTBaWGgwSUQwOVBTQmpiMjUwWVdsdVpYSXViblZzYkVOdmJuUmxlSFFnSmlZZ1pHVndkR2h6V3pCZElEMDlQU0J1ZFd4c0tWeHVJQ0FnSUNrZ2UxeHVJQ0FnSUNBZ1kzVnljbVZ1ZEVSbGNIUm9jeUE5SUZ0amIyNTBaWGgwWFM1amIyNWpZWFFvWkdWd2RHaHpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z1ptNG9YRzRnSUNBZ0lDQmpiMjUwWVdsdVpYSXNYRzRnSUNBZ0lDQmpiMjUwWlhoMExGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxtaGxiSEJsY25Nc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJdWNHRnlkR2xoYkhNc1hHNGdJQ0FnSUNCdmNIUnBiMjV6TG1SaGRHRWdmSHdnWkdGMFlTeGNiaUFnSUNBZ0lHSnNiMk5yVUdGeVlXMXpJQ1ltSUZ0dmNIUnBiMjV6TG1Kc2IyTnJVR0Z5WVcxelhTNWpiMjVqWVhRb1lteHZZMnRRWVhKaGJYTXBMRnh1SUNBZ0lDQWdZM1Z5Y21WdWRFUmxjSFJvYzF4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCd2NtOW5JRDBnWlhobFkzVjBaVVJsWTI5eVlYUnZjbk1vWm00c0lIQnliMmNzSUdOdmJuUmhhVzVsY2l3Z1pHVndkR2h6TENCa1lYUmhMQ0JpYkc5amExQmhjbUZ0Y3lrN1hHNWNiaUFnY0hKdlp5NXdjbTluY21GdElEMGdhVHRjYmlBZ2NISnZaeTVrWlhCMGFDQTlJR1JsY0hSb2N5QS9JR1JsY0hSb2N5NXNaVzVuZEdnZ09pQXdPMXh1SUNCd2NtOW5MbUpzYjJOclVHRnlZVzF6SUQwZ1pHVmpiR0Z5WldSQ2JHOWphMUJoY21GdGN5QjhmQ0F3TzF4dUlDQnlaWFIxY200Z2NISnZaenRjYm4xY2JseHVMeW9xWEc0Z0tpQlVhR2x6SUdseklHTjFjbkpsYm5Sc2VTQndZWEowSUc5bUlIUm9aU0J2Wm1acFkybGhiQ0JCVUVrc0lIUm9aWEpsWm05eVpTQnBiWEJzWlcxbGJuUmhkR2x2YmlCa1pYUmhhV3h6SUhOb2IzVnNaQ0J1YjNRZ1ltVWdZMmhoYm1kbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZRWVhKMGFXRnNLSEJoY25ScFlXd3NJR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ2FXWWdLQ0Z3WVhKMGFXRnNLU0I3WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11Ym1GdFpTQTlQVDBnSjBCd1lYSjBhV0ZzTFdKc2IyTnJKeWtnZTF4dUlDQWdJQ0FnY0dGeWRHbGhiQ0E5SUc5d2RHbHZibk11WkdGMFlWc25jR0Z5ZEdsaGJDMWliRzlqYXlkZE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J3WVhKMGFXRnNJRDBnYjNCMGFXOXVjeTV3WVhKMGFXRnNjMXR2Y0hScGIyNXpMbTVoYldWZE8xeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElHbG1JQ2doY0dGeWRHbGhiQzVqWVd4c0lDWW1JQ0Z2Y0hScGIyNXpMbTVoYldVcElIdGNiaUFnSUNBdkx5QlVhR2x6SUdseklHRWdaSGx1WVcxcFl5QndZWEowYVdGc0lIUm9ZWFFnY21WMGRYSnVaV1FnWVNCemRISnBibWRjYmlBZ0lDQnZjSFJwYjI1ekxtNWhiV1VnUFNCd1lYSjBhV0ZzTzF4dUlDQWdJSEJoY25ScFlXd2dQU0J2Y0hScGIyNXpMbkJoY25ScFlXeHpXM0JoY25ScFlXeGRPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQndZWEowYVdGc08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1MmIydGxVR0Z5ZEdsaGJDaHdZWEowYVdGc0xDQmpiMjUwWlhoMExDQnZjSFJwYjI1ektTQjdYRzRnSUM4dklGVnpaU0IwYUdVZ1kzVnljbVZ1ZENCamJHOXpkWEpsSUdOdmJuUmxlSFFnZEc4Z2MyRjJaU0IwYUdVZ2NHRnlkR2xoYkMxaWJHOWpheUJwWmlCMGFHbHpJSEJoY25ScFlXeGNiaUFnWTI5dWMzUWdZM1Z5Y21WdWRGQmhjblJwWVd4Q2JHOWpheUE5SUc5d2RHbHZibk11WkdGMFlTQW1KaUJ2Y0hScGIyNXpMbVJoZEdGYkozQmhjblJwWVd3dFlteHZZMnNuWFR0Y2JpQWdiM0IwYVc5dWN5NXdZWEowYVdGc0lEMGdkSEoxWlR0Y2JpQWdhV1lnS0c5d2RHbHZibk11YVdSektTQjdYRzRnSUNBZ2IzQjBhVzl1Y3k1a1lYUmhMbU52Ym5SbGVIUlFZWFJvSUQwZ2IzQjBhVzl1Y3k1cFpITmJNRjBnZkh3Z2IzQjBhVzl1Y3k1a1lYUmhMbU52Ym5SbGVIUlFZWFJvTzF4dUlDQjlYRzVjYmlBZ2JHVjBJSEJoY25ScFlXeENiRzlqYXp0Y2JpQWdhV1lnS0c5d2RHbHZibk11Wm00Z0ppWWdiM0IwYVc5dWN5NW1iaUFoUFQwZ2JtOXZjQ2tnZTF4dUlDQWdJRzl3ZEdsdmJuTXVaR0YwWVNBOUlHTnlaV0YwWlVaeVlXMWxLRzl3ZEdsdmJuTXVaR0YwWVNrN1hHNGdJQ0FnTHk4Z1YzSmhjSEJsY2lCbWRXNWpkR2x2YmlCMGJ5Qm5aWFFnWVdOalpYTnpJSFJ2SUdOMWNuSmxiblJRWVhKMGFXRnNRbXh2WTJzZ1puSnZiU0IwYUdVZ1kyeHZjM1Z5WlZ4dUlDQWdJR3hsZENCbWJpQTlJRzl3ZEdsdmJuTXVabTQ3WEc0Z0lDQWdjR0Z5ZEdsaGJFSnNiMk5ySUQwZ2IzQjBhVzl1Y3k1a1lYUmhXeWR3WVhKMGFXRnNMV0pzYjJOckoxMGdQU0JtZFc1amRHbHZiaUJ3WVhKMGFXRnNRbXh2WTJ0WGNtRndjR1Z5S0Z4dUlDQWdJQ0FnWTI5dWRHVjRkQ3hjYmlBZ0lDQWdJRzl3ZEdsdmJuTWdQU0I3ZlZ4dUlDQWdJQ2tnZTF4dUlDQWdJQ0FnTHk4Z1VtVnpkRzl5WlNCMGFHVWdjR0Z5ZEdsaGJDMWliRzlqYXlCbWNtOXRJSFJvWlNCamJHOXpkWEpsSUdadmNpQjBhR1VnWlhobFkzVjBhVzl1SUc5bUlIUm9aU0JpYkc5amExeHVJQ0FnSUNBZ0x5OGdhUzVsTGlCMGFHVWdjR0Z5ZENCcGJuTnBaR1VnZEdobElHSnNiMk5ySUc5bUlIUm9aU0J3WVhKMGFXRnNJR05oYkd3dVhHNGdJQ0FnSUNCdmNIUnBiMjV6TG1SaGRHRWdQU0JqY21WaGRHVkdjbUZ0WlNodmNIUnBiMjV6TG1SaGRHRXBPMXh1SUNBZ0lDQWdiM0IwYVc5dWN5NWtZWFJoV3lkd1lYSjBhV0ZzTFdKc2IyTnJKMTBnUFNCamRYSnlaVzUwVUdGeWRHbGhiRUpzYjJOck8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdadUtHTnZiblJsZUhRc0lHOXdkR2x2Ym5NcE8xeHVJQ0FnSUgwN1hHNGdJQ0FnYVdZZ0tHWnVMbkJoY25ScFlXeHpLU0I3WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbkJoY25ScFlXeHpJRDBnVlhScGJITXVaWGgwWlc1a0tIdDlMQ0J2Y0hScGIyNXpMbkJoY25ScFlXeHpMQ0JtYmk1d1lYSjBhV0ZzY3lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2FXWWdLSEJoY25ScFlXd2dQVDA5SUhWdVpHVm1hVzVsWkNBbUppQndZWEowYVdGc1FteHZZMnNwSUh0Y2JpQWdJQ0J3WVhKMGFXRnNJRDBnY0dGeWRHbGhiRUpzYjJOck8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0hCaGNuUnBZV3dnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9KMVJvWlNCd1lYSjBhV0ZzSUNjZ0t5QnZjSFJwYjI1ekxtNWhiV1VnS3lBbklHTnZkV3hrSUc1dmRDQmlaU0JtYjNWdVpDY3BPMXh1SUNCOUlHVnNjMlVnYVdZZ0tIQmhjblJwWVd3Z2FXNXpkR0Z1WTJWdlppQkdkVzVqZEdsdmJpa2dlMXh1SUNBZ0lISmxkSFZ5YmlCd1lYSjBhV0ZzS0dOdmJuUmxlSFFzSUc5d2RHbHZibk1wTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIyOXdLQ2tnZTF4dUlDQnlaWFIxY200Z0p5YzdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHbHVhWFJFWVhSaEtHTnZiblJsZUhRc0lHUmhkR0VwSUh0Y2JpQWdhV1lnS0NGa1lYUmhJSHg4SUNFb0ozSnZiM1FuSUdsdUlHUmhkR0VwS1NCN1hHNGdJQ0FnWkdGMFlTQTlJR1JoZEdFZ1B5QmpjbVZoZEdWR2NtRnRaU2hrWVhSaEtTQTZJSHQ5TzF4dUlDQWdJR1JoZEdFdWNtOXZkQ0E5SUdOdmJuUmxlSFE3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR1JoZEdFN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdWNFpXTjFkR1ZFWldOdmNtRjBiM0p6S0dadUxDQndjbTluTENCamIyNTBZV2x1WlhJc0lHUmxjSFJvY3l3Z1pHRjBZU3dnWW14dlkydFFZWEpoYlhNcElIdGNiaUFnYVdZZ0tHWnVMbVJsWTI5eVlYUnZjaWtnZTF4dUlDQWdJR3hsZENCd2NtOXdjeUE5SUh0OU8xeHVJQ0FnSUhCeWIyY2dQU0JtYmk1a1pXTnZjbUYwYjNJb1hHNGdJQ0FnSUNCd2NtOW5MRnh1SUNBZ0lDQWdjSEp2Y0hNc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnSUNCa1pYQjBhSE1nSmlZZ1pHVndkR2h6V3pCZExGeHVJQ0FnSUNBZ1pHRjBZU3hjYmlBZ0lDQWdJR0pzYjJOclVHRnlZVzF6TEZ4dUlDQWdJQ0FnWkdWd2RHaHpYRzRnSUNBZ0tUdGNiaUFnSUNCVmRHbHNjeTVsZUhSbGJtUW9jSEp2Wnl3Z2NISnZjSE1wTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ3Y205bk8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCM2NtRndTR1ZzY0dWeWMxUnZVR0Z6YzB4dmIydDFjRkJ5YjNCbGNuUjVLRzFsY21kbFpFaGxiSEJsY25Nc0lHTnZiblJoYVc1bGNpa2dlMXh1SUNCUFltcGxZM1F1YTJWNWN5aHRaWEpuWldSSVpXeHdaWEp6S1M1bWIzSkZZV05vS0dobGJIQmxjazVoYldVZ1BUNGdlMXh1SUNBZ0lHeGxkQ0JvWld4d1pYSWdQU0J0WlhKblpXUklaV3h3WlhKelcyaGxiSEJsY2s1aGJXVmRPMXh1SUNBZ0lHMWxjbWRsWkVobGJIQmxjbk5iYUdWc2NHVnlUbUZ0WlYwZ1BTQndZWE56VEc5dmEzVndVSEp2Y0dWeWRIbFBjSFJwYjI0b2FHVnNjR1Z5TENCamIyNTBZV2x1WlhJcE8xeHVJQ0I5S1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnY0dGemMweHZiMnQxY0ZCeWIzQmxjblI1VDNCMGFXOXVLR2hsYkhCbGNpd2dZMjl1ZEdGcGJtVnlLU0I3WEc0Z0lHTnZibk4wSUd4dmIydDFjRkJ5YjNCbGNuUjVJRDBnWTI5dWRHRnBibVZ5TG14dmIydDFjRkJ5YjNCbGNuUjVPMXh1SUNCeVpYUjFjbTRnZDNKaGNFaGxiSEJsY2lob1pXeHdaWElzSUc5d2RHbHZibk1nUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJWZEdsc2N5NWxlSFJsYm1Rb2V5QnNiMjlyZFhCUWNtOXdaWEowZVNCOUxDQnZjSFJwYjI1ektUdGNiaUFnZlNrN1hHNTlYRzRpWFgwPVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy53cmFwSGVscGVyID0gd3JhcEhlbHBlcjtcblxuZnVuY3Rpb24gd3JhcEhlbHBlcihoZWxwZXIsIHRyYW5zZm9ybU9wdGlvbnNGbikge1xuICBpZiAodHlwZW9mIGhlbHBlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBhcHBhcmVudGx5IGl0IGRvZXMgaW4gaHR0cHM6Ly9naXRodWIuY29tL3d5Y2F0cy9oYW5kbGViYXJzLmpzL2lzc3Vlcy8xNjM5XG4gICAgLy8gV2UgdHJ5IHRvIG1ha2UgdGhlIHdyYXBwZXIgbGVhc3QtaW52YXNpdmUgYnkgbm90IHdyYXBwaW5nIGl0LCBpZiB0aGUgaGVscGVyIGlzIG5vdCBhIGZ1bmN0aW9uLlxuICAgIHJldHVybiBoZWxwZXI7XG4gIH1cbiAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbiB3cmFwcGVyKCkgLyogZHluYW1pYyBhcmd1bWVudHMgKi97XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPSB0cmFuc2Zvcm1PcHRpb25zRm4ob3B0aW9ucyk7XG4gICAgcmV0dXJuIGhlbHBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gd3JhcHBlcjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwybHVkR1Z5Ym1Gc0wzZHlZWEJJWld4d1pYSXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN1FVRkJUeXhUUVVGVExGVkJRVlVzUTBGQlF5eE5RVUZOTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVU3UVVGRGNrUXNUVUZCU1N4UFFVRlBMRTFCUVUwc1MwRkJTeXhWUVVGVkxFVkJRVVU3T3p0QlFVZG9ReXhYUVVGUExFMUJRVTBzUTBGQlF6dEhRVU5tTzBGQlEwUXNUVUZCU1N4UFFVRlBMRWRCUVVjc1UwRkJWaXhQUVVGUExEQkNRVUZ4UXp0QlFVTTVReXhSUVVGTkxFOUJRVThzUjBGQlJ5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5vUkN4aFFVRlRMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4clFrRkJhMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTTVSQ3hYUVVGUExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8wZEJRM1JETEVOQlFVTTdRVUZEUml4VFFVRlBMRTlCUVU4c1EwRkJRenREUVVOb1FpSXNJbVpwYkdVaU9pSjNjbUZ3U0dWc2NHVnlMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdaMWJtTjBhVzl1SUhkeVlYQklaV3h3WlhJb2FHVnNjR1Z5TENCMGNtRnVjMlp2Y20xUGNIUnBiMjV6Um00cElIdGNiaUFnYVdZZ0tIUjVjR1Z2WmlCb1pXeHdaWElnSVQwOUlDZG1kVzVqZEdsdmJpY3BJSHRjYmlBZ0lDQXZMeUJVYUdseklITm9iM1ZzWkNCdWIzUWdhR0Z3Y0dWdUxDQmlkWFFnWVhCd1lYSmxiblJzZVNCcGRDQmtiMlZ6SUdsdUlHaDBkSEJ6T2k4dloybDBhSFZpTG1OdmJTOTNlV05oZEhNdmFHRnVaR3hsWW1GeWN5NXFjeTlwYzNOMVpYTXZNVFl6T1Z4dUlDQWdJQzh2SUZkbElIUnllU0IwYnlCdFlXdGxJSFJvWlNCM2NtRndjR1Z5SUd4bFlYTjBMV2x1ZG1GemFYWmxJR0o1SUc1dmRDQjNjbUZ3Y0dsdVp5QnBkQ3dnYVdZZ2RHaGxJR2hsYkhCbGNpQnBjeUJ1YjNRZ1lTQm1kVzVqZEdsdmJpNWNiaUFnSUNCeVpYUjFjbTRnYUdWc2NHVnlPMXh1SUNCOVhHNGdJR3hsZENCM2NtRndjR1Z5SUQwZ1puVnVZM1JwYjI0b0x5b2daSGx1WVcxcFl5QmhjbWQxYldWdWRITWdLaThwSUh0Y2JpQWdJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdZWEpuZFcxbGJuUnpXMkZ5WjNWdFpXNTBjeTVzWlc1bmRHZ2dMU0F4WFR0Y2JpQWdJQ0JoY21kMWJXVnVkSE5iWVhKbmRXMWxiblJ6TG14bGJtZDBhQ0F0SURGZElEMGdkSEpoYm5ObWIzSnRUM0IwYVc5dWMwWnVLRzl3ZEdsdmJuTXBPMXh1SUNBZ0lISmxkSFZ5YmlCb1pXeHdaWEl1WVhCd2JIa29kR2hwY3l3Z1lYSm5kVzFsYm5SektUdGNiaUFnZlR0Y2JpQWdjbVYwZFhKdUlIZHlZWEJ3WlhJN1hHNTlYRzRpWFgwPVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocm9vdC5IYW5kbGViYXJzID09PSBIYW5kbGViYXJzKSB7XG4gICAgICByb290LkhhbmRsZWJhcnMgPSAkSGFuZGxlYmFycztcbiAgICB9XG4gICAgcmV0dXJuIEhhbmRsZWJhcnM7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDI1dkxXTnZibVpzYVdOMExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3Y1VKQlFXVXNWVUZCVXl4VlFVRlZMRVZCUVVVN08wRkJSV3hETEUxQlFVa3NTVUZCU1N4SFFVRkhMRTlCUVU4c1RVRkJUU3hMUVVGTExGZEJRVmNzUjBGQlJ5eE5RVUZOTEVkQlFVY3NUVUZCVFR0TlFVTjRSQ3hYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXpzN1FVRkZhRU1zV1VGQlZTeERRVUZETEZWQlFWVXNSMEZCUnl4WlFVRlhPMEZCUTJwRExGRkJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRiRU1zVlVGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRMMEk3UVVGRFJDeFhRVUZQTEZWQlFWVXNRMEZCUXp0SFFVTnVRaXhEUVVGRE8wTkJRMGdpTENKbWFXeGxJam9pYm04dFkyOXVabXhwWTNRdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpaElZVzVrYkdWaVlYSnpLU0I3WEc0Z0lDOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwSUNvdlhHNGdJR3hsZENCeWIyOTBJRDBnZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjZ1B5Qm5iRzlpWVd3Z09pQjNhVzVrYjNjc1hHNGdJQ0FnSkVoaGJtUnNaV0poY25NZ1BTQnliMjkwTGtoaGJtUnNaV0poY25NN1hHNGdJQzhxSUdsemRHRnVZblZzSUdsbmJtOXlaU0J1WlhoMElDb3ZYRzRnSUVoaGJtUnNaV0poY25NdWJtOURiMjVtYkdsamRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJR2xtSUNoeWIyOTBMa2hoYm1Sc1pXSmhjbk1nUFQwOUlFaGhibVJzWldKaGNuTXBJSHRjYmlBZ0lDQWdJSEp2YjNRdVNHRnVaR3hsWW1GeWN5QTlJQ1JJWVc1a2JHVmlZWEp6TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1NHRnVaR3hsWW1GeWN6dGNiaUFnZlR0Y2JuMWNiaUpkZlE9PVxuIiwicmVxdWlyZSgnLi4vc3R5bGVzL21haW4uY3NzJyk7XG5yZXF1aXJlKCcuLi9mb250cy9mb250cy5jc3MnKTtcbmNvbnN0IE5vdGlmaWNhdGlvbkZvcm0gPSByZXF1aXJlKCcuL05vdGlmaWNhdGlvbkZvcm0nKTtcbmNvbnN0IE5vdGlmaWNhdGlvbkh1YiA9IHJlcXVpcmUoJy4vTm90aWZpY2F0aW9uSHViJyk7XG5jb25zdCB7IGdldFJ4anNUYXJnZXQsIGdldFJ4anNUYXJnZXRGcm9tS2V5LCBnZXRUaW1lZEV2ZW50IH0gPSByZXF1aXJlKCcuL3J4anMvd2F0Y2hPcGVyYXRvcnMnKTtcbmNvbnN0IHsgZnJvbUV2ZW50IH0gPSByZXF1aXJlKCdyeGpzJyk7XG5jb25zdCB7IG1hcCwgbWVyZ2UsIHN3aXRjaE1hcCwgZXhoYXVzdE1hcCB9ID0gcmVxdWlyZSgncnhqcy9vcGVyYXRvcnMnKTtcbmltcG9ydCB7IGRlZmF1bHQgYXMgTXlNYXAgfSBmcm9tICcuLi9zcmMvTXlNYXAnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEFwcCB7XG4gIGNvbnN0cnVjdG9yKHJvdXRlcywgbm90aWZpY2F0aW9ucykge1xuICAgIHRoaXMubmF2aWdhdGUgPSB0aGlzLm5hdmlnYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5uYXZpZ2F0ZVRvTG9jYXRpb24gPSB0aGlzLm5hdmlnYXRlVG9Mb2NhdGlvbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlbmRlclBhdGggPSB0aGlzLnJlbmRlclBhdGguYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50ID0gdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgdGhpcy5ub3RpZmljYXRpb25Gb3JtID0gbmV3IE5vdGlmaWNhdGlvbkZvcm0obm90aWZpY2F0aW9ucywgdGhpcy5yZW5kZXIpO1xuXG4gICAgdGhpcy53YXRjaEZhY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndhdGNoLWZhY2VcIik7XG4gICAgdGhpcy5sZWZ0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b24tbGVmdFwiKTtcbiAgICB0aGlzLnJpZ2h0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b24tcmlnaHRcIik7XG4gICAgdGhpcy50b3BCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbi10b3BcIik7XG4gICAgdGhpcy5ib3R0b21CdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbi1ib3R0b21cIik7XG4gICAgdGhpcy5ub3RpZmljYXRpb25Db250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5vdGlmaWNhdGlvbi1jb250YWluZXJcIik7XG4gICAgdGhpcy53aG9sZVBhZ2UgPSBkb2N1bWVudC5ib2R5O1xuICAgIHRoaXMud2F0Y2hDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2F0Y2gnKTtcblxuICAgIHRoaXMuY2xpY2tzID0gMDtcbiAgICB0aGlzLmNsaWNrVGltZW91dCA9IG51bGw7XG5cbiAgICBjb25zdCBoaWRlTm90aWZpY2F0aW9uID0gKCkgPT4ge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9jYXRpb24od2luZG93LmxvY2F0aW9uLCB0aGlzLnByZXZQcm9wcyk7XG4gICAgfVxuXG4gICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9IChoYXNoQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgIGlmIChoYXNoQ2hhbmdlRXZlbnQubmV3VVJMICE9PSBoYXNoQ2hhbmdlRXZlbnQub2xkVVJMKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBoYXNoQ2hhbmdlRXZlbnQubmV3VVJMLnNwbGl0KFwiI1wiKVsxXTtcbiAgICAgICAgdGhpcy5yZW5kZXJQYXRoKHBhdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIE5vdGlmaWNhdGlvbkh1Yi5vbkhpZGUoaGlkZU5vdGlmaWNhdGlvbik7XG5cbiAgICB0aGlzLnNldHVwUnhqc0xpc3RlbmVycygpO1xuICB9XG5cbiAgZGVmaW5lQ3VzdG9tRWxlbWVudHMoKXtcbiAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ215LW1hcCcsIE15TWFwKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG5hdmlnYXRlVG9Mb2NhdGlvbihsb2NhdGlvbiwgcHJvcHMgPSB7fSkge1xuICAgIGxldCBwYXRoID0gbG9jYXRpb24uaGFzaC5zbGljZSgxKTtcbiAgICBpZiAocGF0aCA9PT0gXCJcIikge1xuICAgICAgcGF0aCA9IFwiL1wiO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlclBhdGgocGF0aCwgcHJvcHMpO1xuICB9XG5cbiAgc2V0dXBSeGpzTGlzdGVuZXJzKCkge1xuICAgIHRoaXMud2F0Y2hNb3VzZURvd24kID0gZnJvbUV2ZW50KHRoaXMud2F0Y2hDb250YWluZXIsICdtb3VzZWRvd24nKS5waXBlKGdldFJ4anNUYXJnZXQoKSlcbiAgICB0aGlzLndhdGNoTW91c2VVcCQgPSBmcm9tRXZlbnQodGhpcy53YXRjaENvbnRhaW5lciwgJ21vdXNldXAnKS5waXBlKGdldFJ4anNUYXJnZXQoKSlcbiAgICB0aGlzLndhdGNoS2V5RG93biQgPSBmcm9tRXZlbnQodGhpcy53aG9sZVBhZ2UsICdrZXlkb3duJykucGlwZShnZXRSeGpzVGFyZ2V0RnJvbUtleSgpKVxuICAgIHRoaXMud2F0Y2hLZXlVcCQgPSBmcm9tRXZlbnQodGhpcy53aG9sZVBhZ2UsICdrZXl1cCcpLnBpcGUoZ2V0Unhqc1RhcmdldEZyb21LZXkoKSlcblxuICAgIHRoaXMubWVyZ2VFdmVudHMoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gIH1cblxuICBtZXJnZUV2ZW50cygpIHtcbiAgICB0aGlzLndhdGNoRG93biQgPSB0aGlzLndhdGNoTW91c2VEb3duJC5waXBlKFxuICAgICAgbWVyZ2UodGhpcy53YXRjaEtleURvd24kKSxcbiAgICAgIGdldFRpbWVkRXZlbnQoKSxcbiAgICApO1xuICAgIHRoaXMud2F0Y2hVcCQgPSB0aGlzLndhdGNoTW91c2VVcCQucGlwZShcbiAgICAgIG1lcmdlKHRoaXMud2F0Y2hLZXlVcCQpLFxuICAgICAgZ2V0VGltZWRFdmVudCgpLFxuICAgICk7XG4gIH1cblxuICB0ZXN0Q2xpY2soLi4uYXJncykge1xuICAgIHRoaXMuY2xpY2tzKys7XG4gICAgaWYgKHRoaXMuY2xpY2tUaW1lb3V0KSB7XG4gICAgICBpZiAodGhpcy5jbGlja3MgPD0gMikge1xuICAgICAgICB0aGlzLnNldENsaWNrVGltZW91dCgoKSA9PiB7dGhpcy5oYW5kbGVEb3VibGVDbGljayguLi5hcmdzKX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRDbGlja1RpbWVvdXQoKCkgPT4ge30pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzKVxuICAgICAgdGhpcy5zZXRDbGlja1RpbWVvdXQoKCkgPT4ge3RoaXMuaGFuZGxlRXZlbnQoLi4uYXJncyl9KTtcbiAgICB9XG4gIH1cblxuICBzZXRDbGlja1RpbWVvdXQoY2IpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbGlja1RpbWVvdXQpO1xuICAgIHRoaXMuY2xpY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNsaWNrVGltZW91dCA9IG51bGw7XG4gICAgICB0aGlzLmNsaWNrcyA9IDA7XG4gICAgICBjYigpO1xuICAgIH0sIDQwMCk7XG4gIH1cblxuICBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLndhdGNoQ2xpY2skID0gdGhpcy53YXRjaERvd24kLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRvd25FdmVudCkgPT4gdGhpcy53YXRjaFVwJC5waXBlKFxuICAgICAgICBtYXAoKHVwRXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFyZ2V0OiB1cEV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgIHRpbWVUYWtlbjogdXBFdmVudC50aW1lc3RhbXAgLSBkb3duRXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApKSxcbiAgICApXG4gICAgdGhpcy53YXRjaENsaWNrJC5zdWJzY3JpYmUoKC4uLmFyZ3MpID0+IHt0aGlzLnRlc3RDbGljayguLi5hcmdzKX0pO1xuICB9XG4gIFxuICBoYW5kbGVFdmVudCh7IHRhcmdldCwgdGltZVRha2VuIH0pIHtcbiAgICBsZXQgZXZlbnROYW1lID0gYCR7dGFyZ2V0fUJ1dHRvbkV2ZW50YDtcbiAgICBsZXQgZXZlbnRIYW5kbGVyUGFyYW1zO1xuICAgIGlmICh0aW1lVGFrZW4gPiA3NTApIHtcbiAgICAgIGV2ZW50TmFtZSA9IGAke2V2ZW50TmFtZX1Ib2xkYDtcbiAgICAgIGV2ZW50SGFuZGxlclBhcmFtcyA9IHsgdGltZVRha2VuIH07XG4gICAgfVxuICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5jdXJyZW50Vmlldy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgY29uc3QgZXZlbnRIYW5kbGVyID0gdGhpcy5jdXJyZW50Vmlld1tldmVudE5hbWVdO1xuICAgIGlmIChldmVudEhhbmRsZXIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBFeGVjdXRpbmcgJyR7ZXZlbnROYW1lfSgpJyBvbiAke3ZpZXdOYW1lfWApO1xuICAgICAgZXZlbnRIYW5kbGVyLmJpbmQodGhpcy5jdXJyZW50VmlldykoZXZlbnRIYW5kbGVyUGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgJHt2aWV3TmFtZX0gbmVlZHMgJyR7ZXZlbnROYW1lfSgpJyB0byBiZSBkZWZpbmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURvdWJsZUNsaWNrKHsgdGFyZ2V0LCB0aW1lVGFrZW4gfSkge1xuICAgIGxldCBldmVudE5hbWUgPSBgJHt0YXJnZXR9QnV0dG9uRXZlbnREb3VibGVDbGlja2A7XG4gICAgbGV0IGV2ZW50SGFuZGxlclBhcmFtcztcbiAgICBjb25zdCB2aWV3TmFtZSA9IHRoaXMuY3VycmVudFZpZXcuY29uc3RydWN0b3IubmFtZTtcbiAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLmN1cnJlbnRWaWV3W2V2ZW50TmFtZV07XG4gICAgaWYgKGV2ZW50SGFuZGxlcikge1xuICAgICAgY29uc29sZS5sb2coYEV4ZWN1dGluZyAnJHtldmVudE5hbWV9KCknIG9uICR7dmlld05hbWV9YCk7XG4gICAgICBldmVudEhhbmRsZXIuYmluZCh0aGlzLmN1cnJlbnRWaWV3KShldmVudEhhbmRsZXJQYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke3ZpZXdOYW1lfSBuZWVkcyAnJHtldmVudE5hbWV9KCknIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGUocGF0aCkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gcGF0aDtcbiAgfVxuXG4gIHJlbmRlcihlbGVtZW50LCBWaWV3VHlwZSwgcHJvcHMpIHtcbiAgICB0aGlzLnByZXZQcm9wcyA9IHByb3BzO1xuXG4gICAgY29uc3QgdmlldyA9IG5ldyBWaWV3VHlwZSh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIG5hdmlnYXRlOiB0aGlzLm5hdmlnYXRlLFxuICAgICAgd2F0Y2hGYWNlOiB0aGlzLndhdGNoRmFjZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY3VycmVudFZpZXcgPSB2aWV3O1xuXG4gICAgdmlldy5wYWdlV2lsbExvYWQoKTtcbiAgICBlbGVtZW50LmlubmVySFRNTCA9IHZpZXcucmVuZGVyKCk7XG4gICAgdmlldy5wYWdlRGlkTG9hZCgpO1xuICB9XG5cbiAgcmVuZGVyUGF0aChwYXRoLHByb3BzKXtcbiAgICBjb25zdCBQYWdlID0gdGhpcy5yb3V0ZXNbcGF0aF0gfHwgdGhpcy5yb3V0ZXNbXCI0MDRcIl07XG4gICAgdGhpcy5yZW5kZXIodGhpcy53YXRjaEZhY2UsIFBhZ2UsIHByb3BzKTtcbiAgfVxufTtcbiIsImltcG9ydCBMIGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0ICdsZWFmbGV0L2Rpc3QvbGVhZmxldC5jc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXAgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucmVuZGVyTWFwKCk7XG4gICAgfVxuICAgIFxuICAgIHJlbmRlck1hcCgpe1xuICAgICAgY29uc29sZS5sb2coXCJyZW5kZXJpbmcgbWFwXCIpO1xuICAgICAgdGhpcy5tYXAgPSBMLm1hcCgnbWFwJyx7XG4gICAgICAgIGNlbnRlcjogWzMzLjgsMTUxLjIwXSxcbiAgICAgICAgem9vbTogMCxcbiAgICAgICAgem9vbUNvbnRyb2w6IHRydWVcbiAgICAgIH0pXG4gICAgICBMLnRpbGVMYXllcignaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLCB7XG4gICAgICBhdHRyaWJ1dGlvbjogJyZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJ1xuICAgICAgfSkuYWRkVG8odGhpcy5tYXApO1xuICAgIH1cbn1cbiIsIi8qIEBwcmVzZXJ2ZVxuICogTGVhZmxldCAxLjcuMSwgYSBKUyBsaWJyYXJ5IGZvciBpbnRlcmFjdGl2ZSBtYXBzLiBodHRwOi8vbGVhZmxldGpzLmNvbVxuICogKGMpIDIwMTAtMjAxOSBWbGFkaW1pciBBZ2Fmb25raW4sIChjKSAyMDEwLTIwMTEgQ2xvdWRNYWRlXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLkwgPSB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdmVyc2lvbiA9IFwiMS43LjFcIjtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgVXRpbFxyXG4gICAqXHJcbiAgICogVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucywgdXNlZCBieSBMZWFmbGV0IGludGVybmFsbHkuXHJcbiAgICovXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBleHRlbmQoZGVzdDogT2JqZWN0LCBzcmM/OiBPYmplY3QpOiBPYmplY3RcclxuICAvLyBNZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGBzcmNgIG9iamVjdCAob3IgbXVsdGlwbGUgb2JqZWN0cykgaW50byBgZGVzdGAgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSBsYXR0ZXIuIEhhcyBhbiBgTC5leHRlbmRgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIGV4dGVuZChkZXN0KSB7XHJcbiAgXHR2YXIgaSwgaiwgbGVuLCBzcmM7XHJcblxyXG4gIFx0Zm9yIChqID0gMSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XHJcbiAgXHRcdHNyYyA9IGFyZ3VtZW50c1tqXTtcclxuICBcdFx0Zm9yIChpIGluIHNyYykge1xyXG4gIFx0XHRcdGRlc3RbaV0gPSBzcmNbaV07XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICBcdHJldHVybiBkZXN0O1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNyZWF0ZShwcm90bzogT2JqZWN0LCBwcm9wZXJ0aWVzPzogT2JqZWN0KTogT2JqZWN0XHJcbiAgLy8gQ29tcGF0aWJpbGl0eSBwb2x5ZmlsbCBmb3IgW09iamVjdC5jcmVhdGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9jcmVhdGUpXHJcbiAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcclxuICBcdGZ1bmN0aW9uIEYoKSB7fVxyXG4gIFx0cmV0dXJuIGZ1bmN0aW9uIChwcm90bykge1xyXG4gIFx0XHRGLnByb3RvdHlwZSA9IHByb3RvO1xyXG4gIFx0XHRyZXR1cm4gbmV3IEYoKTtcclxuICBcdH07XHJcbiAgfSkoKTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGJpbmQoZm46IEZ1bmN0aW9uLCDigKYpOiBGdW5jdGlvblxyXG4gIC8vIFJldHVybnMgYSBuZXcgZnVuY3Rpb24gYm91bmQgdG8gdGhlIGFyZ3VtZW50cyBwYXNzZWQsIGxpa2UgW0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9iaW5kKS5cclxuICAvLyBIYXMgYSBgTC5iaW5kKClgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIGJpbmQoZm4sIG9iaikge1xyXG4gIFx0dmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xyXG5cclxuICBcdGlmIChmbi5iaW5kKSB7XHJcbiAgXHRcdHJldHVybiBmbi5iaW5kLmFwcGx5KGZuLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xyXG5cclxuICBcdHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBmbi5hcHBseShvYmosIGFyZ3MubGVuZ3RoID8gYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IGFyZ3VtZW50cyk7XHJcbiAgXHR9O1xyXG4gIH1cclxuXHJcbiAgLy8gQHByb3BlcnR5IGxhc3RJZDogTnVtYmVyXHJcbiAgLy8gTGFzdCB1bmlxdWUgSUQgdXNlZCBieSBbYHN0YW1wKClgXSgjdXRpbC1zdGFtcClcclxuICB2YXIgbGFzdElkID0gMDtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHN0YW1wKG9iajogT2JqZWN0KTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgdW5pcXVlIElEIG9mIGFuIG9iamVjdCwgYXNzaWduaW5nIGl0IG9uZSBpZiBpdCBkb2Vzbid0IGhhdmUgaXQuXHJcbiAgZnVuY3Rpb24gc3RhbXAob2JqKSB7XHJcbiAgXHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRvYmouX2xlYWZsZXRfaWQgPSBvYmouX2xlYWZsZXRfaWQgfHwgKytsYXN0SWQ7XHJcbiAgXHRyZXR1cm4gb2JqLl9sZWFmbGV0X2lkO1xyXG4gIFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRocm90dGxlKGZuOiBGdW5jdGlvbiwgdGltZTogTnVtYmVyLCBjb250ZXh0OiBPYmplY3QpOiBGdW5jdGlvblxyXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBmdW5jdGlvbiBgZm5gIHdpdGggdGhlIGdpdmVuIHNjb3BlIGBjb250ZXh0YFxyXG4gIC8vIChzbyB0aGF0IHRoZSBgdGhpc2Aga2V5d29yZCByZWZlcnMgdG8gYGNvbnRleHRgIGluc2lkZSBgZm5gJ3MgY29kZSkuIFRoZSBmdW5jdGlvblxyXG4gIC8vIGBmbmAgd2lsbCBiZSBjYWxsZWQgbm8gbW9yZSB0aGFuIG9uZSB0aW1lIHBlciBnaXZlbiBhbW91bnQgb2YgYHRpbWVgLiBUaGUgYXJndW1lbnRzXHJcbiAgLy8gcmVjZWl2ZWQgYnkgdGhlIGJvdW5kIGZ1bmN0aW9uIHdpbGwgYmUgYW55IGFyZ3VtZW50cyBwYXNzZWQgd2hlbiBiaW5kaW5nIHRoZVxyXG4gIC8vIGZ1bmN0aW9uLCBmb2xsb3dlZCBieSBhbnkgYXJndW1lbnRzIHBhc3NlZCB3aGVuIGludm9raW5nIHRoZSBib3VuZCBmdW5jdGlvbi5cclxuICAvLyBIYXMgYW4gYEwudGhyb3R0bGVgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIHRocm90dGxlKGZuLCB0aW1lLCBjb250ZXh0KSB7XHJcbiAgXHR2YXIgbG9jaywgYXJncywgd3JhcHBlckZuLCBsYXRlcjtcclxuXHJcbiAgXHRsYXRlciA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gcmVzZXQgbG9jayBhbmQgY2FsbCBpZiBxdWV1ZWRcclxuICBcdFx0bG9jayA9IGZhbHNlO1xyXG4gIFx0XHRpZiAoYXJncykge1xyXG4gIFx0XHRcdHdyYXBwZXJGbi5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICBcdFx0XHRhcmdzID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcblxyXG4gIFx0d3JhcHBlckZuID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAobG9jaykge1xyXG4gIFx0XHRcdC8vIGNhbGxlZCB0b28gc29vbiwgcXVldWUgdG8gY2FsbCBsYXRlclxyXG4gIFx0XHRcdGFyZ3MgPSBhcmd1bWVudHM7XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIGNhbGwgYW5kIGxvY2sgdW50aWwgbGF0ZXJcclxuICBcdFx0XHRmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xyXG4gIFx0XHRcdHNldFRpbWVvdXQobGF0ZXIsIHRpbWUpO1xyXG4gIFx0XHRcdGxvY2sgPSB0cnVlO1xyXG4gIFx0XHR9XHJcbiAgXHR9O1xyXG5cclxuICBcdHJldHVybiB3cmFwcGVyRm47XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gd3JhcE51bShudW06IE51bWJlciwgcmFuZ2U6IE51bWJlcltdLCBpbmNsdWRlTWF4PzogQm9vbGVhbik6IE51bWJlclxyXG4gIC8vIFJldHVybnMgdGhlIG51bWJlciBgbnVtYCBtb2R1bG8gYHJhbmdlYCBpbiBzdWNoIGEgd2F5IHNvIGl0IGxpZXMgd2l0aGluXHJcbiAgLy8gYHJhbmdlWzBdYCBhbmQgYHJhbmdlWzFdYC4gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgYWx3YXlzIHNtYWxsZXIgdGhhblxyXG4gIC8vIGByYW5nZVsxXWAgdW5sZXNzIGBpbmNsdWRlTWF4YCBpcyBzZXQgdG8gYHRydWVgLlxyXG4gIGZ1bmN0aW9uIHdyYXBOdW0oeCwgcmFuZ2UsIGluY2x1ZGVNYXgpIHtcclxuICBcdHZhciBtYXggPSByYW5nZVsxXSxcclxuICBcdCAgICBtaW4gPSByYW5nZVswXSxcclxuICBcdCAgICBkID0gbWF4IC0gbWluO1xyXG4gIFx0cmV0dXJuIHggPT09IG1heCAmJiBpbmNsdWRlTWF4ID8geCA6ICgoeCAtIG1pbikgJSBkICsgZCkgJSBkICsgbWluO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGZhbHNlRm4oKTogRnVuY3Rpb25cclxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggYWx3YXlzIHJldHVybnMgYGZhbHNlYC5cclxuICBmdW5jdGlvbiBmYWxzZUZuKCkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGZvcm1hdE51bShudW06IE51bWJlciwgZGlnaXRzPzogTnVtYmVyKTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIGBudW1gIHJvdW5kZWQgdG8gYGRpZ2l0c2AgZGVjaW1hbHMsIG9yIHRvIDYgZGVjaW1hbHMgYnkgZGVmYXVsdC5cclxuICBmdW5jdGlvbiBmb3JtYXROdW0obnVtLCBkaWdpdHMpIHtcclxuICBcdHZhciBwb3cgPSBNYXRoLnBvdygxMCwgKGRpZ2l0cyA9PT0gdW5kZWZpbmVkID8gNiA6IGRpZ2l0cykpO1xyXG4gIFx0cmV0dXJuIE1hdGgucm91bmQobnVtICogcG93KSAvIHBvdztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0cmltKHN0cjogU3RyaW5nKTogU3RyaW5nXHJcbiAgLy8gQ29tcGF0aWJpbGl0eSBwb2x5ZmlsbCBmb3IgW1N0cmluZy5wcm90b3R5cGUudHJpbV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL1RyaW0pXHJcbiAgZnVuY3Rpb24gdHJpbShzdHIpIHtcclxuICBcdHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNwbGl0V29yZHMoc3RyOiBTdHJpbmcpOiBTdHJpbmdbXVxyXG4gIC8vIFRyaW1zIGFuZCBzcGxpdHMgdGhlIHN0cmluZyBvbiB3aGl0ZXNwYWNlIGFuZCByZXR1cm5zIHRoZSBhcnJheSBvZiBwYXJ0cy5cclxuICBmdW5jdGlvbiBzcGxpdFdvcmRzKHN0cikge1xyXG4gIFx0cmV0dXJuIHRyaW0oc3RyKS5zcGxpdCgvXFxzKy8pO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNldE9wdGlvbnMob2JqOiBPYmplY3QsIG9wdGlvbnM6IE9iamVjdCk6IE9iamVjdFxyXG4gIC8vIE1lcmdlcyB0aGUgZ2l2ZW4gcHJvcGVydGllcyB0byB0aGUgYG9wdGlvbnNgIG9mIHRoZSBgb2JqYCBvYmplY3QsIHJldHVybmluZyB0aGUgcmVzdWx0aW5nIG9wdGlvbnMuIFNlZSBgQ2xhc3Mgb3B0aW9uc2AuIEhhcyBhbiBgTC5zZXRPcHRpb25zYCBzaG9ydGN1dC5cclxuICBmdW5jdGlvbiBzZXRPcHRpb25zKG9iaiwgb3B0aW9ucykge1xyXG4gIFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCAnb3B0aW9ucycpKSB7XHJcbiAgXHRcdG9iai5vcHRpb25zID0gb2JqLm9wdGlvbnMgPyBjcmVhdGUob2JqLm9wdGlvbnMpIDoge307XHJcbiAgXHR9XHJcbiAgXHRmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcclxuICBcdFx0b2JqLm9wdGlvbnNbaV0gPSBvcHRpb25zW2ldO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG9iai5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFBhcmFtU3RyaW5nKG9iajogT2JqZWN0LCBleGlzdGluZ1VybD86IFN0cmluZywgdXBwZXJjYXNlPzogQm9vbGVhbik6IFN0cmluZ1xyXG4gIC8vIENvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgcGFyYW1ldGVyIFVSTCBzdHJpbmcsIGUuZy4gYHthOiBcImZvb1wiLCBiOiBcImJhclwifWBcclxuICAvLyB0cmFuc2xhdGVzIHRvIGAnP2E9Zm9vJmI9YmFyJ2AuIElmIGBleGlzdGluZ1VybGAgaXMgc2V0LCB0aGUgcGFyYW1ldGVycyB3aWxsXHJcbiAgLy8gYmUgYXBwZW5kZWQgYXQgdGhlIGVuZC4gSWYgYHVwcGVyY2FzZWAgaXMgYHRydWVgLCB0aGUgcGFyYW1ldGVyIG5hbWVzIHdpbGxcclxuICAvLyBiZSB1cHBlcmNhc2VkIChlLmcuIGAnP0E9Zm9vJkI9YmFyJ2ApXHJcbiAgZnVuY3Rpb24gZ2V0UGFyYW1TdHJpbmcob2JqLCBleGlzdGluZ1VybCwgdXBwZXJjYXNlKSB7XHJcbiAgXHR2YXIgcGFyYW1zID0gW107XHJcbiAgXHRmb3IgKHZhciBpIGluIG9iaikge1xyXG4gIFx0XHRwYXJhbXMucHVzaChlbmNvZGVVUklDb21wb25lbnQodXBwZXJjYXNlID8gaS50b1VwcGVyQ2FzZSgpIDogaSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2ldKSk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gKCghZXhpc3RpbmdVcmwgfHwgZXhpc3RpbmdVcmwuaW5kZXhPZignPycpID09PSAtMSkgPyAnPycgOiAnJicpICsgcGFyYW1zLmpvaW4oJyYnKTtcclxuICB9XHJcblxyXG4gIHZhciB0ZW1wbGF0ZVJlID0gL1xceyAqKFtcXHdfLV0rKSAqXFx9L2c7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0ZW1wbGF0ZShzdHI6IFN0cmluZywgZGF0YTogT2JqZWN0KTogU3RyaW5nXHJcbiAgLy8gU2ltcGxlIHRlbXBsYXRpbmcgZmFjaWxpdHksIGFjY2VwdHMgYSB0ZW1wbGF0ZSBzdHJpbmcgb2YgdGhlIGZvcm0gYCdIZWxsbyB7YX0sIHtifSdgXHJcbiAgLy8gYW5kIGEgZGF0YSBvYmplY3QgbGlrZSBge2E6ICdmb28nLCBiOiAnYmFyJ31gLCByZXR1cm5zIGV2YWx1YXRlZCBzdHJpbmdcclxuICAvLyBgKCdIZWxsbyBmb28sIGJhcicpYC4gWW91IGNhbiBhbHNvIHNwZWNpZnkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygc3RyaW5ncyBmb3JcclxuICAvLyBkYXRhIHZhbHVlcyDigJQgdGhleSB3aWxsIGJlIGV2YWx1YXRlZCBwYXNzaW5nIGBkYXRhYCBhcyBhbiBhcmd1bWVudC5cclxuICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHIsIGRhdGEpIHtcclxuICBcdHJldHVybiBzdHIucmVwbGFjZSh0ZW1wbGF0ZVJlLCBmdW5jdGlvbiAoc3RyLCBrZXkpIHtcclxuICBcdFx0dmFyIHZhbHVlID0gZGF0YVtrZXldO1xyXG5cclxuICBcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbHVlIHByb3ZpZGVkIGZvciB2YXJpYWJsZSAnICsgc3RyKTtcclxuXHJcbiAgXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgXHRcdFx0dmFsdWUgPSB2YWx1ZShkYXRhKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdmFsdWU7XHJcbiAgXHR9KTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBpc0FycmF5KG9iaik6IEJvb2xlYW5cclxuICAvLyBDb21wYXRpYmlsaXR5IHBvbHlmaWxsIGZvciBbQXJyYXkuaXNBcnJheV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheSlcclxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0cmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJyk7XHJcbiAgfTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGluZGV4T2YoYXJyYXk6IEFycmF5LCBlbDogT2JqZWN0KTogTnVtYmVyXHJcbiAgLy8gQ29tcGF0aWJpbGl0eSBwb2x5ZmlsbCBmb3IgW0FycmF5LnByb3RvdHlwZS5pbmRleE9mXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pbmRleE9mKVxyXG4gIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIGVsKSB7XHJcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdGlmIChhcnJheVtpXSA9PT0gZWwpIHsgcmV0dXJuIGk7IH1cclxuICBcdH1cclxuICBcdHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBlbXB0eUltYWdlVXJsOiBTdHJpbmdcclxuICAvLyBEYXRhIFVSSSBzdHJpbmcgY29udGFpbmluZyBhIGJhc2U2NC1lbmNvZGVkIGVtcHR5IEdJRiBpbWFnZS5cclxuICAvLyBVc2VkIGFzIGEgaGFjayB0byBmcmVlIG1lbW9yeSBmcm9tIHVudXNlZCBpbWFnZXMgb24gV2ViS2l0LXBvd2VyZWRcclxuICAvLyBtb2JpbGUgZGV2aWNlcyAoYnkgc2V0dGluZyBpbWFnZSBgc3JjYCB0byB0aGlzIHN0cmluZykuXHJcbiAgdmFyIGVtcHR5SW1hZ2VVcmwgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzPSc7XHJcblxyXG4gIC8vIGluc3BpcmVkIGJ5IGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWZpeGVkKG5hbWUpIHtcclxuICBcdHJldHVybiB3aW5kb3dbJ3dlYmtpdCcgKyBuYW1lXSB8fCB3aW5kb3dbJ21veicgKyBuYW1lXSB8fCB3aW5kb3dbJ21zJyArIG5hbWVdO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxhc3RUaW1lID0gMDtcclxuXHJcbiAgLy8gZmFsbGJhY2sgZm9yIElFIDctOFxyXG4gIGZ1bmN0aW9uIHRpbWVvdXREZWZlcihmbikge1xyXG4gIFx0dmFyIHRpbWUgPSArbmV3IERhdGUoKSxcclxuICBcdCAgICB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAodGltZSAtIGxhc3RUaW1lKSk7XHJcblxyXG4gIFx0bGFzdFRpbWUgPSB0aW1lICsgdGltZVRvQ2FsbDtcclxuICBcdHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmbiwgdGltZVRvQ2FsbCk7XHJcbiAgfVxyXG5cclxuICB2YXIgcmVxdWVzdEZuID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBnZXRQcmVmaXhlZCgnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJykgfHwgdGltZW91dERlZmVyO1xyXG4gIHZhciBjYW5jZWxGbiA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSB8fCBnZXRQcmVmaXhlZCgnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnKSB8fFxyXG4gIFx0XHRnZXRQcmVmaXhlZCgnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJykgfHwgZnVuY3Rpb24gKGlkKSB7IHdpbmRvdy5jbGVhclRpbWVvdXQoaWQpOyB9O1xyXG5cclxuICAvLyBAZnVuY3Rpb24gcmVxdWVzdEFuaW1GcmFtZShmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QsIGltbWVkaWF0ZT86IEJvb2xlYW4pOiBOdW1iZXJcclxuICAvLyBTY2hlZHVsZXMgYGZuYCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBicm93c2VyIHJlcGFpbnRzLiBgZm5gIGlzIGJvdW5kIHRvXHJcbiAgLy8gYGNvbnRleHRgIGlmIGdpdmVuLiBXaGVuIGBpbW1lZGlhdGVgIGlzIHNldCwgYGZuYCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgaWZcclxuICAvLyB0aGUgYnJvd3NlciBkb2Vzbid0IGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yXHJcbiAgLy8gW2B3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL3dpbmRvdy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLFxyXG4gIC8vIG90aGVyd2lzZSBpdCdzIGRlbGF5ZWQuIFJldHVybnMgYSByZXF1ZXN0IElEIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LlxyXG4gIGZ1bmN0aW9uIHJlcXVlc3RBbmltRnJhbWUoZm4sIGNvbnRleHQsIGltbWVkaWF0ZSkge1xyXG4gIFx0aWYgKGltbWVkaWF0ZSAmJiByZXF1ZXN0Rm4gPT09IHRpbWVvdXREZWZlcikge1xyXG4gIFx0XHRmbi5jYWxsKGNvbnRleHQpO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0cmV0dXJuIHJlcXVlc3RGbi5jYWxsKHdpbmRvdywgYmluZChmbiwgY29udGV4dCkpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNhbmNlbEFuaW1GcmFtZShpZDogTnVtYmVyKTogdW5kZWZpbmVkXHJcbiAgLy8gQ2FuY2VscyBhIHByZXZpb3VzIGByZXF1ZXN0QW5pbUZyYW1lYC4gU2VlIGFsc28gW3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL3dpbmRvdy9jYW5jZWxBbmltYXRpb25GcmFtZSkuXHJcbiAgZnVuY3Rpb24gY2FuY2VsQW5pbUZyYW1lKGlkKSB7XHJcbiAgXHRpZiAoaWQpIHtcclxuICBcdFx0Y2FuY2VsRm4uY2FsbCh3aW5kb3csIGlkKTtcclxuICBcdH1cclxuICB9XG5cbiAgdmFyIFV0aWwgPSAoe1xuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGJpbmQ6IGJpbmQsXG4gICAgbGFzdElkOiBsYXN0SWQsXG4gICAgc3RhbXA6IHN0YW1wLFxuICAgIHRocm90dGxlOiB0aHJvdHRsZSxcbiAgICB3cmFwTnVtOiB3cmFwTnVtLFxuICAgIGZhbHNlRm46IGZhbHNlRm4sXG4gICAgZm9ybWF0TnVtOiBmb3JtYXROdW0sXG4gICAgdHJpbTogdHJpbSxcbiAgICBzcGxpdFdvcmRzOiBzcGxpdFdvcmRzLFxuICAgIHNldE9wdGlvbnM6IHNldE9wdGlvbnMsXG4gICAgZ2V0UGFyYW1TdHJpbmc6IGdldFBhcmFtU3RyaW5nLFxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICBpc0FycmF5OiBpc0FycmF5LFxuICAgIGluZGV4T2Y6IGluZGV4T2YsXG4gICAgZW1wdHlJbWFnZVVybDogZW1wdHlJbWFnZVVybCxcbiAgICByZXF1ZXN0Rm46IHJlcXVlc3RGbixcbiAgICBjYW5jZWxGbjogY2FuY2VsRm4sXG4gICAgcmVxdWVzdEFuaW1GcmFtZTogcmVxdWVzdEFuaW1GcmFtZSxcbiAgICBjYW5jZWxBbmltRnJhbWU6IGNhbmNlbEFuaW1GcmFtZVxuICB9KTtcblxuICAvLyBAY2xhc3MgQ2xhc3NcclxuICAvLyBAYWthIEwuQ2xhc3NcclxuXHJcbiAgLy8gQHNlY3Rpb25cclxuICAvLyBAdW5pbmhlcml0YWJsZVxyXG5cclxuICAvLyBUaGFua3MgdG8gSm9obiBSZXNpZyBhbmQgRGVhbiBFZHdhcmRzIGZvciBpbnNwaXJhdGlvbiFcclxuXHJcbiAgZnVuY3Rpb24gQ2xhc3MoKSB7fVxyXG5cclxuICBDbGFzcy5leHRlbmQgPSBmdW5jdGlvbiAocHJvcHMpIHtcclxuXHJcbiAgXHQvLyBAZnVuY3Rpb24gZXh0ZW5kKHByb3BzOiBPYmplY3QpOiBGdW5jdGlvblxyXG4gIFx0Ly8gW0V4dGVuZHMgdGhlIGN1cnJlbnQgY2xhc3NdKCNjbGFzcy1pbmhlcml0YW5jZSkgZ2l2ZW4gdGhlIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQuXHJcbiAgXHQvLyBSZXR1cm5zIGEgSmF2YXNjcmlwdCBmdW5jdGlvbiB0aGF0IGlzIGEgY2xhc3MgY29uc3RydWN0b3IgKHRvIGJlIGNhbGxlZCB3aXRoIGBuZXdgKS5cclxuICBcdHZhciBOZXdDbGFzcyA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdC8vIGNhbGwgdGhlIGNvbnN0cnVjdG9yXHJcbiAgXHRcdGlmICh0aGlzLmluaXRpYWxpemUpIHtcclxuICBcdFx0XHR0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gY2FsbCBhbGwgY29uc3RydWN0b3IgaG9va3NcclxuICBcdFx0dGhpcy5jYWxsSW5pdEhvb2tzKCk7XHJcbiAgXHR9O1xyXG5cclxuICBcdHZhciBwYXJlbnRQcm90byA9IE5ld0NsYXNzLl9fc3VwZXJfXyA9IHRoaXMucHJvdG90eXBlO1xyXG5cclxuICBcdHZhciBwcm90byA9IGNyZWF0ZShwYXJlbnRQcm90byk7XHJcbiAgXHRwcm90by5jb25zdHJ1Y3RvciA9IE5ld0NsYXNzO1xyXG5cclxuICBcdE5ld0NsYXNzLnByb3RvdHlwZSA9IHByb3RvO1xyXG5cclxuICBcdC8vIGluaGVyaXQgcGFyZW50J3Mgc3RhdGljc1xyXG4gIFx0Zm9yICh2YXIgaSBpbiB0aGlzKSB7XHJcbiAgXHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywgaSkgJiYgaSAhPT0gJ3Byb3RvdHlwZScgJiYgaSAhPT0gJ19fc3VwZXJfXycpIHtcclxuICBcdFx0XHROZXdDbGFzc1tpXSA9IHRoaXNbaV07XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHQvLyBtaXggc3RhdGljIHByb3BlcnRpZXMgaW50byB0aGUgY2xhc3NcclxuICBcdGlmIChwcm9wcy5zdGF0aWNzKSB7XHJcbiAgXHRcdGV4dGVuZChOZXdDbGFzcywgcHJvcHMuc3RhdGljcyk7XHJcbiAgXHRcdGRlbGV0ZSBwcm9wcy5zdGF0aWNzO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIG1peCBpbmNsdWRlcyBpbnRvIHRoZSBwcm90b3R5cGVcclxuICBcdGlmIChwcm9wcy5pbmNsdWRlcykge1xyXG4gIFx0XHRjaGVja0RlcHJlY2F0ZWRNaXhpbkV2ZW50cyhwcm9wcy5pbmNsdWRlcyk7XHJcbiAgXHRcdGV4dGVuZC5hcHBseShudWxsLCBbcHJvdG9dLmNvbmNhdChwcm9wcy5pbmNsdWRlcykpO1xyXG4gIFx0XHRkZWxldGUgcHJvcHMuaW5jbHVkZXM7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gbWVyZ2Ugb3B0aW9uc1xyXG4gIFx0aWYgKHByb3RvLm9wdGlvbnMpIHtcclxuICBcdFx0cHJvcHMub3B0aW9ucyA9IGV4dGVuZChjcmVhdGUocHJvdG8ub3B0aW9ucyksIHByb3BzLm9wdGlvbnMpO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIG1peCBnaXZlbiBwcm9wZXJ0aWVzIGludG8gdGhlIHByb3RvdHlwZVxyXG4gIFx0ZXh0ZW5kKHByb3RvLCBwcm9wcyk7XHJcblxyXG4gIFx0cHJvdG8uX2luaXRIb29rcyA9IFtdO1xyXG5cclxuICBcdC8vIGFkZCBtZXRob2QgZm9yIGNhbGxpbmcgYWxsIGhvb2tzXHJcbiAgXHRwcm90by5jYWxsSW5pdEhvb2tzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2luaXRIb29rc0NhbGxlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGlmIChwYXJlbnRQcm90by5jYWxsSW5pdEhvb2tzKSB7XHJcbiAgXHRcdFx0cGFyZW50UHJvdG8uY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0SG9va3NDYWxsZWQgPSB0cnVlO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHByb3RvLl9pbml0SG9va3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRwcm90by5faW5pdEhvb2tzW2ldLmNhbGwodGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcblxyXG4gIFx0cmV0dXJuIE5ld0NsYXNzO1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBAZnVuY3Rpb24gaW5jbHVkZShwcm9wZXJ0aWVzOiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gW0luY2x1ZGVzIGEgbWl4aW5dKCNjbGFzcy1pbmNsdWRlcykgaW50byB0aGUgY3VycmVudCBjbGFzcy5cclxuICBDbGFzcy5pbmNsdWRlID0gZnVuY3Rpb24gKHByb3BzKSB7XHJcbiAgXHRleHRlbmQodGhpcy5wcm90b3R5cGUsIHByb3BzKTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBtZXJnZU9wdGlvbnMob3B0aW9uczogT2JqZWN0KTogdGhpc1xyXG4gIC8vIFtNZXJnZXMgYG9wdGlvbnNgXSgjY2xhc3Mtb3B0aW9ucykgaW50byB0aGUgZGVmYXVsdHMgb2YgdGhlIGNsYXNzLlxyXG4gIENsYXNzLm1lcmdlT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRleHRlbmQodGhpcy5wcm90b3R5cGUub3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICAvLyBAZnVuY3Rpb24gYWRkSW5pdEhvb2soZm46IEZ1bmN0aW9uKTogdGhpc1xyXG4gIC8vIEFkZHMgYSBbY29uc3RydWN0b3IgaG9va10oI2NsYXNzLWNvbnN0cnVjdG9yLWhvb2tzKSB0byB0aGUgY2xhc3MuXHJcbiAgQ2xhc3MuYWRkSW5pdEhvb2sgPSBmdW5jdGlvbiAoZm4pIHsgLy8gKEZ1bmN0aW9uKSB8fCAoU3RyaW5nLCBhcmdzLi4uKVxyXG4gIFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xyXG5cclxuICBcdHZhciBpbml0ID0gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8gZm4gOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXNbZm5dLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gIFx0fTtcclxuXHJcbiAgXHR0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzID0gdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcyB8fCBbXTtcclxuICBcdHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChpbml0KTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGNoZWNrRGVwcmVjYXRlZE1peGluRXZlbnRzKGluY2x1ZGVzKSB7XHJcbiAgXHRpZiAodHlwZW9mIEwgPT09ICd1bmRlZmluZWQnIHx8ICFMIHx8ICFMLk1peGluKSB7IHJldHVybjsgfVxyXG5cclxuICBcdGluY2x1ZGVzID0gaXNBcnJheShpbmNsdWRlcykgPyBpbmNsdWRlcyA6IFtpbmNsdWRlc107XHJcblxyXG4gIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbmNsdWRlcy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRpZiAoaW5jbHVkZXNbaV0gPT09IEwuTWl4aW4uRXZlbnRzKSB7XHJcbiAgXHRcdFx0Y29uc29sZS53YXJuKCdEZXByZWNhdGVkIGluY2x1ZGUgb2YgTC5NaXhpbi5FdmVudHM6ICcgK1xyXG4gIFx0XHRcdFx0J3RoaXMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcywgJyArXHJcbiAgXHRcdFx0XHQncGxlYXNlIGluaGVyaXQgZnJvbSBMLkV2ZW50ZWQgaW5zdGVhZC4nLCBuZXcgRXJyb3IoKS5zdGFjayk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgRXZlbnRlZFxyXG4gICAqIEBha2EgTC5FdmVudGVkXHJcbiAgICogQGluaGVyaXRzIENsYXNzXHJcbiAgICpcclxuICAgKiBBIHNldCBvZiBtZXRob2RzIHNoYXJlZCBiZXR3ZWVuIGV2ZW50LXBvd2VyZWQgY2xhc3NlcyAobGlrZSBgTWFwYCBhbmQgYE1hcmtlcmApLiBHZW5lcmFsbHksIGV2ZW50cyBhbGxvdyB5b3UgdG8gZXhlY3V0ZSBzb21lIGZ1bmN0aW9uIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMgd2l0aCBhbiBvYmplY3QgKGUuZy4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBtYXAsIGNhdXNpbmcgdGhlIG1hcCB0byBmaXJlIGAnY2xpY2snYCBldmVudCkuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAqIFx0YWxlcnQoZS5sYXRsbmcpO1xyXG4gICAqIH0gKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIExlYWZsZXQgZGVhbHMgd2l0aCBldmVudCBsaXN0ZW5lcnMgYnkgcmVmZXJlbmNlLCBzbyBpZiB5b3Ugd2FudCB0byBhZGQgYSBsaXN0ZW5lciBhbmQgdGhlbiByZW1vdmUgaXQsIGRlZmluZSBpdCBhcyBhIGZ1bmN0aW9uOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBmdW5jdGlvbiBvbkNsaWNrKGUpIHsgLi4uIH1cclxuICAgKlxyXG4gICAqIG1hcC5vbignY2xpY2snLCBvbkNsaWNrKTtcclxuICAgKiBtYXAub2ZmKCdjbGljaycsIG9uQ2xpY2spO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgRXZlbnRzID0ge1xyXG4gIFx0LyogQG1ldGhvZCBvbih0eXBlOiBTdHJpbmcsIGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICBcdCAqIEFkZHMgYSBsaXN0ZW5lciBmdW5jdGlvbiAoYGZuYCkgdG8gYSBwYXJ0aWN1bGFyIGV2ZW50IHR5cGUgb2YgdGhlIG9iamVjdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGNvbnRleHQgb2YgdGhlIGxpc3RlbmVyIChvYmplY3QgdGhlIHRoaXMga2V5d29yZCB3aWxsIHBvaW50IHRvKS4gWW91IGNhbiBhbHNvIHBhc3Mgc2V2ZXJhbCBzcGFjZS1zZXBhcmF0ZWQgdHlwZXMgKGUuZy4gYCdjbGljayBkYmxjbGljaydgKS5cclxuICBcdCAqXHJcbiAgXHQgKiBAYWx0ZXJuYXRpdmVcclxuICBcdCAqIEBtZXRob2Qgb24oZXZlbnRNYXA6IE9iamVjdCk6IHRoaXNcclxuICBcdCAqIEFkZHMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycywgZS5nLiBge2NsaWNrOiBvbkNsaWNrLCBtb3VzZW1vdmU6IG9uTW91c2VNb3ZlfWBcclxuICBcdCAqL1xyXG4gIFx0b246IGZ1bmN0aW9uICh0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRcdC8vIHR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xyXG4gIFx0XHRpZiAodHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRcdGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHtcclxuICBcdFx0XHRcdC8vIHdlIGRvbid0IHByb2Nlc3Mgc3BhY2Utc2VwYXJhdGVkIGV2ZW50cyBoZXJlIGZvciBwZXJmb3JtYW5jZTtcclxuICBcdFx0XHRcdC8vIGl0J3MgYSBob3QgcGF0aCBzaW5jZSBMYXllciB1c2VzIHRoZSBvbihvYmopIHN5bnRheFxyXG4gIFx0XHRcdFx0dGhpcy5fb24odHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIHR5cGVzIGNhbiBiZSBhIHN0cmluZyBvZiBzcGFjZS1zZXBhcmF0ZWQgd29yZHNcclxuICBcdFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuX29uKHR5cGVzW2ldLCBmbiwgY29udGV4dCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQG1ldGhvZCBvZmYodHlwZTogU3RyaW5nLCBmbj86IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIFx0ICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgYWRkZWQgbGlzdGVuZXIgZnVuY3Rpb24uIElmIG5vIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCwgaXQgd2lsbCByZW1vdmUgYWxsIHRoZSBsaXN0ZW5lcnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGV2ZW50IGZyb20gdGhlIG9iamVjdC4gTm90ZSB0aGF0IGlmIHlvdSBwYXNzZWQgYSBjdXN0b20gY29udGV4dCB0byBgb25gLCB5b3UgbXVzdCBwYXNzIHRoZSBzYW1lIGNvbnRleHQgdG8gYG9mZmAgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lci5cclxuICBcdCAqXHJcbiAgXHQgKiBAYWx0ZXJuYXRpdmVcclxuICBcdCAqIEBtZXRob2Qgb2ZmKGV2ZW50TWFwOiBPYmplY3QpOiB0aGlzXHJcbiAgXHQgKiBSZW1vdmVzIGEgc2V0IG9mIHR5cGUvbGlzdGVuZXIgcGFpcnMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQGFsdGVybmF0aXZlXHJcbiAgXHQgKiBAbWV0aG9kIG9mZjogdGhpc1xyXG4gIFx0ICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIHRvIGFsbCBldmVudHMgb24gdGhlIG9iamVjdC4gVGhpcyBpbmNsdWRlcyBpbXBsaWNpdGx5IGF0dGFjaGVkIGV2ZW50cy5cclxuICBcdCAqL1xyXG4gIFx0b2ZmOiBmdW5jdGlvbiAodHlwZXMsIGZuLCBjb250ZXh0KSB7XHJcblxyXG4gIFx0XHRpZiAoIXR5cGVzKSB7XHJcbiAgXHRcdFx0Ly8gY2xlYXIgYWxsIGxpc3RlbmVycyBpZiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRzO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdFx0dGhpcy5fb2ZmKHR5cGUsIHR5cGVzW3R5cGVdLCBmbik7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuX29mZih0eXBlc1tpXSwgZm4sIGNvbnRleHQpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGF0dGFjaCBsaXN0ZW5lciAod2l0aG91dCBzeW50YWN0aWMgc3VnYXIgbm93KVxyXG4gIFx0X29uOiBmdW5jdGlvbiAodHlwZSwgZm4sIGNvbnRleHQpIHtcclxuICBcdFx0dGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9O1xyXG5cclxuICBcdFx0LyogZ2V0L2luaXQgbGlzdGVuZXJzIGZvciB0eXBlICovXHJcbiAgXHRcdHZhciB0eXBlTGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gIFx0XHRpZiAoIXR5cGVMaXN0ZW5lcnMpIHtcclxuICBcdFx0XHR0eXBlTGlzdGVuZXJzID0gW107XHJcbiAgXHRcdFx0dGhpcy5fZXZlbnRzW3R5cGVdID0gdHlwZUxpc3RlbmVycztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGNvbnRleHQgPT09IHRoaXMpIHtcclxuICBcdFx0XHQvLyBMZXNzIG1lbW9yeSBmb290cHJpbnQuXHJcbiAgXHRcdFx0Y29udGV4dCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG4gIFx0XHR2YXIgbmV3TGlzdGVuZXIgPSB7Zm46IGZuLCBjdHg6IGNvbnRleHR9LFxyXG4gIFx0XHQgICAgbGlzdGVuZXJzID0gdHlwZUxpc3RlbmVycztcclxuXHJcbiAgXHRcdC8vIGNoZWNrIGlmIGZuIGFscmVhZHkgdGhlcmVcclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdGlmIChsaXN0ZW5lcnNbaV0uZm4gPT09IGZuICYmIGxpc3RlbmVyc1tpXS5jdHggPT09IGNvbnRleHQpIHtcclxuICBcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGxpc3RlbmVycy5wdXNoKG5ld0xpc3RlbmVyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29mZjogZnVuY3Rpb24gKHR5cGUsIGZuLCBjb250ZXh0KSB7XHJcbiAgXHRcdHZhciBsaXN0ZW5lcnMsXHJcbiAgXHRcdCAgICBpLFxyXG4gIFx0XHQgICAgbGVuO1xyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9ldmVudHMpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XHJcblxyXG4gIFx0XHRpZiAoIWxpc3RlbmVycykge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCFmbikge1xyXG4gIFx0XHRcdC8vIFNldCBhbGwgcmVtb3ZlZCBsaXN0ZW5lcnMgdG8gbm9vcCBzbyB0aGV5IGFyZSBub3QgY2FsbGVkIGlmIHJlbW92ZSBoYXBwZW5zIGluIGZpcmVcclxuICBcdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdGxpc3RlbmVyc1tpXS5mbiA9IGZhbHNlRm47XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdC8vIGNsZWFyIGFsbCBsaXN0ZW5lcnMgZm9yIGEgdHlwZSBpZiBmdW5jdGlvbiBpc24ndCBzcGVjaWZpZWRcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGNvbnRleHQgPT09IHRoaXMpIHtcclxuICBcdFx0XHRjb250ZXh0ID0gdW5kZWZpbmVkO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobGlzdGVuZXJzKSB7XHJcblxyXG4gIFx0XHRcdC8vIGZpbmQgZm4gYW5kIHJlbW92ZSBpdFxyXG4gIFx0XHRcdGZvciAoaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0dmFyIGwgPSBsaXN0ZW5lcnNbaV07XHJcbiAgXHRcdFx0XHRpZiAobC5jdHggIT09IGNvbnRleHQpIHsgY29udGludWU7IH1cclxuICBcdFx0XHRcdGlmIChsLmZuID09PSBmbikge1xyXG5cclxuICBcdFx0XHRcdFx0Ly8gc2V0IHRoZSByZW1vdmVkIGxpc3RlbmVyIHRvIG5vb3Agc28gdGhhdCdzIG5vdCBjYWxsZWQgaWYgcmVtb3ZlIGhhcHBlbnMgaW4gZmlyZVxyXG4gIFx0XHRcdFx0XHRsLmZuID0gZmFsc2VGbjtcclxuXHJcbiAgXHRcdFx0XHRcdGlmICh0aGlzLl9maXJpbmdDb3VudCkge1xyXG4gIFx0XHRcdFx0XHRcdC8qIGNvcHkgYXJyYXkgaW4gY2FzZSBldmVudHMgYXJlIGJlaW5nIGZpcmVkICovXHJcbiAgXHRcdFx0XHRcdFx0dGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKCk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0bGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuXHJcbiAgXHRcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmaXJlKHR5cGU6IFN0cmluZywgZGF0YT86IE9iamVjdCwgcHJvcGFnYXRlPzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIEZpcmVzIGFuIGV2ZW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYW4gZGF0YVxyXG4gIFx0Ly8gb2JqZWN0IOKAlCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHdpbGwgY29udGFpbiBpdHNcclxuICBcdC8vIHByb3BlcnRpZXMuIFRoZSBldmVudCBjYW4gb3B0aW9uYWxseSBiZSBwcm9wYWdhdGVkIHRvIGV2ZW50IHBhcmVudHMuXHJcbiAgXHRmaXJlOiBmdW5jdGlvbiAodHlwZSwgZGF0YSwgcHJvcGFnYXRlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5saXN0ZW5zKHR5cGUsIHByb3BhZ2F0ZSkpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdHZhciBldmVudCA9IGV4dGVuZCh7fSwgZGF0YSwge1xyXG4gIFx0XHRcdHR5cGU6IHR5cGUsXHJcbiAgXHRcdFx0dGFyZ2V0OiB0aGlzLFxyXG4gIFx0XHRcdHNvdXJjZVRhcmdldDogZGF0YSAmJiBkYXRhLnNvdXJjZVRhcmdldCB8fCB0aGlzXHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2V2ZW50cykge1xyXG4gIFx0XHRcdHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XHJcblxyXG4gIFx0XHRcdGlmIChsaXN0ZW5lcnMpIHtcclxuICBcdFx0XHRcdHRoaXMuX2ZpcmluZ0NvdW50ID0gKHRoaXMuX2ZpcmluZ0NvdW50ICsgMSkgfHwgMTtcclxuICBcdFx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdFx0dmFyIGwgPSBsaXN0ZW5lcnNbaV07XHJcbiAgXHRcdFx0XHRcdGwuZm4uY2FsbChsLmN0eCB8fCB0aGlzLCBldmVudCk7XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0dGhpcy5fZmlyaW5nQ291bnQtLTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChwcm9wYWdhdGUpIHtcclxuICBcdFx0XHQvLyBwcm9wYWdhdGUgdGhlIGV2ZW50IHRvIHBhcmVudHMgKHNldCB3aXRoIGFkZEV2ZW50UGFyZW50KVxyXG4gIFx0XHRcdHRoaXMuX3Byb3BhZ2F0ZUV2ZW50KGV2ZW50KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGlzdGVucyh0eXBlOiBTdHJpbmcpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiBhIHBhcnRpY3VsYXIgZXZlbnQgdHlwZSBoYXMgYW55IGxpc3RlbmVycyBhdHRhY2hlZCB0byBpdC5cclxuICBcdGxpc3RlbnM6IGZ1bmN0aW9uICh0eXBlLCBwcm9wYWdhdGUpIHtcclxuICBcdFx0dmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbdHlwZV07XHJcbiAgXHRcdGlmIChsaXN0ZW5lcnMgJiYgbGlzdGVuZXJzLmxlbmd0aCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG5cclxuICBcdFx0aWYgKHByb3BhZ2F0ZSkge1xyXG4gIFx0XHRcdC8vIGFsc28gY2hlY2sgcGFyZW50cyBmb3IgbGlzdGVuZXJzIGlmIGV2ZW50IHByb3BhZ2F0ZXNcclxuICBcdFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9ldmVudFBhcmVudHMpIHtcclxuICBcdFx0XHRcdGlmICh0aGlzLl9ldmVudFBhcmVudHNbaWRdLmxpc3RlbnModHlwZSwgcHJvcGFnYXRlKSkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgb25jZSjigKYpOiB0aGlzXHJcbiAgXHQvLyBCZWhhdmVzIGFzIFtgb24o4oCmKWBdKCNldmVudGVkLW9uKSwgZXhjZXB0IHRoZSBsaXN0ZW5lciB3aWxsIG9ubHkgZ2V0IGZpcmVkIG9uY2UgYW5kIHRoZW4gcmVtb3ZlZC5cclxuICBcdG9uY2U6IGZ1bmN0aW9uICh0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRcdGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdFx0dGhpcy5vbmNlKHR5cGUsIHR5cGVzW3R5cGVdLCBmbik7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgaGFuZGxlciA9IGJpbmQoZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRcdHRoaXNcclxuICBcdFx0XHQgICAgLm9mZih0eXBlcywgZm4sIGNvbnRleHQpXHJcbiAgXHRcdFx0ICAgIC5vZmYodHlwZXMsIGhhbmRsZXIsIGNvbnRleHQpO1xyXG4gIFx0XHR9LCB0aGlzKTtcclxuXHJcbiAgXHRcdC8vIGFkZCBhIGxpc3RlbmVyIHRoYXQncyBleGVjdXRlZCBvbmNlIGFuZCByZW1vdmVkIGFmdGVyIHRoYXRcclxuICBcdFx0cmV0dXJuIHRoaXNcclxuICBcdFx0ICAgIC5vbih0eXBlcywgZm4sIGNvbnRleHQpXHJcbiAgXHRcdCAgICAub24odHlwZXMsIGhhbmRsZXIsIGNvbnRleHQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEV2ZW50UGFyZW50KG9iajogRXZlbnRlZCk6IHRoaXNcclxuICBcdC8vIEFkZHMgYW4gZXZlbnQgcGFyZW50IC0gYW4gYEV2ZW50ZWRgIHRoYXQgd2lsbCByZWNlaXZlIHByb3BhZ2F0ZWQgZXZlbnRzXHJcbiAgXHRhZGRFdmVudFBhcmVudDogZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0XHR0aGlzLl9ldmVudFBhcmVudHMgPSB0aGlzLl9ldmVudFBhcmVudHMgfHwge307XHJcbiAgXHRcdHRoaXMuX2V2ZW50UGFyZW50c1tzdGFtcChvYmopXSA9IG9iajtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlRXZlbnRQYXJlbnQob2JqOiBFdmVudGVkKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyBhbiBldmVudCBwYXJlbnQsIHNvIGl0IHdpbGwgc3RvcCByZWNlaXZpbmcgcHJvcGFnYXRlZCBldmVudHNcclxuICBcdHJlbW92ZUV2ZW50UGFyZW50OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9ldmVudFBhcmVudHMpIHtcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW3N0YW1wKG9iaildO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcHJvcGFnYXRlRXZlbnQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2V2ZW50UGFyZW50cykge1xyXG4gIFx0XHRcdHRoaXMuX2V2ZW50UGFyZW50c1tpZF0uZmlyZShlLnR5cGUsIGV4dGVuZCh7XHJcbiAgXHRcdFx0XHRsYXllcjogZS50YXJnZXQsXHJcbiAgXHRcdFx0XHRwcm9wYWdhdGVkRnJvbTogZS50YXJnZXRcclxuICBcdFx0XHR9LCBlKSwgdHJ1ZSk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9O1xyXG5cclxuICAvLyBhbGlhc2VzOyB3ZSBzaG91bGQgZGl0Y2ggdGhvc2UgZXZlbnR1YWxseVxyXG5cclxuICAvLyBAbWV0aG9kIGFkZEV2ZW50TGlzdGVuZXIo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb24o4oCmKWBdKCNldmVudGVkLW9uKVxyXG4gIEV2ZW50cy5hZGRFdmVudExpc3RlbmVyID0gRXZlbnRzLm9uO1xyXG5cclxuICAvLyBAbWV0aG9kIHJlbW92ZUV2ZW50TGlzdGVuZXIo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb2ZmKOKApilgXSgjZXZlbnRlZC1vZmYpXHJcblxyXG4gIC8vIEBtZXRob2QgY2xlYXJBbGxFdmVudExpc3RlbmVycyjigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BvZmYoKWBdKCNldmVudGVkLW9mZilcclxuICBFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEV2ZW50cy5jbGVhckFsbEV2ZW50TGlzdGVuZXJzID0gRXZlbnRzLm9mZjtcclxuXHJcbiAgLy8gQG1ldGhvZCBhZGRPbmVUaW1lRXZlbnRMaXN0ZW5lcijigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BvbmNlKOKApilgXSgjZXZlbnRlZC1vbmNlKVxyXG4gIEV2ZW50cy5hZGRPbmVUaW1lRXZlbnRMaXN0ZW5lciA9IEV2ZW50cy5vbmNlO1xyXG5cclxuICAvLyBAbWV0aG9kIGZpcmVFdmVudCjigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BmaXJlKOKApilgXSgjZXZlbnRlZC1maXJlKVxyXG4gIEV2ZW50cy5maXJlRXZlbnQgPSBFdmVudHMuZmlyZTtcclxuXHJcbiAgLy8gQG1ldGhvZCBoYXNFdmVudExpc3RlbmVycyjigKYpOiBCb29sZWFuXHJcbiAgLy8gQWxpYXMgdG8gW2BsaXN0ZW5zKOKApilgXSgjZXZlbnRlZC1saXN0ZW5zKVxyXG4gIEV2ZW50cy5oYXNFdmVudExpc3RlbmVycyA9IEV2ZW50cy5saXN0ZW5zO1xyXG5cclxuICB2YXIgRXZlbnRlZCA9IENsYXNzLmV4dGVuZChFdmVudHMpO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFBvaW50XHJcbiAgICogQGFrYSBMLlBvaW50XHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgcG9pbnQgd2l0aCBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBpbiBwaXhlbHMuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgcG9pbnQgPSBMLnBvaW50KDIwMCwgMzAwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEFsbCBMZWFmbGV0IG1ldGhvZHMgYW5kIG9wdGlvbnMgdGhhdCBhY2NlcHQgYFBvaW50YCBvYmplY3RzIGFsc28gYWNjZXB0IHRoZW0gaW4gYSBzaW1wbGUgQXJyYXkgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZXNlIGxpbmVzIGFyZSBlcXVpdmFsZW50OlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAucGFuQnkoWzIwMCwgMzAwXSk7XHJcbiAgICogbWFwLnBhbkJ5KEwucG9pbnQoMjAwLCAzMDApKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgUG9pbnRgIGRvZXMgbm90IGluaGVyaXQgZnJvbSBMZWFmbGV0J3MgYENsYXNzYCBvYmplY3QsXHJcbiAgICogd2hpY2ggbWVhbnMgbmV3IGNsYXNzZXMgY2FuJ3QgaW5oZXJpdCBmcm9tIGl0LCBhbmQgbmV3IG1ldGhvZHNcclxuICAgKiBjYW4ndCBiZSBhZGRlZCB0byBpdCB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIFBvaW50KHgsIHksIHJvdW5kKSB7XHJcbiAgXHQvLyBAcHJvcGVydHkgeDogTnVtYmVyOyBUaGUgYHhgIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50XHJcbiAgXHR0aGlzLnggPSAocm91bmQgPyBNYXRoLnJvdW5kKHgpIDogeCk7XHJcbiAgXHQvLyBAcHJvcGVydHkgeTogTnVtYmVyOyBUaGUgYHlgIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50XHJcbiAgXHR0aGlzLnkgPSAocm91bmQgPyBNYXRoLnJvdW5kKHkpIDogeSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdHJ1bmMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uICh2KSB7XHJcbiAgXHRyZXR1cm4gdiA+IDAgPyBNYXRoLmZsb29yKHYpIDogTWF0aC5jZWlsKHYpO1xyXG4gIH07XHJcblxyXG4gIFBvaW50LnByb3RvdHlwZSA9IHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNsb25lKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludC5cclxuICBcdGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZChvdGhlclBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYWRkaXRpb24gb2YgdGhlIGN1cnJlbnQgYW5kIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgXHRhZGQ6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHQvLyBub24tZGVzdHJ1Y3RpdmUsIHJldHVybnMgYSBuZXcgcG9pbnRcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHRvUG9pbnQocG9pbnQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FkZDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdC8vIGRlc3RydWN0aXZlLCB1c2VkIGRpcmVjdGx5IGZvciBwZXJmb3JtYW5jZSBpbiBzaXR1YXRpb25zIHdoZXJlIGl0J3Mgc2FmZSB0byBtb2RpZnkgZXhpc3RpbmcgcG9pbnRcclxuICBcdFx0dGhpcy54ICs9IHBvaW50Lng7XHJcbiAgXHRcdHRoaXMueSArPSBwb2ludC55O1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzdWJ0cmFjdChvdGhlclBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2Ygc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIHBvaW50IGZyb20gdGhlIGN1cnJlbnQuXHJcbiAgXHRzdWJ0cmFjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KHRvUG9pbnQocG9pbnQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3N1YnRyYWN0OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dGhpcy54IC09IHBvaW50Lng7XHJcbiAgXHRcdHRoaXMueSAtPSBwb2ludC55O1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXZpZGVCeShudW06IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgZGl2aXNpb24gb2YgdGhlIGN1cnJlbnQgcG9pbnQgYnkgdGhlIGdpdmVuIG51bWJlci5cclxuICBcdGRpdmlkZUJ5OiBmdW5jdGlvbiAobnVtKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KG51bSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9kaXZpZGVCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHR0aGlzLnggLz0gbnVtO1xyXG4gIFx0XHR0aGlzLnkgLz0gbnVtO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBtdWx0aXBseUJ5KG51bTogTnVtYmVyKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgY3VycmVudCBwb2ludCBieSB0aGUgZ2l2ZW4gbnVtYmVyLlxyXG4gIFx0bXVsdGlwbHlCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KG51bSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tdWx0aXBseUJ5OiBmdW5jdGlvbiAobnVtKSB7XHJcbiAgXHRcdHRoaXMueCAqPSBudW07XHJcbiAgXHRcdHRoaXMueSAqPSBudW07XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNjYWxlQnkoc2NhbGU6IFBvaW50KTogUG9pbnRcclxuICBcdC8vIE11bHRpcGx5IGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludCBieSBlYWNoIGNvb3JkaW5hdGUgb2ZcclxuICBcdC8vIGBzY2FsZWAuIEluIGxpbmVhciBhbGdlYnJhIHRlcm1zLCBtdWx0aXBseSB0aGUgcG9pbnQgYnkgdGhlXHJcbiAgXHQvLyBbc2NhbGluZyBtYXRyaXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjYWxpbmdfJTI4Z2VvbWV0cnklMjkjTWF0cml4X3JlcHJlc2VudGF0aW9uKVxyXG4gIFx0Ly8gZGVmaW5lZCBieSBgc2NhbGVgLlxyXG4gIFx0c2NhbGVCeTogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQodGhpcy54ICogcG9pbnQueCwgdGhpcy55ICogcG9pbnQueSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW5zY2FsZUJ5KHNjYWxlOiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBJbnZlcnNlIG9mIGBzY2FsZUJ5YC4gRGl2aWRlIGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludCBieVxyXG4gIFx0Ly8gZWFjaCBjb29yZGluYXRlIG9mIGBzY2FsZWAuXHJcbiAgXHR1bnNjYWxlQnk6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHRoaXMueCAvIHBvaW50LngsIHRoaXMueSAvIHBvaW50LnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJvdW5kKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIHJvdW5kZWQgY29vcmRpbmF0ZXMuXHJcbiAgXHRyb3VuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcm91bmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy54ID0gTWF0aC5yb3VuZCh0aGlzLngpO1xyXG4gIFx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGZsb29yKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIGZsb29yZWQgY29vcmRpbmF0ZXMgKHJvdW5kZWQgZG93bikuXHJcbiAgXHRmbG9vcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZmxvb3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy54ID0gTWF0aC5mbG9vcih0aGlzLngpO1xyXG4gIFx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNlaWwoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHBvaW50IHdpdGggY2VpbGVkIGNvb3JkaW5hdGVzIChyb3VuZGVkIHVwKS5cclxuICBcdGNlaWw6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2VpbDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLnggPSBNYXRoLmNlaWwodGhpcy54KTtcclxuICBcdFx0dGhpcy55ID0gTWF0aC5jZWlsKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHRydW5jKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIHRydW5jYXRlZCBjb29yZGluYXRlcyAocm91bmRlZCB0b3dhcmRzIHplcm8pLlxyXG4gIFx0dHJ1bmM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RydW5jOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMueCA9IHRydW5jKHRoaXMueCk7XHJcbiAgXHRcdHRoaXMueSA9IHRydW5jKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGRpc3RhbmNlVG8ob3RoZXJQb2ludDogUG9pbnQpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGNhcnRlc2lhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgZ2l2ZW4gcG9pbnRzLlxyXG4gIFx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHR2YXIgeCA9IHBvaW50LnggLSB0aGlzLngsXHJcbiAgXHRcdCAgICB5ID0gcG9pbnQueSAtIHRoaXMueTtcclxuXHJcbiAgXHRcdHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyUG9pbnQ6IFBvaW50KTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIHBvaW50IGhhcyB0aGUgc2FtZSBjb29yZGluYXRlcy5cclxuICBcdGVxdWFsczogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gcG9pbnQueCA9PT0gdGhpcy54ICYmXHJcbiAgXHRcdCAgICAgICBwb2ludC55ID09PSB0aGlzLnk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJQb2ludDogUG9pbnQpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiBib3RoIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBwb2ludCBhcmUgbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGN1cnJlbnQgcG9pbnQgY29vcmRpbmF0ZXMgKGluIGFic29sdXRlIHZhbHVlcykuXHJcbiAgXHRjb250YWluczogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gTWF0aC5hYnMocG9pbnQueCkgPD0gTWF0aC5hYnModGhpcy54KSAmJlxyXG4gIFx0XHQgICAgICAgTWF0aC5hYnMocG9pbnQueSkgPD0gTWF0aC5hYnModGhpcy55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0b1N0cmluZygpOiBTdHJpbmdcclxuICBcdC8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXHJcbiAgXHR0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gJ1BvaW50KCcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLngpICsgJywgJyArXHJcbiAgXHRcdCAgICAgICAgZm9ybWF0TnVtKHRoaXMueSkgKyAnKSc7XHJcbiAgXHR9XHJcbiAgfTtcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5wb2ludCh4OiBOdW1iZXIsIHk6IE51bWJlciwgcm91bmQ/OiBCb29sZWFuKVxyXG4gIC8vIENyZWF0ZXMgYSBQb2ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMuIElmIG9wdGlvbmFsIGByb3VuZGAgaXMgc2V0IHRvIHRydWUsIHJvdW5kcyB0aGUgYHhgIGFuZCBgeWAgdmFsdWVzLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLnBvaW50KGNvb3JkczogTnVtYmVyW10pXHJcbiAgLy8gRXhwZWN0cyBhbiBhcnJheSBvZiB0aGUgZm9ybSBgW3gsIHldYCBpbnN0ZWFkLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLnBvaW50KGNvb3JkczogT2JqZWN0KVxyXG4gIC8vIEV4cGVjdHMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGZvcm0gYHt4OiBOdW1iZXIsIHk6IE51bWJlcn1gIGluc3RlYWQuXHJcbiAgZnVuY3Rpb24gdG9Qb2ludCh4LCB5LCByb3VuZCkge1xyXG4gIFx0aWYgKHggaW5zdGFuY2VvZiBQb2ludCkge1xyXG4gIFx0XHRyZXR1cm4geDtcclxuICBcdH1cclxuICBcdGlmIChpc0FycmF5KHgpKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoeFswXSwgeFsxXSk7XHJcbiAgXHR9XHJcbiAgXHRpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwpIHtcclxuICBcdFx0cmV0dXJuIHg7XHJcbiAgXHR9XHJcbiAgXHRpZiAodHlwZW9mIHggPT09ICdvYmplY3QnICYmICd4JyBpbiB4ICYmICd5JyBpbiB4KSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoeC54LCB4LnkpO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBQb2ludCh4LCB5LCByb3VuZCk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIEJvdW5kc1xyXG4gICAqIEBha2EgTC5Cb3VuZHNcclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYSByZWN0YW5ndWxhciBhcmVhIGluIHBpeGVsIGNvb3JkaW5hdGVzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIHAxID0gTC5wb2ludCgxMCwgMTApLFxyXG4gICAqIHAyID0gTC5wb2ludCg0MCwgNjApLFxyXG4gICAqIGJvdW5kcyA9IEwuYm91bmRzKHAxLCBwMik7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBBbGwgTGVhZmxldCBtZXRob2RzIHRoYXQgYWNjZXB0IGBCb3VuZHNgIG9iamVjdHMgYWxzbyBhY2NlcHQgdGhlbSBpbiBhIHNpbXBsZSBBcnJheSBmb3JtICh1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlKSwgc28gdGhlIGJvdW5kcyBleGFtcGxlIGFib3ZlIGNhbiBiZSBwYXNzZWQgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBvdGhlckJvdW5kcy5pbnRlcnNlY3RzKFtbMTAsIDEwXSwgWzQwLCA2MF1dKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgQm91bmRzYCBkb2VzIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIHdoaWNoIG1lYW5zIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSBpdCwgYW5kIG5ldyBtZXRob2RzXHJcbiAgICogY2FuJ3QgYmUgYWRkZWQgdG8gaXQgd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBCb3VuZHMoYSwgYikge1xyXG4gIFx0aWYgKCFhKSB7IHJldHVybjsgfVxyXG5cclxuICBcdHZhciBwb2ludHMgPSBiID8gW2EsIGJdIDogYTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHRoaXMuZXh0ZW5kKHBvaW50c1tpXSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBCb3VuZHMucHJvdG90eXBlID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCBleHRlbmQocG9pbnQ6IFBvaW50KTogdGhpc1xyXG4gIFx0Ly8gRXh0ZW5kcyB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBvaW50LlxyXG4gIFx0ZXh0ZW5kOiBmdW5jdGlvbiAocG9pbnQpIHsgLy8gKFBvaW50KVxyXG4gIFx0XHRwb2ludCA9IHRvUG9pbnQocG9pbnQpO1xyXG5cclxuICBcdFx0Ly8gQHByb3BlcnR5IG1pbjogUG9pbnRcclxuICBcdFx0Ly8gVGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gIFx0XHQvLyBAcHJvcGVydHkgbWF4OiBQb2ludFxyXG4gIFx0XHQvLyBUaGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gIFx0XHRpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xyXG4gIFx0XHRcdHRoaXMubWluID0gcG9pbnQuY2xvbmUoKTtcclxuICBcdFx0XHR0aGlzLm1heCA9IHBvaW50LmNsb25lKCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0dGhpcy5taW4ueCA9IE1hdGgubWluKHBvaW50LngsIHRoaXMubWluLngpO1xyXG4gIFx0XHRcdHRoaXMubWF4LnggPSBNYXRoLm1heChwb2ludC54LCB0aGlzLm1heC54KTtcclxuICBcdFx0XHR0aGlzLm1pbi55ID0gTWF0aC5taW4ocG9pbnQueSwgdGhpcy5taW4ueSk7XHJcbiAgXHRcdFx0dGhpcy5tYXgueSA9IE1hdGgubWF4KHBvaW50LnksIHRoaXMubWF4LnkpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENlbnRlcihyb3VuZD86IEJvb2xlYW4pOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uIChyb3VuZCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KFxyXG4gIFx0XHQgICAgICAgICh0aGlzLm1pbi54ICsgdGhpcy5tYXgueCkgLyAyLFxyXG4gIFx0XHQgICAgICAgICh0aGlzLm1pbi55ICsgdGhpcy5tYXgueSkgLyAyLCByb3VuZCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm90dG9tTGVmdCgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgYm90dG9tLWxlZnQgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldEJvdHRvbUxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludCh0aGlzLm1pbi54LCB0aGlzLm1heC55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRUb3BSaWdodCgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgdG9wLXJpZ2h0IHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRUb3BSaWdodDogZnVuY3Rpb24gKCkgeyAvLyAtPiBQb2ludFxyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHRoaXMubWF4LngsIHRoaXMubWluLnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFRvcExlZnQoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHRvcC1sZWZ0IHBvaW50IG9mIHRoZSBib3VuZHMgKGkuZS4gW2B0aGlzLm1pbmBdKCNib3VuZHMtbWluKSkuXHJcbiAgXHRnZXRUb3BMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm1pbjsgLy8gbGVmdCwgdG9wXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm90dG9tUmlnaHQoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGJvdHRvbS1yaWdodCBwb2ludCBvZiB0aGUgYm91bmRzIChpLmUuIFtgdGhpcy5tYXhgXSgjYm91bmRzLW1heCkpLlxyXG4gIFx0Z2V0Qm90dG9tUmlnaHQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMubWF4OyAvLyByaWdodCwgYm90dG9tXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U2l6ZSgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAgXHRnZXRTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJCb3VuZHM6IEJvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIG9uZS5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBjb250YWlucyhwb2ludDogUG9pbnQpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBnaXZlbiBwb2ludC5cclxuICBcdGNvbnRhaW5zOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdHZhciBtaW4sIG1heDtcclxuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb2JqWzBdID09PSAnbnVtYmVyJyB8fCBvYmogaW5zdGFuY2VvZiBQb2ludCkge1xyXG4gIFx0XHRcdG9iaiA9IHRvUG9pbnQob2JqKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmogPSB0b0JvdW5kcyhvYmopO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAob2JqIGluc3RhbmNlb2YgQm91bmRzKSB7XHJcbiAgXHRcdFx0bWluID0gb2JqLm1pbjtcclxuICBcdFx0XHRtYXggPSBvYmoubWF4O1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG1pbiA9IG1heCA9IG9iajtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIChtaW4ueCA+PSB0aGlzLm1pbi54KSAmJlxyXG4gIFx0XHQgICAgICAgKG1heC54IDw9IHRoaXMubWF4LngpICYmXHJcbiAgXHRcdCAgICAgICAobWluLnkgPj0gdGhpcy5taW4ueSkgJiZcclxuICBcdFx0ICAgICAgIChtYXgueSA8PSB0aGlzLm1heC55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBpbnRlcnNlY3RzKG90aGVyQm91bmRzOiBCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGludGVyc2VjdHMgdGhlIGdpdmVuIGJvdW5kcy4gVHdvIGJvdW5kc1xyXG4gIFx0Ly8gaW50ZXJzZWN0IGlmIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgcG9pbnQgaW4gY29tbW9uLlxyXG4gIFx0aW50ZXJzZWN0czogZnVuY3Rpb24gKGJvdW5kcykgeyAvLyAoQm91bmRzKSAtPiBCb29sZWFuXHJcbiAgXHRcdGJvdW5kcyA9IHRvQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHR2YXIgbWluID0gdGhpcy5taW4sXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLm1heCxcclxuICBcdFx0ICAgIG1pbjIgPSBib3VuZHMubWluLFxyXG4gIFx0XHQgICAgbWF4MiA9IGJvdW5kcy5tYXgsXHJcbiAgXHRcdCAgICB4SW50ZXJzZWN0cyA9IChtYXgyLnggPj0gbWluLngpICYmIChtaW4yLnggPD0gbWF4LngpLFxyXG4gIFx0XHQgICAgeUludGVyc2VjdHMgPSAobWF4Mi55ID49IG1pbi55KSAmJiAobWluMi55IDw9IG1heC55KTtcclxuXHJcbiAgXHRcdHJldHVybiB4SW50ZXJzZWN0cyAmJiB5SW50ZXJzZWN0cztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBvdmVybGFwcyhvdGhlckJvdW5kczogQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBvdmVybGFwcyB0aGUgZ2l2ZW4gYm91bmRzLiBUd28gYm91bmRzXHJcbiAgXHQvLyBvdmVybGFwIGlmIHRoZWlyIGludGVyc2VjdGlvbiBpcyBhbiBhcmVhLlxyXG4gIFx0b3ZlcmxhcHM6IGZ1bmN0aW9uIChib3VuZHMpIHsgLy8gKEJvdW5kcykgLT4gQm9vbGVhblxyXG4gIFx0XHRib3VuZHMgPSB0b0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIG1pbiA9IHRoaXMubWluLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5tYXgsXHJcbiAgXHRcdCAgICBtaW4yID0gYm91bmRzLm1pbixcclxuICBcdFx0ICAgIG1heDIgPSBib3VuZHMubWF4LFxyXG4gIFx0XHQgICAgeE92ZXJsYXBzID0gKG1heDIueCA+IG1pbi54KSAmJiAobWluMi54IDwgbWF4LngpLFxyXG4gIFx0XHQgICAgeU92ZXJsYXBzID0gKG1heDIueSA+IG1pbi55KSAmJiAobWluMi55IDwgbWF4LnkpO1xyXG5cclxuICBcdFx0cmV0dXJuIHhPdmVybGFwcyAmJiB5T3ZlcmxhcHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdGlzVmFsaWQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICEhKHRoaXMubWluICYmIHRoaXMubWF4KTtcclxuICBcdH1cclxuICB9O1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5ib3VuZHMoY29ybmVyMTogUG9pbnQsIGNvcm5lcjI6IFBvaW50KVxyXG4gIC8vIENyZWF0ZXMgYSBCb3VuZHMgb2JqZWN0IGZyb20gdHdvIGNvcm5lcnMgY29vcmRpbmF0ZSBwYWlycy5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLmJvdW5kcyhwb2ludHM6IFBvaW50W10pXHJcbiAgLy8gQ3JlYXRlcyBhIEJvdW5kcyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgb2YgcG9pbnRzLlxyXG4gIGZ1bmN0aW9uIHRvQm91bmRzKGEsIGIpIHtcclxuICBcdGlmICghYSB8fCBhIGluc3RhbmNlb2YgQm91bmRzKSB7XHJcbiAgXHRcdHJldHVybiBhO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBCb3VuZHMoYSwgYik7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIExhdExuZ0JvdW5kc1xyXG4gICAqIEBha2EgTC5MYXRMbmdCb3VuZHNcclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYSByZWN0YW5ndWxhciBnZW9ncmFwaGljYWwgYXJlYSBvbiBhIG1hcC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBjb3JuZXIxID0gTC5sYXRMbmcoNDAuNzEyLCAtNzQuMjI3KSxcclxuICAgKiBjb3JuZXIyID0gTC5sYXRMbmcoNDAuNzc0LCAtNzQuMTI1KSxcclxuICAgKiBib3VuZHMgPSBMLmxhdExuZ0JvdW5kcyhjb3JuZXIxLCBjb3JuZXIyKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEFsbCBMZWFmbGV0IG1ldGhvZHMgdGhhdCBhY2NlcHQgTGF0TG5nQm91bmRzIG9iamVjdHMgYWxzbyBhY2NlcHQgdGhlbSBpbiBhIHNpbXBsZSBBcnJheSBmb3JtICh1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlKSwgc28gdGhlIGJvdW5kcyBleGFtcGxlIGFib3ZlIGNhbiBiZSBwYXNzZWQgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAuZml0Qm91bmRzKFtcclxuICAgKiBcdFs0MC43MTIsIC03NC4yMjddLFxyXG4gICAqIFx0WzQwLjc3NCwgLTc0LjEyNV1cclxuICAgKiBdKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIENhdXRpb246IGlmIHRoZSBhcmVhIGNyb3NzZXMgdGhlIGFudGltZXJpZGlhbiAob2Z0ZW4gY29uZnVzZWQgd2l0aCB0aGUgSW50ZXJuYXRpb25hbCBEYXRlIExpbmUpLCB5b3UgbXVzdCBzcGVjaWZ5IGNvcm5lcnMgX291dHNpZGVfIHRoZSBbLTE4MCwgMTgwXSBkZWdyZWVzIGxvbmdpdHVkZSByYW5nZS5cclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgTGF0TG5nQm91bmRzYCBkb2VzIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIHdoaWNoIG1lYW5zIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSBpdCwgYW5kIG5ldyBtZXRob2RzXHJcbiAgICogY2FuJ3QgYmUgYWRkZWQgdG8gaXQgd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBMYXRMbmdCb3VuZHMoY29ybmVyMSwgY29ybmVyMikgeyAvLyAoTGF0TG5nLCBMYXRMbmcpIG9yIChMYXRMbmdbXSlcclxuICBcdGlmICghY29ybmVyMSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHR2YXIgbGF0bG5ncyA9IGNvcm5lcjIgPyBbY29ybmVyMSwgY29ybmVyMl0gOiBjb3JuZXIxO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsYXRsbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHRoaXMuZXh0ZW5kKGxhdGxuZ3NbaV0pO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgTGF0TG5nQm91bmRzLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGV4dGVuZChsYXRsbmc6IExhdExuZyk6IHRoaXNcclxuICBcdC8vIEV4dGVuZCB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBvaW50XHJcblxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIGV4dGVuZChvdGhlckJvdW5kczogTGF0TG5nQm91bmRzKTogdGhpc1xyXG4gIFx0Ly8gRXh0ZW5kIHRoZSBib3VuZHMgdG8gY29udGFpbiB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAgXHRleHRlbmQ6IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIsIG5lMjtcclxuXHJcbiAgXHRcdGlmIChvYmogaW5zdGFuY2VvZiBMYXRMbmcpIHtcclxuICBcdFx0XHRzdzIgPSBvYmo7XHJcbiAgXHRcdFx0bmUyID0gb2JqO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMYXRMbmdCb3VuZHMpIHtcclxuICBcdFx0XHRzdzIgPSBvYmouX3NvdXRoV2VzdDtcclxuICBcdFx0XHRuZTIgPSBvYmouX25vcnRoRWFzdDtcclxuXHJcbiAgXHRcdFx0aWYgKCFzdzIgfHwgIW5lMikgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRyZXR1cm4gb2JqID8gdGhpcy5leHRlbmQodG9MYXRMbmcob2JqKSB8fCB0b0xhdExuZ0JvdW5kcyhvYmopKSA6IHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICghc3cgJiYgIW5lKSB7XHJcbiAgXHRcdFx0dGhpcy5fc291dGhXZXN0ID0gbmV3IExhdExuZyhzdzIubGF0LCBzdzIubG5nKTtcclxuICBcdFx0XHR0aGlzLl9ub3J0aEVhc3QgPSBuZXcgTGF0TG5nKG5lMi5sYXQsIG5lMi5sbmcpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHN3LmxhdCA9IE1hdGgubWluKHN3Mi5sYXQsIHN3LmxhdCk7XHJcbiAgXHRcdFx0c3cubG5nID0gTWF0aC5taW4oc3cyLmxuZywgc3cubG5nKTtcclxuICBcdFx0XHRuZS5sYXQgPSBNYXRoLm1heChuZTIubGF0LCBuZS5sYXQpO1xyXG4gIFx0XHRcdG5lLmxuZyA9IE1hdGgubWF4KG5lMi5sbmcsIG5lLmxuZyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhZChidWZmZXJSYXRpbzogTnVtYmVyKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGJvdW5kcyBjcmVhdGVkIGJ5IGV4dGVuZGluZyBvciByZXRyYWN0aW5nIHRoZSBjdXJyZW50IGJvdW5kcyBieSBhIGdpdmVuIHJhdGlvIGluIGVhY2ggZGlyZWN0aW9uLlxyXG4gIFx0Ly8gRm9yIGV4YW1wbGUsIGEgcmF0aW8gb2YgMC41IGV4dGVuZHMgdGhlIGJvdW5kcyBieSA1MCUgaW4gZWFjaCBkaXJlY3Rpb24uXHJcbiAgXHQvLyBOZWdhdGl2ZSB2YWx1ZXMgd2lsbCByZXRyYWN0IHRoZSBib3VuZHMuXHJcbiAgXHRwYWQ6IGZ1bmN0aW9uIChidWZmZXJSYXRpbykge1xyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIGhlaWdodEJ1ZmZlciA9IE1hdGguYWJzKHN3LmxhdCAtIG5lLmxhdCkgKiBidWZmZXJSYXRpbyxcclxuICBcdFx0ICAgIHdpZHRoQnVmZmVyID0gTWF0aC5hYnMoc3cubG5nIC0gbmUubG5nKSAqIGJ1ZmZlclJhdGlvO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgbmV3IExhdExuZyhzdy5sYXQgLSBoZWlnaHRCdWZmZXIsIHN3LmxuZyAtIHdpZHRoQnVmZmVyKSxcclxuICBcdFx0ICAgICAgICBuZXcgTGF0TG5nKG5lLmxhdCArIGhlaWdodEJ1ZmZlciwgbmUubG5nICsgd2lkdGhCdWZmZXIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhcclxuICBcdFx0ICAgICAgICAodGhpcy5fc291dGhXZXN0LmxhdCArIHRoaXMuX25vcnRoRWFzdC5sYXQpIC8gMixcclxuICBcdFx0ICAgICAgICAodGhpcy5fc291dGhXZXN0LmxuZyArIHRoaXMuX25vcnRoRWFzdC5sbmcpIC8gMik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U291dGhXZXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc291dGgtd2VzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0U291dGhXZXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9zb3V0aFdlc3Q7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Tm9ydGhFYXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGgtZWFzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Tm9ydGhFYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ub3J0aEVhc3Q7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Tm9ydGhXZXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGgtd2VzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Tm9ydGhXZXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSwgdGhpcy5nZXRXZXN0KCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNvdXRoRWFzdCgpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIHNvdXRoLWVhc3QgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldFNvdXRoRWFzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyh0aGlzLmdldFNvdXRoKCksIHRoaXMuZ2V0RWFzdCgpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRXZXN0KCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgd2VzdCBsb25naXR1ZGUgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Z2V0V2VzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0LmxuZztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTb3V0aCgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIHNvdXRoIGxhdGl0dWRlIG9mIHRoZSBib3VuZHNcclxuICBcdGdldFNvdXRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEVhc3QoKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBlYXN0IGxvbmdpdHVkZSBvZiB0aGUgYm91bmRzXHJcbiAgXHRnZXRFYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ub3J0aEVhc3QubG5nO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldE5vcnRoKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGggbGF0aXR1ZGUgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Z2V0Tm9ydGg6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJCb3VuZHM6IExhdExuZ0JvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIG9uZS5cclxuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMgKGxhdGxuZzogTGF0TG5nKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgXHRjb250YWluczogZnVuY3Rpb24gKG9iaikgeyAvLyAoTGF0TG5nQm91bmRzKSBvciAoTGF0TG5nKSAtPiBCb29sZWFuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb2JqWzBdID09PSAnbnVtYmVyJyB8fCBvYmogaW5zdGFuY2VvZiBMYXRMbmcgfHwgJ2xhdCcgaW4gb2JqKSB7XHJcbiAgXHRcdFx0b2JqID0gdG9MYXRMbmcob2JqKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmogPSB0b0xhdExuZ0JvdW5kcyhvYmopO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIHN3MiwgbmUyO1xyXG5cclxuICBcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIExhdExuZ0JvdW5kcykge1xyXG4gIFx0XHRcdHN3MiA9IG9iai5nZXRTb3V0aFdlc3QoKTtcclxuICBcdFx0XHRuZTIgPSBvYmouZ2V0Tm9ydGhFYXN0KCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0c3cyID0gbmUyID0gb2JqO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gKHN3Mi5sYXQgPj0gc3cubGF0KSAmJiAobmUyLmxhdCA8PSBuZS5sYXQpICYmXHJcbiAgXHRcdCAgICAgICAoc3cyLmxuZyA+PSBzdy5sbmcpICYmIChuZTIubG5nIDw9IG5lLmxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaW50ZXJzZWN0cyhvdGhlckJvdW5kczogTGF0TG5nQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBpbnRlcnNlY3RzIHRoZSBnaXZlbiBib3VuZHMuIFR3byBib3VuZHMgaW50ZXJzZWN0IGlmIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgcG9pbnQgaW4gY29tbW9uLlxyXG4gIFx0aW50ZXJzZWN0czogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIgPSBib3VuZHMuZ2V0U291dGhXZXN0KCksXHJcbiAgXHRcdCAgICBuZTIgPSBib3VuZHMuZ2V0Tm9ydGhFYXN0KCksXHJcblxyXG4gIFx0XHQgICAgbGF0SW50ZXJzZWN0cyA9IChuZTIubGF0ID49IHN3LmxhdCkgJiYgKHN3Mi5sYXQgPD0gbmUubGF0KSxcclxuICBcdFx0ICAgIGxuZ0ludGVyc2VjdHMgPSAobmUyLmxuZyA+PSBzdy5sbmcpICYmIChzdzIubG5nIDw9IG5lLmxuZyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0SW50ZXJzZWN0cyAmJiBsbmdJbnRlcnNlY3RzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG92ZXJsYXBzKG90aGVyQm91bmRzOiBMYXRMbmdCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIG92ZXJsYXBzIHRoZSBnaXZlbiBib3VuZHMuIFR3byBib3VuZHMgb3ZlcmxhcCBpZiB0aGVpciBpbnRlcnNlY3Rpb24gaXMgYW4gYXJlYS5cclxuICBcdG92ZXJsYXBzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIHN3MiA9IGJvdW5kcy5nZXRTb3V0aFdlc3QoKSxcclxuICBcdFx0ICAgIG5lMiA9IGJvdW5kcy5nZXROb3J0aEVhc3QoKSxcclxuXHJcbiAgXHRcdCAgICBsYXRPdmVybGFwcyA9IChuZTIubGF0ID4gc3cubGF0KSAmJiAoc3cyLmxhdCA8IG5lLmxhdCksXHJcbiAgXHRcdCAgICBsbmdPdmVybGFwcyA9IChuZTIubG5nID4gc3cubG5nKSAmJiAoc3cyLmxuZyA8IG5lLmxuZyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0T3ZlcmxhcHMgJiYgbG5nT3ZlcmxhcHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9CQm94U3RyaW5nKCk6IFN0cmluZ1xyXG4gIFx0Ly8gUmV0dXJucyBhIHN0cmluZyB3aXRoIGJvdW5kaW5nIGJveCBjb29yZGluYXRlcyBpbiBhICdzb3V0aHdlc3RfbG5nLHNvdXRod2VzdF9sYXQsbm9ydGhlYXN0X2xuZyxub3J0aGVhc3RfbGF0JyBmb3JtYXQuIFVzZWZ1bCBmb3Igc2VuZGluZyByZXF1ZXN0cyB0byB3ZWIgc2VydmljZXMgdGhhdCByZXR1cm4gZ2VvIGRhdGEuXHJcbiAgXHR0b0JCb3hTdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIFt0aGlzLmdldFdlc3QoKSwgdGhpcy5nZXRTb3V0aCgpLCB0aGlzLmdldEVhc3QoKSwgdGhpcy5nZXROb3J0aCgpXS5qb2luKCcsJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyQm91bmRzOiBMYXRMbmdCb3VuZHMsIG1heE1hcmdpbj86IE51bWJlcik6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgaXMgZXF1aXZhbGVudCAod2l0aGluIGEgc21hbGwgbWFyZ2luIG9mIGVycm9yKSB0byB0aGUgZ2l2ZW4gYm91bmRzLiBUaGUgbWFyZ2luIG9mIGVycm9yIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYG1heE1hcmdpbmAgdG8gYSBzbWFsbCBudW1iZXIuXHJcbiAgXHRlcXVhbHM6IGZ1bmN0aW9uIChib3VuZHMsIG1heE1hcmdpbikge1xyXG4gIFx0XHRpZiAoIWJvdW5kcykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0LmVxdWFscyhib3VuZHMuZ2V0U291dGhXZXN0KCksIG1heE1hcmdpbikgJiZcclxuICBcdFx0ICAgICAgIHRoaXMuX25vcnRoRWFzdC5lcXVhbHMoYm91bmRzLmdldE5vcnRoRWFzdCgpLCBtYXhNYXJnaW4pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGlzVmFsaWQoKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJvdW5kcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXHJcbiAgXHRpc1ZhbGlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiAhISh0aGlzLl9zb3V0aFdlc3QgJiYgdGhpcy5fbm9ydGhFYXN0KTtcclxuICBcdH1cclxuICB9O1xyXG5cclxuICAvLyBUT0RPIEludGVybmF0aW9uYWwgZGF0ZSBsaW5lP1xyXG5cclxuICAvLyBAZmFjdG9yeSBMLmxhdExuZ0JvdW5kcyhjb3JuZXIxOiBMYXRMbmcsIGNvcm5lcjI6IExhdExuZylcclxuICAvLyBDcmVhdGVzIGEgYExhdExuZ0JvdW5kc2Agb2JqZWN0IGJ5IGRlZmluaW5nIHR3byBkaWFnb25hbGx5IG9wcG9zaXRlIGNvcm5lcnMgb2YgdGhlIHJlY3RhbmdsZS5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmdCb3VuZHMobGF0bG5nczogTGF0TG5nW10pXHJcbiAgLy8gQ3JlYXRlcyBhIGBMYXRMbmdCb3VuZHNgIG9iamVjdCBkZWZpbmVkIGJ5IHRoZSBnZW9ncmFwaGljYWwgcG9pbnRzIGl0IGNvbnRhaW5zLiBWZXJ5IHVzZWZ1bCBmb3Igem9vbWluZyB0aGUgbWFwIHRvIGZpdCBhIHBhcnRpY3VsYXIgc2V0IG9mIGxvY2F0aW9ucyB3aXRoIFtgZml0Qm91bmRzYF0oI21hcC1maXRib3VuZHMpLlxyXG4gIGZ1bmN0aW9uIHRvTGF0TG5nQm91bmRzKGEsIGIpIHtcclxuICBcdGlmIChhIGluc3RhbmNlb2YgTGF0TG5nQm91bmRzKSB7XHJcbiAgXHRcdHJldHVybiBhO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoYSwgYik7XHJcbiAgfVxuXG4gIC8qIEBjbGFzcyBMYXRMbmdcclxuICAgKiBAYWthIEwuTGF0TG5nXHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgZ2VvZ3JhcGhpY2FsIHBvaW50IHdpdGggYSBjZXJ0YWluIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogdmFyIGxhdGxuZyA9IEwubGF0TG5nKDUwLjUsIDMwLjUpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogQWxsIExlYWZsZXQgbWV0aG9kcyB0aGF0IGFjY2VwdCBMYXRMbmcgb2JqZWN0cyBhbHNvIGFjY2VwdCB0aGVtIGluIGEgc2ltcGxlIEFycmF5IGZvcm0gYW5kIHNpbXBsZSBvYmplY3QgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZXNlIGxpbmVzIGFyZSBlcXVpdmFsZW50OlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogbWFwLnBhblRvKFs1MCwgMzBdKTtcclxuICAgKiBtYXAucGFuVG8oe2xvbjogMzAsIGxhdDogNTB9KTtcclxuICAgKiBtYXAucGFuVG8oe2xhdDogNTAsIGxuZzogMzB9KTtcclxuICAgKiBtYXAucGFuVG8oTC5sYXRMbmcoNTAsIDMwKSk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBOb3RlIHRoYXQgYExhdExuZ2AgZG9lcyBub3QgaW5oZXJpdCBmcm9tIExlYWZsZXQncyBgQ2xhc3NgIG9iamVjdCxcclxuICAgKiB3aGljaCBtZWFucyBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gaXQsIGFuZCBuZXcgbWV0aG9kc1xyXG4gICAqIGNhbid0IGJlIGFkZGVkIHRvIGl0IHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cclxuICAgKi9cclxuXHJcbiAgZnVuY3Rpb24gTGF0TG5nKGxhdCwgbG5nLCBhbHQpIHtcclxuICBcdGlmIChpc05hTihsYXQpIHx8IGlzTmFOKGxuZykpIHtcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgnICsgbGF0ICsgJywgJyArIGxuZyArICcpJyk7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGxhdDogTnVtYmVyXHJcbiAgXHQvLyBMYXRpdHVkZSBpbiBkZWdyZWVzXHJcbiAgXHR0aGlzLmxhdCA9ICtsYXQ7XHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGxuZzogTnVtYmVyXHJcbiAgXHQvLyBMb25naXR1ZGUgaW4gZGVncmVlc1xyXG4gIFx0dGhpcy5sbmcgPSArbG5nO1xyXG5cclxuICBcdC8vIEBwcm9wZXJ0eSBhbHQ6IE51bWJlclxyXG4gIFx0Ly8gQWx0aXR1ZGUgaW4gbWV0ZXJzIChvcHRpb25hbClcclxuICBcdGlmIChhbHQgIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHR0aGlzLmFsdCA9ICthbHQ7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBMYXRMbmcucHJvdG90eXBlID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCBlcXVhbHMob3RoZXJMYXRMbmc6IExhdExuZywgbWF4TWFyZ2luPzogTnVtYmVyKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGBMYXRMbmdgIHBvaW50IGlzIGF0IHRoZSBzYW1lIHBvc2l0aW9uICh3aXRoaW4gYSBzbWFsbCBtYXJnaW4gb2YgZXJyb3IpLiBUaGUgbWFyZ2luIG9mIGVycm9yIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYG1heE1hcmdpbmAgdG8gYSBzbWFsbCBudW1iZXIuXHJcbiAgXHRlcXVhbHM6IGZ1bmN0aW9uIChvYmosIG1heE1hcmdpbikge1xyXG4gIFx0XHRpZiAoIW9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdG9iaiA9IHRvTGF0TG5nKG9iaik7XHJcblxyXG4gIFx0XHR2YXIgbWFyZ2luID0gTWF0aC5tYXgoXHJcbiAgXHRcdCAgICAgICAgTWF0aC5hYnModGhpcy5sYXQgLSBvYmoubGF0KSxcclxuICBcdFx0ICAgICAgICBNYXRoLmFicyh0aGlzLmxuZyAtIG9iai5sbmcpKTtcclxuXHJcbiAgXHRcdHJldHVybiBtYXJnaW4gPD0gKG1heE1hcmdpbiA9PT0gdW5kZWZpbmVkID8gMS4wRS05IDogbWF4TWFyZ2luKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0b1N0cmluZygpOiBTdHJpbmdcclxuICBcdC8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50IChmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS5cclxuICBcdHRvU3RyaW5nOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHJldHVybiAnTGF0TG5nKCcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLmxhdCwgcHJlY2lzaW9uKSArICcsICcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLmxuZywgcHJlY2lzaW9uKSArICcpJztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZVRvKG90aGVyTGF0TG5nOiBMYXRMbmcpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIChpbiBtZXRlcnMpIHRvIHRoZSBnaXZlbiBgTGF0TG5nYCBjYWxjdWxhdGVkIHVzaW5nIHRoZSBbU3BoZXJpY2FsIExhdyBvZiBDb3NpbmVzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGhlcmljYWxfbGF3X29mX2Nvc2luZXMpLlxyXG4gIFx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKG90aGVyKSB7XHJcbiAgXHRcdHJldHVybiBFYXJ0aC5kaXN0YW5jZSh0aGlzLCB0b0xhdExuZyhvdGhlcikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXAoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgbmV3IGBMYXRMbmdgIG9iamVjdCB3aXRoIHRoZSBsb25naXR1ZGUgd3JhcHBlZCBzbyBpdCdzIGFsd2F5cyBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlcy5cclxuICBcdHdyYXA6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIEVhcnRoLndyYXBMYXRMbmcodGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9Cb3VuZHMoc2l6ZUluTWV0ZXJzOiBOdW1iZXIpOiBMYXRMbmdCb3VuZHNcclxuICBcdC8vIFJldHVybnMgYSBuZXcgYExhdExuZ0JvdW5kc2Agb2JqZWN0IGluIHdoaWNoIGVhY2ggYm91bmRhcnkgaXMgYHNpemVJbk1ldGVycy8yYCBtZXRlcnMgYXBhcnQgZnJvbSB0aGUgYExhdExuZ2AuXHJcbiAgXHR0b0JvdW5kczogZnVuY3Rpb24gKHNpemVJbk1ldGVycykge1xyXG4gIFx0XHR2YXIgbGF0QWNjdXJhY3kgPSAxODAgKiBzaXplSW5NZXRlcnMgLyA0MDA3NTAxNyxcclxuICBcdFx0ICAgIGxuZ0FjY3VyYWN5ID0gbGF0QWNjdXJhY3kgLyBNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiB0aGlzLmxhdCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdG9MYXRMbmdCb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgW3RoaXMubGF0IC0gbGF0QWNjdXJhY3ksIHRoaXMubG5nIC0gbG5nQWNjdXJhY3ldLFxyXG4gIFx0XHQgICAgICAgIFt0aGlzLmxhdCArIGxhdEFjY3VyYWN5LCB0aGlzLmxuZyArIGxuZ0FjY3VyYWN5XSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHRoaXMubGF0LCB0aGlzLmxuZywgdGhpcy5hbHQpO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmcobGF0aXR1ZGU6IE51bWJlciwgbG9uZ2l0dWRlOiBOdW1iZXIsIGFsdGl0dWRlPzogTnVtYmVyKTogTGF0TG5nXHJcbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZ2VvZ3JhcGhpY2FsIHBvaW50IHdpdGggdGhlIGdpdmVuIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgKGFuZCBvcHRpb25hbGx5IGFsdGl0dWRlKS5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmcoY29vcmRzOiBBcnJheSk6IExhdExuZ1xyXG4gIC8vIEV4cGVjdHMgYW4gYXJyYXkgb2YgdGhlIGZvcm0gYFtOdW1iZXIsIE51bWJlcl1gIG9yIGBbTnVtYmVyLCBOdW1iZXIsIE51bWJlcl1gIGluc3RlYWQuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwubGF0TG5nKGNvb3JkczogT2JqZWN0KTogTGF0TG5nXHJcbiAgLy8gRXhwZWN0cyBhbiBwbGFpbiBvYmplY3Qgb2YgdGhlIGZvcm0gYHtsYXQ6IE51bWJlciwgbG5nOiBOdW1iZXJ9YCBvciBge2xhdDogTnVtYmVyLCBsbmc6IE51bWJlciwgYWx0OiBOdW1iZXJ9YCBpbnN0ZWFkLlxyXG5cclxuICBmdW5jdGlvbiB0b0xhdExuZyhhLCBiLCBjKSB7XHJcbiAgXHRpZiAoYSBpbnN0YW5jZW9mIExhdExuZykge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdGlmIChpc0FycmF5KGEpICYmIHR5cGVvZiBhWzBdICE9PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRpZiAoYS5sZW5ndGggPT09IDMpIHtcclxuICBcdFx0XHRyZXR1cm4gbmV3IExhdExuZyhhWzBdLCBhWzFdLCBhWzJdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoYS5sZW5ndGggPT09IDIpIHtcclxuICBcdFx0XHRyZXR1cm4gbmV3IExhdExuZyhhWzBdLCBhWzFdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gbnVsbDtcclxuICBcdH1cclxuICBcdGlmIChhID09PSB1bmRlZmluZWQgfHwgYSA9PT0gbnVsbCkge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgJ2xhdCcgaW4gYSkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhhLmxhdCwgJ2xuZycgaW4gYSA/IGEubG5nIDogYS5sb24sIGEuYWx0KTtcclxuICBcdH1cclxuICBcdGlmIChiID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gbmV3IExhdExuZyhhLCBiLCBjKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIENSU1xyXG4gICAqIEBjcnMgTC5DUlMuQmFzZVxyXG4gICAqIE9iamVjdCB0aGF0IGRlZmluZXMgY29vcmRpbmF0ZSByZWZlcmVuY2Ugc3lzdGVtcyBmb3IgcHJvamVjdGluZ1xyXG4gICAqIGdlb2dyYXBoaWNhbCBwb2ludHMgaW50byBwaXhlbCAoc2NyZWVuKSBjb29yZGluYXRlcyBhbmQgYmFjayAoYW5kIHRvXHJcbiAgICogY29vcmRpbmF0ZXMgaW4gb3RoZXIgdW5pdHMgZm9yIFtXTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9NYXBfU2VydmljZSkgc2VydmljZXMpLiBTZWVcclxuICAgKiBbc3BhdGlhbCByZWZlcmVuY2Ugc3lzdGVtXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nvb3JkaW5hdGVfcmVmZXJlbmNlX3N5c3RlbSkuXHJcbiAgICpcclxuICAgKiBMZWFmbGV0IGRlZmluZXMgdGhlIG1vc3QgdXN1YWwgQ1JTcyBieSBkZWZhdWx0LiBJZiB5b3Ugd2FudCB0byB1c2UgYVxyXG4gICAqIENSUyBub3QgZGVmaW5lZCBieSBkZWZhdWx0LCB0YWtlIGEgbG9vayBhdCB0aGVcclxuICAgKiBbUHJvajRMZWFmbGV0XShodHRwczovL2dpdGh1Yi5jb20va2FydGVuYS9Qcm9qNExlYWZsZXQpIHBsdWdpbi5cclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCB0aGUgQ1JTIGluc3RhbmNlcyBkbyBub3QgaW5oZXJpdCBmcm9tIExlYWZsZXQncyBgQ2xhc3NgIG9iamVjdCxcclxuICAgKiBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiBBbHNvLCBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gdGhlbSxcclxuICAgKiBhbmQgbWV0aG9kcyBjYW4ndCBiZSBhZGRlZCB0byB0aGVtIHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cclxuICAgKi9cclxuXHJcbiAgdmFyIENSUyA9IHtcclxuICBcdC8vIEBtZXRob2QgbGF0TG5nVG9Qb2ludChsYXRsbmc6IExhdExuZywgem9vbTogTnVtYmVyKTogUG9pbnRcclxuICBcdC8vIFByb2plY3RzIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyBpbnRvIHBpeGVsIGNvb3JkaW5hdGVzIGZvciBhIGdpdmVuIHpvb20uXHJcbiAgXHRsYXRMbmdUb1BvaW50OiBmdW5jdGlvbiAobGF0bG5nLCB6b29tKSB7XHJcbiAgXHRcdHZhciBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdGlvbi5wcm9qZWN0KGxhdGxuZyksXHJcbiAgXHRcdCAgICBzY2FsZSA9IHRoaXMuc2NhbGUoem9vbSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1hdGlvbi5fdHJhbnNmb3JtKHByb2plY3RlZFBvaW50LCBzY2FsZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcG9pbnRUb0xhdExuZyhwb2ludDogUG9pbnQsIHpvb206IE51bWJlcik6IExhdExuZ1xyXG4gIFx0Ly8gVGhlIGludmVyc2Ugb2YgYGxhdExuZ1RvUG9pbnRgLiBQcm9qZWN0cyBwaXhlbCBjb29yZGluYXRlcyBvbiBhIGdpdmVuXHJcbiAgXHQvLyB6b29tIGludG8gZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzLlxyXG4gIFx0cG9pbnRUb0xhdExuZzogZnVuY3Rpb24gKHBvaW50LCB6b29tKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuc2NhbGUoem9vbSksXHJcbiAgXHRcdCAgICB1bnRyYW5zZm9ybWVkUG9pbnQgPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnVudHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh1bnRyYW5zZm9ybWVkUG9pbnQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHByb2plY3QobGF0bG5nOiBMYXRMbmcpOiBQb2ludFxyXG4gIFx0Ly8gUHJvamVjdHMgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGludG8gY29vcmRpbmF0ZXMgaW4gdW5pdHMgYWNjZXB0ZWQgZm9yXHJcbiAgXHQvLyB0aGlzIENSUyAoZS5nLiBtZXRlcnMgZm9yIEVQU0c6Mzg1NywgZm9yIHBhc3NpbmcgaXQgdG8gV01TIHNlcnZpY2VzKS5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMucHJvamVjdGlvbi5wcm9qZWN0KGxhdGxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW5wcm9qZWN0KHBvaW50OiBQb2ludCk6IExhdExuZ1xyXG4gIFx0Ly8gR2l2ZW4gYSBwcm9qZWN0ZWQgY29vcmRpbmF0ZSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIExhdExuZy5cclxuICBcdC8vIFRoZSBpbnZlcnNlIG9mIGBwcm9qZWN0YC5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLnByb2plY3Rpb24udW5wcm9qZWN0KHBvaW50KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzY2FsZSh6b29tOiBOdW1iZXIpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIHNjYWxlIHVzZWQgd2hlbiB0cmFuc2Zvcm1pbmcgcHJvamVjdGVkIGNvb3JkaW5hdGVzIGludG9cclxuICBcdC8vIHBpeGVsIGNvb3JkaW5hdGVzIGZvciBhIHBhcnRpY3VsYXIgem9vbS4gRm9yIGV4YW1wbGUsIGl0IHJldHVybnNcclxuICBcdC8vIGAyNTYgKiAyXnpvb21gIGZvciBNZXJjYXRvci1iYXNlZCBDUlMuXHJcbiAgXHRzY2FsZTogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0cmV0dXJuIDI1NiAqIE1hdGgucG93KDIsIHpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHpvb20oc2NhbGU6IE51bWJlcik6IE51bWJlclxyXG4gIFx0Ly8gSW52ZXJzZSBvZiBgc2NhbGUoKWAsIHJldHVybnMgdGhlIHpvb20gbGV2ZWwgY29ycmVzcG9uZGluZyB0byBhIHNjYWxlXHJcbiAgXHQvLyBmYWN0b3Igb2YgYHNjYWxlYC5cclxuICBcdHpvb206IGZ1bmN0aW9uIChzY2FsZSkge1xyXG4gIFx0XHRyZXR1cm4gTWF0aC5sb2coc2NhbGUgLyAyNTYpIC8gTWF0aC5MTjI7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UHJvamVjdGVkQm91bmRzKHpvb206IE51bWJlcik6IEJvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcHJvamVjdGlvbidzIGJvdW5kcyBzY2FsZWQgYW5kIHRyYW5zZm9ybWVkIGZvciB0aGUgcHJvdmlkZWQgYHpvb21gLlxyXG4gIFx0Z2V0UHJvamVjdGVkQm91bmRzOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHRpZiAodGhpcy5pbmZpbml0ZSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBcdFx0dmFyIGIgPSB0aGlzLnByb2plY3Rpb24uYm91bmRzLFxyXG4gIFx0XHQgICAgcyA9IHRoaXMuc2NhbGUoem9vbSksXHJcbiAgXHRcdCAgICBtaW4gPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShiLm1pbiwgcyksXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShiLm1heCwgcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IEJvdW5kcyhtaW4sIG1heCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGlzdGFuY2UobGF0bG5nMTogTGF0TG5nLCBsYXRsbmcyOiBMYXRMbmcpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcy5cclxuXHJcbiAgXHQvLyBAcHJvcGVydHkgY29kZTogU3RyaW5nXHJcbiAgXHQvLyBTdGFuZGFyZCBjb2RlIG5hbWUgb2YgdGhlIENSUyBwYXNzZWQgaW50byBXTVMgc2VydmljZXMgKGUuZy4gYCdFUFNHOjM4NTcnYClcclxuICBcdC8vXHJcbiAgXHQvLyBAcHJvcGVydHkgd3JhcExuZzogTnVtYmVyW11cclxuICBcdC8vIEFuIGFycmF5IG9mIHR3byBudW1iZXJzIGRlZmluaW5nIHdoZXRoZXIgdGhlIGxvbmdpdHVkZSAoaG9yaXpvbnRhbCkgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gYXhpcyB3cmFwcyBhcm91bmQgYSBnaXZlbiByYW5nZSBhbmQgaG93LiBEZWZhdWx0cyB0byBgWy0xODAsIDE4MF1gIGluIG1vc3RcclxuICBcdC8vIGdlb2dyYXBoaWNhbCBDUlNzLiBJZiBgdW5kZWZpbmVkYCwgdGhlIGxvbmdpdHVkZSBheGlzIGRvZXMgbm90IHdyYXAgYXJvdW5kLlxyXG4gIFx0Ly9cclxuICBcdC8vIEBwcm9wZXJ0eSB3cmFwTGF0OiBOdW1iZXJbXVxyXG4gIFx0Ly8gTGlrZSBgd3JhcExuZ2AsIGJ1dCBmb3IgdGhlIGxhdGl0dWRlICh2ZXJ0aWNhbCkgYXhpcy5cclxuXHJcbiAgXHQvLyB3cmFwTG5nOiBbbWluLCBtYXhdLFxyXG4gIFx0Ly8gd3JhcExhdDogW21pbiwgbWF4XSxcclxuXHJcbiAgXHQvLyBAcHJvcGVydHkgaW5maW5pdGU6IEJvb2xlYW5cclxuICBcdC8vIElmIHRydWUsIHRoZSBjb29yZGluYXRlIHNwYWNlIHdpbGwgYmUgdW5ib3VuZGVkIChpbmZpbml0ZSBpbiBib3RoIGF4ZXMpXHJcbiAgXHRpbmZpbml0ZTogZmFsc2UsXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nKGxhdGxuZzogTGF0TG5nKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ2Agd2hlcmUgbGF0IGFuZCBsbmcgaGFzIGJlZW4gd3JhcHBlZCBhY2NvcmRpbmcgdG8gdGhlXHJcbiAgXHQvLyBDUlMncyBgd3JhcExhdGAgYW5kIGB3cmFwTG5nYCBwcm9wZXJ0aWVzLCBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHR3cmFwTGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBsbmcgPSB0aGlzLndyYXBMbmcgPyB3cmFwTnVtKGxhdGxuZy5sbmcsIHRoaXMud3JhcExuZywgdHJ1ZSkgOiBsYXRsbmcubG5nLFxyXG4gIFx0XHQgICAgbGF0ID0gdGhpcy53cmFwTGF0ID8gd3JhcE51bShsYXRsbmcubGF0LCB0aGlzLndyYXBMYXQsIHRydWUpIDogbGF0bG5nLmxhdCxcclxuICBcdFx0ICAgIGFsdCA9IGxhdGxuZy5hbHQ7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhsYXQsIGxuZywgYWx0KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ0JvdW5kc2Agd2l0aCB0aGUgc2FtZSBzaXplIGFzIHRoZSBnaXZlbiBvbmUsIGVuc3VyaW5nXHJcbiAgXHQvLyB0aGF0IGl0cyBjZW50ZXIgaXMgd2l0aGluIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHQvLyBPbmx5IGFjY2VwdHMgYWN0dWFsIGBMLkxhdExuZ0JvdW5kc2AgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxyXG4gIFx0d3JhcExhdExuZ0JvdW5kczogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHR2YXIgY2VudGVyID0gYm91bmRzLmdldENlbnRlcigpLFxyXG4gIFx0XHQgICAgbmV3Q2VudGVyID0gdGhpcy53cmFwTGF0TG5nKGNlbnRlciksXHJcbiAgXHRcdCAgICBsYXRTaGlmdCA9IGNlbnRlci5sYXQgLSBuZXdDZW50ZXIubGF0LFxyXG4gIFx0XHQgICAgbG5nU2hpZnQgPSBjZW50ZXIubG5nIC0gbmV3Q2VudGVyLmxuZztcclxuXHJcbiAgXHRcdGlmIChsYXRTaGlmdCA9PT0gMCAmJiBsbmdTaGlmdCA9PT0gMCkge1xyXG4gIFx0XHRcdHJldHVybiBib3VuZHM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBzdyA9IGJvdW5kcy5nZXRTb3V0aFdlc3QoKSxcclxuICBcdFx0ICAgIG5lID0gYm91bmRzLmdldE5vcnRoRWFzdCgpLFxyXG4gIFx0XHQgICAgbmV3U3cgPSBuZXcgTGF0TG5nKHN3LmxhdCAtIGxhdFNoaWZ0LCBzdy5sbmcgLSBsbmdTaGlmdCksXHJcbiAgXHRcdCAgICBuZXdOZSA9IG5ldyBMYXRMbmcobmUubGF0IC0gbGF0U2hpZnQsIG5lLmxuZyAtIGxuZ1NoaWZ0KTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nQm91bmRzKG5ld1N3LCBuZXdOZSk7XHJcbiAgXHR9XHJcbiAgfTtcblxuICAvKlxuICAgKiBAbmFtZXNwYWNlIENSU1xuICAgKiBAY3JzIEwuQ1JTLkVhcnRoXG4gICAqXG4gICAqIFNlcnZlcyBhcyB0aGUgYmFzZSBmb3IgQ1JTIHRoYXQgYXJlIGdsb2JhbCBzdWNoIHRoYXQgdGhleSBjb3ZlciB0aGUgZWFydGguXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIG90aGVyIENSUyBhbmQgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHksXG4gICAqIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSBgY29kZWAsIGBwcm9qZWN0aW9uYCBvciBgdHJhbnNmb3JtYXRpb25gLiBgZGlzdGFuY2UoKWAgcmV0dXJuc1xuICAgKiBtZXRlcnMuXG4gICAqL1xuXG4gIHZhciBFYXJ0aCA9IGV4dGVuZCh7fSwgQ1JTLCB7XG4gIFx0d3JhcExuZzogWy0xODAsIDE4MF0sXG5cbiAgXHQvLyBNZWFuIEVhcnRoIFJhZGl1cywgYXMgcmVjb21tZW5kZWQgZm9yIHVzZSBieVxuICBcdC8vIHRoZSBJbnRlcm5hdGlvbmFsIFVuaW9uIG9mIEdlb2Rlc3kgYW5kIEdlb3BoeXNpY3MsXG4gIFx0Ly8gc2VlIGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9IYXZlcnNpbmVfZm9ybXVsYVxuICBcdFI6IDYzNzEwMDAsXG5cbiAgXHQvLyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBnZW9ncmFwaGljYWwgcG9pbnRzIHVzaW5nIHNwaGVyaWNhbCBsYXcgb2YgY29zaW5lcyBhcHByb3hpbWF0aW9uXG4gIFx0ZGlzdGFuY2U6IGZ1bmN0aW9uIChsYXRsbmcxLCBsYXRsbmcyKSB7XG4gIFx0XHR2YXIgcmFkID0gTWF0aC5QSSAvIDE4MCxcbiAgXHRcdCAgICBsYXQxID0gbGF0bG5nMS5sYXQgKiByYWQsXG4gIFx0XHQgICAgbGF0MiA9IGxhdGxuZzIubGF0ICogcmFkLFxuICBcdFx0ICAgIHNpbkRMYXQgPSBNYXRoLnNpbigobGF0bG5nMi5sYXQgLSBsYXRsbmcxLmxhdCkgKiByYWQgLyAyKSxcbiAgXHRcdCAgICBzaW5ETG9uID0gTWF0aC5zaW4oKGxhdGxuZzIubG5nIC0gbGF0bG5nMS5sbmcpICogcmFkIC8gMiksXG4gIFx0XHQgICAgYSA9IHNpbkRMYXQgKiBzaW5ETGF0ICsgTWF0aC5jb3MobGF0MSkgKiBNYXRoLmNvcyhsYXQyKSAqIHNpbkRMb24gKiBzaW5ETG9uLFxuICBcdFx0ICAgIGMgPSAyICogTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksIE1hdGguc3FydCgxIC0gYSkpO1xuICBcdFx0cmV0dXJuIHRoaXMuUiAqIGM7XG4gIFx0fVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUHJvamVjdGlvblxyXG4gICAqIEBwcm9qZWN0aW9uIEwuUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvclxyXG4gICAqXHJcbiAgICogU3BoZXJpY2FsIE1lcmNhdG9yIHByb2plY3Rpb24g4oCUIHRoZSBtb3N0IGNvbW1vbiBwcm9qZWN0aW9uIGZvciBvbmxpbmUgbWFwcyxcclxuICAgKiB1c2VkIGJ5IGFsbW9zdCBhbGwgZnJlZSBhbmQgY29tbWVyY2lhbCB0aWxlIHByb3ZpZGVycy4gQXNzdW1lcyB0aGF0IEVhcnRoIGlzXHJcbiAgICogYSBzcGhlcmUuIFVzZWQgYnkgdGhlIGBFUFNHOjM4NTdgIENSUy5cclxuICAgKi9cclxuXHJcbiAgdmFyIGVhcnRoUmFkaXVzID0gNjM3ODEzNztcclxuXHJcbiAgdmFyIFNwaGVyaWNhbE1lcmNhdG9yID0ge1xyXG5cclxuICBcdFI6IGVhcnRoUmFkaXVzLFxyXG4gIFx0TUFYX0xBVElUVURFOiA4NS4wNTExMjg3Nzk4LFxyXG5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5NQVhfTEFUSVRVREUsXHJcbiAgXHRcdCAgICBsYXQgPSBNYXRoLm1heChNYXRoLm1pbihtYXgsIGxhdGxuZy5sYXQpLCAtbWF4KSxcclxuICBcdFx0ICAgIHNpbiA9IE1hdGguc2luKGxhdCAqIGQpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChcclxuICBcdFx0XHR0aGlzLlIgKiBsYXRsbmcubG5nICogZCxcclxuICBcdFx0XHR0aGlzLlIgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gMik7XHJcbiAgXHR9LFxyXG5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBkID0gMTgwIC8gTWF0aC5QSTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKFxyXG4gIFx0XHRcdCgyICogTWF0aC5hdGFuKE1hdGguZXhwKHBvaW50LnkgLyB0aGlzLlIpKSAtIChNYXRoLlBJIC8gMikpICogZCxcclxuICBcdFx0XHRwb2ludC54ICogZCAvIHRoaXMuUik7XHJcbiAgXHR9LFxyXG5cclxuICBcdGJvdW5kczogKGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGQgPSBlYXJ0aFJhZGl1cyAqIE1hdGguUEk7XHJcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKFstZCwgLWRdLCBbZCwgZF0pO1xyXG4gIFx0fSkoKVxyXG4gIH07XG5cbiAgLypcclxuICAgKiBAY2xhc3MgVHJhbnNmb3JtYXRpb25cclxuICAgKiBAYWthIEwuVHJhbnNmb3JtYXRpb25cclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYW4gYWZmaW5lIHRyYW5zZm9ybWF0aW9uOiBhIHNldCBvZiBjb2VmZmljaWVudHMgYGFgLCBgYmAsIGBjYCwgYGRgXHJcbiAgICogZm9yIHRyYW5zZm9ybWluZyBhIHBvaW50IG9mIGEgZm9ybSBgKHgsIHkpYCBpbnRvIGAoYSp4ICsgYiwgYyp5ICsgZClgIGFuZCBkb2luZ1xyXG4gICAqIHRoZSByZXZlcnNlLiBVc2VkIGJ5IExlYWZsZXQgaW4gaXRzIHByb2plY3Rpb25zIGNvZGUuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgdHJhbnNmb3JtYXRpb24gPSBMLnRyYW5zZm9ybWF0aW9uKDIsIDUsIC0xLCAxMCksXHJcbiAgICogXHRwID0gTC5wb2ludCgxLCAyKSxcclxuICAgKiBcdHAyID0gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHApLCAvLyAgTC5wb2ludCg3LCA4KVxyXG4gICAqIFx0cDMgPSB0cmFuc2Zvcm1hdGlvbi51bnRyYW5zZm9ybShwMik7IC8vICBMLnBvaW50KDEsIDIpXHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG5cclxuICAvLyBmYWN0b3J5IG5ldyBMLlRyYW5zZm9ybWF0aW9uKGE6IE51bWJlciwgYjogTnVtYmVyLCBjOiBOdW1iZXIsIGQ6IE51bWJlcilcclxuICAvLyBDcmVhdGVzIGEgYFRyYW5zZm9ybWF0aW9uYCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29lZmZpY2llbnRzLlxyXG4gIGZ1bmN0aW9uIFRyYW5zZm9ybWF0aW9uKGEsIGIsIGMsIGQpIHtcclxuICBcdGlmIChpc0FycmF5KGEpKSB7XHJcbiAgXHRcdC8vIHVzZSBhcnJheSBwcm9wZXJ0aWVzXHJcbiAgXHRcdHRoaXMuX2EgPSBhWzBdO1xyXG4gIFx0XHR0aGlzLl9iID0gYVsxXTtcclxuICBcdFx0dGhpcy5fYyA9IGFbMl07XHJcbiAgXHRcdHRoaXMuX2QgPSBhWzNdO1xyXG4gIFx0XHRyZXR1cm47XHJcbiAgXHR9XHJcbiAgXHR0aGlzLl9hID0gYTtcclxuICBcdHRoaXMuX2IgPSBiO1xyXG4gIFx0dGhpcy5fYyA9IGM7XHJcbiAgXHR0aGlzLl9kID0gZDtcclxuICB9XHJcblxyXG4gIFRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZSA9IHtcclxuICBcdC8vIEBtZXRob2QgdHJhbnNmb3JtKHBvaW50OiBQb2ludCwgc2NhbGU/OiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyBhIHRyYW5zZm9ybWVkIHBvaW50LCBvcHRpb25hbGx5IG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIHNjYWxlLlxyXG4gIFx0Ly8gT25seSBhY2NlcHRzIGFjdHVhbCBgTC5Qb2ludGAgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxyXG4gIFx0dHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7IC8vIChQb2ludCwgTnVtYmVyKSAtPiBQb2ludFxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHBvaW50LmNsb25lKCksIHNjYWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gZGVzdHJ1Y3RpdmUgdHJhbnNmb3JtIChmYXN0ZXIpXHJcbiAgXHRfdHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7XHJcbiAgXHRcdHNjYWxlID0gc2NhbGUgfHwgMTtcclxuICBcdFx0cG9pbnQueCA9IHNjYWxlICogKHRoaXMuX2EgKiBwb2ludC54ICsgdGhpcy5fYik7XHJcbiAgXHRcdHBvaW50LnkgPSBzY2FsZSAqICh0aGlzLl9jICogcG9pbnQueSArIHRoaXMuX2QpO1xyXG4gIFx0XHRyZXR1cm4gcG9pbnQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW50cmFuc2Zvcm0ocG9pbnQ6IFBvaW50LCBzY2FsZT86IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXZlcnNlIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBnaXZlbiBwb2ludCwgb3B0aW9uYWxseSBkaXZpZGVkXHJcbiAgXHQvLyBieSB0aGUgZ2l2ZW4gc2NhbGUuIE9ubHkgYWNjZXB0cyBhY3R1YWwgYEwuUG9pbnRgIGluc3RhbmNlcywgbm90IGFycmF5cy5cclxuICBcdHVudHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7XHJcbiAgXHRcdHNjYWxlID0gc2NhbGUgfHwgMTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChcclxuICBcdFx0ICAgICAgICAocG9pbnQueCAvIHNjYWxlIC0gdGhpcy5fYikgLyB0aGlzLl9hLFxyXG4gIFx0XHQgICAgICAgIChwb2ludC55IC8gc2NhbGUgLSB0aGlzLl9kKSAvIHRoaXMuX2MpO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG4gIC8vIGZhY3RvcnkgTC50cmFuc2Zvcm1hdGlvbihhOiBOdW1iZXIsIGI6IE51bWJlciwgYzogTnVtYmVyLCBkOiBOdW1iZXIpXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwudHJhbnNmb3JtYXRpb24oYTogTnVtYmVyLCBiOiBOdW1iZXIsIGM6IE51bWJlciwgZDogTnVtYmVyKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIFRyYW5zZm9ybWF0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBjb2VmZmljaWVudHMuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwudHJhbnNmb3JtYXRpb24oY29lZmZpY2llbnRzOiBBcnJheSk6IFRyYW5zZm9ybWF0aW9uXHJcbiAgLy8gRXhwZWN0cyBhbiBjb2VmZmljaWVudHMgYXJyYXkgb2YgdGhlIGZvcm1cclxuICAvLyBgW2E6IE51bWJlciwgYjogTnVtYmVyLCBjOiBOdW1iZXIsIGQ6IE51bWJlcl1gLlxyXG5cclxuICBmdW5jdGlvbiB0b1RyYW5zZm9ybWF0aW9uKGEsIGIsIGMsIGQpIHtcclxuICBcdHJldHVybiBuZXcgVHJhbnNmb3JtYXRpb24oYSwgYiwgYywgZCk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBDUlNcclxuICAgKiBAY3JzIEwuQ1JTLkVQU0czODU3XHJcbiAgICpcclxuICAgKiBUaGUgbW9zdCBjb21tb24gQ1JTIGZvciBvbmxpbmUgbWFwcywgdXNlZCBieSBhbG1vc3QgYWxsIGZyZWUgYW5kIGNvbW1lcmNpYWxcclxuICAgKiB0aWxlIHByb3ZpZGVycy4gVXNlcyBTcGhlcmljYWwgTWVyY2F0b3IgcHJvamVjdGlvbi4gU2V0IGluIGJ5IGRlZmF1bHQgaW5cclxuICAgKiBNYXAncyBgY3JzYCBvcHRpb24uXHJcbiAgICovXHJcblxyXG4gIHZhciBFUFNHMzg1NyA9IGV4dGVuZCh7fSwgRWFydGgsIHtcclxuICBcdGNvZGU6ICdFUFNHOjM4NTcnLFxyXG4gIFx0cHJvamVjdGlvbjogU3BoZXJpY2FsTWVyY2F0b3IsXHJcblxyXG4gIFx0dHJhbnNmb3JtYXRpb246IChmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IDAuNSAvIChNYXRoLlBJICogU3BoZXJpY2FsTWVyY2F0b3IuUik7XHJcbiAgXHRcdHJldHVybiB0b1RyYW5zZm9ybWF0aW9uKHNjYWxlLCAwLjUsIC1zY2FsZSwgMC41KTtcclxuICBcdH0oKSlcclxuICB9KTtcclxuXHJcbiAgdmFyIEVQU0c5MDA5MTMgPSBleHRlbmQoe30sIEVQU0czODU3LCB7XHJcbiAgXHRjb2RlOiAnRVBTRzo5MDA5MTMnXHJcbiAgfSk7XG5cbiAgLy8gQG5hbWVzcGFjZSBTVkc7IEBzZWN0aW9uXG4gIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRob3V0IGluc3RhbnRpYXRpbmcgTC5TVkc6XG5cbiAgLy8gQGZ1bmN0aW9uIGNyZWF0ZShuYW1lOiBTdHJpbmcpOiBTVkdFbGVtZW50XG4gIC8vIFJldHVybnMgYSBpbnN0YW5jZSBvZiBbU1ZHRWxlbWVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1NWR0VsZW1lbnQpLFxuICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbGFzcyBuYW1lIHBhc3NlZC4gRm9yIGV4YW1wbGUsIHVzaW5nICdsaW5lJyB3aWxsIHJldHVyblxuICAvLyBhbiBpbnN0YW5jZSBvZiBbU1ZHTGluZUVsZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9TVkdMaW5lRWxlbWVudCkuXG4gIGZ1bmN0aW9uIHN2Z0NyZWF0ZShuYW1lKSB7XG4gIFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBuYW1lKTtcbiAgfVxuXG4gIC8vIEBmdW5jdGlvbiBwb2ludHNUb1BhdGgocmluZ3M6IFBvaW50W10sIGNsb3NlZDogQm9vbGVhbik6IFN0cmluZ1xuICAvLyBHZW5lcmF0ZXMgYSBTVkcgcGF0aCBzdHJpbmcgZm9yIG11bHRpcGxlIHJpbmdzLCB3aXRoIGVhY2ggcmluZyB0dXJuaW5nXG4gIC8vIGludG8gXCJNLi5MLi5MLi5cIiBpbnN0cnVjdGlvbnNcbiAgZnVuY3Rpb24gcG9pbnRzVG9QYXRoKHJpbmdzLCBjbG9zZWQpIHtcbiAgXHR2YXIgc3RyID0gJycsXG4gIFx0aSwgaiwgbGVuLCBsZW4yLCBwb2ludHMsIHA7XG5cbiAgXHRmb3IgKGkgPSAwLCBsZW4gPSByaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0cG9pbnRzID0gcmluZ3NbaV07XG5cbiAgXHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwb2ludHMubGVuZ3RoOyBqIDwgbGVuMjsgaisrKSB7XG4gIFx0XHRcdHAgPSBwb2ludHNbal07XG4gIFx0XHRcdHN0ciArPSAoaiA/ICdMJyA6ICdNJykgKyBwLnggKyAnICcgKyBwLnk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIGNsb3NlcyB0aGUgcmluZyBmb3IgcG9seWdvbnM7IFwieFwiIGlzIFZNTCBzeW50YXhcbiAgXHRcdHN0ciArPSBjbG9zZWQgPyAoc3ZnID8gJ3onIDogJ3gnKSA6ICcnO1xuICBcdH1cblxuICBcdC8vIFNWRyBjb21wbGFpbnMgYWJvdXQgZW1wdHkgcGF0aCBzdHJpbmdzXG4gIFx0cmV0dXJuIHN0ciB8fCAnTTAgMCc7XG4gIH1cblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgQnJvd3NlclxyXG4gICAqIEBha2EgTC5Ccm93c2VyXHJcbiAgICpcclxuICAgKiBBIG5hbWVzcGFjZSB3aXRoIHN0YXRpYyBwcm9wZXJ0aWVzIGZvciBicm93c2VyL2ZlYXR1cmUgZGV0ZWN0aW9uIHVzZWQgYnkgTGVhZmxldCBpbnRlcm5hbGx5LlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogaWYgKEwuQnJvd3Nlci5pZWx0OSkge1xyXG4gICAqICAgYWxlcnQoJ1VwZ3JhZGUgeW91ciBicm93c2VyLCBkdWRlIScpO1xyXG4gICAqIH1cclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIHN0eWxlJDEgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBpZTogQm9vbGVhbjsgYHRydWVgIGZvciBhbGwgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbnMgKG5vdCBFZGdlKS5cclxuICB2YXIgaWUgPSAnQWN0aXZlWE9iamVjdCcgaW4gd2luZG93O1xyXG5cclxuICAvLyBAcHJvcGVydHkgaWVsdDk6IEJvb2xlYW47IGB0cnVlYCBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbnMgbGVzcyB0aGFuIDkuXHJcbiAgdmFyIGllbHQ5ID0gaWUgJiYgIWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBlZGdlOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIHRoZSBFZGdlIHdlYiBicm93c2VyLlxyXG4gIHZhciBlZGdlID0gJ21zTGF1bmNoVXJpJyBpbiBuYXZpZ2F0b3IgJiYgISgnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB3ZWJraXQ6IEJvb2xlYW47XHJcbiAgLy8gYHRydWVgIGZvciB3ZWJraXQtYmFzZWQgYnJvd3NlcnMgbGlrZSBDaHJvbWUgYW5kIFNhZmFyaSAoaW5jbHVkaW5nIG1vYmlsZSB2ZXJzaW9ucykuXHJcbiAgdmFyIHdlYmtpdCA9IHVzZXJBZ2VudENvbnRhaW5zKCd3ZWJraXQnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGFuZHJvaWQ6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGFueSBicm93c2VyIHJ1bm5pbmcgb24gYW4gQW5kcm9pZCBwbGF0Zm9ybS5cclxuICB2YXIgYW5kcm9pZCA9IHVzZXJBZ2VudENvbnRhaW5zKCdhbmRyb2lkJyk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBhbmRyb2lkMjM6IEJvb2xlYW47IGB0cnVlYCBmb3IgYnJvd3NlcnMgcnVubmluZyBvbiBBbmRyb2lkIDIgb3IgQW5kcm9pZCAzLlxyXG4gIHZhciBhbmRyb2lkMjMgPSB1c2VyQWdlbnRDb250YWlucygnYW5kcm9pZCAyJykgfHwgdXNlckFnZW50Q29udGFpbnMoJ2FuZHJvaWQgMycpO1xyXG5cclxuICAvKiBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE3OTYxMjY2IGZvciBkZXRhaWxzIG9uIGRldGVjdGluZyBzdG9jayBBbmRyb2lkICovXHJcbiAgdmFyIHdlYmtpdFZlciA9IHBhcnNlSW50KC9XZWJLaXRcXC8oWzAtOV0rKXwkLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpWzFdLCAxMCk7IC8vIGFsc28gbWF0Y2hlcyBBcHBsZVdlYktpdFxyXG4gIC8vIEBwcm9wZXJ0eSBhbmRyb2lkU3RvY2s6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIEFuZHJvaWQgc3RvY2sgYnJvd3NlciAoaS5lLiBub3QgQ2hyb21lKVxyXG4gIHZhciBhbmRyb2lkU3RvY2sgPSBhbmRyb2lkICYmIHVzZXJBZ2VudENvbnRhaW5zKCdHb29nbGUnKSAmJiB3ZWJraXRWZXIgPCA1MzcgJiYgISgnQXVkaW9Ob2RlJyBpbiB3aW5kb3cpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgb3BlcmE6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIE9wZXJhIGJyb3dzZXJcclxuICB2YXIgb3BlcmEgPSAhIXdpbmRvdy5vcGVyYTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGNocm9tZTogQm9vbGVhbjsgYHRydWVgIGZvciB0aGUgQ2hyb21lIGJyb3dzZXIuXHJcbiAgdmFyIGNocm9tZSA9ICFlZGdlICYmIHVzZXJBZ2VudENvbnRhaW5zKCdjaHJvbWUnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGdlY2tvOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGdlY2tvLWJhc2VkIGJyb3dzZXJzIGxpa2UgRmlyZWZveC5cclxuICB2YXIgZ2Vja28gPSB1c2VyQWdlbnRDb250YWlucygnZ2Vja28nKSAmJiAhd2Via2l0ICYmICFvcGVyYSAmJiAhaWU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBzYWZhcmk6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIFNhZmFyaSBicm93c2VyLlxyXG4gIHZhciBzYWZhcmkgPSAhY2hyb21lICYmIHVzZXJBZ2VudENvbnRhaW5zKCdzYWZhcmknKTtcclxuXHJcbiAgdmFyIHBoYW50b20gPSB1c2VyQWdlbnRDb250YWlucygncGhhbnRvbScpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgb3BlcmExMjogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgdGhlIE9wZXJhIGJyb3dzZXIgc3VwcG9ydGluZyBDU1MgdHJhbnNmb3JtcyAodmVyc2lvbiAxMiBvciBsYXRlcikuXHJcbiAgdmFyIG9wZXJhMTIgPSAnT1RyYW5zaXRpb24nIGluIHN0eWxlJDE7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB3aW46IEJvb2xlYW47IGB0cnVlYCB3aGVuIHRoZSBicm93c2VyIGlzIHJ1bm5pbmcgaW4gYSBXaW5kb3dzIHBsYXRmb3JtXHJcbiAgdmFyIHdpbiA9IG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdXaW4nKSA9PT0gMDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGllM2Q6IEJvb2xlYW47IGB0cnVlYCBmb3IgYWxsIEludGVybmV0IEV4cGxvcmVyIHZlcnNpb25zIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGllM2QgPSBpZSAmJiAoJ3RyYW5zaXRpb24nIGluIHN0eWxlJDEpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgd2Via2l0M2Q6IEJvb2xlYW47IGB0cnVlYCBmb3Igd2Via2l0LWJhc2VkIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIHdlYmtpdDNkID0gKCdXZWJLaXRDU1NNYXRyaXgnIGluIHdpbmRvdykgJiYgKCdtMTEnIGluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KCkpICYmICFhbmRyb2lkMjM7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBnZWNrbzNkOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGdlY2tvLWJhc2VkIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGdlY2tvM2QgPSAnTW96UGVyc3BlY3RpdmUnIGluIHN0eWxlJDE7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBhbnkzZDogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGFueTNkID0gIXdpbmRvdy5MX0RJU0FCTEVfM0QgJiYgKGllM2QgfHwgd2Via2l0M2QgfHwgZ2Vja28zZCkgJiYgIW9wZXJhMTIgJiYgIXBoYW50b207XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBtb2JpbGU6IEJvb2xlYW47IGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHJ1bm5pbmcgaW4gYSBtb2JpbGUgZGV2aWNlLlxyXG4gIHZhciBtb2JpbGUgPSB0eXBlb2Ygb3JpZW50YXRpb24gIT09ICd1bmRlZmluZWQnIHx8IHVzZXJBZ2VudENvbnRhaW5zKCdtb2JpbGUnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZVdlYmtpdDogQm9vbGVhbjsgYHRydWVgIGZvciBhbGwgd2Via2l0LWJhc2VkIGJyb3dzZXJzIGluIGEgbW9iaWxlIGRldmljZS5cclxuICB2YXIgbW9iaWxlV2Via2l0ID0gbW9iaWxlICYmIHdlYmtpdDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZVdlYmtpdDNkOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgd2Via2l0LWJhc2VkIGJyb3dzZXJzIGluIGEgbW9iaWxlIGRldmljZSBzdXBwb3J0aW5nIENTUyB0cmFuc2Zvcm1zLlxyXG4gIHZhciBtb2JpbGVXZWJraXQzZCA9IG1vYmlsZSAmJiB3ZWJraXQzZDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1zUG9pbnRlcjogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYnJvd3NlcnMgaW1wbGVtZW50aW5nIHRoZSBNaWNyb3NvZnQgdG91Y2ggZXZlbnRzIG1vZGVsIChub3RhYmx5IElFMTApLlxyXG4gIHZhciBtc1BvaW50ZXIgPSAhd2luZG93LlBvaW50ZXJFdmVudCAmJiB3aW5kb3cuTVNQb2ludGVyRXZlbnQ7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBwb2ludGVyOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgYnJvd3NlcnMgc3VwcG9ydGluZyBbcG9pbnRlciBldmVudHNdKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZG40MzMyNDQlMjh2PXZzLjg1JTI5LmFzcHgpLlxyXG4gIHZhciBwb2ludGVyID0gISEod2luZG93LlBvaW50ZXJFdmVudCB8fCBtc1BvaW50ZXIpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgdG91Y2g6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGFsbCBicm93c2VycyBzdXBwb3J0aW5nIFt0b3VjaCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Ub3VjaF9ldmVudHMpLlxyXG4gIC8vIFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBicm93c2VyIGlzIHJ1bm5pbmcgaW4gYSBjb21wdXRlciB3aXRoXHJcbiAgLy8gYSB0b3VjaHNjcmVlbiwgaXQgb25seSBtZWFucyB0aGF0IHRoZSBicm93c2VyIGlzIGNhcGFibGUgb2YgdW5kZXJzdGFuZGluZ1xyXG4gIC8vIHRvdWNoIGV2ZW50cy5cclxuICB2YXIgdG91Y2ggPSAhd2luZG93LkxfTk9fVE9VQ0ggJiYgKHBvaW50ZXIgfHwgJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8XHJcbiAgXHRcdCh3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBtb2JpbGVPcGVyYTogQm9vbGVhbjsgYHRydWVgIGZvciB0aGUgT3BlcmEgYnJvd3NlciBpbiBhIG1vYmlsZSBkZXZpY2UuXHJcbiAgdmFyIG1vYmlsZU9wZXJhID0gbW9iaWxlICYmIG9wZXJhO1xyXG5cclxuICAvLyBAcHJvcGVydHkgbW9iaWxlR2Vja286IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGdlY2tvLWJhc2VkIGJyb3dzZXJzIHJ1bm5pbmcgaW4gYSBtb2JpbGUgZGV2aWNlLlxyXG4gIHZhciBtb2JpbGVHZWNrbyA9IG1vYmlsZSAmJiBnZWNrbztcclxuXHJcbiAgLy8gQHByb3BlcnR5IHJldGluYTogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYnJvd3NlcnMgb24gYSBoaWdoLXJlc29sdXRpb24gXCJyZXRpbmFcIiBzY3JlZW4gb3Igb24gYW55IHNjcmVlbiB3aGVuIGJyb3dzZXIncyBkaXNwbGF5IHpvb20gaXMgbW9yZSB0aGFuIDEwMCUuXHJcbiAgdmFyIHJldGluYSA9ICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAod2luZG93LnNjcmVlbi5kZXZpY2VYRFBJIC8gd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSkpID4gMTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHBhc3NpdmVFdmVudHM6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBwYXNzaXZlIGV2ZW50cy5cclxuICB2YXIgcGFzc2l2ZUV2ZW50cyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgXHR2YXIgc3VwcG9ydHNQYXNzaXZlT3B0aW9uID0gZmFsc2U7XHJcbiAgXHR0cnkge1xyXG4gIFx0XHR2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XHJcbiAgXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2V0dGVyLXJldHVyblxyXG4gIFx0XHRcdFx0c3VwcG9ydHNQYXNzaXZlT3B0aW9uID0gdHJ1ZTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0pO1xyXG4gIFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVFdmVudFN1cHBvcnQnLCBmYWxzZUZuLCBvcHRzKTtcclxuICBcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0JywgZmFsc2VGbiwgb3B0cyk7XHJcbiAgXHR9IGNhdGNoIChlKSB7XHJcbiAgXHRcdC8vIEVycm9ycyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgc2luY2UgdGhpcyBpcyBvbmx5IGEgYnJvd3NlciBzdXBwb3J0IHRlc3QuXHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gc3VwcG9ydHNQYXNzaXZlT3B0aW9uO1xyXG4gIH0oKSk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBjYW52YXM6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0NhbnZhc19BUEkpLlxyXG4gIHZhciBjYW52YXMgPSAoZnVuY3Rpb24gKCkge1xyXG4gIFx0cmV0dXJuICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dDtcclxuICB9KCkpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgc3ZnOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgW1NWR10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHKS5cclxuICB2YXIgc3ZnID0gISEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TICYmIHN2Z0NyZWF0ZSgnc3ZnJykuY3JlYXRlU1ZHUmVjdCk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB2bWw6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgW1ZNTF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmVjdG9yX01hcmt1cF9MYW5ndWFnZSkuXHJcbiAgdmFyIHZtbCA9ICFzdmcgJiYgKGZ1bmN0aW9uICgpIHtcclxuICBcdHRyeSB7XHJcbiAgXHRcdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBcdFx0ZGl2LmlubmVySFRNTCA9ICc8djpzaGFwZSBhZGo9XCIxXCIvPic7XHJcblxyXG4gIFx0XHR2YXIgc2hhcGUgPSBkaXYuZmlyc3RDaGlsZDtcclxuICBcdFx0c2hhcGUuc3R5bGUuYmVoYXZpb3IgPSAndXJsKCNkZWZhdWx0I1ZNTCknO1xyXG5cclxuICBcdFx0cmV0dXJuIHNoYXBlICYmICh0eXBlb2Ygc2hhcGUuYWRqID09PSAnb2JqZWN0Jyk7XHJcblxyXG4gIFx0fSBjYXRjaCAoZSkge1xyXG4gIFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHR9XHJcbiAgfSgpKTtcclxuXHJcblxyXG4gIGZ1bmN0aW9uIHVzZXJBZ2VudENvbnRhaW5zKHN0cikge1xyXG4gIFx0cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHN0cikgPj0gMDtcclxuICB9XG5cbiAgdmFyIEJyb3dzZXIgPSAoe1xuICAgIGllOiBpZSxcbiAgICBpZWx0OTogaWVsdDksXG4gICAgZWRnZTogZWRnZSxcbiAgICB3ZWJraXQ6IHdlYmtpdCxcbiAgICBhbmRyb2lkOiBhbmRyb2lkLFxuICAgIGFuZHJvaWQyMzogYW5kcm9pZDIzLFxuICAgIGFuZHJvaWRTdG9jazogYW5kcm9pZFN0b2NrLFxuICAgIG9wZXJhOiBvcGVyYSxcbiAgICBjaHJvbWU6IGNocm9tZSxcbiAgICBnZWNrbzogZ2Vja28sXG4gICAgc2FmYXJpOiBzYWZhcmksXG4gICAgcGhhbnRvbTogcGhhbnRvbSxcbiAgICBvcGVyYTEyOiBvcGVyYTEyLFxuICAgIHdpbjogd2luLFxuICAgIGllM2Q6IGllM2QsXG4gICAgd2Via2l0M2Q6IHdlYmtpdDNkLFxuICAgIGdlY2tvM2Q6IGdlY2tvM2QsXG4gICAgYW55M2Q6IGFueTNkLFxuICAgIG1vYmlsZTogbW9iaWxlLFxuICAgIG1vYmlsZVdlYmtpdDogbW9iaWxlV2Via2l0LFxuICAgIG1vYmlsZVdlYmtpdDNkOiBtb2JpbGVXZWJraXQzZCxcbiAgICBtc1BvaW50ZXI6IG1zUG9pbnRlcixcbiAgICBwb2ludGVyOiBwb2ludGVyLFxuICAgIHRvdWNoOiB0b3VjaCxcbiAgICBtb2JpbGVPcGVyYTogbW9iaWxlT3BlcmEsXG4gICAgbW9iaWxlR2Vja286IG1vYmlsZUdlY2tvLFxuICAgIHJldGluYTogcmV0aW5hLFxuICAgIHBhc3NpdmVFdmVudHM6IHBhc3NpdmVFdmVudHMsXG4gICAgY2FudmFzOiBjYW52YXMsXG4gICAgc3ZnOiBzdmcsXG4gICAgdm1sOiB2bWxcbiAgfSk7XG5cbiAgLypcbiAgICogRXh0ZW5kcyBMLkRvbUV2ZW50IHRvIHByb3ZpZGUgdG91Y2ggc3VwcG9ydCBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgYW5kIFdpbmRvd3MtYmFzZWQgZGV2aWNlcy5cbiAgICovXG5cblxuICB2YXIgUE9JTlRFUl9ET1dOID0gICBtc1BvaW50ZXIgPyAnTVNQb2ludGVyRG93bicgICA6ICdwb2ludGVyZG93bic7XG4gIHZhciBQT0lOVEVSX01PVkUgPSAgIG1zUG9pbnRlciA/ICdNU1BvaW50ZXJNb3ZlJyAgIDogJ3BvaW50ZXJtb3ZlJztcbiAgdmFyIFBPSU5URVJfVVAgPSAgICAgbXNQb2ludGVyID8gJ01TUG9pbnRlclVwJyAgICAgOiAncG9pbnRlcnVwJztcbiAgdmFyIFBPSU5URVJfQ0FOQ0VMID0gbXNQb2ludGVyID8gJ01TUG9pbnRlckNhbmNlbCcgOiAncG9pbnRlcmNhbmNlbCc7XG5cbiAgdmFyIF9wb2ludGVycyA9IHt9O1xuICB2YXIgX3BvaW50ZXJEb2NMaXN0ZW5lciA9IGZhbHNlO1xuXG4gIC8vIFByb3ZpZGVzIGEgdG91Y2ggZXZlbnRzIHdyYXBwZXIgZm9yIChtcylwb2ludGVyIGV2ZW50cy5cbiAgLy8gcmVmIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvIGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjI4OTBcblxuICBmdW5jdGlvbiBhZGRQb2ludGVyTGlzdGVuZXIob2JqLCB0eXBlLCBoYW5kbGVyLCBpZCkge1xuICBcdGlmICh0eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgXHRcdF9hZGRQb2ludGVyU3RhcnQob2JqLCBoYW5kbGVyLCBpZCk7XG5cbiAgXHR9IGVsc2UgaWYgKHR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XG4gIFx0XHRfYWRkUG9pbnRlck1vdmUob2JqLCBoYW5kbGVyLCBpZCk7XG5cbiAgXHR9IGVsc2UgaWYgKHR5cGUgPT09ICd0b3VjaGVuZCcpIHtcbiAgXHRcdF9hZGRQb2ludGVyRW5kKG9iaiwgaGFuZGxlciwgaWQpO1xuICBcdH1cblxuICBcdHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlUG9pbnRlckxpc3RlbmVyKG9iaiwgdHlwZSwgaWQpIHtcbiAgXHR2YXIgaGFuZGxlciA9IG9ialsnX2xlYWZsZXRfJyArIHR5cGUgKyBpZF07XG5cbiAgXHRpZiAodHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gIFx0XHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0RPV04sIGhhbmRsZXIsIGZhbHNlKTtcblxuICBcdH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcbiAgXHRcdG9iai5yZW1vdmVFdmVudExpc3RlbmVyKFBPSU5URVJfTU9WRSwgaGFuZGxlciwgZmFsc2UpO1xuXG4gIFx0fSBlbHNlIGlmICh0eXBlID09PSAndG91Y2hlbmQnKSB7XG4gIFx0XHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihQT0lOVEVSX1VQLCBoYW5kbGVyLCBmYWxzZSk7XG4gIFx0XHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0NBTkNFTCwgaGFuZGxlciwgZmFsc2UpO1xuICBcdH1cblxuICBcdHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FkZFBvaW50ZXJTdGFydChvYmosIGhhbmRsZXIsIGlkKSB7XG4gIFx0dmFyIG9uRG93biA9IGJpbmQoZnVuY3Rpb24gKGUpIHtcbiAgXHRcdC8vIElFMTAgc3BlY2lmaWM6IE1zVG91Y2ggbmVlZHMgcHJldmVudERlZmF1bHQuIFNlZSAjMjAwMFxuICBcdFx0aWYgKGUuTVNQT0lOVEVSX1RZUEVfVE9VQ0ggJiYgZS5wb2ludGVyVHlwZSA9PT0gZS5NU1BPSU5URVJfVFlQRV9UT1VDSCkge1xuICBcdFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcbiAgXHRcdH1cblxuICBcdFx0X2hhbmRsZVBvaW50ZXIoZSwgaGFuZGxlcik7XG4gIFx0fSk7XG5cbiAgXHRvYmpbJ19sZWFmbGV0X3RvdWNoc3RhcnQnICsgaWRdID0gb25Eb3duO1xuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfRE9XTiwgb25Eb3duLCBmYWxzZSk7XG5cbiAgXHQvLyBuZWVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBwb2ludGVycyBhbmQgaG93IG1hbnkgYXJlIGFjdGl2ZSB0byBwcm92aWRlIGUudG91Y2hlcyBlbXVsYXRpb25cbiAgXHRpZiAoIV9wb2ludGVyRG9jTGlzdGVuZXIpIHtcbiAgXHRcdC8vIHdlIGxpc3RlbiBkb2N1bWVudCBhcyBhbnkgZHJhZ3MgdGhhdCBlbmQgYnkgbW92aW5nIHRoZSB0b3VjaCBvZmYgdGhlIHNjcmVlbiBnZXQgZmlyZWQgdGhlcmVcbiAgXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoUE9JTlRFUl9ET1dOLCBfZ2xvYmFsUG9pbnRlckRvd24sIHRydWUpO1xuICBcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX01PVkUsIF9nbG9iYWxQb2ludGVyTW92ZSwgdHJ1ZSk7XG4gIFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfVVAsIF9nbG9iYWxQb2ludGVyVXAsIHRydWUpO1xuICBcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0NBTkNFTCwgX2dsb2JhbFBvaW50ZXJVcCwgdHJ1ZSk7XG5cbiAgXHRcdF9wb2ludGVyRG9jTGlzdGVuZXIgPSB0cnVlO1xuICBcdH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9nbG9iYWxQb2ludGVyRG93bihlKSB7XG4gIFx0X3BvaW50ZXJzW2UucG9pbnRlcklkXSA9IGU7XG4gIH1cblxuICBmdW5jdGlvbiBfZ2xvYmFsUG9pbnRlck1vdmUoZSkge1xuICBcdGlmIChfcG9pbnRlcnNbZS5wb2ludGVySWRdKSB7XG4gIFx0XHRfcG9pbnRlcnNbZS5wb2ludGVySWRdID0gZTtcbiAgXHR9XG4gIH1cblxuICBmdW5jdGlvbiBfZ2xvYmFsUG9pbnRlclVwKGUpIHtcbiAgXHRkZWxldGUgX3BvaW50ZXJzW2UucG9pbnRlcklkXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9oYW5kbGVQb2ludGVyKGUsIGhhbmRsZXIpIHtcbiAgXHRlLnRvdWNoZXMgPSBbXTtcbiAgXHRmb3IgKHZhciBpIGluIF9wb2ludGVycykge1xuICBcdFx0ZS50b3VjaGVzLnB1c2goX3BvaW50ZXJzW2ldKTtcbiAgXHR9XG4gIFx0ZS5jaGFuZ2VkVG91Y2hlcyA9IFtlXTtcblxuICBcdGhhbmRsZXIoZSk7XG4gIH1cblxuICBmdW5jdGlvbiBfYWRkUG9pbnRlck1vdmUob2JqLCBoYW5kbGVyLCBpZCkge1xuICBcdHZhciBvbk1vdmUgPSBmdW5jdGlvbiAoZSkge1xuICBcdFx0Ly8gZG9uJ3QgZmlyZSB0b3VjaCBtb3ZlcyB3aGVuIG1vdXNlIGlzbid0IGRvd25cbiAgXHRcdGlmICgoZS5wb2ludGVyVHlwZSA9PT0gKGUuTVNQT0lOVEVSX1RZUEVfTU9VU0UgfHwgJ21vdXNlJykpICYmIGUuYnV0dG9ucyA9PT0gMCkge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdF9oYW5kbGVQb2ludGVyKGUsIGhhbmRsZXIpO1xuICBcdH07XG5cbiAgXHRvYmpbJ19sZWFmbGV0X3RvdWNobW92ZScgKyBpZF0gPSBvbk1vdmU7XG4gIFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIoUE9JTlRFUl9NT1ZFLCBvbk1vdmUsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hZGRQb2ludGVyRW5kKG9iaiwgaGFuZGxlciwgaWQpIHtcbiAgXHR2YXIgb25VcCA9IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRfaGFuZGxlUG9pbnRlcihlLCBoYW5kbGVyKTtcbiAgXHR9O1xuXG4gIFx0b2JqWydfbGVhZmxldF90b3VjaGVuZCcgKyBpZF0gPSBvblVwO1xuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfVVAsIG9uVXAsIGZhbHNlKTtcbiAgXHRvYmouYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0NBTkNFTCwgb25VcCwgZmFsc2UpO1xuICB9XG5cbiAgLypcclxuICAgKiBFeHRlbmRzIHRoZSBldmVudCBoYW5kbGluZyBjb2RlIHdpdGggZG91YmxlIHRhcCBzdXBwb3J0IGZvciBtb2JpbGUgYnJvd3NlcnMuXHJcbiAgICovXHJcblxyXG4gIHZhciBfdG91Y2hzdGFydCA9IG1zUG9pbnRlciA/ICdNU1BvaW50ZXJEb3duJyA6IHBvaW50ZXIgPyAncG9pbnRlcmRvd24nIDogJ3RvdWNoc3RhcnQnO1xyXG4gIHZhciBfdG91Y2hlbmQgPSBtc1BvaW50ZXIgPyAnTVNQb2ludGVyVXAnIDogcG9pbnRlciA/ICdwb2ludGVydXAnIDogJ3RvdWNoZW5kJztcclxuICB2YXIgX3ByZSA9ICdfbGVhZmxldF8nO1xyXG5cclxuICAvLyBpbnNwaXJlZCBieSBaZXB0byB0b3VjaCBjb2RlIGJ5IFRob21hcyBGdWNoc1xyXG4gIGZ1bmN0aW9uIGFkZERvdWJsZVRhcExpc3RlbmVyKG9iaiwgaGFuZGxlciwgaWQpIHtcclxuICBcdHZhciBsYXN0LCB0b3VjaCQkMSxcclxuICBcdCAgICBkb3VibGVUYXAgPSBmYWxzZSxcclxuICBcdCAgICBkZWxheSA9IDI1MDtcclxuXHJcbiAgXHRmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xyXG5cclxuICBcdFx0aWYgKHBvaW50ZXIpIHtcclxuICBcdFx0XHRpZiAoIWUuaXNQcmltYXJ5KSB7IHJldHVybjsgfVxyXG4gIFx0XHRcdGlmIChlLnBvaW50ZXJUeXBlID09PSAnbW91c2UnKSB7IHJldHVybjsgfSAvLyBtb3VzZSBmaXJlcyBuYXRpdmUgZGJsY2xpY2tcclxuICBcdFx0fSBlbHNlIGlmIChlLnRvdWNoZXMubGVuZ3RoID4gMSkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG5vdyA9IERhdGUubm93KCksXHJcbiAgXHRcdCAgICBkZWx0YSA9IG5vdyAtIChsYXN0IHx8IG5vdyk7XHJcblxyXG4gIFx0XHR0b3VjaCQkMSA9IGUudG91Y2hlcyA/IGUudG91Y2hlc1swXSA6IGU7XHJcbiAgXHRcdGRvdWJsZVRhcCA9IChkZWx0YSA+IDAgJiYgZGVsdGEgPD0gZGVsYXkpO1xyXG4gIFx0XHRsYXN0ID0gbm93O1xyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIG9uVG91Y2hFbmQoZSkge1xyXG4gIFx0XHRpZiAoZG91YmxlVGFwICYmICF0b3VjaCQkMS5jYW5jZWxCdWJibGUpIHtcclxuICBcdFx0XHRpZiAocG9pbnRlcikge1xyXG4gIFx0XHRcdFx0aWYgKGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdFx0XHQvLyB3b3JrIGFyb3VuZCAudHlwZSBiZWluZyByZWFkb25seSB3aXRoIE1TUG9pbnRlciogZXZlbnRzXHJcbiAgXHRcdFx0XHR2YXIgbmV3VG91Y2ggPSB7fSxcclxuICBcdFx0XHRcdCAgICBwcm9wLCBpO1xyXG5cclxuICBcdFx0XHRcdGZvciAoaSBpbiB0b3VjaCQkMSkge1xyXG4gIFx0XHRcdFx0XHRwcm9wID0gdG91Y2gkJDFbaV07XHJcbiAgXHRcdFx0XHRcdG5ld1RvdWNoW2ldID0gcHJvcCAmJiBwcm9wLmJpbmQgPyBwcm9wLmJpbmQodG91Y2gkJDEpIDogcHJvcDtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHRcdHRvdWNoJCQxID0gbmV3VG91Y2g7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHRvdWNoJCQxLnR5cGUgPSAnZGJsY2xpY2snO1xyXG4gIFx0XHRcdHRvdWNoJCQxLmJ1dHRvbiA9IDA7XHJcbiAgXHRcdFx0aGFuZGxlcih0b3VjaCQkMSk7XHJcbiAgXHRcdFx0bGFzdCA9IG51bGw7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRvYmpbX3ByZSArIF90b3VjaHN0YXJ0ICsgaWRdID0gb25Ub3VjaFN0YXJ0O1xyXG4gIFx0b2JqW19wcmUgKyBfdG91Y2hlbmQgKyBpZF0gPSBvblRvdWNoRW5kO1xyXG4gIFx0b2JqW19wcmUgKyAnZGJsY2xpY2snICsgaWRdID0gaGFuZGxlcjtcclxuXHJcbiAgXHRvYmouYWRkRXZlbnRMaXN0ZW5lcihfdG91Y2hzdGFydCwgb25Ub3VjaFN0YXJ0LCBwYXNzaXZlRXZlbnRzID8ge3Bhc3NpdmU6IGZhbHNlfSA6IGZhbHNlKTtcclxuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKF90b3VjaGVuZCwgb25Ub3VjaEVuZCwgcGFzc2l2ZUV2ZW50cyA/IHtwYXNzaXZlOiBmYWxzZX0gOiBmYWxzZSk7XHJcblxyXG4gIFx0Ly8gT24gc29tZSBwbGF0Zm9ybXMgKG5vdGFibHksIGNocm9tZTw1NSBvbiB3aW4xMCArIHRvdWNoc2NyZWVuICsgbW91c2UpLFxyXG4gIFx0Ly8gdGhlIGJyb3dzZXIgZG9lc24ndCBmaXJlIHRvdWNoZW5kL3BvaW50ZXJ1cCBldmVudHMgYnV0IGRvZXMgZmlyZVxyXG4gIFx0Ly8gbmF0aXZlIGRibGNsaWNrcy4gU2VlICM0MTI3LlxyXG4gIFx0Ly8gRWRnZSAxNCBhbHNvIGZpcmVzIG5hdGl2ZSBkYmxjbGlja3MsIGJ1dCBvbmx5IGZvciBwb2ludGVyVHlwZSBtb3VzZSwgc2VlICM1MTgwLlxyXG4gIFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIob2JqLCBpZCkge1xyXG4gIFx0dmFyIHRvdWNoc3RhcnQgPSBvYmpbX3ByZSArIF90b3VjaHN0YXJ0ICsgaWRdLFxyXG4gIFx0ICAgIHRvdWNoZW5kID0gb2JqW19wcmUgKyBfdG91Y2hlbmQgKyBpZF0sXHJcbiAgXHQgICAgZGJsY2xpY2sgPSBvYmpbX3ByZSArICdkYmxjbGljaycgKyBpZF07XHJcblxyXG4gIFx0b2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoX3RvdWNoc3RhcnQsIHRvdWNoc3RhcnQsIHBhc3NpdmVFdmVudHMgPyB7cGFzc2l2ZTogZmFsc2V9IDogZmFsc2UpO1xyXG4gIFx0b2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoX3RvdWNoZW5kLCB0b3VjaGVuZCwgcGFzc2l2ZUV2ZW50cyA/IHtwYXNzaXZlOiBmYWxzZX0gOiBmYWxzZSk7XHJcbiAgXHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCBkYmxjbGljaywgZmFsc2UpO1xyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgRG9tVXRpbFxyXG4gICAqXHJcbiAgICogVXRpbGl0eSBmdW5jdGlvbnMgdG8gd29yayB3aXRoIHRoZSBbRE9NXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRfT2JqZWN0X01vZGVsKVxyXG4gICAqIHRyZWUsIHVzZWQgYnkgTGVhZmxldCBpbnRlcm5hbGx5LlxyXG4gICAqXHJcbiAgICogTW9zdCBmdW5jdGlvbnMgZXhwZWN0aW5nIG9yIHJldHVybmluZyBhIGBIVE1MRWxlbWVudGAgYWxzbyB3b3JrIGZvclxyXG4gICAqIFNWRyBlbGVtZW50cy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IGNsYXNzZXMgcmVmZXIgdG8gQ1NTIGNsYXNzZXNcclxuICAgKiBpbiBIVE1MIGFuZCBTVkcgY2xhc3NlcyBpbiBTVkcuXHJcbiAgICovXHJcblxyXG5cclxuICAvLyBAcHJvcGVydHkgVFJBTlNGT1JNOiBTdHJpbmdcclxuICAvLyBWZW5kb3ItcHJlZml4ZWQgdHJhbnNmb3JtIHN0eWxlIG5hbWUgKGUuZy4gYCd3ZWJraXRUcmFuc2Zvcm0nYCBmb3IgV2ViS2l0KS5cclxuICB2YXIgVFJBTlNGT1JNID0gdGVzdFByb3AoXHJcbiAgXHRbJ3RyYW5zZm9ybScsICd3ZWJraXRUcmFuc2Zvcm0nLCAnT1RyYW5zZm9ybScsICdNb3pUcmFuc2Zvcm0nLCAnbXNUcmFuc2Zvcm0nXSk7XHJcblxyXG4gIC8vIHdlYmtpdFRyYW5zaXRpb24gY29tZXMgZmlyc3QgYmVjYXVzZSBzb21lIGJyb3dzZXIgdmVyc2lvbnMgdGhhdCBkcm9wIHZlbmRvciBwcmVmaXggZG9uJ3QgZG9cclxuICAvLyB0aGUgc2FtZSBmb3IgdGhlIHRyYW5zaXRpb25lbmQgZXZlbnQsIGluIHBhcnRpY3VsYXIgdGhlIEFuZHJvaWQgNC4xIHN0b2NrIGJyb3dzZXJcclxuXHJcbiAgLy8gQHByb3BlcnR5IFRSQU5TSVRJT046IFN0cmluZ1xyXG4gIC8vIFZlbmRvci1wcmVmaXhlZCB0cmFuc2l0aW9uIHN0eWxlIG5hbWUuXHJcbiAgdmFyIFRSQU5TSVRJT04gPSB0ZXN0UHJvcChcclxuICBcdFsnd2Via2l0VHJhbnNpdGlvbicsICd0cmFuc2l0aW9uJywgJ09UcmFuc2l0aW9uJywgJ01velRyYW5zaXRpb24nLCAnbXNUcmFuc2l0aW9uJ10pO1xyXG5cclxuICAvLyBAcHJvcGVydHkgVFJBTlNJVElPTl9FTkQ6IFN0cmluZ1xyXG4gIC8vIFZlbmRvci1wcmVmaXhlZCB0cmFuc2l0aW9uZW5kIGV2ZW50IG5hbWUuXHJcbiAgdmFyIFRSQU5TSVRJT05fRU5EID1cclxuICBcdFRSQU5TSVRJT04gPT09ICd3ZWJraXRUcmFuc2l0aW9uJyB8fCBUUkFOU0lUSU9OID09PSAnT1RyYW5zaXRpb24nID8gVFJBTlNJVElPTiArICdFbmQnIDogJ3RyYW5zaXRpb25lbmQnO1xyXG5cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldChpZDogU3RyaW5nfEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICAvLyBSZXR1cm5zIGFuIGVsZW1lbnQgZ2l2ZW4gaXRzIERPTSBpZCwgb3IgcmV0dXJucyB0aGUgZWxlbWVudCBpdHNlbGZcclxuICAvLyBpZiBpdCB3YXMgcGFzc2VkIGRpcmVjdGx5LlxyXG4gIGZ1bmN0aW9uIGdldChpZCkge1xyXG4gIFx0cmV0dXJuIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgOiBpZDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRTdHlsZShlbDogSFRNTEVsZW1lbnQsIHN0eWxlQXR0cmliOiBTdHJpbmcpOiBTdHJpbmdcclxuICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBjZXJ0YWluIHN0eWxlIGF0dHJpYnV0ZSBvbiBhbiBlbGVtZW50LFxyXG4gIC8vIGluY2x1ZGluZyBjb21wdXRlZCB2YWx1ZXMgb3IgdmFsdWVzIHNldCB0aHJvdWdoIENTUy5cclxuICBmdW5jdGlvbiBnZXRTdHlsZShlbCwgc3R5bGUpIHtcclxuICBcdHZhciB2YWx1ZSA9IGVsLnN0eWxlW3N0eWxlXSB8fCAoZWwuY3VycmVudFN0eWxlICYmIGVsLmN1cnJlbnRTdHlsZVtzdHlsZV0pO1xyXG5cclxuICBcdGlmICgoIXZhbHVlIHx8IHZhbHVlID09PSAnYXV0bycpICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3KSB7XHJcbiAgXHRcdHZhciBjc3MgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKTtcclxuICBcdFx0dmFsdWUgPSBjc3MgPyBjc3Nbc3R5bGVdIDogbnVsbDtcclxuICBcdH1cclxuICBcdHJldHVybiB2YWx1ZSA9PT0gJ2F1dG8nID8gbnVsbCA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNyZWF0ZSh0YWdOYW1lOiBTdHJpbmcsIGNsYXNzTmFtZT86IFN0cmluZywgY29udGFpbmVyPzogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxyXG4gIC8vIENyZWF0ZXMgYW4gSFRNTCBlbGVtZW50IHdpdGggYHRhZ05hbWVgLCBzZXRzIGl0cyBjbGFzcyB0byBgY2xhc3NOYW1lYCwgYW5kIG9wdGlvbmFsbHkgYXBwZW5kcyBpdCB0byBgY29udGFpbmVyYCBlbGVtZW50LlxyXG4gIGZ1bmN0aW9uIGNyZWF0ZSQxKHRhZ05hbWUsIGNsYXNzTmFtZSwgY29udGFpbmVyKSB7XHJcbiAgXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xyXG4gIFx0ZWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8ICcnO1xyXG5cclxuICBcdGlmIChjb250YWluZXIpIHtcclxuICBcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKGVsKTtcclxuICBcdH1cclxuICBcdHJldHVybiBlbDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiByZW1vdmUoZWw6IEhUTUxFbGVtZW50KVxyXG4gIC8vIFJlbW92ZXMgYGVsYCBmcm9tIGl0cyBwYXJlbnQgZWxlbWVudFxyXG4gIGZ1bmN0aW9uIHJlbW92ZShlbCkge1xyXG4gIFx0dmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XHJcbiAgXHRpZiAocGFyZW50KSB7XHJcbiAgXHRcdHBhcmVudC5yZW1vdmVDaGlsZChlbCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZW1wdHkoZWw6IEhUTUxFbGVtZW50KVxyXG4gIC8vIFJlbW92ZXMgYWxsIG9mIGBlbGAncyBjaGlsZHJlbiBlbGVtZW50cyBmcm9tIGBlbGBcclxuICBmdW5jdGlvbiBlbXB0eShlbCkge1xyXG4gIFx0d2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcclxuICBcdFx0ZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gdG9Gcm9udChlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gTWFrZXMgYGVsYCB0aGUgbGFzdCBjaGlsZCBvZiBpdHMgcGFyZW50LCBzbyBpdCByZW5kZXJzIGluIGZyb250IG9mIHRoZSBvdGhlciBjaGlsZHJlbi5cclxuICBmdW5jdGlvbiB0b0Zyb250KGVsKSB7XHJcbiAgXHR2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcclxuICBcdGlmIChwYXJlbnQgJiYgcGFyZW50Lmxhc3RDaGlsZCAhPT0gZWwpIHtcclxuICBcdFx0cGFyZW50LmFwcGVuZENoaWxkKGVsKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0b0JhY2soZWw6IEhUTUxFbGVtZW50KVxyXG4gIC8vIE1ha2VzIGBlbGAgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQsIHNvIGl0IHJlbmRlcnMgYmVoaW5kIHRoZSBvdGhlciBjaGlsZHJlbi5cclxuICBmdW5jdGlvbiB0b0JhY2soZWwpIHtcclxuICBcdHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xyXG4gIFx0aWYgKHBhcmVudCAmJiBwYXJlbnQuZmlyc3RDaGlsZCAhPT0gZWwpIHtcclxuICBcdFx0cGFyZW50Lmluc2VydEJlZm9yZShlbCwgcGFyZW50LmZpcnN0Q2hpbGQpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGhhc0NsYXNzKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogU3RyaW5nKTogQm9vbGVhblxyXG4gIC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50J3MgY2xhc3MgYXR0cmlidXRlIGNvbnRhaW5zIGBuYW1lYC5cclxuICBmdW5jdGlvbiBoYXNDbGFzcyhlbCwgbmFtZSkge1xyXG4gIFx0aWYgKGVsLmNsYXNzTGlzdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMobmFtZSk7XHJcbiAgXHR9XHJcbiAgXHR2YXIgY2xhc3NOYW1lID0gZ2V0Q2xhc3MoZWwpO1xyXG4gIFx0cmV0dXJuIGNsYXNzTmFtZS5sZW5ndGggPiAwICYmIG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBuYW1lICsgJyhcXFxcc3wkKScpLnRlc3QoY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBhZGRDbGFzcyhlbDogSFRNTEVsZW1lbnQsIG5hbWU6IFN0cmluZylcclxuICAvLyBBZGRzIGBuYW1lYCB0byB0aGUgZWxlbWVudCdzIGNsYXNzIGF0dHJpYnV0ZS5cclxuICBmdW5jdGlvbiBhZGRDbGFzcyhlbCwgbmFtZSkge1xyXG4gIFx0aWYgKGVsLmNsYXNzTGlzdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdHZhciBjbGFzc2VzID0gc3BsaXRXb3JkcyhuYW1lKTtcclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRlbC5jbGFzc0xpc3QuYWRkKGNsYXNzZXNbaV0pO1xyXG4gIFx0XHR9XHJcbiAgXHR9IGVsc2UgaWYgKCFoYXNDbGFzcyhlbCwgbmFtZSkpIHtcclxuICBcdFx0dmFyIGNsYXNzTmFtZSA9IGdldENsYXNzKGVsKTtcclxuICBcdFx0c2V0Q2xhc3MoZWwsIChjbGFzc05hbWUgPyBjbGFzc05hbWUgKyAnICcgOiAnJykgKyBuYW1lKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbDogSFRNTEVsZW1lbnQsIG5hbWU6IFN0cmluZylcclxuICAvLyBSZW1vdmVzIGBuYW1lYCBmcm9tIHRoZSBlbGVtZW50J3MgY2xhc3MgYXR0cmlidXRlLlxyXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsLCBuYW1lKSB7XHJcbiAgXHRpZiAoZWwuY2xhc3NMaXN0ICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0ZWwuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdHNldENsYXNzKGVsLCB0cmltKCgnICcgKyBnZXRDbGFzcyhlbCkgKyAnICcpLnJlcGxhY2UoJyAnICsgbmFtZSArICcgJywgJyAnKSkpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNldENsYXNzKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogU3RyaW5nKVxyXG4gIC8vIFNldHMgdGhlIGVsZW1lbnQncyBjbGFzcy5cclxuICBmdW5jdGlvbiBzZXRDbGFzcyhlbCwgbmFtZSkge1xyXG4gIFx0aWYgKGVsLmNsYXNzTmFtZS5iYXNlVmFsID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0ZWwuY2xhc3NOYW1lID0gbmFtZTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdC8vIGluIGNhc2Ugb2YgU1ZHIGVsZW1lbnRcclxuICBcdFx0ZWwuY2xhc3NOYW1lLmJhc2VWYWwgPSBuYW1lO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldENsYXNzKGVsOiBIVE1MRWxlbWVudCk6IFN0cmluZ1xyXG4gIC8vIFJldHVybnMgdGhlIGVsZW1lbnQncyBjbGFzcy5cclxuICBmdW5jdGlvbiBnZXRDbGFzcyhlbCkge1xyXG4gIFx0Ly8gQ2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgYW4gU1ZHRWxlbWVudEluc3RhbmNlIGFuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmdFbGVtZW50IGluc3RlYWRcclxuICBcdC8vIChSZXF1aXJlZCBmb3IgbGlua2VkIFNWRyBlbGVtZW50cyBpbiBJRTExLilcclxuICBcdGlmIChlbC5jb3JyZXNwb25kaW5nRWxlbWVudCkge1xyXG4gIFx0XHRlbCA9IGVsLmNvcnJlc3BvbmRpbmdFbGVtZW50O1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGVsLmNsYXNzTmFtZS5iYXNlVmFsID09PSB1bmRlZmluZWQgPyBlbC5jbGFzc05hbWUgOiBlbC5jbGFzc05hbWUuYmFzZVZhbDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzZXRPcGFjaXR5KGVsOiBIVE1MRWxlbWVudCwgb3BhY2l0eTogTnVtYmVyKVxyXG4gIC8vIFNldCB0aGUgb3BhY2l0eSBvZiBhbiBlbGVtZW50IChpbmNsdWRpbmcgb2xkIElFIHN1cHBvcnQpLlxyXG4gIC8vIGBvcGFjaXR5YCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gYDBgIHRvIGAxYC5cclxuICBmdW5jdGlvbiBzZXRPcGFjaXR5KGVsLCB2YWx1ZSkge1xyXG4gIFx0aWYgKCdvcGFjaXR5JyBpbiBlbC5zdHlsZSkge1xyXG4gIFx0XHRlbC5zdHlsZS5vcGFjaXR5ID0gdmFsdWU7XHJcbiAgXHR9IGVsc2UgaWYgKCdmaWx0ZXInIGluIGVsLnN0eWxlKSB7XHJcbiAgXHRcdF9zZXRPcGFjaXR5SUUoZWwsIHZhbHVlKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9zZXRPcGFjaXR5SUUoZWwsIHZhbHVlKSB7XHJcbiAgXHR2YXIgZmlsdGVyID0gZmFsc2UsXHJcbiAgXHQgICAgZmlsdGVyTmFtZSA9ICdEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSc7XHJcblxyXG4gIFx0Ly8gZmlsdGVycyBjb2xsZWN0aW9uIHRocm93cyBhbiBlcnJvciBpZiB3ZSB0cnkgdG8gcmV0cmlldmUgYSBmaWx0ZXIgdGhhdCBkb2Vzbid0IGV4aXN0XHJcbiAgXHR0cnkge1xyXG4gIFx0XHRmaWx0ZXIgPSBlbC5maWx0ZXJzLml0ZW0oZmlsdGVyTmFtZSk7XHJcbiAgXHR9IGNhdGNoIChlKSB7XHJcbiAgXHRcdC8vIGRvbid0IHNldCBvcGFjaXR5IHRvIDEgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHNldCBhbiBvcGFjaXR5LFxyXG4gIFx0XHQvLyBpdCBpc24ndCBuZWVkZWQgYW5kIGJyZWFrcyB0cmFuc3BhcmVudCBwbmdzLlxyXG4gIFx0XHRpZiAodmFsdWUgPT09IDEpIHsgcmV0dXJuOyB9XHJcbiAgXHR9XHJcblxyXG4gIFx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMTAwKTtcclxuXHJcbiAgXHRpZiAoZmlsdGVyKSB7XHJcbiAgXHRcdGZpbHRlci5FbmFibGVkID0gKHZhbHVlICE9PSAxMDApO1xyXG4gIFx0XHRmaWx0ZXIuT3BhY2l0eSA9IHZhbHVlO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0ZWwuc3R5bGUuZmlsdGVyICs9ICcgcHJvZ2lkOicgKyBmaWx0ZXJOYW1lICsgJyhvcGFjaXR5PScgKyB2YWx1ZSArICcpJztcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0ZXN0UHJvcChwcm9wczogU3RyaW5nW10pOiBTdHJpbmd8ZmFsc2VcclxuICAvLyBHb2VzIHRocm91Z2ggdGhlIGFycmF5IG9mIHN0eWxlIG5hbWVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBuYW1lXHJcbiAgLy8gdGhhdCBpcyBhIHZhbGlkIHN0eWxlIG5hbWUgZm9yIGFuIGVsZW1lbnQuIElmIG5vIHN1Y2ggbmFtZSBpcyBmb3VuZCxcclxuICAvLyBpdCByZXR1cm5zIGZhbHNlLiBVc2VmdWwgZm9yIHZlbmRvci1wcmVmaXhlZCBzdHlsZXMgbGlrZSBgdHJhbnNmb3JtYC5cclxuICBmdW5jdGlvbiB0ZXN0UHJvcChwcm9wcykge1xyXG4gIFx0dmFyIHN0eWxlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0aWYgKHByb3BzW2ldIGluIHN0eWxlKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHByb3BzW2ldO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsOiBIVE1MRWxlbWVudCwgb2Zmc2V0OiBQb2ludCwgc2NhbGU/OiBOdW1iZXIpXHJcbiAgLy8gUmVzZXRzIHRoZSAzRCBDU1MgdHJhbnNmb3JtIG9mIGBlbGAgc28gaXQgaXMgdHJhbnNsYXRlZCBieSBgb2Zmc2V0YCBwaXhlbHNcclxuICAvLyBhbmQgb3B0aW9uYWxseSBzY2FsZWQgYnkgYHNjYWxlYC4gRG9lcyBub3QgaGF2ZSBhbiBlZmZlY3QgaWYgdGhlXHJcbiAgLy8gYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgM0QgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsLCBvZmZzZXQsIHNjYWxlKSB7XHJcbiAgXHR2YXIgcG9zID0gb2Zmc2V0IHx8IG5ldyBQb2ludCgwLCAwKTtcclxuXHJcbiAgXHRlbC5zdHlsZVtUUkFOU0ZPUk1dID1cclxuICBcdFx0KGllM2QgP1xyXG4gIFx0XHRcdCd0cmFuc2xhdGUoJyArIHBvcy54ICsgJ3B4LCcgKyBwb3MueSArICdweCknIDpcclxuICBcdFx0XHQndHJhbnNsYXRlM2QoJyArIHBvcy54ICsgJ3B4LCcgKyBwb3MueSArICdweCwwKScpICtcclxuICBcdFx0KHNjYWxlID8gJyBzY2FsZSgnICsgc2NhbGUgKyAnKScgOiAnJyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0UG9zaXRpb24oZWw6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjogUG9pbnQpXHJcbiAgLy8gU2V0cyB0aGUgcG9zaXRpb24gb2YgYGVsYCB0byBjb29yZGluYXRlcyBzcGVjaWZpZWQgYnkgYHBvc2l0aW9uYCxcclxuICAvLyB1c2luZyBDU1MgdHJhbnNsYXRlIG9yIHRvcC9sZWZ0IHBvc2l0aW9uaW5nIGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlclxyXG4gIC8vICh1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseSB0byBwb3NpdGlvbiBpdHMgbGF5ZXJzKS5cclxuICBmdW5jdGlvbiBzZXRQb3NpdGlvbihlbCwgcG9pbnQpIHtcclxuXHJcbiAgXHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRlbC5fbGVhZmxldF9wb3MgPSBwb2ludDtcclxuICBcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHJcbiAgXHRpZiAoYW55M2QpIHtcclxuICBcdFx0c2V0VHJhbnNmb3JtKGVsLCBwb2ludCk7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRlbC5zdHlsZS5sZWZ0ID0gcG9pbnQueCArICdweCc7XHJcbiAgXHRcdGVsLnN0eWxlLnRvcCA9IHBvaW50LnkgKyAncHgnO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFBvc2l0aW9uKGVsOiBIVE1MRWxlbWVudCk6IFBvaW50XHJcbiAgLy8gUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgb2YgYW4gZWxlbWVudCBwcmV2aW91c2x5IHBvc2l0aW9uZWQgd2l0aCBzZXRQb3NpdGlvbi5cclxuICBmdW5jdGlvbiBnZXRQb3NpdGlvbihlbCkge1xyXG4gIFx0Ly8gdGhpcyBtZXRob2QgaXMgb25seSB1c2VkIGZvciBlbGVtZW50cyBwcmV2aW91c2x5IHBvc2l0aW9uZWQgdXNpbmcgc2V0UG9zaXRpb24sXHJcbiAgXHQvLyBzbyBpdCdzIHNhZmUgdG8gY2FjaGUgdGhlIHBvc2l0aW9uIGZvciBwZXJmb3JtYW5jZVxyXG5cclxuICBcdHJldHVybiBlbC5fbGVhZmxldF9wb3MgfHwgbmV3IFBvaW50KDAsIDApO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGRpc2FibGVUZXh0U2VsZWN0aW9uKClcclxuICAvLyBQcmV2ZW50cyB0aGUgdXNlciBmcm9tIGdlbmVyYXRpbmcgYHNlbGVjdHN0YXJ0YCBET00gZXZlbnRzLCB1c3VhbGx5IGdlbmVyYXRlZFxyXG4gIC8vIHdoZW4gdGhlIHVzZXIgZHJhZ3MgdGhlIG1vdXNlIHRocm91Z2ggYSBwYWdlIHdpdGggdGV4dC4gVXNlZCBpbnRlcm5hbGx5XHJcbiAgLy8gYnkgTGVhZmxldCB0byBvdmVycmlkZSB0aGUgYmVoYXZpb3VyIG9mIGFueSBjbGljay1hbmQtZHJhZyBpbnRlcmFjdGlvbiBvblxyXG4gIC8vIHRoZSBtYXAuIEFmZmVjdHMgZHJhZyBpbnRlcmFjdGlvbnMgb24gdGhlIHdob2xlIGRvY3VtZW50LlxyXG5cclxuICAvLyBAZnVuY3Rpb24gZW5hYmxlVGV4dFNlbGVjdGlvbigpXHJcbiAgLy8gQ2FuY2VscyB0aGUgZWZmZWN0cyBvZiBhIHByZXZpb3VzIFtgTC5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uYF0oI2RvbXV0aWwtZGlzYWJsZXRleHRzZWxlY3Rpb24pLlxyXG4gIHZhciBkaXNhYmxlVGV4dFNlbGVjdGlvbjtcclxuICB2YXIgZW5hYmxlVGV4dFNlbGVjdGlvbjtcclxuICB2YXIgX3VzZXJTZWxlY3Q7XHJcbiAgaWYgKCdvbnNlbGVjdHN0YXJ0JyBpbiBkb2N1bWVudCkge1xyXG4gIFx0ZGlzYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdG9uKHdpbmRvdywgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xyXG4gIFx0fTtcclxuICBcdGVuYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdG9mZih3aW5kb3csICdzZWxlY3RzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcclxuICBcdH07XHJcbiAgfSBlbHNlIHtcclxuICBcdHZhciB1c2VyU2VsZWN0UHJvcGVydHkgPSB0ZXN0UHJvcChcclxuICBcdFx0Wyd1c2VyU2VsZWN0JywgJ1dlYmtpdFVzZXJTZWxlY3QnLCAnT1VzZXJTZWxlY3QnLCAnTW96VXNlclNlbGVjdCcsICdtc1VzZXJTZWxlY3QnXSk7XHJcblxyXG4gIFx0ZGlzYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh1c2VyU2VsZWN0UHJvcGVydHkpIHtcclxuICBcdFx0XHR2YXIgc3R5bGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XHJcbiAgXHRcdFx0X3VzZXJTZWxlY3QgPSBzdHlsZVt1c2VyU2VsZWN0UHJvcGVydHldO1xyXG4gIFx0XHRcdHN0eWxlW3VzZXJTZWxlY3RQcm9wZXJ0eV0gPSAnbm9uZSc7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcbiAgXHRlbmFibGVUZXh0U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodXNlclNlbGVjdFByb3BlcnR5KSB7XHJcbiAgXHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW3VzZXJTZWxlY3RQcm9wZXJ0eV0gPSBfdXNlclNlbGVjdDtcclxuICBcdFx0XHRfdXNlclNlbGVjdCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG4gIFx0fTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBkaXNhYmxlSW1hZ2VEcmFnKClcclxuICAvLyBBcyBbYEwuRG9tVXRpbC5kaXNhYmxlVGV4dFNlbGVjdGlvbmBdKCNkb211dGlsLWRpc2FibGV0ZXh0c2VsZWN0aW9uKSwgYnV0XHJcbiAgLy8gZm9yIGBkcmFnc3RhcnRgIERPTSBldmVudHMsIHVzdWFsbHkgZ2VuZXJhdGVkIHdoZW4gdGhlIHVzZXIgZHJhZ3MgYW4gaW1hZ2UuXHJcbiAgZnVuY3Rpb24gZGlzYWJsZUltYWdlRHJhZygpIHtcclxuICBcdG9uKHdpbmRvdywgJ2RyYWdzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBlbmFibGVJbWFnZURyYWcoKVxyXG4gIC8vIENhbmNlbHMgdGhlIGVmZmVjdHMgb2YgYSBwcmV2aW91cyBbYEwuRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnYF0oI2RvbXV0aWwtZGlzYWJsZXRleHRzZWxlY3Rpb24pLlxyXG4gIGZ1bmN0aW9uIGVuYWJsZUltYWdlRHJhZygpIHtcclxuICBcdG9mZih3aW5kb3csICdkcmFnc3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XHJcbiAgfVxyXG5cclxuICB2YXIgX291dGxpbmVFbGVtZW50LCBfb3V0bGluZVN0eWxlO1xyXG4gIC8vIEBmdW5jdGlvbiBwcmV2ZW50T3V0bGluZShlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gTWFrZXMgdGhlIFtvdXRsaW5lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1Mvb3V0bGluZSlcclxuICAvLyBvZiB0aGUgZWxlbWVudCBgZWxgIGludmlzaWJsZS4gVXNlZCBpbnRlcm5hbGx5IGJ5IExlYWZsZXQgdG8gcHJldmVudFxyXG4gIC8vIGZvY3VzYWJsZSBlbGVtZW50cyBmcm9tIGRpc3BsYXlpbmcgYW4gb3V0bGluZSB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGFcclxuICAvLyBkcmFnIGludGVyYWN0aW9uIG9uIHRoZW0uXHJcbiAgZnVuY3Rpb24gcHJldmVudE91dGxpbmUoZWxlbWVudCkge1xyXG4gIFx0d2hpbGUgKGVsZW1lbnQudGFiSW5kZXggPT09IC0xKSB7XHJcbiAgXHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgXHR9XHJcbiAgXHRpZiAoIWVsZW1lbnQuc3R5bGUpIHsgcmV0dXJuOyB9XHJcbiAgXHRyZXN0b3JlT3V0bGluZSgpO1xyXG4gIFx0X291dGxpbmVFbGVtZW50ID0gZWxlbWVudDtcclxuICBcdF9vdXRsaW5lU3R5bGUgPSBlbGVtZW50LnN0eWxlLm91dGxpbmU7XHJcbiAgXHRlbGVtZW50LnN0eWxlLm91dGxpbmUgPSAnbm9uZSc7XHJcbiAgXHRvbih3aW5kb3csICdrZXlkb3duJywgcmVzdG9yZU91dGxpbmUpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHJlc3RvcmVPdXRsaW5lKClcclxuICAvLyBDYW5jZWxzIHRoZSBlZmZlY3RzIG9mIGEgcHJldmlvdXMgW2BMLkRvbVV0aWwucHJldmVudE91dGxpbmVgXSgpLlxyXG4gIGZ1bmN0aW9uIHJlc3RvcmVPdXRsaW5lKCkge1xyXG4gIFx0aWYgKCFfb3V0bGluZUVsZW1lbnQpIHsgcmV0dXJuOyB9XHJcbiAgXHRfb3V0bGluZUVsZW1lbnQuc3R5bGUub3V0bGluZSA9IF9vdXRsaW5lU3R5bGU7XHJcbiAgXHRfb3V0bGluZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgXHRfb3V0bGluZVN0eWxlID0gdW5kZWZpbmVkO1xyXG4gIFx0b2ZmKHdpbmRvdywgJ2tleWRvd24nLCByZXN0b3JlT3V0bGluZSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0U2l6ZWRQYXJlbnROb2RlKGVsOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgLy8gRmluZHMgdGhlIGNsb3Nlc3QgcGFyZW50IG5vZGUgd2hpY2ggc2l6ZSAod2lkdGggYW5kIGhlaWdodCkgaXMgbm90IG51bGwuXHJcbiAgZnVuY3Rpb24gZ2V0U2l6ZWRQYXJlbnROb2RlKGVsZW1lbnQpIHtcclxuICBcdGRvIHtcclxuICBcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICBcdH0gd2hpbGUgKCghZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAhZWxlbWVudC5vZmZzZXRIZWlnaHQpICYmIGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpO1xyXG4gIFx0cmV0dXJuIGVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0U2NhbGUoZWw6IEhUTUxFbGVtZW50KTogT2JqZWN0XHJcbiAgLy8gQ29tcHV0ZXMgdGhlIENTUyBzY2FsZSBjdXJyZW50bHkgYXBwbGllZCBvbiB0aGUgZWxlbWVudC5cclxuICAvLyBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGB4YCBhbmQgYHlgIG1lbWJlcnMgYXMgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2NhbGVzIHJlc3BlY3RpdmVseSxcclxuICAvLyBhbmQgYGJvdW5kaW5nQ2xpZW50UmVjdGAgYXMgdGhlIHJlc3VsdCBvZiBbYGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0Qm91bmRpbmdDbGllbnRSZWN0KS5cclxuICBmdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XHJcbiAgXHR2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IC8vIFJlYWQtb25seSBpbiBvbGQgYnJvd3NlcnMuXHJcblxyXG4gIFx0cmV0dXJuIHtcclxuICBcdFx0eDogcmVjdC53aWR0aCAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSxcclxuICBcdFx0eTogcmVjdC5oZWlnaHQgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxLFxyXG4gIFx0XHRib3VuZGluZ0NsaWVudFJlY3Q6IHJlY3RcclxuICBcdH07XHJcbiAgfVxuXG4gIHZhciBEb21VdGlsID0gKHtcbiAgICBUUkFOU0ZPUk06IFRSQU5TRk9STSxcbiAgICBUUkFOU0lUSU9OOiBUUkFOU0lUSU9OLFxuICAgIFRSQU5TSVRJT05fRU5EOiBUUkFOU0lUSU9OX0VORCxcbiAgICBnZXQ6IGdldCxcbiAgICBnZXRTdHlsZTogZ2V0U3R5bGUsXG4gICAgY3JlYXRlOiBjcmVhdGUkMSxcbiAgICByZW1vdmU6IHJlbW92ZSxcbiAgICBlbXB0eTogZW1wdHksXG4gICAgdG9Gcm9udDogdG9Gcm9udCxcbiAgICB0b0JhY2s6IHRvQmFjayxcbiAgICBoYXNDbGFzczogaGFzQ2xhc3MsXG4gICAgYWRkQ2xhc3M6IGFkZENsYXNzLFxuICAgIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcyxcbiAgICBzZXRDbGFzczogc2V0Q2xhc3MsXG4gICAgZ2V0Q2xhc3M6IGdldENsYXNzLFxuICAgIHNldE9wYWNpdHk6IHNldE9wYWNpdHksXG4gICAgdGVzdFByb3A6IHRlc3RQcm9wLFxuICAgIHNldFRyYW5zZm9ybTogc2V0VHJhbnNmb3JtLFxuICAgIHNldFBvc2l0aW9uOiBzZXRQb3NpdGlvbixcbiAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb24sXG4gICAgZGlzYWJsZVRleHRTZWxlY3Rpb246IGRpc2FibGVUZXh0U2VsZWN0aW9uLFxuICAgIGVuYWJsZVRleHRTZWxlY3Rpb246IGVuYWJsZVRleHRTZWxlY3Rpb24sXG4gICAgZGlzYWJsZUltYWdlRHJhZzogZGlzYWJsZUltYWdlRHJhZyxcbiAgICBlbmFibGVJbWFnZURyYWc6IGVuYWJsZUltYWdlRHJhZyxcbiAgICBwcmV2ZW50T3V0bGluZTogcHJldmVudE91dGxpbmUsXG4gICAgcmVzdG9yZU91dGxpbmU6IHJlc3RvcmVPdXRsaW5lLFxuICAgIGdldFNpemVkUGFyZW50Tm9kZTogZ2V0U2l6ZWRQYXJlbnROb2RlLFxuICAgIGdldFNjYWxlOiBnZXRTY2FsZVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgRG9tRXZlbnRcclxuICAgKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byB3b3JrIHdpdGggdGhlIFtET00gZXZlbnRzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXZlbnQpLCB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseS5cclxuICAgKi9cclxuXHJcbiAgLy8gSW5zcGlyZWQgYnkgSm9obiBSZXNpZywgRGVhbiBFZHdhcmRzIGFuZCBZVUkgYWRkRXZlbnQgaW1wbGVtZW50YXRpb25zLlxyXG5cclxuICAvLyBAZnVuY3Rpb24gb24oZWw6IEhUTUxFbGVtZW50LCB0eXBlczogU3RyaW5nLCBmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gQWRkcyBhIGxpc3RlbmVyIGZ1bmN0aW9uIChgZm5gKSB0byBhIHBhcnRpY3VsYXIgRE9NIGV2ZW50IHR5cGUgb2YgdGhlXHJcbiAgLy8gZWxlbWVudCBgZWxgLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgY29udGV4dCBvZiB0aGUgbGlzdGVuZXJcclxuICAvLyAob2JqZWN0IHRoZSBgdGhpc2Aga2V5d29yZCB3aWxsIHBvaW50IHRvKS4gWW91IGNhbiBhbHNvIHBhc3Mgc2V2ZXJhbFxyXG4gIC8vIHNwYWNlLXNlcGFyYXRlZCB0eXBlcyAoZS5nLiBgJ2NsaWNrIGRibGNsaWNrJ2ApLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZnVuY3Rpb24gb24oZWw6IEhUTUxFbGVtZW50LCBldmVudE1hcDogT2JqZWN0LCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIC8vIEFkZHMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycywgZS5nLiBge2NsaWNrOiBvbkNsaWNrLCBtb3VzZW1vdmU6IG9uTW91c2VNb3ZlfWBcclxuICBmdW5jdGlvbiBvbihvYmosIHR5cGVzLCBmbiwgY29udGV4dCkge1xyXG5cclxuICBcdGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHtcclxuICBcdFx0XHRhZGRPbmUob2JqLCB0eXBlLCB0eXBlc1t0eXBlXSwgZm4pO1xyXG4gIFx0XHR9XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0YWRkT25lKG9iaiwgdHlwZXNbaV0sIGZuLCBjb250ZXh0KTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgdmFyIGV2ZW50c0tleSA9ICdfbGVhZmxldF9ldmVudHMnO1xyXG5cclxuICAvLyBAZnVuY3Rpb24gb2ZmKGVsOiBIVE1MRWxlbWVudCwgdHlwZXM6IFN0cmluZywgZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIC8vIFJlbW92ZXMgYSBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVyIGZ1bmN0aW9uLlxyXG4gIC8vIE5vdGUgdGhhdCBpZiB5b3UgcGFzc2VkIGEgY3VzdG9tIGNvbnRleHQgdG8gb24sIHlvdSBtdXN0IHBhc3MgdGhlIHNhbWVcclxuICAvLyBjb250ZXh0IHRvIGBvZmZgIGluIG9yZGVyIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXIuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmdW5jdGlvbiBvZmYoZWw6IEhUTUxFbGVtZW50LCBldmVudE1hcDogT2JqZWN0LCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIC8vIFJlbW92ZXMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycywgZS5nLiBge2NsaWNrOiBvbkNsaWNrLCBtb3VzZW1vdmU6IG9uTW91c2VNb3ZlfWBcclxuICBmdW5jdGlvbiBvZmYob2JqLCB0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRpZiAodHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRmb3IgKHZhciB0eXBlIGluIHR5cGVzKSB7XHJcbiAgXHRcdFx0cmVtb3ZlT25lKG9iaiwgdHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0fVxyXG4gIFx0fSBlbHNlIGlmICh0eXBlcykge1xyXG4gIFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0cmVtb3ZlT25lKG9iaiwgdHlwZXNbaV0sIGZuLCBjb250ZXh0KTtcclxuICBcdFx0fVxyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0Zm9yICh2YXIgaiBpbiBvYmpbZXZlbnRzS2V5XSkge1xyXG4gIFx0XHRcdHJlbW92ZU9uZShvYmosIGosIG9ialtldmVudHNLZXldW2pdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRkZWxldGUgb2JqW2V2ZW50c0tleV07XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBicm93c2VyRmlyZXNOYXRpdmVEYmxDbGljaygpIHtcclxuICBcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL3BvaW50ZXJldmVudHMvaXNzdWVzLzE3MVxyXG4gIFx0aWYgKHBvaW50ZXIpIHtcclxuICBcdFx0cmV0dXJuICEoZWRnZSB8fCBzYWZhcmkpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgdmFyIG1vdXNlU3Vic3QgPSB7XHJcbiAgXHRtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcclxuICBcdG1vdXNlbGVhdmU6ICdtb3VzZW91dCcsXHJcbiAgXHR3aGVlbDogISgnb253aGVlbCcgaW4gd2luZG93KSAmJiAnbW91c2V3aGVlbCdcclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBhZGRPbmUob2JqLCB0eXBlLCBmbiwgY29udGV4dCkge1xyXG4gIFx0dmFyIGlkID0gdHlwZSArIHN0YW1wKGZuKSArIChjb250ZXh0ID8gJ18nICsgc3RhbXAoY29udGV4dCkgOiAnJyk7XHJcblxyXG4gIFx0aWYgKG9ialtldmVudHNLZXldICYmIG9ialtldmVudHNLZXldW2lkXSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0cmV0dXJuIGZuLmNhbGwoY29udGV4dCB8fCBvYmosIGUgfHwgd2luZG93LmV2ZW50KTtcclxuICBcdH07XHJcblxyXG4gIFx0dmFyIG9yaWdpbmFsSGFuZGxlciA9IGhhbmRsZXI7XHJcblxyXG4gIFx0aWYgKHBvaW50ZXIgJiYgdHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XHJcbiAgXHRcdC8vIE5lZWRzIERvbUV2ZW50LlBvaW50ZXIuanNcclxuICBcdFx0YWRkUG9pbnRlckxpc3RlbmVyKG9iaiwgdHlwZSwgaGFuZGxlciwgaWQpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAodG91Y2ggJiYgKHR5cGUgPT09ICdkYmxjbGljaycpICYmICFicm93c2VyRmlyZXNOYXRpdmVEYmxDbGljaygpKSB7XHJcbiAgXHRcdGFkZERvdWJsZVRhcExpc3RlbmVyKG9iaiwgaGFuZGxlciwgaWQpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIG9iaikge1xyXG5cclxuICBcdFx0aWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JyB8fCB0eXBlID09PSAndG91Y2htb3ZlJyB8fCB0eXBlID09PSAnd2hlZWwnIHx8ICB0eXBlID09PSAnbW91c2V3aGVlbCcpIHtcclxuICBcdFx0XHRvYmouYWRkRXZlbnRMaXN0ZW5lcihtb3VzZVN1YnN0W3R5cGVdIHx8IHR5cGUsIGhhbmRsZXIsIHBhc3NpdmVFdmVudHMgPyB7cGFzc2l2ZTogZmFsc2V9IDogZmFsc2UpO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmICh0eXBlID09PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PT0gJ21vdXNlbGVhdmUnKSB7XHJcbiAgXHRcdFx0aGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdFx0XHRlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgXHRcdFx0XHRpZiAoaXNFeHRlcm5hbFRhcmdldChvYmosIGUpKSB7XHJcbiAgXHRcdFx0XHRcdG9yaWdpbmFsSGFuZGxlcihlKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9O1xyXG4gIFx0XHRcdG9iai5hZGRFdmVudExpc3RlbmVyKG1vdXNlU3Vic3RbdHlwZV0sIGhhbmRsZXIsIGZhbHNlKTtcclxuXHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgb3JpZ2luYWxIYW5kbGVyLCBmYWxzZSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHR9IGVsc2UgaWYgKCdhdHRhY2hFdmVudCcgaW4gb2JqKSB7XHJcbiAgXHRcdG9iai5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgaGFuZGxlcik7XHJcbiAgXHR9XHJcblxyXG4gIFx0b2JqW2V2ZW50c0tleV0gPSBvYmpbZXZlbnRzS2V5XSB8fCB7fTtcclxuICBcdG9ialtldmVudHNLZXldW2lkXSA9IGhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVPbmUob2JqLCB0eXBlLCBmbiwgY29udGV4dCkge1xyXG5cclxuICBcdHZhciBpZCA9IHR5cGUgKyBzdGFtcChmbikgKyAoY29udGV4dCA/ICdfJyArIHN0YW1wKGNvbnRleHQpIDogJycpLFxyXG4gIFx0ICAgIGhhbmRsZXIgPSBvYmpbZXZlbnRzS2V5XSAmJiBvYmpbZXZlbnRzS2V5XVtpZF07XHJcblxyXG4gIFx0aWYgKCFoYW5kbGVyKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0aWYgKHBvaW50ZXIgJiYgdHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XHJcbiAgXHRcdHJlbW92ZVBvaW50ZXJMaXN0ZW5lcihvYmosIHR5cGUsIGlkKTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKHRvdWNoICYmICh0eXBlID09PSAnZGJsY2xpY2snKSAmJiAhYnJvd3NlckZpcmVzTmF0aXZlRGJsQ2xpY2soKSkge1xyXG4gIFx0XHRyZW1vdmVEb3VibGVUYXBMaXN0ZW5lcihvYmosIGlkKTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBvYmopIHtcclxuXHJcbiAgXHRcdG9iai5yZW1vdmVFdmVudExpc3RlbmVyKG1vdXNlU3Vic3RbdHlwZV0gfHwgdHlwZSwgaGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAoJ2RldGFjaEV2ZW50JyBpbiBvYmopIHtcclxuICBcdFx0b2JqLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBoYW5kbGVyKTtcclxuICBcdH1cclxuXHJcbiAgXHRvYmpbZXZlbnRzS2V5XVtpZF0gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihldjogRE9NRXZlbnQpOiB0aGlzXHJcbiAgLy8gU3RvcCB0aGUgZ2l2ZW4gZXZlbnQgZnJvbSBwcm9wYWdhdGlvbiB0byBwYXJlbnQgZWxlbWVudHMuIFVzZWQgaW5zaWRlIHRoZSBsaXN0ZW5lciBmdW5jdGlvbnM6XHJcbiAgLy8gYGBganNcclxuICAvLyBMLkRvbUV2ZW50Lm9uKGRpdiwgJ2NsaWNrJywgZnVuY3Rpb24gKGV2KSB7XHJcbiAgLy8gXHRMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihldik7XHJcbiAgLy8gfSk7XHJcbiAgLy8gYGBgXHJcbiAgZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGUpIHtcclxuXHJcbiAgXHRpZiAoZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICBcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICBcdH0gZWxzZSBpZiAoZS5vcmlnaW5hbEV2ZW50KSB7ICAvLyBJbiBjYXNlIG9mIExlYWZsZXQgZXZlbnQuXHJcbiAgXHRcdGUub3JpZ2luYWxFdmVudC5fc3RvcHBlZCA9IHRydWU7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgXHR9XHJcbiAgXHRza2lwcGVkKGUpO1xyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihlbDogSFRNTEVsZW1lbnQpOiB0aGlzXHJcbiAgLy8gQWRkcyBgc3RvcFByb3BhZ2F0aW9uYCB0byB0aGUgZWxlbWVudCdzIGAnd2hlZWwnYCBldmVudHMgKHBsdXMgYnJvd3NlciB2YXJpYW50cykuXHJcbiAgZnVuY3Rpb24gZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGVsKSB7XHJcbiAgXHRhZGRPbmUoZWwsICd3aGVlbCcsIHN0b3BQcm9wYWdhdGlvbik7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihlbDogSFRNTEVsZW1lbnQpOiB0aGlzXHJcbiAgLy8gQWRkcyBgc3RvcFByb3BhZ2F0aW9uYCB0byB0aGUgZWxlbWVudCdzIGAnY2xpY2snYCwgYCdkb3VibGVjbGljaydgLFxyXG4gIC8vIGAnbW91c2Vkb3duJ2AgYW5kIGAndG91Y2hzdGFydCdgIGV2ZW50cyAocGx1cyBicm93c2VyIHZhcmlhbnRzKS5cclxuICBmdW5jdGlvbiBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihlbCkge1xyXG4gIFx0b24oZWwsICdtb3VzZWRvd24gdG91Y2hzdGFydCBkYmxjbGljaycsIHN0b3BQcm9wYWdhdGlvbik7XHJcbiAgXHRhZGRPbmUoZWwsICdjbGljaycsIGZha2VTdG9wKTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2OiBET01FdmVudCk6IHRoaXNcclxuICAvLyBQcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIERPTSBFdmVudCBgZXZgIGZyb20gaGFwcGVuaW5nIChzdWNoIGFzXHJcbiAgLy8gZm9sbG93aW5nIGEgbGluayBpbiB0aGUgaHJlZiBvZiB0aGUgYSBlbGVtZW50LCBvciBkb2luZyBhIFBPU1QgcmVxdWVzdFxyXG4gIC8vIHdpdGggcGFnZSByZWxvYWQgd2hlbiBhIGA8Zm9ybT5gIGlzIHN1Ym1pdHRlZCkuXHJcbiAgLy8gVXNlIGl0IGluc2lkZSBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAgZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZSkge1xyXG4gIFx0aWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICBcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0ZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc3RvcChldjogRE9NRXZlbnQpOiB0aGlzXHJcbiAgLy8gRG9lcyBgc3RvcFByb3BhZ2F0aW9uYCBhbmQgYHByZXZlbnREZWZhdWx0YCBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gIGZ1bmN0aW9uIHN0b3AoZSkge1xyXG4gIFx0cHJldmVudERlZmF1bHQoZSk7XHJcbiAgXHRzdG9wUHJvcGFnYXRpb24oZSk7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRNb3VzZVBvc2l0aW9uKGV2OiBET01FdmVudCwgY29udGFpbmVyPzogSFRNTEVsZW1lbnQpOiBQb2ludFxyXG4gIC8vIEdldHMgbm9ybWFsaXplZCBtb3VzZSBwb3NpdGlvbiBmcm9tIGEgRE9NIGV2ZW50IHJlbGF0aXZlIHRvIHRoZVxyXG4gIC8vIGBjb250YWluZXJgIChib3JkZXIgZXhjbHVkZWQpIG9yIHRvIHRoZSB3aG9sZSBwYWdlIGlmIG5vdCBzcGVjaWZpZWQuXHJcbiAgZnVuY3Rpb24gZ2V0TW91c2VQb3NpdGlvbihlLCBjb250YWluZXIpIHtcclxuICBcdGlmICghY29udGFpbmVyKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBzY2FsZSA9IGdldFNjYWxlKGNvbnRhaW5lciksXHJcbiAgXHQgICAgb2Zmc2V0ID0gc2NhbGUuYm91bmRpbmdDbGllbnRSZWN0OyAvLyBsZWZ0IGFuZCB0b3AgIHZhbHVlcyBhcmUgaW4gcGFnZSBzY2FsZSAobGlrZSB0aGUgZXZlbnQgY2xpZW50WC9ZKVxyXG5cclxuICBcdHJldHVybiBuZXcgUG9pbnQoXHJcbiAgXHRcdC8vIG9mZnNldC5sZWZ0L3RvcCB2YWx1ZXMgYXJlIGluIHBhZ2Ugc2NhbGUgKGxpa2UgY2xpZW50WC9ZKSxcclxuICBcdFx0Ly8gd2hlcmVhcyBjbGllbnRMZWZ0L1RvcCAoYm9yZGVyIHdpZHRoKSB2YWx1ZXMgYXJlIHRoZSBvcmlnaW5hbCB2YWx1ZXMgKGJlZm9yZSBDU1Mgc2NhbGUgYXBwbGllcykuXHJcbiAgXHRcdChlLmNsaWVudFggLSBvZmZzZXQubGVmdCkgLyBzY2FsZS54IC0gY29udGFpbmVyLmNsaWVudExlZnQsXHJcbiAgXHRcdChlLmNsaWVudFkgLSBvZmZzZXQudG9wKSAvIHNjYWxlLnkgLSBjb250YWluZXIuY2xpZW50VG9wXHJcbiAgXHQpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hyb21lIG9uIFdpbiBzY3JvbGxzIGRvdWJsZSB0aGUgcGl4ZWxzIGFzIGluIG90aGVyIHBsYXRmb3JtcyAoc2VlICM0NTM4KSxcclxuICAvLyBhbmQgRmlyZWZveCBzY3JvbGxzIGRldmljZSBwaXhlbHMsIG5vdCBDU1MgcGl4ZWxzXHJcbiAgdmFyIHdoZWVsUHhGYWN0b3IgPVxyXG4gIFx0KHdpbiAmJiBjaHJvbWUpID8gMiAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDpcclxuICBcdGdlY2tvID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxO1xyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0V2hlZWxEZWx0YShldjogRE9NRXZlbnQpOiBOdW1iZXJcclxuICAvLyBHZXRzIG5vcm1hbGl6ZWQgd2hlZWwgZGVsdGEgZnJvbSBhIHdoZWVsIERPTSBldmVudCwgaW4gdmVydGljYWxcclxuICAvLyBwaXhlbHMgc2Nyb2xsZWQgKG5lZ2F0aXZlIGlmIHNjcm9sbGluZyBkb3duKS5cclxuICAvLyBFdmVudHMgZnJvbSBwb2ludGluZyBkZXZpY2VzIHdpdGhvdXQgcHJlY2lzZSBzY3JvbGxpbmcgYXJlIG1hcHBlZCB0b1xyXG4gIC8vIGEgYmVzdCBndWVzcyBvZiA2MCBwaXhlbHMuXHJcbiAgZnVuY3Rpb24gZ2V0V2hlZWxEZWx0YShlKSB7XHJcbiAgXHRyZXR1cm4gKGVkZ2UpID8gZS53aGVlbERlbHRhWSAvIDIgOiAvLyBEb24ndCB0cnVzdCB3aW5kb3ctZ2VvbWV0cnktYmFzZWQgZGVsdGFcclxuICBcdCAgICAgICAoZS5kZWx0YVkgJiYgZS5kZWx0YU1vZGUgPT09IDApID8gLWUuZGVsdGFZIC8gd2hlZWxQeEZhY3RvciA6IC8vIFBpeGVsc1xyXG4gIFx0ICAgICAgIChlLmRlbHRhWSAmJiBlLmRlbHRhTW9kZSA9PT0gMSkgPyAtZS5kZWx0YVkgKiAyMCA6IC8vIExpbmVzXHJcbiAgXHQgICAgICAgKGUuZGVsdGFZICYmIGUuZGVsdGFNb2RlID09PSAyKSA/IC1lLmRlbHRhWSAqIDYwIDogLy8gUGFnZXNcclxuICBcdCAgICAgICAoZS5kZWx0YVggfHwgZS5kZWx0YVopID8gMCA6XHQvLyBTa2lwIGhvcml6b250YWwvZGVwdGggd2hlZWwgZXZlbnRzXHJcbiAgXHQgICAgICAgZS53aGVlbERlbHRhID8gKGUud2hlZWxEZWx0YVkgfHwgZS53aGVlbERlbHRhKSAvIDIgOiAvLyBMZWdhY3kgSUUgcGl4ZWxzXHJcbiAgXHQgICAgICAgKGUuZGV0YWlsICYmIE1hdGguYWJzKGUuZGV0YWlsKSA8IDMyNzY1KSA/IC1lLmRldGFpbCAqIDIwIDogLy8gTGVnYWN5IE1veiBsaW5lc1xyXG4gIFx0ICAgICAgIGUuZGV0YWlsID8gZS5kZXRhaWwgLyAtMzI3NjUgKiA2MCA6IC8vIExlZ2FjeSBNb3ogcGFnZXNcclxuICBcdCAgICAgICAwO1xyXG4gIH1cclxuXHJcbiAgdmFyIHNraXBFdmVudHMgPSB7fTtcclxuXHJcbiAgZnVuY3Rpb24gZmFrZVN0b3AoZSkge1xyXG4gIFx0Ly8gZmFrZXMgc3RvcFByb3BhZ2F0aW9uIGJ5IHNldHRpbmcgYSBzcGVjaWFsIGV2ZW50IGZsYWcsIGNoZWNrZWQvcmVzZXQgd2l0aCBza2lwcGVkKGUpXHJcbiAgXHRza2lwRXZlbnRzW2UudHlwZV0gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2tpcHBlZChlKSB7XHJcbiAgXHR2YXIgZXZlbnRzID0gc2tpcEV2ZW50c1tlLnR5cGVdO1xyXG4gIFx0Ly8gcmVzZXQgd2hlbiBjaGVja2luZywgYXMgaXQncyBvbmx5IHVzZWQgaW4gbWFwIGNvbnRhaW5lciBhbmQgcHJvcGFnYXRlcyBvdXRzaWRlIG9mIHRoZSBtYXBcclxuICBcdHNraXBFdmVudHNbZS50eXBlXSA9IGZhbHNlO1xyXG4gIFx0cmV0dXJuIGV2ZW50cztcclxuICB9XHJcblxyXG4gIC8vIGNoZWNrIGlmIGVsZW1lbnQgcmVhbGx5IGxlZnQvZW50ZXJlZCB0aGUgZXZlbnQgdGFyZ2V0IChmb3IgbW91c2VlbnRlci9tb3VzZWxlYXZlKVxyXG4gIGZ1bmN0aW9uIGlzRXh0ZXJuYWxUYXJnZXQoZWwsIGUpIHtcclxuXHJcbiAgXHR2YXIgcmVsYXRlZCA9IGUucmVsYXRlZFRhcmdldDtcclxuXHJcbiAgXHRpZiAoIXJlbGF0ZWQpIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgXHR0cnkge1xyXG4gIFx0XHR3aGlsZSAocmVsYXRlZCAmJiAocmVsYXRlZCAhPT0gZWwpKSB7XHJcbiAgXHRcdFx0cmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTtcclxuICBcdFx0fVxyXG4gIFx0fSBjYXRjaCAoZXJyKSB7XHJcbiAgXHRcdHJldHVybiBmYWxzZTtcclxuICBcdH1cclxuICBcdHJldHVybiAocmVsYXRlZCAhPT0gZWwpO1xyXG4gIH1cblxuICB2YXIgRG9tRXZlbnQgPSAoe1xuICAgIG9uOiBvbixcbiAgICBvZmY6IG9mZixcbiAgICBzdG9wUHJvcGFnYXRpb246IHN0b3BQcm9wYWdhdGlvbixcbiAgICBkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246IGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbixcbiAgICBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjogZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24sXG4gICAgcHJldmVudERlZmF1bHQ6IHByZXZlbnREZWZhdWx0LFxuICAgIHN0b3A6IHN0b3AsXG4gICAgZ2V0TW91c2VQb3NpdGlvbjogZ2V0TW91c2VQb3NpdGlvbixcbiAgICBnZXRXaGVlbERlbHRhOiBnZXRXaGVlbERlbHRhLFxuICAgIGZha2VTdG9wOiBmYWtlU3RvcCxcbiAgICBza2lwcGVkOiBza2lwcGVkLFxuICAgIGlzRXh0ZXJuYWxUYXJnZXQ6IGlzRXh0ZXJuYWxUYXJnZXQsXG4gICAgYWRkTGlzdGVuZXI6IG9uLFxuICAgIHJlbW92ZUxpc3RlbmVyOiBvZmZcbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIFBvc0FuaW1hdGlvblxuICAgKiBAYWthIEwuUG9zQW5pbWF0aW9uXG4gICAqIEBpbmhlcml0cyBFdmVudGVkXG4gICAqIFVzZWQgaW50ZXJuYWxseSBmb3IgcGFubmluZyBhbmltYXRpb25zLCB1dGlsaXppbmcgQ1NTMyBUcmFuc2l0aW9ucyBmb3IgbW9kZXJuIGJyb3dzZXJzIGFuZCBhIHRpbWVyIGZhbGxiYWNrIGZvciBJRTYtOS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIGZ4ID0gbmV3IEwuUG9zQW5pbWF0aW9uKCk7XG4gICAqIGZ4LnJ1bihlbCwgWzMwMCwgNTAwXSwgMC41KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBMLlBvc0FuaW1hdGlvbigpXG4gICAqIENyZWF0ZXMgYSBgUG9zQW5pbWF0aW9uYCBvYmplY3QuXG4gICAqXG4gICAqL1xuXG4gIHZhciBQb3NBbmltYXRpb24gPSBFdmVudGVkLmV4dGVuZCh7XG5cbiAgXHQvLyBAbWV0aG9kIHJ1bihlbDogSFRNTEVsZW1lbnQsIG5ld1BvczogUG9pbnQsIGR1cmF0aW9uPzogTnVtYmVyLCBlYXNlTGluZWFyaXR5PzogTnVtYmVyKVxuICBcdC8vIFJ1biBhbiBhbmltYXRpb24gb2YgYSBnaXZlbiBlbGVtZW50IHRvIGEgbmV3IHBvc2l0aW9uLCBvcHRpb25hbGx5IHNldHRpbmdcbiAgXHQvLyBkdXJhdGlvbiBpbiBzZWNvbmRzIChgMC4yNWAgYnkgZGVmYXVsdCkgYW5kIGVhc2luZyBsaW5lYXJpdHkgZmFjdG9yICgzcmRcbiAgXHQvLyBhcmd1bWVudCBvZiB0aGUgW2N1YmljIGJlemllciBjdXJ2ZV0oaHR0cDovL2N1YmljLWJlemllci5jb20vIzAsMCwuNSwxKSxcbiAgXHQvLyBgMC41YCBieSBkZWZhdWx0KS5cbiAgXHRydW46IGZ1bmN0aW9uIChlbCwgbmV3UG9zLCBkdXJhdGlvbiwgZWFzZUxpbmVhcml0eSkge1xuICBcdFx0dGhpcy5zdG9wKCk7XG5cbiAgXHRcdHRoaXMuX2VsID0gZWw7XG4gIFx0XHR0aGlzLl9pblByb2dyZXNzID0gdHJ1ZTtcbiAgXHRcdHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb24gfHwgMC4yNTtcbiAgXHRcdHRoaXMuX2Vhc2VPdXRQb3dlciA9IDEgLyBNYXRoLm1heChlYXNlTGluZWFyaXR5IHx8IDAuNSwgMC4yKTtcblxuICBcdFx0dGhpcy5fc3RhcnRQb3MgPSBnZXRQb3NpdGlvbihlbCk7XG4gIFx0XHR0aGlzLl9vZmZzZXQgPSBuZXdQb3Muc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpO1xuICBcdFx0dGhpcy5fc3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XG5cbiAgXHRcdC8vIEBldmVudCBzdGFydDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHNcbiAgXHRcdHRoaXMuZmlyZSgnc3RhcnQnKTtcblxuICBcdFx0dGhpcy5fYW5pbWF0ZSgpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHN0b3AoKVxuICBcdC8vIFN0b3BzIHRoZSBhbmltYXRpb24gKGlmIGN1cnJlbnRseSBydW5uaW5nKS5cbiAgXHRzdG9wOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX2luUHJvZ3Jlc3MpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX3N0ZXAodHJ1ZSk7XG4gIFx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuICBcdH0sXG5cbiAgXHRfYW5pbWF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gYW5pbWF0aW9uIGxvb3BcbiAgXHRcdHRoaXMuX2FuaW1JZCA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fYW5pbWF0ZSwgdGhpcyk7XG4gIFx0XHR0aGlzLl9zdGVwKCk7XG4gIFx0fSxcblxuICBcdF9zdGVwOiBmdW5jdGlvbiAocm91bmQpIHtcbiAgXHRcdHZhciBlbGFwc2VkID0gKCtuZXcgRGF0ZSgpKSAtIHRoaXMuX3N0YXJ0VGltZSxcbiAgXHRcdCAgICBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uICogMTAwMDtcblxuICBcdFx0aWYgKGVsYXBzZWQgPCBkdXJhdGlvbikge1xuICBcdFx0XHR0aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KGVsYXBzZWQgLyBkdXJhdGlvbiksIHJvdW5kKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX3J1bkZyYW1lKDEpO1xuICBcdFx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcnVuRnJhbWU6IGZ1bmN0aW9uIChwcm9ncmVzcywgcm91bmQpIHtcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9zdGFydFBvcy5hZGQodGhpcy5fb2Zmc2V0Lm11bHRpcGx5QnkocHJvZ3Jlc3MpKTtcbiAgXHRcdGlmIChyb3VuZCkge1xuICBcdFx0XHRwb3MuX3JvdW5kKCk7XG4gIFx0XHR9XG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9lbCwgcG9zKTtcblxuICBcdFx0Ly8gQGV2ZW50IHN0ZXA6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCBjb250aW51b3VzbHkgZHVyaW5nIHRoZSBhbmltYXRpb24uXG4gIFx0XHR0aGlzLmZpcmUoJ3N0ZXAnKTtcbiAgXHR9LFxuXG4gIFx0X2NvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbUlkKTtcblxuICBcdFx0dGhpcy5faW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBcdFx0Ly8gQGV2ZW50IGVuZDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLlxuICBcdFx0dGhpcy5maXJlKCdlbmQnKTtcbiAgXHR9LFxuXG4gIFx0X2Vhc2VPdXQ6IGZ1bmN0aW9uICh0KSB7XG4gIFx0XHRyZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCB0aGlzLl9lYXNlT3V0UG93ZXIpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcclxuICAgKiBAY2xhc3MgTWFwXHJcbiAgICogQGFrYSBMLk1hcFxyXG4gICAqIEBpbmhlcml0cyBFdmVudGVkXHJcbiAgICpcclxuICAgKiBUaGUgY2VudHJhbCBjbGFzcyBvZiB0aGUgQVBJIOKAlCBpdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG1hcCBvbiBhIHBhZ2UgYW5kIG1hbmlwdWxhdGUgaXQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiAvLyBpbml0aWFsaXplIHRoZSBtYXAgb24gdGhlIFwibWFwXCIgZGl2IHdpdGggYSBnaXZlbiBjZW50ZXIgYW5kIHpvb21cclxuICAgKiB2YXIgbWFwID0gTC5tYXAoJ21hcCcsIHtcclxuICAgKiBcdGNlbnRlcjogWzUxLjUwNSwgLTAuMDldLFxyXG4gICAqIFx0em9vbTogMTNcclxuICAgKiB9KTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqL1xyXG5cclxuICB2YXIgTWFwID0gRXZlbnRlZC5leHRlbmQoe1xyXG5cclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQHNlY3Rpb24gTWFwIFN0YXRlIE9wdGlvbnNcclxuICBcdFx0Ly8gQG9wdGlvbiBjcnM6IENSUyA9IEwuQ1JTLkVQU0czODU3XHJcbiAgXHRcdC8vIFRoZSBbQ29vcmRpbmF0ZSBSZWZlcmVuY2UgU3lzdGVtXSgjY3JzKSB0byB1c2UuIERvbid0IGNoYW5nZSB0aGlzIGlmIHlvdSdyZSBub3RcclxuICBcdFx0Ly8gc3VyZSB3aGF0IGl0IG1lYW5zLlxyXG4gIFx0XHRjcnM6IEVQU0czODU3LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjZW50ZXI6IExhdExuZyA9IHVuZGVmaW5lZFxyXG4gIFx0XHQvLyBJbml0aWFsIGdlb2dyYXBoaWMgY2VudGVyIG9mIHRoZSBtYXBcclxuICBcdFx0Y2VudGVyOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb206IE51bWJlciA9IHVuZGVmaW5lZFxyXG4gIFx0XHQvLyBJbml0aWFsIG1hcCB6b29tIGxldmVsXHJcbiAgXHRcdHpvb206IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWluWm9vbTogTnVtYmVyID0gKlxyXG4gIFx0XHQvLyBNaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC5cclxuICBcdFx0Ly8gSWYgbm90IHNwZWNpZmllZCBhbmQgYXQgbGVhc3Qgb25lIGBHcmlkTGF5ZXJgIG9yIGBUaWxlTGF5ZXJgIGlzIGluIHRoZSBtYXAsXHJcbiAgXHRcdC8vIHRoZSBsb3dlc3Qgb2YgdGhlaXIgYG1pblpvb21gIG9wdGlvbnMgd2lsbCBiZSB1c2VkIGluc3RlYWQuXHJcbiAgXHRcdG1pblpvb206IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4Wm9vbTogTnVtYmVyID0gKlxyXG4gIFx0XHQvLyBNYXhpbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC5cclxuICBcdFx0Ly8gSWYgbm90IHNwZWNpZmllZCBhbmQgYXQgbGVhc3Qgb25lIGBHcmlkTGF5ZXJgIG9yIGBUaWxlTGF5ZXJgIGlzIGluIHRoZSBtYXAsXHJcbiAgXHRcdC8vIHRoZSBoaWdoZXN0IG9mIHRoZWlyIGBtYXhab29tYCBvcHRpb25zIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLlxyXG4gIFx0XHRtYXhab29tOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGxheWVyczogTGF5ZXJbXSA9IFtdXHJcbiAgXHRcdC8vIEFycmF5IG9mIGxheWVycyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hcCBpbml0aWFsbHlcclxuICBcdFx0bGF5ZXJzOiBbXSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4Qm91bmRzOiBMYXRMbmdCb3VuZHMgPSBudWxsXHJcbiAgXHRcdC8vIFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgbWFwIHJlc3RyaWN0cyB0aGUgdmlldyB0byB0aGUgZ2l2ZW5cclxuICBcdFx0Ly8gZ2VvZ3JhcGhpY2FsIGJvdW5kcywgYm91bmNpbmcgdGhlIHVzZXIgYmFjayBpZiB0aGUgdXNlciB0cmllcyB0byBwYW5cclxuICBcdFx0Ly8gb3V0c2lkZSB0aGUgdmlldy4gVG8gc2V0IHRoZSByZXN0cmljdGlvbiBkeW5hbWljYWxseSwgdXNlXHJcbiAgXHRcdC8vIFtgc2V0TWF4Qm91bmRzYF0oI21hcC1zZXRtYXhib3VuZHMpIG1ldGhvZC5cclxuICBcdFx0bWF4Qm91bmRzOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJlbmRlcmVyOiBSZW5kZXJlciA9ICpcclxuICBcdFx0Ly8gVGhlIGRlZmF1bHQgbWV0aG9kIGZvciBkcmF3aW5nIHZlY3RvciBsYXllcnMgb24gdGhlIG1hcC4gYEwuU1ZHYFxyXG4gIFx0XHQvLyBvciBgTC5DYW52YXNgIGJ5IGRlZmF1bHQgZGVwZW5kaW5nIG9uIGJyb3dzZXIgc3VwcG9ydC5cclxuICBcdFx0cmVuZGVyZXI6IHVuZGVmaW5lZCxcclxuXHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBBbmltYXRpb24gT3B0aW9uc1xyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21BbmltYXRpb246IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIG1hcCB6b29tIGFuaW1hdGlvbiBpcyBlbmFibGVkLiBCeSBkZWZhdWx0IGl0J3MgZW5hYmxlZFxyXG4gIFx0XHQvLyBpbiBhbGwgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IENTUzMgVHJhbnNpdGlvbnMgZXhjZXB0IEFuZHJvaWQuXHJcbiAgXHRcdHpvb21BbmltYXRpb246IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21BbmltYXRpb25UaHJlc2hvbGQ6IE51bWJlciA9IDRcclxuICBcdFx0Ly8gV29uJ3QgYW5pbWF0ZSB6b29tIGlmIHRoZSB6b29tIGRpZmZlcmVuY2UgZXhjZWVkcyB0aGlzIHZhbHVlLlxyXG4gIFx0XHR6b29tQW5pbWF0aW9uVGhyZXNob2xkOiA0LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBmYWRlQW5pbWF0aW9uOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB0aWxlIGZhZGUgYW5pbWF0aW9uIGlzIGVuYWJsZWQuIEJ5IGRlZmF1bHQgaXQncyBlbmFibGVkXHJcbiAgXHRcdC8vIGluIGFsbCBicm93c2VycyB0aGF0IHN1cHBvcnQgQ1NTMyBUcmFuc2l0aW9ucyBleGNlcHQgQW5kcm9pZC5cclxuICBcdFx0ZmFkZUFuaW1hdGlvbjogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWFya2VyWm9vbUFuaW1hdGlvbjogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciBtYXJrZXJzIGFuaW1hdGUgdGhlaXIgem9vbSB3aXRoIHRoZSB6b29tIGFuaW1hdGlvbiwgaWYgZGlzYWJsZWRcclxuICBcdFx0Ly8gdGhleSB3aWxsIGRpc2FwcGVhciBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgYW5pbWF0aW9uLiBCeSBkZWZhdWx0IGl0J3NcclxuICBcdFx0Ly8gZW5hYmxlZCBpbiBhbGwgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IENTUzMgVHJhbnNpdGlvbnMgZXhjZXB0IEFuZHJvaWQuXHJcbiAgXHRcdG1hcmtlclpvb21BbmltYXRpb246IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHRyYW5zZm9ybTNETGltaXQ6IE51bWJlciA9IDJeMjNcclxuICBcdFx0Ly8gRGVmaW5lcyB0aGUgbWF4aW11bSBzaXplIG9mIGEgQ1NTIHRyYW5zbGF0aW9uIHRyYW5zZm9ybS4gVGhlIGRlZmF1bHRcclxuICBcdFx0Ly8gdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIHVubGVzcyBhIHdlYiBicm93c2VyIHBvc2l0aW9ucyBsYXllcnMgaW5cclxuICBcdFx0Ly8gdGhlIHdyb25nIHBsYWNlIGFmdGVyIGRvaW5nIGEgbGFyZ2UgYHBhbkJ5YC5cclxuICBcdFx0dHJhbnNmb3JtM0RMaW1pdDogODM4ODYwOCwgLy8gUHJlY2lzaW9uIGxpbWl0IG9mIGEgMzItYml0IGZsb2F0XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbVNuYXA6IE51bWJlciA9IDFcclxuICBcdFx0Ly8gRm9yY2VzIHRoZSBtYXAncyB6b29tIGxldmVsIHRvIGFsd2F5cyBiZSBhIG11bHRpcGxlIG9mIHRoaXMsIHBhcnRpY3VsYXJseVxyXG4gIFx0XHQvLyByaWdodCBhZnRlciBhIFtgZml0Qm91bmRzKClgXSgjbWFwLWZpdGJvdW5kcykgb3IgYSBwaW5jaC16b29tLlxyXG4gIFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgem9vbSBsZXZlbCBzbmFwcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyOyBsb3dlciB2YWx1ZXNcclxuICBcdFx0Ly8gKGUuZy4gYDAuNWAgb3IgYDAuMWApIGFsbG93IGZvciBncmVhdGVyIGdyYW51bGFyaXR5LiBBIHZhbHVlIG9mIGAwYFxyXG4gIFx0XHQvLyBtZWFucyB0aGUgem9vbSBsZXZlbCB3aWxsIG5vdCBiZSBzbmFwcGVkIGFmdGVyIGBmaXRCb3VuZHNgIG9yIGEgcGluY2gtem9vbS5cclxuICBcdFx0em9vbVNuYXA6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21EZWx0YTogTnVtYmVyID0gMVxyXG4gIFx0XHQvLyBDb250cm9scyBob3cgbXVjaCB0aGUgbWFwJ3Mgem9vbSBsZXZlbCB3aWxsIGNoYW5nZSBhZnRlciBhXHJcbiAgXHRcdC8vIFtgem9vbUluKClgXSgjbWFwLXpvb21pbiksIFtgem9vbU91dCgpYF0oI21hcC16b29tb3V0KSwgcHJlc3NpbmcgYCtgXHJcbiAgXHRcdC8vIG9yIGAtYCBvbiB0aGUga2V5Ym9hcmQsIG9yIHVzaW5nIHRoZSBbem9vbSBjb250cm9sc10oI2NvbnRyb2wtem9vbSkuXHJcbiAgXHRcdC8vIFZhbHVlcyBzbWFsbGVyIHRoYW4gYDFgIChlLmcuIGAwLjVgKSBhbGxvdyBmb3IgZ3JlYXRlciBncmFudWxhcml0eS5cclxuICBcdFx0em9vbURlbHRhOiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB0cmFja1Jlc2l6ZTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFwIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBicm93c2VyIHdpbmRvdyByZXNpemUgdG8gdXBkYXRlIGl0c2VsZi5cclxuICBcdFx0dHJhY2tSZXNpemU6IHRydWVcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGlkLCBvcHRpb25zKSB7IC8vIChIVE1MRWxlbWVudCBvciBTdHJpbmcsIE9iamVjdClcclxuICBcdFx0b3B0aW9ucyA9IHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHQvLyBNYWtlIHN1cmUgdG8gYXNzaWduIGludGVybmFsIGZsYWdzIGF0IHRoZSBiZWdpbm5pbmcsXHJcbiAgXHRcdC8vIHRvIGF2b2lkIGluY29uc2lzdGVudCBzdGF0ZSBpbiBzb21lIGVkZ2UgY2FzZXMuXHJcbiAgXHRcdHRoaXMuX2hhbmRsZXJzID0gW107XHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IHt9O1xyXG4gIFx0XHR0aGlzLl96b29tQm91bmRMYXllcnMgPSB7fTtcclxuICBcdFx0dGhpcy5fc2l6ZUNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICBcdFx0dGhpcy5faW5pdENvbnRhaW5lcihpZCk7XHJcbiAgXHRcdHRoaXMuX2luaXRMYXlvdXQoKTtcclxuXHJcbiAgXHRcdC8vIGhhY2sgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzE5ODBcclxuICBcdFx0dGhpcy5fb25SZXNpemUgPSBiaW5kKHRoaXMuX29uUmVzaXplLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2luaXRFdmVudHMoKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm1heEJvdW5kcykge1xyXG4gIFx0XHRcdHRoaXMuc2V0TWF4Qm91bmRzKG9wdGlvbnMubWF4Qm91bmRzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMuem9vbSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fem9vbSA9IHRoaXMuX2xpbWl0Wm9vbShvcHRpb25zLnpvb20pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5jZW50ZXIgJiYgb3B0aW9ucy56b29tICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR0aGlzLnNldFZpZXcodG9MYXRMbmcob3B0aW9ucy5jZW50ZXIpLCBvcHRpb25zLnpvb20sIHtyZXNldDogdHJ1ZX0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLmNhbGxJbml0SG9va3MoKTtcclxuXHJcbiAgXHRcdC8vIGRvbid0IGFuaW1hdGUgb24gYnJvd3NlcnMgd2l0aG91dCBoYXJkd2FyZS1hY2NlbGVyYXRlZCB0cmFuc2l0aW9ucyBvciBvbGQgQW5kcm9pZC9PcGVyYVxyXG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSBUUkFOU0lUSU9OICYmIGFueTNkICYmICFtb2JpbGVPcGVyYSAmJlxyXG4gIFx0XHRcdFx0dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb247XHJcblxyXG4gIFx0XHQvLyB6b29tIHRyYW5zaXRpb25zIHJ1biB3aXRoIHRoZSBzYW1lIGR1cmF0aW9uIGZvciBhbGwgbGF5ZXJzLCBzbyBpZiBvbmUgb2YgdHJhbnNpdGlvbmVuZCBldmVudHNcclxuICBcdFx0Ly8gaGFwcGVucyBhZnRlciBzdGFydGluZyB6b29tIGFuaW1hdGlvbiAocHJvcGFnYXRpbmcgdG8gdGhlIG1hcCBwYW5lKSwgd2Uga25vdyB0aGF0IGl0IGVuZGVkIGdsb2JhbGx5XHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcclxuICBcdFx0XHR0aGlzLl9jcmVhdGVBbmltUHJveHkoKTtcclxuICBcdFx0XHRvbih0aGlzLl9wcm94eSwgVFJBTlNJVElPTl9FTkQsIHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2FkZExheWVycyh0aGlzLm9wdGlvbnMubGF5ZXJzKTtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE1ldGhvZHMgZm9yIG1vZGlmeWluZyBtYXAgc3RhdGVcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFZpZXcoY2VudGVyOiBMYXRMbmcsIHpvb206IE51bWJlciwgb3B0aW9ucz86IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB2aWV3IG9mIHRoZSBtYXAgKGdlb2dyYXBoaWNhbCBjZW50ZXIgYW5kIHpvb20pIHdpdGggdGhlIGdpdmVuXHJcbiAgXHQvLyBhbmltYXRpb24gb3B0aW9ucy5cclxuICBcdHNldFZpZXc6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdHpvb20gPSB6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLl96b29tIDogdGhpcy5fbGltaXRab29tKHpvb20pO1xyXG4gIFx0XHRjZW50ZXIgPSB0aGlzLl9saW1pdENlbnRlcih0b0xhdExuZyhjZW50ZXIpLCB6b29tLCB0aGlzLm9wdGlvbnMubWF4Qm91bmRzKTtcclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIFx0XHR0aGlzLl9zdG9wKCk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkICYmICFvcHRpb25zLnJlc2V0ICYmIG9wdGlvbnMgIT09IHRydWUpIHtcclxuXHJcbiAgXHRcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0XHRvcHRpb25zLnpvb20gPSBleHRlbmQoe2FuaW1hdGU6IG9wdGlvbnMuYW5pbWF0ZX0sIG9wdGlvbnMuem9vbSk7XHJcbiAgXHRcdFx0XHRvcHRpb25zLnBhbiA9IGV4dGVuZCh7YW5pbWF0ZTogb3B0aW9ucy5hbmltYXRlLCBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbn0sIG9wdGlvbnMucGFuKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdC8vIHRyeSBhbmltYXRpbmcgcGFuIG9yIHpvb21cclxuICBcdFx0XHR2YXIgbW92ZWQgPSAodGhpcy5fem9vbSAhPT0gem9vbSkgP1xyXG4gIFx0XHRcdFx0dGhpcy5fdHJ5QW5pbWF0ZWRab29tICYmIHRoaXMuX3RyeUFuaW1hdGVkWm9vbShjZW50ZXIsIHpvb20sIG9wdGlvbnMuem9vbSkgOlxyXG4gIFx0XHRcdFx0dGhpcy5fdHJ5QW5pbWF0ZWRQYW4oY2VudGVyLCBvcHRpb25zLnBhbik7XHJcblxyXG4gIFx0XHRcdGlmIChtb3ZlZCkge1xyXG4gIFx0XHRcdFx0Ly8gcHJldmVudCByZXNpemUgaGFuZGxlciBjYWxsLCB0aGUgdmlldyB3aWxsIHJlZnJlc2ggYWZ0ZXIgYW5pbWF0aW9uIGFueXdheVxyXG4gIFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lcik7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGFuaW1hdGlvbiBkaWRuJ3Qgc3RhcnQsIGp1c3QgcmVzZXQgdGhlIG1hcCB2aWV3XHJcbiAgXHRcdHRoaXMuX3Jlc2V0VmlldyhjZW50ZXIsIHpvb20pO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0Wm9vbSh6b29tOiBOdW1iZXIsIG9wdGlvbnM/OiBab29tL3BhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgem9vbSBvZiB0aGUgbWFwLlxyXG4gIFx0c2V0Wm9vbTogZnVuY3Rpb24gKHpvb20sIG9wdGlvbnMpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aGlzLl96b29tID0gem9vbTtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksIHpvb20sIHt6b29tOiBvcHRpb25zfSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgem9vbUluKGRlbHRhPzogTnVtYmVyLCBvcHRpb25zPzogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gSW5jcmVhc2VzIHRoZSB6b29tIG9mIHRoZSBtYXAgYnkgYGRlbHRhYCAoW2B6b29tRGVsdGFgXSgjbWFwLXpvb21kZWx0YSkgYnkgZGVmYXVsdCkuXHJcbiAgXHR6b29tSW46IGZ1bmN0aW9uIChkZWx0YSwgb3B0aW9ucykge1xyXG4gIFx0XHRkZWx0YSA9IGRlbHRhIHx8IChhbnkzZCA/IHRoaXMub3B0aW9ucy56b29tRGVsdGEgOiAxKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tICsgZGVsdGEsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHpvb21PdXQoZGVsdGE/OiBOdW1iZXIsIG9wdGlvbnM/OiBab29tIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBEZWNyZWFzZXMgdGhlIHpvb20gb2YgdGhlIG1hcCBieSBgZGVsdGFgIChbYHpvb21EZWx0YWBdKCNtYXAtem9vbWRlbHRhKSBieSBkZWZhdWx0KS5cclxuICBcdHpvb21PdXQ6IGZ1bmN0aW9uIChkZWx0YSwgb3B0aW9ucykge1xyXG4gIFx0XHRkZWx0YSA9IGRlbHRhIHx8IChhbnkzZCA/IHRoaXMub3B0aW9ucy56b29tRGVsdGEgOiAxKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tIC0gZGVsdGEsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpvb21Bcm91bmQobGF0bG5nOiBMYXRMbmcsIHpvb206IE51bWJlciwgb3B0aW9uczogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gWm9vbXMgdGhlIG1hcCB3aGlsZSBrZWVwaW5nIGEgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBwb2ludCBvbiB0aGUgbWFwXHJcbiAgXHQvLyBzdGF0aW9uYXJ5IChlLmcuIHVzZWQgaW50ZXJuYWxseSBmb3Igc2Nyb2xsIHpvb20gYW5kIGRvdWJsZS1jbGljayB6b29tKS5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRab29tQXJvdW5kKG9mZnNldDogUG9pbnQsIHpvb206IE51bWJlciwgb3B0aW9uczogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gWm9vbXMgdGhlIG1hcCB3aGlsZSBrZWVwaW5nIGEgc3BlY2lmaWVkIHBpeGVsIG9uIHRoZSBtYXAgKHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIpIHN0YXRpb25hcnkuXHJcbiAgXHRzZXRab29tQXJvdW5kOiBmdW5jdGlvbiAobGF0bG5nLCB6b29tLCBvcHRpb25zKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuZ2V0Wm9vbVNjYWxlKHpvb20pLFxyXG4gIFx0XHQgICAgdmlld0hhbGYgPSB0aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxcclxuICBcdFx0ICAgIGNvbnRhaW5lclBvaW50ID0gbGF0bG5nIGluc3RhbmNlb2YgUG9pbnQgPyBsYXRsbmcgOiB0aGlzLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQobGF0bG5nKSxcclxuXHJcbiAgXHRcdCAgICBjZW50ZXJPZmZzZXQgPSBjb250YWluZXJQb2ludC5zdWJ0cmFjdCh2aWV3SGFsZikubXVsdGlwbHlCeSgxIC0gMSAvIHNjYWxlKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IHRoaXMuY29udGFpbmVyUG9pbnRUb0xhdExuZyh2aWV3SGFsZi5hZGQoY2VudGVyT2Zmc2V0KSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KG5ld0NlbnRlciwgem9vbSwge3pvb206IG9wdGlvbnN9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldEJvdW5kc0NlbnRlclpvb206IGZ1bmN0aW9uIChib3VuZHMsIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gIFx0XHRib3VuZHMgPSBib3VuZHMuZ2V0Qm91bmRzID8gYm91bmRzLmdldEJvdW5kcygpIDogdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdHZhciBwYWRkaW5nVEwgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ1RvcExlZnQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ0JvdHRvbVJpZ2h0IHx8IG9wdGlvbnMucGFkZGluZyB8fCBbMCwgMF0pLFxyXG5cclxuICBcdFx0ICAgIHpvb20gPSB0aGlzLmdldEJvdW5kc1pvb20oYm91bmRzLCBmYWxzZSwgcGFkZGluZ1RMLmFkZChwYWRkaW5nQlIpKTtcclxuXHJcbiAgXHRcdHpvb20gPSAodHlwZW9mIG9wdGlvbnMubWF4Wm9vbSA9PT0gJ251bWJlcicpID8gTWF0aC5taW4ob3B0aW9ucy5tYXhab29tLCB6b29tKSA6IHpvb207XHJcblxyXG4gIFx0XHRpZiAoem9vbSA9PT0gSW5maW5pdHkpIHtcclxuICBcdFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdFx0Y2VudGVyOiBib3VuZHMuZ2V0Q2VudGVyKCksXHJcbiAgXHRcdFx0XHR6b29tOiB6b29tXHJcbiAgXHRcdFx0fTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHBhZGRpbmdPZmZzZXQgPSBwYWRkaW5nQlIuc3VidHJhY3QocGFkZGluZ1RMKS5kaXZpZGVCeSgyKSxcclxuXHJcbiAgXHRcdCAgICBzd1BvaW50ID0gdGhpcy5wcm9qZWN0KGJvdW5kcy5nZXRTb3V0aFdlc3QoKSwgem9vbSksXHJcbiAgXHRcdCAgICBuZVBvaW50ID0gdGhpcy5wcm9qZWN0KGJvdW5kcy5nZXROb3J0aEVhc3QoKSwgem9vbSksXHJcbiAgXHRcdCAgICBjZW50ZXIgPSB0aGlzLnVucHJvamVjdChzd1BvaW50LmFkZChuZVBvaW50KS5kaXZpZGVCeSgyKS5hZGQocGFkZGluZ09mZnNldCksIHpvb20pO1xyXG5cclxuICBcdFx0cmV0dXJuIHtcclxuICBcdFx0XHRjZW50ZXI6IGNlbnRlcixcclxuICBcdFx0XHR6b29tOiB6b29tXHJcbiAgXHRcdH07XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZml0Qm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogZml0Qm91bmRzIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIGEgbWFwIHZpZXcgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gZ2VvZ3JhcGhpY2FsIGJvdW5kcyB3aXRoIHRoZVxyXG4gIFx0Ly8gbWF4aW11bSB6b29tIGxldmVsIHBvc3NpYmxlLlxyXG4gIFx0Zml0Qm91bmRzOiBmdW5jdGlvbiAoYm91bmRzLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKCFib3VuZHMuaXNWYWxpZCgpKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdCb3VuZHMgYXJlIG5vdCB2YWxpZC4nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHRhcmdldCA9IHRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20oYm91bmRzLCBvcHRpb25zKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Vmlldyh0YXJnZXQuY2VudGVyLCB0YXJnZXQuem9vbSwgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZml0V29ybGQob3B0aW9ucz86IGZpdEJvdW5kcyBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyBhIG1hcCB2aWV3IHRoYXQgbW9zdGx5IGNvbnRhaW5zIHRoZSB3aG9sZSB3b3JsZCB3aXRoIHRoZSBtYXhpbXVtXHJcbiAgXHQvLyB6b29tIGxldmVsIHBvc3NpYmxlLlxyXG4gIFx0Zml0V29ybGQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwgLTE4MF0sIFs5MCwgMTgwXV0sIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhblRvKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogUGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBQYW5zIHRoZSBtYXAgdG8gYSBnaXZlbiBjZW50ZXIuXHJcbiAgXHRwYW5UbzogZnVuY3Rpb24gKGNlbnRlciwgb3B0aW9ucykgeyAvLyAoTGF0TG5nKVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KGNlbnRlciwgdGhpcy5fem9vbSwge3Bhbjogb3B0aW9uc30pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhbkJ5KG9mZnNldDogUG9pbnQsIG9wdGlvbnM/OiBQYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCBieSBhIGdpdmVuIG51bWJlciBvZiBwaXhlbHMgKGFuaW1hdGVkKS5cclxuICBcdHBhbkJ5OiBmdW5jdGlvbiAob2Zmc2V0LCBvcHRpb25zKSB7XHJcbiAgXHRcdG9mZnNldCA9IHRvUG9pbnQob2Zmc2V0KS5yb3VuZCgpO1xyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgXHRcdGlmICghb2Zmc2V0LnggJiYgIW9mZnNldC55KSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbW92ZWVuZCcpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdC8vIElmIHdlIHBhbiB0b28gZmFyLCBDaHJvbWUgZ2V0cyBpc3N1ZXMgd2l0aCB0aWxlc1xyXG4gIFx0XHQvLyBhbmQgbWFrZXMgdGhlbSBkaXNhcHBlYXIgb3IgYXBwZWFyIGluIHRoZSB3cm9uZyBwbGFjZSAoc2xpZ2h0bHkgb2Zmc2V0KSAjMjYwMlxyXG4gIFx0XHRpZiAob3B0aW9ucy5hbmltYXRlICE9PSB0cnVlICYmICF0aGlzLmdldFNpemUoKS5jb250YWlucyhvZmZzZXQpKSB7XHJcbiAgXHRcdFx0dGhpcy5fcmVzZXRWaWV3KHRoaXMudW5wcm9qZWN0KHRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKS5hZGQob2Zmc2V0KSksIHRoaXMuZ2V0Wm9vbSgpKTtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9wYW5BbmltKSB7XHJcbiAgXHRcdFx0dGhpcy5fcGFuQW5pbSA9IG5ldyBQb3NBbmltYXRpb24oKTtcclxuXHJcbiAgXHRcdFx0dGhpcy5fcGFuQW5pbS5vbih7XHJcbiAgXHRcdFx0XHQnc3RlcCc6IHRoaXMuX29uUGFuVHJhbnNpdGlvblN0ZXAsXHJcbiAgXHRcdFx0XHQnZW5kJzogdGhpcy5fb25QYW5UcmFuc2l0aW9uRW5kXHJcbiAgXHRcdFx0fSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGRvbid0IGZpcmUgbW92ZXN0YXJ0IGlmIGFuaW1hdGluZyBpbmVydGlhXHJcbiAgXHRcdGlmICghb3B0aW9ucy5ub01vdmVTdGFydCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGFuaW1hdGUgcGFuIHVubGVzcyBhbmltYXRlOiBmYWxzZSBzcGVjaWZpZWRcclxuICBcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gZmFsc2UpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCAnbGVhZmxldC1wYW4tYW5pbScpO1xyXG5cclxuICBcdFx0XHR2YXIgbmV3UG9zID0gdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KG9mZnNldCkucm91bmQoKTtcclxuICBcdFx0XHR0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLCBuZXdQb3MsIG9wdGlvbnMuZHVyYXRpb24gfHwgMC4yNSwgb3B0aW9ucy5lYXNlTGluZWFyaXR5KTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0aGlzLl9yYXdQYW5CeShvZmZzZXQpO1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZScpLmZpcmUoJ21vdmVlbmQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZmx5VG8obGF0bG5nOiBMYXRMbmcsIHpvb20/OiBOdW1iZXIsIG9wdGlvbnM/OiBab29tL3BhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgdmlldyBvZiB0aGUgbWFwIChnZW9ncmFwaGljYWwgY2VudGVyIGFuZCB6b29tKSBwZXJmb3JtaW5nIGEgc21vb3RoXHJcbiAgXHQvLyBwYW4tem9vbSBhbmltYXRpb24uXHJcbiAgXHRmbHlUbzogZnVuY3Rpb24gKHRhcmdldENlbnRlciwgdGFyZ2V0Wm9vbSwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlIHx8ICFhbnkzZCkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzLnNldFZpZXcodGFyZ2V0Q2VudGVyLCB0YXJnZXRab29tLCBvcHRpb25zKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fc3RvcCgpO1xyXG5cclxuICBcdFx0dmFyIGZyb20gPSB0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSksXHJcbiAgXHRcdCAgICB0byA9IHRoaXMucHJvamVjdCh0YXJnZXRDZW50ZXIpLFxyXG4gIFx0XHQgICAgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpLFxyXG4gIFx0XHQgICAgc3RhcnRab29tID0gdGhpcy5fem9vbTtcclxuXHJcbiAgXHRcdHRhcmdldENlbnRlciA9IHRvTGF0TG5nKHRhcmdldENlbnRlcik7XHJcbiAgXHRcdHRhcmdldFpvb20gPSB0YXJnZXRab29tID09PSB1bmRlZmluZWQgPyBzdGFydFpvb20gOiB0YXJnZXRab29tO1xyXG5cclxuICBcdFx0dmFyIHcwID0gTWF0aC5tYXgoc2l6ZS54LCBzaXplLnkpLFxyXG4gIFx0XHQgICAgdzEgPSB3MCAqIHRoaXMuZ2V0Wm9vbVNjYWxlKHN0YXJ0Wm9vbSwgdGFyZ2V0Wm9vbSksXHJcbiAgXHRcdCAgICB1MSA9ICh0by5kaXN0YW5jZVRvKGZyb20pKSB8fCAxLFxyXG4gIFx0XHQgICAgcmhvID0gMS40MixcclxuICBcdFx0ICAgIHJobzIgPSByaG8gKiByaG87XHJcblxyXG4gIFx0XHRmdW5jdGlvbiByKGkpIHtcclxuICBcdFx0XHR2YXIgczEgPSBpID8gLTEgOiAxLFxyXG4gIFx0XHRcdCAgICBzMiA9IGkgPyB3MSA6IHcwLFxyXG4gIFx0XHRcdCAgICB0MSA9IHcxICogdzEgLSB3MCAqIHcwICsgczEgKiByaG8yICogcmhvMiAqIHUxICogdTEsXHJcbiAgXHRcdFx0ICAgIGIxID0gMiAqIHMyICogcmhvMiAqIHUxLFxyXG4gIFx0XHRcdCAgICBiID0gdDEgLyBiMSxcclxuICBcdFx0XHQgICAgc3EgPSBNYXRoLnNxcnQoYiAqIGIgKyAxKSAtIGI7XHJcblxyXG4gIFx0XHRcdCAgICAvLyB3b3JrYXJvdW5kIGZvciBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gYnVnIHdoZW4gc3EgPSAwLCBsb2cgPSAtSW5maW5pdGUsXHJcbiAgXHRcdFx0ICAgIC8vIHRodXMgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIGluIGZseVRvXHJcbiAgXHRcdFx0ICAgIHZhciBsb2cgPSBzcSA8IDAuMDAwMDAwMDAxID8gLTE4IDogTWF0aC5sb2coc3EpO1xyXG5cclxuICBcdFx0XHRyZXR1cm4gbG9nO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRmdW5jdGlvbiBzaW5oKG4pIHsgcmV0dXJuIChNYXRoLmV4cChuKSAtIE1hdGguZXhwKC1uKSkgLyAyOyB9XHJcbiAgXHRcdGZ1bmN0aW9uIGNvc2gobikgeyByZXR1cm4gKE1hdGguZXhwKG4pICsgTWF0aC5leHAoLW4pKSAvIDI7IH1cclxuICBcdFx0ZnVuY3Rpb24gdGFuaChuKSB7IHJldHVybiBzaW5oKG4pIC8gY29zaChuKTsgfVxyXG5cclxuICBcdFx0dmFyIHIwID0gcigwKTtcclxuXHJcbiAgXHRcdGZ1bmN0aW9uIHcocykgeyByZXR1cm4gdzAgKiAoY29zaChyMCkgLyBjb3NoKHIwICsgcmhvICogcykpOyB9XHJcbiAgXHRcdGZ1bmN0aW9uIHUocykgeyByZXR1cm4gdzAgKiAoY29zaChyMCkgKiB0YW5oKHIwICsgcmhvICogcykgLSBzaW5oKHIwKSkgLyByaG8yOyB9XHJcblxyXG4gIFx0XHRmdW5jdGlvbiBlYXNlT3V0KHQpIHsgcmV0dXJuIDEgLSBNYXRoLnBvdygxIC0gdCwgMS41KTsgfVxyXG5cclxuICBcdFx0dmFyIHN0YXJ0ID0gRGF0ZS5ub3coKSxcclxuICBcdFx0ICAgIFMgPSAocigxKSAtIHIwKSAvIHJobyxcclxuICBcdFx0ICAgIGR1cmF0aW9uID0gb3B0aW9ucy5kdXJhdGlvbiA/IDEwMDAgKiBvcHRpb25zLmR1cmF0aW9uIDogMTAwMCAqIFMgKiAwLjg7XHJcblxyXG4gIFx0XHRmdW5jdGlvbiBmcmFtZSgpIHtcclxuICBcdFx0XHR2YXIgdCA9IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gZHVyYXRpb24sXHJcbiAgXHRcdFx0ICAgIHMgPSBlYXNlT3V0KHQpICogUztcclxuXHJcbiAgXHRcdFx0aWYgKHQgPD0gMSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fZmx5VG9GcmFtZSA9IHJlcXVlc3RBbmltRnJhbWUoZnJhbWUsIHRoaXMpO1xyXG5cclxuICBcdFx0XHRcdHRoaXMuX21vdmUoXHJcbiAgXHRcdFx0XHRcdHRoaXMudW5wcm9qZWN0KGZyb20uYWRkKHRvLnN1YnRyYWN0KGZyb20pLm11bHRpcGx5QnkodShzKSAvIHUxKSksIHN0YXJ0Wm9vbSksXHJcbiAgXHRcdFx0XHRcdHRoaXMuZ2V0U2NhbGVab29tKHcwIC8gdyhzKSwgc3RhcnRab29tKSxcclxuICBcdFx0XHRcdFx0e2ZseVRvOiB0cnVlfSk7XHJcblxyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHR0aGlzXHJcbiAgXHRcdFx0XHRcdC5fbW92ZSh0YXJnZXRDZW50ZXIsIHRhcmdldFpvb20pXHJcbiAgXHRcdFx0XHRcdC5fbW92ZUVuZCh0cnVlKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX21vdmVTdGFydCh0cnVlLCBvcHRpb25zLm5vTW92ZVN0YXJ0KTtcclxuXHJcbiAgXHRcdGZyYW1lLmNhbGwodGhpcyk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGZseVRvQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogZml0Qm91bmRzIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB2aWV3IG9mIHRoZSBtYXAgd2l0aCBhIHNtb290aCBhbmltYXRpb24gbGlrZSBbYGZseVRvYF0oI21hcC1mbHl0byksXHJcbiAgXHQvLyBidXQgdGFrZXMgYSBib3VuZHMgcGFyYW1ldGVyIGxpa2UgW2BmaXRCb3VuZHNgXSgjbWFwLWZpdGJvdW5kcykuXHJcbiAgXHRmbHlUb0JvdW5kczogZnVuY3Rpb24gKGJvdW5kcywgb3B0aW9ucykge1xyXG4gIFx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5fZ2V0Qm91bmRzQ2VudGVyWm9vbShib3VuZHMsIG9wdGlvbnMpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5mbHlUbyh0YXJnZXQuY2VudGVyLCB0YXJnZXQuem9vbSwgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TWF4Qm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogdGhpc1xyXG4gIFx0Ly8gUmVzdHJpY3RzIHRoZSBtYXAgdmlldyB0byB0aGUgZ2l2ZW4gYm91bmRzIChzZWUgdGhlIFttYXhCb3VuZHNdKCNtYXAtbWF4Ym91bmRzKSBvcHRpb24pLlxyXG4gIFx0c2V0TWF4Qm91bmRzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRpZiAoIWJvdW5kcy5pc1ZhbGlkKCkpIHtcclxuICBcdFx0XHR0aGlzLm9wdGlvbnMubWF4Qm91bmRzID0gbnVsbDtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5vZmYoJ21vdmVlbmQnLCB0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpO1xyXG4gIFx0XHR9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpIHtcclxuICBcdFx0XHR0aGlzLm9mZignbW92ZWVuZCcsIHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMub3B0aW9ucy5tYXhCb3VuZHMgPSBib3VuZHM7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLm9uKCdtb3ZlZW5kJywgdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRNaW5ab29tKHpvb206IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGxvd2VyIGxpbWl0IGZvciB0aGUgYXZhaWxhYmxlIHpvb20gbGV2ZWxzIChzZWUgdGhlIFttaW5ab29tXSgjbWFwLW1pbnpvb20pIG9wdGlvbikuXHJcbiAgXHRzZXRNaW5ab29tOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHR2YXIgb2xkWm9vbSA9IHRoaXMub3B0aW9ucy5taW5ab29tO1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMubWluWm9vbSA9IHpvb207XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkICYmIG9sZFpvb20gIT09IHpvb20pIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb21sZXZlbHNjaGFuZ2UnKTtcclxuXHJcbiAgXHRcdFx0aWYgKHRoaXMuZ2V0Wm9vbSgpIDwgdGhpcy5vcHRpb25zLm1pblpvb20pIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLnNldFpvb20oem9vbSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRNYXhab29tKHpvb206IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHVwcGVyIGxpbWl0IGZvciB0aGUgYXZhaWxhYmxlIHpvb20gbGV2ZWxzIChzZWUgdGhlIFttYXhab29tXSgjbWFwLW1heHpvb20pIG9wdGlvbikuXHJcbiAgXHRzZXRNYXhab29tOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHR2YXIgb2xkWm9vbSA9IHRoaXMub3B0aW9ucy5tYXhab29tO1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMubWF4Wm9vbSA9IHpvb207XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkICYmIG9sZFpvb20gIT09IHpvb20pIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb21sZXZlbHNjaGFuZ2UnKTtcclxuXHJcbiAgXHRcdFx0aWYgKHRoaXMuZ2V0Wm9vbSgpID4gdGhpcy5vcHRpb25zLm1heFpvb20pIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLnNldFpvb20oem9vbSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwYW5JbnNpZGVCb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBQYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCB0byB0aGUgY2xvc2VzdCB2aWV3IHRoYXQgd291bGQgbGllIGluc2lkZSB0aGUgZ2l2ZW4gYm91bmRzIChpZiBpdCdzIG5vdCBhbHJlYWR5KSwgY29udHJvbGxpbmcgdGhlIGFuaW1hdGlvbiB1c2luZyB0aGUgb3B0aW9ucyBzcGVjaWZpYywgaWYgYW55LlxyXG4gIFx0cGFuSW5zaWRlQm91bmRzOiBmdW5jdGlvbiAoYm91bmRzLCBvcHRpb25zKSB7XHJcbiAgXHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IHRydWU7XHJcbiAgXHRcdHZhciBjZW50ZXIgPSB0aGlzLmdldENlbnRlcigpLFxyXG4gIFx0XHQgICAgbmV3Q2VudGVyID0gdGhpcy5fbGltaXRDZW50ZXIoY2VudGVyLCB0aGlzLl96b29tLCB0b0xhdExuZ0JvdW5kcyhib3VuZHMpKTtcclxuXHJcbiAgXHRcdGlmICghY2VudGVyLmVxdWFscyhuZXdDZW50ZXIpKSB7XHJcbiAgXHRcdFx0dGhpcy5wYW5UbyhuZXdDZW50ZXIsIG9wdGlvbnMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9lbmZvcmNpbmdCb3VuZHMgPSBmYWxzZTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcGFuSW5zaWRlKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCB0aGUgbWluaW11bSBhbW91bnQgdG8gbWFrZSB0aGUgYGxhdGxuZ2AgdmlzaWJsZS4gVXNlXHJcbiAgXHQvLyBgcGFkZGluZ2AsIGBwYWRkaW5nVG9wTGVmdGAgYW5kIGBwYWRkaW5nVG9wUmlnaHRgIG9wdGlvbnMgdG8gZml0XHJcbiAgXHQvLyB0aGUgZGlzcGxheSB0byBtb3JlIHJlc3RyaWN0ZWQgYm91bmRzLCBsaWtlIFtgZml0Qm91bmRzYF0oI21hcC1maXRib3VuZHMpLlxyXG4gIFx0Ly8gSWYgYGxhdGxuZ2AgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIChvcHRpb25hbGx5IHBhZGRlZCkgZGlzcGxheSBib3VuZHMsXHJcbiAgXHQvLyB0aGUgbWFwIHdpbGwgbm90IGJlIHBhbm5lZC5cclxuICBcdHBhbkluc2lkZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgXHRcdHZhciBwYWRkaW5nVEwgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ1RvcExlZnQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ0JvdHRvbVJpZ2h0IHx8IG9wdGlvbnMucGFkZGluZyB8fCBbMCwgMF0pLFxyXG4gIFx0XHQgICAgY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKSxcclxuICBcdFx0ICAgIHBpeGVsQ2VudGVyID0gdGhpcy5wcm9qZWN0KGNlbnRlciksXHJcbiAgXHRcdCAgICBwaXhlbFBvaW50ID0gdGhpcy5wcm9qZWN0KGxhdGxuZyksXHJcbiAgXHRcdCAgICBwaXhlbEJvdW5kcyA9IHRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxcclxuICBcdFx0ICAgIGhhbGZQaXhlbEJvdW5kcyA9IHBpeGVsQm91bmRzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxcclxuICBcdFx0ICAgIHBhZGRlZEJvdW5kcyA9IHRvQm91bmRzKFtwaXhlbEJvdW5kcy5taW4uYWRkKHBhZGRpbmdUTCksIHBpeGVsQm91bmRzLm1heC5zdWJ0cmFjdChwYWRkaW5nQlIpXSk7XHJcblxyXG4gIFx0XHRpZiAoIXBhZGRlZEJvdW5kcy5jb250YWlucyhwaXhlbFBvaW50KSkge1xyXG4gIFx0XHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IHRydWU7XHJcbiAgXHRcdFx0dmFyIGRpZmYgPSBwaXhlbENlbnRlci5zdWJ0cmFjdChwaXhlbFBvaW50KSxcclxuICBcdFx0XHQgICAgbmV3Q2VudGVyID0gdG9Qb2ludChwaXhlbFBvaW50LnggKyBkaWZmLngsIHBpeGVsUG9pbnQueSArIGRpZmYueSk7XHJcblxyXG4gIFx0XHRcdGlmIChwaXhlbFBvaW50LnggPCBwYWRkZWRCb3VuZHMubWluLnggfHwgcGl4ZWxQb2ludC54ID4gcGFkZGVkQm91bmRzLm1heC54KSB7XHJcbiAgXHRcdFx0XHRuZXdDZW50ZXIueCA9IHBpeGVsQ2VudGVyLnggLSBkaWZmLng7XHJcbiAgXHRcdFx0XHRpZiAoZGlmZi54ID4gMCkge1xyXG4gIFx0XHRcdFx0XHRuZXdDZW50ZXIueCArPSBoYWxmUGl4ZWxCb3VuZHMueCAtIHBhZGRpbmdUTC54O1xyXG4gIFx0XHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdFx0bmV3Q2VudGVyLnggLT0gaGFsZlBpeGVsQm91bmRzLnggLSBwYWRkaW5nQlIueDtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0aWYgKHBpeGVsUG9pbnQueSA8IHBhZGRlZEJvdW5kcy5taW4ueSB8fCBwaXhlbFBvaW50LnkgPiBwYWRkZWRCb3VuZHMubWF4LnkpIHtcclxuICBcdFx0XHRcdG5ld0NlbnRlci55ID0gcGl4ZWxDZW50ZXIueSAtIGRpZmYueTtcclxuICBcdFx0XHRcdGlmIChkaWZmLnkgPiAwKSB7XHJcbiAgXHRcdFx0XHRcdG5ld0NlbnRlci55ICs9IGhhbGZQaXhlbEJvdW5kcy55IC0gcGFkZGluZ1RMLnk7XHJcbiAgXHRcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0XHRuZXdDZW50ZXIueSAtPSBoYWxmUGl4ZWxCb3VuZHMueSAtIHBhZGRpbmdCUi55O1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XHR0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KG5ld0NlbnRlciksIG9wdGlvbnMpO1xyXG4gIFx0XHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IGZhbHNlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGludmFsaWRhdGVTaXplKG9wdGlvbnM6IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBDaGVja3MgaWYgdGhlIG1hcCBjb250YWluZXIgc2l6ZSBjaGFuZ2VkIGFuZCB1cGRhdGVzIHRoZSBtYXAgaWYgc28g4oCUXHJcbiAgXHQvLyBjYWxsIGl0IGFmdGVyIHlvdSd2ZSBjaGFuZ2VkIHRoZSBtYXAgc2l6ZSBkeW5hbWljYWxseSwgYWxzbyBhbmltYXRpbmdcclxuICBcdC8vIHBhbiBieSBkZWZhdWx0LiBJZiBgb3B0aW9ucy5wYW5gIGlzIGBmYWxzZWAsIHBhbm5pbmcgd2lsbCBub3Qgb2NjdXIuXHJcbiAgXHQvLyBJZiBgb3B0aW9ucy5kZWJvdW5jZU1vdmVlbmRgIGlzIGB0cnVlYCwgaXQgd2lsbCBkZWxheSBgbW92ZWVuZGAgZXZlbnQgc29cclxuICBcdC8vIHRoYXQgaXQgZG9lc24ndCBoYXBwZW4gb2Z0ZW4gZXZlbiBpZiB0aGUgbWV0aG9kIGlzIGNhbGxlZCBtYW55XHJcbiAgXHQvLyB0aW1lcyBpbiBhIHJvdy5cclxuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgaW52YWxpZGF0ZVNpemUoYW5pbWF0ZTogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIENoZWNrcyBpZiB0aGUgbWFwIGNvbnRhaW5lciBzaXplIGNoYW5nZWQgYW5kIHVwZGF0ZXMgdGhlIG1hcCBpZiBzbyDigJRcclxuICBcdC8vIGNhbGwgaXQgYWZ0ZXIgeW91J3ZlIGNoYW5nZWQgdGhlIG1hcCBzaXplIGR5bmFtaWNhbGx5LCBhbHNvIGFuaW1hdGluZ1xyXG4gIFx0Ly8gcGFuIGJ5IGRlZmF1bHQuXHJcbiAgXHRpbnZhbGlkYXRlU2l6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBleHRlbmQoe1xyXG4gIFx0XHRcdGFuaW1hdGU6IGZhbHNlLFxyXG4gIFx0XHRcdHBhbjogdHJ1ZVxyXG4gIFx0XHR9LCBvcHRpb25zID09PSB0cnVlID8ge2FuaW1hdGU6IHRydWV9IDogb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR2YXIgb2xkU2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xyXG4gIFx0XHR0aGlzLl9zaXplQ2hhbmdlZCA9IHRydWU7XHJcbiAgXHRcdHRoaXMuX2xhc3RDZW50ZXIgPSBudWxsO1xyXG5cclxuICBcdFx0dmFyIG5ld1NpemUgPSB0aGlzLmdldFNpemUoKSxcclxuICBcdFx0ICAgIG9sZENlbnRlciA9IG9sZFNpemUuZGl2aWRlQnkoMikucm91bmQoKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IG5ld1NpemUuZGl2aWRlQnkoMikucm91bmQoKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IG9sZENlbnRlci5zdWJ0cmFjdChuZXdDZW50ZXIpO1xyXG5cclxuICBcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgJiYgb3B0aW9ucy5wYW4pIHtcclxuICBcdFx0XHR0aGlzLnBhbkJ5KG9mZnNldCk7XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlmIChvcHRpb25zLnBhbikge1xyXG4gIFx0XHRcdFx0dGhpcy5fcmF3UGFuQnkob2Zmc2V0KTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZScpO1xyXG5cclxuICBcdFx0XHRpZiAob3B0aW9ucy5kZWJvdW5jZU1vdmVlbmQpIHtcclxuICBcdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpO1xyXG4gIFx0XHRcdFx0dGhpcy5fc2l6ZVRpbWVyID0gc2V0VGltZW91dChiaW5kKHRoaXMuZmlyZSwgdGhpcywgJ21vdmVlbmQnKSwgMjAwKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBNYXAgc3RhdGUgY2hhbmdlIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgcmVzaXplOiBSZXNpemVFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgaXMgcmVzaXplZC5cclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgncmVzaXplJywge1xyXG4gIFx0XHRcdG9sZFNpemU6IG9sZFNpemUsXHJcbiAgXHRcdFx0bmV3U2l6ZTogbmV3U2l6ZVxyXG4gIFx0XHR9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgbW9kaWZ5aW5nIG1hcCBzdGF0ZVxyXG4gIFx0Ly8gQG1ldGhvZCBzdG9wKCk6IHRoaXNcclxuICBcdC8vIFN0b3BzIHRoZSBjdXJyZW50bHkgcnVubmluZyBgcGFuVG9gIG9yIGBmbHlUb2AgYW5pbWF0aW9uLCBpZiBhbnkuXHJcbiAgXHRzdG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuc2V0Wm9vbSh0aGlzLl9saW1pdFpvb20odGhpcy5fem9vbSkpO1xyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy56b29tU25hcCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgndmlld3Jlc2V0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMuX3N0b3AoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gR2VvbG9jYXRpb24gbWV0aG9kc1xyXG4gIFx0Ly8gQG1ldGhvZCBsb2NhdGUob3B0aW9ucz86IExvY2F0ZSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gVHJpZXMgdG8gbG9jYXRlIHRoZSB1c2VyIHVzaW5nIHRoZSBHZW9sb2NhdGlvbiBBUEksIGZpcmluZyBhIFtgbG9jYXRpb25mb3VuZGBdKCNtYXAtbG9jYXRpb25mb3VuZClcclxuICBcdC8vIGV2ZW50IHdpdGggbG9jYXRpb24gZGF0YSBvbiBzdWNjZXNzIG9yIGEgW2Bsb2NhdGlvbmVycm9yYF0oI21hcC1sb2NhdGlvbmVycm9yKSBldmVudCBvbiBmYWlsdXJlLFxyXG4gIFx0Ly8gYW5kIG9wdGlvbmFsbHkgc2V0cyB0aGUgbWFwIHZpZXcgdG8gdGhlIHVzZXIncyBsb2NhdGlvbiB3aXRoIHJlc3BlY3QgdG9cclxuICBcdC8vIGRldGVjdGlvbiBhY2N1cmFjeSAob3IgdG8gdGhlIHdvcmxkIHZpZXcgaWYgZ2VvbG9jYXRpb24gZmFpbGVkKS5cclxuICBcdC8vIE5vdGUgdGhhdCwgaWYgeW91ciBwYWdlIGRvZXNuJ3QgdXNlIEhUVFBTLCB0aGlzIG1ldGhvZCB3aWxsIGZhaWwgaW5cclxuICBcdC8vIG1vZGVybiBicm93c2VycyAoW0Nocm9tZSA1MCBhbmQgbmV3ZXJdKGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9kZXYvSG9tZS9jaHJvbWl1bS1zZWN1cml0eS9kZXByZWNhdGluZy1wb3dlcmZ1bC1mZWF0dXJlcy1vbi1pbnNlY3VyZS1vcmlnaW5zKSlcclxuICBcdC8vIFNlZSBgTG9jYXRlIG9wdGlvbnNgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgXHRsb2NhdGU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRvcHRpb25zID0gdGhpcy5fbG9jYXRlT3B0aW9ucyA9IGV4dGVuZCh7XHJcbiAgXHRcdFx0dGltZW91dDogMTAwMDAsXHJcbiAgXHRcdFx0d2F0Y2g6IGZhbHNlXHJcbiAgXHRcdFx0Ly8gc2V0VmlldzogZmFsc2VcclxuICBcdFx0XHQvLyBtYXhab29tOiA8TnVtYmVyPlxyXG4gIFx0XHRcdC8vIG1heGltdW1BZ2U6IDBcclxuICBcdFx0XHQvLyBlbmFibGVIaWdoQWNjdXJhY3k6IGZhbHNlXHJcbiAgXHRcdH0sIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0aWYgKCEoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpKSB7XHJcbiAgXHRcdFx0dGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7XHJcbiAgXHRcdFx0XHRjb2RlOiAwLFxyXG4gIFx0XHRcdFx0bWVzc2FnZTogJ0dlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuJ1xyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgb25SZXNwb25zZSA9IGJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZSwgdGhpcyksXHJcbiAgXHRcdCAgICBvbkVycm9yID0gYmluZCh0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yLCB0aGlzKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLndhdGNoKSB7XHJcbiAgXHRcdFx0dGhpcy5fbG9jYXRpb25XYXRjaElkID1cclxuICBcdFx0XHQgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKG9uUmVzcG9uc2UsIG9uRXJyb3IsIG9wdGlvbnMpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ob25SZXNwb25zZSwgb25FcnJvciwgb3B0aW9ucyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc3RvcExvY2F0ZSgpOiB0aGlzXHJcbiAgXHQvLyBTdG9wcyB3YXRjaGluZyBsb2NhdGlvbiBwcmV2aW91c2x5IGluaXRpYXRlZCBieSBgbWFwLmxvY2F0ZSh7d2F0Y2g6IHRydWV9KWBcclxuICBcdC8vIGFuZCBhYm9ydHMgcmVzZXR0aW5nIHRoZSBtYXAgdmlldyBpZiBtYXAubG9jYXRlIHdhcyBjYWxsZWQgd2l0aFxyXG4gIFx0Ly8gYHtzZXRWaWV3OiB0cnVlfWAuXHJcbiAgXHRzdG9wTG9jYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmIChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24gJiYgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gpIHtcclxuICBcdFx0XHRuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICh0aGlzLl9sb2NhdGVPcHRpb25zKSB7XHJcbiAgXHRcdFx0dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3ID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICBcdFx0dmFyIGMgPSBlcnJvci5jb2RlLFxyXG4gIFx0XHQgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgfHxcclxuICBcdFx0ICAgICAgICAgICAgKGMgPT09IDEgPyAncGVybWlzc2lvbiBkZW5pZWQnIDpcclxuICBcdFx0ICAgICAgICAgICAgKGMgPT09IDIgPyAncG9zaXRpb24gdW5hdmFpbGFibGUnIDogJ3RpbWVvdXQnKSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3ICYmICF0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aGlzLmZpdFdvcmxkKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIExvY2F0aW9uIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgbG9jYXRpb25lcnJvcjogRXJyb3JFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGdlb2xvY2F0aW9uICh1c2luZyB0aGUgW2Bsb2NhdGVgXSgjbWFwLWxvY2F0ZSkgbWV0aG9kKSBmYWlsZWQuXHJcbiAgXHRcdHRoaXMuZmlyZSgnbG9jYXRpb25lcnJvcicsIHtcclxuICBcdFx0XHRjb2RlOiBjLFxyXG4gIFx0XHRcdG1lc3NhZ2U6ICdHZW9sb2NhdGlvbiBlcnJvcjogJyArIG1lc3NhZ2UgKyAnLidcclxuICBcdFx0fSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOiBmdW5jdGlvbiAocG9zKSB7XHJcbiAgXHRcdHZhciBsYXQgPSBwb3MuY29vcmRzLmxhdGl0dWRlLFxyXG4gIFx0XHQgICAgbG5nID0gcG9zLmNvb3Jkcy5sb25naXR1ZGUsXHJcbiAgXHRcdCAgICBsYXRsbmcgPSBuZXcgTGF0TG5nKGxhdCwgbG5nKSxcclxuICBcdFx0ICAgIGJvdW5kcyA9IGxhdGxuZy50b0JvdW5kcyhwb3MuY29vcmRzLmFjY3VyYWN5ICogMiksXHJcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5fbG9jYXRlT3B0aW9ucztcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLnNldFZpZXcpIHtcclxuICBcdFx0XHR2YXIgem9vbSA9IHRoaXMuZ2V0Qm91bmRzWm9vbShib3VuZHMpO1xyXG4gIFx0XHRcdHRoaXMuc2V0VmlldyhsYXRsbmcsIG9wdGlvbnMubWF4Wm9vbSA/IE1hdGgubWluKHpvb20sIG9wdGlvbnMubWF4Wm9vbSkgOiB6b29tKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGRhdGEgPSB7XHJcbiAgXHRcdFx0bGF0bG5nOiBsYXRsbmcsXHJcbiAgXHRcdFx0Ym91bmRzOiBib3VuZHMsXHJcbiAgXHRcdFx0dGltZXN0YW1wOiBwb3MudGltZXN0YW1wXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpIGluIHBvcy5jb29yZHMpIHtcclxuICBcdFx0XHRpZiAodHlwZW9mIHBvcy5jb29yZHNbaV0gPT09ICdudW1iZXInKSB7XHJcbiAgXHRcdFx0XHRkYXRhW2ldID0gcG9zLmNvb3Jkc1tpXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBldmVudCBsb2NhdGlvbmZvdW5kOiBMb2NhdGlvbkV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gZ2VvbG9jYXRpb24gKHVzaW5nIHRoZSBbYGxvY2F0ZWBdKCNtYXAtbG9jYXRlKSBtZXRob2QpXHJcbiAgXHRcdC8vIHdlbnQgc3VjY2Vzc2Z1bGx5LlxyXG4gIFx0XHR0aGlzLmZpcmUoJ2xvY2F0aW9uZm91bmQnLCBkYXRhKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gVE9ETyBBcHByb3ByaWF0ZSBkb2NzIHNlY3Rpb24/XHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEhhbmRsZXIobmFtZTogU3RyaW5nLCBIYW5kbGVyQ2xhc3M6IEZ1bmN0aW9uKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhIG5ldyBgSGFuZGxlcmAgdG8gdGhlIG1hcCwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxyXG4gIFx0YWRkSGFuZGxlcjogZnVuY3Rpb24gKG5hbWUsIEhhbmRsZXJDbGFzcykge1xyXG4gIFx0XHRpZiAoIUhhbmRsZXJDbGFzcykgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0dmFyIGhhbmRsZXIgPSB0aGlzW25hbWVdID0gbmV3IEhhbmRsZXJDbGFzcyh0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2hhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zW25hbWVdKSB7XHJcbiAgXHRcdFx0aGFuZGxlci5lbmFibGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlKCk6IHRoaXNcclxuICBcdC8vIERlc3Ryb3lzIHRoZSBtYXAgYW5kIGNsZWFycyBhbGwgcmVsYXRlZCBldmVudCBsaXN0ZW5lcnMuXHJcbiAgXHRyZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdHRoaXMuX2luaXRFdmVudHModHJ1ZSk7XHJcbiAgXHRcdHRoaXMub2ZmKCdtb3ZlZW5kJywgdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXJJZCAhPT0gdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNYXAgY29udGFpbmVyIGlzIGJlaW5nIHJldXNlZCBieSBhbm90aGVyIGluc3RhbmNlJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRyeSB7XHJcbiAgXHRcdFx0Ly8gdGhyb3dzIGVycm9yIGluIElFNi04XHJcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZDtcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fY29udGFpbmVySWQ7XHJcbiAgXHRcdH0gY2F0Y2ggKGUpIHtcclxuICBcdFx0XHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRcdFx0dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkID0gdW5kZWZpbmVkO1xyXG4gIFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuICBcdFx0XHR0aGlzLl9jb250YWluZXJJZCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0dGhpcy5zdG9wTG9jYXRlKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3N0b3AoKTtcclxuXHJcbiAgXHRcdHJlbW92ZSh0aGlzLl9tYXBQYW5lKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9jbGVhckNvbnRyb2xQb3MpIHtcclxuICBcdFx0XHR0aGlzLl9jbGVhckNvbnRyb2xQb3MoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAodGhpcy5fcmVzaXplUmVxdWVzdCkge1xyXG4gIFx0XHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZXNpemVSZXF1ZXN0KTtcclxuICBcdFx0XHR0aGlzLl9yZXNpemVSZXF1ZXN0ID0gbnVsbDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fY2xlYXJIYW5kbGVycygpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIE1hcCBzdGF0ZSBjaGFuZ2UgZXZlbnRzXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHVubG9hZDogRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgaXMgZGVzdHJveWVkIHdpdGggW3JlbW92ZV0oI21hcC1yZW1vdmUpIG1ldGhvZC5cclxuICBcdFx0XHR0aGlzLmZpcmUoJ3VubG9hZCcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgaTtcclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpXS5yZW1vdmUoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRmb3IgKGkgaW4gdGhpcy5fcGFuZXMpIHtcclxuICBcdFx0XHRyZW1vdmUodGhpcy5fcGFuZXNbaV0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMgPSBbXTtcclxuICBcdFx0dGhpcy5fcGFuZXMgPSBbXTtcclxuICBcdFx0ZGVsZXRlIHRoaXMuX21hcFBhbmU7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9yZW5kZXJlcjtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZVBhbmUobmFtZTogU3RyaW5nLCBjb250YWluZXI/OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBDcmVhdGVzIGEgbmV3IFttYXAgcGFuZV0oI21hcC1wYW5lKSB3aXRoIHRoZSBnaXZlbiBuYW1lIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYWxyZWFkeSxcclxuICBcdC8vIHRoZW4gcmV0dXJucyBpdC4gVGhlIHBhbmUgaXMgY3JlYXRlZCBhcyBhIGNoaWxkIG9mIGBjb250YWluZXJgLCBvclxyXG4gIFx0Ly8gYXMgYSBjaGlsZCBvZiB0aGUgbWFpbiBtYXAgcGFuZSBpZiBub3Qgc2V0LlxyXG4gIFx0Y3JlYXRlUGFuZTogZnVuY3Rpb24gKG5hbWUsIGNvbnRhaW5lcikge1xyXG4gIFx0XHR2YXIgY2xhc3NOYW1lID0gJ2xlYWZsZXQtcGFuZScgKyAobmFtZSA/ICcgbGVhZmxldC0nICsgbmFtZS5yZXBsYWNlKCdQYW5lJywgJycpICsgJy1wYW5lJyA6ICcnKSxcclxuICBcdFx0ICAgIHBhbmUgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lLCBjb250YWluZXIgfHwgdGhpcy5fbWFwUGFuZSk7XHJcblxyXG4gIFx0XHRpZiAobmFtZSkge1xyXG4gIFx0XHRcdHRoaXMuX3BhbmVzW25hbWVdID0gcGFuZTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gcGFuZTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgR2V0dGluZyBNYXAgU3RhdGVcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENlbnRlcigpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBjZW50ZXIgb2YgdGhlIG1hcCB2aWV3XHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY2hlY2tJZkxvYWRlZCgpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xhc3RDZW50ZXIgJiYgIXRoaXMuX21vdmVkKCkpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5fbGFzdENlbnRlcjtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRab29tKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCB6b29tIGxldmVsIG9mIHRoZSBtYXAgdmlld1xyXG4gIFx0Z2V0Wm9vbTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fem9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3VuZHMoKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBnZW9ncmFwaGljYWwgYm91bmRzIHZpc2libGUgaW4gdGhlIGN1cnJlbnQgbWFwIHZpZXdcclxuICBcdGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgYm91bmRzID0gdGhpcy5nZXRQaXhlbEJvdW5kcygpLFxyXG4gIFx0XHQgICAgc3cgPSB0aGlzLnVucHJvamVjdChib3VuZHMuZ2V0Qm90dG9tTGVmdCgpKSxcclxuICBcdFx0ICAgIG5lID0gdGhpcy51bnByb2plY3QoYm91bmRzLmdldFRvcFJpZ2h0KCkpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoc3csIG5lKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRNaW5ab29tKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbWluaW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKGlmIHNldCBpbiB0aGUgYG1pblpvb21gIG9wdGlvbiBvZiB0aGUgbWFwIG9yIG9mIGFueSBsYXllcnMpLCBvciBgMGAgYnkgZGVmYXVsdC5cclxuICBcdGdldE1pblpvb206IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tID09PSB1bmRlZmluZWQgPyB0aGlzLl9sYXllcnNNaW5ab29tIHx8IDAgOiB0aGlzLm9wdGlvbnMubWluWm9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRNYXhab29tKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbWF4aW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKGlmIHNldCBpbiB0aGUgYG1heFpvb21gIG9wdGlvbiBvZiB0aGUgbWFwIG9yIG9mIGFueSBsYXllcnMpLlxyXG4gIFx0Z2V0TWF4Wm9vbTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb20gPT09IHVuZGVmaW5lZCA/XHJcbiAgXHRcdFx0KHRoaXMuX2xheWVyc01heFpvb20gPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogdGhpcy5fbGF5ZXJzTWF4Wm9vbSkgOlxyXG4gIFx0XHRcdHRoaXMub3B0aW9ucy5tYXhab29tO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kc1pvb20oYm91bmRzOiBMYXRMbmdCb3VuZHMsIGluc2lkZT86IEJvb2xlYW4sIHBhZGRpbmc/OiBQb2ludCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbWF4aW11bSB6b29tIGxldmVsIG9uIHdoaWNoIHRoZSBnaXZlbiBib3VuZHMgZml0IHRvIHRoZSBtYXBcclxuICBcdC8vIHZpZXcgaW4gaXRzIGVudGlyZXR5LiBJZiBgaW5zaWRlYCAob3B0aW9uYWwpIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBtZXRob2RcclxuICBcdC8vIGluc3RlYWQgcmV0dXJucyB0aGUgbWluaW11bSB6b29tIGxldmVsIG9uIHdoaWNoIHRoZSBtYXAgdmlldyBmaXRzIGludG9cclxuICBcdC8vIHRoZSBnaXZlbiBib3VuZHMgaW4gaXRzIGVudGlyZXR5LlxyXG4gIFx0Z2V0Qm91bmRzWm9vbTogZnVuY3Rpb24gKGJvdW5kcywgaW5zaWRlLCBwYWRkaW5nKSB7IC8vIChMYXRMbmdCb3VuZHNbLCBCb29sZWFuLCBQb2ludF0pIC0+IE51bWJlclxyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG4gIFx0XHRwYWRkaW5nID0gdG9Qb2ludChwYWRkaW5nIHx8IFswLCAwXSk7XHJcblxyXG4gIFx0XHR2YXIgem9vbSA9IHRoaXMuZ2V0Wm9vbSgpIHx8IDAsXHJcbiAgXHRcdCAgICBtaW4gPSB0aGlzLmdldE1pblpvb20oKSxcclxuICBcdFx0ICAgIG1heCA9IHRoaXMuZ2V0TWF4Wm9vbSgpLFxyXG4gIFx0XHQgICAgbncgPSBib3VuZHMuZ2V0Tm9ydGhXZXN0KCksXHJcbiAgXHRcdCAgICBzZSA9IGJvdW5kcy5nZXRTb3V0aEVhc3QoKSxcclxuICBcdFx0ICAgIHNpemUgPSB0aGlzLmdldFNpemUoKS5zdWJ0cmFjdChwYWRkaW5nKSxcclxuICBcdFx0ICAgIGJvdW5kc1NpemUgPSB0b0JvdW5kcyh0aGlzLnByb2plY3Qoc2UsIHpvb20pLCB0aGlzLnByb2plY3QobncsIHpvb20pKS5nZXRTaXplKCksXHJcbiAgXHRcdCAgICBzbmFwID0gYW55M2QgPyB0aGlzLm9wdGlvbnMuem9vbVNuYXAgOiAxLFxyXG4gIFx0XHQgICAgc2NhbGV4ID0gc2l6ZS54IC8gYm91bmRzU2l6ZS54LFxyXG4gIFx0XHQgICAgc2NhbGV5ID0gc2l6ZS55IC8gYm91bmRzU2l6ZS55LFxyXG4gIFx0XHQgICAgc2NhbGUgPSBpbnNpZGUgPyBNYXRoLm1heChzY2FsZXgsIHNjYWxleSkgOiBNYXRoLm1pbihzY2FsZXgsIHNjYWxleSk7XHJcblxyXG4gIFx0XHR6b29tID0gdGhpcy5nZXRTY2FsZVpvb20oc2NhbGUsIHpvb20pO1xyXG5cclxuICBcdFx0aWYgKHNuYXApIHtcclxuICBcdFx0XHR6b29tID0gTWF0aC5yb3VuZCh6b29tIC8gKHNuYXAgLyAxMDApKSAqIChzbmFwIC8gMTAwKTsgLy8gZG9uJ3QganVtcCBpZiB3aXRoaW4gMSUgb2YgYSBzbmFwIGxldmVsXHJcbiAgXHRcdFx0em9vbSA9IGluc2lkZSA/IE1hdGguY2VpbCh6b29tIC8gc25hcCkgKiBzbmFwIDogTWF0aC5mbG9vcih6b29tIC8gc25hcCkgKiBzbmFwO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHpvb20pKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTaXplKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG1hcCBjb250YWluZXIgKGluIHBpeGVscykuXHJcbiAgXHRnZXRTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fc2l6ZSB8fCB0aGlzLl9zaXplQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuX3NpemUgPSBuZXcgUG9pbnQoXHJcbiAgXHRcdFx0XHR0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGggfHwgMCxcclxuICBcdFx0XHRcdHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgfHwgMCk7XHJcblxyXG4gIFx0XHRcdHRoaXMuX3NpemVDaGFuZ2VkID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMuX3NpemUuY2xvbmUoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQaXhlbEJvdW5kcygpOiBCb3VuZHNcclxuICBcdC8vIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgY3VycmVudCBtYXAgdmlldyBpbiBwcm9qZWN0ZWQgcGl4ZWxcclxuICBcdC8vIGNvb3JkaW5hdGVzIChzb21ldGltZXMgdXNlZnVsIGluIGxheWVyIGFuZCBvdmVybGF5IGltcGxlbWVudGF0aW9ucykuXHJcbiAgXHRnZXRQaXhlbEJvdW5kczogZnVuY3Rpb24gKGNlbnRlciwgem9vbSkge1xyXG4gIFx0XHR2YXIgdG9wTGVmdFBvaW50ID0gdGhpcy5fZ2V0VG9wTGVmdFBvaW50KGNlbnRlciwgem9vbSk7XHJcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKHRvcExlZnRQb2ludCwgdG9wTGVmdFBvaW50LmFkZCh0aGlzLmdldFNpemUoKSkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBUT0RPOiBDaGVjayBzZW1hbnRpY3MgLSBpc24ndCB0aGUgcGl4ZWwgb3JpZ2luIHRoZSAwLDAgY29vcmQgcmVsYXRpdmUgdG9cclxuICBcdC8vIHRoZSBtYXAgcGFuZT8gXCJsZWZ0IHBvaW50IG9mIHRoZSBtYXAgbGF5ZXJcIiBjYW4gYmUgY29uZnVzaW5nLCBzcGVjaWFsbHlcclxuICBcdC8vIHNpbmNlIHRoZXJlIGNhbiBiZSBuZWdhdGl2ZSBvZmZzZXRzLlxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQaXhlbE9yaWdpbigpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcHJvamVjdGVkIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSB0b3AgbGVmdCBwb2ludCBvZlxyXG4gIFx0Ly8gdGhlIG1hcCBsYXllciAodXNlZnVsIGluIGN1c3RvbSBsYXllciBhbmQgb3ZlcmxheSBpbXBsZW1lbnRhdGlvbnMpLlxyXG4gIFx0Z2V0UGl4ZWxPcmlnaW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY2hlY2tJZkxvYWRlZCgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fcGl4ZWxPcmlnaW47XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UGl4ZWxXb3JsZEJvdW5kcyh6b29tPzogTnVtYmVyKTogQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB3b3JsZCdzIGJvdW5kcyBpbiBwaXhlbCBjb29yZGluYXRlcyBmb3Igem9vbSBsZXZlbCBgem9vbWAuXHJcbiAgXHQvLyBJZiBgem9vbWAgaXMgb21pdHRlZCwgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbCBpcyB1c2VkLlxyXG4gIFx0Z2V0UGl4ZWxXb3JsZEJvdW5kczogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMuZ2V0UHJvamVjdGVkQm91bmRzKHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuZ2V0Wm9vbSgpIDogem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE90aGVyIE1ldGhvZHNcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFBhbmUocGFuZTogU3RyaW5nfEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgYSBbbWFwIHBhbmVdKCNtYXAtcGFuZSksIGdpdmVuIGl0cyBuYW1lIG9yIGl0cyBIVE1MIGVsZW1lbnQgKGl0cyBpZGVudGl0eSkuXHJcbiAgXHRnZXRQYW5lOiBmdW5jdGlvbiAocGFuZSkge1xyXG4gIFx0XHRyZXR1cm4gdHlwZW9mIHBhbmUgPT09ICdzdHJpbmcnID8gdGhpcy5fcGFuZXNbcGFuZV0gOiBwYW5lO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFBhbmVzKCk6IE9iamVjdFxyXG4gIFx0Ly8gUmV0dXJucyBhIHBsYWluIG9iamVjdCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgW3BhbmVzXSgjbWFwLXBhbmUpIGFzIGtleXMgYW5kXHJcbiAgXHQvLyB0aGUgcGFuZXMgYXMgdmFsdWVzLlxyXG4gIFx0Z2V0UGFuZXM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX3BhbmVzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENvbnRhaW5lcjogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIEhUTUwgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBtYXAuXHJcbiAgXHRnZXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBzZWN0aW9uIENvbnZlcnNpb24gTWV0aG9kc1xyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Wm9vbVNjYWxlKHRvWm9vbTogTnVtYmVyLCBmcm9tWm9vbTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBzY2FsZSBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byBhIG1hcCB0cmFuc2l0aW9uIGZyb20gem9vbSBsZXZlbFxyXG4gIFx0Ly8gYGZyb21ab29tYCB0byBgdG9ab29tYC4gVXNlZCBpbnRlcm5hbGx5IHRvIGhlbHAgd2l0aCB6b29tIGFuaW1hdGlvbnMuXHJcbiAgXHRnZXRab29tU2NhbGU6IGZ1bmN0aW9uICh0b1pvb20sIGZyb21ab29tKSB7XHJcbiAgXHRcdC8vIFRPRE8gcmVwbGFjZSB3aXRoIHVuaXZlcnNhbCBpbXBsZW1lbnRhdGlvbiBhZnRlciByZWZhY3RvcmluZyBwcm9qZWN0aW9uc1xyXG4gIFx0XHR2YXIgY3JzID0gdGhpcy5vcHRpb25zLmNycztcclxuICBcdFx0ZnJvbVpvb20gPSBmcm9tWm9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fem9vbSA6IGZyb21ab29tO1xyXG4gIFx0XHRyZXR1cm4gY3JzLnNjYWxlKHRvWm9vbSkgLyBjcnMuc2NhbGUoZnJvbVpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNjYWxlWm9vbShzY2FsZTogTnVtYmVyLCBmcm9tWm9vbTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB6b29tIGxldmVsIHRoYXQgdGhlIG1hcCB3b3VsZCBlbmQgdXAgYXQsIGlmIGl0IGlzIGF0IGBmcm9tWm9vbWBcclxuICBcdC8vIGxldmVsIGFuZCBldmVyeXRoaW5nIGlzIHNjYWxlZCBieSBhIGZhY3RvciBvZiBgc2NhbGVgLiBJbnZlcnNlIG9mXHJcbiAgXHQvLyBbYGdldFpvb21TY2FsZWBdKCNtYXAtZ2V0Wm9vbVNjYWxlKS5cclxuICBcdGdldFNjYWxlWm9vbTogZnVuY3Rpb24gKHNjYWxlLCBmcm9tWm9vbSkge1xyXG4gIFx0XHR2YXIgY3JzID0gdGhpcy5vcHRpb25zLmNycztcclxuICBcdFx0ZnJvbVpvb20gPSBmcm9tWm9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fem9vbSA6IGZyb21ab29tO1xyXG4gIFx0XHR2YXIgem9vbSA9IGNycy56b29tKHNjYWxlICogY3JzLnNjYWxlKGZyb21ab29tKSk7XHJcbiAgXHRcdHJldHVybiBpc05hTih6b29tKSA/IEluZmluaXR5IDogem9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwcm9qZWN0KGxhdGxuZzogTGF0TG5nLCB6b29tOiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUHJvamVjdHMgYSBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSBgTGF0TG5nYCBhY2NvcmRpbmcgdG8gdGhlIHByb2plY3Rpb25cclxuICBcdC8vIG9mIHRoZSBtYXAncyBDUlMsIHRoZW4gc2NhbGVzIGl0IGFjY29yZGluZyB0byBgem9vbWAgYW5kIHRoZSBDUlMnc1xyXG4gIFx0Ly8gYFRyYW5zZm9ybWF0aW9uYC4gVGhlIHJlc3VsdCBpcyBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvXHJcbiAgXHQvLyB0aGUgQ1JTIG9yaWdpbi5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcsIHpvb20pIHtcclxuICBcdFx0em9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiB6b29tO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KHRvTGF0TG5nKGxhdGxuZyksIHpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVucHJvamVjdChwb2ludDogUG9pbnQsIHpvb206IE51bWJlcik6IExhdExuZ1xyXG4gIFx0Ly8gSW52ZXJzZSBvZiBbYHByb2plY3RgXSgjbWFwLXByb2plY3QpLlxyXG4gIFx0dW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQsIHpvb20pIHtcclxuICBcdFx0em9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiB6b29tO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKHRvUG9pbnQocG9pbnQpLCB6b29tKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBsYXllclBvaW50VG9MYXRMbmcocG9pbnQ6IFBvaW50KTogTGF0TG5nXHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLFxyXG4gIFx0Ly8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSAoZm9yIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwpLlxyXG4gIFx0bGF5ZXJQb2ludFRvTGF0TG5nOiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dmFyIHByb2plY3RlZFBvaW50ID0gdG9Qb2ludChwb2ludCkuYWRkKHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLnVucHJvamVjdChwcm9qZWN0ZWRQb2ludCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGF0TG5nVG9MYXllclBvaW50KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcclxuICBcdC8vIEdpdmVuIGEgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLlxyXG4gIFx0bGF0TG5nVG9MYXllclBvaW50OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdCh0b0xhdExuZyhsYXRsbmcpKS5fcm91bmQoKTtcclxuICBcdFx0cmV0dXJuIHByb2plY3RlZFBvaW50Ll9zdWJ0cmFjdCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXBMYXRMbmcobGF0bG5nOiBMYXRMbmcpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgYSBgTGF0TG5nYCB3aGVyZSBgbGF0YCBhbmQgYGxuZ2AgaGFzIGJlZW4gd3JhcHBlZCBhY2NvcmRpbmcgdG8gdGhlXHJcbiAgXHQvLyBtYXAncyBDUlMncyBgd3JhcExhdGAgYW5kIGB3cmFwTG5nYCBwcm9wZXJ0aWVzLCBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZVxyXG4gIFx0Ly8gQ1JTJ3MgYm91bmRzLlxyXG4gIFx0Ly8gQnkgZGVmYXVsdCB0aGlzIG1lYW5zIGxvbmdpdHVkZSBpcyB3cmFwcGVkIGFyb3VuZCB0aGUgZGF0ZWxpbmUgc28gaXRzXHJcbiAgXHQvLyB2YWx1ZSBpcyBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlcy5cclxuICBcdHdyYXBMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZyh0b0xhdExuZyhsYXRsbmcpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ0JvdW5kc2Agd2l0aCB0aGUgc2FtZSBzaXplIGFzIHRoZSBnaXZlbiBvbmUsIGVuc3VyaW5nIHRoYXRcclxuICBcdC8vIGl0cyBjZW50ZXIgaXMgd2l0aGluIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHQvLyBCeSBkZWZhdWx0IHRoaXMgbWVhbnMgdGhlIGNlbnRlciBsb25naXR1ZGUgaXMgd3JhcHBlZCBhcm91bmQgdGhlIGRhdGVsaW5lIHNvIGl0c1xyXG4gIFx0Ly8gdmFsdWUgaXMgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXMsIGFuZCB0aGUgbWFqb3JpdHkgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Ly8gb3ZlcmxhcHMgdGhlIENSUydzIGJvdW5kcy5cclxuICBcdHdyYXBMYXRMbmdCb3VuZHM6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZ0JvdW5kcyh0b0xhdExuZ0JvdW5kcyhsYXRsbmcpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZShsYXRsbmcxOiBMYXRMbmcsIGxhdGxuZzI6IExhdExuZyk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGFjY29yZGluZyB0b1xyXG4gIFx0Ly8gdGhlIG1hcCdzIENSUy4gQnkgZGVmYXVsdCB0aGlzIG1lYXN1cmVzIGRpc3RhbmNlIGluIG1ldGVycy5cclxuICBcdGRpc3RhbmNlOiBmdW5jdGlvbiAobGF0bG5nMSwgbGF0bG5nMikge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5kaXN0YW5jZSh0b0xhdExuZyhsYXRsbmcxKSwgdG9MYXRMbmcobGF0bG5nMikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIG1hcCBjb250YWluZXIsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmdcclxuICBcdC8vIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLlxyXG4gIFx0Y29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQ6IGZ1bmN0aW9uIChwb2ludCkgeyAvLyAoUG9pbnQpXHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHBvaW50KS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLFxyXG4gIFx0Ly8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLlxyXG4gIFx0bGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQ6IGZ1bmN0aW9uIChwb2ludCkgeyAvLyAoUG9pbnQpXHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHBvaW50KS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjb250YWluZXJQb2ludFRvTGF0TG5nKHBvaW50OiBQb2ludCk6IExhdExuZ1xyXG4gIFx0Ly8gR2l2ZW4gYSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLCByZXR1cm5zXHJcbiAgXHQvLyB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSAoZm9yIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwpLlxyXG4gIFx0Y29udGFpbmVyUG9pbnRUb0xhdExuZzogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBsYXllclBvaW50ID0gdGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh0b1BvaW50KHBvaW50KSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhsYXllclBvaW50KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBsYXRMbmdUb0NvbnRhaW5lclBvaW50KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcclxuICBcdC8vIEdpdmVuIGEgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gcmVsYXRpdmUgdG8gdGhlIG1hcCBjb250YWluZXIuXHJcbiAgXHRsYXRMbmdUb0NvbnRhaW5lclBvaW50OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KHRvTGF0TG5nKGxhdGxuZykpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChldjogTW91c2VFdmVudCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIE1vdXNlRXZlbnQgb2JqZWN0LCByZXR1cm5zIHRoZSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZVxyXG4gIFx0Ly8gbWFwIGNvbnRhaW5lciB3aGVyZSB0aGUgZXZlbnQgdG9vayBwbGFjZS5cclxuICBcdG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRyZXR1cm4gZ2V0TW91c2VQb3NpdGlvbihlLCB0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG1vdXNlRXZlbnRUb0xheWVyUG9pbnQoZXY6IE1vdXNlRXZlbnQpOiBQb2ludFxyXG4gIFx0Ly8gR2l2ZW4gYSBNb3VzZUV2ZW50IG9iamVjdCwgcmV0dXJucyB0aGUgcGl4ZWwgY29vcmRpbmF0ZSByZWxhdGl2ZSB0b1xyXG4gIFx0Ly8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pIHdoZXJlIHRoZSBldmVudCB0b29rIHBsYWNlLlxyXG4gIFx0bW91c2VFdmVudFRvTGF5ZXJQb2ludDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbW91c2VFdmVudFRvTGF0TG5nKGV2OiBNb3VzZUV2ZW50KTogTGF0TG5nXHJcbiAgXHQvLyBHaXZlbiBhIE1vdXNlRXZlbnQgb2JqZWN0LCByZXR1cm5zIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlIHdoZXJlIHRoZVxyXG4gIFx0Ly8gZXZlbnQgdG9vayBwbGFjZS5cclxuICBcdG1vdXNlRXZlbnRUb0xhdExuZzogZnVuY3Rpb24gKGUpIHsgLy8gKE1vdXNlRXZlbnQpXHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQoZSkpO1xyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gbWFwIGluaXRpYWxpemF0aW9uIG1ldGhvZHNcclxuXHJcbiAgXHRfaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIgPSBnZXQoaWQpO1xyXG5cclxuICBcdFx0aWYgKCFjb250YWluZXIpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ01hcCBjb250YWluZXIgbm90IGZvdW5kLicpO1xyXG4gIFx0XHR9IGVsc2UgaWYgKGNvbnRhaW5lci5fbGVhZmxldF9pZCkge1xyXG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLicpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRvbihjb250YWluZXIsICdzY3JvbGwnLCB0aGlzLl9vblNjcm9sbCwgdGhpcyk7XHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lcklkID0gc3RhbXAoY29udGFpbmVyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcclxuXHJcbiAgXHRcdHRoaXMuX2ZhZGVBbmltYXRlZCA9IHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uICYmIGFueTNkO1xyXG5cclxuICBcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC1jb250YWluZXInICtcclxuICBcdFx0XHQodG91Y2ggPyAnIGxlYWZsZXQtdG91Y2gnIDogJycpICtcclxuICBcdFx0XHQocmV0aW5hID8gJyBsZWFmbGV0LXJldGluYScgOiAnJykgK1xyXG4gIFx0XHRcdChpZWx0OSA/ICcgbGVhZmxldC1vbGRpZScgOiAnJykgK1xyXG4gIFx0XHRcdChzYWZhcmkgPyAnIGxlYWZsZXQtc2FmYXJpJyA6ICcnKSArXHJcbiAgXHRcdFx0KHRoaXMuX2ZhZGVBbmltYXRlZCA/ICcgbGVhZmxldC1mYWRlLWFuaW0nIDogJycpKTtcclxuXHJcbiAgXHRcdHZhciBwb3NpdGlvbiA9IGdldFN0eWxlKGNvbnRhaW5lciwgJ3Bvc2l0aW9uJyk7XHJcblxyXG4gIFx0XHRpZiAocG9zaXRpb24gIT09ICdhYnNvbHV0ZScgJiYgcG9zaXRpb24gIT09ICdyZWxhdGl2ZScgJiYgcG9zaXRpb24gIT09ICdmaXhlZCcpIHtcclxuICBcdFx0XHRjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0UGFuZXMoKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pbml0Q29udHJvbFBvcykge1xyXG4gIFx0XHRcdHRoaXMuX2luaXRDb250cm9sUG9zKCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRQYW5lczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcGFuZXMgPSB0aGlzLl9wYW5lcyA9IHt9O1xyXG4gIFx0XHR0aGlzLl9wYW5lUmVuZGVyZXJzID0ge307XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvblxyXG4gIFx0XHQvL1xyXG4gIFx0XHQvLyBQYW5lcyBhcmUgRE9NIGVsZW1lbnRzIHVzZWQgdG8gY29udHJvbCB0aGUgb3JkZXJpbmcgb2YgbGF5ZXJzIG9uIHRoZSBtYXAuIFlvdVxyXG4gIFx0XHQvLyBjYW4gYWNjZXNzIHBhbmVzIHdpdGggW2BtYXAuZ2V0UGFuZWBdKCNtYXAtZ2V0cGFuZSkgb3JcclxuICBcdFx0Ly8gW2BtYXAuZ2V0UGFuZXNgXSgjbWFwLWdldHBhbmVzKSBtZXRob2RzLiBOZXcgcGFuZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGVcclxuICBcdFx0Ly8gW2BtYXAuY3JlYXRlUGFuZWBdKCNtYXAtY3JlYXRlcGFuZSkgbWV0aG9kLlxyXG4gIFx0XHQvL1xyXG4gIFx0XHQvLyBFdmVyeSBtYXAgaGFzIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBwYW5lcyB0aGF0IGRpZmZlciBvbmx5IGluIHpJbmRleC5cclxuICBcdFx0Ly9cclxuICBcdFx0Ly8gQHBhbmUgbWFwUGFuZTogSFRNTEVsZW1lbnQgPSAnYXV0bydcclxuICBcdFx0Ly8gUGFuZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBtYXAgcGFuZXNcclxuXHJcbiAgXHRcdHRoaXMuX21hcFBhbmUgPSB0aGlzLmNyZWF0ZVBhbmUoJ21hcFBhbmUnLCB0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLCBuZXcgUG9pbnQoMCwgMCkpO1xyXG5cclxuICBcdFx0Ly8gQHBhbmUgdGlsZVBhbmU6IEhUTUxFbGVtZW50ID0gMjAwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIGBHcmlkTGF5ZXJgcyBhbmQgYFRpbGVMYXllcmBzXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgndGlsZVBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgb3ZlcmxheVBhbmU6IEhUTUxFbGVtZW50ID0gNDAwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIG92ZXJsYXkgc2hhZG93cyAoZS5nLiBgTWFya2VyYCBzaGFkb3dzKVxyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ3NoYWRvd1BhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgc2hhZG93UGFuZTogSFRNTEVsZW1lbnQgPSA1MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgdmVjdG9ycyAoYFBhdGhgcywgbGlrZSBgUG9seWxpbmVgcyBhbmQgYFBvbHlnb25gcyksIGBJbWFnZU92ZXJsYXlgcyBhbmQgYFZpZGVvT3ZlcmxheWBzXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgnb3ZlcmxheVBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgbWFya2VyUGFuZTogSFRNTEVsZW1lbnQgPSA2MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgYEljb25gcyBvZiBgTWFya2VyYHNcclxuICBcdFx0dGhpcy5jcmVhdGVQYW5lKCdtYXJrZXJQYW5lJyk7XHJcbiAgXHRcdC8vIEBwYW5lIHRvb2x0aXBQYW5lOiBIVE1MRWxlbWVudCA9IDY1MFxyXG4gIFx0XHQvLyBQYW5lIGZvciBgVG9vbHRpcGBzLlxyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ3Rvb2x0aXBQYW5lJyk7XHJcbiAgXHRcdC8vIEBwYW5lIHBvcHVwUGFuZTogSFRNTEVsZW1lbnQgPSA3MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgYFBvcHVwYHMuXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgncG9wdXBQYW5lJyk7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uKSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3MocGFuZXMubWFya2VyUGFuZSwgJ2xlYWZsZXQtem9vbS1oaWRlJyk7XHJcbiAgXHRcdFx0YWRkQ2xhc3MocGFuZXMuc2hhZG93UGFuZSwgJ2xlYWZsZXQtem9vbS1oaWRlJyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIHByaXZhdGUgbWV0aG9kcyB0aGF0IG1vZGlmeSBtYXAgc3RhdGVcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBNYXAgc3RhdGUgY2hhbmdlIGV2ZW50c1xyXG4gIFx0X3Jlc2V0VmlldzogZnVuY3Rpb24gKGNlbnRlciwgem9vbSkge1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLCBuZXcgUG9pbnQoMCwgMCkpO1xyXG5cclxuICBcdFx0dmFyIGxvYWRpbmcgPSAhdGhpcy5fbG9hZGVkO1xyXG4gIFx0XHR0aGlzLl9sb2FkZWQgPSB0cnVlO1xyXG4gIFx0XHR6b29tID0gdGhpcy5fbGltaXRab29tKHpvb20pO1xyXG5cclxuICBcdFx0dGhpcy5maXJlKCd2aWV3cHJlcmVzZXQnKTtcclxuXHJcbiAgXHRcdHZhciB6b29tQ2hhbmdlZCA9IHRoaXMuX3pvb20gIT09IHpvb207XHJcbiAgXHRcdHRoaXNcclxuICBcdFx0XHQuX21vdmVTdGFydCh6b29tQ2hhbmdlZCwgZmFsc2UpXHJcbiAgXHRcdFx0Ll9tb3ZlKGNlbnRlciwgem9vbSlcclxuICBcdFx0XHQuX21vdmVFbmQoem9vbUNoYW5nZWQpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IHZpZXdyZXNldDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIG5lZWRzIHRvIHJlZHJhdyBpdHMgY29udGVudCAodGhpcyB1c3VhbGx5IGhhcHBlbnNcclxuICBcdFx0Ly8gb24gbWFwIHpvb20gb3IgbG9hZCkuIFZlcnkgdXNlZnVsIGZvciBjcmVhdGluZyBjdXN0b20gb3ZlcmxheXMuXHJcbiAgXHRcdHRoaXMuZmlyZSgndmlld3Jlc2V0Jyk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9hZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIGlzIGluaXRpYWxpemVkICh3aGVuIGl0cyBjZW50ZXIgYW5kIHpvb20gYXJlIHNldFxyXG4gIFx0XHQvLyBmb3IgdGhlIGZpcnN0IHRpbWUpLlxyXG4gIFx0XHRpZiAobG9hZGluZykge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbG9hZCcpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlU3RhcnQ6IGZ1bmN0aW9uICh6b29tQ2hhbmdlZCwgbm9Nb3ZlU3RhcnQpIHtcclxuICBcdFx0Ly8gQGV2ZW50IHpvb21zdGFydDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIHpvb20gaXMgYWJvdXQgdG8gY2hhbmdlIChlLmcuIGJlZm9yZSB6b29tIGFuaW1hdGlvbikuXHJcbiAgXHRcdC8vIEBldmVudCBtb3Zlc3RhcnQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHZpZXcgb2YgdGhlIG1hcCBzdGFydHMgY2hhbmdpbmcgKGUuZy4gdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlIG1hcCkuXHJcbiAgXHRcdGlmICh6b29tQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKCFub01vdmVTdGFydCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBkYXRhKSB7XHJcbiAgXHRcdGlmICh6b29tID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR6b29tID0gdGhpcy5fem9vbTtcclxuICBcdFx0fVxyXG4gIFx0XHR2YXIgem9vbUNoYW5nZWQgPSB0aGlzLl96b29tICE9PSB6b29tO1xyXG5cclxuICBcdFx0dGhpcy5fem9vbSA9IHpvb207XHJcbiAgXHRcdHRoaXMuX2xhc3RDZW50ZXIgPSBjZW50ZXI7XHJcbiAgXHRcdHRoaXMuX3BpeGVsT3JpZ2luID0gdGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCB6b29tOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyBhbnkgY2hhbmdlIGluIHpvb20gbGV2ZWwsIGluY2x1ZGluZyB6b29tXHJcbiAgXHRcdC8vIGFuZCBmbHkgYW5pbWF0aW9ucy5cclxuICBcdFx0aWYgKHpvb21DaGFuZ2VkIHx8IChkYXRhICYmIGRhdGEucGluY2gpKSB7XHQvLyBBbHdheXMgZmlyZSAnem9vbScgaWYgcGluY2hpbmcgYmVjYXVzZSAjMzUzMFxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbScsIGRhdGEpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZTogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYW55IG1vdmVtZW50IG9mIHRoZSBtYXAsIGluY2x1ZGluZyBwYW4gYW5kXHJcbiAgXHRcdC8vIGZseSBhbmltYXRpb25zLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlJywgZGF0YSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlRW5kOiBmdW5jdGlvbiAoem9vbUNoYW5nZWQpIHtcclxuICBcdFx0Ly8gQGV2ZW50IHpvb21lbmQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCBoYXMgY2hhbmdlZCwgYWZ0ZXIgYW55IGFuaW1hdGlvbnMuXHJcbiAgXHRcdGlmICh6b29tQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbWVuZCcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZWVuZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgY2VudGVyIG9mIHRoZSBtYXAgc3RvcHMgY2hhbmdpbmcgKGUuZy4gdXNlciBzdG9wcGVkXHJcbiAgXHRcdC8vIGRyYWdnaW5nIHRoZSBtYXApLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zdG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9mbHlUb0ZyYW1lKTtcclxuICBcdFx0aWYgKHRoaXMuX3BhbkFuaW0pIHtcclxuICBcdFx0XHR0aGlzLl9wYW5BbmltLnN0b3AoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3Jhd1BhbkJ5OiBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX21hcFBhbmUsIHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdChvZmZzZXQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFpvb21TcGFuOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmdldE1heFpvb20oKSAtIHRoaXMuZ2V0TWluWm9vbSgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcGFuSW5zaWRlTWF4Qm91bmRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fZW5mb3JjaW5nQm91bmRzKSB7XHJcbiAgXHRcdFx0dGhpcy5wYW5JbnNpZGVCb3VuZHModGhpcy5vcHRpb25zLm1heEJvdW5kcyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2NoZWNrSWZMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1NldCBtYXAgY2VudGVyIGFuZCB6b29tIGZpcnN0LicpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIERPTSBldmVudCBoYW5kbGluZ1xyXG5cclxuICBcdC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIGV2ZW50c1xyXG4gIFx0X2luaXRFdmVudHM6IGZ1bmN0aW9uIChyZW1vdmUkJDEpIHtcclxuICBcdFx0dGhpcy5fdGFyZ2V0cyA9IHt9O1xyXG4gIFx0XHR0aGlzLl90YXJnZXRzW3N0YW1wKHRoaXMuX2NvbnRhaW5lcildID0gdGhpcztcclxuXHJcbiAgXHRcdHZhciBvbk9mZiA9IHJlbW92ZSQkMSA/IG9mZiA6IG9uO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGNsaWNrOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIChvciB0YXBzKSB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgZGJsY2xpY2s6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIChvciBkb3VibGUtdGFwcykgdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IG1vdXNlZG93bjogTW91c2VFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHB1c2hlcyB0aGUgbW91c2UgYnV0dG9uIG9uIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZXVwOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXMgdGhlIG1vdXNlIGJ1dHRvbiBvbiB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW91c2VvdmVyOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW91c2VvdXQ6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZW1vdmU6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hpbGUgdGhlIG1vdXNlIG1vdmVzIG92ZXIgdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IGNvbnRleHRtZW51OiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHVzaGVzIHRoZSByaWdodCBtb3VzZSBidXR0b24gb24gdGhlIG1hcCwgcHJldmVudHNcclxuICBcdFx0Ly8gZGVmYXVsdCBicm93c2VyIGNvbnRleHQgbWVudSBmcm9tIHNob3dpbmcgaWYgdGhlcmUgYXJlIGxpc3RlbmVycyBvblxyXG4gIFx0XHQvLyB0aGlzIGV2ZW50LiBBbHNvIGZpcmVkIG9uIG1vYmlsZSB3aGVuIHRoZSB1c2VyIGhvbGRzIGEgc2luZ2xlIHRvdWNoXHJcbiAgXHRcdC8vIGZvciBhIHNlY29uZCAoYWxzbyBjYWxsZWQgbG9uZyBwcmVzcykuXHJcbiAgXHRcdC8vIEBldmVudCBrZXlwcmVzczogS2V5Ym9hcmRFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgYSBrZXkgZnJvbSB0aGUga2V5Ym9hcmQgdGhhdCBwcm9kdWNlcyBhIGNoYXJhY3RlciB2YWx1ZSB3aGlsZSB0aGUgbWFwIGlzIGZvY3VzZWQuXHJcbiAgXHRcdC8vIEBldmVudCBrZXlkb3duOiBLZXlib2FyZEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIGtleSBmcm9tIHRoZSBrZXlib2FyZCB3aGlsZSB0aGUgbWFwIGlzIGZvY3VzZWQuIFVubGlrZSB0aGUgYGtleXByZXNzYCBldmVudCxcclxuICBcdFx0Ly8gdGhlIGBrZXlkb3duYCBldmVudCBpcyBmaXJlZCBmb3Iga2V5cyB0aGF0IHByb2R1Y2UgYSBjaGFyYWN0ZXIgdmFsdWUgYW5kIGZvciBrZXlzXHJcbiAgXHRcdC8vIHRoYXQgZG8gbm90IHByb2R1Y2UgYSBjaGFyYWN0ZXIgdmFsdWUuXHJcbiAgXHRcdC8vIEBldmVudCBrZXl1cDogS2V5Ym9hcmRFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzIGEga2V5IGZyb20gdGhlIGtleWJvYXJkIHdoaWxlIHRoZSBtYXAgaXMgZm9jdXNlZC5cclxuICBcdFx0b25PZmYodGhpcy5fY29udGFpbmVyLCAnY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgJyArXHJcbiAgXHRcdFx0J21vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgY29udGV4dG1lbnUga2V5cHJlc3Mga2V5ZG93biBrZXl1cCcsIHRoaXMuX2hhbmRsZURPTUV2ZW50LCB0aGlzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMudHJhY2tSZXNpemUpIHtcclxuICBcdFx0XHRvbk9mZih3aW5kb3csICdyZXNpemUnLCB0aGlzLl9vblJlc2l6ZSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChhbnkzZCAmJiB0aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCkge1xyXG4gIFx0XHRcdChyZW1vdmUkJDEgPyB0aGlzLm9mZiA6IHRoaXMub24pLmNhbGwodGhpcywgJ21vdmVlbmQnLCB0aGlzLl9vbk1vdmVFbmQpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fcmVzaXplUmVxdWVzdCk7XHJcbiAgXHRcdHRoaXMuX3Jlc2l6ZVJlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lKFxyXG4gIFx0XHQgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5pbnZhbGlkYXRlU2l6ZSh7ZGVib3VuY2VNb3ZlZW5kOiB0cnVlfSk7IH0sIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25TY3JvbGw6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY29udGFpbmVyLnNjcm9sbFRvcCAgPSAwO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2Nyb2xsTGVmdCA9IDA7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbk1vdmVFbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHBvcyA9IHRoaXMuX2dldE1hcFBhbmVQb3MoKTtcclxuICBcdFx0aWYgKE1hdGgubWF4KE1hdGguYWJzKHBvcy54KSwgTWF0aC5hYnMocG9zLnkpKSA+PSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCkge1xyXG4gIFx0XHRcdC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDM4NzMgYnV0IFdlYmtpdCBhbHNvIGhhdmVcclxuICBcdFx0XHQvLyBhIHBpeGVsIG9mZnNldCBvbiB2ZXJ5IGhpZ2ggdmFsdWVzLCBzZWU6IGh0dHA6Ly9qc2ZpZGRsZS5uZXQvZGc2cjVoaGIvXHJcbiAgXHRcdFx0dGhpcy5fcmVzZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksIHRoaXMuZ2V0Wm9vbSgpKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfZmluZEV2ZW50VGFyZ2V0czogZnVuY3Rpb24gKGUsIHR5cGUpIHtcclxuICBcdFx0dmFyIHRhcmdldHMgPSBbXSxcclxuICBcdFx0ICAgIHRhcmdldCxcclxuICBcdFx0ICAgIGlzSG92ZXIgPSB0eXBlID09PSAnbW91c2VvdXQnIHx8IHR5cGUgPT09ICdtb3VzZW92ZXInLFxyXG4gIFx0XHQgICAgc3JjID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50LFxyXG4gIFx0XHQgICAgZHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgXHRcdHdoaWxlIChzcmMpIHtcclxuICBcdFx0XHR0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3N0YW1wKHNyYyldO1xyXG4gIFx0XHRcdGlmICh0YXJnZXQgJiYgKHR5cGUgPT09ICdjbGljaycgfHwgdHlwZSA9PT0gJ3ByZWNsaWNrJykgJiYgIWUuX3NpbXVsYXRlZCAmJiB0aGlzLl9kcmFnZ2FibGVNb3ZlZCh0YXJnZXQpKSB7XHJcbiAgXHRcdFx0XHQvLyBQcmV2ZW50IGZpcmluZyBjbGljayBhZnRlciB5b3UganVzdCBkcmFnZ2VkIGFuIG9iamVjdC5cclxuICBcdFx0XHRcdGRyYWdnaW5nID0gdHJ1ZTtcclxuICBcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRpZiAodGFyZ2V0ICYmIHRhcmdldC5saXN0ZW5zKHR5cGUsIHRydWUpKSB7XHJcbiAgXHRcdFx0XHRpZiAoaXNIb3ZlciAmJiAhaXNFeHRlcm5hbFRhcmdldChzcmMsIGUpKSB7IGJyZWFrOyB9XHJcbiAgXHRcdFx0XHR0YXJnZXRzLnB1c2godGFyZ2V0KTtcclxuICBcdFx0XHRcdGlmIChpc0hvdmVyKSB7IGJyZWFrOyB9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGlmIChzcmMgPT09IHRoaXMuX2NvbnRhaW5lcikgeyBicmVhazsgfVxyXG4gIFx0XHRcdHNyYyA9IHNyYy5wYXJlbnROb2RlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICghdGFyZ2V0cy5sZW5ndGggJiYgIWRyYWdnaW5nICYmICFpc0hvdmVyICYmIGlzRXh0ZXJuYWxUYXJnZXQoc3JjLCBlKSkge1xyXG4gIFx0XHRcdHRhcmdldHMgPSBbdGhpc107XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRhcmdldHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVET01FdmVudDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQgfHwgc2tpcHBlZChlKSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciB0eXBlID0gZS50eXBlO1xyXG5cclxuICBcdFx0aWYgKHR5cGUgPT09ICdtb3VzZWRvd24nIHx8IHR5cGUgPT09ICdrZXlwcmVzcycgfHwgdHlwZSA9PT0gJ2tleXVwJyB8fCB0eXBlID09PSAna2V5ZG93bicpIHtcclxuICBcdFx0XHQvLyBwcmV2ZW50cyBvdXRsaW5lIHdoZW4gY2xpY2tpbmcgb24ga2V5Ym9hcmQtZm9jdXNhYmxlIGVsZW1lbnRcclxuICBcdFx0XHRwcmV2ZW50T3V0bGluZShlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9maXJlRE9NRXZlbnQoZSwgdHlwZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3VzZUV2ZW50czogWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnY29udGV4dG1lbnUnXSxcclxuXHJcbiAgXHRfZmlyZURPTUV2ZW50OiBmdW5jdGlvbiAoZSwgdHlwZSwgdGFyZ2V0cykge1xyXG5cclxuICBcdFx0aWYgKGUudHlwZSA9PT0gJ2NsaWNrJykge1xyXG4gIFx0XHRcdC8vIEZpcmUgYSBzeW50aGV0aWMgJ3ByZWNsaWNrJyBldmVudCB3aGljaCBwcm9wYWdhdGVzIHVwIChtYWlubHkgZm9yIGNsb3NpbmcgcG9wdXBzKS5cclxuICBcdFx0XHQvLyBAZXZlbnQgcHJlY2xpY2s6IE1vdXNlRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCBiZWZvcmUgbW91c2UgY2xpY2sgb24gdGhlIG1hcCAoc29tZXRpbWVzIHVzZWZ1bCB3aGVuIHlvdVxyXG4gIFx0XHRcdC8vIHdhbnQgc29tZXRoaW5nIHRvIGhhcHBlbiBvbiBjbGljayBiZWZvcmUgYW55IGV4aXN0aW5nIGNsaWNrXHJcbiAgXHRcdFx0Ly8gaGFuZGxlcnMgc3RhcnQgcnVubmluZykuXHJcbiAgXHRcdFx0dmFyIHN5bnRoID0gZXh0ZW5kKHt9LCBlKTtcclxuICBcdFx0XHRzeW50aC50eXBlID0gJ3ByZWNsaWNrJztcclxuICBcdFx0XHR0aGlzLl9maXJlRE9NRXZlbnQoc3ludGgsIHN5bnRoLnR5cGUsIHRhcmdldHMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoZS5fc3RvcHBlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdC8vIEZpbmQgdGhlIGxheWVyIHRoZSBldmVudCBpcyBwcm9wYWdhdGluZyBmcm9tIGFuZCBpdHMgcGFyZW50cy5cclxuICBcdFx0dGFyZ2V0cyA9ICh0YXJnZXRzIHx8IFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyhlLCB0eXBlKSk7XHJcblxyXG4gIFx0XHRpZiAoIXRhcmdldHMubGVuZ3RoKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0dmFyIHRhcmdldCA9IHRhcmdldHNbMF07XHJcbiAgXHRcdGlmICh0eXBlID09PSAnY29udGV4dG1lbnUnICYmIHRhcmdldC5saXN0ZW5zKHR5cGUsIHRydWUpKSB7XHJcbiAgXHRcdFx0cHJldmVudERlZmF1bHQoZSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBkYXRhID0ge1xyXG4gIFx0XHRcdG9yaWdpbmFsRXZlbnQ6IGVcclxuICBcdFx0fTtcclxuXHJcbiAgXHRcdGlmIChlLnR5cGUgIT09ICdrZXlwcmVzcycgJiYgZS50eXBlICE9PSAna2V5ZG93bicgJiYgZS50eXBlICE9PSAna2V5dXAnKSB7XHJcbiAgXHRcdFx0dmFyIGlzTWFya2VyID0gdGFyZ2V0LmdldExhdExuZyAmJiAoIXRhcmdldC5fcmFkaXVzIHx8IHRhcmdldC5fcmFkaXVzIDw9IDEwKTtcclxuICBcdFx0XHRkYXRhLmNvbnRhaW5lclBvaW50ID0gaXNNYXJrZXIgP1xyXG4gIFx0XHRcdFx0dGhpcy5sYXRMbmdUb0NvbnRhaW5lclBvaW50KHRhcmdldC5nZXRMYXRMbmcoKSkgOiB0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xyXG4gIFx0XHRcdGRhdGEubGF5ZXJQb2ludCA9IHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoZGF0YS5jb250YWluZXJQb2ludCk7XHJcbiAgXHRcdFx0ZGF0YS5sYXRsbmcgPSBpc01hcmtlciA/IHRhcmdldC5nZXRMYXRMbmcoKSA6IHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGRhdGEubGF5ZXJQb2ludCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHRhcmdldHNbaV0uZmlyZSh0eXBlLCBkYXRhLCB0cnVlKTtcclxuICBcdFx0XHRpZiAoZGF0YS5vcmlnaW5hbEV2ZW50Ll9zdG9wcGVkIHx8XHJcbiAgXHRcdFx0XHQodGFyZ2V0c1tpXS5vcHRpb25zLmJ1YmJsaW5nTW91c2VFdmVudHMgPT09IGZhbHNlICYmIGluZGV4T2YodGhpcy5fbW91c2VFdmVudHMsIHR5cGUpICE9PSAtMSkpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2RyYWdnYWJsZU1vdmVkOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdG9iaiA9IG9iai5kcmFnZ2luZyAmJiBvYmouZHJhZ2dpbmcuZW5hYmxlZCgpID8gb2JqIDogdGhpcztcclxuICBcdFx0cmV0dXJuIChvYmouZHJhZ2dpbmcgJiYgb2JqLmRyYWdnaW5nLm1vdmVkKCkpIHx8ICh0aGlzLmJveFpvb20gJiYgdGhpcy5ib3hab29tLm1vdmVkKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2xlYXJIYW5kbGVyczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5faGFuZGxlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHR0aGlzLl9oYW5kbGVyc1tpXS5kaXNhYmxlKCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gT3RoZXIgTWV0aG9kc1xyXG5cclxuICBcdC8vIEBtZXRob2Qgd2hlblJlYWR5KGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICBcdC8vIFJ1bnMgdGhlIGdpdmVuIGZ1bmN0aW9uIGBmbmAgd2hlbiB0aGUgbWFwIGdldHMgaW5pdGlhbGl6ZWQgd2l0aFxyXG4gIFx0Ly8gYSB2aWV3IChjZW50ZXIgYW5kIHpvb20pIGFuZCBhdCBsZWFzdCBvbmUgbGF5ZXIsIG9yIGltbWVkaWF0ZWx5XHJcbiAgXHQvLyBpZiBpdCdzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG9wdGlvbmFsbHkgcGFzc2luZyBhIGZ1bmN0aW9uIGNvbnRleHQuXHJcbiAgXHR3aGVuUmVhZHk6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0Y2FsbGJhY2suY2FsbChjb250ZXh0IHx8IHRoaXMsIHt0YXJnZXQ6IHRoaXN9KTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0aGlzLm9uKCdsb2FkJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gcHJpdmF0ZSBtZXRob2RzIGZvciBnZXR0aW5nIG1hcCBzdGF0ZVxyXG5cclxuICBcdF9nZXRNYXBQYW5lUG9zOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBnZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSB8fCBuZXcgUG9pbnQoMCwgMCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fZ2V0TWFwUGFuZVBvcygpO1xyXG4gIFx0XHRyZXR1cm4gcG9zICYmICFwb3MuZXF1YWxzKFswLCAwXSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRUb3BMZWZ0UG9pbnQ6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcclxuICBcdFx0dmFyIHBpeGVsT3JpZ2luID0gY2VudGVyICYmIHpvb20gIT09IHVuZGVmaW5lZCA/XHJcbiAgXHRcdFx0dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKSA6XHJcbiAgXHRcdFx0dGhpcy5nZXRQaXhlbE9yaWdpbigpO1xyXG4gIFx0XHRyZXR1cm4gcGl4ZWxPcmlnaW4uc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldE5ld1BpeGVsT3JpZ2luOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tKSB7XHJcbiAgXHRcdHZhciB2aWV3SGFsZiA9IHRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtcclxuICBcdFx0cmV0dXJuIHRoaXMucHJvamVjdChjZW50ZXIsIHpvb20pLl9zdWJ0cmFjdCh2aWV3SGFsZikuX2FkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpLl9yb3VuZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbGF0TG5nVG9OZXdMYXllclBvaW50OiBmdW5jdGlvbiAobGF0bG5nLCB6b29tLCBjZW50ZXIpIHtcclxuICBcdFx0dmFyIHRvcExlZnQgPSB0aGlzLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIsIHpvb20pO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0KGxhdGxuZywgem9vbSkuX3N1YnRyYWN0KHRvcExlZnQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcywgem9vbSwgY2VudGVyKSB7XHJcbiAgXHRcdHZhciB0b3BMZWZ0ID0gdGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKTtcclxuICBcdFx0cmV0dXJuIHRvQm91bmRzKFtcclxuICBcdFx0XHR0aGlzLnByb2plY3QobGF0TG5nQm91bmRzLmdldFNvdXRoV2VzdCgpLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdCksXHJcbiAgXHRcdFx0dGhpcy5wcm9qZWN0KGxhdExuZ0JvdW5kcy5nZXROb3J0aFdlc3QoKSwgem9vbSkuX3N1YnRyYWN0KHRvcExlZnQpLFxyXG4gIFx0XHRcdHRoaXMucHJvamVjdChsYXRMbmdCb3VuZHMuZ2V0U291dGhFYXN0KCksIHpvb20pLl9zdWJ0cmFjdCh0b3BMZWZ0KSxcclxuICBcdFx0XHR0aGlzLnByb2plY3QobGF0TG5nQm91bmRzLmdldE5vcnRoRWFzdCgpLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdClcclxuICBcdFx0XSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGxheWVyIHBvaW50IG9mIHRoZSBjdXJyZW50IGNlbnRlclxyXG4gIFx0X2dldENlbnRlckxheWVyUG9pbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gb2Zmc2V0IG9mIHRoZSBzcGVjaWZpZWQgcGxhY2UgdG8gdGhlIGN1cnJlbnQgY2VudGVyIGluIHBpeGVsc1xyXG4gIFx0X2dldENlbnRlck9mZnNldDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQobGF0bG5nKS5zdWJ0cmFjdCh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBhZGp1c3QgY2VudGVyIGZvciB2aWV3IHRvIGdldCBpbnNpZGUgYm91bmRzXHJcbiAgXHRfbGltaXRDZW50ZXI6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIGJvdW5kcykge1xyXG5cclxuICBcdFx0aWYgKCFib3VuZHMpIHsgcmV0dXJuIGNlbnRlcjsgfVxyXG5cclxuICBcdFx0dmFyIGNlbnRlclBvaW50ID0gdGhpcy5wcm9qZWN0KGNlbnRlciwgem9vbSksXHJcbiAgXHRcdCAgICB2aWV3SGFsZiA9IHRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLFxyXG4gIFx0XHQgICAgdmlld0JvdW5kcyA9IG5ldyBCb3VuZHMoY2VudGVyUG9pbnQuc3VidHJhY3Qodmlld0hhbGYpLCBjZW50ZXJQb2ludC5hZGQodmlld0hhbGYpKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IHRoaXMuX2dldEJvdW5kc09mZnNldCh2aWV3Qm91bmRzLCBib3VuZHMsIHpvb20pO1xyXG5cclxuICBcdFx0Ly8gSWYgb2Zmc2V0IGlzIGxlc3MgdGhhbiBhIHBpeGVsLCBpZ25vcmUuXHJcbiAgXHRcdC8vIFRoaXMgcHJldmVudHMgdW5zdGFibGUgcHJvamVjdGlvbnMgZnJvbSBnZXR0aW5nIGludG9cclxuICBcdFx0Ly8gYW4gaW5maW5pdGUgbG9vcCBvZiB0aW55IG9mZnNldHMuXHJcbiAgXHRcdGlmIChvZmZzZXQucm91bmQoKS5lcXVhbHMoWzAsIDBdKSkge1xyXG4gIFx0XHRcdHJldHVybiBjZW50ZXI7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLnVucHJvamVjdChjZW50ZXJQb2ludC5hZGQob2Zmc2V0KSwgem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGFkanVzdCBvZmZzZXQgZm9yIHZpZXcgdG8gZ2V0IGluc2lkZSBib3VuZHNcclxuICBcdF9saW1pdE9mZnNldDogZnVuY3Rpb24gKG9mZnNldCwgYm91bmRzKSB7XHJcbiAgXHRcdGlmICghYm91bmRzKSB7IHJldHVybiBvZmZzZXQ7IH1cclxuXHJcbiAgXHRcdHZhciB2aWV3Qm91bmRzID0gdGhpcy5nZXRQaXhlbEJvdW5kcygpLFxyXG4gIFx0XHQgICAgbmV3Qm91bmRzID0gbmV3IEJvdW5kcyh2aWV3Qm91bmRzLm1pbi5hZGQob2Zmc2V0KSwgdmlld0JvdW5kcy5tYXguYWRkKG9mZnNldCkpO1xyXG5cclxuICBcdFx0cmV0dXJuIG9mZnNldC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG5ld0JvdW5kcywgYm91bmRzKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIHJldHVybnMgb2Zmc2V0IG5lZWRlZCBmb3IgcHhCb3VuZHMgdG8gZ2V0IGluc2lkZSBtYXhCb3VuZHMgYXQgYSBzcGVjaWZpZWQgem9vbVxyXG4gIFx0X2dldEJvdW5kc09mZnNldDogZnVuY3Rpb24gKHB4Qm91bmRzLCBtYXhCb3VuZHMsIHpvb20pIHtcclxuICBcdFx0dmFyIHByb2plY3RlZE1heEJvdW5kcyA9IHRvQm91bmRzKFxyXG4gIFx0XHQgICAgICAgIHRoaXMucHJvamVjdChtYXhCb3VuZHMuZ2V0Tm9ydGhFYXN0KCksIHpvb20pLFxyXG4gIFx0XHQgICAgICAgIHRoaXMucHJvamVjdChtYXhCb3VuZHMuZ2V0U291dGhXZXN0KCksIHpvb20pXHJcbiAgXHRcdCAgICApLFxyXG4gIFx0XHQgICAgbWluT2Zmc2V0ID0gcHJvamVjdGVkTWF4Qm91bmRzLm1pbi5zdWJ0cmFjdChweEJvdW5kcy5taW4pLFxyXG4gIFx0XHQgICAgbWF4T2Zmc2V0ID0gcHJvamVjdGVkTWF4Qm91bmRzLm1heC5zdWJ0cmFjdChweEJvdW5kcy5tYXgpLFxyXG5cclxuICBcdFx0ICAgIGR4ID0gdGhpcy5fcmVib3VuZChtaW5PZmZzZXQueCwgLW1heE9mZnNldC54KSxcclxuICBcdFx0ICAgIGR5ID0gdGhpcy5fcmVib3VuZChtaW5PZmZzZXQueSwgLW1heE9mZnNldC55KTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoZHgsIGR5KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlYm91bmQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xyXG4gIFx0XHRyZXR1cm4gbGVmdCArIHJpZ2h0ID4gMCA/XHJcbiAgXHRcdFx0TWF0aC5yb3VuZChsZWZ0IC0gcmlnaHQpIC8gMiA6XHJcbiAgXHRcdFx0TWF0aC5tYXgoMCwgTWF0aC5jZWlsKGxlZnQpKSAtIE1hdGgubWF4KDAsIE1hdGguZmxvb3IocmlnaHQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2xpbWl0Wm9vbTogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0dmFyIG1pbiA9IHRoaXMuZ2V0TWluWm9vbSgpLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5nZXRNYXhab29tKCksXHJcbiAgXHRcdCAgICBzbmFwID0gYW55M2QgPyB0aGlzLm9wdGlvbnMuem9vbVNuYXAgOiAxO1xyXG4gIFx0XHRpZiAoc25hcCkge1xyXG4gIFx0XHRcdHpvb20gPSBNYXRoLnJvdW5kKHpvb20gLyBzbmFwKSAqIHNuYXA7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB6b29tKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblBhblRyYW5zaXRpb25TdGVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuZmlyZSgnbW92ZScpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25QYW5UcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcFBhbmUsICdsZWFmbGV0LXBhbi1hbmltJyk7XHJcbiAgXHRcdHRoaXMuZmlyZSgnbW92ZWVuZCcpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdHJ5QW5pbWF0ZWRQYW46IGZ1bmN0aW9uIChjZW50ZXIsIG9wdGlvbnMpIHtcclxuICBcdFx0Ly8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBuZXcgYW5kIGN1cnJlbnQgY2VudGVycyBpbiBwaXhlbHNcclxuICBcdFx0dmFyIG9mZnNldCA9IHRoaXMuX2dldENlbnRlck9mZnNldChjZW50ZXIpLl90cnVuYygpO1xyXG5cclxuICBcdFx0Ly8gZG9uJ3QgYW5pbWF0ZSB0b28gZmFyIHVubGVzcyBhbmltYXRlOiB0cnVlIHNwZWNpZmllZCBpbiBvcHRpb25zXHJcbiAgXHRcdGlmICgob3B0aW9ucyAmJiBvcHRpb25zLmFuaW1hdGUpICE9PSB0cnVlICYmICF0aGlzLmdldFNpemUoKS5jb250YWlucyhvZmZzZXQpKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICBcdFx0dGhpcy5wYW5CeShvZmZzZXQsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRydWU7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jcmVhdGVBbmltUHJveHk6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdHZhciBwcm94eSA9IHRoaXMuX3Byb3h5ID0gY3JlYXRlJDEoJ2RpdicsICdsZWFmbGV0LXByb3h5IGxlYWZsZXQtem9vbS1hbmltYXRlZCcpO1xyXG4gIFx0XHR0aGlzLl9wYW5lcy5tYXBQYW5lLmFwcGVuZENoaWxkKHByb3h5KTtcclxuXHJcbiAgXHRcdHRoaXMub24oJ3pvb21hbmltJywgZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0XHR2YXIgcHJvcCA9IFRSQU5TRk9STSxcclxuICBcdFx0XHQgICAgdHJhbnNmb3JtID0gdGhpcy5fcHJveHkuc3R5bGVbcHJvcF07XHJcblxyXG4gIFx0XHRcdHNldFRyYW5zZm9ybSh0aGlzLl9wcm94eSwgdGhpcy5wcm9qZWN0KGUuY2VudGVyLCBlLnpvb20pLCB0aGlzLmdldFpvb21TY2FsZShlLnpvb20sIDEpKTtcclxuXHJcbiAgXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3IgY2FzZSB3aGVuIHRyYW5zZm9ybSBpcyB0aGUgc2FtZSBhbmQgc28gdHJhbnNpdGlvbmVuZCBldmVudCBpcyBub3QgZmlyZWRcclxuICBcdFx0XHRpZiAodHJhbnNmb3JtID09PSB0aGlzLl9wcm94eS5zdHlsZVtwcm9wXSAmJiB0aGlzLl9hbmltYXRpbmdab29tKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMub24oJ2xvYWQgbW92ZWVuZCcsIHRoaXMuX2FuaW1Nb3ZlRW5kLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX29uKCd1bmxvYWQnLCB0aGlzLl9kZXN0cm95QW5pbVByb3h5LCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2Rlc3Ryb3lBbmltUHJveHk6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlKHRoaXMuX3Byb3h5KTtcclxuICBcdFx0dGhpcy5vZmYoJ2xvYWQgbW92ZWVuZCcsIHRoaXMuX2FuaW1Nb3ZlRW5kLCB0aGlzKTtcclxuICBcdFx0ZGVsZXRlIHRoaXMuX3Byb3h5O1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYW5pbU1vdmVFbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGMgPSB0aGlzLmdldENlbnRlcigpLFxyXG4gIFx0XHQgICAgeiA9IHRoaXMuZ2V0Wm9vbSgpO1xyXG4gIFx0XHRzZXRUcmFuc2Zvcm0odGhpcy5fcHJveHksIHRoaXMucHJvamVjdChjLCB6KSwgdGhpcy5nZXRab29tU2NhbGUoeiwgMSkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2F0Y2hUcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRpZiAodGhpcy5fYW5pbWF0aW5nWm9vbSAmJiBlLnByb3BlcnR5TmFtZS5pbmRleE9mKCd0cmFuc2Zvcm0nKSA+PSAwKSB7XHJcbiAgXHRcdFx0dGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9ub3RoaW5nVG9BbmltYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiAhdGhpcy5fY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xlYWZsZXQtem9vbS1hbmltYXRlZCcpLmxlbmd0aDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RyeUFuaW1hdGVkWm9vbTogZnVuY3Rpb24gKGNlbnRlciwgem9vbSwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICBcdFx0Ly8gZG9uJ3QgYW5pbWF0ZSBpZiBkaXNhYmxlZCwgbm90IHN1cHBvcnRlZCBvciB6b29tIGRpZmZlcmVuY2UgaXMgdG9vIGxhcmdlXHJcbiAgXHRcdGlmICghdGhpcy5fem9vbUFuaW1hdGVkIHx8IG9wdGlvbnMuYW5pbWF0ZSA9PT0gZmFsc2UgfHwgdGhpcy5fbm90aGluZ1RvQW5pbWF0ZSgpIHx8XHJcbiAgXHRcdCAgICAgICAgTWF0aC5hYnMoem9vbSAtIHRoaXMuX3pvb20pID4gdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb25UaHJlc2hvbGQpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIFx0XHQvLyBvZmZzZXQgaXMgdGhlIHBpeGVsIGNvb3JkcyBvZiB0aGUgem9vbSBvcmlnaW4gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY2VudGVyXHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuZ2V0Wm9vbVNjYWxlKHpvb20pLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gdGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KGNlbnRlcikuX2RpdmlkZUJ5KDEgLSAxIC8gc2NhbGUpO1xyXG5cclxuICBcdFx0Ly8gZG9uJ3QgYW5pbWF0ZSBpZiB0aGUgem9vbSBvcmlnaW4gaXNuJ3Qgd2l0aGluIG9uZSBzY3JlZW4gZnJvbSB0aGUgY3VycmVudCBjZW50ZXIsIHVubGVzcyBmb3JjZWRcclxuICBcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gdHJ1ZSAmJiAhdGhpcy5nZXRTaXplKCkuY29udGFpbnMob2Zmc2V0KSkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdHJlcXVlc3RBbmltRnJhbWUoZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRcdHRoaXNcclxuICBcdFx0XHQgICAgLl9tb3ZlU3RhcnQodHJ1ZSwgZmFsc2UpXHJcbiAgXHRcdFx0ICAgIC5fYW5pbWF0ZVpvb20oY2VudGVyLCB6b29tLCB0cnVlKTtcclxuICBcdFx0fSwgdGhpcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdHJ1ZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBzdGFydEFuaW0sIG5vVXBkYXRlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbWFwUGFuZSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGlmIChzdGFydEFuaW0pIHtcclxuICBcdFx0XHR0aGlzLl9hbmltYXRpbmdab29tID0gdHJ1ZTtcclxuXHJcbiAgXHRcdFx0Ly8gcmVtZW1iZXIgd2hhdCBjZW50ZXIvem9vbSB0byBzZXQgYWZ0ZXIgYW5pbWF0aW9uXHJcbiAgXHRcdFx0dGhpcy5fYW5pbWF0ZVRvQ2VudGVyID0gY2VudGVyO1xyXG4gIFx0XHRcdHRoaXMuX2FuaW1hdGVUb1pvb20gPSB6b29tO1xyXG5cclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCAnbGVhZmxldC16b29tLWFuaW0nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQHNlY3Rpb24gT3RoZXIgRXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCB6b29tYW5pbTogWm9vbUFuaW1FdmVudFxyXG4gIFx0XHQvLyBGaXJlZCBhdCBsZWFzdCBvbmNlIHBlciB6b29tIGFuaW1hdGlvbi4gRm9yIGNvbnRpbnVvdXMgem9vbSwgbGlrZSBwaW5jaCB6b29taW5nLCBmaXJlZCBvbmNlIHBlciBmcmFtZSBkdXJpbmcgem9vbS5cclxuICBcdFx0dGhpcy5maXJlKCd6b29tYW5pbScsIHtcclxuICBcdFx0XHRjZW50ZXI6IGNlbnRlcixcclxuICBcdFx0XHR6b29tOiB6b29tLFxyXG4gIFx0XHRcdG5vVXBkYXRlOiBub1VwZGF0ZVxyXG4gIFx0XHR9KTtcclxuXHJcbiAgXHRcdC8vIFdvcmsgYXJvdW5kIHdlYmtpdCBub3QgZmlyaW5nICd0cmFuc2l0aW9uZW5kJywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzM2ODksIDI2OTNcclxuICBcdFx0c2V0VGltZW91dChiaW5kKHRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQsIHRoaXMpLCAyNTApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25ab29tVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwUGFuZSkge1xyXG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcFBhbmUsICdsZWFmbGV0LXpvb20tYW5pbScpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9hbmltYXRpbmdab29tID0gZmFsc2U7XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlKHRoaXMuX2FuaW1hdGVUb0NlbnRlciwgdGhpcy5fYW5pbWF0ZVRvWm9vbSk7XHJcblxyXG4gIFx0XHQvLyBUaGlzIGFuaW0gZnJhbWUgc2hvdWxkIHByZXZlbnQgYW4gb2JzY3VyZSBpT1Mgd2Via2l0IHRpbGUgbG9hZGluZyByYWNlIGNvbmRpdGlvbi5cclxuICBcdFx0cmVxdWVzdEFuaW1GcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0dGhpcy5fbW92ZUVuZCh0cnVlKTtcclxuICBcdFx0fSwgdGhpcyk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBzZWN0aW9uXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubWFwKGlkOiBTdHJpbmcsIG9wdGlvbnM/OiBNYXAgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBtYXAgb2JqZWN0IGdpdmVuIHRoZSBET00gSUQgb2YgYSBgPGRpdj5gIGVsZW1lbnRcclxuICAvLyBhbmQgb3B0aW9uYWxseSBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGBNYXAgb3B0aW9uc2AuXHJcbiAgLy9cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLm1hcChlbDogSFRNTEVsZW1lbnQsIG9wdGlvbnM/OiBNYXAgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBtYXAgb2JqZWN0IGdpdmVuIGFuIGluc3RhbmNlIG9mIGEgYDxkaXY+YCBIVE1MIGVsZW1lbnRcclxuICAvLyBhbmQgb3B0aW9uYWxseSBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGBNYXAgb3B0aW9uc2AuXHJcbiAgZnVuY3Rpb24gY3JlYXRlTWFwKGlkLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IE1hcChpZCwgb3B0aW9ucyk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2xcclxuICAgKiBAYWthIEwuQ29udHJvbFxyXG4gICAqIEBpbmhlcml0cyBDbGFzc1xyXG4gICAqXHJcbiAgICogTC5Db250cm9sIGlzIGEgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIG1hcCBjb250cm9scy4gSGFuZGxlcyBwb3NpdGlvbmluZy5cclxuICAgKiBBbGwgb3RoZXIgY29udHJvbHMgZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cclxuICAgKi9cclxuXHJcbiAgdmFyIENvbnRyb2wgPSBDbGFzcy5leHRlbmQoe1xyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgQ29udHJvbCBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gcG9zaXRpb246IFN0cmluZyA9ICd0b3ByaWdodCdcclxuICBcdFx0Ly8gVGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sIChvbmUgb2YgdGhlIG1hcCBjb3JuZXJzKS4gUG9zc2libGUgdmFsdWVzIGFyZSBgJ3RvcGxlZnQnYCxcclxuICBcdFx0Ly8gYCd0b3ByaWdodCdgLCBgJ2JvdHRvbWxlZnQnYCBvciBgJ2JvdHRvbXJpZ2h0J2BcclxuICBcdFx0cG9zaXRpb246ICd0b3ByaWdodCdcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQHNlY3Rpb25cclxuICBcdCAqIENsYXNzZXMgZXh0ZW5kaW5nIEwuQ29udHJvbCB3aWxsIGluaGVyaXQgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxyXG4gIFx0ICpcclxuICBcdCAqIEBtZXRob2QgZ2V0UG9zaXRpb246IHN0cmluZ1xyXG4gIFx0ICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2wuXHJcbiAgXHQgKi9cclxuICBcdGdldFBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb247XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UG9zaXRpb24ocG9zaXRpb246IHN0cmluZyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sLlxyXG4gIFx0c2V0UG9zaXRpb246IGZ1bmN0aW9uIChwb3NpdGlvbikge1xyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xyXG5cclxuICBcdFx0aWYgKG1hcCkge1xyXG4gIFx0XHRcdG1hcC5yZW1vdmVDb250cm9sKHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBwb3NpdGlvbjtcclxuXHJcbiAgXHRcdGlmIChtYXApIHtcclxuICBcdFx0XHRtYXAuYWRkQ29udHJvbCh0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q29udGFpbmVyOiBIVE1MRWxlbWVudFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgSFRNTEVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgY29udHJvbC5cclxuICBcdGdldENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZFRvKG1hcDogTWFwKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyB0aGUgY29udHJvbCB0byB0aGUgZ2l2ZW4gbWFwLlxyXG4gIFx0YWRkVG86IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0dGhpcy5yZW1vdmUoKTtcclxuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xyXG5cclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IHRoaXMub25BZGQobWFwKSxcclxuICBcdFx0ICAgIHBvcyA9IHRoaXMuZ2V0UG9zaXRpb24oKSxcclxuICBcdFx0ICAgIGNvcm5lciA9IG1hcC5fY29udHJvbENvcm5lcnNbcG9zXTtcclxuXHJcbiAgXHRcdGFkZENsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtY29udHJvbCcpO1xyXG5cclxuICBcdFx0aWYgKHBvcy5pbmRleE9mKCdib3R0b20nKSAhPT0gLTEpIHtcclxuICBcdFx0XHRjb3JuZXIuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgY29ybmVyLmZpcnN0Q2hpbGQpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGNvcm5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tYXAub24oJ3VubG9hZCcsIHRoaXMucmVtb3ZlLCB0aGlzKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgY29udHJvbCBmcm9tIHRoZSBtYXAgaXQgaXMgY3VycmVudGx5IGFjdGl2ZSBvbi5cclxuICBcdHJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZW1vdmUodGhpcy5fY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9uUmVtb3ZlKSB7XHJcbiAgXHRcdFx0dGhpcy5vblJlbW92ZSh0aGlzLl9tYXApO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tYXAub2ZmKCd1bmxvYWQnLCB0aGlzLnJlbW92ZSwgdGhpcyk7XHJcbiAgXHRcdHRoaXMuX21hcCA9IG51bGw7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlZm9jdXNPbk1hcDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0Ly8gaWYgbWFwIGV4aXN0cyBhbmQgZXZlbnQgaXMgbm90IGEga2V5Ym9hcmQgZXZlbnRcclxuICBcdFx0aWYgKHRoaXMuX21hcCAmJiBlICYmIGUuc2NyZWVuWCA+IDAgJiYgZS5zY3JlZW5ZID4gMCkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBjb250cm9sID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgQ29udHJvbChvcHRpb25zKTtcclxuICB9O1xyXG5cclxuICAvKiBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xyXG4gICAqIEB1bmluaGVyaXRhYmxlXHJcbiAgICpcclxuICAgKiBFdmVyeSBjb250cm9sIHNob3VsZCBleHRlbmQgZnJvbSBgTC5Db250cm9sYCBhbmQgKHJlLSlpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLlxyXG4gICAqXHJcbiAgICogQG1ldGhvZCBvbkFkZChtYXA6IE1hcCk6IEhUTUxFbGVtZW50XHJcbiAgICogU2hvdWxkIHJldHVybiB0aGUgY29udGFpbmVyIERPTSBlbGVtZW50IGZvciB0aGUgY29udHJvbCBhbmQgYWRkIGxpc3RlbmVycyBvbiByZWxldmFudCBtYXAgZXZlbnRzLiBDYWxsZWQgb24gW2Bjb250cm9sLmFkZFRvKG1hcClgXSgjY29udHJvbC1hZGRUbykuXHJcbiAgICpcclxuICAgKiBAbWV0aG9kIG9uUmVtb3ZlKG1hcDogTWFwKVxyXG4gICAqIE9wdGlvbmFsIG1ldGhvZC4gU2hvdWxkIGNvbnRhaW4gYWxsIGNsZWFuIHVwIGNvZGUgdGhhdCByZW1vdmVzIHRoZSBsaXN0ZW5lcnMgcHJldmlvdXNseSBhZGRlZCBpbiBbYG9uQWRkYF0oI2NvbnRyb2wtb25hZGQpLiBDYWxsZWQgb24gW2Bjb250cm9sLnJlbW92ZSgpYF0oI2NvbnRyb2wtcmVtb3ZlKS5cclxuICAgKi9cclxuXHJcbiAgLyogQG5hbWVzcGFjZSBNYXBcclxuICAgKiBAc2VjdGlvbiBNZXRob2RzIGZvciBMYXllcnMgYW5kIENvbnRyb2xzXHJcbiAgICovXHJcbiAgTWFwLmluY2x1ZGUoe1xyXG4gIFx0Ly8gQG1ldGhvZCBhZGRDb250cm9sKGNvbnRyb2w6IENvbnRyb2wpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBjb250cm9sIHRvIHRoZSBtYXBcclxuICBcdGFkZENvbnRyb2w6IGZ1bmN0aW9uIChjb250cm9sKSB7XHJcbiAgXHRcdGNvbnRyb2wuYWRkVG8odGhpcyk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUNvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIGdpdmVuIGNvbnRyb2wgZnJvbSB0aGUgbWFwXHJcbiAgXHRyZW1vdmVDb250cm9sOiBmdW5jdGlvbiAoY29udHJvbCkge1xyXG4gIFx0XHRjb250cm9sLnJlbW92ZSgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRDb250cm9sUG9zOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBjb3JuZXJzID0gdGhpcy5fY29udHJvbENvcm5lcnMgPSB7fSxcclxuICBcdFx0ICAgIGwgPSAnbGVhZmxldC0nLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udHJvbENvbnRhaW5lciA9XHJcbiAgXHRcdCAgICAgICAgICAgIGNyZWF0ZSQxKCdkaXYnLCBsICsgJ2NvbnRyb2wtY29udGFpbmVyJywgdGhpcy5fY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGZ1bmN0aW9uIGNyZWF0ZUNvcm5lcih2U2lkZSwgaFNpZGUpIHtcclxuICBcdFx0XHR2YXIgY2xhc3NOYW1lID0gbCArIHZTaWRlICsgJyAnICsgbCArIGhTaWRlO1xyXG5cclxuICBcdFx0XHRjb3JuZXJzW3ZTaWRlICsgaFNpZGVdID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Y3JlYXRlQ29ybmVyKCd0b3AnLCAnbGVmdCcpO1xyXG4gIFx0XHRjcmVhdGVDb3JuZXIoJ3RvcCcsICdyaWdodCcpO1xyXG4gIFx0XHRjcmVhdGVDb3JuZXIoJ2JvdHRvbScsICdsZWZ0Jyk7XHJcbiAgXHRcdGNyZWF0ZUNvcm5lcignYm90dG9tJywgJ3JpZ2h0Jyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jbGVhckNvbnRyb2xQb3M6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9jb250cm9sQ29ybmVycykge1xyXG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9jb250cm9sQ29ybmVyc1tpXSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xyXG4gIFx0XHRkZWxldGUgdGhpcy5fY29udHJvbENvcm5lcnM7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jb250cm9sQ29udGFpbmVyO1xyXG4gIFx0fVxyXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2wuTGF5ZXJzXHJcbiAgICogQGFrYSBMLkNvbnRyb2wuTGF5ZXJzXHJcbiAgICogQGluaGVyaXRzIENvbnRyb2xcclxuICAgKlxyXG4gICAqIFRoZSBsYXllcnMgY29udHJvbCBnaXZlcyB1c2VycyB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgYmFzZSBsYXllcnMgYW5kIHN3aXRjaCBvdmVybGF5cyBvbi9vZmYgKGNoZWNrIG91dCB0aGUgW2RldGFpbGVkIGV4YW1wbGVdKGh0dHA6Ly9sZWFmbGV0anMuY29tL2V4YW1wbGVzL2xheWVycy1jb250cm9sLykpLiBFeHRlbmRzIGBDb250cm9sYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBiYXNlTGF5ZXJzID0ge1xyXG4gICAqIFx0XCJNYXBib3hcIjogbWFwYm94LFxyXG4gICAqIFx0XCJPcGVuU3RyZWV0TWFwXCI6IG9zbVxyXG4gICAqIH07XHJcbiAgICpcclxuICAgKiB2YXIgb3ZlcmxheXMgPSB7XHJcbiAgICogXHRcIk1hcmtlclwiOiBtYXJrZXIsXHJcbiAgICogXHRcIlJvYWRzXCI6IHJvYWRzTGF5ZXJcclxuICAgKiB9O1xyXG4gICAqXHJcbiAgICogTC5jb250cm9sLmxheWVycyhiYXNlTGF5ZXJzLCBvdmVybGF5cykuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIFRoZSBgYmFzZUxheWVyc2AgYW5kIGBvdmVybGF5c2AgcGFyYW1ldGVycyBhcmUgb2JqZWN0IGxpdGVyYWxzIHdpdGggbGF5ZXIgbmFtZXMgYXMga2V5cyBhbmQgYExheWVyYCBvYmplY3RzIGFzIHZhbHVlczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICoge1xyXG4gICAqICAgICBcIjxzb21lTmFtZTE+XCI6IGxheWVyMSxcclxuICAgKiAgICAgXCI8c29tZU5hbWUyPlwiOiBsYXllcjJcclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBUaGUgbGF5ZXIgbmFtZXMgY2FuIGNvbnRhaW4gSFRNTCwgd2hpY2ggYWxsb3dzIHlvdSB0byBhZGQgYWRkaXRpb25hbCBzdHlsaW5nIHRvIHRoZSBpdGVtczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICoge1wiPGltZyBzcmM9J215LWxheWVyLWljb24nIC8+IDxzcGFuIGNsYXNzPSdteS1sYXllci1pdGVtJz5NeSBMYXllcjwvc3Bhbj5cIjogbXlMYXllcn1cclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIExheWVycyA9IENvbnRyb2wuZXh0ZW5kKHtcclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIENvbnRyb2wuTGF5ZXJzIG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBjb2xsYXBzZWQ6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgd2lsbCBiZSBjb2xsYXBzZWQgaW50byBhbiBpY29uIGFuZCBleHBhbmRlZCBvbiBtb3VzZSBob3ZlciBvciB0b3VjaC5cclxuICBcdFx0Y29sbGFwc2VkOiB0cnVlLFxyXG4gIFx0XHRwb3NpdGlvbjogJ3RvcHJpZ2h0JyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1pJbmRleDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgY29udHJvbCB3aWxsIGFzc2lnbiB6SW5kZXhlcyBpbiBpbmNyZWFzaW5nIG9yZGVyIHRvIGFsbCBvZiBpdHMgbGF5ZXJzIHNvIHRoYXQgdGhlIG9yZGVyIGlzIHByZXNlcnZlZCB3aGVuIHN3aXRjaGluZyB0aGVtIG9uL29mZi5cclxuICBcdFx0YXV0b1pJbmRleDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gaGlkZVNpbmdsZUJhc2U6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGxheWVycyBpbiB0aGUgY29udHJvbCB3aWxsIGJlIGhpZGRlbiB3aGVuIHRoZXJlIGlzIG9ubHkgb25lLlxyXG4gIFx0XHRoaWRlU2luZ2xlQmFzZTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHNvcnRMYXllcnM6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRvIHNvcnQgdGhlIGxheWVycy4gV2hlbiBgZmFsc2VgLCBsYXllcnMgd2lsbCBrZWVwIHRoZSBvcmRlclxyXG4gIFx0XHQvLyBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGNvbnRyb2wuXHJcbiAgXHRcdHNvcnRMYXllcnM6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzb3J0RnVuY3Rpb246IEZ1bmN0aW9uID0gKlxyXG4gIFx0XHQvLyBBIFtjb21wYXJlIGZ1bmN0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9zb3J0KVxyXG4gIFx0XHQvLyB0aGF0IHdpbGwgYmUgdXNlZCBmb3Igc29ydGluZyB0aGUgbGF5ZXJzLCB3aGVuIGBzb3J0TGF5ZXJzYCBpcyBgdHJ1ZWAuXHJcbiAgXHRcdC8vIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBib3RoIHRoZSBgTC5MYXllcmAgaW5zdGFuY2VzIGFuZCB0aGVpciBuYW1lcywgYXMgaW5cclxuICBcdFx0Ly8gYHNvcnRGdW5jdGlvbihsYXllckEsIGxheWVyQiwgbmFtZUEsIG5hbWVCKWAuXHJcbiAgXHRcdC8vIEJ5IGRlZmF1bHQsIGl0IHNvcnRzIGxheWVycyBhbHBoYWJldGljYWxseSBieSB0aGVpciBuYW1lLlxyXG4gIFx0XHRzb3J0RnVuY3Rpb246IGZ1bmN0aW9uIChsYXllckEsIGxheWVyQiwgbmFtZUEsIG5hbWVCKSB7XHJcbiAgXHRcdFx0cmV0dXJuIG5hbWVBIDwgbmFtZUIgPyAtMSA6IChuYW1lQiA8IG5hbWVBID8gMSA6IDApO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChiYXNlTGF5ZXJzLCBvdmVybGF5cywgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzID0gW107XHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IFtdO1xyXG4gIFx0XHR0aGlzLl9sYXN0WkluZGV4ID0gMDtcclxuICBcdFx0dGhpcy5faGFuZGxpbmdDbGljayA9IGZhbHNlO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSBpbiBiYXNlTGF5ZXJzKSB7XHJcbiAgXHRcdFx0dGhpcy5fYWRkTGF5ZXIoYmFzZUxheWVyc1tpXSwgaSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZvciAoaSBpbiBvdmVybGF5cykge1xyXG4gIFx0XHRcdHRoaXMuX2FkZExheWVyKG92ZXJsYXlzW2ldLCBpLCB0cnVlKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLl9pbml0TGF5b3V0KCk7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xyXG5cclxuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xyXG4gIFx0XHRtYXAub24oJ3pvb21lbmQnLCB0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLCB0aGlzKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzW2ldLmxheWVyLm9uKCdhZGQgcmVtb3ZlJywgdGhpcy5fb25MYXllckNoYW5nZSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLl9jb250YWluZXI7XHJcbiAgXHR9LFxyXG5cclxuICBcdGFkZFRvOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdENvbnRyb2wucHJvdG90eXBlLmFkZFRvLmNhbGwodGhpcywgbWFwKTtcclxuICBcdFx0Ly8gVHJpZ2dlciBleHBhbmQgYWZ0ZXIgTGF5ZXJzIENvbnRyb2wgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byBET00gc28gdGhhdCBpcyBub3cgaGFzIGFuIGFjdHVhbCBoZWlnaHQuXHJcbiAgXHRcdHJldHVybiB0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9tYXAub2ZmKCd6b29tZW5kJywgdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycywgdGhpcyk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpXS5sYXllci5vZmYoJ2FkZCByZW1vdmUnLCB0aGlzLl9vbkxheWVyQ2hhbmdlLCB0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEJhc2VMYXllcihsYXllcjogTGF5ZXIsIG5hbWU6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIEFkZHMgYSBiYXNlIGxheWVyIChyYWRpbyBidXR0b24gZW50cnkpIHdpdGggdGhlIGdpdmVuIG5hbWUgdG8gdGhlIGNvbnRyb2wuXHJcbiAgXHRhZGRCYXNlTGF5ZXI6IGZ1bmN0aW9uIChsYXllciwgbmFtZSkge1xyXG4gIFx0XHR0aGlzLl9hZGRMYXllcihsYXllciwgbmFtZSk7XHJcbiAgXHRcdHJldHVybiAodGhpcy5fbWFwKSA/IHRoaXMuX3VwZGF0ZSgpIDogdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBhZGRPdmVybGF5KGxheWVyOiBMYXllciwgbmFtZTogU3RyaW5nKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhbiBvdmVybGF5IChjaGVja2JveCBlbnRyeSkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB0byB0aGUgY29udHJvbC5cclxuICBcdGFkZE92ZXJsYXk6IGZ1bmN0aW9uIChsYXllciwgbmFtZSkge1xyXG4gIFx0XHR0aGlzLl9hZGRMYXllcihsYXllciwgbmFtZSwgdHJ1ZSk7XHJcbiAgXHRcdHJldHVybiAodGhpcy5fbWFwKSA/IHRoaXMuX3VwZGF0ZSgpIDogdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVMYXllcihsYXllcjogTGF5ZXIpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmUgdGhlIGdpdmVuIGxheWVyIGZyb20gdGhlIGNvbnRyb2wuXHJcbiAgXHRyZW1vdmVMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdGxheWVyLm9mZignYWRkIHJlbW92ZScsIHRoaXMuX29uTGF5ZXJDaGFuZ2UsIHRoaXMpO1xyXG5cclxuICBcdFx0dmFyIG9iaiA9IHRoaXMuX2dldExheWVyKHN0YW1wKGxheWVyKSk7XHJcbiAgXHRcdGlmIChvYmopIHtcclxuICBcdFx0XHR0aGlzLl9sYXllcnMuc3BsaWNlKHRoaXMuX2xheWVycy5pbmRleE9mKG9iaiksIDEpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiAodGhpcy5fbWFwKSA/IHRoaXMuX3VwZGF0ZSgpIDogdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBleHBhbmQoKTogdGhpc1xyXG4gIFx0Ly8gRXhwYW5kIHRoZSBjb250cm9sIGNvbnRhaW5lciBpZiBjb2xsYXBzZWQuXHJcbiAgXHRleHBhbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCcpO1xyXG4gIFx0XHR0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodCA9IG51bGw7XHJcbiAgXHRcdHZhciBhY2NlcHRhYmxlSGVpZ2h0ID0gdGhpcy5fbWFwLmdldFNpemUoKS55IC0gKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRUb3AgKyA1MCk7XHJcbiAgXHRcdGlmIChhY2NlcHRhYmxlSGVpZ2h0IDwgdGhpcy5fc2VjdGlvbi5jbGllbnRIZWlnaHQpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9zZWN0aW9uLCAnbGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXInKTtcclxuICBcdFx0XHR0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodCA9IGFjY2VwdGFibGVIZWlnaHQgKyAncHgnO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX3NlY3Rpb24sICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhcicpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29sbGFwc2UoKTogdGhpc1xyXG4gIFx0Ly8gQ29sbGFwc2UgdGhlIGNvbnRyb2wgY29udGFpbmVyIGlmIGV4cGFuZGVkLlxyXG4gIFx0Y29sbGFwc2U6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCcpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzJyxcclxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUpLFxyXG4gIFx0XHQgICAgY29sbGFwc2VkID0gdGhpcy5vcHRpb25zLmNvbGxhcHNlZDtcclxuXHJcbiAgXHRcdC8vIG1ha2VzIHRoaXMgd29yayBvbiBJRSB0b3VjaCBkZXZpY2VzIGJ5IHN0b3BwaW5nIGl0IGZyb20gZmlyaW5nIGEgbW91c2VvdXQgZXZlbnQgd2hlbiB0aGUgdG91Y2ggaXMgcmVsZWFzZWRcclxuICBcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcsIHRydWUpO1xyXG5cclxuICBcdFx0ZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24oY29udGFpbmVyKTtcclxuICBcdFx0ZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGNvbnRhaW5lcik7XHJcblxyXG4gIFx0XHR2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb24gPSBjcmVhdGUkMSgnc2VjdGlvbicsIGNsYXNzTmFtZSArICctbGlzdCcpO1xyXG5cclxuICBcdFx0aWYgKGNvbGxhcHNlZCkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5vbignY2xpY2snLCB0aGlzLmNvbGxhcHNlLCB0aGlzKTtcclxuXHJcbiAgXHRcdFx0aWYgKCFhbmRyb2lkKSB7XHJcbiAgXHRcdFx0XHRvbihjb250YWluZXIsIHtcclxuICBcdFx0XHRcdFx0bW91c2VlbnRlcjogdGhpcy5leHBhbmQsXHJcbiAgXHRcdFx0XHRcdG1vdXNlbGVhdmU6IHRoaXMuY29sbGFwc2VcclxuICBcdFx0XHRcdH0sIHRoaXMpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGxpbmsgPSB0aGlzLl9sYXllcnNMaW5rID0gY3JlYXRlJDEoJ2EnLCBjbGFzc05hbWUgKyAnLXRvZ2dsZScsIGNvbnRhaW5lcik7XHJcbiAgXHRcdGxpbmsuaHJlZiA9ICcjJztcclxuICBcdFx0bGluay50aXRsZSA9ICdMYXllcnMnO1xyXG5cclxuICBcdFx0aWYgKHRvdWNoKSB7XHJcbiAgXHRcdFx0b24obGluaywgJ2NsaWNrJywgc3RvcCk7XHJcbiAgXHRcdFx0b24obGluaywgJ2NsaWNrJywgdGhpcy5leHBhbmQsIHRoaXMpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG9uKGxpbmssICdmb2N1cycsIHRoaXMuZXhwYW5kLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCFjb2xsYXBzZWQpIHtcclxuICBcdFx0XHR0aGlzLmV4cGFuZCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9iYXNlTGF5ZXJzTGlzdCA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUgKyAnLWJhc2UnLCBzZWN0aW9uKTtcclxuICBcdFx0dGhpcy5fc2VwYXJhdG9yID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSArICctc2VwYXJhdG9yJywgc2VjdGlvbik7XHJcbiAgXHRcdHRoaXMuX292ZXJsYXlzTGlzdCA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUgKyAnLW92ZXJsYXlzJywgc2VjdGlvbik7XHJcblxyXG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VjdGlvbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRMYXllcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gIFx0XHRcdGlmICh0aGlzLl9sYXllcnNbaV0gJiYgc3RhbXAodGhpcy5fbGF5ZXJzW2ldLmxheWVyKSA9PT0gaWQpIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLl9sYXllcnNbaV07XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGRMYXllcjogZnVuY3Rpb24gKGxheWVyLCBuYW1lLCBvdmVybGF5KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHRsYXllci5vbignYWRkIHJlbW92ZScsIHRoaXMuX29uTGF5ZXJDaGFuZ2UsIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMucHVzaCh7XHJcbiAgXHRcdFx0bGF5ZXI6IGxheWVyLFxyXG4gIFx0XHRcdG5hbWU6IG5hbWUsXHJcbiAgXHRcdFx0b3ZlcmxheTogb3ZlcmxheVxyXG4gIFx0XHR9KTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuc29ydExheWVycykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVycy5zb3J0KGJpbmQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuc29ydEZ1bmN0aW9uKGEubGF5ZXIsIGIubGF5ZXIsIGEubmFtZSwgYi5uYW1lKTtcclxuICBcdFx0XHR9LCB0aGlzKSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCAmJiBsYXllci5zZXRaSW5kZXgpIHtcclxuICBcdFx0XHR0aGlzLl9sYXN0WkluZGV4Kys7XHJcbiAgXHRcdFx0bGF5ZXIuc2V0WkluZGV4KHRoaXMuX2xhc3RaSW5kZXgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0XHRlbXB0eSh0aGlzLl9iYXNlTGF5ZXJzTGlzdCk7XHJcbiAgXHRcdGVtcHR5KHRoaXMuX292ZXJsYXlzTGlzdCk7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMgPSBbXTtcclxuICBcdFx0dmFyIGJhc2VMYXllcnNQcmVzZW50LCBvdmVybGF5c1ByZXNlbnQsIGksIG9iaiwgYmFzZUxheWVyc0NvdW50ID0gMDtcclxuXHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRvYmogPSB0aGlzLl9sYXllcnNbaV07XHJcbiAgXHRcdFx0dGhpcy5fYWRkSXRlbShvYmopO1xyXG4gIFx0XHRcdG92ZXJsYXlzUHJlc2VudCA9IG92ZXJsYXlzUHJlc2VudCB8fCBvYmoub3ZlcmxheTtcclxuICBcdFx0XHRiYXNlTGF5ZXJzUHJlc2VudCA9IGJhc2VMYXllcnNQcmVzZW50IHx8ICFvYmoub3ZlcmxheTtcclxuICBcdFx0XHRiYXNlTGF5ZXJzQ291bnQgKz0gIW9iai5vdmVybGF5ID8gMSA6IDA7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEhpZGUgYmFzZSBsYXllcnMgc2VjdGlvbiBpZiB0aGVyZSdzIG9ubHkgb25lIGxheWVyLlxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlKSB7XHJcbiAgXHRcdFx0YmFzZUxheWVyc1ByZXNlbnQgPSBiYXNlTGF5ZXJzUHJlc2VudCAmJiBiYXNlTGF5ZXJzQ291bnQgPiAxO1xyXG4gIFx0XHRcdHRoaXMuX2Jhc2VMYXllcnNMaXN0LnN0eWxlLmRpc3BsYXkgPSBiYXNlTGF5ZXJzUHJlc2VudCA/ICcnIDogJ25vbmUnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9zZXBhcmF0b3Iuc3R5bGUuZGlzcGxheSA9IG92ZXJsYXlzUHJlc2VudCAmJiBiYXNlTGF5ZXJzUHJlc2VudCA/ICcnIDogJ25vbmUnO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbkxheWVyQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2hhbmRsaW5nQ2xpY2spIHtcclxuICBcdFx0XHR0aGlzLl91cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG9iaiA9IHRoaXMuX2dldExheWVyKHN0YW1wKGUudGFyZ2V0KSk7XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBMYXllciBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IGJhc2VsYXllcmNoYW5nZTogTGF5ZXJzQ29udHJvbEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGJhc2UgbGF5ZXIgaXMgY2hhbmdlZCB0aHJvdWdoIHRoZSBbbGF5ZXJzIGNvbnRyb2xdKCNjb250cm9sLWxheWVycykuXHJcbiAgXHRcdC8vIEBldmVudCBvdmVybGF5YWRkOiBMYXllcnNDb250cm9sRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhbiBvdmVybGF5IGlzIHNlbGVjdGVkIHRocm91Z2ggdGhlIFtsYXllcnMgY29udHJvbF0oI2NvbnRyb2wtbGF5ZXJzKS5cclxuICBcdFx0Ly8gQGV2ZW50IG92ZXJsYXlyZW1vdmU6IExheWVyc0NvbnRyb2xFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGFuIG92ZXJsYXkgaXMgZGVzZWxlY3RlZCB0aHJvdWdoIHRoZSBbbGF5ZXJzIGNvbnRyb2xdKCNjb250cm9sLWxheWVycykuXHJcbiAgXHRcdC8vIEBuYW1lc3BhY2UgQ29udHJvbC5MYXllcnNcclxuICBcdFx0dmFyIHR5cGUgPSBvYmoub3ZlcmxheSA/XHJcbiAgXHRcdFx0KGUudHlwZSA9PT0gJ2FkZCcgPyAnb3ZlcmxheWFkZCcgOiAnb3ZlcmxheXJlbW92ZScpIDpcclxuICBcdFx0XHQoZS50eXBlID09PSAnYWRkJyA/ICdiYXNlbGF5ZXJjaGFuZ2UnIDogbnVsbCk7XHJcblxyXG4gIFx0XHRpZiAodHlwZSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5maXJlKHR5cGUsIG9iaik7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gSUU3IGJ1Z3Mgb3V0IGlmIHlvdSBjcmVhdGUgYSByYWRpbyBkeW5hbWljYWxseSwgc28geW91IGhhdmUgdG8gZG8gaXQgdGhpcyBoYWNreSB3YXkgKHNlZSBodHRwOi8vYml0Lmx5L1BxWUxCZSlcclxuICBcdF9jcmVhdGVSYWRpb0VsZW1lbnQ6IGZ1bmN0aW9uIChuYW1lLCBjaGVja2VkKSB7XHJcblxyXG4gIFx0XHR2YXIgcmFkaW9IdG1sID0gJzxpbnB1dCB0eXBlPVwicmFkaW9cIiBjbGFzcz1cImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3JcIiBuYW1lPVwiJyArXHJcbiAgXHRcdFx0XHRuYW1lICsgJ1wiJyArIChjaGVja2VkID8gJyBjaGVja2VkPVwiY2hlY2tlZFwiJyA6ICcnKSArICcvPic7XHJcblxyXG4gIFx0XHR2YXIgcmFkaW9GcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIFx0XHRyYWRpb0ZyYWdtZW50LmlubmVySFRNTCA9IHJhZGlvSHRtbDtcclxuXHJcbiAgXHRcdHJldHVybiByYWRpb0ZyYWdtZW50LmZpcnN0Q2hpbGQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGRJdGVtOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyksXHJcbiAgXHRcdCAgICBjaGVja2VkID0gdGhpcy5fbWFwLmhhc0xheWVyKG9iai5sYXllciksXHJcbiAgXHRcdCAgICBpbnB1dDtcclxuXHJcbiAgXHRcdGlmIChvYmoub3ZlcmxheSkge1xyXG4gIFx0XHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICBcdFx0XHRpbnB1dC50eXBlID0gJ2NoZWNrYm94JztcclxuICBcdFx0XHRpbnB1dC5jbGFzc05hbWUgPSAnbGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3Rvcic7XHJcbiAgXHRcdFx0aW5wdXQuZGVmYXVsdENoZWNrZWQgPSBjaGVja2VkO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlucHV0ID0gdGhpcy5fY3JlYXRlUmFkaW9FbGVtZW50KCdsZWFmbGV0LWJhc2UtbGF5ZXJzXycgKyBzdGFtcCh0aGlzKSwgY2hlY2tlZCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2xheWVyQ29udHJvbElucHV0cy5wdXNoKGlucHV0KTtcclxuICBcdFx0aW5wdXQubGF5ZXJJZCA9IHN0YW1wKG9iai5sYXllcik7XHJcblxyXG4gIFx0XHRvbihpbnB1dCwgJ2NsaWNrJywgdGhpcy5fb25JbnB1dENsaWNrLCB0aGlzKTtcclxuXHJcbiAgXHRcdHZhciBuYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gIFx0XHRuYW1lLmlubmVySFRNTCA9ICcgJyArIG9iai5uYW1lO1xyXG5cclxuICBcdFx0Ly8gSGVscHMgZnJvbSBwcmV2ZW50aW5nIGxheWVyIGNvbnRyb2wgZmxpY2tlciB3aGVuIGNoZWNrYm94ZXMgYXJlIGRpc2FibGVkXHJcbiAgXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzI3NzFcclxuICBcdFx0dmFyIGhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuICBcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoaG9sZGVyKTtcclxuICBcdFx0aG9sZGVyLmFwcGVuZENoaWxkKGlucHV0KTtcclxuICBcdFx0aG9sZGVyLmFwcGVuZENoaWxkKG5hbWUpO1xyXG5cclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IG9iai5vdmVybGF5ID8gdGhpcy5fb3ZlcmxheXNMaXN0IDogdGhpcy5fYmFzZUxheWVyc0xpc3Q7XHJcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7XHJcblxyXG4gIFx0XHR0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCk7XHJcbiAgXHRcdHJldHVybiBsYWJlbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uSW5wdXRDbGljazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaW5wdXRzID0gdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLFxyXG4gIFx0XHQgICAgaW5wdXQsIGxheWVyO1xyXG4gIFx0XHR2YXIgYWRkZWRMYXllcnMgPSBbXSxcclxuICBcdFx0ICAgIHJlbW92ZWRMYXllcnMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuX2hhbmRsaW5nQ2xpY2sgPSB0cnVlO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gIFx0XHRcdGlucHV0ID0gaW5wdXRzW2ldO1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fZ2V0TGF5ZXIoaW5wdXQubGF5ZXJJZCkubGF5ZXI7XHJcblxyXG4gIFx0XHRcdGlmIChpbnB1dC5jaGVja2VkKSB7XHJcbiAgXHRcdFx0XHRhZGRlZExheWVycy5wdXNoKGxheWVyKTtcclxuICBcdFx0XHR9IGVsc2UgaWYgKCFpbnB1dC5jaGVja2VkKSB7XHJcbiAgXHRcdFx0XHRyZW1vdmVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQnVnZml4IGlzc3VlIDIzMTg6IFNob3VsZCByZW1vdmUgYWxsIG9sZCBsYXllcnMgYmVmb3JlIHJlYWRkaW5nIG5ldyBvbmVzXHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCByZW1vdmVkTGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX21hcC5oYXNMYXllcihyZW1vdmVkTGF5ZXJzW2ldKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fbWFwLnJlbW92ZUxheWVyKHJlbW92ZWRMYXllcnNbaV0pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHRmb3IgKGkgPSAwOyBpIDwgYWRkZWRMYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRpZiAoIXRoaXMuX21hcC5oYXNMYXllcihhZGRlZExheWVyc1tpXSkpIHtcclxuICBcdFx0XHRcdHRoaXMuX21hcC5hZGRMYXllcihhZGRlZExheWVyc1tpXSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9oYW5kbGluZ0NsaWNrID0gZmFsc2U7XHJcblxyXG4gIFx0XHR0aGlzLl9yZWZvY3VzT25NYXAoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NoZWNrRGlzYWJsZWRMYXllcnM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGlucHV0cyA9IHRoaXMuX2xheWVyQ29udHJvbElucHV0cyxcclxuICBcdFx0ICAgIGlucHV0LFxyXG4gIFx0XHQgICAgbGF5ZXIsXHJcbiAgXHRcdCAgICB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSBpbnB1dHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICBcdFx0XHRpbnB1dCA9IGlucHV0c1tpXTtcclxuICBcdFx0XHRsYXllciA9IHRoaXMuX2dldExheWVyKGlucHV0LmxheWVySWQpLmxheWVyO1xyXG4gIFx0XHRcdGlucHV0LmRpc2FibGVkID0gKGxheWVyLm9wdGlvbnMubWluWm9vbSAhPT0gdW5kZWZpbmVkICYmIHpvb20gPCBsYXllci5vcHRpb25zLm1pblpvb20pIHx8XHJcbiAgXHRcdFx0ICAgICAgICAgICAgICAgICAobGF5ZXIub3B0aW9ucy5tYXhab29tICE9PSB1bmRlZmluZWQgJiYgem9vbSA+IGxheWVyLm9wdGlvbnMubWF4Wm9vbSk7XHJcblxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9leHBhbmRJZk5vdENvbGxhcHNlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwICYmICF0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSB7XHJcbiAgXHRcdFx0dGhpcy5leHBhbmQoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2V4cGFuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHQvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCByZW1vdmUgbWUgaW4gMS4xLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5leHBhbmQoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NvbGxhcHNlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHJlbW92ZSBtZSBpbiAxLjEuXHJcbiAgXHRcdHJldHVybiB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgXHR9XHJcblxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5jb250cm9sLmxheWVycyhiYXNlbGF5ZXJzPzogT2JqZWN0LCBvdmVybGF5cz86IE9iamVjdCwgb3B0aW9ucz86IENvbnRyb2wuTGF5ZXJzIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhIGxheWVycyBjb250cm9sIHdpdGggdGhlIGdpdmVuIGxheWVycy4gQmFzZSBsYXllcnMgd2lsbCBiZSBzd2l0Y2hlZCB3aXRoIHJhZGlvIGJ1dHRvbnMsIHdoaWxlIG92ZXJsYXlzIHdpbGwgYmUgc3dpdGNoZWQgd2l0aCBjaGVja2JveGVzLiBOb3RlIHRoYXQgYWxsIGJhc2UgbGF5ZXJzIHNob3VsZCBiZSBwYXNzZWQgaW4gdGhlIGJhc2UgbGF5ZXJzIG9iamVjdCwgYnV0IG9ubHkgb25lIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbWFwIGR1cmluZyBtYXAgaW5zdGFudGlhdGlvbi5cclxuICB2YXIgbGF5ZXJzID0gZnVuY3Rpb24gKGJhc2VMYXllcnMsIG92ZXJsYXlzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExheWVycyhiYXNlTGF5ZXJzLCBvdmVybGF5cywgb3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBDb250cm9sLlpvb21cclxuICAgKiBAYWthIEwuQ29udHJvbC5ab29tXHJcbiAgICogQGluaGVyaXRzIENvbnRyb2xcclxuICAgKlxyXG4gICAqIEEgYmFzaWMgem9vbSBjb250cm9sIHdpdGggdHdvIGJ1dHRvbnMgKHpvb20gaW4gYW5kIHpvb20gb3V0KS4gSXQgaXMgcHV0IG9uIHRoZSBtYXAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IHNldCBpdHMgW2B6b29tQ29udHJvbGAgb3B0aW9uXSgjbWFwLXpvb21jb250cm9sKSB0byBgZmFsc2VgLiBFeHRlbmRzIGBDb250cm9sYC5cclxuICAgKi9cclxuXHJcbiAgdmFyIFpvb20gPSBDb250cm9sLmV4dGVuZCh7XHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBDb250cm9sLlpvb20gb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHRwb3NpdGlvbjogJ3RvcGxlZnQnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tSW5UZXh0OiBTdHJpbmcgPSAnKydcclxuICBcdFx0Ly8gVGhlIHRleHQgc2V0IG9uIHRoZSAnem9vbSBpbicgYnV0dG9uLlxyXG4gIFx0XHR6b29tSW5UZXh0OiAnKycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21JblRpdGxlOiBTdHJpbmcgPSAnWm9vbSBpbidcclxuICBcdFx0Ly8gVGhlIHRpdGxlIHNldCBvbiB0aGUgJ3pvb20gaW4nIGJ1dHRvbi5cclxuICBcdFx0em9vbUluVGl0bGU6ICdab29tIGluJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbU91dFRleHQ6IFN0cmluZyA9ICcmI3gyMjEyOydcclxuICBcdFx0Ly8gVGhlIHRleHQgc2V0IG9uIHRoZSAnem9vbSBvdXQnIGJ1dHRvbi5cclxuICBcdFx0em9vbU91dFRleHQ6ICcmI3gyMjEyOycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21PdXRUaXRsZTogU3RyaW5nID0gJ1pvb20gb3V0J1xyXG4gIFx0XHQvLyBUaGUgdGl0bGUgc2V0IG9uIHRoZSAnem9vbSBvdXQnIGJ1dHRvbi5cclxuICBcdFx0em9vbU91dFRpdGxlOiAnWm9vbSBvdXQnXHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHZhciB6b29tTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtem9vbScsXHJcbiAgXHRcdCAgICBjb250YWluZXIgPSBjcmVhdGUkMSgnZGl2Jywgem9vbU5hbWUgKyAnIGxlYWZsZXQtYmFyJyksXHJcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuICBcdFx0dGhpcy5fem9vbUluQnV0dG9uICA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihvcHRpb25zLnpvb21JblRleHQsIG9wdGlvbnMuem9vbUluVGl0bGUsXHJcbiAgXHRcdCAgICAgICAgem9vbU5hbWUgKyAnLWluJywgIGNvbnRhaW5lciwgdGhpcy5fem9vbUluKTtcclxuICBcdFx0dGhpcy5fem9vbU91dEJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihvcHRpb25zLnpvb21PdXRUZXh0LCBvcHRpb25zLnpvb21PdXRUaXRsZSxcclxuICBcdFx0ICAgICAgICB6b29tTmFtZSArICctb3V0JywgY29udGFpbmVyLCB0aGlzLl96b29tT3V0KTtcclxuXHJcbiAgXHRcdHRoaXMuX3VwZGF0ZURpc2FibGVkKCk7XHJcbiAgXHRcdG1hcC5vbignem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlJywgdGhpcy5fdXBkYXRlRGlzYWJsZWQsIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIGNvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0bWFwLm9mZignem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlJywgdGhpcy5fdXBkYXRlRGlzYWJsZWQsIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRkaXNhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX2Rpc2FibGVkID0gdHJ1ZTtcclxuICBcdFx0dGhpcy5fdXBkYXRlRGlzYWJsZWQoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdGVuYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9kaXNhYmxlZCA9IGZhbHNlO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVEaXNhYmxlZCgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3pvb21JbjogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLl9tYXAuX3pvb20gPCB0aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLnpvb21Jbih0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEgKiAoZS5zaGlmdEtleSA/IDMgOiAxKSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3pvb21PdXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5fbWFwLl96b29tID4gdGhpcy5fbWFwLmdldE1pblpvb20oKSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC56b29tT3V0KHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSAqIChlLnNoaWZ0S2V5ID8gMyA6IDEpKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfY3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoaHRtbCwgdGl0bGUsIGNsYXNzTmFtZSwgY29udGFpbmVyLCBmbikge1xyXG4gIFx0XHR2YXIgbGluayA9IGNyZWF0ZSQxKCdhJywgY2xhc3NOYW1lLCBjb250YWluZXIpO1xyXG4gIFx0XHRsaW5rLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgXHRcdGxpbmsuaHJlZiA9ICcjJztcclxuICBcdFx0bGluay50aXRsZSA9IHRpdGxlO1xyXG5cclxuICBcdFx0LypcclxuICBcdFx0ICogV2lsbCBmb3JjZSBzY3JlZW4gcmVhZGVycyBsaWtlIFZvaWNlT3ZlciB0byByZWFkIHRoaXMgYXMgXCJab29tIGluIC0gYnV0dG9uXCJcclxuICBcdFx0ICovXHJcbiAgXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2J1dHRvbicpO1xyXG4gIFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcclxuXHJcbiAgXHRcdGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGxpbmspO1xyXG4gIFx0XHRvbihsaW5rLCAnY2xpY2snLCBzdG9wKTtcclxuICBcdFx0b24obGluaywgJ2NsaWNrJywgZm4sIHRoaXMpO1xyXG4gIFx0XHRvbihsaW5rLCAnY2xpY2snLCB0aGlzLl9yZWZvY3VzT25NYXAsIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIGxpbms7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVEaXNhYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxyXG4gIFx0XHQgICAgY2xhc3NOYW1lID0gJ2xlYWZsZXQtZGlzYWJsZWQnO1xyXG5cclxuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fem9vbUluQnV0dG9uLCBjbGFzc05hbWUpO1xyXG4gIFx0XHRyZW1vdmVDbGFzcyh0aGlzLl96b29tT3V0QnV0dG9uLCBjbGFzc05hbWUpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2Rpc2FibGVkIHx8IG1hcC5fem9vbSA9PT0gbWFwLmdldE1pblpvb20oKSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX3pvb21PdXRCdXR0b24sIGNsYXNzTmFtZSk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKHRoaXMuX2Rpc2FibGVkIHx8IG1hcC5fem9vbSA9PT0gbWFwLmdldE1heFpvb20oKSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbiwgY2xhc3NOYW1lKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIC8vIEBzZWN0aW9uIENvbnRyb2wgb3B0aW9uc1xyXG4gIC8vIEBvcHRpb24gem9vbUNvbnRyb2w6IEJvb2xlYW4gPSB0cnVlXHJcbiAgLy8gV2hldGhlciBhIFt6b29tIGNvbnRyb2xdKCNjb250cm9sLXpvb20pIGlzIGFkZGVkIHRvIHRoZSBtYXAgYnkgZGVmYXVsdC5cclxuICBNYXAubWVyZ2VPcHRpb25zKHtcclxuICBcdHpvb21Db250cm9sOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIE1hcC5hZGRJbml0SG9vayhmdW5jdGlvbiAoKSB7XHJcbiAgXHRpZiAodGhpcy5vcHRpb25zLnpvb21Db250cm9sKSB7XHJcbiAgXHRcdC8vIEBzZWN0aW9uIENvbnRyb2xzXHJcbiAgXHRcdC8vIEBwcm9wZXJ0eSB6b29tQ29udHJvbDogQ29udHJvbC5ab29tXHJcbiAgXHRcdC8vIFRoZSBkZWZhdWx0IHpvb20gY29udHJvbCAob25seSBhdmFpbGFibGUgaWYgdGhlXHJcbiAgXHRcdC8vIFtgem9vbUNvbnRyb2xgIG9wdGlvbl0oI21hcC16b29tY29udHJvbCkgd2FzIGB0cnVlYCB3aGVuIGNyZWF0aW5nIHRoZSBtYXApLlxyXG4gIFx0XHR0aGlzLnpvb21Db250cm9sID0gbmV3IFpvb20oKTtcclxuICBcdFx0dGhpcy5hZGRDb250cm9sKHRoaXMuem9vbUNvbnRyb2wpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIENvbnRyb2wuWm9vbVxyXG4gIC8vIEBmYWN0b3J5IEwuY29udHJvbC56b29tKG9wdGlvbnM6IENvbnRyb2wuWm9vbSBvcHRpb25zKVxyXG4gIC8vIENyZWF0ZXMgYSB6b29tIGNvbnRyb2xcclxuICB2YXIgem9vbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFpvb20ob3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxuICAgKiBAY2xhc3MgQ29udHJvbC5TY2FsZVxuICAgKiBAYWthIEwuQ29udHJvbC5TY2FsZVxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxuICAgKlxuICAgKiBBIHNpbXBsZSBzY2FsZSBjb250cm9sIHRoYXQgc2hvd3MgdGhlIHNjYWxlIG9mIHRoZSBjdXJyZW50IGNlbnRlciBvZiBzY3JlZW4gaW4gbWV0cmljIChtL2ttKSBhbmQgaW1wZXJpYWwgKG1pL2Z0KSBzeXN0ZW1zLiBFeHRlbmRzIGBDb250cm9sYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTY2FsZSA9IENvbnRyb2wuZXh0ZW5kKHtcbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgQ29udHJvbC5TY2FsZSBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0cG9zaXRpb246ICdib3R0b21sZWZ0JyxcblxuICBcdFx0Ly8gQG9wdGlvbiBtYXhXaWR0aDogTnVtYmVyID0gMTAwXG4gIFx0XHQvLyBNYXhpbXVtIHdpZHRoIG9mIHRoZSBjb250cm9sIGluIHBpeGVscy4gVGhlIHdpZHRoIGlzIHNldCBkeW5hbWljYWxseSB0byBzaG93IHJvdW5kIHZhbHVlcyAoZS5nLiAxMDAsIDIwMCwgNTAwKS5cbiAgXHRcdG1heFdpZHRoOiAxMDAsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWV0cmljOiBCb29sZWFuID0gVHJ1ZVxuICBcdFx0Ly8gV2hldGhlciB0byBzaG93IHRoZSBtZXRyaWMgc2NhbGUgbGluZSAobS9rbSkuXG4gIFx0XHRtZXRyaWM6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gaW1wZXJpYWw6IEJvb2xlYW4gPSBUcnVlXG4gIFx0XHQvLyBXaGV0aGVyIHRvIHNob3cgdGhlIGltcGVyaWFsIHNjYWxlIGxpbmUgKG1pL2Z0KS5cbiAgXHRcdGltcGVyaWFsOiB0cnVlXG5cbiAgXHRcdC8vIEBvcHRpb24gdXBkYXRlV2hlbklkbGU6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgY29udHJvbCBpcyB1cGRhdGVkIG9uIFtgbW92ZWVuZGBdKCNtYXAtbW92ZWVuZCksIG90aGVyd2lzZSBpdCdzIGFsd2F5cyB1cC10by1kYXRlICh1cGRhdGVkIG9uIFtgbW92ZWBdKCNtYXAtbW92ZSkpLlxuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0dmFyIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtc2NhbGUnLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUpLFxuICBcdFx0ICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgXHRcdHRoaXMuX2FkZFNjYWxlcyhvcHRpb25zLCBjbGFzc05hbWUgKyAnLWxpbmUnLCBjb250YWluZXIpO1xuXG4gIFx0XHRtYXAub24ob3B0aW9ucy51cGRhdGVXaGVuSWRsZSA/ICdtb3ZlZW5kJyA6ICdtb3ZlJywgdGhpcy5fdXBkYXRlLCB0aGlzKTtcbiAgXHRcdG1hcC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLCB0aGlzKTtcblxuICBcdFx0cmV0dXJuIGNvbnRhaW5lcjtcbiAgXHR9LFxuXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdG1hcC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlID8gJ21vdmVlbmQnIDogJ21vdmUnLCB0aGlzLl91cGRhdGUsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfYWRkU2NhbGVzOiBmdW5jdGlvbiAob3B0aW9ucywgY2xhc3NOYW1lLCBjb250YWluZXIpIHtcbiAgXHRcdGlmIChvcHRpb25zLm1ldHJpYykge1xuICBcdFx0XHR0aGlzLl9tU2NhbGUgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lLCBjb250YWluZXIpO1xuICBcdFx0fVxuICBcdFx0aWYgKG9wdGlvbnMuaW1wZXJpYWwpIHtcbiAgXHRcdFx0dGhpcy5faVNjYWxlID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB5ID0gbWFwLmdldFNpemUoKS55IC8gMjtcblxuICBcdFx0dmFyIG1heE1ldGVycyA9IG1hcC5kaXN0YW5jZShcbiAgXHRcdFx0bWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoWzAsIHldKSxcbiAgXHRcdFx0bWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCwgeV0pKTtcblxuICBcdFx0dGhpcy5fdXBkYXRlU2NhbGVzKG1heE1ldGVycyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVTY2FsZXM6IGZ1bmN0aW9uIChtYXhNZXRlcnMpIHtcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubWV0cmljICYmIG1heE1ldGVycykge1xuICBcdFx0XHR0aGlzLl91cGRhdGVNZXRyaWMobWF4TWV0ZXJzKTtcbiAgXHRcdH1cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW1wZXJpYWwgJiYgbWF4TWV0ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZUltcGVyaWFsKG1heE1ldGVycyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVNZXRyaWM6IGZ1bmN0aW9uIChtYXhNZXRlcnMpIHtcbiAgXHRcdHZhciBtZXRlcnMgPSB0aGlzLl9nZXRSb3VuZE51bShtYXhNZXRlcnMpLFxuICBcdFx0ICAgIGxhYmVsID0gbWV0ZXJzIDwgMTAwMCA/IG1ldGVycyArICcgbScgOiAobWV0ZXJzIC8gMTAwMCkgKyAnIGttJztcblxuICBcdFx0dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5fbVNjYWxlLCBsYWJlbCwgbWV0ZXJzIC8gbWF4TWV0ZXJzKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUltcGVyaWFsOiBmdW5jdGlvbiAobWF4TWV0ZXJzKSB7XG4gIFx0XHR2YXIgbWF4RmVldCA9IG1heE1ldGVycyAqIDMuMjgwODM5OSxcbiAgXHRcdCAgICBtYXhNaWxlcywgbWlsZXMsIGZlZXQ7XG5cbiAgXHRcdGlmIChtYXhGZWV0ID4gNTI4MCkge1xuICBcdFx0XHRtYXhNaWxlcyA9IG1heEZlZXQgLyA1MjgwO1xuICBcdFx0XHRtaWxlcyA9IHRoaXMuX2dldFJvdW5kTnVtKG1heE1pbGVzKTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLCBtaWxlcyArICcgbWknLCBtaWxlcyAvIG1heE1pbGVzKTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0ZmVldCA9IHRoaXMuX2dldFJvdW5kTnVtKG1heEZlZXQpO1xuICBcdFx0XHR0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9pU2NhbGUsIGZlZXQgKyAnIGZ0JywgZmVldCAvIG1heEZlZXQpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlU2NhbGU6IGZ1bmN0aW9uIChzY2FsZSwgdGV4dCwgcmF0aW8pIHtcbiAgXHRcdHNjYWxlLnN0eWxlLndpZHRoID0gTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGggKiByYXRpbykgKyAncHgnO1xuICBcdFx0c2NhbGUuaW5uZXJIVE1MID0gdGV4dDtcbiAgXHR9LFxuXG4gIFx0X2dldFJvdW5kTnVtOiBmdW5jdGlvbiAobnVtKSB7XG4gIFx0XHR2YXIgcG93MTAgPSBNYXRoLnBvdygxMCwgKE1hdGguZmxvb3IobnVtKSArICcnKS5sZW5ndGggLSAxKSxcbiAgXHRcdCAgICBkID0gbnVtIC8gcG93MTA7XG5cbiAgXHRcdGQgPSBkID49IDEwID8gMTAgOlxuICBcdFx0ICAgIGQgPj0gNSA/IDUgOlxuICBcdFx0ICAgIGQgPj0gMyA/IDMgOlxuICBcdFx0ICAgIGQgPj0gMiA/IDIgOiAxO1xuXG4gIFx0XHRyZXR1cm4gcG93MTAgKiBkO1xuICBcdH1cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLmNvbnRyb2wuc2NhbGUob3B0aW9ucz86IENvbnRyb2wuU2NhbGUgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhbiBzY2FsZSBjb250cm9sIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gIHZhciBzY2FsZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBTY2FsZShvcHRpb25zKTtcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBDb250cm9sLkF0dHJpYnV0aW9uXHJcbiAgICogQGFrYSBMLkNvbnRyb2wuQXR0cmlidXRpb25cclxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxyXG4gICAqXHJcbiAgICogVGhlIGF0dHJpYnV0aW9uIGNvbnRyb2wgYWxsb3dzIHlvdSB0byBkaXNwbGF5IGF0dHJpYnV0aW9uIGRhdGEgaW4gYSBzbWFsbCB0ZXh0IGJveCBvbiBhIG1hcC4gSXQgaXMgcHV0IG9uIHRoZSBtYXAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IHNldCBpdHMgW2BhdHRyaWJ1dGlvbkNvbnRyb2xgIG9wdGlvbl0oI21hcC1hdHRyaWJ1dGlvbmNvbnRyb2wpIHRvIGBmYWxzZWAsIGFuZCBpdCBmZXRjaGVzIGF0dHJpYnV0aW9uIHRleHRzIGZyb20gbGF5ZXJzIHdpdGggdGhlIFtgZ2V0QXR0cmlidXRpb25gIG1ldGhvZF0oI2xheWVyLWdldGF0dHJpYnV0aW9uKSBhdXRvbWF0aWNhbGx5LiBFeHRlbmRzIENvbnRyb2wuXHJcbiAgICovXHJcblxyXG4gIHZhciBBdHRyaWJ1dGlvbiA9IENvbnRyb2wuZXh0ZW5kKHtcclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIENvbnRyb2wuQXR0cmlidXRpb24gb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHRwb3NpdGlvbjogJ2JvdHRvbXJpZ2h0JyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcHJlZml4OiBTdHJpbmcgPSAnTGVhZmxldCdcclxuICBcdFx0Ly8gVGhlIEhUTUwgdGV4dCBzaG93biBiZWZvcmUgdGhlIGF0dHJpYnV0aW9ucy4gUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUuXHJcbiAgXHRcdHByZWZpeDogJzxhIGhyZWY9XCJodHRwczovL2xlYWZsZXRqcy5jb21cIiB0aXRsZT1cIkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwc1wiPkxlYWZsZXQ8L2E+J1xyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fYXR0cmlidXRpb25zID0ge307XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdG1hcC5hdHRyaWJ1dGlvbkNvbnRyb2wgPSB0aGlzO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbicpO1xyXG4gIFx0XHRkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbih0aGlzLl9jb250YWluZXIpO1xyXG5cclxuICBcdFx0Ly8gVE9ETyB1Z2x5LCByZWZhY3RvclxyXG4gIFx0XHRmb3IgKHZhciBpIGluIG1hcC5fbGF5ZXJzKSB7XHJcbiAgXHRcdFx0aWYgKG1hcC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmFkZEF0dHJpYnV0aW9uKG1hcC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uKCkpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fdXBkYXRlKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFByZWZpeChwcmVmaXg6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHRleHQgYmVmb3JlIHRoZSBhdHRyaWJ1dGlvbnMuXHJcbiAgXHRzZXRQcmVmaXg6IGZ1bmN0aW9uIChwcmVmaXgpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLnByZWZpeCA9IHByZWZpeDtcclxuICBcdFx0dGhpcy5fdXBkYXRlKCk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEF0dHJpYnV0aW9uKHRleHQ6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIEFkZHMgYW4gYXR0cmlidXRpb24gdGV4dCAoZS5nLiBgJ1ZlY3RvciBkYXRhICZjb3B5OyBNYXBib3gnYCkuXHJcbiAgXHRhZGRBdHRyaWJ1dGlvbjogZnVuY3Rpb24gKHRleHQpIHtcclxuICBcdFx0aWYgKCF0ZXh0KSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX2F0dHJpYnV0aW9uc1t0ZXh0XSkge1xyXG4gIFx0XHRcdHRoaXMuX2F0dHJpYnV0aW9uc1t0ZXh0XSA9IDA7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fYXR0cmlidXRpb25zW3RleHRdKys7XHJcblxyXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUF0dHJpYnV0aW9uKHRleHQ6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgYW4gYXR0cmlidXRpb24gdGV4dC5cclxuICBcdHJlbW92ZUF0dHJpYnV0aW9uOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gIFx0XHRpZiAoIXRleHQpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9hdHRyaWJ1dGlvbnNbdGV4dF0pIHtcclxuICBcdFx0XHR0aGlzLl9hdHRyaWJ1dGlvbnNbdGV4dF0tLTtcclxuICBcdFx0XHR0aGlzLl91cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgYXR0cmlicyA9IFtdO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9hdHRyaWJ1dGlvbnMpIHtcclxuICBcdFx0XHRpZiAodGhpcy5fYXR0cmlidXRpb25zW2ldKSB7XHJcbiAgXHRcdFx0XHRhdHRyaWJzLnB1c2goaSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgcHJlZml4QW5kQXR0cmlicyA9IFtdO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5wcmVmaXgpIHtcclxuICBcdFx0XHRwcmVmaXhBbmRBdHRyaWJzLnB1c2godGhpcy5vcHRpb25zLnByZWZpeCk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGF0dHJpYnMubGVuZ3RoKSB7XHJcbiAgXHRcdFx0cHJlZml4QW5kQXR0cmlicy5wdXNoKGF0dHJpYnMuam9pbignLCAnKSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUwgPSBwcmVmaXhBbmRBdHRyaWJzLmpvaW4oJyB8ICcpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIC8vIEBzZWN0aW9uIENvbnRyb2wgb3B0aW9uc1xyXG4gIC8vIEBvcHRpb24gYXR0cmlidXRpb25Db250cm9sOiBCb29sZWFuID0gdHJ1ZVxyXG4gIC8vIFdoZXRoZXIgYSBbYXR0cmlidXRpb24gY29udHJvbF0oI2NvbnRyb2wtYXR0cmlidXRpb24pIGlzIGFkZGVkIHRvIHRoZSBtYXAgYnkgZGVmYXVsdC5cclxuICBNYXAubWVyZ2VPcHRpb25zKHtcclxuICBcdGF0dHJpYnV0aW9uQ29udHJvbDogdHJ1ZVxyXG4gIH0pO1xyXG5cclxuICBNYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24gKCkge1xyXG4gIFx0aWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wpIHtcclxuICBcdFx0bmV3IEF0dHJpYnV0aW9uKCkuYWRkVG8odGhpcyk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgQ29udHJvbC5BdHRyaWJ1dGlvblxyXG4gIC8vIEBmYWN0b3J5IEwuY29udHJvbC5hdHRyaWJ1dGlvbihvcHRpb25zOiBDb250cm9sLkF0dHJpYnV0aW9uIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhbiBhdHRyaWJ1dGlvbiBjb250cm9sLlxyXG4gIHZhciBhdHRyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IEF0dHJpYnV0aW9uKG9wdGlvbnMpO1xyXG4gIH07XG5cbiAgQ29udHJvbC5MYXllcnMgPSBMYXllcnM7XG4gIENvbnRyb2wuWm9vbSA9IFpvb207XG4gIENvbnRyb2wuU2NhbGUgPSBTY2FsZTtcbiAgQ29udHJvbC5BdHRyaWJ1dGlvbiA9IEF0dHJpYnV0aW9uO1xuXG4gIGNvbnRyb2wubGF5ZXJzID0gbGF5ZXJzO1xuICBjb250cm9sLnpvb20gPSB6b29tO1xuICBjb250cm9sLnNjYWxlID0gc2NhbGU7XG4gIGNvbnRyb2wuYXR0cmlidXRpb24gPSBhdHRyaWJ1dGlvbjtcblxuICAvKlxuICBcdEwuSGFuZGxlciBpcyBhIGJhc2UgY2xhc3MgZm9yIGhhbmRsZXIgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHkgdG8gaW5qZWN0XG4gIFx0aW50ZXJhY3Rpb24gZmVhdHVyZXMgbGlrZSBkcmFnZ2luZyB0byBjbGFzc2VzIGxpa2UgTWFwIGFuZCBNYXJrZXIuXG4gICovXG5cbiAgLy8gQGNsYXNzIEhhbmRsZXJcbiAgLy8gQGFrYSBMLkhhbmRsZXJcbiAgLy8gQWJzdHJhY3QgY2xhc3MgZm9yIG1hcCBpbnRlcmFjdGlvbiBoYW5kbGVyc1xuXG4gIHZhciBIYW5kbGVyID0gQ2xhc3MuZXh0ZW5kKHtcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHR0aGlzLl9tYXAgPSBtYXA7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZW5hYmxlKCk6IHRoaXNcbiAgXHQvLyBFbmFibGVzIHRoZSBoYW5kbGVyXG4gIFx0ZW5hYmxlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fZW5hYmxlZCkgeyByZXR1cm4gdGhpczsgfVxuXG4gIFx0XHR0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgXHRcdHRoaXMuYWRkSG9va3MoKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGRpc2FibGUoKTogdGhpc1xuICBcdC8vIERpc2FibGVzIHRoZSBoYW5kbGVyXG4gIFx0ZGlzYWJsZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9lbmFibGVkKSB7IHJldHVybiB0aGlzOyB9XG5cbiAgXHRcdHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgXHRcdHRoaXMucmVtb3ZlSG9va3MoKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGVuYWJsZWQoKTogQm9vbGVhblxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBoYW5kbGVyIGlzIGVuYWJsZWRcbiAgXHRlbmFibGVkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICBcdH1cblxuICBcdC8vIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXG4gIFx0Ly8gQ2xhc3NlcyBpbmhlcml0aW5nIGZyb20gYEhhbmRsZXJgIG11c3QgaW1wbGVtZW50IHRoZSB0d28gZm9sbG93aW5nIG1ldGhvZHM6XG4gIFx0Ly8gQG1ldGhvZCBhZGRIb29rcygpXG4gIFx0Ly8gQ2FsbGVkIHdoZW4gdGhlIGhhbmRsZXIgaXMgZW5hYmxlZCwgc2hvdWxkIGFkZCBldmVudCBob29rcy5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUhvb2tzKClcbiAgXHQvLyBDYWxsZWQgd2hlbiB0aGUgaGFuZGxlciBpcyBkaXNhYmxlZCwgc2hvdWxkIHJlbW92ZSB0aGUgZXZlbnQgaG9va3MgYWRkZWQgcHJldmlvdXNseS5cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gVGhlcmUgaXMgc3RhdGljIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBpbnN0YW50aWF0aW5nIEwuSGFuZGxlcjpcbiAgLy8gQGZ1bmN0aW9uIGFkZFRvKG1hcDogTWFwLCBuYW1lOiBTdHJpbmcpOiB0aGlzXG4gIC8vIEFkZHMgYSBuZXcgSGFuZGxlciB0byB0aGUgZ2l2ZW4gbWFwIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gIEhhbmRsZXIuYWRkVG8gPSBmdW5jdGlvbiAobWFwLCBuYW1lKSB7XG4gIFx0bWFwLmFkZEhhbmRsZXIobmFtZSwgdGhpcyk7XG4gIFx0cmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIE1peGluID0ge0V2ZW50czogRXZlbnRzfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBEcmFnZ2FibGVcclxuICAgKiBAYWthIEwuRHJhZ2dhYmxlXHJcbiAgICogQGluaGVyaXRzIEV2ZW50ZWRcclxuICAgKlxyXG4gICAqIEEgY2xhc3MgZm9yIG1ha2luZyBET00gZWxlbWVudHMgZHJhZ2dhYmxlIChpbmNsdWRpbmcgdG91Y2ggc3VwcG9ydCkuXHJcbiAgICogVXNlZCBpbnRlcm5hbGx5IGZvciBtYXAgYW5kIG1hcmtlciBkcmFnZ2luZy4gT25seSB3b3JrcyBmb3IgZWxlbWVudHNcclxuICAgKiB0aGF0IHdlcmUgcG9zaXRpb25lZCB3aXRoIFtgTC5Eb21VdGlsLnNldFBvc2l0aW9uYF0oI2RvbXV0aWwtc2V0cG9zaXRpb24pLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBkcmFnZ2FibGUgPSBuZXcgTC5EcmFnZ2FibGUoZWxlbWVudFRvRHJhZyk7XHJcbiAgICogZHJhZ2dhYmxlLmVuYWJsZSgpO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgU1RBUlQgPSB0b3VjaCA/ICd0b3VjaHN0YXJ0IG1vdXNlZG93bicgOiAnbW91c2Vkb3duJztcclxuICB2YXIgRU5EID0ge1xyXG4gIFx0bW91c2Vkb3duOiAnbW91c2V1cCcsXHJcbiAgXHR0b3VjaHN0YXJ0OiAndG91Y2hlbmQnLFxyXG4gIFx0cG9pbnRlcmRvd246ICd0b3VjaGVuZCcsXHJcbiAgXHRNU1BvaW50ZXJEb3duOiAndG91Y2hlbmQnXHJcbiAgfTtcclxuICB2YXIgTU9WRSA9IHtcclxuICBcdG1vdXNlZG93bjogJ21vdXNlbW92ZScsXHJcbiAgXHR0b3VjaHN0YXJ0OiAndG91Y2htb3ZlJyxcclxuICBcdHBvaW50ZXJkb3duOiAndG91Y2htb3ZlJyxcclxuICBcdE1TUG9pbnRlckRvd246ICd0b3VjaG1vdmUnXHJcbiAgfTtcclxuXHJcblxyXG4gIHZhciBEcmFnZ2FibGUgPSBFdmVudGVkLmV4dGVuZCh7XHJcblxyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAc2VjdGlvblxyXG4gIFx0XHQvLyBAYWthIERyYWdnYWJsZSBvcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xpY2tUb2xlcmFuY2U6IE51bWJlciA9IDNcclxuICBcdFx0Ly8gVGhlIG1heCBudW1iZXIgb2YgcGl4ZWxzIGEgdXNlciBjYW4gc2hpZnQgdGhlIG1vdXNlIHBvaW50ZXIgZHVyaW5nIGEgY2xpY2tcclxuICBcdFx0Ly8gZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCBjbGljayAoYXMgb3Bwb3NlZCB0byBhIG1vdXNlIGRyYWcpLlxyXG4gIFx0XHRjbGlja1RvbGVyYW5jZTogM1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAY29uc3RydWN0b3IgTC5EcmFnZ2FibGUoZWw6IEhUTUxFbGVtZW50LCBkcmFnSGFuZGxlPzogSFRNTEVsZW1lbnQsIHByZXZlbnRPdXRsaW5lPzogQm9vbGVhbiwgb3B0aW9ucz86IERyYWdnYWJsZSBvcHRpb25zKVxyXG4gIFx0Ly8gQ3JlYXRlcyBhIGBEcmFnZ2FibGVgIG9iamVjdCBmb3IgbW92aW5nIGBlbGAgd2hlbiB5b3Ugc3RhcnQgZHJhZ2dpbmcgdGhlIGBkcmFnSGFuZGxlYCBlbGVtZW50IChlcXVhbHMgYGVsYCBpdHNlbGYgYnkgZGVmYXVsdCkuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoZWxlbWVudCwgZHJhZ1N0YXJ0VGFyZ2V0LCBwcmV2ZW50T3V0bGluZSQkMSwgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgXHRcdHRoaXMuX2RyYWdTdGFydFRhcmdldCA9IGRyYWdTdGFydFRhcmdldCB8fCBlbGVtZW50O1xyXG4gIFx0XHR0aGlzLl9wcmV2ZW50T3V0bGluZSA9IHByZXZlbnRPdXRsaW5lJCQxO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGVuYWJsZSgpXHJcbiAgXHQvLyBFbmFibGVzIHRoZSBkcmFnZ2luZyBhYmlsaXR5XHJcbiAgXHRlbmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRvbih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsIFNUQVJULCB0aGlzLl9vbkRvd24sIHRoaXMpO1xyXG5cclxuICBcdFx0dGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGlzYWJsZSgpXHJcbiAgXHQvLyBEaXNhYmxlcyB0aGUgZHJhZ2dpbmcgYWJpbGl0eVxyXG4gIFx0ZGlzYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHQvLyBJZiB3ZSdyZSBjdXJyZW50bHkgZHJhZ2dpbmcgdGhpcyBkcmFnZ2FibGUsXHJcbiAgXHRcdC8vIGRpc2FibGluZyBpdCBjb3VudHMgYXMgZmlyc3QgZW5kaW5nIHRoZSBkcmFnLlxyXG4gIFx0XHRpZiAoRHJhZ2dhYmxlLl9kcmFnZ2luZyA9PT0gdGhpcykge1xyXG4gIFx0XHRcdHRoaXMuZmluaXNoRHJhZygpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRvZmYodGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LCBTVEFSVCwgdGhpcy5fb25Eb3duLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICBcdFx0dGhpcy5fbW92ZWQgPSBmYWxzZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uRG93bjogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0Ly8gSWdub3JlIHNpbXVsYXRlZCBldmVudHMsIHNpbmNlIHdlIGhhbmRsZSBib3RoIHRvdWNoIGFuZFxyXG4gIFx0XHQvLyBtb3VzZSBleHBsaWNpdGx5OyBvdGhlcndpc2Ugd2UgcmlzayBnZXR0aW5nIGR1cGxpY2F0ZXMgb2ZcclxuICBcdFx0Ly8gdG91Y2ggZXZlbnRzLCBzZWUgIzQzMTUuXHJcbiAgXHRcdC8vIEFsc28gaWdub3JlIHRoZSBldmVudCBpZiBkaXNhYmxlZDsgdGhpcyBoYXBwZW5zIGluIElFMTFcclxuICBcdFx0Ly8gdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCBzZWUgIzM2NjYuXHJcbiAgXHRcdGlmIChlLl9zaW11bGF0ZWQgfHwgIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlZCA9IGZhbHNlO1xyXG5cclxuICBcdFx0aWYgKGhhc0NsYXNzKHRoaXMuX2VsZW1lbnQsICdsZWFmbGV0LXpvb20tYW5pbScpKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKERyYWdnYWJsZS5fZHJhZ2dpbmcgfHwgZS5zaGlmdEtleSB8fCAoKGUud2hpY2ggIT09IDEpICYmIChlLmJ1dHRvbiAhPT0gMSkgJiYgIWUudG91Y2hlcykpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdERyYWdnYWJsZS5fZHJhZ2dpbmcgPSB0aGlzOyAgLy8gUHJldmVudCBkcmFnZ2luZyBtdWx0aXBsZSBvYmplY3RzIGF0IG9uY2UuXHJcblxyXG4gIFx0XHRpZiAodGhpcy5fcHJldmVudE91dGxpbmUpIHtcclxuICBcdFx0XHRwcmV2ZW50T3V0bGluZSh0aGlzLl9lbGVtZW50KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0ZGlzYWJsZUltYWdlRHJhZygpO1xyXG4gIFx0XHRkaXNhYmxlVGV4dFNlbGVjdGlvbigpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21vdmluZykgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdC8vIEBldmVudCBkb3duOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgZHJhZyBpcyBhYm91dCB0byBzdGFydC5cclxuICBcdFx0dGhpcy5maXJlKCdkb3duJyk7XHJcblxyXG4gIFx0XHR2YXIgZmlyc3QgPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXNbMF0gOiBlLFxyXG4gIFx0XHQgICAgc2l6ZWRQYXJlbnQgPSBnZXRTaXplZFBhcmVudE5vZGUodGhpcy5fZWxlbWVudCk7XHJcblxyXG4gIFx0XHR0aGlzLl9zdGFydFBvaW50ID0gbmV3IFBvaW50KGZpcnN0LmNsaWVudFgsIGZpcnN0LmNsaWVudFkpO1xyXG5cclxuICBcdFx0Ly8gQ2FjaGUgdGhlIHNjYWxlLCBzbyB0aGF0IHdlIGNhbiBjb250aW51b3VzbHkgY29tcGVuc2F0ZSBmb3IgaXQgZHVyaW5nIGRyYWcgKF9vbk1vdmUpLlxyXG4gIFx0XHR0aGlzLl9wYXJlbnRTY2FsZSA9IGdldFNjYWxlKHNpemVkUGFyZW50KTtcclxuXHJcbiAgXHRcdG9uKGRvY3VtZW50LCBNT1ZFW2UudHlwZV0sIHRoaXMuX29uTW92ZSwgdGhpcyk7XHJcbiAgXHRcdG9uKGRvY3VtZW50LCBFTkRbZS50eXBlXSwgdGhpcy5fb25VcCwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbk1vdmU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdC8vIElnbm9yZSBzaW11bGF0ZWQgZXZlbnRzLCBzaW5jZSB3ZSBoYW5kbGUgYm90aCB0b3VjaCBhbmRcclxuICBcdFx0Ly8gbW91c2UgZXhwbGljaXRseTsgb3RoZXJ3aXNlIHdlIHJpc2sgZ2V0dGluZyBkdXBsaWNhdGVzIG9mXHJcbiAgXHRcdC8vIHRvdWNoIGV2ZW50cywgc2VlICM0MzE1LlxyXG4gIFx0XHQvLyBBbHNvIGlnbm9yZSB0aGUgZXZlbnQgaWYgZGlzYWJsZWQ7IHRoaXMgaGFwcGVucyBpbiBJRTExXHJcbiAgXHRcdC8vIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgc2VlICMzNjY2LlxyXG4gIFx0XHRpZiAoZS5fc2ltdWxhdGVkIHx8ICF0aGlzLl9lbmFibGVkKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkge1xyXG4gIFx0XHRcdHRoaXMuX21vdmVkID0gdHJ1ZTtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBmaXJzdCA9IChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA9PT0gMSA/IGUudG91Y2hlc1swXSA6IGUpLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gbmV3IFBvaW50KGZpcnN0LmNsaWVudFgsIGZpcnN0LmNsaWVudFkpLl9zdWJ0cmFjdCh0aGlzLl9zdGFydFBvaW50KTtcclxuXHJcbiAgXHRcdGlmICghb2Zmc2V0LnggJiYgIW9mZnNldC55KSB7IHJldHVybjsgfVxyXG4gIFx0XHRpZiAoTWF0aC5hYnMob2Zmc2V0LngpICsgTWF0aC5hYnMob2Zmc2V0LnkpIDwgdGhpcy5vcHRpb25zLmNsaWNrVG9sZXJhbmNlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0Ly8gV2UgYXNzdW1lIHRoYXQgdGhlIHBhcmVudCBjb250YWluZXIncyBwb3NpdGlvbiwgYm9yZGVyIGFuZCBzY2FsZSBkbyBub3QgY2hhbmdlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGRyYWcuXHJcbiAgXHRcdC8vIFRoZXJlZm9yZSB0aGVyZSBpcyBubyBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBwb3NpdGlvbiBhbmQgYm9yZGVyICh0aGV5IGFyZSBlbGltaW5hdGVkIGJ5IHRoZSBzdWJ0cmFjdGlvbilcclxuICBcdFx0Ly8gYW5kIHdlIGNhbiB1c2UgdGhlIGNhY2hlZCB2YWx1ZSBmb3IgdGhlIHNjYWxlLlxyXG4gIFx0XHRvZmZzZXQueCAvPSB0aGlzLl9wYXJlbnRTY2FsZS54O1xyXG4gIFx0XHRvZmZzZXQueSAvPSB0aGlzLl9wYXJlbnRTY2FsZS55O1xyXG5cclxuICBcdFx0cHJldmVudERlZmF1bHQoZSk7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XHJcbiAgXHRcdFx0Ly8gQGV2ZW50IGRyYWdzdGFydDogRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIGEgZHJhZyBzdGFydHNcclxuICBcdFx0XHR0aGlzLmZpcmUoJ2RyYWdzdGFydCcpO1xyXG5cclxuICBcdFx0XHR0aGlzLl9tb3ZlZCA9IHRydWU7XHJcbiAgXHRcdFx0dGhpcy5fc3RhcnRQb3MgPSBnZXRQb3NpdGlvbih0aGlzLl9lbGVtZW50KS5zdWJ0cmFjdChvZmZzZXQpO1xyXG5cclxuICBcdFx0XHRhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnbGVhZmxldC1kcmFnZ2luZycpO1xyXG5cclxuICBcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xyXG4gIFx0XHRcdC8vIElFIGFuZCBFZGdlIGRvIG5vdCBnaXZlIHRoZSA8dXNlPiBlbGVtZW50LCBzbyBmZXRjaCBpdFxyXG4gIFx0XHRcdC8vIGlmIG5lY2Vzc2FyeVxyXG4gIFx0XHRcdGlmICh3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlICYmIHRoaXMuX2xhc3RUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gdGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0YWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwgJ2xlYWZsZXQtZHJhZy10YXJnZXQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fbmV3UG9zID0gdGhpcy5fc3RhcnRQb3MuYWRkKG9mZnNldCk7XHJcbiAgXHRcdHRoaXMuX21vdmluZyA9IHRydWU7XHJcblxyXG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpO1xyXG4gIFx0XHR0aGlzLl9sYXN0RXZlbnQgPSBlO1xyXG4gIFx0XHR0aGlzLl9hbmltUmVxdWVzdCA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fdXBkYXRlUG9zaXRpb24sIHRoaXMsIHRydWUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlUG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGUgPSB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdEV2ZW50fTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBwcmVkcmFnOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCBjb250aW51b3VzbHkgZHVyaW5nIGRyYWdnaW5nICpiZWZvcmUqIGVhY2ggY29ycmVzcG9uZGluZ1xyXG4gIFx0XHQvLyB1cGRhdGUgb2YgdGhlIGVsZW1lbnQncyBwb3NpdGlvbi5cclxuICBcdFx0dGhpcy5maXJlKCdwcmVkcmFnJywgZSk7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuX25ld1Bvcyk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgZHJhZzogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgY29udGludW91c2x5IGR1cmluZyBkcmFnZ2luZy5cclxuICBcdFx0dGhpcy5maXJlKCdkcmFnJywgZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblVwOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHQvLyBJZ25vcmUgc2ltdWxhdGVkIGV2ZW50cywgc2luY2Ugd2UgaGFuZGxlIGJvdGggdG91Y2ggYW5kXHJcbiAgXHRcdC8vIG1vdXNlIGV4cGxpY2l0bHk7IG90aGVyd2lzZSB3ZSByaXNrIGdldHRpbmcgZHVwbGljYXRlcyBvZlxyXG4gIFx0XHQvLyB0b3VjaCBldmVudHMsIHNlZSAjNDMxNS5cclxuICBcdFx0Ly8gQWxzbyBpZ25vcmUgdGhlIGV2ZW50IGlmIGRpc2FibGVkOyB0aGlzIGhhcHBlbnMgaW4gSUUxMVxyXG4gIFx0XHQvLyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIHNlZSAjMzY2Ni5cclxuICBcdFx0aWYgKGUuX3NpbXVsYXRlZCB8fCAhdGhpcy5fZW5hYmxlZCkgeyByZXR1cm47IH1cclxuICBcdFx0dGhpcy5maW5pc2hEcmFnKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGZpbmlzaERyYWc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2xlYWZsZXQtZHJhZ2dpbmcnKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9sYXN0VGFyZ2V0KSB7XHJcbiAgXHRcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwgJ2xlYWZsZXQtZHJhZy10YXJnZXQnKTtcclxuICBcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gbnVsbDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Zm9yICh2YXIgaSBpbiBNT1ZFKSB7XHJcbiAgXHRcdFx0b2ZmKGRvY3VtZW50LCBNT1ZFW2ldLCB0aGlzLl9vbk1vdmUsIHRoaXMpO1xyXG4gIFx0XHRcdG9mZihkb2N1bWVudCwgRU5EW2ldLCB0aGlzLl9vblVwLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0ZW5hYmxlSW1hZ2VEcmFnKCk7XHJcbiAgXHRcdGVuYWJsZVRleHRTZWxlY3Rpb24oKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tb3ZlZCAmJiB0aGlzLl9tb3ZpbmcpIHtcclxuICBcdFx0XHQvLyBlbnN1cmUgZHJhZyBpcyBub3QgZmlyZWQgYWZ0ZXIgZHJhZ2VuZFxyXG4gIFx0XHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltUmVxdWVzdCk7XHJcblxyXG4gIFx0XHRcdC8vIEBldmVudCBkcmFnZW5kOiBEcmFnRW5kRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBkcmFnIGVuZHMuXHJcbiAgXHRcdFx0dGhpcy5maXJlKCdkcmFnZW5kJywge1xyXG4gIFx0XHRcdFx0ZGlzdGFuY2U6IHRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKVxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZpbmcgPSBmYWxzZTtcclxuICBcdFx0RHJhZ2dhYmxlLl9kcmFnZ2luZyA9IGZhbHNlO1xyXG4gIFx0fVxyXG5cclxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgTGluZVV0aWxcclxuICAgKlxyXG4gICAqIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBvbHlsaW5lIHBvaW50cyBwcm9jZXNzaW5nLCB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseSB0byBtYWtlIHBvbHlsaW5lcyBsaWdodG5pbmctZmFzdC5cclxuICAgKi9cclxuXHJcbiAgLy8gU2ltcGxpZnkgcG9seWxpbmUgd2l0aCB2ZXJ0ZXggcmVkdWN0aW9uIGFuZCBEb3VnbGFzLVBldWNrZXIgc2ltcGxpZmljYXRpb24uXHJcbiAgLy8gSW1wcm92ZXMgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGRyYW1hdGljYWxseSBieSBsZXNzZW5pbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdG8gZHJhdy5cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNpbXBsaWZ5KHBvaW50czogUG9pbnRbXSwgdG9sZXJhbmNlOiBOdW1iZXIpOiBQb2ludFtdXHJcbiAgLy8gRHJhbWF0aWNhbGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBwb2ludHMgaW4gYSBwb2x5bGluZSB3aGlsZSByZXRhaW5pbmdcclxuICAvLyBpdHMgc2hhcGUgYW5kIHJldHVybnMgYSBuZXcgYXJyYXkgb2Ygc2ltcGxpZmllZCBwb2ludHMsIHVzaW5nIHRoZVxyXG4gIC8vIFtEb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RvdWdsYXMtUGV1Y2tlcl9hbGdvcml0aG0pLlxyXG4gIC8vIFVzZWQgZm9yIGEgaHVnZSBwZXJmb3JtYW5jZSBib29zdCB3aGVuIHByb2Nlc3NpbmcvZGlzcGxheWluZyBMZWFmbGV0IHBvbHlsaW5lcyBmb3JcclxuICAvLyBlYWNoIHpvb20gbGV2ZWwgYW5kIGFsc28gcmVkdWNpbmcgdmlzdWFsIG5vaXNlLiB0b2xlcmFuY2UgYWZmZWN0cyB0aGUgYW1vdW50IG9mXHJcbiAgLy8gc2ltcGxpZmljYXRpb24gKGxlc3NlciB2YWx1ZSBtZWFucyBoaWdoZXIgcXVhbGl0eSBidXQgc2xvd2VyIGFuZCB3aXRoIG1vcmUgcG9pbnRzKS5cclxuICAvLyBBbHNvIHJlbGVhc2VkIGFzIGEgc2VwYXJhdGVkIG1pY3JvLWxpYnJhcnkgW1NpbXBsaWZ5LmpzXShodHRwOi8vbW91cm5lci5naXRodWIuY29tL3NpbXBsaWZ5LWpzLykuXHJcbiAgZnVuY3Rpb24gc2ltcGxpZnkocG9pbnRzLCB0b2xlcmFuY2UpIHtcclxuICBcdGlmICghdG9sZXJhbmNlIHx8ICFwb2ludHMubGVuZ3RoKSB7XHJcbiAgXHRcdHJldHVybiBwb2ludHMuc2xpY2UoKTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgc3FUb2xlcmFuY2UgPSB0b2xlcmFuY2UgKiB0b2xlcmFuY2U7XHJcblxyXG4gIFx0ICAgIC8vIHN0YWdlIDE6IHZlcnRleCByZWR1Y3Rpb25cclxuICBcdCAgICBwb2ludHMgPSBfcmVkdWNlUG9pbnRzKHBvaW50cywgc3FUb2xlcmFuY2UpO1xyXG5cclxuICBcdCAgICAvLyBzdGFnZSAyOiBEb3VnbGFzLVBldWNrZXIgc2ltcGxpZmljYXRpb25cclxuICBcdCAgICBwb2ludHMgPSBfc2ltcGxpZnlEUChwb2ludHMsIHNxVG9sZXJhbmNlKTtcclxuXHJcbiAgXHRyZXR1cm4gcG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHBvaW50VG9TZWdtZW50RGlzdGFuY2UocDogUG9pbnQsIHAxOiBQb2ludCwgcDI6IFBvaW50KTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwb2ludCBgcGAgYW5kIHNlZ21lbnQgYHAxYCB0byBgcDJgLlxyXG4gIGZ1bmN0aW9uIHBvaW50VG9TZWdtZW50RGlzdGFuY2UocCwgcDEsIHAyKSB7XHJcbiAgXHRyZXR1cm4gTWF0aC5zcXJ0KF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIsIHRydWUpKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjbG9zZXN0UG9pbnRPblNlZ21lbnQocDogUG9pbnQsIHAxOiBQb2ludCwgcDI6IFBvaW50KTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgY2xvc2VzdCBwb2ludCBmcm9tIGEgcG9pbnQgYHBgIG9uIGEgc2VnbWVudCBgcDFgIHRvIGBwMmAuXHJcbiAgZnVuY3Rpb24gY2xvc2VzdFBvaW50T25TZWdtZW50KHAsIHAxLCBwMikge1xyXG4gIFx0cmV0dXJuIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIpO1xyXG4gIH1cclxuXHJcbiAgLy8gRG91Z2xhcy1QZXVja2VyIHNpbXBsaWZpY2F0aW9uLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb3VnbGFzLVBldWNrZXJfYWxnb3JpdGhtXHJcbiAgZnVuY3Rpb24gX3NpbXBsaWZ5RFAocG9pbnRzLCBzcVRvbGVyYW5jZSkge1xyXG5cclxuICBcdHZhciBsZW4gPSBwb2ludHMubGVuZ3RoLFxyXG4gIFx0ICAgIEFycmF5Q29uc3RydWN0b3IgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gdW5kZWZpbmVkICsgJycgPyBVaW50OEFycmF5IDogQXJyYXksXHJcbiAgXHQgICAgbWFya2VycyA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGxlbik7XHJcblxyXG4gIFx0ICAgIG1hcmtlcnNbMF0gPSBtYXJrZXJzW2xlbiAtIDFdID0gMTtcclxuXHJcbiAgXHRfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgMCwgbGVuIC0gMSk7XHJcblxyXG4gIFx0dmFyIGksXHJcbiAgXHQgICAgbmV3UG9pbnRzID0gW107XHJcblxyXG4gIFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdGlmIChtYXJrZXJzW2ldKSB7XHJcbiAgXHRcdFx0bmV3UG9pbnRzLnB1c2gocG9pbnRzW2ldKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBuZXdQb2ludHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgZmlyc3QsIGxhc3QpIHtcclxuXHJcbiAgXHR2YXIgbWF4U3FEaXN0ID0gMCxcclxuICBcdGluZGV4LCBpLCBzcURpc3Q7XHJcblxyXG4gIFx0Zm9yIChpID0gZmlyc3QgKyAxOyBpIDw9IGxhc3QgLSAxOyBpKyspIHtcclxuICBcdFx0c3FEaXN0ID0gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHBvaW50c1tpXSwgcG9pbnRzW2ZpcnN0XSwgcG9pbnRzW2xhc3RdLCB0cnVlKTtcclxuXHJcbiAgXHRcdGlmIChzcURpc3QgPiBtYXhTcURpc3QpIHtcclxuICBcdFx0XHRpbmRleCA9IGk7XHJcbiAgXHRcdFx0bWF4U3FEaXN0ID0gc3FEaXN0O1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKG1heFNxRGlzdCA+IHNxVG9sZXJhbmNlKSB7XHJcbiAgXHRcdG1hcmtlcnNbaW5kZXhdID0gMTtcclxuXHJcbiAgXHRcdF9zaW1wbGlmeURQU3RlcChwb2ludHMsIG1hcmtlcnMsIHNxVG9sZXJhbmNlLCBmaXJzdCwgaW5kZXgpO1xyXG4gIFx0XHRfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgaW5kZXgsIGxhc3QpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gcmVkdWNlIHBvaW50cyB0aGF0IGFyZSB0b28gY2xvc2UgdG8gZWFjaCBvdGhlciB0byBhIHNpbmdsZSBwb2ludFxyXG4gIGZ1bmN0aW9uIF9yZWR1Y2VQb2ludHMocG9pbnRzLCBzcVRvbGVyYW5jZSkge1xyXG4gIFx0dmFyIHJlZHVjZWRQb2ludHMgPSBbcG9pbnRzWzBdXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMSwgcHJldiA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRpZiAoX3NxRGlzdChwb2ludHNbaV0sIHBvaW50c1twcmV2XSkgPiBzcVRvbGVyYW5jZSkge1xyXG4gIFx0XHRcdHJlZHVjZWRQb2ludHMucHVzaChwb2ludHNbaV0pO1xyXG4gIFx0XHRcdHByZXYgPSBpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgXHRpZiAocHJldiA8IGxlbiAtIDEpIHtcclxuICBcdFx0cmVkdWNlZFBvaW50cy5wdXNoKHBvaW50c1tsZW4gLSAxXSk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gcmVkdWNlZFBvaW50cztcclxuICB9XHJcblxyXG4gIHZhciBfbGFzdENvZGU7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjbGlwU2VnbWVudChhOiBQb2ludCwgYjogUG9pbnQsIGJvdW5kczogQm91bmRzLCB1c2VMYXN0Q29kZT86IEJvb2xlYW4sIHJvdW5kPzogQm9vbGVhbik6IFBvaW50W118Qm9vbGVhblxyXG4gIC8vIENsaXBzIHRoZSBzZWdtZW50IGEgdG8gYiBieSByZWN0YW5ndWxhciBib3VuZHMgd2l0aCB0aGVcclxuICAvLyBbQ29oZW4tU3V0aGVybGFuZCBhbGdvcml0aG1dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvaGVuJUUyJTgwJTkzU3V0aGVybGFuZF9hbGdvcml0aG0pXHJcbiAgLy8gKG1vZGlmeWluZyB0aGUgc2VnbWVudCBwb2ludHMgZGlyZWN0bHkhKS4gVXNlZCBieSBMZWFmbGV0IHRvIG9ubHkgc2hvdyBwb2x5bGluZVxyXG4gIC8vIHBvaW50cyB0aGF0IGFyZSBvbiB0aGUgc2NyZWVuIG9yIG5lYXIsIGluY3JlYXNpbmcgcGVyZm9ybWFuY2UuXHJcbiAgZnVuY3Rpb24gY2xpcFNlZ21lbnQoYSwgYiwgYm91bmRzLCB1c2VMYXN0Q29kZSwgcm91bmQpIHtcclxuICBcdHZhciBjb2RlQSA9IHVzZUxhc3RDb2RlID8gX2xhc3RDb2RlIDogX2dldEJpdENvZGUoYSwgYm91bmRzKSxcclxuICBcdCAgICBjb2RlQiA9IF9nZXRCaXRDb2RlKGIsIGJvdW5kcyksXHJcblxyXG4gIFx0ICAgIGNvZGVPdXQsIHAsIG5ld0NvZGU7XHJcblxyXG4gIFx0ICAgIC8vIHNhdmUgMm5kIGNvZGUgdG8gYXZvaWQgY2FsY3VsYXRpbmcgaXQgb24gdGhlIG5leHQgc2VnbWVudFxyXG4gIFx0ICAgIF9sYXN0Q29kZSA9IGNvZGVCO1xyXG5cclxuICBcdHdoaWxlICh0cnVlKSB7XHJcbiAgXHRcdC8vIGlmIGEsYiBpcyBpbnNpZGUgdGhlIGNsaXAgd2luZG93ICh0cml2aWFsIGFjY2VwdClcclxuICBcdFx0aWYgKCEoY29kZUEgfCBjb2RlQikpIHtcclxuICBcdFx0XHRyZXR1cm4gW2EsIGJdO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBpZiBhLGIgaXMgb3V0c2lkZSB0aGUgY2xpcCB3aW5kb3cgKHRyaXZpYWwgcmVqZWN0KVxyXG4gIFx0XHRpZiAoY29kZUEgJiBjb2RlQikge1xyXG4gIFx0XHRcdHJldHVybiBmYWxzZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gb3RoZXIgY2FzZXNcclxuICBcdFx0Y29kZU91dCA9IGNvZGVBIHx8IGNvZGVCO1xyXG4gIFx0XHRwID0gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYSwgYiwgY29kZU91dCwgYm91bmRzLCByb3VuZCk7XHJcbiAgXHRcdG5ld0NvZGUgPSBfZ2V0Qml0Q29kZShwLCBib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKGNvZGVPdXQgPT09IGNvZGVBKSB7XHJcbiAgXHRcdFx0YSA9IHA7XHJcbiAgXHRcdFx0Y29kZUEgPSBuZXdDb2RlO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGIgPSBwO1xyXG4gIFx0XHRcdGNvZGVCID0gbmV3Q29kZTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYSwgYiwgY29kZSwgYm91bmRzLCByb3VuZCkge1xyXG4gIFx0dmFyIGR4ID0gYi54IC0gYS54LFxyXG4gIFx0ICAgIGR5ID0gYi55IC0gYS55LFxyXG4gIFx0ICAgIG1pbiA9IGJvdW5kcy5taW4sXHJcbiAgXHQgICAgbWF4ID0gYm91bmRzLm1heCxcclxuICBcdCAgICB4LCB5O1xyXG5cclxuICBcdGlmIChjb2RlICYgOCkgeyAvLyB0b3BcclxuICBcdFx0eCA9IGEueCArIGR4ICogKG1heC55IC0gYS55KSAvIGR5O1xyXG4gIFx0XHR5ID0gbWF4Lnk7XHJcblxyXG4gIFx0fSBlbHNlIGlmIChjb2RlICYgNCkgeyAvLyBib3R0b21cclxuICBcdFx0eCA9IGEueCArIGR4ICogKG1pbi55IC0gYS55KSAvIGR5O1xyXG4gIFx0XHR5ID0gbWluLnk7XHJcblxyXG4gIFx0fSBlbHNlIGlmIChjb2RlICYgMikgeyAvLyByaWdodFxyXG4gIFx0XHR4ID0gbWF4Lng7XHJcbiAgXHRcdHkgPSBhLnkgKyBkeSAqIChtYXgueCAtIGEueCkgLyBkeDtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKGNvZGUgJiAxKSB7IC8vIGxlZnRcclxuICBcdFx0eCA9IG1pbi54O1xyXG4gIFx0XHR5ID0gYS55ICsgZHkgKiAobWluLnggLSBhLngpIC8gZHg7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIG5ldyBQb2ludCh4LCB5LCByb3VuZCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZ2V0Qml0Q29kZShwLCBib3VuZHMpIHtcclxuICBcdHZhciBjb2RlID0gMDtcclxuXHJcbiAgXHRpZiAocC54IDwgYm91bmRzLm1pbi54KSB7IC8vIGxlZnRcclxuICBcdFx0Y29kZSB8PSAxO1xyXG4gIFx0fSBlbHNlIGlmIChwLnggPiBib3VuZHMubWF4LngpIHsgLy8gcmlnaHRcclxuICBcdFx0Y29kZSB8PSAyO1xyXG4gIFx0fVxyXG5cclxuICBcdGlmIChwLnkgPCBib3VuZHMubWluLnkpIHsgLy8gYm90dG9tXHJcbiAgXHRcdGNvZGUgfD0gNDtcclxuICBcdH0gZWxzZSBpZiAocC55ID4gYm91bmRzLm1heC55KSB7IC8vIHRvcFxyXG4gIFx0XHRjb2RlIHw9IDg7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIGNvZGU7XHJcbiAgfVxyXG5cclxuICAvLyBzcXVhcmUgZGlzdGFuY2UgKHRvIGF2b2lkIHVubmVjZXNzYXJ5IE1hdGguc3FydCBjYWxscylcclxuICBmdW5jdGlvbiBfc3FEaXN0KHAxLCBwMikge1xyXG4gIFx0dmFyIGR4ID0gcDIueCAtIHAxLngsXHJcbiAgXHQgICAgZHkgPSBwMi55IC0gcDEueTtcclxuICBcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcclxuICB9XHJcblxyXG4gIC8vIHJldHVybiBjbG9zZXN0IHBvaW50IG9uIHNlZ21lbnQgb3IgZGlzdGFuY2UgdG8gdGhhdCBwb2ludFxyXG4gIGZ1bmN0aW9uIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIsIHNxRGlzdCkge1xyXG4gIFx0dmFyIHggPSBwMS54LFxyXG4gIFx0ICAgIHkgPSBwMS55LFxyXG4gIFx0ICAgIGR4ID0gcDIueCAtIHgsXHJcbiAgXHQgICAgZHkgPSBwMi55IC0geSxcclxuICBcdCAgICBkb3QgPSBkeCAqIGR4ICsgZHkgKiBkeSxcclxuICBcdCAgICB0O1xyXG5cclxuICBcdGlmIChkb3QgPiAwKSB7XHJcbiAgXHRcdHQgPSAoKHAueCAtIHgpICogZHggKyAocC55IC0geSkgKiBkeSkgLyBkb3Q7XHJcblxyXG4gIFx0XHRpZiAodCA+IDEpIHtcclxuICBcdFx0XHR4ID0gcDIueDtcclxuICBcdFx0XHR5ID0gcDIueTtcclxuICBcdFx0fSBlbHNlIGlmICh0ID4gMCkge1xyXG4gIFx0XHRcdHggKz0gZHggKiB0O1xyXG4gIFx0XHRcdHkgKz0gZHkgKiB0O1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0ZHggPSBwLnggLSB4O1xyXG4gIFx0ZHkgPSBwLnkgLSB5O1xyXG5cclxuICBcdHJldHVybiBzcURpc3QgPyBkeCAqIGR4ICsgZHkgKiBkeSA6IG5ldyBQb2ludCh4LCB5KTtcclxuICB9XHJcblxyXG5cclxuICAvLyBAZnVuY3Rpb24gaXNGbGF0KGxhdGxuZ3M6IExhdExuZ1tdKTogQm9vbGVhblxyXG4gIC8vIFJldHVybnMgdHJ1ZSBpZiBgbGF0bG5nc2AgaXMgYSBmbGF0IGFycmF5LCBmYWxzZSBpcyBuZXN0ZWQuXHJcbiAgZnVuY3Rpb24gaXNGbGF0KGxhdGxuZ3MpIHtcclxuICBcdHJldHVybiAhaXNBcnJheShsYXRsbmdzWzBdKSB8fCAodHlwZW9mIGxhdGxuZ3NbMF1bMF0gIT09ICdvYmplY3QnICYmIHR5cGVvZiBsYXRsbmdzWzBdWzBdICE9PSAndW5kZWZpbmVkJyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZmxhdChsYXRsbmdzKSB7XHJcbiAgXHRjb25zb2xlLndhcm4oJ0RlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuJyk7XHJcbiAgXHRyZXR1cm4gaXNGbGF0KGxhdGxuZ3MpO1xyXG4gIH1cblxuICB2YXIgTGluZVV0aWwgPSAoe1xuICAgIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgICBwb2ludFRvU2VnbWVudERpc3RhbmNlOiBwb2ludFRvU2VnbWVudERpc3RhbmNlLFxuICAgIGNsb3Nlc3RQb2ludE9uU2VnbWVudDogY2xvc2VzdFBvaW50T25TZWdtZW50LFxuICAgIGNsaXBTZWdtZW50OiBjbGlwU2VnbWVudCxcbiAgICBfZ2V0RWRnZUludGVyc2VjdGlvbjogX2dldEVkZ2VJbnRlcnNlY3Rpb24sXG4gICAgX2dldEJpdENvZGU6IF9nZXRCaXRDb2RlLFxuICAgIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudDogX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50LFxuICAgIGlzRmxhdDogaXNGbGF0LFxuICAgIF9mbGF0OiBfZmxhdFxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUG9seVV0aWxcclxuICAgKiBWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwb2x5Z29uIGdlb21ldHJpZXMuXHJcbiAgICovXHJcblxyXG4gIC8qIEBmdW5jdGlvbiBjbGlwUG9seWdvbihwb2ludHM6IFBvaW50W10sIGJvdW5kczogQm91bmRzLCByb3VuZD86IEJvb2xlYW4pOiBQb2ludFtdXHJcbiAgICogQ2xpcHMgdGhlIHBvbHlnb24gZ2VvbWV0cnkgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gYHBvaW50c2AgYnkgdGhlIGdpdmVuIGJvdW5kcyAodXNpbmcgdGhlIFtTdXRoZXJsYW5kLUhvZGdtYW4gYWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdXRoZXJsYW5kJUUyJTgwJTkzSG9kZ21hbl9hbGdvcml0aG0pKS5cclxuICAgKiBVc2VkIGJ5IExlYWZsZXQgdG8gb25seSBzaG93IHBvbHlnb24gcG9pbnRzIHRoYXQgYXJlIG9uIHRoZSBzY3JlZW4gb3IgbmVhciwgaW5jcmVhc2luZ1xyXG4gICAqIHBlcmZvcm1hbmNlLiBOb3RlIHRoYXQgcG9seWdvbiBwb2ludHMgbmVlZHMgZGlmZmVyZW50IGFsZ29yaXRobSBmb3IgY2xpcHBpbmdcclxuICAgKiB0aGFuIHBvbHlsaW5lLCBzbyB0aGVyZSdzIGEgc2VwYXJhdGUgbWV0aG9kIGZvciBpdC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjbGlwUG9seWdvbihwb2ludHMsIGJvdW5kcywgcm91bmQpIHtcclxuICBcdHZhciBjbGlwcGVkUG9pbnRzLFxyXG4gIFx0ICAgIGVkZ2VzID0gWzEsIDQsIDIsIDhdLFxyXG4gIFx0ICAgIGksIGosIGssXHJcbiAgXHQgICAgYSwgYixcclxuICBcdCAgICBsZW4sIGVkZ2UsIHA7XHJcblxyXG4gIFx0Zm9yIChpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHBvaW50c1tpXS5fY29kZSA9IF9nZXRCaXRDb2RlKHBvaW50c1tpXSwgYm91bmRzKTtcclxuICBcdH1cclxuXHJcbiAgXHQvLyBmb3IgZWFjaCBlZGdlIChsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApXHJcbiAgXHRmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgXHRcdGVkZ2UgPSBlZGdlc1trXTtcclxuICBcdFx0Y2xpcHBlZFBvaW50cyA9IFtdO1xyXG5cclxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcclxuICBcdFx0XHRhID0gcG9pbnRzW2ldO1xyXG4gIFx0XHRcdGIgPSBwb2ludHNbal07XHJcblxyXG4gIFx0XHRcdC8vIGlmIGEgaXMgaW5zaWRlIHRoZSBjbGlwIHdpbmRvd1xyXG4gIFx0XHRcdGlmICghKGEuX2NvZGUgJiBlZGdlKSkge1xyXG4gIFx0XHRcdFx0Ly8gaWYgYiBpcyBvdXRzaWRlIHRoZSBjbGlwIHdpbmRvdyAoYS0+YiBnb2VzIG91dCBvZiBzY3JlZW4pXHJcbiAgXHRcdFx0XHRpZiAoYi5fY29kZSAmIGVkZ2UpIHtcclxuICBcdFx0XHRcdFx0cCA9IF9nZXRFZGdlSW50ZXJzZWN0aW9uKGIsIGEsIGVkZ2UsIGJvdW5kcywgcm91bmQpO1xyXG4gIFx0XHRcdFx0XHRwLl9jb2RlID0gX2dldEJpdENvZGUocCwgYm91bmRzKTtcclxuICBcdFx0XHRcdFx0Y2xpcHBlZFBvaW50cy5wdXNoKHApO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0Y2xpcHBlZFBvaW50cy5wdXNoKGEpO1xyXG5cclxuICBcdFx0XHQvLyBlbHNlIGlmIGIgaXMgaW5zaWRlIHRoZSBjbGlwIHdpbmRvdyAoYS0+YiBlbnRlcnMgdGhlIHNjcmVlbilcclxuICBcdFx0XHR9IGVsc2UgaWYgKCEoYi5fY29kZSAmIGVkZ2UpKSB7XHJcbiAgXHRcdFx0XHRwID0gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYiwgYSwgZWRnZSwgYm91bmRzLCByb3VuZCk7XHJcbiAgXHRcdFx0XHRwLl9jb2RlID0gX2dldEJpdENvZGUocCwgYm91bmRzKTtcclxuICBcdFx0XHRcdGNsaXBwZWRQb2ludHMucHVzaChwKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cG9pbnRzID0gY2xpcHBlZFBvaW50cztcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gcG9pbnRzO1xyXG4gIH1cblxuICB2YXIgUG9seVV0aWwgPSAoe1xuICAgIGNsaXBQb2x5Z29uOiBjbGlwUG9seWdvblxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUHJvamVjdGlvblxyXG4gICAqIEBzZWN0aW9uXHJcbiAgICogTGVhZmxldCBjb21lcyB3aXRoIGEgc2V0IG9mIGFscmVhZHkgZGVmaW5lZCBQcm9qZWN0aW9ucyBvdXQgb2YgdGhlIGJveDpcclxuICAgKlxyXG4gICAqIEBwcm9qZWN0aW9uIEwuUHJvamVjdGlvbi5Mb25MYXRcclxuICAgKlxyXG4gICAqIEVxdWlyZWN0YW5ndWxhciwgb3IgUGxhdGUgQ2FycmVlIHByb2plY3Rpb24g4oCUIHRoZSBtb3N0IHNpbXBsZSBwcm9qZWN0aW9uLFxyXG4gICAqIG1vc3RseSB1c2VkIGJ5IEdJUyBlbnRodXNpYXN0cy4gRGlyZWN0bHkgbWFwcyBgeGAgYXMgbG9uZ2l0dWRlLCBhbmQgYHlgIGFzXHJcbiAgICogbGF0aXR1ZGUuIEFsc28gc3VpdGFibGUgZm9yIGZsYXQgd29ybGRzLCBlLmcuIGdhbWUgbWFwcy4gVXNlZCBieSB0aGVcclxuICAgKiBgRVBTRzo0MzI2YCBhbmQgYFNpbXBsZWAgQ1JTLlxyXG4gICAqL1xyXG5cclxuICB2YXIgTG9uTGF0ID0ge1xyXG4gIFx0cHJvamVjdDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KGxhdGxuZy5sbmcsIGxhdGxuZy5sYXQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHR1bnByb2plY3Q6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhwb2ludC55LCBwb2ludC54KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ym91bmRzOiBuZXcgQm91bmRzKFstMTgwLCAtOTBdLCBbMTgwLCA5MF0pXHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUHJvamVjdGlvblxyXG4gICAqIEBwcm9qZWN0aW9uIEwuUHJvamVjdGlvbi5NZXJjYXRvclxyXG4gICAqXHJcbiAgICogRWxsaXB0aWNhbCBNZXJjYXRvciBwcm9qZWN0aW9uIOKAlCBtb3JlIGNvbXBsZXggdGhhbiBTcGhlcmljYWwgTWVyY2F0b3IuIEFzc3VtZXMgdGhhdCBFYXJ0aCBpcyBhbiBlbGxpcHNvaWQuIFVzZWQgYnkgdGhlIEVQU0c6MzM5NSBDUlMuXHJcbiAgICovXHJcblxyXG4gIHZhciBNZXJjYXRvciA9IHtcclxuICBcdFI6IDYzNzgxMzcsXHJcbiAgXHRSX01JTk9SOiA2MzU2NzUyLjMxNDI0NTE3OSxcclxuXHJcbiAgXHRib3VuZHM6IG5ldyBCb3VuZHMoWy0yMDAzNzUwOC4zNDI3OSwgLTE1NDk2NTcwLjczOTcyXSwgWzIwMDM3NTA4LjM0Mjc5LCAxODc2NDY1Ni4yMzEzOF0pLFxyXG5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gIFx0XHQgICAgciA9IHRoaXMuUixcclxuICBcdFx0ICAgIHkgPSBsYXRsbmcubGF0ICogZCxcclxuICBcdFx0ICAgIHRtcCA9IHRoaXMuUl9NSU5PUiAvIHIsXHJcbiAgXHRcdCAgICBlID0gTWF0aC5zcXJ0KDEgLSB0bXAgKiB0bXApLFxyXG4gIFx0XHQgICAgY29uID0gZSAqIE1hdGguc2luKHkpO1xyXG5cclxuICBcdFx0dmFyIHRzID0gTWF0aC50YW4oTWF0aC5QSSAvIDQgLSB5IC8gMikgLyBNYXRoLnBvdygoMSAtIGNvbikgLyAoMSArIGNvbiksIGUgLyAyKTtcclxuICBcdFx0eSA9IC1yICogTWF0aC5sb2coTWF0aC5tYXgodHMsIDFFLTEwKSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KGxhdGxuZy5sbmcgKiBkICogciwgeSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBkID0gMTgwIC8gTWF0aC5QSSxcclxuICBcdFx0ICAgIHIgPSB0aGlzLlIsXHJcbiAgXHRcdCAgICB0bXAgPSB0aGlzLlJfTUlOT1IgLyByLFxyXG4gIFx0XHQgICAgZSA9IE1hdGguc3FydCgxIC0gdG1wICogdG1wKSxcclxuICBcdFx0ICAgIHRzID0gTWF0aC5leHAoLXBvaW50LnkgLyByKSxcclxuICBcdFx0ICAgIHBoaSA9IE1hdGguUEkgLyAyIC0gMiAqIE1hdGguYXRhbih0cyk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgZHBoaSA9IDAuMSwgY29uOyBpIDwgMTUgJiYgTWF0aC5hYnMoZHBoaSkgPiAxZS03OyBpKyspIHtcclxuICBcdFx0XHRjb24gPSBlICogTWF0aC5zaW4ocGhpKTtcclxuICBcdFx0XHRjb24gPSBNYXRoLnBvdygoMSAtIGNvbikgLyAoMSArIGNvbiksIGUgLyAyKTtcclxuICBcdFx0XHRkcGhpID0gTWF0aC5QSSAvIDIgLSAyICogTWF0aC5hdGFuKHRzICogY29uKSAtIHBoaTtcclxuICBcdFx0XHRwaGkgKz0gZHBoaTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcocGhpICogZCwgcG9pbnQueCAqIGQgLyByKTtcclxuICBcdH1cclxuICB9O1xuXG4gIC8qXG4gICAqIEBjbGFzcyBQcm9qZWN0aW9uXG5cbiAgICogQW4gb2JqZWN0IHdpdGggbWV0aG9kcyBmb3IgcHJvamVjdGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHdvcmxkIG9udG9cbiAgICogYSBmbGF0IHN1cmZhY2UgKGFuZCBiYWNrKS4gU2VlIFtNYXAgcHJvamVjdGlvbl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXBfcHJvamVjdGlvbikuXG5cbiAgICogQHByb3BlcnR5IGJvdW5kczogQm91bmRzXG4gICAqIFRoZSBib3VuZHMgKHNwZWNpZmllZCBpbiBDUlMgdW5pdHMpIHdoZXJlIHRoZSBwcm9qZWN0aW9uIGlzIHZhbGlkXG5cbiAgICogQG1ldGhvZCBwcm9qZWN0KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcbiAgICogUHJvamVjdHMgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGludG8gYSAyRCBwb2ludC5cbiAgICogT25seSBhY2NlcHRzIGFjdHVhbCBgTC5MYXRMbmdgIGluc3RhbmNlcywgbm90IGFycmF5cy5cblxuICAgKiBAbWV0aG9kIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMYXRMbmdcbiAgICogVGhlIGludmVyc2Ugb2YgYHByb2plY3RgLiBQcm9qZWN0cyBhIDJEIHBvaW50IGludG8gYSBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAqIE9ubHkgYWNjZXB0cyBhY3R1YWwgYEwuUG9pbnRgIGluc3RhbmNlcywgbm90IGFycmF5cy5cblxuICAgKiBOb3RlIHRoYXQgdGhlIHByb2plY3Rpb24gaW5zdGFuY2VzIGRvIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxuICAgKiBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiBBbHNvLCBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gdGhlbSxcbiAgICogYW5kIG1ldGhvZHMgY2FuJ3QgYmUgYWRkZWQgdG8gdGhlbSB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXG5cbiAgICovXG5cbiAgdmFyIGluZGV4ID0gKHtcbiAgICBMb25MYXQ6IExvbkxhdCxcbiAgICBNZXJjYXRvcjogTWVyY2F0b3IsXG4gICAgU3BoZXJpY2FsTWVyY2F0b3I6IFNwaGVyaWNhbE1lcmNhdG9yXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBDUlNcclxuICAgKiBAY3JzIEwuQ1JTLkVQU0czMzk1XHJcbiAgICpcclxuICAgKiBSYXJlbHkgdXNlZCBieSBzb21lIGNvbW1lcmNpYWwgdGlsZSBwcm92aWRlcnMuIFVzZXMgRWxsaXB0aWNhbCBNZXJjYXRvciBwcm9qZWN0aW9uLlxyXG4gICAqL1xyXG4gIHZhciBFUFNHMzM5NSA9IGV4dGVuZCh7fSwgRWFydGgsIHtcclxuICBcdGNvZGU6ICdFUFNHOjMzOTUnLFxyXG4gIFx0cHJvamVjdGlvbjogTWVyY2F0b3IsXHJcblxyXG4gIFx0dHJhbnNmb3JtYXRpb246IChmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IDAuNSAvIChNYXRoLlBJICogTWVyY2F0b3IuUik7XHJcbiAgXHRcdHJldHVybiB0b1RyYW5zZm9ybWF0aW9uKHNjYWxlLCAwLjUsIC1zY2FsZSwgMC41KTtcclxuICBcdH0oKSlcclxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgQ1JTXHJcbiAgICogQGNycyBMLkNSUy5FUFNHNDMyNlxyXG4gICAqXHJcbiAgICogQSBjb21tb24gQ1JTIGFtb25nIEdJUyBlbnRodXNpYXN0cy4gVXNlcyBzaW1wbGUgRXF1aXJlY3Rhbmd1bGFyIHByb2plY3Rpb24uXHJcbiAgICpcclxuICAgKiBMZWFmbGV0IDEuMC54IGNvbXBsaWVzIHdpdGggdGhlIFtUTVMgY29vcmRpbmF0ZSBzY2hlbWUgZm9yIEVQU0c6NDMyNl0oaHR0cHM6Ly93aWtpLm9zZ2VvLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2VfU3BlY2lmaWNhdGlvbiNnbG9iYWwtZ2VvZGV0aWMpLFxyXG4gICAqIHdoaWNoIGlzIGEgYnJlYWtpbmcgY2hhbmdlIGZyb20gMC43LnggYmVoYXZpb3VyLiAgSWYgeW91IGFyZSB1c2luZyBhIGBUaWxlTGF5ZXJgXHJcbiAgICogd2l0aCB0aGlzIENSUywgZW5zdXJlIHRoYXQgdGhlcmUgYXJlIHR3byAyNTZ4MjU2IHBpeGVsIHRpbGVzIGNvdmVyaW5nIHRoZVxyXG4gICAqIHdob2xlIGVhcnRoIGF0IHpvb20gbGV2ZWwgemVybywgYW5kIHRoYXQgdGhlIHRpbGUgY29vcmRpbmF0ZSBvcmlnaW4gaXMgKC0xODAsKzkwKSxcclxuICAgKiBvciAoLTE4MCwtOTApIGZvciBgVGlsZUxheWVyYHMgd2l0aCBbdGhlIGB0bXNgIG9wdGlvbl0oI3RpbGVsYXllci10bXMpIHNldC5cclxuICAgKi9cclxuXHJcbiAgdmFyIEVQU0c0MzI2ID0gZXh0ZW5kKHt9LCBFYXJ0aCwge1xyXG4gIFx0Y29kZTogJ0VQU0c6NDMyNicsXHJcbiAgXHRwcm9qZWN0aW9uOiBMb25MYXQsXHJcbiAgXHR0cmFuc2Zvcm1hdGlvbjogdG9UcmFuc2Zvcm1hdGlvbigxIC8gMTgwLCAxLCAtMSAvIDE4MCwgMC41KVxyXG4gIH0pO1xuXG4gIC8qXG4gICAqIEBuYW1lc3BhY2UgQ1JTXG4gICAqIEBjcnMgTC5DUlMuU2ltcGxlXG4gICAqXG4gICAqIEEgc2ltcGxlIENSUyB0aGF0IG1hcHMgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBpbnRvIGB4YCBhbmQgYHlgIGRpcmVjdGx5LlxuICAgKiBNYXkgYmUgdXNlZCBmb3IgbWFwcyBvZiBmbGF0IHN1cmZhY2VzIChlLmcuIGdhbWUgbWFwcykuIE5vdGUgdGhhdCB0aGUgYHlgXG4gICAqIGF4aXMgc2hvdWxkIHN0aWxsIGJlIGludmVydGVkIChnb2luZyBmcm9tIGJvdHRvbSB0byB0b3ApLiBgZGlzdGFuY2UoKWAgcmV0dXJuc1xuICAgKiBzaW1wbGUgZXVjbGlkZWFuIGRpc3RhbmNlLlxuICAgKi9cblxuICB2YXIgU2ltcGxlID0gZXh0ZW5kKHt9LCBDUlMsIHtcbiAgXHRwcm9qZWN0aW9uOiBMb25MYXQsXG4gIFx0dHJhbnNmb3JtYXRpb246IHRvVHJhbnNmb3JtYXRpb24oMSwgMCwgLTEsIDApLFxuXG4gIFx0c2NhbGU6IGZ1bmN0aW9uICh6b29tKSB7XG4gIFx0XHRyZXR1cm4gTWF0aC5wb3coMiwgem9vbSk7XG4gIFx0fSxcblxuICBcdHpvb206IGZ1bmN0aW9uIChzY2FsZSkge1xuICBcdFx0cmV0dXJuIE1hdGgubG9nKHNjYWxlKSAvIE1hdGguTE4yO1xuICBcdH0sXG5cbiAgXHRkaXN0YW5jZTogZnVuY3Rpb24gKGxhdGxuZzEsIGxhdGxuZzIpIHtcbiAgXHRcdHZhciBkeCA9IGxhdGxuZzIubG5nIC0gbGF0bG5nMS5sbmcsXG4gIFx0XHQgICAgZHkgPSBsYXRsbmcyLmxhdCAtIGxhdGxuZzEubGF0O1xuXG4gIFx0XHRyZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgXHR9LFxuXG4gIFx0aW5maW5pdGU6IHRydWVcbiAgfSk7XG5cbiAgQ1JTLkVhcnRoID0gRWFydGg7XG4gIENSUy5FUFNHMzM5NSA9IEVQU0czMzk1O1xuICBDUlMuRVBTRzM4NTcgPSBFUFNHMzg1NztcbiAgQ1JTLkVQU0c5MDA5MTMgPSBFUFNHOTAwOTEzO1xuICBDUlMuRVBTRzQzMjYgPSBFUFNHNDMyNjtcbiAgQ1JTLlNpbXBsZSA9IFNpbXBsZTtcblxuICAvKlxuICAgKiBAY2xhc3MgTGF5ZXJcbiAgICogQGluaGVyaXRzIEV2ZW50ZWRcbiAgICogQGFrYSBMLkxheWVyXG4gICAqIEBha2EgSUxheWVyXG4gICAqXG4gICAqIEEgc2V0IG9mIG1ldGhvZHMgZnJvbSB0aGUgTGF5ZXIgYmFzZSBjbGFzcyB0aGF0IGFsbCBMZWFmbGV0IGxheWVycyB1c2UuXG4gICAqIEluaGVyaXRzIGFsbCBtZXRob2RzLCBvcHRpb25zIGFuZCBldmVudHMgZnJvbSBgTC5FdmVudGVkYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIGxheWVyID0gTC5tYXJrZXIobGF0bG5nKS5hZGRUbyhtYXApO1xuICAgKiBsYXllci5hZGRUbyhtYXApO1xuICAgKiBsYXllci5yZW1vdmUoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBldmVudCBhZGQ6IEV2ZW50XG4gICAqIEZpcmVkIGFmdGVyIHRoZSBsYXllciBpcyBhZGRlZCB0byBhIG1hcFxuICAgKlxuICAgKiBAZXZlbnQgcmVtb3ZlOiBFdmVudFxuICAgKiBGaXJlZCBhZnRlciB0aGUgbGF5ZXIgaXMgcmVtb3ZlZCBmcm9tIGEgbWFwXG4gICAqL1xuXG5cbiAgdmFyIExheWVyID0gRXZlbnRlZC5leHRlbmQoe1xuXG4gIFx0Ly8gQ2xhc3NlcyBleHRlbmRpbmcgYEwuTGF5ZXJgIHdpbGwgaW5oZXJpdCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAnb3ZlcmxheVBhbmUnXG4gIFx0XHQvLyBCeSBkZWZhdWx0IHRoZSBsYXllciB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYXAncyBbb3ZlcmxheSBwYW5lXSgjbWFwLW92ZXJsYXlwYW5lKS4gT3ZlcnJpZGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBsYXllciB0byBiZSBwbGFjZWQgb24gYW5vdGhlciBwYW5lIGJ5IGRlZmF1bHQuXG4gIFx0XHRwYW5lOiAnb3ZlcmxheVBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGF0dHJpYnV0aW9uOiBTdHJpbmcgPSBudWxsXG4gIFx0XHQvLyBTdHJpbmcgdG8gYmUgc2hvd24gaW4gdGhlIGF0dHJpYnV0aW9uIGNvbnRyb2wsIGUuZy4gXCLCqSBPcGVuU3RyZWV0TWFwIGNvbnRyaWJ1dG9yc1wiLiBJdCBkZXNjcmliZXMgdGhlIGxheWVyIGRhdGEgYW5kIGlzIG9mdGVuIGEgbGVnYWwgb2JsaWdhdGlvbiB0b3dhcmRzIGNvcHlyaWdodCBob2xkZXJzIGFuZCB0aWxlIHByb3ZpZGVycy5cbiAgXHRcdGF0dHJpYnV0aW9uOiBudWxsLFxuXG4gIFx0XHRidWJibGluZ01vdXNlRXZlbnRzOiB0cnVlXG4gIFx0fSxcblxuICBcdC8qIEBzZWN0aW9uXG4gIFx0ICogQ2xhc3NlcyBleHRlbmRpbmcgYEwuTGF5ZXJgIHdpbGwgaW5oZXJpdCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG4gIFx0ICpcbiAgXHQgKiBAbWV0aG9kIGFkZFRvKG1hcDogTWFwfExheWVyR3JvdXApOiB0aGlzXG4gIFx0ICogQWRkcyB0aGUgbGF5ZXIgdG8gdGhlIGdpdmVuIG1hcCBvciBsYXllciBncm91cC5cbiAgXHQgKi9cbiAgXHRhZGRUbzogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0bWFwLmFkZExheWVyKHRoaXMpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVtb3ZlOiB0aGlzXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgbGF5ZXIgZnJvbSB0aGUgbWFwIGl0IGlzIGN1cnJlbnRseSBhY3RpdmUgb24uXG4gIFx0cmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tKHRoaXMuX21hcCB8fCB0aGlzLl9tYXBUb0FkZCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVtb3ZlRnJvbShtYXA6IE1hcCk6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBsYXllciBmcm9tIHRoZSBnaXZlbiBtYXBcbiAgXHQvL1xuICBcdC8vIEBhbHRlcm5hdGl2ZVxuICBcdC8vIEBtZXRob2QgcmVtb3ZlRnJvbShncm91cDogTGF5ZXJHcm91cCk6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBsYXllciBmcm9tIHRoZSBnaXZlbiBgTGF5ZXJHcm91cGBcbiAgXHRyZW1vdmVGcm9tOiBmdW5jdGlvbiAob2JqKSB7XG4gIFx0XHRpZiAob2JqKSB7XG4gIFx0XHRcdG9iai5yZW1vdmVMYXllcih0aGlzKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFBhbmUobmFtZT8gOiBTdHJpbmcpOiBIVE1MRWxlbWVudFxuICBcdC8vIFJldHVybnMgdGhlIGBIVE1MRWxlbWVudGAgcmVwcmVzZW50aW5nIHRoZSBuYW1lZCBwYW5lIG9uIHRoZSBtYXAuIElmIGBuYW1lYCBpcyBvbWl0dGVkLCByZXR1cm5zIHRoZSBwYW5lIGZvciB0aGlzIGxheWVyLlxuICBcdGdldFBhbmU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbWFwLmdldFBhbmUobmFtZSA/ICh0aGlzLm9wdGlvbnNbbmFtZV0gfHwgbmFtZSkgOiB0aGlzLm9wdGlvbnMucGFuZSk7XG4gIFx0fSxcblxuICBcdGFkZEludGVyYWN0aXZlVGFyZ2V0OiBmdW5jdGlvbiAodGFyZ2V0RWwpIHtcbiAgXHRcdHRoaXMuX21hcC5fdGFyZ2V0c1tzdGFtcCh0YXJnZXRFbCldID0gdGhpcztcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldDogZnVuY3Rpb24gKHRhcmdldEVsKSB7XG4gIFx0XHRkZWxldGUgdGhpcy5fbWFwLl90YXJnZXRzW3N0YW1wKHRhcmdldEVsKV07XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRBdHRyaWJ1dGlvbjogU3RyaW5nXG4gIFx0Ly8gVXNlZCBieSB0aGUgYGF0dHJpYnV0aW9uIGNvbnRyb2xgLCByZXR1cm5zIHRoZSBbYXR0cmlidXRpb24gb3B0aW9uXSgjZ3JpZGxheWVyLWF0dHJpYnV0aW9uKS5cbiAgXHRnZXRBdHRyaWJ1dGlvbjogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbjtcbiAgXHR9LFxuXG4gIFx0X2xheWVyQWRkOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IGUudGFyZ2V0O1xuXG4gIFx0XHQvLyBjaGVjayBpbiBjYXNlIGxheWVyIGdldHMgYWRkZWQgYW5kIHRoZW4gcmVtb3ZlZCBiZWZvcmUgdGhlIG1hcCBpcyByZWFkeVxuICBcdFx0aWYgKCFtYXAuaGFzTGF5ZXIodGhpcykpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcbiAgXHRcdHRoaXMuX3pvb21BbmltYXRlZCA9IG1hcC5fem9vbUFuaW1hdGVkO1xuXG4gIFx0XHRpZiAodGhpcy5nZXRFdmVudHMpIHtcbiAgXHRcdFx0dmFyIGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKCk7XG4gIFx0XHRcdG1hcC5vbihldmVudHMsIHRoaXMpO1xuICBcdFx0XHR0aGlzLm9uY2UoJ3JlbW92ZScsIGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0XHRtYXAub2ZmKGV2ZW50cywgdGhpcyk7XG4gIFx0XHRcdH0sIHRoaXMpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLm9uQWRkKG1hcCk7XG5cbiAgXHRcdGlmICh0aGlzLmdldEF0dHJpYnV0aW9uICYmIG1hcC5hdHRyaWJ1dGlvbkNvbnRyb2wpIHtcbiAgXHRcdFx0bWFwLmF0dHJpYnV0aW9uQ29udHJvbC5hZGRBdHRyaWJ1dGlvbih0aGlzLmdldEF0dHJpYnV0aW9uKCkpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLmZpcmUoJ2FkZCcpO1xuICBcdFx0bWFwLmZpcmUoJ2xheWVyYWRkJywge2xheWVyOiB0aGlzfSk7XG4gIFx0fVxuICB9KTtcblxuICAvKiBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xuICAgKiBAdW5pbmhlcml0YWJsZVxuICAgKlxuICAgKiBFdmVyeSBsYXllciBzaG91bGQgZXh0ZW5kIGZyb20gYEwuTGF5ZXJgIGFuZCAocmUtKWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZHMuXG4gICAqXG4gICAqIEBtZXRob2Qgb25BZGQobWFwOiBNYXApOiB0aGlzXG4gICAqIFNob3VsZCBjb250YWluIGNvZGUgdGhhdCBjcmVhdGVzIERPTSBlbGVtZW50cyBmb3IgdGhlIGxheWVyLCBhZGRzIHRoZW0gdG8gYG1hcCBwYW5lc2Agd2hlcmUgdGhleSBzaG91bGQgYmVsb25nIGFuZCBwdXRzIGxpc3RlbmVycyBvbiByZWxldmFudCBtYXAgZXZlbnRzLiBDYWxsZWQgb24gW2BtYXAuYWRkTGF5ZXIobGF5ZXIpYF0oI21hcC1hZGRsYXllcikuXG4gICAqXG4gICAqIEBtZXRob2Qgb25SZW1vdmUobWFwOiBNYXApOiB0aGlzXG4gICAqIFNob3VsZCBjb250YWluIGFsbCBjbGVhbiB1cCBjb2RlIHRoYXQgcmVtb3ZlcyB0aGUgbGF5ZXIncyBlbGVtZW50cyBmcm9tIHRoZSBET00gYW5kIHJlbW92ZXMgbGlzdGVuZXJzIHByZXZpb3VzbHkgYWRkZWQgaW4gW2BvbkFkZGBdKCNsYXllci1vbmFkZCkuIENhbGxlZCBvbiBbYG1hcC5yZW1vdmVMYXllcihsYXllcilgXSgjbWFwLXJlbW92ZWxheWVyKS5cbiAgICpcbiAgICogQG1ldGhvZCBnZXRFdmVudHMoKTogT2JqZWN0XG4gICAqIFRoaXMgb3B0aW9uYWwgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGxpa2UgYHsgdmlld3Jlc2V0OiB0aGlzLl9yZXNldCB9YCBmb3IgW2BhZGRFdmVudExpc3RlbmVyYF0oI2V2ZW50ZWQtYWRkZXZlbnRsaXN0ZW5lcikuIFRoZSBldmVudCBoYW5kbGVycyBpbiB0aGlzIG9iamVjdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgbWFwIHdpdGggeW91ciBsYXllci5cbiAgICpcbiAgICogQG1ldGhvZCBnZXRBdHRyaWJ1dGlvbigpOiBTdHJpbmdcbiAgICogVGhpcyBvcHRpb25hbCBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIEhUTUwgdG8gYmUgc2hvd24gb24gdGhlIGBBdHRyaWJ1dGlvbiBjb250cm9sYCB3aGVuZXZlciB0aGUgbGF5ZXIgaXMgdmlzaWJsZS5cbiAgICpcbiAgICogQG1ldGhvZCBiZWZvcmVBZGQobWFwOiBNYXApOiB0aGlzXG4gICAqIE9wdGlvbmFsIG1ldGhvZC4gQ2FsbGVkIG9uIFtgbWFwLmFkZExheWVyKGxheWVyKWBdKCNtYXAtYWRkbGF5ZXIpLCBiZWZvcmUgdGhlIGxheWVyIGlzIGFkZGVkIHRvIHRoZSBtYXAsIGJlZm9yZSBldmVudHMgYXJlIGluaXRpYWxpemVkLCB3aXRob3V0IHdhaXRpbmcgdW50aWwgdGhlIG1hcCBpcyBpbiBhIHVzYWJsZSBzdGF0ZS4gVXNlIGZvciBlYXJseSBpbml0aWFsaXphdGlvbiBvbmx5LlxuICAgKi9cblxuXG4gIC8qIEBuYW1lc3BhY2UgTWFwXG4gICAqIEBzZWN0aW9uIExheWVyIGV2ZW50c1xuICAgKlxuICAgKiBAZXZlbnQgbGF5ZXJhZGQ6IExheWVyRXZlbnRcbiAgICogRmlyZWQgd2hlbiBhIG5ldyBsYXllciBpcyBhZGRlZCB0byB0aGUgbWFwLlxuICAgKlxuICAgKiBAZXZlbnQgbGF5ZXJyZW1vdmU6IExheWVyRXZlbnRcbiAgICogRmlyZWQgd2hlbiBzb21lIGxheWVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgbWFwXG4gICAqXG4gICAqIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcbiAgICovXG4gIE1hcC5pbmNsdWRlKHtcbiAgXHQvLyBAbWV0aG9kIGFkZExheWVyKGxheWVyOiBMYXllcik6IHRoaXNcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBsYXllciB0byB0aGUgbWFwXG4gIFx0YWRkTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCFsYXllci5fbGF5ZXJBZGQpIHtcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgb2JqZWN0IGlzIG5vdCBhIExheWVyLicpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgaWQgPSBzdGFtcChsYXllcik7XG4gIFx0XHRpZiAodGhpcy5fbGF5ZXJzW2lkXSkgeyByZXR1cm4gdGhpczsgfVxuICBcdFx0dGhpcy5fbGF5ZXJzW2lkXSA9IGxheWVyO1xuXG4gIFx0XHRsYXllci5fbWFwVG9BZGQgPSB0aGlzO1xuXG4gIFx0XHRpZiAobGF5ZXIuYmVmb3JlQWRkKSB7XG4gIFx0XHRcdGxheWVyLmJlZm9yZUFkZCh0aGlzKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy53aGVuUmVhZHkobGF5ZXIuX2xheWVyQWRkLCBsYXllcik7XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUxheWVyKGxheWVyOiBMYXllcik6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBnaXZlbiBsYXllciBmcm9tIHRoZSBtYXAuXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIGlkID0gc3RhbXAobGF5ZXIpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX2xheWVyc1tpZF0pIHsgcmV0dXJuIHRoaXM7IH1cblxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xuICBcdFx0XHRsYXllci5vblJlbW92ZSh0aGlzKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKGxheWVyLmdldEF0dHJpYnV0aW9uICYmIHRoaXMuYXR0cmlidXRpb25Db250cm9sKSB7XG4gIFx0XHRcdHRoaXMuYXR0cmlidXRpb25Db250cm9sLnJlbW92ZUF0dHJpYnV0aW9uKGxheWVyLmdldEF0dHJpYnV0aW9uKCkpO1xuICBcdFx0fVxuXG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcblxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xuICBcdFx0XHR0aGlzLmZpcmUoJ2xheWVycmVtb3ZlJywge2xheWVyOiBsYXllcn0pO1xuICBcdFx0XHRsYXllci5maXJlKCdyZW1vdmUnKTtcbiAgXHRcdH1cblxuICBcdFx0bGF5ZXIuX21hcCA9IGxheWVyLl9tYXBUb0FkZCA9IG51bGw7XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGhhc0xheWVyKGxheWVyOiBMYXllcik6IEJvb2xlYW5cbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgY3VycmVudGx5IGFkZGVkIHRvIHRoZSBtYXBcbiAgXHRoYXNMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRyZXR1cm4gISFsYXllciAmJiAoc3RhbXAobGF5ZXIpIGluIHRoaXMuX2xheWVycyk7XG4gIFx0fSxcblxuICBcdC8qIEBtZXRob2QgZWFjaExheWVyKGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcbiAgXHQgKiBJdGVyYXRlcyBvdmVyIHRoZSBsYXllcnMgb2YgdGhlIG1hcCwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIGNvbnRleHQgb2YgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICBcdCAqIGBgYFxuICBcdCAqIG1hcC5lYWNoTGF5ZXIoZnVuY3Rpb24obGF5ZXIpe1xuICBcdCAqICAgICBsYXllci5iaW5kUG9wdXAoJ0hlbGxvJyk7XG4gIFx0ICogfSk7XG4gIFx0ICogYGBgXG4gIFx0ICovXG4gIFx0ZWFjaExheWVyOiBmdW5jdGlvbiAobWV0aG9kLCBjb250ZXh0KSB7XG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2xheWVycykge1xuICBcdFx0XHRtZXRob2QuY2FsbChjb250ZXh0LCB0aGlzLl9sYXllcnNbaV0pO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdF9hZGRMYXllcnM6IGZ1bmN0aW9uIChsYXllcnMpIHtcbiAgXHRcdGxheWVycyA9IGxheWVycyA/IChpc0FycmF5KGxheWVycykgPyBsYXllcnMgOiBbbGF5ZXJzXSkgOiBbXTtcblxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGxheWVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHR0aGlzLmFkZExheWVyKGxheWVyc1tpXSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9hZGRab29tTGltaXQ6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKGlzTmFOKGxheWVyLm9wdGlvbnMubWF4Wm9vbSkgfHwgIWlzTmFOKGxheWVyLm9wdGlvbnMubWluWm9vbSkpIHtcbiAgXHRcdFx0dGhpcy5fem9vbUJvdW5kTGF5ZXJzW3N0YW1wKGxheWVyKV0gPSBsYXllcjtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlWm9vbUxldmVscygpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVtb3ZlWm9vbUxpbWl0OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBpZCA9IHN0YW1wKGxheWVyKTtcblxuICBcdFx0aWYgKHRoaXMuX3pvb21Cb3VuZExheWVyc1tpZF0pIHtcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX3pvb21Cb3VuZExheWVyc1tpZF07XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVpvb21MZXZlbHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBtaW5ab29tID0gSW5maW5pdHksXG4gIFx0XHQgICAgbWF4Wm9vbSA9IC1JbmZpbml0eSxcbiAgXHRcdCAgICBvbGRab29tU3BhbiA9IHRoaXMuX2dldFpvb21TcGFuKCk7XG5cbiAgXHRcdGZvciAodmFyIGkgaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKSB7XG4gIFx0XHRcdHZhciBvcHRpb25zID0gdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2ldLm9wdGlvbnM7XG5cbiAgXHRcdFx0bWluWm9vbSA9IG9wdGlvbnMubWluWm9vbSA9PT0gdW5kZWZpbmVkID8gbWluWm9vbSA6IE1hdGgubWluKG1pblpvb20sIG9wdGlvbnMubWluWm9vbSk7XG4gIFx0XHRcdG1heFpvb20gPSBvcHRpb25zLm1heFpvb20gPT09IHVuZGVmaW5lZCA/IG1heFpvb20gOiBNYXRoLm1heChtYXhab29tLCBvcHRpb25zLm1heFpvb20pO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9sYXllcnNNYXhab29tID0gbWF4Wm9vbSA9PT0gLUluZmluaXR5ID8gdW5kZWZpbmVkIDogbWF4Wm9vbTtcbiAgXHRcdHRoaXMuX2xheWVyc01pblpvb20gPSBtaW5ab29tID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG1pblpvb207XG5cbiAgXHRcdC8vIEBzZWN0aW9uIE1hcCBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgem9vbWxldmVsc2NoYW5nZTogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG51bWJlciBvZiB6b29tbGV2ZWxzIG9uIHRoZSBtYXAgaXMgY2hhbmdlZCBkdWVcbiAgXHRcdC8vIHRvIGFkZGluZyBvciByZW1vdmluZyBhIGxheWVyLlxuICBcdFx0aWYgKG9sZFpvb21TcGFuICE9PSB0aGlzLl9nZXRab29tU3BhbigpKSB7XG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbWxldmVsc2NoYW5nZScpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm1heFpvb20gPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9sYXllcnNNYXhab29tICYmIHRoaXMuZ2V0Wm9vbSgpID4gdGhpcy5fbGF5ZXJzTWF4Wm9vbSkge1xuICBcdFx0XHR0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWF4Wm9vbSk7XG4gIFx0XHR9XG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm1pblpvb20gPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9sYXllcnNNaW5ab29tICYmIHRoaXMuZ2V0Wm9vbSgpIDwgdGhpcy5fbGF5ZXJzTWluWm9vbSkge1xuICBcdFx0XHR0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWluWm9vbSk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBMYXllckdyb3VwXHJcbiAgICogQGFrYSBMLkxheWVyR3JvdXBcclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJcclxuICAgKlxyXG4gICAqIFVzZWQgdG8gZ3JvdXAgc2V2ZXJhbCBsYXllcnMgYW5kIGhhbmRsZSB0aGVtIGFzIG9uZS4gSWYgeW91IGFkZCBpdCB0byB0aGUgbWFwLFxyXG4gICAqIGFueSBsYXllcnMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBncm91cCB3aWxsIGJlIGFkZGVkL3JlbW92ZWQgb24gdGhlIG1hcCBhc1xyXG4gICAqIHdlbGwuIEV4dGVuZHMgYExheWVyYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIEwubGF5ZXJHcm91cChbbWFya2VyMSwgbWFya2VyMl0pXHJcbiAgICogXHQuYWRkTGF5ZXIocG9seWxpbmUpXHJcbiAgICogXHQuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIExheWVyR3JvdXAgPSBMYXllci5leHRlbmQoe1xyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChsYXllcnMsIG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IHt9O1xyXG5cclxuICBcdFx0dmFyIGksIGxlbjtcclxuXHJcbiAgXHRcdGlmIChsYXllcnMpIHtcclxuICBcdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBsYXllcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuYWRkTGF5ZXIobGF5ZXJzW2ldKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBhZGRMYXllcihsYXllcjogTGF5ZXIpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBsYXllciB0byB0aGUgZ3JvdXAuXHJcbiAgXHRhZGRMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdHZhciBpZCA9IHRoaXMuZ2V0TGF5ZXJJZChsYXllcik7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnNbaWRdID0gbGF5ZXI7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLmFkZExheWVyKGxheWVyKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlTGF5ZXIobGF5ZXI6IExheWVyKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgZ2l2ZW4gbGF5ZXIgZnJvbSB0aGUgZ3JvdXAuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlTGF5ZXIoaWQ6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIGludGVybmFsIElEIGZyb20gdGhlIGdyb3VwLlxyXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHR2YXIgaWQgPSBsYXllciBpbiB0aGlzLl9sYXllcnMgPyBsYXllciA6IHRoaXMuZ2V0TGF5ZXJJZChsYXllcik7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwICYmIHRoaXMuX2xheWVyc1tpZF0pIHtcclxuICBcdFx0XHR0aGlzLl9tYXAucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2lkXSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRdO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaGFzTGF5ZXIobGF5ZXI6IExheWVyKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGxheWVyIGlzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgZ3JvdXAuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgaGFzTGF5ZXIoaWQ6IE51bWJlcik6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBpbnRlcm5hbCBJRCBpcyBjdXJyZW50bHkgYWRkZWQgdG8gdGhlIGdyb3VwLlxyXG4gIFx0aGFzTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAoIWxheWVyKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gIFx0XHR2YXIgbGF5ZXJJZCA9IHR5cGVvZiBsYXllciA9PT0gJ251bWJlcicgPyBsYXllciA6IHRoaXMuZ2V0TGF5ZXJJZChsYXllcik7XHJcbiAgXHRcdHJldHVybiBsYXllcklkIGluIHRoaXMuX2xheWVycztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjbGVhckxheWVycygpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmVzIGFsbCB0aGUgbGF5ZXJzIGZyb20gdGhlIGdyb3VwLlxyXG4gIFx0Y2xlYXJMYXllcnM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuZWFjaExheWVyKHRoaXMucmVtb3ZlTGF5ZXIsIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGludm9rZShtZXRob2ROYW1lOiBTdHJpbmcsIOKApik6IHRoaXNcclxuICBcdC8vIENhbGxzIGBtZXRob2ROYW1lYCBvbiBldmVyeSBsYXllciBjb250YWluZWQgaW4gdGhpcyBncm91cCwgcGFzc2luZyBhbnlcclxuICBcdC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gSGFzIG5vIGVmZmVjdCBpZiB0aGUgbGF5ZXJzIGNvbnRhaW5lZCBkbyBub3RcclxuICBcdC8vIGltcGxlbWVudCBgbWV0aG9kTmFtZWAuXHJcbiAgXHRpbnZva2U6IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XHJcbiAgXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcclxuICBcdFx0ICAgIGksIGxheWVyO1xyXG5cclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fbGF5ZXJzW2ldO1xyXG5cclxuICBcdFx0XHRpZiAobGF5ZXJbbWV0aG9kTmFtZV0pIHtcclxuICBcdFx0XHRcdGxheWVyW21ldGhvZE5hbWVdLmFwcGx5KGxheWVyLCBhcmdzKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLmVhY2hMYXllcihtYXAuYWRkTGF5ZXIsIG1hcCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKG1hcC5yZW1vdmVMYXllciwgbWFwKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBlYWNoTGF5ZXIoZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIFx0Ly8gSXRlcmF0ZXMgb3ZlciB0aGUgbGF5ZXJzIG9mIHRoZSBncm91cCwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIGNvbnRleHQgb2YgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLlxyXG4gIFx0Ly8gYGBganNcclxuICBcdC8vIGdyb3VwLmVhY2hMYXllcihmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdC8vIFx0bGF5ZXIuYmluZFBvcHVwKCdIZWxsbycpO1xyXG4gIFx0Ly8gfSk7XHJcbiAgXHQvLyBgYGBcclxuICBcdGVhY2hMYXllcjogZnVuY3Rpb24gKG1ldGhvZCwgY29udGV4dCkge1xyXG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdG1ldGhvZC5jYWxsKGNvbnRleHQsIHRoaXMuX2xheWVyc1tpXSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TGF5ZXIoaWQ6IE51bWJlcik6IExheWVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpbnRlcm5hbCBJRC5cclxuICBcdGdldExheWVyOiBmdW5jdGlvbiAoaWQpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2xheWVyc1tpZF07XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TGF5ZXJzKCk6IExheWVyW11cclxuICBcdC8vIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBsYXllcnMgYWRkZWQgdG8gdGhlIGdyb3VwLlxyXG4gIFx0Z2V0TGF5ZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBsYXllcnMgPSBbXTtcclxuICBcdFx0dGhpcy5lYWNoTGF5ZXIobGF5ZXJzLnB1c2gsIGxheWVycyk7XHJcbiAgXHRcdHJldHVybiBsYXllcnM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0WkluZGV4KHpJbmRleDogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2FsbHMgYHNldFpJbmRleGAgb24gZXZlcnkgbGF5ZXIgY29udGFpbmVkIGluIHRoaXMgZ3JvdXAsIHBhc3NpbmcgdGhlIHotaW5kZXguXHJcbiAgXHRzZXRaSW5kZXg6IGZ1bmN0aW9uICh6SW5kZXgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuaW52b2tlKCdzZXRaSW5kZXgnLCB6SW5kZXgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldExheWVySWQobGF5ZXI6IExheWVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnRlcm5hbCBJRCBmb3IgYSBsYXllclxyXG4gIFx0Z2V0TGF5ZXJJZDogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdHJldHVybiBzdGFtcChsYXllcik7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAZmFjdG9yeSBMLmxheWVyR3JvdXAobGF5ZXJzPzogTGF5ZXJbXSwgb3B0aW9ucz86IE9iamVjdClcclxuICAvLyBDcmVhdGUgYSBsYXllciBncm91cCwgb3B0aW9uYWxseSBnaXZlbiBhbiBpbml0aWFsIHNldCBvZiBsYXllcnMgYW5kIGFuIGBvcHRpb25zYCBvYmplY3QuXHJcbiAgdmFyIGxheWVyR3JvdXAgPSBmdW5jdGlvbiAobGF5ZXJzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExheWVyR3JvdXAobGF5ZXJzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIEZlYXR1cmVHcm91cFxyXG4gICAqIEBha2EgTC5GZWF0dXJlR3JvdXBcclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJHcm91cFxyXG4gICAqXHJcbiAgICogRXh0ZW5kZWQgYExheWVyR3JvdXBgIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIGRvIHRoZSBzYW1lIHRoaW5nIHRvIGFsbCBpdHMgbWVtYmVyIGxheWVyczpcclxuICAgKiAgKiBbYGJpbmRQb3B1cGBdKCNsYXllci1iaW5kcG9wdXApIGJpbmRzIGEgcG9wdXAgdG8gYWxsIG9mIHRoZSBsYXllcnMgYXQgb25jZSAobGlrZXdpc2Ugd2l0aCBbYGJpbmRUb29sdGlwYF0oI2xheWVyLWJpbmR0b29sdGlwKSlcclxuICAgKiAgKiBFdmVudHMgYXJlIHByb3BhZ2F0ZWQgdG8gdGhlIGBGZWF0dXJlR3JvdXBgLCBzbyBpZiB0aGUgZ3JvdXAgaGFzIGFuIGV2ZW50XHJcbiAgICogaGFuZGxlciwgaXQgd2lsbCBoYW5kbGUgZXZlbnRzIGZyb20gYW55IG9mIHRoZSBsYXllcnMuIFRoaXMgaW5jbHVkZXMgbW91c2UgZXZlbnRzXHJcbiAgICogYW5kIGN1c3RvbSBldmVudHMuXHJcbiAgICogICogSGFzIGBsYXllcmFkZGAgYW5kIGBsYXllcnJlbW92ZWAgZXZlbnRzXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBMLmZlYXR1cmVHcm91cChbbWFya2VyMSwgbWFya2VyMiwgcG9seWxpbmVdKVxyXG4gICAqIFx0LmJpbmRQb3B1cCgnSGVsbG8gd29ybGQhJylcclxuICAgKiBcdC5vbignY2xpY2snLCBmdW5jdGlvbigpIHsgYWxlcnQoJ0NsaWNrZWQgb24gYSBtZW1iZXIgb2YgdGhlIGdyb3VwIScpOyB9KVxyXG4gICAqIFx0LmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBGZWF0dXJlR3JvdXAgPSBMYXllckdyb3VwLmV4dGVuZCh7XHJcblxyXG4gIFx0YWRkTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAodGhpcy5oYXNMYXllcihsYXllcikpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0bGF5ZXIuYWRkRXZlbnRQYXJlbnQodGhpcyk7XHJcblxyXG4gIFx0XHRMYXllckdyb3VwLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsIGxheWVyKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBsYXllcmFkZDogTGF5ZXJFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgbGF5ZXIgaXMgYWRkZWQgdG8gdGhpcyBgRmVhdHVyZUdyb3VwYFxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdsYXllcmFkZCcsIHtsYXllcjogbGF5ZXJ9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAoIXRoaXMuaGFzTGF5ZXIobGF5ZXIpKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGxheWVyIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVyXTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0bGF5ZXIucmVtb3ZlRXZlbnRQYXJlbnQodGhpcyk7XHJcblxyXG4gIFx0XHRMYXllckdyb3VwLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsIGxheWVyKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBsYXllcnJlbW92ZTogTGF5ZXJFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgbGF5ZXIgaXMgcmVtb3ZlZCBmcm9tIHRoaXMgYEZlYXR1cmVHcm91cGBcclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbGF5ZXJyZW1vdmUnLCB7bGF5ZXI6IGxheWVyfSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0U3R5bGUoc3R5bGU6IFBhdGggb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGdpdmVuIHBhdGggb3B0aW9ucyB0byBlYWNoIGxheWVyIG9mIHRoZSBncm91cCB0aGF0IGhhcyBhIGBzZXRTdHlsZWAgbWV0aG9kLlxyXG4gIFx0c2V0U3R5bGU6IGZ1bmN0aW9uIChzdHlsZSkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5pbnZva2UoJ3NldFN0eWxlJywgc3R5bGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9Gcm9udCgpOiB0aGlzXHJcbiAgXHQvLyBCcmluZ3MgdGhlIGxheWVyIGdyb3VwIHRvIHRoZSB0b3Agb2YgYWxsIG90aGVyIGxheWVyc1xyXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmludm9rZSgnYnJpbmdUb0Zyb250Jyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2soKTogdGhpc1xyXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciBncm91cCB0byB0aGUgYmFjayBvZiBhbGwgb3RoZXIgbGF5ZXJzXHJcbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5pbnZva2UoJ2JyaW5nVG9CYWNrJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm91bmRzKCk6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgTGF0TG5nQm91bmRzIG9mIHRoZSBGZWF0dXJlIEdyb3VwIChjcmVhdGVkIGZyb20gYm91bmRzIGFuZCBjb29yZGluYXRlcyBvZiBpdHMgY2hpbGRyZW4pLlxyXG4gIFx0Z2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBib3VuZHMgPSBuZXcgTGF0TG5nQm91bmRzKCk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9sYXllcnMpIHtcclxuICBcdFx0XHR2YXIgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xyXG4gIFx0XHRcdGJvdW5kcy5leHRlbmQobGF5ZXIuZ2V0Qm91bmRzID8gbGF5ZXIuZ2V0Qm91bmRzKCkgOiBsYXllci5nZXRMYXRMbmcoKSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIGJvdW5kcztcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5mZWF0dXJlR3JvdXAobGF5ZXJzPzogTGF5ZXJbXSwgb3B0aW9ucz86IE9iamVjdClcclxuICAvLyBDcmVhdGUgYSBmZWF0dXJlIGdyb3VwLCBvcHRpb25hbGx5IGdpdmVuIGFuIGluaXRpYWwgc2V0IG9mIGxheWVycyBhbmQgYW4gYG9wdGlvbnNgIG9iamVjdC5cclxuICB2YXIgZmVhdHVyZUdyb3VwID0gZnVuY3Rpb24gKGxheWVycywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBGZWF0dXJlR3JvdXAobGF5ZXJzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIEljb25cclxuICAgKiBAYWthIEwuSWNvblxyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhbiBpY29uIHRvIHByb3ZpZGUgd2hlbiBjcmVhdGluZyBhIG1hcmtlci5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBteUljb24gPSBMLmljb24oe1xyXG4gICAqICAgICBpY29uVXJsOiAnbXktaWNvbi5wbmcnLFxyXG4gICAqICAgICBpY29uUmV0aW5hVXJsOiAnbXktaWNvbkAyeC5wbmcnLFxyXG4gICAqICAgICBpY29uU2l6ZTogWzM4LCA5NV0sXHJcbiAgICogICAgIGljb25BbmNob3I6IFsyMiwgOTRdLFxyXG4gICAqICAgICBwb3B1cEFuY2hvcjogWy0zLCAtNzZdLFxyXG4gICAqICAgICBzaGFkb3dVcmw6ICdteS1pY29uLXNoYWRvdy5wbmcnLFxyXG4gICAqICAgICBzaGFkb3dSZXRpbmFVcmw6ICdteS1pY29uLXNoYWRvd0AyeC5wbmcnLFxyXG4gICAqICAgICBzaGFkb3dTaXplOiBbNjgsIDk1XSxcclxuICAgKiAgICAgc2hhZG93QW5jaG9yOiBbMjIsIDk0XVxyXG4gICAqIH0pO1xyXG4gICAqXHJcbiAgICogTC5tYXJrZXIoWzUwLjUwNSwgMzAuNTddLCB7aWNvbjogbXlJY29ufSkuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIGBMLkljb24uRGVmYXVsdGAgZXh0ZW5kcyBgTC5JY29uYCBhbmQgaXMgdGhlIGJsdWUgaWNvbiBMZWFmbGV0IHVzZXMgZm9yIG1hcmtlcnMgYnkgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqL1xyXG5cclxuICB2YXIgSWNvbiA9IENsYXNzLmV4dGVuZCh7XHJcblxyXG4gIFx0LyogQHNlY3Rpb25cclxuICBcdCAqIEBha2EgSWNvbiBvcHRpb25zXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBpY29uVXJsOiBTdHJpbmcgPSBudWxsXHJcbiAgXHQgKiAqKihyZXF1aXJlZCkqKiBUaGUgVVJMIHRvIHRoZSBpY29uIGltYWdlIChhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB5b3VyIHNjcmlwdCBwYXRoKS5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGljb25SZXRpbmFVcmw6IFN0cmluZyA9IG51bGxcclxuICBcdCAqIFRoZSBVUkwgdG8gYSByZXRpbmEgc2l6ZWQgdmVyc2lvbiBvZiB0aGUgaWNvbiBpbWFnZSAoYWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8geW91clxyXG4gIFx0ICogc2NyaXB0IHBhdGgpLiBVc2VkIGZvciBSZXRpbmEgc2NyZWVuIGRldmljZXMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBpY29uU2l6ZTogUG9pbnQgPSBudWxsXHJcbiAgXHQgKiBTaXplIG9mIHRoZSBpY29uIGltYWdlIGluIHBpeGVscy5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGljb25BbmNob3I6IFBvaW50ID0gbnVsbFxyXG4gIFx0ICogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBcInRpcFwiIG9mIHRoZSBpY29uIChyZWxhdGl2ZSB0byBpdHMgdG9wIGxlZnQgY29ybmVyKS4gVGhlIGljb25cclxuICBcdCAqIHdpbGwgYmUgYWxpZ25lZCBzbyB0aGF0IHRoaXMgcG9pbnQgaXMgYXQgdGhlIG1hcmtlcidzIGdlb2dyYXBoaWNhbCBsb2NhdGlvbi4gQ2VudGVyZWRcclxuICBcdCAqIGJ5IGRlZmF1bHQgaWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGFsc28gY2FuIGJlIHNldCBpbiBDU1Mgd2l0aCBuZWdhdGl2ZSBtYXJnaW5zLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gcG9wdXBBbmNob3I6IFBvaW50ID0gWzAsIDBdXHJcbiAgXHQgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGZyb20gd2hpY2ggcG9wdXBzIHdpbGwgXCJvcGVuXCIsIHJlbGF0aXZlIHRvIHRoZSBpY29uIGFuY2hvci5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHRvb2x0aXBBbmNob3I6IFBvaW50ID0gWzAsIDBdXHJcbiAgXHQgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGZyb20gd2hpY2ggdG9vbHRpcHMgd2lsbCBcIm9wZW5cIiwgcmVsYXRpdmUgdG8gdGhlIGljb24gYW5jaG9yLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc2hhZG93VXJsOiBTdHJpbmcgPSBudWxsXHJcbiAgXHQgKiBUaGUgVVJMIHRvIHRoZSBpY29uIHNoYWRvdyBpbWFnZS4gSWYgbm90IHNwZWNpZmllZCwgbm8gc2hhZG93IGltYWdlIHdpbGwgYmUgY3JlYXRlZC5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHNoYWRvd1JldGluYVVybDogU3RyaW5nID0gbnVsbFxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc2hhZG93U2l6ZTogUG9pbnQgPSBudWxsXHJcbiAgXHQgKiBTaXplIG9mIHRoZSBzaGFkb3cgaW1hZ2UgaW4gcGl4ZWxzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc2hhZG93QW5jaG9yOiBQb2ludCA9IG51bGxcclxuICBcdCAqIFRoZSBjb29yZGluYXRlcyBvZiB0aGUgXCJ0aXBcIiBvZiB0aGUgc2hhZG93IChyZWxhdGl2ZSB0byBpdHMgdG9wIGxlZnQgY29ybmVyKSAodGhlIHNhbWVcclxuICBcdCAqIGFzIGljb25BbmNob3IgaWYgbm90IHNwZWNpZmllZCkuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9ICcnXHJcbiAgXHQgKiBBIGN1c3RvbSBjbGFzcyBuYW1lIHRvIGFzc2lnbiB0byBib3RoIGljb24gYW5kIHNoYWRvdyBpbWFnZXMuIEVtcHR5IGJ5IGRlZmF1bHQuXHJcbiAgXHQgKi9cclxuXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdHBvcHVwQW5jaG9yOiBbMCwgMF0sXHJcbiAgXHRcdHRvb2x0aXBBbmNob3I6IFswLCAwXVxyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZUljb24ob2xkSWNvbj86IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICBcdC8vIENhbGxlZCBpbnRlcm5hbGx5IHdoZW4gdGhlIGljb24gaGFzIHRvIGJlIHNob3duLCByZXR1cm5zIGEgYDxpbWc+YCBIVE1MIGVsZW1lbnRcclxuICBcdC8vIHN0eWxlZCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMuXHJcbiAgXHRjcmVhdGVJY29uOiBmdW5jdGlvbiAob2xkSWNvbikge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbignaWNvbicsIG9sZEljb24pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZVNoYWRvdyhvbGRJY29uPzogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxyXG4gIFx0Ly8gQXMgYGNyZWF0ZUljb25gLCBidXQgZm9yIHRoZSBzaGFkb3cgYmVuZWF0aCBpdC5cclxuICBcdGNyZWF0ZVNoYWRvdzogZnVuY3Rpb24gKG9sZEljb24pIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oJ3NoYWRvdycsIG9sZEljb24pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY3JlYXRlSWNvbjogZnVuY3Rpb24gKG5hbWUsIG9sZEljb24pIHtcclxuICBcdFx0dmFyIHNyYyA9IHRoaXMuX2dldEljb25VcmwobmFtZSk7XHJcblxyXG4gIFx0XHRpZiAoIXNyYykge1xyXG4gIFx0XHRcdGlmIChuYW1lID09PSAnaWNvbicpIHtcclxuICBcdFx0XHRcdHRocm93IG5ldyBFcnJvcignaWNvblVybCBub3Qgc2V0IGluIEljb24gb3B0aW9ucyAoc2VlIHRoZSBkb2NzKS4nKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBpbWcgPSB0aGlzLl9jcmVhdGVJbWcoc3JjLCBvbGRJY29uICYmIG9sZEljb24udGFnTmFtZSA9PT0gJ0lNRycgPyBvbGRJY29uIDogbnVsbCk7XHJcbiAgXHRcdHRoaXMuX3NldEljb25TdHlsZXMoaW1nLCBuYW1lKTtcclxuXHJcbiAgXHRcdHJldHVybiBpbWc7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zZXRJY29uU3R5bGVzOiBmdW5jdGlvbiAoaW1nLCBuYW1lKSB7XHJcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gIFx0XHR2YXIgc2l6ZU9wdGlvbiA9IG9wdGlvbnNbbmFtZSArICdTaXplJ107XHJcblxyXG4gIFx0XHRpZiAodHlwZW9mIHNpemVPcHRpb24gPT09ICdudW1iZXInKSB7XHJcbiAgXHRcdFx0c2l6ZU9wdGlvbiA9IFtzaXplT3B0aW9uLCBzaXplT3B0aW9uXTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHNpemUgPSB0b1BvaW50KHNpemVPcHRpb24pLFxyXG4gIFx0XHQgICAgYW5jaG9yID0gdG9Qb2ludChuYW1lID09PSAnc2hhZG93JyAmJiBvcHRpb25zLnNoYWRvd0FuY2hvciB8fCBvcHRpb25zLmljb25BbmNob3IgfHxcclxuICBcdFx0ICAgICAgICAgICAgc2l6ZSAmJiBzaXplLmRpdmlkZUJ5KDIsIHRydWUpKTtcclxuXHJcbiAgXHRcdGltZy5jbGFzc05hbWUgPSAnbGVhZmxldC1tYXJrZXItJyArIG5hbWUgKyAnICcgKyAob3B0aW9ucy5jbGFzc05hbWUgfHwgJycpO1xyXG5cclxuICBcdFx0aWYgKGFuY2hvcikge1xyXG4gIFx0XHRcdGltZy5zdHlsZS5tYXJnaW5MZWZ0ID0gKC1hbmNob3IueCkgKyAncHgnO1xyXG4gIFx0XHRcdGltZy5zdHlsZS5tYXJnaW5Ub3AgID0gKC1hbmNob3IueSkgKyAncHgnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoc2l6ZSkge1xyXG4gIFx0XHRcdGltZy5zdHlsZS53aWR0aCAgPSBzaXplLnggKyAncHgnO1xyXG4gIFx0XHRcdGltZy5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jcmVhdGVJbWc6IGZ1bmN0aW9uIChzcmMsIGVsKSB7XHJcbiAgXHRcdGVsID0gZWwgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgXHRcdGVsLnNyYyA9IHNyYztcclxuICBcdFx0cmV0dXJuIGVsO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0SWNvblVybDogZnVuY3Rpb24gKG5hbWUpIHtcclxuICBcdFx0cmV0dXJuIHJldGluYSAmJiB0aGlzLm9wdGlvbnNbbmFtZSArICdSZXRpbmFVcmwnXSB8fCB0aGlzLm9wdGlvbnNbbmFtZSArICdVcmwnXTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwuaWNvbihvcHRpb25zOiBJY29uIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhbiBpY29uIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXHJcbiAgZnVuY3Rpb24gaWNvbihvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IEljb24ob3B0aW9ucyk7XHJcbiAgfVxuXG4gIC8qXG4gICAqIEBtaW5pY2xhc3MgSWNvbi5EZWZhdWx0IChJY29uKVxuICAgKiBAYWthIEwuSWNvbi5EZWZhdWx0XG4gICAqIEBzZWN0aW9uXG4gICAqXG4gICAqIEEgdHJpdmlhbCBzdWJjbGFzcyBvZiBgSWNvbmAsIHJlcHJlc2VudHMgdGhlIGljb24gdG8gdXNlIGluIGBNYXJrZXJgcyB3aGVuXG4gICAqIG5vIGljb24gaXMgc3BlY2lmaWVkLiBQb2ludHMgdG8gdGhlIGJsdWUgbWFya2VyIGltYWdlIGRpc3RyaWJ1dGVkIHdpdGggTGVhZmxldFxuICAgKiByZWxlYXNlcy5cbiAgICpcbiAgICogSW4gb3JkZXIgdG8gY3VzdG9taXplIHRoZSBkZWZhdWx0IGljb24sIGp1c3QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIG9mIGBMLkljb24uRGVmYXVsdC5wcm90b3R5cGUub3B0aW9uc2BcbiAgICogKHdoaWNoIGlzIGEgc2V0IG9mIGBJY29uIG9wdGlvbnNgKS5cbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gX2NvbXBsZXRlbHlfIHJlcGxhY2UgdGhlIGRlZmF1bHQgaWNvbiwgb3ZlcnJpZGUgdGhlXG4gICAqIGBMLk1hcmtlci5wcm90b3R5cGUub3B0aW9ucy5pY29uYCB3aXRoIHlvdXIgb3duIGljb24gaW5zdGVhZC5cbiAgICovXG5cbiAgdmFyIEljb25EZWZhdWx0ID0gSWNvbi5leHRlbmQoe1xuXG4gIFx0b3B0aW9uczoge1xuICBcdFx0aWNvblVybDogICAgICAgJ21hcmtlci1pY29uLnBuZycsXG4gIFx0XHRpY29uUmV0aW5hVXJsOiAnbWFya2VyLWljb24tMngucG5nJyxcbiAgXHRcdHNoYWRvd1VybDogICAgICdtYXJrZXItc2hhZG93LnBuZycsXG4gIFx0XHRpY29uU2l6ZTogICAgWzI1LCA0MV0sXG4gIFx0XHRpY29uQW5jaG9yOiAgWzEyLCA0MV0sXG4gIFx0XHRwb3B1cEFuY2hvcjogWzEsIC0zNF0sXG4gIFx0XHR0b29sdGlwQW5jaG9yOiBbMTYsIC0yOF0sXG4gIFx0XHRzaGFkb3dTaXplOiAgWzQxLCA0MV1cbiAgXHR9LFxuXG4gIFx0X2dldEljb25Vcmw6IGZ1bmN0aW9uIChuYW1lKSB7XG4gIFx0XHRpZiAoIUljb25EZWZhdWx0LmltYWdlUGF0aCkge1x0Ly8gRGVwcmVjYXRlZCwgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgb25seVxuICBcdFx0XHRJY29uRGVmYXVsdC5pbWFnZVBhdGggPSB0aGlzLl9kZXRlY3RJY29uUGF0aCgpO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBAb3B0aW9uIGltYWdlUGF0aDogU3RyaW5nXG4gIFx0XHQvLyBgSWNvbi5EZWZhdWx0YCB3aWxsIHRyeSB0byBhdXRvLWRldGVjdCB0aGUgbG9jYXRpb24gb2YgdGhlXG4gIFx0XHQvLyBibHVlIGljb24gaW1hZ2VzLiBJZiB5b3UgYXJlIHBsYWNpbmcgdGhlc2UgaW1hZ2VzIGluIGEgbm9uLXN0YW5kYXJkXG4gIFx0XHQvLyB3YXksIHNldCB0aGlzIG9wdGlvbiB0byBwb2ludCB0byB0aGUgcmlnaHQgcGF0aC5cbiAgXHRcdHJldHVybiAodGhpcy5vcHRpb25zLmltYWdlUGF0aCB8fCBJY29uRGVmYXVsdC5pbWFnZVBhdGgpICsgSWNvbi5wcm90b3R5cGUuX2dldEljb25VcmwuY2FsbCh0aGlzLCBuYW1lKTtcbiAgXHR9LFxuXG4gIFx0X2RldGVjdEljb25QYXRoOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZWwgPSBjcmVhdGUkMSgnZGl2JywgICdsZWFmbGV0LWRlZmF1bHQtaWNvbi1wYXRoJywgZG9jdW1lbnQuYm9keSk7XG4gIFx0XHR2YXIgcGF0aCA9IGdldFN0eWxlKGVsLCAnYmFja2dyb3VuZC1pbWFnZScpIHx8XG4gIFx0XHQgICAgICAgICAgIGdldFN0eWxlKGVsLCAnYmFja2dyb3VuZEltYWdlJyk7XHQvLyBJRThcblxuICBcdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG5cbiAgXHRcdGlmIChwYXRoID09PSBudWxsIHx8IHBhdGguaW5kZXhPZigndXJsJykgIT09IDApIHtcbiAgXHRcdFx0cGF0aCA9ICcnO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0cGF0aCA9IHBhdGgucmVwbGFjZSgvXnVybFxcKFtcIiddPy8sICcnKS5yZXBsYWNlKC9tYXJrZXItaWNvblxcLnBuZ1tcIiddP1xcKSQvLCAnJyk7XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiBwYXRoO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLk1hcmtlckRyYWcgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IEwuTWFya2VyIHRvIG1ha2UgdGhlIG1hcmtlcnMgZHJhZ2dhYmxlLlxuICAgKi9cblxuXG4gIC8qIEBuYW1lc3BhY2UgTWFya2VyXG4gICAqIEBzZWN0aW9uIEludGVyYWN0aW9uIGhhbmRsZXJzXG4gICAqXG4gICAqIEludGVyYWN0aW9uIGhhbmRsZXJzIGFyZSBwcm9wZXJ0aWVzIG9mIGEgbWFya2VyIGluc3RhbmNlIHRoYXQgYWxsb3cgeW91IHRvIGNvbnRyb2wgaW50ZXJhY3Rpb24gYmVoYXZpb3IgaW4gcnVudGltZSwgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNlcnRhaW4gZmVhdHVyZXMgc3VjaCBhcyBkcmFnZ2luZyAoc2VlIGBIYW5kbGVyYCBtZXRob2RzKS4gRXhhbXBsZTpcbiAgICpcbiAgICogYGBganNcbiAgICogbWFya2VyLmRyYWdnaW5nLmRpc2FibGUoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwcm9wZXJ0eSBkcmFnZ2luZzogSGFuZGxlclxuICAgKiBNYXJrZXIgZHJhZ2dpbmcgaGFuZGxlciAoYnkgYm90aCBtb3VzZSBhbmQgdG91Y2gpLiBPbmx5IHZhbGlkIHdoZW4gdGhlIG1hcmtlciBpcyBvbiB0aGUgbWFwIChPdGhlcndpc2Ugc2V0IFtgbWFya2VyLm9wdGlvbnMuZHJhZ2dhYmxlYF0oI21hcmtlci1kcmFnZ2FibGUpKS5cbiAgICovXG5cbiAgdmFyIE1hcmtlckRyYWcgPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG1hcmtlcikge1xuICBcdFx0dGhpcy5fbWFya2VyID0gbWFya2VyO1xuICBcdH0sXG5cbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGljb24gPSB0aGlzLl9tYXJrZXIuX2ljb247XG5cbiAgXHRcdGlmICghdGhpcy5fZHJhZ2dhYmxlKSB7XG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZSA9IG5ldyBEcmFnZ2FibGUoaWNvbiwgaWNvbiwgdHJ1ZSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5vbih7XG4gIFx0XHRcdGRyYWdzdGFydDogdGhpcy5fb25EcmFnU3RhcnQsXG4gIFx0XHRcdHByZWRyYWc6IHRoaXMuX29uUHJlRHJhZyxcbiAgXHRcdFx0ZHJhZzogdGhpcy5fb25EcmFnLFxuICBcdFx0XHRkcmFnZW5kOiB0aGlzLl9vbkRyYWdFbmRcbiAgXHRcdH0sIHRoaXMpLmVuYWJsZSgpO1xuXG4gIFx0XHRhZGRDbGFzcyhpY29uLCAnbGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlJyk7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUub2ZmKHtcbiAgXHRcdFx0ZHJhZ3N0YXJ0OiB0aGlzLl9vbkRyYWdTdGFydCxcbiAgXHRcdFx0cHJlZHJhZzogdGhpcy5fb25QcmVEcmFnLFxuICBcdFx0XHRkcmFnOiB0aGlzLl9vbkRyYWcsXG4gIFx0XHRcdGRyYWdlbmQ6IHRoaXMuX29uRHJhZ0VuZFxuICBcdFx0fSwgdGhpcykuZGlzYWJsZSgpO1xuXG4gIFx0XHRpZiAodGhpcy5fbWFya2VyLl9pY29uKSB7XG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcmtlci5faWNvbiwgJ2xlYWZsZXQtbWFya2VyLWRyYWdnYWJsZScpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRtb3ZlZDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLl9kcmFnZ2FibGUuX21vdmVkO1xuICBcdH0sXG5cbiAgXHRfYWRqdXN0UGFuOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcmtlciA9IHRoaXMuX21hcmtlcixcbiAgXHRcdCAgICBtYXAgPSBtYXJrZXIuX21hcCxcbiAgXHRcdCAgICBzcGVlZCA9IHRoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW5TcGVlZCxcbiAgXHRcdCAgICBwYWRkaW5nID0gdGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcsXG4gIFx0XHQgICAgaWNvblBvcyA9IGdldFBvc2l0aW9uKG1hcmtlci5faWNvbiksXG4gIFx0XHQgICAgYm91bmRzID0gbWFwLmdldFBpeGVsQm91bmRzKCksXG4gIFx0XHQgICAgb3JpZ2luID0gbWFwLmdldFBpeGVsT3JpZ2luKCk7XG5cbiAgXHRcdHZhciBwYW5Cb3VuZHMgPSB0b0JvdW5kcyhcbiAgXHRcdFx0Ym91bmRzLm1pbi5fc3VidHJhY3Qob3JpZ2luKS5hZGQocGFkZGluZyksXG4gIFx0XHRcdGJvdW5kcy5tYXguX3N1YnRyYWN0KG9yaWdpbikuc3VidHJhY3QocGFkZGluZylcbiAgXHRcdCk7XG5cbiAgXHRcdGlmICghcGFuQm91bmRzLmNvbnRhaW5zKGljb25Qb3MpKSB7XG4gIFx0XHRcdC8vIENvbXB1dGUgaW5jcmVtZW50YWwgbW92ZW1lbnRcbiAgXHRcdFx0dmFyIG1vdmVtZW50ID0gdG9Qb2ludChcbiAgXHRcdFx0XHQoTWF0aC5tYXgocGFuQm91bmRzLm1heC54LCBpY29uUG9zLngpIC0gcGFuQm91bmRzLm1heC54KSAvIChib3VuZHMubWF4LnggLSBwYW5Cb3VuZHMubWF4LngpIC1cbiAgXHRcdFx0XHQoTWF0aC5taW4ocGFuQm91bmRzLm1pbi54LCBpY29uUG9zLngpIC0gcGFuQm91bmRzLm1pbi54KSAvIChib3VuZHMubWluLnggLSBwYW5Cb3VuZHMubWluLngpLFxuXG4gIFx0XHRcdFx0KE1hdGgubWF4KHBhbkJvdW5kcy5tYXgueSwgaWNvblBvcy55KSAtIHBhbkJvdW5kcy5tYXgueSkgLyAoYm91bmRzLm1heC55IC0gcGFuQm91bmRzLm1heC55KSAtXG4gIFx0XHRcdFx0KE1hdGgubWluKHBhbkJvdW5kcy5taW4ueSwgaWNvblBvcy55KSAtIHBhbkJvdW5kcy5taW4ueSkgLyAoYm91bmRzLm1pbi55IC0gcGFuQm91bmRzLm1pbi55KVxuICBcdFx0XHQpLm11bHRpcGx5Qnkoc3BlZWQpO1xuXG4gIFx0XHRcdG1hcC5wYW5CeShtb3ZlbWVudCwge2FuaW1hdGU6IGZhbHNlfSk7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuX2FkZChtb3ZlbWVudCk7XG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZChtb3ZlbWVudCk7XG5cbiAgXHRcdFx0c2V0UG9zaXRpb24obWFya2VyLl9pY29uLCB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcyk7XG4gIFx0XHRcdHRoaXMuX29uRHJhZyhlKTtcblxuICBcdFx0XHR0aGlzLl9wYW5SZXF1ZXN0ID0gcmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLCBlKSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gQHNlY3Rpb24gRHJhZ2dpbmcgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgZHJhZ3N0YXJ0OiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlIG1hcmtlci5cblxuICBcdFx0Ly8gQGV2ZW50IG1vdmVzdGFydDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcmtlciBzdGFydHMgbW92aW5nIChiZWNhdXNlIG9mIGRyYWdnaW5nKS5cblxuICBcdFx0dGhpcy5fb2xkTGF0TG5nID0gdGhpcy5fbWFya2VyLmdldExhdExuZygpO1xuXG4gIFx0XHQvLyBXaGVuIHVzaW5nIEVTNiBpbXBvcnRzIGl0IGNvdWxkIG5vdCBiZSBzZXQgd2hlbiBgUG9wdXBgIHdhcyBub3QgaW1wb3J0ZWQgYXMgd2VsbFxuICBcdFx0dGhpcy5fbWFya2VyLmNsb3NlUG9wdXAgJiYgdGhpcy5fbWFya2VyLmNsb3NlUG9wdXAoKTtcblxuICBcdFx0dGhpcy5fbWFya2VyXG4gIFx0XHRcdC5maXJlKCdtb3Zlc3RhcnQnKVxuICBcdFx0XHQuZmlyZSgnZHJhZ3N0YXJ0Jyk7XG4gIFx0fSxcblxuICBcdF9vblByZURyYWc6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1Bhbikge1xuICBcdFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fcGFuUmVxdWVzdCk7XG4gIFx0XHRcdHRoaXMuX3BhblJlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsIGUpKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X29uRHJhZzogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXJrZXIgPSB0aGlzLl9tYXJrZXIsXG4gIFx0XHQgICAgc2hhZG93ID0gbWFya2VyLl9zaGFkb3csXG4gIFx0XHQgICAgaWNvblBvcyA9IGdldFBvc2l0aW9uKG1hcmtlci5faWNvbiksXG4gIFx0XHQgICAgbGF0bG5nID0gbWFya2VyLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGljb25Qb3MpO1xuXG4gIFx0XHQvLyB1cGRhdGUgc2hhZG93IHBvc2l0aW9uXG4gIFx0XHRpZiAoc2hhZG93KSB7XG4gIFx0XHRcdHNldFBvc2l0aW9uKHNoYWRvdywgaWNvblBvcyk7XG4gIFx0XHR9XG5cbiAgXHRcdG1hcmtlci5fbGF0bG5nID0gbGF0bG5nO1xuICBcdFx0ZS5sYXRsbmcgPSBsYXRsbmc7XG4gIFx0XHRlLm9sZExhdExuZyA9IHRoaXMuX29sZExhdExuZztcblxuICBcdFx0Ly8gQGV2ZW50IGRyYWc6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCByZXBlYXRlZGx5IHdoaWxlIHRoZSB1c2VyIGRyYWdzIHRoZSBtYXJrZXIuXG4gIFx0XHRtYXJrZXJcbiAgXHRcdCAgICAuZmlyZSgnbW92ZScsIGUpXG4gIFx0XHQgICAgLmZpcmUoJ2RyYWcnLCBlKTtcbiAgXHR9LFxuXG4gIFx0X29uRHJhZ0VuZDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdC8vIEBldmVudCBkcmFnZW5kOiBEcmFnRW5kRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgc3RvcHMgZHJhZ2dpbmcgdGhlIG1hcmtlci5cblxuICBcdFx0IGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9wYW5SZXF1ZXN0KTtcblxuICBcdFx0Ly8gQGV2ZW50IG1vdmVlbmQ6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXJrZXIgc3RvcHMgbW92aW5nIChiZWNhdXNlIG9mIGRyYWdnaW5nKS5cbiAgXHRcdGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmc7XG4gIFx0XHR0aGlzLl9tYXJrZXJcbiAgXHRcdCAgICAuZmlyZSgnbW92ZWVuZCcpXG4gIFx0XHQgICAgLmZpcmUoJ2RyYWdlbmQnLCBlKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIE1hcmtlclxyXG4gICAqIEBpbmhlcml0cyBJbnRlcmFjdGl2ZSBsYXllclxyXG4gICAqIEBha2EgTC5NYXJrZXJcclxuICAgKiBMLk1hcmtlciBpcyB1c2VkIHRvIGRpc3BsYXkgY2xpY2thYmxlL2RyYWdnYWJsZSBpY29ucyBvbiB0aGUgbWFwLiBFeHRlbmRzIGBMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBMLm1hcmtlcihbNTAuNSwgMzAuNV0pLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBNYXJrZXIgPSBMYXllci5leHRlbmQoe1xyXG5cclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIE1hcmtlciBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gaWNvbjogSWNvbiA9ICpcclxuICBcdFx0Ly8gSWNvbiBpbnN0YW5jZSB0byB1c2UgZm9yIHJlbmRlcmluZyB0aGUgbWFya2VyLlxyXG4gIFx0XHQvLyBTZWUgW0ljb24gZG9jdW1lbnRhdGlvbl0oI0wuSWNvbikgZm9yIGRldGFpbHMgb24gaG93IHRvIGN1c3RvbWl6ZSB0aGUgbWFya2VyIGljb24uXHJcbiAgXHRcdC8vIElmIG5vdCBzcGVjaWZpZWQsIGEgY29tbW9uIGluc3RhbmNlIG9mIGBMLkljb24uRGVmYXVsdGAgaXMgdXNlZC5cclxuICBcdFx0aWNvbjogbmV3IEljb25EZWZhdWx0KCksXHJcblxyXG4gIFx0XHQvLyBPcHRpb24gaW5oZXJpdGVkIGZyb20gXCJJbnRlcmFjdGl2ZSBsYXllclwiIGFic3RyYWN0IGNsYXNzXHJcbiAgXHRcdGludGVyYWN0aXZlOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBrZXlib2FyZDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFya2VyIGNhbiBiZSB0YWJiZWQgdG8gd2l0aCBhIGtleWJvYXJkIGFuZCBjbGlja2VkIGJ5IHByZXNzaW5nIGVudGVyLlxyXG4gIFx0XHRrZXlib2FyZDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdGl0bGU6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIFRleHQgZm9yIHRoZSBicm93c2VyIHRvb2x0aXAgdGhhdCBhcHBlYXIgb24gbWFya2VyIGhvdmVyIChubyB0b29sdGlwIGJ5IGRlZmF1bHQpLlxyXG4gIFx0XHR0aXRsZTogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGFsdDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVGV4dCBmb3IgdGhlIGBhbHRgIGF0dHJpYnV0ZSBvZiB0aGUgaWNvbiBpbWFnZSAodXNlZnVsIGZvciBhY2Nlc3NpYmlsaXR5KS5cclxuICBcdFx0YWx0OiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gekluZGV4T2Zmc2V0OiBOdW1iZXIgPSAwXHJcbiAgXHRcdC8vIEJ5IGRlZmF1bHQsIG1hcmtlciBpbWFnZXMgekluZGV4IGlzIHNldCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGl0cyBsYXRpdHVkZS4gVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHB1dCB0aGUgbWFya2VyIG9uIHRvcCBvZiBhbGwgb3RoZXJzIChvciBiZWxvdyksIHNwZWNpZnlpbmcgYSBoaWdoIHZhbHVlIGxpa2UgYDEwMDBgIChvciBoaWdoIG5lZ2F0aXZlIHZhbHVlLCByZXNwZWN0aXZlbHkpLlxyXG4gIFx0XHR6SW5kZXhPZmZzZXQ6IDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxyXG4gIFx0XHQvLyBUaGUgb3BhY2l0eSBvZiB0aGUgbWFya2VyLlxyXG4gIFx0XHRvcGFjaXR5OiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiByaXNlT25Ib3ZlcjogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIG1hcmtlciB3aWxsIGdldCBvbiB0b3Agb2Ygb3RoZXJzIHdoZW4geW91IGhvdmVyIHRoZSBtb3VzZSBvdmVyIGl0LlxyXG4gIFx0XHRyaXNlT25Ib3ZlcjogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJpc2VPZmZzZXQ6IE51bWJlciA9IDI1MFxyXG4gIFx0XHQvLyBUaGUgei1pbmRleCBvZmZzZXQgdXNlZCBmb3IgdGhlIGByaXNlT25Ib3ZlcmAgZmVhdHVyZS5cclxuICBcdFx0cmlzZU9mZnNldDogMjUwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAnbWFya2VyUGFuZSdcclxuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgbWFya2VycyBpY29uIHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHBhbmU6ICdtYXJrZXJQYW5lJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gc2hhZG93UGFuZTogU3RyaW5nID0gJ3NoYWRvd1BhbmUnXHJcbiAgXHRcdC8vIGBNYXAgcGFuZWAgd2hlcmUgdGhlIG1hcmtlcnMgc2hhZG93IHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHNoYWRvd1BhbmU6ICdzaGFkb3dQYW5lJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYnViYmxpbmdNb3VzZUV2ZW50czogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZW4gYHRydWVgLCBhIG1vdXNlIGV2ZW50IG9uIHRoaXMgbWFya2VyIHdpbGwgdHJpZ2dlciB0aGUgc2FtZSBldmVudCBvbiB0aGUgbWFwXHJcbiAgXHRcdC8vICh1bmxlc3MgW2BMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbmBdKCNkb21ldmVudC1zdG9wcHJvcGFnYXRpb24pIGlzIHVzZWQpLlxyXG4gIFx0XHRidWJibGluZ01vdXNlRXZlbnRzOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIERyYWdnYWJsZSBtYXJrZXIgb3B0aW9uc1xyXG4gIFx0XHQvLyBAb3B0aW9uIGRyYWdnYWJsZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIG1hcmtlciBpcyBkcmFnZ2FibGUgd2l0aCBtb3VzZS90b3VjaCBvciBub3QuXHJcbiAgXHRcdGRyYWdnYWJsZTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW46IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRvIHBhbiB0aGUgbWFwIHdoZW4gZHJhZ2dpbmcgdGhpcyBtYXJrZXIgbmVhciBpdHMgZWRnZSBvciBub3QuXHJcbiAgXHRcdGF1dG9QYW46IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuUGFkZGluZzogUG9pbnQgPSBQb2ludCg1MCwgNTApXHJcbiAgXHRcdC8vIERpc3RhbmNlIChpbiBwaXhlbHMgdG8gdGhlIGxlZnQvcmlnaHQgYW5kIHRvIHRoZSB0b3AvYm90dG9tKSBvZiB0aGVcclxuICBcdFx0Ly8gbWFwIGVkZ2UgdG8gc3RhcnQgcGFubmluZyB0aGUgbWFwLlxyXG4gIFx0XHRhdXRvUGFuUGFkZGluZzogWzUwLCA1MF0sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW5TcGVlZDogTnVtYmVyID0gMTBcclxuICBcdFx0Ly8gTnVtYmVyIG9mIHBpeGVscyB0aGUgbWFwIHNob3VsZCBwYW4gYnkuXHJcbiAgXHRcdGF1dG9QYW5TcGVlZDogMTBcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQHNlY3Rpb25cclxuICBcdCAqXHJcbiAgXHQgKiBJbiBhZGRpdGlvbiB0byBbc2hhcmVkIGxheWVyIG1ldGhvZHNdKCNMYXllcikgbGlrZSBgYWRkVG8oKWAgYW5kIGByZW1vdmUoKWAgYW5kIFtwb3B1cCBtZXRob2RzXSgjUG9wdXApIGxpa2UgYmluZFBvcHVwKCkgeW91IGNhbiBhbHNvIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XHJcbiAgXHQgKi9cclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHRoaXMuX3pvb21BbmltYXRlZCA9IHRoaXMuX3pvb21BbmltYXRlZCAmJiBtYXAub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdG1hcC5vbignem9vbWFuaW0nLCB0aGlzLl9hbmltYXRlWm9vbSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2luaXRJY29uKCk7XHJcbiAgXHRcdHRoaXMudXBkYXRlKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdGlmICh0aGlzLmRyYWdnaW5nICYmIHRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpKSB7XHJcbiAgXHRcdFx0dGhpcy5vcHRpb25zLmRyYWdnYWJsZSA9IHRydWU7XHJcbiAgXHRcdFx0dGhpcy5kcmFnZ2luZy5yZW1vdmVIb29rcygpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLmRyYWdnaW5nO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdG1hcC5vZmYoJ3pvb21hbmltJywgdGhpcy5fYW5pbWF0ZVpvb20sIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9yZW1vdmVJY29uKCk7XHJcbiAgXHRcdHRoaXMuX3JlbW92ZVNoYWRvdygpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHtcclxuICBcdFx0XHR6b29tOiB0aGlzLnVwZGF0ZSxcclxuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMudXBkYXRlXHJcbiAgXHRcdH07XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TGF0TG5nOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIGN1cnJlbnQgZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIuXHJcbiAgXHRnZXRMYXRMbmc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2xhdGxuZztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRMYXRMbmcobGF0bG5nOiBMYXRMbmcpOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBtYXJrZXIgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvaW50LlxyXG4gIFx0c2V0TGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBvbGRMYXRMbmcgPSB0aGlzLl9sYXRsbmc7XHJcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XHJcbiAgXHRcdHRoaXMudXBkYXRlKCk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZTogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIG1vdmVkIHZpYSBbYHNldExhdExuZ2BdKCNtYXJrZXItc2V0bGF0bG5nKSBvciBieSBbZHJhZ2dpbmddKCNtYXJrZXItZHJhZ2dpbmcpLiBPbGQgYW5kIG5ldyBjb29yZGluYXRlcyBhcmUgaW5jbHVkZWQgaW4gZXZlbnQgYXJndW1lbnRzIGFzIGBvbGRMYXRMbmdgLCBgbGF0bG5nYC5cclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbW92ZScsIHtvbGRMYXRMbmc6IG9sZExhdExuZywgbGF0bG5nOiB0aGlzLl9sYXRsbmd9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRaSW5kZXhPZmZzZXQob2Zmc2V0OiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBbekluZGV4IG9mZnNldF0oI21hcmtlci16aW5kZXhvZmZzZXQpIG9mIHRoZSBtYXJrZXIuXHJcbiAgXHRzZXRaSW5kZXhPZmZzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCA9IG9mZnNldDtcclxuICBcdFx0cmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0SWNvbjogSWNvblxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCBpY29uIHVzZWQgYnkgdGhlIG1hcmtlclxyXG4gIFx0Z2V0SWNvbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmljb247XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0SWNvbihpY29uOiBJY29uKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgbWFya2VyIGljb24uXHJcbiAgXHRzZXRJY29uOiBmdW5jdGlvbiAoaWNvbikge1xyXG5cclxuICBcdFx0dGhpcy5vcHRpb25zLmljb24gPSBpY29uO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX2luaXRJY29uKCk7XHJcbiAgXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgXHRcdFx0dGhpcy5iaW5kUG9wdXAodGhpcy5fcG9wdXAsIHRoaXMuX3BvcHVwLm9wdGlvbnMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RWxlbWVudDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5faWNvbjtcclxuICBcdH0sXHJcblxyXG4gIFx0dXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5faWNvbiAmJiB0aGlzLl9tYXApIHtcclxuICBcdFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLnJvdW5kKCk7XHJcbiAgXHRcdFx0dGhpcy5fc2V0UG9zKHBvcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdEljb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXHJcbiAgXHRcdCAgICBjbGFzc1RvQWRkID0gJ2xlYWZsZXQtem9vbS0nICsgKHRoaXMuX3pvb21BbmltYXRlZCA/ICdhbmltYXRlZCcgOiAnaGlkZScpO1xyXG5cclxuICBcdFx0dmFyIGljb24gPSBvcHRpb25zLmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxcclxuICBcdFx0ICAgIGFkZEljb24gPSBmYWxzZTtcclxuXHJcbiAgXHRcdC8vIGlmIHdlJ3JlIG5vdCByZXVzaW5nIHRoZSBpY29uLCByZW1vdmUgdGhlIG9sZCBvbmUgYW5kIGluaXQgbmV3IG9uZVxyXG4gIFx0XHRpZiAoaWNvbiAhPT0gdGhpcy5faWNvbikge1xyXG4gIFx0XHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9yZW1vdmVJY29uKCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGFkZEljb24gPSB0cnVlO1xyXG5cclxuICBcdFx0XHRpZiAob3B0aW9ucy50aXRsZSkge1xyXG4gIFx0XHRcdFx0aWNvbi50aXRsZSA9IG9wdGlvbnMudGl0bGU7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRpZiAoaWNvbi50YWdOYW1lID09PSAnSU1HJykge1xyXG4gIFx0XHRcdFx0aWNvbi5hbHQgPSBvcHRpb25zLmFsdCB8fCAnJztcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGFkZENsYXNzKGljb24sIGNsYXNzVG9BZGQpO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMua2V5Ym9hcmQpIHtcclxuICBcdFx0XHRpY29uLnRhYkluZGV4ID0gJzAnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pY29uID0gaWNvbjtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLnJpc2VPbkhvdmVyKSB7XHJcbiAgXHRcdFx0dGhpcy5vbih7XHJcbiAgXHRcdFx0XHRtb3VzZW92ZXI6IHRoaXMuX2JyaW5nVG9Gcm9udCxcclxuICBcdFx0XHRcdG1vdXNlb3V0OiB0aGlzLl9yZXNldFpJbmRleFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgbmV3U2hhZG93ID0gb3B0aW9ucy5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLFxyXG4gIFx0XHQgICAgYWRkU2hhZG93ID0gZmFsc2U7XHJcblxyXG4gIFx0XHRpZiAobmV3U2hhZG93ICE9PSB0aGlzLl9zaGFkb3cpIHtcclxuICBcdFx0XHR0aGlzLl9yZW1vdmVTaGFkb3coKTtcclxuICBcdFx0XHRhZGRTaGFkb3cgPSB0cnVlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobmV3U2hhZG93KSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3MobmV3U2hhZG93LCBjbGFzc1RvQWRkKTtcclxuICBcdFx0XHRuZXdTaGFkb3cuYWx0ID0gJyc7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fc2hhZG93ID0gbmV3U2hhZG93O1xyXG5cclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm9wYWNpdHkgPCAxKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHR9XHJcblxyXG5cclxuICBcdFx0aWYgKGFkZEljb24pIHtcclxuICBcdFx0XHR0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9pY29uKTtcclxuICBcdFx0fVxyXG4gIFx0XHR0aGlzLl9pbml0SW50ZXJhY3Rpb24oKTtcclxuICBcdFx0aWYgKG5ld1NoYWRvdyAmJiBhZGRTaGFkb3cpIHtcclxuICBcdFx0XHR0aGlzLmdldFBhbmUob3B0aW9ucy5zaGFkb3dQYW5lKS5hcHBlbmRDaGlsZCh0aGlzLl9zaGFkb3cpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZW1vdmVJY29uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMucmlzZU9uSG92ZXIpIHtcclxuICBcdFx0XHR0aGlzLm9mZih7XHJcbiAgXHRcdFx0XHRtb3VzZW92ZXI6IHRoaXMuX2JyaW5nVG9Gcm9udCxcclxuICBcdFx0XHRcdG1vdXNlb3V0OiB0aGlzLl9yZXNldFpJbmRleFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZW1vdmUodGhpcy5faWNvbik7XHJcbiAgXHRcdHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbik7XHJcblxyXG4gIFx0XHR0aGlzLl9pY29uID0gbnVsbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlbW92ZVNoYWRvdzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fc2hhZG93KSB7XHJcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX3NoYWRvdyk7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fc2hhZG93ID0gbnVsbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3NldFBvczogZnVuY3Rpb24gKHBvcykge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2ljb24pIHtcclxuICBcdFx0XHRzZXRQb3NpdGlvbih0aGlzLl9pY29uLCBwb3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fc2hhZG93KSB7XHJcbiAgXHRcdFx0c2V0UG9zaXRpb24odGhpcy5fc2hhZG93LCBwb3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl96SW5kZXggPSBwb3MueSArIHRoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQ7XHJcblxyXG4gIFx0XHR0aGlzLl9yZXNldFpJbmRleCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlWkluZGV4OiBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0dGhpcy5faWNvbi5zdHlsZS56SW5kZXggPSB0aGlzLl96SW5kZXggKyBvZmZzZXQ7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAob3B0KSB7XHJcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsIG9wdC56b29tLCBvcHQuY2VudGVyKS5yb3VuZCgpO1xyXG5cclxuICBcdFx0dGhpcy5fc2V0UG9zKHBvcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SW50ZXJhY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmludGVyYWN0aXZlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0YWRkQ2xhc3ModGhpcy5faWNvbiwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcclxuXHJcbiAgXHRcdHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbik7XHJcblxyXG4gIFx0XHRpZiAoTWFya2VyRHJhZykge1xyXG4gIFx0XHRcdHZhciBkcmFnZ2FibGUgPSB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlO1xyXG4gIFx0XHRcdGlmICh0aGlzLmRyYWdnaW5nKSB7XHJcbiAgXHRcdFx0XHRkcmFnZ2FibGUgPSB0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKTtcclxuICBcdFx0XHRcdHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0dGhpcy5kcmFnZ2luZyA9IG5ldyBNYXJrZXJEcmFnKHRoaXMpO1xyXG5cclxuICBcdFx0XHRpZiAoZHJhZ2dhYmxlKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmRyYWdnaW5nLmVuYWJsZSgpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldE9wYWNpdHkob3BhY2l0eTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgb3BhY2l0eSBvZiB0aGUgbWFya2VyLlxyXG4gIFx0c2V0T3BhY2l0eTogZnVuY3Rpb24gKG9wYWNpdHkpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5O1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZU9wYWNpdHk6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIG9wYWNpdHkgPSB0aGlzLm9wdGlvbnMub3BhY2l0eTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9pY29uLCBvcGFjaXR5KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX3NoYWRvdykge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fc2hhZG93LCBvcGFjaXR5KTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfYnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZXNldFpJbmRleDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoMCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRQb3B1cEFuY2hvcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcjtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFRvb2x0aXBBbmNob3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMudG9vbHRpcEFuY2hvcjtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGZhY3RvcnkgTC5tYXJrZXIobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/IDogTWFya2VyIG9wdGlvbnMpXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubWFya2VyKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPyA6IE1hcmtlciBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIE1hcmtlciBvYmplY3QgZ2l2ZW4gYSBnZW9ncmFwaGljYWwgcG9pbnQgYW5kIG9wdGlvbmFsbHkgYW4gb3B0aW9ucyBvYmplY3QuXHJcbiAgZnVuY3Rpb24gbWFya2VyKGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBNYXJrZXIobGF0bG5nLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcbiAgICogQGNsYXNzIFBhdGhcbiAgICogQGFrYSBMLlBhdGhcbiAgICogQGluaGVyaXRzIEludGVyYWN0aXZlIGxheWVyXG4gICAqXG4gICAqIEFuIGFic3RyYWN0IGNsYXNzIHRoYXQgY29udGFpbnMgb3B0aW9ucyBhbmQgY29uc3RhbnRzIHNoYXJlZCBiZXR3ZWVuIHZlY3RvclxuICAgKiBvdmVybGF5cyAoUG9seWdvbiwgUG9seWxpbmUsIENpcmNsZSkuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHkuIEV4dGVuZHMgYExheWVyYC5cbiAgICovXG5cbiAgdmFyIFBhdGggPSBMYXllci5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIFBhdGggb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gc3Ryb2tlOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gV2hldGhlciB0byBkcmF3IHN0cm9rZSBhbG9uZyB0aGUgcGF0aC4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBib3JkZXJzIG9uIHBvbHlnb25zIG9yIGNpcmNsZXMuXG4gIFx0XHRzdHJva2U6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gY29sb3I6IFN0cmluZyA9ICcjMzM4OGZmJ1xuICBcdFx0Ly8gU3Ryb2tlIGNvbG9yXG4gIFx0XHRjb2xvcjogJyMzMzg4ZmYnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHdlaWdodDogTnVtYmVyID0gM1xuICBcdFx0Ly8gU3Ryb2tlIHdpZHRoIGluIHBpeGVsc1xuICBcdFx0d2VpZ2h0OiAzLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxuICBcdFx0Ly8gU3Ryb2tlIG9wYWNpdHlcbiAgXHRcdG9wYWNpdHk6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gbGluZUNhcDogU3RyaW5nPSAncm91bmQnXG4gIFx0XHQvLyBBIHN0cmluZyB0aGF0IGRlZmluZXMgW3NoYXBlIHRvIGJlIHVzZWQgYXQgdGhlIGVuZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtbGluZWNhcCkgb2YgdGhlIHN0cm9rZS5cbiAgXHRcdGxpbmVDYXA6ICdyb3VuZCcsXG5cbiAgXHRcdC8vIEBvcHRpb24gbGluZUpvaW46IFN0cmluZyA9ICdyb3VuZCdcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyBbc2hhcGUgdG8gYmUgdXNlZCBhdCB0aGUgY29ybmVyc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtbGluZWpvaW4pIG9mIHRoZSBzdHJva2UuXG4gIFx0XHRsaW5lSm9pbjogJ3JvdW5kJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBkYXNoQXJyYXk6IFN0cmluZyA9IG51bGxcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgc3Ryb2tlIFtkYXNoIHBhdHRlcm5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc3Ryb2tlLWRhc2hhcnJheSkuIERvZXNuJ3Qgd29yayBvbiBgQ2FudmFzYC1wb3dlcmVkIGxheWVycyBpbiBbc29tZSBvbGQgYnJvd3NlcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQvc2V0TGluZURhc2gjQnJvd3Nlcl9jb21wYXRpYmlsaXR5KS5cbiAgXHRcdGRhc2hBcnJheTogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBkYXNoT2Zmc2V0OiBTdHJpbmcgPSBudWxsXG4gIFx0XHQvLyBBIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIFtkaXN0YW5jZSBpbnRvIHRoZSBkYXNoIHBhdHRlcm4gdG8gc3RhcnQgdGhlIGRhc2hdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc3Ryb2tlLWRhc2hvZmZzZXQpLiBEb2Vzbid0IHdvcmsgb24gYENhbnZhc2AtcG93ZXJlZCBsYXllcnMgaW4gW3NvbWUgb2xkIGJyb3dzZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEL3NldExpbmVEYXNoI0Jyb3dzZXJfY29tcGF0aWJpbGl0eSkuXG4gIFx0XHRkYXNoT2Zmc2V0OiBudWxsLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGw6IEJvb2xlYW4gPSBkZXBlbmRzXG4gIFx0XHQvLyBXaGV0aGVyIHRvIGZpbGwgdGhlIHBhdGggd2l0aCBjb2xvci4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBmaWxsaW5nIG9uIHBvbHlnb25zIG9yIGNpcmNsZXMuXG4gIFx0XHRmaWxsOiBmYWxzZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBmaWxsQ29sb3I6IFN0cmluZyA9ICpcbiAgXHRcdC8vIEZpbGwgY29sb3IuIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgW2Bjb2xvcmBdKCNwYXRoLWNvbG9yKSBvcHRpb25cbiAgXHRcdGZpbGxDb2xvcjogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBmaWxsT3BhY2l0eTogTnVtYmVyID0gMC4yXG4gIFx0XHQvLyBGaWxsIG9wYWNpdHkuXG4gIFx0XHRmaWxsT3BhY2l0eTogMC4yLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGxSdWxlOiBTdHJpbmcgPSAnZXZlbm9kZCdcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyBbaG93IHRoZSBpbnNpZGUgb2YgYSBzaGFwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9maWxsLXJ1bGUpIGlzIGRldGVybWluZWQuXG4gIFx0XHRmaWxsUnVsZTogJ2V2ZW5vZGQnLFxuXG4gIFx0XHQvLyBjbGFzc05hbWU6ICcnLFxuXG4gIFx0XHQvLyBPcHRpb24gaW5oZXJpdGVkIGZyb20gXCJJbnRlcmFjdGl2ZSBsYXllclwiIGFic3RyYWN0IGNsYXNzXG4gIFx0XHRpbnRlcmFjdGl2ZTogdHJ1ZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBidWJibGluZ01vdXNlRXZlbnRzOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gV2hlbiBgdHJ1ZWAsIGEgbW91c2UgZXZlbnQgb24gdGhpcyBwYXRoIHdpbGwgdHJpZ2dlciB0aGUgc2FtZSBldmVudCBvbiB0aGUgbWFwXG4gIFx0XHQvLyAodW5sZXNzIFtgTC5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb25gXSgjZG9tZXZlbnQtc3RvcHByb3BhZ2F0aW9uKSBpcyB1c2VkKS5cbiAgXHRcdGJ1YmJsaW5nTW91c2VFdmVudHM6IHRydWVcbiAgXHR9LFxuXG4gIFx0YmVmb3JlQWRkOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHQvLyBSZW5kZXJlciBpcyBzZXQgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gY2FsbCByZW5kZXJlci5nZXRFdmVudHNcbiAgXHRcdC8vIGJlZm9yZSB0aGlzLmdldEV2ZW50cy5cbiAgXHRcdHRoaXMuX3JlbmRlcmVyID0gbWFwLmdldFJlbmRlcmVyKHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX2luaXRQYXRoKHRoaXMpO1xuICBcdFx0dGhpcy5fcmVzZXQoKTtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3JlbW92ZVBhdGgodGhpcyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVkcmF3KCk6IHRoaXNcbiAgXHQvLyBSZWRyYXdzIHRoZSBsYXllci4gU29tZXRpbWVzIHVzZWZ1bCBhZnRlciB5b3UgY2hhbmdlZCB0aGUgY29vcmRpbmF0ZXMgdGhhdCB0aGUgcGF0aCB1c2VzLlxuICBcdHJlZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldFN0eWxlKHN0eWxlOiBQYXRoIG9wdGlvbnMpOiB0aGlzXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgYXBwZWFyYW5jZSBvZiBhIFBhdGggYmFzZWQgb24gdGhlIG9wdGlvbnMgaW4gdGhlIGBQYXRoIG9wdGlvbnNgIG9iamVjdC5cbiAgXHRzZXRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKSB7XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIHN0eWxlKTtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyk7XG4gIFx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc3Ryb2tlICYmIHN0eWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdHlsZSwgJ3dlaWdodCcpKSB7XG4gIFx0XHRcdFx0dGhpcy5fdXBkYXRlQm91bmRzKCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9Gcm9udCgpOiB0aGlzXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciB0byB0aGUgdG9wIG9mIGFsbCBwYXRoIGxheWVycy5cbiAgXHRicmluZ1RvRnJvbnQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2soKTogdGhpc1xuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgdG8gdGhlIGJvdHRvbSBvZiBhbGwgcGF0aCBsYXllcnMuXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Z2V0RWxlbWVudDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3BhdGg7XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzXG4gIFx0XHR0aGlzLl9wcm9qZWN0KCk7XG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcbiAgXHR9LFxuXG4gIFx0X2NsaWNrVG9sZXJhbmNlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB1c2VkIHdoZW4gZG9pbmcgaGl0IGRldGVjdGlvbiBmb3IgQ2FudmFzIGxheWVyc1xuICBcdFx0cmV0dXJuICh0aGlzLm9wdGlvbnMuc3Ryb2tlID8gdGhpcy5vcHRpb25zLndlaWdodCAvIDIgOiAwKSArIHRoaXMuX3JlbmRlcmVyLm9wdGlvbnMudG9sZXJhbmNlO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIENpcmNsZU1hcmtlclxuICAgKiBAYWthIEwuQ2lyY2xlTWFya2VyXG4gICAqIEBpbmhlcml0cyBQYXRoXG4gICAqXG4gICAqIEEgY2lyY2xlIG9mIGEgZml4ZWQgc2l6ZSB3aXRoIHJhZGl1cyBzcGVjaWZpZWQgaW4gcGl4ZWxzLiBFeHRlbmRzIGBQYXRoYC5cbiAgICovXG5cbiAgdmFyIENpcmNsZU1hcmtlciA9IFBhdGguZXh0ZW5kKHtcblxuICBcdC8vIEBzZWN0aW9uXG4gIFx0Ly8gQGFrYSBDaXJjbGVNYXJrZXIgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdGZpbGw6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gcmFkaXVzOiBOdW1iZXIgPSAxMFxuICBcdFx0Ly8gUmFkaXVzIG9mIHRoZSBjaXJjbGUgbWFya2VyLCBpbiBwaXhlbHNcbiAgXHRcdHJhZGl1czogMTBcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucykge1xuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XG4gIFx0XHR0aGlzLl9yYWRpdXMgPSB0aGlzLm9wdGlvbnMucmFkaXVzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldExhdExuZyhsYXRMbmc6IExhdExuZyk6IHRoaXNcbiAgXHQvLyBTZXRzIHRoZSBwb3NpdGlvbiBvZiBhIGNpcmNsZSBtYXJrZXIgdG8gYSBuZXcgbG9jYXRpb24uXG4gIFx0c2V0TGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XG4gIFx0XHR2YXIgb2xkTGF0TG5nID0gdGhpcy5fbGF0bG5nO1xuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcbiAgXHRcdHRoaXMucmVkcmF3KCk7XG5cbiAgXHRcdC8vIEBldmVudCBtb3ZlOiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIG1vdmVkIHZpYSBbYHNldExhdExuZ2BdKCNjaXJjbGVtYXJrZXItc2V0bGF0bG5nKS4gT2xkIGFuZCBuZXcgY29vcmRpbmF0ZXMgYXJlIGluY2x1ZGVkIGluIGV2ZW50IGFyZ3VtZW50cyBhcyBgb2xkTGF0TG5nYCwgYGxhdGxuZ2AuXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlJywge29sZExhdExuZzogb2xkTGF0TG5nLCBsYXRsbmc6IHRoaXMuX2xhdGxuZ30pO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldExhdExuZygpOiBMYXRMbmdcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGdlb2dyYXBoaWNhbCBwb3NpdGlvbiBvZiB0aGUgY2lyY2xlIG1hcmtlclxuICBcdGdldExhdExuZzogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2xhdGxuZztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRSYWRpdXMocmFkaXVzOiBOdW1iZXIpOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgcmFkaXVzIG9mIGEgY2lyY2xlIG1hcmtlci4gVW5pdHMgYXJlIGluIHBpeGVscy5cbiAgXHRzZXRSYWRpdXM6IGZ1bmN0aW9uIChyYWRpdXMpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy5yYWRpdXMgPSB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRSYWRpdXMoKTogTnVtYmVyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICBcdGdldFJhZGl1czogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3JhZGl1cztcbiAgXHR9LFxuXG4gIFx0c2V0U3R5bGUgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICBcdFx0dmFyIHJhZGl1cyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yYWRpdXMgfHwgdGhpcy5fcmFkaXVzO1xuICBcdFx0UGF0aC5wcm90b3R5cGUuc2V0U3R5bGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuc2V0UmFkaXVzKHJhZGl1cyk7XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0X3Byb2plY3Q6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3BvaW50ID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO1xuICBcdFx0dGhpcy5fdXBkYXRlQm91bmRzKCk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciByID0gdGhpcy5fcmFkaXVzLFxuICBcdFx0ICAgIHIyID0gdGhpcy5fcmFkaXVzWSB8fCByLFxuICBcdFx0ICAgIHcgPSB0aGlzLl9jbGlja1RvbGVyYW5jZSgpLFxuICBcdFx0ICAgIHAgPSBbciArIHcsIHIyICsgd107XG4gIFx0XHR0aGlzLl9weEJvdW5kcyA9IG5ldyBCb3VuZHModGhpcy5fcG9pbnQuc3VidHJhY3QocCksIHRoaXMuX3BvaW50LmFkZChwKSk7XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlUGF0aCgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZUNpcmNsZSh0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X2VtcHR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fcmFkaXVzICYmICF0aGlzLl9yZW5kZXJlci5fYm91bmRzLmludGVyc2VjdHModGhpcy5fcHhCb3VuZHMpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XG4gIFx0XHRyZXR1cm4gcC5kaXN0YW5jZVRvKHRoaXMuX3BvaW50KSA8PSB0aGlzLl9yYWRpdXMgKyB0aGlzLl9jbGlja1RvbGVyYW5jZSgpO1xuICBcdH1cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLmNpcmNsZU1hcmtlcihsYXRsbmc6IExhdExuZywgb3B0aW9ucz86IENpcmNsZU1hcmtlciBvcHRpb25zKVxuICAvLyBJbnN0YW50aWF0ZXMgYSBjaXJjbGUgbWFya2VyIG9iamVjdCBnaXZlbiBhIGdlb2dyYXBoaWNhbCBwb2ludCwgYW5kIGFuIG9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0LlxuICBmdW5jdGlvbiBjaXJjbGVNYXJrZXIobGF0bG5nLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBDaXJjbGVNYXJrZXIobGF0bG5nLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qXG4gICAqIEBjbGFzcyBDaXJjbGVcbiAgICogQGFrYSBMLkNpcmNsZVxuICAgKiBAaW5oZXJpdHMgQ2lyY2xlTWFya2VyXG4gICAqXG4gICAqIEEgY2xhc3MgZm9yIGRyYXdpbmcgY2lyY2xlIG92ZXJsYXlzIG9uIGEgbWFwLiBFeHRlbmRzIGBDaXJjbGVNYXJrZXJgLlxuICAgKlxuICAgKiBJdCdzIGFuIGFwcHJveGltYXRpb24gYW5kIHN0YXJ0cyB0byBkaXZlcmdlIGZyb20gYSByZWFsIGNpcmNsZSBjbG9zZXIgdG8gcG9sZXMgKGR1ZSB0byBwcm9qZWN0aW9uIGRpc3RvcnRpb24pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBMLmNpcmNsZShbNTAuNSwgMzAuNV0sIHtyYWRpdXM6IDIwMH0pLmFkZFRvKG1hcCk7XG4gICAqIGBgYFxuICAgKi9cblxuICB2YXIgQ2lyY2xlID0gQ2lyY2xlTWFya2VyLmV4dGVuZCh7XG5cbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKSB7XG4gIFx0XHRpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gIFx0XHRcdC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggMC43LnggZmFjdG9yeSAobGF0bG5nLCByYWRpdXMsIG9wdGlvbnM/KVxuICBcdFx0XHRvcHRpb25zID0gZXh0ZW5kKHt9LCBsZWdhY3lPcHRpb25zLCB7cmFkaXVzOiBvcHRpb25zfSk7XG4gIFx0XHR9XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcblxuICBcdFx0aWYgKGlzTmFOKHRoaXMub3B0aW9ucy5yYWRpdXMpKSB7IHRocm93IG5ldyBFcnJvcignQ2lyY2xlIHJhZGl1cyBjYW5ub3QgYmUgTmFOJyk7IH1cblxuICBcdFx0Ly8gQHNlY3Rpb25cbiAgXHRcdC8vIEBha2EgQ2lyY2xlIG9wdGlvbnNcbiAgXHRcdC8vIEBvcHRpb24gcmFkaXVzOiBOdW1iZXI7IFJhZGl1cyBvZiB0aGUgY2lyY2xlLCBpbiBtZXRlcnMuXG4gIFx0XHR0aGlzLl9tUmFkaXVzID0gdGhpcy5vcHRpb25zLnJhZGl1cztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRSYWRpdXMocmFkaXVzOiBOdW1iZXIpOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgcmFkaXVzIG9mIGEgY2lyY2xlLiBVbml0cyBhcmUgaW4gbWV0ZXJzLlxuICBcdHNldFJhZGl1czogZnVuY3Rpb24gKHJhZGl1cykge1xuICBcdFx0dGhpcy5fbVJhZGl1cyA9IHJhZGl1cztcbiAgXHRcdHJldHVybiB0aGlzLnJlZHJhdygpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFJhZGl1cygpOiBOdW1iZXJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHJhZGl1cyBvZiBhIGNpcmNsZS4gVW5pdHMgYXJlIGluIG1ldGVycy5cbiAgXHRnZXRSYWRpdXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9tUmFkaXVzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcbiAgXHQvLyBSZXR1cm5zIHRoZSBgTGF0TG5nQm91bmRzYCBvZiB0aGUgcGF0aC5cbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBoYWxmID0gW3RoaXMuX3JhZGl1cywgdGhpcy5fcmFkaXVzWSB8fCB0aGlzLl9yYWRpdXNdO1xuXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZ0JvdW5kcyhcbiAgXHRcdFx0dGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdChoYWxmKSksXG4gIFx0XHRcdHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQuYWRkKGhhbGYpKSk7XG4gIFx0fSxcblxuICBcdHNldFN0eWxlOiBQYXRoLnByb3RvdHlwZS5zZXRTdHlsZSxcblxuICBcdF9wcm9qZWN0OiBmdW5jdGlvbiAoKSB7XG5cbiAgXHRcdHZhciBsbmcgPSB0aGlzLl9sYXRsbmcubG5nLFxuICBcdFx0ICAgIGxhdCA9IHRoaXMuX2xhdGxuZy5sYXQsXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIGNycyA9IG1hcC5vcHRpb25zLmNycztcblxuICBcdFx0aWYgKGNycy5kaXN0YW5jZSA9PT0gRWFydGguZGlzdGFuY2UpIHtcbiAgXHRcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxuICBcdFx0XHQgICAgbGF0UiA9ICh0aGlzLl9tUmFkaXVzIC8gRWFydGguUikgLyBkLFxuICBcdFx0XHQgICAgdG9wID0gbWFwLnByb2plY3QoW2xhdCArIGxhdFIsIGxuZ10pLFxuICBcdFx0XHQgICAgYm90dG9tID0gbWFwLnByb2plY3QoW2xhdCAtIGxhdFIsIGxuZ10pLFxuICBcdFx0XHQgICAgcCA9IHRvcC5hZGQoYm90dG9tKS5kaXZpZGVCeSgyKSxcbiAgXHRcdFx0ICAgIGxhdDIgPSBtYXAudW5wcm9qZWN0KHApLmxhdCxcbiAgXHRcdFx0ICAgIGxuZ1IgPSBNYXRoLmFjb3MoKE1hdGguY29zKGxhdFIgKiBkKSAtIE1hdGguc2luKGxhdCAqIGQpICogTWF0aC5zaW4obGF0MiAqIGQpKSAvXG4gIFx0XHRcdCAgICAgICAgICAgIChNYXRoLmNvcyhsYXQgKiBkKSAqIE1hdGguY29zKGxhdDIgKiBkKSkpIC8gZDtcblxuICBcdFx0XHRpZiAoaXNOYU4obG5nUikgfHwgbG5nUiA9PT0gMCkge1xuICBcdFx0XHRcdGxuZ1IgPSBsYXRSIC8gTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIGxhdCk7IC8vIEZhbGxiYWNrIGZvciBlZGdlIGNhc2UsICMyNDI1XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl9wb2ludCA9IHAuc3VidHJhY3QobWFwLmdldFBpeGVsT3JpZ2luKCkpO1xuICBcdFx0XHR0aGlzLl9yYWRpdXMgPSBpc05hTihsbmdSKSA/IDAgOiBwLnggLSBtYXAucHJvamVjdChbbGF0MiwgbG5nIC0gbG5nUl0pLng7XG4gIFx0XHRcdHRoaXMuX3JhZGl1c1kgPSBwLnkgLSB0b3AueTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dmFyIGxhdGxuZzIgPSBjcnMudW5wcm9qZWN0KGNycy5wcm9qZWN0KHRoaXMuX2xhdGxuZykuc3VidHJhY3QoW3RoaXMuX21SYWRpdXMsIDBdKSk7XG5cbiAgXHRcdFx0dGhpcy5fcG9pbnQgPSBtYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyk7XG4gIFx0XHRcdHRoaXMuX3JhZGl1cyA9IHRoaXMuX3BvaW50LnggLSBtYXAubGF0TG5nVG9MYXllclBvaW50KGxhdGxuZzIpLng7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZUJvdW5kcygpO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5jaXJjbGUobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBDaXJjbGUgb3B0aW9ucylcbiAgLy8gSW5zdGFudGlhdGVzIGEgY2lyY2xlIG9iamVjdCBnaXZlbiBhIGdlb2dyYXBoaWNhbCBwb2ludCwgYW5kIGFuIG9wdGlvbnMgb2JqZWN0XG4gIC8vIHdoaWNoIGNvbnRhaW5zIHRoZSBjaXJjbGUgcmFkaXVzLlxuICAvLyBAYWx0ZXJuYXRpdmVcbiAgLy8gQGZhY3RvcnkgTC5jaXJjbGUobGF0bG5nOiBMYXRMbmcsIHJhZGl1czogTnVtYmVyLCBvcHRpb25zPzogQ2lyY2xlIG9wdGlvbnMpXG4gIC8vIE9ic29sZXRlIHdheSBvZiBpbnN0YW50aWF0aW5nIGEgY2lyY2xlLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDAuNy54IGNvZGUuXG4gIC8vIERvIG5vdCB1c2UgaW4gbmV3IGFwcGxpY2F0aW9ucyBvciBwbHVnaW5zLlxuICBmdW5jdGlvbiBjaXJjbGUobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBDaXJjbGUobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKTtcbiAgfVxuXG4gIC8qXG4gICAqIEBjbGFzcyBQb2x5bGluZVxuICAgKiBAYWthIEwuUG9seWxpbmVcbiAgICogQGluaGVyaXRzIFBhdGhcbiAgICpcbiAgICogQSBjbGFzcyBmb3IgZHJhd2luZyBwb2x5bGluZSBvdmVybGF5cyBvbiBhIG1hcC4gRXh0ZW5kcyBgUGF0aGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGNyZWF0ZSBhIHJlZCBwb2x5bGluZSBmcm9tIGFuIGFycmF5IG9mIExhdExuZyBwb2ludHNcbiAgICogdmFyIGxhdGxuZ3MgPSBbXG4gICAqIFx0WzQ1LjUxLCAtMTIyLjY4XSxcbiAgICogXHRbMzcuNzcsIC0xMjIuNDNdLFxuICAgKiBcdFszNC4wNCwgLTExOC4yXVxuICAgKiBdO1xuICAgKlxuICAgKiB2YXIgcG9seWxpbmUgPSBMLnBvbHlsaW5lKGxhdGxuZ3MsIHtjb2xvcjogJ3JlZCd9KS5hZGRUbyhtYXApO1xuICAgKlxuICAgKiAvLyB6b29tIHRoZSBtYXAgdG8gdGhlIHBvbHlsaW5lXG4gICAqIG1hcC5maXRCb3VuZHMocG9seWxpbmUuZ2V0Qm91bmRzKCkpO1xuICAgKiBgYGBcbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHBhc3MgYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSB0byByZXByZXNlbnQgYSBgTXVsdGlQb2x5bGluZWAgc2hhcGU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGNyZWF0ZSBhIHJlZCBwb2x5bGluZSBmcm9tIGFuIGFycmF5IG9mIGFycmF5cyBvZiBMYXRMbmcgcG9pbnRzXG4gICAqIHZhciBsYXRsbmdzID0gW1xuICAgKiBcdFtbNDUuNTEsIC0xMjIuNjhdLFxuICAgKiBcdCBbMzcuNzcsIC0xMjIuNDNdLFxuICAgKiBcdCBbMzQuMDQsIC0xMTguMl1dLFxuICAgKiBcdFtbNDAuNzgsIC03My45MV0sXG4gICAqIFx0IFs0MS44MywgLTg3LjYyXSxcbiAgICogXHQgWzMyLjc2LCAtOTYuNzJdXVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG5cblxuICB2YXIgUG9seWxpbmUgPSBQYXRoLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgUG9seWxpbmUgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gc21vb3RoRmFjdG9yOiBOdW1iZXIgPSAxLjBcbiAgXHRcdC8vIEhvdyBtdWNoIHRvIHNpbXBsaWZ5IHRoZSBwb2x5bGluZSBvbiBlYWNoIHpvb20gbGV2ZWwuIE1vcmUgbWVhbnNcbiAgXHRcdC8vIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgc21vb3RoZXIgbG9vaywgYW5kIGxlc3MgbWVhbnMgbW9yZSBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbi5cbiAgXHRcdHNtb290aEZhY3RvcjogMS4wLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG5vQ2xpcDogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBEaXNhYmxlIHBvbHlsaW5lIGNsaXBwaW5nLlxuICBcdFx0bm9DbGlwOiBmYWxzZVxuICBcdH0sXG5cbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5ncywgb3B0aW9ucykge1xuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuX3NldExhdExuZ3MobGF0bG5ncyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0TGF0TG5ncygpOiBMYXRMbmdbXVxuICBcdC8vIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHBvaW50cyBpbiB0aGUgcGF0aCwgb3IgbmVzdGVkIGFycmF5cyBvZiBwb2ludHMgaW4gY2FzZSBvZiBtdWx0aS1wb2x5bGluZS5cbiAgXHRnZXRMYXRMbmdzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbGF0bG5ncztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRMYXRMbmdzKGxhdGxuZ3M6IExhdExuZ1tdKTogdGhpc1xuICBcdC8vIFJlcGxhY2VzIGFsbCB0aGUgcG9pbnRzIGluIHRoZSBwb2x5bGluZSB3aXRoIHRoZSBnaXZlbiBhcnJheSBvZiBnZW9ncmFwaGljYWwgcG9pbnRzLlxuICBcdHNldExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR0aGlzLl9zZXRMYXRMbmdzKGxhdGxuZ3MpO1xuICBcdFx0cmV0dXJuIHRoaXMucmVkcmF3KCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgaXNFbXB0eSgpOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIFBvbHlsaW5lIGhhcyBubyBMYXRMbmdzLlxuICBcdGlzRW1wdHk6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiAhdGhpcy5fbGF0bG5ncy5sZW5ndGg7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgY2xvc2VzdExheWVyUG9pbnQocDogUG9pbnQpOiBQb2ludFxuICBcdC8vIFJldHVybnMgdGhlIHBvaW50IGNsb3Nlc3QgdG8gYHBgIG9uIHRoZSBQb2x5bGluZS5cbiAgXHRjbG9zZXN0TGF5ZXJQb2ludDogZnVuY3Rpb24gKHApIHtcbiAgXHRcdHZhciBtaW5EaXN0YW5jZSA9IEluZmluaXR5LFxuICBcdFx0ICAgIG1pblBvaW50ID0gbnVsbCxcbiAgXHRcdCAgICBjbG9zZXN0ID0gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50LFxuICBcdFx0ICAgIHAxLCBwMjtcblxuICBcdFx0Zm9yICh2YXIgaiA9IDAsIGpMZW4gPSB0aGlzLl9wYXJ0cy5sZW5ndGg7IGogPCBqTGVuOyBqKyspIHtcbiAgXHRcdFx0dmFyIHBvaW50cyA9IHRoaXMuX3BhcnRzW2pdO1xuXG4gIFx0XHRcdGZvciAodmFyIGkgPSAxLCBsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0XHRwMSA9IHBvaW50c1tpIC0gMV07XG4gIFx0XHRcdFx0cDIgPSBwb2ludHNbaV07XG5cbiAgXHRcdFx0XHR2YXIgc3FEaXN0ID0gY2xvc2VzdChwLCBwMSwgcDIsIHRydWUpO1xuXG4gIFx0XHRcdFx0aWYgKHNxRGlzdCA8IG1pbkRpc3RhbmNlKSB7XG4gIFx0XHRcdFx0XHRtaW5EaXN0YW5jZSA9IHNxRGlzdDtcbiAgXHRcdFx0XHRcdG1pblBvaW50ID0gY2xvc2VzdChwLCBwMSwgcDIpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0aWYgKG1pblBvaW50KSB7XG4gIFx0XHRcdG1pblBvaW50LmRpc3RhbmNlID0gTWF0aC5zcXJ0KG1pbkRpc3RhbmNlKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiBtaW5Qb2ludDtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIoKTogTGF0TG5nXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIChbY2VudHJvaWRdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2VudHJvaWQpKSBvZiB0aGUgcG9seWxpbmUuXG4gIFx0Z2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB0aHJvd3MgZXJyb3Igd2hlbiBub3QgeWV0IGFkZGVkIHRvIG1hcCBhcyB0aGlzIGNlbnRlciBjYWxjdWxhdGlvbiByZXF1aXJlcyBwcm9qZWN0ZWQgY29vcmRpbmF0ZXNcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTXVzdCBhZGQgbGF5ZXIgdG8gbWFwIGJlZm9yZSB1c2luZyBnZXRDZW50ZXIoKScpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgaSwgaGFsZkRpc3QsIHNlZ0Rpc3QsIGRpc3QsIHAxLCBwMiwgcmF0aW8sXG4gIFx0XHQgICAgcG9pbnRzID0gdGhpcy5fcmluZ3NbMF0sXG4gIFx0XHQgICAgbGVuID0gcG9pbnRzLmxlbmd0aDtcblxuICBcdFx0aWYgKCFsZW4pIHsgcmV0dXJuIG51bGw7IH1cblxuICBcdFx0Ly8gcG9seWxpbmUgY2VudHJvaWQgYWxnb3JpdGhtOyBvbmx5IHVzZXMgdGhlIGZpcnN0IHJpbmcgaWYgdGhlcmUgYXJlIG11bHRpcGxlXG5cbiAgXHRcdGZvciAoaSA9IDAsIGhhbGZEaXN0ID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICBcdFx0XHRoYWxmRGlzdCArPSBwb2ludHNbaV0uZGlzdGFuY2VUbyhwb2ludHNbaSArIDFdKSAvIDI7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIFRoZSBsaW5lIGlzIHNvIHNtYWxsIGluIHRoZSBjdXJyZW50IHZpZXcgdGhhdCBhbGwgcG9pbnRzIGFyZSBvbiB0aGUgc2FtZSBwaXhlbC5cbiAgXHRcdGlmIChoYWxmRGlzdCA9PT0gMCkge1xuICBcdFx0XHRyZXR1cm4gdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhwb2ludHNbMF0pO1xuICBcdFx0fVxuXG4gIFx0XHRmb3IgKGkgPSAwLCBkaXN0ID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICBcdFx0XHRwMSA9IHBvaW50c1tpXTtcbiAgXHRcdFx0cDIgPSBwb2ludHNbaSArIDFdO1xuICBcdFx0XHRzZWdEaXN0ID0gcDEuZGlzdGFuY2VUbyhwMik7XG4gIFx0XHRcdGRpc3QgKz0gc2VnRGlzdDtcblxuICBcdFx0XHRpZiAoZGlzdCA+IGhhbGZEaXN0KSB7XG4gIFx0XHRcdFx0cmF0aW8gPSAoZGlzdCAtIGhhbGZEaXN0KSAvIHNlZ0Rpc3Q7XG4gIFx0XHRcdFx0cmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoW1xuICBcdFx0XHRcdFx0cDIueCAtIHJhdGlvICogKHAyLnggLSBwMS54KSxcbiAgXHRcdFx0XHRcdHAyLnkgLSByYXRpbyAqIChwMi55IC0gcDEueSlcbiAgXHRcdFx0XHRdKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcbiAgXHQvLyBSZXR1cm5zIHRoZSBgTGF0TG5nQm91bmRzYCBvZiB0aGUgcGF0aC5cbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9ib3VuZHM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYWRkTGF0TG5nKGxhdGxuZzogTGF0TG5nLCBsYXRsbmdzPzogTGF0TG5nW10pOiB0aGlzXG4gIFx0Ly8gQWRkcyBhIGdpdmVuIHBvaW50IHRvIHRoZSBwb2x5bGluZS4gQnkgZGVmYXVsdCwgYWRkcyB0byB0aGUgZmlyc3QgcmluZyBvZlxuICBcdC8vIHRoZSBwb2x5bGluZSBpbiBjYXNlIG9mIGEgbXVsdGktcG9seWxpbmUsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nXG4gIFx0Ly8gYSBzcGVjaWZpYyByaW5nIGFzIGEgTGF0TG5nIGFycmF5ICh0aGF0IHlvdSBjYW4gZWFybGllciBhY2Nlc3Mgd2l0aCBbYGdldExhdExuZ3NgXSgjcG9seWxpbmUtZ2V0bGF0bG5ncykpLlxuICBcdGFkZExhdExuZzogZnVuY3Rpb24gKGxhdGxuZywgbGF0bG5ncykge1xuICBcdFx0bGF0bG5ncyA9IGxhdGxuZ3MgfHwgdGhpcy5fZGVmYXVsdFNoYXBlKCk7XG4gIFx0XHRsYXRsbmcgPSB0b0xhdExuZyhsYXRsbmcpO1xuICBcdFx0bGF0bG5ncy5wdXNoKGxhdGxuZyk7XG4gIFx0XHR0aGlzLl9ib3VuZHMuZXh0ZW5kKGxhdGxuZyk7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0X3NldExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR0aGlzLl9ib3VuZHMgPSBuZXcgTGF0TG5nQm91bmRzKCk7XG4gIFx0XHR0aGlzLl9sYXRsbmdzID0gdGhpcy5fY29udmVydExhdExuZ3MobGF0bG5ncyk7XG4gIFx0fSxcblxuICBcdF9kZWZhdWx0U2hhcGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBpc0ZsYXQodGhpcy5fbGF0bG5ncykgPyB0aGlzLl9sYXRsbmdzIDogdGhpcy5fbGF0bG5nc1swXTtcbiAgXHR9LFxuXG4gIFx0Ly8gcmVjdXJzaXZlbHkgY29udmVydCBsYXRsbmdzIGlucHV0IGludG8gYWN0dWFsIExhdExuZyBpbnN0YW5jZXM7IGNhbGN1bGF0ZSBib3VuZHMgYWxvbmcgdGhlIHdheVxuICBcdF9jb252ZXJ0TGF0TG5nczogZnVuY3Rpb24gKGxhdGxuZ3MpIHtcbiAgXHRcdHZhciByZXN1bHQgPSBbXSxcbiAgXHRcdCAgICBmbGF0ID0gaXNGbGF0KGxhdGxuZ3MpO1xuXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF0bG5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRpZiAoZmxhdCkge1xuICBcdFx0XHRcdHJlc3VsdFtpXSA9IHRvTGF0TG5nKGxhdGxuZ3NbaV0pO1xuICBcdFx0XHRcdHRoaXMuX2JvdW5kcy5leHRlbmQocmVzdWx0W2ldKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRyZXN1bHRbaV0gPSB0aGlzLl9jb252ZXJ0TGF0TG5ncyhsYXRsbmdzW2ldKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gcmVzdWx0O1xuICBcdH0sXG5cbiAgXHRfcHJvamVjdDogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHB4Qm91bmRzID0gbmV3IEJvdW5kcygpO1xuICBcdFx0dGhpcy5fcmluZ3MgPSBbXTtcbiAgXHRcdHRoaXMuX3Byb2plY3RMYXRsbmdzKHRoaXMuX2xhdGxuZ3MsIHRoaXMuX3JpbmdzLCBweEJvdW5kcyk7XG5cbiAgXHRcdGlmICh0aGlzLl9ib3VuZHMuaXNWYWxpZCgpICYmIHB4Qm91bmRzLmlzVmFsaWQoKSkge1xuICBcdFx0XHR0aGlzLl9yYXdQeEJvdW5kcyA9IHB4Qm91bmRzO1xuICBcdFx0XHR0aGlzLl91cGRhdGVCb3VuZHMoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUJvdW5kczogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHcgPSB0aGlzLl9jbGlja1RvbGVyYW5jZSgpLFxuICBcdFx0ICAgIHAgPSBuZXcgUG9pbnQodywgdyk7XG4gIFx0XHR0aGlzLl9weEJvdW5kcyA9IG5ldyBCb3VuZHMoW1xuICBcdFx0XHR0aGlzLl9yYXdQeEJvdW5kcy5taW4uc3VidHJhY3QocCksXG4gIFx0XHRcdHRoaXMuX3Jhd1B4Qm91bmRzLm1heC5hZGQocClcbiAgXHRcdF0pO1xuICBcdH0sXG5cbiAgXHQvLyByZWN1cnNpdmVseSB0dXJucyBsYXRsbmdzIGludG8gYSBzZXQgb2YgcmluZ3Mgd2l0aCBwcm9qZWN0ZWQgY29vcmRpbmF0ZXNcbiAgXHRfcHJvamVjdExhdGxuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzLCByZXN1bHQsIHByb2plY3RlZEJvdW5kcykge1xuICBcdFx0dmFyIGZsYXQgPSBsYXRsbmdzWzBdIGluc3RhbmNlb2YgTGF0TG5nLFxuICBcdFx0ICAgIGxlbiA9IGxhdGxuZ3MubGVuZ3RoLFxuICBcdFx0ICAgIGksIHJpbmc7XG5cbiAgXHRcdGlmIChmbGF0KSB7XG4gIFx0XHRcdHJpbmcgPSBbXTtcbiAgXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdFx0cmluZ1tpXSA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQobGF0bG5nc1tpXSk7XG4gIFx0XHRcdFx0cHJvamVjdGVkQm91bmRzLmV4dGVuZChyaW5nW2ldKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRyZXN1bHQucHVzaChyaW5nKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRcdHRoaXMuX3Byb2plY3RMYXRsbmdzKGxhdGxuZ3NbaV0sIHJlc3VsdCwgcHJvamVjdGVkQm91bmRzKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHQvLyBjbGlwIHBvbHlsaW5lIGJ5IHJlbmRlcmVyIGJvdW5kcyBzbyB0aGF0IHdlIGhhdmUgbGVzcyB0byByZW5kZXIgZm9yIHBlcmZvcm1hbmNlXG4gIFx0X2NsaXBQb2ludHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBib3VuZHMgPSB0aGlzLl9yZW5kZXJlci5fYm91bmRzO1xuXG4gIFx0XHR0aGlzLl9wYXJ0cyA9IFtdO1xuICBcdFx0aWYgKCF0aGlzLl9weEJvdW5kcyB8fCAhdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyhib3VuZHMpKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NsaXApIHtcbiAgXHRcdFx0dGhpcy5fcGFydHMgPSB0aGlzLl9yaW5ncztcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgcGFydHMgPSB0aGlzLl9wYXJ0cyxcbiAgXHRcdCAgICBpLCBqLCBrLCBsZW4sIGxlbjIsIHNlZ21lbnQsIHBvaW50cztcblxuICBcdFx0Zm9yIChpID0gMCwgayA9IDAsIGxlbiA9IHRoaXMuX3JpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdHBvaW50cyA9IHRoaXMuX3JpbmdzW2ldO1xuXG4gIFx0XHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwb2ludHMubGVuZ3RoOyBqIDwgbGVuMiAtIDE7IGorKykge1xuICBcdFx0XHRcdHNlZ21lbnQgPSBjbGlwU2VnbWVudChwb2ludHNbal0sIHBvaW50c1tqICsgMV0sIGJvdW5kcywgaiwgdHJ1ZSk7XG5cbiAgXHRcdFx0XHRpZiAoIXNlZ21lbnQpIHsgY29udGludWU7IH1cblxuICBcdFx0XHRcdHBhcnRzW2tdID0gcGFydHNba10gfHwgW107XG4gIFx0XHRcdFx0cGFydHNba10ucHVzaChzZWdtZW50WzBdKTtcblxuICBcdFx0XHRcdC8vIGlmIHNlZ21lbnQgZ29lcyBvdXQgb2Ygc2NyZWVuLCBvciBpdCdzIHRoZSBsYXN0IG9uZSwgaXQncyB0aGUgZW5kIG9mIHRoZSBsaW5lIHBhcnRcbiAgXHRcdFx0XHRpZiAoKHNlZ21lbnRbMV0gIT09IHBvaW50c1tqICsgMV0pIHx8IChqID09PSBsZW4yIC0gMikpIHtcbiAgXHRcdFx0XHRcdHBhcnRzW2tdLnB1c2goc2VnbWVudFsxXSk7XG4gIFx0XHRcdFx0XHRrKys7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdC8vIHNpbXBsaWZ5IGVhY2ggY2xpcHBlZCBwYXJ0IG9mIHRoZSBwb2x5bGluZSBmb3IgcGVyZm9ybWFuY2VcbiAgXHRfc2ltcGxpZnlQb2ludHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBwYXJ0cyA9IHRoaXMuX3BhcnRzLFxuICBcdFx0ICAgIHRvbGVyYW5jZSA9IHRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3I7XG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRwYXJ0c1tpXSA9IHNpbXBsaWZ5KHBhcnRzW2ldLCB0b2xlcmFuY2UpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cblxuICBcdFx0dGhpcy5fY2xpcFBvaW50cygpO1xuICBcdFx0dGhpcy5fc2ltcGxpZnlQb2ludHMoKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZVBhdGgoKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVQb2x5KHRoaXMpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwLCBjbG9zZWQpIHtcbiAgXHRcdHZhciBpLCBqLCBrLCBsZW4sIGxlbjIsIHBhcnQsXG4gIFx0XHQgICAgdyA9IHRoaXMuX2NsaWNrVG9sZXJhbmNlKCk7XG5cbiAgXHRcdGlmICghdGhpcy5fcHhCb3VuZHMgfHwgIXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHApKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIFx0XHQvLyBoaXQgZGV0ZWN0aW9uIGZvciBwb2x5bGluZXNcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IHRoaXMuX3BhcnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdHBhcnQgPSB0aGlzLl9wYXJ0c1tpXTtcblxuICBcdFx0XHRmb3IgKGogPSAwLCBsZW4yID0gcGFydC5sZW5ndGgsIGsgPSBsZW4yIC0gMTsgaiA8IGxlbjI7IGsgPSBqKyspIHtcbiAgXHRcdFx0XHRpZiAoIWNsb3NlZCAmJiAoaiA9PT0gMCkpIHsgY29udGludWU7IH1cblxuICBcdFx0XHRcdGlmIChwb2ludFRvU2VnbWVudERpc3RhbmNlKHAsIHBhcnRba10sIHBhcnRbal0pIDw9IHcpIHtcbiAgXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIGZhbHNlO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5wb2x5bGluZShsYXRsbmdzOiBMYXRMbmdbXSwgb3B0aW9ucz86IFBvbHlsaW5lIG9wdGlvbnMpXG4gIC8vIEluc3RhbnRpYXRlcyBhIHBvbHlsaW5lIG9iamVjdCBnaXZlbiBhbiBhcnJheSBvZiBnZW9ncmFwaGljYWwgcG9pbnRzIGFuZFxuICAvLyBvcHRpb25hbGx5IGFuIG9wdGlvbnMgb2JqZWN0LiBZb3UgY2FuIGNyZWF0ZSBhIGBQb2x5bGluZWAgb2JqZWN0IHdpdGhcbiAgLy8gbXVsdGlwbGUgc2VwYXJhdGUgbGluZXMgKGBNdWx0aVBvbHlsaW5lYCkgYnkgcGFzc2luZyBhbiBhcnJheSBvZiBhcnJheXNcbiAgLy8gb2YgZ2VvZ3JhcGhpYyBwb2ludHMuXG4gIGZ1bmN0aW9uIHBvbHlsaW5lKGxhdGxuZ3MsIG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IFBvbHlsaW5lKGxhdGxuZ3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUmV0cm9jb21wYXQuIEFsbG93IHBsdWdpbnMgdG8gc3VwcG9ydCBMZWFmbGV0IHZlcnNpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgMS4xLlxuICBQb2x5bGluZS5fZmxhdCA9IF9mbGF0O1xuXG4gIC8qXG4gICAqIEBjbGFzcyBQb2x5Z29uXG4gICAqIEBha2EgTC5Qb2x5Z29uXG4gICAqIEBpbmhlcml0cyBQb2x5bGluZVxuICAgKlxuICAgKiBBIGNsYXNzIGZvciBkcmF3aW5nIHBvbHlnb24gb3ZlcmxheXMgb24gYSBtYXAuIEV4dGVuZHMgYFBvbHlsaW5lYC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHBvaW50cyB5b3UgcGFzcyB3aGVuIGNyZWF0aW5nIGEgcG9seWdvbiBzaG91bGRuJ3QgaGF2ZSBhbiBhZGRpdGlvbmFsIGxhc3QgcG9pbnQgZXF1YWwgdG8gdGhlIGZpcnN0IG9uZSDigJQgaXQncyBiZXR0ZXIgdG8gZmlsdGVyIG91dCBzdWNoIHBvaW50cy5cbiAgICpcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gY3JlYXRlIGEgcmVkIHBvbHlnb24gZnJvbSBhbiBhcnJheSBvZiBMYXRMbmcgcG9pbnRzXG4gICAqIHZhciBsYXRsbmdzID0gW1szNywgLTEwOS4wNV0sWzQxLCAtMTA5LjAzXSxbNDEsIC0xMDIuMDVdLFszNywgLTEwMi4wNF1dO1xuICAgKlxuICAgKiB2YXIgcG9seWdvbiA9IEwucG9seWdvbihsYXRsbmdzLCB7Y29sb3I6ICdyZWQnfSkuYWRkVG8obWFwKTtcbiAgICpcbiAgICogLy8gem9vbSB0aGUgbWFwIHRvIHRoZSBwb2x5Z29uXG4gICAqIG1hcC5maXRCb3VuZHMocG9seWdvbi5nZXRCb3VuZHMoKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBhcnJheXMgb2YgbGF0bG5ncywgd2l0aCB0aGUgZmlyc3QgYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBvdXRlciBzaGFwZSBhbmQgdGhlIG90aGVyIGFycmF5cyByZXByZXNlbnRpbmcgaG9sZXMgaW4gdGhlIG91dGVyIHNoYXBlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbGF0bG5ncyA9IFtcbiAgICogICBbWzM3LCAtMTA5LjA1XSxbNDEsIC0xMDkuMDNdLFs0MSwgLTEwMi4wNV0sWzM3LCAtMTAyLjA0XV0sIC8vIG91dGVyIHJpbmdcbiAgICogICBbWzM3LjI5LCAtMTA4LjU4XSxbNDAuNzEsIC0xMDguNThdLFs0MC43MSwgLTEwMi41MF0sWzM3LjI5LCAtMTAyLjUwXV0gLy8gaG9sZVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCB5b3UgY2FuIHBhc3MgYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSB0byByZXByZXNlbnQgYSBNdWx0aVBvbHlnb24gc2hhcGUuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBsYXRsbmdzID0gW1xuICAgKiAgIFsgLy8gZmlyc3QgcG9seWdvblxuICAgKiAgICAgW1szNywgLTEwOS4wNV0sWzQxLCAtMTA5LjAzXSxbNDEsIC0xMDIuMDVdLFszNywgLTEwMi4wNF1dLCAvLyBvdXRlciByaW5nXG4gICAqICAgICBbWzM3LjI5LCAtMTA4LjU4XSxbNDAuNzEsIC0xMDguNThdLFs0MC43MSwgLTEwMi41MF0sWzM3LjI5LCAtMTAyLjUwXV0gLy8gaG9sZVxuICAgKiAgIF0sXG4gICAqICAgWyAvLyBzZWNvbmQgcG9seWdvblxuICAgKiAgICAgW1s0MSwgLTExMS4wM10sWzQ1LCAtMTExLjA0XSxbNDUsIC0xMDQuMDVdLFs0MSwgLTEwNC4wNV1dXG4gICAqICAgXVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG5cbiAgdmFyIFBvbHlnb24gPSBQb2x5bGluZS5leHRlbmQoe1xuXG4gIFx0b3B0aW9uczoge1xuICBcdFx0ZmlsbDogdHJ1ZVxuICBcdH0sXG5cbiAgXHRpc0VtcHR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gIXRoaXMuX2xhdGxuZ3MubGVuZ3RoIHx8ICF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aDtcbiAgXHR9LFxuXG4gIFx0Z2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB0aHJvd3MgZXJyb3Igd2hlbiBub3QgeWV0IGFkZGVkIHRvIG1hcCBhcyB0aGlzIGNlbnRlciBjYWxjdWxhdGlvbiByZXF1aXJlcyBwcm9qZWN0ZWQgY29vcmRpbmF0ZXNcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTXVzdCBhZGQgbGF5ZXIgdG8gbWFwIGJlZm9yZSB1c2luZyBnZXRDZW50ZXIoKScpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgaSwgaiwgcDEsIHAyLCBmLCBhcmVhLCB4LCB5LCBjZW50ZXIsXG4gIFx0XHQgICAgcG9pbnRzID0gdGhpcy5fcmluZ3NbMF0sXG4gIFx0XHQgICAgbGVuID0gcG9pbnRzLmxlbmd0aDtcblxuICBcdFx0aWYgKCFsZW4pIHsgcmV0dXJuIG51bGw7IH1cblxuICBcdFx0Ly8gcG9seWdvbiBjZW50cm9pZCBhbGdvcml0aG07IG9ubHkgdXNlcyB0aGUgZmlyc3QgcmluZyBpZiB0aGVyZSBhcmUgbXVsdGlwbGVcblxuICBcdFx0YXJlYSA9IHggPSB5ID0gMDtcblxuICBcdFx0Zm9yIChpID0gMCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgXHRcdFx0cDEgPSBwb2ludHNbaV07XG4gIFx0XHRcdHAyID0gcG9pbnRzW2pdO1xuXG4gIFx0XHRcdGYgPSBwMS55ICogcDIueCAtIHAyLnkgKiBwMS54O1xuICBcdFx0XHR4ICs9IChwMS54ICsgcDIueCkgKiBmO1xuICBcdFx0XHR5ICs9IChwMS55ICsgcDIueSkgKiBmO1xuICBcdFx0XHRhcmVhICs9IGYgKiAzO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoYXJlYSA9PT0gMCkge1xuICBcdFx0XHQvLyBQb2x5Z29uIGlzIHNvIHNtYWxsIHRoYXQgYWxsIHBvaW50cyBhcmUgb24gc2FtZSBwaXhlbC5cbiAgXHRcdFx0Y2VudGVyID0gcG9pbnRzWzBdO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0Y2VudGVyID0gW3ggLyBhcmVhLCB5IC8gYXJlYV07XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhjZW50ZXIpO1xuICBcdH0sXG5cbiAgXHRfY29udmVydExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR2YXIgcmVzdWx0ID0gUG9seWxpbmUucHJvdG90eXBlLl9jb252ZXJ0TGF0TG5ncy5jYWxsKHRoaXMsIGxhdGxuZ3MpLFxuICBcdFx0ICAgIGxlbiA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgXHRcdC8vIHJlbW92ZSBsYXN0IHBvaW50IGlmIGl0IGVxdWFscyBmaXJzdCBvbmVcbiAgXHRcdGlmIChsZW4gPj0gMiAmJiByZXN1bHRbMF0gaW5zdGFuY2VvZiBMYXRMbmcgJiYgcmVzdWx0WzBdLmVxdWFscyhyZXN1bHRbbGVuIC0gMV0pKSB7XG4gIFx0XHRcdHJlc3VsdC5wb3AoKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiByZXN1bHQ7XG4gIFx0fSxcblxuICBcdF9zZXRMYXRMbmdzOiBmdW5jdGlvbiAobGF0bG5ncykge1xuICBcdFx0UG9seWxpbmUucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcywgbGF0bG5ncyk7XG4gIFx0XHRpZiAoaXNGbGF0KHRoaXMuX2xhdGxuZ3MpKSB7XG4gIFx0XHRcdHRoaXMuX2xhdGxuZ3MgPSBbdGhpcy5fbGF0bG5nc107XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9kZWZhdWx0U2hhcGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBpc0ZsYXQodGhpcy5fbGF0bG5nc1swXSkgPyB0aGlzLl9sYXRsbmdzWzBdIDogdGhpcy5fbGF0bG5nc1swXVswXTtcbiAgXHR9LFxuXG4gIFx0X2NsaXBQb2ludHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIHBvbHlnb25zIG5lZWQgYSBkaWZmZXJlbnQgY2xpcHBpbmcgYWxnb3JpdGhtIHNvIHdlIHJlZGVmaW5lIHRoYXRcblxuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX3JlbmRlcmVyLl9ib3VuZHMsXG4gIFx0XHQgICAgdyA9IHRoaXMub3B0aW9ucy53ZWlnaHQsXG4gIFx0XHQgICAgcCA9IG5ldyBQb2ludCh3LCB3KTtcblxuICBcdFx0Ly8gaW5jcmVhc2UgY2xpcCBwYWRkaW5nIGJ5IHN0cm9rZSB3aWR0aCB0byBhdm9pZCBzdHJva2Ugb24gY2xpcCBlZGdlc1xuICBcdFx0Ym91bmRzID0gbmV3IEJvdW5kcyhib3VuZHMubWluLnN1YnRyYWN0KHApLCBib3VuZHMubWF4LmFkZChwKSk7XG5cbiAgXHRcdHRoaXMuX3BhcnRzID0gW107XG4gIFx0XHRpZiAoIXRoaXMuX3B4Qm91bmRzIHx8ICF0aGlzLl9weEJvdW5kcy5pbnRlcnNlY3RzKGJvdW5kcykpIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2xpcCkge1xuICBcdFx0XHR0aGlzLl9wYXJ0cyA9IHRoaXMuX3JpbmdzO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9yaW5ncy5sZW5ndGgsIGNsaXBwZWQ7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRjbGlwcGVkID0gY2xpcFBvbHlnb24odGhpcy5fcmluZ3NbaV0sIGJvdW5kcywgdHJ1ZSk7XG4gIFx0XHRcdGlmIChjbGlwcGVkLmxlbmd0aCkge1xuICBcdFx0XHRcdHRoaXMuX3BhcnRzLnB1c2goY2xpcHBlZCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVQb2x5KHRoaXMsIHRydWUpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XG4gIFx0XHR2YXIgaW5zaWRlID0gZmFsc2UsXG4gIFx0XHQgICAgcGFydCwgcDEsIHAyLCBpLCBqLCBrLCBsZW4sIGxlbjI7XG5cbiAgXHRcdGlmICghdGhpcy5fcHhCb3VuZHMgfHwgIXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHApKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIFx0XHQvLyByYXkgY2FzdGluZyBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBpZiBwb2ludCBpcyBpbiBwb2x5Z29uXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSB0aGlzLl9wYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRwYXJ0ID0gdGhpcy5fcGFydHNbaV07XG5cbiAgXHRcdFx0Zm9yIChqID0gMCwgbGVuMiA9IHBhcnQubGVuZ3RoLCBrID0gbGVuMiAtIDE7IGogPCBsZW4yOyBrID0gaisrKSB7XG4gIFx0XHRcdFx0cDEgPSBwYXJ0W2pdO1xuICBcdFx0XHRcdHAyID0gcGFydFtrXTtcblxuICBcdFx0XHRcdGlmICgoKHAxLnkgPiBwLnkpICE9PSAocDIueSA+IHAueSkpICYmIChwLnggPCAocDIueCAtIHAxLngpICogKHAueSAtIHAxLnkpIC8gKHAyLnkgLSBwMS55KSArIHAxLngpKSB7XG4gIFx0XHRcdFx0XHRpbnNpZGUgPSAhaW5zaWRlO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHQvLyBhbHNvIGNoZWNrIGlmIGl0J3Mgb24gcG9seWdvbiBzdHJva2VcbiAgXHRcdHJldHVybiBpbnNpZGUgfHwgUG9seWxpbmUucHJvdG90eXBlLl9jb250YWluc1BvaW50LmNhbGwodGhpcywgcCwgdHJ1ZSk7XG4gIFx0fVxuXG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5wb2x5Z29uKGxhdGxuZ3M6IExhdExuZ1tdLCBvcHRpb25zPzogUG9seWxpbmUgb3B0aW9ucylcbiAgZnVuY3Rpb24gcG9seWdvbihsYXRsbmdzLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBQb2x5Z29uKGxhdGxuZ3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgR2VvSlNPTlxyXG4gICAqIEBha2EgTC5HZW9KU09OXHJcbiAgICogQGluaGVyaXRzIEZlYXR1cmVHcm91cFxyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhIEdlb0pTT04gb2JqZWN0IG9yIGFuIGFycmF5IG9mIEdlb0pTT04gb2JqZWN0cy4gQWxsb3dzIHlvdSB0byBwYXJzZVxyXG4gICAqIEdlb0pTT04gZGF0YSBhbmQgZGlzcGxheSBpdCBvbiB0aGUgbWFwLiBFeHRlbmRzIGBGZWF0dXJlR3JvdXBgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogTC5nZW9KU09OKGRhdGEsIHtcclxuICAgKiBcdHN0eWxlOiBmdW5jdGlvbiAoZmVhdHVyZSkge1xyXG4gICAqIFx0XHRyZXR1cm4ge2NvbG9yOiBmZWF0dXJlLnByb3BlcnRpZXMuY29sb3J9O1xyXG4gICAqIFx0fVxyXG4gICAqIH0pLmJpbmRQb3B1cChmdW5jdGlvbiAobGF5ZXIpIHtcclxuICAgKiBcdHJldHVybiBsYXllci5mZWF0dXJlLnByb3BlcnRpZXMuZGVzY3JpcHRpb247XHJcbiAgICogfSkuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIEdlb0pTT04gPSBGZWF0dXJlR3JvdXAuZXh0ZW5kKHtcclxuXHJcbiAgXHQvKiBAc2VjdGlvblxyXG4gIFx0ICogQGFrYSBHZW9KU09OIG9wdGlvbnNcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHBvaW50VG9MYXllcjogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgZGVmaW5pbmcgaG93IEdlb0pTT04gcG9pbnRzIHNwYXduIExlYWZsZXQgbGF5ZXJzLiBJdCBpcyBpbnRlcm5hbGx5XHJcbiAgXHQgKiBjYWxsZWQgd2hlbiBkYXRhIGlzIGFkZGVkLCBwYXNzaW5nIHRoZSBHZW9KU09OIHBvaW50IGZlYXR1cmUgYW5kIGl0cyBgTGF0TG5nYC5cclxuICBcdCAqIFRoZSBkZWZhdWx0IGlzIHRvIHNwYXduIGEgZGVmYXVsdCBgTWFya2VyYDpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbihnZW9Kc29uUG9pbnQsIGxhdGxuZykge1xyXG4gIFx0ICogXHRyZXR1cm4gTC5tYXJrZXIobGF0bG5nKTtcclxuICBcdCAqIH1cclxuICBcdCAqIGBgYFxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc3R5bGU6IEZ1bmN0aW9uID0gKlxyXG4gIFx0ICogQSBgRnVuY3Rpb25gIGRlZmluaW5nIHRoZSBgUGF0aCBvcHRpb25zYCBmb3Igc3R5bGluZyBHZW9KU09OIGxpbmVzIGFuZCBwb2x5Z29ucyxcclxuICBcdCAqIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gZGF0YSBpcyBhZGRlZC5cclxuICBcdCAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRvIG5vdCBvdmVycmlkZSBhbnkgZGVmYXVsdHM6XHJcbiAgXHQgKiBgYGBqc1xyXG4gIFx0ICogZnVuY3Rpb24gKGdlb0pzb25GZWF0dXJlKSB7XHJcbiAgXHQgKiBcdHJldHVybiB7fVxyXG4gIFx0ICogfVxyXG4gIFx0ICogYGBgXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBvbkVhY2hGZWF0dXJlOiBGdW5jdGlvbiA9ICpcclxuICBcdCAqIEEgYEZ1bmN0aW9uYCB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggY3JlYXRlZCBgRmVhdHVyZWAsIGFmdGVyIGl0IGhhc1xyXG4gIFx0ICogYmVlbiBjcmVhdGVkIGFuZCBzdHlsZWQuIFVzZWZ1bCBmb3IgYXR0YWNoaW5nIGV2ZW50cyBhbmQgcG9wdXBzIHRvIGZlYXR1cmVzLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdG8gZG8gbm90aGluZyB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGxheWVyczpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF5ZXIpIHt9XHJcbiAgXHQgKiBgYGBcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGZpbHRlcjogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBhIGZlYXR1cmUgb3Igbm90LlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdG8gaW5jbHVkZSBhbGwgZmVhdHVyZXM6XHJcbiAgXHQgKiBgYGBqc1xyXG4gIFx0ICogZnVuY3Rpb24gKGdlb0pzb25GZWF0dXJlKSB7XHJcbiAgXHQgKiBcdHJldHVybiB0cnVlO1xyXG4gIFx0ICogfVxyXG4gIFx0ICogYGBgXHJcbiAgXHQgKiBOb3RlOiBkeW5hbWljYWxseSBjaGFuZ2luZyB0aGUgYGZpbHRlcmAgb3B0aW9uIHdpbGwgaGF2ZSBlZmZlY3Qgb25seSBvbiBuZXdseVxyXG4gIFx0ICogYWRkZWQgZGF0YS4gSXQgd2lsbCBfbm90XyByZS1ldmFsdWF0ZSBhbHJlYWR5IGluY2x1ZGVkIGZlYXR1cmVzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gY29vcmRzVG9MYXRMbmc6IEZ1bmN0aW9uID0gKlxyXG4gIFx0ICogQSBgRnVuY3Rpb25gIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjb252ZXJ0aW5nIEdlb0pTT04gY29vcmRpbmF0ZXMgdG8gYExhdExuZ2BzLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdGhlIGBjb29yZHNUb0xhdExuZ2Agc3RhdGljIG1ldGhvZC5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIG1hcmtlcnNJbmhlcml0T3B0aW9uczogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHQgKiBXaGV0aGVyIGRlZmF1bHQgTWFya2VycyBmb3IgXCJQb2ludFwiIHR5cGUgRmVhdHVyZXMgaW5oZXJpdCBmcm9tIGdyb3VwIG9wdGlvbnMuXHJcbiAgXHQgKi9cclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoZ2VvanNvbiwgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJzID0ge307XHJcblxyXG4gIFx0XHRpZiAoZ2VvanNvbikge1xyXG4gIFx0XHRcdHRoaXMuYWRkRGF0YShnZW9qc29uKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZERhdGEoIDxHZW9KU09OPiBkYXRhICk6IHRoaXNcclxuICBcdC8vIEFkZHMgYSBHZW9KU09OIG9iamVjdCB0byB0aGUgbGF5ZXIuXHJcbiAgXHRhZGREYXRhOiBmdW5jdGlvbiAoZ2VvanNvbikge1xyXG4gIFx0XHR2YXIgZmVhdHVyZXMgPSBpc0FycmF5KGdlb2pzb24pID8gZ2VvanNvbiA6IGdlb2pzb24uZmVhdHVyZXMsXHJcbiAgXHRcdCAgICBpLCBsZW4sIGZlYXR1cmU7XHJcblxyXG4gIFx0XHRpZiAoZmVhdHVyZXMpIHtcclxuICBcdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBmZWF0dXJlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0Ly8gb25seSBhZGQgdGhpcyBpZiBnZW9tZXRyeSBvciBnZW9tZXRyaWVzIGFyZSBzZXQgYW5kIG5vdCBudWxsXHJcbiAgXHRcdFx0XHRmZWF0dXJlID0gZmVhdHVyZXNbaV07XHJcbiAgXHRcdFx0XHRpZiAoZmVhdHVyZS5nZW9tZXRyaWVzIHx8IGZlYXR1cmUuZ2VvbWV0cnkgfHwgZmVhdHVyZS5mZWF0dXJlcyB8fCBmZWF0dXJlLmNvb3JkaW5hdGVzKSB7XHJcbiAgXHRcdFx0XHRcdHRoaXMuYWRkRGF0YShmZWF0dXJlKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMuZmlsdGVyICYmICFvcHRpb25zLmZpbHRlcihnZW9qc29uKSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0dmFyIGxheWVyID0gZ2VvbWV0cnlUb0xheWVyKGdlb2pzb24sIG9wdGlvbnMpO1xyXG4gIFx0XHRpZiAoIWxheWVyKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuICBcdFx0bGF5ZXIuZmVhdHVyZSA9IGFzRmVhdHVyZShnZW9qc29uKTtcclxuXHJcbiAgXHRcdGxheWVyLmRlZmF1bHRPcHRpb25zID0gbGF5ZXIub3B0aW9ucztcclxuICBcdFx0dGhpcy5yZXNldFN0eWxlKGxheWVyKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm9uRWFjaEZlYXR1cmUpIHtcclxuICBcdFx0XHRvcHRpb25zLm9uRWFjaEZlYXR1cmUoZ2VvanNvbiwgbGF5ZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihsYXllcik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVzZXRTdHlsZSggPFBhdGg+IGxheWVyPyApOiB0aGlzXHJcbiAgXHQvLyBSZXNldHMgdGhlIGdpdmVuIHZlY3RvciBsYXllcidzIHN0eWxlIHRvIHRoZSBvcmlnaW5hbCBHZW9KU09OIHN0eWxlLCB1c2VmdWwgZm9yIHJlc2V0dGluZyBzdHlsZSBhZnRlciBob3ZlciBldmVudHMuXHJcbiAgXHQvLyBJZiBgbGF5ZXJgIGlzIG9taXR0ZWQsIHRoZSBzdHlsZSBvZiBhbGwgZmVhdHVyZXMgaW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgcmVzZXQuXHJcbiAgXHRyZXNldFN0eWxlOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0aWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZXNldFN0eWxlLCB0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0XHQvLyByZXNldCBhbnkgY3VzdG9tIHN0eWxlc1xyXG4gIFx0XHRsYXllci5vcHRpb25zID0gZXh0ZW5kKHt9LCBsYXllci5kZWZhdWx0T3B0aW9ucyk7XHJcbiAgXHRcdHRoaXMuX3NldExheWVyU3R5bGUobGF5ZXIsIHRoaXMub3B0aW9ucy5zdHlsZSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFN0eWxlKCA8RnVuY3Rpb24+IHN0eWxlICk6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgc3R5bGVzIG9mIEdlb0pTT04gdmVjdG9yIGxheWVycyB3aXRoIHRoZSBnaXZlbiBzdHlsZSBmdW5jdGlvbi5cclxuICBcdHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdHRoaXMuX3NldExheWVyU3R5bGUobGF5ZXIsIHN0eWxlKTtcclxuICBcdFx0fSwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zZXRMYXllclN0eWxlOiBmdW5jdGlvbiAobGF5ZXIsIHN0eWxlKSB7XHJcbiAgXHRcdGlmIChsYXllci5zZXRTdHlsZSkge1xyXG4gIFx0XHRcdGlmICh0eXBlb2Ygc3R5bGUgPT09ICdmdW5jdGlvbicpIHtcclxuICBcdFx0XHRcdHN0eWxlID0gc3R5bGUobGF5ZXIuZmVhdHVyZSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGxheWVyLnNldFN0eWxlKHN0eWxlKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAc2VjdGlvblxyXG4gIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRob3V0IGluc3RhbnRpYXRpbmcgTC5HZW9KU09OOlxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2VvbWV0cnlUb0xheWVyKGZlYXR1cmVEYXRhOiBPYmplY3QsIG9wdGlvbnM/OiBHZW9KU09OIG9wdGlvbnMpOiBMYXllclxyXG4gIC8vIENyZWF0ZXMgYSBgTGF5ZXJgIGZyb20gYSBnaXZlbiBHZW9KU09OIGZlYXR1cmUuIENhbiB1c2UgYSBjdXN0b21cclxuICAvLyBbYHBvaW50VG9MYXllcmBdKCNnZW9qc29uLXBvaW50dG9sYXllcikgYW5kL29yIFtgY29vcmRzVG9MYXRMbmdgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZylcclxuICAvLyBmdW5jdGlvbnMgaWYgcHJvdmlkZWQgYXMgb3B0aW9ucy5cclxuICBmdW5jdGlvbiBnZW9tZXRyeVRvTGF5ZXIoZ2VvanNvbiwgb3B0aW9ucykge1xyXG5cclxuICBcdHZhciBnZW9tZXRyeSA9IGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmUnID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb24sXHJcbiAgXHQgICAgY29vcmRzID0gZ2VvbWV0cnkgPyBnZW9tZXRyeS5jb29yZGluYXRlcyA6IG51bGwsXHJcbiAgXHQgICAgbGF5ZXJzID0gW10sXHJcbiAgXHQgICAgcG9pbnRUb0xheWVyID0gb3B0aW9ucyAmJiBvcHRpb25zLnBvaW50VG9MYXllcixcclxuICBcdCAgICBfY29vcmRzVG9MYXRMbmcgPSBvcHRpb25zICYmIG9wdGlvbnMuY29vcmRzVG9MYXRMbmcgfHwgY29vcmRzVG9MYXRMbmcsXHJcbiAgXHQgICAgbGF0bG5nLCBsYXRsbmdzLCBpLCBsZW47XHJcblxyXG4gIFx0aWYgKCFjb29yZHMgJiYgIWdlb21ldHJ5KSB7XHJcbiAgXHRcdHJldHVybiBudWxsO1xyXG4gIFx0fVxyXG5cclxuICBcdHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xyXG4gIFx0Y2FzZSAnUG9pbnQnOlxyXG4gIFx0XHRsYXRsbmcgPSBfY29vcmRzVG9MYXRMbmcoY29vcmRzKTtcclxuICBcdFx0cmV0dXJuIF9wb2ludFRvTGF5ZXIocG9pbnRUb0xheWVyLCBnZW9qc29uLCBsYXRsbmcsIG9wdGlvbnMpO1xyXG5cclxuICBcdGNhc2UgJ011bHRpUG9pbnQnOlxyXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb29yZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRsYXRsbmcgPSBfY29vcmRzVG9MYXRMbmcoY29vcmRzW2ldKTtcclxuICBcdFx0XHRsYXllcnMucHVzaChfcG9pbnRUb0xheWVyKHBvaW50VG9MYXllciwgZ2VvanNvbiwgbGF0bG5nLCBvcHRpb25zKSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIG5ldyBGZWF0dXJlR3JvdXAobGF5ZXJzKTtcclxuXHJcbiAgXHRjYXNlICdMaW5lU3RyaW5nJzpcclxuICBcdGNhc2UgJ011bHRpTGluZVN0cmluZyc6XHJcbiAgXHRcdGxhdGxuZ3MgPSBjb29yZHNUb0xhdExuZ3MoY29vcmRzLCBnZW9tZXRyeS50eXBlID09PSAnTGluZVN0cmluZycgPyAwIDogMSwgX2Nvb3Jkc1RvTGF0TG5nKTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2x5bGluZShsYXRsbmdzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRjYXNlICdQb2x5Z29uJzpcclxuICBcdGNhc2UgJ011bHRpUG9seWdvbic6XHJcbiAgXHRcdGxhdGxuZ3MgPSBjb29yZHNUb0xhdExuZ3MoY29vcmRzLCBnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicgPyAxIDogMiwgX2Nvb3Jkc1RvTGF0TG5nKTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2x5Z29uKGxhdGxuZ3MsIG9wdGlvbnMpO1xyXG5cclxuICBcdGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XHJcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHR2YXIgbGF5ZXIgPSBnZW9tZXRyeVRvTGF5ZXIoe1xyXG4gIFx0XHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5Lmdlb21ldHJpZXNbaV0sXHJcbiAgXHRcdFx0XHR0eXBlOiAnRmVhdHVyZScsXHJcbiAgXHRcdFx0XHRwcm9wZXJ0aWVzOiBnZW9qc29uLnByb3BlcnRpZXNcclxuICBcdFx0XHR9LCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdFx0aWYgKGxheWVyKSB7XHJcbiAgXHRcdFx0XHRsYXllcnMucHVzaChsYXllcik7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBuZXcgRmVhdHVyZUdyb3VwKGxheWVycyk7XHJcblxyXG4gIFx0ZGVmYXVsdDpcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEdlb0pTT04gb2JqZWN0LicpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gX3BvaW50VG9MYXllcihwb2ludFRvTGF5ZXJGbiwgZ2VvanNvbiwgbGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gcG9pbnRUb0xheWVyRm4gP1xyXG4gIFx0XHRwb2ludFRvTGF5ZXJGbihnZW9qc29uLCBsYXRsbmcpIDpcclxuICBcdFx0bmV3IE1hcmtlcihsYXRsbmcsIG9wdGlvbnMgJiYgb3B0aW9ucy5tYXJrZXJzSW5oZXJpdE9wdGlvbnMgJiYgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY29vcmRzVG9MYXRMbmcoY29vcmRzOiBBcnJheSk6IExhdExuZ1xyXG4gIC8vIENyZWF0ZXMgYSBgTGF0TG5nYCBvYmplY3QgZnJvbSBhbiBhcnJheSBvZiAyIG51bWJlcnMgKGxvbmdpdHVkZSwgbGF0aXR1ZGUpXHJcbiAgLy8gb3IgMyBudW1iZXJzIChsb25naXR1ZGUsIGxhdGl0dWRlLCBhbHRpdHVkZSkgdXNlZCBpbiBHZW9KU09OIGZvciBwb2ludHMuXHJcbiAgZnVuY3Rpb24gY29vcmRzVG9MYXRMbmcoY29vcmRzKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExhdExuZyhjb29yZHNbMV0sIGNvb3Jkc1swXSwgY29vcmRzWzJdKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjb29yZHNUb0xhdExuZ3MoY29vcmRzOiBBcnJheSwgbGV2ZWxzRGVlcD86IE51bWJlciwgY29vcmRzVG9MYXRMbmc/OiBGdW5jdGlvbik6IEFycmF5XHJcbiAgLy8gQ3JlYXRlcyBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgb2YgYExhdExuZ2BzIGZyb20gYSBHZW9KU09OIGNvb3JkaW5hdGVzIGFycmF5LlxyXG4gIC8vIGBsZXZlbHNEZWVwYCBzcGVjaWZpZXMgdGhlIG5lc3RpbmcgbGV2ZWwgKDAgaXMgZm9yIGFuIGFycmF5IG9mIHBvaW50cywgMSBmb3IgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIHBvaW50cywgZXRjLiwgMCBieSBkZWZhdWx0KS5cclxuICAvLyBDYW4gdXNlIGEgY3VzdG9tIFtgY29vcmRzVG9MYXRMbmdgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZykgZnVuY3Rpb24uXHJcbiAgZnVuY3Rpb24gY29vcmRzVG9MYXRMbmdzKGNvb3JkcywgbGV2ZWxzRGVlcCwgX2Nvb3Jkc1RvTGF0TG5nKSB7XHJcbiAgXHR2YXIgbGF0bG5ncyA9IFtdO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBjb29yZHMubGVuZ3RoLCBsYXRsbmc7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRsYXRsbmcgPSBsZXZlbHNEZWVwID9cclxuICBcdFx0XHRjb29yZHNUb0xhdExuZ3MoY29vcmRzW2ldLCBsZXZlbHNEZWVwIC0gMSwgX2Nvb3Jkc1RvTGF0TG5nKSA6XHJcbiAgXHRcdFx0KF9jb29yZHNUb0xhdExuZyB8fCBjb29yZHNUb0xhdExuZykoY29vcmRzW2ldKTtcclxuXHJcbiAgXHRcdGxhdGxuZ3MucHVzaChsYXRsbmcpO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBsYXRsbmdzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGxhdExuZ1RvQ29vcmRzKGxhdGxuZzogTGF0TG5nLCBwcmVjaXNpb24/OiBOdW1iZXIpOiBBcnJheVxyXG4gIC8vIFJldmVyc2Ugb2YgW2Bjb29yZHNUb0xhdExuZ2BdKCNnZW9qc29uLWNvb3Jkc3RvbGF0bG5nKVxyXG4gIGZ1bmN0aW9uIGxhdExuZ1RvQ29vcmRzKGxhdGxuZywgcHJlY2lzaW9uKSB7XHJcbiAgXHRwcmVjaXNpb24gPSB0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyA/IHByZWNpc2lvbiA6IDY7XHJcbiAgXHRyZXR1cm4gbGF0bG5nLmFsdCAhPT0gdW5kZWZpbmVkID9cclxuICBcdFx0W2Zvcm1hdE51bShsYXRsbmcubG5nLCBwcmVjaXNpb24pLCBmb3JtYXROdW0obGF0bG5nLmxhdCwgcHJlY2lzaW9uKSwgZm9ybWF0TnVtKGxhdGxuZy5hbHQsIHByZWNpc2lvbildIDpcclxuICBcdFx0W2Zvcm1hdE51bShsYXRsbmcubG5nLCBwcmVjaXNpb24pLCBmb3JtYXROdW0obGF0bG5nLmxhdCwgcHJlY2lzaW9uKV07XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gbGF0TG5nc1RvQ29vcmRzKGxhdGxuZ3M6IEFycmF5LCBsZXZlbHNEZWVwPzogTnVtYmVyLCBjbG9zZWQ/OiBCb29sZWFuKTogQXJyYXlcclxuICAvLyBSZXZlcnNlIG9mIFtgY29vcmRzVG9MYXRMbmdzYF0oI2dlb2pzb24tY29vcmRzdG9sYXRsbmdzKVxyXG4gIC8vIGBjbG9zZWRgIGRldGVybWluZXMgd2hldGhlciB0aGUgZmlyc3QgcG9pbnQgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IHRvIGNsb3NlIHRoZSBmZWF0dXJlLCBvbmx5IHVzZWQgd2hlbiBgbGV2ZWxzRGVlcGAgaXMgMC4gRmFsc2UgYnkgZGVmYXVsdC5cclxuICBmdW5jdGlvbiBsYXRMbmdzVG9Db29yZHMobGF0bG5ncywgbGV2ZWxzRGVlcCwgY2xvc2VkLCBwcmVjaXNpb24pIHtcclxuICBcdHZhciBjb29yZHMgPSBbXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF0bG5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRjb29yZHMucHVzaChsZXZlbHNEZWVwID9cclxuICBcdFx0XHRsYXRMbmdzVG9Db29yZHMobGF0bG5nc1tpXSwgbGV2ZWxzRGVlcCAtIDEsIGNsb3NlZCwgcHJlY2lzaW9uKSA6XHJcbiAgXHRcdFx0bGF0TG5nVG9Db29yZHMobGF0bG5nc1tpXSwgcHJlY2lzaW9uKSk7XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKCFsZXZlbHNEZWVwICYmIGNsb3NlZCkge1xyXG4gIFx0XHRjb29yZHMucHVzaChjb29yZHNbMF0pO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBjb29yZHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRGZWF0dXJlKGxheWVyLCBuZXdHZW9tZXRyeSkge1xyXG4gIFx0cmV0dXJuIGxheWVyLmZlYXR1cmUgP1xyXG4gIFx0XHRleHRlbmQoe30sIGxheWVyLmZlYXR1cmUsIHtnZW9tZXRyeTogbmV3R2VvbWV0cnl9KSA6XHJcbiAgXHRcdGFzRmVhdHVyZShuZXdHZW9tZXRyeSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gYXNGZWF0dXJlKGdlb2pzb246IE9iamVjdCk6IE9iamVjdFxyXG4gIC8vIE5vcm1hbGl6ZSBHZW9KU09OIGdlb21ldHJpZXMvZmVhdHVyZXMgaW50byBHZW9KU09OIGZlYXR1cmVzLlxyXG4gIGZ1bmN0aW9uIGFzRmVhdHVyZShnZW9qc29uKSB7XHJcbiAgXHRpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScgfHwgZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XHJcbiAgXHRcdHJldHVybiBnZW9qc29uO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiB7XHJcbiAgXHRcdHR5cGU6ICdGZWF0dXJlJyxcclxuICBcdFx0cHJvcGVydGllczoge30sXHJcbiAgXHRcdGdlb21ldHJ5OiBnZW9qc29uXHJcbiAgXHR9O1xyXG4gIH1cclxuXHJcbiAgdmFyIFBvaW50VG9HZW9KU09OID0ge1xyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHJldHVybiBnZXRGZWF0dXJlKHRoaXMsIHtcclxuICBcdFx0XHR0eXBlOiAnUG9pbnQnLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBsYXRMbmdUb0Nvb3Jkcyh0aGlzLmdldExhdExuZygpLCBwcmVjaXNpb24pXHJcbiAgXHRcdH0pO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgTWFya2VyXHJcbiAgLy8gQHNlY3Rpb24gT3RoZXIgbWV0aG9kc1xyXG4gIC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcik6IE9iamVjdFxyXG4gIC8vIGBwcmVjaXNpb25gIGlzIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgZm9yIGNvb3JkaW5hdGVzLlxyXG4gIC8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDYgcGxhY2VzLlxyXG4gIC8vIFJldHVybnMgYSBbYEdlb0pTT05gXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXJrZXIgKGFzIGEgR2VvSlNPTiBgUG9pbnRgIEZlYXR1cmUpLlxyXG4gIE1hcmtlci5pbmNsdWRlKFBvaW50VG9HZW9KU09OKTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBDaXJjbGVNYXJrZXJcclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXIpOiBPYmplY3RcclxuICAvLyBgcHJlY2lzaW9uYCBpcyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBjb29yZGluYXRlcy5cclxuICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2lyY2xlIG1hcmtlciAoYXMgYSBHZW9KU09OIGBQb2ludGAgRmVhdHVyZSkuXHJcbiAgQ2lyY2xlLmluY2x1ZGUoUG9pbnRUb0dlb0pTT04pO1xyXG4gIENpcmNsZU1hcmtlci5pbmNsdWRlKFBvaW50VG9HZW9KU09OKTtcclxuXHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgUG9seWxpbmVcclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXIpOiBPYmplY3RcclxuICAvLyBgcHJlY2lzaW9uYCBpcyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBjb29yZGluYXRlcy5cclxuICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9seWxpbmUgKGFzIGEgR2VvSlNPTiBgTGluZVN0cmluZ2Agb3IgYE11bHRpTGluZVN0cmluZ2AgRmVhdHVyZSkuXHJcbiAgUG9seWxpbmUuaW5jbHVkZSh7XHJcbiAgXHR0b0dlb0pTT046IGZ1bmN0aW9uIChwcmVjaXNpb24pIHtcclxuICBcdFx0dmFyIG11bHRpID0gIWlzRmxhdCh0aGlzLl9sYXRsbmdzKTtcclxuXHJcbiAgXHRcdHZhciBjb29yZHMgPSBsYXRMbmdzVG9Db29yZHModGhpcy5fbGF0bG5ncywgbXVsdGkgPyAxIDogMCwgZmFsc2UsIHByZWNpc2lvbik7XHJcblxyXG4gIFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0dHlwZTogKG11bHRpID8gJ011bHRpJyA6ICcnKSArICdMaW5lU3RyaW5nJyxcclxuICBcdFx0XHRjb29yZGluYXRlczogY29vcmRzXHJcbiAgXHRcdH0pO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIFBvbHlnb25cclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXIpOiBPYmplY3RcclxuICAvLyBgcHJlY2lzaW9uYCBpcyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBjb29yZGluYXRlcy5cclxuICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9seWdvbiAoYXMgYSBHZW9KU09OIGBQb2x5Z29uYCBvciBgTXVsdGlQb2x5Z29uYCBGZWF0dXJlKS5cclxuICBQb2x5Z29uLmluY2x1ZGUoe1xyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHZhciBob2xlcyA9ICFpc0ZsYXQodGhpcy5fbGF0bG5ncyksXHJcbiAgXHRcdCAgICBtdWx0aSA9IGhvbGVzICYmICFpc0ZsYXQodGhpcy5fbGF0bG5nc1swXSk7XHJcblxyXG4gIFx0XHR2YXIgY29vcmRzID0gbGF0TG5nc1RvQ29vcmRzKHRoaXMuX2xhdGxuZ3MsIG11bHRpID8gMiA6IGhvbGVzID8gMSA6IDAsIHRydWUsIHByZWNpc2lvbik7XHJcblxyXG4gIFx0XHRpZiAoIWhvbGVzKSB7XHJcbiAgXHRcdFx0Y29vcmRzID0gW2Nvb3Jkc107XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBnZXRGZWF0dXJlKHRoaXMsIHtcclxuICBcdFx0XHR0eXBlOiAobXVsdGkgPyAnTXVsdGknIDogJycpICsgJ1BvbHlnb24nLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBjb29yZHNcclxuICBcdFx0fSk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAbmFtZXNwYWNlIExheWVyR3JvdXBcclxuICBMYXllckdyb3VwLmluY2x1ZGUoe1xyXG4gIFx0dG9NdWx0aVBvaW50OiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHZhciBjb29yZHMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdGNvb3Jkcy5wdXNoKGxheWVyLnRvR2VvSlNPTihwcmVjaXNpb24pLmdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuICBcdFx0fSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0dHlwZTogJ011bHRpUG9pbnQnLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBjb29yZHNcclxuICBcdFx0fSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcik6IE9iamVjdFxyXG4gIFx0Ly8gYHByZWNpc2lvbmAgaXMgdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBmb3IgY29vcmRpbmF0ZXMuXHJcbiAgXHQvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICBcdC8vIFJldHVybnMgYSBbYEdlb0pTT05gXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsYXllciBncm91cCAoYXMgYSBHZW9KU09OIGBGZWF0dXJlQ29sbGVjdGlvbmAsIGBHZW9tZXRyeUNvbGxlY3Rpb25gLCBvciBgTXVsdGlQb2ludGApLlxyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcblxyXG4gIFx0XHR2YXIgdHlwZSA9IHRoaXMuZmVhdHVyZSAmJiB0aGlzLmZlYXR1cmUuZ2VvbWV0cnkgJiYgdGhpcy5mZWF0dXJlLmdlb21ldHJ5LnR5cGU7XHJcblxyXG4gIFx0XHRpZiAodHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXMudG9NdWx0aVBvaW50KHByZWNpc2lvbik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IHR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nLFxyXG4gIFx0XHQgICAganNvbnMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdGlmIChsYXllci50b0dlb0pTT04pIHtcclxuICBcdFx0XHRcdHZhciBqc29uID0gbGF5ZXIudG9HZW9KU09OKHByZWNpc2lvbik7XHJcbiAgXHRcdFx0XHRpZiAoaXNHZW9tZXRyeUNvbGxlY3Rpb24pIHtcclxuICBcdFx0XHRcdFx0anNvbnMucHVzaChqc29uLmdlb21ldHJ5KTtcclxuICBcdFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRcdHZhciBmZWF0dXJlID0gYXNGZWF0dXJlKGpzb24pO1xyXG4gIFx0XHRcdFx0XHQvLyBTcXVhc2ggbmVzdGVkIGZlYXR1cmUgY29sbGVjdGlvbnNcclxuICBcdFx0XHRcdFx0aWYgKGZlYXR1cmUudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xyXG4gIFx0XHRcdFx0XHRcdGpzb25zLnB1c2guYXBwbHkoanNvbnMsIGZlYXR1cmUuZmVhdHVyZXMpO1xyXG4gIFx0XHRcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0XHRcdGpzb25zLnB1c2goZmVhdHVyZSk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKGlzR2VvbWV0cnlDb2xsZWN0aW9uKSB7XHJcbiAgXHRcdFx0cmV0dXJuIGdldEZlYXR1cmUodGhpcywge1xyXG4gIFx0XHRcdFx0Z2VvbWV0cmllczoganNvbnMsXHJcbiAgXHRcdFx0XHR0eXBlOiAnR2VvbWV0cnlDb2xsZWN0aW9uJ1xyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXHJcbiAgXHRcdFx0ZmVhdHVyZXM6IGpzb25zXHJcbiAgXHRcdH07XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgR2VvSlNPTlxyXG4gIC8vIEBmYWN0b3J5IEwuZ2VvSlNPTihnZW9qc29uPzogT2JqZWN0LCBvcHRpb25zPzogR2VvSlNPTiBvcHRpb25zKVxyXG4gIC8vIENyZWF0ZXMgYSBHZW9KU09OIGxheWVyLiBPcHRpb25hbGx5IGFjY2VwdHMgYW4gb2JqZWN0IGluXHJcbiAgLy8gW0dlb0pTT04gZm9ybWF0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NikgdG8gZGlzcGxheSBvbiB0aGUgbWFwXHJcbiAgLy8gKHlvdSBjYW4gYWx0ZXJuYXRpdmVseSBhZGQgaXQgbGF0ZXIgd2l0aCBgYWRkRGF0YWAgbWV0aG9kKSBhbmQgYW4gYG9wdGlvbnNgIG9iamVjdC5cclxuICBmdW5jdGlvbiBnZW9KU09OKGdlb2pzb24sIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgR2VvSlNPTihnZW9qc29uLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXHJcbiAgdmFyIGdlb0pzb24gPSBnZW9KU09OO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIEltYWdlT3ZlcmxheVxyXG4gICAqIEBha2EgTC5JbWFnZU92ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgSW50ZXJhY3RpdmUgbGF5ZXJcclxuICAgKlxyXG4gICAqIFVzZWQgdG8gbG9hZCBhbmQgZGlzcGxheSBhIHNpbmdsZSBpbWFnZSBvdmVyIHNwZWNpZmljIGJvdW5kcyBvZiB0aGUgbWFwLiBFeHRlbmRzIGBMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgaW1hZ2VVcmwgPSAnaHR0cDovL3d3dy5saWIudXRleGFzLmVkdS9tYXBzL2hpc3RvcmljYWwvbmV3YXJrX25qXzE5MjIuanBnJyxcclxuICAgKiBcdGltYWdlQm91bmRzID0gW1s0MC43MTIyMTYsIC03NC4yMjY1NV0sIFs0MC43NzM5NDEsIC03NC4xMjU0NF1dO1xyXG4gICAqIEwuaW1hZ2VPdmVybGF5KGltYWdlVXJsLCBpbWFnZUJvdW5kcykuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIEltYWdlT3ZlcmxheSA9IExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgSW1hZ2VPdmVybGF5IG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBvcGFjaXR5OiBOdW1iZXIgPSAxLjBcclxuICBcdFx0Ly8gVGhlIG9wYWNpdHkgb2YgdGhlIGltYWdlIG92ZXJsYXkuXHJcbiAgXHRcdG9wYWNpdHk6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGFsdDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVGV4dCBmb3IgdGhlIGBhbHRgIGF0dHJpYnV0ZSBvZiB0aGUgaW1hZ2UgKHVzZWZ1bCBmb3IgYWNjZXNzaWJpbGl0eSkuXHJcbiAgXHRcdGFsdDogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGludGVyYWN0aXZlOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgaW1hZ2Ugb3ZlcmxheSB3aWxsIGVtaXQgW21vdXNlIGV2ZW50c10oI2ludGVyYWN0aXZlLWxheWVyKSB3aGVuIGNsaWNrZWQgb3IgaG92ZXJlZC5cclxuICBcdFx0aW50ZXJhY3RpdmU6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjcm9zc09yaWdpbjogQm9vbGVhbnxTdHJpbmcgPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBjcm9zc09yaWdpbiBhdHRyaWJ1dGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgaW1hZ2UuXHJcbiAgXHRcdC8vIElmIGEgU3RyaW5nIGlzIHByb3ZpZGVkLCB0aGUgaW1hZ2Ugd2lsbCBoYXZlIGl0cyBjcm9zc09yaWdpbiBhdHRyaWJ1dGUgc2V0IHRvIHRoZSBTdHJpbmcgcHJvdmlkZWQuIFRoaXMgaXMgbmVlZGVkIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBpbWFnZSBwaXhlbCBkYXRhLlxyXG4gIFx0XHQvLyBSZWZlciB0byBbQ09SUyBTZXR0aW5nc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciB2YWxpZCBTdHJpbmcgdmFsdWVzLlxyXG4gIFx0XHRjcm9zc09yaWdpbjogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGVycm9yT3ZlcmxheVVybDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVVJMIHRvIHRoZSBvdmVybGF5IGltYWdlIHRvIHNob3cgaW4gcGxhY2Ugb2YgdGhlIG92ZXJsYXkgdGhhdCBmYWlsZWQgdG8gbG9hZC5cclxuICBcdFx0ZXJyb3JPdmVybGF5VXJsOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gekluZGV4OiBOdW1iZXIgPSAxXHJcbiAgXHRcdC8vIFRoZSBleHBsaWNpdCBbekluZGV4XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1MvQ1NTX1Bvc2l0aW9uaW5nL1VuZGVyc3RhbmRpbmdfel9pbmRleCkgb2YgdGhlIG92ZXJsYXkgbGF5ZXIuXHJcbiAgXHRcdHpJbmRleDogMSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xhc3NOYW1lOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBBIGN1c3RvbSBjbGFzcyBuYW1lIHRvIGFzc2lnbiB0byB0aGUgaW1hZ2UuIEVtcHR5IGJ5IGRlZmF1bHQuXHJcbiAgXHRcdGNsYXNzTmFtZTogJydcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgYm91bmRzLCBvcHRpb25zKSB7IC8vIChTdHJpbmcsIExhdExuZ0JvdW5kcywgT2JqZWN0KVxyXG4gIFx0XHR0aGlzLl91cmwgPSB1cmw7XHJcbiAgXHRcdHRoaXMuX2JvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2ltYWdlKSB7XHJcbiAgXHRcdFx0dGhpcy5faW5pdEltYWdlKCk7XHJcblxyXG4gIFx0XHRcdGlmICh0aGlzLm9wdGlvbnMub3BhY2l0eSA8IDEpIHtcclxuICBcdFx0XHRcdHRoaXMuX3VwZGF0ZU9wYWNpdHkoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9pbWFnZSwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcclxuICBcdFx0XHR0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHR0aGlzLl9yZXNldCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZW1vdmUodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmludGVyYWN0aXZlKSB7XHJcbiAgXHRcdFx0dGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRPcGFjaXR5KG9wYWNpdHk6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIG9wYWNpdHkgb2YgdGhlIG92ZXJsYXkuXHJcbiAgXHRzZXRPcGFjaXR5OiBmdW5jdGlvbiAob3BhY2l0eSkge1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMub3BhY2l0eSA9IG9wYWNpdHk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5faW1hZ2UpIHtcclxuICBcdFx0XHR0aGlzLl91cGRhdGVPcGFjaXR5KCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGVPcHRzKSB7XHJcbiAgXHRcdGlmIChzdHlsZU9wdHMub3BhY2l0eSkge1xyXG4gIFx0XHRcdHRoaXMuc2V0T3BhY2l0eShzdHlsZU9wdHMub3BhY2l0eSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0Zyb250KCk6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgdG8gdGhlIHRvcCBvZiBhbGwgb3ZlcmxheXMuXHJcbiAgXHRicmluZ1RvRnJvbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRvRnJvbnQodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9CYWNrKCk6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgdG8gdGhlIGJvdHRvbSBvZiBhbGwgb3ZlcmxheXMuXHJcbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dG9CYWNrKHRoaXMuX2ltYWdlKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRVcmwodXJsOiBTdHJpbmcpOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBVUkwgb2YgdGhlIGltYWdlLlxyXG4gIFx0c2V0VXJsOiBmdW5jdGlvbiAodXJsKSB7XHJcbiAgXHRcdHRoaXMuX3VybCA9IHVybDtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pbWFnZSkge1xyXG4gIFx0XHRcdHRoaXMuX2ltYWdlLnNyYyA9IHVybDtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRCb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMpOiB0aGlzXHJcbiAgXHQvLyBVcGRhdGUgdGhlIGJvdW5kcyB0aGF0IHRoaXMgSW1hZ2VPdmVybGF5IGNvdmVyc1xyXG4gIFx0c2V0Qm91bmRzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdHRoaXMuX2JvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fcmVzZXQoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBldmVudHMgPSB7XHJcbiAgXHRcdFx0em9vbTogdGhpcy5fcmVzZXQsXHJcbiAgXHRcdFx0dmlld3Jlc2V0OiB0aGlzLl9yZXNldFxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpJbmRleCh2YWx1ZTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgW3pJbmRleF0oI2ltYWdlb3ZlcmxheS16aW5kZXgpIG9mIHRoZSBpbWFnZSBvdmVybGF5LlxyXG4gIFx0c2V0WkluZGV4OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLnpJbmRleCA9IHZhbHVlO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm91bmRzKCk6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gR2V0IHRoZSBib3VuZHMgdGhhdCB0aGlzIEltYWdlT3ZlcmxheSBjb3ZlcnNcclxuICBcdGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fYm91bmRzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEVsZW1lbnQoKTogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIFtgSFRNTEltYWdlRWxlbWVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9IVE1MSW1hZ2VFbGVtZW50KVxyXG4gIFx0Ly8gdXNlZCBieSB0aGlzIG92ZXJsYXkuXHJcbiAgXHRnZXRFbGVtZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9pbWFnZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRJbWFnZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgd2FzRWxlbWVudFN1cHBsaWVkID0gdGhpcy5fdXJsLnRhZ05hbWUgPT09ICdJTUcnO1xyXG4gIFx0XHR2YXIgaW1nID0gdGhpcy5faW1hZ2UgPSB3YXNFbGVtZW50U3VwcGxpZWQgPyB0aGlzLl91cmwgOiBjcmVhdGUkMSgnaW1nJyk7XHJcblxyXG4gIFx0XHRhZGRDbGFzcyhpbWcsICdsZWFmbGV0LWltYWdlLWxheWVyJyk7XHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHsgYWRkQ2xhc3MoaW1nLCAnbGVhZmxldC16b29tLWFuaW1hdGVkJyk7IH1cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUpIHsgYWRkQ2xhc3MoaW1nLCB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKTsgfVxyXG5cclxuICBcdFx0aW1nLm9uc2VsZWN0c3RhcnQgPSBmYWxzZUZuO1xyXG4gIFx0XHRpbWcub25tb3VzZW1vdmUgPSBmYWxzZUZuO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGxvYWQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIEltYWdlT3ZlcmxheSBsYXllciBoYXMgbG9hZGVkIGl0cyBpbWFnZVxyXG4gIFx0XHRpbWcub25sb2FkID0gYmluZCh0aGlzLmZpcmUsIHRoaXMsICdsb2FkJyk7XHJcbiAgXHRcdGltZy5vbmVycm9yID0gYmluZCh0aGlzLl9vdmVybGF5T25FcnJvciwgdGhpcywgJ2Vycm9yJyk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luIHx8IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiA9PT0gJycpIHtcclxuICBcdFx0XHRpbWcuY3Jvc3NPcmlnaW4gPSB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnJyA6IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy56SW5kZXgpIHtcclxuICBcdFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHdhc0VsZW1lbnRTdXBwbGllZCkge1xyXG4gIFx0XHRcdHRoaXMuX3VybCA9IGltZy5zcmM7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpbWcuc3JjID0gdGhpcy5fdXJsO1xyXG4gIFx0XHRpbWcuYWx0ID0gdGhpcy5vcHRpb25zLmFsdDtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUuem9vbSksXHJcbiAgXHRcdCAgICBvZmZzZXQgPSB0aGlzLl9tYXAuX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHModGhpcy5fYm91bmRzLCBlLnpvb20sIGUuY2VudGVyKS5taW47XHJcblxyXG4gIFx0XHRzZXRUcmFuc2Zvcm0odGhpcy5faW1hZ2UsIG9mZnNldCwgc2NhbGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmVzZXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGltYWdlID0gdGhpcy5faW1hZ2UsXHJcbiAgXHRcdCAgICBib3VuZHMgPSBuZXcgQm91bmRzKFxyXG4gIFx0XHQgICAgICAgIHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSxcclxuICBcdFx0ICAgICAgICB0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXRTb3V0aEVhc3QoKSkpLFxyXG4gIFx0XHQgICAgc2l6ZSA9IGJvdW5kcy5nZXRTaXplKCk7XHJcblxyXG4gIFx0XHRzZXRQb3NpdGlvbihpbWFnZSwgYm91bmRzLm1pbik7XHJcblxyXG4gIFx0XHRpbWFnZS5zdHlsZS53aWR0aCAgPSBzaXplLnggKyAncHgnO1xyXG4gIFx0XHRpbWFnZS5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlT3BhY2l0eTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRzZXRPcGFjaXR5KHRoaXMuX2ltYWdlLCB0aGlzLm9wdGlvbnMub3BhY2l0eSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVaSW5kZXg6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX2ltYWdlICYmIHRoaXMub3B0aW9ucy56SW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuekluZGV4ICE9PSBudWxsKSB7XHJcbiAgXHRcdFx0dGhpcy5faW1hZ2Uuc3R5bGUuekluZGV4ID0gdGhpcy5vcHRpb25zLnpJbmRleDtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfb3ZlcmxheU9uRXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gQGV2ZW50IGVycm9yOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBJbWFnZU92ZXJsYXkgbGF5ZXIgZmFpbHMgdG8gbG9hZCBpdHMgaW1hZ2VcclxuICBcdFx0dGhpcy5maXJlKCdlcnJvcicpO1xyXG5cclxuICBcdFx0dmFyIGVycm9yVXJsID0gdGhpcy5vcHRpb25zLmVycm9yT3ZlcmxheVVybDtcclxuICBcdFx0aWYgKGVycm9yVXJsICYmIHRoaXMuX3VybCAhPT0gZXJyb3JVcmwpIHtcclxuICBcdFx0XHR0aGlzLl91cmwgPSBlcnJvclVybDtcclxuICBcdFx0XHR0aGlzLl9pbWFnZS5zcmMgPSBlcnJvclVybDtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAZmFjdG9yeSBMLmltYWdlT3ZlcmxheShpbWFnZVVybDogU3RyaW5nLCBib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IEltYWdlT3ZlcmxheSBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiB0aGUgVVJMIG9mIHRoZSBpbWFnZSBhbmQgdGhlXHJcbiAgLy8gZ2VvZ3JhcGhpY2FsIGJvdW5kcyBpdCBpcyB0aWVkIHRvLlxyXG4gIHZhciBpbWFnZU92ZXJsYXkgPSBmdW5jdGlvbiAodXJsLCBib3VuZHMsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgSW1hZ2VPdmVybGF5KHVybCwgYm91bmRzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFZpZGVvT3ZlcmxheVxyXG4gICAqIEBha2EgTC5WaWRlb092ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgSW1hZ2VPdmVybGF5XHJcbiAgICpcclxuICAgKiBVc2VkIHRvIGxvYWQgYW5kIGRpc3BsYXkgYSB2aWRlbyBwbGF5ZXIgb3ZlciBzcGVjaWZpYyBib3VuZHMgb2YgdGhlIG1hcC4gRXh0ZW5kcyBgSW1hZ2VPdmVybGF5YC5cclxuICAgKlxyXG4gICAqIEEgdmlkZW8gb3ZlcmxheSB1c2VzIHRoZSBbYDx2aWRlbz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8pXHJcbiAgICogSFRNTDUgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciB2aWRlb1VybCA9ICdodHRwczovL3d3dy5tYXBib3guY29tL2JpdGVzLzAwMTg4L3BhdHJpY2lhX25hc2Eud2VibScsXHJcbiAgICogXHR2aWRlb0JvdW5kcyA9IFtbIDMyLCAtMTMwXSwgWyAxMywgLTEwMF1dO1xyXG4gICAqIEwudmlkZW9PdmVybGF5KHZpZGVvVXJsLCB2aWRlb0JvdW5kcyApLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBWaWRlb092ZXJsYXkgPSBJbWFnZU92ZXJsYXkuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBWaWRlb092ZXJsYXkgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9wbGF5OiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyBzdGFydHMgcGxheWluZyBhdXRvbWF0aWNhbGx5IHdoZW4gbG9hZGVkLlxyXG4gIFx0XHRhdXRvcGxheTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbG9vcDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgdmlkZW8gd2lsbCBsb29wIGJhY2sgdG8gdGhlIGJlZ2lubmluZyB3aGVuIHBsYXllZC5cclxuICBcdFx0bG9vcDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24ga2VlcEFzcGVjdFJhdGlvOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyB3aWxsIHNhdmUgYXNwZWN0IHJhdGlvIGFmdGVyIHRoZSBwcm9qZWN0aW9uLlxyXG4gIFx0XHQvLyBSZWxldmFudCBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzLiBCcm93c2VyIGNvbXBhdGliaWxpdHktIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9vYmplY3QtZml0XHJcbiAgXHRcdGtlZXBBc3BlY3RSYXRpbzogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbXV0ZWQ6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyBzdGFydHMgb24gbXV0ZSB3aGVuIGxvYWRlZC5cclxuICBcdFx0bXV0ZWQ6IGZhbHNlXHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SW1hZ2U6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHdhc0VsZW1lbnRTdXBwbGllZCA9IHRoaXMuX3VybC50YWdOYW1lID09PSAnVklERU8nO1xyXG4gIFx0XHR2YXIgdmlkID0gdGhpcy5faW1hZ2UgPSB3YXNFbGVtZW50U3VwcGxpZWQgPyB0aGlzLl91cmwgOiBjcmVhdGUkMSgndmlkZW8nKTtcclxuXHJcbiAgXHRcdGFkZENsYXNzKHZpZCwgJ2xlYWZsZXQtaW1hZ2UtbGF5ZXInKTtcclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkgeyBhZGRDbGFzcyh2aWQsICdsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTsgfVxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkgeyBhZGRDbGFzcyh2aWQsIHRoaXMub3B0aW9ucy5jbGFzc05hbWUpOyB9XHJcblxyXG4gIFx0XHR2aWQub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XHJcbiAgXHRcdHZpZC5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9hZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdmlkZW8gaGFzIGZpbmlzaGVkIGxvYWRpbmcgdGhlIGZpcnN0IGZyYW1lXHJcbiAgXHRcdHZpZC5vbmxvYWRlZGRhdGEgPSBiaW5kKHRoaXMuZmlyZSwgdGhpcywgJ2xvYWQnKTtcclxuXHJcbiAgXHRcdGlmICh3YXNFbGVtZW50U3VwcGxpZWQpIHtcclxuICBcdFx0XHR2YXIgc291cmNlRWxlbWVudHMgPSB2aWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NvdXJjZScpO1xyXG4gIFx0XHRcdHZhciBzb3VyY2VzID0gW107XHJcbiAgXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBzb3VyY2VFbGVtZW50cy5sZW5ndGg7IGorKykge1xyXG4gIFx0XHRcdFx0c291cmNlcy5wdXNoKHNvdXJjZUVsZW1lbnRzW2pdLnNyYyk7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHR0aGlzLl91cmwgPSAoc291cmNlRWxlbWVudHMubGVuZ3RoID4gMCkgPyBzb3VyY2VzIDogW3ZpZC5zcmNdO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCFpc0FycmF5KHRoaXMuX3VybCkpIHsgdGhpcy5fdXJsID0gW3RoaXMuX3VybF07IH1cclxuXHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmtlZXBBc3BlY3RSYXRpbyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmlkLnN0eWxlLCAnb2JqZWN0Rml0JykpIHtcclxuICBcdFx0XHR2aWQuc3R5bGVbJ29iamVjdEZpdCddID0gJ2ZpbGwnO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHZpZC5hdXRvcGxheSA9ICEhdGhpcy5vcHRpb25zLmF1dG9wbGF5O1xyXG4gIFx0XHR2aWQubG9vcCA9ICEhdGhpcy5vcHRpb25zLmxvb3A7XHJcbiAgXHRcdHZpZC5tdXRlZCA9ICEhdGhpcy5vcHRpb25zLm11dGVkO1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3VybC5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHZhciBzb3VyY2UgPSBjcmVhdGUkMSgnc291cmNlJyk7XHJcbiAgXHRcdFx0c291cmNlLnNyYyA9IHRoaXMuX3VybFtpXTtcclxuICBcdFx0XHR2aWQuYXBwZW5kQ2hpbGQoc291cmNlKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0RWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBbYEhUTUxWaWRlb0VsZW1lbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSFRNTFZpZGVvRWxlbWVudClcclxuICBcdC8vIHVzZWQgYnkgdGhpcyBvdmVybGF5LlxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC52aWRlb092ZXJsYXkodmlkZW86IFN0cmluZ3xBcnJheXxIVE1MVmlkZW9FbGVtZW50LCBib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IFZpZGVvT3ZlcmxheSBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiB0aGUgVVJMIG9mIHRoZSB2aWRlbyAob3IgYXJyYXkgb2YgVVJMcywgb3IgZXZlbiBhIHZpZGVvIGVsZW1lbnQpIGFuZCB0aGVcclxuICAvLyBnZW9ncmFwaGljYWwgYm91bmRzIGl0IGlzIHRpZWQgdG8uXHJcblxyXG4gIGZ1bmN0aW9uIHZpZGVvT3ZlcmxheSh2aWRlbywgYm91bmRzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFZpZGVvT3ZlcmxheSh2aWRlbywgYm91bmRzLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcbiAgICogQGNsYXNzIFNWR092ZXJsYXlcbiAgICogQGFrYSBMLlNWR092ZXJsYXlcbiAgICogQGluaGVyaXRzIEltYWdlT3ZlcmxheVxuICAgKlxuICAgKiBVc2VkIHRvIGxvYWQsIGRpc3BsYXkgYW5kIHByb3ZpZGUgRE9NIGFjY2VzcyB0byBhbiBTVkcgZmlsZSBvdmVyIHNwZWNpZmljIGJvdW5kcyBvZiB0aGUgbWFwLiBFeHRlbmRzIGBJbWFnZU92ZXJsYXlgLlxuICAgKlxuICAgKiBBbiBTVkcgb3ZlcmxheSB1c2VzIHRoZSBbYDxzdmc+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0VsZW1lbnQvc3ZnKSBlbGVtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgc3ZnRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwic3ZnXCIpO1xuICAgKiBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgneG1sbnMnLCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpO1xuICAgKiBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFwiMCAwIDIwMCAyMDBcIik7XG4gICAqIHN2Z0VsZW1lbnQuaW5uZXJIVE1MID0gJzxyZWN0IHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCIvPjxyZWN0IHg9XCI3NVwiIHk9XCIyM1wiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIHN0eWxlPVwiZmlsbDpyZWRcIi8+PHJlY3QgeD1cIjc1XCIgeT1cIjEyM1wiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIHN0eWxlPVwiZmlsbDojMDAxM2ZmXCIvPic7XG4gICAqIHZhciBzdmdFbGVtZW50Qm91bmRzID0gWyBbIDMyLCAtMTMwIF0sIFsgMTMsIC0xMDAgXSBdO1xuICAgKiBMLnN2Z092ZXJsYXkoc3ZnRWxlbWVudCwgc3ZnRWxlbWVudEJvdW5kcykuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTVkdPdmVybGF5ID0gSW1hZ2VPdmVybGF5LmV4dGVuZCh7XG4gIFx0X2luaXRJbWFnZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGVsID0gdGhpcy5faW1hZ2UgPSB0aGlzLl91cmw7XG5cbiAgXHRcdGFkZENsYXNzKGVsLCAnbGVhZmxldC1pbWFnZS1sYXllcicpO1xuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkgeyBhZGRDbGFzcyhlbCwgJ2xlYWZsZXQtem9vbS1hbmltYXRlZCcpOyB9XG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkgeyBhZGRDbGFzcyhlbCwgdGhpcy5vcHRpb25zLmNsYXNzTmFtZSk7IH1cblxuICBcdFx0ZWwub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XG4gIFx0XHRlbC5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XG4gIFx0fVxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRFbGVtZW50KCk6IFNWR0VsZW1lbnRcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBbYFNWR0VsZW1lbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvU1ZHRWxlbWVudClcbiAgXHQvLyB1c2VkIGJ5IHRoaXMgb3ZlcmxheS5cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLnN2Z092ZXJsYXkoc3ZnOiBTdHJpbmd8U1ZHRWxlbWVudCwgYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBTVkdPdmVybGF5IG9wdGlvbnMpXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiBhbiBTVkcgZWxlbWVudCBhbmQgdGhlIGdlb2dyYXBoaWNhbCBib3VuZHMgaXQgaXMgdGllZCB0by5cbiAgLy8gQSB2aWV3Qm94IGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBvbiB0aGUgU1ZHIGVsZW1lbnQgdG8gem9vbSBpbiBhbmQgb3V0IHByb3Blcmx5LlxuXG4gIGZ1bmN0aW9uIHN2Z092ZXJsYXkoZWwsIGJvdW5kcywgb3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgU1ZHT3ZlcmxheShlbCwgYm91bmRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIERpdk92ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJcclxuICAgKiBAYWthIEwuRGl2T3ZlcmxheVxyXG4gICAqIEJhc2UgbW9kZWwgZm9yIEwuUG9wdXAgYW5kIEwuVG9vbHRpcC4gSW5oZXJpdCBmcm9tIGl0IGZvciBjdXN0b20gcG9wdXAgbGlrZSBwbHVnaW5zLlxyXG4gICAqL1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIERpdk92ZXJsYXlcclxuICB2YXIgRGl2T3ZlcmxheSA9IExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgRGl2T3ZlcmxheSBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gb2Zmc2V0OiBQb2ludCA9IFBvaW50KDAsIDcpXHJcbiAgXHRcdC8vIFRoZSBvZmZzZXQgb2YgdGhlIHBvcHVwIHBvc2l0aW9uLiBVc2VmdWwgdG8gY29udHJvbCB0aGUgYW5jaG9yXHJcbiAgXHRcdC8vIG9mIHRoZSBwb3B1cCB3aGVuIG9wZW5pbmcgaXQgb24gc29tZSBvdmVybGF5cy5cclxuICBcdFx0b2Zmc2V0OiBbMCwgN10sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gQSBjdXN0b20gQ1NTIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIHRoZSBwb3B1cC5cclxuICBcdFx0Y2xhc3NOYW1lOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcGFuZTogU3RyaW5nID0gJ3BvcHVwUGFuZSdcclxuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgcG9wdXAgd2lsbCBiZSBhZGRlZC5cclxuICBcdFx0cGFuZTogJ3BvcHVwUGFuZSdcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fc291cmNlID0gc291cmNlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSBtYXAuX3pvb21BbmltYXRlZDtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7XHJcbiAgXHRcdFx0dGhpcy5faW5pdExheW91dCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobWFwLl9mYWRlQW5pbWF0ZWQpIHtcclxuICBcdFx0XHRzZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwgMCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGNsZWFyVGltZW91dCh0aGlzLl9yZW1vdmVUaW1lb3V0KTtcclxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcbiAgXHRcdGlmIChtYXAuX2ZhZGVBbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLCAxKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5icmluZ1RvRnJvbnQoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0aWYgKG1hcC5fZmFkZUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIDApO1xyXG4gIFx0XHRcdHRoaXMuX3JlbW92ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGJpbmQocmVtb3ZlLCB1bmRlZmluZWQsIHRoaXMuX2NvbnRhaW5lciksIDIwMCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXRMbmc6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIHBvaW50IG9mIHBvcHVwLlxyXG4gIFx0Z2V0TGF0TG5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9sYXRsbmc7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TGF0TG5nKGxhdGxuZzogTGF0TG5nKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgZ2VvZ3JhcGhpY2FsIHBvaW50IHdoZXJlIHRoZSBwb3B1cCB3aWxsIG9wZW4uXHJcbiAgXHRzZXRMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgXHRcdFx0dGhpcy5fYWRqdXN0UGFuKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBwb3B1cC5cclxuICBcdGdldENvbnRlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRlbnQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0Q29udGVudChodG1sQ29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50fEZ1bmN0aW9uKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBwb3B1cC4gSWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHNvdXJjZSBsYXllciB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YCB0byBiZSB1c2VkIGluIHRoZSBwb3B1cC5cclxuICBcdHNldENvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgXHRcdHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xyXG4gIFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRFbGVtZW50OiBTdHJpbmd8SFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIEhUTUwgY29udGFpbmVyIG9mIHRoZSBwb3B1cC5cclxuICBcdGdldEVsZW1lbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB1cGRhdGU6IG51bGxcclxuICBcdC8vIFVwZGF0ZXMgdGhlIHBvcHVwIGNvbnRlbnQsIGxheW91dCBhbmQgcG9zaXRpb24uIFVzZWZ1bCBmb3IgdXBkYXRpbmcgdGhlIHBvcHVwIGFmdGVyIHNvbWV0aGluZyBpbnNpZGUgY2hhbmdlZCwgZS5nLiBpbWFnZSBsb2FkZWQuXHJcbiAgXHR1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cclxuICBcdFx0dGhpcy5fdXBkYXRlQ29udGVudCgpO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVMYXlvdXQoKTtcclxuICBcdFx0dGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcclxuXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcblxyXG4gIFx0XHR0aGlzLl9hZGp1c3RQYW4oKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBldmVudHMgPSB7XHJcbiAgXHRcdFx0em9vbTogdGhpcy5fdXBkYXRlUG9zaXRpb24sXHJcbiAgXHRcdFx0dmlld3Jlc2V0OiB0aGlzLl91cGRhdGVQb3NpdGlvblxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBldmVudHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaXNPcGVuOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBwb3B1cCBpcyB2aXNpYmxlIG9uIHRoZSBtYXAuXHJcbiAgXHRpc09wZW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICEhdGhpcy5fbWFwICYmIHRoaXMuX21hcC5oYXNMYXllcih0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQ6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGlzIHBvcHVwIGluIGZyb250IG9mIG90aGVyIHBvcHVwcyAoaW4gdGhlIHNhbWUgbWFwIHBhbmUpLlxyXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0b0Zyb250KHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2s6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGlzIHBvcHVwIHRvIHRoZSBiYWNrIG9mIG90aGVyIHBvcHVwcyAoaW4gdGhlIHNhbWUgbWFwIHBhbmUpLlxyXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRvQmFjayh0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcHJlcGFyZU9wZW46IGZ1bmN0aW9uIChwYXJlbnQsIGxheWVyLCBsYXRsbmcpIHtcclxuICBcdFx0aWYgKCEobGF5ZXIgaW5zdGFuY2VvZiBMYXllcikpIHtcclxuICBcdFx0XHRsYXRsbmcgPSBsYXllcjtcclxuICBcdFx0XHRsYXllciA9IHBhcmVudDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGxheWVyIGluc3RhbmNlb2YgRmVhdHVyZUdyb3VwKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgaWQgaW4gcGFyZW50Ll9sYXllcnMpIHtcclxuICBcdFx0XHRcdGxheWVyID0gcGFyZW50Ll9sYXllcnNbaWRdO1xyXG4gIFx0XHRcdFx0YnJlYWs7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIWxhdGxuZykge1xyXG4gIFx0XHRcdGlmIChsYXllci5nZXRDZW50ZXIpIHtcclxuICBcdFx0XHRcdGxhdGxuZyA9IGxheWVyLmdldENlbnRlcigpO1xyXG4gIFx0XHRcdH0gZWxzZSBpZiAobGF5ZXIuZ2V0TGF0TG5nKSB7XHJcbiAgXHRcdFx0XHRsYXRsbmcgPSBsYXllci5nZXRMYXRMbmcoKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IHNvdXJjZSBsYXllciBMYXRMbmcuJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBzZXQgb3ZlcmxheSBzb3VyY2UgdG8gdGhpcyBsYXllclxyXG4gIFx0XHR0aGlzLl9zb3VyY2UgPSBsYXllcjtcclxuXHJcbiAgXHRcdC8vIHVwZGF0ZSB0aGUgb3ZlcmxheSAoY29udGVudCwgbGF5b3V0LCBlY3QuLi4pXHJcbiAgXHRcdHRoaXMudXBkYXRlKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0bG5nO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlQ29udGVudDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2NvbnRlbnQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgbm9kZSA9IHRoaXMuX2NvbnRlbnROb2RlO1xyXG4gIFx0XHR2YXIgY29udGVudCA9ICh0eXBlb2YgdGhpcy5fY29udGVudCA9PT0gJ2Z1bmN0aW9uJykgPyB0aGlzLl9jb250ZW50KHRoaXMuX3NvdXJjZSB8fCB0aGlzKSA6IHRoaXMuX2NvbnRlbnQ7XHJcblxyXG4gIFx0XHRpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgXHRcdFx0bm9kZS5pbm5lckhUTUwgPSBjb250ZW50O1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHdoaWxlIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xyXG4gIFx0XHRcdFx0bm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRub2RlLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuZmlyZSgnY29udGVudHVwZGF0ZScpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlUG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KSxcclxuICBcdFx0ICAgIGFuY2hvciA9IHRoaXMuX2dldEFuY2hvcigpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lciwgcG9zLmFkZChhbmNob3IpKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvZmZzZXQgPSBvZmZzZXQuYWRkKHBvcykuYWRkKGFuY2hvcik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBib3R0b20gPSB0aGlzLl9jb250YWluZXJCb3R0b20gPSAtb2Zmc2V0LnksXHJcbiAgXHRcdCAgICBsZWZ0ID0gdGhpcy5fY29udGFpbmVyTGVmdCA9IC1NYXRoLnJvdW5kKHRoaXMuX2NvbnRhaW5lcldpZHRoIC8gMikgKyBvZmZzZXQueDtcclxuXHJcbiAgXHRcdC8vIGJvdHRvbSBwb3NpdGlvbiB0aGUgcG9wdXAgaW4gY2FzZSB0aGUgaGVpZ2h0IG9mIHRoZSBwb3B1cCBjaGFuZ2VzIChpbWFnZXMgbG9hZGluZyBldGMpXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b20gPSBib3R0b20gKyAncHgnO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0QW5jaG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBbMCwgMF07XHJcbiAgXHR9XHJcblxyXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFBvcHVwXHJcbiAgICogQGluaGVyaXRzIERpdk92ZXJsYXlcclxuICAgKiBAYWthIEwuUG9wdXBcclxuICAgKiBVc2VkIHRvIG9wZW4gcG9wdXBzIGluIGNlcnRhaW4gcGxhY2VzIG9mIHRoZSBtYXAuIFVzZSBbTWFwLm9wZW5Qb3B1cF0oI21hcC1vcGVucG9wdXApIHRvXHJcbiAgICogb3BlbiBwb3B1cHMgd2hpbGUgbWFraW5nIHN1cmUgdGhhdCBvbmx5IG9uZSBwb3B1cCBpcyBvcGVuIGF0IG9uZSB0aW1lXHJcbiAgICogKHJlY29tbWVuZGVkIGZvciB1c2FiaWxpdHkpLCBvciB1c2UgW01hcC5hZGRMYXllcl0oI21hcC1hZGRsYXllcikgdG8gb3BlbiBhcyBtYW55IGFzIHlvdSB3YW50LlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIElmIHlvdSB3YW50IHRvIGp1c3QgYmluZCBhIHBvcHVwIHRvIG1hcmtlciBjbGljayBhbmQgdGhlbiBvcGVuIGl0LCBpdCdzIHJlYWxseSBlYXN5OlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXJrZXIuYmluZFBvcHVwKHBvcHVwQ29udGVudCkub3BlblBvcHVwKCk7XHJcbiAgICogYGBgXHJcbiAgICogUGF0aCBvdmVybGF5cyBsaWtlIHBvbHlsaW5lcyBhbHNvIGhhdmUgYSBgYmluZFBvcHVwYCBtZXRob2QuXHJcbiAgICogSGVyZSdzIGEgbW9yZSBjb21wbGljYXRlZCB3YXkgdG8gb3BlbiBhIHBvcHVwIG9uIGEgbWFwOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgcG9wdXAgPSBMLnBvcHVwKClcclxuICAgKiBcdC5zZXRMYXRMbmcobGF0bG5nKVxyXG4gICAqIFx0LnNldENvbnRlbnQoJzxwPkhlbGxvIHdvcmxkITxiciAvPlRoaXMgaXMgYSBuaWNlIHBvcHVwLjwvcD4nKVxyXG4gICAqIFx0Lm9wZW5PbihtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIHZhciBQb3B1cCA9IERpdk92ZXJsYXkuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBQb3B1cCBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4V2lkdGg6IE51bWJlciA9IDMwMFxyXG4gIFx0XHQvLyBNYXggd2lkdGggb2YgdGhlIHBvcHVwLCBpbiBwaXhlbHMuXHJcbiAgXHRcdG1heFdpZHRoOiAzMDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG1pbldpZHRoOiBOdW1iZXIgPSA1MFxyXG4gIFx0XHQvLyBNaW4gd2lkdGggb2YgdGhlIHBvcHVwLCBpbiBwaXhlbHMuXHJcbiAgXHRcdG1pbldpZHRoOiA1MCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4SGVpZ2h0OiBOdW1iZXIgPSBudWxsXHJcbiAgXHRcdC8vIElmIHNldCwgY3JlYXRlcyBhIHNjcm9sbGFibGUgY29udGFpbmVyIG9mIHRoZSBnaXZlbiBoZWlnaHRcclxuICBcdFx0Ly8gaW5zaWRlIGEgcG9wdXAgaWYgaXRzIGNvbnRlbnQgZXhjZWVkcyBpdC5cclxuICBcdFx0bWF4SGVpZ2h0OiBudWxsLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgbWFwIHRvIGRvIHBhbm5pbmcgYW5pbWF0aW9uXHJcbiAgXHRcdC8vIHRvIGZpdCB0aGUgb3BlbmVkIHBvcHVwLlxyXG4gIFx0XHRhdXRvUGFuOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuUGFkZGluZ1RvcExlZnQ6IFBvaW50ID0gbnVsbFxyXG4gIFx0XHQvLyBUaGUgbWFyZ2luIGJldHdlZW4gdGhlIHBvcHVwIGFuZCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtYXBcclxuICBcdFx0Ly8gdmlldyBhZnRlciBhdXRvcGFubmluZyB3YXMgcGVyZm9ybWVkLlxyXG4gIFx0XHRhdXRvUGFuUGFkZGluZ1RvcExlZnQ6IG51bGwsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQ6IFBvaW50ID0gbnVsbFxyXG4gIFx0XHQvLyBUaGUgbWFyZ2luIGJldHdlZW4gdGhlIHBvcHVwIGFuZCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgbWFwXHJcbiAgXHRcdC8vIHZpZXcgYWZ0ZXIgYXV0b3Bhbm5pbmcgd2FzIHBlcmZvcm1lZC5cclxuICBcdFx0YXV0b1BhblBhZGRpbmdCb3R0b21SaWdodDogbnVsbCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhblBhZGRpbmc6IFBvaW50ID0gUG9pbnQoNSwgNSlcclxuICBcdFx0Ly8gRXF1aXZhbGVudCBvZiBzZXR0aW5nIGJvdGggdG9wIGxlZnQgYW5kIGJvdHRvbSByaWdodCBhdXRvcGFuIHBhZGRpbmcgdG8gdGhlIHNhbWUgdmFsdWUuXHJcbiAgXHRcdGF1dG9QYW5QYWRkaW5nOiBbNSwgNV0sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGtlZXBJblZpZXc6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IHRvIHByZXZlbnQgdXNlcnMgZnJvbSBwYW5uaW5nIHRoZSBwb3B1cFxyXG4gIFx0XHQvLyBvZmYgb2YgdGhlIHNjcmVlbiB3aGlsZSBpdCBpcyBvcGVuLlxyXG4gIFx0XHRrZWVwSW5WaWV3OiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xvc2VCdXR0b246IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIENvbnRyb2xzIHRoZSBwcmVzZW5jZSBvZiBhIGNsb3NlIGJ1dHRvbiBpbiB0aGUgcG9wdXAuXHJcbiAgXHRcdGNsb3NlQnV0dG9uOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvQ2xvc2U6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mXHJcbiAgXHRcdC8vIHRoZSBwb3B1cCBjbG9zaW5nIHdoZW4gYW5vdGhlciBwb3B1cCBpcyBvcGVuZWQuXHJcbiAgXHRcdGF1dG9DbG9zZTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xvc2VPbkVzY2FwZUtleTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gU2V0IGl0IHRvIGBmYWxzZWAgaWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2ZcclxuICBcdFx0Ly8gdGhlIEVTQyBrZXkgZm9yIGNsb3Npbmcgb2YgdGhlIHBvcHVwLlxyXG4gIFx0XHRjbG9zZU9uRXNjYXBlS2V5OiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjbG9zZU9uQ2xpY2s6IEJvb2xlYW4gPSAqXHJcbiAgXHRcdC8vIFNldCBpdCBpZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgcG9wdXAgY2xvc2luZyB3aGVuIHVzZXIgY2xpY2tzXHJcbiAgXHRcdC8vIG9uIHRoZSBtYXAuIERlZmF1bHRzIHRvIHRoZSBtYXAncyBbYGNsb3NlUG9wdXBPbkNsaWNrYF0oI21hcC1jbG9zZXBvcHVwb25jbGljaykgb3B0aW9uLlxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIEEgY3VzdG9tIENTUyBjbGFzcyBuYW1lIHRvIGFzc2lnbiB0byB0aGUgcG9wdXAuXHJcbiAgXHRcdGNsYXNzTmFtZTogJydcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIFx0Ly8gQG1ldGhvZCBvcGVuT24obWFwOiBNYXApOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBwb3B1cCB0byB0aGUgbWFwIGFuZCBjbG9zZXMgdGhlIHByZXZpb3VzIG9uZS4gVGhlIHNhbWUgYXMgYG1hcC5vcGVuUG9wdXAocG9wdXApYC5cclxuICBcdG9wZW5PbjogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHRtYXAub3BlblBvcHVwKHRoaXMpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xyXG5cclxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcclxuICBcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCBwb3B1cG9wZW46IFBvcHVwRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGlzIG9wZW5lZCBpbiB0aGUgbWFwXHJcbiAgXHRcdG1hcC5maXJlKCdwb3B1cG9wZW4nLCB7cG9wdXA6IHRoaXN9KTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICBcdFx0XHQvLyBAbmFtZXNwYWNlIExheWVyXHJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHBvcHVwb3BlbjogUG9wdXBFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGlzIG9wZW5lZFxyXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCdwb3B1cG9wZW4nLCB7cG9wdXA6IHRoaXN9LCB0cnVlKTtcclxuICBcdFx0XHQvLyBGb3Igbm9uLXBhdGggbGF5ZXJzLCB3ZSB0b2dnbGUgdGhlIHBvcHVwIHdoZW4gY2xpY2tpbmdcclxuICBcdFx0XHQvLyBhZ2FpbiB0aGUgbGF5ZXIsIHNvIHByZXZlbnQgdGhlIG1hcCB0byByZW9wZW4gaXQuXHJcbiAgXHRcdFx0aWYgKCEodGhpcy5fc291cmNlIGluc3RhbmNlb2YgUGF0aCkpIHtcclxuICBcdFx0XHRcdHRoaXMuX3NvdXJjZS5vbigncHJlY2xpY2snLCBzdG9wUHJvcGFnYXRpb24pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHREaXZPdmVybGF5LnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBQb3B1cCBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IHBvcHVwY2xvc2U6IFBvcHVwRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGluIHRoZSBtYXAgaXMgY2xvc2VkXHJcbiAgXHRcdG1hcC5maXJlKCdwb3B1cGNsb3NlJywge3BvcHVwOiB0aGlzfSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgXHRcdFx0Ly8gQG5hbWVzcGFjZSBMYXllclxyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIFBvcHVwIGV2ZW50c1xyXG4gIFx0XHRcdC8vIEBldmVudCBwb3B1cGNsb3NlOiBQb3B1cEV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY2xvc2VkXHJcbiAgXHRcdFx0dGhpcy5fc291cmNlLmZpcmUoJ3BvcHVwY2xvc2UnLCB7cG9wdXA6IHRoaXN9LCB0cnVlKTtcclxuICBcdFx0XHRpZiAoISh0aGlzLl9zb3VyY2UgaW5zdGFuY2VvZiBQYXRoKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fc291cmNlLm9mZigncHJlY2xpY2snLCBzdG9wUHJvcGFnYXRpb24pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGV2ZW50cyA9IERpdk92ZXJsYXkucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgIT09IHVuZGVmaW5lZCA/IHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgOiB0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykge1xyXG4gIFx0XHRcdGV2ZW50cy5wcmVjbGljayA9IHRoaXMuX2Nsb3NlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmtlZXBJblZpZXcpIHtcclxuICBcdFx0XHRldmVudHMubW92ZWVuZCA9IHRoaXMuX2FkanVzdFBhbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIGV2ZW50cztcclxuICBcdH0sXHJcblxyXG4gIFx0X2Nsb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0aGlzLl9tYXAuY2xvc2VQb3B1cCh0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdExheW91dDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcHJlZml4ID0gJ2xlYWZsZXQtcG9wdXAnLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsXHJcbiAgXHRcdFx0cHJlZml4ICsgJyAnICsgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUgfHwgJycpICtcclxuICBcdFx0XHQnIGxlYWZsZXQtem9vbS1hbmltYXRlZCcpO1xyXG5cclxuICBcdFx0dmFyIHdyYXBwZXIgPSB0aGlzLl93cmFwcGVyID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctY29udGVudC13cmFwcGVyJywgY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy5fY29udGVudE5vZGUgPSBjcmVhdGUkMSgnZGl2JywgcHJlZml4ICsgJy1jb250ZW50Jywgd3JhcHBlcik7XHJcblxyXG4gIFx0XHRkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihjb250YWluZXIpO1xyXG4gIFx0XHRkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24odGhpcy5fY29udGVudE5vZGUpO1xyXG4gIFx0XHRvbihjb250YWluZXIsICdjb250ZXh0bWVudScsIHN0b3BQcm9wYWdhdGlvbik7XHJcblxyXG4gIFx0XHR0aGlzLl90aXBDb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgcHJlZml4ICsgJy10aXAtY29udGFpbmVyJywgY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy5fdGlwID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctdGlwJywgdGhpcy5fdGlwQ29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pIHtcclxuICBcdFx0XHR2YXIgY2xvc2VCdXR0b24gPSB0aGlzLl9jbG9zZUJ1dHRvbiA9IGNyZWF0ZSQxKCdhJywgcHJlZml4ICsgJy1jbG9zZS1idXR0b24nLCBjb250YWluZXIpO1xyXG4gIFx0XHRcdGNsb3NlQnV0dG9uLmhyZWYgPSAnI2Nsb3NlJztcclxuICBcdFx0XHRjbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSAnJiMyMTU7JztcclxuXHJcbiAgXHRcdFx0b24oY2xvc2VCdXR0b24sICdjbGljaycsIHRoaXMuX29uQ2xvc2VCdXR0b25DbGljaywgdGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZUxheW91dDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGVudE5vZGUsXHJcbiAgXHRcdCAgICBzdHlsZSA9IGNvbnRhaW5lci5zdHlsZTtcclxuXHJcbiAgXHRcdHN0eWxlLndpZHRoID0gJyc7XHJcbiAgXHRcdHN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcclxuXHJcbiAgXHRcdHZhciB3aWR0aCA9IGNvbnRhaW5lci5vZmZzZXRXaWR0aDtcclxuICBcdFx0d2lkdGggPSBNYXRoLm1pbih3aWR0aCwgdGhpcy5vcHRpb25zLm1heFdpZHRoKTtcclxuICBcdFx0d2lkdGggPSBNYXRoLm1heCh3aWR0aCwgdGhpcy5vcHRpb25zLm1pbldpZHRoKTtcclxuXHJcbiAgXHRcdHN0eWxlLndpZHRoID0gKHdpZHRoICsgMSkgKyAncHgnO1xyXG4gIFx0XHRzdHlsZS53aGl0ZVNwYWNlID0gJyc7XHJcblxyXG4gIFx0XHRzdHlsZS5oZWlnaHQgPSAnJztcclxuXHJcbiAgXHRcdHZhciBoZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0LFxyXG4gIFx0XHQgICAgbWF4SGVpZ2h0ID0gdGhpcy5vcHRpb25zLm1heEhlaWdodCxcclxuICBcdFx0ICAgIHNjcm9sbGVkQ2xhc3MgPSAnbGVhZmxldC1wb3B1cC1zY3JvbGxlZCc7XHJcblxyXG4gIFx0XHRpZiAobWF4SGVpZ2h0ICYmIGhlaWdodCA+IG1heEhlaWdodCkge1xyXG4gIFx0XHRcdHN0eWxlLmhlaWdodCA9IG1heEhlaWdodCArICdweCc7XHJcbiAgXHRcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCBzY3JvbGxlZENsYXNzKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsIHNjcm9sbGVkQ2xhc3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9jb250YWluZXJXaWR0aCA9IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aDtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLCBlLnpvb20sIGUuY2VudGVyKSxcclxuICBcdFx0ICAgIGFuY2hvciA9IHRoaXMuX2dldEFuY2hvcigpO1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9jb250YWluZXIsIHBvcy5hZGQoYW5jaG9yKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGp1c3RQYW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXV0b1BhbikgeyByZXR1cm47IH1cclxuICBcdFx0aWYgKHRoaXMuX21hcC5fcGFuQW5pbSkgeyB0aGlzLl9tYXAuX3BhbkFuaW0uc3RvcCgpOyB9XHJcblxyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxyXG4gIFx0XHQgICAgbWFyZ2luQm90dG9tID0gcGFyc2VJbnQoZ2V0U3R5bGUodGhpcy5fY29udGFpbmVyLCAnbWFyZ2luQm90dG9tJyksIDEwKSB8fCAwLFxyXG4gIFx0XHQgICAgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodCArIG1hcmdpbkJvdHRvbSxcclxuICBcdFx0ICAgIGNvbnRhaW5lcldpZHRoID0gdGhpcy5fY29udGFpbmVyV2lkdGgsXHJcbiAgXHRcdCAgICBsYXllclBvcyA9IG5ldyBQb2ludCh0aGlzLl9jb250YWluZXJMZWZ0LCAtY29udGFpbmVySGVpZ2h0IC0gdGhpcy5fY29udGFpbmVyQm90dG9tKTtcclxuXHJcbiAgXHRcdGxheWVyUG9zLl9hZGQoZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSk7XHJcblxyXG4gIFx0XHR2YXIgY29udGFpbmVyUG9zID0gbWFwLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KGxheWVyUG9zKSxcclxuICBcdFx0ICAgIHBhZGRpbmcgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZyksXHJcbiAgXHRcdCAgICBwYWRkaW5nVEwgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ1RvcExlZnQgfHwgcGFkZGluZyksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0IHx8IHBhZGRpbmcpLFxyXG4gIFx0XHQgICAgc2l6ZSA9IG1hcC5nZXRTaXplKCksXHJcbiAgXHRcdCAgICBkeCA9IDAsXHJcbiAgXHRcdCAgICBkeSA9IDA7XHJcblxyXG4gIFx0XHRpZiAoY29udGFpbmVyUG9zLnggKyBjb250YWluZXJXaWR0aCArIHBhZGRpbmdCUi54ID4gc2l6ZS54KSB7IC8vIHJpZ2h0XHJcbiAgXHRcdFx0ZHggPSBjb250YWluZXJQb3MueCArIGNvbnRhaW5lcldpZHRoIC0gc2l6ZS54ICsgcGFkZGluZ0JSLng7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGNvbnRhaW5lclBvcy54IC0gZHggLSBwYWRkaW5nVEwueCA8IDApIHsgLy8gbGVmdFxyXG4gIFx0XHRcdGR4ID0gY29udGFpbmVyUG9zLnggLSBwYWRkaW5nVEwueDtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoY29udGFpbmVyUG9zLnkgKyBjb250YWluZXJIZWlnaHQgKyBwYWRkaW5nQlIueSA+IHNpemUueSkgeyAvLyBib3R0b21cclxuICBcdFx0XHRkeSA9IGNvbnRhaW5lclBvcy55ICsgY29udGFpbmVySGVpZ2h0IC0gc2l6ZS55ICsgcGFkZGluZ0JSLnk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGNvbnRhaW5lclBvcy55IC0gZHkgLSBwYWRkaW5nVEwueSA8IDApIHsgLy8gdG9wXHJcbiAgXHRcdFx0ZHkgPSBjb250YWluZXJQb3MueSAtIHBhZGRpbmdUTC55O1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBQb3B1cCBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IGF1dG9wYW5zdGFydDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIHN0YXJ0cyBhdXRvcGFubmluZyB3aGVuIG9wZW5pbmcgYSBwb3B1cC5cclxuICBcdFx0aWYgKGR4IHx8IGR5KSB7XHJcbiAgXHRcdFx0bWFwXHJcbiAgXHRcdFx0ICAgIC5maXJlKCdhdXRvcGFuc3RhcnQnKVxyXG4gIFx0XHRcdCAgICAucGFuQnkoW2R4LCBkeV0pO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbkNsb3NlQnV0dG9uQ2xpY2s6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHRoaXMuX2Nsb3NlKCk7XHJcbiAgXHRcdHN0b3AoZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRBbmNob3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gV2hlcmUgc2hvdWxkIHdlIGFuY2hvciB0aGUgcG9wdXAgb24gdGhlIHNvdXJjZSBsYXllcj9cclxuICBcdFx0cmV0dXJuIHRvUG9pbnQodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3IgPyB0aGlzLl9zb3VyY2UuX2dldFBvcHVwQW5jaG9yKCkgOiBbMCwgMF0pO1xyXG4gIFx0fVxyXG5cclxuICB9KTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIC8vIEBmYWN0b3J5IEwucG9wdXAob3B0aW9ucz86IFBvcHVwIG9wdGlvbnMsIHNvdXJjZT86IExheWVyKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIGBQb3B1cGAgb2JqZWN0IGdpdmVuIGFuIG9wdGlvbmFsIGBvcHRpb25zYCBvYmplY3QgdGhhdCBkZXNjcmliZXMgaXRzIGFwcGVhcmFuY2UgYW5kIGxvY2F0aW9uIGFuZCBhbiBvcHRpb25hbCBgc291cmNlYCBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHRhZyB0aGUgcG9wdXAgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgTGF5ZXIgdG8gd2hpY2ggaXQgcmVmZXJzLlxyXG4gIHZhciBwb3B1cCA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcclxuICBcdHJldHVybiBuZXcgUG9wdXAob3B0aW9ucywgc291cmNlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLyogQG5hbWVzcGFjZSBNYXBcclxuICAgKiBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXHJcbiAgICogQG9wdGlvbiBjbG9zZVBvcHVwT25DbGljazogQm9vbGVhbiA9IHRydWVcclxuICAgKiBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3Qgd2FudCBwb3B1cHMgdG8gY2xvc2Ugd2hlbiB1c2VyIGNsaWNrcyB0aGUgbWFwLlxyXG4gICAqL1xyXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xyXG4gIFx0Y2xvc2VQb3B1cE9uQ2xpY2s6IHRydWVcclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgTWFwXHJcbiAgLy8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgTGF5ZXJzIGFuZCBDb250cm9sc1xyXG4gIE1hcC5pbmNsdWRlKHtcclxuICBcdC8vIEBtZXRob2Qgb3BlblBvcHVwKHBvcHVwOiBQb3B1cCk6IHRoaXNcclxuICBcdC8vIE9wZW5zIHRoZSBzcGVjaWZpZWQgcG9wdXAgd2hpbGUgY2xvc2luZyB0aGUgcHJldmlvdXNseSBvcGVuZWQgKHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSBpcyBvcGVuZWQgYXQgb25lIHRpbWUgZm9yIHVzYWJpbGl0eSkuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2Qgb3BlblBvcHVwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudCwgbGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gQ3JlYXRlcyBhIHBvcHVwIHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25zIGFuZCBvcGVucyBpdCBpbiB0aGUgZ2l2ZW4gcG9pbnQgb24gYSBtYXAuXHJcbiAgXHRvcGVuUG9wdXA6IGZ1bmN0aW9uIChwb3B1cCwgbGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRcdGlmICghKHBvcHVwIGluc3RhbmNlb2YgUG9wdXApKSB7XHJcbiAgXHRcdFx0cG9wdXAgPSBuZXcgUG9wdXAob3B0aW9ucykuc2V0Q29udGVudChwb3B1cCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChsYXRsbmcpIHtcclxuICBcdFx0XHRwb3B1cC5zZXRMYXRMbmcobGF0bG5nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuaGFzTGF5ZXIocG9wdXApKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCAmJiB0aGlzLl9wb3B1cC5vcHRpb25zLmF1dG9DbG9zZSkge1xyXG4gIFx0XHRcdHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9wb3B1cCA9IHBvcHVwO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihwb3B1cCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY2xvc2VQb3B1cChwb3B1cD86IFBvcHVwKTogdGhpc1xyXG4gIFx0Ly8gQ2xvc2VzIHRoZSBwb3B1cCBwcmV2aW91c2x5IG9wZW5lZCB3aXRoIFtvcGVuUG9wdXBdKCNtYXAtb3BlbnBvcHVwKSAob3IgdGhlIGdpdmVuIG9uZSkuXHJcbiAgXHRjbG9zZVBvcHVwOiBmdW5jdGlvbiAocG9wdXApIHtcclxuICBcdFx0aWYgKCFwb3B1cCB8fCBwb3B1cCA9PT0gdGhpcy5fcG9wdXApIHtcclxuICBcdFx0XHRwb3B1cCA9IHRoaXMuX3BvcHVwO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAocG9wdXApIHtcclxuICBcdFx0XHR0aGlzLnJlbW92ZUxheWVyKHBvcHVwKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIExheWVyXHJcbiAgICogQHNlY3Rpb24gUG9wdXAgbWV0aG9kcyBleGFtcGxlXHJcbiAgICpcclxuICAgKiBBbGwgbGF5ZXJzIHNoYXJlIGEgc2V0IG9mIG1ldGhvZHMgY29udmVuaWVudCBmb3IgYmluZGluZyBwb3B1cHMgdG8gaXQuXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBsYXllciA9IEwuUG9seWdvbihsYXRsbmdzKS5iaW5kUG9wdXAoJ0hpIFRoZXJlIScpLmFkZFRvKG1hcCk7XHJcbiAgICogbGF5ZXIub3BlblBvcHVwKCk7XHJcbiAgICogbGF5ZXIuY2xvc2VQb3B1cCgpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogUG9wdXBzIHdpbGwgYWxzbyBiZSBhdXRvbWF0aWNhbGx5IG9wZW5lZCB3aGVuIHRoZSBsYXllciBpcyBjbGlja2VkIG9uIGFuZCBjbG9zZWQgd2hlbiB0aGUgbGF5ZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgb3IgYW5vdGhlciBwb3B1cCBpcyBvcGVuZWQuXHJcbiAgICovXHJcblxyXG4gIC8vIEBzZWN0aW9uIFBvcHVwIG1ldGhvZHNcclxuICBMYXllci5pbmNsdWRlKHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJpbmRQb3B1cChjb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnR8RnVuY3Rpb258UG9wdXAsIG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gQmluZHMgYSBwb3B1cCB0byB0aGUgbGF5ZXIgd2l0aCB0aGUgcGFzc2VkIGBjb250ZW50YCBhbmQgc2V0cyB1cCB0aGVcclxuICBcdC8vIG5lY2Vzc2FyeSBldmVudCBsaXN0ZW5lcnMuIElmIGEgYEZ1bmN0aW9uYCBpcyBwYXNzZWQgaXQgd2lsbCByZWNlaXZlXHJcbiAgXHQvLyB0aGUgbGF5ZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YC5cclxuICBcdGJpbmRQb3B1cDogZnVuY3Rpb24gKGNvbnRlbnQsIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdGlmIChjb250ZW50IGluc3RhbmNlb2YgUG9wdXApIHtcclxuICBcdFx0XHRzZXRPcHRpb25zKGNvbnRlbnQsIG9wdGlvbnMpO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwID0gY29udGVudDtcclxuICBcdFx0XHRjb250ZW50Ll9zb3VyY2UgPSB0aGlzO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlmICghdGhpcy5fcG9wdXAgfHwgb3B0aW9ucykge1xyXG4gIFx0XHRcdFx0dGhpcy5fcG9wdXAgPSBuZXcgUG9wdXAob3B0aW9ucywgdGhpcyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHRoaXMuX3BvcHVwLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICghdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5vbih7XHJcbiAgXHRcdFx0XHRjbGljazogdGhpcy5fb3BlblBvcHVwLFxyXG4gIFx0XHRcdFx0a2V5cHJlc3M6IHRoaXMuX29uS2V5UHJlc3MsXHJcbiAgXHRcdFx0XHRyZW1vdmU6IHRoaXMuY2xvc2VQb3B1cCxcclxuICBcdFx0XHRcdG1vdmU6IHRoaXMuX21vdmVQb3B1cFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZCA9IHRydWU7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVuYmluZFBvcHVwKCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIHBvcHVwIHByZXZpb3VzbHkgYm91bmQgd2l0aCBgYmluZFBvcHVwYC5cclxuICBcdHVuYmluZFBvcHVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMub2ZmKHtcclxuICBcdFx0XHRcdGNsaWNrOiB0aGlzLl9vcGVuUG9wdXAsXHJcbiAgXHRcdFx0XHRrZXlwcmVzczogdGhpcy5fb25LZXlQcmVzcyxcclxuICBcdFx0XHRcdHJlbW92ZTogdGhpcy5jbG9zZVBvcHVwLFxyXG4gIFx0XHRcdFx0bW92ZTogdGhpcy5fbW92ZVBvcHVwXHJcbiAgXHRcdFx0fSk7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkID0gZmFsc2U7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXAgPSBudWxsO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG9wZW5Qb3B1cChsYXRsbmc/OiBMYXRMbmcpOiB0aGlzXHJcbiAgXHQvLyBPcGVucyB0aGUgYm91bmQgcG9wdXAgYXQgdGhlIHNwZWNpZmllZCBgbGF0bG5nYCBvciBhdCB0aGUgZGVmYXVsdCBwb3B1cCBhbmNob3IgaWYgbm8gYGxhdGxuZ2AgaXMgcGFzc2VkLlxyXG4gIFx0b3BlblBvcHVwOiBmdW5jdGlvbiAobGF5ZXIsIGxhdGxuZykge1xyXG4gIFx0XHRpZiAodGhpcy5fcG9wdXAgJiYgdGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0bGF0bG5nID0gdGhpcy5fcG9wdXAuX3ByZXBhcmVPcGVuKHRoaXMsIGxheWVyLCBsYXRsbmcpO1xyXG5cclxuICBcdFx0XHQvLyBvcGVuIHRoZSBwb3B1cCBvbiB0aGUgbWFwXHJcbiAgXHRcdFx0dGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCwgbGF0bG5nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY2xvc2VQb3B1cCgpOiB0aGlzXHJcbiAgXHQvLyBDbG9zZXMgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaWYgaXQgaXMgb3Blbi5cclxuICBcdGNsb3NlUG9wdXA6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXAuX2Nsb3NlKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9nZ2xlUG9wdXAoKTogdGhpc1xyXG4gIFx0Ly8gT3BlbnMgb3IgY2xvc2VzIHRoZSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGRlcGVuZGluZyBvbiBpdHMgY3VycmVudCBzdGF0ZS5cclxuICBcdHRvZ2dsZVBvcHVwOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdGlmICh0aGlzLl9wb3B1cC5fbWFwKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmNsb3NlUG9wdXAoKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhpcy5vcGVuUG9wdXAodGFyZ2V0KTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaXNQb3B1cE9wZW4oKTogYm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY3VycmVudGx5IG9wZW4uXHJcbiAgXHRpc1BvcHVwT3BlbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gKHRoaXMuX3BvcHVwID8gdGhpcy5fcG9wdXAuaXNPcGVuKCkgOiBmYWxzZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UG9wdXBDb250ZW50KGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxQb3B1cCk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGNvbnRlbnQgb2YgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIuXHJcbiAgXHRzZXRQb3B1cENvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UG9wdXAoKTogUG9wdXBcclxuICBcdC8vIFJldHVybnMgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIuXHJcbiAgXHRnZXRQb3B1cDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fcG9wdXA7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vcGVuUG9wdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHZhciBsYXllciA9IGUubGF5ZXIgfHwgZS50YXJnZXQ7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX3BvcHVwKSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gcHJldmVudCBtYXAgY2xpY2tcclxuICBcdFx0c3RvcChlKTtcclxuXHJcbiAgXHRcdC8vIGlmIHRoaXMgaW5oZXJpdHMgZnJvbSBQYXRoIGl0cyBhIHZlY3RvciBhbmQgd2UgY2FuIGp1c3RcclxuICBcdFx0Ly8gb3BlbiB0aGUgcG9wdXAgYXQgdGhlIG5ldyBsb2NhdGlvblxyXG4gIFx0XHRpZiAobGF5ZXIgaW5zdGFuY2VvZiBQYXRoKSB7XHJcbiAgXHRcdFx0dGhpcy5vcGVuUG9wdXAoZS5sYXllciB8fCBlLnRhcmdldCwgZS5sYXRsbmcpO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gb3RoZXJ3aXNlIHRyZWF0IGl0IGxpa2UgYSBtYXJrZXIgYW5kIGZpZ3VyZSBvdXRcclxuICBcdFx0Ly8gaWYgd2Ugc2hvdWxkIHRvZ2dsZSBpdCBvcGVuL2Nsb3NlZFxyXG4gIFx0XHRpZiAodGhpcy5fbWFwLmhhc0xheWVyKHRoaXMuX3BvcHVwKSAmJiB0aGlzLl9wb3B1cC5fc291cmNlID09PSBsYXllcikge1xyXG4gIFx0XHRcdHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHRoaXMub3BlblBvcHVwKGxheWVyLCBlLmxhdGxuZyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X21vdmVQb3B1cDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0dGhpcy5fcG9wdXAuc2V0TGF0TG5nKGUubGF0bG5nKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uS2V5UHJlc3M6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmIChlLm9yaWdpbmFsRXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcclxuICBcdFx0XHR0aGlzLl9vcGVuUG9wdXAoZSk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9KTtcblxuICAvKlxuICAgKiBAY2xhc3MgVG9vbHRpcFxuICAgKiBAaW5oZXJpdHMgRGl2T3ZlcmxheVxuICAgKiBAYWthIEwuVG9vbHRpcFxuICAgKiBVc2VkIHRvIGRpc3BsYXkgc21hbGwgdGV4dHMgb24gdG9wIG9mIG1hcCBsYXllcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIG1hcmtlci5iaW5kVG9vbHRpcChcIm15IHRvb2x0aXAgdGV4dFwiKS5vcGVuVG9vbHRpcCgpO1xuICAgKiBgYGBcbiAgICogTm90ZSBhYm91dCB0b29sdGlwIG9mZnNldC4gTGVhZmxldCB0YWtlcyB0d28gb3B0aW9ucyBpbiBjb25zaWRlcmF0aW9uXG4gICAqIGZvciBjb21wdXRpbmcgdG9vbHRpcCBvZmZzZXR0aW5nOlxuICAgKiAtIHRoZSBgb2Zmc2V0YCBUb29sdGlwIG9wdGlvbjogaXQgZGVmYXVsdHMgdG8gWzAsIDBdLCBhbmQgaXQncyBzcGVjaWZpYyB0byBvbmUgdG9vbHRpcC5cbiAgICogICBBZGQgYSBwb3NpdGl2ZSB4IG9mZnNldCB0byBtb3ZlIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCwgYW5kIGEgcG9zaXRpdmUgeSBvZmZzZXQgdG9cbiAgICogICBtb3ZlIGl0IHRvIHRoZSBib3R0b20uIE5lZ2F0aXZlcyB3aWxsIG1vdmUgdG8gdGhlIGxlZnQgYW5kIHRvcC5cbiAgICogLSB0aGUgYHRvb2x0aXBBbmNob3JgIEljb24gb3B0aW9uOiB0aGlzIHdpbGwgb25seSBiZSBjb25zaWRlcmVkIGZvciBNYXJrZXIuIFlvdVxuICAgKiAgIHNob3VsZCBhZGFwdCB0aGlzIHZhbHVlIGlmIHlvdSB1c2UgYSBjdXN0b20gaWNvbi5cbiAgICovXG5cblxuICAvLyBAbmFtZXNwYWNlIFRvb2x0aXBcbiAgdmFyIFRvb2x0aXAgPSBEaXZPdmVybGF5LmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgVG9vbHRpcCBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAndG9vbHRpcFBhbmUnXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYWRkZWQuXG4gIFx0XHRwYW5lOiAndG9vbHRpcFBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9mZnNldDogUG9pbnQgPSBQb2ludCgwLCAwKVxuICBcdFx0Ly8gT3B0aW9uYWwgb2Zmc2V0IG9mIHRoZSB0b29sdGlwIHBvc2l0aW9uLlxuICBcdFx0b2Zmc2V0OiBbMCwgMF0sXG5cbiAgXHRcdC8vIEBvcHRpb24gZGlyZWN0aW9uOiBTdHJpbmcgPSAnYXV0bydcbiAgXHRcdC8vIERpcmVjdGlvbiB3aGVyZSB0byBvcGVuIHRoZSB0b29sdGlwLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBgcmlnaHRgLCBgbGVmdGAsXG4gIFx0XHQvLyBgdG9wYCwgYGJvdHRvbWAsIGBjZW50ZXJgLCBgYXV0b2AuXG4gIFx0XHQvLyBgYXV0b2Agd2lsbCBkeW5hbWljYWxseSBzd2l0Y2ggYmV0d2VlbiBgcmlnaHRgIGFuZCBgbGVmdGAgYWNjb3JkaW5nIHRvIHRoZSB0b29sdGlwXG4gIFx0XHQvLyBwb3NpdGlvbiBvbiB0aGUgbWFwLlxuICBcdFx0ZGlyZWN0aW9uOiAnYXV0bycsXG5cbiAgXHRcdC8vIEBvcHRpb24gcGVybWFuZW50OiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIFdoZXRoZXIgdG8gb3BlbiB0aGUgdG9vbHRpcCBwZXJtYW5lbnRseSBvciBvbmx5IG9uIG1vdXNlb3Zlci5cbiAgXHRcdHBlcm1hbmVudDogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gc3RpY2t5OiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIElmIHRydWUsIHRoZSB0b29sdGlwIHdpbGwgZm9sbG93IHRoZSBtb3VzZSBpbnN0ZWFkIG9mIGJlaW5nIGZpeGVkIGF0IHRoZSBmZWF0dXJlIGNlbnRlci5cbiAgXHRcdHN0aWNreTogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gaW50ZXJhY3RpdmU6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gSWYgdHJ1ZSwgdGhlIHRvb2x0aXAgd2lsbCBsaXN0ZW4gdG8gdGhlIGZlYXR1cmUgZXZlbnRzLlxuICBcdFx0aW50ZXJhY3RpdmU6IGZhbHNlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDAuOVxuICBcdFx0Ly8gVG9vbHRpcCBjb250YWluZXIgb3BhY2l0eS5cbiAgXHRcdG9wYWNpdHk6IDAuOVxuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xuICBcdFx0dGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KTtcblxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcbiAgXHRcdC8vIEBzZWN0aW9uIFRvb2x0aXAgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgdG9vbHRpcG9wZW46IFRvb2x0aXBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgaXMgb3BlbmVkIGluIHRoZSBtYXAuXG4gIFx0XHRtYXAuZmlyZSgndG9vbHRpcG9wZW4nLCB7dG9vbHRpcDogdGhpc30pO1xuXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XG4gIFx0XHRcdC8vIEBuYW1lc3BhY2UgTGF5ZXJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gVG9vbHRpcCBldmVudHNcbiAgXHRcdFx0Ly8gQGV2ZW50IHRvb2x0aXBvcGVuOiBUb29sdGlwRXZlbnRcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBpcyBvcGVuZWQuXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCd0b29sdGlwb3BlbicsIHt0b29sdGlwOiB0aGlzfSwgdHJ1ZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHREaXZPdmVybGF5LnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XG5cbiAgXHRcdC8vIEBuYW1lc3BhY2UgTWFwXG4gIFx0XHQvLyBAc2VjdGlvbiBUb29sdGlwIGV2ZW50c1xuICBcdFx0Ly8gQGV2ZW50IHRvb2x0aXBjbG9zZTogVG9vbHRpcEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdG9vbHRpcCBpbiB0aGUgbWFwIGlzIGNsb3NlZC5cbiAgXHRcdG1hcC5maXJlKCd0b29sdGlwY2xvc2UnLCB7dG9vbHRpcDogdGhpc30pO1xuXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XG4gIFx0XHRcdC8vIEBuYW1lc3BhY2UgTGF5ZXJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gVG9vbHRpcCBldmVudHNcbiAgXHRcdFx0Ly8gQGV2ZW50IHRvb2x0aXBjbG9zZTogVG9vbHRpcEV2ZW50XG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSB0b29sdGlwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY2xvc2VkLlxuICBcdFx0XHR0aGlzLl9zb3VyY2UuZmlyZSgndG9vbHRpcGNsb3NlJywge3Rvb2x0aXA6IHRoaXN9LCB0cnVlKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0gRGl2T3ZlcmxheS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7XG5cbiAgXHRcdGlmICh0b3VjaCAmJiAhdGhpcy5vcHRpb25zLnBlcm1hbmVudCkge1xuICBcdFx0XHRldmVudHMucHJlY2xpY2sgPSB0aGlzLl9jbG9zZTtcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X2Nsb3NlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRoaXMuX21hcC5jbG9zZVRvb2x0aXAodGhpcyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pbml0TGF5b3V0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcHJlZml4ID0gJ2xlYWZsZXQtdG9vbHRpcCcsXG4gIFx0XHQgICAgY2xhc3NOYW1lID0gcHJlZml4ICsgJyAnICsgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUgfHwgJycpICsgJyBsZWFmbGV0LXpvb20tJyArICh0aGlzLl96b29tQW5pbWF0ZWQgPyAnYW5pbWF0ZWQnIDogJ2hpZGUnKTtcblxuICBcdFx0dGhpcy5fY29udGVudE5vZGUgPSB0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUxheW91dDogZnVuY3Rpb24gKCkge30sXG5cbiAgXHRfYWRqdXN0UGFuOiBmdW5jdGlvbiAoKSB7fSxcblxuICBcdF9zZXRQb3NpdGlvbjogZnVuY3Rpb24gKHBvcykge1xuICBcdFx0dmFyIHN1YlgsIHN1YlksXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcixcbiAgXHRcdCAgICBjZW50ZXJQb2ludCA9IG1hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KG1hcC5nZXRDZW50ZXIoKSksXG4gIFx0XHQgICAgdG9vbHRpcFBvaW50ID0gbWFwLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHBvcyksXG4gIFx0XHQgICAgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbixcbiAgXHRcdCAgICB0b29sdGlwV2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGgsXG4gIFx0XHQgICAgdG9vbHRpcEhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gIFx0XHQgICAgb2Zmc2V0ID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KSxcbiAgXHRcdCAgICBhbmNob3IgPSB0aGlzLl9nZXRBbmNob3IoKTtcblxuICBcdFx0aWYgKGRpcmVjdGlvbiA9PT0gJ3RvcCcpIHtcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aCAvIDI7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0O1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdib3R0b20nKSB7XG4gIFx0XHRcdHN1YlggPSB0b29sdGlwV2lkdGggLyAyO1xuICBcdFx0XHRzdWJZID0gMDtcbiAgXHRcdH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnY2VudGVyJykge1xuICBcdFx0XHRzdWJYID0gdG9vbHRpcFdpZHRoIC8gMjtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgXHRcdFx0c3ViWCA9IDA7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aDtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIGlmICh0b29sdGlwUG9pbnQueCA8IGNlbnRlclBvaW50LngpIHtcbiAgXHRcdFx0ZGlyZWN0aW9uID0gJ3JpZ2h0JztcbiAgXHRcdFx0c3ViWCA9IDA7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGRpcmVjdGlvbiA9ICdsZWZ0JztcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aCArIChvZmZzZXQueCArIGFuY2hvci54KSAqIDI7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH1cblxuICBcdFx0cG9zID0gcG9zLnN1YnRyYWN0KHRvUG9pbnQoc3ViWCwgc3ViWSwgdHJ1ZSkpLmFkZChvZmZzZXQpLmFkZChhbmNob3IpO1xuXG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtcmlnaHQnKTtcbiAgXHRcdHJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdG9vbHRpcC1sZWZ0Jyk7XG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtdG9wJyk7XG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtYm90dG9tJyk7XG4gIFx0XHRhZGRDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtJyArIGRpcmVjdGlvbik7XG4gIFx0XHRzZXRQb3NpdGlvbihjb250YWluZXIsIHBvcyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVQb3NpdGlvbjogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHBvcyA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTtcbiAgXHRcdHRoaXMuX3NldFBvc2l0aW9uKHBvcyk7XG4gIFx0fSxcblxuICBcdHNldE9wYWNpdHk6IGZ1bmN0aW9uIChvcGFjaXR5KSB7XG4gIFx0XHR0aGlzLm9wdGlvbnMub3BhY2l0eSA9IG9wYWNpdHk7XG5cbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIG9wYWNpdHkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLCBlLnpvb20sIGUuY2VudGVyKTtcbiAgXHRcdHRoaXMuX3NldFBvc2l0aW9uKHBvcyk7XG4gIFx0fSxcblxuICBcdF9nZXRBbmNob3I6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFdoZXJlIHNob3VsZCB3ZSBhbmNob3IgdGhlIHRvb2x0aXAgb24gdGhlIHNvdXJjZSBsYXllcj9cbiAgXHRcdHJldHVybiB0b1BvaW50KHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IgJiYgIXRoaXMub3B0aW9ucy5zdGlja3kgPyB0aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IoKSA6IFswLCAwXSk7XG4gIFx0fVxuXG4gIH0pO1xuXG4gIC8vIEBuYW1lc3BhY2UgVG9vbHRpcFxuICAvLyBAZmFjdG9yeSBMLnRvb2x0aXAob3B0aW9ucz86IFRvb2x0aXAgb3B0aW9ucywgc291cmNlPzogTGF5ZXIpXG4gIC8vIEluc3RhbnRpYXRlcyBhIFRvb2x0aXAgb2JqZWN0IGdpdmVuIGFuIG9wdGlvbmFsIGBvcHRpb25zYCBvYmplY3QgdGhhdCBkZXNjcmliZXMgaXRzIGFwcGVhcmFuY2UgYW5kIGxvY2F0aW9uIGFuZCBhbiBvcHRpb25hbCBgc291cmNlYCBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHRhZyB0aGUgdG9vbHRpcCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSBMYXllciB0byB3aGljaCBpdCByZWZlcnMuXG4gIHZhciB0b29sdGlwID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICBcdHJldHVybiBuZXcgVG9vbHRpcChvcHRpb25zLCBzb3VyY2UpO1xuICB9O1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcbiAgTWFwLmluY2x1ZGUoe1xuXG4gIFx0Ly8gQG1ldGhvZCBvcGVuVG9vbHRpcCh0b29sdGlwOiBUb29sdGlwKTogdGhpc1xuICBcdC8vIE9wZW5zIHRoZSBzcGVjaWZpZWQgdG9vbHRpcC5cbiAgXHQvLyBAYWx0ZXJuYXRpdmVcbiAgXHQvLyBAbWV0aG9kIG9wZW5Ub29sdGlwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudCwgbGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBUb29sdGlwIG9wdGlvbnMpOiB0aGlzXG4gIFx0Ly8gQ3JlYXRlcyBhIHRvb2x0aXAgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgYW5kIG9wdGlvbnMgYW5kIG9wZW4gaXQuXG4gIFx0b3BlblRvb2x0aXA6IGZ1bmN0aW9uICh0b29sdGlwLCBsYXRsbmcsIG9wdGlvbnMpIHtcbiAgXHRcdGlmICghKHRvb2x0aXAgaW5zdGFuY2VvZiBUb29sdGlwKSkge1xuICBcdFx0XHR0b29sdGlwID0gbmV3IFRvb2x0aXAob3B0aW9ucykuc2V0Q29udGVudCh0b29sdGlwKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKGxhdGxuZykge1xuICBcdFx0XHR0b29sdGlwLnNldExhdExuZyhsYXRsbmcpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5oYXNMYXllcih0b29sdGlwKSkge1xuICBcdFx0XHRyZXR1cm4gdGhpcztcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIHRoaXMuYWRkTGF5ZXIodG9vbHRpcCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgY2xvc2VUb29sdGlwKHRvb2x0aXA/OiBUb29sdGlwKTogdGhpc1xuICBcdC8vIENsb3NlcyB0aGUgdG9vbHRpcCBnaXZlbiBhcyBwYXJhbWV0ZXIuXG4gIFx0Y2xvc2VUb29sdGlwOiBmdW5jdGlvbiAodG9vbHRpcCkge1xuICBcdFx0aWYgKHRvb2x0aXApIHtcbiAgXHRcdFx0dGhpcy5yZW1vdmVMYXllcih0b29sdGlwKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH1cblxuICB9KTtcblxuICAvKlxuICAgKiBAbmFtZXNwYWNlIExheWVyXG4gICAqIEBzZWN0aW9uIFRvb2x0aXAgbWV0aG9kcyBleGFtcGxlXG4gICAqXG4gICAqIEFsbCBsYXllcnMgc2hhcmUgYSBzZXQgb2YgbWV0aG9kcyBjb252ZW5pZW50IGZvciBiaW5kaW5nIHRvb2x0aXBzIHRvIGl0LlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbGF5ZXIgPSBMLlBvbHlnb24obGF0bG5ncykuYmluZFRvb2x0aXAoJ0hpIFRoZXJlIScpLmFkZFRvKG1hcCk7XG4gICAqIGxheWVyLm9wZW5Ub29sdGlwKCk7XG4gICAqIGxheWVyLmNsb3NlVG9vbHRpcCgpO1xuICAgKiBgYGBcbiAgICovXG5cbiAgLy8gQHNlY3Rpb24gVG9vbHRpcCBtZXRob2RzXG4gIExheWVyLmluY2x1ZGUoe1xuXG4gIFx0Ly8gQG1ldGhvZCBiaW5kVG9vbHRpcChjb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnR8RnVuY3Rpb258VG9vbHRpcCwgb3B0aW9ucz86IFRvb2x0aXAgb3B0aW9ucyk6IHRoaXNcbiAgXHQvLyBCaW5kcyBhIHRvb2x0aXAgdG8gdGhlIGxheWVyIHdpdGggdGhlIHBhc3NlZCBgY29udGVudGAgYW5kIHNldHMgdXAgdGhlXG4gIFx0Ly8gbmVjZXNzYXJ5IGV2ZW50IGxpc3RlbmVycy4gSWYgYSBgRnVuY3Rpb25gIGlzIHBhc3NlZCBpdCB3aWxsIHJlY2VpdmVcbiAgXHQvLyB0aGUgbGF5ZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YC5cbiAgXHRiaW5kVG9vbHRpcDogZnVuY3Rpb24gKGNvbnRlbnQsIG9wdGlvbnMpIHtcblxuICBcdFx0aWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUb29sdGlwKSB7XG4gIFx0XHRcdHNldE9wdGlvbnMoY29udGVudCwgb3B0aW9ucyk7XG4gIFx0XHRcdHRoaXMuX3Rvb2x0aXAgPSBjb250ZW50O1xuICBcdFx0XHRjb250ZW50Ll9zb3VyY2UgPSB0aGlzO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0aWYgKCF0aGlzLl90b29sdGlwIHx8IG9wdGlvbnMpIHtcbiAgXHRcdFx0XHR0aGlzLl90b29sdGlwID0gbmV3IFRvb2x0aXAob3B0aW9ucywgdGhpcyk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0dGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KGNvbnRlbnQpO1xuXG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zKCk7XG5cbiAgXHRcdGlmICh0aGlzLl90b29sdGlwLm9wdGlvbnMucGVybWFuZW50ICYmIHRoaXMuX21hcCAmJiB0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcykpIHtcbiAgXHRcdFx0dGhpcy5vcGVuVG9vbHRpcCgpO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCB1bmJpbmRUb29sdGlwKCk6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSB0b29sdGlwIHByZXZpb3VzbHkgYm91bmQgd2l0aCBgYmluZFRvb2x0aXBgLlxuICBcdHVuYmluZFRvb2x0aXA6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwKSB7XG4gIFx0XHRcdHRoaXMuX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zKHRydWUpO1xuICBcdFx0XHR0aGlzLmNsb3NlVG9vbHRpcCgpO1xuICBcdFx0XHR0aGlzLl90b29sdGlwID0gbnVsbDtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHRfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6IGZ1bmN0aW9uIChyZW1vdmUkJDEpIHtcbiAgXHRcdGlmICghcmVtb3ZlJCQxICYmIHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkKSB7IHJldHVybjsgfVxuICBcdFx0dmFyIG9uT2ZmID0gcmVtb3ZlJCQxID8gJ29mZicgOiAnb24nLFxuICBcdFx0ICAgIGV2ZW50cyA9IHtcbiAgXHRcdFx0cmVtb3ZlOiB0aGlzLmNsb3NlVG9vbHRpcCxcbiAgXHRcdFx0bW92ZTogdGhpcy5fbW92ZVRvb2x0aXBcbiAgXHRcdCAgICB9O1xuICBcdFx0aWYgKCF0aGlzLl90b29sdGlwLm9wdGlvbnMucGVybWFuZW50KSB7XG4gIFx0XHRcdGV2ZW50cy5tb3VzZW92ZXIgPSB0aGlzLl9vcGVuVG9vbHRpcDtcbiAgXHRcdFx0ZXZlbnRzLm1vdXNlb3V0ID0gdGhpcy5jbG9zZVRvb2x0aXA7XG4gIFx0XHRcdGlmICh0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5KSB7XG4gIFx0XHRcdFx0ZXZlbnRzLm1vdXNlbW92ZSA9IHRoaXMuX21vdmVUb29sdGlwO1xuICBcdFx0XHR9XG4gIFx0XHRcdGlmICh0b3VjaCkge1xuICBcdFx0XHRcdGV2ZW50cy5jbGljayA9IHRoaXMuX29wZW5Ub29sdGlwO1xuICBcdFx0XHR9XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRldmVudHMuYWRkID0gdGhpcy5fb3BlblRvb2x0aXA7XG4gIFx0XHR9XG4gIFx0XHR0aGlzW29uT2ZmXShldmVudHMpO1xuICBcdFx0dGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWQgPSAhcmVtb3ZlJCQxO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIG9wZW5Ub29sdGlwKGxhdGxuZz86IExhdExuZyk6IHRoaXNcbiAgXHQvLyBPcGVucyB0aGUgYm91bmQgdG9vbHRpcCBhdCB0aGUgc3BlY2lmaWVkIGBsYXRsbmdgIG9yIGF0IHRoZSBkZWZhdWx0IHRvb2x0aXAgYW5jaG9yIGlmIG5vIGBsYXRsbmdgIGlzIHBhc3NlZC5cbiAgXHRvcGVuVG9vbHRpcDogZnVuY3Rpb24gKGxheWVyLCBsYXRsbmcpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwICYmIHRoaXMuX21hcCkge1xuICBcdFx0XHRsYXRsbmcgPSB0aGlzLl90b29sdGlwLl9wcmVwYXJlT3Blbih0aGlzLCBsYXllciwgbGF0bG5nKTtcblxuICBcdFx0XHQvLyBvcGVuIHRoZSB0b29sdGlwIG9uIHRoZSBtYXBcbiAgXHRcdFx0dGhpcy5fbWFwLm9wZW5Ub29sdGlwKHRoaXMuX3Rvb2x0aXAsIGxhdGxuZyk7XG5cbiAgXHRcdFx0Ly8gVG9vbHRpcCBjb250YWluZXIgbWF5IG5vdCBiZSBkZWZpbmVkIGlmIG5vdCBwZXJtYW5lbnQgYW5kIG5ldmVyXG4gIFx0XHRcdC8vIG9wZW5lZC5cbiAgXHRcdFx0aWYgKHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiB0aGlzLl90b29sdGlwLl9jb250YWluZXIpIHtcbiAgXHRcdFx0XHRhZGRDbGFzcyh0aGlzLl90b29sdGlwLl9jb250YWluZXIsICdsZWFmbGV0LWNsaWNrYWJsZScpO1xuICBcdFx0XHRcdHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBjbG9zZVRvb2x0aXAoKTogdGhpc1xuICBcdC8vIENsb3NlcyB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGlmIGl0IGlzIG9wZW4uXG4gIFx0Y2xvc2VUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcCkge1xuICBcdFx0XHR0aGlzLl90b29sdGlwLl9jbG9zZSgpO1xuICBcdFx0XHRpZiAodGhpcy5fdG9vbHRpcC5vcHRpb25zLmludGVyYWN0aXZlICYmIHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcikge1xuICBcdFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtY2xpY2thYmxlJyk7XG4gIFx0XHRcdFx0dGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl90b29sdGlwLl9jb250YWluZXIpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCB0b2dnbGVUb29sdGlwKCk6IHRoaXNcbiAgXHQvLyBPcGVucyBvciBjbG9zZXMgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuXG4gIFx0dG9nZ2xlVG9vbHRpcDogZnVuY3Rpb24gKHRhcmdldCkge1xuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXApIHtcbiAgXHRcdFx0aWYgKHRoaXMuX3Rvb2x0aXAuX21hcCkge1xuICBcdFx0XHRcdHRoaXMuY2xvc2VUb29sdGlwKCk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0dGhpcy5vcGVuVG9vbHRpcCh0YXJnZXQpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBpc1Rvb2x0aXBPcGVuKCk6IGJvb2xlYW5cbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGlzIGN1cnJlbnRseSBvcGVuLlxuICBcdGlzVG9vbHRpcE9wZW46IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl90b29sdGlwLmlzT3BlbigpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldFRvb2x0aXBDb250ZW50KGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxUb29sdGlwKTogdGhpc1xuICBcdC8vIFNldHMgdGhlIGNvbnRlbnQgb2YgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllci5cbiAgXHRzZXRUb29sdGlwQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwKSB7XG4gIFx0XHRcdHRoaXMuX3Rvb2x0aXAuc2V0Q29udGVudChjb250ZW50KTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFRvb2x0aXAoKTogVG9vbHRpcFxuICBcdC8vIFJldHVybnMgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllci5cbiAgXHRnZXRUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fdG9vbHRpcDtcbiAgXHR9LFxuXG4gIFx0X29wZW5Ub29sdGlwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxheWVyID0gZS5sYXllciB8fCBlLnRhcmdldDtcblxuICBcdFx0aWYgKCF0aGlzLl90b29sdGlwIHx8ICF0aGlzLl9tYXApIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuICBcdFx0dGhpcy5vcGVuVG9vbHRpcChsYXllciwgdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSA/IGUubGF0bG5nIDogdW5kZWZpbmVkKTtcbiAgXHR9LFxuXG4gIFx0X21vdmVUb29sdGlwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxhdGxuZyA9IGUubGF0bG5nLCBjb250YWluZXJQb2ludCwgbGF5ZXJQb2ludDtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5ICYmIGUub3JpZ2luYWxFdmVudCkge1xuICBcdFx0XHRjb250YWluZXJQb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLm9yaWdpbmFsRXZlbnQpO1xuICBcdFx0XHRsYXllclBvaW50ID0gdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGNvbnRhaW5lclBvaW50KTtcbiAgXHRcdFx0bGF0bG5nID0gdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhsYXllclBvaW50KTtcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3Rvb2x0aXAuc2V0TGF0TG5nKGxhdGxuZyk7XG4gIFx0fVxuICB9KTtcblxuICAvKlxuICAgKiBAY2xhc3MgRGl2SWNvblxuICAgKiBAYWthIEwuRGl2SWNvblxuICAgKiBAaW5oZXJpdHMgSWNvblxuICAgKlxuICAgKiBSZXByZXNlbnRzIGEgbGlnaHR3ZWlnaHQgaWNvbiBmb3IgbWFya2VycyB0aGF0IHVzZXMgYSBzaW1wbGUgYDxkaXY+YFxuICAgKiBlbGVtZW50IGluc3RlYWQgb2YgYW4gaW1hZ2UuIEluaGVyaXRzIGZyb20gYEljb25gIGJ1dCBpZ25vcmVzIHRoZSBgaWNvblVybGAgYW5kIHNoYWRvdyBvcHRpb25zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgbXlJY29uID0gTC5kaXZJY29uKHtjbGFzc05hbWU6ICdteS1kaXYtaWNvbid9KTtcbiAgICogLy8geW91IGNhbiBzZXQgLm15LWRpdi1pY29uIHN0eWxlcyBpbiBDU1NcbiAgICpcbiAgICogTC5tYXJrZXIoWzUwLjUwNSwgMzAuNTddLCB7aWNvbjogbXlJY29ufSkuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IGhhcyBhICdsZWFmbGV0LWRpdi1pY29uJyBDU1MgY2xhc3MgYW5kIGlzIHN0eWxlZCBhcyBhIGxpdHRsZSB3aGl0ZSBzcXVhcmUgd2l0aCBhIHNoYWRvdy5cbiAgICovXG5cbiAgdmFyIERpdkljb24gPSBJY29uLmV4dGVuZCh7XG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQHNlY3Rpb25cbiAgXHRcdC8vIEBha2EgRGl2SWNvbiBvcHRpb25zXG4gIFx0XHRpY29uU2l6ZTogWzEyLCAxMl0sIC8vIGFsc28gY2FuIGJlIHNldCB0aHJvdWdoIENTU1xuXG4gIFx0XHQvLyBpY29uQW5jaG9yOiAoUG9pbnQpLFxuICBcdFx0Ly8gcG9wdXBBbmNob3I6IChQb2ludCksXG5cbiAgXHRcdC8vIEBvcHRpb24gaHRtbDogU3RyaW5nfEhUTUxFbGVtZW50ID0gJydcbiAgXHRcdC8vIEN1c3RvbSBIVE1MIGNvZGUgdG8gcHV0IGluc2lkZSB0aGUgZGl2IGVsZW1lbnQsIGVtcHR5IGJ5IGRlZmF1bHQuIEFsdGVybmF0aXZlbHksXG4gIFx0XHQvLyBhbiBpbnN0YW5jZSBvZiBgSFRNTEVsZW1lbnRgLlxuICBcdFx0aHRtbDogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gYmdQb3M6IFBvaW50ID0gWzAsIDBdXG4gIFx0XHQvLyBPcHRpb25hbCByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgYmFja2dyb3VuZCwgaW4gcGl4ZWxzXG4gIFx0XHRiZ1BvczogbnVsbCxcblxuICBcdFx0Y2xhc3NOYW1lOiAnbGVhZmxldC1kaXYtaWNvbidcbiAgXHR9LFxuXG4gIFx0Y3JlYXRlSWNvbjogZnVuY3Rpb24gKG9sZEljb24pIHtcbiAgXHRcdHZhciBkaXYgPSAob2xkSWNvbiAmJiBvbGRJY29uLnRhZ05hbWUgPT09ICdESVYnKSA/IG9sZEljb24gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIFx0XHRpZiAob3B0aW9ucy5odG1sIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICBcdFx0XHRlbXB0eShkaXYpO1xuICBcdFx0XHRkaXYuYXBwZW5kQ2hpbGQob3B0aW9ucy5odG1sKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGRpdi5pbm5lckhUTUwgPSBvcHRpb25zLmh0bWwgIT09IGZhbHNlID8gb3B0aW9ucy5odG1sIDogJyc7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLmJnUG9zKSB7XG4gIFx0XHRcdHZhciBiZ1BvcyA9IHRvUG9pbnQob3B0aW9ucy5iZ1Bvcyk7XG4gIFx0XHRcdGRpdi5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb24gPSAoLWJnUG9zLngpICsgJ3B4ICcgKyAoLWJnUG9zLnkpICsgJ3B4JztcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3NldEljb25TdHlsZXMoZGl2LCAnaWNvbicpO1xuXG4gIFx0XHRyZXR1cm4gZGl2O1xuICBcdH0sXG5cbiAgXHRjcmVhdGVTaGFkb3c6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBudWxsO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5kaXZJY29uKG9wdGlvbnM6IERpdkljb24gb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIGBEaXZJY29uYCBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBkaXZJY29uKG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IERpdkljb24ob3B0aW9ucyk7XG4gIH1cblxuICBJY29uLkRlZmF1bHQgPSBJY29uRGVmYXVsdDtcblxuICAvKlxuICAgKiBAY2xhc3MgR3JpZExheWVyXG4gICAqIEBpbmhlcml0cyBMYXllclxuICAgKiBAYWthIEwuR3JpZExheWVyXG4gICAqXG4gICAqIEdlbmVyaWMgY2xhc3MgZm9yIGhhbmRsaW5nIGEgdGlsZWQgZ3JpZCBvZiBIVE1MIGVsZW1lbnRzLiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgdGlsZSBsYXllcnMgYW5kIHJlcGxhY2VzIGBUaWxlTGF5ZXIuQ2FudmFzYC5cbiAgICogR3JpZExheWVyIGNhbiBiZSBleHRlbmRlZCB0byBjcmVhdGUgYSB0aWxlZCBncmlkIG9mIEhUTUwgZWxlbWVudHMgbGlrZSBgPGNhbnZhcz5gLCBgPGltZz5gIG9yIGA8ZGl2PmAuIEdyaWRMYXllciB3aWxsIGhhbmRsZSBjcmVhdGluZyBhbmQgYW5pbWF0aW5nIHRoZXNlIERPTSBlbGVtZW50cyBmb3IgeW91LlxuICAgKlxuICAgKlxuICAgKiBAc2VjdGlvbiBTeW5jaHJvbm91cyB1c2FnZVxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBUbyBjcmVhdGUgYSBjdXN0b20gbGF5ZXIsIGV4dGVuZCBHcmlkTGF5ZXIgYW5kIGltcGxlbWVudCB0aGUgYGNyZWF0ZVRpbGUoKWAgbWV0aG9kLCB3aGljaCB3aWxsIGJlIHBhc3NlZCBhIGBQb2ludGAgb2JqZWN0IHdpdGggdGhlIGB4YCwgYHlgLCBhbmQgYHpgICh6b29tIGxldmVsKSBjb29yZGluYXRlcyB0byBkcmF3IHlvdXIgdGlsZS5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIENhbnZhc0xheWVyID0gTC5HcmlkTGF5ZXIuZXh0ZW5kKHtcbiAgICogICAgIGNyZWF0ZVRpbGU6IGZ1bmN0aW9uKGNvb3Jkcyl7XG4gICAqICAgICAgICAgLy8gY3JlYXRlIGEgPGNhbnZhcz4gZWxlbWVudCBmb3IgZHJhd2luZ1xuICAgKiAgICAgICAgIHZhciB0aWxlID0gTC5Eb21VdGlsLmNyZWF0ZSgnY2FudmFzJywgJ2xlYWZsZXQtdGlsZScpO1xuICAgKlxuICAgKiAgICAgICAgIC8vIHNldHVwIHRpbGUgd2lkdGggYW5kIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICogICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgICogICAgICAgICB0aWxlLndpZHRoID0gc2l6ZS54O1xuICAgKiAgICAgICAgIHRpbGUuaGVpZ2h0ID0gc2l6ZS55O1xuICAgKlxuICAgKiAgICAgICAgIC8vIGdldCBhIGNhbnZhcyBjb250ZXh0IGFuZCBkcmF3IHNvbWV0aGluZyBvbiBpdCB1c2luZyBjb29yZHMueCwgY29vcmRzLnkgYW5kIGNvb3Jkcy56XG4gICAqICAgICAgICAgdmFyIGN0eCA9IHRpbGUuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICpcbiAgICogICAgICAgICAvLyByZXR1cm4gdGhlIHRpbGUgc28gaXQgY2FuIGJlIHJlbmRlcmVkIG9uIHNjcmVlblxuICAgKiAgICAgICAgIHJldHVybiB0aWxlO1xuICAgKiAgICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWN0aW9uIEFzeW5jaHJvbm91cyB1c2FnZVxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBUaWxlIGNyZWF0aW9uIGNhbiBhbHNvIGJlIGFzeW5jaHJvbm91cywgdGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyBhIHRoaXJkLXBhcnR5IGRyYXdpbmcgbGlicmFyeS4gT25jZSB0aGUgdGlsZSBpcyBmaW5pc2hlZCBkcmF3aW5nIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGBkb25lKClgIGNhbGxiYWNrLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgQ2FudmFzTGF5ZXIgPSBMLkdyaWRMYXllci5leHRlbmQoe1xuICAgKiAgICAgY3JlYXRlVGlsZTogZnVuY3Rpb24oY29vcmRzLCBkb25lKXtcbiAgICogICAgICAgICB2YXIgZXJyb3I7XG4gICAqXG4gICAqICAgICAgICAgLy8gY3JlYXRlIGEgPGNhbnZhcz4gZWxlbWVudCBmb3IgZHJhd2luZ1xuICAgKiAgICAgICAgIHZhciB0aWxlID0gTC5Eb21VdGlsLmNyZWF0ZSgnY2FudmFzJywgJ2xlYWZsZXQtdGlsZScpO1xuICAgKlxuICAgKiAgICAgICAgIC8vIHNldHVwIHRpbGUgd2lkdGggYW5kIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICogICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgICogICAgICAgICB0aWxlLndpZHRoID0gc2l6ZS54O1xuICAgKiAgICAgICAgIHRpbGUuaGVpZ2h0ID0gc2l6ZS55O1xuICAgKlxuICAgKiAgICAgICAgIC8vIGRyYXcgc29tZXRoaW5nIGFzeW5jaHJvbm91c2x5IGFuZCBwYXNzIHRoZSB0aWxlIHRvIHRoZSBkb25lKCkgY2FsbGJhY2tcbiAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgKiAgICAgICAgICAgICBkb25lKGVycm9yLCB0aWxlKTtcbiAgICogICAgICAgICB9LCAxMDAwKTtcbiAgICpcbiAgICogICAgICAgICByZXR1cm4gdGlsZTtcbiAgICogICAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2VjdGlvblxuICAgKi9cblxuXG4gIHZhciBHcmlkTGF5ZXIgPSBMYXllci5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIEdyaWRMYXllciBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiB0aWxlU2l6ZTogTnVtYmVyfFBvaW50ID0gMjU2XG4gIFx0XHQvLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIHRpbGVzIGluIHRoZSBncmlkLiBVc2UgYSBudW1iZXIgaWYgd2lkdGggYW5kIGhlaWdodCBhcmUgZXF1YWwsIG9yIGBMLnBvaW50KHdpZHRoLCBoZWlnaHQpYCBvdGhlcndpc2UuXG4gIFx0XHR0aWxlU2l6ZTogMjU2LFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxuICBcdFx0Ly8gT3BhY2l0eSBvZiB0aGUgdGlsZXMuIENhbiBiZSB1c2VkIGluIHRoZSBgY3JlYXRlVGlsZSgpYCBmdW5jdGlvbi5cbiAgXHRcdG9wYWNpdHk6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gdXBkYXRlV2hlbklkbGU6IEJvb2xlYW4gPSAoZGVwZW5kcylcbiAgXHRcdC8vIExvYWQgbmV3IHRpbGVzIG9ubHkgd2hlbiBwYW5uaW5nIGVuZHMuXG4gIFx0XHQvLyBgdHJ1ZWAgYnkgZGVmYXVsdCBvbiBtb2JpbGUgYnJvd3NlcnMsIGluIG9yZGVyIHRvIGF2b2lkIHRvbyBtYW55IHJlcXVlc3RzIGFuZCBrZWVwIHNtb290aCBuYXZpZ2F0aW9uLlxuICBcdFx0Ly8gYGZhbHNlYCBvdGhlcndpc2UgaW4gb3JkZXIgdG8gZGlzcGxheSBuZXcgdGlsZXMgX2R1cmluZ18gcGFubmluZywgc2luY2UgaXQgaXMgZWFzeSB0byBwYW4gb3V0c2lkZSB0aGVcbiAgXHRcdC8vIFtga2VlcEJ1ZmZlcmBdKCNncmlkbGF5ZXIta2VlcGJ1ZmZlcikgb3B0aW9uIGluIGRlc2t0b3AgYnJvd3NlcnMuXG4gIFx0XHR1cGRhdGVXaGVuSWRsZTogbW9iaWxlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHVwZGF0ZVdoZW5ab29taW5nOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgYSBzbW9vdGggem9vbSBhbmltYXRpb24gKGR1cmluZyBhIFt0b3VjaCB6b29tXSgjbWFwLXRvdWNoem9vbSkgb3IgYSBbYGZseVRvKClgXSgjbWFwLWZseXRvKSkgd2lsbCB1cGRhdGUgZ3JpZCBsYXllcnMgZXZlcnkgaW50ZWdlciB6b29tIGxldmVsLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgd2lsbCB1cGRhdGUgdGhlIGdyaWQgbGF5ZXIgb25seSB3aGVuIHRoZSBzbW9vdGggYW5pbWF0aW9uIGVuZHMuXG4gIFx0XHR1cGRhdGVXaGVuWm9vbWluZzogdHJ1ZSxcblxuICBcdFx0Ly8gQG9wdGlvbiB1cGRhdGVJbnRlcnZhbDogTnVtYmVyID0gMjAwXG4gIFx0XHQvLyBUaWxlcyB3aWxsIG5vdCB1cGRhdGUgbW9yZSB0aGFuIG9uY2UgZXZlcnkgYHVwZGF0ZUludGVydmFsYCBtaWxsaXNlY29uZHMgd2hlbiBwYW5uaW5nLlxuICBcdFx0dXBkYXRlSW50ZXJ2YWw6IDIwMCxcblxuICBcdFx0Ly8gQG9wdGlvbiB6SW5kZXg6IE51bWJlciA9IDFcbiAgXHRcdC8vIFRoZSBleHBsaWNpdCB6SW5kZXggb2YgdGhlIHRpbGUgbGF5ZXIuXG4gIFx0XHR6SW5kZXg6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gYm91bmRzOiBMYXRMbmdCb3VuZHMgPSB1bmRlZmluZWRcbiAgXHRcdC8vIElmIHNldCwgdGlsZXMgd2lsbCBvbmx5IGJlIGxvYWRlZCBpbnNpZGUgdGhlIHNldCBgTGF0TG5nQm91bmRzYC5cbiAgXHRcdGJvdW5kczogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBtaW5ab29tOiBOdW1iZXIgPSAwXG4gIFx0XHQvLyBUaGUgbWluaW11bSB6b29tIGxldmVsIGRvd24gdG8gd2hpY2ggdGhpcyBsYXllciB3aWxsIGJlIGRpc3BsYXllZCAoaW5jbHVzaXZlKS5cbiAgXHRcdG1pblpvb206IDAsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWF4Wm9vbTogTnVtYmVyID0gdW5kZWZpbmVkXG4gIFx0XHQvLyBUaGUgbWF4aW11bSB6b29tIGxldmVsIHVwIHRvIHdoaWNoIHRoaXMgbGF5ZXIgd2lsbCBiZSBkaXNwbGF5ZWQgKGluY2x1c2l2ZSkuXG4gIFx0XHRtYXhab29tOiB1bmRlZmluZWQsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWF4TmF0aXZlWm9vbTogTnVtYmVyID0gdW5kZWZpbmVkXG4gIFx0XHQvLyBNYXhpbXVtIHpvb20gbnVtYmVyIHRoZSB0aWxlIHNvdXJjZSBoYXMgYXZhaWxhYmxlLiBJZiBpdCBpcyBzcGVjaWZpZWQsXG4gIFx0XHQvLyB0aGUgdGlsZXMgb24gYWxsIHpvb20gbGV2ZWxzIGhpZ2hlciB0aGFuIGBtYXhOYXRpdmVab29tYCB3aWxsIGJlIGxvYWRlZFxuICBcdFx0Ly8gZnJvbSBgbWF4TmF0aXZlWm9vbWAgbGV2ZWwgYW5kIGF1dG8tc2NhbGVkLlxuICBcdFx0bWF4TmF0aXZlWm9vbTogdW5kZWZpbmVkLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG1pbk5hdGl2ZVpvb206IE51bWJlciA9IHVuZGVmaW5lZFxuICBcdFx0Ly8gTWluaW11bSB6b29tIG51bWJlciB0aGUgdGlsZSBzb3VyY2UgaGFzIGF2YWlsYWJsZS4gSWYgaXQgaXMgc3BlY2lmaWVkLFxuICBcdFx0Ly8gdGhlIHRpbGVzIG9uIGFsbCB6b29tIGxldmVscyBsb3dlciB0aGFuIGBtaW5OYXRpdmVab29tYCB3aWxsIGJlIGxvYWRlZFxuICBcdFx0Ly8gZnJvbSBgbWluTmF0aXZlWm9vbWAgbGV2ZWwgYW5kIGF1dG8tc2NhbGVkLlxuICBcdFx0bWluTmF0aXZlWm9vbTogdW5kZWZpbmVkLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG5vV3JhcDogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBsYXllciBpcyB3cmFwcGVkIGFyb3VuZCB0aGUgYW50aW1lcmlkaWFuLiBJZiBgdHJ1ZWAsIHRoZVxuICBcdFx0Ly8gR3JpZExheWVyIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgb25jZSBhdCBsb3cgem9vbSBsZXZlbHMuIEhhcyBub1xuICBcdFx0Ly8gZWZmZWN0IHdoZW4gdGhlIFttYXAgQ1JTXSgjbWFwLWNycykgZG9lc24ndCB3cmFwIGFyb3VuZC4gQ2FuIGJlIHVzZWRcbiAgXHRcdC8vIGluIGNvbWJpbmF0aW9uIHdpdGggW2Bib3VuZHNgXSgjZ3JpZGxheWVyLWJvdW5kcykgdG8gcHJldmVudCByZXF1ZXN0aW5nXG4gIFx0XHQvLyB0aWxlcyBvdXRzaWRlIHRoZSBDUlMgbGltaXRzLlxuICBcdFx0bm9XcmFwOiBmYWxzZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAndGlsZVBhbmUnXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSBncmlkIGxheWVyIHdpbGwgYmUgYWRkZWQuXG4gIFx0XHRwYW5lOiAndGlsZVBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcbiAgXHRcdC8vIEEgY3VzdG9tIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIHRoZSB0aWxlIGxheWVyLiBFbXB0eSBieSBkZWZhdWx0LlxuICBcdFx0Y2xhc3NOYW1lOiAnJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBrZWVwQnVmZmVyOiBOdW1iZXIgPSAyXG4gIFx0XHQvLyBXaGVuIHBhbm5pbmcgdGhlIG1hcCwga2VlcCB0aGlzIG1hbnkgcm93cyBhbmQgY29sdW1ucyBvZiB0aWxlcyBiZWZvcmUgdW5sb2FkaW5nIHRoZW0uXG4gIFx0XHRrZWVwQnVmZmVyOiAyXG4gIFx0fSxcblxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5faW5pdENvbnRhaW5lcigpO1xuXG4gIFx0XHR0aGlzLl9sZXZlbHMgPSB7fTtcbiAgXHRcdHRoaXMuX3RpbGVzID0ge307XG5cbiAgXHRcdHRoaXMuX3Jlc2V0VmlldygpO1xuICBcdFx0dGhpcy5fdXBkYXRlKCk7XG4gIFx0fSxcblxuICBcdGJlZm9yZUFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0bWFwLl9hZGRab29tTGltaXQodGhpcyk7XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHR0aGlzLl9yZW1vdmVBbGxUaWxlcygpO1xuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRtYXAuX3JlbW92ZVpvb21MaW1pdCh0aGlzKTtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IG51bGw7XG4gIFx0XHR0aGlzLl90aWxlWm9vbSA9IHVuZGVmaW5lZDtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQ6IHRoaXNcbiAgXHQvLyBCcmluZ3MgdGhlIHRpbGUgbGF5ZXIgdG8gdGhlIHRvcCBvZiBhbGwgdGlsZSBsYXllcnMuXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRvRnJvbnQodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdFx0dGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvQmFjazogdGhpc1xuICBcdC8vIEJyaW5ncyB0aGUgdGlsZSBsYXllciB0byB0aGUgYm90dG9tIG9mIGFsbCB0aWxlIGxheWVycy5cbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0b0JhY2sodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdFx0dGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1pbik7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRDb250YWluZXI6IEhUTUxFbGVtZW50XG4gIFx0Ly8gUmV0dXJucyB0aGUgSFRNTCBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHRpbGVzIGZvciB0aGlzIGxheWVyLlxuICBcdGdldENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRPcGFjaXR5KG9wYWNpdHk6IE51bWJlcik6IHRoaXNcbiAgXHQvLyBDaGFuZ2VzIHRoZSBbb3BhY2l0eV0oI2dyaWRsYXllci1vcGFjaXR5KSBvZiB0aGUgZ3JpZCBsYXllci5cbiAgXHRzZXRPcGFjaXR5OiBmdW5jdGlvbiAob3BhY2l0eSkge1xuICBcdFx0dGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5O1xuICBcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0WkluZGV4KHpJbmRleDogTnVtYmVyKTogdGhpc1xuICBcdC8vIENoYW5nZXMgdGhlIFt6SW5kZXhdKCNncmlkbGF5ZXItemluZGV4KSBvZiB0aGUgZ3JpZCBsYXllci5cbiAgXHRzZXRaSW5kZXg6IGZ1bmN0aW9uICh6SW5kZXgpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy56SW5kZXggPSB6SW5kZXg7XG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcblxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgaXNMb2FkaW5nOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IHRpbGUgaW4gdGhlIGdyaWQgbGF5ZXIgaGFzIG5vdCBmaW5pc2hlZCBsb2FkaW5nLlxuICBcdGlzTG9hZGluZzogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVkcmF3OiB0aGlzXG4gIFx0Ly8gQ2F1c2VzIHRoZSBsYXllciB0byBjbGVhciBhbGwgdGhlIHRpbGVzIGFuZCByZXF1ZXN0IHRoZW0gYWdhaW4uXG4gIFx0cmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRoaXMuX3JlbW92ZUFsbFRpbGVzKCk7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGV2ZW50cyA9IHtcbiAgXHRcdFx0dmlld3ByZXJlc2V0OiB0aGlzLl9pbnZhbGlkYXRlQWxsLFxuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMuX3Jlc2V0VmlldyxcbiAgXHRcdFx0em9vbTogdGhpcy5fcmVzZXRWaWV3LFxuICBcdFx0XHRtb3ZlZW5kOiB0aGlzLl9vbk1vdmVFbmRcbiAgXHRcdH07XG5cbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlKSB7XG4gIFx0XHRcdC8vIHVwZGF0ZSB0aWxlcyBvbiBtb3ZlLCBidXQgbm90IG1vcmUgb2Z0ZW4gdGhhbiBvbmNlIHBlciBnaXZlbiBpbnRlcnZhbFxuICBcdFx0XHRpZiAoIXRoaXMuX29uTW92ZSkge1xuICBcdFx0XHRcdHRoaXMuX29uTW92ZSA9IHRocm90dGxlKHRoaXMuX29uTW92ZUVuZCwgdGhpcy5vcHRpb25zLnVwZGF0ZUludGVydmFsLCB0aGlzKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdGV2ZW50cy5tb3ZlID0gdGhpcy5fb25Nb3ZlO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xuICBcdH0sXG5cbiAgXHQvLyBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xuICBcdC8vIExheWVycyBleHRlbmRpbmcgYEdyaWRMYXllcmAgc2hhbGwgcmVpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2QuXG4gIFx0Ly8gQG1ldGhvZCBjcmVhdGVUaWxlKGNvb3JkczogT2JqZWN0LCBkb25lPzogRnVuY3Rpb24pOiBIVE1MRWxlbWVudFxuICBcdC8vIENhbGxlZCBvbmx5IGludGVybmFsbHksIG11c3QgYmUgb3ZlcnJpZGRlbiBieSBjbGFzc2VzIGV4dGVuZGluZyBgR3JpZExheWVyYC5cbiAgXHQvLyBSZXR1cm5zIHRoZSBgSFRNTEVsZW1lbnRgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGBjb29yZHNgLiBJZiB0aGUgYGRvbmVgIGNhbGxiYWNrXG4gIFx0Ly8gaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSB0aWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIGFuZCBkcmF3aW5nLlxuICBcdGNyZWF0ZVRpbGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAbWV0aG9kIGdldFRpbGVTaXplOiBQb2ludFxuICBcdC8vIE5vcm1hbGl6ZXMgdGhlIFt0aWxlU2l6ZSBvcHRpb25dKCNncmlkbGF5ZXItdGlsZXNpemUpIGludG8gYSBwb2ludC4gVXNlZCBieSB0aGUgYGNyZWF0ZVRpbGUoKWAgbWV0aG9kLlxuICBcdGdldFRpbGVTaXplOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcyA9IHRoaXMub3B0aW9ucy50aWxlU2l6ZTtcbiAgXHRcdHJldHVybiBzIGluc3RhbmNlb2YgUG9pbnQgPyBzIDogbmV3IFBvaW50KHMsIHMpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlWkluZGV4OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fY29udGFpbmVyICYmIHRoaXMub3B0aW9ucy56SW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuekluZGV4ICE9PSBudWxsKSB7XG4gIFx0XHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXggPSB0aGlzLm9wdGlvbnMuekluZGV4O1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfc2V0QXV0b1pJbmRleDogZnVuY3Rpb24gKGNvbXBhcmUpIHtcbiAgXHRcdC8vIGdvIHRocm91Z2ggYWxsIG90aGVyIGxheWVycyBvZiB0aGUgc2FtZSBwYW5lLCBzZXQgekluZGV4IHRvIG1heCArIDEgKGZyb250KSBvciBtaW4gLSAxIChiYWNrKVxuXG4gIFx0XHR2YXIgbGF5ZXJzID0gdGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sXG4gIFx0XHQgICAgZWRnZVpJbmRleCA9IC1jb21wYXJlKC1JbmZpbml0eSwgSW5maW5pdHkpOyAvLyAtSW5maW5pdHkgZm9yIG1heCwgSW5maW5pdHkgZm9yIG1pblxuXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF5ZXJzLmxlbmd0aCwgekluZGV4OyBpIDwgbGVuOyBpKyspIHtcblxuICBcdFx0XHR6SW5kZXggPSBsYXllcnNbaV0uc3R5bGUuekluZGV4O1xuXG4gIFx0XHRcdGlmIChsYXllcnNbaV0gIT09IHRoaXMuX2NvbnRhaW5lciAmJiB6SW5kZXgpIHtcbiAgXHRcdFx0XHRlZGdlWkluZGV4ID0gY29tcGFyZShlZGdlWkluZGV4LCArekluZGV4KTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRpZiAoaXNGaW5pdGUoZWRnZVpJbmRleCkpIHtcbiAgXHRcdFx0dGhpcy5vcHRpb25zLnpJbmRleCA9IGVkZ2VaSW5kZXggKyBjb21wYXJlKC0xLCAxKTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlWkluZGV4KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVPcGFjaXR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cblxuICBcdFx0Ly8gSUUgZG9lc24ndCBpbmhlcml0IGZpbHRlciBvcGFjaXR5IHByb3Blcmx5LCBzbyB3ZSdyZSBmb3JjZWQgdG8gc2V0IGl0IG9uIHRpbGVzXG4gIFx0XHRpZiAoaWVsdDkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLCB0aGlzLm9wdGlvbnMub3BhY2l0eSk7XG5cbiAgXHRcdHZhciBub3cgPSArbmV3IERhdGUoKSxcbiAgXHRcdCAgICBuZXh0RnJhbWUgPSBmYWxzZSxcbiAgXHRcdCAgICB3aWxsUHJ1bmUgPSBmYWxzZTtcblxuICBcdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgXHRcdFx0aWYgKCF0aWxlLmN1cnJlbnQgfHwgIXRpbGUubG9hZGVkKSB7IGNvbnRpbnVlOyB9XG5cbiAgXHRcdFx0dmFyIGZhZGUgPSBNYXRoLm1pbigxLCAobm93IC0gdGlsZS5sb2FkZWQpIC8gMjAwKTtcblxuICBcdFx0XHRzZXRPcGFjaXR5KHRpbGUuZWwsIGZhZGUpO1xuICBcdFx0XHRpZiAoZmFkZSA8IDEpIHtcbiAgXHRcdFx0XHRuZXh0RnJhbWUgPSB0cnVlO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdGlmICh0aWxlLmFjdGl2ZSkge1xuICBcdFx0XHRcdFx0d2lsbFBydW5lID0gdHJ1ZTtcbiAgXHRcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdFx0dGhpcy5fb25PcGFxdWVUaWxlKHRpbGUpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0XHR0aWxlLmFjdGl2ZSA9IHRydWU7XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0aWYgKHdpbGxQcnVuZSAmJiAhdGhpcy5fbm9QcnVuZSkgeyB0aGlzLl9wcnVuZVRpbGVzKCk7IH1cblxuICBcdFx0aWYgKG5leHRGcmFtZSkge1xuICBcdFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fZmFkZUZyYW1lKTtcbiAgXHRcdFx0dGhpcy5fZmFkZUZyYW1lID0gcmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVPcGFjaXR5LCB0aGlzKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X29uT3BhcXVlVGlsZTogZmFsc2VGbixcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fY29udGFpbmVyKSB7IHJldHVybjsgfVxuXG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtbGF5ZXIgJyArICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnKSk7XG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcblxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5vcGFjaXR5IDwgMSkge1xuICBcdFx0XHR0aGlzLl91cGRhdGVPcGFjaXR5KCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0fSxcblxuICBcdF91cGRhdGVMZXZlbHM6IGZ1bmN0aW9uICgpIHtcblxuICBcdFx0dmFyIHpvb20gPSB0aGlzLl90aWxlWm9vbSxcbiAgXHRcdCAgICBtYXhab29tID0gdGhpcy5vcHRpb25zLm1heFpvb207XG5cbiAgXHRcdGlmICh6b29tID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gIFx0XHRmb3IgKHZhciB6IGluIHRoaXMuX2xldmVscykge1xuICBcdFx0XHR6ID0gTnVtYmVyKHopO1xuICBcdFx0XHRpZiAodGhpcy5fbGV2ZWxzW3pdLmVsLmNoaWxkcmVuLmxlbmd0aCB8fCB6ID09PSB6b29tKSB7XG4gIFx0XHRcdFx0dGhpcy5fbGV2ZWxzW3pdLmVsLnN0eWxlLnpJbmRleCA9IG1heFpvb20gLSBNYXRoLmFicyh6b29tIC0geik7XG4gIFx0XHRcdFx0dGhpcy5fb25VcGRhdGVMZXZlbCh6KTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRyZW1vdmUodGhpcy5fbGV2ZWxzW3pdLmVsKTtcbiAgXHRcdFx0XHR0aGlzLl9yZW1vdmVUaWxlc0F0Wm9vbSh6KTtcbiAgXHRcdFx0XHR0aGlzLl9vblJlbW92ZUxldmVsKHopO1xuICBcdFx0XHRcdGRlbGV0ZSB0aGlzLl9sZXZlbHNbel07XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0dmFyIGxldmVsID0gdGhpcy5fbGV2ZWxzW3pvb21dLFxuICBcdFx0ICAgIG1hcCA9IHRoaXMuX21hcDtcblxuICBcdFx0aWYgKCFsZXZlbCkge1xuICBcdFx0XHRsZXZlbCA9IHRoaXMuX2xldmVsc1t6b29tXSA9IHt9O1xuXG4gIFx0XHRcdGxldmVsLmVsID0gY3JlYXRlJDEoJ2RpdicsICdsZWFmbGV0LXRpbGUtY29udGFpbmVyIGxlYWZsZXQtem9vbS1hbmltYXRlZCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRcdGxldmVsLmVsLnN0eWxlLnpJbmRleCA9IG1heFpvb207XG5cbiAgXHRcdFx0bGV2ZWwub3JpZ2luID0gbWFwLnByb2plY3QobWFwLnVucHJvamVjdChtYXAuZ2V0UGl4ZWxPcmlnaW4oKSksIHpvb20pLnJvdW5kKCk7XG4gIFx0XHRcdGxldmVsLnpvb20gPSB6b29tO1xuXG4gIFx0XHRcdHRoaXMuX3NldFpvb21UcmFuc2Zvcm0obGV2ZWwsIG1hcC5nZXRDZW50ZXIoKSwgbWFwLmdldFpvb20oKSk7XG5cbiAgXHRcdFx0Ly8gZm9yY2UgdGhlIGJyb3dzZXIgdG8gY29uc2lkZXIgdGhlIG5ld2x5IGFkZGVkIGVsZW1lbnQgZm9yIHRyYW5zaXRpb25cbiAgXHRcdFx0ZmFsc2VGbihsZXZlbC5lbC5vZmZzZXRXaWR0aCk7XG5cbiAgXHRcdFx0dGhpcy5fb25DcmVhdGVMZXZlbChsZXZlbCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2xldmVsID0gbGV2ZWw7XG5cbiAgXHRcdHJldHVybiBsZXZlbDtcbiAgXHR9LFxuXG4gIFx0X29uVXBkYXRlTGV2ZWw6IGZhbHNlRm4sXG5cbiAgXHRfb25SZW1vdmVMZXZlbDogZmFsc2VGbixcblxuICBcdF9vbkNyZWF0ZUxldmVsOiBmYWxzZUZuLFxuXG4gIFx0X3BydW5lVGlsZXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dmFyIGtleSwgdGlsZTtcblxuICBcdFx0dmFyIHpvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpO1xuICBcdFx0aWYgKHpvb20gPiB0aGlzLm9wdGlvbnMubWF4Wm9vbSB8fFxuICBcdFx0XHR6b29tIDwgdGhpcy5vcHRpb25zLm1pblpvb20pIHtcbiAgXHRcdFx0dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKTtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHRmb3IgKGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHR0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgXHRcdFx0dGlsZS5yZXRhaW4gPSB0aWxlLmN1cnJlbnQ7XG4gIFx0XHR9XG5cbiAgXHRcdGZvciAoa2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuICBcdFx0XHRpZiAodGlsZS5jdXJyZW50ICYmICF0aWxlLmFjdGl2ZSkge1xuICBcdFx0XHRcdHZhciBjb29yZHMgPSB0aWxlLmNvb3JkcztcbiAgXHRcdFx0XHRpZiAoIXRoaXMuX3JldGFpblBhcmVudChjb29yZHMueCwgY29vcmRzLnksIGNvb3Jkcy56LCBjb29yZHMueiAtIDUpKSB7XG4gIFx0XHRcdFx0XHR0aGlzLl9yZXRhaW5DaGlsZHJlbihjb29yZHMueCwgY29vcmRzLnksIGNvb3Jkcy56LCBjb29yZHMueiArIDIpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRmb3IgKGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHRpZiAoIXRoaXMuX3RpbGVzW2tleV0ucmV0YWluKSB7XG4gIFx0XHRcdFx0dGhpcy5fcmVtb3ZlVGlsZShrZXkpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZW1vdmVUaWxlc0F0Wm9vbTogZnVuY3Rpb24gKHpvb20pIHtcbiAgXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHRpZiAodGhpcy5fdGlsZXNba2V5XS5jb29yZHMueiAhPT0gem9vbSkge1xuICBcdFx0XHRcdGNvbnRpbnVlO1xuICBcdFx0XHR9XG4gIFx0XHRcdHRoaXMuX3JlbW92ZVRpbGUoa2V5KTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlbW92ZUFsbFRpbGVzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRmb3IgKHZhciBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dGhpcy5fcmVtb3ZlVGlsZShrZXkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfaW52YWxpZGF0ZUFsbDogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIgeiBpbiB0aGlzLl9sZXZlbHMpIHtcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX2xldmVsc1t6XS5lbCk7XG4gIFx0XHRcdHRoaXMuX29uUmVtb3ZlTGV2ZWwoTnVtYmVyKHopKTtcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2xldmVsc1t6XTtcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3JlbW92ZUFsbFRpbGVzKCk7XG5cbiAgXHRcdHRoaXMuX3RpbGVab29tID0gdW5kZWZpbmVkO1xuICBcdH0sXG5cbiAgXHRfcmV0YWluUGFyZW50OiBmdW5jdGlvbiAoeCwgeSwgeiwgbWluWm9vbSkge1xuICBcdFx0dmFyIHgyID0gTWF0aC5mbG9vcih4IC8gMiksXG4gIFx0XHQgICAgeTIgPSBNYXRoLmZsb29yKHkgLyAyKSxcbiAgXHRcdCAgICB6MiA9IHogLSAxLFxuICBcdFx0ICAgIGNvb3JkczIgPSBuZXcgUG9pbnQoK3gyLCAreTIpO1xuICBcdFx0Y29vcmRzMi56ID0gK3oyO1xuXG4gIFx0XHR2YXIga2V5ID0gdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3JkczIpLFxuICBcdFx0ICAgIHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuXG4gIFx0XHRpZiAodGlsZSAmJiB0aWxlLmFjdGl2ZSkge1xuICBcdFx0XHR0aWxlLnJldGFpbiA9IHRydWU7XG4gIFx0XHRcdHJldHVybiB0cnVlO1xuXG4gIFx0XHR9IGVsc2UgaWYgKHRpbGUgJiYgdGlsZS5sb2FkZWQpIHtcbiAgXHRcdFx0dGlsZS5yZXRhaW4gPSB0cnVlO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoejIgPiBtaW5ab29tKSB7XG4gIFx0XHRcdHJldHVybiB0aGlzLl9yZXRhaW5QYXJlbnQoeDIsIHkyLCB6MiwgbWluWm9vbSk7XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiBmYWxzZTtcbiAgXHR9LFxuXG4gIFx0X3JldGFpbkNoaWxkcmVuOiBmdW5jdGlvbiAoeCwgeSwgeiwgbWF4Wm9vbSkge1xuXG4gIFx0XHRmb3IgKHZhciBpID0gMiAqIHg7IGkgPCAyICogeCArIDI7IGkrKykge1xuICBcdFx0XHRmb3IgKHZhciBqID0gMiAqIHk7IGogPCAyICogeSArIDI7IGorKykge1xuXG4gIFx0XHRcdFx0dmFyIGNvb3JkcyA9IG5ldyBQb2ludChpLCBqKTtcbiAgXHRcdFx0XHRjb29yZHMueiA9IHogKyAxO1xuXG4gIFx0XHRcdFx0dmFyIGtleSA9IHRoaXMuX3RpbGVDb29yZHNUb0tleShjb29yZHMpLFxuICBcdFx0XHRcdCAgICB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcblxuICBcdFx0XHRcdGlmICh0aWxlICYmIHRpbGUuYWN0aXZlKSB7XG4gIFx0XHRcdFx0XHR0aWxlLnJldGFpbiA9IHRydWU7XG4gIFx0XHRcdFx0XHRjb250aW51ZTtcblxuICBcdFx0XHRcdH0gZWxzZSBpZiAodGlsZSAmJiB0aWxlLmxvYWRlZCkge1xuICBcdFx0XHRcdFx0dGlsZS5yZXRhaW4gPSB0cnVlO1xuICBcdFx0XHRcdH1cblxuICBcdFx0XHRcdGlmICh6ICsgMSA8IG1heFpvb20pIHtcbiAgXHRcdFx0XHRcdHRoaXMuX3JldGFpbkNoaWxkcmVuKGksIGosIHogKyAxLCBtYXhab29tKTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3Jlc2V0VmlldzogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBhbmltYXRpbmcgPSBlICYmIChlLnBpbmNoIHx8IGUuZmx5VG8pO1xuICBcdFx0dGhpcy5fc2V0Vmlldyh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksIHRoaXMuX21hcC5nZXRab29tKCksIGFuaW1hdGluZywgYW5pbWF0aW5nKTtcbiAgXHR9LFxuXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dGhpcy5fc2V0VmlldyhlLmNlbnRlciwgZS56b29tLCB0cnVlLCBlLm5vVXBkYXRlKTtcbiAgXHR9LFxuXG4gIFx0X2NsYW1wWm9vbTogZnVuY3Rpb24gKHpvb20pIHtcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIFx0XHRpZiAodW5kZWZpbmVkICE9PSBvcHRpb25zLm1pbk5hdGl2ZVpvb20gJiYgem9vbSA8IG9wdGlvbnMubWluTmF0aXZlWm9vbSkge1xuICBcdFx0XHRyZXR1cm4gb3B0aW9ucy5taW5OYXRpdmVab29tO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodW5kZWZpbmVkICE9PSBvcHRpb25zLm1heE5hdGl2ZVpvb20gJiYgb3B0aW9ucy5tYXhOYXRpdmVab29tIDwgem9vbSkge1xuICBcdFx0XHRyZXR1cm4gb3B0aW9ucy5tYXhOYXRpdmVab29tO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gem9vbTtcbiAgXHR9LFxuXG4gIFx0X3NldFZpZXc6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG5vUHJ1bmUsIG5vVXBkYXRlKSB7XG4gIFx0XHR2YXIgdGlsZVpvb20gPSBNYXRoLnJvdW5kKHpvb20pO1xuICBcdFx0aWYgKCh0aGlzLm9wdGlvbnMubWF4Wm9vbSAhPT0gdW5kZWZpbmVkICYmIHRpbGVab29tID4gdGhpcy5vcHRpb25zLm1heFpvb20pIHx8XG4gIFx0XHQgICAgKHRoaXMub3B0aW9ucy5taW5ab29tICE9PSB1bmRlZmluZWQgJiYgdGlsZVpvb20gPCB0aGlzLm9wdGlvbnMubWluWm9vbSkpIHtcbiAgXHRcdFx0dGlsZVpvb20gPSB1bmRlZmluZWQ7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aWxlWm9vbSA9IHRoaXMuX2NsYW1wWm9vbSh0aWxlWm9vbSk7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciB0aWxlWm9vbUNoYW5nZWQgPSB0aGlzLm9wdGlvbnMudXBkYXRlV2hlblpvb21pbmcgJiYgKHRpbGVab29tICE9PSB0aGlzLl90aWxlWm9vbSk7XG5cbiAgXHRcdGlmICghbm9VcGRhdGUgfHwgdGlsZVpvb21DaGFuZ2VkKSB7XG5cbiAgXHRcdFx0dGhpcy5fdGlsZVpvb20gPSB0aWxlWm9vbTtcblxuICBcdFx0XHRpZiAodGhpcy5fYWJvcnRMb2FkaW5nKSB7XG4gIFx0XHRcdFx0dGhpcy5fYWJvcnRMb2FkaW5nKCk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl91cGRhdGVMZXZlbHMoKTtcbiAgXHRcdFx0dGhpcy5fcmVzZXRHcmlkKCk7XG5cbiAgXHRcdFx0aWYgKHRpbGVab29tICE9PSB1bmRlZmluZWQpIHtcbiAgXHRcdFx0XHR0aGlzLl91cGRhdGUoY2VudGVyKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdGlmICghbm9QcnVuZSkge1xuICBcdFx0XHRcdHRoaXMuX3BydW5lVGlsZXMoKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdC8vIEZsYWcgdG8gcHJldmVudCBfdXBkYXRlT3BhY2l0eSBmcm9tIHBydW5pbmcgdGlsZXMgZHVyaW5nXG4gIFx0XHRcdC8vIGEgem9vbSBhbmltIG9yIGEgcGluY2ggZ2VzdHVyZVxuICBcdFx0XHR0aGlzLl9ub1BydW5lID0gISFub1BydW5lO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9zZXRab29tVHJhbnNmb3JtcyhjZW50ZXIsIHpvb20pO1xuICBcdH0sXG5cbiAgXHRfc2V0Wm9vbVRyYW5zZm9ybXM6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcbiAgXHRcdGZvciAodmFyIGkgaW4gdGhpcy5fbGV2ZWxzKSB7XG4gIFx0XHRcdHRoaXMuX3NldFpvb21UcmFuc2Zvcm0odGhpcy5fbGV2ZWxzW2ldLCBjZW50ZXIsIHpvb20pO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfc2V0Wm9vbVRyYW5zZm9ybTogZnVuY3Rpb24gKGxldmVsLCBjZW50ZXIsIHpvb20pIHtcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuX21hcC5nZXRab29tU2NhbGUoem9vbSwgbGV2ZWwuem9vbSksXG4gIFx0XHQgICAgdHJhbnNsYXRlID0gbGV2ZWwub3JpZ2luLm11bHRpcGx5Qnkoc2NhbGUpXG4gIFx0XHQgICAgICAgIC5zdWJ0cmFjdCh0aGlzLl9tYXAuX2dldE5ld1BpeGVsT3JpZ2luKGNlbnRlciwgem9vbSkpLnJvdW5kKCk7XG5cbiAgXHRcdGlmIChhbnkzZCkge1xuICBcdFx0XHRzZXRUcmFuc2Zvcm0obGV2ZWwuZWwsIHRyYW5zbGF0ZSwgc2NhbGUpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0c2V0UG9zaXRpb24obGV2ZWwuZWwsIHRyYW5zbGF0ZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZXNldEdyaWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgY3JzID0gbWFwLm9wdGlvbnMuY3JzLFxuICBcdFx0ICAgIHRpbGVTaXplID0gdGhpcy5fdGlsZVNpemUgPSB0aGlzLmdldFRpbGVTaXplKCksXG4gIFx0XHQgICAgdGlsZVpvb20gPSB0aGlzLl90aWxlWm9vbTtcblxuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX21hcC5nZXRQaXhlbFdvcmxkQm91bmRzKHRoaXMuX3RpbGVab29tKTtcbiAgXHRcdGlmIChib3VuZHMpIHtcbiAgXHRcdFx0dGhpcy5fZ2xvYmFsVGlsZVJhbmdlID0gdGhpcy5fcHhCb3VuZHNUb1RpbGVSYW5nZShib3VuZHMpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl93cmFwWCA9IGNycy53cmFwTG5nICYmICF0aGlzLm9wdGlvbnMubm9XcmFwICYmIFtcbiAgXHRcdFx0TWF0aC5mbG9vcihtYXAucHJvamVjdChbMCwgY3JzLndyYXBMbmdbMF1dLCB0aWxlWm9vbSkueCAvIHRpbGVTaXplLngpLFxuICBcdFx0XHRNYXRoLmNlaWwobWFwLnByb2plY3QoWzAsIGNycy53cmFwTG5nWzFdXSwgdGlsZVpvb20pLnggLyB0aWxlU2l6ZS55KVxuICBcdFx0XTtcbiAgXHRcdHRoaXMuX3dyYXBZID0gY3JzLndyYXBMYXQgJiYgIXRoaXMub3B0aW9ucy5ub1dyYXAgJiYgW1xuICBcdFx0XHRNYXRoLmZsb29yKG1hcC5wcm9qZWN0KFtjcnMud3JhcExhdFswXSwgMF0sIHRpbGVab29tKS55IC8gdGlsZVNpemUueCksXG4gIFx0XHRcdE1hdGguY2VpbChtYXAucHJvamVjdChbY3JzLndyYXBMYXRbMV0sIDBdLCB0aWxlWm9vbSkueSAvIHRpbGVTaXplLnkpXG4gIFx0XHRdO1xuICBcdH0sXG5cbiAgXHRfb25Nb3ZlRW5kOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCB8fCB0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdH0sXG5cbiAgXHRfZ2V0VGlsZWRQaXhlbEJvdW5kczogZnVuY3Rpb24gKGNlbnRlcikge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBtYXBab29tID0gbWFwLl9hbmltYXRpbmdab29tID8gTWF0aC5tYXgobWFwLl9hbmltYXRlVG9ab29tLCBtYXAuZ2V0Wm9vbSgpKSA6IG1hcC5nZXRab29tKCksXG4gIFx0XHQgICAgc2NhbGUgPSBtYXAuZ2V0Wm9vbVNjYWxlKG1hcFpvb20sIHRoaXMuX3RpbGVab29tKSxcbiAgXHRcdCAgICBwaXhlbENlbnRlciA9IG1hcC5wcm9qZWN0KGNlbnRlciwgdGhpcy5fdGlsZVpvb20pLmZsb29yKCksXG4gIFx0XHQgICAgaGFsZlNpemUgPSBtYXAuZ2V0U2l6ZSgpLmRpdmlkZUJ5KHNjYWxlICogMik7XG5cbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKHBpeGVsQ2VudGVyLnN1YnRyYWN0KGhhbGZTaXplKSwgcGl4ZWxDZW50ZXIuYWRkKGhhbGZTaXplKSk7XG4gIFx0fSxcblxuICBcdC8vIFByaXZhdGUgbWV0aG9kIHRvIGxvYWQgdGlsZXMgaW4gdGhlIGdyaWQncyBhY3RpdmUgem9vbSBsZXZlbCBhY2NvcmRpbmcgdG8gbWFwIGJvdW5kc1xuICBcdF91cGRhdGU6IGZ1bmN0aW9uIChjZW50ZXIpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gIFx0XHRpZiAoIW1hcCkgeyByZXR1cm47IH1cbiAgXHRcdHZhciB6b29tID0gdGhpcy5fY2xhbXBab29tKG1hcC5nZXRab29tKCkpO1xuXG4gIFx0XHRpZiAoY2VudGVyID09PSB1bmRlZmluZWQpIHsgY2VudGVyID0gbWFwLmdldENlbnRlcigpOyB9XG4gIFx0XHRpZiAodGhpcy5fdGlsZVpvb20gPT09IHVuZGVmaW5lZCkgeyByZXR1cm47IH1cdC8vIGlmIG91dCBvZiBtaW56b29tL21heHpvb21cblxuICBcdFx0dmFyIHBpeGVsQm91bmRzID0gdGhpcy5fZ2V0VGlsZWRQaXhlbEJvdW5kcyhjZW50ZXIpLFxuICBcdFx0ICAgIHRpbGVSYW5nZSA9IHRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2UocGl4ZWxCb3VuZHMpLFxuICBcdFx0ICAgIHRpbGVDZW50ZXIgPSB0aWxlUmFuZ2UuZ2V0Q2VudGVyKCksXG4gIFx0XHQgICAgcXVldWUgPSBbXSxcbiAgXHRcdCAgICBtYXJnaW4gPSB0aGlzLm9wdGlvbnMua2VlcEJ1ZmZlcixcbiAgXHRcdCAgICBub1BydW5lUmFuZ2UgPSBuZXcgQm91bmRzKHRpbGVSYW5nZS5nZXRCb3R0b21MZWZ0KCkuc3VidHJhY3QoW21hcmdpbiwgLW1hcmdpbl0pLFxuICBcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJhbmdlLmdldFRvcFJpZ2h0KCkuYWRkKFttYXJnaW4sIC1tYXJnaW5dKSk7XG5cbiAgXHRcdC8vIFNhbml0eSBjaGVjazogcGFuaWMgaWYgdGhlIHRpbGUgcmFuZ2UgY29udGFpbnMgSW5maW5pdHkgc29tZXdoZXJlLlxuICBcdFx0aWYgKCEoaXNGaW5pdGUodGlsZVJhbmdlLm1pbi54KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1pbi55KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1heC54KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1heC55KSkpIHsgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXMnKTsgfVxuXG4gIFx0XHRmb3IgKHZhciBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dmFyIGMgPSB0aGlzLl90aWxlc1trZXldLmNvb3JkcztcbiAgXHRcdFx0aWYgKGMueiAhPT0gdGhpcy5fdGlsZVpvb20gfHwgIW5vUHJ1bmVSYW5nZS5jb250YWlucyhuZXcgUG9pbnQoYy54LCBjLnkpKSkge1xuICBcdFx0XHRcdHRoaXMuX3RpbGVzW2tleV0uY3VycmVudCA9IGZhbHNlO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdC8vIF91cGRhdGUganVzdCBsb2FkcyBtb3JlIHRpbGVzLiBJZiB0aGUgdGlsZSB6b29tIGxldmVsIGRpZmZlcnMgdG9vIG11Y2hcbiAgXHRcdC8vIGZyb20gdGhlIG1hcCdzLCBsZXQgX3NldFZpZXcgcmVzZXQgbGV2ZWxzIGFuZCBwcnVuZSBvbGQgdGlsZXMuXG4gIFx0XHRpZiAoTWF0aC5hYnMoem9vbSAtIHRoaXMuX3RpbGVab29tKSA+IDEpIHsgdGhpcy5fc2V0VmlldyhjZW50ZXIsIHpvb20pOyByZXR1cm47IH1cblxuICBcdFx0Ly8gY3JlYXRlIGEgcXVldWUgb2YgY29vcmRpbmF0ZXMgdG8gbG9hZCB0aWxlcyBmcm9tXG4gIFx0XHRmb3IgKHZhciBqID0gdGlsZVJhbmdlLm1pbi55OyBqIDw9IHRpbGVSYW5nZS5tYXgueTsgaisrKSB7XG4gIFx0XHRcdGZvciAodmFyIGkgPSB0aWxlUmFuZ2UubWluLng7IGkgPD0gdGlsZVJhbmdlLm1heC54OyBpKyspIHtcbiAgXHRcdFx0XHR2YXIgY29vcmRzID0gbmV3IFBvaW50KGksIGopO1xuICBcdFx0XHRcdGNvb3Jkcy56ID0gdGhpcy5fdGlsZVpvb207XG5cbiAgXHRcdFx0XHRpZiAoIXRoaXMuX2lzVmFsaWRUaWxlKGNvb3JkcykpIHsgY29udGludWU7IH1cblxuICBcdFx0XHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNbdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3JkcyldO1xuICBcdFx0XHRcdGlmICh0aWxlKSB7XG4gIFx0XHRcdFx0XHR0aWxlLmN1cnJlbnQgPSB0cnVlO1xuICBcdFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0XHRxdWV1ZS5wdXNoKGNvb3Jkcyk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdC8vIHNvcnQgdGlsZSBxdWV1ZSB0byBsb2FkIHRpbGVzIGluIG9yZGVyIG9mIHRoZWlyIGRpc3RhbmNlIHRvIGNlbnRlclxuICBcdFx0cXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICBcdFx0XHRyZXR1cm4gYS5kaXN0YW5jZVRvKHRpbGVDZW50ZXIpIC0gYi5kaXN0YW5jZVRvKHRpbGVDZW50ZXIpO1xuICBcdFx0fSk7XG5cbiAgXHRcdGlmIChxdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgXHRcdFx0Ly8gaWYgaXQncyB0aGUgZmlyc3QgYmF0Y2ggb2YgdGlsZXMgdG8gbG9hZFxuICBcdFx0XHRpZiAoIXRoaXMuX2xvYWRpbmcpIHtcbiAgXHRcdFx0XHR0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgXHRcdFx0XHQvLyBAZXZlbnQgbG9hZGluZzogRXZlbnRcbiAgXHRcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBncmlkIGxheWVyIHN0YXJ0cyBsb2FkaW5nIHRpbGVzLlxuICBcdFx0XHRcdHRoaXMuZmlyZSgnbG9hZGluZycpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0Ly8gY3JlYXRlIERPTSBmcmFnbWVudCB0byBhcHBlbmQgdGlsZXMgaW4gb25lIGJhdGNoXG4gIFx0XHRcdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgXHRcdFx0XHR0aGlzLl9hZGRUaWxlKHF1ZXVlW2ldLCBmcmFnbWVudCk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl9sZXZlbC5lbC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pc1ZhbGlkVGlsZTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIGNycyA9IHRoaXMuX21hcC5vcHRpb25zLmNycztcblxuICBcdFx0aWYgKCFjcnMuaW5maW5pdGUpIHtcbiAgXHRcdFx0Ly8gZG9uJ3QgbG9hZCB0aWxlIGlmIGl0J3Mgb3V0IG9mIGJvdW5kcyBhbmQgbm90IHdyYXBwZWRcbiAgXHRcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX2dsb2JhbFRpbGVSYW5nZTtcbiAgXHRcdFx0aWYgKCghY3JzLndyYXBMbmcgJiYgKGNvb3Jkcy54IDwgYm91bmRzLm1pbi54IHx8IGNvb3Jkcy54ID4gYm91bmRzLm1heC54KSkgfHxcbiAgXHRcdFx0ICAgICghY3JzLndyYXBMYXQgJiYgKGNvb3Jkcy55IDwgYm91bmRzLm1pbi55IHx8IGNvb3Jkcy55ID4gYm91bmRzLm1heC55KSkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIFx0XHR9XG5cbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmJvdW5kcykgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gIFx0XHQvLyBkb24ndCBsb2FkIHRpbGUgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3QgdGhlIGJvdW5kcyBpbiBvcHRpb25zXG4gIFx0XHR2YXIgdGlsZUJvdW5kcyA9IHRoaXMuX3RpbGVDb29yZHNUb0JvdW5kcyhjb29yZHMpO1xuICBcdFx0cmV0dXJuIHRvTGF0TG5nQm91bmRzKHRoaXMub3B0aW9ucy5ib3VuZHMpLm92ZXJsYXBzKHRpbGVCb3VuZHMpO1xuICBcdH0sXG5cbiAgXHRfa2V5VG9Cb3VuZHM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgXHRcdHJldHVybiB0aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModGhpcy5fa2V5VG9UaWxlQ29vcmRzKGtleSkpO1xuICBcdH0sXG5cbiAgXHRfdGlsZUNvb3Jkc1RvTndTZTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKSxcbiAgXHRcdCAgICBud1BvaW50ID0gY29vcmRzLnNjYWxlQnkodGlsZVNpemUpLFxuICBcdFx0ICAgIHNlUG9pbnQgPSBud1BvaW50LmFkZCh0aWxlU2l6ZSksXG4gIFx0XHQgICAgbncgPSBtYXAudW5wcm9qZWN0KG53UG9pbnQsIGNvb3Jkcy56KSxcbiAgXHRcdCAgICBzZSA9IG1hcC51bnByb2plY3Qoc2VQb2ludCwgY29vcmRzLnopO1xuICBcdFx0cmV0dXJuIFtudywgc2VdO1xuICBcdH0sXG5cbiAgXHQvLyBjb252ZXJ0cyB0aWxlIGNvb3JkaW5hdGVzIHRvIGl0cyBnZW9ncmFwaGljYWwgYm91bmRzXG4gIFx0X3RpbGVDb29yZHNUb0JvdW5kczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIGJwID0gdGhpcy5fdGlsZUNvb3Jkc1RvTndTZShjb29yZHMpLFxuICBcdFx0ICAgIGJvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoYnBbMF0sIGJwWzFdKTtcblxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMubm9XcmFwKSB7XG4gIFx0XHRcdGJvdW5kcyA9IHRoaXMuX21hcC53cmFwTGF0TG5nQm91bmRzKGJvdW5kcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gYm91bmRzO1xuICBcdH0sXG4gIFx0Ly8gY29udmVydHMgdGlsZSBjb29yZGluYXRlcyB0byBrZXkgZm9yIHRoZSB0aWxlIGNhY2hlXG4gIFx0X3RpbGVDb29yZHNUb0tleTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0cmV0dXJuIGNvb3Jkcy54ICsgJzonICsgY29vcmRzLnkgKyAnOicgKyBjb29yZHMuejtcbiAgXHR9LFxuXG4gIFx0Ly8gY29udmVydHMgdGlsZSBjYWNoZSBrZXkgdG8gY29vcmRpbmF0ZXNcbiAgXHRfa2V5VG9UaWxlQ29vcmRzOiBmdW5jdGlvbiAoa2V5KSB7XG4gIFx0XHR2YXIgayA9IGtleS5zcGxpdCgnOicpLFxuICBcdFx0ICAgIGNvb3JkcyA9IG5ldyBQb2ludCgra1swXSwgK2tbMV0pO1xuICBcdFx0Y29vcmRzLnogPSAra1syXTtcbiAgXHRcdHJldHVybiBjb29yZHM7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVUaWxlOiBmdW5jdGlvbiAoa2V5KSB7XG4gIFx0XHR2YXIgdGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRpZiAoIXRpbGUpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHJlbW92ZSh0aWxlLmVsKTtcblxuICBcdFx0ZGVsZXRlIHRoaXMuX3RpbGVzW2tleV07XG5cbiAgXHRcdC8vIEBldmVudCB0aWxldW5sb2FkOiBUaWxlRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSB0aWxlIGlzIHJlbW92ZWQgKGUuZy4gd2hlbiBhIHRpbGUgZ29lcyBvZmYgdGhlIHNjcmVlbikuXG4gIFx0XHR0aGlzLmZpcmUoJ3RpbGV1bmxvYWQnLCB7XG4gIFx0XHRcdHRpbGU6IHRpbGUuZWwsXG4gIFx0XHRcdGNvb3JkczogdGhpcy5fa2V5VG9UaWxlQ29vcmRzKGtleSlcbiAgXHRcdH0pO1xuICBcdH0sXG5cbiAgXHRfaW5pdFRpbGU6IGZ1bmN0aW9uICh0aWxlKSB7XG4gIFx0XHRhZGRDbGFzcyh0aWxlLCAnbGVhZmxldC10aWxlJyk7XG5cbiAgXHRcdHZhciB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgXHRcdHRpbGUuc3R5bGUud2lkdGggPSB0aWxlU2l6ZS54ICsgJ3B4JztcbiAgXHRcdHRpbGUuc3R5bGUuaGVpZ2h0ID0gdGlsZVNpemUueSArICdweCc7XG5cbiAgXHRcdHRpbGUub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XG4gIFx0XHR0aWxlLm9ubW91c2Vtb3ZlID0gZmFsc2VGbjtcblxuICBcdFx0Ly8gdXBkYXRlIG9wYWNpdHkgb24gdGlsZXMgaW4gSUU3LTggYmVjYXVzZSBvZiBmaWx0ZXIgaW5oZXJpdGFuY2UgcHJvYmxlbXNcbiAgXHRcdGlmIChpZWx0OSAmJiB0aGlzLm9wdGlvbnMub3BhY2l0eSA8IDEpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aWxlLCB0aGlzLm9wdGlvbnMub3BhY2l0eSk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIHdpdGhvdXQgdGhpcyBoYWNrLCB0aWxlcyBkaXNhcHBlYXIgYWZ0ZXIgem9vbSBvbiBDaHJvbWUgZm9yIEFuZHJvaWRcbiAgXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzIwNzhcbiAgXHRcdGlmIChhbmRyb2lkICYmICFhbmRyb2lkMjMpIHtcbiAgXHRcdFx0dGlsZS5zdHlsZS5XZWJraXRCYWNrZmFjZVZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2FkZFRpbGU6IGZ1bmN0aW9uIChjb29yZHMsIGNvbnRhaW5lcikge1xuICBcdFx0dmFyIHRpbGVQb3MgPSB0aGlzLl9nZXRUaWxlUG9zKGNvb3JkcyksXG4gIFx0XHQgICAga2V5ID0gdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3Jkcyk7XG5cbiAgXHRcdHZhciB0aWxlID0gdGhpcy5jcmVhdGVUaWxlKHRoaXMuX3dyYXBDb29yZHMoY29vcmRzKSwgYmluZCh0aGlzLl90aWxlUmVhZHksIHRoaXMsIGNvb3JkcykpO1xuXG4gIFx0XHR0aGlzLl9pbml0VGlsZSh0aWxlKTtcblxuICBcdFx0Ly8gaWYgY3JlYXRlVGlsZSBpcyBkZWZpbmVkIHdpdGggYSBzZWNvbmQgYXJndW1lbnQgKFwiZG9uZVwiIGNhbGxiYWNrKSxcbiAgXHRcdC8vIHdlIGtub3cgdGhhdCB0aWxlIGlzIGFzeW5jIGFuZCB3aWxsIGJlIHJlYWR5IGxhdGVyOyBvdGhlcndpc2VcbiAgXHRcdGlmICh0aGlzLmNyZWF0ZVRpbGUubGVuZ3RoIDwgMikge1xuICBcdFx0XHQvLyBtYXJrIHRpbGUgYXMgcmVhZHksIGJ1dCBkZWxheSBvbmUgZnJhbWUgZm9yIG9wYWNpdHkgYW5pbWF0aW9uIHRvIGhhcHBlblxuICBcdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGJpbmQodGhpcy5fdGlsZVJlYWR5LCB0aGlzLCBjb29yZHMsIG51bGwsIHRpbGUpKTtcbiAgXHRcdH1cblxuICBcdFx0c2V0UG9zaXRpb24odGlsZSwgdGlsZVBvcyk7XG5cbiAgXHRcdC8vIHNhdmUgdGlsZSBpbiBjYWNoZVxuICBcdFx0dGhpcy5fdGlsZXNba2V5XSA9IHtcbiAgXHRcdFx0ZWw6IHRpbGUsXG4gIFx0XHRcdGNvb3JkczogY29vcmRzLFxuICBcdFx0XHRjdXJyZW50OiB0cnVlXG4gIFx0XHR9O1xuXG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQodGlsZSk7XG4gIFx0XHQvLyBAZXZlbnQgdGlsZWxvYWRzdGFydDogVGlsZUV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSBpcyByZXF1ZXN0ZWQgYW5kIHN0YXJ0cyBsb2FkaW5nLlxuICBcdFx0dGhpcy5maXJlKCd0aWxlbG9hZHN0YXJ0Jywge1xuICBcdFx0XHR0aWxlOiB0aWxlLFxuICBcdFx0XHRjb29yZHM6IGNvb3Jkc1xuICBcdFx0fSk7XG4gIFx0fSxcblxuICBcdF90aWxlUmVhZHk6IGZ1bmN0aW9uIChjb29yZHMsIGVyciwgdGlsZSkge1xuICBcdFx0aWYgKGVycikge1xuICBcdFx0XHQvLyBAZXZlbnQgdGlsZWVycm9yOiBUaWxlRXJyb3JFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIGxvYWRpbmcgYSB0aWxlLlxuICBcdFx0XHR0aGlzLmZpcmUoJ3RpbGVlcnJvcicsIHtcbiAgXHRcdFx0XHRlcnJvcjogZXJyLFxuICBcdFx0XHRcdHRpbGU6IHRpbGUsXG4gIFx0XHRcdFx0Y29vcmRzOiBjb29yZHNcbiAgXHRcdFx0fSk7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBrZXkgPSB0aGlzLl90aWxlQ29vcmRzVG9LZXkoY29vcmRzKTtcblxuICBcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRpZiAoIXRpbGUpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRpbGUubG9hZGVkID0gK25ldyBEYXRlKCk7XG4gIFx0XHRpZiAodGhpcy5fbWFwLl9mYWRlQW5pbWF0ZWQpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aWxlLmVsLCAwKTtcbiAgXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZhZGVGcmFtZSk7XG4gIFx0XHRcdHRoaXMuX2ZhZGVGcmFtZSA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fdXBkYXRlT3BhY2l0eSwgdGhpcyk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aWxlLmFjdGl2ZSA9IHRydWU7XG4gIFx0XHRcdHRoaXMuX3BydW5lVGlsZXMoKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKCFlcnIpIHtcbiAgXHRcdFx0YWRkQ2xhc3ModGlsZS5lbCwgJ2xlYWZsZXQtdGlsZS1sb2FkZWQnKTtcblxuICBcdFx0XHQvLyBAZXZlbnQgdGlsZWxvYWQ6IFRpbGVFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSBsb2Fkcy5cbiAgXHRcdFx0dGhpcy5maXJlKCd0aWxlbG9hZCcsIHtcbiAgXHRcdFx0XHR0aWxlOiB0aWxlLmVsLFxuICBcdFx0XHRcdGNvb3JkczogY29vcmRzXG4gIFx0XHRcdH0pO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5fbm9UaWxlc1RvTG9hZCgpKSB7XG4gIFx0XHRcdHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgXHRcdFx0Ly8gQGV2ZW50IGxvYWQ6IEV2ZW50XG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gdGhlIGdyaWQgbGF5ZXIgbG9hZGVkIGFsbCB2aXNpYmxlIHRpbGVzLlxuICBcdFx0XHR0aGlzLmZpcmUoJ2xvYWQnKTtcblxuICBcdFx0XHRpZiAoaWVsdDkgfHwgIXRoaXMuX21hcC5fZmFkZUFuaW1hdGVkKSB7XG4gIFx0XHRcdFx0cmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9wcnVuZVRpbGVzLCB0aGlzKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHQvLyBXYWl0IGEgYml0IG1vcmUgdGhhbiAwLjIgc2VjcyAodGhlIGR1cmF0aW9uIG9mIHRoZSB0aWxlIGZhZGUtaW4pXG4gIFx0XHRcdFx0Ly8gdG8gdHJpZ2dlciBhIHBydW5pbmcuXG4gIFx0XHRcdFx0c2V0VGltZW91dChiaW5kKHRoaXMuX3BydW5lVGlsZXMsIHRoaXMpLCAyNTApO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9nZXRUaWxlUG9zOiBmdW5jdGlvbiAoY29vcmRzKSB7XG4gIFx0XHRyZXR1cm4gY29vcmRzLnNjYWxlQnkodGhpcy5nZXRUaWxlU2l6ZSgpKS5zdWJ0cmFjdCh0aGlzLl9sZXZlbC5vcmlnaW4pO1xuICBcdH0sXG5cbiAgXHRfd3JhcENvb3JkczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIG5ld0Nvb3JkcyA9IG5ldyBQb2ludChcbiAgXHRcdFx0dGhpcy5fd3JhcFggPyB3cmFwTnVtKGNvb3Jkcy54LCB0aGlzLl93cmFwWCkgOiBjb29yZHMueCxcbiAgXHRcdFx0dGhpcy5fd3JhcFkgPyB3cmFwTnVtKGNvb3Jkcy55LCB0aGlzLl93cmFwWSkgOiBjb29yZHMueSk7XG4gIFx0XHRuZXdDb29yZHMueiA9IGNvb3Jkcy56O1xuICBcdFx0cmV0dXJuIG5ld0Nvb3JkcztcbiAgXHR9LFxuXG4gIFx0X3B4Qm91bmRzVG9UaWxlUmFuZ2U6IGZ1bmN0aW9uIChib3VuZHMpIHtcbiAgXHRcdHZhciB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKFxuICBcdFx0XHRib3VuZHMubWluLnVuc2NhbGVCeSh0aWxlU2l6ZSkuZmxvb3IoKSxcbiAgXHRcdFx0Ym91bmRzLm1heC51bnNjYWxlQnkodGlsZVNpemUpLmNlaWwoKS5zdWJ0cmFjdChbMSwgMV0pKTtcbiAgXHR9LFxuXG4gIFx0X25vVGlsZXNUb0xvYWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHRpZiAoIXRoaXMuX3RpbGVzW2tleV0ubG9hZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRydWU7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAZmFjdG9yeSBMLmdyaWRMYXllcihvcHRpb25zPzogR3JpZExheWVyIG9wdGlvbnMpXG4gIC8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgR3JpZExheWVyIHdpdGggdGhlIHN1cHBsaWVkIG9wdGlvbnMuXG4gIGZ1bmN0aW9uIGdyaWRMYXllcihvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBHcmlkTGF5ZXIob3B0aW9ucyk7XG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBUaWxlTGF5ZXJcclxuICAgKiBAaW5oZXJpdHMgR3JpZExheWVyXHJcbiAgICogQGFrYSBMLlRpbGVMYXllclxyXG4gICAqIFVzZWQgdG8gbG9hZCBhbmQgZGlzcGxheSB0aWxlIGxheWVycyBvbiB0aGUgbWFwLiBOb3RlIHRoYXQgbW9zdCB0aWxlIHNlcnZlcnMgcmVxdWlyZSBhdHRyaWJ1dGlvbiwgd2hpY2ggeW91IGNhbiBzZXQgdW5kZXIgYExheWVyYC4gRXh0ZW5kcyBgR3JpZExheWVyYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIEwudGlsZUxheWVyKCdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZz97Zm9vfScsIHtmb286ICdiYXInLCBhdHRyaWJ1dGlvbjogJ01hcCBkYXRhICZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvXCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzLCA8YSBocmVmPVwiaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC9cIj5DQy1CWS1TQTwvYT4nfSkuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEBzZWN0aW9uIFVSTCB0ZW1wbGF0ZVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBBIHN0cmluZyBvZiB0aGUgZm9sbG93aW5nIGZvcm06XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiAnaHR0cDovL3tzfS5zb21lZG9tYWluLmNvbS9ibGFibGEve3p9L3t4fS97eX17cn0ucG5nJ1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogYHtzfWAgbWVhbnMgb25lIG9mIHRoZSBhdmFpbGFibGUgc3ViZG9tYWlucyAodXNlZCBzZXF1ZW50aWFsbHkgdG8gaGVscCB3aXRoIGJyb3dzZXIgcGFyYWxsZWwgcmVxdWVzdHMgcGVyIGRvbWFpbiBsaW1pdGF0aW9uOyBzdWJkb21haW4gdmFsdWVzIGFyZSBzcGVjaWZpZWQgaW4gb3B0aW9uczsgYGFgLCBgYmAgb3IgYGNgIGJ5IGRlZmF1bHQsIGNhbiBiZSBvbWl0dGVkKSwgYHt6fWAg4oCUIHpvb20gbGV2ZWwsIGB7eH1gIGFuZCBge3l9YCDigJQgdGlsZSBjb29yZGluYXRlcy4gYHtyfWAgY2FuIGJlIHVzZWQgdG8gYWRkIFwiJmNvbW1hdDsyeFwiIHRvIHRoZSBVUkwgdG8gbG9hZCByZXRpbmEgdGlsZXMuXHJcbiAgICpcclxuICAgKiBZb3UgY2FuIHVzZSBjdXN0b20ga2V5cyBpbiB0aGUgdGVtcGxhdGUsIHdoaWNoIHdpbGwgYmUgW2V2YWx1YXRlZF0oI3V0aWwtdGVtcGxhdGUpIGZyb20gVGlsZUxheWVyIG9wdGlvbnMsIGxpa2UgdGhpczpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIEwudGlsZUxheWVyKCdodHRwOi8ve3N9LnNvbWVkb21haW4uY29tL3tmb299L3t6fS97eH0ve3l9LnBuZycsIHtmb286ICdiYXInfSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG5cclxuICB2YXIgVGlsZUxheWVyID0gR3JpZExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgVGlsZUxheWVyIG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBtaW5ab29tOiBOdW1iZXIgPSAwXHJcbiAgXHRcdC8vIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZG93biB0byB3aGljaCB0aGlzIGxheWVyIHdpbGwgYmUgZGlzcGxheWVkIChpbmNsdXNpdmUpLlxyXG4gIFx0XHRtaW5ab29tOiAwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXhab29tOiBOdW1iZXIgPSAxOFxyXG4gIFx0XHQvLyBUaGUgbWF4aW11bSB6b29tIGxldmVsIHVwIHRvIHdoaWNoIHRoaXMgbGF5ZXIgd2lsbCBiZSBkaXNwbGF5ZWQgKGluY2x1c2l2ZSkuXHJcbiAgXHRcdG1heFpvb206IDE4LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzdWJkb21haW5zOiBTdHJpbmd8U3RyaW5nW10gPSAnYWJjJ1xyXG4gIFx0XHQvLyBTdWJkb21haW5zIG9mIHRoZSB0aWxlIHNlcnZpY2UuIENhbiBiZSBwYXNzZWQgaW4gdGhlIGZvcm0gb2Ygb25lIHN0cmluZyAod2hlcmUgZWFjaCBsZXR0ZXIgaXMgYSBzdWJkb21haW4gbmFtZSkgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cclxuICBcdFx0c3ViZG9tYWluczogJ2FiYycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGVycm9yVGlsZVVybDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVVJMIHRvIHRoZSB0aWxlIGltYWdlIHRvIHNob3cgaW4gcGxhY2Ugb2YgdGhlIHRpbGUgdGhhdCBmYWlsZWQgdG8gbG9hZC5cclxuICBcdFx0ZXJyb3JUaWxlVXJsOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbU9mZnNldDogTnVtYmVyID0gMFxyXG4gIFx0XHQvLyBUaGUgem9vbSBudW1iZXIgdXNlZCBpbiB0aWxlIFVSTHMgd2lsbCBiZSBvZmZzZXQgd2l0aCB0aGlzIHZhbHVlLlxyXG4gIFx0XHR6b29tT2Zmc2V0OiAwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB0bXM6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIGludmVyc2VzIFkgYXhpcyBudW1iZXJpbmcgZm9yIHRpbGVzICh0dXJuIHRoaXMgb24gZm9yIFtUTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2UpIHNlcnZpY2VzKS5cclxuICBcdFx0dG1zOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbVJldmVyc2U6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHpvb20gbnVtYmVyIHVzZWQgaW4gdGlsZSBVUkxzIHdpbGwgYmUgcmV2ZXJzZWQgKGBtYXhab29tIC0gem9vbWAgaW5zdGVhZCBvZiBgem9vbWApXHJcbiAgXHRcdHpvb21SZXZlcnNlOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gZGV0ZWN0UmV0aW5hOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgIGFuZCB1c2VyIGlzIG9uIGEgcmV0aW5hIGRpc3BsYXksIGl0IHdpbGwgcmVxdWVzdCBmb3VyIHRpbGVzIG9mIGhhbGYgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBhIGJpZ2dlciB6b29tIGxldmVsIGluIHBsYWNlIG9mIG9uZSB0byB1dGlsaXplIHRoZSBoaWdoIHJlc29sdXRpb24uXHJcbiAgXHRcdGRldGVjdFJldGluYTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNyb3NzT3JpZ2luOiBCb29sZWFufFN0cmluZyA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIGNyb3NzT3JpZ2luIGF0dHJpYnV0ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0aWxlcy5cclxuICBcdFx0Ly8gSWYgYSBTdHJpbmcgaXMgcHJvdmlkZWQsIGFsbCB0aWxlcyB3aWxsIGhhdmUgdGhlaXIgY3Jvc3NPcmlnaW4gYXR0cmlidXRlIHNldCB0byB0aGUgU3RyaW5nIHByb3ZpZGVkLiBUaGlzIGlzIG5lZWRlZCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGlsZSBwaXhlbCBkYXRhLlxyXG4gIFx0XHQvLyBSZWZlciB0byBbQ09SUyBTZXR0aW5nc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciB2YWxpZCBTdHJpbmcgdmFsdWVzLlxyXG4gIFx0XHRjcm9zc09yaWdpbjogZmFsc2VcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0b3B0aW9ucyA9IHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHQvLyBkZXRlY3RpbmcgcmV0aW5hIGRpc3BsYXlzLCBhZGp1c3RpbmcgdGlsZVNpemUgYW5kIHpvb20gbGV2ZWxzXHJcbiAgXHRcdGlmIChvcHRpb25zLmRldGVjdFJldGluYSAmJiByZXRpbmEgJiYgb3B0aW9ucy5tYXhab29tID4gMCkge1xyXG5cclxuICBcdFx0XHRvcHRpb25zLnRpbGVTaXplID0gTWF0aC5mbG9vcihvcHRpb25zLnRpbGVTaXplIC8gMik7XHJcblxyXG4gIFx0XHRcdGlmICghb3B0aW9ucy56b29tUmV2ZXJzZSkge1xyXG4gIFx0XHRcdFx0b3B0aW9ucy56b29tT2Zmc2V0Kys7XHJcbiAgXHRcdFx0XHRvcHRpb25zLm1heFpvb20tLTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0b3B0aW9ucy56b29tT2Zmc2V0LS07XHJcbiAgXHRcdFx0XHRvcHRpb25zLm1pblpvb20rKztcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdG9wdGlvbnMubWluWm9vbSA9IE1hdGgubWF4KDAsIG9wdGlvbnMubWluWm9vbSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb3B0aW9ucy5zdWJkb21haW5zID09PSAnc3RyaW5nJykge1xyXG4gIFx0XHRcdG9wdGlvbnMuc3ViZG9tYWlucyA9IG9wdGlvbnMuc3ViZG9tYWlucy5zcGxpdCgnJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGZvciBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L2lzc3Vlcy8xMzdcclxuICBcdFx0aWYgKCFhbmRyb2lkKSB7XHJcbiAgXHRcdFx0dGhpcy5vbigndGlsZXVubG9hZCcsIHRoaXMuX29uVGlsZVJlbW92ZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRVcmwodXJsOiBTdHJpbmcsIG5vUmVkcmF3PzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIFVwZGF0ZXMgdGhlIGxheWVyJ3MgVVJMIHRlbXBsYXRlIGFuZCByZWRyYXdzIGl0ICh1bmxlc3MgYG5vUmVkcmF3YCBpcyBzZXQgdG8gYHRydWVgKS5cclxuICBcdC8vIElmIHRoZSBVUkwgZG9lcyBub3QgY2hhbmdlLCB0aGUgbGF5ZXIgd2lsbCBub3QgYmUgcmVkcmF3biB1bmxlc3NcclxuICBcdC8vIHRoZSBub1JlZHJhdyBwYXJhbWV0ZXIgaXMgc2V0IHRvIGZhbHNlLlxyXG4gIFx0c2V0VXJsOiBmdW5jdGlvbiAodXJsLCBub1JlZHJhdykge1xyXG4gIFx0XHRpZiAodGhpcy5fdXJsID09PSB1cmwgJiYgbm9SZWRyYXcgPT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdG5vUmVkcmF3ID0gdHJ1ZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0aWYgKCFub1JlZHJhdykge1xyXG4gIFx0XHRcdHRoaXMucmVkcmF3KCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY3JlYXRlVGlsZShjb29yZHM6IE9iamVjdCwgZG9uZT86IEZ1bmN0aW9uKTogSFRNTEVsZW1lbnRcclxuICBcdC8vIENhbGxlZCBvbmx5IGludGVybmFsbHksIG92ZXJyaWRlcyBHcmlkTGF5ZXIncyBbYGNyZWF0ZVRpbGUoKWBdKCNncmlkbGF5ZXItY3JlYXRldGlsZSlcclxuICBcdC8vIHRvIHJldHVybiBhbiBgPGltZz5gIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBpbWFnZSBVUkwgZ2l2ZW4gYGNvb3Jkc2AuIFRoZSBgZG9uZWBcclxuICBcdC8vIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSB0aWxlIGhhcyBiZWVuIGxvYWRlZC5cclxuICBcdGNyZWF0ZVRpbGU6IGZ1bmN0aW9uIChjb29yZHMsIGRvbmUpIHtcclxuICBcdFx0dmFyIHRpbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHJcbiAgXHRcdG9uKHRpbGUsICdsb2FkJywgYmluZCh0aGlzLl90aWxlT25Mb2FkLCB0aGlzLCBkb25lLCB0aWxlKSk7XHJcbiAgXHRcdG9uKHRpbGUsICdlcnJvcicsIGJpbmQodGhpcy5fdGlsZU9uRXJyb3IsIHRoaXMsIGRvbmUsIHRpbGUpKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gfHwgdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luID09PSAnJykge1xyXG4gIFx0XHRcdHRpbGUuY3Jvc3NPcmlnaW4gPSB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnJyA6IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0LypcclxuICBcdFx0IEFsdCB0YWcgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyB0byBrZWVwIHNjcmVlbiByZWFkZXJzIGZyb20gcmVhZGluZyBVUkwgYW5kIGZvciBjb21wbGlhbmNlIHJlYXNvbnNcclxuICBcdFx0IGh0dHA6Ly93d3cudzMub3JnL1RSL1dDQUcyMC1URUNIUy9INjdcclxuICBcdFx0Ki9cclxuICBcdFx0dGlsZS5hbHQgPSAnJztcclxuXHJcbiAgXHRcdC8qXHJcbiAgXHRcdCBTZXQgcm9sZT1cInByZXNlbnRhdGlvblwiIHRvIGZvcmNlIHNjcmVlbiByZWFkZXJzIHRvIGlnbm9yZSB0aGlzXHJcbiAgXHRcdCBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvcm9sZXMjdGV4dGFsdGVybmF0aXZlY29tcHV0YXRpb25cclxuICBcdFx0Ki9cclxuICBcdFx0dGlsZS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XHJcblxyXG4gIFx0XHR0aWxlLnNyYyA9IHRoaXMuZ2V0VGlsZVVybChjb29yZHMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRpbGU7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXHJcbiAgXHQvLyBAdW5pbmhlcml0YWJsZVxyXG4gIFx0Ly8gTGF5ZXJzIGV4dGVuZGluZyBgVGlsZUxheWVyYCBtaWdodCByZWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZC5cclxuICBcdC8vIEBtZXRob2QgZ2V0VGlsZVVybChjb29yZHM6IE9iamVjdCk6IFN0cmluZ1xyXG4gIFx0Ly8gQ2FsbGVkIG9ubHkgaW50ZXJuYWxseSwgcmV0dXJucyB0aGUgVVJMIGZvciBhIHRpbGUgZ2l2ZW4gaXRzIGNvb3JkaW5hdGVzLlxyXG4gIFx0Ly8gQ2xhc3NlcyBleHRlbmRpbmcgYFRpbGVMYXllcmAgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gcHJvdmlkZSBjdXN0b20gdGlsZSBVUkwgbmFtaW5nIHNjaGVtZXMuXHJcbiAgXHRnZXRUaWxlVXJsOiBmdW5jdGlvbiAoY29vcmRzKSB7XHJcbiAgXHRcdHZhciBkYXRhID0ge1xyXG4gIFx0XHRcdHI6IHJldGluYSA/ICdAMngnIDogJycsXHJcbiAgXHRcdFx0czogdGhpcy5fZ2V0U3ViZG9tYWluKGNvb3JkcyksXHJcbiAgXHRcdFx0eDogY29vcmRzLngsXHJcbiAgXHRcdFx0eTogY29vcmRzLnksXHJcbiAgXHRcdFx0ejogdGhpcy5fZ2V0Wm9vbUZvclVybCgpXHJcbiAgXHRcdH07XHJcbiAgXHRcdGlmICh0aGlzLl9tYXAgJiYgIXRoaXMuX21hcC5vcHRpb25zLmNycy5pbmZpbml0ZSkge1xyXG4gIFx0XHRcdHZhciBpbnZlcnRlZFkgPSB0aGlzLl9nbG9iYWxUaWxlUmFuZ2UubWF4LnkgLSBjb29yZHMueTtcclxuICBcdFx0XHRpZiAodGhpcy5vcHRpb25zLnRtcykge1xyXG4gIFx0XHRcdFx0ZGF0YVsneSddID0gaW52ZXJ0ZWRZO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRkYXRhWycteSddID0gaW52ZXJ0ZWRZO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGVtcGxhdGUodGhpcy5fdXJsLCBleHRlbmQoZGF0YSwgdGhpcy5vcHRpb25zKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF90aWxlT25Mb2FkOiBmdW5jdGlvbiAoZG9uZSwgdGlsZSkge1xyXG4gIFx0XHQvLyBGb3IgaHR0cHM6Ly9naXRodWIuY29tL0xlYWZsZXQvTGVhZmxldC9pc3N1ZXMvMzMzMlxyXG4gIFx0XHRpZiAoaWVsdDkpIHtcclxuICBcdFx0XHRzZXRUaW1lb3V0KGJpbmQoZG9uZSwgdGhpcywgbnVsbCwgdGlsZSksIDApO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGRvbmUobnVsbCwgdGlsZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3RpbGVPbkVycm9yOiBmdW5jdGlvbiAoZG9uZSwgdGlsZSwgZSkge1xyXG4gIFx0XHR2YXIgZXJyb3JVcmwgPSB0aGlzLm9wdGlvbnMuZXJyb3JUaWxlVXJsO1xyXG4gIFx0XHRpZiAoZXJyb3JVcmwgJiYgdGlsZS5nZXRBdHRyaWJ1dGUoJ3NyYycpICE9PSBlcnJvclVybCkge1xyXG4gIFx0XHRcdHRpbGUuc3JjID0gZXJyb3JVcmw7XHJcbiAgXHRcdH1cclxuICBcdFx0ZG9uZShlLCB0aWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uVGlsZVJlbW92ZTogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0ZS50aWxlLm9ubG9hZCA9IG51bGw7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRab29tRm9yVXJsOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciB6b29tID0gdGhpcy5fdGlsZVpvb20sXHJcbiAgXHRcdG1heFpvb20gPSB0aGlzLm9wdGlvbnMubWF4Wm9vbSxcclxuICBcdFx0em9vbVJldmVyc2UgPSB0aGlzLm9wdGlvbnMuem9vbVJldmVyc2UsXHJcbiAgXHRcdHpvb21PZmZzZXQgPSB0aGlzLm9wdGlvbnMuem9vbU9mZnNldDtcclxuXHJcbiAgXHRcdGlmICh6b29tUmV2ZXJzZSkge1xyXG4gIFx0XHRcdHpvb20gPSBtYXhab29tIC0gem9vbTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHpvb20gKyB6b29tT2Zmc2V0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0U3ViZG9tYWluOiBmdW5jdGlvbiAodGlsZVBvaW50KSB7XHJcbiAgXHRcdHZhciBpbmRleCA9IE1hdGguYWJzKHRpbGVQb2ludC54ICsgdGlsZVBvaW50LnkpICUgdGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaW5kZXhdO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBzdG9wcyBsb2FkaW5nIGFsbCB0aWxlcyBpbiB0aGUgYmFja2dyb3VuZCBsYXllclxyXG4gIFx0X2Fib3J0TG9hZGluZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaSwgdGlsZTtcclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX3RpbGVzKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX3RpbGVzW2ldLmNvb3Jkcy56ICE9PSB0aGlzLl90aWxlWm9vbSkge1xyXG4gIFx0XHRcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2ldLmVsO1xyXG5cclxuICBcdFx0XHRcdHRpbGUub25sb2FkID0gZmFsc2VGbjtcclxuICBcdFx0XHRcdHRpbGUub25lcnJvciA9IGZhbHNlRm47XHJcblxyXG4gIFx0XHRcdFx0aWYgKCF0aWxlLmNvbXBsZXRlKSB7XHJcbiAgXHRcdFx0XHRcdHRpbGUuc3JjID0gZW1wdHlJbWFnZVVybDtcclxuICBcdFx0XHRcdFx0cmVtb3ZlKHRpbGUpO1xyXG4gIFx0XHRcdFx0XHRkZWxldGUgdGhpcy5fdGlsZXNbaV07XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZW1vdmVUaWxlOiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgXHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcclxuICBcdFx0aWYgKCF0aWxlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0Ly8gQ2FuY2VscyBhbnkgcGVuZGluZyBodHRwIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGlsZVxyXG4gIFx0XHQvLyB1bmxlc3Mgd2UncmUgb24gQW5kcm9pZCdzIHN0b2NrIGJyb3dzZXIsXHJcbiAgXHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L2lzc3Vlcy8xMzdcclxuICBcdFx0aWYgKCFhbmRyb2lkU3RvY2spIHtcclxuICBcdFx0XHR0aWxlLmVsLnNldEF0dHJpYnV0ZSgnc3JjJywgZW1wdHlJbWFnZVVybCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBHcmlkTGF5ZXIucHJvdG90eXBlLl9yZW1vdmVUaWxlLmNhbGwodGhpcywga2V5KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RpbGVSZWFkeTogZnVuY3Rpb24gKGNvb3JkcywgZXJyLCB0aWxlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbWFwIHx8ICh0aWxlICYmIHRpbGUuZ2V0QXR0cmlidXRlKCdzcmMnKSA9PT0gZW1wdHlJbWFnZVVybCkpIHtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBHcmlkTGF5ZXIucHJvdG90eXBlLl90aWxlUmVhZHkuY2FsbCh0aGlzLCBjb29yZHMsIGVyciwgdGlsZSk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAZmFjdG9yeSBMLnRpbGVsYXllcih1cmxUZW1wbGF0ZTogU3RyaW5nLCBvcHRpb25zPzogVGlsZUxheWVyIG9wdGlvbnMpXHJcbiAgLy8gSW5zdGFudGlhdGVzIGEgdGlsZSBsYXllciBvYmplY3QgZ2l2ZW4gYSBgVVJMIHRlbXBsYXRlYCBhbmQgb3B0aW9uYWxseSBhbiBvcHRpb25zIG9iamVjdC5cclxuXHJcbiAgZnVuY3Rpb24gdGlsZUxheWVyKHVybCwgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBUaWxlTGF5ZXIodXJsLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgVGlsZUxheWVyLldNU1xyXG4gICAqIEBpbmhlcml0cyBUaWxlTGF5ZXJcclxuICAgKiBAYWthIEwuVGlsZUxheWVyLldNU1xyXG4gICAqIFVzZWQgdG8gZGlzcGxheSBbV01TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWJfTWFwX1NlcnZpY2UpIHNlcnZpY2VzIGFzIHRpbGUgbGF5ZXJzIG9uIHRoZSBtYXAuIEV4dGVuZHMgYFRpbGVMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgbmV4cmFkID0gTC50aWxlTGF5ZXIud21zKFwiaHR0cDovL21lc29uZXQuYWdyb24uaWFzdGF0ZS5lZHUvY2dpLWJpbi93bXMvbmV4cmFkL24wci5jZ2lcIiwge1xyXG4gICAqIFx0bGF5ZXJzOiAnbmV4cmFkLW4wci05MDA5MTMnLFxyXG4gICAqIFx0Zm9ybWF0OiAnaW1hZ2UvcG5nJyxcclxuICAgKiBcdHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAqIFx0YXR0cmlidXRpb246IFwiV2VhdGhlciBkYXRhIMKpIDIwMTIgSUVNIE5leHJhZFwiXHJcbiAgICogfSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBUaWxlTGF5ZXJXTVMgPSBUaWxlTGF5ZXIuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBUaWxlTGF5ZXIuV01TIG9wdGlvbnNcclxuICBcdC8vIElmIGFueSBjdXN0b20gb3B0aW9ucyBub3QgZG9jdW1lbnRlZCBoZXJlIGFyZSB1c2VkLCB0aGV5IHdpbGwgYmUgc2VudCB0byB0aGVcclxuICBcdC8vIFdNUyBzZXJ2ZXIgYXMgZXh0cmEgcGFyYW1ldGVycyBpbiBlYWNoIHJlcXVlc3QgVVJMLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yXHJcbiAgXHQvLyBbbm9uLXN0YW5kYXJkIHZlbmRvciBXTVMgcGFyYW1ldGVyc10oaHR0cDovL2RvY3MuZ2Vvc2VydmVyLm9yZy9zdGFibGUvZW4vdXNlci9zZXJ2aWNlcy93bXMvdmVuZG9yLmh0bWwpLlxyXG4gIFx0ZGVmYXVsdFdtc1BhcmFtczoge1xyXG4gIFx0XHRzZXJ2aWNlOiAnV01TJyxcclxuICBcdFx0cmVxdWVzdDogJ0dldE1hcCcsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGxheWVyczogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gKioocmVxdWlyZWQpKiogQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgV01TIGxheWVycyB0byBzaG93LlxyXG4gIFx0XHRsYXllcnM6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzdHlsZXM6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFdNUyBzdHlsZXMuXHJcbiAgXHRcdHN0eWxlczogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGZvcm1hdDogU3RyaW5nID0gJ2ltYWdlL2pwZWcnXHJcbiAgXHRcdC8vIFdNUyBpbWFnZSBmb3JtYXQgKHVzZSBgJ2ltYWdlL3BuZydgIGZvciBsYXllcnMgd2l0aCB0cmFuc3BhcmVuY3kpLlxyXG4gIFx0XHRmb3JtYXQ6ICdpbWFnZS9qcGVnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdHJhbnNwYXJlbnQ6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBXTVMgc2VydmljZSB3aWxsIHJldHVybiBpbWFnZXMgd2l0aCB0cmFuc3BhcmVuY3kuXHJcbiAgXHRcdHRyYW5zcGFyZW50OiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdmVyc2lvbjogU3RyaW5nID0gJzEuMS4xJ1xyXG4gIFx0XHQvLyBWZXJzaW9uIG9mIHRoZSBXTVMgc2VydmljZSB0byB1c2VcclxuICBcdFx0dmVyc2lvbjogJzEuMS4xJ1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gY3JzOiBDUlMgPSBudWxsXHJcbiAgXHRcdC8vIENvb3JkaW5hdGUgUmVmZXJlbmNlIFN5c3RlbSB0byB1c2UgZm9yIHRoZSBXTVMgcmVxdWVzdHMsIGRlZmF1bHRzIHRvXHJcbiAgXHRcdC8vIG1hcCBDUlMuIERvbid0IGNoYW5nZSB0aGlzIGlmIHlvdSdyZSBub3Qgc3VyZSB3aGF0IGl0IG1lYW5zLlxyXG4gIFx0XHRjcnM6IG51bGwsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHVwcGVyY2FzZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgV01TIHJlcXVlc3QgcGFyYW1ldGVyIGtleXMgd2lsbCBiZSB1cHBlcmNhc2UuXHJcbiAgXHRcdHVwcGVyY2FzZTogZmFsc2VcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0dmFyIHdtc1BhcmFtcyA9IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0V21zUGFyYW1zKTtcclxuXHJcbiAgXHRcdC8vIGFsbCBrZXlzIHRoYXQgYXJlIG5vdCBUaWxlTGF5ZXIgb3B0aW9ucyBnbyB0byBXTVMgcGFyYW1zXHJcbiAgXHRcdGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xyXG4gIFx0XHRcdGlmICghKGkgaW4gdGhpcy5vcHRpb25zKSkge1xyXG4gIFx0XHRcdFx0d21zUGFyYW1zW2ldID0gb3B0aW9uc1tpXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dmFyIHJlYWxSZXRpbmEgPSBvcHRpb25zLmRldGVjdFJldGluYSAmJiByZXRpbmEgPyAyIDogMTtcclxuICBcdFx0dmFyIHRpbGVTaXplID0gdGhpcy5nZXRUaWxlU2l6ZSgpO1xyXG4gIFx0XHR3bXNQYXJhbXMud2lkdGggPSB0aWxlU2l6ZS54ICogcmVhbFJldGluYTtcclxuICBcdFx0d21zUGFyYW1zLmhlaWdodCA9IHRpbGVTaXplLnkgKiByZWFsUmV0aW5hO1xyXG5cclxuICBcdFx0dGhpcy53bXNQYXJhbXMgPSB3bXNQYXJhbXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcblxyXG4gIFx0XHR0aGlzLl9jcnMgPSB0aGlzLm9wdGlvbnMuY3JzIHx8IG1hcC5vcHRpb25zLmNycztcclxuICBcdFx0dGhpcy5fd21zVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7XHJcblxyXG4gIFx0XHR2YXIgcHJvamVjdGlvbktleSA9IHRoaXMuX3dtc1ZlcnNpb24gPj0gMS4zID8gJ2NycycgOiAnc3JzJztcclxuICBcdFx0dGhpcy53bXNQYXJhbXNbcHJvamVjdGlvbktleV0gPSB0aGlzLl9jcnMuY29kZTtcclxuXHJcbiAgXHRcdFRpbGVMYXllci5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRUaWxlVXJsOiBmdW5jdGlvbiAoY29vcmRzKSB7XHJcblxyXG4gIFx0XHR2YXIgdGlsZUJvdW5kcyA9IHRoaXMuX3RpbGVDb29yZHNUb053U2UoY29vcmRzKSxcclxuICBcdFx0ICAgIGNycyA9IHRoaXMuX2NycyxcclxuICBcdFx0ICAgIGJvdW5kcyA9IHRvQm91bmRzKGNycy5wcm9qZWN0KHRpbGVCb3VuZHNbMF0pLCBjcnMucHJvamVjdCh0aWxlQm91bmRzWzFdKSksXHJcbiAgXHRcdCAgICBtaW4gPSBib3VuZHMubWluLFxyXG4gIFx0XHQgICAgbWF4ID0gYm91bmRzLm1heCxcclxuICBcdFx0ICAgIGJib3ggPSAodGhpcy5fd21zVmVyc2lvbiA+PSAxLjMgJiYgdGhpcy5fY3JzID09PSBFUFNHNDMyNiA/XHJcbiAgXHRcdCAgICBbbWluLnksIG1pbi54LCBtYXgueSwgbWF4LnhdIDpcclxuICBcdFx0ICAgIFttaW4ueCwgbWluLnksIG1heC54LCBtYXgueV0pLmpvaW4oJywnKSxcclxuICBcdFx0ICAgIHVybCA9IFRpbGVMYXllci5wcm90b3R5cGUuZ2V0VGlsZVVybC5jYWxsKHRoaXMsIGNvb3Jkcyk7XHJcbiAgXHRcdHJldHVybiB1cmwgK1xyXG4gIFx0XHRcdGdldFBhcmFtU3RyaW5nKHRoaXMud21zUGFyYW1zLCB1cmwsIHRoaXMub3B0aW9ucy51cHBlcmNhc2UpICtcclxuICBcdFx0XHQodGhpcy5vcHRpb25zLnVwcGVyY2FzZSA/ICcmQkJPWD0nIDogJyZiYm94PScpICsgYmJveDtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRQYXJhbXMocGFyYW1zOiBPYmplY3QsIG5vUmVkcmF3PzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIE1lcmdlcyBhbiBvYmplY3Qgd2l0aCB0aGUgbmV3IHBhcmFtZXRlcnMgYW5kIHJlLXJlcXVlc3RzIHRpbGVzIG9uIHRoZSBjdXJyZW50IHNjcmVlbiAodW5sZXNzIGBub1JlZHJhd2Agd2FzIHNldCB0byB0cnVlKS5cclxuICBcdHNldFBhcmFtczogZnVuY3Rpb24gKHBhcmFtcywgbm9SZWRyYXcpIHtcclxuXHJcbiAgXHRcdGV4dGVuZCh0aGlzLndtc1BhcmFtcywgcGFyYW1zKTtcclxuXHJcbiAgXHRcdGlmICghbm9SZWRyYXcpIHtcclxuICBcdFx0XHR0aGlzLnJlZHJhdygpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwudGlsZUxheWVyLndtcyhiYXNlVXJsOiBTdHJpbmcsIG9wdGlvbnM6IFRpbGVMYXllci5XTVMgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBXTVMgdGlsZSBsYXllciBvYmplY3QgZ2l2ZW4gYSBiYXNlIFVSTCBvZiB0aGUgV01TIHNlcnZpY2UgYW5kIGEgV01TIHBhcmFtZXRlcnMvb3B0aW9ucyBvYmplY3QuXHJcbiAgZnVuY3Rpb24gdGlsZUxheWVyV01TKHVybCwgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBUaWxlTGF5ZXJXTVModXJsLCBvcHRpb25zKTtcclxuICB9XG5cbiAgVGlsZUxheWVyLldNUyA9IFRpbGVMYXllcldNUztcbiAgdGlsZUxheWVyLndtcyA9IHRpbGVMYXllcldNUztcblxuICAvKlxuICAgKiBAY2xhc3MgUmVuZGVyZXJcbiAgICogQGluaGVyaXRzIExheWVyXG4gICAqIEBha2EgTC5SZW5kZXJlclxuICAgKlxuICAgKiBCYXNlIGNsYXNzIGZvciB2ZWN0b3IgcmVuZGVyZXIgaW1wbGVtZW50YXRpb25zIChgU1ZHYCwgYENhbnZhc2ApLiBIYW5kbGVzIHRoZVxuICAgKiBET00gY29udGFpbmVyIG9mIHRoZSByZW5kZXJlciwgaXRzIGJvdW5kcywgYW5kIGl0cyB6b29tIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQSBgUmVuZGVyZXJgIHdvcmtzIGFzIGFuIGltcGxpY2l0IGxheWVyIGdyb3VwIGZvciBhbGwgYFBhdGhgcyAtIHRoZSByZW5kZXJlclxuICAgKiBpdHNlbGYgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgdG8gdGhlIG1hcC4gQWxsIHBhdGhzIHVzZSBhIHJlbmRlcmVyLCB3aGljaCBjYW5cbiAgICogYmUgaW1wbGljaXQgKHRoZSBtYXAgd2lsbCBkZWNpZGUgdGhlIHR5cGUgb2YgcmVuZGVyZXIgYW5kIHVzZSBpdCBhdXRvbWF0aWNhbGx5KVxuICAgKiBvciBleHBsaWNpdCAodXNpbmcgdGhlIFtgcmVuZGVyZXJgXSgjcGF0aC1yZW5kZXJlcikgb3B0aW9uIG9mIHRoZSBwYXRoKS5cbiAgICpcbiAgICogRG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCB1c2UgYFNWR2AgYW5kIGBDYW52YXNgIGluc3RlYWQuXG4gICAqXG4gICAqIEBldmVudCB1cGRhdGU6IEV2ZW50XG4gICAqIEZpcmVkIHdoZW4gdGhlIHJlbmRlcmVyIHVwZGF0ZXMgaXRzIGJvdW5kcywgY2VudGVyIGFuZCB6b29tLCBmb3IgZXhhbXBsZSB3aGVuXG4gICAqIGl0cyBtYXAgaGFzIG1vdmVkXG4gICAqL1xuXG4gIHZhciBSZW5kZXJlciA9IExheWVyLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgUmVuZGVyZXIgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gcGFkZGluZzogTnVtYmVyID0gMC4xXG4gIFx0XHQvLyBIb3cgbXVjaCB0byBleHRlbmQgdGhlIGNsaXAgYXJlYSBhcm91bmQgdGhlIG1hcCB2aWV3IChyZWxhdGl2ZSB0byBpdHMgc2l6ZSlcbiAgXHRcdC8vIGUuZy4gMC4xIHdvdWxkIGJlIDEwJSBvZiBtYXAgdmlldyBpbiBlYWNoIGRpcmVjdGlvblxuICBcdFx0cGFkZGluZzogMC4xLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHRvbGVyYW5jZTogTnVtYmVyID0gMFxuICBcdFx0Ly8gSG93IG11Y2ggdG8gZXh0ZW5kIGNsaWNrIHRvbGVyYW5jZSByb3VuZCBhIHBhdGgvb2JqZWN0IG9uIHRoZSBtYXBcbiAgXHRcdHRvbGVyYW5jZSA6IDBcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gIFx0XHRzdGFtcCh0aGlzKTtcbiAgXHRcdHRoaXMuX2xheWVycyA9IHRoaXMuX2xheWVycyB8fCB7fTtcbiAgXHR9LFxuXG4gIFx0b25BZGQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7XG4gIFx0XHRcdHRoaXMuX2luaXRDb250YWluZXIoKTsgLy8gZGVmaW5lZCBieSByZW5kZXJlciBpbXBsZW1lbnRhdGlvbnNcblxuICBcdFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XG4gIFx0XHRcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC16b29tLWFuaW1hdGVkJyk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdFx0dGhpcy5vbigndXBkYXRlJywgdGhpcy5fdXBkYXRlUGF0aHMsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMuX3VwZGF0ZVBhdGhzLCB0aGlzKTtcbiAgXHRcdHRoaXMuX2Rlc3Ryb3lDb250YWluZXIoKTtcbiAgXHR9LFxuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0ge1xuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMuX3Jlc2V0LFxuICBcdFx0XHR6b29tOiB0aGlzLl9vblpvb20sXG4gIFx0XHRcdG1vdmVlbmQ6IHRoaXMuX3VwZGF0ZSxcbiAgXHRcdFx0em9vbWVuZDogdGhpcy5fb25ab29tRW5kXG4gIFx0XHR9O1xuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xuICBcdFx0XHRldmVudHMuem9vbWFuaW0gPSB0aGlzLl9vbkFuaW1ab29tO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X29uQW5pbVpvb206IGZ1bmN0aW9uIChldikge1xuICBcdFx0dGhpcy5fdXBkYXRlVHJhbnNmb3JtKGV2LmNlbnRlciwgZXYuem9vbSk7XG4gIFx0fSxcblxuICBcdF9vblpvb206IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksIHRoaXMuX21hcC5nZXRab29tKCkpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tKSB7XG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHpvb20sIHRoaXMuX3pvb20pLFxuICBcdFx0ICAgIHBvc2l0aW9uID0gZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSxcbiAgXHRcdCAgICB2aWV3SGFsZiA9IHRoaXMuX21hcC5nZXRTaXplKCkubXVsdGlwbHlCeSgwLjUgKyB0aGlzLm9wdGlvbnMucGFkZGluZyksXG4gIFx0XHQgICAgY3VycmVudENlbnRlclBvaW50ID0gdGhpcy5fbWFwLnByb2plY3QodGhpcy5fY2VudGVyLCB6b29tKSxcbiAgXHRcdCAgICBkZXN0Q2VudGVyUG9pbnQgPSB0aGlzLl9tYXAucHJvamVjdChjZW50ZXIsIHpvb20pLFxuICBcdFx0ICAgIGNlbnRlck9mZnNldCA9IGRlc3RDZW50ZXJQb2ludC5zdWJ0cmFjdChjdXJyZW50Q2VudGVyUG9pbnQpLFxuXG4gIFx0XHQgICAgdG9wTGVmdE9mZnNldCA9IHZpZXdIYWxmLm11bHRpcGx5QnkoLXNjYWxlKS5hZGQocG9zaXRpb24pLmFkZCh2aWV3SGFsZikuc3VidHJhY3QoY2VudGVyT2Zmc2V0KTtcblxuICBcdFx0aWYgKGFueTNkKSB7XG4gIFx0XHRcdHNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsIHRvcExlZnRPZmZzZXQsIHNjYWxlKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lciwgdG9wTGVmdE9mZnNldCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fdXBkYXRlKCk7XG4gIFx0XHR0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fY2VudGVyLCB0aGlzLl96b29tKTtcblxuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpZF0uX3Jlc2V0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vblpvb21FbmQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2xheWVycykge1xuICBcdFx0XHR0aGlzLl9sYXllcnNbaWRdLl9wcm9qZWN0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoczogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpZF0uX3VwZGF0ZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyBVcGRhdGUgcGl4ZWwgYm91bmRzIG9mIHJlbmRlcmVyIGNvbnRhaW5lciAoZm9yIHBvc2l0aW9uaW5nL3NpemluZy9jbGlwcGluZyBsYXRlcilcbiAgXHRcdC8vIFN1YmNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIG9mIGZpcmluZyB0aGUgJ3VwZGF0ZScgZXZlbnQuXG4gIFx0XHR2YXIgcCA9IHRoaXMub3B0aW9ucy5wYWRkaW5nLFxuICBcdFx0ICAgIHNpemUgPSB0aGlzLl9tYXAuZ2V0U2l6ZSgpLFxuICBcdFx0ICAgIG1pbiA9IHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChzaXplLm11bHRpcGx5QnkoLXApKS5yb3VuZCgpO1xuXG4gIFx0XHR0aGlzLl9ib3VuZHMgPSBuZXcgQm91bmRzKG1pbiwgbWluLmFkZChzaXplLm11bHRpcGx5QnkoMSArIHAgKiAyKSkucm91bmQoKSk7XG5cbiAgXHRcdHRoaXMuX2NlbnRlciA9IHRoaXMuX21hcC5nZXRDZW50ZXIoKTtcbiAgXHRcdHRoaXMuX3pvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIENhbnZhc1xuICAgKiBAaW5oZXJpdHMgUmVuZGVyZXJcbiAgICogQGFrYSBMLkNhbnZhc1xuICAgKlxuICAgKiBBbGxvd3MgdmVjdG9yIGxheWVycyB0byBiZSBkaXNwbGF5ZWQgd2l0aCBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0NhbnZhc19BUEkpLlxuICAgKiBJbmhlcml0cyBgUmVuZGVyZXJgLlxuICAgKlxuICAgKiBEdWUgdG8gW3RlY2huaWNhbCBsaW1pdGF0aW9uc10oaHR0cDovL2Nhbml1c2UuY29tLyNzZWFyY2g9Y2FudmFzKSwgQ2FudmFzIGlzIG5vdFxuICAgKiBhdmFpbGFibGUgaW4gYWxsIHdlYiBicm93c2Vycywgbm90YWJseSBJRTgsIGFuZCBvdmVybGFwcGluZyBnZW9tZXRyaWVzIG1pZ2h0XG4gICAqIG5vdCBkaXNwbGF5IHByb3Blcmx5IGluIHNvbWUgZWRnZSBjYXNlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVXNlIENhbnZhcyBieSBkZWZhdWx0IGZvciBhbGwgcGF0aHMgaW4gdGhlIG1hcDpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnLCB7XG4gICAqIFx0cmVuZGVyZXI6IEwuY2FudmFzKClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBVc2UgYSBDYW52YXMgcmVuZGVyZXIgd2l0aCBleHRyYSBwYWRkaW5nIGZvciBzcGVjaWZpYyB2ZWN0b3IgZ2VvbWV0cmllczpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnKTtcbiAgICogdmFyIG15UmVuZGVyZXIgPSBMLmNhbnZhcyh7IHBhZGRpbmc6IDAuNSB9KTtcbiAgICogdmFyIGxpbmUgPSBMLnBvbHlsaW5lKCBjb29yZGluYXRlcywgeyByZW5kZXJlcjogbXlSZW5kZXJlciB9ICk7XG4gICAqIHZhciBjaXJjbGUgPSBMLmNpcmNsZSggY2VudGVyLCB7IHJlbmRlcmVyOiBteVJlbmRlcmVyIH0gKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBDYW52YXMgPSBSZW5kZXJlci5leHRlbmQoe1xuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGV2ZW50cyA9IFJlbmRlcmVyLnByb3RvdHlwZS5nZXRFdmVudHMuY2FsbCh0aGlzKTtcbiAgXHRcdGV2ZW50cy52aWV3cHJlcmVzZXQgPSB0aGlzLl9vblZpZXdQcmVSZXNldDtcbiAgXHRcdHJldHVybiBldmVudHM7XG4gIFx0fSxcblxuICBcdF9vblZpZXdQcmVSZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gU2V0IGEgZmxhZyBzbyB0aGF0IGEgdmlld3ByZXJlc2V0K21vdmVlbmQrdmlld3Jlc2V0IG9ubHkgdXBkYXRlcyZyZWRyYXdzIG9uY2VcbiAgXHRcdHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMgPSB0cnVlO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyk7XG5cbiAgXHRcdC8vIFJlZHJhdyB2ZWN0b3JzIHNpbmNlIGNhbnZhcyBpcyBjbGVhcmVkIHVwb24gcmVtb3ZhbCxcbiAgXHRcdC8vIGluIGNhc2Ugb2YgcmVtb3ZpbmcgdGhlIHJlbmRlcmVyIGl0c2VsZiBmcm9tIHRoZSBtYXAuXG4gIFx0XHR0aGlzLl9kcmF3KCk7XG4gIFx0fSxcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgXHRcdG9uKGNvbnRhaW5lciwgJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0aGlzKTtcbiAgXHRcdG9uKGNvbnRhaW5lciwgJ2NsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIGNvbnRleHRtZW51JywgdGhpcy5fb25DbGljaywgdGhpcyk7XG4gIFx0XHRvbihjb250YWluZXIsICdtb3VzZW91dCcsIHRoaXMuX2hhbmRsZU1vdXNlT3V0LCB0aGlzKTtcblxuICBcdFx0dGhpcy5fY3R4ID0gY29udGFpbmVyLmdldENvbnRleHQoJzJkJyk7XG4gIFx0fSxcblxuICBcdF9kZXN0cm95Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fcmVkcmF3UmVxdWVzdCk7XG4gIFx0XHRkZWxldGUgdGhpcy5fY3R4O1xuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRvZmYodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jb250YWluZXI7XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoczogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBsYXllcjtcbiAgXHRcdHRoaXMuX3JlZHJhd0JvdW5kcyA9IG51bGw7XG4gIFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgXHRcdFx0bGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICBcdFx0XHRsYXllci5fdXBkYXRlKCk7XG4gIFx0XHR9XG4gIFx0XHR0aGlzLl9yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSAmJiB0aGlzLl9ib3VuZHMpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdFJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgXHRcdHZhciBiID0gdGhpcy5fYm91bmRzLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcixcbiAgXHRcdCAgICBzaXplID0gYi5nZXRTaXplKCksXG4gIFx0XHQgICAgbSA9IHJldGluYSA/IDIgOiAxO1xuXG4gIFx0XHRzZXRQb3NpdGlvbihjb250YWluZXIsIGIubWluKTtcblxuICBcdFx0Ly8gc2V0IGNhbnZhcyBzaXplIChhbHNvIGNsZWFyaW5nIGl0KTsgdXNlIGRvdWJsZSBzaXplIG9uIHJldGluYVxuICBcdFx0Y29udGFpbmVyLndpZHRoID0gbSAqIHNpemUueDtcbiAgXHRcdGNvbnRhaW5lci5oZWlnaHQgPSBtICogc2l6ZS55O1xuICBcdFx0Y29udGFpbmVyLnN0eWxlLndpZHRoID0gc2l6ZS54ICsgJ3B4JztcbiAgXHRcdGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xuXG4gIFx0XHRpZiAocmV0aW5hKSB7XG4gIFx0XHRcdHRoaXMuX2N0eC5zY2FsZSgyLCAyKTtcbiAgXHRcdH1cblxuICBcdFx0Ly8gdHJhbnNsYXRlIHNvIHdlIHVzZSB0aGUgc2FtZSBwYXRoIGNvb3JkaW5hdGVzIGFmdGVyIGNhbnZhcyBlbGVtZW50IG1vdmVzXG4gIFx0XHR0aGlzLl9jdHgudHJhbnNsYXRlKC1iLm1pbi54LCAtYi5taW4ueSk7XG5cbiAgXHRcdC8vIFRlbGwgcGF0aHMgdG8gcmVkcmF3IHRoZW1zZWx2ZXNcbiAgXHRcdHRoaXMuZmlyZSgndXBkYXRlJyk7XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpO1xuXG4gIFx0XHRpZiAodGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocykge1xuICBcdFx0XHR0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzID0gZmFsc2U7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVBhdGhzKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pbml0UGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0aGlzLl91cGRhdGVEYXNoQXJyYXkobGF5ZXIpO1xuICBcdFx0dGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV0gPSBsYXllcjtcblxuICBcdFx0dmFyIG9yZGVyID0gbGF5ZXIuX29yZGVyID0ge1xuICBcdFx0XHRsYXllcjogbGF5ZXIsXG4gIFx0XHRcdHByZXY6IHRoaXMuX2RyYXdMYXN0LFxuICBcdFx0XHRuZXh0OiBudWxsXG4gIFx0XHR9O1xuICBcdFx0aWYgKHRoaXMuX2RyYXdMYXN0KSB7IHRoaXMuX2RyYXdMYXN0Lm5leHQgPSBvcmRlcjsgfVxuICBcdFx0dGhpcy5fZHJhd0xhc3QgPSBvcmRlcjtcbiAgXHRcdHRoaXMuX2RyYXdGaXJzdCA9IHRoaXMuX2RyYXdGaXJzdCB8fCB0aGlzLl9kcmF3TGFzdDtcbiAgXHR9LFxuXG4gIFx0X2FkZFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBvcmRlciA9IGxheWVyLl9vcmRlcjtcbiAgXHRcdHZhciBuZXh0ID0gb3JkZXIubmV4dDtcbiAgXHRcdHZhciBwcmV2ID0gb3JkZXIucHJldjtcblxuICBcdFx0aWYgKG5leHQpIHtcbiAgXHRcdFx0bmV4dC5wcmV2ID0gcHJldjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX2RyYXdMYXN0ID0gcHJldjtcbiAgXHRcdH1cbiAgXHRcdGlmIChwcmV2KSB7XG4gIFx0XHRcdHByZXYubmV4dCA9IG5leHQ7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aGlzLl9kcmF3Rmlyc3QgPSBuZXh0O1xuICBcdFx0fVxuXG4gIFx0XHRkZWxldGUgbGF5ZXIuX29yZGVyO1xuXG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV07XG5cbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHQvLyBSZWRyYXcgdGhlIHVuaW9uIG9mIHRoZSBsYXllcidzIG9sZCBwaXhlbFxuICBcdFx0Ly8gYm91bmRzIGFuZCB0aGUgbmV3IHBpeGVsIGJvdW5kcy5cbiAgXHRcdHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyhsYXllcik7XG4gIFx0XHRsYXllci5fcHJvamVjdCgpO1xuICBcdFx0bGF5ZXIuX3VwZGF0ZSgpO1xuICBcdFx0Ly8gVGhlIHJlZHJhdyB3aWxsIGV4dGVuZCB0aGUgcmVkcmF3IGJvdW5kc1xuICBcdFx0Ly8gd2l0aCB0aGUgbmV3IHBpeGVsIGJvdW5kcy5cbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dGhpcy5fdXBkYXRlRGFzaEFycmF5KGxheWVyKTtcbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlRGFzaEFycmF5OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGlmICh0eXBlb2YgbGF5ZXIub3B0aW9ucy5kYXNoQXJyYXkgPT09ICdzdHJpbmcnKSB7XG4gIFx0XHRcdHZhciBwYXJ0cyA9IGxheWVyLm9wdGlvbnMuZGFzaEFycmF5LnNwbGl0KC9bLCBdKy8pLFxuICBcdFx0XHQgICAgZGFzaEFycmF5ID0gW10sXG4gIFx0XHRcdCAgICBkYXNoVmFsdWUsXG4gIFx0XHRcdCAgICBpO1xuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgXHRcdFx0XHRkYXNoVmFsdWUgPSBOdW1iZXIocGFydHNbaV0pO1xuICBcdFx0XHRcdC8vIElnbm9yZSBkYXNoIGFycmF5IGNvbnRhaW5pbmcgaW52YWxpZCBsZW5ndGhzXG4gIFx0XHRcdFx0aWYgKGlzTmFOKGRhc2hWYWx1ZSkpIHsgcmV0dXJuOyB9XG4gIFx0XHRcdFx0ZGFzaEFycmF5LnB1c2goZGFzaFZhbHVlKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRsYXllci5vcHRpb25zLl9kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRsYXllci5vcHRpb25zLl9kYXNoQXJyYXkgPSBsYXllci5vcHRpb25zLmRhc2hBcnJheTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlcXVlc3RSZWRyYXc6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyhsYXllcik7XG4gIFx0XHR0aGlzLl9yZWRyYXdSZXF1ZXN0ID0gdGhpcy5fcmVkcmF3UmVxdWVzdCB8fCByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3JlZHJhdywgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9leHRlbmRSZWRyYXdCb3VuZHM6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKGxheWVyLl9weEJvdW5kcykge1xuICBcdFx0XHR2YXIgcGFkZGluZyA9IChsYXllci5vcHRpb25zLndlaWdodCB8fCAwKSArIDE7XG4gIFx0XHRcdHRoaXMuX3JlZHJhd0JvdW5kcyA9IHRoaXMuX3JlZHJhd0JvdW5kcyB8fCBuZXcgQm91bmRzKCk7XG4gIFx0XHRcdHRoaXMuX3JlZHJhd0JvdW5kcy5leHRlbmQobGF5ZXIuX3B4Qm91bmRzLm1pbi5zdWJ0cmFjdChbcGFkZGluZywgcGFkZGluZ10pKTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZChsYXllci5fcHhCb3VuZHMubWF4LmFkZChbcGFkZGluZywgcGFkZGluZ10pKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVkcmF3UmVxdWVzdCA9IG51bGw7XG5cbiAgXHRcdGlmICh0aGlzLl9yZWRyYXdCb3VuZHMpIHtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLm1heC5fY2VpbCgpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9jbGVhcigpOyAvLyBjbGVhciBsYXllcnMgaW4gcmVkcmF3IGJvdW5kc1xuICBcdFx0dGhpcy5fZHJhdygpOyAvLyBkcmF3IGxheWVyc1xuXG4gIFx0XHR0aGlzLl9yZWRyYXdCb3VuZHMgPSBudWxsO1xuICBcdH0sXG5cbiAgXHRfY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBib3VuZHMgPSB0aGlzLl9yZWRyYXdCb3VuZHM7XG4gIFx0XHRpZiAoYm91bmRzKSB7XG4gIFx0XHRcdHZhciBzaXplID0gYm91bmRzLmdldFNpemUoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsZWFyUmVjdChib3VuZHMubWluLngsIGJvdW5kcy5taW4ueSwgc2l6ZS54LCBzaXplLnkpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fY3R4LnNhdmUoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLl9jb250YWluZXIud2lkdGgsIHRoaXMuX2NvbnRhaW5lci5oZWlnaHQpO1xuICBcdFx0XHR0aGlzLl9jdHgucmVzdG9yZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGxheWVyLCBib3VuZHMgPSB0aGlzLl9yZWRyYXdCb3VuZHM7XG4gIFx0XHR0aGlzLl9jdHguc2F2ZSgpO1xuICBcdFx0aWYgKGJvdW5kcykge1xuICBcdFx0XHR2YXIgc2l6ZSA9IGJvdW5kcy5nZXRTaXplKCk7XG4gIFx0XHRcdHRoaXMuX2N0eC5iZWdpblBhdGgoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LnJlY3QoYm91bmRzLm1pbi54LCBib3VuZHMubWluLnksIHNpemUueCwgc2l6ZS55KTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsaXAoKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fZHJhd2luZyA9IHRydWU7XG5cbiAgXHRcdGZvciAodmFyIG9yZGVyID0gdGhpcy5fZHJhd0ZpcnN0OyBvcmRlcjsgb3JkZXIgPSBvcmRlci5uZXh0KSB7XG4gIFx0XHRcdGxheWVyID0gb3JkZXIubGF5ZXI7XG4gIFx0XHRcdGlmICghYm91bmRzIHx8IChsYXllci5fcHhCb3VuZHMgJiYgbGF5ZXIuX3B4Qm91bmRzLmludGVyc2VjdHMoYm91bmRzKSkpIHtcbiAgXHRcdFx0XHRsYXllci5fdXBkYXRlUGF0aCgpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2RyYXdpbmcgPSBmYWxzZTtcblxuICBcdFx0dGhpcy5fY3R4LnJlc3RvcmUoKTsgIC8vIFJlc3RvcmUgc3RhdGUgYmVmb3JlIGNsaXBwaW5nLlxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUG9seTogZnVuY3Rpb24gKGxheWVyLCBjbG9zZWQpIHtcbiAgXHRcdGlmICghdGhpcy5fZHJhd2luZykgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIGksIGosIGxlbjIsIHAsXG4gIFx0XHQgICAgcGFydHMgPSBsYXllci5fcGFydHMsXG4gIFx0XHQgICAgbGVuID0gcGFydHMubGVuZ3RoLFxuICBcdFx0ICAgIGN0eCA9IHRoaXMuX2N0eDtcblxuICBcdFx0aWYgKCFsZW4pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdGN0eC5iZWdpblBhdGgoKTtcblxuICBcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwYXJ0c1tpXS5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHtcbiAgXHRcdFx0XHRwID0gcGFydHNbaV1bal07XG4gIFx0XHRcdFx0Y3R4W2ogPyAnbGluZVRvJyA6ICdtb3ZlVG8nXShwLngsIHAueSk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0aWYgKGNsb3NlZCkge1xuICBcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9maWxsU3Ryb2tlKGN0eCwgbGF5ZXIpO1xuXG4gIFx0XHQvLyBUT0RPIG9wdGltaXphdGlvbjogMSBmaWxsL3N0cm9rZSBmb3IgYWxsIGZlYXR1cmVzIHdpdGggZXF1YWwgc3R5bGUgaW5zdGVhZCBvZiAxIGZvciBlYWNoIGZlYXR1cmVcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUNpcmNsZTogZnVuY3Rpb24gKGxheWVyKSB7XG5cbiAgXHRcdGlmICghdGhpcy5fZHJhd2luZyB8fCBsYXllci5fZW1wdHkoKSkgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIHAgPSBsYXllci5fcG9pbnQsXG4gIFx0XHQgICAgY3R4ID0gdGhpcy5fY3R4LFxuICBcdFx0ICAgIHIgPSBNYXRoLm1heChNYXRoLnJvdW5kKGxheWVyLl9yYWRpdXMpLCAxKSxcbiAgXHRcdCAgICBzID0gKE1hdGgubWF4KE1hdGgucm91bmQobGF5ZXIuX3JhZGl1c1kpLCAxKSB8fCByKSAvIHI7XG5cbiAgXHRcdGlmIChzICE9PSAxKSB7XG4gIFx0XHRcdGN0eC5zYXZlKCk7XG4gIFx0XHRcdGN0eC5zY2FsZSgxLCBzKTtcbiAgXHRcdH1cblxuICBcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuICBcdFx0Y3R4LmFyYyhwLngsIHAueSAvIHMsIHIsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG5cbiAgXHRcdGlmIChzICE9PSAxKSB7XG4gIFx0XHRcdGN0eC5yZXN0b3JlKCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2ZpbGxTdHJva2UoY3R4LCBsYXllcik7XG4gIFx0fSxcblxuICBcdF9maWxsU3Ryb2tlOiBmdW5jdGlvbiAoY3R4LCBsYXllcikge1xuICBcdFx0dmFyIG9wdGlvbnMgPSBsYXllci5vcHRpb25zO1xuXG4gIFx0XHRpZiAob3B0aW9ucy5maWxsKSB7XG4gIFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IG9wdGlvbnMuZmlsbE9wYWNpdHk7XG4gIFx0XHRcdGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmZpbGxDb2xvciB8fCBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRjdHguZmlsbChvcHRpb25zLmZpbGxSdWxlIHx8ICdldmVub2RkJyk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLnN0cm9rZSAmJiBvcHRpb25zLndlaWdodCAhPT0gMCkge1xuICBcdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG4gIFx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKGxheWVyLm9wdGlvbnMgJiYgbGF5ZXIub3B0aW9ucy5fZGFzaEFycmF5IHx8IFtdKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm9wYWNpdHk7XG4gIFx0XHRcdGN0eC5saW5lV2lkdGggPSBvcHRpb25zLndlaWdodDtcbiAgXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5jb2xvcjtcbiAgXHRcdFx0Y3R4LmxpbmVDYXAgPSBvcHRpb25zLmxpbmVDYXA7XG4gIFx0XHRcdGN0eC5saW5lSm9pbiA9IG9wdGlvbnMubGluZUpvaW47XG4gIFx0XHRcdGN0eC5zdHJva2UoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Ly8gQ2FudmFzIG9idmlvdXNseSBkb2Vzbid0IGhhdmUgbW91c2UgZXZlbnRzIGZvciBpbmRpdmlkdWFsIGRyYXduIG9iamVjdHMsXG4gIFx0Ly8gc28gd2UgZW11bGF0ZSB0aGF0IGJ5IGNhbGN1bGF0aW5nIHdoYXQncyB1bmRlciB0aGUgbW91c2Ugb24gbW91c2Vtb3ZlL2NsaWNrIG1hbnVhbGx5XG5cbiAgXHRfb25DbGljazogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBwb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KGUpLCBsYXllciwgY2xpY2tlZExheWVyO1xuXG4gIFx0XHRmb3IgKHZhciBvcmRlciA9IHRoaXMuX2RyYXdGaXJzdDsgb3JkZXI7IG9yZGVyID0gb3JkZXIubmV4dCkge1xuICBcdFx0XHRsYXllciA9IG9yZGVyLmxheWVyO1xuICBcdFx0XHRpZiAobGF5ZXIub3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiBsYXllci5fY29udGFpbnNQb2ludChwb2ludCkpIHtcbiAgXHRcdFx0XHRpZiAoIShlLnR5cGUgPT09ICdjbGljaycgfHwgZS50eXBlICE9PSAncHJlY2xpY2snKSB8fCAhdGhpcy5fbWFwLl9kcmFnZ2FibGVNb3ZlZChsYXllcikpIHtcbiAgXHRcdFx0XHRcdGNsaWNrZWRMYXllciA9IGxheWVyO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0aWYgKGNsaWNrZWRMYXllcikgIHtcbiAgXHRcdFx0ZmFrZVN0b3AoZSk7XG4gIFx0XHRcdHRoaXMuX2ZpcmVFdmVudChbY2xpY2tlZExheWVyXSwgZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlTW92ZTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGlmICghdGhpcy5fbWFwIHx8IHRoaXMuX21hcC5kcmFnZ2luZy5tb3ZpbmcoKSB8fCB0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBwb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KGUpO1xuICBcdFx0dGhpcy5faGFuZGxlTW91c2VIb3ZlcihlLCBwb2ludCk7XG4gIFx0fSxcblxuXG4gIFx0X2hhbmRsZU1vdXNlT3V0OiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxheWVyID0gdGhpcy5faG92ZXJlZExheWVyO1xuICBcdFx0aWYgKGxheWVyKSB7XG4gIFx0XHRcdC8vIGlmIHdlJ3JlIGxlYXZpbmcgdGhlIGxheWVyLCBmaXJlIG1vdXNlb3V0XG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcbiAgXHRcdFx0dGhpcy5fZmlyZUV2ZW50KFtsYXllcl0sIGUsICdtb3VzZW91dCcpO1xuICBcdFx0XHR0aGlzLl9ob3ZlcmVkTGF5ZXIgPSBudWxsO1xuICBcdFx0XHR0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkID0gZmFsc2U7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9oYW5kbGVNb3VzZUhvdmVyOiBmdW5jdGlvbiAoZSwgcG9pbnQpIHtcbiAgXHRcdGlmICh0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dmFyIGxheWVyLCBjYW5kaWRhdGVIb3ZlcmVkTGF5ZXI7XG5cbiAgXHRcdGZvciAodmFyIG9yZGVyID0gdGhpcy5fZHJhd0ZpcnN0OyBvcmRlcjsgb3JkZXIgPSBvcmRlci5uZXh0KSB7XG4gIFx0XHRcdGxheWVyID0gb3JkZXIubGF5ZXI7XG4gIFx0XHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlICYmIGxheWVyLl9jb250YWluc1BvaW50KHBvaW50KSkge1xuICBcdFx0XHRcdGNhbmRpZGF0ZUhvdmVyZWRMYXllciA9IGxheWVyO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChjYW5kaWRhdGVIb3ZlcmVkTGF5ZXIgIT09IHRoaXMuX2hvdmVyZWRMYXllcikge1xuICBcdFx0XHR0aGlzLl9oYW5kbGVNb3VzZU91dChlKTtcblxuICBcdFx0XHRpZiAoY2FuZGlkYXRlSG92ZXJlZExheWVyKSB7XG4gIFx0XHRcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1pbnRlcmFjdGl2ZScpOyAvLyBjaGFuZ2UgY3Vyc29yXG4gIFx0XHRcdFx0dGhpcy5fZmlyZUV2ZW50KFtjYW5kaWRhdGVIb3ZlcmVkTGF5ZXJdLCBlLCAnbW91c2VvdmVyJyk7XG4gIFx0XHRcdFx0dGhpcy5faG92ZXJlZExheWVyID0gY2FuZGlkYXRlSG92ZXJlZExheWVyO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh0aGlzLl9ob3ZlcmVkTGF5ZXIpIHtcbiAgXHRcdFx0dGhpcy5fZmlyZUV2ZW50KFt0aGlzLl9ob3ZlcmVkTGF5ZXJdLCBlKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCA9IHRydWU7XG4gIFx0XHRzZXRUaW1lb3V0KGJpbmQoZnVuY3Rpb24gKCkge1xuICBcdFx0XHR0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkID0gZmFsc2U7XG4gIFx0XHR9LCB0aGlzKSwgMzIpO1xuICBcdH0sXG5cbiAgXHRfZmlyZUV2ZW50OiBmdW5jdGlvbiAobGF5ZXJzLCBlLCB0eXBlKSB7XG4gIFx0XHR0aGlzLl9tYXAuX2ZpcmVET01FdmVudChlLCB0eXBlIHx8IGUudHlwZSwgbGF5ZXJzKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgb3JkZXIgPSBsYXllci5fb3JkZXI7XG5cbiAgXHRcdGlmICghb3JkZXIpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBuZXh0ID0gb3JkZXIubmV4dDtcbiAgXHRcdHZhciBwcmV2ID0gb3JkZXIucHJldjtcblxuICBcdFx0aWYgKG5leHQpIHtcbiAgXHRcdFx0bmV4dC5wcmV2ID0gcHJldjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdC8vIEFscmVhZHkgbGFzdFxuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG4gIFx0XHRpZiAocHJldikge1xuICBcdFx0XHRwcmV2Lm5leHQgPSBuZXh0O1xuICBcdFx0fSBlbHNlIGlmIChuZXh0KSB7XG4gIFx0XHRcdC8vIFVwZGF0ZSBmaXJzdCBlbnRyeSB1bmxlc3MgdGhpcyBpcyB0aGVcbiAgXHRcdFx0Ly8gc2luZ2xlIGVudHJ5XG4gIFx0XHRcdHRoaXMuX2RyYXdGaXJzdCA9IG5leHQ7XG4gIFx0XHR9XG5cbiAgXHRcdG9yZGVyLnByZXYgPSB0aGlzLl9kcmF3TGFzdDtcbiAgXHRcdHRoaXMuX2RyYXdMYXN0Lm5leHQgPSBvcmRlcjtcblxuICBcdFx0b3JkZXIubmV4dCA9IG51bGw7XG4gIFx0XHR0aGlzLl9kcmF3TGFzdCA9IG9yZGVyO1xuXG4gIFx0XHR0aGlzLl9yZXF1ZXN0UmVkcmF3KGxheWVyKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9CYWNrOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBvcmRlciA9IGxheWVyLl9vcmRlcjtcblxuICBcdFx0aWYgKCFvcmRlcikgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIG5leHQgPSBvcmRlci5uZXh0O1xuICBcdFx0dmFyIHByZXYgPSBvcmRlci5wcmV2O1xuXG4gIFx0XHRpZiAocHJldikge1xuICBcdFx0XHRwcmV2Lm5leHQgPSBuZXh0O1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0Ly8gQWxyZWFkeSBmaXJzdFxuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG4gIFx0XHRpZiAobmV4dCkge1xuICBcdFx0XHRuZXh0LnByZXYgPSBwcmV2O1xuICBcdFx0fSBlbHNlIGlmIChwcmV2KSB7XG4gIFx0XHRcdC8vIFVwZGF0ZSBsYXN0IGVudHJ5IHVubGVzcyB0aGlzIGlzIHRoZVxuICBcdFx0XHQvLyBzaW5nbGUgZW50cnlcbiAgXHRcdFx0dGhpcy5fZHJhd0xhc3QgPSBwcmV2O1xuICBcdFx0fVxuXG4gIFx0XHRvcmRlci5wcmV2ID0gbnVsbDtcblxuICBcdFx0b3JkZXIubmV4dCA9IHRoaXMuX2RyYXdGaXJzdDtcbiAgXHRcdHRoaXMuX2RyYXdGaXJzdC5wcmV2ID0gb3JkZXI7XG4gIFx0XHR0aGlzLl9kcmF3Rmlyc3QgPSBvcmRlcjtcblxuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAZmFjdG9yeSBMLmNhbnZhcyhvcHRpb25zPzogUmVuZGVyZXIgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIENhbnZhcyByZW5kZXJlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBjYW52YXMkMShvcHRpb25zKSB7XG4gIFx0cmV0dXJuIGNhbnZhcyA/IG5ldyBDYW52YXMob3B0aW9ucykgOiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogVGhhbmtzIHRvIERtaXRyeSBCYXJhbm92c2t5IGFuZCBoaXMgUmFwaGFlbCBsaWJyYXJ5IGZvciBpbnNwaXJhdGlvbiFcbiAgICovXG5cblxuICB2YXIgdm1sQ3JlYXRlID0gKGZ1bmN0aW9uICgpIHtcbiAgXHR0cnkge1xuICBcdFx0ZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoJ2x2bWwnLCAndXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwnKTtcbiAgXHRcdHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0XHRyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGx2bWw6JyArIG5hbWUgKyAnIGNsYXNzPVwibHZtbFwiPicpO1xuICBcdFx0fTtcbiAgXHR9IGNhdGNoIChlKSB7XG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJzwnICsgbmFtZSArICcgeG1sbnM9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQuY29tOnZtbFwiIGNsYXNzPVwibHZtbFwiPicpO1xuICBcdFx0fTtcbiAgXHR9XG4gIH0pKCk7XG5cblxuICAvKlxuICAgKiBAY2xhc3MgU1ZHXG4gICAqXG4gICAqXG4gICAqIFZNTCB3YXMgZGVwcmVjYXRlZCBpbiAyMDEyLCB3aGljaCBtZWFucyBWTUwgZnVuY3Rpb25hbGl0eSBleGlzdHMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBvbGQgdmVyc2lvbnMgb2YgSW50ZXJuZXQgRXhwbG9yZXIuXG4gICAqL1xuXG4gIC8vIG1peGluIHRvIHJlZGVmaW5lIHNvbWUgU1ZHIG1ldGhvZHMgdG8gaGFuZGxlIFZNTCBzeW50YXggd2hpY2ggaXMgc2ltaWxhciBidXQgd2l0aCBzb21lIGRpZmZlcmVuY2VzXG4gIHZhciB2bWxNaXhpbiA9IHtcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtdm1sLWNvbnRhaW5lcicpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwLl9hbmltYXRpbmdab29tKSB7IHJldHVybjsgfVxuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKTtcbiAgXHRcdHRoaXMuZmlyZSgndXBkYXRlJyk7XG4gIFx0fSxcblxuICBcdF9pbml0UGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gbGF5ZXIuX2NvbnRhaW5lciA9IHZtbENyZWF0ZSgnc2hhcGUnKTtcblxuICBcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC12bWwtc2hhcGUgJyArICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnKSk7XG5cbiAgXHRcdGNvbnRhaW5lci5jb29yZHNpemUgPSAnMSAxJztcblxuICBcdFx0bGF5ZXIuX3BhdGggPSB2bWxDcmVhdGUoJ3BhdGgnKTtcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYXllci5fcGF0aCk7XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZVN0eWxlKGxheWVyKTtcbiAgXHRcdHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildID0gbGF5ZXI7XG4gIFx0fSxcblxuICBcdF9hZGRQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSBsYXllci5fY29udGFpbmVyO1xuICBcdFx0dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgXHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlKSB7XG4gIFx0XHRcdGxheWVyLmFkZEludGVyYWN0aXZlVGFyZ2V0KGNvbnRhaW5lcik7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSBsYXllci5fY29udGFpbmVyO1xuICBcdFx0cmVtb3ZlKGNvbnRhaW5lcik7XG4gIFx0XHRsYXllci5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChjb250YWluZXIpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHN0cm9rZSA9IGxheWVyLl9zdHJva2UsXG4gIFx0XHQgICAgZmlsbCA9IGxheWVyLl9maWxsLFxuICBcdFx0ICAgIG9wdGlvbnMgPSBsYXllci5vcHRpb25zLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IGxheWVyLl9jb250YWluZXI7XG5cbiAgXHRcdGNvbnRhaW5lci5zdHJva2VkID0gISFvcHRpb25zLnN0cm9rZTtcbiAgXHRcdGNvbnRhaW5lci5maWxsZWQgPSAhIW9wdGlvbnMuZmlsbDtcblxuICBcdFx0aWYgKG9wdGlvbnMuc3Ryb2tlKSB7XG4gIFx0XHRcdGlmICghc3Ryb2tlKSB7XG4gIFx0XHRcdFx0c3Ryb2tlID0gbGF5ZXIuX3N0cm9rZSA9IHZtbENyZWF0ZSgnc3Ryb2tlJyk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHN0cm9rZSk7XG4gIFx0XHRcdHN0cm9rZS53ZWlnaHQgPSBvcHRpb25zLndlaWdodCArICdweCc7XG4gIFx0XHRcdHN0cm9rZS5jb2xvciA9IG9wdGlvbnMuY29sb3I7XG4gIFx0XHRcdHN0cm9rZS5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuXG4gIFx0XHRcdGlmIChvcHRpb25zLmRhc2hBcnJheSkge1xuICBcdFx0XHRcdHN0cm9rZS5kYXNoU3R5bGUgPSBpc0FycmF5KG9wdGlvbnMuZGFzaEFycmF5KSA/XG4gIFx0XHRcdFx0ICAgIG9wdGlvbnMuZGFzaEFycmF5LmpvaW4oJyAnKSA6XG4gIFx0XHRcdFx0ICAgIG9wdGlvbnMuZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywgJyAnKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRzdHJva2UuZGFzaFN0eWxlID0gJyc7XG4gIFx0XHRcdH1cbiAgXHRcdFx0c3Ryb2tlLmVuZGNhcCA9IG9wdGlvbnMubGluZUNhcC5yZXBsYWNlKCdidXR0JywgJ2ZsYXQnKTtcbiAgXHRcdFx0c3Ryb2tlLmpvaW5zdHlsZSA9IG9wdGlvbnMubGluZUpvaW47XG5cbiAgXHRcdH0gZWxzZSBpZiAoc3Ryb2tlKSB7XG4gIFx0XHRcdGNvbnRhaW5lci5yZW1vdmVDaGlsZChzdHJva2UpO1xuICBcdFx0XHRsYXllci5fc3Ryb2tlID0gbnVsbDtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG9wdGlvbnMuZmlsbCkge1xuICBcdFx0XHRpZiAoIWZpbGwpIHtcbiAgXHRcdFx0XHRmaWxsID0gbGF5ZXIuX2ZpbGwgPSB2bWxDcmVhdGUoJ2ZpbGwnKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsbCk7XG4gIFx0XHRcdGZpbGwuY29sb3IgPSBvcHRpb25zLmZpbGxDb2xvciB8fCBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRmaWxsLm9wYWNpdHkgPSBvcHRpb25zLmZpbGxPcGFjaXR5O1xuXG4gIFx0XHR9IGVsc2UgaWYgKGZpbGwpIHtcbiAgXHRcdFx0Y29udGFpbmVyLnJlbW92ZUNoaWxkKGZpbGwpO1xuICBcdFx0XHRsYXllci5fZmlsbCA9IG51bGw7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVDaXJjbGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHAgPSBsYXllci5fcG9pbnQucm91bmQoKSxcbiAgXHRcdCAgICByID0gTWF0aC5yb3VuZChsYXllci5fcmFkaXVzKSxcbiAgXHRcdCAgICByMiA9IE1hdGgucm91bmQobGF5ZXIuX3JhZGl1c1kgfHwgcik7XG5cbiAgXHRcdHRoaXMuX3NldFBhdGgobGF5ZXIsIGxheWVyLl9lbXB0eSgpID8gJ00wIDAnIDpcbiAgXHRcdFx0J0FMICcgKyBwLnggKyAnLCcgKyBwLnkgKyAnICcgKyByICsgJywnICsgcjIgKyAnIDAsJyArICg2NTUzNSAqIDM2MCkpO1xuICBcdH0sXG5cbiAgXHRfc2V0UGF0aDogZnVuY3Rpb24gKGxheWVyLCBwYXRoKSB7XG4gIFx0XHRsYXllci5fcGF0aC52ID0gcGF0aDtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0b0Zyb250KGxheWVyLl9jb250YWluZXIpO1xuICBcdH0sXG5cbiAgXHRfYnJpbmdUb0JhY2s6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dG9CYWNrKGxheWVyLl9jb250YWluZXIpO1xuICBcdH1cbiAgfTtcblxuICB2YXIgY3JlYXRlJDIgPSB2bWwgPyB2bWxDcmVhdGUgOiBzdmdDcmVhdGU7XG5cbiAgLypcbiAgICogQGNsYXNzIFNWR1xuICAgKiBAaW5oZXJpdHMgUmVuZGVyZXJcbiAgICogQGFrYSBMLlNWR1xuICAgKlxuICAgKiBBbGxvd3MgdmVjdG9yIGxheWVycyB0byBiZSBkaXNwbGF5ZWQgd2l0aCBbU1ZHXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcpLlxuICAgKiBJbmhlcml0cyBgUmVuZGVyZXJgLlxuICAgKlxuICAgKiBEdWUgdG8gW3RlY2huaWNhbCBsaW1pdGF0aW9uc10oaHR0cDovL2Nhbml1c2UuY29tLyNzZWFyY2g9c3ZnKSwgU1ZHIGlzIG5vdFxuICAgKiBhdmFpbGFibGUgaW4gYWxsIHdlYiBicm93c2Vycywgbm90YWJseSBBbmRyb2lkIDIueCBhbmQgMy54LlxuICAgKlxuICAgKiBBbHRob3VnaCBTVkcgaXMgbm90IGF2YWlsYWJsZSBvbiBJRTcgYW5kIElFOCwgdGhlc2UgYnJvd3NlcnMgc3VwcG9ydFxuICAgKiBbVk1MXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WZWN0b3JfTWFya3VwX0xhbmd1YWdlKVxuICAgKiAoYSBub3cgZGVwcmVjYXRlZCB0ZWNobm9sb2d5KSwgYW5kIHRoZSBTVkcgcmVuZGVyZXIgd2lsbCBmYWxsIGJhY2sgdG8gVk1MIGluXG4gICAqIHRoaXMgY2FzZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVXNlIFNWRyBieSBkZWZhdWx0IGZvciBhbGwgcGF0aHMgaW4gdGhlIG1hcDpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnLCB7XG4gICAqIFx0cmVuZGVyZXI6IEwuc3ZnKClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBVc2UgYSBTVkcgcmVuZGVyZXIgd2l0aCBleHRyYSBwYWRkaW5nIGZvciBzcGVjaWZpYyB2ZWN0b3IgZ2VvbWV0cmllczpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnKTtcbiAgICogdmFyIG15UmVuZGVyZXIgPSBMLnN2Zyh7IHBhZGRpbmc6IDAuNSB9KTtcbiAgICogdmFyIGxpbmUgPSBMLnBvbHlsaW5lKCBjb29yZGluYXRlcywgeyByZW5kZXJlcjogbXlSZW5kZXJlciB9ICk7XG4gICAqIHZhciBjaXJjbGUgPSBMLmNpcmNsZSggY2VudGVyLCB7IHJlbmRlcmVyOiBteVJlbmRlcmVyIH0gKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTVkcgPSBSZW5kZXJlci5leHRlbmQoe1xuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0gUmVuZGVyZXIucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO1xuICBcdFx0ZXZlbnRzLnpvb21zdGFydCA9IHRoaXMuX29uWm9vbVN0YXJ0O1xuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X2luaXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQyKCdzdmcnKTtcblxuICBcdFx0Ly8gbWFrZXMgaXQgcG9zc2libGUgdG8gY2xpY2sgdGhyb3VnaCBzdmcgcm9vdDsgd2UnbGwgcmVzZXQgaXQgYmFjayBpbiBpbmRpdmlkdWFsIHBhdGhzXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgXHRcdHRoaXMuX3Jvb3RHcm91cCA9IGNyZWF0ZSQyKCdnJyk7XG4gIFx0XHR0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm9vdEdyb3VwKTtcbiAgXHR9LFxuXG4gIFx0X2Rlc3Ryb3lDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICBcdFx0b2ZmKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICBcdFx0ZGVsZXRlIHRoaXMuX3Jvb3RHcm91cDtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9zdmdTaXplO1xuICBcdH0sXG5cbiAgXHRfb25ab29tU3RhcnQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIERyYWctdGhlbi1waW5jaCBpbnRlcmFjdGlvbnMgbWlnaHQgbWVzcyB1cCB0aGUgY2VudGVyIGFuZCB6b29tLlxuICBcdFx0Ly8gSW4gdGhpcyBjYXNlLCB0aGUgZWFzaWVzdCB3YXkgdG8gcHJldmVudCB0aGlzIGlzIHJlLWRvIHRoZSByZW5kZXJlclxuICBcdFx0Ly8gICBib3VuZHMgYW5kIHBhZGRpbmcgd2hlbiB0aGUgem9vbWluZyBzdGFydHMuXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSAmJiB0aGlzLl9ib3VuZHMpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdFJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgXHRcdHZhciBiID0gdGhpcy5fYm91bmRzLFxuICBcdFx0ICAgIHNpemUgPSBiLmdldFNpemUoKSxcbiAgXHRcdCAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgXHRcdC8vIHNldCBzaXplIG9mIHN2Zy1jb250YWluZXIgaWYgY2hhbmdlZFxuICBcdFx0aWYgKCF0aGlzLl9zdmdTaXplIHx8ICF0aGlzLl9zdmdTaXplLmVxdWFscyhzaXplKSkge1xuICBcdFx0XHR0aGlzLl9zdmdTaXplID0gc2l6ZTtcbiAgXHRcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzaXplLngpO1xuICBcdFx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBzaXplLnkpO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBtb3ZlbWVudDogdXBkYXRlIGNvbnRhaW5lciB2aWV3Qm94IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgY29vcmRpbmF0ZXMgb2YgaW5kaXZpZHVhbCBsYXllcnNcbiAgXHRcdHNldFBvc2l0aW9uKGNvbnRhaW5lciwgYi5taW4pO1xuICBcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFtiLm1pbi54LCBiLm1pbi55LCBzaXplLngsIHNpemUueV0uam9pbignICcpKTtcblxuICBcdFx0dGhpcy5maXJlKCd1cGRhdGUnKTtcbiAgXHR9LFxuXG4gIFx0Ly8gbWV0aG9kcyBiZWxvdyBhcmUgY2FsbGVkIGJ5IHZlY3RvciBsYXllcnMgaW1wbGVtZW50YXRpb25zXG5cbiAgXHRfaW5pdFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHBhdGggPSBsYXllci5fcGF0aCA9IGNyZWF0ZSQyKCdwYXRoJyk7XG5cbiAgXHRcdC8vIEBuYW1lc3BhY2UgUGF0aFxuICBcdFx0Ly8gQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9IG51bGxcbiAgXHRcdC8vIEN1c3RvbSBjbGFzcyBuYW1lIHNldCBvbiBhbiBlbGVtZW50LiBPbmx5IGZvciBTVkcgcmVuZGVyZXIuXG4gIFx0XHRpZiAobGF5ZXIub3B0aW9ucy5jbGFzc05hbWUpIHtcbiAgXHRcdFx0YWRkQ2xhc3MocGF0aCwgbGF5ZXIub3B0aW9ucy5jbGFzc05hbWUpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAobGF5ZXIub3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xuICBcdFx0XHRhZGRDbGFzcyhwYXRoLCAnbGVhZmxldC1pbnRlcmFjdGl2ZScpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl91cGRhdGVTdHlsZShsYXllcik7XG4gIFx0XHR0aGlzLl9sYXllcnNbc3RhbXAobGF5ZXIpXSA9IGxheWVyO1xuICBcdH0sXG5cbiAgXHRfYWRkUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRpZiAoIXRoaXMuX3Jvb3RHcm91cCkgeyB0aGlzLl9pbml0Q29udGFpbmVyKCk7IH1cbiAgXHRcdHRoaXMuX3Jvb3RHcm91cC5hcHBlbmRDaGlsZChsYXllci5fcGF0aCk7XG4gIFx0XHRsYXllci5hZGRJbnRlcmFjdGl2ZVRhcmdldChsYXllci5fcGF0aCk7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHJlbW92ZShsYXllci5fcGF0aCk7XG4gIFx0XHRsYXllci5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChsYXllci5fcGF0aCk7XG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV07XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGxheWVyLl9wcm9qZWN0KCk7XG4gIFx0XHRsYXllci5fdXBkYXRlKCk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVTdHlsZTogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgcGF0aCA9IGxheWVyLl9wYXRoLFxuICBcdFx0ICAgIG9wdGlvbnMgPSBsYXllci5vcHRpb25zO1xuXG4gIFx0XHRpZiAoIXBhdGgpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdGlmIChvcHRpb25zLnN0cm9rZSkge1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgb3B0aW9ucy5jb2xvcik7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2Utb3BhY2l0eScsIG9wdGlvbnMub3BhY2l0eSk7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBvcHRpb25zLndlaWdodCk7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWNhcCcsIG9wdGlvbnMubGluZUNhcCk7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWpvaW4nLCBvcHRpb25zLmxpbmVKb2luKTtcblxuICBcdFx0XHRpZiAob3B0aW9ucy5kYXNoQXJyYXkpIHtcbiAgXHRcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsIG9wdGlvbnMuZGFzaEFycmF5KTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRwYXRoLnJlbW92ZUF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0aWYgKG9wdGlvbnMuZGFzaE9mZnNldCkge1xuICBcdFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtZGFzaG9mZnNldCcsIG9wdGlvbnMuZGFzaE9mZnNldCk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0cGF0aC5yZW1vdmVBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jyk7XG4gIFx0XHRcdH1cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UnLCAnbm9uZScpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAob3B0aW9ucy5maWxsKSB7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgb3B0aW9ucy5maWxsQ29sb3IgfHwgb3B0aW9ucy5jb2xvcik7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCBvcHRpb25zLmZpbGxPcGFjaXR5KTtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtcnVsZScsIG9wdGlvbnMuZmlsbFJ1bGUgfHwgJ2V2ZW5vZGQnKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBvbHk6IGZ1bmN0aW9uIChsYXllciwgY2xvc2VkKSB7XG4gIFx0XHR0aGlzLl9zZXRQYXRoKGxheWVyLCBwb2ludHNUb1BhdGgobGF5ZXIuX3BhcnRzLCBjbG9zZWQpKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUNpcmNsZTogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgcCA9IGxheWVyLl9wb2ludCxcbiAgXHRcdCAgICByID0gTWF0aC5tYXgoTWF0aC5yb3VuZChsYXllci5fcmFkaXVzKSwgMSksXG4gIFx0XHQgICAgcjIgPSBNYXRoLm1heChNYXRoLnJvdW5kKGxheWVyLl9yYWRpdXNZKSwgMSkgfHwgcixcbiAgXHRcdCAgICBhcmMgPSAnYScgKyByICsgJywnICsgcjIgKyAnIDAgMSwwICc7XG5cbiAgXHRcdC8vIGRyYXdpbmcgYSBjaXJjbGUgd2l0aCB0d28gaGFsZi1hcmNzXG4gIFx0XHR2YXIgZCA9IGxheWVyLl9lbXB0eSgpID8gJ00wIDAnIDpcbiAgXHRcdFx0J00nICsgKHAueCAtIHIpICsgJywnICsgcC55ICtcbiAgXHRcdFx0YXJjICsgKHIgKiAyKSArICcsMCAnICtcbiAgXHRcdFx0YXJjICsgKC1yICogMikgKyAnLDAgJztcblxuICBcdFx0dGhpcy5fc2V0UGF0aChsYXllciwgZCk7XG4gIFx0fSxcblxuICBcdF9zZXRQYXRoOiBmdW5jdGlvbiAobGF5ZXIsIHBhdGgpIHtcbiAgXHRcdGxheWVyLl9wYXRoLnNldEF0dHJpYnV0ZSgnZCcsIHBhdGgpO1xuICBcdH0sXG5cbiAgXHQvLyBTVkcgZG9lcyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiB6SW5kZXggc28gd2UgcmVzb3J0IHRvIGNoYW5naW5nIHRoZSBET00gb3JkZXIgb2YgZWxlbWVudHNcbiAgXHRfYnJpbmdUb0Zyb250OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHRvRnJvbnQobGF5ZXIuX3BhdGgpO1xuICBcdH0sXG5cbiAgXHRfYnJpbmdUb0JhY2s6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dG9CYWNrKGxheWVyLl9wYXRoKTtcbiAgXHR9XG4gIH0pO1xuXG4gIGlmICh2bWwpIHtcbiAgXHRTVkcuaW5jbHVkZSh2bWxNaXhpbik7XG4gIH1cblxuICAvLyBAbmFtZXNwYWNlIFNWR1xuICAvLyBAZmFjdG9yeSBMLnN2ZyhvcHRpb25zPzogUmVuZGVyZXIgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIFNWRyByZW5kZXJlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBzdmckMShvcHRpb25zKSB7XG4gIFx0cmV0dXJuIHN2ZyB8fCB2bWwgPyBuZXcgU1ZHKG9wdGlvbnMpIDogbnVsbDtcbiAgfVxuXG4gIE1hcC5pbmNsdWRlKHtcbiAgXHQvLyBAbmFtZXNwYWNlIE1hcDsgQG1ldGhvZCBnZXRSZW5kZXJlcihsYXllcjogUGF0aCk6IFJlbmRlcmVyXG4gIFx0Ly8gUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgYFJlbmRlcmVyYCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2l2ZW5cbiAgXHQvLyBgUGF0aGAuIEl0IHdpbGwgZW5zdXJlIHRoYXQgdGhlIGByZW5kZXJlcmAgb3B0aW9ucyBvZiB0aGUgbWFwIGFuZCBwYXRoc1xuICBcdC8vIGFyZSByZXNwZWN0ZWQsIGFuZCB0aGF0IHRoZSByZW5kZXJlcnMgZG8gZXhpc3Qgb24gdGhlIG1hcC5cbiAgXHRnZXRSZW5kZXJlcjogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHQvLyBAbmFtZXNwYWNlIFBhdGg7IEBvcHRpb24gcmVuZGVyZXI6IFJlbmRlcmVyXG4gIFx0XHQvLyBVc2UgdGhpcyBzcGVjaWZpYyBpbnN0YW5jZSBvZiBgUmVuZGVyZXJgIGZvciB0aGlzIHBhdGguIFRha2VzXG4gIFx0XHQvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIG1hcCdzIFtkZWZhdWx0IHJlbmRlcmVyXSgjbWFwLXJlbmRlcmVyKS5cbiAgXHRcdHZhciByZW5kZXJlciA9IGxheWVyLm9wdGlvbnMucmVuZGVyZXIgfHwgdGhpcy5fZ2V0UGFuZVJlbmRlcmVyKGxheWVyLm9wdGlvbnMucGFuZSkgfHwgdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IHRoaXMuX3JlbmRlcmVyO1xuXG4gIFx0XHRpZiAoIXJlbmRlcmVyKSB7XG4gIFx0XHRcdHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXIgPSB0aGlzLl9jcmVhdGVSZW5kZXJlcigpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoIXRoaXMuaGFzTGF5ZXIocmVuZGVyZXIpKSB7XG4gIFx0XHRcdHRoaXMuYWRkTGF5ZXIocmVuZGVyZXIpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHJlbmRlcmVyO1xuICBcdH0sXG5cbiAgXHRfZ2V0UGFuZVJlbmRlcmVyOiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0aWYgKG5hbWUgPT09ICdvdmVybGF5UGFuZScgfHwgbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gIFx0XHRcdHJldHVybiBmYWxzZTtcbiAgXHRcdH1cblxuICBcdFx0dmFyIHJlbmRlcmVyID0gdGhpcy5fcGFuZVJlbmRlcmVyc1tuYW1lXTtcbiAgXHRcdGlmIChyZW5kZXJlciA9PT0gdW5kZWZpbmVkKSB7XG4gIFx0XHRcdHJlbmRlcmVyID0gdGhpcy5fY3JlYXRlUmVuZGVyZXIoe3BhbmU6IG5hbWV9KTtcbiAgXHRcdFx0dGhpcy5fcGFuZVJlbmRlcmVyc1tuYW1lXSA9IHJlbmRlcmVyO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHJlbmRlcmVyO1xuICBcdH0sXG5cbiAgXHRfY3JlYXRlUmVuZGVyZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcDsgQG9wdGlvbiBwcmVmZXJDYW52YXM6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gV2hldGhlciBgUGF0aGBzIHNob3VsZCBiZSByZW5kZXJlZCBvbiBhIGBDYW52YXNgIHJlbmRlcmVyLlxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgYWxsIGBQYXRoYHMgYXJlIHJlbmRlcmVkIGluIGEgYFNWR2AgcmVuZGVyZXIuXG4gIFx0XHRyZXR1cm4gKHRoaXMub3B0aW9ucy5wcmVmZXJDYW52YXMgJiYgY2FudmFzJDEob3B0aW9ucykpIHx8IHN2ZyQxKG9wdGlvbnMpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogTC5SZWN0YW5nbGUgZXh0ZW5kcyBQb2x5Z29uIGFuZCBjcmVhdGVzIGEgcmVjdGFuZ2xlIHdoZW4gcGFzc2VkIGEgTGF0TG5nQm91bmRzIG9iamVjdC5cbiAgICovXG5cbiAgLypcbiAgICogQGNsYXNzIFJlY3RhbmdsZVxuICAgKiBAYWthIEwuUmVjdGFuZ2xlXG4gICAqIEBpbmhlcml0cyBQb2x5Z29uXG4gICAqXG4gICAqIEEgY2xhc3MgZm9yIGRyYXdpbmcgcmVjdGFuZ2xlIG92ZXJsYXlzIG9uIGEgbWFwLiBFeHRlbmRzIGBQb2x5Z29uYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gZGVmaW5lIHJlY3RhbmdsZSBnZW9ncmFwaGljYWwgYm91bmRzXG4gICAqIHZhciBib3VuZHMgPSBbWzU0LjU1OTMyMiwgLTUuNzY3ODIyXSwgWzU2LjEyMTA2MDQsIC0zLjAyMTI0MF1dO1xuICAgKlxuICAgKiAvLyBjcmVhdGUgYW4gb3JhbmdlIHJlY3RhbmdsZVxuICAgKiBMLnJlY3RhbmdsZShib3VuZHMsIHtjb2xvcjogXCIjZmY3ODAwXCIsIHdlaWdodDogMX0pLmFkZFRvKG1hcCk7XG4gICAqXG4gICAqIC8vIHpvb20gdGhlIG1hcCB0byB0aGUgcmVjdGFuZ2xlIGJvdW5kc1xuICAgKiBtYXAuZml0Qm91bmRzKGJvdW5kcyk7XG4gICAqIGBgYFxuICAgKlxuICAgKi9cblxuXG4gIHZhciBSZWN0YW5nbGUgPSBQb2x5Z29uLmV4dGVuZCh7XG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcywgb3B0aW9ucykge1xuICBcdFx0UG9seWdvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHRoaXMuX2JvdW5kc1RvTGF0TG5ncyhsYXRMbmdCb3VuZHMpLCBvcHRpb25zKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRCb3VuZHMobGF0TG5nQm91bmRzOiBMYXRMbmdCb3VuZHMpOiB0aGlzXG4gIFx0Ly8gUmVkcmF3cyB0aGUgcmVjdGFuZ2xlIHdpdGggdGhlIHBhc3NlZCBib3VuZHMuXG4gIFx0c2V0Qm91bmRzOiBmdW5jdGlvbiAobGF0TG5nQm91bmRzKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyhsYXRMbmdCb3VuZHMpKTtcbiAgXHR9LFxuXG4gIFx0X2JvdW5kc1RvTGF0TG5nczogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcykge1xuICBcdFx0bGF0TG5nQm91bmRzID0gdG9MYXRMbmdCb3VuZHMobGF0TG5nQm91bmRzKTtcbiAgXHRcdHJldHVybiBbXG4gIFx0XHRcdGxhdExuZ0JvdW5kcy5nZXRTb3V0aFdlc3QoKSxcbiAgXHRcdFx0bGF0TG5nQm91bmRzLmdldE5vcnRoV2VzdCgpLFxuICBcdFx0XHRsYXRMbmdCb3VuZHMuZ2V0Tm9ydGhFYXN0KCksXG4gIFx0XHRcdGxhdExuZ0JvdW5kcy5nZXRTb3V0aEVhc3QoKVxuICBcdFx0XTtcbiAgXHR9XG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5yZWN0YW5nbGUobGF0TG5nQm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBQb2x5bGluZSBvcHRpb25zKVxuICBmdW5jdGlvbiByZWN0YW5nbGUobGF0TG5nQm91bmRzLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBSZWN0YW5nbGUobGF0TG5nQm91bmRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIFNWRy5jcmVhdGUgPSBjcmVhdGUkMjtcbiAgU1ZHLnBvaW50c1RvUGF0aCA9IHBvaW50c1RvUGF0aDtcblxuICBHZW9KU09OLmdlb21ldHJ5VG9MYXllciA9IGdlb21ldHJ5VG9MYXllcjtcbiAgR2VvSlNPTi5jb29yZHNUb0xhdExuZyA9IGNvb3Jkc1RvTGF0TG5nO1xuICBHZW9KU09OLmNvb3Jkc1RvTGF0TG5ncyA9IGNvb3Jkc1RvTGF0TG5ncztcbiAgR2VvSlNPTi5sYXRMbmdUb0Nvb3JkcyA9IGxhdExuZ1RvQ29vcmRzO1xuICBHZW9KU09OLmxhdExuZ3NUb0Nvb3JkcyA9IGxhdExuZ3NUb0Nvb3JkcztcbiAgR2VvSlNPTi5nZXRGZWF0dXJlID0gZ2V0RmVhdHVyZTtcbiAgR2VvSlNPTi5hc0ZlYXR1cmUgPSBhc0ZlYXR1cmU7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLkJveFpvb20gaXMgdXNlZCB0byBhZGQgc2hpZnQtZHJhZyB6b29tIGludGVyYWN0aW9uIHRvIHRoZSBtYXBcbiAgICogKHpvb20gdG8gYSBzZWxlY3RlZCBib3VuZGluZyBib3gpLCBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQG9wdGlvbiBib3hab29tOiBCb29sZWFuID0gdHJ1ZVxuICBcdC8vIFdoZXRoZXIgdGhlIG1hcCBjYW4gYmUgem9vbWVkIHRvIGEgcmVjdGFuZ3VsYXIgYXJlYSBzcGVjaWZpZWQgYnlcbiAgXHQvLyBkcmFnZ2luZyB0aGUgbW91c2Ugd2hpbGUgcHJlc3NpbmcgdGhlIHNoaWZ0IGtleS5cbiAgXHRib3hab29tOiB0cnVlXG4gIH0pO1xuXG4gIHZhciBCb3hab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IG1hcC5fY29udGFpbmVyO1xuICBcdFx0dGhpcy5fcGFuZSA9IG1hcC5fcGFuZXMub3ZlcmxheVBhbmU7XG4gIFx0XHR0aGlzLl9yZXNldFN0YXRlVGltZW91dCA9IDA7XG4gIFx0XHRtYXAub24oJ3VubG9hZCcsIHRoaXMuX2Rlc3Ryb3ksIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b24odGhpcy5fY29udGFpbmVyLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b2ZmKHRoaXMuX2NvbnRhaW5lciwgJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0bW92ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9tb3ZlZDtcbiAgXHR9LFxuXG4gIFx0X2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZSh0aGlzLl9wYW5lKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9wYW5lO1xuICBcdH0sXG5cbiAgXHRfcmVzZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgPSAwO1xuICBcdFx0dGhpcy5fbW92ZWQgPSBmYWxzZTtcbiAgXHR9LFxuXG4gIFx0X2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgIT09IDApIHtcbiAgXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0KTtcbiAgXHRcdFx0dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgPSAwO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIWUuc2hpZnRLZXkgfHwgKChlLndoaWNoICE9PSAxKSAmJiAoZS5idXR0b24gIT09IDEpKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICBcdFx0Ly8gQ2xlYXIgdGhlIGRlZmVycmVkIHJlc2V0U3RhdGUgaWYgaXQgaGFzbid0IGV4ZWN1dGVkIHlldCwgb3RoZXJ3aXNlIGl0XG4gIFx0XHQvLyB3aWxsIGludGVycnVwdCB0aGUgaW50ZXJhY3Rpb24gYW5kIG9ycGhhbiBhIGJveCBlbGVtZW50IGluIHRoZSBjb250YWluZXIuXG4gIFx0XHR0aGlzLl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSgpO1xuICBcdFx0dGhpcy5fcmVzZXRTdGF0ZSgpO1xuXG4gIFx0XHRkaXNhYmxlVGV4dFNlbGVjdGlvbigpO1xuICBcdFx0ZGlzYWJsZUltYWdlRHJhZygpO1xuXG4gIFx0XHR0aGlzLl9zdGFydFBvaW50ID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xuXG4gIFx0XHRvbihkb2N1bWVudCwge1xuICBcdFx0XHRjb250ZXh0bWVudTogc3RvcCxcbiAgXHRcdFx0bW91c2Vtb3ZlOiB0aGlzLl9vbk1vdXNlTW92ZSxcbiAgXHRcdFx0bW91c2V1cDogdGhpcy5fb25Nb3VzZVVwLFxuICBcdFx0XHRrZXlkb3duOiB0aGlzLl9vbktleURvd25cbiAgXHRcdH0sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25Nb3VzZU1vdmU6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdHRoaXMuX21vdmVkID0gdHJ1ZTtcblxuICBcdFx0XHR0aGlzLl9ib3ggPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtem9vbS1ib3gnLCB0aGlzLl9jb250YWluZXIpO1xuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNyb3NzaGFpcicpO1xuXG4gIFx0XHRcdHRoaXMuX21hcC5maXJlKCdib3h6b29tc3RhcnQnKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fcG9pbnQgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZSk7XG5cbiAgXHRcdHZhciBib3VuZHMgPSBuZXcgQm91bmRzKHRoaXMuX3BvaW50LCB0aGlzLl9zdGFydFBvaW50KSxcbiAgXHRcdCAgICBzaXplID0gYm91bmRzLmdldFNpemUoKTtcblxuICBcdFx0c2V0UG9zaXRpb24odGhpcy5fYm94LCBib3VuZHMubWluKTtcblxuICBcdFx0dGhpcy5fYm94LnN0eWxlLndpZHRoICA9IHNpemUueCArICdweCc7XG4gIFx0XHR0aGlzLl9ib3guc3R5bGUuaGVpZ2h0ID0gc2l6ZS55ICsgJ3B4JztcbiAgXHR9LFxuXG4gIFx0X2ZpbmlzaDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9ib3gpO1xuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNyb3NzaGFpcicpO1xuICBcdFx0fVxuXG4gIFx0XHRlbmFibGVUZXh0U2VsZWN0aW9uKCk7XG4gIFx0XHRlbmFibGVJbWFnZURyYWcoKTtcblxuICBcdFx0b2ZmKGRvY3VtZW50LCB7XG4gIFx0XHRcdGNvbnRleHRtZW51OiBzdG9wLFxuICBcdFx0XHRtb3VzZW1vdmU6IHRoaXMuX29uTW91c2VNb3ZlLFxuICBcdFx0XHRtb3VzZXVwOiB0aGlzLl9vbk1vdXNlVXAsXG4gIFx0XHRcdGtleWRvd246IHRoaXMuX29uS2V5RG93blxuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlVXA6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoKGUud2hpY2ggIT09IDEpICYmIChlLmJ1dHRvbiAhPT0gMSkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2ZpbmlzaCgpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7IHJldHVybjsgfVxuICBcdFx0Ly8gUG9zdHBvbmUgdG8gbmV4dCBKUyB0aWNrIHNvIGludGVybmFsIGNsaWNrIGV2ZW50IGhhbmRsaW5nXG4gIFx0XHQvLyBzdGlsbCBzZWUgaXQgYXMgXCJtb3ZlZFwiLlxuICBcdFx0dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKTtcbiAgXHRcdHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0ID0gc2V0VGltZW91dChiaW5kKHRoaXMuX3Jlc2V0U3RhdGUsIHRoaXMpLCAwKTtcblxuICBcdFx0dmFyIGJvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoXG4gIFx0XHQgICAgICAgIHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3N0YXJ0UG9pbnQpLFxuICBcdFx0ICAgICAgICB0aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludCkpO1xuXG4gIFx0XHR0aGlzLl9tYXBcbiAgXHRcdFx0LmZpdEJvdW5kcyhib3VuZHMpXG4gIFx0XHRcdC5maXJlKCdib3h6b29tZW5kJywge2JveFpvb21Cb3VuZHM6IGJvdW5kc30pO1xuICBcdH0sXG5cbiAgXHRfb25LZXlEb3duOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgXHRcdFx0dGhpcy5fZmluaXNoKCk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgYm94Wm9vbTogSGFuZGxlclxuICAvLyBCb3ggKHNoaWZ0LWRyYWcgd2l0aCBtb3VzZSkgem9vbSBoYW5kbGVyLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnYm94Wm9vbScsIEJveFpvb20pO1xuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5Eb3VibGVDbGlja1pvb20gaXMgdXNlZCB0byBoYW5kbGUgZG91YmxlLWNsaWNrIHpvb20gb24gdGhlIG1hcCwgZW5hYmxlZCBieSBkZWZhdWx0LlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG5cbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQG9wdGlvbiBkb3VibGVDbGlja1pvb206IEJvb2xlYW58U3RyaW5nID0gdHJ1ZVxuICBcdC8vIFdoZXRoZXIgdGhlIG1hcCBjYW4gYmUgem9vbWVkIGluIGJ5IGRvdWJsZSBjbGlja2luZyBvbiBpdCBhbmRcbiAgXHQvLyB6b29tZWQgb3V0IGJ5IGRvdWJsZSBjbGlja2luZyB3aGlsZSBob2xkaW5nIHNoaWZ0LiBJZiBwYXNzZWRcbiAgXHQvLyBgJ2NlbnRlcidgLCBkb3VibGUtY2xpY2sgem9vbSB3aWxsIHpvb20gdG8gdGhlIGNlbnRlciBvZiB0aGVcbiAgXHQvLyAgdmlldyByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBtb3VzZSB3YXMuXG4gIFx0ZG91YmxlQ2xpY2tab29tOiB0cnVlXG4gIH0pO1xuXG4gIHZhciBEb3VibGVDbGlja1pvb20gPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX21hcC5vbignZGJsY2xpY2snLCB0aGlzLl9vbkRvdWJsZUNsaWNrLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX21hcC5vZmYoJ2RibGNsaWNrJywgdGhpcy5fb25Eb3VibGVDbGljaywgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbkRvdWJsZUNsaWNrOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBvbGRab29tID0gbWFwLmdldFpvb20oKSxcbiAgXHRcdCAgICBkZWx0YSA9IG1hcC5vcHRpb25zLnpvb21EZWx0YSxcbiAgXHRcdCAgICB6b29tID0gZS5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5ID8gb2xkWm9vbSAtIGRlbHRhIDogb2xkWm9vbSArIGRlbHRhO1xuXG4gIFx0XHRpZiAobWFwLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tID09PSAnY2VudGVyJykge1xuICBcdFx0XHRtYXAuc2V0Wm9vbSh6b29tKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdG1hcC5zZXRab29tQXJvdW5kKGUuY29udGFpbmVyUG9pbnQsIHpvb20pO1xuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy9cbiAgLy8gTWFwIHByb3BlcnRpZXMgaW5jbHVkZSBpbnRlcmFjdGlvbiBoYW5kbGVycyB0aGF0IGFsbG93IHlvdSB0byBjb250cm9sXG4gIC8vIGludGVyYWN0aW9uIGJlaGF2aW9yIGluIHJ1bnRpbWUsIGVuYWJsaW5nIG9yIGRpc2FibGluZyBjZXJ0YWluIGZlYXR1cmVzIHN1Y2hcbiAgLy8gYXMgZHJhZ2dpbmcgb3IgdG91Y2ggem9vbSAoc2VlIGBIYW5kbGVyYCBtZXRob2RzKS4gRm9yIGV4YW1wbGU6XG4gIC8vXG4gIC8vIGBgYGpzXG4gIC8vIG1hcC5kb3VibGVDbGlja1pvb20uZGlzYWJsZSgpO1xuICAvLyBgYGBcbiAgLy9cbiAgLy8gQHByb3BlcnR5IGRvdWJsZUNsaWNrWm9vbTogSGFuZGxlclxuICAvLyBEb3VibGUgY2xpY2sgem9vbSBoYW5kbGVyLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnZG91YmxlQ2xpY2tab29tJywgRG91YmxlQ2xpY2tab29tKTtcblxuICAvKlxuICAgKiBMLkhhbmRsZXIuTWFwRHJhZyBpcyB1c2VkIHRvIG1ha2UgdGhlIG1hcCBkcmFnZ2FibGUgKHdpdGggcGFubmluZyBpbmVydGlhKSwgZW5hYmxlZCBieSBkZWZhdWx0LlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBvcHRpb24gZHJhZ2dpbmc6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGJlIGRyYWdnYWJsZSB3aXRoIG1vdXNlL3RvdWNoIG9yIG5vdC5cbiAgXHRkcmFnZ2luZzogdHJ1ZSxcblxuICBcdC8vIEBzZWN0aW9uIFBhbm5pbmcgSW5lcnRpYSBPcHRpb25zXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhOiBCb29sZWFuID0gKlxuICBcdC8vIElmIGVuYWJsZWQsIHBhbm5pbmcgb2YgdGhlIG1hcCB3aWxsIGhhdmUgYW4gaW5lcnRpYSBlZmZlY3Qgd2hlcmVcbiAgXHQvLyB0aGUgbWFwIGJ1aWxkcyBtb21lbnR1bSB3aGlsZSBkcmFnZ2luZyBhbmQgY29udGludWVzIG1vdmluZyBpblxuICBcdC8vIHRoZSBzYW1lIGRpcmVjdGlvbiBmb3Igc29tZSB0aW1lLiBGZWVscyBlc3BlY2lhbGx5IG5pY2Ugb24gdG91Y2hcbiAgXHQvLyBkZXZpY2VzLiBFbmFibGVkIGJ5IGRlZmF1bHQgdW5sZXNzIHJ1bm5pbmcgb24gb2xkIEFuZHJvaWQgZGV2aWNlcy5cbiAgXHRpbmVydGlhOiAhYW5kcm9pZDIzLFxuXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhRGVjZWxlcmF0aW9uOiBOdW1iZXIgPSAzMDAwXG4gIFx0Ly8gVGhlIHJhdGUgd2l0aCB3aGljaCB0aGUgaW5lcnRpYWwgbW92ZW1lbnQgc2xvd3MgZG93biwgaW4gcGl4ZWxzL3NlY29uZMKyLlxuICBcdGluZXJ0aWFEZWNlbGVyYXRpb246IDM0MDAsIC8vIHB4L3NeMlxuXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhTWF4U3BlZWQ6IE51bWJlciA9IEluZmluaXR5XG4gIFx0Ly8gTWF4IHNwZWVkIG9mIHRoZSBpbmVydGlhbCBtb3ZlbWVudCwgaW4gcGl4ZWxzL3NlY29uZC5cbiAgXHRpbmVydGlhTWF4U3BlZWQ6IEluZmluaXR5LCAvLyBweC9zXG5cbiAgXHQvLyBAb3B0aW9uIGVhc2VMaW5lYXJpdHk6IE51bWJlciA9IDAuMlxuICBcdGVhc2VMaW5lYXJpdHk6IDAuMixcblxuICBcdC8vIFRPRE8gcmVmYWN0b3IsIG1vdmUgdG8gQ1JTXG4gIFx0Ly8gQG9wdGlvbiB3b3JsZENvcHlKdW1wOiBCb29sZWFuID0gZmFsc2VcbiAgXHQvLyBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBtYXAgdHJhY2tzIHdoZW4geW91IHBhbiB0byBhbm90aGVyIFwiY29weVwiXG4gIFx0Ly8gb2YgdGhlIHdvcmxkIGFuZCBzZWFtbGVzc2x5IGp1bXBzIHRvIHRoZSBvcmlnaW5hbCBvbmUgc28gdGhhdCBhbGwgb3ZlcmxheXNcbiAgXHQvLyBsaWtlIG1hcmtlcnMgYW5kIHZlY3RvciBsYXllcnMgYXJlIHN0aWxsIHZpc2libGUuXG4gIFx0d29ybGRDb3B5SnVtcDogZmFsc2UsXG5cbiAgXHQvLyBAb3B0aW9uIG1heEJvdW5kc1Zpc2Nvc2l0eTogTnVtYmVyID0gMC4wXG4gIFx0Ly8gSWYgYG1heEJvdW5kc2AgaXMgc2V0LCB0aGlzIG9wdGlvbiB3aWxsIGNvbnRyb2wgaG93IHNvbGlkIHRoZSBib3VuZHNcbiAgXHQvLyBhcmUgd2hlbiBkcmFnZ2luZyB0aGUgbWFwIGFyb3VuZC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYDAuMGAgYWxsb3dzIHRoZVxuICBcdC8vIHVzZXIgdG8gZHJhZyBvdXRzaWRlIHRoZSBib3VuZHMgYXQgbm9ybWFsIHNwZWVkLCBoaWdoZXIgdmFsdWVzIHdpbGxcbiAgXHQvLyBzbG93IGRvd24gbWFwIGRyYWdnaW5nIG91dHNpZGUgYm91bmRzLCBhbmQgYDEuMGAgbWFrZXMgdGhlIGJvdW5kcyBmdWxseVxuICBcdC8vIHNvbGlkLCBwcmV2ZW50aW5nIHRoZSB1c2VyIGZyb20gZHJhZ2dpbmcgb3V0c2lkZSB0aGUgYm91bmRzLlxuICBcdG1heEJvdW5kc1Zpc2Nvc2l0eTogMC4wXG4gIH0pO1xuXG4gIHZhciBEcmFnID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX2RyYWdnYWJsZSkge1xuICBcdFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZSA9IG5ldyBEcmFnZ2FibGUobWFwLl9tYXBQYW5lLCBtYXAuX2NvbnRhaW5lcik7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLm9uKHtcbiAgXHRcdFx0XHRkcmFnc3RhcnQ6IHRoaXMuX29uRHJhZ1N0YXJ0LFxuICBcdFx0XHRcdGRyYWc6IHRoaXMuX29uRHJhZyxcbiAgXHRcdFx0XHRkcmFnZW5kOiB0aGlzLl9vbkRyYWdFbmRcbiAgXHRcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLm9uKCdwcmVkcmFnJywgdGhpcy5fb25QcmVEcmFnTGltaXQsIHRoaXMpO1xuICBcdFx0XHRpZiAobWFwLm9wdGlvbnMud29ybGRDb3B5SnVtcCkge1xuICBcdFx0XHRcdHRoaXMuX2RyYWdnYWJsZS5vbigncHJlZHJhZycsIHRoaXMuX29uUHJlRHJhZ1dyYXAsIHRoaXMpO1xuICBcdFx0XHRcdG1hcC5vbignem9vbWVuZCcsIHRoaXMuX29uWm9vbUVuZCwgdGhpcyk7XG5cbiAgXHRcdFx0XHRtYXAud2hlblJlYWR5KHRoaXMuX29uWm9vbUVuZCwgdGhpcyk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdGFkZENsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC1ncmFiIGxlYWZsZXQtdG91Y2gtZHJhZycpO1xuICBcdFx0dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpO1xuICBcdFx0dGhpcy5fcG9zaXRpb25zID0gW107XG4gIFx0XHR0aGlzLl90aW1lcyA9IFtdO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbWFwLl9jb250YWluZXIsICdsZWFmbGV0LWdyYWInKTtcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC10b3VjaC1kcmFnJyk7XG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUuZGlzYWJsZSgpO1xuICBcdH0sXG5cbiAgXHRtb3ZlZDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLl9kcmFnZ2FibGUuX21vdmVkO1xuICBcdH0sXG5cbiAgXHRtb3Zpbmc6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9kcmFnZ2FibGUgJiYgdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmc7XG4gIFx0fSxcblxuICBcdF9vbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcDtcblxuICBcdFx0bWFwLl9zdG9wKCk7XG4gIFx0XHRpZiAodGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzICYmIHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eSkge1xuICBcdFx0XHR2YXIgYm91bmRzID0gdG9MYXRMbmdCb3VuZHModGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTtcblxuICBcdFx0XHR0aGlzLl9vZmZzZXRMaW1pdCA9IHRvQm91bmRzKFxuICBcdFx0XHRcdHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGJvdW5kcy5nZXROb3J0aFdlc3QoKSkubXVsdGlwbHlCeSgtMSksXG4gIFx0XHRcdFx0dGhpcy5fbWFwLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQoYm91bmRzLmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKVxuICBcdFx0XHRcdFx0LmFkZCh0aGlzLl9tYXAuZ2V0U2l6ZSgpKSk7XG5cbiAgXHRcdFx0dGhpcy5fdmlzY29zaXR5ID0gTWF0aC5taW4oMS4wLCBNYXRoLm1heCgwLjAsIHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eSkpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fb2Zmc2V0TGltaXQgPSBudWxsO1xuICBcdFx0fVxuXG4gIFx0XHRtYXBcbiAgXHRcdCAgICAuZmlyZSgnbW92ZXN0YXJ0JylcbiAgXHRcdCAgICAuZmlyZSgnZHJhZ3N0YXJ0Jyk7XG5cbiAgXHRcdGlmIChtYXAub3B0aW9ucy5pbmVydGlhKSB7XG4gIFx0XHRcdHRoaXMuX3Bvc2l0aW9ucyA9IFtdO1xuICBcdFx0XHR0aGlzLl90aW1lcyA9IFtdO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25EcmFnOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5vcHRpb25zLmluZXJ0aWEpIHtcbiAgXHRcdFx0dmFyIHRpbWUgPSB0aGlzLl9sYXN0VGltZSA9ICtuZXcgRGF0ZSgpLFxuICBcdFx0XHQgICAgcG9zID0gdGhpcy5fbGFzdFBvcyA9IHRoaXMuX2RyYWdnYWJsZS5fYWJzUG9zIHx8IHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zO1xuXG4gIFx0XHRcdHRoaXMuX3Bvc2l0aW9ucy5wdXNoKHBvcyk7XG4gIFx0XHRcdHRoaXMuX3RpbWVzLnB1c2godGltZSk7XG5cbiAgXHRcdFx0dGhpcy5fcHJ1bmVQb3NpdGlvbnModGltZSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX21hcFxuICBcdFx0ICAgIC5maXJlKCdtb3ZlJywgZSlcbiAgXHRcdCAgICAuZmlyZSgnZHJhZycsIGUpO1xuICBcdH0sXG5cbiAgXHRfcHJ1bmVQb3NpdGlvbnM6IGZ1bmN0aW9uICh0aW1lKSB7XG4gIFx0XHR3aGlsZSAodGhpcy5fcG9zaXRpb25zLmxlbmd0aCA+IDEgJiYgdGltZSAtIHRoaXMuX3RpbWVzWzBdID4gNTApIHtcbiAgXHRcdFx0dGhpcy5fcG9zaXRpb25zLnNoaWZ0KCk7XG4gIFx0XHRcdHRoaXMuX3RpbWVzLnNoaWZ0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vblpvb21FbmQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBweENlbnRlciA9IHRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksXG4gIFx0XHQgICAgcHhXb3JsZENlbnRlciA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoWzAsIDBdKTtcblxuICBcdFx0dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0ID0gcHhXb3JsZENlbnRlci5zdWJ0cmFjdChweENlbnRlcikueDtcbiAgXHRcdHRoaXMuX3dvcmxkV2lkdGggPSB0aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcygpLmdldFNpemUoKS54O1xuICBcdH0sXG5cbiAgXHRfdmlzY291c0xpbWl0OiBmdW5jdGlvbiAodmFsdWUsIHRocmVzaG9sZCkge1xuICBcdFx0cmV0dXJuIHZhbHVlIC0gKHZhbHVlIC0gdGhyZXNob2xkKSAqIHRoaXMuX3Zpc2Nvc2l0eTtcbiAgXHR9LFxuXG4gIFx0X29uUHJlRHJhZ0xpbWl0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX3Zpc2Nvc2l0eSB8fCAhdGhpcy5fb2Zmc2V0TGltaXQpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBvZmZzZXQgPSB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5zdWJ0cmFjdCh0aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zKTtcblxuICBcdFx0dmFyIGxpbWl0ID0gdGhpcy5fb2Zmc2V0TGltaXQ7XG4gIFx0XHRpZiAob2Zmc2V0LnggPCBsaW1pdC5taW4ueCkgeyBvZmZzZXQueCA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueCwgbGltaXQubWluLngpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnkgPCBsaW1pdC5taW4ueSkgeyBvZmZzZXQueSA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueSwgbGltaXQubWluLnkpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnggPiBsaW1pdC5tYXgueCkgeyBvZmZzZXQueCA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueCwgbGltaXQubWF4LngpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnkgPiBsaW1pdC5tYXgueSkgeyBvZmZzZXQueSA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueSwgbGltaXQubWF4LnkpOyB9XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zID0gdGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5hZGQob2Zmc2V0KTtcbiAgXHR9LFxuXG4gIFx0X29uUHJlRHJhZ1dyYXA6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFRPRE8gcmVmYWN0b3IgdG8gYmUgYWJsZSB0byBhZGp1c3QgbWFwIHBhbmUgcG9zaXRpb24gYWZ0ZXIgem9vbVxuICBcdFx0dmFyIHdvcmxkV2lkdGggPSB0aGlzLl93b3JsZFdpZHRoLFxuICBcdFx0ICAgIGhhbGZXaWR0aCA9IE1hdGgucm91bmQod29ybGRXaWR0aCAvIDIpLFxuICBcdFx0ICAgIGR4ID0gdGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LFxuICBcdFx0ICAgIHggPSB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54LFxuICBcdFx0ICAgIG5ld1gxID0gKHggLSBoYWxmV2lkdGggKyBkeCkgJSB3b3JsZFdpZHRoICsgaGFsZldpZHRoIC0gZHgsXG4gIFx0XHQgICAgbmV3WDIgPSAoeCArIGhhbGZXaWR0aCArIGR4KSAlIHdvcmxkV2lkdGggLSBoYWxmV2lkdGggLSBkeCxcbiAgXHRcdCAgICBuZXdYID0gTWF0aC5hYnMobmV3WDEgKyBkeCkgPCBNYXRoLmFicyhuZXdYMiArIGR4KSA/IG5ld1gxIDogbmV3WDI7XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fYWJzUG9zID0gdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKTtcbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnggPSBuZXdYO1xuICBcdH0sXG5cbiAgXHRfb25EcmFnRW5kOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBvcHRpb25zID0gbWFwLm9wdGlvbnMsXG5cbiAgXHRcdCAgICBub0luZXJ0aWEgPSAhb3B0aW9ucy5pbmVydGlhIHx8IHRoaXMuX3RpbWVzLmxlbmd0aCA8IDI7XG5cbiAgXHRcdG1hcC5maXJlKCdkcmFnZW5kJywgZSk7XG5cbiAgXHRcdGlmIChub0luZXJ0aWEpIHtcbiAgXHRcdFx0bWFwLmZpcmUoJ21vdmVlbmQnKTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fcHJ1bmVQb3NpdGlvbnMoK25ldyBEYXRlKCkpO1xuXG4gIFx0XHRcdHZhciBkaXJlY3Rpb24gPSB0aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSksXG4gIFx0XHRcdCAgICBkdXJhdGlvbiA9ICh0aGlzLl9sYXN0VGltZSAtIHRoaXMuX3RpbWVzWzBdKSAvIDEwMDAsXG4gIFx0XHRcdCAgICBlYXNlID0gb3B0aW9ucy5lYXNlTGluZWFyaXR5LFxuXG4gIFx0XHRcdCAgICBzcGVlZFZlY3RvciA9IGRpcmVjdGlvbi5tdWx0aXBseUJ5KGVhc2UgLyBkdXJhdGlvbiksXG4gIFx0XHRcdCAgICBzcGVlZCA9IHNwZWVkVmVjdG9yLmRpc3RhbmNlVG8oWzAsIDBdKSxcblxuICBcdFx0XHQgICAgbGltaXRlZFNwZWVkID0gTWF0aC5taW4ob3B0aW9ucy5pbmVydGlhTWF4U3BlZWQsIHNwZWVkKSxcbiAgXHRcdFx0ICAgIGxpbWl0ZWRTcGVlZFZlY3RvciA9IHNwZWVkVmVjdG9yLm11bHRpcGx5QnkobGltaXRlZFNwZWVkIC8gc3BlZWQpLFxuXG4gIFx0XHRcdCAgICBkZWNlbGVyYXRpb25EdXJhdGlvbiA9IGxpbWl0ZWRTcGVlZCAvIChvcHRpb25zLmluZXJ0aWFEZWNlbGVyYXRpb24gKiBlYXNlKSxcbiAgXHRcdFx0ICAgIG9mZnNldCA9IGxpbWl0ZWRTcGVlZFZlY3Rvci5tdWx0aXBseUJ5KC1kZWNlbGVyYXRpb25EdXJhdGlvbiAvIDIpLnJvdW5kKCk7XG5cbiAgXHRcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHtcbiAgXHRcdFx0XHRtYXAuZmlyZSgnbW92ZWVuZCcpO1xuXG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0b2Zmc2V0ID0gbWFwLl9saW1pdE9mZnNldChvZmZzZXQsIG1hcC5vcHRpb25zLm1heEJvdW5kcyk7XG5cbiAgXHRcdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0XHRcdG1hcC5wYW5CeShvZmZzZXQsIHtcbiAgXHRcdFx0XHRcdFx0ZHVyYXRpb246IGRlY2VsZXJhdGlvbkR1cmF0aW9uLFxuICBcdFx0XHRcdFx0XHRlYXNlTGluZWFyaXR5OiBlYXNlLFxuICBcdFx0XHRcdFx0XHRub01vdmVTdGFydDogdHJ1ZSxcbiAgXHRcdFx0XHRcdFx0YW5pbWF0ZTogdHJ1ZVxuICBcdFx0XHRcdFx0fSk7XG4gIFx0XHRcdFx0fSk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSBkcmFnZ2luZzogSGFuZGxlclxuICAvLyBNYXAgZHJhZ2dpbmcgaGFuZGxlciAoYnkgYm90aCBtb3VzZSBhbmQgdG91Y2gpLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnZHJhZ2dpbmcnLCBEcmFnKTtcblxuICAvKlxuICAgKiBMLk1hcC5LZXlib2FyZCBpcyBoYW5kbGluZyBrZXlib2FyZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBtYXAsIGVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICovXG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gS2V5Ym9hcmQgTmF2aWdhdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBvcHRpb24ga2V5Ym9hcmQ6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gTWFrZXMgdGhlIG1hcCBmb2N1c2FibGUgYW5kIGFsbG93cyB1c2VycyB0byBuYXZpZ2F0ZSB0aGUgbWFwIHdpdGgga2V5Ym9hcmRcbiAgXHQvLyBhcnJvd3MgYW5kIGArYC9gLWAga2V5cy5cbiAgXHRrZXlib2FyZDogdHJ1ZSxcblxuICBcdC8vIEBvcHRpb24ga2V5Ym9hcmRQYW5EZWx0YTogTnVtYmVyID0gODBcbiAgXHQvLyBBbW91bnQgb2YgcGl4ZWxzIHRvIHBhbiB3aGVuIHByZXNzaW5nIGFuIGFycm93IGtleS5cbiAgXHRrZXlib2FyZFBhbkRlbHRhOiA4MFxuICB9KTtcblxuICB2YXIgS2V5Ym9hcmQgPSBIYW5kbGVyLmV4dGVuZCh7XG5cbiAgXHRrZXlDb2Rlczoge1xuICBcdFx0bGVmdDogICAgWzM3XSxcbiAgXHRcdHJpZ2h0OiAgIFszOV0sXG4gIFx0XHRkb3duOiAgICBbNDBdLFxuICBcdFx0dXA6ICAgICAgWzM4XSxcbiAgXHRcdHpvb21JbjogIFsxODcsIDEwNywgNjEsIDE3MV0sXG4gIFx0XHR6b29tT3V0OiBbMTg5LCAxMDksIDU0LCAxNzNdXG4gIFx0fSxcblxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcblxuICBcdFx0dGhpcy5fc2V0UGFuRGVsdGEobWFwLm9wdGlvbnMua2V5Ym9hcmRQYW5EZWx0YSk7XG4gIFx0XHR0aGlzLl9zZXRab29tRGVsdGEobWFwLm9wdGlvbnMuem9vbURlbHRhKTtcbiAgXHR9LFxuXG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9tYXAuX2NvbnRhaW5lcjtcblxuICBcdFx0Ly8gbWFrZSB0aGUgY29udGFpbmVyIGZvY3VzYWJsZSBieSB0YWJiaW5nXG4gIFx0XHRpZiAoY29udGFpbmVyLnRhYkluZGV4IDw9IDApIHtcbiAgXHRcdFx0Y29udGFpbmVyLnRhYkluZGV4ID0gJzAnO1xuICBcdFx0fVxuXG4gIFx0XHRvbihjb250YWluZXIsIHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX29uRm9jdXMsXG4gIFx0XHRcdGJsdXI6IHRoaXMuX29uQmx1cixcbiAgXHRcdFx0bW91c2Vkb3duOiB0aGlzLl9vbk1vdXNlRG93blxuICBcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdHRoaXMuX21hcC5vbih7XG4gIFx0XHRcdGZvY3VzOiB0aGlzLl9hZGRIb29rcyxcbiAgXHRcdFx0Ymx1cjogdGhpcy5fcmVtb3ZlSG9va3NcbiAgXHRcdH0sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVtb3ZlSG9va3MoKTtcblxuICBcdFx0b2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCB7XG4gIFx0XHRcdGZvY3VzOiB0aGlzLl9vbkZvY3VzLFxuICBcdFx0XHRibHVyOiB0aGlzLl9vbkJsdXIsXG4gIFx0XHRcdG1vdXNlZG93bjogdGhpcy5fb25Nb3VzZURvd25cbiAgXHRcdH0sIHRoaXMpO1xuXG4gIFx0XHR0aGlzLl9tYXAub2ZmKHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX2FkZEhvb2tzLFxuICBcdFx0XHRibHVyOiB0aGlzLl9yZW1vdmVIb29rc1xuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlRG93bjogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX2ZvY3VzZWQpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBib2R5ID0gZG9jdW1lbnQuYm9keSxcbiAgXHRcdCAgICBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgXHRcdCAgICB0b3AgPSBib2R5LnNjcm9sbFRvcCB8fCBkb2NFbC5zY3JvbGxUb3AsXG4gIFx0XHQgICAgbGVmdCA9IGJvZHkuc2Nyb2xsTGVmdCB8fCBkb2NFbC5zY3JvbGxMZWZ0O1xuXG4gIFx0XHR0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpO1xuXG4gIFx0XHR3aW5kb3cuc2Nyb2xsVG8obGVmdCwgdG9wKTtcbiAgXHR9LFxuXG4gIFx0X29uRm9jdXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICBcdFx0dGhpcy5fbWFwLmZpcmUoJ2ZvY3VzJyk7XG4gIFx0fSxcblxuICBcdF9vbkJsdXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2ZvY3VzZWQgPSBmYWxzZTtcbiAgXHRcdHRoaXMuX21hcC5maXJlKCdibHVyJyk7XG4gIFx0fSxcblxuICBcdF9zZXRQYW5EZWx0YTogZnVuY3Rpb24gKHBhbkRlbHRhKSB7XG4gIFx0XHR2YXIga2V5cyA9IHRoaXMuX3BhbktleXMgPSB7fSxcbiAgXHRcdCAgICBjb2RlcyA9IHRoaXMua2V5Q29kZXMsXG4gIFx0XHQgICAgaSwgbGVuO1xuXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5sZWZ0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMubGVmdFtpXV0gPSBbLTEgKiBwYW5EZWx0YSwgMF07XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5yaWdodC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnJpZ2h0W2ldXSA9IFtwYW5EZWx0YSwgMF07XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5kb3duLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMuZG93bltpXV0gPSBbMCwgcGFuRGVsdGFdO1xuICBcdFx0fVxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gY29kZXMudXAubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy51cFtpXV0gPSBbMCwgLTEgKiBwYW5EZWx0YV07XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9zZXRab29tRGVsdGE6IGZ1bmN0aW9uICh6b29tRGVsdGEpIHtcbiAgXHRcdHZhciBrZXlzID0gdGhpcy5fem9vbUtleXMgPSB7fSxcbiAgXHRcdCAgICBjb2RlcyA9IHRoaXMua2V5Q29kZXMsXG4gIFx0XHQgICAgaSwgbGVuO1xuXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy56b29tSW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy56b29tSW5baV1dID0gem9vbURlbHRhO1xuICBcdFx0fVxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gY29kZXMuem9vbU91dC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnpvb21PdXRbaV1dID0gLXpvb21EZWx0YTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2FkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvbihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfcmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25LZXlEb3duOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBrZXkgPSBlLmtleUNvZGUsXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIG9mZnNldDtcblxuICBcdFx0aWYgKGtleSBpbiB0aGlzLl9wYW5LZXlzKSB7XG4gIFx0XHRcdGlmICghbWFwLl9wYW5BbmltIHx8ICFtYXAuX3BhbkFuaW0uX2luUHJvZ3Jlc3MpIHtcbiAgXHRcdFx0XHRvZmZzZXQgPSB0aGlzLl9wYW5LZXlzW2tleV07XG4gIFx0XHRcdFx0aWYgKGUuc2hpZnRLZXkpIHtcbiAgXHRcdFx0XHRcdG9mZnNldCA9IHRvUG9pbnQob2Zmc2V0KS5tdWx0aXBseUJ5KDMpO1xuICBcdFx0XHRcdH1cblxuICBcdFx0XHRcdG1hcC5wYW5CeShvZmZzZXQpO1xuXG4gIFx0XHRcdFx0aWYgKG1hcC5vcHRpb25zLm1heEJvdW5kcykge1xuICBcdFx0XHRcdFx0bWFwLnBhbkluc2lkZUJvdW5kcyhtYXAub3B0aW9ucy5tYXhCb3VuZHMpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fSBlbHNlIGlmIChrZXkgaW4gdGhpcy5fem9vbUtleXMpIHtcbiAgXHRcdFx0bWFwLnNldFpvb20obWFwLmdldFpvb20oKSArIChlLnNoaWZ0S2V5ID8gMyA6IDEpICogdGhpcy5fem9vbUtleXNba2V5XSk7XG5cbiAgXHRcdH0gZWxzZSBpZiAoa2V5ID09PSAyNyAmJiBtYXAuX3BvcHVwICYmIG1hcC5fcG9wdXAub3B0aW9ucy5jbG9zZU9uRXNjYXBlS2V5KSB7XG4gIFx0XHRcdG1hcC5jbG9zZVBvcHVwKCk7XG5cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0c3RvcChlKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSBrZXlib2FyZDogSGFuZGxlclxuICAvLyBLZXlib2FyZCBuYXZpZ2F0aW9uIGhhbmRsZXIuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdrZXlib2FyZCcsIEtleWJvYXJkKTtcblxuICAvKlxuICAgKiBMLkhhbmRsZXIuU2Nyb2xsV2hlZWxab29tIGlzIHVzZWQgYnkgTC5NYXAgdG8gZW5hYmxlIG1vdXNlIHNjcm9sbCB3aGVlbCB6b29tIG9uIHRoZSBtYXAuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQHNlY3Rpb24gTW91c2Ugd2hlZWwgb3B0aW9uc1xuICBcdC8vIEBvcHRpb24gc2Nyb2xsV2hlZWxab29tOiBCb29sZWFufFN0cmluZyA9IHRydWVcbiAgXHQvLyBXaGV0aGVyIHRoZSBtYXAgY2FuIGJlIHpvb21lZCBieSB1c2luZyB0aGUgbW91c2Ugd2hlZWwuIElmIHBhc3NlZCBgJ2NlbnRlcidgLFxuICBcdC8vIGl0IHdpbGwgem9vbSB0byB0aGUgY2VudGVyIG9mIHRoZSB2aWV3IHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIG1vdXNlIHdhcy5cbiAgXHRzY3JvbGxXaGVlbFpvb206IHRydWUsXG5cbiAgXHQvLyBAb3B0aW9uIHdoZWVsRGVib3VuY2VUaW1lOiBOdW1iZXIgPSA0MFxuICBcdC8vIExpbWl0cyB0aGUgcmF0ZSBhdCB3aGljaCBhIHdoZWVsIGNhbiBmaXJlIChpbiBtaWxsaXNlY29uZHMpLiBCeSBkZWZhdWx0XG4gIFx0Ly8gdXNlciBjYW4ndCB6b29tIHZpYSB3aGVlbCBtb3JlIG9mdGVuIHRoYW4gb25jZSBwZXIgNDAgbXMuXG4gIFx0d2hlZWxEZWJvdW5jZVRpbWU6IDQwLFxuXG4gIFx0Ly8gQG9wdGlvbiB3aGVlbFB4UGVyWm9vbUxldmVsOiBOdW1iZXIgPSA2MFxuICBcdC8vIEhvdyBtYW55IHNjcm9sbCBwaXhlbHMgKGFzIHJlcG9ydGVkIGJ5IFtMLkRvbUV2ZW50LmdldFdoZWVsRGVsdGFdKCNkb21ldmVudC1nZXR3aGVlbGRlbHRhKSlcbiAgXHQvLyBtZWFuIGEgY2hhbmdlIG9mIG9uZSBmdWxsIHpvb20gbGV2ZWwuIFNtYWxsZXIgdmFsdWVzIHdpbGwgbWFrZSB3aGVlbC16b29taW5nXG4gIFx0Ly8gZmFzdGVyIChhbmQgdmljZSB2ZXJzYSkuXG4gIFx0d2hlZWxQeFBlclpvb21MZXZlbDogNjBcbiAgfSk7XG5cbiAgdmFyIFNjcm9sbFdoZWVsWm9vbSA9IEhhbmRsZXIuZXh0ZW5kKHtcbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b24odGhpcy5fbWFwLl9jb250YWluZXIsICd3aGVlbCcsIHRoaXMuX29uV2hlZWxTY3JvbGwsIHRoaXMpO1xuXG4gIFx0XHR0aGlzLl9kZWx0YSA9IDA7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvZmYodGhpcy5fbWFwLl9jb250YWluZXIsICd3aGVlbCcsIHRoaXMuX29uV2hlZWxTY3JvbGwsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25XaGVlbFNjcm9sbDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBkZWx0YSA9IGdldFdoZWVsRGVsdGEoZSk7XG5cbiAgXHRcdHZhciBkZWJvdW5jZSA9IHRoaXMuX21hcC5vcHRpb25zLndoZWVsRGVib3VuY2VUaW1lO1xuXG4gIFx0XHR0aGlzLl9kZWx0YSArPSBkZWx0YTtcbiAgXHRcdHRoaXMuX2xhc3RNb3VzZVBvcyA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlKTtcblxuICBcdFx0aWYgKCF0aGlzLl9zdGFydFRpbWUpIHtcbiAgXHRcdFx0dGhpcy5fc3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBsZWZ0ID0gTWF0aC5tYXgoZGVib3VuY2UgLSAoK25ldyBEYXRlKCkgLSB0aGlzLl9zdGFydFRpbWUpLCAwKTtcblxuICBcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgXHRcdHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChiaW5kKHRoaXMuX3BlcmZvcm1ab29tLCB0aGlzKSwgbGVmdCk7XG5cbiAgXHRcdHN0b3AoZSk7XG4gIFx0fSxcblxuICBcdF9wZXJmb3JtWm9vbTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB6b29tID0gbWFwLmdldFpvb20oKSxcbiAgXHRcdCAgICBzbmFwID0gdGhpcy5fbWFwLm9wdGlvbnMuem9vbVNuYXAgfHwgMDtcblxuICBcdFx0bWFwLl9zdG9wKCk7IC8vIHN0b3AgcGFubmluZyBhbmQgZmx5IGFuaW1hdGlvbnMgaWYgYW55XG5cbiAgXHRcdC8vIG1hcCB0aGUgZGVsdGEgd2l0aCBhIHNpZ21vaWQgZnVuY3Rpb24gdG8gLTQuLjQgcmFuZ2UgbGVhbmluZyBvbiAtMS4uMVxuICBcdFx0dmFyIGQyID0gdGhpcy5fZGVsdGEgLyAodGhpcy5fbWFwLm9wdGlvbnMud2hlZWxQeFBlclpvb21MZXZlbCAqIDQpLFxuICBcdFx0ICAgIGQzID0gNCAqIE1hdGgubG9nKDIgLyAoMSArIE1hdGguZXhwKC1NYXRoLmFicyhkMikpKSkgLyBNYXRoLkxOMixcbiAgXHRcdCAgICBkNCA9IHNuYXAgPyBNYXRoLmNlaWwoZDMgLyBzbmFwKSAqIHNuYXAgOiBkMyxcbiAgXHRcdCAgICBkZWx0YSA9IG1hcC5fbGltaXRab29tKHpvb20gKyAodGhpcy5fZGVsdGEgPiAwID8gZDQgOiAtZDQpKSAtIHpvb207XG5cbiAgXHRcdHRoaXMuX2RlbHRhID0gMDtcbiAgXHRcdHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7XG5cbiAgXHRcdGlmICghZGVsdGEpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdGlmIChtYXAub3B0aW9ucy5zY3JvbGxXaGVlbFpvb20gPT09ICdjZW50ZXInKSB7XG4gIFx0XHRcdG1hcC5zZXRab29tKHpvb20gKyBkZWx0YSk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRtYXAuc2V0Wm9vbUFyb3VuZCh0aGlzLl9sYXN0TW91c2VQb3MsIHpvb20gKyBkZWx0YSk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgc2Nyb2xsV2hlZWxab29tOiBIYW5kbGVyXG4gIC8vIFNjcm9sbCB3aGVlbCB6b29tIGhhbmRsZXIuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdzY3JvbGxXaGVlbFpvb20nLCBTY3JvbGxXaGVlbFpvb20pO1xuXG4gIC8qXG4gICAqIEwuTWFwLlRhcCBpcyB1c2VkIHRvIGVuYWJsZSBtb2JpbGUgaGFja3MgbGlrZSBxdWljayB0YXBzIGFuZCBsb25nIGhvbGQuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQHNlY3Rpb24gVG91Y2ggaW50ZXJhY3Rpb24gb3B0aW9uc1xuICBcdC8vIEBvcHRpb24gdGFwOiBCb29sZWFuID0gdHJ1ZVxuICBcdC8vIEVuYWJsZXMgbW9iaWxlIGhhY2tzIGZvciBzdXBwb3J0aW5nIGluc3RhbnQgdGFwcyAoZml4aW5nIDIwMG1zIGNsaWNrXG4gIFx0Ly8gZGVsYXkgb24gaU9TL0FuZHJvaWQpIGFuZCB0b3VjaCBob2xkcyAoZmlyZWQgYXMgYGNvbnRleHRtZW51YCBldmVudHMpLlxuICBcdHRhcDogdHJ1ZSxcblxuICBcdC8vIEBvcHRpb24gdGFwVG9sZXJhbmNlOiBOdW1iZXIgPSAxNVxuICBcdC8vIFRoZSBtYXggbnVtYmVyIG9mIHBpeGVscyBhIHVzZXIgY2FuIHNoaWZ0IGhpcyBmaW5nZXIgZHVyaW5nIHRvdWNoXG4gIFx0Ly8gZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCB0YXAuXG4gIFx0dGFwVG9sZXJhbmNlOiAxNVxuICB9KTtcblxuICB2YXIgVGFwID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvbih0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vbkRvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCAndG91Y2hzdGFydCcsIHRoaXMuX29uRG93biwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbkRvd246IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIWUudG91Y2hlcykgeyByZXR1cm47IH1cblxuICBcdFx0cHJldmVudERlZmF1bHQoZSk7XG5cbiAgXHRcdHRoaXMuX2ZpcmVDbGljayA9IHRydWU7XG5cbiAgXHRcdC8vIGRvbid0IHNpbXVsYXRlIGNsaWNrIG9yIHRyYWNrIGxvbmdwcmVzcyBpZiBtb3JlIHRoYW4gMSB0b3VjaFxuICBcdFx0aWYgKGUudG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gIFx0XHRcdHRoaXMuX2ZpcmVDbGljayA9IGZhbHNlO1xuICBcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBmaXJzdCA9IGUudG91Y2hlc1swXSxcbiAgXHRcdCAgICBlbCA9IGZpcnN0LnRhcmdldDtcblxuICBcdFx0dGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9uZXdQb3MgPSBuZXcgUG9pbnQoZmlyc3QuY2xpZW50WCwgZmlyc3QuY2xpZW50WSk7XG5cbiAgXHRcdC8vIGlmIHRvdWNoaW5nIGEgbGluaywgaGlnaGxpZ2h0IGl0XG4gIFx0XHRpZiAoZWwudGFnTmFtZSAmJiBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJykge1xuICBcdFx0XHRhZGRDbGFzcyhlbCwgJ2xlYWZsZXQtYWN0aXZlJyk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIHNpbXVsYXRlIGxvbmcgaG9sZCBidXQgc2V0dGluZyBhIHRpbWVvdXRcbiAgXHRcdHRoaXMuX2hvbGRUaW1lb3V0ID0gc2V0VGltZW91dChiaW5kKGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0aWYgKHRoaXMuX2lzVGFwVmFsaWQoKSkge1xuICBcdFx0XHRcdHRoaXMuX2ZpcmVDbGljayA9IGZhbHNlO1xuICBcdFx0XHRcdHRoaXMuX29uVXAoKTtcbiAgXHRcdFx0XHR0aGlzLl9zaW11bGF0ZUV2ZW50KCdjb250ZXh0bWVudScsIGZpcnN0KTtcbiAgXHRcdFx0fVxuICBcdFx0fSwgdGhpcyksIDEwMDApO1xuXG4gIFx0XHR0aGlzLl9zaW11bGF0ZUV2ZW50KCdtb3VzZWRvd24nLCBmaXJzdCk7XG5cbiAgXHRcdG9uKGRvY3VtZW50LCB7XG4gIFx0XHRcdHRvdWNobW92ZTogdGhpcy5fb25Nb3ZlLFxuICBcdFx0XHR0b3VjaGVuZDogdGhpcy5fb25VcFxuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vblVwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KTtcblxuICBcdFx0b2ZmKGRvY3VtZW50LCB7XG4gIFx0XHRcdHRvdWNobW92ZTogdGhpcy5fb25Nb3ZlLFxuICBcdFx0XHR0b3VjaGVuZDogdGhpcy5fb25VcFxuICBcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdGlmICh0aGlzLl9maXJlQ2xpY2sgJiYgZSAmJiBlLmNoYW5nZWRUb3VjaGVzKSB7XG5cbiAgXHRcdFx0dmFyIGZpcnN0ID0gZS5jaGFuZ2VkVG91Y2hlc1swXSxcbiAgXHRcdFx0ICAgIGVsID0gZmlyc3QudGFyZ2V0O1xuXG4gIFx0XHRcdGlmIChlbCAmJiBlbC50YWdOYW1lICYmIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnKSB7XG4gIFx0XHRcdFx0cmVtb3ZlQ2xhc3MoZWwsICdsZWFmbGV0LWFjdGl2ZScpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0dGhpcy5fc2ltdWxhdGVFdmVudCgnbW91c2V1cCcsIGZpcnN0KTtcblxuICBcdFx0XHQvLyBzaW11bGF0ZSBjbGljayBpZiB0aGUgdG91Y2ggZGlkbid0IG1vdmUgdG9vIG11Y2hcbiAgXHRcdFx0aWYgKHRoaXMuX2lzVGFwVmFsaWQoKSkge1xuICBcdFx0XHRcdHRoaXMuX3NpbXVsYXRlRXZlbnQoJ2NsaWNrJywgZmlyc3QpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pc1RhcFZhbGlkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbmV3UG9zLmRpc3RhbmNlVG8odGhpcy5fc3RhcnRQb3MpIDw9IHRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZTtcbiAgXHR9LFxuXG4gIFx0X29uTW92ZTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBmaXJzdCA9IGUudG91Y2hlc1swXTtcbiAgXHRcdHRoaXMuX25ld1BvcyA9IG5ldyBQb2ludChmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZKTtcbiAgXHRcdHRoaXMuX3NpbXVsYXRlRXZlbnQoJ21vdXNlbW92ZScsIGZpcnN0KTtcbiAgXHR9LFxuXG4gIFx0X3NpbXVsYXRlRXZlbnQ6IGZ1bmN0aW9uICh0eXBlLCBlKSB7XG4gIFx0XHR2YXIgc2ltdWxhdGVkRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtcblxuICBcdFx0c2ltdWxhdGVkRXZlbnQuX3NpbXVsYXRlZCA9IHRydWU7XG4gIFx0XHRlLnRhcmdldC5fc2ltdWxhdGVkQ2xpY2sgPSB0cnVlO1xuXG4gIFx0XHRzaW11bGF0ZWRFdmVudC5pbml0TW91c2VFdmVudChcbiAgXHRcdCAgICAgICAgdHlwZSwgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAxLFxuICBcdFx0ICAgICAgICBlLnNjcmVlblgsIGUuc2NyZWVuWSxcbiAgXHRcdCAgICAgICAgZS5jbGllbnRYLCBlLmNsaWVudFksXG4gIFx0XHQgICAgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTtcblxuICBcdFx0ZS50YXJnZXQuZGlzcGF0Y2hFdmVudChzaW11bGF0ZWRFdmVudCk7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgdGFwOiBIYW5kbGVyXG4gIC8vIE1vYmlsZSB0b3VjaCBoYWNrcyAocXVpY2sgdGFwIGFuZCB0b3VjaCBob2xkKSBoYW5kbGVyLlxuICBpZiAodG91Y2ggJiYgKCFwb2ludGVyIHx8IHNhZmFyaSkpIHtcbiAgXHRNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAndGFwJywgVGFwKTtcbiAgfVxuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5Ub3VjaFpvb20gaXMgdXNlZCBieSBMLk1hcCB0byBhZGQgcGluY2ggem9vbSBvbiBzdXBwb3J0ZWQgbW9iaWxlIGJyb3dzZXJzLlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBzZWN0aW9uIFRvdWNoIGludGVyYWN0aW9uIG9wdGlvbnNcbiAgXHQvLyBAb3B0aW9uIHRvdWNoWm9vbTogQm9vbGVhbnxTdHJpbmcgPSAqXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGNhbiBiZSB6b29tZWQgYnkgdG91Y2gtZHJhZ2dpbmcgd2l0aCB0d28gZmluZ2Vycy4gSWZcbiAgXHQvLyBwYXNzZWQgYCdjZW50ZXInYCwgaXQgd2lsbCB6b29tIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXcgcmVnYXJkbGVzcyBvZlxuICBcdC8vIHdoZXJlIHRoZSB0b3VjaCBldmVudHMgKGZpbmdlcnMpIHdlcmUuIEVuYWJsZWQgZm9yIHRvdWNoLWNhcGFibGUgd2ViXG4gIFx0Ly8gYnJvd3NlcnMgZXhjZXB0IGZvciBvbGQgQW5kcm9pZHMuXG4gIFx0dG91Y2hab29tOiB0b3VjaCAmJiAhYW5kcm9pZDIzLFxuXG4gIFx0Ly8gQG9wdGlvbiBib3VuY2VBdFpvb21MaW1pdHM6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50IHRoZSBtYXAgdG8gem9vbSBiZXlvbmQgbWluL21heCB6b29tXG4gIFx0Ly8gYW5kIHRoZW4gYm91bmNlIGJhY2sgd2hlbiBwaW5jaC16b29taW5nLlxuICBcdGJvdW5jZUF0Wm9vbUxpbWl0czogdHJ1ZVxuICB9KTtcblxuICB2YXIgVG91Y2hab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRhZGRDbGFzcyh0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtdG91Y2gtem9vbScpO1xuICBcdFx0b24odGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Ub3VjaFN0YXJ0LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC10b3VjaC16b29tJyk7XG4gIFx0XHRvZmYodGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Ub3VjaFN0YXJ0LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uVG91Y2hTdGFydDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gIFx0XHRpZiAoIWUudG91Y2hlcyB8fCBlLnRvdWNoZXMubGVuZ3RoICE9PSAyIHx8IG1hcC5fYW5pbWF0aW5nWm9vbSB8fCB0aGlzLl96b29taW5nKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgcDEgPSBtYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZS50b3VjaGVzWzBdKSxcbiAgXHRcdCAgICBwMiA9IG1hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLnRvdWNoZXNbMV0pO1xuXG4gIFx0XHR0aGlzLl9jZW50ZXJQb2ludCA9IG1hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO1xuICBcdFx0dGhpcy5fc3RhcnRMYXRMbmcgPSBtYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCk7XG4gIFx0XHRpZiAobWFwLm9wdGlvbnMudG91Y2hab29tICE9PSAnY2VudGVyJykge1xuICBcdFx0XHR0aGlzLl9waW5jaFN0YXJ0TGF0TG5nID0gbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocDEuYWRkKHAyKS5fZGl2aWRlQnkoMikpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9zdGFydERpc3QgPSBwMS5kaXN0YW5jZVRvKHAyKTtcbiAgXHRcdHRoaXMuX3N0YXJ0Wm9vbSA9IG1hcC5nZXRab29tKCk7XG5cbiAgXHRcdHRoaXMuX21vdmVkID0gZmFsc2U7XG4gIFx0XHR0aGlzLl96b29taW5nID0gdHJ1ZTtcblxuICBcdFx0bWFwLl9zdG9wKCk7XG5cbiAgXHRcdG9uKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUsIHRoaXMpO1xuICBcdFx0b24oZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uVG91Y2hFbmQsIHRoaXMpO1xuXG4gIFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcbiAgXHR9LFxuXG4gIFx0X29uVG91Y2hNb3ZlOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKCFlLnRvdWNoZXMgfHwgZS50b3VjaGVzLmxlbmd0aCAhPT0gMiB8fCAhdGhpcy5fem9vbWluZykgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBwMSA9IG1hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLnRvdWNoZXNbMF0pLFxuICBcdFx0ICAgIHAyID0gbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUudG91Y2hlc1sxXSksXG4gIFx0XHQgICAgc2NhbGUgPSBwMS5kaXN0YW5jZVRvKHAyKSAvIHRoaXMuX3N0YXJ0RGlzdDtcblxuICBcdFx0dGhpcy5fem9vbSA9IG1hcC5nZXRTY2FsZVpvb20oc2NhbGUsIHRoaXMuX3N0YXJ0Wm9vbSk7XG5cbiAgXHRcdGlmICghbWFwLm9wdGlvbnMuYm91bmNlQXRab29tTGltaXRzICYmIChcbiAgXHRcdFx0KHRoaXMuX3pvb20gPCBtYXAuZ2V0TWluWm9vbSgpICYmIHNjYWxlIDwgMSkgfHxcbiAgXHRcdFx0KHRoaXMuX3pvb20gPiBtYXAuZ2V0TWF4Wm9vbSgpICYmIHNjYWxlID4gMSkpKSB7XG4gIFx0XHRcdHRoaXMuX3pvb20gPSBtYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG1hcC5vcHRpb25zLnRvdWNoWm9vbSA9PT0gJ2NlbnRlcicpIHtcbiAgXHRcdFx0dGhpcy5fY2VudGVyID0gdGhpcy5fc3RhcnRMYXRMbmc7XG4gIFx0XHRcdGlmIChzY2FsZSA9PT0gMSkgeyByZXR1cm47IH1cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdC8vIEdldCBkZWx0YSBmcm9tIHBpbmNoIHRvIGNlbnRlciwgc28gY2VudGVyTGF0TG5nIGlzIGRlbHRhIGFwcGxpZWQgdG8gaW5pdGlhbCBwaW5jaExhdExuZ1xuICBcdFx0XHR2YXIgZGVsdGEgPSBwMS5fYWRkKHAyKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX2NlbnRlclBvaW50KTtcbiAgXHRcdFx0aWYgKHNjYWxlID09PSAxICYmIGRlbHRhLnggPT09IDAgJiYgZGVsdGEueSA9PT0gMCkgeyByZXR1cm47IH1cbiAgXHRcdFx0dGhpcy5fY2VudGVyID0gbWFwLnVucHJvamVjdChtYXAucHJvamVjdCh0aGlzLl9waW5jaFN0YXJ0TGF0TG5nLCB0aGlzLl96b29tKS5zdWJ0cmFjdChkZWx0YSksIHRoaXMuX3pvb20pO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdG1hcC5fbW92ZVN0YXJ0KHRydWUsIGZhbHNlKTtcbiAgXHRcdFx0dGhpcy5fbW92ZWQgPSB0cnVlO1xuICBcdFx0fVxuXG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpO1xuXG4gIFx0XHR2YXIgbW92ZUZuID0gYmluZChtYXAuX21vdmUsIG1hcCwgdGhpcy5fY2VudGVyLCB0aGlzLl96b29tLCB7cGluY2g6IHRydWUsIHJvdW5kOiBmYWxzZX0pO1xuICBcdFx0dGhpcy5fYW5pbVJlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lKG1vdmVGbiwgdGhpcywgdHJ1ZSk7XG5cbiAgXHRcdHByZXZlbnREZWZhdWx0KGUpO1xuICBcdH0sXG5cbiAgXHRfb25Ub3VjaEVuZDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9tb3ZlZCB8fCAhdGhpcy5fem9vbWluZykge1xuICBcdFx0XHR0aGlzLl96b29taW5nID0gZmFsc2U7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fem9vbWluZyA9IGZhbHNlO1xuICBcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KTtcblxuICBcdFx0b2ZmKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUsIHRoaXMpO1xuICBcdFx0b2ZmKGRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vblRvdWNoRW5kLCB0aGlzKTtcblxuICBcdFx0Ly8gUGluY2ggdXBkYXRlcyBHcmlkTGF5ZXJzJyBsZXZlbHMgb25seSB3aGVuIHpvb21TbmFwIGlzIG9mZiwgc28gem9vbVNuYXAgYmVjb21lcyBub1VwZGF0ZS5cbiAgXHRcdGlmICh0aGlzLl9tYXAub3B0aW9ucy56b29tQW5pbWF0aW9uKSB7XG4gIFx0XHRcdHRoaXMuX21hcC5fYW5pbWF0ZVpvb20odGhpcy5fY2VudGVyLCB0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwgdHJ1ZSwgdGhpcy5fbWFwLm9wdGlvbnMuem9vbVNuYXApO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLCB0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgdG91Y2hab29tOiBIYW5kbGVyXG4gIC8vIFRvdWNoIHpvb20gaGFuZGxlci5cbiAgTWFwLmFkZEluaXRIb29rKCdhZGRIYW5kbGVyJywgJ3RvdWNoWm9vbScsIFRvdWNoWm9vbSk7XG5cbiAgTWFwLkJveFpvb20gPSBCb3hab29tO1xuICBNYXAuRG91YmxlQ2xpY2tab29tID0gRG91YmxlQ2xpY2tab29tO1xuICBNYXAuRHJhZyA9IERyYWc7XG4gIE1hcC5LZXlib2FyZCA9IEtleWJvYXJkO1xuICBNYXAuU2Nyb2xsV2hlZWxab29tID0gU2Nyb2xsV2hlZWxab29tO1xuICBNYXAuVGFwID0gVGFwO1xuICBNYXAuVG91Y2hab29tID0gVG91Y2hab29tO1xuXG4gIGV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4gIGV4cG9ydHMuQ29udHJvbCA9IENvbnRyb2w7XG4gIGV4cG9ydHMuY29udHJvbCA9IGNvbnRyb2w7XG4gIGV4cG9ydHMuQnJvd3NlciA9IEJyb3dzZXI7XG4gIGV4cG9ydHMuRXZlbnRlZCA9IEV2ZW50ZWQ7XG4gIGV4cG9ydHMuTWl4aW4gPSBNaXhpbjtcbiAgZXhwb3J0cy5VdGlsID0gVXRpbDtcbiAgZXhwb3J0cy5DbGFzcyA9IENsYXNzO1xuICBleHBvcnRzLkhhbmRsZXIgPSBIYW5kbGVyO1xuICBleHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbiAgZXhwb3J0cy5iaW5kID0gYmluZDtcbiAgZXhwb3J0cy5zdGFtcCA9IHN0YW1wO1xuICBleHBvcnRzLnNldE9wdGlvbnMgPSBzZXRPcHRpb25zO1xuICBleHBvcnRzLkRvbUV2ZW50ID0gRG9tRXZlbnQ7XG4gIGV4cG9ydHMuRG9tVXRpbCA9IERvbVV0aWw7XG4gIGV4cG9ydHMuUG9zQW5pbWF0aW9uID0gUG9zQW5pbWF0aW9uO1xuICBleHBvcnRzLkRyYWdnYWJsZSA9IERyYWdnYWJsZTtcbiAgZXhwb3J0cy5MaW5lVXRpbCA9IExpbmVVdGlsO1xuICBleHBvcnRzLlBvbHlVdGlsID0gUG9seVV0aWw7XG4gIGV4cG9ydHMuUG9pbnQgPSBQb2ludDtcbiAgZXhwb3J0cy5wb2ludCA9IHRvUG9pbnQ7XG4gIGV4cG9ydHMuQm91bmRzID0gQm91bmRzO1xuICBleHBvcnRzLmJvdW5kcyA9IHRvQm91bmRzO1xuICBleHBvcnRzLlRyYW5zZm9ybWF0aW9uID0gVHJhbnNmb3JtYXRpb247XG4gIGV4cG9ydHMudHJhbnNmb3JtYXRpb24gPSB0b1RyYW5zZm9ybWF0aW9uO1xuICBleHBvcnRzLlByb2plY3Rpb24gPSBpbmRleDtcbiAgZXhwb3J0cy5MYXRMbmcgPSBMYXRMbmc7XG4gIGV4cG9ydHMubGF0TG5nID0gdG9MYXRMbmc7XG4gIGV4cG9ydHMuTGF0TG5nQm91bmRzID0gTGF0TG5nQm91bmRzO1xuICBleHBvcnRzLmxhdExuZ0JvdW5kcyA9IHRvTGF0TG5nQm91bmRzO1xuICBleHBvcnRzLkNSUyA9IENSUztcbiAgZXhwb3J0cy5HZW9KU09OID0gR2VvSlNPTjtcbiAgZXhwb3J0cy5nZW9KU09OID0gZ2VvSlNPTjtcbiAgZXhwb3J0cy5nZW9Kc29uID0gZ2VvSnNvbjtcbiAgZXhwb3J0cy5MYXllciA9IExheWVyO1xuICBleHBvcnRzLkxheWVyR3JvdXAgPSBMYXllckdyb3VwO1xuICBleHBvcnRzLmxheWVyR3JvdXAgPSBsYXllckdyb3VwO1xuICBleHBvcnRzLkZlYXR1cmVHcm91cCA9IEZlYXR1cmVHcm91cDtcbiAgZXhwb3J0cy5mZWF0dXJlR3JvdXAgPSBmZWF0dXJlR3JvdXA7XG4gIGV4cG9ydHMuSW1hZ2VPdmVybGF5ID0gSW1hZ2VPdmVybGF5O1xuICBleHBvcnRzLmltYWdlT3ZlcmxheSA9IGltYWdlT3ZlcmxheTtcbiAgZXhwb3J0cy5WaWRlb092ZXJsYXkgPSBWaWRlb092ZXJsYXk7XG4gIGV4cG9ydHMudmlkZW9PdmVybGF5ID0gdmlkZW9PdmVybGF5O1xuICBleHBvcnRzLlNWR092ZXJsYXkgPSBTVkdPdmVybGF5O1xuICBleHBvcnRzLnN2Z092ZXJsYXkgPSBzdmdPdmVybGF5O1xuICBleHBvcnRzLkRpdk92ZXJsYXkgPSBEaXZPdmVybGF5O1xuICBleHBvcnRzLlBvcHVwID0gUG9wdXA7XG4gIGV4cG9ydHMucG9wdXAgPSBwb3B1cDtcbiAgZXhwb3J0cy5Ub29sdGlwID0gVG9vbHRpcDtcbiAgZXhwb3J0cy50b29sdGlwID0gdG9vbHRpcDtcbiAgZXhwb3J0cy5JY29uID0gSWNvbjtcbiAgZXhwb3J0cy5pY29uID0gaWNvbjtcbiAgZXhwb3J0cy5EaXZJY29uID0gRGl2SWNvbjtcbiAgZXhwb3J0cy5kaXZJY29uID0gZGl2SWNvbjtcbiAgZXhwb3J0cy5NYXJrZXIgPSBNYXJrZXI7XG4gIGV4cG9ydHMubWFya2VyID0gbWFya2VyO1xuICBleHBvcnRzLlRpbGVMYXllciA9IFRpbGVMYXllcjtcbiAgZXhwb3J0cy50aWxlTGF5ZXIgPSB0aWxlTGF5ZXI7XG4gIGV4cG9ydHMuR3JpZExheWVyID0gR3JpZExheWVyO1xuICBleHBvcnRzLmdyaWRMYXllciA9IGdyaWRMYXllcjtcbiAgZXhwb3J0cy5TVkcgPSBTVkc7XG4gIGV4cG9ydHMuc3ZnID0gc3ZnJDE7XG4gIGV4cG9ydHMuUmVuZGVyZXIgPSBSZW5kZXJlcjtcbiAgZXhwb3J0cy5DYW52YXMgPSBDYW52YXM7XG4gIGV4cG9ydHMuY2FudmFzID0gY2FudmFzJDE7XG4gIGV4cG9ydHMuUGF0aCA9IFBhdGg7XG4gIGV4cG9ydHMuQ2lyY2xlTWFya2VyID0gQ2lyY2xlTWFya2VyO1xuICBleHBvcnRzLmNpcmNsZU1hcmtlciA9IGNpcmNsZU1hcmtlcjtcbiAgZXhwb3J0cy5DaXJjbGUgPSBDaXJjbGU7XG4gIGV4cG9ydHMuY2lyY2xlID0gY2lyY2xlO1xuICBleHBvcnRzLlBvbHlsaW5lID0gUG9seWxpbmU7XG4gIGV4cG9ydHMucG9seWxpbmUgPSBwb2x5bGluZTtcbiAgZXhwb3J0cy5Qb2x5Z29uID0gUG9seWdvbjtcbiAgZXhwb3J0cy5wb2x5Z29uID0gcG9seWdvbjtcbiAgZXhwb3J0cy5SZWN0YW5nbGUgPSBSZWN0YW5nbGU7XG4gIGV4cG9ydHMucmVjdGFuZ2xlID0gcmVjdGFuZ2xlO1xuICBleHBvcnRzLk1hcCA9IE1hcDtcbiAgZXhwb3J0cy5tYXAgPSBjcmVhdGVNYXA7XG5cbiAgdmFyIG9sZEwgPSB3aW5kb3cuTDtcbiAgZXhwb3J0cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gIFx0d2luZG93LkwgPSBvbGRMO1xuICBcdHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gQWx3YXlzIGV4cG9ydCB1cyB0byB3aW5kb3cgZ2xvYmFsIChzZWUgIzIzNjQpXG4gIHdpbmRvdy5MID0gZXhwb3J0cztcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlYWZsZXQtc3JjLmpzLm1hcFxuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9sZWFmbGV0LmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbGVhZmxldC5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbGVhZmxldC5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18gZnJvbSBcIi4vaW1hZ2VzL2xheWVycy5wbmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyBmcm9tIFwiLi9pbWFnZXMvbGF5ZXJzLTJ4LnBuZ1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fIGZyb20gXCIuL2ltYWdlcy9tYXJrZXItaWNvbi5wbmdcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qIHJlcXVpcmVkIHN0eWxlcyAqL1xcclxcblxcclxcbi5sZWFmbGV0LXBhbmUsXFxyXFxuLmxlYWZsZXQtdGlsZSxcXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93LFxcclxcbi5sZWFmbGV0LXRpbGUtY29udGFpbmVyLFxcclxcbi5sZWFmbGV0LXBhbmUgPiBzdmcsXFxyXFxuLmxlYWZsZXQtcGFuZSA+IGNhbnZhcyxcXHJcXG4ubGVhZmxldC16b29tLWJveCxcXHJcXG4ubGVhZmxldC1pbWFnZS1sYXllcixcXHJcXG4ubGVhZmxldC1sYXllciB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdGxlZnQ6IDA7XFxyXFxuXFx0dG9wOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIge1xcclxcblxcdG92ZXJmbG93OiBoaWRkZW47XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRpbGUsXFxyXFxuLmxlYWZsZXQtbWFya2VyLWljb24sXFxyXFxuLmxlYWZsZXQtbWFya2VyLXNoYWRvdyB7XFxyXFxuXFx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHQgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdCAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0ICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLyogUHJldmVudHMgSUUxMSBmcm9tIGhpZ2hsaWdodGluZyB0aWxlcyBpbiBibHVlICovXFxyXFxuLmxlYWZsZXQtdGlsZTo6c2VsZWN0aW9uIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG59XFxyXFxuLyogU2FmYXJpIHJlbmRlcnMgbm9uLXJldGluYSB0aWxlIG9uIHJldGluYSBiZXR0ZXIgd2l0aCB0aGlzLCBidXQgQ2hyb21lIGlzIHdvcnNlICovXFxyXFxuLmxlYWZsZXQtc2FmYXJpIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDtcXHJcXG5cXHR9XFxyXFxuLyogaGFjayB0aGF0IHByZXZlbnRzIGh3IGxheWVycyBcXFwic3RyZXRjaGluZ1xcXCIgd2hlbiBsb2FkaW5nIG5ldyB0aWxlcyAqL1xcclxcbi5sZWFmbGV0LXNhZmFyaSAubGVhZmxldC10aWxlLWNvbnRhaW5lciB7XFxyXFxuXFx0d2lkdGg6IDE2MDBweDtcXHJcXG5cXHRoZWlnaHQ6IDE2MDBweDtcXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtbWFya2VyLWljb24sXFxyXFxuLmxlYWZsZXQtbWFya2VyLXNoYWRvdyB7XFxyXFxuXFx0ZGlzcGxheTogYmxvY2s7XFxyXFxuXFx0fVxcclxcbi8qIC5sZWFmbGV0LWNvbnRhaW5lciBzdmc6IHJlc2V0IHN2ZyBtYXgtd2lkdGggZGVjbGVyYXRpb24gc2hpcHBlZCBpbiBKb29tbGEhIChqb29tbGEub3JnKSAzLnggKi9cXHJcXG4vKiAubGVhZmxldC1jb250YWluZXIgaW1nOiBtYXAgaXMgYnJva2VuIGluIEZGIGlmIHlvdSBoYXZlIG1heC13aWR0aDogMTAwJSBvbiB0aWxlcyAqL1xcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1vdmVybGF5LXBhbmUgc3ZnLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1tYXJrZXItcGFuZSBpbWcsXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXNoYWRvdy1wYW5lIGltZyxcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtdGlsZS1wYW5lIGltZyxcXHJcXG4ubGVhZmxldC1jb250YWluZXIgaW1nLmxlYWZsZXQtaW1hZ2UtbGF5ZXIsXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50O1xcclxcblxcdG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtem9vbSB7XFxyXFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogcGFuLXggcGFuLXk7XFxyXFxuXFx0dG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZyB7XFxyXFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogcGluY2gtem9vbTtcXHJcXG5cXHQvKiBGYWxsYmFjayBmb3IgRkYgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHBpbmNoLXpvb20gKi9cXHJcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxyXFxuXFx0dG91Y2gtYWN0aW9uOiBwaW5jaC16b29tO1xcclxcbn1cXHJcXG4ubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC1kcmFnLmxlYWZsZXQtdG91Y2gtem9vbSB7XFxyXFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXHJcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxyXFxufVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIGEge1xcclxcblxcdC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSg1MSwgMTgxLCAyMjksIDAuNCk7XFxyXFxufVxcclxcbi5sZWFmbGV0LXRpbGUge1xcclxcblxcdGZpbHRlcjogaW5oZXJpdDtcXHJcXG5cXHR2aXNpYmlsaXR5OiBoaWRkZW47XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRpbGUtbG9hZGVkIHtcXHJcXG5cXHR2aXNpYmlsaXR5OiBpbmhlcml0O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWJveCB7XFxyXFxuXFx0d2lkdGg6IDA7XFxyXFxuXFx0aGVpZ2h0OiAwO1xcclxcblxcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG5cXHQgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuXFx0ei1pbmRleDogODAwO1xcclxcblxcdH1cXHJcXG4vKiB3b3JrYXJvdW5kIGZvciBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODgzMTkgKi9cXHJcXG4ubGVhZmxldC1vdmVybGF5LXBhbmUgc3ZnIHtcXHJcXG5cXHQtbW96LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC1wYW5lICAgICAgICAgeyB6LWluZGV4OiA0MDA7IH1cXHJcXG5cXHJcXG4ubGVhZmxldC10aWxlLXBhbmUgICAgeyB6LWluZGV4OiAyMDA7IH1cXHJcXG4ubGVhZmxldC1vdmVybGF5LXBhbmUgeyB6LWluZGV4OiA0MDA7IH1cXHJcXG4ubGVhZmxldC1zaGFkb3ctcGFuZSAgeyB6LWluZGV4OiA1MDA7IH1cXHJcXG4ubGVhZmxldC1tYXJrZXItcGFuZSAgeyB6LWluZGV4OiA2MDA7IH1cXHJcXG4ubGVhZmxldC10b29sdGlwLXBhbmUgICB7IHotaW5kZXg6IDY1MDsgfVxcclxcbi5sZWFmbGV0LXBvcHVwLXBhbmUgICB7IHotaW5kZXg6IDcwMDsgfVxcclxcblxcclxcbi5sZWFmbGV0LW1hcC1wYW5lIGNhbnZhcyB7IHotaW5kZXg6IDEwMDsgfVxcclxcbi5sZWFmbGV0LW1hcC1wYW5lIHN2ZyAgICB7IHotaW5kZXg6IDIwMDsgfVxcclxcblxcclxcbi5sZWFmbGV0LXZtbC1zaGFwZSB7XFxyXFxuXFx0d2lkdGg6IDFweDtcXHJcXG5cXHRoZWlnaHQ6IDFweDtcXHJcXG5cXHR9XFxyXFxuLmx2bWwge1xcclxcblxcdGJlaGF2aW9yOiB1cmwoI2RlZmF1bHQjVk1MKTtcXHJcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBjb250cm9sIHBvc2l0aW9uaW5nICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcclxcblxcdHotaW5kZXg6IDgwMDtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogdmlzaWJsZVBhaW50ZWQ7IC8qIElFIDktMTAgZG9lc24ndCBoYXZlIGF1dG8gKi9cXHJcXG5cXHRwb2ludGVyLWV2ZW50czogYXV0bztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9wLFxcclxcbi5sZWFmbGV0LWJvdHRvbSB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHotaW5kZXg6IDEwMDA7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvcCB7XFxyXFxuXFx0dG9wOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1yaWdodCB7XFxyXFxuXFx0cmlnaHQ6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJvdHRvbSB7XFxyXFxuXFx0Ym90dG9tOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1sZWZ0IHtcXHJcXG5cXHRsZWZ0OiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRmbG9hdDogbGVmdDtcXHJcXG5cXHRjbGVhcjogYm90aDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcmlnaHQgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3AgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLXRvcDogMTBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYm90dG9tIC5sZWFmbGV0LWNvbnRyb2wge1xcclxcblxcdG1hcmdpbi1ib3R0b206IDEwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWxlZnQgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IDEwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wge1xcclxcblxcdG1hcmdpbi1yaWdodDogMTBweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogem9vbSBhbmQgZmFkZSBhbmltYXRpb25zICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtZmFkZS1hbmltIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdHdpbGwtY2hhbmdlOiBvcGFjaXR5O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1mYWRlLWFuaW0gLmxlYWZsZXQtcG9wdXAge1xcclxcblxcdG9wYWNpdHk6IDA7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyO1xcclxcblxcdCAgIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjtcXHJcXG5cXHQgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBsaW5lYXI7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWZhZGUtYW5pbSAubGVhZmxldC1tYXAtcGFuZSAubGVhZmxldC1wb3B1cCB7XFxyXFxuXFx0b3BhY2l0eTogMTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtem9vbS1hbmltYXRlZCB7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxyXFxuXFx0ICAgIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxyXFxuXFx0ICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHtcXHJcXG5cXHR3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWFuaW0gLmxlYWZsZXQtem9vbS1hbmltYXRlZCB7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7XFxyXFxuXFx0ICAgLW1vei10cmFuc2l0aW9uOiAgICAtbW96LXRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7XFxyXFxuXFx0ICAgICAgICB0cmFuc2l0aW9uOiAgICAgICAgIHRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC10aWxlLFxcclxcbi5sZWFmbGV0LXBhbi1hbmltIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTtcXHJcXG5cXHQgICAtbW96LXRyYW5zaXRpb246IG5vbmU7XFxyXFxuXFx0ICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC16b29tLWFuaW0gLmxlYWZsZXQtem9vbS1oaWRlIHtcXHJcXG5cXHR2aXNpYmlsaXR5OiBoaWRkZW47XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGN1cnNvcnMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1pbnRlcmFjdGl2ZSB7XFxyXFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1ncmFiIHtcXHJcXG5cXHRjdXJzb3I6IC13ZWJraXQtZ3JhYjtcXHJcXG5cXHRjdXJzb3I6ICAgIC1tb3otZ3JhYjtcXHJcXG5cXHRjdXJzb3I6ICAgICAgICAgZ3JhYjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY3Jvc3NoYWlyLFxcclxcbi5sZWFmbGV0LWNyb3NzaGFpciAubGVhZmxldC1pbnRlcmFjdGl2ZSB7XFxyXFxuXFx0Y3Vyc29yOiBjcm9zc2hhaXI7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXBhbmUsXFxyXFxuLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0Y3Vyc29yOiBhdXRvO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiLFxcclxcbi5sZWFmbGV0LWRyYWdnaW5nIC5sZWFmbGV0LWdyYWIgLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuLmxlYWZsZXQtZHJhZ2dpbmcgLmxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZSB7XFxyXFxuXFx0Y3Vyc29yOiBtb3ZlO1xcclxcblxcdGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcXHJcXG5cXHRjdXJzb3I6ICAgIC1tb3otZ3JhYmJpbmc7XFxyXFxuXFx0Y3Vyc29yOiAgICAgICAgIGdyYWJiaW5nO1xcclxcblxcdH1cXHJcXG5cXHJcXG4vKiBtYXJrZXIgJiBvdmVybGF5cyBpbnRlcmFjdGl2aXR5ICovXFxyXFxuLmxlYWZsZXQtbWFya2VyLWljb24sXFxyXFxuLmxlYWZsZXQtbWFya2VyLXNoYWRvdyxcXHJcXG4ubGVhZmxldC1pbWFnZS1sYXllcixcXHJcXG4ubGVhZmxldC1wYW5lID4gc3ZnIHBhdGgsXFxyXFxuLmxlYWZsZXQtdGlsZS1jb250YWluZXIge1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbi5sZWFmbGV0LWludGVyYWN0aXZlLFxcclxcbi5sZWFmbGV0LWltYWdlLWxheWVyLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuLmxlYWZsZXQtcGFuZSA+IHN2ZyBwYXRoLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuc3ZnLmxlYWZsZXQtaW1hZ2UtbGF5ZXIubGVhZmxldC1pbnRlcmFjdGl2ZSBwYXRoIHtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogdmlzaWJsZVBhaW50ZWQ7IC8qIElFIDktMTAgZG9lc24ndCBoYXZlIGF1dG8gKi9cXHJcXG5cXHRwb2ludGVyLWV2ZW50czogYXV0bztcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLyogdmlzdWFsIHR3ZWFrcyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0YmFja2dyb3VuZDogI2RkZDtcXHJcXG5cXHRvdXRsaW5lOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYSB7XFxyXFxuXFx0Y29sb3I6ICMwMDc4QTg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBhLmxlYWZsZXQtYWN0aXZlIHtcXHJcXG5cXHRvdXRsaW5lOiAycHggc29saWQgb3JhbmdlO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWJveCB7XFxyXFxuXFx0Ym9yZGVyOiAycHggZG90dGVkICMzOGY7XFxyXFxuXFx0YmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjUpO1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBnZW5lcmFsIHR5cG9ncmFwaHkgKi9cXHJcXG4ubGVhZmxldC1jb250YWluZXIge1xcclxcblxcdGZvbnQ6IDEycHgvMS41IFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGdlbmVyYWwgdG9vbGJhciBzdHlsZXMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1iYXIge1xcclxcblxcdGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuNjUpO1xcclxcblxcdGJvcmRlci1yYWRpdXM6IDRweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGEsXFxyXFxuLmxlYWZsZXQtYmFyIGE6aG92ZXIge1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XFxyXFxuXFx0d2lkdGg6IDI2cHg7XFxyXFxuXFx0aGVpZ2h0OiAyNnB4O1xcclxcblxcdGxpbmUtaGVpZ2h0OiAyNnB4O1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuXFx0Y29sb3I6IGJsYWNrO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYSxcXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7XFxyXFxuXFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGE6aG92ZXIge1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJhciBhOmZpcnN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XFxyXFxuXFx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGE6bGFzdC1jaGlsZCB7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xcclxcblxcdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGEubGVhZmxldC1kaXNhYmxlZCB7XFxyXFxuXFx0Y3Vyc29yOiBkZWZhdWx0O1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XFxyXFxuXFx0Y29sb3I6ICNiYmI7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciBhIHtcXHJcXG5cXHR3aWR0aDogMzBweDtcXHJcXG5cXHRoZWlnaHQ6IDMwcHg7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDMwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciBhOmZpcnN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XFxyXFxuXFx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIGE6bGFzdC1jaGlsZCB7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4O1xcclxcblxcdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIHpvb20gY29udHJvbCAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRyb2wtem9vbS1pbixcXHJcXG4ubGVhZmxldC1jb250cm9sLXpvb20tb3V0IHtcXHJcXG5cXHRmb250OiBib2xkIDE4cHggJ0x1Y2lkYSBDb25zb2xlJywgTW9uYWNvLCBtb25vc3BhY2U7XFxyXFxuXFx0dGV4dC1pbmRlbnQ6IDFweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC16b29tLWluLCAubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLXpvb20tb3V0ICB7XFxyXFxuXFx0Zm9udC1zaXplOiAyMnB4O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBsYXllcnMgY29udHJvbCAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIHtcXHJcXG5cXHRib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjQpO1xcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogNXB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gKyBcIik7XFxyXFxuXFx0d2lkdGg6IDM2cHg7XFxyXFxuXFx0aGVpZ2h0OiAzNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1yZXRpbmEgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHtcXHJcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcclxcblxcdGJhY2tncm91bmQtc2l6ZTogMjZweCAyNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdHdpZHRoOiA0NHB4O1xcclxcblxcdGhlaWdodDogNDRweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtbGlzdCxcXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGRpc3BsYXk6IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWxpc3Qge1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQge1xcclxcblxcdHBhZGRpbmc6IDZweCAxMHB4IDZweCA2cHg7XFxyXFxuXFx0Y29sb3I6ICMzMzM7XFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIHtcXHJcXG5cXHRvdmVyZmxvdy15OiBzY3JvbGw7XFxyXFxuXFx0b3ZlcmZsb3cteDogaGlkZGVuO1xcclxcblxcdHBhZGRpbmctcmlnaHQ6IDVweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3Ige1xcclxcblxcdG1hcmdpbi10b3A6IDJweDtcXHJcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFx0dG9wOiAxcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIGxhYmVsIHtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VwYXJhdG9yIHtcXHJcXG5cXHRoZWlnaHQ6IDA7XFxyXFxuXFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XFxyXFxuXFx0bWFyZ2luOiA1cHggLTEwcHggNXB4IC02cHg7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIERlZmF1bHQgaWNvbiBVUkxzICovXFxyXFxuLmxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGgge1xcclxcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gKyBcIik7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGF0dHJpYnV0aW9uIGFuZCBzY2FsZSBjb250cm9scyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcXHJcXG5cXHRtYXJnaW46IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sXFxyXFxuLmxlYWZsZXQtY29udHJvbC1zY2FsZS1saW5lIHtcXHJcXG5cXHRwYWRkaW5nOiAwIDVweDtcXHJcXG5cXHRjb2xvcjogIzMzMztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiBhIHtcXHJcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24gYTpob3ZlciB7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLXNjYWxlIHtcXHJcXG5cXHRmb250LXNpemU6IDExcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWxlZnQgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IDVweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYm90dG9tIC5sZWFmbGV0LWNvbnRyb2wtc2NhbGUge1xcclxcblxcdG1hcmdpbi1ib3R0b206IDVweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1zY2FsZS1saW5lIHtcXHJcXG5cXHRib3JkZXI6IDJweCBzb2xpZCAjNzc3O1xcclxcblxcdGJvcmRlci10b3A6IG5vbmU7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDEuMTtcXHJcXG5cXHRwYWRkaW5nOiAycHggNXB4IDFweDtcXHJcXG5cXHRmb250LXNpemU6IDExcHg7XFxyXFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcclxcblxcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG5cXHQgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuXFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZTpub3QoOmZpcnN0LWNoaWxkKSB7XFxyXFxuXFx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICM3Nzc7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcXHJcXG5cXHRtYXJnaW4tdG9wOiAtMnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmU6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM3Nzc7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMsXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIHtcXHJcXG5cXHRib3gtc2hhZG93OiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLWxheWVycyxcXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIge1xcclxcblxcdGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTtcXHJcXG5cXHRiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBwb3B1cCAqL1xcclxcblxcclxcbi5sZWFmbGV0LXBvcHVwIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcclxcblxcdG1hcmdpbi1ib3R0b206IDIwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciB7XFxyXFxuXFx0cGFkZGluZzogMXB4O1xcclxcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogMTJweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtY29udGVudCB7XFxyXFxuXFx0bWFyZ2luOiAxM3B4IDE5cHg7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDEuNDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtY29udGVudCBwIHtcXHJcXG5cXHRtYXJnaW46IDE4cHggMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtdGlwLWNvbnRhaW5lciB7XFxyXFxuXFx0d2lkdGg6IDQwcHg7XFxyXFxuXFx0aGVpZ2h0OiAyMHB4O1xcclxcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG5cXHRsZWZ0OiA1MCU7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IC0yMHB4O1xcclxcblxcdG92ZXJmbG93OiBoaWRkZW47XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXRpcCB7XFxyXFxuXFx0d2lkdGg6IDE3cHg7XFxyXFxuXFx0aGVpZ2h0OiAxN3B4O1xcclxcblxcdHBhZGRpbmc6IDFweDtcXHJcXG5cXHJcXG5cXHRtYXJnaW46IC0xMHB4IGF1dG8gMDtcXHJcXG5cXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHQgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHQgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyLFxcclxcbi5sZWFmbGV0LXBvcHVwLXRpcCB7XFxyXFxuXFx0YmFja2dyb3VuZDogd2hpdGU7XFxyXFxuXFx0Y29sb3I6ICMzMzM7XFxyXFxuXFx0Ym94LXNoYWRvdzogMCAzcHggMTRweCByZ2JhKDAsMCwwLDAuNCk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBhLmxlYWZsZXQtcG9wdXAtY2xvc2UtYnV0dG9uIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0dG9wOiAwO1xcclxcblxcdHJpZ2h0OiAwO1xcclxcblxcdHBhZGRpbmc6IDRweCA0cHggMCAwO1xcclxcblxcdGJvcmRlcjogbm9uZTtcXHJcXG5cXHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuXFx0d2lkdGg6IDE4cHg7XFxyXFxuXFx0aGVpZ2h0OiAxNHB4O1xcclxcblxcdGZvbnQ6IDE2cHgvMTRweCBUYWhvbWEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7XFxyXFxuXFx0Y29sb3I6ICNjM2MzYzM7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcclxcblxcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbjpob3ZlciB7XFxyXFxuXFx0Y29sb3I6ICM5OTk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXNjcm9sbGVkIHtcXHJcXG5cXHRvdmVyZmxvdzogYXV0bztcXHJcXG5cXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcXHJcXG5cXHRib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyIHtcXHJcXG5cXHQtbXMtem9vbTogMTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwIHtcXHJcXG5cXHR3aWR0aDogMjRweDtcXHJcXG5cXHRtYXJnaW46IDAgYXV0bztcXHJcXG5cXHJcXG5cXHQtbXMtZmlsdGVyOiBcXFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0Lk1hdHJpeChNMTE9MC43MDcxMDY3OCwgTTEyPTAuNzA3MTA2NzgsIE0yMT0tMC43MDcxMDY3OCwgTTIyPTAuNzA3MTA2NzgpXFxcIjtcXHJcXG5cXHRmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5NYXRyaXgoTTExPTAuNzA3MTA2NzgsIE0xMj0wLjcwNzEwNjc4LCBNMjE9LTAuNzA3MTA2NzgsIE0yMj0wLjcwNzEwNjc4KTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwLWNvbnRhaW5lciB7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTFweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtY29udHJvbC16b29tLFxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLFxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlcixcXHJcXG4ubGVhZmxldC1vbGRpZSAubGVhZmxldC1wb3B1cC10aXAge1xcclxcblxcdGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGRpdiBpY29uICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtZGl2LWljb24ge1xcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyOiAxcHggc29saWQgIzY2NjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogVG9vbHRpcCAqL1xcclxcbi8qIEJhc2Ugc3R5bGVzIGZvciB0aGUgZWxlbWVudCB0aGF0IGhhcyBhIHRvb2x0aXAgKi9cXHJcXG4ubGVhZmxldC10b29sdGlwIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0cGFkZGluZzogNnB4O1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2ZmZjtcXHJcXG5cXHRib3JkZXItcmFkaXVzOiAzcHg7XFxyXFxuXFx0Y29sb3I6ICMyMjI7XFxyXFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG5cXHQtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0LW1zLXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdHVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNCk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvb2x0aXAubGVhZmxldC1jbGlja2FibGUge1xcclxcblxcdGN1cnNvcjogcG9pbnRlcjtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogYXV0bztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC10b3A6YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtYm90dG9tOmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0Ym9yZGVyOiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XFxyXFxuXFx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxyXFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIERpcmVjdGlvbnMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC10b29sdGlwLWJvdHRvbSB7XFxyXFxuXFx0bWFyZ2luLXRvcDogNnB4O1xcclxcbn1cXHJcXG4ubGVhZmxldC10b29sdGlwLXRvcCB7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1ib3R0b206YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtdG9wOmJlZm9yZSB7XFxyXFxuXFx0bGVmdDogNTAlO1xcclxcblxcdG1hcmdpbi1sZWZ0OiAtNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLXRvcDpiZWZvcmUge1xcclxcblxcdGJvdHRvbTogMDtcXHJcXG5cXHRtYXJnaW4tYm90dG9tOiAtMTJweDtcXHJcXG5cXHRib3JkZXItdG9wLWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLWJvdHRvbTpiZWZvcmUge1xcclxcblxcdHRvcDogMDtcXHJcXG5cXHRtYXJnaW4tdG9wOiAtMTJweDtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTZweDtcXHJcXG5cXHRib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQge1xcclxcblxcdG1hcmdpbi1sZWZ0OiAtNnB4O1xcclxcbn1cXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0IHtcXHJcXG5cXHRtYXJnaW4tbGVmdDogNnB4O1xcclxcbn1cXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHtcXHJcXG5cXHR0b3A6IDUwJTtcXHJcXG5cXHRtYXJnaW4tdG9wOiAtNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlIHtcXHJcXG5cXHRyaWdodDogMDtcXHJcXG5cXHRtYXJnaW4tcmlnaHQ6IC0xMnB4O1xcclxcblxcdGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XFxyXFxuXFx0bGVmdDogMDtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTEycHg7XFxyXFxuXFx0Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2xlYWZsZXQuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLG9CQUFvQjs7QUFFcEI7Ozs7Ozs7Ozs7Q0FVQyxrQkFBa0I7Q0FDbEIsT0FBTztDQUNQLE1BQU07Q0FDTjtBQUNEO0NBQ0MsZ0JBQWdCO0NBQ2hCO0FBQ0Q7OztDQUdDLHlCQUF5QjtJQUN0QixzQkFBc0I7U0FDakIsaUJBQWlCO0dBQ3ZCLHVCQUF1QjtDQUN6QjtBQUNELGtEQUFrRDtBQUNsRDtDQUNDLHVCQUF1QjtBQUN4QjtBQUNBLG1GQUFtRjtBQUNuRjtDQUNDLDBDQUEwQztDQUMxQztBQUNELHFFQUFxRTtBQUNyRTtDQUNDLGFBQWE7Q0FDYixjQUFjO0NBQ2QsNkJBQTZCO0NBQzdCO0FBQ0Q7O0NBRUMsY0FBYztDQUNkO0FBQ0QsZ0dBQWdHO0FBQ2hHLHFGQUFxRjtBQUNyRjs7Ozs7O0NBTUMsMEJBQTBCO0NBQzFCLDJCQUEyQjtDQUMzQjs7QUFFRDtDQUNDLDZCQUE2QjtDQUM3Qix5QkFBeUI7Q0FDekI7QUFDRDtDQUNDLDRCQUE0QjtDQUM1QixxREFBcUQ7Q0FDckQsa0JBQWtCO0NBQ2xCLHdCQUF3QjtBQUN6QjtBQUNBO0NBQ0Msc0JBQXNCO0NBQ3RCLGtCQUFrQjtBQUNuQjtBQUNBO0NBQ0Msd0NBQXdDO0FBQ3pDO0FBQ0E7Q0FDQyxvREFBb0Q7QUFDckQ7QUFDQTtDQUNDLGVBQWU7Q0FDZixrQkFBa0I7Q0FDbEI7QUFDRDtDQUNDLG1CQUFtQjtDQUNuQjtBQUNEO0NBQ0MsUUFBUTtDQUNSLFNBQVM7Q0FDVCwyQkFBMkI7TUFDdEIsc0JBQXNCO0NBQzNCLFlBQVk7Q0FDWjtBQUNELHVFQUF1RTtBQUN2RTtDQUNDLHNCQUFzQjtDQUN0Qjs7QUFFRCx3QkFBd0IsWUFBWSxFQUFFOztBQUV0Qyx3QkFBd0IsWUFBWSxFQUFFO0FBQ3RDLHdCQUF3QixZQUFZLEVBQUU7QUFDdEMsd0JBQXdCLFlBQVksRUFBRTtBQUN0Qyx3QkFBd0IsWUFBWSxFQUFFO0FBQ3RDLDBCQUEwQixZQUFZLEVBQUU7QUFDeEMsd0JBQXdCLFlBQVksRUFBRTs7QUFFdEMsMkJBQTJCLFlBQVksRUFBRTtBQUN6QywyQkFBMkIsWUFBWSxFQUFFOztBQUV6QztDQUNDLFVBQVU7Q0FDVixXQUFXO0NBQ1g7QUFDRDtDQUNDLDJCQUEyQjtDQUMzQixxQkFBcUI7Q0FDckIsa0JBQWtCO0NBQ2xCOzs7QUFHRCx3QkFBd0I7O0FBRXhCO0NBQ0Msa0JBQWtCO0NBQ2xCLFlBQVk7Q0FDWiw4QkFBOEIsRUFBRSw4QkFBOEI7Q0FDOUQsb0JBQW9CO0NBQ3BCO0FBQ0Q7O0NBRUMsa0JBQWtCO0NBQ2xCLGFBQWE7Q0FDYixvQkFBb0I7Q0FDcEI7QUFDRDtDQUNDLE1BQU07Q0FDTjtBQUNEO0NBQ0MsUUFBUTtDQUNSO0FBQ0Q7Q0FDQyxTQUFTO0NBQ1Q7QUFDRDtDQUNDLE9BQU87Q0FDUDtBQUNEO0NBQ0MsV0FBVztDQUNYLFdBQVc7Q0FDWDtBQUNEO0NBQ0MsWUFBWTtDQUNaO0FBQ0Q7Q0FDQyxnQkFBZ0I7Q0FDaEI7QUFDRDtDQUNDLG1CQUFtQjtDQUNuQjtBQUNEO0NBQ0MsaUJBQWlCO0NBQ2pCO0FBQ0Q7Q0FDQyxrQkFBa0I7Q0FDbEI7OztBQUdELDZCQUE2Qjs7QUFFN0I7Q0FDQyxvQkFBb0I7Q0FDcEI7QUFDRDtDQUNDLFVBQVU7Q0FDVix1Q0FBdUM7SUFDcEMsb0NBQW9DO1NBQy9CLCtCQUErQjtDQUN2QztBQUNEO0NBQ0MsVUFBVTtDQUNWO0FBQ0Q7Q0FDQyw2QkFBNkI7S0FDekIseUJBQXlCO1NBQ3JCLHFCQUFxQjtDQUM3QjtBQUNEO0NBQ0Msc0JBQXNCO0NBQ3RCO0FBQ0Q7Q0FDQyxvRUFBb0U7SUFDakUsaUVBQWlFO1NBQzVELDREQUE0RDtDQUNwRTtBQUNEOztDQUVDLHdCQUF3QjtJQUNyQixxQkFBcUI7U0FDaEIsZ0JBQWdCO0NBQ3hCOztBQUVEO0NBQ0Msa0JBQWtCO0NBQ2xCOzs7QUFHRCxZQUFZOztBQUVaO0NBQ0MsZUFBZTtDQUNmO0FBQ0Q7Q0FDQyxvQkFBb0I7Q0FDcEIsb0JBQW9CO0NBQ3BCLG9CQUFvQjtDQUNwQjtBQUNEOztDQUVDLGlCQUFpQjtDQUNqQjtBQUNEOztDQUVDLFlBQVk7Q0FDWjtBQUNEOzs7Q0FHQyxZQUFZO0NBQ1osd0JBQXdCO0NBQ3hCLHdCQUF3QjtDQUN4Qix3QkFBd0I7Q0FDeEI7O0FBRUQsb0NBQW9DO0FBQ3BDOzs7OztDQUtDLG9CQUFvQjtDQUNwQjs7QUFFRDs7OztDQUlDLDhCQUE4QixFQUFFLDhCQUE4QjtDQUM5RCxvQkFBb0I7Q0FDcEI7O0FBRUQsa0JBQWtCOztBQUVsQjtDQUNDLGdCQUFnQjtDQUNoQixVQUFVO0NBQ1Y7QUFDRDtDQUNDLGNBQWM7Q0FDZDtBQUNEO0NBQ0MseUJBQXlCO0NBQ3pCO0FBQ0Q7Q0FDQyx1QkFBdUI7Q0FDdkIsaUNBQWlDO0NBQ2pDOzs7QUFHRCx1QkFBdUI7QUFDdkI7Q0FDQyw2REFBNkQ7Q0FDN0Q7OztBQUdELDJCQUEyQjs7QUFFM0I7Q0FDQyxzQ0FBc0M7Q0FDdEMsa0JBQWtCO0NBQ2xCO0FBQ0Q7O0NBRUMsc0JBQXNCO0NBQ3RCLDZCQUE2QjtDQUM3QixXQUFXO0NBQ1gsWUFBWTtDQUNaLGlCQUFpQjtDQUNqQixjQUFjO0NBQ2Qsa0JBQWtCO0NBQ2xCLHFCQUFxQjtDQUNyQixZQUFZO0NBQ1o7QUFDRDs7Q0FFQyw0QkFBNEI7Q0FDNUIsNEJBQTRCO0NBQzVCLGNBQWM7Q0FDZDtBQUNEO0NBQ0MseUJBQXlCO0NBQ3pCO0FBQ0Q7Q0FDQywyQkFBMkI7Q0FDM0IsNEJBQTRCO0NBQzVCO0FBQ0Q7Q0FDQyw4QkFBOEI7Q0FDOUIsK0JBQStCO0NBQy9CLG1CQUFtQjtDQUNuQjtBQUNEO0NBQ0MsZUFBZTtDQUNmLHlCQUF5QjtDQUN6QixXQUFXO0NBQ1g7O0FBRUQ7Q0FDQyxXQUFXO0NBQ1gsWUFBWTtDQUNaLGlCQUFpQjtDQUNqQjtBQUNEO0NBQ0MsMkJBQTJCO0NBQzNCLDRCQUE0QjtDQUM1QjtBQUNEO0NBQ0MsOEJBQThCO0NBQzlCLCtCQUErQjtDQUMvQjs7QUFFRCxpQkFBaUI7O0FBRWpCOztDQUVDLG1EQUFtRDtDQUNuRCxnQkFBZ0I7Q0FDaEI7O0FBRUQ7Q0FDQyxlQUFlO0NBQ2Y7OztBQUdELG1CQUFtQjs7QUFFbkI7Q0FDQyxxQ0FBcUM7Q0FDckMsZ0JBQWdCO0NBQ2hCLGtCQUFrQjtDQUNsQjtBQUNEO0NBQ0MseURBQXdDO0NBQ3hDLFdBQVc7Q0FDWCxZQUFZO0NBQ1o7QUFDRDtDQUNDLHlEQUEyQztDQUMzQywwQkFBMEI7Q0FDMUI7QUFDRDtDQUNDLFdBQVc7Q0FDWCxZQUFZO0NBQ1o7QUFDRDs7Q0FFQyxhQUFhO0NBQ2I7QUFDRDtDQUNDLGNBQWM7Q0FDZCxrQkFBa0I7Q0FDbEI7QUFDRDtDQUNDLHlCQUF5QjtDQUN6QixXQUFXO0NBQ1gsZ0JBQWdCO0NBQ2hCO0FBQ0Q7Q0FDQyxrQkFBa0I7Q0FDbEIsa0JBQWtCO0NBQ2xCLGtCQUFrQjtDQUNsQjtBQUNEO0NBQ0MsZUFBZTtDQUNmLGtCQUFrQjtDQUNsQixRQUFRO0NBQ1I7QUFDRDtDQUNDLGNBQWM7Q0FDZDtBQUNEO0NBQ0MsU0FBUztDQUNULDBCQUEwQjtDQUMxQiwwQkFBMEI7Q0FDMUI7O0FBRUQsc0JBQXNCO0FBQ3RCO0NBQ0MseURBQTZDO0NBQzdDOzs7QUFHRCxtQ0FBbUM7O0FBRW5DO0NBQ0MsZ0JBQWdCO0NBQ2hCLG9DQUFvQztDQUNwQyxTQUFTO0NBQ1Q7QUFDRDs7Q0FFQyxjQUFjO0NBQ2QsV0FBVztDQUNYO0FBQ0Q7Q0FDQyxxQkFBcUI7Q0FDckI7QUFDRDtDQUNDLDBCQUEwQjtDQUMxQjtBQUNEOztDQUVDLGVBQWU7Q0FDZjtBQUNEO0NBQ0MsZ0JBQWdCO0NBQ2hCO0FBQ0Q7Q0FDQyxrQkFBa0I7Q0FDbEI7QUFDRDtDQUNDLHNCQUFzQjtDQUN0QixnQkFBZ0I7Q0FDaEIsZ0JBQWdCO0NBQ2hCLG9CQUFvQjtDQUNwQixlQUFlO0NBQ2YsbUJBQW1CO0NBQ25CLGdCQUFnQjtDQUNoQiwyQkFBMkI7TUFDdEIsc0JBQXNCOztDQUUzQixnQkFBZ0I7Q0FDaEIsb0NBQW9DO0NBQ3BDO0FBQ0Q7Q0FDQywwQkFBMEI7Q0FDMUIsbUJBQW1CO0NBQ25CLGdCQUFnQjtDQUNoQjtBQUNEO0NBQ0MsNkJBQTZCO0NBQzdCOztBQUVEOzs7Q0FHQyxnQkFBZ0I7Q0FDaEI7QUFDRDs7Q0FFQyxpQ0FBaUM7Q0FDakMsNEJBQTRCO0NBQzVCOzs7QUFHRCxVQUFVOztBQUVWO0NBQ0Msa0JBQWtCO0NBQ2xCLGtCQUFrQjtDQUNsQixtQkFBbUI7Q0FDbkI7QUFDRDtDQUNDLFlBQVk7Q0FDWixnQkFBZ0I7Q0FDaEIsbUJBQW1CO0NBQ25CO0FBQ0Q7Q0FDQyxpQkFBaUI7Q0FDakIsZ0JBQWdCO0NBQ2hCO0FBQ0Q7Q0FDQyxjQUFjO0NBQ2Q7QUFDRDtDQUNDLFdBQVc7Q0FDWCxZQUFZO0NBQ1osa0JBQWtCO0NBQ2xCLFNBQVM7Q0FDVCxrQkFBa0I7Q0FDbEIsZ0JBQWdCO0NBQ2hCLG9CQUFvQjtDQUNwQjtBQUNEO0NBQ0MsV0FBVztDQUNYLFlBQVk7Q0FDWixZQUFZOztDQUVaLG9CQUFvQjs7Q0FFcEIsZ0NBQWdDO0lBQzdCLDZCQUE2QjtLQUM1Qiw0QkFBNEI7U0FDeEIsd0JBQXdCO0NBQ2hDO0FBQ0Q7O0NBRUMsaUJBQWlCO0NBQ2pCLFdBQVc7Q0FDWCxzQ0FBc0M7Q0FDdEM7QUFDRDtDQUNDLGtCQUFrQjtDQUNsQixNQUFNO0NBQ04sUUFBUTtDQUNSLG9CQUFvQjtDQUNwQixZQUFZO0NBQ1osa0JBQWtCO0NBQ2xCLFdBQVc7Q0FDWCxZQUFZO0NBQ1osMkNBQTJDO0NBQzNDLGNBQWM7Q0FDZCxxQkFBcUI7Q0FDckIsaUJBQWlCO0NBQ2pCLHVCQUF1QjtDQUN2QjtBQUNEO0NBQ0MsV0FBVztDQUNYO0FBQ0Q7Q0FDQyxjQUFjO0NBQ2QsNkJBQTZCO0NBQzdCLDBCQUEwQjtDQUMxQjs7QUFFRDtDQUNDLFdBQVc7Q0FDWDtBQUNEO0NBQ0MsV0FBVztDQUNYLGNBQWM7O0NBRWQsdUhBQXVIO0NBQ3ZILGlIQUFpSDtDQUNqSDtBQUNEO0NBQ0MsZ0JBQWdCO0NBQ2hCOztBQUVEOzs7O0NBSUMsc0JBQXNCO0NBQ3RCOzs7QUFHRCxhQUFhOztBQUViO0NBQ0MsZ0JBQWdCO0NBQ2hCLHNCQUFzQjtDQUN0Qjs7O0FBR0QsWUFBWTtBQUNaLG1EQUFtRDtBQUNuRDtDQUNDLGtCQUFrQjtDQUNsQixZQUFZO0NBQ1osc0JBQXNCO0NBQ3RCLHNCQUFzQjtDQUN0QixrQkFBa0I7Q0FDbEIsV0FBVztDQUNYLG1CQUFtQjtDQUNuQix5QkFBeUI7Q0FDekIsc0JBQXNCO0NBQ3RCLHFCQUFxQjtDQUNyQixpQkFBaUI7Q0FDakIsb0JBQW9CO0NBQ3BCLHFDQUFxQztDQUNyQztBQUNEO0NBQ0MsZUFBZTtDQUNmLG9CQUFvQjtDQUNwQjtBQUNEOzs7O0NBSUMsa0JBQWtCO0NBQ2xCLG9CQUFvQjtDQUNwQiw2QkFBNkI7Q0FDN0IsdUJBQXVCO0NBQ3ZCLFdBQVc7Q0FDWDs7QUFFRCxlQUFlOztBQUVmO0NBQ0MsZUFBZTtBQUNoQjtBQUNBO0NBQ0MsZ0JBQWdCO0FBQ2pCO0FBQ0E7O0NBRUMsU0FBUztDQUNULGlCQUFpQjtDQUNqQjtBQUNEO0NBQ0MsU0FBUztDQUNULG9CQUFvQjtDQUNwQixzQkFBc0I7Q0FDdEI7QUFDRDtDQUNDLE1BQU07Q0FDTixpQkFBaUI7Q0FDakIsaUJBQWlCO0NBQ2pCLHlCQUF5QjtDQUN6QjtBQUNEO0NBQ0MsaUJBQWlCO0FBQ2xCO0FBQ0E7Q0FDQyxnQkFBZ0I7QUFDakI7QUFDQTs7Q0FFQyxRQUFRO0NBQ1IsZ0JBQWdCO0NBQ2hCO0FBQ0Q7Q0FDQyxRQUFRO0NBQ1IsbUJBQW1CO0NBQ25CLHVCQUF1QjtDQUN2QjtBQUNEO0NBQ0MsT0FBTztDQUNQLGtCQUFrQjtDQUNsQix3QkFBd0I7Q0FDeEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyogcmVxdWlyZWQgc3R5bGVzICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtcGFuZSxcXHJcXG4ubGVhZmxldC10aWxlLFxcclxcbi5sZWFmbGV0LW1hcmtlci1pY29uLFxcclxcbi5sZWFmbGV0LW1hcmtlci1zaGFkb3csXFxyXFxuLmxlYWZsZXQtdGlsZS1jb250YWluZXIsXFxyXFxuLmxlYWZsZXQtcGFuZSA+IHN2ZyxcXHJcXG4ubGVhZmxldC1wYW5lID4gY2FudmFzLFxcclxcbi5sZWFmbGV0LXpvb20tYm94LFxcclxcbi5sZWFmbGV0LWltYWdlLWxheWVyLFxcclxcbi5sZWFmbGV0LWxheWVyIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0bGVmdDogMDtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdGlsZSxcXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93IHtcXHJcXG5cXHQtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdCAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0ICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHQgIC13ZWJraXQtdXNlci1kcmFnOiBub25lO1xcclxcblxcdH1cXHJcXG4vKiBQcmV2ZW50cyBJRTExIGZyb20gaGlnaGxpZ2h0aW5nIHRpbGVzIGluIGJsdWUgKi9cXHJcXG4ubGVhZmxldC10aWxlOjpzZWxlY3Rpb24ge1xcclxcblxcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcbn1cXHJcXG4vKiBTYWZhcmkgcmVuZGVycyBub24tcmV0aW5hIHRpbGUgb24gcmV0aW5hIGJldHRlciB3aXRoIHRoaXMsIGJ1dCBDaHJvbWUgaXMgd29yc2UgKi9cXHJcXG4ubGVhZmxldC1zYWZhcmkgLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0aW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0O1xcclxcblxcdH1cXHJcXG4vKiBoYWNrIHRoYXQgcHJldmVudHMgaHcgbGF5ZXJzIFxcXCJzdHJldGNoaW5nXFxcIiB3aGVuIGxvYWRpbmcgbmV3IHRpbGVzICovXFxyXFxuLmxlYWZsZXQtc2FmYXJpIC5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHtcXHJcXG5cXHR3aWR0aDogMTYwMHB4O1xcclxcblxcdGhlaWdodDogMTYwMHB4O1xcclxcblxcdC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93IHtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHR9XFxyXFxuLyogLmxlYWZsZXQtY29udGFpbmVyIHN2ZzogcmVzZXQgc3ZnIG1heC13aWR0aCBkZWNsZXJhdGlvbiBzaGlwcGVkIGluIEpvb21sYSEgKGpvb21sYS5vcmcpIDMueCAqL1xcclxcbi8qIC5sZWFmbGV0LWNvbnRhaW5lciBpbWc6IG1hcCBpcyBicm9rZW4gaW4gRkYgaWYgeW91IGhhdmUgbWF4LXdpZHRoOiAxMDAlIG9uIHRpbGVzICovXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LW92ZXJsYXktcGFuZSBzdmcsXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LW1hcmtlci1wYW5lIGltZyxcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtc2hhZG93LXBhbmUgaW1nLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC10aWxlLXBhbmUgaW1nLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBpbWcubGVhZmxldC1pbWFnZS1sYXllcixcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0bWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XFxyXFxuXFx0bWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50O1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC16b29tIHtcXHJcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTtcXHJcXG5cXHR0b3VjaC1hY3Rpb246IHBhbi14IHBhbi15O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC1kcmFnIHtcXHJcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBwaW5jaC16b29tO1xcclxcblxcdC8qIEZhbGxiYWNrIGZvciBGRiB3aGljaCBkb2Vzbid0IHN1cHBvcnQgcGluY2gtem9vbSAqL1xcclxcblxcdHRvdWNoLWFjdGlvbjogbm9uZTtcXHJcXG5cXHR0b3VjaC1hY3Rpb246IHBpbmNoLXpvb207XFxyXFxufVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lci5sZWFmbGV0LXRvdWNoLWRyYWcubGVhZmxldC10b3VjaC16b29tIHtcXHJcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xcclxcblxcdHRvdWNoLWFjdGlvbjogbm9uZTtcXHJcXG59XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIHtcXHJcXG5cXHQtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbn1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYSB7XFxyXFxuXFx0LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDUxLCAxODEsIDIyOSwgMC40KTtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0ZmlsdGVyOiBpbmhlcml0O1xcclxcblxcdHZpc2liaWxpdHk6IGhpZGRlbjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdGlsZS1sb2FkZWQge1xcclxcblxcdHZpc2liaWxpdHk6IGluaGVyaXQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYm94IHtcXHJcXG5cXHR3aWR0aDogMDtcXHJcXG5cXHRoZWlnaHQ6IDA7XFxyXFxuXFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcblxcdCAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG5cXHR6LWluZGV4OiA4MDA7XFxyXFxuXFx0fVxcclxcbi8qIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4ODMxOSAqL1xcclxcbi5sZWFmbGV0LW92ZXJsYXktcGFuZSBzdmcge1xcclxcblxcdC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXBhbmUgICAgICAgICB7IHotaW5kZXg6IDQwMDsgfVxcclxcblxcclxcbi5sZWFmbGV0LXRpbGUtcGFuZSAgICB7IHotaW5kZXg6IDIwMDsgfVxcclxcbi5sZWFmbGV0LW92ZXJsYXktcGFuZSB7IHotaW5kZXg6IDQwMDsgfVxcclxcbi5sZWFmbGV0LXNoYWRvdy1wYW5lICB7IHotaW5kZXg6IDUwMDsgfVxcclxcbi5sZWFmbGV0LW1hcmtlci1wYW5lICB7IHotaW5kZXg6IDYwMDsgfVxcclxcbi5sZWFmbGV0LXRvb2x0aXAtcGFuZSAgIHsgei1pbmRleDogNjUwOyB9XFxyXFxuLmxlYWZsZXQtcG9wdXAtcGFuZSAgIHsgei1pbmRleDogNzAwOyB9XFxyXFxuXFxyXFxuLmxlYWZsZXQtbWFwLXBhbmUgY2FudmFzIHsgei1pbmRleDogMTAwOyB9XFxyXFxuLmxlYWZsZXQtbWFwLXBhbmUgc3ZnICAgIHsgei1pbmRleDogMjAwOyB9XFxyXFxuXFxyXFxuLmxlYWZsZXQtdm1sLXNoYXBlIHtcXHJcXG5cXHR3aWR0aDogMXB4O1xcclxcblxcdGhlaWdodDogMXB4O1xcclxcblxcdH1cXHJcXG4ubHZtbCB7XFxyXFxuXFx0YmVoYXZpb3I6IHVybCgjZGVmYXVsdCNWTUwpO1xcclxcblxcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGNvbnRyb2wgcG9zaXRpb25pbmcgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFx0ei1pbmRleDogODAwO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiB2aXNpYmxlUGFpbnRlZDsgLyogSUUgOS0xMCBkb2Vzbid0IGhhdmUgYXV0byAqL1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3AsXFxyXFxuLmxlYWZsZXQtYm90dG9tIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0ei1pbmRleDogMTAwMDtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9wIHtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXJpZ2h0IHtcXHJcXG5cXHRyaWdodDogMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYm90dG9tIHtcXHJcXG5cXHRib3R0b206IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWxlZnQge1xcclxcblxcdGxlZnQ6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wge1xcclxcblxcdGZsb2F0OiBsZWZ0O1xcclxcblxcdGNsZWFyOiBib3RoO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1yaWdodCAubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRmbG9hdDogcmlnaHQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvcCAubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRtYXJnaW4tdG9wOiAxMHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLWJvdHRvbTogMTBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtbGVmdCAubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRtYXJnaW4tbGVmdDogMTBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcmlnaHQgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLXJpZ2h0OiAxMHB4O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiB6b29tIGFuZCBmYWRlIGFuaW1hdGlvbnMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1mYWRlLWFuaW0gLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0d2lsbC1jaGFuZ2U6IG9wYWNpdHk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWZhZGUtYW5pbSAubGVhZmxldC1wb3B1cCB7XFxyXFxuXFx0b3BhY2l0eTogMDtcXHJcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBsaW5lYXI7XFxyXFxuXFx0ICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyO1xcclxcblxcdCAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtZmFkZS1hbmltIC5sZWFmbGV0LW1hcC1wYW5lIC5sZWFmbGV0LXBvcHVwIHtcXHJcXG5cXHRvcGFjaXR5OiAxO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWFuaW1hdGVkIHtcXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHQgICAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXpvb20tYW5pbWF0ZWQge1xcclxcblxcdHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHtcXHJcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTtcXHJcXG5cXHQgICAtbW96LXRyYW5zaXRpb246ICAgIC1tb3otdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTtcXHJcXG5cXHQgICAgICAgIHRyYW5zaXRpb246ICAgICAgICAgdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXRpbGUsXFxyXFxuLmxlYWZsZXQtcGFuLWFuaW0gLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiBub25lO1xcclxcblxcdCAgIC1tb3otdHJhbnNpdGlvbjogbm9uZTtcXHJcXG5cXHQgICAgICAgIHRyYW5zaXRpb246IG5vbmU7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWhpZGUge1xcclxcblxcdHZpc2liaWxpdHk6IGhpZGRlbjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogY3Vyc29ycyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWludGVyYWN0aXZlIHtcXHJcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWdyYWIge1xcclxcblxcdGN1cnNvcjogLXdlYmtpdC1ncmFiO1xcclxcblxcdGN1cnNvcjogICAgLW1vei1ncmFiO1xcclxcblxcdGN1cnNvcjogICAgICAgICBncmFiO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jcm9zc2hhaXIsXFxyXFxuLmxlYWZsZXQtY3Jvc3NoYWlyIC5sZWFmbGV0LWludGVyYWN0aXZlIHtcXHJcXG5cXHRjdXJzb3I6IGNyb3NzaGFpcjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtcGFuZSxcXHJcXG4ubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRjdXJzb3I6IGF1dG87XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWRyYWdnaW5nIC5sZWFmbGV0LWdyYWIsXFxyXFxuLmxlYWZsZXQtZHJhZ2dpbmcgLmxlYWZsZXQtZ3JhYiAubGVhZmxldC1pbnRlcmFjdGl2ZSxcXHJcXG4ubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIHtcXHJcXG5cXHRjdXJzb3I6IG1vdmU7XFxyXFxuXFx0Y3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nO1xcclxcblxcdGN1cnNvcjogICAgLW1vei1ncmFiYmluZztcXHJcXG5cXHRjdXJzb3I6ICAgICAgICAgZ3JhYmJpbmc7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIG1hcmtlciAmIG92ZXJsYXlzIGludGVyYWN0aXZpdHkgKi9cXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93LFxcclxcbi5sZWFmbGV0LWltYWdlLWxheWVyLFxcclxcbi5sZWFmbGV0LXBhbmUgPiBzdmcgcGF0aCxcXHJcXG4ubGVhZmxldC10aWxlLWNvbnRhaW5lciB7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LW1hcmtlci1pY29uLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuLmxlYWZsZXQtaW1hZ2UtbGF5ZXIubGVhZmxldC1pbnRlcmFjdGl2ZSxcXHJcXG4ubGVhZmxldC1wYW5lID4gc3ZnIHBhdGgubGVhZmxldC1pbnRlcmFjdGl2ZSxcXHJcXG5zdmcubGVhZmxldC1pbWFnZS1sYXllci5sZWFmbGV0LWludGVyYWN0aXZlIHBhdGgge1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiB2aXNpYmxlUGFpbnRlZDsgLyogSUUgOS0xMCBkb2Vzbid0IGhhdmUgYXV0byAqL1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcclxcblxcdH1cXHJcXG5cXHJcXG4vKiB2aXN1YWwgdHdlYWtzICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZGRkO1xcclxcblxcdG91dGxpbmU6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBhIHtcXHJcXG5cXHRjb2xvcjogIzAwNzhBODtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIGEubGVhZmxldC1hY3RpdmUge1xcclxcblxcdG91dGxpbmU6IDJweCBzb2xpZCBvcmFuZ2U7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYm94IHtcXHJcXG5cXHRib3JkZXI6IDJweCBkb3R0ZWQgIzM4ZjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGdlbmVyYWwgdHlwb2dyYXBoeSAqL1xcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0Zm9udDogMTJweC8xLjUgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogZ2VuZXJhbCB0b29sYmFyIHN0eWxlcyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWJhciB7XFxyXFxuXFx0Ym94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC42NSk7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogNHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYSxcXHJcXG4ubGVhZmxldC1iYXIgYTpob3ZlciB7XFxyXFxuXFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXHJcXG5cXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcXHJcXG5cXHR3aWR0aDogMjZweDtcXHJcXG5cXHRoZWlnaHQ6IDI2cHg7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDI2cHg7XFxyXFxuXFx0ZGlzcGxheTogYmxvY2s7XFxyXFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcclxcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXHJcXG5cXHRjb2xvcjogYmxhY2s7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJhciBhLFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0YmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTtcXHJcXG5cXHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYTpob3ZlciB7XFxyXFxuXFx0YmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGE6Zmlyc3QtY2hpbGQge1xcclxcblxcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcXHJcXG5cXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYTpsYXN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcXHJcXG5cXHRib3JkZXItYm90dG9tOiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYS5sZWFmbGV0LWRpc2FibGVkIHtcXHJcXG5cXHRjdXJzb3I6IGRlZmF1bHQ7XFxyXFxuXFx0YmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcXHJcXG5cXHRjb2xvcjogI2JiYjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIGEge1xcclxcblxcdHdpZHRoOiAzMHB4O1xcclxcblxcdGhlaWdodDogMzBweDtcXHJcXG5cXHRsaW5lLWhlaWdodDogMzBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIGE6Zmlyc3QtY2hpbGQge1xcclxcblxcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDtcXHJcXG5cXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpsYXN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLyogem9vbSBjb250cm9sICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udHJvbC16b29tLWluLFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtem9vbS1vdXQge1xcclxcblxcdGZvbnQ6IGJvbGQgMThweCAnTHVjaWRhIENvbnNvbGUnLCBNb25hY28sIG1vbm9zcGFjZTtcXHJcXG5cXHR0ZXh0LWluZGVudDogMXB4O1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLXpvb20taW4sIC5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtem9vbS1vdXQgIHtcXHJcXG5cXHRmb250LXNpemU6IDIycHg7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGxheWVycyBjb250cm9sICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMge1xcclxcblxcdGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuNCk7XFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHRib3JkZXItcmFkaXVzOiA1cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9sYXllcnMucG5nKTtcXHJcXG5cXHR3aWR0aDogMzZweDtcXHJcXG5cXHRoZWlnaHQ6IDM2cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXJldGluYSAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbGF5ZXJzLTJ4LnBuZyk7XFxyXFxuXFx0YmFja2dyb3VuZC1zaXplOiAyNnB4IDI2cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0d2lkdGg6IDQ0cHg7XFxyXFxuXFx0aGVpZ2h0OiA0NHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycyAubGVhZmxldC1jb250cm9sLWxheWVycy1saXN0LFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0ZGlzcGxheTogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtbGlzdCB7XFxyXFxuXFx0ZGlzcGxheTogYmxvY2s7XFxyXFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCB7XFxyXFxuXFx0cGFkZGluZzogNnB4IDEwcHggNnB4IDZweDtcXHJcXG5cXHRjb2xvcjogIzMzMztcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXIge1xcclxcblxcdG92ZXJmbG93LXk6IHNjcm9sbDtcXHJcXG5cXHRvdmVyZmxvdy14OiBoaWRkZW47XFxyXFxuXFx0cGFkZGluZy1yaWdodDogNXB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciB7XFxyXFxuXFx0bWFyZ2luLXRvcDogMnB4O1xcclxcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHR0b3A6IDFweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMgbGFiZWwge1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1zZXBhcmF0b3Ige1xcclxcblxcdGhlaWdodDogMDtcXHJcXG5cXHRib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcXHJcXG5cXHRtYXJnaW46IDVweCAtMTBweCA1cHggLTZweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLyogRGVmYXVsdCBpY29uIFVSTHMgKi9cXHJcXG4ubGVhZmxldC1kZWZhdWx0LWljb24tcGF0aCB7XFxyXFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9tYXJrZXItaWNvbi5wbmcpO1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBhdHRyaWJ1dGlvbiBhbmQgc2NhbGUgY29udHJvbHMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiB7XFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XFxyXFxuXFx0bWFyZ2luOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7XFxyXFxuXFx0cGFkZGluZzogMCA1cHg7XFxyXFxuXFx0Y29sb3I6ICMzMzM7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24gYSB7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGE6aG92ZXIge1xcclxcblxcdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbixcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7XFxyXFxuXFx0Zm9udC1zaXplOiAxMXB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1sZWZ0IC5sZWFmbGV0LWNvbnRyb2wtc2NhbGUge1xcclxcblxcdG1hcmdpbi1sZWZ0OiA1cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJvdHRvbSAubGVhZmxldC1jb250cm9sLXNjYWxlIHtcXHJcXG5cXHRtYXJnaW4tYm90dG9tOiA1cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7XFxyXFxuXFx0Ym9yZGVyOiAycHggc29saWQgIzc3NztcXHJcXG5cXHRib3JkZXItdG9wOiBub25lO1xcclxcblxcdGxpbmUtaGVpZ2h0OiAxLjE7XFxyXFxuXFx0cGFkZGluZzogMnB4IDVweCAxcHg7XFxyXFxuXFx0Zm9udC1zaXplOiAxMXB4O1xcclxcblxcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG5cXHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuXFx0ICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcblxcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmU6bm90KDpmaXJzdC1jaGlsZCkge1xcclxcblxcdGJvcmRlci10b3A6IDJweCBzb2xpZCAjNzc3O1xcclxcblxcdGJvcmRlci1ib3R0b206IG5vbmU7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTJweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1zY2FsZS1saW5lOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xcclxcblxcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNzc3O1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLFxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLFxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciB7XFxyXFxuXFx0Ym94LXNoYWRvdzogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMsXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIHtcXHJcXG5cXHRib3JkZXI6IDJweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7XFxyXFxuXFx0YmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogcG9wdXAgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1wb3B1cCB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG5cXHRtYXJnaW4tYm90dG9tOiAyMHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXIge1xcclxcblxcdHBhZGRpbmc6IDFweDtcXHJcXG5cXHR0ZXh0LWFsaWduOiBsZWZ0O1xcclxcblxcdGJvcmRlci1yYWRpdXM6IDEycHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQge1xcclxcblxcdG1hcmdpbjogMTNweCAxOXB4O1xcclxcblxcdGxpbmUtaGVpZ2h0OiAxLjQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgcCB7XFxyXFxuXFx0bWFyZ2luOiAxOHB4IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIge1xcclxcblxcdHdpZHRoOiA0MHB4O1xcclxcblxcdGhlaWdodDogMjBweDtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0bGVmdDogNTAlO1xcclxcblxcdG1hcmdpbi1sZWZ0OiAtMjBweDtcXHJcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1wb3B1cC10aXAge1xcclxcblxcdHdpZHRoOiAxN3B4O1xcclxcblxcdGhlaWdodDogMTdweDtcXHJcXG5cXHRwYWRkaW5nOiAxcHg7XFxyXFxuXFxyXFxuXFx0bWFyZ2luOiAtMTBweCBhdXRvIDA7XFxyXFxuXFxyXFxuXFx0LXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0ICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0ICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0ICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlcixcXHJcXG4ubGVhZmxldC1wb3B1cC10aXAge1xcclxcblxcdGJhY2tncm91bmQ6IHdoaXRlO1xcclxcblxcdGNvbG9yOiAjMzMzO1xcclxcblxcdGJveC1zaGFkb3c6IDAgM3B4IDE0cHggcmdiYSgwLDAsMCwwLjQpO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbiB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHRvcDogMDtcXHJcXG5cXHRyaWdodDogMDtcXHJcXG5cXHRwYWRkaW5nOiA0cHggNHB4IDAgMDtcXHJcXG5cXHRib3JkZXI6IG5vbmU7XFxyXFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcclxcblxcdHdpZHRoOiAxOHB4O1xcclxcblxcdGhlaWdodDogMTRweDtcXHJcXG5cXHRmb250OiAxNnB4LzE0cHggVGFob21hLCBWZXJkYW5hLCBzYW5zLXNlcmlmO1xcclxcblxcdGNvbG9yOiAjYzNjM2MzO1xcclxcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXHJcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXHJcXG5cXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIGEubGVhZmxldC1wb3B1cC1jbG9zZS1idXR0b246aG92ZXIge1xcclxcblxcdGNvbG9yOiAjOTk5O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1wb3B1cC1zY3JvbGxlZCB7XFxyXFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XFxyXFxuXFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciB7XFxyXFxuXFx0LW1zLXpvb206IDE7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcCB7XFxyXFxuXFx0d2lkdGg6IDI0cHg7XFxyXFxuXFx0bWFyZ2luOiAwIGF1dG87XFxyXFxuXFxyXFxuXFx0LW1zLWZpbHRlcjogXFxcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5NYXRyaXgoTTExPTAuNzA3MTA2NzgsIE0xMj0wLjcwNzEwNjc4LCBNMjE9LTAuNzA3MTA2NzgsIE0yMj0wLjcwNzEwNjc4KVxcXCI7XFxyXFxuXFx0ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIge1xcclxcblxcdG1hcmdpbi10b3A6IC0xcHg7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LWNvbnRyb2wtem9vbSxcXHJcXG4ubGVhZmxldC1vbGRpZSAubGVhZmxldC1jb250cm9sLWxheWVycyxcXHJcXG4ubGVhZmxldC1vbGRpZSAubGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXIsXFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwIHtcXHJcXG5cXHRib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBkaXYgaWNvbiAqL1xcclxcblxcclxcbi5sZWFmbGV0LWRpdi1pY29uIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdGJvcmRlcjogMXB4IHNvbGlkICM2NjY7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIFRvb2x0aXAgKi9cXHJcXG4vKiBCYXNlIHN0eWxlcyBmb3IgdGhlIGVsZW1lbnQgdGhhdCBoYXMgYSB0b29sdGlwICovXFxyXFxuLmxlYWZsZXQtdG9vbHRpcCB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHBhZGRpbmc6IDZweDtcXHJcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcclxcblxcdGJvcmRlcjogMXB4IHNvbGlkICNmZmY7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogM3B4O1xcclxcblxcdGNvbG9yOiAjMjIyO1xcclxcblxcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuXFx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHQtbW96LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHR1c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG5cXHRib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQpO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLmxlYWZsZXQtY2xpY2thYmxlIHtcXHJcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IGF1dG87XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvb2x0aXAtdG9wOmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLWJvdHRvbTpiZWZvcmUsXFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0OmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdGJvcmRlcjogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcclxcblxcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcblxcdH1cXHJcXG5cXHJcXG4vKiBEaXJlY3Rpb25zICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1ib3R0b20ge1xcclxcblxcdG1hcmdpbi10b3A6IDZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC10b3Age1xcclxcblxcdG1hcmdpbi10b3A6IC02cHg7XFxyXFxufVxcclxcbi5sZWFmbGV0LXRvb2x0aXAtYm90dG9tOmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLXRvcDpiZWZvcmUge1xcclxcblxcdGxlZnQ6IDUwJTtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTZweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC10b3A6YmVmb3JlIHtcXHJcXG5cXHRib3R0b206IDA7XFxyXFxuXFx0bWFyZ2luLWJvdHRvbTogLTEycHg7XFxyXFxuXFx0Ym9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1ib3R0b206YmVmb3JlIHtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTEycHg7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IC02cHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0IHtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1yaWdodCB7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IDZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0OmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XFxyXFxuXFx0dG9wOiA1MCU7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTZweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0OmJlZm9yZSB7XFxyXFxuXFx0cmlnaHQ6IDA7XFxyXFxuXFx0bWFyZ2luLXJpZ2h0OiAtMTJweDtcXHJcXG5cXHRib3JkZXItbGVmdC1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1yaWdodDpiZWZvcmUge1xcclxcblxcdGxlZnQ6IDA7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IC0xMnB4O1xcclxcblxcdGJvcmRlci1yaWdodC1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21haW4uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21haW4uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tYWluLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FwcC5jc3NcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8wX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qISBIVE1MNSBCb2lsZXJwbGF0ZSB2NS4wIHwgTUlUIExpY2Vuc2UgfCBodHRwOi8vaDVicC5jb20vICovXFxuXFxuaHRtbCB7XFxuICAgIGNvbG9yOiAjMjIyO1xcbiAgICBmb250LXNpemU6IDFlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcXG59XFxuXFxuOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbjo6LW1vei1zZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuOjpzZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuYm9keSB7XFxuICBtYXJnaW46IDA7XFxuICB3aWR0aDogMTAwdnc7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XFxufVxcblxcbmhyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGhlaWdodDogMXB4O1xcbiAgICBib3JkZXI6IDA7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjO1xcbiAgICBtYXJnaW46IDFlbSAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5hdWRpbyxcXG5jYW52YXMsXFxuaWZyYW1lLFxcbmltZyxcXG5zdmcsXFxudmlkZW8ge1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5zZWxlY3QsIHRleHRhcmVhIHtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggYmxhY2s7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgICBhcHBlYXJhbmNlOiBub25lO1xcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDBweDtcXG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAwcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDBweDtcXG4gICAgd2lkdGg6IDEwMHB4O1xcbiAgICBwYWRkaW5nOiAxMHB4IDA7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG50ZXh0YXJlYSB7XFxuICAgIHJlc2l6ZTogdmVydGljYWw7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDI1cHg7XFxufVxcblxcbmJ1dHRvbiB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IGhvdHBpbms7XFxuICAgIHBhZGRpbmc6IDEwcHg7XFxuICAgIHdpZHRoOiAxMDBweDtcXG4gICAgY29sb3I6IHdoaXRlO1xcbn1cXG5cXG4uZm9ybS1ncm91cCB7XFxuICBtYXJnaW46IDIwcHggMDtcXG59XFxuXFxuLmJyb3dzZXJ1cGdyYWRlIHtcXG4gICAgbWFyZ2luOiAwLjJlbSAwO1xcbiAgICBiYWNrZ3JvdW5kOiAjY2NjO1xcbiAgICBjb2xvcjogIzAwMDtcXG4gICAgcGFkZGluZzogMC4yZW0gMDtcXG59XFxuXFxuXFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gICBBdXRob3IncyBjdXN0b20gc3R5bGVzXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiAgIE1lZGlhIFF1ZXJpZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjguNzVlbSkge1xcbiAgICAjbGVmdCB7XFxuICAgICAgICB3aWR0aDogNDUlO1xcbiAgICB9XFxuXFxuICAgICNyaWdodCB7XFxuICAgICAgICB3aWR0aDogNDUlO1xcbiAgICB9XFxufVxcblxcbkBtZWRpYSBwcmludCxcXG4gICAgICAgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDUvNCksXFxuICAgICAgICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDEuMjUpLFxcbiAgICAgICAobWluLXJlc29sdXRpb246IDEyMGRwaSkge1xcblxcbn1cXG5cXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiAgIEhlbHBlciBjbGFzc2VzXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG4uaGlkZGVuIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcblxcbi52aXN1YWxseWhpZGRlbiB7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcXG4gICAgaGVpZ2h0OiAxcHg7XFxuICAgIG1hcmdpbjogLTFweDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB3aWR0aDogMXB4O1xcbn1cXG5cXG4udmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmFjdGl2ZSxcXG4udmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmZvY3VzIHtcXG4gICAgY2xpcDogYXV0bztcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICB3aWR0aDogYXV0bztcXG59XFxuXFxuLmludmlzaWJsZSB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuLmNsZWFyZml4OmJlZm9yZSxcXG4uY2xlYXJmaXg6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIFxcXCI7XFxuICAgIGRpc3BsYXk6IHRhYmxlO1xcbn1cXG5cXG4uY2xlYXJmaXg6YWZ0ZXIge1xcbiAgICBjbGVhcjogYm90aDtcXG59XFxuXFxuLmNsZWFyZml4IHtcXG4gICAgKnpvb206IDE7XFxufVxcblxcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuICAgUHJpbnQgc3R5bGVzXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG5AbWVkaWEgcHJpbnQge1xcbiAgICAqLFxcbiAgICAqOmJlZm9yZSxcXG4gICAgKjphZnRlciB7XFxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcXG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIH1cXG5cXG4gICAgYSxcXG4gICAgYTp2aXNpdGVkIHtcXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICB9XFxuXFxuICAgIGFbaHJlZl06YWZ0ZXIge1xcbiAgICAgICAgY29udGVudDogXFxcIiAoXFxcIiBhdHRyKGhyZWYpIFxcXCIpXFxcIjtcXG4gICAgfVxcblxcbiAgICBhYmJyW3RpdGxlXTphZnRlciB7XFxuICAgICAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIodGl0bGUpIFxcXCIpXFxcIjtcXG4gICAgfVxcblxcbiAgICBhW2hyZWZePVxcXCIjXFxcIl06YWZ0ZXIsXFxuICAgIGFbaHJlZl49XFxcImphdmFzY3JpcHQ6XFxcIl06YWZ0ZXIge1xcbiAgICAgICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIH1cXG5cXG4gICAgcHJlLFxcbiAgICBibG9ja3F1b3RlIHtcXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XFxuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICAgIH1cXG5cXG4gICAgdGhlYWQge1xcbiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xcbiAgICB9XFxuXFxuICAgIHRyLFxcbiAgICBpbWcge1xcbiAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xcbiAgICB9XFxuXFxuICAgIGltZyB7XFxuICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcXG4gICAgfVxcblxcbiAgICBwLFxcbiAgICBoMixcXG4gICAgaDMge1xcbiAgICAgICAgb3JwaGFuczogMztcXG4gICAgICAgIHdpZG93czogMztcXG4gICAgfVxcblxcbiAgICBoMixcXG4gICAgaDMge1xcbiAgICAgICAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7XFxuICAgIH1cXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vZnJhbWV3b3JrL3N0eWxlcy9tYWluLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSw2REFBNkQ7O0FBRTdEO0lBQ0ksV0FBVztJQUNYLGNBQWM7SUFDZCxnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxhQUFhO0FBQ2pCOztBQUVBO0lBQ0ksbUJBQW1CO0lBQ25CLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQixpQkFBaUI7QUFDckI7O0FBRUE7RUFDRSxTQUFTO0VBQ1QsWUFBWTtFQUNaLGFBQWE7RUFDYixhQUFhO0VBQ2IsbUJBQW1CO0FBQ3JCOztBQUVBO0lBQ0ksY0FBYztJQUNkLFdBQVc7SUFDWCxTQUFTO0lBQ1QsMEJBQTBCO0lBQzFCLGFBQWE7SUFDYixVQUFVO0FBQ2Q7O0FBRUE7Ozs7OztJQU1JLHNCQUFzQjtBQUMxQjs7QUFFQTtJQUNJLFNBQVM7SUFDVCxTQUFTO0lBQ1QsVUFBVTtBQUNkOztBQUVBO0lBQ0ksWUFBWTtJQUNaLDhCQUE4QjtJQUM5QixhQUFhO0lBQ2Isd0JBQXdCO0lBQ3hCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLHVCQUF1QjtJQUN2QixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGVBQWU7SUFDZix1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLFlBQVk7QUFDaEI7O0FBRUE7RUFDRSwwQkFBMEI7SUFDeEIsZUFBZTtJQUNmLFlBQVk7SUFDWix5QkFBeUI7SUFDekIsYUFBYTtJQUNiLFlBQVk7SUFDWixZQUFZO0FBQ2hCOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTtJQUNJLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLGdCQUFnQjtBQUNwQjs7O0FBR0E7OytFQUUrRTs7QUFJL0U7OytFQUUrRTs7QUFFL0U7SUFDSTtRQUNJLFVBQVU7SUFDZDs7SUFFQTtRQUNJLFVBQVU7SUFDZDtBQUNKOztBQUVBOzs7OztBQUtBOztBQUVBOzsrRUFFK0U7O0FBRS9FO0lBQ0ksd0JBQXdCO0lBQ3hCLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLFNBQVM7SUFDVCxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixVQUFVO0FBQ2Q7O0FBRUE7O0lBRUksVUFBVTtJQUNWLFlBQVk7SUFDWixTQUFTO0lBQ1QsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixXQUFXO0FBQ2Y7O0FBRUE7SUFDSSxrQkFBa0I7QUFDdEI7O0FBRUE7O0lBRUksWUFBWTtJQUNaLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxXQUFXO0FBQ2Y7O0FBRUE7S0FDSSxPQUFRO0FBQ1o7O0FBRUE7OytFQUUrRTs7QUFFL0U7SUFDSTs7O1FBR0ksa0NBQWtDO1FBQ2xDLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsNEJBQTRCO0lBQ2hDOztJQUVBOztRQUVJLDBCQUEwQjtJQUM5Qjs7SUFFQTtRQUNJLDRCQUE0QjtJQUNoQzs7SUFFQTtRQUNJLDZCQUE2QjtJQUNqQzs7SUFFQTs7UUFFSSxXQUFXO0lBQ2Y7O0lBRUE7O1FBRUksc0JBQXNCO1FBQ3RCLHdCQUF3QjtJQUM1Qjs7SUFFQTtRQUNJLDJCQUEyQjtJQUMvQjs7SUFFQTs7UUFFSSx3QkFBd0I7SUFDNUI7O0lBRUE7UUFDSSwwQkFBMEI7SUFDOUI7O0lBRUE7OztRQUdJLFVBQVU7UUFDVixTQUFTO0lBQ2I7O0lBRUE7O1FBRUksdUJBQXVCO0lBQzNCO0FBQ0pcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyohIEhUTUw1IEJvaWxlcnBsYXRlIHY1LjAgfCBNSVQgTGljZW5zZSB8IGh0dHA6Ly9oNWJwLmNvbS8gKi9cXG5cXG5odG1sIHtcXG4gICAgY29sb3I6ICMyMjI7XFxuICAgIGZvbnQtc2l6ZTogMWVtO1xcbiAgICBsaW5lLWhlaWdodDogMS40O1xcbn1cXG5cXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuOjotbW96LXNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQ6ICNiM2Q0ZmM7XFxuICAgIHRleHQtc2hhZG93OiBub25lO1xcbn1cXG5cXG46OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQ6ICNiM2Q0ZmM7XFxuICAgIHRleHQtc2hhZG93OiBub25lO1xcbn1cXG5cXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcXG59XFxuXFxuaHIge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgaGVpZ2h0OiAxcHg7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XFxuICAgIG1hcmdpbjogMWVtIDA7XFxuICAgIHBhZGRpbmc6IDA7XFxufVxcblxcbmF1ZGlvLFxcbmNhbnZhcyxcXG5pZnJhbWUsXFxuaW1nLFxcbnN2ZyxcXG52aWRlbyB7XFxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcblxcbmZpZWxkc2V0IHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIHBhZGRpbmc6IDA7XFxufVxcblxcbnNlbGVjdCwgdGV4dGFyZWEge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCBibGFjaztcXG4gICAgb3V0bGluZTogbm9uZTtcXG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAgIGFwcGVhcmFuY2U6IG5vbmU7XFxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDBweDtcXG4gICAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgICB3aWR0aDogMTAwcHg7XFxuICAgIHBhZGRpbmc6IDEwcHggMDtcXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcblxcbnRleHRhcmVhIHtcXG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMjVweDtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaG90cGluaztcXG4gICAgcGFkZGluZzogMTBweDtcXG4gICAgd2lkdGg6IDEwMHB4O1xcbiAgICBjb2xvcjogd2hpdGU7XFxufVxcblxcbi5mb3JtLWdyb3VwIHtcXG4gIG1hcmdpbjogMjBweCAwO1xcbn1cXG5cXG4uYnJvd3NlcnVwZ3JhZGUge1xcbiAgICBtYXJnaW46IDAuMmVtIDA7XFxuICAgIGJhY2tncm91bmQ6ICNjY2M7XFxuICAgIGNvbG9yOiAjMDAwO1xcbiAgICBwYWRkaW5nOiAwLjJlbSAwO1xcbn1cXG5cXG5cXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiAgIEF1dGhvcidzIGN1c3RvbSBzdHlsZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbkBpbXBvcnQgJ2FwcC5jc3MnO1xcblxcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuICAgTWVkaWEgUXVlcmllc1xcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2OC43NWVtKSB7XFxuICAgICNsZWZ0IHtcXG4gICAgICAgIHdpZHRoOiA0NSU7XFxuICAgIH1cXG5cXG4gICAgI3JpZ2h0IHtcXG4gICAgICAgIHdpZHRoOiA0NSU7XFxuICAgIH1cXG59XFxuXFxuQG1lZGlhIHByaW50LFxcbiAgICAgICAoLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogNS80KSxcXG4gICAgICAgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMS4yNSksXFxuICAgICAgIChtaW4tcmVzb2x1dGlvbjogMTIwZHBpKSB7XFxuXFxufVxcblxcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuICAgSGVscGVyIGNsYXNzZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbi5oaWRkZW4ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuLnZpc3VhbGx5aGlkZGVuIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgICBoZWlnaHQ6IDFweDtcXG4gICAgbWFyZ2luOiAtMXB4O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAxcHg7XFxufVxcblxcbi52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6YWN0aXZlLFxcbi52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6Zm9jdXMge1xcbiAgICBjbGlwOiBhdXRvO1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1hcmdpbjogMDtcXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgIHBvc2l0aW9uOiBzdGF0aWM7XFxuICAgIHdpZHRoOiBhdXRvO1xcbn1cXG5cXG4uaW52aXNpYmxlIHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG5cXG4uY2xlYXJmaXg6YmVmb3JlLFxcbi5jbGVhcmZpeDphZnRlciB7XFxuICAgIGNvbnRlbnQ6IFxcXCIgXFxcIjtcXG4gICAgZGlzcGxheTogdGFibGU7XFxufVxcblxcbi5jbGVhcmZpeDphZnRlciB7XFxuICAgIGNsZWFyOiBib3RoO1xcbn1cXG5cXG4uY2xlYXJmaXgge1xcbiAgICAqem9vbTogMTtcXG59XFxuXFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gICBQcmludCBzdHlsZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbkBtZWRpYSBwcmludCB7XFxuICAgICosXFxuICAgICo6YmVmb3JlLFxcbiAgICAqOmFmdGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxuICAgICAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgfVxcblxcbiAgICBhLFxcbiAgICBhOnZpc2l0ZWQge1xcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgYVtocmVmXTphZnRlciB7XFxuICAgICAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIoaHJlZikgXFxcIilcXFwiO1xcbiAgICB9XFxuXFxuICAgIGFiYnJbdGl0bGVdOmFmdGVyIHtcXG4gICAgICAgIGNvbnRlbnQ6IFxcXCIgKFxcXCIgYXR0cih0aXRsZSkgXFxcIilcXFwiO1xcbiAgICB9XFxuXFxuICAgIGFbaHJlZl49XFxcIiNcXFwiXTphZnRlcixcXG4gICAgYVtocmVmXj1cXFwiamF2YXNjcmlwdDpcXFwiXTphZnRlciB7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgfVxcblxcbiAgICBwcmUsXFxuICAgIGJsb2NrcXVvdGUge1xcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcXG4gICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcXG4gICAgfVxcblxcbiAgICB0aGVhZCB7XFxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XFxuICAgIH1cXG5cXG4gICAgdHIsXFxuICAgIGltZyB7XFxuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICAgIH1cXG5cXG4gICAgaW1nIHtcXG4gICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIGgyLFxcbiAgICBoMyB7XFxuICAgICAgICBvcnBoYW5zOiAzO1xcbiAgICAgICAgd2lkb3dzOiAzO1xcbiAgICB9XFxuXFxuICAgIGgyLFxcbiAgICBoMyB7XFxuICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcXG4gICAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZm9udHMuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2ZvbnRzLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZm9udHMuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fIGZyb20gXCIuL09wZW5TYW5zLVJlZ3VsYXIudHRmXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18gZnJvbSBcIi4vT3BlblNhbnMtTGlnaHQudHRmXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIkBmb250LWZhY2Uge1xcbiAgICBmb250LWZhbWlseTogT3BlblNhbnM7XFxuICAgIHNyYzogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyArIFwiKTtcXG59XFxuXFxuQGZvbnQtZmFjZSB7XFxuICAgIGZvbnQtZmFtaWx5OiBPcGVuU2Fucy1MaWdodDtcXG4gICAgc3JjOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcbn1cXG5cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9mcmFtZXdvcmsvZm9udHMvZm9udHMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0kscUJBQXFCO0lBQ3JCLDRDQUE4QjtBQUNsQzs7QUFFQTtJQUNJLDJCQUEyQjtJQUMzQiw0Q0FBNEI7QUFDaENcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGZvbnQtZmFjZSB7XFxuICAgIGZvbnQtZmFtaWx5OiBPcGVuU2FucztcXG4gICAgc3JjOiB1cmwoT3BlblNhbnMtUmVndWxhci50dGYpO1xcbn1cXG5cXG5AZm9udC1mYWNlIHtcXG4gICAgZm9udC1mYW1pbHk6IE9wZW5TYW5zLUxpZ2h0O1xcbiAgICBzcmM6IHVybChPcGVuU2Fucy1MaWdodC50dGYpO1xcbn1cXG5cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiY29uc3QgZmluZCA9IHJlcXVpcmUoXCJsb2Rhc2gvZmluZFwiKTtcblxuY29uc3Qgc2V0dXBOb3RpZmljYXRpb25Gb3JtID0gcmVxdWlyZShcIi4vc2V0dXBOb3RpZmljYXRpb25Gb3JtXCIpO1xuY29uc3QgQmFzZU5vdGlmaWNhdGlvbiA9IHJlcXVpcmUoXCIuL0Jhc2VOb3RpZmljYXRpb25cIik7XG5cbmNvbnN0IE5vdGlmaWNhdGlvbkh1YiA9IHJlcXVpcmUoJy4vTm90aWZpY2F0aW9uSHViJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgTm90aWZpY2F0aW9uRm9ybSB7XG4gIGNvbnN0cnVjdG9yKG5vdGlmaWNhdGlvbnMsIHJlbmRlcikge1xuICAgIHRoaXMuc2hvdyA9IHRoaXMuc2hvdy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGlkZSA9IHRoaXMuaGlkZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ub3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucztcbiAgICB0aGlzLnJlbmRlciA9IHJlbmRlcjtcblxuICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJub3RpZmljYXRpb24tY29udGFpbmVyXCIpO1xuXG4gICAgc2V0dXBOb3RpZmljYXRpb25Gb3JtKG5vdGlmaWNhdGlvbnMpO1xuXG4gICAgTm90aWZpY2F0aW9uSHViLm9uSGlkZSh0aGlzLmhpZGUpO1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5vblNob3codGhpcy5zaG93KTtcbiAgfVxuXG4gIHNob3codHlwZSwgcHJvcHMpIHtcbiAgICBjb25zdCBmb3VuZE5vdGlmaWNhdGlvbiA9IGZpbmQodGhpcy5ub3RpZmljYXRpb25zLCB7IHR5cGUgfSkgfHwge307XG4gICAgY29uc3QgTm90aWZpY2F0aW9uID0gZm91bmROb3RpZmljYXRpb24udmlldyA/IGZvdW5kTm90aWZpY2F0aW9uLnZpZXcgOiBCYXNlTm90aWZpY2F0aW9uO1xuICAgIHRoaXMucmVuZGVyKHRoaXMuY29udGFpbmVyLCBOb3RpZmljYXRpb24sIHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lci5oaWRkZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5jb250YWluZXIuaGlkZGVuID0gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZmluZEluZGV4RnVuYyBUaGUgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29sbGVjdGlvbiBpbmRleC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICBjb2xsZWN0aW9uID0ga2V5cyhjb2xsZWN0aW9uKTtcbiAgICAgIHByZWRpY2F0ZSA9IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSk7IH07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGZpbmRJbmRleEZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpO1xuICAgIHJldHVybiBpbmRleCA+IC0xID8gaXRlcmFibGVbaXRlcmF0ZWUgPyBjb2xsZWN0aW9uW2luZGV4XSA6IGluZGV4XSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVGaW5kO1xuIiwidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hdGNoRGF0YTtcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnLi9nZXQnKSxcbiAgICBoYXNJbiA9IHJlcXVpcmUoJy4vaGFzSW4nKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzUHJvcGVydHk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCJ2YXIgYmFzZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5JyksXG4gICAgYmFzZVByb3BlcnR5RGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eURlZXAnKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcbiAqICAgeyAnYSc6IHsgJ2InOiAxIH0gfVxuICogXTtcbiAqXG4gKiBfLm1hcChvYmplY3RzLCBfLnByb3BlcnR5KCdhLmInKSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqXG4gKiBfLm1hcChfLnNvcnRCeShvYmplY3RzLCBfLnByb3BlcnR5KFsnYScsICdiJ10pKSwgJ2EuYicpO1xuICogLy8gPT4gWzEsIDJdXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvcGVydHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kSW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAnYmFybmV5JzsgfSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiAxXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiAyXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgfVxuICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0ludGVnZXJgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9pbnRlZ2VyKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvSW50ZWdlcigzLjIpO1xuICogLy8gPT4gM1xuICpcbiAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gMFxuICpcbiAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0ludGVnZXIoJzMuMicpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRvRmluaXRlKHZhbHVlKSxcbiAgICAgIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7XG5cbiAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvSW50ZWdlcjtcbiIsInZhciB0b051bWJlciA9IHJlcXVpcmUoJy4vdG9OdW1iZXInKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICBNQVhfSU5URUdFUiA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBmaW5pdGUgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMi4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9GaW5pdGUoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMDtcbiAgfVxuICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHZhbHVlID09PSBJTkZJTklUWSB8fCB2YWx1ZSA9PT0gLUlORklOSVRZKSB7XG4gICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9GaW5pdGU7XG4iLCJ2YXIgYmFzZVRyaW0gPSByZXF1aXJlKCcuL19iYXNlVHJpbScpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciB0cmltbWVkRW5kSW5kZXggPSByZXF1aXJlKCcuL190cmltbWVkRW5kSW5kZXgnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50cmltYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRyaW0oc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdcbiAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgIDogc3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUcmltO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuICovXG52YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbi8qKlxuICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRyaW1tZWRFbmRJbmRleDtcbiIsImNvbnN0IGZpbmQgPSByZXF1aXJlKFwibG9kYXNoL2ZpbmRcIik7XG5jb25zdCBmaXJzdCA9IHJlcXVpcmUoXCJsb2Rhc2gvZmlyc3RcIik7XG5jb25zdCBOb3RpZmljYXRpb25IdWIgPSByZXF1aXJlKFwiLi9Ob3RpZmljYXRpb25IdWJcIik7XG5cbmNvbnN0IHNldHVwU2VsZWN0RHJvcGRvd24gPSAobm90aWZpY2F0aW9ucywgZm9ybVR5cGVTZWxlY3QpID0+IHtcbiAgbm90aWZpY2F0aW9ucy5mb3JFYWNoKG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgY29uc3QgeyB0eXBlLCBsYWJlbCB9ID0gbm90aWZpY2F0aW9uO1xuICAgIGZvcm1UeXBlU2VsZWN0LmFwcGVuZENoaWxkKG5ldyBPcHRpb24obGFiZWwsIHR5cGUpKTtcbiAgfSk7XG59O1xuXG5jb25zdCBzZXR1cERlZmF1bHRNZXNzYWdlID0gKG5vdGlmaWNhdGlvbnMsIGZvcm1NZXNzYWdlLCBmb3JtVHlwZVNlbGVjdCkgPT4ge1xuICBmb3JtTWVzc2FnZS52YWx1ZSA9IGZpcnN0KG5vdGlmaWNhdGlvbnMpLmRlZmF1bHRWYWx1ZTtcbiAgZm9ybVR5cGVTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBldmVudCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBzZWxlY3RlZE5vdGlmaWNhdGlvbiA9IGZpbmQobm90aWZpY2F0aW9ucywgeyB0eXBlIH0pO1xuICAgIGZvcm1NZXNzYWdlLnZhbHVlID0gc2VsZWN0ZWROb3RpZmljYXRpb24uZGVmYXVsdFZhbHVlO1xuICB9KTtcbn07XG5cbmNvbnN0IHNldHVwU3VibWl0QnV0dG9uID0gY29udGV4dCA9PiB7XG4gIGNvbnN0IHsgZm9ybVNlbmQsIGZvcm1NZXNzYWdlLCBmb3JtVHlwZVNlbGVjdCB9ID0gY29udGV4dDtcblxuICBmb3JtU2VuZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBmb3JtVHlwZVNlbGVjdC52YWx1ZTtcbiAgICBjb25zdCBwYXlsb2FkID0geyBtZXNzYWdlOiBmb3JtTWVzc2FnZS52YWx1ZSB9O1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5zaG93KHR5cGUsIHBheWxvYWQpXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAobm90aWZpY2F0aW9ucykgPT4ge1xuICBjb25zdCBmb3JtU2VuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm90aWZpY2F0aW9uLWZvcm0tc2VuZFwiKTtcbiAgY29uc3QgZm9ybU1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5vdGlmaWNhdGlvbi1mb3JtLW1lc3NhZ2VcIik7XG4gIGNvbnN0IGZvcm1UeXBlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJub3RpZmljYXRpb24tZm9ybS10eXBlLXNlbGVjdFwiKTtcblxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgZm9ybVNlbmQsXG4gICAgZm9ybU1lc3NhZ2UsXG4gICAgZm9ybVR5cGVTZWxlY3QsXG4gIH07XG5cbiAgc2V0dXBTZWxlY3REcm9wZG93bihub3RpZmljYXRpb25zLCBmb3JtVHlwZVNlbGVjdCk7XG4gIHNldHVwRGVmYXVsdE1lc3NhZ2Uobm90aWZpY2F0aW9ucywgZm9ybU1lc3NhZ2UsIGZvcm1UeXBlU2VsZWN0KTtcbiAgc2V0dXBTdWJtaXRCdXR0b24oY29udGV4dCk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtU2VuZCxcbiAgICBmb3JtTWVzc2FnZSxcbiAgICBmb3JtVHlwZVNlbGVjdCxcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9oZWFkJyk7XG4iLCIvKipcbiAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAYWxpYXMgZmlyc3RcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5oZWFkKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAxXG4gKlxuICogXy5oZWFkKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBoZWFkKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhlYWQ7XG4iLCJjb25zdCB7IHBpcGUgfSA9IHJlcXVpcmUoJ3J4anMnKTtcbmNvbnN0IHsgbWFwLCBmaWx0ZXIsIHRhcCB9ID0gcmVxdWlyZSgncnhqcy9vcGVyYXRvcnMnKTtcblxuY29uc3QgTEVGVF9BUlJPV19LRVkgPSAzNztcbmNvbnN0IFVQX0FSUk9XX0tFWSA9IDM4O1xuY29uc3QgUklHSFRfQVJST1dfS0VZID0gMzk7XG5jb25zdCBET1dOX0FSUk9XX0tFWSA9IDQwO1xuY29uc3QgU1BBQ0VfQkFSX0tFWSA9IDMyO1xuXG5jb25zdCBLRVlfTUFQUElOR1MgPSB7XG4gIFtMRUZUX0FSUk9XX0tFWV06ICdsZWZ0JyxcbiAgW1JJR0hUX0FSUk9XX0tFWV06ICdyaWdodCcsXG4gIFtVUF9BUlJPV19LRVldOiAndG9wJyxcbiAgW0RPV05fQVJST1dfS0VZXTogJ2JvdHRvbScsXG4gIFtTUEFDRV9CQVJfS0VZXTogJ2ZhY2UnLFxufVxuXG5jb25zdCBnZXRSeGpzVGFyZ2V0ID0gKCkgPT4gcGlwZShcbiAgbWFwKChldmVudCkgPT4gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXJ4anMtdGFyZ2V0XScpKSxcbiAgZmlsdGVyKChlbGVtZW50KSA9PiAhIWVsZW1lbnQpLFxuICBtYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQuZGF0YXNldC5yeGpzVGFyZ2V0KSxcbilcblxuY29uc3QgZ2V0Unhqc1RhcmdldEZyb21LZXkgPSAoKSA9PiBwaXBlKFxuICBmaWx0ZXIoKGV2ZW50KSA9PiAhIShLRVlfTUFQUElOR1NbZXZlbnQud2hpY2hdKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmlkICE9ICdub3RpZmljYXRpb24tZm9ybS1tZXNzYWdlJyksXG4gIHRhcCgoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpLFxuICBmaWx0ZXIoKGV2ZW50KSA9PiAhZXZlbnQucmVwZWF0KSxcbiAgbWFwKChldmVudCkgPT4gS0VZX01BUFBJTkdTW2V2ZW50LndoaWNoXSksXG4pXG5cbmNvbnN0IGdldFRpbWVkRXZlbnQgPSAoKSA9PiBwaXBlKFxuICBtYXAoKHRhcmdldCkgPT4gKHtcbiAgICB0YXJnZXQsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICB9KSksXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSeGpzVGFyZ2V0LFxuICBnZXRSeGpzVGFyZ2V0RnJvbUtleSxcbiAgZ2V0VGltZWRFdmVudCxcbn1cbiIsImNvbnN0IFN0b3JhZ2VIdWIgPSByZXF1aXJlKCcuL3NyYy9TdG9yYWdlSHViJyk7XG5cbmNvbnN0IFN0b3JhZ2VIdWJJbnN0YW5jZSA9IG5ldyBTdG9yYWdlSHViKCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXREYXRhOiBTdG9yYWdlSHViSW5zdGFuY2UuZ2V0RGF0YSxcbiAgc2V0RGF0YTogU3RvcmFnZUh1Ykluc3RhbmNlLnNldERhdGEsXG4gIHJlc2V0OiBTdG9yYWdlSHViSW5zdGFuY2UucmVzZXQsXG4gIHNldERlYnVnOiBTdG9yYWdlSHViSW5zdGFuY2Uuc2V0RGVidWcsXG4gIGZpbmQ6IFN0b3JhZ2VIdWJJbnN0YW5jZS5maW5kLFxuICBzZXRKU09OOiBTdG9yYWdlSHViSW5zdGFuY2Uuc2V0SlNPTlxufVxuIiwiY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jbGFzcyBTdG9yYWdlSHViIHtcbiAgY29uc3RydWN0b3IoZmlsZVBhdGg9bnVsbCkge1xuICAgIHRoaXMuc3RvcmUgPSB7fTtcbiAgICB0aGlzLnNob3VsZERlYnVnID0gZmFsc2U7XG4gIH1cblxuICBzZXRKU09OKGpzb24pIHtcbiAgICB0aGlzLnN0b3JlID0ganNvblxuICB9XG5cbiAgc2V0RGVidWcoc2hvdWxkRGVidWcpIHtcbiAgICB0aGlzLnNob3VsZERlYnVnID0gc2hvdWxkRGVidWc7XG4gIH1cblxuICBzZXREYXRhKGZpZWxkLCB2YWx1ZSkge1xuXG4gICAgaWYgKHR5cGVvZiBmaWVsZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgcGFyYW1ldGVyIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3VsZERlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbU3RvcmFnZUh1Yl0gQmVmb3JlOicsIHRoaXMuc3RvcmUpXG4gICAgfVxuICAgIHRoaXMuc3RvcmUgPSB7XG4gICAgICAuLi50aGlzLnN0b3JlLFxuICAgICAgW2ZpZWxkXTogdmFsdWUsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkRGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tTdG9yYWdlSHViXSBBZnRlcjonLCB0aGlzLnN0b3JlKVxuICAgIH1cbiAgfVxuXG4gIGdldERhdGEoZmllbGQpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZVtmaWVsZF07XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnN0b3JlID0ge307XG4gIH1cblxuICBmaW5kKGZpZWxkLCBhcHBseUZuKSB7XG4gICAgY29uc3QgZGF0YVJldHJpZXZlZCA9IHRoaXMuZ2V0RGF0YShmaWVsZCk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGFSZXRyaWV2ZWQpIHx8IHR5cGVvZihhcHBseUZuKSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiAoZGF0YVJldHJpZXZlZCB8fCBbXSkucmVkdWNlKChhY2MsIGRhdGEpID0+IHtcbiAgICAgIGlmKGFwcGx5Rm4oZGF0YSkpIHtcbiAgICAgICAgYWNjLnB1c2goZGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0b3JhZ2VIdWI7XG4iLCJjb25zdCBBdWRpb0h1YiA9IHJlcXVpcmUoJy4vc3JjL0F1ZGlvSHViJyk7XG5cbmNvbnN0IEF1ZGlvSHViSW5zdGFuY2UgPSBuZXcgQXVkaW9IdWIoKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBsYXlTb3VuZDogQXVkaW9IdWJJbnN0YW5jZS5wbGF5U291bmQsXG59IiwiY2xhc3MgQXVkaW9IdWIge1xuXG4gIHBsYXlTb3VuZChmaWxlcGF0aCwgdm9sdW1lPTEpIHtcbiAgICBsZXQgc291bmQgPSBuZXcgQXVkaW8oZmlsZXBhdGgpXG4gICAgaWYgKHZvbHVtZSA8PSAxICYmIHZvbHVtZSA+PSAwKSB7ICBcbiAgICAgIHNvdW5kLnZvbHVtZSA9IHZvbHVtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50ZXIgdm9sdW1lIGJldHdlZW4gMCBhbmQgMVwiKVxuICAgIH1cbiAgICBzb3VuZC5wbGF5KCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdWRpb0h1YjtcbiIsImNvbnN0IEhvbWVQYWdlID0gcmVxdWlyZSgnLi9wYWdlcy9ob21lUGFnZS9ob21lUGFnZScpO1xuY29uc3QgQ29udGFjdHNQYWdlID0gcmVxdWlyZSgnLi9wYWdlcy9jb250YWN0c1BhZ2UvY29udGFjdHNQYWdlJyk7XG5jb25zdCBUZWFtUGFnZSA9IHJlcXVpcmUoJy4vcGFnZXMvdGVhbVBhZ2UvdGVhbVBhZ2UnKTtcbmNvbnN0IEZvdXJPaEZvdXIgPSByZXF1aXJlKCcuL3BhZ2VzLzQwNFBhZ2UvNDA0UGFnZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJy8nOiBIb21lUGFnZSxcbiAgJ2NvbnRhY3RzJzogQ29udGFjdHNQYWdlLFxuICAndGVhbSc6IFRlYW1QYWdlLFxuICAnNDA0JzogRm91ck9oRm91cixcbn07XG4iLCJjb25zdCBCYXNlUGFnZSA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLkJhc2VQYWdlO1xuY29uc3QgU3RvcmFnZUh1YiA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLlN0b3JhZ2VIdWI7XG5jb25zdCBBdWRpb0h1YiA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLkF1ZGlvSHViO1xuY29uc3QgbG9nbyA9IHJlcXVpcmUoJy4uLy4uLy4uL2ltYWdlcy9sb2dvLnBuZycpO1xuY29uc3QgcGxvcCA9ICcuL3NvdW5kcy9wbG9wLm1wMyc7XG5cbi8vdGVzdCBmb3IgcmFzcGJlcnJ5cGlcbmNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vaG9tZVBhZ2UuaGJzJyk7XG5cbiAgcGFnZVdpbGxMb2FkKCkge1xuICAgIFN0b3JhZ2VIdWIuc2V0RGF0YSgnY29udGFjdHMnLCBbXG4gICAgICB7IG5hbWU6ICdSYXknLCBwaG9uZU51bWJlcjogJzA0MzEgMTExIDExMScgfSxcbiAgICAgIHsgbmFtZTogJ1NpbmFuJywgcGhvbmVOdW1iZXI6ICcwNDMxIDIyMiAyMjInIH0sXG4gICAgICB7IG5hbWU6ICdKYWZhcmknLCBwaG9uZU51bWJlcjogJzA0MzEgMzMzIDMzMycgfSxcbiAgICBdKVxuXG4gICAgdGhpcy51cGRhdGVUaW1lRXZlcnlTZWNvbmQoKTtcbiAgICBjb25zdCBkYXRlVGltZSA9IHRoaXMuZ2V0RGF0ZVRpbWUoKTtcbiAgICB0aGlzLmRhdGUgPSBkYXRlVGltZS5kYXRlO1xuICAgIHRoaXMudGltZSA9IGRhdGVUaW1lLnRpbWU7XG4gICAgdGhpcy5sb2dvID0gbG9nbztcbiAgfVxuXG4gIGdldERhdGVUaW1lKCkge1xuICAgIGNvbnN0IGRhdGVUaW1lID0gbmV3IERhdGUoRGF0ZS5ub3coKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLUFVJykuc3BsaXQoXCIsXCIpO1xuICAgIHJldHVybiB7IFxuICAgICAgZGF0ZTogZGF0ZVRpbWVbMF0sIFxuICAgICAgdGltZTogZGF0ZVRpbWVbMV0sXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVRpbWVFdmVyeVNlY29uZCgpIHtcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnVwZGF0ZVRpbWVEaXNwbGF5KHRoaXMuZ2V0RGF0ZVRpbWUpLCAxMDAwKTtcbiAgfVxuXG4gIHVwZGF0ZVRpbWVEaXNwbGF5KGdldFRpbWUpIHtcbiAgICBjb25zdCBjbG9ja1RpbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNsb2NrLXRpbWVcIik7XG4gICAgaWYgKGNsb2NrVGltZSkge1xuICAgICAgY2xvY2tUaW1lLnRleHRDb250ZW50ID0gZ2V0VGltZSgpLnRpbWU7XG4gICAgfVxuICB9XG5cbiAgcmlnaHRCdXR0b25FdmVudCgpIHtcbiAgICB0aGlzLm5hdmlnYXRlKCdjb250YWN0cycpO1xuICB9XG5cbiAgbGVmdEJ1dHRvbkV2ZW50KCkge1xuICAgIEF1ZGlvSHViLnBsYXlTb3VuZChwbG9wKTtcbiAgfVxuXG4gIHRvcEJ1dHRvbkV2ZW50KCkge1xuICAgIHRoaXMud2F0Y2hGYWNlLnNjcm9sbFRvcCAtPSA0MDtcbiAgfVxuXG4gIGJvdHRvbUJ1dHRvbkV2ZW50KCkge1xuICAgIHRoaXMud2F0Y2hGYWNlLnNjcm9sbFRvcCArPSA0MDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhvbWVQYWdlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiZTBlNjliNDY0MzAwOTIwMzQ0N2NjMTdhZDdlMWM1OTAucG5nXCI7IiwidmFyIEhhbmRsZWJhcnMgPSByZXF1aXJlKCcvaG9tZS9jaXJjbGVjaS9wcm9qZWN0L25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL3J1bnRpbWUuanMnKTtcbm1vZHVsZS5leHBvcnRzID0gKEhhbmRsZWJhcnNbJ2RlZmF1bHQnXSB8fCBIYW5kbGViYXJzKS50ZW1wbGF0ZSh7XCJjb21waWxlclwiOls4LFwiPj0gNC4zLjBcIl0sXCJtYWluXCI6ZnVuY3Rpb24oY29udGFpbmVyLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgICB2YXIgaGVscGVyLCBhbGlhczE9ZGVwdGgwICE9IG51bGwgPyBkZXB0aDAgOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KSwgYWxpYXMyPWNvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nLCBhbGlhczM9XCJmdW5jdGlvblwiLCBhbGlhczQ9Y29udGFpbmVyLmVzY2FwZUV4cHJlc3Npb24sIGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5IHx8IGZ1bmN0aW9uKHBhcmVudCwgcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50LCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9O1xuXG4gIHJldHVybiBcIjxkaXYgaWQ9XFxcImhvbWVcXFwiPlxcbiAgPHA+RGF0ZTogPHNwYW4gaWQ9XFxcImNsb2NrLWRhdGVcXFwiPlwiXG4gICAgKyBhbGlhczQoKChoZWxwZXIgPSAoaGVscGVyID0gbG9va3VwUHJvcGVydHkoaGVscGVycyxcImRhdGVcIikgfHwgKGRlcHRoMCAhPSBudWxsID8gbG9va3VwUHJvcGVydHkoZGVwdGgwLFwiZGF0ZVwiKSA6IGRlcHRoMCkpICE9IG51bGwgPyBoZWxwZXIgOiBhbGlhczIpLCh0eXBlb2YgaGVscGVyID09PSBhbGlhczMgPyBoZWxwZXIuY2FsbChhbGlhczEse1wibmFtZVwiOlwiZGF0ZVwiLFwiaGFzaFwiOnt9LFwiZGF0YVwiOmRhdGEsXCJsb2NcIjp7XCJzdGFydFwiOntcImxpbmVcIjoyLFwiY29sdW1uXCI6MzN9LFwiZW5kXCI6e1wibGluZVwiOjIsXCJjb2x1bW5cIjo0MX19fSkgOiBoZWxwZXIpKSlcbiAgICArIFwiPC9zcGFuPjwvcD5cXG4gIDxwPlRpbWU6IDxzcGFuIGlkPVxcXCJjbG9jay10aW1lXFxcIj5cIlxuICAgICsgYWxpYXM0KCgoaGVscGVyID0gKGhlbHBlciA9IGxvb2t1cFByb3BlcnR5KGhlbHBlcnMsXCJ0aW1lXCIpIHx8IChkZXB0aDAgIT0gbnVsbCA/IGxvb2t1cFByb3BlcnR5KGRlcHRoMCxcInRpbWVcIikgOiBkZXB0aDApKSAhPSBudWxsID8gaGVscGVyIDogYWxpYXMyKSwodHlwZW9mIGhlbHBlciA9PT0gYWxpYXMzID8gaGVscGVyLmNhbGwoYWxpYXMxLHtcIm5hbWVcIjpcInRpbWVcIixcImhhc2hcIjp7fSxcImRhdGFcIjpkYXRhLFwibG9jXCI6e1wic3RhcnRcIjp7XCJsaW5lXCI6MyxcImNvbHVtblwiOjMzfSxcImVuZFwiOntcImxpbmVcIjozLFwiY29sdW1uXCI6NDF9fX0pIDogaGVscGVyKSkpXG4gICAgKyBcIjwvc3Bhbj48L3A+XFxuICA8aW1nIHNyYz1cXFwiXCJcbiAgICArIGFsaWFzNCgoKGhlbHBlciA9IChoZWxwZXIgPSBsb29rdXBQcm9wZXJ0eShoZWxwZXJzLFwibG9nb1wiKSB8fCAoZGVwdGgwICE9IG51bGwgPyBsb29rdXBQcm9wZXJ0eShkZXB0aDAsXCJsb2dvXCIpIDogZGVwdGgwKSkgIT0gbnVsbCA/IGhlbHBlciA6IGFsaWFzMiksKHR5cGVvZiBoZWxwZXIgPT09IGFsaWFzMyA/IGhlbHBlci5jYWxsKGFsaWFzMSx7XCJuYW1lXCI6XCJsb2dvXCIsXCJoYXNoXCI6e30sXCJkYXRhXCI6ZGF0YSxcImxvY1wiOntcInN0YXJ0XCI6e1wibGluZVwiOjQsXCJjb2x1bW5cIjoxMn0sXCJlbmRcIjp7XCJsaW5lXCI6NCxcImNvbHVtblwiOjIwfX19KSA6IGhlbHBlcikpKVxuICAgICsgXCJcXFwiIGFsdD1cXFwiXFxcIiAvPlxcbiAgPGRpdj5IZWxsbywgV29ybGQhPC9kaXY+XFxuICA8cD5Mb3JlbSBJcHN1bSBpcyBzaW1wbHkgZHVtbXkgdGV4dCBvZiB0aGUgcHJpbnRpbmcgYW5kIHR5cGVzZXR0aW5nIGluZHVzdHJ5LiBMb3JlbSBJcHN1bSBoYXMgYmVlbiB0aGUgaW5kdXN0cnkncyBzdGFuZGFyZCBkdW1teSB0ZXh0IGV2ZXIgc2luY2UgdGhlIDE1MDBzLCB3aGVuIGFuIHVua25vd24gcHJpbnRlciB0b29rIGEgZ2FsbGV5IG9mIHR5cGUgYW5kIHNjcmFtYmxlZCBpdCB0byBtYWtlIGEgdHlwZSBzcGVjaW1lbiBib29rLiBJdCBoYXMgc3Vydml2ZWQgbm90IG9ubHkgZml2ZSBjZW50dXJpZXMsIGJ1dCBhbHNvIHRoZSBsZWFwIGludG8gZWxlY3Ryb25pYyB0eXBlc2V0dGluZywgcmVtYWluaW5nIGVzc2VudGlhbGx5IHVuY2hhbmdlZC4gSXQgd2FzIHBvcHVsYXJpc2VkIGluIHRoZSAxOTYwcyB3aXRoIHRoZSByZWxlYXNlIG9mIExldHJhc2V0IHNoZWV0cyBjb250YWluaW5nIExvcmVtIElwc3VtIHBhc3NhZ2VzLCBhbmQgbW9yZSByZWNlbnRseSB3aXRoIGRlc2t0b3AgcHVibGlzaGluZyBzb2Z0d2FyZSBsaWtlIEFsZHVzIFBhZ2VNYWtlciBpbmNsdWRpbmcgdmVyc2lvbnMgb2YgTG9yZW0gSXBzdW0uPC9wPlxcbiAgPHA+SXQgaXMgYSBsb25nIGVzdGFibGlzaGVkIGZhY3QgdGhhdCBhIHJlYWRlciB3aWxsIGJlIGRpc3RyYWN0ZWQgYnkgdGhlIHJlYWRhYmxlIGNvbnRlbnQgb2YgYSBwYWdlIHdoZW4gbG9va2luZyBhdCBpdHMgbGF5b3V0LiBUaGUgcG9pbnQgb2YgdXNpbmcgTG9yZW0gSXBzdW0gaXMgdGhhdCBpdCBoYXMgYSBtb3JlLW9yLWxlc3Mgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiBsZXR0ZXJzLCBhcyBvcHBvc2VkIHRvIHVzaW5nICdDb250ZW50IGhlcmUsIGNvbnRlbnQgaGVyZScsIG1ha2luZyBpdCBsb29rIGxpa2UgcmVhZGFibGUgRW5nbGlzaC4gTWFueSBkZXNrdG9wIHB1Ymxpc2hpbmcgcGFja2FnZXMgYW5kIHdlYiBwYWdlIGVkaXRvcnMgbm93IHVzZSBMb3JlbSBJcHN1bSBhcyB0aGVpciBkZWZhdWx0IG1vZGVsIHRleHQsIGFuZCBhIHNlYXJjaCBmb3IgJ2xvcmVtIGlwc3VtJyB3aWxsIHVuY292ZXIgbWFueSB3ZWIgc2l0ZXMgc3RpbGwgaW4gdGhlaXIgaW5mYW5jeS4gVmFyaW91cyB2ZXJzaW9ucyBoYXZlIGV2b2x2ZWQgb3ZlciB0aGUgeWVhcnMsIHNvbWV0aW1lcyBieSBhY2NpZGVudCwgc29tZXRpbWVzIG9uIHB1cnBvc2UgKGluamVjdGVkIGh1bW91ciBhbmQgdGhlIGxpa2UpLjwvcD5cXG48L2Rpdj5cXG5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsImNvbnN0IEJhc2VQYWdlID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuQmFzZVBhZ2U7XG5jb25zdCBTdG9yYWdlSHViID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuU3RvcmFnZUh1YjtcblxuY2xhc3MgQ29udGFjdHNQYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vY29udGFjdHNQYWdlLmhicycpO1xuXG4gIHBhZ2VXaWxsTG9hZCgpIHtcbiAgICB0aGlzLmNvbnRhY3RzID0gU3RvcmFnZUh1Yi5nZXREYXRhKCdjb250YWN0cycpXG4gIH1cblxuICBsZWZ0QnV0dG9uRXZlbnQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZSgnLycpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29udGFjdHNQYWdlO1xuIiwidmFyIEhhbmRsZWJhcnMgPSByZXF1aXJlKCcvaG9tZS9jaXJjbGVjaS9wcm9qZWN0L25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL3J1bnRpbWUuanMnKTtcbm1vZHVsZS5leHBvcnRzID0gKEhhbmRsZWJhcnNbJ2RlZmF1bHQnXSB8fCBIYW5kbGViYXJzKS50ZW1wbGF0ZSh7XCIxXCI6ZnVuY3Rpb24oY29udGFpbmVyLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgICB2YXIgYWxpYXMxPWNvbnRhaW5lci5sYW1iZGEsIGFsaWFzMj1jb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbiwgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH07XG5cbiAgcmV0dXJuIFwiICAgICAgPGxpPlxcbiAgICAgICAgPHNwYW4+TmFtZTogXCJcbiAgICArIGFsaWFzMihhbGlhczEoKGRlcHRoMCAhPSBudWxsID8gbG9va3VwUHJvcGVydHkoZGVwdGgwLFwibmFtZVwiKSA6IGRlcHRoMCksIGRlcHRoMCkpXG4gICAgKyBcIjwvc3Bhbj5cXG4gICAgICAgIDxici8+XFxuICAgICAgICA8c3Bhbj5QaG9uZTogXCJcbiAgICArIGFsaWFzMihhbGlhczEoKGRlcHRoMCAhPSBudWxsID8gbG9va3VwUHJvcGVydHkoZGVwdGgwLFwicGhvbmVOdW1iZXJcIikgOiBkZXB0aDApLCBkZXB0aDApKVxuICAgICsgXCI8L3NwYW4+XFxuICAgICAgPC9saT5cXG5cIjtcbn0sXCJjb21waWxlclwiOls4LFwiPj0gNC4zLjBcIl0sXCJtYWluXCI6ZnVuY3Rpb24oY29udGFpbmVyLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgICB2YXIgc3RhY2sxLCBsb29rdXBQcm9wZXJ0eSA9IGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eSB8fCBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfTtcblxuICByZXR1cm4gXCI8ZGl2IGlkPVxcXCJjb250YWN0c1xcXCI+XFxuICA8aDE+Q29udGFjdHM8L2gxPlxcbiAgPHVsPlxcblwiXG4gICAgKyAoKHN0YWNrMSA9IGxvb2t1cFByb3BlcnR5KGhlbHBlcnMsXCJlYWNoXCIpLmNhbGwoZGVwdGgwICE9IG51bGwgPyBkZXB0aDAgOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KSwoZGVwdGgwICE9IG51bGwgPyBsb29rdXBQcm9wZXJ0eShkZXB0aDAsXCJjb250YWN0c1wiKSA6IGRlcHRoMCkse1wibmFtZVwiOlwiZWFjaFwiLFwiaGFzaFwiOnt9LFwiZm5cIjpjb250YWluZXIucHJvZ3JhbSgxLCBkYXRhLCAwKSxcImludmVyc2VcIjpjb250YWluZXIubm9vcCxcImRhdGFcIjpkYXRhLFwibG9jXCI6e1wic3RhcnRcIjp7XCJsaW5lXCI6NCxcImNvbHVtblwiOjR9LFwiZW5kXCI6e1wibGluZVwiOjEwLFwiY29sdW1uXCI6MTN9fX0pKSAhPSBudWxsID8gc3RhY2sxIDogXCJcIilcbiAgICArIFwiICA8L3VsPlxcbjwvZGl2PlwiO1xufSxcInVzZURhdGFcIjp0cnVlfSk7IiwiY29uc3QgQmFzZVBhZ2UgPSByZXF1aXJlKCd3YXRjaC1mcmFtZXdvcmsnKS5CYXNlUGFnZTtcbmNsYXNzIFRlYW1QYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVhbVBhZ2UuaGJzJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGVhbVBhZ2U7XG4iLCJ2YXIgSGFuZGxlYmFycyA9IHJlcXVpcmUoJy9ob21lL2NpcmNsZWNpL3Byb2plY3Qvbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvcnVudGltZS5qcycpO1xubW9kdWxlLmV4cG9ydHMgPSAoSGFuZGxlYmFyc1snZGVmYXVsdCddIHx8IEhhbmRsZWJhcnMpLnRlbXBsYXRlKHtcImNvbXBpbGVyXCI6WzgsXCI+PSA0LjMuMFwiXSxcIm1haW5cIjpmdW5jdGlvbihjb250YWluZXIsZGVwdGgwLGhlbHBlcnMscGFydGlhbHMsZGF0YSkge1xuICAgIHJldHVybiBcIjxkaXYgaWQ9XFxcInRlYW1cXFwiPlxcbiAgICA8aDE+TWFkZSBieTo8L2gxPlxcbiAgICA8dWw+XFxuICAgICAgICA8IS0tIFRPRE86IEFkZCB5b3VyIG5hbWUgYXMgYSBsaXN0IGVsZW1lbnQgLS0+XFxuICAgICAgICA8bGk+UmF5PC9saT5cXG4gICAgPC91bD5cXG48L2Rpdj5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsImNvbnN0IEJhc2VQYWdlID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuQmFzZVBhZ2U7XG5cbmNsYXNzIEZvdXJPaEZvdXJQYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vNDA0UGFnZS5oYnMnKTtcblxuICBsZWZ0QnV0dG9uRXZlbnQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZSgnLycpO1xuICB9XG4gIHJpZ2h0QnV0dG9uRXZlbnQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZSgnLycpO1xuICB9XG4gIHRvcEJ1dHRvbkV2ZW50KCkge1xuICAgIHRoaXMubmF2aWdhdGUoJy8nKTtcbiAgfVxuICBib3R0b21CdXR0b25FdmVudCgpIHtcbiAgICB0aGlzLm5hdmlnYXRlKCcvJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGb3VyT2hGb3VyUGFnZTtcbiIsInZhciBIYW5kbGViYXJzID0gcmVxdWlyZSgnL2hvbWUvY2lyY2xlY2kvcHJvamVjdC9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9ydW50aW1lLmpzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IChIYW5kbGViYXJzWydkZWZhdWx0J10gfHwgSGFuZGxlYmFycykudGVtcGxhdGUoe1wiY29tcGlsZXJcIjpbOCxcIj49IDQuMy4wXCJdLFwibWFpblwiOmZ1bmN0aW9uKGNvbnRhaW5lcixkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gICAgcmV0dXJuIFwiPGgxPk9vcHMhPC9oMT5cXG48cD5UaGUgcGFnZSB5b3UncmUgbG9va2luZyBmb3IgY291bGQgbm90IGJlIGZvdW5kLjwvcD5cXG5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsImNvbnN0IEFsZXJ0Tm90aWZpY2F0aW9uID0gcmVxdWlyZSgnLi9ub3RpZmljYXRpb25zL0FsZXJ0Tm90aWZpY2F0aW9uL0FsZXJ0Tm90aWZpY2F0aW9uJyk7XG5cbmNvbnN0IG5vdGlmaWNhdGlvbnMgPSBbXG4gIHtcbiAgICB0eXBlOiBcImFsZXJ0XCIsXG4gICAgbGFiZWw6IFwiQWxlcnRcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiVGhpcyBpcyBhIHRlc3QgYWxlcnRcIixcbiAgICB2aWV3OiBBbGVydE5vdGlmaWNhdGlvbixcbiAgfSxcbiAge1xuICAgIHR5cGU6IFwiYmFzZVwiLFxuICAgIGxhYmVsOiBcIkJhc2VcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiVGhpcyBpcyBhIHRlc3QgYmFzZSBub3RpZmljYXRpb25cIixcbiAgfVxuXTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vdGlmaWNhdGlvbnM7XG4iLCJjb25zdCBCYXNlTm90aWZpY2F0aW9uID0gcmVxdWlyZShcIndhdGNoLWZyYW1ld29ya1wiKS5CYXNlTm90aWZpY2F0aW9uO1xuY29uc3QgTm90aWZpY2F0aW9uSHViID0gcmVxdWlyZShcIndhdGNoLWZyYW1ld29ya1wiKS5Ob3RpZmljYXRpb25IdWI7XG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEFsZXJ0Tm90aWZpY2F0aW9uIGV4dGVuZHMgQmFzZU5vdGlmaWNhdGlvbiB7XG4gIHRlbXBsYXRlID0gcmVxdWlyZShcIi4vQWxlcnROb3RpZmljYXRpb24uaGJzXCIpO1xuXG4gIGxlZnRCdXR0b25FdmVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhcIkxFRlRcIik7XG4gICAgTm90aWZpY2F0aW9uSHViLmhpZGUoKTtcbiAgfVxufTtcbiIsInZhciBIYW5kbGViYXJzID0gcmVxdWlyZSgnL2hvbWUvY2lyY2xlY2kvcHJvamVjdC9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9ydW50aW1lLmpzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IChIYW5kbGViYXJzWydkZWZhdWx0J10gfHwgSGFuZGxlYmFycykudGVtcGxhdGUoe1wiY29tcGlsZXJcIjpbOCxcIj49IDQuMy4wXCJdLFwibWFpblwiOmZ1bmN0aW9uKGNvbnRhaW5lcixkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gICAgdmFyIGhlbHBlciwgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH07XG5cbiAgcmV0dXJuIFwiQWxlcnRcXG48ZGl2PlxcbiAgXCJcbiAgICArIGNvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uKCgoaGVscGVyID0gKGhlbHBlciA9IGxvb2t1cFByb3BlcnR5KGhlbHBlcnMsXCJtZXNzYWdlXCIpIHx8IChkZXB0aDAgIT0gbnVsbCA/IGxvb2t1cFByb3BlcnR5KGRlcHRoMCxcIm1lc3NhZ2VcIikgOiBkZXB0aDApKSAhPSBudWxsID8gaGVscGVyIDogY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcpLCh0eXBlb2YgaGVscGVyID09PSBcImZ1bmN0aW9uXCIgPyBoZWxwZXIuY2FsbChkZXB0aDAgIT0gbnVsbCA/IGRlcHRoMCA6IChjb250YWluZXIubnVsbENvbnRleHQgfHwge30pLHtcIm5hbWVcIjpcIm1lc3NhZ2VcIixcImhhc2hcIjp7fSxcImRhdGFcIjpkYXRhLFwibG9jXCI6e1wic3RhcnRcIjp7XCJsaW5lXCI6MyxcImNvbHVtblwiOjJ9LFwiZW5kXCI6e1wibGluZVwiOjMsXCJjb2x1bW5cIjoxM319fSkgOiBoZWxwZXIpKSlcbiAgICArIFwiXFxuPC9kaXY+XFxuXCI7XG59LFwidXNlRGF0YVwiOnRydWV9KTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +!function(t){"use strict";function e(t){var e,n,i,r;for(n=1,i=arguments.length;n0?Math.floor(t):Math.ceil(t)};function j(t,e,n){return t instanceof O?t:v(t)?new O(t[0],t[1]):null==t?t:"object"==typeof t&&"x"in t&&"y"in t?new O(t.x,t.y):new O(t,e,n)}function I(t,e){if(t)for(var n=e?[t,e]:t,i=0,r=n.length;i=this.min.x&&n.x<=this.max.x&&e.y>=this.min.y&&n.y<=this.max.y},intersects:function(t){t=z(t);var e=this.min,n=this.max,i=t.min,r=t.max,o=r.x>=e.x&&i.x<=n.x,s=r.y>=e.y&&i.y<=n.y;return o&&s},overlaps:function(t){t=z(t);var e=this.min,n=this.max,i=t.min,r=t.max,o=r.x>e.x&&i.xe.y&&i.y=i.lat&&n.lat<=r.lat&&e.lng>=i.lng&&n.lng<=r.lng},intersects:function(t){t=D(t);var e=this._southWest,n=this._northEast,i=t.getSouthWest(),r=t.getNorthEast(),o=r.lat>=e.lat&&i.lat<=n.lat,s=r.lng>=e.lng&&i.lng<=n.lng;return o&&s},overlaps:function(t){t=D(t);var e=this._southWest,n=this._northEast,i=t.getSouthWest(),r=t.getNorthEast(),o=r.lat>e.lat&&i.late.lng&&i.lng1,Bt=function(){var t=!1;try{var e=Object.defineProperty({},"passive",{get:function(){t=!0}});window.addEventListener("testPassiveEventSupport",u,e),window.removeEventListener("testPassiveEventSupport",u,e)}catch(t){}return t}(),Et=!!document.createElement("canvas").getContext,kt=!(!document.createElementNS||!G("svg").createSVGRect),St=!kt&&function(){try{var t=document.createElement("div");t.innerHTML='';var e=t.firstChild;return e.style.behavior="url(#default#VML)",e&&"object"==typeof e.adj}catch(t){return!1}}();function Pt(t){return navigator.userAgent.toLowerCase().indexOf(t)>=0}var Ot={ie:Q,ielt9:$,edge:J,webkit:tt,android:et,android23:nt,androidStock:rt,opera:ot,chrome:st,gecko:at,safari:ut,phantom:ct,opera12:lt,win:ht,ie3d:ft,webkit3d:pt,gecko3d:dt,any3d:mt,mobile:vt,mobileWebkit:bt,mobileWebkit3d:_t,msPointer:yt,pointer:At,touch:gt,mobileOpera:xt,mobileGecko:Ct,retina:wt,passiveEvents:Bt,canvas:Et,svg:kt,vml:St},Tt=yt?"MSPointerDown":"pointerdown",jt=yt?"MSPointerMove":"pointermove",Lt=yt?"MSPointerUp":"pointerup",It=yt?"MSPointerCancel":"pointercancel",zt={},Mt=!1;function Dt(t,e,n,r){return"touchstart"===e?function(t,e,n){var r=i((function(t){t.MSPOINTER_TYPE_TOUCH&&t.pointerType===t.MSPOINTER_TYPE_TOUCH&&Ie(t),Vt(t,e)}));t["_leaflet_touchstart"+n]=r,t.addEventListener(Tt,r,!1),Mt||(document.addEventListener(Tt,Nt,!0),document.addEventListener(jt,Zt,!0),document.addEventListener(Lt,Rt,!0),document.addEventListener(It,Rt,!0),Mt=!0)}(t,n,r):"touchmove"===e?function(t,e,n){var i=function(t){t.pointerType===(t.MSPOINTER_TYPE_MOUSE||"mouse")&&0===t.buttons||Vt(t,e)};t["_leaflet_touchmove"+n]=i,t.addEventListener(jt,i,!1)}(t,n,r):"touchend"===e&&function(t,e,n){var i=function(t){Vt(t,e)};t["_leaflet_touchend"+n]=i,t.addEventListener(Lt,i,!1),t.addEventListener(It,i,!1)}(t,n,r),this}function Nt(t){zt[t.pointerId]=t}function Zt(t){zt[t.pointerId]&&(zt[t.pointerId]=t)}function Rt(t){delete zt[t.pointerId]}function Vt(t,e){for(var n in t.touches=[],zt)t.touches.push(zt[n]);t.changedTouches=[t],e(t)}var Wt,Ft,Ht,Yt,Ut,qt=yt?"MSPointerDown":At?"pointerdown":"touchstart",Gt=yt?"MSPointerUp":At?"pointerup":"touchend",Kt="_leaflet_",Xt=fe(["transform","webkitTransform","OTransform","MozTransform","msTransform"]),Qt=fe(["webkitTransition","transition","OTransition","MozTransition","msTransition"]),$t="webkitTransition"===Qt||"OTransition"===Qt?Qt+"End":"transitionend";function Jt(t){return"string"==typeof t?document.getElementById(t):t}function te(t,e){var n=t.style[e]||t.currentStyle&&t.currentStyle[e];if((!n||"auto"===n)&&document.defaultView){var i=document.defaultView.getComputedStyle(t,null);n=i?i[e]:null}return"auto"===n?null:n}function ee(t,e,n){var i=document.createElement(t);return i.className=e||"",n&&n.appendChild(i),i}function ne(t){var e=t.parentNode;e&&e.removeChild(t)}function ie(t){for(;t.firstChild;)t.removeChild(t.firstChild)}function re(t){var e=t.parentNode;e&&e.lastChild!==t&&e.appendChild(t)}function oe(t){var e=t.parentNode;e&&e.firstChild!==t&&e.insertBefore(t,e.firstChild)}function se(t,e){if(void 0!==t.classList)return t.classList.contains(e);var n=le(t);return n.length>0&&new RegExp("(^|\\s)"+e+"(\\s|$)").test(n)}function ae(t,e){if(void 0!==t.classList)for(var n=h(e),i=0,r=n.length;i1)return;var e=Date.now(),n=e-(i||e);r=t.touches?t.touches[0]:t,o=n>0&&n<=250,i=e}function a(t){if(o&&!r.cancelBubble){if(At){if("mouse"===t.pointerType)return;var n,s,a={};for(s in r)n=r[s],a[s]=n&&n.bind?n.bind(r):n;r=a}r.type="dblclick",r.button=0,e(r),i=null}}t[Kt+qt+n]=s,t[Kt+Gt+n]=a,t[Kt+"dblclick"+n]=e,t.addEventListener(qt,s,!!Bt&&{passive:!1}),t.addEventListener(Gt,a,!!Bt&&{passive:!1}),t.addEventListener("dblclick",e,!1)}(t,s,r):"addEventListener"in t?"touchstart"===e||"touchmove"===e||"wheel"===e||"mousewheel"===e?t.addEventListener(Se[e]||e,s,!!Bt&&{passive:!1}):"mouseenter"===e||"mouseleave"===e?(s=function(e){e=e||window.event,We(t,e)&&a(e)},t.addEventListener(Se[e],s,!1)):t.addEventListener(e,a,!1):"attachEvent"in t&&t.attachEvent("on"+e,s),t[Be]=t[Be]||{},t[Be][r]=s}function Oe(t,e,n,i){var r=e+o(n)+(i?"_"+o(i):""),s=t[Be]&&t[Be][r];if(!s)return this;At&&0===e.indexOf("touch")?function(t,e,n){var i=t["_leaflet_"+e+n];"touchstart"===e?t.removeEventListener(Tt,i,!1):"touchmove"===e?t.removeEventListener(jt,i,!1):"touchend"===e&&(t.removeEventListener(Lt,i,!1),t.removeEventListener(It,i,!1))}(t,e,r):gt&&"dblclick"===e&&!ke()?function(t,e){var n=t[Kt+qt+e],i=t[Kt+Gt+e],r=t[Kt+"dblclick"+e];t.removeEventListener(qt,n,!!Bt&&{passive:!1}),t.removeEventListener(Gt,i,!!Bt&&{passive:!1}),t.removeEventListener("dblclick",r,!1)}(t,r):"removeEventListener"in t?t.removeEventListener(Se[e]||e,s,!1):"detachEvent"in t&&t.detachEvent("on"+e,s),t[Be][r]=null}function Te(t){return t.stopPropagation?t.stopPropagation():t.originalEvent?t.originalEvent._stopped=!0:t.cancelBubble=!0,Ve(t),this}function je(t){return Pe(t,"wheel",Te),this}function Le(t){return we(t,"mousedown touchstart dblclick",Te),Pe(t,"click",Re),this}function Ie(t){return t.preventDefault?t.preventDefault():t.returnValue=!1,this}function ze(t){return Ie(t),Te(t),this}function Me(t,e){if(!e)return new O(t.clientX,t.clientY);var n=xe(e),i=n.boundingClientRect;return new O((t.clientX-i.left)/n.x-e.clientLeft,(t.clientY-i.top)/n.y-e.clientTop)}var De=ht&&st?2*window.devicePixelRatio:at?window.devicePixelRatio:1;function Ne(t){return J?t.wheelDeltaY/2:t.deltaY&&0===t.deltaMode?-t.deltaY/De:t.deltaY&&1===t.deltaMode?20*-t.deltaY:t.deltaY&&2===t.deltaMode?60*-t.deltaY:t.deltaX||t.deltaZ?0:t.wheelDelta?(t.wheelDeltaY||t.wheelDelta)/2:t.detail&&Math.abs(t.detail)<32765?20*-t.detail:t.detail?t.detail/-32765*60:0}var Ze={};function Re(t){Ze[t.type]=!0}function Ve(t){var e=Ze[t.type];return Ze[t.type]=!1,e}function We(t,e){var n=e.relatedTarget;if(!n)return!0;try{for(;n&&n!==t;)n=n.parentNode}catch(t){return!1}return n!==t}var Fe={on:we,off:Ee,stopPropagation:Te,disableScrollPropagation:je,disableClickPropagation:Le,preventDefault:Ie,stop:ze,getMousePosition:Me,getWheelDelta:Ne,fakeStop:Re,skipped:Ve,isExternalTarget:We,addListener:we,removeListener:Ee},He=P.extend({run:function(t,e,n,i){this.stop(),this._el=t,this._inProgress=!0,this._duration=n||.25,this._easeOutPower=1/Math.max(i||.5,.2),this._startPos=me(t),this._offset=e.subtract(this._startPos),this._startTime=+new Date,this.fire("start"),this._animate()},stop:function(){this._inProgress&&(this._step(!0),this._complete())},_animate:function(){this._animId=w(this._animate,this),this._step()},_step:function(t){var e=+new Date-this._startTime,n=1e3*this._duration;ethis.options.maxZoom)?this.setZoom(t):this},panInsideBounds:function(t,e){this._enforcingBounds=!0;var n=this.getCenter(),i=this._limitCenter(n,this._zoom,D(t));return n.equals(i)||this.panTo(i,e),this._enforcingBounds=!1,this},panInside:function(t,e){var n=j((e=e||{}).paddingTopLeft||e.padding||[0,0]),i=j(e.paddingBottomRight||e.padding||[0,0]),r=this.getCenter(),o=this.project(r),s=this.project(t),a=this.getPixelBounds(),u=a.getSize().divideBy(2),c=z([a.min.add(n),a.max.subtract(i)]);if(!c.contains(s)){this._enforcingBounds=!0;var l=o.subtract(s),h=j(s.x+l.x,s.y+l.y);(s.xc.max.x)&&(h.x=o.x-l.x,l.x>0?h.x+=u.x-n.x:h.x-=u.x-i.x),(s.yc.max.y)&&(h.y=o.y-l.y,l.y>0?h.y+=u.y-n.y:h.y-=u.y-i.y),this.panTo(this.unproject(h),e),this._enforcingBounds=!1}return this},invalidateSize:function(t){if(!this._loaded)return this;t=e({animate:!1,pan:!0},!0===t?{animate:!0}:t);var n=this.getSize();this._sizeChanged=!0,this._lastCenter=null;var r=this.getSize(),o=n.divideBy(2).round(),s=r.divideBy(2).round(),a=o.subtract(s);return a.x||a.y?(t.animate&&t.pan?this.panBy(a):(t.pan&&this._rawPanBy(a),this.fire("move"),t.debounceMoveend?(clearTimeout(this._sizeTimer),this._sizeTimer=setTimeout(i(this.fire,this,"moveend"),200)):this.fire("moveend")),this.fire("resize",{oldSize:n,newSize:r})):this},stop:function(){return this.setZoom(this._limitZoom(this._zoom)),this.options.zoomSnap||this.fire("viewreset"),this._stop()},locate:function(t){if(t=this._locateOptions=e({timeout:1e4,watch:!1},t),!("geolocation"in navigator))return this._handleGeolocationError({code:0,message:"Geolocation not supported."}),this;var n=i(this._handleGeolocationResponse,this),r=i(this._handleGeolocationError,this);return t.watch?this._locationWatchId=navigator.geolocation.watchPosition(n,r,t):navigator.geolocation.getCurrentPosition(n,r,t),this},stopLocate:function(){return navigator.geolocation&&navigator.geolocation.clearWatch&&navigator.geolocation.clearWatch(this._locationWatchId),this._locateOptions&&(this._locateOptions.setView=!1),this},_handleGeolocationError:function(t){var e=t.code,n=t.message||(1===e?"permission denied":2===e?"position unavailable":"timeout");this._locateOptions.setView&&!this._loaded&&this.fitWorld(),this.fire("locationerror",{code:e,message:"Geolocation error: "+n+"."})},_handleGeolocationResponse:function(t){var e=new N(t.coords.latitude,t.coords.longitude),n=e.toBounds(2*t.coords.accuracy),i=this._locateOptions;if(i.setView){var r=this.getBoundsZoom(n);this.setView(e,i.maxZoom?Math.min(r,i.maxZoom):r)}var o={latlng:e,bounds:n,timestamp:t.timestamp};for(var s in t.coords)"number"==typeof t.coords[s]&&(o[s]=t.coords[s]);this.fire("locationfound",o)},addHandler:function(t,e){if(!e)return this;var n=this[t]=new e(this);return this._handlers.push(n),this.options[t]&&n.enable(),this},remove:function(){if(this._initEvents(!0),this.off("moveend",this._panInsideMaxBounds),this._containerId!==this._container._leaflet_id)throw new Error("Map container is being reused by another instance");try{delete this._container._leaflet_id,delete this._containerId}catch(t){this._container._leaflet_id=void 0,this._containerId=void 0}var t;for(t in void 0!==this._locationWatchId&&this.stopLocate(),this._stop(),ne(this._mapPane),this._clearControlPos&&this._clearControlPos(),this._resizeRequest&&(B(this._resizeRequest),this._resizeRequest=null),this._clearHandlers(),this._loaded&&this.fire("unload"),this._layers)this._layers[t].remove();for(t in this._panes)ne(this._panes[t]);return this._layers=[],this._panes=[],delete this._mapPane,delete this._renderer,this},createPane:function(t,e){var n=ee("div","leaflet-pane"+(t?" leaflet-"+t.replace("Pane","")+"-pane":""),e||this._mapPane);return t&&(this._panes[t]=n),n},getCenter:function(){return this._checkIfLoaded(),this._lastCenter&&!this._moved()?this._lastCenter:this.layerPointToLatLng(this._getCenterLayerPoint())},getZoom:function(){return this._zoom},getBounds:function(){var t=this.getPixelBounds();return new M(this.unproject(t.getBottomLeft()),this.unproject(t.getTopRight()))},getMinZoom:function(){return void 0===this.options.minZoom?this._layersMinZoom||0:this.options.minZoom},getMaxZoom:function(){return void 0===this.options.maxZoom?void 0===this._layersMaxZoom?1/0:this._layersMaxZoom:this.options.maxZoom},getBoundsZoom:function(t,e,n){t=D(t),n=j(n||[0,0]);var i=this.getZoom()||0,r=this.getMinZoom(),o=this.getMaxZoom(),s=t.getNorthWest(),a=t.getSouthEast(),u=this.getSize().subtract(n),c=z(this.project(a,i),this.project(s,i)).getSize(),l=mt?this.options.zoomSnap:1,h=u.x/c.x,f=u.y/c.y,p=e?Math.max(h,f):Math.min(h,f);return i=this.getScaleZoom(p,i),l&&(i=Math.round(i/(l/100))*(l/100),i=e?Math.ceil(i/l)*l:Math.floor(i/l)*l),Math.max(r,Math.min(o,i))},getSize:function(){return this._size&&!this._sizeChanged||(this._size=new O(this._container.clientWidth||0,this._container.clientHeight||0),this._sizeChanged=!1),this._size.clone()},getPixelBounds:function(t,e){var n=this._getTopLeftPoint(t,e);return new I(n,n.add(this.getSize()))},getPixelOrigin:function(){return this._checkIfLoaded(),this._pixelOrigin},getPixelWorldBounds:function(t){return this.options.crs.getProjectedBounds(void 0===t?this.getZoom():t)},getPane:function(t){return"string"==typeof t?this._panes[t]:t},getPanes:function(){return this._panes},getContainer:function(){return this._container},getZoomScale:function(t,e){var n=this.options.crs;return e=void 0===e?this._zoom:e,n.scale(t)/n.scale(e)},getScaleZoom:function(t,e){var n=this.options.crs;e=void 0===e?this._zoom:e;var i=n.zoom(t*n.scale(e));return isNaN(i)?1/0:i},project:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.latLngToPoint(Z(t),e)},unproject:function(t,e){return e=void 0===e?this._zoom:e,this.options.crs.pointToLatLng(j(t),e)},layerPointToLatLng:function(t){var e=j(t).add(this.getPixelOrigin());return this.unproject(e)},latLngToLayerPoint:function(t){return this.project(Z(t))._round()._subtract(this.getPixelOrigin())},wrapLatLng:function(t){return this.options.crs.wrapLatLng(Z(t))},wrapLatLngBounds:function(t){return this.options.crs.wrapLatLngBounds(D(t))},distance:function(t,e){return this.options.crs.distance(Z(t),Z(e))},containerPointToLayerPoint:function(t){return j(t).subtract(this._getMapPanePos())},layerPointToContainerPoint:function(t){return j(t).add(this._getMapPanePos())},containerPointToLatLng:function(t){var e=this.containerPointToLayerPoint(j(t));return this.layerPointToLatLng(e)},latLngToContainerPoint:function(t){return this.layerPointToContainerPoint(this.latLngToLayerPoint(Z(t)))},mouseEventToContainerPoint:function(t){return Me(t,this._container)},mouseEventToLayerPoint:function(t){return this.containerPointToLayerPoint(this.mouseEventToContainerPoint(t))},mouseEventToLatLng:function(t){return this.layerPointToLatLng(this.mouseEventToLayerPoint(t))},_initContainer:function(t){var e=this._container=Jt(t);if(!e)throw new Error("Map container not found.");if(e._leaflet_id)throw new Error("Map container is already initialized.");we(e,"scroll",this._onScroll,this),this._containerId=o(e)},_initLayout:function(){var t=this._container;this._fadeAnimated=this.options.fadeAnimation&&mt,ae(t,"leaflet-container"+(gt?" leaflet-touch":"")+(wt?" leaflet-retina":"")+($?" leaflet-oldie":"")+(ut?" leaflet-safari":"")+(this._fadeAnimated?" leaflet-fade-anim":""));var e=te(t,"position");"absolute"!==e&&"relative"!==e&&"fixed"!==e&&(t.style.position="relative"),this._initPanes(),this._initControlPos&&this._initControlPos()},_initPanes:function(){var t=this._panes={};this._paneRenderers={},this._mapPane=this.createPane("mapPane",this._container),de(this._mapPane,new O(0,0)),this.createPane("tilePane"),this.createPane("shadowPane"),this.createPane("overlayPane"),this.createPane("markerPane"),this.createPane("tooltipPane"),this.createPane("popupPane"),this.options.markerZoomAnimation||(ae(t.markerPane,"leaflet-zoom-hide"),ae(t.shadowPane,"leaflet-zoom-hide"))},_resetView:function(t,e){de(this._mapPane,new O(0,0));var n=!this._loaded;this._loaded=!0,e=this._limitZoom(e),this.fire("viewprereset");var i=this._zoom!==e;this._moveStart(i,!1)._move(t,e)._moveEnd(i),this.fire("viewreset"),n&&this.fire("load")},_moveStart:function(t,e){return t&&this.fire("zoomstart"),e||this.fire("movestart"),this},_move:function(t,e,n){void 0===e&&(e=this._zoom);var i=this._zoom!==e;return this._zoom=e,this._lastCenter=t,this._pixelOrigin=this._getNewPixelOrigin(t),(i||n&&n.pinch)&&this.fire("zoom",n),this.fire("move",n)},_moveEnd:function(t){return t&&this.fire("zoomend"),this.fire("moveend")},_stop:function(){return B(this._flyToFrame),this._panAnim&&this._panAnim.stop(),this},_rawPanBy:function(t){de(this._mapPane,this._getMapPanePos().subtract(t))},_getZoomSpan:function(){return this.getMaxZoom()-this.getMinZoom()},_panInsideMaxBounds:function(){this._enforcingBounds||this.panInsideBounds(this.options.maxBounds)},_checkIfLoaded:function(){if(!this._loaded)throw new Error("Set map center and zoom first.")},_initEvents:function(t){this._targets={},this._targets[o(this._container)]=this;var e=t?Ee:we;e(this._container,"click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu keypress keydown keyup",this._handleDOMEvent,this),this.options.trackResize&&e(window,"resize",this._onResize,this),mt&&this.options.transform3DLimit&&(t?this.off:this.on).call(this,"moveend",this._onMoveEnd)},_onResize:function(){B(this._resizeRequest),this._resizeRequest=w((function(){this.invalidateSize({debounceMoveend:!0})}),this)},_onScroll:function(){this._container.scrollTop=0,this._container.scrollLeft=0},_onMoveEnd:function(){var t=this._getMapPanePos();Math.max(Math.abs(t.x),Math.abs(t.y))>=this.options.transform3DLimit&&this._resetView(this.getCenter(),this.getZoom())},_findEventTargets:function(t,e){for(var n,i=[],r="mouseout"===e||"mouseover"===e,s=t.target||t.srcElement,a=!1;s;){if((n=this._targets[o(s)])&&("click"===e||"preclick"===e)&&!t._simulated&&this._draggableMoved(n)){a=!0;break}if(n&&n.listens(e,!0)){if(r&&!We(s,t))break;if(i.push(n),r)break}if(s===this._container)break;s=s.parentNode}return i.length||a||r||!We(s,t)||(i=[this]),i},_handleDOMEvent:function(t){if(this._loaded&&!Ve(t)){var e=t.type;"mousedown"!==e&&"keypress"!==e&&"keyup"!==e&&"keydown"!==e||ye(t.target||t.srcElement),this._fireDOMEvent(t,e)}},_mouseEvents:["click","dblclick","mouseover","mouseout","contextmenu"],_fireDOMEvent:function(t,n,i){if("click"===t.type){var r=e({},t);r.type="preclick",this._fireDOMEvent(r,r.type,i)}if(!t._stopped&&(i=(i||[]).concat(this._findEventTargets(t,n))).length){var o=i[0];"contextmenu"===n&&o.listens(n,!0)&&Ie(t);var s={originalEvent:t};if("keypress"!==t.type&&"keydown"!==t.type&&"keyup"!==t.type){var a=o.getLatLng&&(!o._radius||o._radius<=10);s.containerPoint=a?this.latLngToContainerPoint(o.getLatLng()):this.mouseEventToContainerPoint(t),s.layerPoint=this.containerPointToLayerPoint(s.containerPoint),s.latlng=a?o.getLatLng():this.layerPointToLatLng(s.layerPoint)}for(var u=0;u0?Math.round(t-e)/2:Math.max(0,Math.ceil(t))-Math.max(0,Math.floor(e))},_limitZoom:function(t){var e=this.getMinZoom(),n=this.getMaxZoom(),i=mt?this.options.zoomSnap:1;return i&&(t=Math.round(t/i)*i),Math.max(e,Math.min(n,t))},_onPanTransitionStep:function(){this.fire("move")},_onPanTransitionEnd:function(){ue(this._mapPane,"leaflet-pan-anim"),this.fire("moveend")},_tryAnimatedPan:function(t,e){var n=this._getCenterOffset(t)._trunc();return!(!0!==(e&&e.animate)&&!this.getSize().contains(n)||(this.panBy(n,e),0))},_createAnimProxy:function(){var t=this._proxy=ee("div","leaflet-proxy leaflet-zoom-animated");this._panes.mapPane.appendChild(t),this.on("zoomanim",(function(t){var e=Xt,n=this._proxy.style[e];pe(this._proxy,this.project(t.center,t.zoom),this.getZoomScale(t.zoom,1)),n===this._proxy.style[e]&&this._animatingZoom&&this._onZoomTransitionEnd()}),this),this.on("load moveend",this._animMoveEnd,this),this._on("unload",this._destroyAnimProxy,this)},_destroyAnimProxy:function(){ne(this._proxy),this.off("load moveend",this._animMoveEnd,this),delete this._proxy},_animMoveEnd:function(){var t=this.getCenter(),e=this.getZoom();pe(this._proxy,this.project(t,e),this.getZoomScale(e,1))},_catchTransitionEnd:function(t){this._animatingZoom&&t.propertyName.indexOf("transform")>=0&&this._onZoomTransitionEnd()},_nothingToAnimate:function(){return!this._container.getElementsByClassName("leaflet-zoom-animated").length},_tryAnimatedZoom:function(t,e,n){if(this._animatingZoom)return!0;if(n=n||{},!this._zoomAnimated||!1===n.animate||this._nothingToAnimate()||Math.abs(e-this._zoom)>this.options.zoomAnimationThreshold)return!1;var i=this.getZoomScale(e),r=this._getCenterOffset(t)._divideBy(1-1/i);return!(!0!==n.animate&&!this.getSize().contains(r)||(w((function(){this._moveStart(!0,!1)._animateZoom(t,e,!0)}),this),0))},_animateZoom:function(t,e,n,r){this._mapPane&&(n&&(this._animatingZoom=!0,this._animateToCenter=t,this._animateToZoom=e,ae(this._mapPane,"leaflet-zoom-anim")),this.fire("zoomanim",{center:t,zoom:e,noUpdate:r}),setTimeout(i(this._onZoomTransitionEnd,this),250))},_onZoomTransitionEnd:function(){this._animatingZoom&&(this._mapPane&&ue(this._mapPane,"leaflet-zoom-anim"),this._animatingZoom=!1,this._move(this._animateToCenter,this._animateToZoom),w((function(){this._moveEnd(!0)}),this))}}),Ue=k.extend({options:{position:"topright"},initialize:function(t){f(this,t)},getPosition:function(){return this.options.position},setPosition:function(t){var e=this._map;return e&&e.removeControl(this),this.options.position=t,e&&e.addControl(this),this},getContainer:function(){return this._container},addTo:function(t){this.remove(),this._map=t;var e=this._container=this.onAdd(t),n=this.getPosition(),i=t._controlCorners[n];return ae(e,"leaflet-control"),-1!==n.indexOf("bottom")?i.insertBefore(e,i.firstChild):i.appendChild(e),this._map.on("unload",this.remove,this),this},remove:function(){return this._map?(ne(this._container),this.onRemove&&this.onRemove(this._map),this._map.off("unload",this.remove,this),this._map=null,this):this},_refocusOnMap:function(t){this._map&&t&&t.screenX>0&&t.screenY>0&&this._map.getContainer().focus()}}),qe=function(t){return new Ue(t)};Ye.include({addControl:function(t){return t.addTo(this),this},removeControl:function(t){return t.remove(),this},_initControlPos:function(){var t=this._controlCorners={},e="leaflet-",n=this._controlContainer=ee("div",e+"control-container",this._container);function i(i,r){var o=e+i+" "+e+r;t[i+r]=ee("div",o,n)}i("top","left"),i("top","right"),i("bottom","left"),i("bottom","right")},_clearControlPos:function(){for(var t in this._controlCorners)ne(this._controlCorners[t]);ne(this._controlContainer),delete this._controlCorners,delete this._controlContainer}});var Ge=Ue.extend({options:{collapsed:!0,position:"topright",autoZIndex:!0,hideSingleBase:!1,sortLayers:!1,sortFunction:function(t,e,n,i){return n1,this._baseLayersList.style.display=t?"":"none"),this._separator.style.display=e&&t?"":"none",this},_onLayerChange:function(t){this._handlingClick||this._update();var e=this._getLayer(o(t.target)),n=e.overlay?"add"===t.type?"overlayadd":"overlayremove":"add"===t.type?"baselayerchange":null;n&&this._map.fire(n,e)},_createRadioElement:function(t,e){var n='",i=document.createElement("div");return i.innerHTML=n,i.firstChild},_addItem:function(t){var e,n=document.createElement("label"),i=this._map.hasLayer(t.layer);t.overlay?((e=document.createElement("input")).type="checkbox",e.className="leaflet-control-layers-selector",e.defaultChecked=i):e=this._createRadioElement("leaflet-base-layers_"+o(this),i),this._layerControlInputs.push(e),e.layerId=o(t.layer),we(e,"click",this._onInputClick,this);var r=document.createElement("span");r.innerHTML=" "+t.name;var s=document.createElement("div");return n.appendChild(s),s.appendChild(e),s.appendChild(r),(t.overlay?this._overlaysList:this._baseLayersList).appendChild(n),this._checkDisabledLayers(),n},_onInputClick:function(){var t,e,n=this._layerControlInputs,i=[],r=[];this._handlingClick=!0;for(var o=n.length-1;o>=0;o--)t=n[o],e=this._getLayer(t.layerId).layer,t.checked?i.push(e):t.checked||r.push(e);for(o=0;o=0;r--)t=n[r],e=this._getLayer(t.layerId).layer,t.disabled=void 0!==e.options.minZoom&&ie.options.maxZoom},_expandIfNotCollapsed:function(){return this._map&&!this.options.collapsed&&this.expand(),this},_expand:function(){return this.expand()},_collapse:function(){return this.collapse()}}),Ke=Ue.extend({options:{position:"topleft",zoomInText:"+",zoomInTitle:"Zoom in",zoomOutText:"−",zoomOutTitle:"Zoom out"},onAdd:function(t){var e="leaflet-control-zoom",n=ee("div",e+" leaflet-bar"),i=this.options;return this._zoomInButton=this._createButton(i.zoomInText,i.zoomInTitle,e+"-in",n,this._zoomIn),this._zoomOutButton=this._createButton(i.zoomOutText,i.zoomOutTitle,e+"-out",n,this._zoomOut),this._updateDisabled(),t.on("zoomend zoomlevelschange",this._updateDisabled,this),n},onRemove:function(t){t.off("zoomend zoomlevelschange",this._updateDisabled,this)},disable:function(){return this._disabled=!0,this._updateDisabled(),this},enable:function(){return this._disabled=!1,this._updateDisabled(),this},_zoomIn:function(t){!this._disabled&&this._map._zoomthis._map.getMinZoom()&&this._map.zoomOut(this._map.options.zoomDelta*(t.shiftKey?3:1))},_createButton:function(t,e,n,i,r){var o=ee("a",n,i);return o.innerHTML=t,o.href="#",o.title=e,o.setAttribute("role","button"),o.setAttribute("aria-label",e),Le(o),we(o,"click",ze),we(o,"click",r,this),we(o,"click",this._refocusOnMap,this),o},_updateDisabled:function(){var t=this._map,e="leaflet-disabled";ue(this._zoomInButton,e),ue(this._zoomOutButton,e),(this._disabled||t._zoom===t.getMinZoom())&&ae(this._zoomOutButton,e),(this._disabled||t._zoom===t.getMaxZoom())&&ae(this._zoomInButton,e)}});Ye.mergeOptions({zoomControl:!0}),Ye.addInitHook((function(){this.options.zoomControl&&(this.zoomControl=new Ke,this.addControl(this.zoomControl))}));var Xe=Ue.extend({options:{position:"bottomleft",maxWidth:100,metric:!0,imperial:!0},onAdd:function(t){var e=ee("div","leaflet-control-scale"),n=this.options;return this._addScales(n,"leaflet-control-scale-line",e),t.on(n.updateWhenIdle?"moveend":"move",this._update,this),t.whenReady(this._update,this),e},onRemove:function(t){t.off(this.options.updateWhenIdle?"moveend":"move",this._update,this)},_addScales:function(t,e,n){t.metric&&(this._mScale=ee("div",e,n)),t.imperial&&(this._iScale=ee("div",e,n))},_update:function(){var t=this._map,e=t.getSize().y/2,n=t.distance(t.containerPointToLatLng([0,e]),t.containerPointToLatLng([this.options.maxWidth,e]));this._updateScales(n)},_updateScales:function(t){this.options.metric&&t&&this._updateMetric(t),this.options.imperial&&t&&this._updateImperial(t)},_updateMetric:function(t){var e=this._getRoundNum(t),n=e<1e3?e+" m":e/1e3+" km";this._updateScale(this._mScale,n,e/t)},_updateImperial:function(t){var e,n,i,r=3.2808399*t;r>5280?(e=r/5280,n=this._getRoundNum(e),this._updateScale(this._iScale,n+" mi",n/e)):(i=this._getRoundNum(r),this._updateScale(this._iScale,i+" ft",i/r))},_updateScale:function(t,e,n){t.style.width=Math.round(this.options.maxWidth*n)+"px",t.innerHTML=e},_getRoundNum:function(t){var e=Math.pow(10,(Math.floor(t)+"").length-1),n=t/e;return e*(n=n>=10?10:n>=5?5:n>=3?3:n>=2?2:1)}}),Qe=Ue.extend({options:{position:"bottomright",prefix:'Leaflet'},initialize:function(t){f(this,t),this._attributions={}},onAdd:function(t){for(var e in t.attributionControl=this,this._container=ee("div","leaflet-control-attribution"),Le(this._container),t._layers)t._layers[e].getAttribution&&this.addAttribution(t._layers[e].getAttribution());return this._update(),this._container},setPrefix:function(t){return this.options.prefix=t,this._update(),this},addAttribution:function(t){return t?(this._attributions[t]||(this._attributions[t]=0),this._attributions[t]++,this._update(),this):this},removeAttribution:function(t){return t?(this._attributions[t]&&(this._attributions[t]--,this._update()),this):this},_update:function(){if(this._map){var t=[];for(var e in this._attributions)this._attributions[e]&&t.push(e);var n=[];this.options.prefix&&n.push(this.options.prefix),t.length&&n.push(t.join(", ")),this._container.innerHTML=n.join(" | ")}}});Ye.mergeOptions({attributionControl:!0}),Ye.addInitHook((function(){this.options.attributionControl&&(new Qe).addTo(this)})),Ue.Layers=Ge,Ue.Zoom=Ke,Ue.Scale=Xe,Ue.Attribution=Qe,qe.layers=function(t,e,n){return new Ge(t,e,n)},qe.zoom=function(t){return new Ke(t)},qe.scale=function(t){return new Xe(t)},qe.attribution=function(t){return new Qe(t)};var $e=k.extend({initialize:function(t){this._map=t},enable:function(){return this._enabled||(this._enabled=!0,this.addHooks()),this},disable:function(){return this._enabled?(this._enabled=!1,this.removeHooks(),this):this},enabled:function(){return!!this._enabled}});$e.addTo=function(t,e){return t.addHandler(e,this),this};var Je,tn={Events:S},en=gt?"touchstart mousedown":"mousedown",nn={mousedown:"mouseup",touchstart:"touchend",pointerdown:"touchend",MSPointerDown:"touchend"},rn={mousedown:"mousemove",touchstart:"touchmove",pointerdown:"touchmove",MSPointerDown:"touchmove"},on=P.extend({options:{clickTolerance:3},initialize:function(t,e,n,i){f(this,i),this._element=t,this._dragStartTarget=e||t,this._preventOutline=n},enable:function(){this._enabled||(we(this._dragStartTarget,en,this._onDown,this),this._enabled=!0)},disable:function(){this._enabled&&(on._dragging===this&&this.finishDrag(),Ee(this._dragStartTarget,en,this._onDown,this),this._enabled=!1,this._moved=!1)},_onDown:function(t){if(!t._simulated&&this._enabled&&(this._moved=!1,!se(this._element,"leaflet-zoom-anim")&&!(on._dragging||t.shiftKey||1!==t.which&&1!==t.button&&!t.touches||(on._dragging=this,this._preventOutline&&ye(this._element),be(),Wt(),this._moving)))){this.fire("down");var e=t.touches?t.touches[0]:t,n=ge(this._element);this._startPoint=new O(e.clientX,e.clientY),this._parentScale=xe(n),we(document,rn[t.type],this._onMove,this),we(document,nn[t.type],this._onUp,this)}},_onMove:function(t){if(!t._simulated&&this._enabled)if(t.touches&&t.touches.length>1)this._moved=!0;else{var e=t.touches&&1===t.touches.length?t.touches[0]:t,n=new O(e.clientX,e.clientY)._subtract(this._startPoint);(n.x||n.y)&&(Math.abs(n.x)+Math.abs(n.y)c&&(s=a,c=u);c>i&&(n[s]=1,t(e,n,i,r,s),t(e,n,i,s,o))}(t,i,e,0,n-1);var r,o=[];for(r=0;re&&(n.push(t[i]),r=i);var s,a,u,c;return re.max.x&&(n|=2),t.ye.max.y&&(n|=8),n}function hn(t,e,n,i){var r,o=e.x,s=e.y,a=n.x-o,u=n.y-s,c=a*a+u*u;return c>0&&((r=((t.x-o)*a+(t.y-s)*u)/c)>1?(o=n.x,s=n.y):r>0&&(o+=a*r,s+=u*r)),a=t.x-o,u=t.y-s,i?a*a+u*u:new O(o,s)}function fn(t){return!v(t[0])||"object"!=typeof t[0][0]&&void 0!==t[0][0]}function pn(t){return console.warn("Deprecated use of _flat, please use L.LineUtil.isFlat instead."),fn(t)}var dn={simplify:sn,pointToSegmentDistance:an,closestPointOnSegment:function(t,e,n){return hn(t,e,n)},clipSegment:un,_getEdgeIntersection:cn,_getBitCode:ln,_sqClosestPointOnSegment:hn,isFlat:fn,_flat:pn};function mn(t,e,n){var i,r,o,s,a,u,c,l,h,f=[1,4,2,8];for(r=0,c=t.length;r1e-7;u++)e=o*Math.sin(a),e=Math.pow((1-e)/(1+e),o/2),a+=c=Math.PI/2-2*Math.atan(s*e)-a;return new N(a*n,t.x*n/i)}},yn={LonLat:bn,Mercator:_n,SphericalMercator:F},An=e({},W,{code:"EPSG:3395",projection:_n,transformation:function(){var t=.5/(Math.PI*_n.R);return Y(t,.5,-t,.5)}()}),gn=e({},W,{code:"EPSG:4326",projection:bn,transformation:Y(1/180,1,-1/180,.5)}),xn=e({},V,{projection:bn,transformation:Y(1,0,-1,0),scale:function(t){return Math.pow(2,t)},zoom:function(t){return Math.log(t)/Math.LN2},distance:function(t,e){var n=e.lng-t.lng,i=e.lat-t.lat;return Math.sqrt(n*n+i*i)},infinite:!0});V.Earth=W,V.EPSG3395=An,V.EPSG3857=U,V.EPSG900913=q,V.EPSG4326=gn,V.Simple=xn;var Cn=P.extend({options:{pane:"overlayPane",attribution:null,bubblingMouseEvents:!0},addTo:function(t){return t.addLayer(this),this},remove:function(){return this.removeFrom(this._map||this._mapToAdd)},removeFrom:function(t){return t&&t.removeLayer(this),this},getPane:function(t){return this._map.getPane(t?this.options[t]||t:this.options.pane)},addInteractiveTarget:function(t){return this._map._targets[o(t)]=this,this},removeInteractiveTarget:function(t){return delete this._map._targets[o(t)],this},getAttribution:function(){return this.options.attribution},_layerAdd:function(t){var e=t.target;if(e.hasLayer(this)){if(this._map=e,this._zoomAnimated=e._zoomAnimated,this.getEvents){var n=this.getEvents();e.on(n,this),this.once("remove",(function(){e.off(n,this)}),this)}this.onAdd(e),this.getAttribution&&e.attributionControl&&e.attributionControl.addAttribution(this.getAttribution()),this.fire("add"),e.fire("layeradd",{layer:this})}}});Ye.include({addLayer:function(t){if(!t._layerAdd)throw new Error("The provided object is not a Layer.");var e=o(t);return this._layers[e]||(this._layers[e]=t,t._mapToAdd=this,t.beforeAdd&&t.beforeAdd(this),this.whenReady(t._layerAdd,t)),this},removeLayer:function(t){var e=o(t);return this._layers[e]?(this._loaded&&t.onRemove(this),t.getAttribution&&this.attributionControl&&this.attributionControl.removeAttribution(t.getAttribution()),delete this._layers[e],this._loaded&&(this.fire("layerremove",{layer:t}),t.fire("remove")),t._map=t._mapToAdd=null,this):this},hasLayer:function(t){return!!t&&o(t)in this._layers},eachLayer:function(t,e){for(var n in this._layers)t.call(e,this._layers[n]);return this},_addLayers:function(t){for(var e=0,n=(t=t?v(t)?t:[t]:[]).length;ethis._layersMaxZoom&&this.setZoom(this._layersMaxZoom),void 0===this.options.minZoom&&this._layersMinZoom&&this.getZoom()e)return s=(i-e)/n,this._map.layerPointToLatLng([o.x-s*(o.x-r.x),o.y-s*(o.y-r.y)])},getBounds:function(){return this._bounds},addLatLng:function(t,e){return e=e||this._defaultShape(),t=Z(t),e.push(t),this._bounds.extend(t),this.redraw()},_setLatLngs:function(t){this._bounds=new M,this._latlngs=this._convertLatLngs(t)},_defaultShape:function(){return fn(this._latlngs)?this._latlngs:this._latlngs[0]},_convertLatLngs:function(t){for(var e=[],n=fn(t),i=0,r=t.length;i=2&&e[0]instanceof N&&e[0].equals(e[n-1])&&e.pop(),e},_setLatLngs:function(t){Ln.prototype._setLatLngs.call(this,t),fn(this._latlngs)&&(this._latlngs=[this._latlngs])},_defaultShape:function(){return fn(this._latlngs[0])?this._latlngs[0]:this._latlngs[0][0]},_clipPoints:function(){var t=this._renderer._bounds,e=this.options.weight,n=new O(e,e);if(t=new I(t.min.subtract(n),t.max.add(n)),this._parts=[],this._pxBounds&&this._pxBounds.intersects(t))if(this.options.noClip)this._parts=this._rings;else for(var i,r=0,o=this._rings.length;rt.y!=i.y>t.y&&t.x<(i.x-n.x)*(t.y-n.y)/(i.y-n.y)+n.x&&(c=!c);return c||Ln.prototype._containsPoint.call(this,t,!0)}}),zn=Bn.extend({initialize:function(t,e){f(this,e),this._layers={},t&&this.addData(t)},addData:function(t){var e,n,i,r=v(t)?t:t.features;if(r){for(e=0,n=r.length;e0?r:[e.src]}else{v(this._url)||(this._url=[this._url]),!this.options.keepAspectRatio&&Object.prototype.hasOwnProperty.call(e.style,"objectFit")&&(e.style.objectFit="fill"),e.autoplay=!!this.options.autoplay,e.loop=!!this.options.loop,e.muted=!!this.options.muted;for(var s=0;sr?(e.height=r+"px",ae(t,"leaflet-popup-scrolled")):ue(t,"leaflet-popup-scrolled"),this._containerWidth=this._container.offsetWidth},_animateZoom:function(t){var e=this._map._latLngToNewLayerPoint(this._latlng,t.zoom,t.center),n=this._getAnchor();de(this._container,e.add(n))},_adjustPan:function(){if(this.options.autoPan){this._map._panAnim&&this._map._panAnim.stop();var t=this._map,e=parseInt(te(this._container,"marginBottom"),10)||0,n=this._container.offsetHeight+e,i=this._containerWidth,r=new O(this._containerLeft,-n-this._containerBottom);r._add(me(this._container));var o=t.layerPointToContainerPoint(r),s=j(this.options.autoPanPadding),a=j(this.options.autoPanPaddingTopLeft||s),u=j(this.options.autoPanPaddingBottomRight||s),c=t.getSize(),l=0,h=0;o.x+i+u.x>c.x&&(l=o.x+i-c.x+u.x),o.x-l-a.x<0&&(l=o.x-a.x),o.y+n+u.y>c.y&&(h=o.y+n-c.y+u.y),o.y-h-a.y<0&&(h=o.y-a.y),(l||h)&&t.fire("autopanstart").panBy([l,h])}},_onCloseButtonClick:function(t){this._close(),ze(t)},_getAnchor:function(){return j(this._source&&this._source._getPopupAnchor?this._source._getPopupAnchor():[0,0])}});Ye.mergeOptions({closePopupOnClick:!0}),Ye.include({openPopup:function(t,e,n){return t instanceof Qn||(t=new Qn(n).setContent(t)),e&&t.setLatLng(e),this.hasLayer(t)?this:(this._popup&&this._popup.options.autoClose&&this.closePopup(),this._popup=t,this.addLayer(t))},closePopup:function(t){return t&&t!==this._popup||(t=this._popup,this._popup=null),t&&this.removeLayer(t),this}}),Cn.include({bindPopup:function(t,e){return t instanceof Qn?(f(t,e),this._popup=t,t._source=this):(this._popup&&!e||(this._popup=new Qn(e,this)),this._popup.setContent(t)),this._popupHandlersAdded||(this.on({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!0),this},unbindPopup:function(){return this._popup&&(this.off({click:this._openPopup,keypress:this._onKeyPress,remove:this.closePopup,move:this._movePopup}),this._popupHandlersAdded=!1,this._popup=null),this},openPopup:function(t,e){return this._popup&&this._map&&(e=this._popup._prepareOpen(this,t,e),this._map.openPopup(this._popup,e)),this},closePopup:function(){return this._popup&&this._popup._close(),this},togglePopup:function(t){return this._popup&&(this._popup._map?this.closePopup():this.openPopup(t)),this},isPopupOpen:function(){return!!this._popup&&this._popup.isOpen()},setPopupContent:function(t){return this._popup&&this._popup.setContent(t),this},getPopup:function(){return this._popup},_openPopup:function(t){var e=t.layer||t.target;this._popup&&this._map&&(ze(t),e instanceof On?this.openPopup(t.layer||t.target,t.latlng):this._map.hasLayer(this._popup)&&this._popup._source===e?this.closePopup():this.openPopup(e,t.latlng))},_movePopup:function(t){this._popup.setLatLng(t.latlng)},_onKeyPress:function(t){13===t.originalEvent.keyCode&&this._openPopup(t)}});var $n=Xn.extend({options:{pane:"tooltipPane",offset:[0,0],direction:"auto",permanent:!1,sticky:!1,interactive:!1,opacity:.9},onAdd:function(t){Xn.prototype.onAdd.call(this,t),this.setOpacity(this.options.opacity),t.fire("tooltipopen",{tooltip:this}),this._source&&this._source.fire("tooltipopen",{tooltip:this},!0)},onRemove:function(t){Xn.prototype.onRemove.call(this,t),t.fire("tooltipclose",{tooltip:this}),this._source&&this._source.fire("tooltipclose",{tooltip:this},!0)},getEvents:function(){var t=Xn.prototype.getEvents.call(this);return gt&&!this.options.permanent&&(t.preclick=this._close),t},_close:function(){this._map&&this._map.closeTooltip(this)},_initLayout:function(){var t="leaflet-tooltip "+(this.options.className||"")+" leaflet-zoom-"+(this._zoomAnimated?"animated":"hide");this._contentNode=this._container=ee("div",t)},_updateLayout:function(){},_adjustPan:function(){},_setPosition:function(t){var e,n,i=this._map,r=this._container,o=i.latLngToContainerPoint(i.getCenter()),s=i.layerPointToContainerPoint(t),a=this.options.direction,u=r.offsetWidth,c=r.offsetHeight,l=j(this.options.offset),h=this._getAnchor();"top"===a?(e=u/2,n=c):"bottom"===a?(e=u/2,n=0):"center"===a?(e=u/2,n=c/2):"right"===a?(e=0,n=c/2):"left"===a?(e=u,n=c/2):s.xthis.options.maxZoom||ni&&this._retainParent(r,o,s,i))},_retainChildren:function(t,e,n,i){for(var r=2*t;r<2*t+2;r++)for(var o=2*e;o<2*e+2;o++){var s=new O(r,o);s.z=n+1;var a=this._tileCoordsToKey(s),u=this._tiles[a];u&&u.active?u.retain=!0:(u&&u.loaded&&(u.retain=!0),n+1this.options.maxZoom||void 0!==this.options.minZoom&&r1)this._setView(t,n);else{for(var h=r.min.y;h<=r.max.y;h++)for(var f=r.min.x;f<=r.max.x;f++){var p=new O(f,h);if(p.z=this._tileZoom,this._isValidTile(p)){var d=this._tiles[this._tileCoordsToKey(p)];d?d.current=!0:s.push(p)}}if(s.sort((function(t,e){return t.distanceTo(o)-e.distanceTo(o)})),0!==s.length){this._loading||(this._loading=!0,this.fire("loading"));var m=document.createDocumentFragment();for(f=0;fn.max.x)||!e.wrapLat&&(t.yn.max.y))return!1}if(!this.options.bounds)return!0;var i=this._tileCoordsToBounds(t);return D(this.options.bounds).overlaps(i)},_keyToBounds:function(t){return this._tileCoordsToBounds(this._keyToTileCoords(t))},_tileCoordsToNwSe:function(t){var e=this._map,n=this.getTileSize(),i=t.scaleBy(n),r=i.add(n);return[e.unproject(i,t.z),e.unproject(r,t.z)]},_tileCoordsToBounds:function(t){var e=this._tileCoordsToNwSe(t),n=new M(e[0],e[1]);return this.options.noWrap||(n=this._map.wrapLatLngBounds(n)),n},_tileCoordsToKey:function(t){return t.x+":"+t.y+":"+t.z},_keyToTileCoords:function(t){var e=t.split(":"),n=new O(+e[0],+e[1]);return n.z=+e[2],n},_removeTile:function(t){var e=this._tiles[t];e&&(ne(e.el),delete this._tiles[t],this.fire("tileunload",{tile:e.el,coords:this._keyToTileCoords(t)}))},_initTile:function(t){ae(t,"leaflet-tile");var e=this.getTileSize();t.style.width=e.x+"px",t.style.height=e.y+"px",t.onselectstart=u,t.onmousemove=u,$&&this.options.opacity<1&&he(t,this.options.opacity),et&&!nt&&(t.style.WebkitBackfaceVisibility="hidden")},_addTile:function(t,e){var n=this._getTilePos(t),r=this._tileCoordsToKey(t),o=this.createTile(this._wrapCoords(t),i(this._tileReady,this,t));this._initTile(o),this.createTile.length<2&&w(i(this._tileReady,this,t,null,o)),de(o,n),this._tiles[r]={el:o,coords:t,current:!0},e.appendChild(o),this.fire("tileloadstart",{tile:o,coords:t})},_tileReady:function(t,e,n){e&&this.fire("tileerror",{error:e,tile:n,coords:t});var r=this._tileCoordsToKey(t);(n=this._tiles[r])&&(n.loaded=+new Date,this._map._fadeAnimated?(he(n.el,0),B(this._fadeFrame),this._fadeFrame=w(this._updateOpacity,this)):(n.active=!0,this._pruneTiles()),e||(ae(n.el,"leaflet-tile-loaded"),this.fire("tileload",{tile:n.el,coords:t})),this._noTilesToLoad()&&(this._loading=!1,this.fire("load"),$||!this._map._fadeAnimated?w(this._pruneTiles,this):setTimeout(i(this._pruneTiles,this),250)))},_getTilePos:function(t){return t.scaleBy(this.getTileSize()).subtract(this._level.origin)},_wrapCoords:function(t){var e=new O(this._wrapX?a(t.x,this._wrapX):t.x,this._wrapY?a(t.y,this._wrapY):t.y);return e.z=t.z,e},_pxBoundsToTileRange:function(t){var e=this.getTileSize();return new I(t.min.unscaleBy(e).floor(),t.max.unscaleBy(e).ceil().subtract([1,1]))},_noTilesToLoad:function(){for(var t in this._tiles)if(!this._tiles[t].loaded)return!1;return!0}}),ei=ti.extend({options:{minZoom:0,maxZoom:18,subdomains:"abc",errorTileUrl:"",zoomOffset:0,tms:!1,zoomReverse:!1,detectRetina:!1,crossOrigin:!1},initialize:function(t,e){this._url=t,(e=f(this,e)).detectRetina&&wt&&e.maxZoom>0&&(e.tileSize=Math.floor(e.tileSize/2),e.zoomReverse?(e.zoomOffset--,e.minZoom++):(e.zoomOffset++,e.maxZoom--),e.minZoom=Math.max(0,e.minZoom)),"string"==typeof e.subdomains&&(e.subdomains=e.subdomains.split("")),et||this.on("tileunload",this._onTileRemove)},setUrl:function(t,e){return this._url===t&&void 0===e&&(e=!0),this._url=t,e||this.redraw(),this},createTile:function(t,e){var n=document.createElement("img");return we(n,"load",i(this._tileOnLoad,this,e,n)),we(n,"error",i(this._tileOnError,this,e,n)),(this.options.crossOrigin||""===this.options.crossOrigin)&&(n.crossOrigin=!0===this.options.crossOrigin?"":this.options.crossOrigin),n.alt="",n.setAttribute("role","presentation"),n.src=this.getTileUrl(t),n},getTileUrl:function(t){var n={r:wt?"@2x":"",s:this._getSubdomain(t),x:t.x,y:t.y,z:this._getZoomForUrl()};if(this._map&&!this._map.options.crs.infinite){var i=this._globalTileRange.max.y-t.y;this.options.tms&&(n.y=i),n["-y"]=i}return m(this._url,e(n,this.options))},_tileOnLoad:function(t,e){$?setTimeout(i(t,this,null,e),0):t(null,e)},_tileOnError:function(t,e,n){var i=this.options.errorTileUrl;i&&e.getAttribute("src")!==i&&(e.src=i),t(n,e)},_onTileRemove:function(t){t.tile.onload=null},_getZoomForUrl:function(){var t=this._tileZoom,e=this.options.maxZoom;return this.options.zoomReverse&&(t=e-t),t+this.options.zoomOffset},_getSubdomain:function(t){var e=Math.abs(t.x+t.y)%this.options.subdomains.length;return this.options.subdomains[e]},_abortLoading:function(){var t,e;for(t in this._tiles)this._tiles[t].coords.z!==this._tileZoom&&((e=this._tiles[t].el).onload=u,e.onerror=u,e.complete||(e.src=_,ne(e),delete this._tiles[t]))},_removeTile:function(t){var e=this._tiles[t];if(e)return rt||e.el.setAttribute("src",_),ti.prototype._removeTile.call(this,t)},_tileReady:function(t,e,n){if(this._map&&(!n||n.getAttribute("src")!==_))return ti.prototype._tileReady.call(this,t,e,n)}});function ni(t,e){return new ei(t,e)}var ii=ei.extend({defaultWmsParams:{service:"WMS",request:"GetMap",layers:"",styles:"",format:"image/jpeg",transparent:!1,version:"1.1.1"},options:{crs:null,uppercase:!1},initialize:function(t,n){this._url=t;var i=e({},this.defaultWmsParams);for(var r in n)r in this.options||(i[r]=n[r]);var o=(n=f(this,n)).detectRetina&&wt?2:1,s=this.getTileSize();i.width=s.x*o,i.height=s.y*o,this.wmsParams=i},onAdd:function(t){this._crs=this.options.crs||t.options.crs,this._wmsVersion=parseFloat(this.wmsParams.version);var e=this._wmsVersion>=1.3?"crs":"srs";this.wmsParams[e]=this._crs.code,ei.prototype.onAdd.call(this,t)},getTileUrl:function(t){var e=this._tileCoordsToNwSe(t),n=this._crs,i=z(n.project(e[0]),n.project(e[1])),r=i.min,o=i.max,s=(this._wmsVersion>=1.3&&this._crs===gn?[r.y,r.x,o.y,o.x]:[r.x,r.y,o.x,o.y]).join(","),a=ei.prototype.getTileUrl.call(this,t);return a+p(this.wmsParams,a,this.options.uppercase)+(this.options.uppercase?"&BBOX=":"&bbox=")+s},setParams:function(t,n){return e(this.wmsParams,t),n||this.redraw(),this}});ei.WMS=ii,ni.wms=function(t,e){return new ii(t,e)};var ri=Cn.extend({options:{padding:.1,tolerance:0},initialize:function(t){f(this,t),o(this),this._layers=this._layers||{}},onAdd:function(){this._container||(this._initContainer(),this._zoomAnimated&&ae(this._container,"leaflet-zoom-animated")),this.getPane().appendChild(this._container),this._update(),this.on("update",this._updatePaths,this)},onRemove:function(){this.off("update",this._updatePaths,this),this._destroyContainer()},getEvents:function(){var t={viewreset:this._reset,zoom:this._onZoom,moveend:this._update,zoomend:this._onZoomEnd};return this._zoomAnimated&&(t.zoomanim=this._onAnimZoom),t},_onAnimZoom:function(t){this._updateTransform(t.center,t.zoom)},_onZoom:function(){this._updateTransform(this._map.getCenter(),this._map.getZoom())},_updateTransform:function(t,e){var n=this._map.getZoomScale(e,this._zoom),i=me(this._container),r=this._map.getSize().multiplyBy(.5+this.options.padding),o=this._map.project(this._center,e),s=this._map.project(t,e).subtract(o),a=r.multiplyBy(-n).add(i).add(r).subtract(s);mt?pe(this._container,a,n):de(this._container,a)},_reset:function(){for(var t in this._update(),this._updateTransform(this._center,this._zoom),this._layers)this._layers[t]._reset()},_onZoomEnd:function(){for(var t in this._layers)this._layers[t]._project()},_updatePaths:function(){for(var t in this._layers)this._layers[t]._update()},_update:function(){var t=this.options.padding,e=this._map.getSize(),n=this._map.containerPointToLayerPoint(e.multiplyBy(-t)).round();this._bounds=new I(n,n.add(e.multiplyBy(1+2*t)).round()),this._center=this._map.getCenter(),this._zoom=this._map.getZoom()}}),oi=ri.extend({getEvents:function(){var t=ri.prototype.getEvents.call(this);return t.viewprereset=this._onViewPreReset,t},_onViewPreReset:function(){this._postponeUpdatePaths=!0},onAdd:function(){ri.prototype.onAdd.call(this),this._draw()},_initContainer:function(){var t=this._container=document.createElement("canvas");we(t,"mousemove",this._onMouseMove,this),we(t,"click dblclick mousedown mouseup contextmenu",this._onClick,this),we(t,"mouseout",this._handleMouseOut,this),this._ctx=t.getContext("2d")},_destroyContainer:function(){B(this._redrawRequest),delete this._ctx,ne(this._container),Ee(this._container),delete this._container},_updatePaths:function(){if(!this._postponeUpdatePaths){for(var t in this._redrawBounds=null,this._layers)this._layers[t]._update();this._redraw()}},_update:function(){if(!this._map._animatingZoom||!this._bounds){ri.prototype._update.call(this);var t=this._bounds,e=this._container,n=t.getSize(),i=wt?2:1;de(e,t.min),e.width=i*n.x,e.height=i*n.y,e.style.width=n.x+"px",e.style.height=n.y+"px",wt&&this._ctx.scale(2,2),this._ctx.translate(-t.min.x,-t.min.y),this.fire("update")}},_reset:function(){ri.prototype._reset.call(this),this._postponeUpdatePaths&&(this._postponeUpdatePaths=!1,this._updatePaths())},_initPath:function(t){this._updateDashArray(t),this._layers[o(t)]=t;var e=t._order={layer:t,prev:this._drawLast,next:null};this._drawLast&&(this._drawLast.next=e),this._drawLast=e,this._drawFirst=this._drawFirst||this._drawLast},_addPath:function(t){this._requestRedraw(t)},_removePath:function(t){var e=t._order,n=e.next,i=e.prev;n?n.prev=i:this._drawLast=i,i?i.next=n:this._drawFirst=n,delete t._order,delete this._layers[o(t)],this._requestRedraw(t)},_updatePath:function(t){this._extendRedrawBounds(t),t._project(),t._update(),this._requestRedraw(t)},_updateStyle:function(t){this._updateDashArray(t),this._requestRedraw(t)},_updateDashArray:function(t){if("string"==typeof t.options.dashArray){var e,n,i=t.options.dashArray.split(/[, ]+/),r=[];for(n=0;n')}}catch(t){return function(t){return document.createElement("<"+t+' xmlns="urn:schemas-microsoft.com:vml" class="lvml">')}}}(),ui={_initContainer:function(){this._container=ee("div","leaflet-vml-container")},_update:function(){this._map._animatingZoom||(ri.prototype._update.call(this),this.fire("update"))},_initPath:function(t){var e=t._container=ai("shape");ae(e,"leaflet-vml-shape "+(this.options.className||"")),e.coordsize="1 1",t._path=ai("path"),e.appendChild(t._path),this._updateStyle(t),this._layers[o(t)]=t},_addPath:function(t){var e=t._container;this._container.appendChild(e),t.options.interactive&&t.addInteractiveTarget(e)},_removePath:function(t){var e=t._container;ne(e),t.removeInteractiveTarget(e),delete this._layers[o(t)]},_updateStyle:function(t){var e=t._stroke,n=t._fill,i=t.options,r=t._container;r.stroked=!!i.stroke,r.filled=!!i.fill,i.stroke?(e||(e=t._stroke=ai("stroke")),r.appendChild(e),e.weight=i.weight+"px",e.color=i.color,e.opacity=i.opacity,i.dashArray?e.dashStyle=v(i.dashArray)?i.dashArray.join(" "):i.dashArray.replace(/( *, *)/g," "):e.dashStyle="",e.endcap=i.lineCap.replace("butt","flat"),e.joinstyle=i.lineJoin):e&&(r.removeChild(e),t._stroke=null),i.fill?(n||(n=t._fill=ai("fill")),r.appendChild(n),n.color=i.fillColor||i.color,n.opacity=i.fillOpacity):n&&(r.removeChild(n),t._fill=null)},_updateCircle:function(t){var e=t._point.round(),n=Math.round(t._radius),i=Math.round(t._radiusY||n);this._setPath(t,t._empty()?"M0 0":"AL "+e.x+","+e.y+" "+n+","+i+" 0,23592600")},_setPath:function(t,e){t._path.v=e},_bringToFront:function(t){re(t._container)},_bringToBack:function(t){oe(t._container)}},ci=St?ai:G,li=ri.extend({getEvents:function(){var t=ri.prototype.getEvents.call(this);return t.zoomstart=this._onZoomStart,t},_initContainer:function(){this._container=ci("svg"),this._container.setAttribute("pointer-events","none"),this._rootGroup=ci("g"),this._container.appendChild(this._rootGroup)},_destroyContainer:function(){ne(this._container),Ee(this._container),delete this._container,delete this._rootGroup,delete this._svgSize},_onZoomStart:function(){this._update()},_update:function(){if(!this._map._animatingZoom||!this._bounds){ri.prototype._update.call(this);var t=this._bounds,e=t.getSize(),n=this._container;this._svgSize&&this._svgSize.equals(e)||(this._svgSize=e,n.setAttribute("width",e.x),n.setAttribute("height",e.y)),de(n,t.min),n.setAttribute("viewBox",[t.min.x,t.min.y,e.x,e.y].join(" ")),this.fire("update")}},_initPath:function(t){var e=t._path=ci("path");t.options.className&&ae(e,t.options.className),t.options.interactive&&ae(e,"leaflet-interactive"),this._updateStyle(t),this._layers[o(t)]=t},_addPath:function(t){this._rootGroup||this._initContainer(),this._rootGroup.appendChild(t._path),t.addInteractiveTarget(t._path)},_removePath:function(t){ne(t._path),t.removeInteractiveTarget(t._path),delete this._layers[o(t)]},_updatePath:function(t){t._project(),t._update()},_updateStyle:function(t){var e=t._path,n=t.options;e&&(n.stroke?(e.setAttribute("stroke",n.color),e.setAttribute("stroke-opacity",n.opacity),e.setAttribute("stroke-width",n.weight),e.setAttribute("stroke-linecap",n.lineCap),e.setAttribute("stroke-linejoin",n.lineJoin),n.dashArray?e.setAttribute("stroke-dasharray",n.dashArray):e.removeAttribute("stroke-dasharray"),n.dashOffset?e.setAttribute("stroke-dashoffset",n.dashOffset):e.removeAttribute("stroke-dashoffset")):e.setAttribute("stroke","none"),n.fill?(e.setAttribute("fill",n.fillColor||n.color),e.setAttribute("fill-opacity",n.fillOpacity),e.setAttribute("fill-rule",n.fillRule||"evenodd")):e.setAttribute("fill","none"))},_updatePoly:function(t,e){this._setPath(t,K(t._parts,e))},_updateCircle:function(t){var e=t._point,n=Math.max(Math.round(t._radius),1),i="a"+n+","+(Math.max(Math.round(t._radiusY),1)||n)+" 0 1,0 ",r=t._empty()?"M0 0":"M"+(e.x-n)+","+e.y+i+2*n+",0 "+i+2*-n+",0 ";this._setPath(t,r)},_setPath:function(t,e){t._path.setAttribute("d",e)},_bringToFront:function(t){re(t._path)},_bringToBack:function(t){oe(t._path)}});function hi(t){return kt||St?new li(t):null}St&&li.include(ui),Ye.include({getRenderer:function(t){var e=t.options.renderer||this._getPaneRenderer(t.options.pane)||this.options.renderer||this._renderer;return e||(e=this._renderer=this._createRenderer()),this.hasLayer(e)||this.addLayer(e),e},_getPaneRenderer:function(t){if("overlayPane"===t||void 0===t)return!1;var e=this._paneRenderers[t];return void 0===e&&(e=this._createRenderer({pane:t}),this._paneRenderers[t]=e),e},_createRenderer:function(t){return this.options.preferCanvas&&si(t)||hi(t)}});var fi=In.extend({initialize:function(t,e){In.prototype.initialize.call(this,this._boundsToLatLngs(t),e)},setBounds:function(t){return this.setLatLngs(this._boundsToLatLngs(t))},_boundsToLatLngs:function(t){return[(t=D(t)).getSouthWest(),t.getNorthWest(),t.getNorthEast(),t.getSouthEast()]}});li.create=ci,li.pointsToPath=K,zn.geometryToLayer=Mn,zn.coordsToLatLng=Nn,zn.coordsToLatLngs=Zn,zn.latLngToCoords=Rn,zn.latLngsToCoords=Vn,zn.getFeature=Wn,zn.asFeature=Fn,Ye.mergeOptions({boxZoom:!0});var pi=$e.extend({initialize:function(t){this._map=t,this._container=t._container,this._pane=t._panes.overlayPane,this._resetStateTimeout=0,t.on("unload",this._destroy,this)},addHooks:function(){we(this._container,"mousedown",this._onMouseDown,this)},removeHooks:function(){Ee(this._container,"mousedown",this._onMouseDown,this)},moved:function(){return this._moved},_destroy:function(){ne(this._pane),delete this._pane},_resetState:function(){this._resetStateTimeout=0,this._moved=!1},_clearDeferredResetState:function(){0!==this._resetStateTimeout&&(clearTimeout(this._resetStateTimeout),this._resetStateTimeout=0)},_onMouseDown:function(t){if(!t.shiftKey||1!==t.which&&1!==t.button)return!1;this._clearDeferredResetState(),this._resetState(),Wt(),be(),this._startPoint=this._map.mouseEventToContainerPoint(t),we(document,{contextmenu:ze,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseMove:function(t){this._moved||(this._moved=!0,this._box=ee("div","leaflet-zoom-box",this._container),ae(this._container,"leaflet-crosshair"),this._map.fire("boxzoomstart")),this._point=this._map.mouseEventToContainerPoint(t);var e=new I(this._point,this._startPoint),n=e.getSize();de(this._box,e.min),this._box.style.width=n.x+"px",this._box.style.height=n.y+"px"},_finish:function(){this._moved&&(ne(this._box),ue(this._container,"leaflet-crosshair")),Ft(),_e(),Ee(document,{contextmenu:ze,mousemove:this._onMouseMove,mouseup:this._onMouseUp,keydown:this._onKeyDown},this)},_onMouseUp:function(t){if((1===t.which||1===t.button)&&(this._finish(),this._moved)){this._clearDeferredResetState(),this._resetStateTimeout=setTimeout(i(this._resetState,this),0);var e=new M(this._map.containerPointToLatLng(this._startPoint),this._map.containerPointToLatLng(this._point));this._map.fitBounds(e).fire("boxzoomend",{boxZoomBounds:e})}},_onKeyDown:function(t){27===t.keyCode&&this._finish()}});Ye.addInitHook("addHandler","boxZoom",pi),Ye.mergeOptions({doubleClickZoom:!0});var di=$e.extend({addHooks:function(){this._map.on("dblclick",this._onDoubleClick,this)},removeHooks:function(){this._map.off("dblclick",this._onDoubleClick,this)},_onDoubleClick:function(t){var e=this._map,n=e.getZoom(),i=e.options.zoomDelta,r=t.originalEvent.shiftKey?n-i:n+i;"center"===e.options.doubleClickZoom?e.setZoom(r):e.setZoomAround(t.containerPoint,r)}});Ye.addInitHook("addHandler","doubleClickZoom",di),Ye.mergeOptions({dragging:!0,inertia:!nt,inertiaDeceleration:3400,inertiaMaxSpeed:1/0,easeLinearity:.2,worldCopyJump:!1,maxBoundsViscosity:0});var mi=$e.extend({addHooks:function(){if(!this._draggable){var t=this._map;this._draggable=new on(t._mapPane,t._container),this._draggable.on({dragstart:this._onDragStart,drag:this._onDrag,dragend:this._onDragEnd},this),this._draggable.on("predrag",this._onPreDragLimit,this),t.options.worldCopyJump&&(this._draggable.on("predrag",this._onPreDragWrap,this),t.on("zoomend",this._onZoomEnd,this),t.whenReady(this._onZoomEnd,this))}ae(this._map._container,"leaflet-grab leaflet-touch-drag"),this._draggable.enable(),this._positions=[],this._times=[]},removeHooks:function(){ue(this._map._container,"leaflet-grab"),ue(this._map._container,"leaflet-touch-drag"),this._draggable.disable()},moved:function(){return this._draggable&&this._draggable._moved},moving:function(){return this._draggable&&this._draggable._moving},_onDragStart:function(){var t=this._map;if(t._stop(),this._map.options.maxBounds&&this._map.options.maxBoundsViscosity){var e=D(this._map.options.maxBounds);this._offsetLimit=z(this._map.latLngToContainerPoint(e.getNorthWest()).multiplyBy(-1),this._map.latLngToContainerPoint(e.getSouthEast()).multiplyBy(-1).add(this._map.getSize())),this._viscosity=Math.min(1,Math.max(0,this._map.options.maxBoundsViscosity))}else this._offsetLimit=null;t.fire("movestart").fire("dragstart"),t.options.inertia&&(this._positions=[],this._times=[])},_onDrag:function(t){if(this._map.options.inertia){var e=this._lastTime=+new Date,n=this._lastPos=this._draggable._absPos||this._draggable._newPos;this._positions.push(n),this._times.push(e),this._prunePositions(e)}this._map.fire("move",t).fire("drag",t)},_prunePositions:function(t){for(;this._positions.length>1&&t-this._times[0]>50;)this._positions.shift(),this._times.shift()},_onZoomEnd:function(){var t=this._map.getSize().divideBy(2),e=this._map.latLngToLayerPoint([0,0]);this._initialWorldOffset=e.subtract(t).x,this._worldWidth=this._map.getPixelWorldBounds().getSize().x},_viscousLimit:function(t,e){return t-(t-e)*this._viscosity},_onPreDragLimit:function(){if(this._viscosity&&this._offsetLimit){var t=this._draggable._newPos.subtract(this._draggable._startPos),e=this._offsetLimit;t.xe.max.x&&(t.x=this._viscousLimit(t.x,e.max.x)),t.y>e.max.y&&(t.y=this._viscousLimit(t.y,e.max.y)),this._draggable._newPos=this._draggable._startPos.add(t)}},_onPreDragWrap:function(){var t=this._worldWidth,e=Math.round(t/2),n=this._initialWorldOffset,i=this._draggable._newPos.x,r=(i-e+n)%t+e-n,o=(i+e+n)%t-e-n,s=Math.abs(r+n)0?o:-o))-e;this._delta=0,this._startTime=null,s&&("center"===t.options.scrollWheelZoom?t.setZoom(e+s):t.setZoomAround(this._lastMousePos,e+s))}});Ye.addInitHook("addHandler","scrollWheelZoom",bi),Ye.mergeOptions({tap:!0,tapTolerance:15});var _i=$e.extend({addHooks:function(){we(this._map._container,"touchstart",this._onDown,this)},removeHooks:function(){Ee(this._map._container,"touchstart",this._onDown,this)},_onDown:function(t){if(t.touches){if(Ie(t),this._fireClick=!0,t.touches.length>1)return this._fireClick=!1,void clearTimeout(this._holdTimeout);var e=t.touches[0],n=e.target;this._startPos=this._newPos=new O(e.clientX,e.clientY),n.tagName&&"a"===n.tagName.toLowerCase()&&ae(n,"leaflet-active"),this._holdTimeout=setTimeout(i((function(){this._isTapValid()&&(this._fireClick=!1,this._onUp(),this._simulateEvent("contextmenu",e))}),this),1e3),this._simulateEvent("mousedown",e),we(document,{touchmove:this._onMove,touchend:this._onUp},this)}},_onUp:function(t){if(clearTimeout(this._holdTimeout),Ee(document,{touchmove:this._onMove,touchend:this._onUp},this),this._fireClick&&t&&t.changedTouches){var e=t.changedTouches[0],n=e.target;n&&n.tagName&&"a"===n.tagName.toLowerCase()&&ue(n,"leaflet-active"),this._simulateEvent("mouseup",e),this._isTapValid()&&this._simulateEvent("click",e)}},_isTapValid:function(){return this._newPos.distanceTo(this._startPos)<=this._map.options.tapTolerance},_onMove:function(t){var e=t.touches[0];this._newPos=new O(e.clientX,e.clientY),this._simulateEvent("mousemove",e)},_simulateEvent:function(t,e){var n=document.createEvent("MouseEvents");n._simulated=!0,e.target._simulatedClick=!0,n.initMouseEvent(t,!0,!0,window,1,e.screenX,e.screenY,e.clientX,e.clientY,!1,!1,!1,!1,0,null),e.target.dispatchEvent(n)}});!gt||At&&!ut||Ye.addInitHook("addHandler","tap",_i),Ye.mergeOptions({touchZoom:gt&&!nt,bounceAtZoomLimits:!0});var yi=$e.extend({addHooks:function(){ae(this._map._container,"leaflet-touch-zoom"),we(this._map._container,"touchstart",this._onTouchStart,this)},removeHooks:function(){ue(this._map._container,"leaflet-touch-zoom"),Ee(this._map._container,"touchstart",this._onTouchStart,this)},_onTouchStart:function(t){var e=this._map;if(t.touches&&2===t.touches.length&&!e._animatingZoom&&!this._zooming){var n=e.mouseEventToContainerPoint(t.touches[0]),i=e.mouseEventToContainerPoint(t.touches[1]);this._centerPoint=e.getSize()._divideBy(2),this._startLatLng=e.containerPointToLatLng(this._centerPoint),"center"!==e.options.touchZoom&&(this._pinchStartLatLng=e.containerPointToLatLng(n.add(i)._divideBy(2))),this._startDist=n.distanceTo(i),this._startZoom=e.getZoom(),this._moved=!1,this._zooming=!0,e._stop(),we(document,"touchmove",this._onTouchMove,this),we(document,"touchend",this._onTouchEnd,this),Ie(t)}},_onTouchMove:function(t){if(t.touches&&2===t.touches.length&&this._zooming){var e=this._map,n=e.mouseEventToContainerPoint(t.touches[0]),r=e.mouseEventToContainerPoint(t.touches[1]),o=n.distanceTo(r)/this._startDist;if(this._zoom=e.getScaleZoom(o,this._startZoom),!e.options.bounceAtZoomLimits&&(this._zoome.getMaxZoom()&&o>1)&&(this._zoom=e._limitZoom(this._zoom)),"center"===e.options.touchZoom){if(this._center=this._startLatLng,1===o)return}else{var s=n._add(r)._divideBy(2)._subtract(this._centerPoint);if(1===o&&0===s.x&&0===s.y)return;this._center=e.unproject(e.project(this._pinchStartLatLng,this._zoom).subtract(s),this._zoom)}this._moved||(e._moveStart(!0,!1),this._moved=!0),B(this._animRequest);var a=i(e._move,e,this._center,this._zoom,{pinch:!0,round:!1});this._animRequest=w(a,this,!0),Ie(t)}},_onTouchEnd:function(){this._moved&&this._zooming?(this._zooming=!1,B(this._animRequest),Ee(document,"touchmove",this._onTouchMove,this),Ee(document,"touchend",this._onTouchEnd,this),this._map.options.zoomAnimation?this._map._animateZoom(this._center,this._map._limitZoom(this._zoom),!0,this._map.options.zoomSnap):this._map._resetView(this._center,this._map._limitZoom(this._zoom))):this._zooming=!1}});Ye.addInitHook("addHandler","touchZoom",yi),Ye.BoxZoom=pi,Ye.DoubleClickZoom=di,Ye.Drag=mi,Ye.Keyboard=vi,Ye.ScrollWheelZoom=bi,Ye.Tap=_i,Ye.TouchZoom=yi,t.version="1.7.1",t.Control=Ue,t.control=qe,t.Browser=Ot,t.Evented=P,t.Mixin=tn,t.Util=E,t.Class=k,t.Handler=$e,t.extend=e,t.bind=i,t.stamp=o,t.setOptions=f,t.DomEvent=Fe,t.DomUtil=Ce,t.PosAnimation=He,t.Draggable=on,t.LineUtil=dn,t.PolyUtil=vn,t.Point=O,t.point=j,t.Bounds=I,t.bounds=z,t.Transformation=H,t.transformation=Y,t.Projection=yn,t.LatLng=N,t.latLng=Z,t.LatLngBounds=M,t.latLngBounds=D,t.CRS=V,t.GeoJSON=zn,t.geoJSON=Yn,t.geoJson=Un,t.Layer=Cn,t.LayerGroup=wn,t.layerGroup=function(t,e){return new wn(t,e)},t.FeatureGroup=Bn,t.featureGroup=function(t,e){return new Bn(t,e)},t.ImageOverlay=qn,t.imageOverlay=function(t,e,n){return new qn(t,e,n)},t.VideoOverlay=Gn,t.videoOverlay=function(t,e,n){return new Gn(t,e,n)},t.SVGOverlay=Kn,t.svgOverlay=function(t,e,n){return new Kn(t,e,n)},t.DivOverlay=Xn,t.Popup=Qn,t.popup=function(t,e){return new Qn(t,e)},t.Tooltip=$n,t.tooltip=function(t,e){return new $n(t,e)},t.Icon=En,t.icon=function(t){return new En(t)},t.DivIcon=Jn,t.divIcon=function(t){return new Jn(t)},t.Marker=Pn,t.marker=function(t,e){return new Pn(t,e)},t.TileLayer=ei,t.tileLayer=ni,t.GridLayer=ti,t.gridLayer=function(t){return new ti(t)},t.SVG=li,t.svg=hi,t.Renderer=ri,t.Canvas=oi,t.canvas=si,t.Path=On,t.CircleMarker=Tn,t.circleMarker=function(t,e){return new Tn(t,e)},t.Circle=jn,t.circle=function(t,e,n){return new jn(t,e,n)},t.Polyline=Ln,t.polyline=function(t,e){return new Ln(t,e)},t.Polygon=In,t.polygon=function(t,e){return new In(t,e)},t.Rectangle=fi,t.rectangle=function(t,e){return new fi(t,e)},t.Map=Ye,t.map=function(t,e){return new Ye(t,e)};var Ai=window.L;t.noConflict=function(){return window.L=Ai,this},window.L=t}(e)},function(t,e,n){var i=n(164);"string"==typeof i&&(i=[[t.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(64)(i,r);i.locals&&(t.exports=i.locals)},function(t,e,n){"use strict";n.r(e);var i=n(8),r=n.n(i),o=n(9),s=n.n(o),a=n(46),u=n.n(a),c=n(127),l=n.n(c),h=n(128),f=n.n(h),p=n(129),d=n.n(p),m=s()(r.a),v=u()(l.a),b=u()(f.a),_=u()(d.a);m.push([t.i,"/* required styles */\r\n\r\n.leaflet-pane,\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-tile-container,\r\n.leaflet-pane > svg,\r\n.leaflet-pane > canvas,\r\n.leaflet-zoom-box,\r\n.leaflet-image-layer,\r\n.leaflet-layer {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\t}\r\n.leaflet-container {\r\n\toverflow: hidden;\r\n\t}\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\t-webkit-user-select: none;\r\n\t -moz-user-select: none;\r\n\t user-select: none;\r\n\t -webkit-user-drag: none;\r\n\t}\r\n/* Prevents IE11 from highlighting tiles in blue */\r\n.leaflet-tile::selection {\r\n\tbackground: transparent;\r\n}\r\n/* Safari renders non-retina tile on retina better with this, but Chrome is worse */\r\n.leaflet-safari .leaflet-tile {\r\n\timage-rendering: -webkit-optimize-contrast;\r\n\t}\r\n/* hack that prevents hw layers \"stretching\" when loading new tiles */\r\n.leaflet-safari .leaflet-tile-container {\r\n\twidth: 1600px;\r\n\theight: 1600px;\r\n\t-webkit-transform-origin: 0 0;\r\n\t}\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\tdisplay: block;\r\n\t}\r\n/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */\r\n/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */\r\n.leaflet-container .leaflet-overlay-pane svg,\r\n.leaflet-container .leaflet-marker-pane img,\r\n.leaflet-container .leaflet-shadow-pane img,\r\n.leaflet-container .leaflet-tile-pane img,\r\n.leaflet-container img.leaflet-image-layer,\r\n.leaflet-container .leaflet-tile {\r\n\tmax-width: none !important;\r\n\tmax-height: none !important;\r\n\t}\r\n\r\n.leaflet-container.leaflet-touch-zoom {\r\n\t-ms-touch-action: pan-x pan-y;\r\n\ttouch-action: pan-x pan-y;\r\n\t}\r\n.leaflet-container.leaflet-touch-drag {\r\n\t-ms-touch-action: pinch-zoom;\r\n\t/* Fallback for FF which doesn't support pinch-zoom */\r\n\ttouch-action: none;\r\n\ttouch-action: pinch-zoom;\r\n}\r\n.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\r\n\t-ms-touch-action: none;\r\n\ttouch-action: none;\r\n}\r\n.leaflet-container {\r\n\t-webkit-tap-highlight-color: transparent;\r\n}\r\n.leaflet-container a {\r\n\t-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\r\n}\r\n.leaflet-tile {\r\n\tfilter: inherit;\r\n\tvisibility: hidden;\r\n\t}\r\n.leaflet-tile-loaded {\r\n\tvisibility: inherit;\r\n\t}\r\n.leaflet-zoom-box {\r\n\twidth: 0;\r\n\theight: 0;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tz-index: 800;\r\n\t}\r\n/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */\r\n.leaflet-overlay-pane svg {\r\n\t-moz-user-select: none;\r\n\t}\r\n\r\n.leaflet-pane { z-index: 400; }\r\n\r\n.leaflet-tile-pane { z-index: 200; }\r\n.leaflet-overlay-pane { z-index: 400; }\r\n.leaflet-shadow-pane { z-index: 500; }\r\n.leaflet-marker-pane { z-index: 600; }\r\n.leaflet-tooltip-pane { z-index: 650; }\r\n.leaflet-popup-pane { z-index: 700; }\r\n\r\n.leaflet-map-pane canvas { z-index: 100; }\r\n.leaflet-map-pane svg { z-index: 200; }\r\n\r\n.leaflet-vml-shape {\r\n\twidth: 1px;\r\n\theight: 1px;\r\n\t}\r\n.lvml {\r\n\tbehavior: url(#default#VML);\r\n\tdisplay: inline-block;\r\n\tposition: absolute;\r\n\t}\r\n\r\n\r\n/* control positioning */\r\n\r\n.leaflet-control {\r\n\tposition: relative;\r\n\tz-index: 800;\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-top,\r\n.leaflet-bottom {\r\n\tposition: absolute;\r\n\tz-index: 1000;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-top {\r\n\ttop: 0;\r\n\t}\r\n.leaflet-right {\r\n\tright: 0;\r\n\t}\r\n.leaflet-bottom {\r\n\tbottom: 0;\r\n\t}\r\n.leaflet-left {\r\n\tleft: 0;\r\n\t}\r\n.leaflet-control {\r\n\tfloat: left;\r\n\tclear: both;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tfloat: right;\r\n\t}\r\n.leaflet-top .leaflet-control {\r\n\tmargin-top: 10px;\r\n\t}\r\n.leaflet-bottom .leaflet-control {\r\n\tmargin-bottom: 10px;\r\n\t}\r\n.leaflet-left .leaflet-control {\r\n\tmargin-left: 10px;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tmargin-right: 10px;\r\n\t}\r\n\r\n\r\n/* zoom and fade animations */\r\n\r\n.leaflet-fade-anim .leaflet-tile {\r\n\twill-change: opacity;\r\n\t}\r\n.leaflet-fade-anim .leaflet-popup {\r\n\topacity: 0;\r\n\t-webkit-transition: opacity 0.2s linear;\r\n\t -moz-transition: opacity 0.2s linear;\r\n\t transition: opacity 0.2s linear;\r\n\t}\r\n.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\r\n\topacity: 1;\r\n\t}\r\n.leaflet-zoom-animated {\r\n\t-webkit-transform-origin: 0 0;\r\n\t -ms-transform-origin: 0 0;\r\n\t transform-origin: 0 0;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\twill-change: transform;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\t-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t transition: transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t}\r\n.leaflet-zoom-anim .leaflet-tile,\r\n.leaflet-pan-anim .leaflet-tile {\r\n\t-webkit-transition: none;\r\n\t -moz-transition: none;\r\n\t transition: none;\r\n\t}\r\n\r\n.leaflet-zoom-anim .leaflet-zoom-hide {\r\n\tvisibility: hidden;\r\n\t}\r\n\r\n\r\n/* cursors */\r\n\r\n.leaflet-interactive {\r\n\tcursor: pointer;\r\n\t}\r\n.leaflet-grab {\r\n\tcursor: -webkit-grab;\r\n\tcursor: -moz-grab;\r\n\tcursor: grab;\r\n\t}\r\n.leaflet-crosshair,\r\n.leaflet-crosshair .leaflet-interactive {\r\n\tcursor: crosshair;\r\n\t}\r\n.leaflet-popup-pane,\r\n.leaflet-control {\r\n\tcursor: auto;\r\n\t}\r\n.leaflet-dragging .leaflet-grab,\r\n.leaflet-dragging .leaflet-grab .leaflet-interactive,\r\n.leaflet-dragging .leaflet-marker-draggable {\r\n\tcursor: move;\r\n\tcursor: -webkit-grabbing;\r\n\tcursor: -moz-grabbing;\r\n\tcursor: grabbing;\r\n\t}\r\n\r\n/* marker & overlays interactivity */\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-image-layer,\r\n.leaflet-pane > svg path,\r\n.leaflet-tile-container {\r\n\tpointer-events: none;\r\n\t}\r\n\r\n.leaflet-marker-icon.leaflet-interactive,\r\n.leaflet-image-layer.leaflet-interactive,\r\n.leaflet-pane > svg path.leaflet-interactive,\r\nsvg.leaflet-image-layer.leaflet-interactive path {\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn't have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n\r\n/* visual tweaks */\r\n\r\n.leaflet-container {\r\n\tbackground: #ddd;\r\n\toutline: 0;\r\n\t}\r\n.leaflet-container a {\r\n\tcolor: #0078A8;\r\n\t}\r\n.leaflet-container a.leaflet-active {\r\n\toutline: 2px solid orange;\r\n\t}\r\n.leaflet-zoom-box {\r\n\tborder: 2px dotted #38f;\r\n\tbackground: rgba(255,255,255,0.5);\r\n\t}\r\n\r\n\r\n/* general typography */\r\n.leaflet-container {\r\n\tfont: 12px/1.5 \"Helvetica Neue\", Arial, Helvetica, sans-serif;\r\n\t}\r\n\r\n\r\n/* general toolbar styles */\r\n\r\n.leaflet-bar {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.65);\r\n\tborder-radius: 4px;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #fff;\r\n\tborder-bottom: 1px solid #ccc;\r\n\twidth: 26px;\r\n\theight: 26px;\r\n\tline-height: 26px;\r\n\tdisplay: block;\r\n\ttext-align: center;\r\n\ttext-decoration: none;\r\n\tcolor: black;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-control-layers-toggle {\r\n\tbackground-position: 50% 50%;\r\n\tbackground-repeat: no-repeat;\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #f4f4f4;\r\n\t}\r\n.leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 4px;\r\n\tborder-top-right-radius: 4px;\r\n\t}\r\n.leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 4px;\r\n\tborder-bottom-right-radius: 4px;\r\n\tborder-bottom: none;\r\n\t}\r\n.leaflet-bar a.leaflet-disabled {\r\n\tcursor: default;\r\n\tbackground-color: #f4f4f4;\r\n\tcolor: #bbb;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-bar a {\r\n\twidth: 30px;\r\n\theight: 30px;\r\n\tline-height: 30px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 2px;\r\n\tborder-top-right-radius: 2px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 2px;\r\n\tborder-bottom-right-radius: 2px;\r\n\t}\r\n\r\n/* zoom control */\r\n\r\n.leaflet-control-zoom-in,\r\n.leaflet-control-zoom-out {\r\n\tfont: bold 18px 'Lucida Console', Monaco, monospace;\r\n\ttext-indent: 1px;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\r\n\tfont-size: 22px;\r\n\t}\r\n\r\n\r\n/* layers control */\r\n\r\n.leaflet-control-layers {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.4);\r\n\tbackground: #fff;\r\n\tborder-radius: 5px;\r\n\t}\r\n.leaflet-control-layers-toggle {\r\n\tbackground-image: url("+v+");\r\n\twidth: 36px;\r\n\theight: 36px;\r\n\t}\r\n.leaflet-retina .leaflet-control-layers-toggle {\r\n\tbackground-image: url("+b+");\r\n\tbackground-size: 26px 26px;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers-toggle {\r\n\twidth: 44px;\r\n\theight: 44px;\r\n\t}\r\n.leaflet-control-layers .leaflet-control-layers-list,\r\n.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\r\n\tdisplay: none;\r\n\t}\r\n.leaflet-control-layers-expanded .leaflet-control-layers-list {\r\n\tdisplay: block;\r\n\tposition: relative;\r\n\t}\r\n.leaflet-control-layers-expanded {\r\n\tpadding: 6px 10px 6px 6px;\r\n\tcolor: #333;\r\n\tbackground: #fff;\r\n\t}\r\n.leaflet-control-layers-scrollbar {\r\n\toverflow-y: scroll;\r\n\toverflow-x: hidden;\r\n\tpadding-right: 5px;\r\n\t}\r\n.leaflet-control-layers-selector {\r\n\tmargin-top: 2px;\r\n\tposition: relative;\r\n\ttop: 1px;\r\n\t}\r\n.leaflet-control-layers label {\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-control-layers-separator {\r\n\theight: 0;\r\n\tborder-top: 1px solid #ddd;\r\n\tmargin: 5px -10px 5px -6px;\r\n\t}\r\n\r\n/* Default icon URLs */\r\n.leaflet-default-icon-path {\r\n\tbackground-image: url("+_+');\r\n\t}\r\n\r\n\r\n/* attribution and scale controls */\r\n\r\n.leaflet-container .leaflet-control-attribution {\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.7);\r\n\tmargin: 0;\r\n\t}\r\n.leaflet-control-attribution,\r\n.leaflet-control-scale-line {\r\n\tpadding: 0 5px;\r\n\tcolor: #333;\r\n\t}\r\n.leaflet-control-attribution a {\r\n\ttext-decoration: none;\r\n\t}\r\n.leaflet-control-attribution a:hover {\r\n\ttext-decoration: underline;\r\n\t}\r\n.leaflet-container .leaflet-control-attribution,\r\n.leaflet-container .leaflet-control-scale {\r\n\tfont-size: 11px;\r\n\t}\r\n.leaflet-left .leaflet-control-scale {\r\n\tmargin-left: 5px;\r\n\t}\r\n.leaflet-bottom .leaflet-control-scale {\r\n\tmargin-bottom: 5px;\r\n\t}\r\n.leaflet-control-scale-line {\r\n\tborder: 2px solid #777;\r\n\tborder-top: none;\r\n\tline-height: 1.1;\r\n\tpadding: 2px 5px 1px;\r\n\tfont-size: 11px;\r\n\twhite-space: nowrap;\r\n\toverflow: hidden;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.5);\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child) {\r\n\tborder-top: 2px solid #777;\r\n\tborder-bottom: none;\r\n\tmargin-top: -2px;\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child):not(:last-child) {\r\n\tborder-bottom: 2px solid #777;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-attribution,\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tbox-shadow: none;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tborder: 2px solid rgba(0,0,0,0.2);\r\n\tbackground-clip: padding-box;\r\n\t}\r\n\r\n\r\n/* popup */\r\n\r\n.leaflet-popup {\r\n\tposition: absolute;\r\n\ttext-align: center;\r\n\tmargin-bottom: 20px;\r\n\t}\r\n.leaflet-popup-content-wrapper {\r\n\tpadding: 1px;\r\n\ttext-align: left;\r\n\tborder-radius: 12px;\r\n\t}\r\n.leaflet-popup-content {\r\n\tmargin: 13px 19px;\r\n\tline-height: 1.4;\r\n\t}\r\n.leaflet-popup-content p {\r\n\tmargin: 18px 0;\r\n\t}\r\n.leaflet-popup-tip-container {\r\n\twidth: 40px;\r\n\theight: 20px;\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\tmargin-left: -20px;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-popup-tip {\r\n\twidth: 17px;\r\n\theight: 17px;\r\n\tpadding: 1px;\r\n\r\n\tmargin: -10px auto 0;\r\n\r\n\t-webkit-transform: rotate(45deg);\r\n\t -moz-transform: rotate(45deg);\r\n\t -ms-transform: rotate(45deg);\r\n\t transform: rotate(45deg);\r\n\t}\r\n.leaflet-popup-content-wrapper,\r\n.leaflet-popup-tip {\r\n\tbackground: white;\r\n\tcolor: #333;\r\n\tbox-shadow: 0 3px 14px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tpadding: 4px 4px 0 0;\r\n\tborder: none;\r\n\ttext-align: center;\r\n\twidth: 18px;\r\n\theight: 14px;\r\n\tfont: 16px/14px Tahoma, Verdana, sans-serif;\r\n\tcolor: #c3c3c3;\r\n\ttext-decoration: none;\r\n\tfont-weight: bold;\r\n\tbackground: transparent;\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button:hover {\r\n\tcolor: #999;\r\n\t}\r\n.leaflet-popup-scrolled {\r\n\toverflow: auto;\r\n\tborder-bottom: 1px solid #ddd;\r\n\tborder-top: 1px solid #ddd;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-popup-content-wrapper {\r\n\t-ms-zoom: 1;\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\twidth: 24px;\r\n\tmargin: 0 auto;\r\n\r\n\t-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";\r\n\tfilter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip-container {\r\n\tmargin-top: -1px;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-control-zoom,\r\n.leaflet-oldie .leaflet-control-layers,\r\n.leaflet-oldie .leaflet-popup-content-wrapper,\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\tborder: 1px solid #999;\r\n\t}\r\n\r\n\r\n/* div icon */\r\n\r\n.leaflet-div-icon {\r\n\tbackground: #fff;\r\n\tborder: 1px solid #666;\r\n\t}\r\n\r\n\r\n/* Tooltip */\r\n/* Base styles for the element that has a tooltip */\r\n.leaflet-tooltip {\r\n\tposition: absolute;\r\n\tpadding: 6px;\r\n\tbackground-color: #fff;\r\n\tborder: 1px solid #fff;\r\n\tborder-radius: 3px;\r\n\tcolor: #222;\r\n\twhite-space: nowrap;\r\n\t-webkit-user-select: none;\r\n\t-moz-user-select: none;\r\n\t-ms-user-select: none;\r\n\tuser-select: none;\r\n\tpointer-events: none;\r\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-tooltip.leaflet-clickable {\r\n\tcursor: pointer;\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-tooltip-top:before,\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\tposition: absolute;\r\n\tpointer-events: none;\r\n\tborder: 6px solid transparent;\r\n\tbackground: transparent;\r\n\tcontent: "";\r\n\t}\r\n\r\n/* Directions */\r\n\r\n.leaflet-tooltip-bottom {\r\n\tmargin-top: 6px;\r\n}\r\n.leaflet-tooltip-top {\r\n\tmargin-top: -6px;\r\n}\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-top:before {\r\n\tleft: 50%;\r\n\tmargin-left: -6px;\r\n\t}\r\n.leaflet-tooltip-top:before {\r\n\tbottom: 0;\r\n\tmargin-bottom: -12px;\r\n\tborder-top-color: #fff;\r\n\t}\r\n.leaflet-tooltip-bottom:before {\r\n\ttop: 0;\r\n\tmargin-top: -12px;\r\n\tmargin-left: -6px;\r\n\tborder-bottom-color: #fff;\r\n\t}\r\n.leaflet-tooltip-left {\r\n\tmargin-left: -6px;\r\n}\r\n.leaflet-tooltip-right {\r\n\tmargin-left: 6px;\r\n}\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\ttop: 50%;\r\n\tmargin-top: -6px;\r\n\t}\r\n.leaflet-tooltip-left:before {\r\n\tright: 0;\r\n\tmargin-right: -12px;\r\n\tborder-left-color: #fff;\r\n\t}\r\n.leaflet-tooltip-right:before {\r\n\tleft: 0;\r\n\tmargin-left: -12px;\r\n\tborder-right-color: #fff;\r\n\t}\r\n',"",{version:3,sources:["webpack://./node_modules/leaflet/dist/leaflet.css"],names:[],mappings:"AAAA,oBAAoB;;AAEpB;;;;;;;;;;CAUC,kBAAkB;CAClB,OAAO;CACP,MAAM;CACN;AACD;CACC,gBAAgB;CAChB;AACD;;;CAGC,yBAAyB;IACtB,sBAAsB;SACjB,iBAAiB;GACvB,uBAAuB;CACzB;AACD,kDAAkD;AAClD;CACC,uBAAuB;AACxB;AACA,mFAAmF;AACnF;CACC,0CAA0C;CAC1C;AACD,qEAAqE;AACrE;CACC,aAAa;CACb,cAAc;CACd,6BAA6B;CAC7B;AACD;;CAEC,cAAc;CACd;AACD,gGAAgG;AAChG,qFAAqF;AACrF;;;;;;CAMC,0BAA0B;CAC1B,2BAA2B;CAC3B;;AAED;CACC,6BAA6B;CAC7B,yBAAyB;CACzB;AACD;CACC,4BAA4B;CAC5B,qDAAqD;CACrD,kBAAkB;CAClB,wBAAwB;AACzB;AACA;CACC,sBAAsB;CACtB,kBAAkB;AACnB;AACA;CACC,wCAAwC;AACzC;AACA;CACC,oDAAoD;AACrD;AACA;CACC,eAAe;CACf,kBAAkB;CAClB;AACD;CACC,mBAAmB;CACnB;AACD;CACC,QAAQ;CACR,SAAS;CACT,2BAA2B;MACtB,sBAAsB;CAC3B,YAAY;CACZ;AACD,uEAAuE;AACvE;CACC,sBAAsB;CACtB;;AAED,wBAAwB,YAAY,EAAE;;AAEtC,wBAAwB,YAAY,EAAE;AACtC,wBAAwB,YAAY,EAAE;AACtC,wBAAwB,YAAY,EAAE;AACtC,wBAAwB,YAAY,EAAE;AACtC,0BAA0B,YAAY,EAAE;AACxC,wBAAwB,YAAY,EAAE;;AAEtC,2BAA2B,YAAY,EAAE;AACzC,2BAA2B,YAAY,EAAE;;AAEzC;CACC,UAAU;CACV,WAAW;CACX;AACD;CACC,2BAA2B;CAC3B,qBAAqB;CACrB,kBAAkB;CAClB;;;AAGD,wBAAwB;;AAExB;CACC,kBAAkB;CAClB,YAAY;CACZ,8BAA8B,EAAE,8BAA8B;CAC9D,oBAAoB;CACpB;AACD;;CAEC,kBAAkB;CAClB,aAAa;CACb,oBAAoB;CACpB;AACD;CACC,MAAM;CACN;AACD;CACC,QAAQ;CACR;AACD;CACC,SAAS;CACT;AACD;CACC,OAAO;CACP;AACD;CACC,WAAW;CACX,WAAW;CACX;AACD;CACC,YAAY;CACZ;AACD;CACC,gBAAgB;CAChB;AACD;CACC,mBAAmB;CACnB;AACD;CACC,iBAAiB;CACjB;AACD;CACC,kBAAkB;CAClB;;;AAGD,6BAA6B;;AAE7B;CACC,oBAAoB;CACpB;AACD;CACC,UAAU;CACV,uCAAuC;IACpC,oCAAoC;SAC/B,+BAA+B;CACvC;AACD;CACC,UAAU;CACV;AACD;CACC,6BAA6B;KACzB,yBAAyB;SACrB,qBAAqB;CAC7B;AACD;CACC,sBAAsB;CACtB;AACD;CACC,oEAAoE;IACjE,iEAAiE;SAC5D,4DAA4D;CACpE;AACD;;CAEC,wBAAwB;IACrB,qBAAqB;SAChB,gBAAgB;CACxB;;AAED;CACC,kBAAkB;CAClB;;;AAGD,YAAY;;AAEZ;CACC,eAAe;CACf;AACD;CACC,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB;AACD;;CAEC,iBAAiB;CACjB;AACD;;CAEC,YAAY;CACZ;AACD;;;CAGC,YAAY;CACZ,wBAAwB;CACxB,wBAAwB;CACxB,wBAAwB;CACxB;;AAED,oCAAoC;AACpC;;;;;CAKC,oBAAoB;CACpB;;AAED;;;;CAIC,8BAA8B,EAAE,8BAA8B;CAC9D,oBAAoB;CACpB;;AAED,kBAAkB;;AAElB;CACC,gBAAgB;CAChB,UAAU;CACV;AACD;CACC,cAAc;CACd;AACD;CACC,yBAAyB;CACzB;AACD;CACC,uBAAuB;CACvB,iCAAiC;CACjC;;;AAGD,uBAAuB;AACvB;CACC,6DAA6D;CAC7D;;;AAGD,2BAA2B;;AAE3B;CACC,sCAAsC;CACtC,kBAAkB;CAClB;AACD;;CAEC,sBAAsB;CACtB,6BAA6B;CAC7B,WAAW;CACX,YAAY;CACZ,iBAAiB;CACjB,cAAc;CACd,kBAAkB;CAClB,qBAAqB;CACrB,YAAY;CACZ;AACD;;CAEC,4BAA4B;CAC5B,4BAA4B;CAC5B,cAAc;CACd;AACD;CACC,yBAAyB;CACzB;AACD;CACC,2BAA2B;CAC3B,4BAA4B;CAC5B;AACD;CACC,8BAA8B;CAC9B,+BAA+B;CAC/B,mBAAmB;CACnB;AACD;CACC,eAAe;CACf,yBAAyB;CACzB,WAAW;CACX;;AAED;CACC,WAAW;CACX,YAAY;CACZ,iBAAiB;CACjB;AACD;CACC,2BAA2B;CAC3B,4BAA4B;CAC5B;AACD;CACC,8BAA8B;CAC9B,+BAA+B;CAC/B;;AAED,iBAAiB;;AAEjB;;CAEC,mDAAmD;CACnD,gBAAgB;CAChB;;AAED;CACC,eAAe;CACf;;;AAGD,mBAAmB;;AAEnB;CACC,qCAAqC;CACrC,gBAAgB;CAChB,kBAAkB;CAClB;AACD;CACC,yDAAwC;CACxC,WAAW;CACX,YAAY;CACZ;AACD;CACC,yDAA2C;CAC3C,0BAA0B;CAC1B;AACD;CACC,WAAW;CACX,YAAY;CACZ;AACD;;CAEC,aAAa;CACb;AACD;CACC,cAAc;CACd,kBAAkB;CAClB;AACD;CACC,yBAAyB;CACzB,WAAW;CACX,gBAAgB;CAChB;AACD;CACC,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB;AACD;CACC,eAAe;CACf,kBAAkB;CAClB,QAAQ;CACR;AACD;CACC,cAAc;CACd;AACD;CACC,SAAS;CACT,0BAA0B;CAC1B,0BAA0B;CAC1B;;AAED,sBAAsB;AACtB;CACC,yDAA6C;CAC7C;;;AAGD,mCAAmC;;AAEnC;CACC,gBAAgB;CAChB,oCAAoC;CACpC,SAAS;CACT;AACD;;CAEC,cAAc;CACd,WAAW;CACX;AACD;CACC,qBAAqB;CACrB;AACD;CACC,0BAA0B;CAC1B;AACD;;CAEC,eAAe;CACf;AACD;CACC,gBAAgB;CAChB;AACD;CACC,kBAAkB;CAClB;AACD;CACC,sBAAsB;CACtB,gBAAgB;CAChB,gBAAgB;CAChB,oBAAoB;CACpB,eAAe;CACf,mBAAmB;CACnB,gBAAgB;CAChB,2BAA2B;MACtB,sBAAsB;;CAE3B,gBAAgB;CAChB,oCAAoC;CACpC;AACD;CACC,0BAA0B;CAC1B,mBAAmB;CACnB,gBAAgB;CAChB;AACD;CACC,6BAA6B;CAC7B;;AAED;;;CAGC,gBAAgB;CAChB;AACD;;CAEC,iCAAiC;CACjC,4BAA4B;CAC5B;;;AAGD,UAAU;;AAEV;CACC,kBAAkB;CAClB,kBAAkB;CAClB,mBAAmB;CACnB;AACD;CACC,YAAY;CACZ,gBAAgB;CAChB,mBAAmB;CACnB;AACD;CACC,iBAAiB;CACjB,gBAAgB;CAChB;AACD;CACC,cAAc;CACd;AACD;CACC,WAAW;CACX,YAAY;CACZ,kBAAkB;CAClB,SAAS;CACT,kBAAkB;CAClB,gBAAgB;CAChB,oBAAoB;CACpB;AACD;CACC,WAAW;CACX,YAAY;CACZ,YAAY;;CAEZ,oBAAoB;;CAEpB,gCAAgC;IAC7B,6BAA6B;KAC5B,4BAA4B;SACxB,wBAAwB;CAChC;AACD;;CAEC,iBAAiB;CACjB,WAAW;CACX,sCAAsC;CACtC;AACD;CACC,kBAAkB;CAClB,MAAM;CACN,QAAQ;CACR,oBAAoB;CACpB,YAAY;CACZ,kBAAkB;CAClB,WAAW;CACX,YAAY;CACZ,2CAA2C;CAC3C,cAAc;CACd,qBAAqB;CACrB,iBAAiB;CACjB,uBAAuB;CACvB;AACD;CACC,WAAW;CACX;AACD;CACC,cAAc;CACd,6BAA6B;CAC7B,0BAA0B;CAC1B;;AAED;CACC,WAAW;CACX;AACD;CACC,WAAW;CACX,cAAc;;CAEd,uHAAuH;CACvH,iHAAiH;CACjH;AACD;CACC,gBAAgB;CAChB;;AAED;;;;CAIC,sBAAsB;CACtB;;;AAGD,aAAa;;AAEb;CACC,gBAAgB;CAChB,sBAAsB;CACtB;;;AAGD,YAAY;AACZ,mDAAmD;AACnD;CACC,kBAAkB;CAClB,YAAY;CACZ,sBAAsB;CACtB,sBAAsB;CACtB,kBAAkB;CAClB,WAAW;CACX,mBAAmB;CACnB,yBAAyB;CACzB,sBAAsB;CACtB,qBAAqB;CACrB,iBAAiB;CACjB,oBAAoB;CACpB,qCAAqC;CACrC;AACD;CACC,eAAe;CACf,oBAAoB;CACpB;AACD;;;;CAIC,kBAAkB;CAClB,oBAAoB;CACpB,6BAA6B;CAC7B,uBAAuB;CACvB,WAAW;CACX;;AAED,eAAe;;AAEf;CACC,eAAe;AAChB;AACA;CACC,gBAAgB;AACjB;AACA;;CAEC,SAAS;CACT,iBAAiB;CACjB;AACD;CACC,SAAS;CACT,oBAAoB;CACpB,sBAAsB;CACtB;AACD;CACC,MAAM;CACN,iBAAiB;CACjB,iBAAiB;CACjB,yBAAyB;CACzB;AACD;CACC,iBAAiB;AAClB;AACA;CACC,gBAAgB;AACjB;AACA;;CAEC,QAAQ;CACR,gBAAgB;CAChB;AACD;CACC,QAAQ;CACR,mBAAmB;CACnB,uBAAuB;CACvB;AACD;CACC,OAAO;CACP,kBAAkB;CAClB,wBAAwB;CACxB",sourcesContent:['/* required styles */\r\n\r\n.leaflet-pane,\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-tile-container,\r\n.leaflet-pane > svg,\r\n.leaflet-pane > canvas,\r\n.leaflet-zoom-box,\r\n.leaflet-image-layer,\r\n.leaflet-layer {\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\t}\r\n.leaflet-container {\r\n\toverflow: hidden;\r\n\t}\r\n.leaflet-tile,\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\t-webkit-user-select: none;\r\n\t -moz-user-select: none;\r\n\t user-select: none;\r\n\t -webkit-user-drag: none;\r\n\t}\r\n/* Prevents IE11 from highlighting tiles in blue */\r\n.leaflet-tile::selection {\r\n\tbackground: transparent;\r\n}\r\n/* Safari renders non-retina tile on retina better with this, but Chrome is worse */\r\n.leaflet-safari .leaflet-tile {\r\n\timage-rendering: -webkit-optimize-contrast;\r\n\t}\r\n/* hack that prevents hw layers "stretching" when loading new tiles */\r\n.leaflet-safari .leaflet-tile-container {\r\n\twidth: 1600px;\r\n\theight: 1600px;\r\n\t-webkit-transform-origin: 0 0;\r\n\t}\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow {\r\n\tdisplay: block;\r\n\t}\r\n/* .leaflet-container svg: reset svg max-width decleration shipped in Joomla! (joomla.org) 3.x */\r\n/* .leaflet-container img: map is broken in FF if you have max-width: 100% on tiles */\r\n.leaflet-container .leaflet-overlay-pane svg,\r\n.leaflet-container .leaflet-marker-pane img,\r\n.leaflet-container .leaflet-shadow-pane img,\r\n.leaflet-container .leaflet-tile-pane img,\r\n.leaflet-container img.leaflet-image-layer,\r\n.leaflet-container .leaflet-tile {\r\n\tmax-width: none !important;\r\n\tmax-height: none !important;\r\n\t}\r\n\r\n.leaflet-container.leaflet-touch-zoom {\r\n\t-ms-touch-action: pan-x pan-y;\r\n\ttouch-action: pan-x pan-y;\r\n\t}\r\n.leaflet-container.leaflet-touch-drag {\r\n\t-ms-touch-action: pinch-zoom;\r\n\t/* Fallback for FF which doesn\'t support pinch-zoom */\r\n\ttouch-action: none;\r\n\ttouch-action: pinch-zoom;\r\n}\r\n.leaflet-container.leaflet-touch-drag.leaflet-touch-zoom {\r\n\t-ms-touch-action: none;\r\n\ttouch-action: none;\r\n}\r\n.leaflet-container {\r\n\t-webkit-tap-highlight-color: transparent;\r\n}\r\n.leaflet-container a {\r\n\t-webkit-tap-highlight-color: rgba(51, 181, 229, 0.4);\r\n}\r\n.leaflet-tile {\r\n\tfilter: inherit;\r\n\tvisibility: hidden;\r\n\t}\r\n.leaflet-tile-loaded {\r\n\tvisibility: inherit;\r\n\t}\r\n.leaflet-zoom-box {\r\n\twidth: 0;\r\n\theight: 0;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\tz-index: 800;\r\n\t}\r\n/* workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=888319 */\r\n.leaflet-overlay-pane svg {\r\n\t-moz-user-select: none;\r\n\t}\r\n\r\n.leaflet-pane { z-index: 400; }\r\n\r\n.leaflet-tile-pane { z-index: 200; }\r\n.leaflet-overlay-pane { z-index: 400; }\r\n.leaflet-shadow-pane { z-index: 500; }\r\n.leaflet-marker-pane { z-index: 600; }\r\n.leaflet-tooltip-pane { z-index: 650; }\r\n.leaflet-popup-pane { z-index: 700; }\r\n\r\n.leaflet-map-pane canvas { z-index: 100; }\r\n.leaflet-map-pane svg { z-index: 200; }\r\n\r\n.leaflet-vml-shape {\r\n\twidth: 1px;\r\n\theight: 1px;\r\n\t}\r\n.lvml {\r\n\tbehavior: url(#default#VML);\r\n\tdisplay: inline-block;\r\n\tposition: absolute;\r\n\t}\r\n\r\n\r\n/* control positioning */\r\n\r\n.leaflet-control {\r\n\tposition: relative;\r\n\tz-index: 800;\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn\'t have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-top,\r\n.leaflet-bottom {\r\n\tposition: absolute;\r\n\tz-index: 1000;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-top {\r\n\ttop: 0;\r\n\t}\r\n.leaflet-right {\r\n\tright: 0;\r\n\t}\r\n.leaflet-bottom {\r\n\tbottom: 0;\r\n\t}\r\n.leaflet-left {\r\n\tleft: 0;\r\n\t}\r\n.leaflet-control {\r\n\tfloat: left;\r\n\tclear: both;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tfloat: right;\r\n\t}\r\n.leaflet-top .leaflet-control {\r\n\tmargin-top: 10px;\r\n\t}\r\n.leaflet-bottom .leaflet-control {\r\n\tmargin-bottom: 10px;\r\n\t}\r\n.leaflet-left .leaflet-control {\r\n\tmargin-left: 10px;\r\n\t}\r\n.leaflet-right .leaflet-control {\r\n\tmargin-right: 10px;\r\n\t}\r\n\r\n\r\n/* zoom and fade animations */\r\n\r\n.leaflet-fade-anim .leaflet-tile {\r\n\twill-change: opacity;\r\n\t}\r\n.leaflet-fade-anim .leaflet-popup {\r\n\topacity: 0;\r\n\t-webkit-transition: opacity 0.2s linear;\r\n\t -moz-transition: opacity 0.2s linear;\r\n\t transition: opacity 0.2s linear;\r\n\t}\r\n.leaflet-fade-anim .leaflet-map-pane .leaflet-popup {\r\n\topacity: 1;\r\n\t}\r\n.leaflet-zoom-animated {\r\n\t-webkit-transform-origin: 0 0;\r\n\t -ms-transform-origin: 0 0;\r\n\t transform-origin: 0 0;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\twill-change: transform;\r\n\t}\r\n.leaflet-zoom-anim .leaflet-zoom-animated {\r\n\t-webkit-transition: -webkit-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t -moz-transition: -moz-transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t transition: transform 0.25s cubic-bezier(0,0,0.25,1);\r\n\t}\r\n.leaflet-zoom-anim .leaflet-tile,\r\n.leaflet-pan-anim .leaflet-tile {\r\n\t-webkit-transition: none;\r\n\t -moz-transition: none;\r\n\t transition: none;\r\n\t}\r\n\r\n.leaflet-zoom-anim .leaflet-zoom-hide {\r\n\tvisibility: hidden;\r\n\t}\r\n\r\n\r\n/* cursors */\r\n\r\n.leaflet-interactive {\r\n\tcursor: pointer;\r\n\t}\r\n.leaflet-grab {\r\n\tcursor: -webkit-grab;\r\n\tcursor: -moz-grab;\r\n\tcursor: grab;\r\n\t}\r\n.leaflet-crosshair,\r\n.leaflet-crosshair .leaflet-interactive {\r\n\tcursor: crosshair;\r\n\t}\r\n.leaflet-popup-pane,\r\n.leaflet-control {\r\n\tcursor: auto;\r\n\t}\r\n.leaflet-dragging .leaflet-grab,\r\n.leaflet-dragging .leaflet-grab .leaflet-interactive,\r\n.leaflet-dragging .leaflet-marker-draggable {\r\n\tcursor: move;\r\n\tcursor: -webkit-grabbing;\r\n\tcursor: -moz-grabbing;\r\n\tcursor: grabbing;\r\n\t}\r\n\r\n/* marker & overlays interactivity */\r\n.leaflet-marker-icon,\r\n.leaflet-marker-shadow,\r\n.leaflet-image-layer,\r\n.leaflet-pane > svg path,\r\n.leaflet-tile-container {\r\n\tpointer-events: none;\r\n\t}\r\n\r\n.leaflet-marker-icon.leaflet-interactive,\r\n.leaflet-image-layer.leaflet-interactive,\r\n.leaflet-pane > svg path.leaflet-interactive,\r\nsvg.leaflet-image-layer.leaflet-interactive path {\r\n\tpointer-events: visiblePainted; /* IE 9-10 doesn\'t have auto */\r\n\tpointer-events: auto;\r\n\t}\r\n\r\n/* visual tweaks */\r\n\r\n.leaflet-container {\r\n\tbackground: #ddd;\r\n\toutline: 0;\r\n\t}\r\n.leaflet-container a {\r\n\tcolor: #0078A8;\r\n\t}\r\n.leaflet-container a.leaflet-active {\r\n\toutline: 2px solid orange;\r\n\t}\r\n.leaflet-zoom-box {\r\n\tborder: 2px dotted #38f;\r\n\tbackground: rgba(255,255,255,0.5);\r\n\t}\r\n\r\n\r\n/* general typography */\r\n.leaflet-container {\r\n\tfont: 12px/1.5 "Helvetica Neue", Arial, Helvetica, sans-serif;\r\n\t}\r\n\r\n\r\n/* general toolbar styles */\r\n\r\n.leaflet-bar {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.65);\r\n\tborder-radius: 4px;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #fff;\r\n\tborder-bottom: 1px solid #ccc;\r\n\twidth: 26px;\r\n\theight: 26px;\r\n\tline-height: 26px;\r\n\tdisplay: block;\r\n\ttext-align: center;\r\n\ttext-decoration: none;\r\n\tcolor: black;\r\n\t}\r\n.leaflet-bar a,\r\n.leaflet-control-layers-toggle {\r\n\tbackground-position: 50% 50%;\r\n\tbackground-repeat: no-repeat;\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-bar a:hover {\r\n\tbackground-color: #f4f4f4;\r\n\t}\r\n.leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 4px;\r\n\tborder-top-right-radius: 4px;\r\n\t}\r\n.leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 4px;\r\n\tborder-bottom-right-radius: 4px;\r\n\tborder-bottom: none;\r\n\t}\r\n.leaflet-bar a.leaflet-disabled {\r\n\tcursor: default;\r\n\tbackground-color: #f4f4f4;\r\n\tcolor: #bbb;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-bar a {\r\n\twidth: 30px;\r\n\theight: 30px;\r\n\tline-height: 30px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:first-child {\r\n\tborder-top-left-radius: 2px;\r\n\tborder-top-right-radius: 2px;\r\n\t}\r\n.leaflet-touch .leaflet-bar a:last-child {\r\n\tborder-bottom-left-radius: 2px;\r\n\tborder-bottom-right-radius: 2px;\r\n\t}\r\n\r\n/* zoom control */\r\n\r\n.leaflet-control-zoom-in,\r\n.leaflet-control-zoom-out {\r\n\tfont: bold 18px \'Lucida Console\', Monaco, monospace;\r\n\ttext-indent: 1px;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-zoom-in, .leaflet-touch .leaflet-control-zoom-out {\r\n\tfont-size: 22px;\r\n\t}\r\n\r\n\r\n/* layers control */\r\n\r\n.leaflet-control-layers {\r\n\tbox-shadow: 0 1px 5px rgba(0,0,0,0.4);\r\n\tbackground: #fff;\r\n\tborder-radius: 5px;\r\n\t}\r\n.leaflet-control-layers-toggle {\r\n\tbackground-image: url(images/layers.png);\r\n\twidth: 36px;\r\n\theight: 36px;\r\n\t}\r\n.leaflet-retina .leaflet-control-layers-toggle {\r\n\tbackground-image: url(images/layers-2x.png);\r\n\tbackground-size: 26px 26px;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers-toggle {\r\n\twidth: 44px;\r\n\theight: 44px;\r\n\t}\r\n.leaflet-control-layers .leaflet-control-layers-list,\r\n.leaflet-control-layers-expanded .leaflet-control-layers-toggle {\r\n\tdisplay: none;\r\n\t}\r\n.leaflet-control-layers-expanded .leaflet-control-layers-list {\r\n\tdisplay: block;\r\n\tposition: relative;\r\n\t}\r\n.leaflet-control-layers-expanded {\r\n\tpadding: 6px 10px 6px 6px;\r\n\tcolor: #333;\r\n\tbackground: #fff;\r\n\t}\r\n.leaflet-control-layers-scrollbar {\r\n\toverflow-y: scroll;\r\n\toverflow-x: hidden;\r\n\tpadding-right: 5px;\r\n\t}\r\n.leaflet-control-layers-selector {\r\n\tmargin-top: 2px;\r\n\tposition: relative;\r\n\ttop: 1px;\r\n\t}\r\n.leaflet-control-layers label {\r\n\tdisplay: block;\r\n\t}\r\n.leaflet-control-layers-separator {\r\n\theight: 0;\r\n\tborder-top: 1px solid #ddd;\r\n\tmargin: 5px -10px 5px -6px;\r\n\t}\r\n\r\n/* Default icon URLs */\r\n.leaflet-default-icon-path {\r\n\tbackground-image: url(images/marker-icon.png);\r\n\t}\r\n\r\n\r\n/* attribution and scale controls */\r\n\r\n.leaflet-container .leaflet-control-attribution {\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.7);\r\n\tmargin: 0;\r\n\t}\r\n.leaflet-control-attribution,\r\n.leaflet-control-scale-line {\r\n\tpadding: 0 5px;\r\n\tcolor: #333;\r\n\t}\r\n.leaflet-control-attribution a {\r\n\ttext-decoration: none;\r\n\t}\r\n.leaflet-control-attribution a:hover {\r\n\ttext-decoration: underline;\r\n\t}\r\n.leaflet-container .leaflet-control-attribution,\r\n.leaflet-container .leaflet-control-scale {\r\n\tfont-size: 11px;\r\n\t}\r\n.leaflet-left .leaflet-control-scale {\r\n\tmargin-left: 5px;\r\n\t}\r\n.leaflet-bottom .leaflet-control-scale {\r\n\tmargin-bottom: 5px;\r\n\t}\r\n.leaflet-control-scale-line {\r\n\tborder: 2px solid #777;\r\n\tborder-top: none;\r\n\tline-height: 1.1;\r\n\tpadding: 2px 5px 1px;\r\n\tfont-size: 11px;\r\n\twhite-space: nowrap;\r\n\toverflow: hidden;\r\n\t-moz-box-sizing: border-box;\r\n\t box-sizing: border-box;\r\n\r\n\tbackground: #fff;\r\n\tbackground: rgba(255, 255, 255, 0.5);\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child) {\r\n\tborder-top: 2px solid #777;\r\n\tborder-bottom: none;\r\n\tmargin-top: -2px;\r\n\t}\r\n.leaflet-control-scale-line:not(:first-child):not(:last-child) {\r\n\tborder-bottom: 2px solid #777;\r\n\t}\r\n\r\n.leaflet-touch .leaflet-control-attribution,\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tbox-shadow: none;\r\n\t}\r\n.leaflet-touch .leaflet-control-layers,\r\n.leaflet-touch .leaflet-bar {\r\n\tborder: 2px solid rgba(0,0,0,0.2);\r\n\tbackground-clip: padding-box;\r\n\t}\r\n\r\n\r\n/* popup */\r\n\r\n.leaflet-popup {\r\n\tposition: absolute;\r\n\ttext-align: center;\r\n\tmargin-bottom: 20px;\r\n\t}\r\n.leaflet-popup-content-wrapper {\r\n\tpadding: 1px;\r\n\ttext-align: left;\r\n\tborder-radius: 12px;\r\n\t}\r\n.leaflet-popup-content {\r\n\tmargin: 13px 19px;\r\n\tline-height: 1.4;\r\n\t}\r\n.leaflet-popup-content p {\r\n\tmargin: 18px 0;\r\n\t}\r\n.leaflet-popup-tip-container {\r\n\twidth: 40px;\r\n\theight: 20px;\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\tmargin-left: -20px;\r\n\toverflow: hidden;\r\n\tpointer-events: none;\r\n\t}\r\n.leaflet-popup-tip {\r\n\twidth: 17px;\r\n\theight: 17px;\r\n\tpadding: 1px;\r\n\r\n\tmargin: -10px auto 0;\r\n\r\n\t-webkit-transform: rotate(45deg);\r\n\t -moz-transform: rotate(45deg);\r\n\t -ms-transform: rotate(45deg);\r\n\t transform: rotate(45deg);\r\n\t}\r\n.leaflet-popup-content-wrapper,\r\n.leaflet-popup-tip {\r\n\tbackground: white;\r\n\tcolor: #333;\r\n\tbox-shadow: 0 3px 14px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button {\r\n\tposition: absolute;\r\n\ttop: 0;\r\n\tright: 0;\r\n\tpadding: 4px 4px 0 0;\r\n\tborder: none;\r\n\ttext-align: center;\r\n\twidth: 18px;\r\n\theight: 14px;\r\n\tfont: 16px/14px Tahoma, Verdana, sans-serif;\r\n\tcolor: #c3c3c3;\r\n\ttext-decoration: none;\r\n\tfont-weight: bold;\r\n\tbackground: transparent;\r\n\t}\r\n.leaflet-container a.leaflet-popup-close-button:hover {\r\n\tcolor: #999;\r\n\t}\r\n.leaflet-popup-scrolled {\r\n\toverflow: auto;\r\n\tborder-bottom: 1px solid #ddd;\r\n\tborder-top: 1px solid #ddd;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-popup-content-wrapper {\r\n\t-ms-zoom: 1;\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\twidth: 24px;\r\n\tmargin: 0 auto;\r\n\r\n\t-ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678)";\r\n\tfilter: progid:DXImageTransform.Microsoft.Matrix(M11=0.70710678, M12=0.70710678, M21=-0.70710678, M22=0.70710678);\r\n\t}\r\n.leaflet-oldie .leaflet-popup-tip-container {\r\n\tmargin-top: -1px;\r\n\t}\r\n\r\n.leaflet-oldie .leaflet-control-zoom,\r\n.leaflet-oldie .leaflet-control-layers,\r\n.leaflet-oldie .leaflet-popup-content-wrapper,\r\n.leaflet-oldie .leaflet-popup-tip {\r\n\tborder: 1px solid #999;\r\n\t}\r\n\r\n\r\n/* div icon */\r\n\r\n.leaflet-div-icon {\r\n\tbackground: #fff;\r\n\tborder: 1px solid #666;\r\n\t}\r\n\r\n\r\n/* Tooltip */\r\n/* Base styles for the element that has a tooltip */\r\n.leaflet-tooltip {\r\n\tposition: absolute;\r\n\tpadding: 6px;\r\n\tbackground-color: #fff;\r\n\tborder: 1px solid #fff;\r\n\tborder-radius: 3px;\r\n\tcolor: #222;\r\n\twhite-space: nowrap;\r\n\t-webkit-user-select: none;\r\n\t-moz-user-select: none;\r\n\t-ms-user-select: none;\r\n\tuser-select: none;\r\n\tpointer-events: none;\r\n\tbox-shadow: 0 1px 3px rgba(0,0,0,0.4);\r\n\t}\r\n.leaflet-tooltip.leaflet-clickable {\r\n\tcursor: pointer;\r\n\tpointer-events: auto;\r\n\t}\r\n.leaflet-tooltip-top:before,\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\tposition: absolute;\r\n\tpointer-events: none;\r\n\tborder: 6px solid transparent;\r\n\tbackground: transparent;\r\n\tcontent: "";\r\n\t}\r\n\r\n/* Directions */\r\n\r\n.leaflet-tooltip-bottom {\r\n\tmargin-top: 6px;\r\n}\r\n.leaflet-tooltip-top {\r\n\tmargin-top: -6px;\r\n}\r\n.leaflet-tooltip-bottom:before,\r\n.leaflet-tooltip-top:before {\r\n\tleft: 50%;\r\n\tmargin-left: -6px;\r\n\t}\r\n.leaflet-tooltip-top:before {\r\n\tbottom: 0;\r\n\tmargin-bottom: -12px;\r\n\tborder-top-color: #fff;\r\n\t}\r\n.leaflet-tooltip-bottom:before {\r\n\ttop: 0;\r\n\tmargin-top: -12px;\r\n\tmargin-left: -6px;\r\n\tborder-bottom-color: #fff;\r\n\t}\r\n.leaflet-tooltip-left {\r\n\tmargin-left: -6px;\r\n}\r\n.leaflet-tooltip-right {\r\n\tmargin-left: 6px;\r\n}\r\n.leaflet-tooltip-left:before,\r\n.leaflet-tooltip-right:before {\r\n\ttop: 50%;\r\n\tmargin-top: -6px;\r\n\t}\r\n.leaflet-tooltip-left:before {\r\n\tright: 0;\r\n\tmargin-right: -12px;\r\n\tborder-left-color: #fff;\r\n\t}\r\n.leaflet-tooltip-right:before {\r\n\tleft: 0;\r\n\tmargin-left: -12px;\r\n\tborder-right-color: #fff;\r\n\t}\r\n'],sourceRoot:""}]),e.default=m},function(t,e,n){var i=n(166);"string"==typeof i&&(i=[[t.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(64)(i,r);i.locals&&(t.exports=i.locals)},function(t,e,n){"use strict";n.r(e);var i=n(8),r=n.n(i),o=n(9),s=n.n(o),a=n(130),u=s()(r.a);u.i(a.a),u.push([t.i,'/*! HTML5 Boilerplate v5.0 | MIT License | http://h5bp.com/ */\n\nhtml {\n color: #222;\n font-size: 1em;\n line-height: 1.4;\n}\n\n::-webkit-scrollbar {\n display: none;\n}\n\n::-moz-selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\n::selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\nbody {\n margin: 0;\n width: 100vw;\n height: 100vh;\n display: flex;\n flex-flow: row wrap;\n}\n\nhr {\n display: block;\n height: 1px;\n border: 0;\n border-top: 1px solid #ccc;\n margin: 1em 0;\n padding: 0;\n}\n\naudio,\ncanvas,\niframe,\nimg,\nsvg,\nvideo {\n vertical-align: middle;\n}\n\nfieldset {\n border: 0;\n margin: 0;\n padding: 0;\n}\n\nselect, textarea {\n border: none;\n border-bottom: solid 1px black;\n outline: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-border-radius: 0px;\n -moz-border-radius: 0px;\n border-radius: 0px;\n width: 100px;\n padding: 10px 0;\n background: transparent;\n}\n\ntextarea {\n resize: vertical;\n width: 100%;\n height: 25px;\n}\n\nbutton {\n -webkit-appearance: button;\n cursor: pointer;\n border: none;\n background-color: hotpink;\n padding: 10px;\n width: 100px;\n color: white;\n}\n\n.form-group {\n margin: 20px 0;\n}\n\n.browserupgrade {\n margin: 0.2em 0;\n background: #ccc;\n color: #000;\n padding: 0.2em 0;\n}\n\n\n/* ==========================================================================\n Author\'s custom styles\n ========================================================================== */\n\n/* ==========================================================================\n Media Queries\n ========================================================================== */\n\n@media only screen and (min-width: 68.75em) {\n #left {\n width: 45%;\n }\n\n #right {\n width: 45%;\n }\n}\n\n@media print,\n (-o-min-device-pixel-ratio: 5/4),\n (-webkit-min-device-pixel-ratio: 1.25),\n (min-resolution: 120dpi) {\n\n}\n\n/* ==========================================================================\n Helper classes\n ========================================================================== */\n\n.hidden {\n display: none !important;\n visibility: hidden;\n}\n\n.visuallyhidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.visuallyhidden.focusable:active,\n.visuallyhidden.focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.invisible {\n visibility: hidden;\n}\n\n.clearfix:before,\n.clearfix:after {\n content: " ";\n display: table;\n}\n\n.clearfix:after {\n clear: both;\n}\n\n.clearfix {\n *zoom: 1;\n}\n\n/* ==========================================================================\n Print styles\n ========================================================================== */\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: " (" attr(href) ")";\n }\n\n abbr[title]:after {\n content: " (" attr(title) ")";\n }\n\n a[href^="#"]:after,\n a[href^="javascript:"]:after {\n content: "";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n}\n',"",{version:3,sources:["webpack://./framework/styles/main.css"],names:[],mappings:"AAAA,6DAA6D;;AAE7D;IACI,WAAW;IACX,cAAc;IACd,gBAAgB;AACpB;;AAEA;IACI,aAAa;AACjB;;AAEA;IACI,mBAAmB;IACnB,iBAAiB;AACrB;;AAEA;IACI,mBAAmB;IACnB,iBAAiB;AACrB;;AAEA;EACE,SAAS;EACT,YAAY;EACZ,aAAa;EACb,aAAa;EACb,mBAAmB;AACrB;;AAEA;IACI,cAAc;IACd,WAAW;IACX,SAAS;IACT,0BAA0B;IAC1B,aAAa;IACb,UAAU;AACd;;AAEA;;;;;;IAMI,sBAAsB;AAC1B;;AAEA;IACI,SAAS;IACT,SAAS;IACT,UAAU;AACd;;AAEA;IACI,YAAY;IACZ,8BAA8B;IAC9B,aAAa;IACb,wBAAwB;IACxB,qBAAqB;IACrB,gBAAgB;IAChB,0BAA0B;IAC1B,uBAAuB;IACvB,kBAAkB;IAClB,YAAY;IACZ,eAAe;IACf,uBAAuB;AAC3B;;AAEA;IACI,gBAAgB;IAChB,WAAW;IACX,YAAY;AAChB;;AAEA;EACE,0BAA0B;IACxB,eAAe;IACf,YAAY;IACZ,yBAAyB;IACzB,aAAa;IACb,YAAY;IACZ,YAAY;AAChB;;AAEA;EACE,cAAc;AAChB;;AAEA;IACI,eAAe;IACf,gBAAgB;IAChB,WAAW;IACX,gBAAgB;AACpB;;;AAGA;;+EAE+E;;AAI/E;;+EAE+E;;AAE/E;IACI;QACI,UAAU;IACd;;IAEA;QACI,UAAU;IACd;AACJ;;AAEA;;;;;AAKA;;AAEA;;+EAE+E;;AAE/E;IACI,wBAAwB;IACxB,kBAAkB;AACtB;;AAEA;IACI,SAAS;IACT,mBAAmB;IACnB,WAAW;IACX,YAAY;IACZ,gBAAgB;IAChB,UAAU;IACV,kBAAkB;IAClB,UAAU;AACd;;AAEA;;IAEI,UAAU;IACV,YAAY;IACZ,SAAS;IACT,iBAAiB;IACjB,gBAAgB;IAChB,WAAW;AACf;;AAEA;IACI,kBAAkB;AACtB;;AAEA;;IAEI,YAAY;IACZ,cAAc;AAClB;;AAEA;IACI,WAAW;AACf;;AAEA;KACI,OAAQ;AACZ;;AAEA;;+EAE+E;;AAE/E;IACI;;;QAGI,kCAAkC;QAClC,sBAAsB;QACtB,2BAA2B;QAC3B,4BAA4B;IAChC;;IAEA;;QAEI,0BAA0B;IAC9B;;IAEA;QACI,4BAA4B;IAChC;;IAEA;QACI,6BAA6B;IACjC;;IAEA;;QAEI,WAAW;IACf;;IAEA;;QAEI,sBAAsB;QACtB,wBAAwB;IAC5B;;IAEA;QACI,2BAA2B;IAC/B;;IAEA;;QAEI,wBAAwB;IAC5B;;IAEA;QACI,0BAA0B;IAC9B;;IAEA;;;QAGI,UAAU;QACV,SAAS;IACb;;IAEA;;QAEI,uBAAuB;IAC3B;AACJ",sourcesContent:['/*! HTML5 Boilerplate v5.0 | MIT License | http://h5bp.com/ */\n\nhtml {\n color: #222;\n font-size: 1em;\n line-height: 1.4;\n}\n\n::-webkit-scrollbar {\n display: none;\n}\n\n::-moz-selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\n::selection {\n background: #b3d4fc;\n text-shadow: none;\n}\n\nbody {\n margin: 0;\n width: 100vw;\n height: 100vh;\n display: flex;\n flex-flow: row wrap;\n}\n\nhr {\n display: block;\n height: 1px;\n border: 0;\n border-top: 1px solid #ccc;\n margin: 1em 0;\n padding: 0;\n}\n\naudio,\ncanvas,\niframe,\nimg,\nsvg,\nvideo {\n vertical-align: middle;\n}\n\nfieldset {\n border: 0;\n margin: 0;\n padding: 0;\n}\n\nselect, textarea {\n border: none;\n border-bottom: solid 1px black;\n outline: none;\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n -webkit-border-radius: 0px;\n -moz-border-radius: 0px;\n border-radius: 0px;\n width: 100px;\n padding: 10px 0;\n background: transparent;\n}\n\ntextarea {\n resize: vertical;\n width: 100%;\n height: 25px;\n}\n\nbutton {\n -webkit-appearance: button;\n cursor: pointer;\n border: none;\n background-color: hotpink;\n padding: 10px;\n width: 100px;\n color: white;\n}\n\n.form-group {\n margin: 20px 0;\n}\n\n.browserupgrade {\n margin: 0.2em 0;\n background: #ccc;\n color: #000;\n padding: 0.2em 0;\n}\n\n\n/* ==========================================================================\n Author\'s custom styles\n ========================================================================== */\n\n@import \'app.css\';\n\n/* ==========================================================================\n Media Queries\n ========================================================================== */\n\n@media only screen and (min-width: 68.75em) {\n #left {\n width: 45%;\n }\n\n #right {\n width: 45%;\n }\n}\n\n@media print,\n (-o-min-device-pixel-ratio: 5/4),\n (-webkit-min-device-pixel-ratio: 1.25),\n (min-resolution: 120dpi) {\n\n}\n\n/* ==========================================================================\n Helper classes\n ========================================================================== */\n\n.hidden {\n display: none !important;\n visibility: hidden;\n}\n\n.visuallyhidden {\n border: 0;\n clip: rect(0 0 0 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n width: 1px;\n}\n\n.visuallyhidden.focusable:active,\n.visuallyhidden.focusable:focus {\n clip: auto;\n height: auto;\n margin: 0;\n overflow: visible;\n position: static;\n width: auto;\n}\n\n.invisible {\n visibility: hidden;\n}\n\n.clearfix:before,\n.clearfix:after {\n content: " ";\n display: table;\n}\n\n.clearfix:after {\n clear: both;\n}\n\n.clearfix {\n *zoom: 1;\n}\n\n/* ==========================================================================\n Print styles\n ========================================================================== */\n\n@media print {\n *,\n *:before,\n *:after {\n background: transparent !important;\n color: #000 !important;\n box-shadow: none !important;\n text-shadow: none !important;\n }\n\n a,\n a:visited {\n text-decoration: underline;\n }\n\n a[href]:after {\n content: " (" attr(href) ")";\n }\n\n abbr[title]:after {\n content: " (" attr(title) ")";\n }\n\n a[href^="#"]:after,\n a[href^="javascript:"]:after {\n content: "";\n }\n\n pre,\n blockquote {\n border: 1px solid #999;\n page-break-inside: avoid;\n }\n\n thead {\n display: table-header-group;\n }\n\n tr,\n img {\n page-break-inside: avoid;\n }\n\n img {\n max-width: 100% !important;\n }\n\n p,\n h2,\n h3 {\n orphans: 3;\n widows: 3;\n }\n\n h2,\n h3 {\n page-break-after: avoid;\n }\n}\n'],sourceRoot:""}]),e.default=u},function(t,e,n){var i=n(168);"string"==typeof i&&(i=[[t.i,i,""]]);var r={hmr:!0,transform:void 0,insertInto:void 0};n(64)(i,r);i.locals&&(t.exports=i.locals)},function(t,e,n){"use strict";n.r(e);var i=n(8),r=n.n(i),o=n(9),s=n.n(o),a=n(46),u=n.n(a),c=n(136),l=n.n(c),h=n(137),f=n.n(h),p=s()(r.a),d=u()(l.a),m=u()(f.a);p.push([t.i,"@font-face {\n font-family: OpenSans;\n src: url("+d+");\n}\n\n@font-face {\n font-family: OpenSans-Light;\n src: url("+m+");\n}\n\n","",{version:3,sources:["webpack://./framework/fonts/fonts.css"],names:[],mappings:"AAAA;IACI,qBAAqB;IACrB,4CAA8B;AAClC;;AAEA;IACI,2BAA2B;IAC3B,4CAA4B;AAChC",sourcesContent:["@font-face {\n font-family: OpenSans;\n src: url(OpenSans-Regular.ttf);\n}\n\n@font-face {\n font-family: OpenSans-Light;\n src: url(OpenSans-Light.ttf);\n}\n\n"],sourceRoot:""}]),e.default=p},function(t,e,n){"use strict";function i(t,e){for(var n=0;n-1?a[u?e[c]:c]:void 0}}},function(t,e,n){var i=n(172),r=n(234),o=n(118);t.exports=function(t){var e=r(t);return 1==e.length&&e[0][2]?o(e[0][0],e[0][1]):function(n){return n===t||i(n,t,e)}}},function(t,e,n){var i=n(104),r=n(109);t.exports=function(t,e,n,o){var s=n.length,a=s,u=!o;if(null==t)return!a;for(t=Object(t);s--;){var c=n[s];if(u&&c[2]?c[1]!==t[c[0]]:!(c[0]in t))return!1}for(;++s-1}},function(t,e,n){var i=n(67);t.exports=function(t,e){var n=this.__data__,r=i(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}},function(t,e,n){var i=n(66);t.exports=function(){this.__data__=new i,this.size=0}},function(t,e){t.exports=function(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}},function(t,e){t.exports=function(t){return this.__data__.get(t)}},function(t,e){t.exports=function(t){return this.__data__.has(t)}},function(t,e,n){var i=n(66),r=n(90),o=n(91);t.exports=function(t,e){var n=this.__data__;if(n instanceof i){var s=n.__data__;if(!r||s.length<199)return s.push([t,e]),this.size=++n.size,this;n=this.__data__=new o(s)}return n.set(t,e),this.size=n.size,this}},function(t,e,n){var i=n(106),r=n(186),o=n(69),s=n(108),a=/^\[object .+?Constructor\]$/,u=Function.prototype,c=Object.prototype,l=u.toString,h=c.hasOwnProperty,f=RegExp("^"+l.call(h).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");t.exports=function(t){return!(!o(t)||r(t))&&(i(t)?f:a).test(s(t))}},function(t,e,n){var i=n(68),r=Object.prototype,o=r.hasOwnProperty,s=r.toString,a=i?i.toStringTag:void 0;t.exports=function(t){var e=o.call(t,a),n=t[a];try{t[a]=void 0;var i=!0}catch(t){}var r=s.call(t);return i&&(e?t[a]=n:delete t[a]),r}},function(t,e){var n=Object.prototype.toString;t.exports=function(t){return n.call(t)}},function(t,e,n){var i,r=n(187),o=(i=/[^.]+$/.exec(r&&r.keys&&r.keys.IE_PROTO||""))?"Symbol(src)_1."+i:"";t.exports=function(t){return!!o&&o in t}},function(t,e,n){var i=n(35)["__core-js_shared__"];t.exports=i},function(t,e){t.exports=function(t,e){return null==t?void 0:t[e]}},function(t,e,n){var i=n(190),r=n(66),o=n(90);t.exports=function(){this.size=0,this.__data__={hash:new i,map:new(o||r),string:new i}}},function(t,e,n){var i=n(191),r=n(192),o=n(193),s=n(194),a=n(195);function u(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e1&&void 0!==arguments[1]?arguments[1]:1,n=new Audio(t);if(!(e<=1&&e>=0))throw new Error("Enter volume between 0 and 1");n.volume=e,n.play()}}])&&i(e.prototype,n),r&&i(e,r),t}();t.exports=r},function(t){t.exports=JSON.parse('{"menuDetails":[{"name":"Pappardelle","pageInfo":"A wide egg noodle with Tuscan origins, pappardelle is often served with hearty meat sauces"},{"name":"Farfalle","pageInfo":"Also called bow tie pasta for its shape, farfalle (the Italian word for butterfly) makes a great cold pasta salad, and can also dress up a warm bowl of meat and veggies"},{"name":"Shells","pageInfo":"Shells work in a variety of settings, depending on their size. If your shells are large enough, you can stuff and bake them, while medium-sized shells work well in casseroles and with meat sauces. Reserve the smallest shells for adding to soups and stews."},{"name":"Campanelle","pageInfo":"Literally meaning “bellflowers,” campanelle sports a very unique shape that’s great at capturing thick, creamy, or meaty sauces. And they work wonders in cheesy bowls, too."}]}')},function(t,e,n){"use strict";var i=n(268),r=n(271),o=n(273),s=n(275);t.exports={"/":i,contacts:r,team:o,404:s}},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;n= 4.3.0"],main:function(t,e,n,i,r){var o,s=null!=e?e:t.nullContext||{},a=t.hooks.helperMissing,u=t.escapeExpression,c=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'
\n

Date: '+u("function"==typeof(o=null!=(o=c(n,"date")||(null!=e?c(e,"date"):e))?o:a)?o.call(s,{name:"date",hash:{},data:r,loc:{start:{line:2,column:33},end:{line:2,column:41}}}):o)+'

\n

Time: '+u("function"==typeof(o=null!=(o=c(n,"time")||(null!=e?c(e,"time"):e))?o:a)?o.call(s,{name:"time",hash:{},data:r,loc:{start:{line:3,column:33},end:{line:3,column:41}}}):o)+'

\n \"\"\n
Hello, World!
\n

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

\n

It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).

\n
\n"},useData:!0})},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;n\n Name: "+s(o(null!=e?a(e,"name"):e,e))+"\n
\n Phone: "+s(o(null!=e?a(e,"phoneNumber"):e,e))+"\n \n"},compiler:[8,">= 4.3.0"],main:function(t,e,n,i,r){var o,s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return'
\n

Contacts

\n
    \n'+(null!=(o=s(n,"each").call(null!=e?e:t.nullContext||{},null!=e?s(e,"contacts"):e,{name:"each",hash:{},fn:t.program(1,r,0),inverse:t.noop,data:r,loc:{start:{line:4,column:4},end:{line:10,column:13}}}))?o:"")+"
\n
"},useData:!0})},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){return(o=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t})(t,e)}function s(t){var e=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(t){return!1}}();return function(){var n,i=c(t);if(e){var r=c(this).constructor;n=Reflect.construct(i,arguments,r)}else n=i.apply(this,arguments);return a(this,n)}}function a(t,e){if(e&&("object"===i(e)||"function"==typeof e))return e;if(void 0!==e)throw new TypeError("Derived constructors may only return object or undefined");return u(t)}function u(t){if(void 0===t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return t}function c(t){return(c=Object.setPrototypeOf?Object.getPrototypeOf:function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}function l(t,e,n){return e in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}var h=function(t){!function(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),e&&o(t,e)}(i,t);var e=s(i);function i(){var t;r(this,i);for(var o=arguments.length,s=new Array(o),a=0;a= 4.3.0"],main:function(t,e,n,i,r){return'
\n

Made by:

\n
    \n \x3c!-- TODO: Add your name as a list element --\x3e\n
  • Ray
  • \n
\n
'},useData:!0})},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;n= 4.3.0"],main:function(t,e,n,i,r){return"

Oops!

\n

The page you're looking for could not be found.

\n"},useData:!0})},function(t,e,n){"use strict";var i=[{type:"alert",label:"Alert",defaultValue:"This is a test alert",view:n(278)},{type:"base",label:"Base",defaultValue:"This is a test base notification"}];t.exports=i},function(t,e,n){"use strict";function i(t){return(i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}function r(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function o(t,e){for(var n=0;n= 4.3.0"],main:function(t,e,n,i,r){var o,s=t.lookupProperty||function(t,e){if(Object.prototype.hasOwnProperty.call(t,e))return t[e]};return"Alert\n
\n "+t.escapeExpression("function"==typeof(o=null!=(o=s(n,"message")||(null!=e?s(e,"message"):e))?o:t.hooks.helperMissing)?o.call(null!=e?e:t.nullContext||{},{name:"message",hash:{},data:r,loc:{start:{line:3,column:2},end:{line:3,column:13}}}):o)+"\n
\n"},useData:!0})}]); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL1N1YnNjcmliZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL2lubmVyU3Vic2NyaWJlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9PYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL3RvU3Vic2NyaWJlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvU3Vic2NyaXB0aW9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9TdWJqZWN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3V0aWwvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWFwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL2lzU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2VtcHR5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL0lubmVyU3Vic2NyaWJlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvY29uZmlnLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL2lkZW50aXR5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9PdXRlclN1YnNjcmliZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL25vb3AuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9pc0Z1bmN0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3V0aWwvRW1wdHlFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9Bc3luY1N1YmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9pc051bWVyaWMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3Jvb3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL3N1YnNjcmliZVRvLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL3N1YnNjcmliZVRvT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9zdWJzY3JpYmVUb1Byb21pc2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3V0aWwvc3Vic2NyaWJlVG9JdGVyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9ob3N0UmVwb3J0RXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2V4Y2VwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9waXBlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL0ltbWVkaWF0ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3NjaGVkdWxlci9hc2FwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc3ltYm9sL3J4U3Vic2NyaWJlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9VbnN1YnNjcmlwdGlvbkVycm9yLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9nZXRVcmwuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvcnVudGltZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0TmF0aXZlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL1JlcGxheVN1YmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VBbGwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvemlwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL2NhblJlcG9ydEVycm9yLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvT2JzZXJ2ZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXRUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNPYmplY3RMaWtlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvUXVldWVBY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3NjaGVkdWxlci9xdWV1ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9TY2hlZHVsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvYWRkU3R5bGVzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvTm90aWZpY2F0aW9uSHViLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19MaXN0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Fzc29jSW5kZXhPZi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fU3ltYm9sLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2lzT2JqZWN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVDcmVhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hcERhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNTeW1ib2wuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvS2V5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9UaW1lb3V0RXJyb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvbWVyZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvcmFjZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS90aW1lci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVQcm9taXNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL2lzSXRlcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUl0ZXJhYmxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9TdWJqZWN0U3Vic2NyaXB0aW9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL3N1YnNjcmliZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3V0aWwvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC91dGlsL25vdC5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19NYXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX01hcENhY2hlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2tleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNMZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzS2V5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvQmFzZVBhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9CYXNlTm90aWZpY2F0aW9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9QdWJsaWNOb3RpZmljYXRpb25IdWIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9iYXNlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2xvZ2dlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2ludGVybmFsL3Byb3RvLWFjY2Vzcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXRlcmF0ZWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1N0YWNrLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2VxLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2lzRnVuY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2ZyZWVHbG9iYWwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3RvU291cmNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNFcXVhbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxBcnJheXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcmd1bWVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNCdWZmZXIuanMiLCJ3ZWJwYWNrOi8vLyh3ZWJwYWNrKS9idWlsZGluL21vZHVsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNJbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9pc1R5cGVkQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaXNBcnJheUxpa2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzU3RyaWN0Q29tcGFyYWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWF0Y2hlc1N0cmljdENvbXBhcmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Nhc3RQYXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJXaGVuLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY2F0Y2hFcnJvci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVBbGwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwVG8uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9jb3VudC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVmYXVsdElmRW1wdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsQ2hhbmdlZC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VuZFdpdGguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9ldmVyeS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluYWxpemUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5kLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmlyc3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9pZ25vcmVFbGVtZW50cy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2Nhbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2VNYXBUby5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21pbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9wbHVjay5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2guanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoTGFzdC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hSZXBsYXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9yYWNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0V2hlbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NlcXVlbmNlRXF1YWwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy9zaGFyZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2luZ2xlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFVudGlsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL1N1YnNjcmliZU9uT2JzZXJ2YWJsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoQWxsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlVGltZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVJbnRlcnZhbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVvdXRXaXRoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dDb3VudC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dXaGVuLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2l0aExhdGVzdEZyb20uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy96aXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZUFjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2JpbmROb2RlQ2FsbGJhY2suanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvZ2VuZXJhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9yeGpzL19lc201L2ludGVybmFsL29ic2VydmFibGUvaWlmLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL29uRXJyb3JSZXN1bWVOZXh0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhaXJzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvcnhqcy9fZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL3J4anMvX2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS91c2luZy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL21haW4uY3NzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvcGFnZXMvaG9tZVBhZ2UvaG9tZVBhZ2UuY3NzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvbWFwLmNzcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL21lbnUuY3NzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9sZWFmbGV0L2Rpc3QvaW1hZ2VzL2xheWVycy5wbmciLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xlYWZsZXQvZGlzdC9pbWFnZXMvbGF5ZXJzLTJ4LnBuZyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2ltYWdlcy9tYXJrZXItaWNvbi5wbmciLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3N0eWxlcy9hcHAuY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zdHlsZXMvbm9ybWFsaXplLm1pbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3N0eWxlcy9sYXlvdXQuY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zdHlsZXMvd2F0Y2guY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zdHlsZXMvbm90aWZpY2F0aW9uLmNzcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3R5bGVzL21lbnUuY3NzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9mb250cy9PcGVuU2Fucy1SZWd1bGFyLnR0ZiIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvZm9udHMvT3BlblNhbnMtTGlnaHQudHRmIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2FwcC5jc3M/NWRmYyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2FwcC5jc3MiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9saWIvdXJscy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL3N0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2V2ZW50cy9ldmVudHMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3RlbXBsYXRlcy9iYXNlTm90aWZpY2F0aW9uLmhicyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzLnJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9oZWxwZXJzL2Jsb2NrLWhlbHBlci1taXNzaW5nLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9lYWNoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy9oZWxwZXItbWlzc2luZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvaWYuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9oZWxwZXJzL2xvZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2hlbHBlcnMvbG9va3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaGVscGVycy93aXRoLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvZGVjb3JhdG9ycy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL2RlY29yYXRvcnMvaW5saW5lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaW50ZXJuYWwvY3JlYXRlLW5ldy1sb29rdXAtb2JqZWN0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvc2FmZS1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvZGlzdC9janMvaGFuZGxlYmFycy9ydW50aW1lLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL2Rpc3QvY2pzL2hhbmRsZWJhcnMvaW50ZXJuYWwvd3JhcEhlbHBlci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9kaXN0L2Nqcy9oYW5kbGViYXJzL25vLWNvbmZsaWN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvQXBwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvTXlNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xlYWZsZXQvZGlzdC9sZWFmbGV0LXNyYy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2xlYWZsZXQuY3NzPzE5ZDIiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL2xlYWZsZXQvZGlzdC9sZWFmbGV0LmNzcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3R5bGVzL21haW4uY3NzP2JkNzEiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3N0eWxlcy9tYWluLmNzcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvZm9udHMvZm9udHMuY3NzP2U1MzkiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL2ZvbnRzL2ZvbnRzLmNzcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvc3JjL05vdGlmaWNhdGlvbkZvcm0uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NyZWF0ZUZpbmQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VNYXRjaGVzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSXNNYXRjaC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZURlbGV0ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbGlzdENhY2hlR2V0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19saXN0Q2FjaGVIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2xpc3RDYWNoZVNldC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tDbGVhci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0YWNrR2V0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19zdGFja0hhcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fc3RhY2tTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc05hdGl2ZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZ2V0UmF3VGFnLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19vYmplY3RUb1N0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9faXNNYXNrZWQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2NvcmVKc0RhdGEuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldFZhbHVlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUNsZWFyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19IYXNoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19oYXNoQ2xlYXIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hEZWxldGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hHZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hIYXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc2hTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlRGVsZXRlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19pc0tleWFibGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX21hcENhY2hlR2V0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19tYXBDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwQ2FjaGVTZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VJc0VxdWFsRGVlcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fU2V0Q2FjaGUuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3NldENhY2hlQWRkLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19zZXRDYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlTb21lLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19jYWNoZUhhcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxCeVRhZy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fVWludDhBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWFwVG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fc2V0VG9BcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fZXF1YWxPYmplY3RzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRBbGxLZXlzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlR2V0QWxsS2V5cy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYXJyYXlQdXNoLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRTeW1ib2xzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19hcnJheUZpbHRlci5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9zdHViQXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TGlrZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VUaW1lcy5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzQXJndW1lbnRzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL3N0dWJGYWxzZS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUlzVHlwZWRBcnJheS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVVuYXJ5LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19ub2RlVXRpbC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZUtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2lzUHJvdG90eXBlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19uYXRpdmVLZXlzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19vdmVyQXJnLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19nZXRUYWcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX0RhdGFWaWV3LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19Qcm9taXNlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19TZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX1dlYWtNYXAuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2dldE1hdGNoRGF0YS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZU1hdGNoZXNQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9nZXQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX3N0cmluZ1RvUGF0aC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fbWVtb2l6ZUNhcHBlZC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9tZW1vaXplLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL3RvU3RyaW5nLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVG9TdHJpbmcuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2FycmF5TWFwLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2hhc0luLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlSGFzSW4uanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2hhc1BhdGguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvaWRlbnRpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fYmFzZVByb3BlcnR5RGVlcC5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9maW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvX2Jhc2VGaW5kSW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL25vZGVfbW9kdWxlcy9sb2Rhc2gvdG9JbnRlZ2VyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL3RvRmluaXRlLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL3RvTnVtYmVyLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL19iYXNlVHJpbS5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvbm9kZV9tb2R1bGVzL2xvZGFzaC9fdHJpbW1lZEVuZEluZGV4LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvc2V0dXBOb3RpZmljYXRpb25Gb3JtLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2ZpcnN0LmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9ub2RlX21vZHVsZXMvbG9kYXNoL2hlYWQuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9yeGpzL3dhdGNoT3BlcmF0b3JzLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9QdWJsaWNTdG9yYWdlSHViLmpzIiwid2VicGFjazovLy8uL2ZyYW1ld29yay9zcmMvU3RvcmFnZUh1Yi5qcyIsIndlYnBhY2s6Ly8vLi9mcmFtZXdvcmsvUHVibGljQXVkaW9IdWIuanMiLCJ3ZWJwYWNrOi8vLy4vZnJhbWV3b3JrL3NyYy9BdWRpb0h1Yi5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL3JvdXRlcy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL3BhZ2VzL2hvbWVQYWdlL2hvbWVQYWdlLmpzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvaW1hZ2VzL2xvZ28ucG5nIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvcGFnZXMvaG9tZVBhZ2UvaG9tZVBhZ2UuaGJzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvcGFnZXMvY29udGFjdHNQYWdlL2NvbnRhY3RzUGFnZS5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL3BhZ2VzL2NvbnRhY3RzUGFnZS9jb250YWN0c1BhZ2UuaGJzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvcGFnZXMvdGVhbVBhZ2UvdGVhbVBhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9wYWdlcy90ZWFtUGFnZS90ZWFtUGFnZS5oYnMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9wYWdlcy80MDRQYWdlLzQwNFBhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9wYWdlcy80MDRQYWdlLzQwNFBhZ2UuaGJzIiwid2VicGFjazovLy8uL2NsaWVudC9zcmMvanMvbm90aWZpY2F0aW9ucy5qcyIsIndlYnBhY2s6Ly8vLi9jbGllbnQvc3JjL2pzL25vdGlmaWNhdGlvbnMvQWxlcnROb3RpZmljYXRpb24vQWxlcnROb3RpZmljYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vY2xpZW50L3NyYy9qcy9ub3RpZmljYXRpb25zL0FsZXJ0Tm90aWZpY2F0aW9uL0FsZXJ0Tm90aWZpY2F0aW9uLmhicyJdLCJuYW1lcyI6WyJpbnN0YWxsZWRNb2R1bGVzIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiZXhwb3J0cyIsIm1vZHVsZSIsImkiLCJsIiwibW9kdWxlcyIsImNhbGwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJwIiwicyIsImV4dGVuZFN0YXRpY3MiLCJiIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJBcnJheSIsIl9fZXh0ZW5kcyIsIl9fIiwidGhpcyIsImNvbnN0cnVjdG9yIiwiU3Vic2NyaWJlciIsIl9zdXBlciIsImRlc3RpbmF0aW9uT3JOZXh0IiwiZXJyb3IiLCJjb21wbGV0ZSIsIl90aGlzIiwic3luY0Vycm9yVmFsdWUiLCJzeW5jRXJyb3JUaHJvd24iLCJzeW5jRXJyb3JUaHJvd2FibGUiLCJpc1N0b3BwZWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJkZXN0aW5hdGlvbiIsImFkZCIsIlNhZmVTdWJzY3JpYmVyIiwibmV4dCIsInN1YnNjcmliZXIiLCJfbmV4dCIsImVyciIsIl9lcnJvciIsIl9jb21wbGV0ZSIsInVuc3Vic2NyaWJlIiwiY2xvc2VkIiwiX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSIsIl9wYXJlbnRPclBhcmVudHMiLCJfcGFyZW50U3Vic2NyaWJlciIsIm9ic2VydmVyT3JOZXh0IiwiY29udGV4dCIsIl9jb250ZXh0IiwidXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyIsIl9fdHJ5T3JTZXRFcnJvciIsIl9fdHJ5T3JVbnN1YiIsIndyYXBwZWRDb21wbGV0ZSIsImZuIiwicGFyZW50IiwiRXJyb3IiLCJfdW5zdWJzY3JpYmUiLCJTaW1wbGVJbm5lclN1YnNjcmliZXIiLCJub3RpZnlOZXh0Iiwibm90aWZ5RXJyb3IiLCJub3RpZnlDb21wbGV0ZSIsIlNpbXBsZU91dGVyU3Vic2NyaWJlciIsImFwcGx5IiwiaW5uZXJWYWx1ZSIsImlubmVyU3Vic2NyaWJlIiwicmVzdWx0IiwiaW5uZXJTdWJzY3JpYmVyIiwic3Vic2NyaWJlIiwic3Vic2NyaXB0aW9uIiwiT2JzZXJ2YWJsZSIsIl9pc1NjYWxhciIsIl9zdWJzY3JpYmUiLCJsaWZ0Iiwib3BlcmF0b3IiLCJvYnNlcnZhYmxlIiwic291cmNlIiwic2luayIsIm5leHRPck9ic2VydmVyIiwicnhTdWJzY3JpYmVyIiwidG9TdWJzY3JpYmVyIiwiY29uZmlnIiwiX3RyeVN1YnNjcmliZSIsImNhblJlcG9ydEVycm9yIiwiY29uc29sZSIsIndhcm4iLCJmb3JFYWNoIiwicHJvbWlzZUN0b3IiLCJnZXRQcm9taXNlQ3RvciIsInJlc29sdmUiLCJyZWplY3QiLCJwaXBlIiwib3BlcmF0aW9ucyIsIl9pIiwidG9Qcm9taXNlIiwieCIsIlByb21pc2UiLCJTdWJzY3JpcHRpb24iLCJfc3Vic2NyaXB0aW9ucyIsIl9jdG9yVW5zdWJzY3JpYmUiLCJlbXB0eSIsImVycm9ycyIsInJlbW92ZSIsImluZGV4IiwidW5kZWZpbmVkIiwiZSIsImZsYXR0ZW5VbnN1YnNjcmlwdGlvbkVycm9ycyIsImxlbiIsInN1YiIsImNvbmNhdCIsInB1c2giLCJ0ZWFyZG93biIsIkVNUFRZIiwidG1wIiwiaW5kZXhPZiIsInN1YnNjcmlwdGlvbnMiLCJzdWJzY3JpcHRpb25JbmRleCIsInNwbGljZSIsInJlZHVjZSIsImVycnMiLCJTdWJqZWN0U3Vic2NyaWJlciIsIlN1YmplY3QiLCJvYnNlcnZlcnMiLCJoYXNFcnJvciIsInRocm93bkVycm9yIiwic3ViamVjdCIsIkFub255bW91c1N1YmplY3QiLCJjb3B5Iiwic2xpY2UiLCJhc09ic2VydmFibGUiLCJhc3luY1NjaGVkdWxlciIsImFzeW5jIiwiaXNBcnJheSIsIl9zbGljZWRUb0FycmF5IiwiYXJyIiwiX2FycmF5V2l0aEhvbGVzIiwiaXRlcmF0b3IiLCJfcyIsIl9lIiwiX2FyciIsIl9uIiwiX2QiLCJkb25lIiwiX2l0ZXJhYmxlVG9BcnJheUxpbWl0IiwibWluTGVuIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsImZyb20iLCJ0ZXN0IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiVHlwZUVycm9yIiwiX25vbkl0ZXJhYmxlUmVzdCIsImFycjIiLCJpdGVtIiwiX2l0ZW0iLCJjb250ZW50IiwiY3NzTWFwcGluZyIsImJ0b2EiLCJiYXNlNjQiLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwibWFwIiwic291cmNlUm9vdCIsImpvaW4iLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsIm1lZGlhUXVlcnkiLCJkZWR1cGUiLCJhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzIiwiaWQiLCJwcm9qZWN0IiwidGhpc0FyZyIsIk1hcE9wZXJhdG9yIiwiTWFwU3Vic2NyaWJlciIsImNvdW50IiwiaXNTY2hlZHVsZXIiLCJzY2hlZHVsZSIsInNjaGVkdWxlciIsImVtcHR5U2NoZWR1bGVkIiwiaW5wdXQiLCJJbm5lclN1YnNjcmliZXIiLCJvdXRlclZhbHVlIiwib3V0ZXJJbmRleCIsInN1YnNjcmliZVRvUmVzdWx0Iiwib3V0ZXJTdWJzY3JpYmVyIiwic3Vic2NyaWJlVG8iLCJfZW5hYmxlX3N1cGVyX2dyb3NzX21vZGVfdGhhdF93aWxsX2NhdXNlX2JhZF90aGluZ3MiLCJzdGFjayIsImlkZW50aXR5IiwiT3V0ZXJTdWJzY3JpYmVyIiwiaW5uZXJJbmRleCIsImlubmVyU3ViIiwiZmlsdGVyIiwicHJlZGljYXRlIiwiRmlsdGVyT3BlcmF0b3IiLCJGaWx0ZXJTdWJzY3JpYmVyIiwiTm90aWZpY2F0aW9uS2luZCIsIk5vdGlmaWNhdGlvbiIsImtpbmQiLCJoYXNWYWx1ZSIsIm9ic2VydmUiLCJvYnNlcnZlciIsImRvIiwiYWNjZXB0IiwidG9PYnNlcnZhYmxlIiwiY3JlYXRlTmV4dCIsInVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9uIiwiY3JlYXRlRXJyb3IiLCJjcmVhdGVDb21wbGV0ZSIsImNvbXBsZXRlTm90aWZpY2F0aW9uIiwiZ2V0U3ltYm9sSXRlcmF0b3IiLCJub29wIiwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IiLCJPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwiLCJtZXNzYWdlIiwiQmFzZVBhZ2UiLCJyZXF1aXJlIiwiQmFzZU5vdGlmaWNhdGlvbiIsIkFwcCIsIlB1YmxpY05vdGlmaWNhdGlvbkh1YiIsIlN0b3JhZ2VIdWIiLCJBdWRpb0h1YiIsIk5vdGlmaWNhdGlvbkh1YiIsIkFyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIiwiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsIiwiaXNGdW5jdGlvbiIsImV4dGVuZCIsImFycmF5IiwiZXNjYXBlRXhwcmVzc2lvbiIsInN0cmluZyIsInRvSFRNTCIsInBvc3NpYmxlIiwicmVwbGFjZSIsImJhZENoYXJzIiwiZXNjYXBlQ2hhciIsImlzRW1wdHkiLCJjcmVhdGVGcmFtZSIsImZyYW1lIiwiX3BhcmVudCIsImJsb2NrUGFyYW1zIiwicGFyYW1zIiwiaWRzIiwicGF0aCIsImFwcGVuZENvbnRleHRQYXRoIiwiY29udGV4dFBhdGgiLCJlc2NhcGUiLCJjaHIiLCJvYmoiLCJFbXB0eUVycm9yIiwiRW1wdHlFcnJvckltcGwiLCJtZXJnZU1hcCIsInJlc3VsdFNlbGVjdG9yIiwiY29uY3VycmVudCIsIk51bWJlciIsIlBPU0lUSVZFX0lORklOSVRZIiwiYSIsImlpIiwiTWVyZ2VNYXBPcGVyYXRvciIsIk1lcmdlTWFwU3Vic2NyaWJlciIsImhhc0NvbXBsZXRlZCIsImJ1ZmZlciIsImFjdGl2ZSIsIl90cnlOZXh0IiwiX2lubmVyU3ViIiwiaXNoIiwiaW5uZXJTdWJzY3JpcHRpb24iLCJzaGlmdCIsImZsYXRNYXAiLCJmcm9tQXJyYXkiLCJBc3luY1NjaGVkdWxlciIsIlNjaGVkdWxlckFjdGlvbiIsIm5vdyIsImRlbGVnYXRlIiwiYWN0aW9ucyIsInNjaGVkdWxlZCIsIndvcmsiLCJkZWxheSIsInN0YXRlIiwiZmx1c2giLCJhY3Rpb24iLCJleGVjdXRlIiwiQXN5bmNTdWJqZWN0IiwiaGFzTmV4dCIsIkFzeW5jQWN0aW9uIiwicGVuZGluZyIsInJlY3ljbGVBc3luY0lkIiwicmVxdWVzdEFzeW5jSWQiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJfZXhlY3V0ZSIsImVycm9yZWQiLCJlcnJvclZhbHVlIiwiQWN0aW9uIiwiaXNOdW1lcmljIiwidmFsIiwicGFyc2VGbG9hdCIsImZyZWVHbG9iYWwiLCJmcmVlU2VsZiIsInNlbGYiLCJyb290IiwiRnVuY3Rpb24iLCJvYnNlcnZhYmxlcyIsIm9icyIsImlzQXJyYXlMaWtlIiwic3Vic2NyaWJlVG9BcnJheSIsImlzUHJvbWlzZSIsInByb21pc2UiLCJ0aGVuIiwiaG9zdFJlcG9ydEVycm9yIiwiaXRlcmFibGUiLCJyZXR1cm4iLCJpc09iamVjdCIsInNldFRpbWVvdXQiLCJvZiIsImFyZ3MiLCJwb3AiLCJlcnJvclByb3BzIiwiRXhjZXB0aW9uIiwibm9kZSIsImxvYyIsImxpbmUiLCJlbmRMaW5lTnVtYmVyIiwiY29sdW1uIiwiZW5kQ29sdW1uIiwic3RhcnQiLCJlbmQiLCJpZHgiLCJjYXB0dXJlU3RhY2tUcmFjZSIsImxpbmVOdW1iZXIiLCJub3AiLCJmbnMiLCJwaXBlRnJvbUFycmF5IiwicHJldiIsIm5leHRIYW5kbGUiLCJSRVNPTFZFRCIsImFjdGl2ZUhhbmRsZXMiLCJmaW5kQW5kQ2xlYXJIYW5kbGUiLCJoYW5kbGUiLCJJbW1lZGlhdGUiLCJjYiIsIkFzYXBBY3Rpb24iLCJhc2FwU2NoZWR1bGVyIiwiQXNhcFNjaGVkdWxlciIsImFzYXAiLCJNYXRoIiwicmFuZG9tIiwiVW5zdWJzY3JpcHRpb25FcnJvciIsIlVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsIiwidXJsIiwib3B0aW9ucyIsImRlZmF1bHQiLCJoYXNoIiwibmVlZFF1b3RlcyIsImJhc2VJc05hdGl2ZSIsImdldFZhbHVlIiwicmVmQ291bnQiLCJSZWZDb3VudE9wZXJhdG9yIiwiY29ubmVjdGFibGUiLCJfcmVmQ291bnQiLCJyZWZDb3VudGVyIiwiUmVmQ291bnRTdWJzY3JpYmVyIiwiY29ubmVjdGlvbiIsImNvbm5lY3QiLCJzaGFyZWRDb25uZWN0aW9uIiwiX2Nvbm5lY3Rpb24iLCJSZXBsYXlTdWJqZWN0IiwiYnVmZmVyU2l6ZSIsIndpbmRvd1RpbWUiLCJfZXZlbnRzIiwiX2luZmluaXRlVGltZVdpbmRvdyIsIl9idWZmZXJTaXplIiwiX3dpbmRvd1RpbWUiLCJuZXh0SW5maW5pdGVUaW1lV2luZG93IiwibmV4dFRpbWVXaW5kb3ciLCJSZXBsYXlFdmVudCIsIl9nZXROb3ciLCJfdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMiLCJldmVudHNDb3VudCIsInNwbGljZUNvdW50IiwidGltZSIsIm1heCIsInRocm93RXJyb3IiLCJkaXNwYXRjaCIsIl9hIiwiTk9ORSIsImNvbWJpbmVMYXRlc3QiLCJDb21iaW5lTGF0ZXN0T3BlcmF0b3IiLCJDb21iaW5lTGF0ZXN0U3Vic2NyaWJlciIsInZhbHVlcyIsInRvUmVzcG9uZCIsInVudXNlZCIsIl9vdXRlclZhbHVlIiwib2xkVmFsIiwiX3RyeVJlc3VsdFNlbGVjdG9yIiwibWVyZ2VBbGwiLCJkZWZlciIsIm9ic2VydmFibGVGYWN0b3J5IiwiemlwIiwiWmlwT3BlcmF0b3IiLCJaaXBTdWJzY3JpYmVyIiwiaXRlcmF0b3JzIiwiU3RhdGljQXJyYXlJdGVyYXRvciIsIlN0YXRpY0l0ZXJhdG9yIiwiWmlwQnVmZmVySXRlcmF0b3IiLCJzdGlsbFVuc3Vic2NyaWJlZCIsIm5vdGlmeUluYWN0aXZlIiwiY2hlY2tJdGVyYXRvcnMiLCJzaG91bGRDb21wbGV0ZSIsIl90cnlyZXN1bHRTZWxlY3RvciIsIm5leHRSZXN1bHQiLCJCb29sZWFuIiwiaXNDb21wbGV0ZSIsImNsb3NlZF8xIiwic2NoZWR1bGVBcnJheSIsImdldFJhd1RhZyIsIm9iamVjdFRvU3RyaW5nIiwic3ltVG9TdHJpbmdUYWciLCJRdWV1ZUFjdGlvbiIsInF1ZXVlU2NoZWR1bGVyIiwiUXVldWVTY2hlZHVsZXIiLCJxdWV1ZSIsIlNjaGVkdWxlciIsIkRhdGUiLCJtZW1vIiwic3R5bGVzSW5Eb20iLCJpc09sZElFIiwid2luZG93IiwiZG9jdW1lbnQiLCJhbGwiLCJhdG9iIiwiZ2V0VGFyZ2V0IiwidGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsImdldEVsZW1lbnQiLCJzdHlsZVRhcmdldCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsInNpbmdsZXRvbiIsInNpbmdsZXRvbkNvdW50ZXIiLCJzdHlsZXNJbnNlcnRlZEF0VG9wIiwiZml4VXJscyIsImFkZFN0eWxlc1RvRG9tIiwic3R5bGVzIiwiZG9tU3R5bGUiLCJyZWZzIiwiaiIsInBhcnRzIiwiYWRkU3R5bGUiLCJsaXN0VG9TdHlsZXMiLCJuZXdTdHlsZXMiLCJiYXNlIiwicGFydCIsImNzcyIsIm1lZGlhIiwic291cmNlTWFwIiwiaW5zZXJ0U3R5bGVFbGVtZW50Iiwic3R5bGUiLCJpbnNlcnRJbnRvIiwibGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AiLCJpbnNlcnRBdCIsIm5leHRTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiYXBwZW5kQ2hpbGQiLCJmaXJzdENoaWxkIiwiYmVmb3JlIiwicmVtb3ZlU3R5bGVFbGVtZW50IiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwiY3JlYXRlU3R5bGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImF0dHJzIiwidHlwZSIsIm5vbmNlIiwiZ2V0Tm9uY2UiLCJhZGRBdHRycyIsImVsIiwia2V5cyIsInNldEF0dHJpYnV0ZSIsInVwZGF0ZSIsInRyYW5zZm9ybSIsInN0eWxlSW5kZXgiLCJhcHBseVRvU2luZ2xldG9uVGFnIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwicmV2b2tlT2JqZWN0VVJMIiwiQmxvYiIsImxpbmsiLCJyZWwiLCJjcmVhdGVMaW5rRWxlbWVudCIsInVwZGF0ZUxpbmsiLCJocmVmIiwiYXBwbHlUb1RhZyIsIm5ld09iaiIsIkRFQlVHIiwibmV3TGlzdCIsIm1heVJlbW92ZSIsInRleHRTdG9yZSIsInJlcGxhY2VUZXh0IiwicmVwbGFjZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNzc05vZGUiLCJjcmVhdGVUZXh0Tm9kZSIsImNoaWxkTm9kZXMiLCJhdXRvRml4VXJscyIsImNvbnZlcnRUb0Fic29sdXRlVXJscyIsImJsb2IiLCJvbGRTcmMiLCJldmVudEVtaXR0ZXIiLCJFdmVudEVtaXR0ZXIiLCJTSE9XX0VWRU5UIiwiZ2V0RXZlbnRFbWl0dGVyIiwiaGlkZSIsImVtaXQiLCJvbkhpZGUiLCJoYW5kbGVyIiwib24iLCJzaG93IiwicHJvcHMiLCJvblNob3ciLCJyZXNldCIsInJlbW92ZUFsbExpc3RlbmVycyIsImxpc3RDYWNoZUNsZWFyIiwibGlzdENhY2hlRGVsZXRlIiwibGlzdENhY2hlR2V0IiwibGlzdENhY2hlSGFzIiwibGlzdENhY2hlU2V0IiwiTGlzdENhY2hlIiwiZW50cmllcyIsImNsZWFyIiwiZW50cnkiLCJzZXQiLCJoYXMiLCJlcSIsIm5hdGl2ZUNyZWF0ZSIsImdldE5hdGl2ZSIsImlzS2V5YWJsZSIsIl9fZGF0YV9fIiwiYmFzZUdldFRhZyIsImlzT2JqZWN0TGlrZSIsImlzU3ltYm9sIiwiZ3JvdXBCeSIsImtleVNlbGVjdG9yIiwiZWxlbWVudFNlbGVjdG9yIiwiZHVyYXRpb25TZWxlY3RvciIsInN1YmplY3RTZWxlY3RvciIsIkdyb3VwQnlPcGVyYXRvciIsIkdyb3VwQnlTdWJzY3JpYmVyIiwiZ3JvdXBzIiwiYXR0ZW1wdGVkVG9VbnN1YnNjcmliZSIsIl9ncm91cCIsIk1hcCIsImVsZW1lbnQiLCJncm91cCIsImdyb3VwZWRPYnNlcnZhYmxlIiwiR3JvdXBlZE9ic2VydmFibGUiLCJkdXJhdGlvbiIsIkdyb3VwRHVyYXRpb25TdWJzY3JpYmVyIiwicmVtb3ZlR3JvdXAiLCJkZWxldGUiLCJncm91cFN1YmplY3QiLCJyZWZDb3VudFN1YnNjcmlwdGlvbiIsIklubmVyUmVmQ291bnRTdWJzY3JpcHRpb24iLCJDb25uZWN0YWJsZU9ic2VydmFibGUiLCJzdWJqZWN0RmFjdG9yeSIsIl9pc0NvbXBsZXRlIiwiZ2V0U3ViamVjdCIsIl9zdWJqZWN0IiwiQ29ubmVjdGFibGVTdWJzY3JpYmVyIiwiY29ubmVjdGFibGVPYnNlcnZhYmxlRGVzY3JpcHRvciIsImNvbm5lY3RhYmxlUHJvdG8iLCJ3cml0YWJsZSIsIkJlaGF2aW9yU3ViamVjdCIsIl92YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIm9ic2VydmVPbiIsIk9ic2VydmVPbk9wZXJhdG9yIiwiT2JzZXJ2ZU9uU3Vic2NyaWJlciIsImFyZyIsIm5vdGlmaWNhdGlvbiIsInNjaGVkdWxlTWVzc2FnZSIsIk9ic2VydmVPbk1lc3NhZ2UiLCJUaW1lb3V0RXJyb3IiLCJUaW1lb3V0RXJyb3JJbXBsIiwiY29uY2F0QWxsIiwibWVyZ2UiLCJsYXN0IiwicmFjZSIsIlJhY2VPcGVyYXRvciIsIlJhY2VTdWJzY3JpYmVyIiwiaGFzRmlyc3QiLCJ0aW1lciIsImR1ZVRpbWUiLCJwZXJpb2RPclNjaGVkdWxlciIsInBlcmlvZCIsImR1ZSIsImlzSW50ZXJvcE9ic2VydmFibGUiLCJzY2hlZHVsZU9ic2VydmFibGUiLCJzY2hlZHVsZVByb21pc2UiLCJpc0l0ZXJhYmxlIiwic2NoZWR1bGVJdGVyYWJsZSIsIlN1YmplY3RTdWJzY3JpcHRpb24iLCJzdWJzY3JpYmVySW5kZXgiLCJub3QiLCJwcmVkIiwibm90UHJlZCIsImciLCJtYXBDYWNoZUNsZWFyIiwibWFwQ2FjaGVEZWxldGUiLCJtYXBDYWNoZUdldCIsIm1hcENhY2hlSGFzIiwibWFwQ2FjaGVTZXQiLCJNYXBDYWNoZSIsImFycmF5TGlrZUtleXMiLCJiYXNlS2V5cyIsInJlSXNEZWVwUHJvcCIsInJlSXNQbGFpblByb3AiLCJ3YXRjaEZhY2UiLCJsb2NhdGlvbiIsIm5hdmlnYXRlIiwidGVtcGxhdGUiLCJwYXJzZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJIYW5kbGViYXJzRW52aXJvbm1lbnQiLCJfdXRpbHMiLCJfZXhjZXB0aW9uMiIsIl9oZWxwZXJzIiwiX2RlY29yYXRvcnMiLCJfbG9nZ2VyMiIsIl9pbnRlcm5hbFByb3RvQWNjZXNzIiwiVkVSU0lPTiIsIkNPTVBJTEVSX1JFVklTSU9OIiwiTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OIiwiUkVWSVNJT05fQ0hBTkdFUyIsIjEiLCIyIiwiMyIsIjQiLCI1IiwiNiIsIjciLCI4IiwiaGVscGVycyIsInBhcnRpYWxzIiwiZGVjb3JhdG9ycyIsInJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMiLCJyZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzIiwibG9nZ2VyIiwibG9nIiwicmVnaXN0ZXJIZWxwZXIiLCJ1bnJlZ2lzdGVySGVscGVyIiwicmVnaXN0ZXJQYXJ0aWFsIiwicGFydGlhbCIsInVucmVnaXN0ZXJQYXJ0aWFsIiwicmVnaXN0ZXJEZWNvcmF0b3IiLCJ1bnJlZ2lzdGVyRGVjb3JhdG9yIiwicmVzZXRMb2dnZWRQcm9wZXJ0eUFjY2Vzc2VzIiwicmVzZXRMb2dnZWRQcm9wZXJ0aWVzIiwiaW5zdGFuY2UiLCJfaGVscGVyc0Jsb2NrSGVscGVyTWlzc2luZzIiLCJfaGVscGVyc0VhY2gyIiwiX2hlbHBlcnNIZWxwZXJNaXNzaW5nMiIsIl9oZWxwZXJzSWYyIiwiX2hlbHBlcnNMb2cyIiwiX2hlbHBlcnNMb29rdXAyIiwiX2hlbHBlcnNXaXRoMiIsIm1vdmVIZWxwZXJUb0hvb2tzIiwiaGVscGVyTmFtZSIsImtlZXBIZWxwZXIiLCJob29rcyIsIm1ldGhvZE1hcCIsImxldmVsIiwibG9va3VwTGV2ZWwiLCJsZXZlbE1hcCIsInRvTG93ZXJDYXNlIiwicGFyc2VJbnQiLCJtZXRob2QiLCJfbGVuIiwiX2tleSIsImNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbCIsInJ1bnRpbWVPcHRpb25zIiwiZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCIsImRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdCIsInByb3BlcnRpZXMiLCJ3aGl0ZWxpc3QiLCJfY3JlYXRlTmV3TG9va3VwT2JqZWN0IiwiY3JlYXRlTmV3TG9va3VwT2JqZWN0IiwiYWxsb3dlZFByb3RvUHJvcGVydGllcyIsImRlZmF1bHRWYWx1ZSIsImFsbG93UHJvdG9Qcm9wZXJ0aWVzQnlEZWZhdWx0IiwibWV0aG9kcyIsImFsbG93ZWRQcm90b01ldGhvZHMiLCJhbGxvd1Byb3RvTWV0aG9kc0J5RGVmYXVsdCIsInJlc3VsdElzQWxsb3dlZCIsInByb3RvQWNjZXNzQ29udHJvbCIsInByb3BlcnR5TmFtZSIsImNoZWNrV2hpdGVMaXN0IiwibG9nZ2VkUHJvcGVydGllcyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSIsImxvZ1VuZXhwZWNlZFByb3BlcnR5QWNjZXNzT25jZSIsImZpbmQiLCJjcmVhdGVGaW5kIiwiYmFzZU1hdGNoZXMiLCJiYXNlTWF0Y2hlc1Byb3BlcnR5Iiwic3RhY2tDbGVhciIsInN0YWNrRGVsZXRlIiwic3RhY2tHZXQiLCJzdGFja0hhcyIsInN0YWNrU2V0IiwiU3RhY2siLCJzaXplIiwib3RoZXIiLCJ0YWciLCJnbG9iYWwiLCJmdW5jVG9TdHJpbmciLCJmdW5jIiwiYmFzZUlzRXF1YWxEZWVwIiwiYmFzZUlzRXF1YWwiLCJiaXRtYXNrIiwiY3VzdG9taXplciIsIlNldENhY2hlIiwiYXJyYXlTb21lIiwiY2FjaGVIYXMiLCJlcXVhbEZ1bmMiLCJpc1BhcnRpYWwiLCJhcnJMZW5ndGgiLCJvdGhMZW5ndGgiLCJhcnJTdGFja2VkIiwib3RoU3RhY2tlZCIsInNlZW4iLCJhcnJWYWx1ZSIsIm90aFZhbHVlIiwiY29tcGFyZWQiLCJvdGhJbmRleCIsImJhc2VJc0FyZ3VtZW50cyIsIm9iamVjdFByb3RvIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJpc0FyZ3VtZW50cyIsInN0dWJGYWxzZSIsImZyZWVFeHBvcnRzIiwibm9kZVR5cGUiLCJmcmVlTW9kdWxlIiwiQnVmZmVyIiwiaXNCdWZmZXIiLCJ3ZWJwYWNrUG9seWZpbGwiLCJkZXByZWNhdGUiLCJwYXRocyIsImNoaWxkcmVuIiwicmVJc1VpbnQiLCJiYXNlSXNUeXBlZEFycmF5IiwiYmFzZVVuYXJ5Iiwibm9kZVV0aWwiLCJub2RlSXNUeXBlZEFycmF5IiwiaXNUeXBlZEFycmF5IiwiaXNMZW5ndGgiLCJzcmNWYWx1ZSIsImNhc3RQYXRoIiwidG9LZXkiLCJpc0tleSIsInN0cmluZ1RvUGF0aCIsImF1ZGl0IiwiQXVkaXRPcGVyYXRvciIsIkF1ZGl0U3Vic2NyaWJlciIsInRocm90dGxlZCIsImNsZWFyVGhyb3R0bGUiLCJhdWRpdFRpbWUiLCJjbG9zaW5nTm90aWZpZXIiLCJCdWZmZXJPcGVyYXRvciIsIkJ1ZmZlclN1YnNjcmliZXIiLCJidWZmZXJDb3VudCIsInN0YXJ0QnVmZmVyRXZlcnkiLCJCdWZmZXJDb3VudE9wZXJhdG9yIiwic3Vic2NyaWJlckNsYXNzIiwiQnVmZmVyQ291bnRTdWJzY3JpYmVyIiwiQnVmZmVyU2tpcENvdW50U3Vic2NyaWJlciIsImJ1ZmZlcnMiLCJidWZmZXJUaW1lIiwiYnVmZmVyVGltZVNwYW4iLCJidWZmZXJDcmVhdGlvbkludGVydmFsIiwibWF4QnVmZmVyU2l6ZSIsIkJ1ZmZlclRpbWVPcGVyYXRvciIsIkNvbnRleHQiLCJCdWZmZXJUaW1lU3Vic2NyaWJlciIsImNvbnRleHRzIiwib3BlbkNvbnRleHQiLCJ0aW1lc3Bhbk9ubHkiLCJ0aW1lU3Bhbk9ubHlTdGF0ZSIsImNsb3NlQWN0aW9uIiwiZGlzcGF0Y2hCdWZmZXJUaW1lU3Bhbk9ubHkiLCJjbG9zZVN0YXRlIiwiY3JlYXRpb25TdGF0ZSIsImRpc3BhdGNoQnVmZmVyQ2xvc2UiLCJkaXNwYXRjaEJ1ZmZlckNyZWF0aW9uIiwiZmlsbGVkQnVmZmVyQ29udGV4dCIsImNvbnRleHRfMSIsIm9uQnVmZmVyRnVsbCIsImNvbnRleHRfMiIsImNsb3NlQ29udGV4dCIsInByZXZDb250ZXh0IiwiYnVmZmVyVG9nZ2xlIiwib3BlbmluZ3MiLCJjbG9zaW5nU2VsZWN0b3IiLCJCdWZmZXJUb2dnbGVPcGVyYXRvciIsIkJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIiLCJjbG9zZUJ1ZmZlciIsIm9wZW5CdWZmZXIiLCJ0cnlTdWJzY3JpYmUiLCJidWZmZXJXaGVuIiwiQnVmZmVyV2hlbk9wZXJhdG9yIiwiQnVmZmVyV2hlblN1YnNjcmliZXIiLCJzdWJzY3JpYmluZyIsImNsb3NpbmdTdWJzY3JpcHRpb24iLCJjYXRjaEVycm9yIiwic2VsZWN0b3IiLCJDYXRjaE9wZXJhdG9yIiwiY2F1Z2h0IiwiQ2F0Y2hTdWJzY3JpYmVyIiwiZXJyMiIsImNvbWJpbmVBbGwiLCJjb25jYXRNYXAiLCJjb25jYXRNYXBUbyIsImlubmVyT2JzZXJ2YWJsZSIsIkNvdW50T3BlcmF0b3IiLCJDb3VudFN1YnNjcmliZXIiLCJfdHJ5UHJlZGljYXRlIiwiZGVib3VuY2UiLCJEZWJvdW5jZU9wZXJhdG9yIiwiRGVib3VuY2VTdWJzY3JpYmVyIiwiZW1pdFZhbHVlIiwiZHVyYXRpb25TdWJzY3JpcHRpb24iLCJkZWJvdW5jZVRpbWUiLCJEZWJvdW5jZVRpbWVPcGVyYXRvciIsIkRlYm91bmNlVGltZVN1YnNjcmliZXIiLCJkZWJvdW5jZWRTdWJzY3JpcHRpb24iLCJsYXN0VmFsdWUiLCJjbGVhckRlYm91bmNlIiwiZGlzcGF0Y2hOZXh0IiwiZGVib3VuY2VkTmV4dCIsImRlZmF1bHRJZkVtcHR5IiwiRGVmYXVsdElmRW1wdHlPcGVyYXRvciIsIkRlZmF1bHRJZkVtcHR5U3Vic2NyaWJlciIsImlzRGF0ZSIsImlzTmFOIiwiZGVsYXlGb3IiLCJhYnMiLCJEZWxheU9wZXJhdG9yIiwiRGVsYXlTdWJzY3JpYmVyIiwiZGVsYXlfMSIsIl9zY2hlZHVsZSIsInNjaGVkdWxlTm90aWZpY2F0aW9uIiwiRGVsYXlNZXNzYWdlIiwiZGVsYXlXaGVuIiwiZGVsYXlEdXJhdGlvblNlbGVjdG9yIiwic3Vic2NyaXB0aW9uRGVsYXkiLCJEZWxheVdoZW5PcGVyYXRvciIsIkRlbGF5V2hlblN1YnNjcmliZXIiLCJjb21wbGV0ZWQiLCJkZWxheU5vdGlmaWVyU3Vic2NyaXB0aW9ucyIsIl9pbm5lclZhbHVlIiwiX291dGVySW5kZXgiLCJfaW5uZXJJbmRleCIsInJlbW92ZVN1YnNjcmlwdGlvbiIsInRyeUNvbXBsZXRlIiwiZGVsYXlOb3RpZmllciIsInRyeURlbGF5Iiwic3Vic2NyaXB0aW9uSWR4Iiwibm90aWZpZXJTdWJzY3JpcHRpb24iLCJTdWJzY3JpcHRpb25EZWxheU9ic2VydmFibGUiLCJTdWJzY3JpcHRpb25EZWxheVN1YnNjcmliZXIiLCJzb3VyY2VTdWJzY3JpYmVkIiwic3Vic2NyaWJlVG9Tb3VyY2UiLCJkZW1hdGVyaWFsaXplIiwiRGVNYXRlcmlhbGl6ZU9wZXJhdG9yIiwiRGVNYXRlcmlhbGl6ZVN1YnNjcmliZXIiLCJkaXN0aW5jdCIsImZsdXNoZXMiLCJEaXN0aW5jdE9wZXJhdG9yIiwiRGlzdGluY3RTdWJzY3JpYmVyIiwiU2V0IiwiX3VzZUtleVNlbGVjdG9yIiwiX2ZpbmFsaXplTmV4dCIsImRpc3RpbmN0VW50aWxDaGFuZ2VkIiwiY29tcGFyZSIsIkRpc3RpbmN0VW50aWxDaGFuZ2VkT3BlcmF0b3IiLCJEaXN0aW5jdFVudGlsQ2hhbmdlZFN1YnNjcmliZXIiLCJoYXNLZXkiLCJ5IiwiZGlzdGluY3RVbnRpbEtleUNoYW5nZWQiLCJ0aHJvd0lmRW1wdHkiLCJlcnJvckZhY3RvcnkiLCJkZWZhdWx0RXJyb3JGYWN0b3J5IiwiVGhyb3dJZkVtcHR5T3BlcmF0b3IiLCJUaHJvd0lmRW1wdHlTdWJzY3JpYmVyIiwidGFrZSIsIlRha2VPcGVyYXRvciIsInRvdGFsIiwiVGFrZVN1YnNjcmliZXIiLCJlbGVtZW50QXQiLCJoYXNEZWZhdWx0VmFsdWUiLCJ2IiwiZW5kV2l0aCIsImV2ZXJ5IiwiRXZlcnlPcGVyYXRvciIsIkV2ZXJ5U3Vic2NyaWJlciIsImV2ZXJ5VmFsdWVNYXRjaCIsImV4aGF1c3QiLCJTd2l0Y2hGaXJzdE9wZXJhdG9yIiwiU3dpdGNoRmlyc3RTdWJzY3JpYmVyIiwiaGFzU3Vic2NyaXB0aW9uIiwiZXhoYXVzdE1hcCIsIkV4aGF1c3RNYXBPcGVyYXRvciIsIkV4aGF1c3RNYXBTdWJzY3JpYmVyIiwidHJ5TmV4dCIsImV4cGFuZCIsIkV4cGFuZE9wZXJhdG9yIiwiRXhwYW5kU3Vic2NyaWJlciIsInN1YnNjcmliZVRvUHJvamVjdGlvbiIsImZpbmFsaXplIiwiY2FsbGJhY2siLCJGaW5hbGx5T3BlcmF0b3IiLCJGaW5hbGx5U3Vic2NyaWJlciIsIkZpbmRWYWx1ZU9wZXJhdG9yIiwieWllbGRJbmRleCIsIkZpbmRWYWx1ZVN1YnNjcmliZXIiLCJmaW5kSW5kZXgiLCJmaXJzdCIsImlnbm9yZUVsZW1lbnRzIiwiSWdub3JlRWxlbWVudHNPcGVyYXRvciIsIklnbm9yZUVsZW1lbnRzU3Vic2NyaWJlciIsIklzRW1wdHlPcGVyYXRvciIsIklzRW1wdHlTdWJzY3JpYmVyIiwidGFrZUxhc3QiLCJUYWtlTGFzdE9wZXJhdG9yIiwiVGFrZUxhc3RTdWJzY3JpYmVyIiwicmluZyIsIm1hcFRvIiwiTWFwVG9PcGVyYXRvciIsIk1hcFRvU3Vic2NyaWJlciIsIm1hdGVyaWFsaXplIiwiTWF0ZXJpYWxpemVPcGVyYXRvciIsIk1hdGVyaWFsaXplU3Vic2NyaWJlciIsInNjYW4iLCJhY2N1bXVsYXRvciIsInNlZWQiLCJoYXNTZWVkIiwiU2Nhbk9wZXJhdG9yIiwiU2NhblN1YnNjcmliZXIiLCJfc2VlZCIsImFjYyIsImNvbXBhcmVyIiwibWVyZ2VNYXBUbyIsIm1lcmdlU2NhbiIsIk1lcmdlU2Nhbk9wZXJhdG9yIiwiTWVyZ2VTY2FuU3Vic2NyaWJlciIsIm11bHRpY2FzdCIsInN1YmplY3RPclN1YmplY3RGYWN0b3J5IiwiTXVsdGljYXN0T3BlcmF0b3IiLCJvbkVycm9yUmVzdW1lTmV4dCIsIm5leHRTb3VyY2VzIiwiT25FcnJvclJlc3VtZU5leHRPcGVyYXRvciIsIk9uRXJyb3JSZXN1bWVOZXh0U3Vic2NyaWJlciIsInN1YnNjcmliZVRvTmV4dFNvdXJjZSIsInBhaXJ3aXNlIiwiUGFpcndpc2VPcGVyYXRvciIsIlBhaXJ3aXNlU3Vic2NyaWJlciIsImhhc1ByZXYiLCJwYWlyIiwicGFydGl0aW9uIiwicGx1Y2siLCJwbHVja2VyIiwiY3VycmVudFByb3AiLCJwdWJsaXNoIiwicHVibGlzaEJlaGF2aW9yIiwicHVibGlzaExhc3QiLCJwdWJsaXNoUmVwbGF5Iiwic2VsZWN0b3JPclNjaGVkdWxlciIsInJlcGVhdCIsIlJlcGVhdE9wZXJhdG9yIiwiUmVwZWF0U3Vic2NyaWJlciIsInJlcGVhdFdoZW4iLCJub3RpZmllciIsIlJlcGVhdFdoZW5PcGVyYXRvciIsIlJlcGVhdFdoZW5TdWJzY3JpYmVyIiwic291cmNlSXNCZWluZ1N1YnNjcmliZWRUbyIsInJldHJpZXMiLCJzdWJzY3JpYmVUb1JldHJpZXMiLCJyZXRyaWVzU3Vic2NyaXB0aW9uIiwibm90aWZpY2F0aW9ucyIsInJldHJ5IiwiUmV0cnlPcGVyYXRvciIsIlJldHJ5U3Vic2NyaWJlciIsInJldHJ5V2hlbiIsIlJldHJ5V2hlbk9wZXJhdG9yIiwiUmV0cnlXaGVuU3Vic2NyaWJlciIsInNhbXBsZSIsIlNhbXBsZU9wZXJhdG9yIiwic2FtcGxlU3Vic2NyaWJlciIsIlNhbXBsZVN1YnNjcmliZXIiLCJzYW1wbGVUaW1lIiwiU2FtcGxlVGltZU9wZXJhdG9yIiwiU2FtcGxlVGltZVN1YnNjcmliZXIiLCJkaXNwYXRjaE5vdGlmaWNhdGlvbiIsInNlcXVlbmNlRXF1YWwiLCJjb21wYXJlVG8iLCJjb21wYXJhdG9yIiwiU2VxdWVuY2VFcXVhbE9wZXJhdG9yIiwiU2VxdWVuY2VFcXVhbFN1YnNjcmliZXIiLCJfYiIsIl9vbmVDb21wbGV0ZSIsImNoZWNrVmFsdWVzIiwiYXJlRXF1YWwiLCJuZXh0QiIsImNvbXBsZXRlQiIsIlNlcXVlbmNlRXF1YWxDb21wYXJlVG9TdWJzY3JpYmVyIiwic2hhcmVTdWJqZWN0RmFjdG9yeSIsInNoYXJlIiwic2hhcmVSZXBsYXkiLCJjb25maWdPckJ1ZmZlclNpemUiLCJfYyIsInVzZVJlZkNvdW50Iiwic2hhcmVSZXBsYXlPcGVyYXRvciIsInNpbmdsZSIsIlNpbmdsZU9wZXJhdG9yIiwiU2luZ2xlU3Vic2NyaWJlciIsInNlZW5WYWx1ZSIsImFwcGx5U2luZ2xlVmFsdWUiLCJzaW5nbGVWYWx1ZSIsInNraXAiLCJTa2lwT3BlcmF0b3IiLCJTa2lwU3Vic2NyaWJlciIsInNraXBMYXN0IiwiU2tpcExhc3RPcGVyYXRvciIsIl9za2lwQ291bnQiLCJTa2lwTGFzdFN1YnNjcmliZXIiLCJfY291bnQiLCJfcmluZyIsInNraXBDb3VudCIsImN1cnJlbnRJbmRleCIsIm9sZFZhbHVlIiwic2tpcFVudGlsIiwiU2tpcFVudGlsT3BlcmF0b3IiLCJTa2lwVW50aWxTdWJzY3JpYmVyIiwic2tpcFdoaWxlIiwiU2tpcFdoaWxlT3BlcmF0b3IiLCJTa2lwV2hpbGVTdWJzY3JpYmVyIiwic2tpcHBpbmciLCJ0cnlDYWxsUHJlZGljYXRlIiwic3RhcnRXaXRoIiwiU3Vic2NyaWJlT25PYnNlcnZhYmxlIiwiZGVsYXlUaW1lIiwic3Vic2NyaWJlT24iLCJTdWJzY3JpYmVPbk9wZXJhdG9yIiwic3dpdGNoTWFwIiwiU3dpdGNoTWFwT3BlcmF0b3IiLCJTd2l0Y2hNYXBTdWJzY3JpYmVyIiwic3dpdGNoQWxsIiwic3dpdGNoTWFwVG8iLCJ0YWtlVW50aWwiLCJUYWtlVW50aWxPcGVyYXRvciIsInRha2VVbnRpbFN1YnNjcmliZXIiLCJUYWtlVW50aWxTdWJzY3JpYmVyIiwidGFrZVdoaWxlIiwiaW5jbHVzaXZlIiwiVGFrZVdoaWxlT3BlcmF0b3IiLCJUYWtlV2hpbGVTdWJzY3JpYmVyIiwibmV4dE9yQ29tcGxldGUiLCJwcmVkaWNhdGVSZXN1bHQiLCJ0YXAiLCJEb09wZXJhdG9yIiwiVGFwU3Vic2NyaWJlciIsIl90YXBOZXh0IiwiX3RhcEVycm9yIiwiX3RhcENvbXBsZXRlIiwiZGVmYXVsdFRocm90dGxlQ29uZmlnIiwibGVhZGluZyIsInRyYWlsaW5nIiwidGhyb3R0bGUiLCJUaHJvdHRsZU9wZXJhdG9yIiwiVGhyb3R0bGVTdWJzY3JpYmVyIiwiX2xlYWRpbmciLCJfdHJhaWxpbmciLCJfaGFzVmFsdWUiLCJfc2VuZFZhbHVlIiwiX3Rocm90dGxlZCIsInNlbmQiLCJ0cnlEdXJhdGlvblNlbGVjdG9yIiwidGhyb3R0bGluZ0RvbmUiLCJ0aHJvdHRsZVRpbWUiLCJUaHJvdHRsZVRpbWVPcGVyYXRvciIsIlRocm90dGxlVGltZVN1YnNjcmliZXIiLCJfaGFzVHJhaWxpbmdWYWx1ZSIsIl90cmFpbGluZ1ZhbHVlIiwidGltZUludGVydmFsIiwiY3VycmVudCIsIlRpbWVJbnRlcnZhbCIsImludGVydmFsIiwidGltZW91dFdpdGgiLCJ3aXRoT2JzZXJ2YWJsZSIsImFic29sdXRlVGltZW91dCIsIndhaXRGb3IiLCJUaW1lb3V0V2l0aE9wZXJhdG9yIiwiVGltZW91dFdpdGhTdWJzY3JpYmVyIiwic2NoZWR1bGVUaW1lb3V0IiwiZGlzcGF0Y2hUaW1lb3V0IiwidGltZW91dCIsInRpbWVzdGFtcCIsIlRpbWVzdGFtcCIsInRvQXJyYXlSZWR1Y2VyIiwidG9BcnJheSIsIndpbmRvd0JvdW5kYXJpZXMiLCJXaW5kb3dPcGVyYXRvciIsIndpbmRvd1N1YnNjcmliZXIiLCJzb3VyY2VTdWJzY3JpcHRpb24iLCJXaW5kb3dTdWJzY3JpYmVyIiwib3BlbldpbmRvdyIsInByZXZXaW5kb3ciLCJuZXdXaW5kb3ciLCJ3aW5kb3dDb3VudCIsIndpbmRvd1NpemUiLCJzdGFydFdpbmRvd0V2ZXJ5IiwiV2luZG93Q291bnRPcGVyYXRvciIsIldpbmRvd0NvdW50U3Vic2NyaWJlciIsIndpbmRvd3MiLCJ3aW5kb3dfMSIsIndpbmRvd1RpbWVTcGFuIiwid2luZG93Q3JlYXRpb25JbnRlcnZhbCIsIm1heFdpbmRvd1NpemUiLCJXaW5kb3dUaW1lT3BlcmF0b3IiLCJDb3VudGVkU3ViamVjdCIsIl9udW1iZXJPZk5leHRlZFZhbHVlcyIsIldpbmRvd1RpbWVTdWJzY3JpYmVyIiwiZGlzcGF0Y2hXaW5kb3dDbG9zZSIsImRpc3BhdGNoV2luZG93Q3JlYXRpb24iLCJkaXNwYXRjaFdpbmRvd1RpbWVTcGFuT25seSIsIm51bWJlck9mTmV4dGVkVmFsdWVzIiwiY2xvc2VXaW5kb3ciLCJ3aW5kb3dfMiIsInRpbWVTcGFuU3RhdGUiLCJ3aW5kb3dUb2dnbGUiLCJXaW5kb3dUb2dnbGVPcGVyYXRvciIsIldpbmRvd1RvZ2dsZVN1YnNjcmliZXIiLCJvcGVuU3Vic2NyaXB0aW9uIiwiY29udGV4dF8zIiwiY29udGV4dF80IiwiaW5uZXIiLCJ3aW5kb3dXaGVuIiwidW5zdWJzY3JpYmVDbG9zaW5nTm90aWZpY2F0aW9uIiwiY2xvc2luZ05vdGlmaWNhdGlvbiIsIndpdGhMYXRlc3RGcm9tIiwiV2l0aExhdGVzdEZyb21PcGVyYXRvciIsIldpdGhMYXRlc3RGcm9tU3Vic2NyaWJlciIsImZvdW5kIiwiX3RyeVByb2plY3QiLCJ6aXBBbGwiLCJBbmltYXRpb25GcmFtZUFjdGlvbiIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIiLCJBbmltYXRpb25GcmFtZVNjaGVkdWxlciIsImFuaW1hdGlvbkZyYW1lIiwiVmlydHVhbFRpbWVTY2hlZHVsZXIiLCJtYXhGcmFtZXMiLCJmcmFtZVRpbWVGYWN0b3IiLCJWaXJ0dWFsQWN0aW9uIiwic29ydCIsInNvcnRBY3Rpb25zIiwiaXNPYnNlcnZhYmxlIiwiYmluZENhbGxiYWNrIiwiY2FsbGJhY2tGdW5jIiwiaW5uZXJBcmdzIiwiYmluZE5vZGVDYWxsYmFjayIsImZvcmtKb2luIiwiZmlyc3RfMSIsImZvcmtKb2luSW50ZXJuYWwiLCJnZXRQcm90b3R5cGVPZiIsInJlc3VsdFNlbGVjdG9yXzEiLCJlbWl0dGVkIiwiX2xvb3BfMSIsImZyb21FdmVudCIsImV2ZW50TmFtZSIsInNldHVwU3Vic2NyaXB0aW9uIiwic291cmNlT2JqIiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJpc0V2ZW50VGFyZ2V0Iiwic291cmNlXzEiLCJvZmYiLCJpc0pRdWVyeVN0eWxlRXZlbnRFbWl0dGVyIiwic291cmNlXzIiLCJhZGRMaXN0ZW5lciIsInJlbW92ZUxpc3RlbmVyIiwiaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIiLCJzb3VyY2VfMyIsImZyb21FdmVudFBhdHRlcm4iLCJhZGRIYW5kbGVyIiwicmVtb3ZlSGFuZGxlciIsInJldFZhbHVlIiwiZ2VuZXJhdGUiLCJpbml0aWFsU3RhdGVPck9wdGlvbnMiLCJjb25kaXRpb24iLCJpdGVyYXRlIiwicmVzdWx0U2VsZWN0b3JPck9ic2VydmFibGUiLCJpbml0aWFsU3RhdGUiLCJjb25kaXRpb25SZXN1bHQiLCJuZWVkSXRlcmF0ZSIsImlpZiIsInRydWVSZXN1bHQiLCJmYWxzZVJlc3VsdCIsImNvdW50ZXIiLCJORVZFUiIsIm5ldmVyIiwicmVtYWluZGVyIiwic3ViTmV4dCIsInBhaXJzIiwicmFuZ2UiLCJ1c2luZyIsInJlc291cmNlRmFjdG9yeSIsInJlc291cmNlIiwiX19fQ1NTX0xPQURFUl9FWFBPUlRfX18iLCJkZWZpbmVDdXN0b21FbGVtZW50cyIsIm5hdmlnYXRlVG9Mb2NhdGlvbiIsImxvY2FscyIsImJhc2VVcmwiLCJwcm90b2NvbCIsImhvc3QiLCJjdXJyZW50RGlyIiwicGF0aG5hbWUiLCJmdWxsTWF0Y2giLCJvcmlnVXJsIiwibmV3VXJsIiwidW5xdW90ZWRPcmlnVXJsIiwidHJpbSIsIiQxIiwic2V0SlNPTiIsInNldERhdGEiLCJSZWZsZWN0T3duS2V5cyIsIlIiLCJSZWZsZWN0IiwiUmVmbGVjdEFwcGx5IiwicmVjZWl2ZXIiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsIk51bWJlcklzTmFOIiwiaW5pdCIsIm9uY2UiLCJlbWl0dGVyIiwiZXZlbnRMaXN0ZW5lciIsImVycm9yTGlzdGVuZXIiLCJfZXZlbnRzQ291bnQiLCJfbWF4TGlzdGVuZXJzIiwiZGVmYXVsdE1heExpc3RlbmVycyIsImNoZWNrTGlzdGVuZXIiLCJsaXN0ZW5lciIsIl9nZXRNYXhMaXN0ZW5lcnMiLCJ0aGF0IiwiX2FkZExpc3RlbmVyIiwicHJlcGVuZCIsImV2ZW50cyIsImV4aXN0aW5nIiwid2FybmluZyIsIm5ld0xpc3RlbmVyIiwidW5zaGlmdCIsIndhcm5lZCIsInciLCJTdHJpbmciLCJvbmNlV3JhcHBlciIsImZpcmVkIiwid3JhcEZuIiwiX29uY2VXcmFwIiwid3JhcHBlZCIsIl9saXN0ZW5lcnMiLCJ1bndyYXAiLCJldmxpc3RlbmVyIiwicmV0IiwidW53cmFwTGlzdGVuZXJzIiwiYXJyYXlDbG9uZSIsImxpc3RlbmVyQ291bnQiLCJSYW5nZUVycm9yIiwic2V0TWF4TGlzdGVuZXJzIiwiZ2V0TWF4TGlzdGVuZXJzIiwiZG9FcnJvciIsImVyIiwibGlzdGVuZXJzIiwicHJlcGVuZExpc3RlbmVyIiwicHJlcGVuZE9uY2VMaXN0ZW5lciIsInBvc2l0aW9uIiwib3JpZ2luYWxMaXN0ZW5lciIsInNwbGljZU9uZSIsInJhd0xpc3RlbmVycyIsImV2ZW50TmFtZXMiLCJIYW5kbGViYXJzIiwiY29udGFpbmVyIiwiZGVwdGgwIiwiaGVscGVyIiwibG9va3VwUHJvcGVydHkiLCJoZWxwZXJNaXNzaW5nIiwibnVsbENvbnRleHQiLCJfaGFuZGxlYmFyc1NhZmVTdHJpbmcyIiwiX2hhbmRsZWJhcnNFeGNlcHRpb24yIiwiVXRpbHMiLCJydW50aW1lIiwiX2hhbmRsZWJhcnNOb0NvbmZsaWN0MiIsImhiIiwiU2FmZVN0cmluZyIsIlZNIiwic3BlYyIsImluc3QiLCJpbnZlcnNlIiwiZWFjaCIsIl9leGNlcHRpb24iLCJwcmlvcktleSIsImV4ZWNJdGVyYXRpb24iLCJmaWVsZCIsIm5ld0NvbnRleHQiLCJpdCIsImNvbmRpdGlvbmFsIiwiaW5jbHVkZVplcm8iLCJfZGVjb3JhdG9yc0lubGluZTIiLCJfZGVjb3JhdG9yc0lubGluZSIsIm9yaWdpbmFsIiwiY2hlY2tSZXZpc2lvbiIsImNvbXBpbGVySW5mbyIsImNvbXBpbGVyUmV2aXNpb24iLCJjdXJyZW50UmV2aXNpb24iLCJfYmFzZSIsInJ1bnRpbWVWZXJzaW9ucyIsImNvbXBpbGVyVmVyc2lvbnMiLCJ0ZW1wbGF0ZVNwZWMiLCJlbnYiLCJtYWluIiwiZGVjb3JhdG9yIiwibWFpbl9kIiwiY29tcGlsZXIiLCJ0ZW1wbGF0ZVdhc1ByZWNvbXBpbGVkV2l0aENvbXBpbGVyVjciLCJzdHJpY3QiLCJsb29rdXAiLCJkZXB0aHMiLCJsYW1iZGEiLCJpbnZva2VQYXJ0aWFsIiwicmVzb2x2ZVBhcnRpYWwiLCJleHRlbmRlZE9wdGlvbnMiLCJjb21waWxlIiwiY29tcGlsZXJPcHRpb25zIiwiaW5kZW50IiwibGluZXMiLCJzcGxpdCIsInByb2dyYW1zIiwicHJvZ3JhbSIsImRlY2xhcmVkQmxvY2tQYXJhbXMiLCJwcm9ncmFtV3JhcHBlciIsIndyYXBQcm9ncmFtIiwiZGVwdGgiLCJtZXJnZUlmTmVlZGVkIiwicGFyYW0iLCJjb21tb24iLCJzZWFsIiwiX3NldHVwIiwidXNlRGF0YSIsImluaXREYXRhIiwidXNlQmxvY2tQYXJhbXMiLCJ1c2VEZXB0aHMiLCJleGVjdXRlRGVjb3JhdG9ycyIsImlzVG9wIiwibWVyZ2VkSGVscGVycyIsIl9pbnRlcm5hbFdyYXBIZWxwZXIiLCJ3cmFwSGVscGVyIiwicGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uIiwid3JhcEhlbHBlcnNUb1Bhc3NMb29rdXBQcm9wZXJ0eSIsInVzZVBhcnRpYWwiLCJ1c2VEZWNvcmF0b3JzIiwia2VlcEhlbHBlckluSGVscGVycyIsImFsbG93Q2FsbHNUb0hlbHBlck1pc3NpbmciLCJfY2hpbGQiLCJjdXJyZW50UGFydGlhbEJsb2NrIiwicGFydGlhbEJsb2NrIiwicHJvZyIsImN1cnJlbnREZXB0aHMiLCJ0cmFuc2Zvcm1PcHRpb25zRm4iLCIkSGFuZGxlYmFycyIsIm5vQ29uZmxpY3QiLCJOb3RpZmljYXRpb25Gb3JtIiwiZ2V0Unhqc1RhcmdldCIsImdldFJ4anNUYXJnZXRGcm9tS2V5IiwiZ2V0VGltZWRFdmVudCIsInJvdXRlcyIsInJlbmRlciIsInJlbmRlclBhdGgiLCJoYW5kbGVFdmVudCIsIm5vdGlmaWNhdGlvbkZvcm0iLCJnZXRFbGVtZW50QnlJZCIsImxlZnRCdXR0b24iLCJyaWdodEJ1dHRvbiIsInRvcEJ1dHRvbiIsImJvdHRvbUJ1dHRvbiIsIm5vdGlmaWNhdGlvbkNvbnRhaW5lciIsIndob2xlUGFnZSIsImJvZHkiLCJ3YXRjaENvbnRhaW5lciIsImNsaWNrcyIsImNsaWNrVGltZW91dCIsIm9uaGFzaGNoYW5nZSIsImhhc2hDaGFuZ2VFdmVudCIsIm5ld1VSTCIsIm9sZFVSTCIsInByZXZQcm9wcyIsInNldHVwUnhqc0xpc3RlbmVycyIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIiwiTXlNYXAiLCJ3YXRjaE1vdXNlRG93biQiLCJ3YXRjaE1vdXNlVXAkIiwid2F0Y2hLZXlEb3duJCIsIndhdGNoS2V5VXAkIiwibWVyZ2VFdmVudHMiLCJzdWJzY3JpYmVUb0V2ZW50cyIsIndhdGNoRG93biQiLCJ3YXRjaFVwJCIsInNldENsaWNrVGltZW91dCIsImhhbmRsZURvdWJsZUNsaWNrIiwiY2xlYXJUaW1lb3V0Iiwid2F0Y2hDbGljayQiLCJkb3duRXZlbnQiLCJ1cEV2ZW50IiwidGltZVRha2VuIiwidGVzdENsaWNrIiwiZXZlbnRIYW5kbGVyUGFyYW1zIiwidmlld05hbWUiLCJjdXJyZW50VmlldyIsImV2ZW50SGFuZGxlciIsIlZpZXdUeXBlIiwidmlldyIsInBhZ2VXaWxsTG9hZCIsImlubmVySFRNTCIsInBhZ2VEaWRMb2FkIiwiUGFnZSIsInJlbmRlck1hcCIsIkwiLCJjZW50ZXIiLCJ6b29tIiwiem9vbUNvbnRyb2wiLCJ0aWxlTGF5ZXIiLCJhdHRyaWJ1dGlvbiIsImFkZFRvIiwiSFRNTEVsZW1lbnQiLCJkZXN0Iiwic3JjIiwiRiIsInByb3RvIiwibGFzdElkIiwic3RhbXAiLCJfbGVhZmxldF9pZCIsImxvY2siLCJ3cmFwcGVyRm4iLCJsYXRlciIsIndyYXBOdW0iLCJpbmNsdWRlTWF4IiwibWluIiwiZmFsc2VGbiIsImZvcm1hdE51bSIsIm51bSIsImRpZ2l0cyIsInBvdyIsInJvdW5kIiwic3RyIiwic3BsaXRXb3JkcyIsInNldE9wdGlvbnMiLCJnZXRQYXJhbVN0cmluZyIsImV4aXN0aW5nVXJsIiwidXBwZXJjYXNlIiwidG9VcHBlckNhc2UiLCJ0ZW1wbGF0ZVJlIiwiZW1wdHlJbWFnZVVybCIsImdldFByZWZpeGVkIiwibGFzdFRpbWUiLCJ0aW1lb3V0RGVmZXIiLCJ0aW1lVG9DYWxsIiwicmVxdWVzdEZuIiwiY2FuY2VsRm4iLCJyZXF1ZXN0QW5pbUZyYW1lIiwiaW1tZWRpYXRlIiwiY2FuY2VsQW5pbUZyYW1lIiwiVXRpbCIsIkNsYXNzIiwiTmV3Q2xhc3MiLCJpbml0aWFsaXplIiwiY2FsbEluaXRIb29rcyIsInBhcmVudFByb3RvIiwiX19zdXBlcl9fIiwic3RhdGljcyIsImluY2x1ZGVzIiwiTWl4aW4iLCJFdmVudHMiLCJjaGVja0RlcHJlY2F0ZWRNaXhpbkV2ZW50cyIsIl9pbml0SG9va3MiLCJfaW5pdEhvb2tzQ2FsbGVkIiwiaW5jbHVkZSIsIm1lcmdlT3B0aW9ucyIsImFkZEluaXRIb29rIiwidHlwZXMiLCJfb24iLCJfb2ZmIiwidHlwZUxpc3RlbmVycyIsImN0eCIsIl9maXJpbmdDb3VudCIsImZpcmUiLCJwcm9wYWdhdGUiLCJsaXN0ZW5zIiwiZXZlbnQiLCJzb3VyY2VUYXJnZXQiLCJfcHJvcGFnYXRlRXZlbnQiLCJfZXZlbnRQYXJlbnRzIiwiYWRkRXZlbnRQYXJlbnQiLCJyZW1vdmVFdmVudFBhcmVudCIsImxheWVyIiwicHJvcGFnYXRlZEZyb20iLCJjbGVhckFsbEV2ZW50TGlzdGVuZXJzIiwiYWRkT25lVGltZUV2ZW50TGlzdGVuZXIiLCJmaXJlRXZlbnQiLCJoYXNFdmVudExpc3RlbmVycyIsIkV2ZW50ZWQiLCJQb2ludCIsInRydW5jIiwiZmxvb3IiLCJjZWlsIiwidG9Qb2ludCIsIkJvdW5kcyIsInBvaW50cyIsInRvQm91bmRzIiwiTGF0TG5nQm91bmRzIiwiY29ybmVyMSIsImNvcm5lcjIiLCJsYXRsbmdzIiwidG9MYXRMbmdCb3VuZHMiLCJMYXRMbmciLCJsYXQiLCJsbmciLCJhbHQiLCJ0b0xhdExuZyIsImxvbiIsImNsb25lIiwicG9pbnQiLCJfYWRkIiwic3VidHJhY3QiLCJfc3VidHJhY3QiLCJkaXZpZGVCeSIsIl9kaXZpZGVCeSIsIm11bHRpcGx5QnkiLCJfbXVsdGlwbHlCeSIsInNjYWxlQnkiLCJ1bnNjYWxlQnkiLCJfcm91bmQiLCJfZmxvb3IiLCJfY2VpbCIsIl90cnVuYyIsImRpc3RhbmNlVG8iLCJzcXJ0IiwiZXF1YWxzIiwiY29udGFpbnMiLCJnZXRDZW50ZXIiLCJnZXRCb3R0b21MZWZ0IiwiZ2V0VG9wUmlnaHQiLCJnZXRUb3BMZWZ0IiwiZ2V0Qm90dG9tUmlnaHQiLCJnZXRTaXplIiwiaW50ZXJzZWN0cyIsImJvdW5kcyIsIm1pbjIiLCJtYXgyIiwieEludGVyc2VjdHMiLCJ5SW50ZXJzZWN0cyIsIm92ZXJsYXBzIiwieE92ZXJsYXBzIiwieU92ZXJsYXBzIiwiaXNWYWxpZCIsInN3MiIsIm5lMiIsInN3IiwiX3NvdXRoV2VzdCIsIm5lIiwiX25vcnRoRWFzdCIsInBhZCIsImJ1ZmZlclJhdGlvIiwiaGVpZ2h0QnVmZmVyIiwid2lkdGhCdWZmZXIiLCJnZXRTb3V0aFdlc3QiLCJnZXROb3J0aEVhc3QiLCJnZXROb3J0aFdlc3QiLCJnZXROb3J0aCIsImdldFdlc3QiLCJnZXRTb3V0aEVhc3QiLCJnZXRTb3V0aCIsImdldEVhc3QiLCJsYXRJbnRlcnNlY3RzIiwibG5nSW50ZXJzZWN0cyIsImxhdE92ZXJsYXBzIiwibG5nT3ZlcmxhcHMiLCJ0b0JCb3hTdHJpbmciLCJtYXhNYXJnaW4iLCJwcmVjaXNpb24iLCJFYXJ0aCIsImRpc3RhbmNlIiwid3JhcCIsIndyYXBMYXRMbmciLCJzaXplSW5NZXRlcnMiLCJsYXRBY2N1cmFjeSIsImxuZ0FjY3VyYWN5IiwiY29zIiwiUEkiLCJDUlMiLCJsYXRMbmdUb1BvaW50IiwibGF0bG5nIiwicHJvamVjdGVkUG9pbnQiLCJwcm9qZWN0aW9uIiwic2NhbGUiLCJ0cmFuc2Zvcm1hdGlvbiIsIl90cmFuc2Zvcm0iLCJwb2ludFRvTGF0TG5nIiwidW50cmFuc2Zvcm1lZFBvaW50IiwidW50cmFuc2Zvcm0iLCJ1bnByb2plY3QiLCJMTjIiLCJnZXRQcm9qZWN0ZWRCb3VuZHMiLCJpbmZpbml0ZSIsIndyYXBMbmciLCJ3cmFwTGF0Iiwid3JhcExhdExuZ0JvdW5kcyIsIm5ld0NlbnRlciIsImxhdFNoaWZ0IiwibG5nU2hpZnQiLCJsYXRsbmcxIiwibGF0bG5nMiIsInJhZCIsImxhdDEiLCJsYXQyIiwic2luRExhdCIsInNpbiIsInNpbkRMb24iLCJhdGFuMiIsIlNwaGVyaWNhbE1lcmNhdG9yIiwiTUFYX0xBVElUVURFIiwiYXRhbiIsImV4cCIsIlRyYW5zZm9ybWF0aW9uIiwidG9UcmFuc2Zvcm1hdGlvbiIsIkVQU0czODU3IiwiY29kZSIsIkVQU0c5MDA5MTMiLCJzdmdDcmVhdGUiLCJjcmVhdGVFbGVtZW50TlMiLCJwb2ludHNUb1BhdGgiLCJyaW5ncyIsImxlbjIiLCJzdmciLCJzdHlsZSQxIiwiZG9jdW1lbnRFbGVtZW50IiwiaWUiLCJpZWx0OSIsImVkZ2UiLCJuYXZpZ2F0b3IiLCJ3ZWJraXQiLCJ1c2VyQWdlbnRDb250YWlucyIsImFuZHJvaWQiLCJhbmRyb2lkMjMiLCJ3ZWJraXRWZXIiLCJleGVjIiwidXNlckFnZW50IiwiYW5kcm9pZFN0b2NrIiwib3BlcmEiLCJjaHJvbWUiLCJnZWNrbyIsInNhZmFyaSIsInBoYW50b20iLCJvcGVyYTEyIiwid2luIiwicGxhdGZvcm0iLCJpZTNkIiwid2Via2l0M2QiLCJXZWJLaXRDU1NNYXRyaXgiLCJnZWNrbzNkIiwiYW55M2QiLCJMX0RJU0FCTEVfM0QiLCJtb2JpbGUiLCJvcmllbnRhdGlvbiIsIm1vYmlsZVdlYmtpdCIsIm1vYmlsZVdlYmtpdDNkIiwibXNQb2ludGVyIiwiUG9pbnRlckV2ZW50IiwiTVNQb2ludGVyRXZlbnQiLCJwb2ludGVyIiwidG91Y2giLCJMX05PX1RPVUNIIiwiRG9jdW1lbnRUb3VjaCIsIm1vYmlsZU9wZXJhIiwibW9iaWxlR2Vja28iLCJyZXRpbmEiLCJkZXZpY2VQaXhlbFJhdGlvIiwic2NyZWVuIiwiZGV2aWNlWERQSSIsImxvZ2ljYWxYRFBJIiwicGFzc2l2ZUV2ZW50cyIsInN1cHBvcnRzUGFzc2l2ZU9wdGlvbiIsIm9wdHMiLCJjYW52YXMiLCJnZXRDb250ZXh0IiwiY3JlYXRlU1ZHUmVjdCIsInZtbCIsImRpdiIsInNoYXBlIiwiYmVoYXZpb3IiLCJhZGoiLCJCcm93c2VyIiwiUE9JTlRFUl9ET1dOIiwiUE9JTlRFUl9NT1ZFIiwiUE9JTlRFUl9VUCIsIlBPSU5URVJfQ0FOQ0VMIiwiX3BvaW50ZXJzIiwiX3BvaW50ZXJEb2NMaXN0ZW5lciIsImFkZFBvaW50ZXJMaXN0ZW5lciIsIm9uRG93biIsIk1TUE9JTlRFUl9UWVBFX1RPVUNIIiwicG9pbnRlclR5cGUiLCJwcmV2ZW50RGVmYXVsdCIsIl9oYW5kbGVQb2ludGVyIiwiX2dsb2JhbFBvaW50ZXJEb3duIiwiX2dsb2JhbFBvaW50ZXJNb3ZlIiwiX2dsb2JhbFBvaW50ZXJVcCIsIl9hZGRQb2ludGVyU3RhcnQiLCJvbk1vdmUiLCJNU1BPSU5URVJfVFlQRV9NT1VTRSIsImJ1dHRvbnMiLCJfYWRkUG9pbnRlck1vdmUiLCJvblVwIiwiX2FkZFBvaW50ZXJFbmQiLCJwb2ludGVySWQiLCJ0b3VjaGVzIiwiY2hhbmdlZFRvdWNoZXMiLCJkaXNhYmxlVGV4dFNlbGVjdGlvbiIsImVuYWJsZVRleHRTZWxlY3Rpb24iLCJfdXNlclNlbGVjdCIsIl9vdXRsaW5lRWxlbWVudCIsIl9vdXRsaW5lU3R5bGUiLCJfdG91Y2hzdGFydCIsIl90b3VjaGVuZCIsIl9wcmUiLCJUUkFOU0ZPUk0iLCJ0ZXN0UHJvcCIsIlRSQU5TSVRJT04iLCJUUkFOU0lUSU9OX0VORCIsImdldFN0eWxlIiwiY3VycmVudFN0eWxlIiwiZGVmYXVsdFZpZXciLCJnZXRDb21wdXRlZFN0eWxlIiwiY3JlYXRlJDEiLCJ0YWdOYW1lIiwiY2xhc3NOYW1lIiwidG9Gcm9udCIsImxhc3RDaGlsZCIsInRvQmFjayIsImhhc0NsYXNzIiwiY2xhc3NMaXN0IiwiZ2V0Q2xhc3MiLCJSZWdFeHAiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJzZXRDbGFzcyIsInJlbW92ZUNsYXNzIiwiYmFzZVZhbCIsImNvcnJlc3BvbmRpbmdFbGVtZW50Iiwic2V0T3BhY2l0eSIsIm9wYWNpdHkiLCJmaWx0ZXJOYW1lIiwiZmlsdGVycyIsIkVuYWJsZWQiLCJPcGFjaXR5IiwiX3NldE9wYWNpdHlJRSIsInNldFRyYW5zZm9ybSIsIm9mZnNldCIsInBvcyIsInNldFBvc2l0aW9uIiwiX2xlYWZsZXRfcG9zIiwibGVmdCIsInRvcCIsImdldFBvc2l0aW9uIiwidXNlclNlbGVjdFByb3BlcnR5IiwiZGlzYWJsZUltYWdlRHJhZyIsImVuYWJsZUltYWdlRHJhZyIsInByZXZlbnRPdXRsaW5lIiwidGFiSW5kZXgiLCJyZXN0b3JlT3V0bGluZSIsIm91dGxpbmUiLCJnZXRTaXplZFBhcmVudE5vZGUiLCJvZmZzZXRXaWR0aCIsIm9mZnNldEhlaWdodCIsImdldFNjYWxlIiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsIndpZHRoIiwiaGVpZ2h0IiwiYm91bmRpbmdDbGllbnRSZWN0IiwiRG9tVXRpbCIsImFkZE9uZSIsImV2ZW50c0tleSIsInJlbW92ZU9uZSIsImJyb3dzZXJGaXJlc05hdGl2ZURibENsaWNrIiwibW91c2VTdWJzdCIsIm1vdXNlZW50ZXIiLCJtb3VzZWxlYXZlIiwid2hlZWwiLCJvcmlnaW5hbEhhbmRsZXIiLCJ0b3VjaCQkMSIsImRvdWJsZVRhcCIsIm9uVG91Y2hTdGFydCIsImlzUHJpbWFyeSIsImRlbHRhIiwib25Ub3VjaEVuZCIsImNhbmNlbEJ1YmJsZSIsInByb3AiLCJuZXdUb3VjaCIsImJ1dHRvbiIsInBhc3NpdmUiLCJhZGREb3VibGVUYXBMaXN0ZW5lciIsImlzRXh0ZXJuYWxUYXJnZXQiLCJhdHRhY2hFdmVudCIsInJlbW92ZVBvaW50ZXJMaXN0ZW5lciIsInRvdWNoc3RhcnQiLCJ0b3VjaGVuZCIsImRibGNsaWNrIiwicmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIiLCJkZXRhY2hFdmVudCIsInN0b3BQcm9wYWdhdGlvbiIsIm9yaWdpbmFsRXZlbnQiLCJfc3RvcHBlZCIsInNraXBwZWQiLCJkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24iLCJkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbiIsImZha2VTdG9wIiwicmV0dXJuVmFsdWUiLCJzdG9wIiwiZ2V0TW91c2VQb3NpdGlvbiIsImNsaWVudFgiLCJjbGllbnRZIiwiY2xpZW50TGVmdCIsImNsaWVudFRvcCIsIndoZWVsUHhGYWN0b3IiLCJnZXRXaGVlbERlbHRhIiwid2hlZWxEZWx0YVkiLCJkZWx0YVkiLCJkZWx0YU1vZGUiLCJkZWx0YVgiLCJkZWx0YVoiLCJ3aGVlbERlbHRhIiwiZGV0YWlsIiwic2tpcEV2ZW50cyIsInJlbGF0ZWQiLCJyZWxhdGVkVGFyZ2V0IiwiRG9tRXZlbnQiLCJQb3NBbmltYXRpb24iLCJydW4iLCJuZXdQb3MiLCJlYXNlTGluZWFyaXR5IiwiX2VsIiwiX2luUHJvZ3Jlc3MiLCJfZHVyYXRpb24iLCJfZWFzZU91dFBvd2VyIiwiX3N0YXJ0UG9zIiwiX29mZnNldCIsIl9zdGFydFRpbWUiLCJfYW5pbWF0ZSIsIl9zdGVwIiwiX2FuaW1JZCIsImVsYXBzZWQiLCJfcnVuRnJhbWUiLCJfZWFzZU91dCIsInByb2dyZXNzIiwiY3JzIiwibWluWm9vbSIsIm1heFpvb20iLCJsYXllcnMiLCJtYXhCb3VuZHMiLCJyZW5kZXJlciIsInpvb21BbmltYXRpb24iLCJ6b29tQW5pbWF0aW9uVGhyZXNob2xkIiwiZmFkZUFuaW1hdGlvbiIsIm1hcmtlclpvb21BbmltYXRpb24iLCJ0cmFuc2Zvcm0zRExpbWl0Iiwiem9vbVNuYXAiLCJ6b29tRGVsdGEiLCJ0cmFja1Jlc2l6ZSIsIl9oYW5kbGVycyIsIl9sYXllcnMiLCJfem9vbUJvdW5kTGF5ZXJzIiwiX3NpemVDaGFuZ2VkIiwiX2luaXRDb250YWluZXIiLCJfaW5pdExheW91dCIsIl9vblJlc2l6ZSIsIl9pbml0RXZlbnRzIiwic2V0TWF4Qm91bmRzIiwiX3pvb20iLCJfbGltaXRab29tIiwic2V0VmlldyIsIl96b29tQW5pbWF0ZWQiLCJfY3JlYXRlQW5pbVByb3h5IiwiX3Byb3h5IiwiX2NhdGNoVHJhbnNpdGlvbkVuZCIsIl9hZGRMYXllcnMiLCJfbGltaXRDZW50ZXIiLCJfc3RvcCIsIl9sb2FkZWQiLCJhbmltYXRlIiwicGFuIiwiX3RyeUFuaW1hdGVkWm9vbSIsIl90cnlBbmltYXRlZFBhbiIsIl9zaXplVGltZXIiLCJfcmVzZXRWaWV3Iiwic2V0Wm9vbSIsInpvb21JbiIsInpvb21PdXQiLCJzZXRab29tQXJvdW5kIiwiZ2V0Wm9vbVNjYWxlIiwidmlld0hhbGYiLCJjZW50ZXJPZmZzZXQiLCJsYXRMbmdUb0NvbnRhaW5lclBvaW50IiwiY29udGFpbmVyUG9pbnRUb0xhdExuZyIsIl9nZXRCb3VuZHNDZW50ZXJab29tIiwiZ2V0Qm91bmRzIiwicGFkZGluZ1RMIiwicGFkZGluZ1RvcExlZnQiLCJwYWRkaW5nIiwicGFkZGluZ0JSIiwicGFkZGluZ0JvdHRvbVJpZ2h0IiwiZ2V0Qm91bmRzWm9vbSIsIkluZmluaXR5IiwicGFkZGluZ09mZnNldCIsInN3UG9pbnQiLCJuZVBvaW50IiwiZml0Qm91bmRzIiwiZml0V29ybGQiLCJwYW5UbyIsInBhbkJ5IiwiZ2V0Wm9vbSIsIl9wYW5BbmltIiwiX29uUGFuVHJhbnNpdGlvblN0ZXAiLCJfb25QYW5UcmFuc2l0aW9uRW5kIiwibm9Nb3ZlU3RhcnQiLCJfbWFwUGFuZSIsIl9nZXRNYXBQYW5lUG9zIiwiX3Jhd1BhbkJ5IiwiZmx5VG8iLCJ0YXJnZXRDZW50ZXIiLCJ0YXJnZXRab29tIiwidG8iLCJzdGFydFpvb20iLCJ3MCIsIncxIiwidTEiLCJyaG8iLCJzcSIsInNpbmgiLCJjb3NoIiwicjAiLCJ1IiwiUyIsIl9tb3ZlU3RhcnQiLCJlYXNlT3V0IiwiX2ZseVRvRnJhbWUiLCJfbW92ZSIsImdldFNjYWxlWm9vbSIsIl9tb3ZlRW5kIiwiZmx5VG9Cb3VuZHMiLCJfcGFuSW5zaWRlTWF4Qm91bmRzIiwic2V0TWluWm9vbSIsIm9sZFpvb20iLCJzZXRNYXhab29tIiwicGFuSW5zaWRlQm91bmRzIiwiX2VuZm9yY2luZ0JvdW5kcyIsInBhbkluc2lkZSIsInBpeGVsQ2VudGVyIiwicGl4ZWxQb2ludCIsInBpeGVsQm91bmRzIiwiZ2V0UGl4ZWxCb3VuZHMiLCJoYWxmUGl4ZWxCb3VuZHMiLCJwYWRkZWRCb3VuZHMiLCJkaWZmIiwiaW52YWxpZGF0ZVNpemUiLCJvbGRTaXplIiwiX2xhc3RDZW50ZXIiLCJuZXdTaXplIiwib2xkQ2VudGVyIiwiZGVib3VuY2VNb3ZlZW5kIiwibG9jYXRlIiwiX2xvY2F0ZU9wdGlvbnMiLCJ3YXRjaCIsIl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yIiwib25SZXNwb25zZSIsIl9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlIiwib25FcnJvciIsIl9sb2NhdGlvbldhdGNoSWQiLCJnZW9sb2NhdGlvbiIsIndhdGNoUG9zaXRpb24iLCJnZXRDdXJyZW50UG9zaXRpb24iLCJzdG9wTG9jYXRlIiwiY2xlYXJXYXRjaCIsImNvb3JkcyIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwiYWNjdXJhY3kiLCJIYW5kbGVyQ2xhc3MiLCJlbmFibGUiLCJfY29udGFpbmVySWQiLCJfY29udGFpbmVyIiwiX2NsZWFyQ29udHJvbFBvcyIsIl9yZXNpemVSZXF1ZXN0IiwiX2NsZWFySGFuZGxlcnMiLCJfcGFuZXMiLCJfcmVuZGVyZXIiLCJjcmVhdGVQYW5lIiwicGFuZSIsIl9jaGVja0lmTG9hZGVkIiwiX21vdmVkIiwibGF5ZXJQb2ludFRvTGF0TG5nIiwiX2dldENlbnRlckxheWVyUG9pbnQiLCJnZXRNaW5ab29tIiwiX2xheWVyc01pblpvb20iLCJnZXRNYXhab29tIiwiX2xheWVyc01heFpvb20iLCJpbnNpZGUiLCJudyIsInNlIiwiYm91bmRzU2l6ZSIsInNuYXAiLCJzY2FsZXgiLCJzY2FsZXkiLCJfc2l6ZSIsImNsaWVudFdpZHRoIiwiY2xpZW50SGVpZ2h0IiwidG9wTGVmdFBvaW50IiwiX2dldFRvcExlZnRQb2ludCIsImdldFBpeGVsT3JpZ2luIiwiX3BpeGVsT3JpZ2luIiwiZ2V0UGl4ZWxXb3JsZEJvdW5kcyIsImdldFBhbmUiLCJnZXRQYW5lcyIsImdldENvbnRhaW5lciIsInRvWm9vbSIsImZyb21ab29tIiwibGF0TG5nVG9MYXllclBvaW50IiwiY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQiLCJsYXllclBvaW50VG9Db250YWluZXJQb2ludCIsImxheWVyUG9pbnQiLCJtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludCIsIm1vdXNlRXZlbnRUb0xheWVyUG9pbnQiLCJtb3VzZUV2ZW50VG9MYXRMbmciLCJfb25TY3JvbGwiLCJfZmFkZUFuaW1hdGVkIiwiX2luaXRQYW5lcyIsIl9pbml0Q29udHJvbFBvcyIsInBhbmVzIiwiX3BhbmVSZW5kZXJlcnMiLCJtYXJrZXJQYW5lIiwic2hhZG93UGFuZSIsImxvYWRpbmciLCJ6b29tQ2hhbmdlZCIsIl9nZXROZXdQaXhlbE9yaWdpbiIsInBpbmNoIiwiX2dldFpvb21TcGFuIiwicmVtb3ZlJCQxIiwiX3RhcmdldHMiLCJvbk9mZiIsIl9oYW5kbGVET01FdmVudCIsIl9vbk1vdmVFbmQiLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwiX2ZpbmRFdmVudFRhcmdldHMiLCJ0YXJnZXRzIiwiaXNIb3ZlciIsInNyY0VsZW1lbnQiLCJkcmFnZ2luZyIsIl9zaW11bGF0ZWQiLCJfZHJhZ2dhYmxlTW92ZWQiLCJfZmlyZURPTUV2ZW50IiwiX21vdXNlRXZlbnRzIiwic3ludGgiLCJpc01hcmtlciIsImdldExhdExuZyIsIl9yYWRpdXMiLCJjb250YWluZXJQb2ludCIsImJ1YmJsaW5nTW91c2VFdmVudHMiLCJlbmFibGVkIiwibW92ZWQiLCJib3hab29tIiwiZGlzYWJsZSIsIndoZW5SZWFkeSIsIl9sYXRMbmdUb05ld0xheWVyUG9pbnQiLCJ0b3BMZWZ0IiwiX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHMiLCJsYXRMbmdCb3VuZHMiLCJfZ2V0Q2VudGVyT2Zmc2V0IiwiY2VudGVyUG9pbnQiLCJ2aWV3Qm91bmRzIiwiX2dldEJvdW5kc09mZnNldCIsIl9saW1pdE9mZnNldCIsIm5ld0JvdW5kcyIsInB4Qm91bmRzIiwicHJvamVjdGVkTWF4Qm91bmRzIiwibWluT2Zmc2V0IiwibWF4T2Zmc2V0IiwiX3JlYm91bmQiLCJyaWdodCIsInByb3h5IiwibWFwUGFuZSIsIl9hbmltYXRpbmdab29tIiwiX29uWm9vbVRyYW5zaXRpb25FbmQiLCJfYW5pbU1vdmVFbmQiLCJfZGVzdHJveUFuaW1Qcm94eSIsInoiLCJfbm90aGluZ1RvQW5pbWF0ZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJfYW5pbWF0ZVpvb20iLCJzdGFydEFuaW0iLCJub1VwZGF0ZSIsIl9hbmltYXRlVG9DZW50ZXIiLCJfYW5pbWF0ZVRvWm9vbSIsIkNvbnRyb2wiLCJfbWFwIiwicmVtb3ZlQ29udHJvbCIsImFkZENvbnRyb2wiLCJvbkFkZCIsImNvcm5lciIsIl9jb250cm9sQ29ybmVycyIsIm9uUmVtb3ZlIiwiX3JlZm9jdXNPbk1hcCIsInNjcmVlblgiLCJzY3JlZW5ZIiwiZm9jdXMiLCJjb250cm9sIiwiY29ybmVycyIsIl9jb250cm9sQ29udGFpbmVyIiwiY3JlYXRlQ29ybmVyIiwidlNpZGUiLCJoU2lkZSIsIkxheWVycyIsImNvbGxhcHNlZCIsImF1dG9aSW5kZXgiLCJoaWRlU2luZ2xlQmFzZSIsInNvcnRMYXllcnMiLCJzb3J0RnVuY3Rpb24iLCJsYXllckEiLCJsYXllckIiLCJuYW1lQSIsIm5hbWVCIiwiYmFzZUxheWVycyIsIm92ZXJsYXlzIiwiX2xheWVyQ29udHJvbElucHV0cyIsIl9sYXN0WkluZGV4IiwiX2hhbmRsaW5nQ2xpY2siLCJfYWRkTGF5ZXIiLCJfdXBkYXRlIiwiX2NoZWNrRGlzYWJsZWRMYXllcnMiLCJfb25MYXllckNoYW5nZSIsIl9leHBhbmRJZk5vdENvbGxhcHNlZCIsImFkZEJhc2VMYXllciIsImFkZE92ZXJsYXkiLCJyZW1vdmVMYXllciIsIl9nZXRMYXllciIsIl9zZWN0aW9uIiwiYWNjZXB0YWJsZUhlaWdodCIsIm9mZnNldFRvcCIsImNvbGxhcHNlIiwic2VjdGlvbiIsIl9sYXllcnNMaW5rIiwidGl0bGUiLCJfYmFzZUxheWVyc0xpc3QiLCJfc2VwYXJhdG9yIiwiX292ZXJsYXlzTGlzdCIsIm92ZXJsYXkiLCJzZXRaSW5kZXgiLCJiYXNlTGF5ZXJzUHJlc2VudCIsIm92ZXJsYXlzUHJlc2VudCIsImJhc2VMYXllcnNDb3VudCIsIl9hZGRJdGVtIiwiZGlzcGxheSIsIl9jcmVhdGVSYWRpb0VsZW1lbnQiLCJjaGVja2VkIiwicmFkaW9IdG1sIiwicmFkaW9GcmFnbWVudCIsImxhYmVsIiwiaGFzTGF5ZXIiLCJkZWZhdWx0Q2hlY2tlZCIsImxheWVySWQiLCJfb25JbnB1dENsaWNrIiwiaG9sZGVyIiwiaW5wdXRzIiwiYWRkZWRMYXllcnMiLCJyZW1vdmVkTGF5ZXJzIiwiYWRkTGF5ZXIiLCJkaXNhYmxlZCIsIl9leHBhbmQiLCJfY29sbGFwc2UiLCJab29tIiwiem9vbUluVGV4dCIsInpvb21JblRpdGxlIiwiem9vbU91dFRleHQiLCJ6b29tT3V0VGl0bGUiLCJ6b29tTmFtZSIsIl96b29tSW5CdXR0b24iLCJfY3JlYXRlQnV0dG9uIiwiX3pvb21JbiIsIl96b29tT3V0QnV0dG9uIiwiX3pvb21PdXQiLCJfdXBkYXRlRGlzYWJsZWQiLCJfZGlzYWJsZWQiLCJzaGlmdEtleSIsImh0bWwiLCJTY2FsZSIsIm1heFdpZHRoIiwibWV0cmljIiwiaW1wZXJpYWwiLCJfYWRkU2NhbGVzIiwidXBkYXRlV2hlbklkbGUiLCJfbVNjYWxlIiwiX2lTY2FsZSIsIm1heE1ldGVycyIsIl91cGRhdGVTY2FsZXMiLCJfdXBkYXRlTWV0cmljIiwiX3VwZGF0ZUltcGVyaWFsIiwibWV0ZXJzIiwiX2dldFJvdW5kTnVtIiwiX3VwZGF0ZVNjYWxlIiwibWF4TWlsZXMiLCJtaWxlcyIsImZlZXQiLCJtYXhGZWV0IiwidGV4dCIsInJhdGlvIiwicG93MTAiLCJBdHRyaWJ1dGlvbiIsInByZWZpeCIsIl9hdHRyaWJ1dGlvbnMiLCJhdHRyaWJ1dGlvbkNvbnRyb2wiLCJnZXRBdHRyaWJ1dGlvbiIsImFkZEF0dHJpYnV0aW9uIiwic2V0UHJlZml4IiwicmVtb3ZlQXR0cmlidXRpb24iLCJhdHRyaWJzIiwicHJlZml4QW5kQXR0cmlicyIsIkhhbmRsZXIiLCJfZW5hYmxlZCIsImFkZEhvb2tzIiwicmVtb3ZlSG9va3MiLCJfbGFzdENvZGUiLCJTVEFSVCIsIkVORCIsIm1vdXNlZG93biIsInBvaW50ZXJkb3duIiwiTVNQb2ludGVyRG93biIsIk1PVkUiLCJEcmFnZ2FibGUiLCJjbGlja1RvbGVyYW5jZSIsImRyYWdTdGFydFRhcmdldCIsInByZXZlbnRPdXRsaW5lJCQxIiwiX2VsZW1lbnQiLCJfZHJhZ1N0YXJ0VGFyZ2V0IiwiX3ByZXZlbnRPdXRsaW5lIiwiX29uRG93biIsIl9kcmFnZ2luZyIsImZpbmlzaERyYWciLCJ3aGljaCIsIl9tb3ZpbmciLCJzaXplZFBhcmVudCIsIl9zdGFydFBvaW50IiwiX3BhcmVudFNjYWxlIiwiX29uTW92ZSIsIl9vblVwIiwiX2xhc3RUYXJnZXQiLCJTVkdFbGVtZW50SW5zdGFuY2UiLCJjb3JyZXNwb25kaW5nVXNlRWxlbWVudCIsIl9uZXdQb3MiLCJfYW5pbVJlcXVlc3QiLCJfbGFzdEV2ZW50IiwiX3VwZGF0ZVBvc2l0aW9uIiwic2ltcGxpZnkiLCJ0b2xlcmFuY2UiLCJzcVRvbGVyYW5jZSIsIm1hcmtlcnMiLCJVaW50OEFycmF5IiwiX3NpbXBsaWZ5RFBTdGVwIiwic3FEaXN0IiwibWF4U3FEaXN0IiwiX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50IiwibmV3UG9pbnRzIiwiX3NpbXBsaWZ5RFAiLCJyZWR1Y2VkUG9pbnRzIiwicDEiLCJwMiIsImR4IiwiZHkiLCJfcmVkdWNlUG9pbnRzIiwicG9pbnRUb1NlZ21lbnREaXN0YW5jZSIsImNsaXBTZWdtZW50IiwidXNlTGFzdENvZGUiLCJjb2RlT3V0IiwibmV3Q29kZSIsImNvZGVBIiwiX2dldEJpdENvZGUiLCJjb2RlQiIsIl9nZXRFZGdlSW50ZXJzZWN0aW9uIiwiZG90IiwiaXNGbGF0IiwiX2ZsYXQiLCJMaW5lVXRpbCIsImNsb3Nlc3RQb2ludE9uU2VnbWVudCIsImNsaXBQb2x5Z29uIiwiY2xpcHBlZFBvaW50cyIsImsiLCJlZGdlcyIsIl9jb2RlIiwiUG9seVV0aWwiLCJMb25MYXQiLCJNZXJjYXRvciIsIlJfTUlOT1IiLCJjb24iLCJ0cyIsInRhbiIsInBoaSIsImRwaGkiLCJFUFNHMzM5NSIsIkVQU0c0MzI2IiwiU2ltcGxlIiwiTGF5ZXIiLCJyZW1vdmVGcm9tIiwiX21hcFRvQWRkIiwiYWRkSW50ZXJhY3RpdmVUYXJnZXQiLCJ0YXJnZXRFbCIsInJlbW92ZUludGVyYWN0aXZlVGFyZ2V0IiwiX2xheWVyQWRkIiwiZ2V0RXZlbnRzIiwiYmVmb3JlQWRkIiwiZWFjaExheWVyIiwiX2FkZFpvb21MaW1pdCIsIl91cGRhdGVab29tTGV2ZWxzIiwiX3JlbW92ZVpvb21MaW1pdCIsIm9sZFpvb21TcGFuIiwiTGF5ZXJHcm91cCIsImdldExheWVySWQiLCJjbGVhckxheWVycyIsImludm9rZSIsIm1ldGhvZE5hbWUiLCJnZXRMYXllciIsImdldExheWVycyIsInpJbmRleCIsIkZlYXR1cmVHcm91cCIsInNldFN0eWxlIiwiYnJpbmdUb0Zyb250IiwiYnJpbmdUb0JhY2siLCJJY29uIiwicG9wdXBBbmNob3IiLCJ0b29sdGlwQW5jaG9yIiwiY3JlYXRlSWNvbiIsIm9sZEljb24iLCJfY3JlYXRlSWNvbiIsImNyZWF0ZVNoYWRvdyIsIl9nZXRJY29uVXJsIiwiaW1nIiwiX2NyZWF0ZUltZyIsIl9zZXRJY29uU3R5bGVzIiwic2l6ZU9wdGlvbiIsImFuY2hvciIsInNoYWRvd0FuY2hvciIsImljb25BbmNob3IiLCJtYXJnaW5MZWZ0IiwibWFyZ2luVG9wIiwiSWNvbkRlZmF1bHQiLCJpY29uVXJsIiwiaWNvblJldGluYVVybCIsInNoYWRvd1VybCIsImljb25TaXplIiwic2hhZG93U2l6ZSIsImltYWdlUGF0aCIsIl9kZXRlY3RJY29uUGF0aCIsIk1hcmtlckRyYWciLCJtYXJrZXIiLCJfbWFya2VyIiwiaWNvbiIsIl9pY29uIiwiX2RyYWdnYWJsZSIsImRyYWdzdGFydCIsIl9vbkRyYWdTdGFydCIsInByZWRyYWciLCJfb25QcmVEcmFnIiwiZHJhZyIsIl9vbkRyYWciLCJkcmFnZW5kIiwiX29uRHJhZ0VuZCIsIl9hZGp1c3RQYW4iLCJzcGVlZCIsImF1dG9QYW5TcGVlZCIsImF1dG9QYW5QYWRkaW5nIiwiaWNvblBvcyIsIm9yaWdpbiIsInBhbkJvdW5kcyIsIm1vdmVtZW50IiwiX3BhblJlcXVlc3QiLCJfb2xkTGF0TG5nIiwiY2xvc2VQb3B1cCIsImF1dG9QYW4iLCJzaGFkb3ciLCJfc2hhZG93IiwiX2xhdGxuZyIsIm9sZExhdExuZyIsIk1hcmtlciIsImludGVyYWN0aXZlIiwia2V5Ym9hcmQiLCJ6SW5kZXhPZmZzZXQiLCJyaXNlT25Ib3ZlciIsInJpc2VPZmZzZXQiLCJkcmFnZ2FibGUiLCJfaW5pdEljb24iLCJfcmVtb3ZlSWNvbiIsIl9yZW1vdmVTaGFkb3ciLCJ2aWV3cmVzZXQiLCJzZXRMYXRMbmciLCJzZXRaSW5kZXhPZmZzZXQiLCJnZXRJY29uIiwic2V0SWNvbiIsIl9wb3B1cCIsImJpbmRQb3B1cCIsIl9zZXRQb3MiLCJjbGFzc1RvQWRkIiwiYWRkSWNvbiIsIm1vdXNlb3ZlciIsIl9icmluZ1RvRnJvbnQiLCJtb3VzZW91dCIsIl9yZXNldFpJbmRleCIsIm5ld1NoYWRvdyIsImFkZFNoYWRvdyIsIl91cGRhdGVPcGFjaXR5IiwiX2luaXRJbnRlcmFjdGlvbiIsIl96SW5kZXgiLCJfdXBkYXRlWkluZGV4Iiwib3B0IiwiX2dldFBvcHVwQW5jaG9yIiwiX2dldFRvb2x0aXBBbmNob3IiLCJQYXRoIiwic3Ryb2tlIiwiY29sb3IiLCJ3ZWlnaHQiLCJsaW5lQ2FwIiwibGluZUpvaW4iLCJkYXNoQXJyYXkiLCJkYXNoT2Zmc2V0IiwiZmlsbCIsImZpbGxDb2xvciIsImZpbGxPcGFjaXR5IiwiZmlsbFJ1bGUiLCJnZXRSZW5kZXJlciIsIl9pbml0UGF0aCIsIl9yZXNldCIsIl9hZGRQYXRoIiwiX3JlbW92ZVBhdGgiLCJyZWRyYXciLCJfdXBkYXRlUGF0aCIsIl91cGRhdGVTdHlsZSIsIl91cGRhdGVCb3VuZHMiLCJfYnJpbmdUb0JhY2siLCJfcGF0aCIsIl9wcm9qZWN0IiwiX2NsaWNrVG9sZXJhbmNlIiwiQ2lyY2xlTWFya2VyIiwicmFkaXVzIiwic2V0UmFkaXVzIiwiZ2V0UmFkaXVzIiwiX3BvaW50IiwicjIiLCJfcmFkaXVzWSIsIl9weEJvdW5kcyIsIl91cGRhdGVDaXJjbGUiLCJfZW1wdHkiLCJfYm91bmRzIiwiX2NvbnRhaW5zUG9pbnQiLCJDaXJjbGUiLCJsZWdhY3lPcHRpb25zIiwiX21SYWRpdXMiLCJoYWxmIiwibGF0UiIsImJvdHRvbSIsImxuZ1IiLCJhY29zIiwiUG9seWxpbmUiLCJzbW9vdGhGYWN0b3IiLCJub0NsaXAiLCJfc2V0TGF0TG5ncyIsImdldExhdExuZ3MiLCJfbGF0bG5ncyIsInNldExhdExuZ3MiLCJjbG9zZXN0TGF5ZXJQb2ludCIsIm1pbkRpc3RhbmNlIiwibWluUG9pbnQiLCJjbG9zZXN0IiwiakxlbiIsIl9wYXJ0cyIsImhhbGZEaXN0Iiwic2VnRGlzdCIsImRpc3QiLCJfcmluZ3MiLCJhZGRMYXRMbmciLCJfZGVmYXVsdFNoYXBlIiwiX2NvbnZlcnRMYXRMbmdzIiwiZmxhdCIsIl9wcm9qZWN0TGF0bG5ncyIsIl9yYXdQeEJvdW5kcyIsInByb2plY3RlZEJvdW5kcyIsIl9jbGlwUG9pbnRzIiwic2VnbWVudCIsIl9zaW1wbGlmeVBvaW50cyIsIl91cGRhdGVQb2x5IiwiUG9seWdvbiIsImYiLCJhcmVhIiwiY2xpcHBlZCIsIkdlb0pTT04iLCJnZW9qc29uIiwiYWRkRGF0YSIsImZlYXR1cmUiLCJmZWF0dXJlcyIsImdlb21ldHJpZXMiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwiZ2VvbWV0cnlUb0xheWVyIiwiYXNGZWF0dXJlIiwiZGVmYXVsdE9wdGlvbnMiLCJyZXNldFN0eWxlIiwib25FYWNoRmVhdHVyZSIsIl9zZXRMYXllclN0eWxlIiwicG9pbnRUb0xheWVyIiwiX2Nvb3Jkc1RvTGF0TG5nIiwiY29vcmRzVG9MYXRMbmciLCJfcG9pbnRUb0xheWVyIiwiY29vcmRzVG9MYXRMbmdzIiwicG9pbnRUb0xheWVyRm4iLCJtYXJrZXJzSW5oZXJpdE9wdGlvbnMiLCJsZXZlbHNEZWVwIiwibGF0TG5nVG9Db29yZHMiLCJsYXRMbmdzVG9Db29yZHMiLCJnZXRGZWF0dXJlIiwibmV3R2VvbWV0cnkiLCJQb2ludFRvR2VvSlNPTiIsInRvR2VvSlNPTiIsImdlb0pTT04iLCJtdWx0aSIsImhvbGVzIiwidG9NdWx0aVBvaW50IiwiaXNHZW9tZXRyeUNvbGxlY3Rpb24iLCJqc29ucyIsImpzb24iLCJnZW9Kc29uIiwiSW1hZ2VPdmVybGF5IiwiY3Jvc3NPcmlnaW4iLCJlcnJvck92ZXJsYXlVcmwiLCJfdXJsIiwiX2ltYWdlIiwiX2luaXRJbWFnZSIsInN0eWxlT3B0cyIsInNldFVybCIsInNldEJvdW5kcyIsInpvb21hbmltIiwid2FzRWxlbWVudFN1cHBsaWVkIiwib25zZWxlY3RzdGFydCIsIm9ubW91c2Vtb3ZlIiwib25sb2FkIiwib25lcnJvciIsIl9vdmVybGF5T25FcnJvciIsImltYWdlIiwiZXJyb3JVcmwiLCJWaWRlb092ZXJsYXkiLCJhdXRvcGxheSIsImxvb3AiLCJrZWVwQXNwZWN0UmF0aW8iLCJtdXRlZCIsInZpZCIsIm9ubG9hZGVkZGF0YSIsInNvdXJjZUVsZW1lbnRzIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJTVkdPdmVybGF5IiwiRGl2T3ZlcmxheSIsIl9zb3VyY2UiLCJfcmVtb3ZlVGltZW91dCIsImdldENvbnRlbnQiLCJfY29udGVudCIsInNldENvbnRlbnQiLCJ2aXNpYmlsaXR5IiwiX3VwZGF0ZUNvbnRlbnQiLCJfdXBkYXRlTGF5b3V0IiwiaXNPcGVuIiwiX3ByZXBhcmVPcGVuIiwiX2NvbnRlbnROb2RlIiwiaGFzQ2hpbGROb2RlcyIsIl9nZXRBbmNob3IiLCJfY29udGFpbmVyQm90dG9tIiwiX2NvbnRhaW5lckxlZnQiLCJfY29udGFpbmVyV2lkdGgiLCJQb3B1cCIsIm1pbldpZHRoIiwibWF4SGVpZ2h0IiwiYXV0b1BhblBhZGRpbmdUb3BMZWZ0IiwiYXV0b1BhblBhZGRpbmdCb3R0b21SaWdodCIsImtlZXBJblZpZXciLCJjbG9zZUJ1dHRvbiIsImF1dG9DbG9zZSIsImNsb3NlT25Fc2NhcGVLZXkiLCJvcGVuT24iLCJvcGVuUG9wdXAiLCJwb3B1cCIsImNsb3NlT25DbGljayIsImNsb3NlUG9wdXBPbkNsaWNrIiwicHJlY2xpY2siLCJfY2xvc2UiLCJtb3ZlZW5kIiwid3JhcHBlciIsIl93cmFwcGVyIiwiX3RpcENvbnRhaW5lciIsIl90aXAiLCJfY2xvc2VCdXR0b24iLCJfb25DbG9zZUJ1dHRvbkNsaWNrIiwid2hpdGVTcGFjZSIsIm1hcmdpbkJvdHRvbSIsImNvbnRhaW5lckhlaWdodCIsImNvbnRhaW5lcldpZHRoIiwibGF5ZXJQb3MiLCJjb250YWluZXJQb3MiLCJfcG9wdXBIYW5kbGVyc0FkZGVkIiwiY2xpY2siLCJfb3BlblBvcHVwIiwia2V5cHJlc3MiLCJfb25LZXlQcmVzcyIsIm1vdmUiLCJfbW92ZVBvcHVwIiwidW5iaW5kUG9wdXAiLCJ0b2dnbGVQb3B1cCIsImlzUG9wdXBPcGVuIiwic2V0UG9wdXBDb250ZW50IiwiZ2V0UG9wdXAiLCJrZXlDb2RlIiwiVG9vbHRpcCIsImRpcmVjdGlvbiIsInBlcm1hbmVudCIsInN0aWNreSIsInRvb2x0aXAiLCJjbG9zZVRvb2x0aXAiLCJfc2V0UG9zaXRpb24iLCJzdWJYIiwic3ViWSIsInRvb2x0aXBQb2ludCIsInRvb2x0aXBXaWR0aCIsInRvb2x0aXBIZWlnaHQiLCJvcGVuVG9vbHRpcCIsImJpbmRUb29sdGlwIiwiX3Rvb2x0aXAiLCJfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnMiLCJ1bmJpbmRUb29sdGlwIiwiX3Rvb2x0aXBIYW5kbGVyc0FkZGVkIiwiX21vdmVUb29sdGlwIiwiX29wZW5Ub29sdGlwIiwibW91c2Vtb3ZlIiwidG9nZ2xlVG9vbHRpcCIsImlzVG9vbHRpcE9wZW4iLCJzZXRUb29sdGlwQ29udGVudCIsImdldFRvb2x0aXAiLCJEaXZJY29uIiwiYmdQb3MiLCJFbGVtZW50IiwiYmFja2dyb3VuZFBvc2l0aW9uIiwiRGVmYXVsdCIsIkdyaWRMYXllciIsInRpbGVTaXplIiwidXBkYXRlV2hlblpvb21pbmciLCJ1cGRhdGVJbnRlcnZhbCIsIm1heE5hdGl2ZVpvb20iLCJtaW5OYXRpdmVab29tIiwibm9XcmFwIiwia2VlcEJ1ZmZlciIsIl9sZXZlbHMiLCJfdGlsZXMiLCJfcmVtb3ZlQWxsVGlsZXMiLCJfdGlsZVpvb20iLCJfc2V0QXV0b1pJbmRleCIsImlzTG9hZGluZyIsIl9sb2FkaW5nIiwidmlld3ByZXJlc2V0IiwiX2ludmFsaWRhdGVBbGwiLCJjcmVhdGVUaWxlIiwiZ2V0VGlsZVNpemUiLCJlZGdlWkluZGV4IiwiaXNGaW5pdGUiLCJuZXh0RnJhbWUiLCJ3aWxsUHJ1bmUiLCJ0aWxlIiwibG9hZGVkIiwiZmFkZSIsIl9vbk9wYXF1ZVRpbGUiLCJfbm9QcnVuZSIsIl9wcnVuZVRpbGVzIiwiX2ZhZGVGcmFtZSIsIl91cGRhdGVMZXZlbHMiLCJfb25VcGRhdGVMZXZlbCIsIl9yZW1vdmVUaWxlc0F0Wm9vbSIsIl9vblJlbW92ZUxldmVsIiwiX3NldFpvb21UcmFuc2Zvcm0iLCJfb25DcmVhdGVMZXZlbCIsIl9sZXZlbCIsInJldGFpbiIsIl9yZXRhaW5QYXJlbnQiLCJfcmV0YWluQ2hpbGRyZW4iLCJfcmVtb3ZlVGlsZSIsIngyIiwieTIiLCJ6MiIsImNvb3JkczIiLCJfdGlsZUNvb3Jkc1RvS2V5IiwiYW5pbWF0aW5nIiwiX3NldFZpZXciLCJfY2xhbXBab29tIiwibm9QcnVuZSIsInRpbGVab29tIiwidGlsZVpvb21DaGFuZ2VkIiwiX2Fib3J0TG9hZGluZyIsIl9yZXNldEdyaWQiLCJfc2V0Wm9vbVRyYW5zZm9ybXMiLCJ0cmFuc2xhdGUiLCJfdGlsZVNpemUiLCJfZ2xvYmFsVGlsZVJhbmdlIiwiX3B4Qm91bmRzVG9UaWxlUmFuZ2UiLCJfd3JhcFgiLCJfd3JhcFkiLCJfZ2V0VGlsZWRQaXhlbEJvdW5kcyIsIm1hcFpvb20iLCJoYWxmU2l6ZSIsInRpbGVSYW5nZSIsInRpbGVDZW50ZXIiLCJtYXJnaW4iLCJub1BydW5lUmFuZ2UiLCJfaXNWYWxpZFRpbGUiLCJmcmFnbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJfYWRkVGlsZSIsInRpbGVCb3VuZHMiLCJfdGlsZUNvb3Jkc1RvQm91bmRzIiwiX2tleVRvQm91bmRzIiwiX2tleVRvVGlsZUNvb3JkcyIsIl90aWxlQ29vcmRzVG9Od1NlIiwibndQb2ludCIsInNlUG9pbnQiLCJicCIsIl9pbml0VGlsZSIsIldlYmtpdEJhY2tmYWNlVmlzaWJpbGl0eSIsInRpbGVQb3MiLCJfZ2V0VGlsZVBvcyIsIl93cmFwQ29vcmRzIiwiX3RpbGVSZWFkeSIsIl9ub1RpbGVzVG9Mb2FkIiwibmV3Q29vcmRzIiwiVGlsZUxheWVyIiwic3ViZG9tYWlucyIsImVycm9yVGlsZVVybCIsInpvb21PZmZzZXQiLCJ0bXMiLCJ6b29tUmV2ZXJzZSIsImRldGVjdFJldGluYSIsIl9vblRpbGVSZW1vdmUiLCJub1JlZHJhdyIsIl90aWxlT25Mb2FkIiwiX3RpbGVPbkVycm9yIiwiZ2V0VGlsZVVybCIsIl9nZXRTdWJkb21haW4iLCJfZ2V0Wm9vbUZvclVybCIsImludmVydGVkWSIsImdldEF0dHJpYnV0ZSIsInRpbGVQb2ludCIsIlRpbGVMYXllcldNUyIsImRlZmF1bHRXbXNQYXJhbXMiLCJzZXJ2aWNlIiwicmVxdWVzdCIsImZvcm1hdCIsInRyYW5zcGFyZW50IiwidmVyc2lvbiIsIndtc1BhcmFtcyIsInJlYWxSZXRpbmEiLCJfY3JzIiwiX3dtc1ZlcnNpb24iLCJwcm9qZWN0aW9uS2V5IiwiYmJveCIsInNldFBhcmFtcyIsIldNUyIsIndtcyIsIlJlbmRlcmVyIiwiX3VwZGF0ZVBhdGhzIiwiX2Rlc3Ryb3lDb250YWluZXIiLCJfb25ab29tIiwiem9vbWVuZCIsIl9vblpvb21FbmQiLCJfb25BbmltWm9vbSIsImV2IiwiX3VwZGF0ZVRyYW5zZm9ybSIsImN1cnJlbnRDZW50ZXJQb2ludCIsIl9jZW50ZXIiLCJ0b3BMZWZ0T2Zmc2V0IiwiQ2FudmFzIiwiX29uVmlld1ByZVJlc2V0IiwiX3Bvc3Rwb25lVXBkYXRlUGF0aHMiLCJfZHJhdyIsIl9vbk1vdXNlTW92ZSIsIl9vbkNsaWNrIiwiX2hhbmRsZU1vdXNlT3V0IiwiX2N0eCIsIl9yZWRyYXdSZXF1ZXN0IiwiX3JlZHJhd0JvdW5kcyIsIl9yZWRyYXciLCJfdXBkYXRlRGFzaEFycmF5Iiwib3JkZXIiLCJfb3JkZXIiLCJfZHJhd0xhc3QiLCJfZHJhd0ZpcnN0IiwiX3JlcXVlc3RSZWRyYXciLCJfZXh0ZW5kUmVkcmF3Qm91bmRzIiwiZGFzaFZhbHVlIiwiX2Rhc2hBcnJheSIsIl9jbGVhciIsImNsZWFyUmVjdCIsInNhdmUiLCJyZXN0b3JlIiwiYmVnaW5QYXRoIiwiY2xpcCIsIl9kcmF3aW5nIiwiY2xvc2VQYXRoIiwiX2ZpbGxTdHJva2UiLCJhcmMiLCJnbG9iYWxBbHBoYSIsImZpbGxTdHlsZSIsInNldExpbmVEYXNoIiwibGluZVdpZHRoIiwic3Ryb2tlU3R5bGUiLCJjbGlja2VkTGF5ZXIiLCJfZmlyZUV2ZW50IiwibW92aW5nIiwiX2hhbmRsZU1vdXNlSG92ZXIiLCJfaG92ZXJlZExheWVyIiwiX21vdXNlSG92ZXJUaHJvdHRsZWQiLCJjYW5kaWRhdGVIb3ZlcmVkTGF5ZXIiLCJjYW52YXMkMSIsInZtbENyZWF0ZSIsIm5hbWVzcGFjZXMiLCJ2bWxNaXhpbiIsImNvb3Jkc2l6ZSIsIl9zdHJva2UiLCJfZmlsbCIsInN0cm9rZWQiLCJmaWxsZWQiLCJkYXNoU3R5bGUiLCJlbmRjYXAiLCJqb2luc3R5bGUiLCJfc2V0UGF0aCIsImNyZWF0ZSQyIiwiU1ZHIiwiem9vbXN0YXJ0IiwiX29uWm9vbVN0YXJ0IiwiX3Jvb3RHcm91cCIsIl9zdmdTaXplIiwicmVtb3ZlQXR0cmlidXRlIiwic3ZnJDEiLCJfZ2V0UGFuZVJlbmRlcmVyIiwiX2NyZWF0ZVJlbmRlcmVyIiwicHJlZmVyQ2FudmFzIiwiUmVjdGFuZ2xlIiwiX2JvdW5kc1RvTGF0TG5ncyIsIkJveFpvb20iLCJfcGFuZSIsIm92ZXJsYXlQYW5lIiwiX3Jlc2V0U3RhdGVUaW1lb3V0IiwiX2Rlc3Ryb3kiLCJfb25Nb3VzZURvd24iLCJfcmVzZXRTdGF0ZSIsIl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSIsImNvbnRleHRtZW51IiwibW91c2V1cCIsIl9vbk1vdXNlVXAiLCJrZXlkb3duIiwiX29uS2V5RG93biIsIl9ib3giLCJfZmluaXNoIiwiYm94Wm9vbUJvdW5kcyIsImRvdWJsZUNsaWNrWm9vbSIsIkRvdWJsZUNsaWNrWm9vbSIsIl9vbkRvdWJsZUNsaWNrIiwiaW5lcnRpYSIsImluZXJ0aWFEZWNlbGVyYXRpb24iLCJpbmVydGlhTWF4U3BlZWQiLCJ3b3JsZENvcHlKdW1wIiwibWF4Qm91bmRzVmlzY29zaXR5IiwiRHJhZyIsIl9vblByZURyYWdMaW1pdCIsIl9vblByZURyYWdXcmFwIiwiX3Bvc2l0aW9ucyIsIl90aW1lcyIsIl9vZmZzZXRMaW1pdCIsIl92aXNjb3NpdHkiLCJfbGFzdFRpbWUiLCJfbGFzdFBvcyIsIl9hYnNQb3MiLCJfcHJ1bmVQb3NpdGlvbnMiLCJweENlbnRlciIsInB4V29ybGRDZW50ZXIiLCJfaW5pdGlhbFdvcmxkT2Zmc2V0IiwiX3dvcmxkV2lkdGgiLCJfdmlzY291c0xpbWl0IiwidGhyZXNob2xkIiwibGltaXQiLCJ3b3JsZFdpZHRoIiwiaGFsZldpZHRoIiwibmV3WDEiLCJuZXdYMiIsIm5ld1giLCJub0luZXJ0aWEiLCJlYXNlIiwic3BlZWRWZWN0b3IiLCJsaW1pdGVkU3BlZWQiLCJsaW1pdGVkU3BlZWRWZWN0b3IiLCJkZWNlbGVyYXRpb25EdXJhdGlvbiIsImtleWJvYXJkUGFuRGVsdGEiLCJLZXlib2FyZCIsImtleUNvZGVzIiwiZG93biIsInVwIiwiX3NldFBhbkRlbHRhIiwiX3NldFpvb21EZWx0YSIsIl9vbkZvY3VzIiwiYmx1ciIsIl9vbkJsdXIiLCJfYWRkSG9va3MiLCJfcmVtb3ZlSG9va3MiLCJfZm9jdXNlZCIsImRvY0VsIiwic2Nyb2xsVG8iLCJwYW5EZWx0YSIsIl9wYW5LZXlzIiwiY29kZXMiLCJfem9vbUtleXMiLCJhbHRLZXkiLCJjdHJsS2V5IiwibWV0YUtleSIsInNjcm9sbFdoZWVsWm9vbSIsIndoZWVsRGVib3VuY2VUaW1lIiwid2hlZWxQeFBlclpvb21MZXZlbCIsIlNjcm9sbFdoZWVsWm9vbSIsIl9vbldoZWVsU2Nyb2xsIiwiX2RlbHRhIiwiX2xhc3RNb3VzZVBvcyIsIl90aW1lciIsIl9wZXJmb3JtWm9vbSIsImQyIiwiZDMiLCJkNCIsInRhcFRvbGVyYW5jZSIsIlRhcCIsIl9maXJlQ2xpY2siLCJfaG9sZFRpbWVvdXQiLCJfaXNUYXBWYWxpZCIsIl9zaW11bGF0ZUV2ZW50IiwidG91Y2htb3ZlIiwic2ltdWxhdGVkRXZlbnQiLCJjcmVhdGVFdmVudCIsIl9zaW11bGF0ZWRDbGljayIsImluaXRNb3VzZUV2ZW50IiwiZGlzcGF0Y2hFdmVudCIsInRvdWNoWm9vbSIsImJvdW5jZUF0Wm9vbUxpbWl0cyIsIlRvdWNoWm9vbSIsIl9vblRvdWNoU3RhcnQiLCJfem9vbWluZyIsIl9jZW50ZXJQb2ludCIsIl9zdGFydExhdExuZyIsIl9waW5jaFN0YXJ0TGF0TG5nIiwiX3N0YXJ0RGlzdCIsIl9zdGFydFpvb20iLCJfb25Ub3VjaE1vdmUiLCJfb25Ub3VjaEVuZCIsIm1vdmVGbiIsIlByb2plY3Rpb24iLCJsYXRMbmciLCJsYXllckdyb3VwIiwiZmVhdHVyZUdyb3VwIiwiaW1hZ2VPdmVybGF5IiwidmlkZW9PdmVybGF5IiwidmlkZW8iLCJzdmdPdmVybGF5IiwiZGl2SWNvbiIsImdyaWRMYXllciIsImNpcmNsZU1hcmtlciIsImNpcmNsZSIsInBvbHlsaW5lIiwicG9seWdvbiIsInJlY3RhbmdsZSIsIm9sZEwiLCJmYWN0b3J5IiwiX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyIsIl9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18iLCJfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8yX19fIiwic2V0dXBOb3RpZmljYXRpb25Gb3JtIiwiZm91bmROb3RpZmljYXRpb24iLCJoaWRkZW4iLCJiYXNlSXRlcmF0ZWUiLCJmaW5kSW5kZXhGdW5jIiwiY29sbGVjdGlvbiIsImZyb21JbmRleCIsIml0ZXJhdGVlIiwiYmFzZUlzTWF0Y2giLCJnZXRNYXRjaERhdGEiLCJtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSIsIm1hdGNoRGF0YSIsIm5vQ3VzdG9taXplciIsIm9ialZhbHVlIiwiQ09NUEFSRV9QQVJUSUFMX0ZMQUciLCJhc3NvY0luZGV4T2YiLCJMQVJHRV9BUlJBWV9TSVpFIiwiaXNNYXNrZWQiLCJ0b1NvdXJjZSIsInJlSXNIb3N0Q3RvciIsImZ1bmNQcm90byIsInJlSXNOYXRpdmUiLCJuYXRpdmVPYmplY3RUb1N0cmluZyIsImlzT3duIiwidW5tYXNrZWQiLCJ1aWQiLCJjb3JlSnNEYXRhIiwibWFza1NyY0tleSIsIklFX1BST1RPIiwiSGFzaCIsImhhc2hDbGVhciIsImhhc2hEZWxldGUiLCJoYXNoR2V0IiwiaGFzaEhhcyIsImhhc2hTZXQiLCJnZXRNYXBEYXRhIiwiZXF1YWxBcnJheXMiLCJlcXVhbEJ5VGFnIiwiZXF1YWxPYmplY3RzIiwiZ2V0VGFnIiwib2JqZWN0VGFnIiwib2JqSXNBcnIiLCJvdGhJc0FyciIsIm9ialRhZyIsIm90aFRhZyIsIm9iaklzT2JqIiwib3RoSXNPYmoiLCJpc1NhbWVUYWciLCJvYmpJc1dyYXBwZWQiLCJvdGhJc1dyYXBwZWQiLCJvYmpVbndyYXBwZWQiLCJvdGhVbndyYXBwZWQiLCJzZXRDYWNoZUFkZCIsInNldENhY2hlSGFzIiwiY2FjaGUiLCJtYXBUb0FycmF5Iiwic2V0VG9BcnJheSIsInN5bWJvbFByb3RvIiwic3ltYm9sVmFsdWVPZiIsInZhbHVlT2YiLCJieXRlTGVuZ3RoIiwiYnl0ZU9mZnNldCIsImNvbnZlcnQiLCJzdGFja2VkIiwiZ2V0QWxsS2V5cyIsIm9ialByb3BzIiwib2JqTGVuZ3RoIiwib2JqU3RhY2tlZCIsInNraXBDdG9yIiwib2JqQ3RvciIsIm90aEN0b3IiLCJiYXNlR2V0QWxsS2V5cyIsImdldFN5bWJvbHMiLCJhcnJheVB1c2giLCJrZXlzRnVuYyIsInN5bWJvbHNGdW5jIiwiYXJyYXlGaWx0ZXIiLCJzdHViQXJyYXkiLCJuYXRpdmVHZXRTeW1ib2xzIiwic3ltYm9sIiwicmVzSW5kZXgiLCJiYXNlVGltZXMiLCJpc0luZGV4IiwiaW5oZXJpdGVkIiwiaXNBcnIiLCJpc0FyZyIsImlzQnVmZiIsImlzVHlwZSIsInNraXBJbmRleGVzIiwidHlwZWRBcnJheVRhZ3MiLCJmcmVlUHJvY2VzcyIsInByb2Nlc3MiLCJiaW5kaW5nIiwiaXNQcm90b3R5cGUiLCJuYXRpdmVLZXlzIiwiQ3RvciIsIm92ZXJBcmciLCJEYXRhVmlldyIsIldlYWtNYXAiLCJkYXRhVmlld0N0b3JTdHJpbmciLCJtYXBDdG9yU3RyaW5nIiwicHJvbWlzZUN0b3JTdHJpbmciLCJzZXRDdG9yU3RyaW5nIiwid2Vha01hcEN0b3JTdHJpbmciLCJBcnJheUJ1ZmZlciIsImN0b3JTdHJpbmciLCJpc1N0cmljdENvbXBhcmFibGUiLCJoYXNJbiIsImJhc2VHZXQiLCJtZW1vaXplQ2FwcGVkIiwicmVQcm9wTmFtZSIsInJlRXNjYXBlQ2hhciIsImNoYXJDb2RlQXQiLCJtYXRjaCIsIm51bWJlciIsInF1b3RlIiwic3ViU3RyaW5nIiwibWVtb2l6ZSIsInJlc29sdmVyIiwibWVtb2l6ZWQiLCJDYWNoZSIsImJhc2VUb1N0cmluZyIsImFycmF5TWFwIiwic3ltYm9sVG9TdHJpbmciLCJiYXNlSGFzSW4iLCJoYXNQYXRoIiwiaGFzRnVuYyIsImJhc2VQcm9wZXJ0eSIsImJhc2VQcm9wZXJ0eURlZXAiLCJiYXNlRmluZEluZGV4IiwidG9JbnRlZ2VyIiwibmF0aXZlTWF4IiwiZnJvbVJpZ2h0IiwidG9GaW5pdGUiLCJ0b051bWJlciIsImJhc2VUcmltIiwicmVJc0JhZEhleCIsInJlSXNCaW5hcnkiLCJyZUlzT2N0YWwiLCJmcmVlUGFyc2VJbnQiLCJpc0JpbmFyeSIsInRyaW1tZWRFbmRJbmRleCIsInJlVHJpbVN0YXJ0IiwicmVXaGl0ZXNwYWNlIiwiY2hhckF0IiwiZm9ybVNlbmQiLCJmb3JtTWVzc2FnZSIsImZvcm1UeXBlU2VsZWN0IiwiT3B0aW9uIiwic2V0dXBTZWxlY3REcm9wZG93biIsInNlbGVjdGVkTm90aWZpY2F0aW9uIiwic2V0dXBEZWZhdWx0TWVzc2FnZSIsInBheWxvYWQiLCJzZXR1cFN1Ym1pdEJ1dHRvbiIsIktFWV9NQVBQSU5HUyIsImRhdGFzZXQiLCJyeGpzVGFyZ2V0IiwiYWN0aXZlRWxlbWVudCIsIlN0b3JhZ2VIdWJJbnN0YW5jZSIsImdldERhdGEiLCJzZXREZWJ1ZyIsInN0b3JlIiwic2hvdWxkRGVidWciLCJkZWJ1ZyIsImFwcGx5Rm4iLCJkYXRhUmV0cmlldmVkIiwiQXVkaW9IdWJJbnN0YW5jZSIsInBsYXlTb3VuZCIsImZpbGVwYXRoIiwidm9sdW1lIiwic291bmQiLCJBdWRpbyIsInBsYXkiLCJIb21lUGFnZSIsIkNvbnRhY3RzUGFnZSIsIlRlYW1QYWdlIiwiRm91ck9oRm91ciIsImxvZ28iLCJwaG9uZU51bWJlciIsInVwZGF0ZVRpbWVFdmVyeVNlY29uZCIsImRhdGVUaW1lIiwiZ2V0RGF0ZVRpbWUiLCJkYXRlIiwidG9Mb2NhbGVTdHJpbmciLCJ1cGRhdGVUaW1lRGlzcGxheSIsImdldFRpbWUiLCJjbG9ja1RpbWUiLCJ0ZXh0Q29udGVudCIsImFsaWFzMSIsImFsaWFzMiIsImFsaWFzNCIsImNvbnRhY3RzIiwic3RhY2sxIiwiRm91ck9oRm91clBhZ2UiXSwibWFwcGluZ3MiOiJhQUNFLElBQUlBLEVBQW1CLEdBR3ZCLFNBQVNDLEVBQW9CQyxHQUc1QixHQUFHRixFQUFpQkUsR0FDbkIsT0FBT0YsRUFBaUJFLEdBQVVDLFFBR25DLElBQUlDLEVBQVNKLEVBQWlCRSxHQUFZLENBQ3pDRyxFQUFHSCxFQUNISSxHQUFHLEVBQ0hILFFBQVMsSUFVVixPQU5BSSxFQUFRTCxHQUFVTSxLQUFLSixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTRixHQUcvREcsRUFBT0UsR0FBSSxFQUdKRixFQUFPRCxRQUtmRixFQUFvQlEsRUFBSUYsRUFHeEJOLEVBQW9CUyxFQUFJVixFQUd4QkMsRUFBb0JVLEVBQUksU0FBU1IsRUFBU1MsRUFBTUMsR0FDM0NaLEVBQW9CYSxFQUFFWCxFQUFTUyxJQUNsQ0csT0FBT0MsZUFBZWIsRUFBU1MsRUFBTSxDQUFFSyxZQUFZLEVBQU1DLElBQUtMLEtBS2hFWixFQUFvQmtC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b0IsRUFBaUJFLEVBQWVGLEVBQU8sV0FBYUEsSUFBbUJDLEVBQVNGLEVBQVVobkIsTUFBTW9uQixlQUErQ0YsRUFBT3Z5QyxLQUFlLE1BQVZzeUMsRUFBaUJBLEVBQVVELEVBQVVLLGFBQWUsR0FBSSxDQUFDLEtBQU8sVUFBVSxLQUFPLEdBQUcsS0FBT3RuQyxFQUFLLElBQU0sQ0FBQyxNQUFRLENBQUMsS0FBTyxFQUFFLE9BQVMsR0FBRyxJQUFNLENBQUMsS0FBTyxFQUFFLE9BQVMsT0FBU21uQyxHQUN4WixjQUNKLFNBQVUiLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSAxMzgpO1xuIiwiLyohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChiLmhhc093blByb3BlcnR5KHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY3JlYXRlQmluZGluZyhvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBleHBvcnRzKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eShwKSkgZXhwb3J0c1twXSA9IG1bcF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IG4gPT09IFwicmV0dXJuXCIgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSByZXN1bHRba10gPSBtb2Rba107XHJcbiAgICByZXN1bHQuZGVmYXVsdCA9IG1vZDtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIGdldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBwcml2YXRlTWFwLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgaWYgKCFwcml2YXRlTWFwLmhhcyhyZWNlaXZlcikpIHtcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXR0ZW1wdGVkIHRvIHNldCBwcml2YXRlIGZpZWxkIG9uIG5vbi1pbnN0YW5jZVwiKTtcclxuICAgIH1cclxuICAgIHByaXZhdGVNYXAuc2V0KHJlY2VpdmVyLCB2YWx1ZSk7XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfdXRpbF9pc0Z1bmN0aW9uLF9PYnNlcnZlcixfU3Vic2NyaXB0aW9uLF9pbnRlcm5hbF9zeW1ib2xfcnhTdWJzY3JpYmVyLF9jb25maWcsX3V0aWxfaG9zdFJlcG9ydEVycm9yIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgZW1wdHkgYXMgZW1wdHlPYnNlcnZlciB9IGZyb20gJy4vT2JzZXJ2ZXInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgcnhTdWJzY3JpYmVyIGFzIHJ4U3Vic2NyaWJlclN5bWJvbCB9IGZyb20gJy4uL2ludGVybmFsL3N5bWJvbC9yeFN1YnNjcmliZXInO1xuaW1wb3J0IHsgY29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgaG9zdFJlcG9ydEVycm9yIH0gZnJvbSAnLi91dGlsL2hvc3RSZXBvcnRFcnJvcic7XG52YXIgU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIoZGVzdGluYXRpb25Pck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zeW5jRXJyb3JWYWx1ZSA9IG51bGw7XG4gICAgICAgIF90aGlzLnN5bmNFcnJvclRocm93biA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5zeW5jRXJyb3JUaHJvd2FibGUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZW1wdHlPYnNlcnZlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICBpZiAoIWRlc3RpbmF0aW9uT3JOZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZW1wdHlPYnNlcnZlcjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZGVzdGluYXRpb25Pck5leHQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXN0aW5hdGlvbk9yTmV4dCBpbnN0YW5jZW9mIFN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnN5bmNFcnJvclRocm93YWJsZSA9IGRlc3RpbmF0aW9uT3JOZXh0LnN5bmNFcnJvclRocm93YWJsZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb25Pck5leHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbk9yTmV4dC5hZGQoX3RoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3luY0Vycm9yVGhyb3dhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IFNhZmVTdWJzY3JpYmVyKF90aGlzLCBkZXN0aW5hdGlvbk9yTmV4dCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBfdGhpcy5zeW5jRXJyb3JUaHJvd2FibGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gbmV3IFNhZmVTdWJzY3JpYmVyKF90aGlzLCBkZXN0aW5hdGlvbk9yTmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFN1YnNjcmliZXIucHJvdG90eXBlW3J4U3Vic2NyaWJlclN5bWJvbF0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuICAgIFN1YnNjcmliZXIuY3JlYXRlID0gZnVuY3Rpb24gKG5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgc3Vic2NyaWJlciA9IG5ldyBTdWJzY3JpYmVyKG5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIHN1YnNjcmliZXIuc3luY0Vycm9yVGhyb3dhYmxlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVyO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICBTdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3BhcmVudE9yUGFyZW50cyA9IHRoaXMuX3BhcmVudE9yUGFyZW50cztcbiAgICAgICAgdGhpcy5fcGFyZW50T3JQYXJlbnRzID0gbnVsbDtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRPclBhcmVudHMgPSBfcGFyZW50T3JQYXJlbnRzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVyO1xufShTdWJzY3JpcHRpb24pKTtcbmV4cG9ydCB7IFN1YnNjcmliZXIgfTtcbnZhciBTYWZlU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTYWZlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcihfcGFyZW50U3Vic2NyaWJlciwgb2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fcGFyZW50U3Vic2NyaWJlciA9IF9wYXJlbnRTdWJzY3JpYmVyO1xuICAgICAgICB2YXIgbmV4dDtcbiAgICAgICAgdmFyIGNvbnRleHQgPSBfdGhpcztcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpKSB7XG4gICAgICAgICAgICBuZXh0ID0gb2JzZXJ2ZXJPck5leHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob2JzZXJ2ZXJPck5leHQpIHtcbiAgICAgICAgICAgIG5leHQgPSBvYnNlcnZlck9yTmV4dC5uZXh0O1xuICAgICAgICAgICAgZXJyb3IgPSBvYnNlcnZlck9yTmV4dC5lcnJvcjtcbiAgICAgICAgICAgIGNvbXBsZXRlID0gb2JzZXJ2ZXJPck5leHQuY29tcGxldGU7XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXJPck5leHQgIT09IGVtcHR5T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0ID0gT2JqZWN0LmNyZWF0ZShvYnNlcnZlck9yTmV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24oY29udGV4dC51bnN1YnNjcmliZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuYWRkKGNvbnRleHQudW5zdWJzY3JpYmUuYmluZChjb250ZXh0KSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnRleHQudW5zdWJzY3JpYmUgPSBfdGhpcy51bnN1YnNjcmliZS5iaW5kKF90aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIF90aGlzLl9uZXh0ID0gbmV4dDtcbiAgICAgICAgX3RoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgIF90aGlzLl9jb21wbGV0ZSA9IGNvbXBsZXRlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFNhZmVTdWJzY3JpYmVyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQgJiYgdGhpcy5fbmV4dCkge1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRTdWJzY3JpYmVyID0gdGhpcy5fcGFyZW50U3Vic2NyaWJlcjtcbiAgICAgICAgICAgIGlmICghY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcgfHwgIV9wYXJlbnRTdWJzY3JpYmVyLnN5bmNFcnJvclRocm93YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX190cnlPclVuc3ViKHRoaXMuX25leHQsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX190cnlPclNldEVycm9yKF9wYXJlbnRTdWJzY3JpYmVyLCB0aGlzLl9uZXh0LCB2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNhZmVTdWJzY3JpYmVyLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgdmFyIF9wYXJlbnRTdWJzY3JpYmVyID0gdGhpcy5fcGFyZW50U3Vic2NyaWJlcjtcbiAgICAgICAgICAgIHZhciB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nID0gY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc7XG4gICAgICAgICAgICBpZiAodGhpcy5fZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcgfHwgIV9wYXJlbnRTdWJzY3JpYmVyLnN5bmNFcnJvclRocm93YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9fdHJ5T3JVbnN1Yih0aGlzLl9lcnJvciwgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX3RyeU9yU2V0RXJyb3IoX3BhcmVudFN1YnNjcmliZXIsIHRoaXMuX2Vycm9yLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIV9wYXJlbnRTdWJzY3JpYmVyLnN5bmNFcnJvclRocm93YWJsZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBpZiAodXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhvc3RSZXBvcnRFcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgX3BhcmVudFN1YnNjcmliZXIuc3luY0Vycm9yVmFsdWUgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgIF9wYXJlbnRTdWJzY3JpYmVyLnN5bmNFcnJvclRocm93biA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBob3N0UmVwb3J0RXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTYWZlU3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciBfcGFyZW50U3Vic2NyaWJlciA9IHRoaXMuX3BhcmVudFN1YnNjcmliZXI7XG4gICAgICAgICAgICBpZiAodGhpcy5fY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgd3JhcHBlZENvbXBsZXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuX2NvbXBsZXRlLmNhbGwoX3RoaXMuX2NvbnRleHQpOyB9O1xuICAgICAgICAgICAgICAgIGlmICghY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcgfHwgIV9wYXJlbnRTdWJzY3JpYmVyLnN5bmNFcnJvclRocm93YWJsZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9fdHJ5T3JVbnN1Yih3cmFwcGVkQ29tcGxldGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9fdHJ5T3JTZXRFcnJvcihfcGFyZW50U3Vic2NyaWJlciwgd3JhcHBlZENvbXBsZXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU2FmZVN1YnNjcmliZXIucHJvdG90eXBlLl9fdHJ5T3JVbnN1YiA9IGZ1bmN0aW9uIChmbiwgdmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZuLmNhbGwodGhpcy5fY29udGV4dCwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGhvc3RSZXBvcnRFcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTYWZlU3Vic2NyaWJlci5wcm90b3R5cGUuX190cnlPclNldEVycm9yID0gZnVuY3Rpb24gKHBhcmVudCwgZm4sIHZhbHVlKSB7XG4gICAgICAgIGlmICghY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIGNhbGwnKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm4uY2FsbCh0aGlzLl9jb250ZXh0LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50LnN5bmNFcnJvclZhbHVlID0gZXJyO1xuICAgICAgICAgICAgICAgIHBhcmVudC5zeW5jRXJyb3JUaHJvd24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaG9zdFJlcG9ydEVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgU2FmZVN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9wYXJlbnRTdWJzY3JpYmVyID0gdGhpcy5fcGFyZW50U3Vic2NyaWJlcjtcbiAgICAgICAgdGhpcy5fY29udGV4dCA9IG51bGw7XG4gICAgICAgIHRoaXMuX3BhcmVudFN1YnNjcmliZXIgPSBudWxsO1xuICAgICAgICBfcGFyZW50U3Vic2NyaWJlci51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFNhZmVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5leHBvcnQgeyBTYWZlU3Vic2NyaWJlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9U3Vic2NyaWJlci5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIsX09ic2VydmFibGUsX3V0aWxfc3Vic2NyaWJlVG8gUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBzdWJzY3JpYmVUbyB9IGZyb20gJy4vdXRpbC9zdWJzY3JpYmVUbyc7XG52YXIgU2ltcGxlSW5uZXJTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFNpbXBsZUlubmVyU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTaW1wbGVJbm5lclN1YnNjcmliZXIocGFyZW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTaW1wbGVJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMucGFyZW50Lm5vdGlmeU5leHQodmFsdWUpO1xuICAgIH07XG4gICAgU2ltcGxlSW5uZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubm90aWZ5RXJyb3IoZXJyb3IpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICBTaW1wbGVJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubm90aWZ5Q29tcGxldGUoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFNpbXBsZUlubmVyU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgU2ltcGxlSW5uZXJTdWJzY3JpYmVyIH07XG52YXIgQ29tcGxleElubmVyU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhDb21wbGV4SW5uZXJTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbXBsZXhJbm5lclN1YnNjcmliZXIocGFyZW50LCBvdXRlclZhbHVlLCBvdXRlckluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgX3RoaXMub3V0ZXJWYWx1ZSA9IG91dGVyVmFsdWU7XG4gICAgICAgIF90aGlzLm91dGVySW5kZXggPSBvdXRlckluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbXBsZXhJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMucGFyZW50Lm5vdGlmeU5leHQodGhpcy5vdXRlclZhbHVlLCB2YWx1ZSwgdGhpcy5vdXRlckluZGV4LCB0aGlzKTtcbiAgICB9O1xuICAgIENvbXBsZXhJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB0aGlzLnBhcmVudC5ub3RpZnlFcnJvcihlcnJvcik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIENvbXBsZXhJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubm90aWZ5Q29tcGxldGUodGhpcyk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHJldHVybiBDb21wbGV4SW5uZXJTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5leHBvcnQgeyBDb21wbGV4SW5uZXJTdWJzY3JpYmVyIH07XG52YXIgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFNpbXBsZU91dGVyU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTaW1wbGVPdXRlclN1YnNjcmliZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKGlubmVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGlubmVyVmFsdWUpO1xuICAgIH07XG4gICAgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFNpbXBsZU91dGVyU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyIH07XG52YXIgQ29tcGxleE91dGVyU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhDb21wbGV4T3V0ZXJTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvbXBsZXhPdXRlclN1YnNjcmliZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQ29tcGxleE91dGVyU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChfb3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgX291dGVySW5kZXgsIF9pbm5lclN1Yikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgfTtcbiAgICBDb21wbGV4T3V0ZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIENvbXBsZXhPdXRlclN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKF9pbm5lclN1Yikge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29tcGxleE91dGVyU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgQ29tcGxleE91dGVyU3Vic2NyaWJlciB9O1xuZXhwb3J0IGZ1bmN0aW9uIGlubmVyU3Vic2NyaWJlKHJlc3VsdCwgaW5uZXJTdWJzY3JpYmVyKSB7XG4gICAgaWYgKGlubmVyU3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdWJzY3JpYmUoaW5uZXJTdWJzY3JpYmVyKTtcbiAgICB9XG4gICAgdmFyIHN1YnNjcmlwdGlvbjtcbiAgICB0cnkge1xuICAgICAgICBzdWJzY3JpcHRpb24gPSBzdWJzY3JpYmVUbyhyZXN1bHQpKGlubmVyU3Vic2NyaWJlcik7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICBpbm5lclN1YnNjcmliZXIuZXJyb3IoZXJyb3IpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5uZXJTdWJzY3JpYmUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF91dGlsX2NhblJlcG9ydEVycm9yLF91dGlsX3RvU3Vic2NyaWJlcixfc3ltYm9sX29ic2VydmFibGUsX3V0aWxfcGlwZSxfY29uZmlnIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGNhblJlcG9ydEVycm9yIH0gZnJvbSAnLi91dGlsL2NhblJlcG9ydEVycm9yJztcbmltcG9ydCB7IHRvU3Vic2NyaWJlciB9IGZyb20gJy4vdXRpbC90b1N1YnNjcmliZXInO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4vc3ltYm9sL29ic2VydmFibGUnO1xuaW1wb3J0IHsgcGlwZUZyb21BcnJheSB9IGZyb20gJy4vdXRpbC9waXBlJztcbmltcG9ydCB7IGNvbmZpZyB9IGZyb20gJy4vY29uZmlnJztcbnZhciBPYnNlcnZhYmxlID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9ic2VydmFibGUoc3Vic2NyaWJlKSB7XG4gICAgICAgIHRoaXMuX2lzU2NhbGFyID0gZmFsc2U7XG4gICAgICAgIGlmIChzdWJzY3JpYmUpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG4gICAgICAgIHZhciBvYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUoKTtcbiAgICAgICAgb2JzZXJ2YWJsZS5zb3VyY2UgPSB0aGlzO1xuICAgICAgICBvYnNlcnZhYmxlLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gKG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIG9wZXJhdG9yID0gdGhpcy5vcGVyYXRvcjtcbiAgICAgICAgdmFyIHNpbmsgPSB0b1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7XG4gICAgICAgIGlmIChvcGVyYXRvcikge1xuICAgICAgICAgICAgc2luay5hZGQob3BlcmF0b3IuY2FsbChzaW5rLCB0aGlzLnNvdXJjZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2luay5hZGQodGhpcy5zb3VyY2UgfHwgKGNvbmZpZy51c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nICYmICFzaW5rLnN5bmNFcnJvclRocm93YWJsZSkgP1xuICAgICAgICAgICAgICAgIHRoaXMuX3N1YnNjcmliZShzaW5rKSA6XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJ5U3Vic2NyaWJlKHNpbmspKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHtcbiAgICAgICAgICAgIGlmIChzaW5rLnN5bmNFcnJvclRocm93YWJsZSkge1xuICAgICAgICAgICAgICAgIHNpbmsuc3luY0Vycm9yVGhyb3dhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHNpbmsuc3luY0Vycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IHNpbmsuc3luY0Vycm9yVmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaW5rO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uIChzaW5rKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHNpbmspO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICAgICAgICAgIHNpbmsuc3luY0Vycm9yVGhyb3duID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBzaW5rLnN5bmNFcnJvclZhbHVlID0gZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhblJlcG9ydEVycm9yKHNpbmspKSB7XG4gICAgICAgICAgICAgICAgc2luay5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAobmV4dCwgcHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHN1YnNjcmlwdGlvbjtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IF90aGlzLnN1YnNjcmliZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCByZWplY3QsIHJlc29sdmUpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc291cmNlID0gdGhpcy5zb3VyY2U7XG4gICAgICAgIHJldHVybiBzb3VyY2UgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIE9ic2VydmFibGUucHJvdG90eXBlW1N5bWJvbF9vYnNlcnZhYmxlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcGVyYXRpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBpcGVGcm9tQXJyYXkob3BlcmF0aW9ucykodGhpcyk7XG4gICAgfTtcbiAgICBPYnNlcnZhYmxlLnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbiAocHJvbWlzZUN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcHJvbWlzZUN0b3IgPSBnZXRQcm9taXNlQ3Rvcihwcm9taXNlQ3Rvcik7XG4gICAgICAgIHJldHVybiBuZXcgcHJvbWlzZUN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdmFyIHZhbHVlO1xuICAgICAgICAgICAgX3RoaXMuc3Vic2NyaWJlKGZ1bmN0aW9uICh4KSB7IHJldHVybiB2YWx1ZSA9IHg7IH0sIGZ1bmN0aW9uIChlcnIpIHsgcmV0dXJuIHJlamVjdChlcnIpOyB9LCBmdW5jdGlvbiAoKSB7IHJldHVybiByZXNvbHZlKHZhbHVlKTsgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgT2JzZXJ2YWJsZS5jcmVhdGUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzdWJzY3JpYmUpO1xuICAgIH07XG4gICAgcmV0dXJuIE9ic2VydmFibGU7XG59KCkpO1xuZXhwb3J0IHsgT2JzZXJ2YWJsZSB9O1xuZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHtcbiAgICBpZiAoIXByb21pc2VDdG9yKSB7XG4gICAgICAgIHByb21pc2VDdG9yID0gY29uZmlnLlByb21pc2UgfHwgUHJvbWlzZTtcbiAgICB9XG4gICAgaWYgKCFwcm9taXNlQ3Rvcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vIFByb21pc2UgaW1wbCBmb3VuZCcpO1xuICAgIH1cbiAgICByZXR1cm4gcHJvbWlzZUN0b3I7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYnNlcnZhYmxlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfU3Vic2NyaWJlcixfc3ltYm9sX3J4U3Vic2NyaWJlcixfT2JzZXJ2ZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgcnhTdWJzY3JpYmVyIGFzIHJ4U3Vic2NyaWJlclN5bWJvbCB9IGZyb20gJy4uL3N5bWJvbC9yeFN1YnNjcmliZXInO1xuaW1wb3J0IHsgZW1wdHkgYXMgZW1wdHlPYnNlcnZlciB9IGZyb20gJy4uL09ic2VydmVyJztcbmV4cG9ydCBmdW5jdGlvbiB0b1N1YnNjcmliZXIobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgIGlmIChuZXh0T3JPYnNlcnZlcikge1xuICAgICAgICBpZiAobmV4dE9yT2JzZXJ2ZXIgaW5zdGFuY2VvZiBTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV4dE9yT2JzZXJ2ZXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5leHRPck9ic2VydmVyW3J4U3Vic2NyaWJlclN5bWJvbF0pIHtcbiAgICAgICAgICAgIHJldHVybiBuZXh0T3JPYnNlcnZlcltyeFN1YnNjcmliZXJTeW1ib2xdKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFuZXh0T3JPYnNlcnZlciAmJiAhZXJyb3IgJiYgIWNvbXBsZXRlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaWJlcihlbXB0eU9ic2VydmVyKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpYmVyKG5leHRPck9ic2VydmVyLCBlcnJvciwgY29tcGxldGUpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9TdWJzY3JpYmVyLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfdXRpbF9pc0FycmF5LF91dGlsX2lzT2JqZWN0LF91dGlsX2lzRnVuY3Rpb24sX3V0aWxfVW5zdWJzY3JpcHRpb25FcnJvciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi91dGlsL2lzQXJyYXknO1xuaW1wb3J0IHsgaXNPYmplY3QgfSBmcm9tICcuL3V0aWwvaXNPYmplY3QnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4vdXRpbC9pc0Z1bmN0aW9uJztcbmltcG9ydCB7IFVuc3Vic2NyaXB0aW9uRXJyb3IgfSBmcm9tICcuL3V0aWwvVW5zdWJzY3JpcHRpb25FcnJvcic7XG52YXIgU3Vic2NyaXB0aW9uID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbih1bnN1YnNjcmliZSkge1xuICAgICAgICB0aGlzLmNsb3NlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9wYXJlbnRPclBhcmVudHMgPSBudWxsO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gbnVsbDtcbiAgICAgICAgaWYgKHVuc3Vic2NyaWJlKSB7XG4gICAgICAgICAgICB0aGlzLl9jdG9yVW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZXJyb3JzO1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfcGFyZW50T3JQYXJlbnRzID0gX2EuX3BhcmVudE9yUGFyZW50cywgX2N0b3JVbnN1YnNjcmliZSA9IF9hLl9jdG9yVW5zdWJzY3JpYmUsIF91bnN1YnNjcmliZSA9IF9hLl91bnN1YnNjcmliZSwgX3N1YnNjcmlwdGlvbnMgPSBfYS5fc3Vic2NyaXB0aW9ucztcbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9wYXJlbnRPclBhcmVudHMgPSBudWxsO1xuICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gbnVsbDtcbiAgICAgICAgaWYgKF9wYXJlbnRPclBhcmVudHMgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIF9wYXJlbnRPclBhcmVudHMucmVtb3ZlKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF9wYXJlbnRPclBhcmVudHMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBfcGFyZW50T3JQYXJlbnRzLmxlbmd0aDsgKytpbmRleCkge1xuICAgICAgICAgICAgICAgIHZhciBwYXJlbnRfMSA9IF9wYXJlbnRPclBhcmVudHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIHBhcmVudF8xLnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihfdW5zdWJzY3JpYmUpKSB7XG4gICAgICAgICAgICBpZiAoX2N0b3JVbnN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBfdW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gZSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBmbGF0dGVuVW5zdWJzY3JpcHRpb25FcnJvcnMoZS5lcnJvcnMpIDogW2VdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KF9zdWJzY3JpcHRpb25zKSkge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgICAgICB2YXIgbGVuID0gX3N1YnNjcmlwdGlvbnMubGVuZ3RoO1xuICAgICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgICB2YXIgc3ViID0gX3N1YnNjcmlwdGlvbnNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChzdWIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzIHx8IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzLmNvbmNhdChmbGF0dGVuVW5zdWJzY3JpcHRpb25FcnJvcnMoZS5lcnJvcnMpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNoKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcnMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBVbnN1YnNjcmlwdGlvbkVycm9yKGVycm9ycyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbi5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHRlYXJkb3duKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0ZWFyZG93bjtcbiAgICAgICAgaWYgKCF0ZWFyZG93bikge1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHR5cGVvZiB0ZWFyZG93bikge1xuICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24odGVhcmRvd24pO1xuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaXB0aW9uID09PSB0aGlzIHx8IHN1YnNjcmlwdGlvbi5jbG9zZWQgfHwgdHlwZW9mIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIShzdWJzY3JpcHRpb24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0bXAgPSBzdWJzY3JpcHRpb247XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLl9zdWJzY3JpcHRpb25zID0gW3RtcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigndW5yZWNvZ25pemVkIHRlYXJkb3duICcgKyB0ZWFyZG93biArICcgYWRkZWQgdG8gU3Vic2NyaXB0aW9uLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBfcGFyZW50T3JQYXJlbnRzID0gc3Vic2NyaXB0aW9uLl9wYXJlbnRPclBhcmVudHM7XG4gICAgICAgIGlmIChfcGFyZW50T3JQYXJlbnRzID09PSBudWxsKSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24uX3BhcmVudE9yUGFyZW50cyA9IHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoX3BhcmVudE9yUGFyZW50cyBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgaWYgKF9wYXJlbnRPclBhcmVudHMgPT09IHRoaXMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLl9wYXJlbnRPclBhcmVudHMgPSBbX3BhcmVudE9yUGFyZW50cywgdGhpc107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoX3BhcmVudE9yUGFyZW50cy5pbmRleE9mKHRoaXMpID09PSAtMSkge1xuICAgICAgICAgICAgX3BhcmVudE9yUGFyZW50cy5wdXNoKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc3Vic2NyaXB0aW9ucyA9IHRoaXMuX3N1YnNjcmlwdGlvbnM7XG4gICAgICAgIGlmIChzdWJzY3JpcHRpb25zID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLl9zdWJzY3JpcHRpb25zID0gW3N1YnNjcmlwdGlvbl07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAoc3Vic2NyaXB0aW9uKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb25zID0gdGhpcy5fc3Vic2NyaXB0aW9ucztcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb25JbmRleCA9IHN1YnNjcmlwdGlvbnMuaW5kZXhPZihzdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbkluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbnMuc3BsaWNlKHN1YnNjcmlwdGlvbkluZGV4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uLkVNUFRZID0gKGZ1bmN0aW9uIChlbXB0eSkge1xuICAgICAgICBlbXB0eS5jbG9zZWQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZW1wdHk7XG4gICAgfShuZXcgU3Vic2NyaXB0aW9uKCkpKTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uO1xufSgpKTtcbmV4cG9ydCB7IFN1YnNjcmlwdGlvbiB9O1xuZnVuY3Rpb24gZmxhdHRlblVuc3Vic2NyaXB0aW9uRXJyb3JzKGVycm9ycykge1xuICAgIHJldHVybiBlcnJvcnMucmVkdWNlKGZ1bmN0aW9uIChlcnJzLCBlcnIpIHsgcmV0dXJuIGVycnMuY29uY2F0KChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSA/IGVyci5lcnJvcnMgOiBlcnIpOyB9LCBbXSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpcHRpb24uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9PYnNlcnZhYmxlLF9TdWJzY3JpYmVyLF9TdWJzY3JpcHRpb24sX3V0aWxfT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IsX1N1YmplY3RTdWJzY3JpcHRpb24sX2ludGVybmFsX3N5bWJvbF9yeFN1YnNjcmliZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBPYmplY3RVbnN1YnNjcmliZWRFcnJvciB9IGZyb20gJy4vdXRpbC9PYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG5pbXBvcnQgeyBTdWJqZWN0U3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9TdWJqZWN0U3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHJ4U3Vic2NyaWJlciBhcyByeFN1YnNjcmliZXJTeW1ib2wgfSBmcm9tICcuLi9pbnRlcm5hbC9zeW1ib2wvcnhTdWJzY3JpYmVyJztcbnZhciBTdWJqZWN0U3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTdWJqZWN0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0U3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICByZXR1cm4gU3ViamVjdFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IFN1YmplY3RTdWJzY3JpYmVyIH07XG52YXIgU3ViamVjdCA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9ic2VydmVycyA9IFtdO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgIF90aGlzLnRocm93bkVycm9yID0gbnVsbDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0LnByb3RvdHlwZVtyeFN1YnNjcmliZXJTeW1ib2xdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gbmV3IFN1YmplY3RTdWJzY3JpYmVyKHRoaXMpO1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uIChvcGVyYXRvcikge1xuICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpO1xuICAgICAgICBzdWJqZWN0Lm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgIHJldHVybiBzdWJqZWN0O1xuICAgIH07XG4gICAgU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVycztcbiAgICAgICAgICAgIHZhciBsZW4gPSBvYnNlcnZlcnMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGNvcHkgPSBvYnNlcnZlcnMuc2xpY2UoKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb3B5W2ldLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgdGhpcy50aHJvd25FcnJvciA9IGVycjtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnM7XG4gICAgICAgIHZhciBsZW4gPSBvYnNlcnZlcnMubGVuZ3RoO1xuICAgICAgICB2YXIgY29weSA9IG9ic2VydmVycy5zbGljZSgpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjb3B5W2ldLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vYnNlcnZlcnMubGVuZ3RoID0gMDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTtcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzO1xuICAgICAgICB2YXIgbGVuID0gb2JzZXJ2ZXJzLmxlbmd0aDtcbiAgICAgICAgdmFyIGNvcHkgPSBvYnNlcnZlcnMuc2xpY2UoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY29weVtpXS5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzLmxlbmd0aCA9IDA7XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmNsb3NlZCA9IHRydWU7XG4gICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gbnVsbDtcbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmhhc0Vycm9yKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRoaXMudGhyb3duRXJyb3IpO1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN1YmplY3RTdWJzY3JpcHRpb24odGhpcywgc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YmplY3QucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgpO1xuICAgICAgICBvYnNlcnZhYmxlLnNvdXJjZSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBvYnNlcnZhYmxlO1xuICAgIH07XG4gICAgU3ViamVjdC5jcmVhdGUgPSBmdW5jdGlvbiAoZGVzdGluYXRpb24sIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gbmV3IEFub255bW91c1N1YmplY3QoZGVzdGluYXRpb24sIHNvdXJjZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3ViamVjdDtcbn0oT2JzZXJ2YWJsZSkpO1xuZXhwb3J0IHsgU3ViamVjdCB9O1xudmFyIEFub255bW91c1N1YmplY3QgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQW5vbnltb3VzU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uICYmIGRlc3RpbmF0aW9uLm5leHQpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBbm9ueW1vdXNTdWJqZWN0LnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKGRlc3RpbmF0aW9uICYmIGRlc3RpbmF0aW9uLmVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFub255bW91c1N1YmplY3QucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24gJiYgZGVzdGluYXRpb24uY29tcGxldGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQW5vbnltb3VzU3ViamVjdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgaWYgKHNvdXJjZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBBbm9ueW1vdXNTdWJqZWN0O1xufShTdWJqZWN0KSk7XG5leHBvcnQgeyBBbm9ueW1vdXNTdWJqZWN0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJqZWN0LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfQXN5bmNBY3Rpb24sX0FzeW5jU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xuZXhwb3J0IHZhciBhc3luY1NjaGVkdWxlciA9IC8qQF9fUFVSRV9fKi8gbmV3IEFzeW5jU2NoZWR1bGVyKEFzeW5jQWN0aW9uKTtcbmV4cG9ydCB2YXIgYXN5bmMgPSBhc3luY1NjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFzeW5jLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCAgUFVSRV9JTVBPUlRTX0VORCAqL1xuZXhwb3J0IHZhciBpc0FycmF5ID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkgeyByZXR1cm4gQXJyYXkuaXNBcnJheSB8fCAoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggJiYgdHlwZW9mIHgubGVuZ3RoID09PSAnbnVtYmVyJzsgfSk7IH0pKCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0FycmF5LmpzLm1hcFxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF9zbGljZWRUb0FycmF5KGFyciwgaSkgeyByZXR1cm4gX2FycmF5V2l0aEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KGFyciwgaSkgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFyciwgaSkgfHwgX25vbkl0ZXJhYmxlUmVzdCgpOyB9XG5cbmZ1bmN0aW9uIF9ub25JdGVyYWJsZVJlc3QoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5TGltaXQoYXJyLCBpKSB7IHZhciBfaSA9IGFyciAmJiAodHlwZW9mIFN5bWJvbCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBhcnJbU3ltYm9sLml0ZXJhdG9yXSB8fCBhcnJbXCJAQGl0ZXJhdG9yXCJdKTsgaWYgKF9pID09IG51bGwpIHJldHVybjsgdmFyIF9hcnIgPSBbXTsgdmFyIF9uID0gdHJ1ZTsgdmFyIF9kID0gZmFsc2U7IHZhciBfcywgX2U7IHRyeSB7IGZvciAoX2kgPSBfaS5jYWxsKGFycik7ICEoX24gPSAoX3MgPSBfaS5uZXh0KCkpLmRvbmUpOyBfbiA9IHRydWUpIHsgX2Fyci5wdXNoKF9zLnZhbHVlKTsgaWYgKGkgJiYgX2Fyci5sZW5ndGggPT09IGkpIGJyZWFrOyB9IH0gY2F0Y2ggKGVycikgeyBfZCA9IHRydWU7IF9lID0gZXJyOyB9IGZpbmFsbHkgeyB0cnkgeyBpZiAoIV9uICYmIF9pW1wicmV0dXJuXCJdICE9IG51bGwpIF9pW1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChfZCkgdGhyb3cgX2U7IH0gfSByZXR1cm4gX2FycjsgfVxuXG5mdW5jdGlvbiBfYXJyYXlXaXRoSG9sZXMoYXJyKSB7IGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBhcnI7IH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pIHtcbiAgdmFyIF9pdGVtID0gX3NsaWNlZFRvQXJyYXkoaXRlbSwgNCksXG4gICAgICBjb250ZW50ID0gX2l0ZW1bMV0sXG4gICAgICBjc3NNYXBwaW5nID0gX2l0ZW1bM107XG5cbiAgaWYgKCFjc3NNYXBwaW5nKSB7XG4gICAgcmV0dXJuIGNvbnRlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZlxuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgdmFyIHNvdXJjZVVSTHMgPSBjc3NNYXBwaW5nLnNvdXJjZXMubWFwKGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgIHJldHVybiBcIi8qIyBzb3VyY2VVUkw9XCIuY29uY2F0KGNzc01hcHBpbmcuc291cmNlUm9vdCB8fCBcIlwiKS5jb25jYXQoc291cmNlLCBcIiAqL1wiKTtcbiAgICB9KTtcbiAgICByZXR1cm4gW2NvbnRlbnRdLmNvbmNhdChzb3VyY2VVUkxzKS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbiAgcmV0dXJuIFtjb250ZW50XS5qb2luKFwiXFxuXCIpO1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbi8vIGNzcyBiYXNlIGNvZGUsIGluamVjdGVkIGJ5IHRoZSBjc3MtbG9hZGVyXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBjc3NXaXRoTWFwcGluZ1RvU3RyaW5nKGl0ZW0pO1xuXG4gICAgICBpZiAoaXRlbVsyXSkge1xuICAgICAgICByZXR1cm4gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIikuY29uY2F0KGNvbnRlbnQsIFwifVwiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIChtb2R1bGVzLCBtZWRpYVF1ZXJ5LCBkZWR1cGUpIHtcbiAgICBpZiAodHlwZW9mIG1vZHVsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgXCJcIl1dO1xuICAgIH1cblxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG5cbiAgICBpZiAoZGVkdXBlKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgICAgIHZhciBpZCA9IHRoaXNbaV1bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbW9kdWxlcy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2ldKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250aW51ZVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG1lZGlhUXVlcnkpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhUXVlcnk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsyXSA9IFwiXCIuY29uY2F0KG1lZGlhUXVlcnksIFwiIGFuZCBcIikuY29uY2F0KGl0ZW1bMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxpc3QucHVzaChpdGVtKTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIGxpc3Q7XG59OyIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBtYXAocHJvamVjdCwgdGhpc0FyZykge1xuICAgIHJldHVybiBmdW5jdGlvbiBtYXBPcGVyYXRpb24oc291cmNlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgcHJvamVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgaXMgbm90IGEgZnVuY3Rpb24uIEFyZSB5b3UgbG9va2luZyBmb3IgYG1hcFRvKClgPycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgTWFwT3BlcmF0b3IocHJvamVjdCwgdGhpc0FyZykpO1xuICAgIH07XG59XG52YXIgTWFwT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWFwT3BlcmF0b3IocHJvamVjdCwgdGhpc0FyZykge1xuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLnRoaXNBcmcgPSB0aGlzQXJnO1xuICAgIH1cbiAgICBNYXBPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IE1hcFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcm9qZWN0LCB0aGlzLnRoaXNBcmcpKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXBPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnQgeyBNYXBPcGVyYXRvciB9O1xudmFyIE1hcFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoTWFwU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNYXBTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcm9qZWN0LCB0aGlzQXJnKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICAgICAgX3RoaXMuY291bnQgPSAwO1xuICAgICAgICBfdGhpcy50aGlzQXJnID0gdGhpc0FyZyB8fCBfdGhpcztcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcm9qZWN0LmNhbGwodGhpcy50aGlzQXJnLCB2YWx1ZSwgdGhpcy5jb3VudCsrKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHJlc3VsdCk7XG4gICAgfTtcbiAgICByZXR1cm4gTWFwU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFwLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCAgUFVSRV9JTVBPUlRTX0VORCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU2NoZWR1bGVyKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5zY2hlZHVsZSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzU2NoZWR1bGVyLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfT2JzZXJ2YWJsZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5leHBvcnQgdmFyIEVNUFRZID0gLypAX19QVVJFX18qLyBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9KTtcbmV4cG9ydCBmdW5jdGlvbiBlbXB0eShzY2hlZHVsZXIpIHtcbiAgICByZXR1cm4gc2NoZWR1bGVyID8gZW1wdHlTY2hlZHVsZWQoc2NoZWR1bGVyKSA6IEVNUFRZO1xufVxuZnVuY3Rpb24gZW1wdHlTY2hlZHVsZWQoc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7IHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlci5jb21wbGV0ZSgpOyB9KTsgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbXB0eS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX3V0aWxfc3Vic2NyaWJlVG8sX3NjaGVkdWxlZF9zY2hlZHVsZWQgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgc3Vic2NyaWJlVG8gfSBmcm9tICcuLi91dGlsL3N1YnNjcmliZVRvJztcbmltcG9ydCB7IHNjaGVkdWxlZCB9IGZyb20gJy4uL3NjaGVkdWxlZC9zY2hlZHVsZWQnO1xuZXhwb3J0IGZ1bmN0aW9uIGZyb20oaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIGlmICghc2NoZWR1bGVyKSB7XG4gICAgICAgIGlmIChpbnB1dCBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlVG8oaW5wdXQpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuL1N1YnNjcmliZXInO1xudmFyIElubmVyU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhJbm5lclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gSW5uZXJTdWJzY3JpYmVyKHBhcmVudCwgb3V0ZXJWYWx1ZSwgb3V0ZXJJbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIF90aGlzLm91dGVyVmFsdWUgPSBvdXRlclZhbHVlO1xuICAgICAgICBfdGhpcy5vdXRlckluZGV4ID0gb3V0ZXJJbmRleDtcbiAgICAgICAgX3RoaXMuaW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIElubmVyU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubm90aWZ5TmV4dCh0aGlzLm91dGVyVmFsdWUsIHZhbHVlLCB0aGlzLm91dGVySW5kZXgsIHRoaXMuaW5kZXgrKywgdGhpcyk7XG4gICAgfTtcbiAgICBJbm5lclN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB0aGlzLnBhcmVudC5ub3RpZnlFcnJvcihlcnJvciwgdGhpcyk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIElubmVyU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnBhcmVudC5ub3RpZnlDb21wbGV0ZSh0aGlzKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIElubmVyU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgSW5uZXJTdWJzY3JpYmVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Jbm5lclN1YnNjcmliZXIuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9Jbm5lclN1YnNjcmliZXIsX3N1YnNjcmliZVRvLF9PYnNlcnZhYmxlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IElubmVyU3Vic2NyaWJlciB9IGZyb20gJy4uL0lubmVyU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBzdWJzY3JpYmVUbyB9IGZyb20gJy4vc3Vic2NyaWJlVG8nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnNjcmliZVRvUmVzdWx0KG91dGVyU3Vic2NyaWJlciwgcmVzdWx0LCBvdXRlclZhbHVlLCBvdXRlckluZGV4LCBpbm5lclN1YnNjcmliZXIpIHtcbiAgICBpZiAoaW5uZXJTdWJzY3JpYmVyID09PSB2b2lkIDApIHtcbiAgICAgICAgaW5uZXJTdWJzY3JpYmVyID0gbmV3IElubmVyU3Vic2NyaWJlcihvdXRlclN1YnNjcmliZXIsIG91dGVyVmFsdWUsIG91dGVySW5kZXgpO1xuICAgIH1cbiAgICBpZiAoaW5uZXJTdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgT2JzZXJ2YWJsZSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN1YnNjcmliZShpbm5lclN1YnNjcmliZXIpO1xuICAgIH1cbiAgICByZXR1cm4gc3Vic2NyaWJlVG8ocmVzdWx0KShpbm5lclN1YnNjcmliZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3Vic2NyaWJlVG9SZXN1bHQuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG52YXIgX2VuYWJsZV9zdXBlcl9ncm9zc19tb2RlX3RoYXRfd2lsbF9jYXVzZV9iYWRfdGhpbmdzID0gZmFsc2U7XG5leHBvcnQgdmFyIGNvbmZpZyA9IHtcbiAgICBQcm9taXNlOiB1bmRlZmluZWQsXG4gICAgc2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3IgPSAvKkBfX1BVUkVfXyovIG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgLypAX19QVVJFX18qLyBjb25zb2xlLndhcm4oJ0RFUFJFQ0FURUQhIFJ4SlMgd2FzIHNldCB0byB1c2UgZGVwcmVjYXRlZCBzeW5jaHJvbm91cyBlcnJvciBoYW5kbGluZyBiZWhhdmlvciBieSBjb2RlIGF0OiBcXG4nICsgZXJyb3Iuc3RhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKF9lbmFibGVfc3VwZXJfZ3Jvc3NfbW9kZV90aGF0X3dpbGxfY2F1c2VfYmFkX3RoaW5ncykge1xuICAgICAgICAgICAgLypAX19QVVJFX18qLyBjb25zb2xlLmxvZygnUnhKUzogQmFjayB0byBhIGJldHRlciBlcnJvciBiZWhhdmlvci4gVGhhbmsgeW91LiA8MycpO1xuICAgICAgICB9XG4gICAgICAgIF9lbmFibGVfc3VwZXJfZ3Jvc3NfbW9kZV90aGF0X3dpbGxfY2F1c2VfYmFkX3RoaW5ncyA9IHZhbHVlO1xuICAgIH0sXG4gICAgZ2V0IHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcoKSB7XG4gICAgICAgIHJldHVybiBfZW5hYmxlX3N1cGVyX2dyb3NzX21vZGVfdGhhdF93aWxsX2NhdXNlX2JhZF90aGluZ3M7XG4gICAgfSxcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25maWcuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICAgIHJldHVybiB4O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWRlbnRpdHkuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi9TdWJzY3JpYmVyJztcbnZhciBPdXRlclN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoT3V0ZXJTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE91dGVyU3Vic2NyaWJlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBPdXRlclN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAob3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCwgaW5uZXJJbmRleCwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGlubmVyVmFsdWUpO1xuICAgIH07XG4gICAgT3V0ZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnJvciwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICBPdXRlclN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBPdXRlclN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IE91dGVyU3Vic2NyaWJlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9T3V0ZXJTdWJzY3JpYmVyLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcihwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZmlsdGVyT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBGaWx0ZXJPcGVyYXRvcihwcmVkaWNhdGUsIHRoaXNBcmcpKTtcbiAgICB9O1xufVxudmFyIEZpbHRlck9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEZpbHRlck9wZXJhdG9yKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy50aGlzQXJnID0gdGhpc0FyZztcbiAgICB9XG4gICAgRmlsdGVyT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBGaWx0ZXJTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMucHJlZGljYXRlLCB0aGlzLnRoaXNBcmcpKTtcbiAgICB9O1xuICAgIHJldHVybiBGaWx0ZXJPcGVyYXRvcjtcbn0oKSk7XG52YXIgRmlsdGVyU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhGaWx0ZXJTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZpbHRlclN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICBfdGhpcy50aGlzQXJnID0gdGhpc0FyZztcbiAgICAgICAgX3RoaXMuY291bnQgPSAwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEZpbHRlclN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnByZWRpY2F0ZS5jYWxsKHRoaXMudGhpc0FyZywgdmFsdWUsIHRoaXMuY291bnQrKyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBGaWx0ZXJTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maWx0ZXIuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9vYnNlcnZhYmxlX2VtcHR5LF9vYnNlcnZhYmxlX29mLF9vYnNlcnZhYmxlX3Rocm93RXJyb3IgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICcuL29ic2VydmFibGUvZW1wdHknO1xuaW1wb3J0IHsgb2YgfSBmcm9tICcuL29ic2VydmFibGUvb2YnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJy4vb2JzZXJ2YWJsZS90aHJvd0Vycm9yJztcbmV4cG9ydCB2YXIgTm90aWZpY2F0aW9uS2luZDtcbi8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChOb3RpZmljYXRpb25LaW5kKSB7XG4gICAgTm90aWZpY2F0aW9uS2luZFtcIk5FWFRcIl0gPSBcIk5cIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiRVJST1JcIl0gPSBcIkVcIjtcbiAgICBOb3RpZmljYXRpb25LaW5kW1wiQ09NUExFVEVcIl0gPSBcIkNcIjtcbn0pKE5vdGlmaWNhdGlvbktpbmQgfHwgKE5vdGlmaWNhdGlvbktpbmQgPSB7fSkpO1xudmFyIE5vdGlmaWNhdGlvbiA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24oa2luZCwgdmFsdWUsIGVycm9yKSB7XG4gICAgICAgIHRoaXMua2luZCA9IGtpbmQ7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0ga2luZCA9PT0gJ04nO1xuICAgIH1cbiAgICBOb3RpZmljYXRpb24ucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAob2JzZXJ2ZXIpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5uZXh0ICYmIG9ic2VydmVyLm5leHQodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBjYXNlICdFJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuZXJyb3IgJiYgb2JzZXJ2ZXIuZXJyb3IodGhpcy5lcnJvcik7XG4gICAgICAgICAgICBjYXNlICdDJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuY29tcGxldGUgJiYgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uIChuZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIGtpbmQgPSB0aGlzLmtpbmQ7XG4gICAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5leHQgJiYgbmV4dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgJ0UnOlxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvciAmJiBlcnJvcih0aGlzLmVycm9yKTtcbiAgICAgICAgICAgIGNhc2UgJ0MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBjb21wbGV0ZSAmJiBjb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24ucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uIChuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgICAgIGlmIChuZXh0T3JPYnNlcnZlciAmJiB0eXBlb2YgbmV4dE9yT2JzZXJ2ZXIubmV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JzZXJ2ZShuZXh0T3JPYnNlcnZlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTm90aWZpY2F0aW9uLnByb3RvdHlwZS50b09ic2VydmFibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBraW5kID0gdGhpcy5raW5kO1xuICAgICAgICBzd2l0Y2ggKGtpbmQpIHtcbiAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgJ0UnOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKHRoaXMuZXJyb3IpO1xuICAgICAgICAgICAgY2FzZSAnQyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kIHZhbHVlJyk7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlTmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ04nLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbi51bmRlZmluZWRWYWx1ZU5vdGlmaWNhdGlvbjtcbiAgICB9O1xuICAgIE5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24oJ0UnLCB1bmRlZmluZWQsIGVycik7XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb247XG4gICAgfTtcbiAgICBOb3RpZmljYXRpb24uY29tcGxldGVOb3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKCdDJyk7XG4gICAgTm90aWZpY2F0aW9uLnVuZGVmaW5lZFZhbHVlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbignTicsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIE5vdGlmaWNhdGlvbjtcbn0oKSk7XG5leHBvcnQgeyBOb3RpZmljYXRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU5vdGlmaWNhdGlvbi5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgIFBVUkVfSU1QT1JUU19FTkQgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTeW1ib2xJdGVyYXRvcigpIHtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCAhU3ltYm9sLml0ZXJhdG9yKSB7XG4gICAgICAgIHJldHVybiAnQEBpdGVyYXRvcic7XG4gICAgfVxuICAgIHJldHVybiBTeW1ib2wuaXRlcmF0b3I7XG59XG5leHBvcnQgdmFyIGl0ZXJhdG9yID0gLypAX19QVVJFX18qLyBnZXRTeW1ib2xJdGVyYXRvcigpO1xuZXhwb3J0IHZhciAkJGl0ZXJhdG9yID0gaXRlcmF0b3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pdGVyYXRvci5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgIFBVUkVfSU1QT1JUU19FTkQgKi9cbmV4cG9ydCBmdW5jdGlvbiBub29wKCkgeyB9XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ub29wLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCAgUFVSRV9JTVBPUlRTX0VORCAqL1xuZXhwb3J0IHZhciBvYnNlcnZhYmxlID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCAnQEBvYnNlcnZhYmxlJzsgfSkoKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9ic2VydmFibGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG52YXIgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbCgpIHtcbiAgICAgICAgRXJyb3IuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ29iamVjdCB1bnN1YnNjcmliZWQnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3InO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JJbXBsLnByb3RvdHlwZSA9IC8qQF9fUFVSRV9fKi8gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIHJldHVybiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGw7XG59KSgpO1xuZXhwb3J0IHZhciBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IE9iamVjdFVuc3Vic2NyaWJlZEVycm9ySW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPU9iamVjdFVuc3Vic2NyaWJlZEVycm9yLmpzLm1hcFxuIiwiY29uc3QgQmFzZVBhZ2UgPSByZXF1aXJlKCcuL3NyYy9CYXNlUGFnZScpO1xuY29uc3QgQmFzZU5vdGlmaWNhdGlvbiA9IHJlcXVpcmUoJy4vc3JjL0Jhc2VOb3RpZmljYXRpb24nKTtcbmNvbnN0IEFwcCA9IHJlcXVpcmUoJy4vc3JjL0FwcCcpO1xuY29uc3QgUHVibGljTm90aWZpY2F0aW9uSHViID0gcmVxdWlyZSgnLi9QdWJsaWNOb3RpZmljYXRpb25IdWInKTtcbmNvbnN0IFN0b3JhZ2VIdWIgPSByZXF1aXJlKCcuL1B1YmxpY1N0b3JhZ2VIdWInKTtcbmNvbnN0IEF1ZGlvSHViID0gcmVxdWlyZSgnLi9QdWJsaWNBdWRpb0h1YicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQmFzZVBhZ2UsXG4gIEJhc2VOb3RpZmljYXRpb24sXG4gIEFwcCxcbiAgTm90aWZpY2F0aW9uSHViOiBQdWJsaWNOb3RpZmljYXRpb25IdWIsXG4gIFN0b3JhZ2VIdWIsXG4gIEF1ZGlvSHViLFxufTtcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgIFBVUkVfSU1QT1JUU19FTkQgKi9cbnZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvckltcGwgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkge1xuICAgICAgICBFcnJvci5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgPSAnYXJndW1lbnQgb3V0IG9mIHJhbmdlJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yJztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIEFyZ3VtZW50T3V0T2ZSYW5nZUVycm9ySW1wbC5wcm90b3R5cGUgPSAvKkBfX1BVUkVfXyovIE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgICByZXR1cm4gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsO1xufSkoKTtcbmV4cG9ydCB2YXIgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBBcmd1bWVudE91dE9mUmFuZ2VFcnJvckltcGw7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bcmd1bWVudE91dE9mUmFuZ2VFcnJvci5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgIFBVUkVfSU1QT1JUU19FTkQgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0Z1bmN0aW9uLmpzLm1hcFxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5leHRlbmQgPSBleHRlbmQ7XG5leHBvcnRzLmluZGV4T2YgPSBpbmRleE9mO1xuZXhwb3J0cy5lc2NhcGVFeHByZXNzaW9uID0gZXNjYXBlRXhwcmVzc2lvbjtcbmV4cG9ydHMuaXNFbXB0eSA9IGlzRW1wdHk7XG5leHBvcnRzLmNyZWF0ZUZyYW1lID0gY3JlYXRlRnJhbWU7XG5leHBvcnRzLmJsb2NrUGFyYW1zID0gYmxvY2tQYXJhbXM7XG5leHBvcnRzLmFwcGVuZENvbnRleHRQYXRoID0gYXBwZW5kQ29udGV4dFBhdGg7XG52YXIgZXNjYXBlID0ge1xuICAnJic6ICcmYW1wOycsXG4gICc8JzogJyZsdDsnLFxuICAnPic6ICcmZ3Q7JyxcbiAgJ1wiJzogJyZxdW90OycsXG4gIFwiJ1wiOiAnJiN4Mjc7JyxcbiAgJ2AnOiAnJiN4NjA7JyxcbiAgJz0nOiAnJiN4M0Q7J1xufTtcblxudmFyIGJhZENoYXJzID0gL1smPD5cIidgPV0vZyxcbiAgICBwb3NzaWJsZSA9IC9bJjw+XCInYD1dLztcblxuZnVuY3Rpb24gZXNjYXBlQ2hhcihjaHIpIHtcbiAgcmV0dXJuIGVzY2FwZVtjaHJdO1xufVxuXG5mdW5jdGlvbiBleHRlbmQob2JqIC8qICwgLi4uc291cmNlICovKSB7XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIga2V5IGluIGFyZ3VtZW50c1tpXSkge1xuICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd1bWVudHNbaV0sIGtleSkpIHtcbiAgICAgICAgb2JqW2tleV0gPSBhcmd1bWVudHNbaV1ba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuXG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG5leHBvcnRzLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4vLyBTb3VyY2VkIGZyb20gbG9kYXNoXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvbG9kYXNoL2Jsb2IvbWFzdGVyL0xJQ0VOU0UudHh0XG4vKiBlc2xpbnQtZGlzYWJsZSBmdW5jLXN0eWxlICovXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJztcbn07XG4vLyBmYWxsYmFjayBmb3Igb2xkZXIgdmVyc2lvbnMgb2YgQ2hyb21lIGFuZCBTYWZhcmlcbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5pZiAoaXNGdW5jdGlvbigveC8pKSB7XG4gIGV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nICYmIHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBGdW5jdGlvbl0nO1xuICB9O1xufVxuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcblxuLyogZXNsaW50LWVuYWJsZSBmdW5jLXN0eWxlICovXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdG9TdHJpbmcuY2FsbCh2YWx1ZSkgPT09ICdbb2JqZWN0IEFycmF5XScgOiBmYWxzZTtcbn07XG5cbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG4vLyBPbGRlciBJRSB2ZXJzaW9ucyBkbyBub3QgZGlyZWN0bHkgc3VwcG9ydCBpbmRleE9mIHNvIHdlIG11c3QgaW1wbGVtZW50IG91ciBvd24sIHNhZGx5LlxuXG5mdW5jdGlvbiBpbmRleE9mKGFycmF5LCB2YWx1ZSkge1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAoYXJyYXlbaV0gPT09IHZhbHVlKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVFeHByZXNzaW9uKHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICAvLyBkb24ndCBlc2NhcGUgU2FmZVN0cmluZ3MsIHNpbmNlIHRoZXkncmUgYWxyZWFkeSBzYWZlXG4gICAgaWYgKHN0cmluZyAmJiBzdHJpbmcudG9IVE1MKSB7XG4gICAgICByZXR1cm4gc3RyaW5nLnRvSFRNTCgpO1xuICAgIH0gZWxzZSBpZiAoc3RyaW5nID09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9IGVsc2UgaWYgKCFzdHJpbmcpIHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyAnJztcbiAgICB9XG5cbiAgICAvLyBGb3JjZSBhIHN0cmluZyBjb252ZXJzaW9uIGFzIHRoaXMgd2lsbCBiZSBkb25lIGJ5IHRoZSBhcHBlbmQgcmVnYXJkbGVzcyBhbmRcbiAgICAvLyB0aGUgcmVnZXggdGVzdCB3aWxsIGRvIHRoaXMgdHJhbnNwYXJlbnRseSBiZWhpbmQgdGhlIHNjZW5lcywgY2F1c2luZyBpc3N1ZXMgaWZcbiAgICAvLyBhbiBvYmplY3QncyB0byBzdHJpbmcgaGFzIGVzY2FwZWQgY2hhcmFjdGVycyBpbiBpdC5cbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZztcbiAgfVxuXG4gIGlmICghcG9zc2libGUudGVzdChzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoYmFkQ2hhcnMsIGVzY2FwZUNoYXIpO1xufVxuXG5mdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gIGlmICghdmFsdWUgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmIChpc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRnJhbWUob2JqZWN0KSB7XG4gIHZhciBmcmFtZSA9IGV4dGVuZCh7fSwgb2JqZWN0KTtcbiAgZnJhbWUuX3BhcmVudCA9IG9iamVjdDtcbiAgcmV0dXJuIGZyYW1lO1xufVxuXG5mdW5jdGlvbiBibG9ja1BhcmFtcyhwYXJhbXMsIGlkcykge1xuICBwYXJhbXMucGF0aCA9IGlkcztcbiAgcmV0dXJuIHBhcmFtcztcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ29udGV4dFBhdGgoY29udGV4dFBhdGgsIGlkKSB7XG4gIHJldHVybiAoY29udGV4dFBhdGggPyBjb250ZXh0UGF0aCArICcuJyA6ICcnKSArIGlkO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMM1YwYVd4ekxtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3T3pzN096czdRVUZCUVN4SlFVRk5MRTFCUVUwc1IwRkJSenRCUVVOaUxFdEJRVWNzUlVGQlJTeFBRVUZQTzBGQlExb3NTMEZCUnl4RlFVRkZMRTFCUVUwN1FVRkRXQ3hMUVVGSExFVkJRVVVzVFVGQlRUdEJRVU5ZTEV0QlFVY3NSVUZCUlN4UlFVRlJPMEZCUTJJc1MwRkJSeXhGUVVGRkxGRkJRVkU3UVVGRFlpeExRVUZITEVWQlFVVXNVVUZCVVR0QlFVTmlMRXRCUVVjc1JVRkJSU3hSUVVGUk8wTkJRMlFzUTBGQlF6czdRVUZGUml4SlFVRk5MRkZCUVZFc1IwRkJSeXhaUVVGWk8wbEJRek5DTEZGQlFWRXNSMEZCUnl4WFFVRlhMRU5CUVVNN08wRkJSWHBDTEZOQlFWTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVOMlFpeFRRVUZQTEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenREUVVOd1FqczdRVUZGVFN4VFFVRlRMRTFCUVUwc1EwRkJReXhIUVVGSExHOUNRVUZ2UWp0QlFVTTFReXhQUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1UwRkJVeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTjZReXhUUVVGTExFbEJRVWtzUjBGQlJ5eEpRVUZKTEZOQlFWTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSVHRCUVVNMVFpeFZRVUZKTEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVVU3UVVGRE0wUXNWMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRQUVVNNVFqdExRVU5HTzBkQlEwWTdPMEZCUlVRc1UwRkJUeXhIUVVGSExFTkJRVU03UTBGRFdqczdRVUZGVFN4SlFVRkpMRkZCUVZFc1IwRkJSeXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEZGQlFWRXNRMEZCUXpzN096czdPMEZCUzJoRUxFbEJRVWtzVlVGQlZTeEhRVUZITEc5Q1FVRlRMRXRCUVVzc1JVRkJSVHRCUVVNdlFpeFRRVUZQTEU5QlFVOHNTMEZCU3l4TFFVRkxMRlZCUVZVc1EwRkJRenREUVVOd1F5eERRVUZET3pzN1FVRkhSaXhKUVVGSkxGVkJRVlVzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlR0QlFVTnVRaXhWUVU5UExGVkJRVlVzUjBGUWFrSXNWVUZCVlN4SFFVRkhMRlZCUVZNc1MwRkJTeXhGUVVGRk8wRkJRek5DTEZkQlEwVXNUMEZCVHl4TFFVRkxMRXRCUVVzc1ZVRkJWU3hKUVVNelFpeFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExHMUNRVUZ0UWl4RFFVTTFRenRIUVVOSUxFTkJRVU03UTBGRFNEdFJRVU5STEZWQlFWVXNSMEZCVml4VlFVRlZPenM3T3p0QlFVbGFMRWxCUVUwc1QwRkJUeXhIUVVOc1FpeExRVUZMTEVOQlFVTXNUMEZCVHl4SlFVTmlMRlZCUVZNc1MwRkJTeXhGUVVGRk8wRkJRMlFzVTBGQlR5eExRVUZMTEVsQlFVa3NUMEZCVHl4TFFVRkxMRXRCUVVzc1VVRkJVU3hIUVVOeVF5eFJRVUZSTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExHZENRVUZuUWl4SFFVTjZReXhMUVVGTExFTkJRVU03UTBGRFdDeERRVUZET3pzN096dEJRVWRITEZOQlFWTXNUMEZCVHl4RFFVRkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFVkJRVVU3UVVGRGNFTXNUMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTm9SQ3hSUVVGSkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4TFFVRkxMRVZCUVVVN1FVRkRkRUlzWVVGQlR5eERRVUZETEVOQlFVTTdTMEZEVmp0SFFVTkdPMEZCUTBRc1UwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dERRVU5ZT3p0QlFVVk5MRk5CUVZNc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTNaRExFMUJRVWtzVDBGQlR5eE5RVUZOTEV0QlFVc3NVVUZCVVN4RlFVRkZPenRCUVVVNVFpeFJRVUZKTEUxQlFVMHNTVUZCU1N4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRek5DTEdGQlFVOHNUVUZCVFN4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRE8wdEJRM2hDTEUxQlFVMHNTVUZCU1N4TlFVRk5MRWxCUVVrc1NVRkJTU3hGUVVGRk8wRkJRM3BDTEdGQlFVOHNSVUZCUlN4RFFVRkRPMHRCUTFnc1RVRkJUU3hKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEyeENMR0ZCUVU4c1RVRkJUU3hIUVVGSExFVkJRVVVzUTBGQlF6dExRVU53UWpzN096czdRVUZMUkN4VlFVRk5MRWRCUVVjc1JVRkJSU3hIUVVGSExFMUJRVTBzUTBGQlF6dEhRVU4wUWpzN1FVRkZSQ3hOUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSVHRCUVVNeFFpeFhRVUZQTEUxQlFVMHNRMEZCUXp0SFFVTm1PMEZCUTBRc1UwRkJUeXhOUVVGTkxFTkJRVU1zVDBGQlR5eERRVUZETEZGQlFWRXNSVUZCUlN4VlFVRlZMRU5CUVVNc1EwRkJRenREUVVNM1F6czdRVUZGVFN4VFFVRlRMRTlCUVU4c1EwRkJReXhMUVVGTExFVkJRVVU3UVVGRE4wSXNUVUZCU1N4RFFVRkRMRXRCUVVzc1NVRkJTU3hMUVVGTExFdEJRVXNzUTBGQlF5eEZRVUZGTzBGQlEzcENMRmRCUVU4c1NVRkJTU3hEUVVGRE8wZEJRMklzVFVGQlRTeEpRVUZKTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNSVUZCUlR0QlFVTXZReXhYUVVGUExFbEJRVWtzUTBGQlF6dEhRVU5pTEUxQlFVMDdRVUZEVEN4WFFVRlBMRXRCUVVzc1EwRkJRenRIUVVOa08wTkJRMFk3TzBGQlJVMHNVMEZCVXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hGUVVGRk8wRkJRMnhETEUxQlFVa3NTMEZCU3l4SFFVRkhMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETDBJc1QwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRVUZEZGtJc1UwRkJUeXhMUVVGTExFTkJRVU03UTBGRFpEczdRVUZGVFN4VFFVRlRMRmRCUVZjc1EwRkJReXhOUVVGTkxFVkJRVVVzUjBGQlJ5eEZRVUZGTzBGQlEzWkRMRkZCUVUwc1EwRkJReXhKUVVGSkxFZEJRVWNzUjBGQlJ5eERRVUZETzBGQlEyeENMRk5CUVU4c1RVRkJUU3hEUVVGRE8wTkJRMlk3TzBGQlJVMHNVMEZCVXl4cFFrRkJhVUlzUTBGQlF5eFhRVUZYTEVWQlFVVXNSVUZCUlN4RlFVRkZPMEZCUTJwRUxGTkJRVThzUTBGQlF5eFhRVUZYTEVkQlFVY3NWMEZCVnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVUVzUjBGQlNTeEZRVUZGTEVOQlFVTTdRMEZEY0VRaUxDSm1hV3hsSWpvaWRYUnBiSE11YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmpiMjV6ZENCbGMyTmhjR1VnUFNCN1hHNGdJQ2NtSnpvZ0p5WmhiWEE3Snl4Y2JpQWdKenduT2lBbkpteDBPeWNzWEc0Z0lDYytKem9nSnlabmREc25MRnh1SUNBblhDSW5PaUFuSm5GMWIzUTdKeXhjYmlBZ1hDSW5YQ0k2SUNjbUkzZ3lOenNuTEZ4dUlDQW5ZQ2M2SUNjbUkzZzJNRHNuTEZ4dUlDQW5QU2M2SUNjbUkzZ3pSRHNuWEc1OU8xeHVYRzVqYjI1emRDQmlZV1JEYUdGeWN5QTlJQzliSmp3K1hDSW5ZRDFkTDJjc1hHNGdJSEJ2YzNOcFlteGxJRDBnTDFzbVBENWNJaWRnUFYwdk8xeHVYRzVtZFc1amRHbHZiaUJsYzJOaGNHVkRhR0Z5S0dOb2Npa2dlMXh1SUNCeVpYUjFjbTRnWlhOallYQmxXMk5vY2wwN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJsZUhSbGJtUW9iMkpxSUM4cUlDd2dMaTR1YzI5MWNtTmxJQ292S1NCN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBeE95QnBJRHdnWVhKbmRXMWxiblJ6TG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2EyVjVJR2x1SUdGeVozVnRaVzUwYzF0cFhTa2dlMXh1SUNBZ0lDQWdhV1lnS0U5aWFtVmpkQzV3Y205MGIzUjVjR1V1YUdGelQzZHVVSEp2Y0dWeWRIa3VZMkZzYkNoaGNtZDFiV1Z1ZEhOYmFWMHNJR3RsZVNrcElIdGNiaUFnSUNBZ0lDQWdiMkpxVzJ0bGVWMGdQU0JoY21kMWJXVnVkSE5iYVYxYmEyVjVYVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUgxY2JseHVJQ0J5WlhSMWNtNGdiMkpxTzF4dWZWeHVYRzVsZUhCdmNuUWdiR1YwSUhSdlUzUnlhVzVuSUQwZ1QySnFaV04wTG5CeWIzUnZkSGx3WlM1MGIxTjBjbWx1Wnp0Y2JseHVMeThnVTI5MWNtTmxaQ0JtY205dElHeHZaR0Z6YUZ4dUx5OGdhSFIwY0hNNkx5OW5hWFJvZFdJdVkyOXRMMkpsYzNScFpXcHpMMnh2WkdGemFDOWliRzlpTDIxaGMzUmxjaTlNU1VORlRsTkZMblI0ZEZ4dUx5b2daWE5zYVc1MExXUnBjMkZpYkdVZ1puVnVZeTF6ZEhsc1pTQXFMMXh1YkdWMElHbHpSblZ1WTNScGIyNGdQU0JtZFc1amRHbHZiaWgyWVd4MVpTa2dlMXh1SUNCeVpYUjFjbTRnZEhsd1pXOW1JSFpoYkhWbElEMDlQU0FuWm5WdVkzUnBiMjRuTzF4dWZUdGNiaTh2SUdaaGJHeGlZV05ySUdadmNpQnZiR1JsY2lCMlpYSnphVzl1Y3lCdlppQkRhSEp2YldVZ1lXNWtJRk5oWm1GeWFWeHVMeW9nYVhOMFlXNWlkV3dnYVdkdWIzSmxJRzVsZUhRZ0tpOWNibWxtSUNocGMwWjFibU4wYVc5dUtDOTRMeWtwSUh0Y2JpQWdhWE5HZFc1amRHbHZiaUE5SUdaMWJtTjBhVzl1S0haaGJIVmxLU0I3WEc0Z0lDQWdjbVYwZFhKdUlDaGNiaUFnSUNBZ0lIUjVjR1Z2WmlCMllXeDFaU0E5UFQwZ0oyWjFibU4wYVc5dUp5QW1KbHh1SUNBZ0lDQWdkRzlUZEhKcGJtY3VZMkZzYkNoMllXeDFaU2tnUFQwOUlDZGJiMkpxWldOMElFWjFibU4wYVc5dVhTZGNiaUFnSUNBcE8xeHVJQ0I5TzF4dWZWeHVaWGh3YjNKMElIc2dhWE5HZFc1amRHbHZiaUI5TzF4dUx5b2daWE5zYVc1MExXVnVZV0pzWlNCbWRXNWpMWE4wZVd4bElDb3ZYRzVjYmk4cUlHbHpkR0Z1WW5Wc0lHbG5ibTl5WlNCdVpYaDBJQ292WEc1bGVIQnZjblFnWTI5dWMzUWdhWE5CY25KaGVTQTlYRzRnSUVGeWNtRjVMbWx6UVhKeVlYa2dmSHhjYmlBZ1puVnVZM1JwYjI0b2RtRnNkV1VwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkbUZzZFdVZ0ppWWdkSGx3Wlc5bUlIWmhiSFZsSUQwOVBTQW5iMkpxWldOMEoxeHVJQ0FnSUNBZ1B5QjBiMU4wY21sdVp5NWpZV3hzS0haaGJIVmxLU0E5UFQwZ0oxdHZZbXBsWTNRZ1FYSnlZWGxkSjF4dUlDQWdJQ0FnT2lCbVlXeHpaVHRjYmlBZ2ZUdGNibHh1THk4Z1QyeGtaWElnU1VVZ2RtVnljMmx2Ym5NZ1pHOGdibTkwSUdScGNtVmpkR3g1SUhOMWNIQnZjblFnYVc1a1pYaFBaaUJ6YnlCM1pTQnRkWE4wSUdsdGNHeGxiV1Z1ZENCdmRYSWdiM2R1TENCellXUnNlUzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJwYm1SbGVFOW1LR0Z5Y21GNUxDQjJZV3gxWlNrZ2UxeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Dd2diR1Z1SUQwZ1lYSnlZWGt1YkdWdVozUm9PeUJwSUR3Z2JHVnVPeUJwS3lzcElIdGNiaUFnSUNCcFppQW9ZWEp5WVhsYmFWMGdQVDA5SUhaaGJIVmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdhVHRjYmlBZ0lDQjlYRzRnSUgxY2JpQWdjbVYwZFhKdUlDMHhPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1pYTmpZWEJsUlhod2NtVnpjMmx2YmloemRISnBibWNwSUh0Y2JpQWdhV1lnS0hSNWNHVnZaaUJ6ZEhKcGJtY2dJVDA5SUNkemRISnBibWNuS1NCN1hHNGdJQ0FnTHk4Z1pHOXVKM1FnWlhOallYQmxJRk5oWm1WVGRISnBibWR6TENCemFXNWpaU0IwYUdWNUozSmxJR0ZzY21WaFpIa2djMkZtWlZ4dUlDQWdJR2xtSUNoemRISnBibWNnSmlZZ2MzUnlhVzVuTG5SdlNGUk5UQ2tnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSE4wY21sdVp5NTBiMGhVVFV3b0tUdGNiaUFnSUNCOUlHVnNjMlVnYVdZZ0tITjBjbWx1WnlBOVBTQnVkV3hzS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnSnljN1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNnaGMzUnlhVzVuS1NCN1hHNGdJQ0FnSUNCeVpYUjFjbTRnYzNSeWFXNW5JQ3NnSnljN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1JtOXlZMlVnWVNCemRISnBibWNnWTI5dWRtVnljMmx2YmlCaGN5QjBhR2x6SUhkcGJHd2dZbVVnWkc5dVpTQmllU0IwYUdVZ1lYQndaVzVrSUhKbFoyRnlaR3hsYzNNZ1lXNWtYRzRnSUNBZ0x5OGdkR2hsSUhKbFoyVjRJSFJsYzNRZ2QybHNiQ0JrYnlCMGFHbHpJSFJ5WVc1emNHRnlaVzUwYkhrZ1ltVm9hVzVrSUhSb1pTQnpZMlZ1WlhNc0lHTmhkWE5wYm1jZ2FYTnpkV1Z6SUdsbVhHNGdJQ0FnTHk4Z1lXNGdiMkpxWldOMEozTWdkRzhnYzNSeWFXNW5JR2hoY3lCbGMyTmhjR1ZrSUdOb1lYSmhZM1JsY25NZ2FXNGdhWFF1WEc0Z0lDQWdjM1J5YVc1bklEMGdKeWNnS3lCemRISnBibWM3WEc0Z0lIMWNibHh1SUNCcFppQW9JWEJ2YzNOcFlteGxMblJsYzNRb2MzUnlhVzVuS1NrZ2UxeHVJQ0FnSUhKbGRIVnliaUJ6ZEhKcGJtYzdYRzRnSUgxY2JpQWdjbVYwZFhKdUlITjBjbWx1Wnk1eVpYQnNZV05sS0dKaFpFTm9ZWEp6TENCbGMyTmhjR1ZEYUdGeUtUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdselJXMXdkSGtvZG1Gc2RXVXBJSHRjYmlBZ2FXWWdLQ0YyWVd4MVpTQW1KaUIyWVd4MVpTQWhQVDBnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5SUdWc2MyVWdhV1lnS0dselFYSnlZWGtvZG1Gc2RXVXBJQ1ltSUhaaGJIVmxMbXhsYm1kMGFDQTlQVDBnTUNrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwY25WbE8xeHVJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lISmxkSFZ5YmlCbVlXeHpaVHRjYmlBZ2ZWeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTNKbFlYUmxSbkpoYldVb2IySnFaV04wS1NCN1hHNGdJR3hsZENCbWNtRnRaU0E5SUdWNGRHVnVaQ2g3ZlN3Z2IySnFaV04wS1R0Y2JpQWdabkpoYldVdVgzQmhjbVZ1ZENBOUlHOWlhbVZqZER0Y2JpQWdjbVYwZFhKdUlHWnlZVzFsTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZbXh2WTJ0UVlYSmhiWE1vY0dGeVlXMXpMQ0JwWkhNcElIdGNiaUFnY0dGeVlXMXpMbkJoZEdnZ1BTQnBaSE03WEc0Z0lISmxkSFZ5YmlCd1lYSmhiWE03WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQmhjSEJsYm1SRGIyNTBaWGgwVUdGMGFDaGpiMjUwWlhoMFVHRjBhQ3dnYVdRcElIdGNiaUFnY21WMGRYSnVJQ2hqYjI1MFpYaDBVR0YwYUNBL0lHTnZiblJsZUhSUVlYUm9JQ3NnSnk0bklEb2dKeWNwSUNzZ2FXUTdYRzU5WEc0aVhYMD1cbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgIFBVUkVfSU1QT1JUU19FTkQgKi9cbnZhciBFbXB0eUVycm9ySW1wbCA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHtcbiAgICAgICAgRXJyb3IuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ25vIGVsZW1lbnRzIGluIHNlcXVlbmNlJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ0VtcHR5RXJyb3InO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgRW1wdHlFcnJvckltcGwucHJvdG90eXBlID0gLypAX19QVVJFX18qLyBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIEVtcHR5RXJyb3JJbXBsO1xufSkoKTtcbmV4cG9ydCB2YXIgRW1wdHlFcnJvciA9IEVtcHR5RXJyb3JJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RW1wdHlFcnJvci5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX21hcCxfb2JzZXJ2YWJsZV9mcm9tLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi9tYXAnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4uL29ic2VydmFibGUvZnJvbSc7XG5pbXBvcnQgeyBTaW1wbGVPdXRlclN1YnNjcmliZXIsIFNpbXBsZUlubmVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUgfSBmcm9tICcuLi9pbm5lclN1YnNjcmliZSc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IsIGNvbmN1cnJlbnQpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5waXBlKG1lcmdlTWFwKGZ1bmN0aW9uIChhLCBpKSB7IHJldHVybiBmcm9tKHByb2plY3QoYSwgaSkpLnBpcGUobWFwKGZ1bmN0aW9uIChiLCBpaSkgeyByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYSwgYiwgaSwgaWkpOyB9KSk7IH0sIGNvbmN1cnJlbnQpKTsgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnbnVtYmVyJykge1xuICAgICAgICBjb25jdXJyZW50ID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgTWVyZ2VNYXBPcGVyYXRvcihwcm9qZWN0LCBjb25jdXJyZW50KSk7IH07XG59XG52YXIgTWVyZ2VNYXBPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBNZXJnZU1hcE9wZXJhdG9yKHByb2plY3QsIGNvbmN1cnJlbnQpIHtcbiAgICAgICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgY29uY3VycmVudCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICB0aGlzLmNvbmN1cnJlbnQgPSBjb25jdXJyZW50O1xuICAgIH1cbiAgICBNZXJnZU1hcE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IE1lcmdlTWFwU3Vic2NyaWJlcihvYnNlcnZlciwgdGhpcy5wcm9qZWN0LCB0aGlzLmNvbmN1cnJlbnQpKTtcbiAgICB9O1xuICAgIHJldHVybiBNZXJnZU1hcE9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydCB7IE1lcmdlTWFwT3BlcmF0b3IgfTtcbnZhciBNZXJnZU1hcFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoTWVyZ2VNYXBTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1lcmdlTWFwU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJvamVjdCwgY29uY3VycmVudCkge1xuICAgICAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICAgICAgX3RoaXMuY29uY3VycmVudCA9IGNvbmN1cnJlbnQ7XG4gICAgICAgIF90aGlzLmhhc0NvbXBsZXRlZCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgX3RoaXMuYWN0aXZlID0gMDtcbiAgICAgICAgX3RoaXMuaW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIE1lcmdlTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlIDwgdGhpcy5jb25jdXJyZW50KSB7XG4gICAgICAgICAgICB0aGlzLl90cnlOZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBNZXJnZU1hcFN1YnNjcmliZXIucHJvdG90eXBlLl90cnlOZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgrKztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJvamVjdCh2YWx1ZSwgaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFjdGl2ZSsrO1xuICAgICAgICB0aGlzLl9pbm5lclN1YihyZXN1bHQpO1xuICAgIH07XG4gICAgTWVyZ2VNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5faW5uZXJTdWIgPSBmdW5jdGlvbiAoaXNoKSB7XG4gICAgICAgIHZhciBpbm5lclN1YnNjcmliZXIgPSBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHRoaXMpO1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBkZXN0aW5hdGlvbi5hZGQoaW5uZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaXB0aW9uID0gaW5uZXJTdWJzY3JpYmUoaXNoLCBpbm5lclN1YnNjcmliZXIpO1xuICAgICAgICBpZiAoaW5uZXJTdWJzY3JpcHRpb24gIT09IGlubmVyU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKGlubmVyU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWVyZ2VNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlID09PSAwICYmIHRoaXMuYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIE1lcmdlTWFwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChpbm5lclZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICB9O1xuICAgIE1lcmdlTWFwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgdGhpcy5hY3RpdmUtLTtcbiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KGJ1ZmZlci5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZSA9PT0gMCAmJiB0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gTWVyZ2VNYXBTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IE1lcmdlTWFwU3Vic2NyaWJlciB9O1xuZXhwb3J0IHZhciBmbGF0TWFwID0gbWVyZ2VNYXA7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZU1hcC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX3V0aWxfc3Vic2NyaWJlVG9BcnJheSxfc2NoZWR1bGVkX3NjaGVkdWxlQXJyYXkgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgc3Vic2NyaWJlVG9BcnJheSB9IGZyb20gJy4uL3V0aWwvc3Vic2NyaWJlVG9BcnJheSc7XG5pbXBvcnQgeyBzY2hlZHVsZUFycmF5IH0gZnJvbSAnLi4vc2NoZWR1bGVkL3NjaGVkdWxlQXJyYXknO1xuZXhwb3J0IGZ1bmN0aW9uIGZyb21BcnJheShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKCFzY2hlZHVsZXIpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZVRvQXJyYXkoaW5wdXQpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZyb21BcnJheS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1NjaGVkdWxlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2NoZWR1bGVyIH0gZnJvbSAnLi4vU2NoZWR1bGVyJztcbnZhciBBc3luY1NjaGVkdWxlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhBc3luY1NjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY1NjaGVkdWxlcihTY2hlZHVsZXJBY3Rpb24sIG5vdykge1xuICAgICAgICBpZiAobm93ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIG5vdyA9IFNjaGVkdWxlci5ub3c7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgU2NoZWR1bGVyQWN0aW9uLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoQXN5bmNTY2hlZHVsZXIuZGVsZWdhdGUgJiYgQXN5bmNTY2hlZHVsZXIuZGVsZWdhdGUgIT09IF90aGlzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyLmRlbGVnYXRlLm5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5vdygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hY3Rpb25zID0gW107XG4gICAgICAgIF90aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNTY2hlZHVsZXIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHdvcmssIGRlbGF5LCBzdGF0ZSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChBc3luY1NjaGVkdWxlci5kZWxlZ2F0ZSAmJiBBc3luY1NjaGVkdWxlci5kZWxlZ2F0ZSAhPT0gdGhpcykge1xuICAgICAgICAgICAgcmV0dXJuIEFzeW5jU2NoZWR1bGVyLmRlbGVnYXRlLnNjaGVkdWxlKHdvcmssIGRlbGF5LCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHdvcmssIGRlbGF5LCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jU2NoZWR1bGVyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uIChhY3Rpb24pIHtcbiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNTY2hlZHVsZXI7XG59KFNjaGVkdWxlcikpO1xuZXhwb3J0IHsgQXN5bmNTY2hlZHVsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jU2NoZWR1bGVyLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfU3Vic2NyaXB0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi9TdWJqZWN0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4vU3Vic2NyaXB0aW9uJztcbnZhciBBc3luY1N1YmplY3QgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQXN5bmNTdWJqZWN0LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFzeW5jU3ViamVjdCgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbHVlID0gbnVsbDtcbiAgICAgICAgX3RoaXMuaGFzTmV4dCA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBpZiAodGhpcy5oYXNFcnJvcikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aGlzLnRocm93bkVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBTdWJzY3JpcHRpb24uRU1QVFk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5oYXNDb21wbGV0ZWQgJiYgdGhpcy5oYXNOZXh0KSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodGhpcy52YWx1ZSk7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm4gU3Vic2NyaXB0aW9uLkVNUFRZO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9zdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIEFzeW5jU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzQ29tcGxldGVkKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmhhc05leHQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY1N1YmplY3QucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jU3ViamVjdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzTmV4dCkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgdGhpcy52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEFzeW5jU3ViamVjdDtcbn0oU3ViamVjdCkpO1xuZXhwb3J0IHsgQXN5bmNTdWJqZWN0IH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1Bc3luY1N1YmplY3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9BY3Rpb24gUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFjdGlvbiB9IGZyb20gJy4vQWN0aW9uJztcbnZhciBBc3luY0FjdGlvbiA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhBc3luY0FjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc3luY0FjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZCB8fCB0aGlzLnJlcXVlc3RBc3luY0lkKHNjaGVkdWxlciwgdGhpcy5pZCwgZGVsYXkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uIChzY2hlZHVsZXIsIGlkLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzZXRJbnRlcnZhbChzY2hlZHVsZXIuZmx1c2guYmluZChzY2hlZHVsZXIsIHRoaXMpLCBkZWxheSk7XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVsYXkgIT09IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gZGVsYXkgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgICB9XG4gICAgICAgIGNsZWFySW50ZXJ2YWwoaWQpO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgQXN5bmNBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbiAoc3RhdGUsIGRlbGF5KSB7XG4gICAgICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB2YXIgZXJyb3IgPSB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEFzeW5jQWN0aW9uLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTtcbiAgICAgICAgdmFyIGVycm9yVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLndvcmsoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBlcnJvcmVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGVycm9yVmFsdWUgPSAhIWUgJiYgZSB8fCBuZXcgRXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVycm9yZWQpIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvclZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBBc3luY0FjdGlvbi5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaWQgPSB0aGlzLmlkO1xuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIHZhciBpbmRleCA9IGFjdGlvbnMuaW5kZXhPZih0aGlzKTtcbiAgICAgICAgdGhpcy53b3JrID0gbnVsbDtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IG51bGw7XG4gICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IG51bGw7XG4gICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgICAgICAgIGFjdGlvbnMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaWQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWxheSA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gQXN5bmNBY3Rpb247XG59KEFjdGlvbikpO1xuZXhwb3J0IHsgQXN5bmNBY3Rpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzeW5jQWN0aW9uLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaXB0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xudmFyIEFjdGlvbiA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhBY3Rpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICB9XG4gICAgQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIHJldHVybiBBY3Rpb247XG59KFN1YnNjcmlwdGlvbikpO1xuZXhwb3J0IHsgQWN0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BY3Rpb24uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9pc0FycmF5IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuL2lzQXJyYXknO1xuZXhwb3J0IGZ1bmN0aW9uIGlzTnVtZXJpYyh2YWwpIHtcbiAgICByZXR1cm4gIWlzQXJyYXkodmFsKSAmJiAodmFsIC0gcGFyc2VGbG9hdCh2YWwpICsgMSkgPj0gMDtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzTnVtZXJpYy5qcy5tYXBcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYHNlbGZgLiAqL1xudmFyIGZyZWVTZWxmID0gdHlwZW9mIHNlbGYgPT0gJ29iamVjdCcgJiYgc2VsZiAmJiBzZWxmLk9iamVjdCA9PT0gT2JqZWN0ICYmIHNlbGY7XG5cbi8qKiBVc2VkIGFzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgb2JqZWN0LiAqL1xudmFyIHJvb3QgPSBmcmVlR2xvYmFsIHx8IGZyZWVTZWxmIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG5cbm1vZHVsZS5leHBvcnRzID0gcm9vdDtcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX29mLF9vcGVyYXRvcnNfY29uY2F0QWxsIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IG9mIH0gZnJvbSAnLi9vZic7XG5pbXBvcnQgeyBjb25jYXRBbGwgfSBmcm9tICcuLi9vcGVyYXRvcnMvY29uY2F0QWxsJztcbmV4cG9ydCBmdW5jdGlvbiBjb25jYXQoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmNhdEFsbCgpKG9mLmFwcGx5KHZvaWQgMCwgb2JzZXJ2YWJsZXMpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3N1YnNjcmliZVRvQXJyYXksX3N1YnNjcmliZVRvUHJvbWlzZSxfc3Vic2NyaWJlVG9JdGVyYWJsZSxfc3Vic2NyaWJlVG9PYnNlcnZhYmxlLF9pc0FycmF5TGlrZSxfaXNQcm9taXNlLF9pc09iamVjdCxfc3ltYm9sX2l0ZXJhdG9yLF9zeW1ib2xfb2JzZXJ2YWJsZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBzdWJzY3JpYmVUb0FycmF5IH0gZnJvbSAnLi9zdWJzY3JpYmVUb0FycmF5JztcbmltcG9ydCB7IHN1YnNjcmliZVRvUHJvbWlzZSB9IGZyb20gJy4vc3Vic2NyaWJlVG9Qcm9taXNlJztcbmltcG9ydCB7IHN1YnNjcmliZVRvSXRlcmFibGUgfSBmcm9tICcuL3N1YnNjcmliZVRvSXRlcmFibGUnO1xuaW1wb3J0IHsgc3Vic2NyaWJlVG9PYnNlcnZhYmxlIH0gZnJvbSAnLi9zdWJzY3JpYmVUb09ic2VydmFibGUnO1xuaW1wb3J0IHsgaXNBcnJheUxpa2UgfSBmcm9tICcuL2lzQXJyYXlMaWtlJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vaXNQcm9taXNlJztcbmltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnLi9pc09iamVjdCc7XG5pbXBvcnQgeyBpdGVyYXRvciBhcyBTeW1ib2xfaXRlcmF0b3IgfSBmcm9tICcuLi9zeW1ib2wvaXRlcmF0b3InO1xuaW1wb3J0IHsgb2JzZXJ2YWJsZSBhcyBTeW1ib2xfb2JzZXJ2YWJsZSB9IGZyb20gJy4uL3N5bWJvbC9vYnNlcnZhYmxlJztcbmV4cG9ydCB2YXIgc3Vic2NyaWJlVG8gPSBmdW5jdGlvbiAocmVzdWx0KSB7XG4gICAgaWYgKCEhcmVzdWx0ICYmIHR5cGVvZiByZXN1bHRbU3ltYm9sX29ic2VydmFibGVdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBzdWJzY3JpYmVUb09ic2VydmFibGUocmVzdWx0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNBcnJheUxpa2UocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlVG9BcnJheShyZXN1bHQpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlVG9Qcm9taXNlKHJlc3VsdCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKCEhcmVzdWx0ICYmIHR5cGVvZiByZXN1bHRbU3ltYm9sX2l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gc3Vic2NyaWJlVG9JdGVyYWJsZShyZXN1bHQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdmFyIHZhbHVlID0gaXNPYmplY3QocmVzdWx0KSA/ICdhbiBpbnZhbGlkIG9iamVjdCcgOiBcIidcIiArIHJlc3VsdCArIFwiJ1wiO1xuICAgICAgICB2YXIgbXNnID0gXCJZb3UgcHJvdmlkZWQgXCIgKyB2YWx1ZSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC5cIlxuICAgICAgICAgICAgKyAnIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBBcnJheSwgb3IgSXRlcmFibGUuJztcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihtc2cpO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY3JpYmVUby5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3N5bWJvbF9vYnNlcnZhYmxlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IG9ic2VydmFibGUgYXMgU3ltYm9sX29ic2VydmFibGUgfSBmcm9tICcuLi9zeW1ib2wvb2JzZXJ2YWJsZSc7XG5leHBvcnQgdmFyIHN1YnNjcmliZVRvT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIG9icyA9IG9ialtTeW1ib2xfb2JzZXJ2YWJsZV0oKTtcbiAgICAgICAgaWYgKHR5cGVvZiBvYnMuc3Vic2NyaWJlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9icy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjcmliZVRvT2JzZXJ2YWJsZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX2hvc3RSZXBvcnRFcnJvciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBob3N0UmVwb3J0RXJyb3IgfSBmcm9tICcuL2hvc3RSZXBvcnRFcnJvcic7XG5leHBvcnQgdmFyIHN1YnNjcmliZVRvUHJvbWlzZSA9IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycikgeyByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnIpOyB9KVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgaG9zdFJlcG9ydEVycm9yKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY3JpYmVUb1Byb21pc2UuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9zeW1ib2xfaXRlcmF0b3IgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgaXRlcmF0b3IgYXMgU3ltYm9sX2l0ZXJhdG9yIH0gZnJvbSAnLi4vc3ltYm9sL2l0ZXJhdG9yJztcbmV4cG9ydCB2YXIgc3Vic2NyaWJlVG9JdGVyYWJsZSA9IGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYWJsZVtTeW1ib2xfaXRlcmF0b3JdKCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0gdm9pZCAwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpdGVtID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLmRvbmUpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3IucmV0dXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLnJldHVybikge1xuICAgICAgICAgICAgICAgICAgICBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3Vic2NyaWJlcjtcbiAgICB9O1xufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjcmliZVRvSXRlcmFibGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG5leHBvcnQgZnVuY3Rpb24gaG9zdFJlcG9ydEVycm9yKGVycikge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyB0aHJvdyBlcnI7IH0sIDApO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aG9zdFJlcG9ydEVycm9yLmpzLm1hcFxuIiwiLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGFuIGBBcnJheWAgb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcnJheShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheShkb2N1bWVudC5ib2R5LmNoaWxkcmVuKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KCdhYmMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0FycmF5KF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheTtcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3V0aWxfaXNTY2hlZHVsZXIsX2Zyb21BcnJheSxfc2NoZWR1bGVkX3NjaGVkdWxlQXJyYXkgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgaXNTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2lzU2NoZWR1bGVyJztcbmltcG9ydCB7IGZyb21BcnJheSB9IGZyb20gJy4vZnJvbUFycmF5JztcbmltcG9ydCB7IHNjaGVkdWxlQXJyYXkgfSBmcm9tICcuLi9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheSc7XG5leHBvcnQgZnVuY3Rpb24gb2YoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgaWYgKGlzU2NoZWR1bGVyKHNjaGVkdWxlcikpIHtcbiAgICAgICAgYXJncy5wb3AoKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXkoYXJncywgc2NoZWR1bGVyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmcm9tQXJyYXkoYXJncyk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2YuanMubWFwXG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG52YXIgZXJyb3JQcm9wcyA9IFsnZGVzY3JpcHRpb24nLCAnZmlsZU5hbWUnLCAnbGluZU51bWJlcicsICdlbmRMaW5lTnVtYmVyJywgJ21lc3NhZ2UnLCAnbmFtZScsICdudW1iZXInLCAnc3RhY2snXTtcblxuZnVuY3Rpb24gRXhjZXB0aW9uKG1lc3NhZ2UsIG5vZGUpIHtcbiAgdmFyIGxvYyA9IG5vZGUgJiYgbm9kZS5sb2MsXG4gICAgICBsaW5lID0gdW5kZWZpbmVkLFxuICAgICAgZW5kTGluZU51bWJlciA9IHVuZGVmaW5lZCxcbiAgICAgIGNvbHVtbiA9IHVuZGVmaW5lZCxcbiAgICAgIGVuZENvbHVtbiA9IHVuZGVmaW5lZDtcblxuICBpZiAobG9jKSB7XG4gICAgbGluZSA9IGxvYy5zdGFydC5saW5lO1xuICAgIGVuZExpbmVOdW1iZXIgPSBsb2MuZW5kLmxpbmU7XG4gICAgY29sdW1uID0gbG9jLnN0YXJ0LmNvbHVtbjtcbiAgICBlbmRDb2x1bW4gPSBsb2MuZW5kLmNvbHVtbjtcblxuICAgIG1lc3NhZ2UgKz0gJyAtICcgKyBsaW5lICsgJzonICsgY29sdW1uO1xuICB9XG5cbiAgdmFyIHRtcCA9IEVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5jYWxsKHRoaXMsIG1lc3NhZ2UpO1xuXG4gIC8vIFVuZm9ydHVuYXRlbHkgZXJyb3JzIGFyZSBub3QgZW51bWVyYWJsZSBpbiBDaHJvbWUgKGF0IGxlYXN0KSwgc28gYGZvciBwcm9wIGluIHRtcGAgZG9lc24ndCB3b3JrLlxuICBmb3IgKHZhciBpZHggPSAwOyBpZHggPCBlcnJvclByb3BzLmxlbmd0aDsgaWR4KyspIHtcbiAgICB0aGlzW2Vycm9yUHJvcHNbaWR4XV0gPSB0bXBbZXJyb3JQcm9wc1tpZHhdXTtcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEV4Y2VwdGlvbik7XG4gIH1cblxuICB0cnkge1xuICAgIGlmIChsb2MpIHtcbiAgICAgIHRoaXMubGluZU51bWJlciA9IGxpbmU7XG4gICAgICB0aGlzLmVuZExpbmVOdW1iZXIgPSBlbmRMaW5lTnVtYmVyO1xuXG4gICAgICAvLyBXb3JrIGFyb3VuZCBpc3N1ZSB1bmRlciBzYWZhcmkgd2hlcmUgd2UgY2FuJ3QgZGlyZWN0bHkgc2V0IHRoZSBjb2x1bW4gdmFsdWVcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29sdW1uJywge1xuICAgICAgICAgIHZhbHVlOiBjb2x1bW4sXG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbmRDb2x1bW4nLCB7XG4gICAgICAgICAgdmFsdWU6IGVuZENvbHVtbixcbiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIHRoaXMuZW5kQ29sdW1uID0gZW5kQ29sdW1uO1xuICAgICAgfVxuICAgIH1cbiAgfSBjYXRjaCAobm9wKSB7XG4gICAgLyogSWdub3JlIGlmIHRoZSBicm93c2VyIGlzIHZlcnkgcGFydGljdWxhciAqL1xuICB9XG59XG5cbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gRXhjZXB0aW9uO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyVjRZMlZ3ZEdsdmJpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3UVVGQlFTeEpRVUZOTEZWQlFWVXNSMEZCUnl4RFFVTnFRaXhoUVVGaExFVkJRMklzVlVGQlZTeEZRVU5XTEZsQlFWa3NSVUZEV2l4bFFVRmxMRVZCUTJZc1UwRkJVeXhGUVVOVUxFMUJRVTBzUlVGRFRpeFJRVUZSTEVWQlExSXNUMEZCVHl4RFFVTlNMRU5CUVVNN08wRkJSVVlzVTBGQlV5eFRRVUZUTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1JVRkJSVHRCUVVOb1F5eE5RVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRWxCUVVrc1NVRkJTU3hEUVVGRExFZEJRVWM3VFVGRGVFSXNTVUZCU1N4WlFVRkJPMDFCUTBvc1lVRkJZU3haUVVGQk8wMUJRMklzVFVGQlRTeFpRVUZCTzAxQlEwNHNVMEZCVXl4WlFVRkJMRU5CUVVNN08wRkJSVm9zVFVGQlNTeEhRVUZITEVWQlFVVTdRVUZEVUN4UlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTTdRVUZEZEVJc2FVSkJRV0VzUjBGQlJ5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVNM1FpeFZRVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03UVVGRE1VSXNZVUZCVXl4SFFVRkhMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZET3p0QlFVVXpRaXhYUVVGUExFbEJRVWtzUzBGQlN5eEhRVUZITEVsQlFVa3NSMEZCUnl4SFFVRkhMRWRCUVVjc1RVRkJUU3hEUVVGRE8wZEJRM2hET3p0QlFVVkVMRTFCUVVrc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eFRRVUZUTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdPenRCUVVjeFJDeFBRVUZMTEVsQlFVa3NSMEZCUnl4SFFVRkhMRU5CUVVNc1JVRkJSU3hIUVVGSExFZEJRVWNzVlVGQlZTeERRVUZETEUxQlFVMHNSVUZCUlN4SFFVRkhMRVZCUVVVc1JVRkJSVHRCUVVOb1JDeFJRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8wZEJRemxET3pzN1FVRkhSQ3hOUVVGSkxFdEJRVXNzUTBGQlF5eHBRa0ZCYVVJc1JVRkJSVHRCUVVNelFpeFRRVUZMTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNRMEZCUXl4RFFVRkRPMGRCUXpGRE96dEJRVVZFTEUxQlFVazdRVUZEUml4UlFVRkpMRWRCUVVjc1JVRkJSVHRCUVVOUUxGVkJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTNaQ0xGVkJRVWtzUTBGQlF5eGhRVUZoTEVkQlFVY3NZVUZCWVN4RFFVRkRPenM3TzBGQlNXNURMRlZCUVVrc1RVRkJUU3hEUVVGRExHTkJRV01zUlVGQlJUdEJRVU42UWl4alFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUlVGQlJTeFJRVUZSTEVWQlFVVTdRVUZEY0VNc1pVRkJTeXhGUVVGRkxFMUJRVTA3UVVGRFlpeHZRa0ZCVlN4RlFVRkZMRWxCUVVrN1UwRkRha0lzUTBGQlF5eERRVUZETzBGQlEwZ3NZMEZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhKUVVGSkxFVkJRVVVzVjBGQlZ5eEZRVUZGTzBGQlEzWkRMR1ZCUVVzc1JVRkJSU3hUUVVGVE8wRkJRMmhDTEc5Q1FVRlZMRVZCUVVVc1NVRkJTVHRUUVVOcVFpeERRVUZETEVOQlFVTTdUMEZEU2l4TlFVRk5PMEZCUTB3c1dVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRVUZEY2tJc1dVRkJTU3hEUVVGRExGTkJRVk1zUjBGQlJ5eFRRVUZUTEVOQlFVTTdUMEZETlVJN1MwRkRSanRIUVVOR0xFTkJRVU1zVDBGQlR5eEhRVUZITEVWQlFVVTdPMGRCUldJN1EwRkRSanM3UVVGRlJDeFRRVUZUTEVOQlFVTXNVMEZCVXl4SFFVRkhMRWxCUVVrc1MwRkJTeXhGUVVGRkxFTkJRVU03TzNGQ1FVVnVRaXhUUVVGVElpd2labWxzWlNJNkltVjRZMlZ3ZEdsdmJpNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1OdmJuTjBJR1Z5Y205eVVISnZjSE1nUFNCYlhHNGdJQ2RrWlhOamNtbHdkR2x2Ymljc1hHNGdJQ2RtYVd4bFRtRnRaU2NzWEc0Z0lDZHNhVzVsVG5WdFltVnlKeXhjYmlBZ0oyVnVaRXhwYm1WT2RXMWlaWEluTEZ4dUlDQW5iV1Z6YzJGblpTY3NYRzRnSUNkdVlXMWxKeXhjYmlBZ0oyNTFiV0psY2ljc1hHNGdJQ2R6ZEdGamF5ZGNibDA3WEc1Y2JtWjFibU4wYVc5dUlFVjRZMlZ3ZEdsdmJpaHRaWE56WVdkbExDQnViMlJsS1NCN1hHNGdJR3hsZENCc2IyTWdQU0J1YjJSbElDWW1JRzV2WkdVdWJHOWpMRnh1SUNBZ0lHeHBibVVzWEc0Z0lDQWdaVzVrVEdsdVpVNTFiV0psY2l4Y2JpQWdJQ0JqYjJ4MWJXNHNYRzRnSUNBZ1pXNWtRMjlzZFcxdU8xeHVYRzRnSUdsbUlDaHNiMk1wSUh0Y2JpQWdJQ0JzYVc1bElEMGdiRzlqTG5OMFlYSjBMbXhwYm1VN1hHNGdJQ0FnWlc1a1RHbHVaVTUxYldKbGNpQTlJR3h2WXk1bGJtUXViR2x1WlR0Y2JpQWdJQ0JqYjJ4MWJXNGdQU0JzYjJNdWMzUmhjblF1WTI5c2RXMXVPMXh1SUNBZ0lHVnVaRU52YkhWdGJpQTlJR3h2WXk1bGJtUXVZMjlzZFcxdU8xeHVYRzRnSUNBZ2JXVnpjMkZuWlNBclBTQW5JQzBnSnlBcklHeHBibVVnS3lBbk9pY2dLeUJqYjJ4MWJXNDdYRzRnSUgxY2JseHVJQ0JzWlhRZ2RHMXdJRDBnUlhKeWIzSXVjSEp2ZEc5MGVYQmxMbU52Ym5OMGNuVmpkRzl5TG1OaGJHd29kR2hwY3l3Z2JXVnpjMkZuWlNrN1hHNWNiaUFnTHk4Z1ZXNW1iM0owZFc1aGRHVnNlU0JsY25KdmNuTWdZWEpsSUc1dmRDQmxiblZ0WlhKaFlteGxJR2x1SUVOb2NtOXRaU0FvWVhRZ2JHVmhjM1FwTENCemJ5QmdabTl5SUhCeWIzQWdhVzRnZEcxd1lDQmtiMlZ6YmlkMElIZHZjbXN1WEc0Z0lHWnZjaUFvYkdWMElHbGtlQ0E5SURBN0lHbGtlQ0E4SUdWeWNtOXlVSEp2Y0hNdWJHVnVaM1JvT3lCcFpIZ3JLeWtnZTF4dUlDQWdJSFJvYVhOYlpYSnliM0pRY205d2MxdHBaSGhkWFNBOUlIUnRjRnRsY25KdmNsQnliM0J6VzJsa2VGMWRPMXh1SUNCOVhHNWNiaUFnTHlvZ2FYTjBZVzVpZFd3Z2FXZHViM0psSUdWc2MyVWdLaTljYmlBZ2FXWWdLRVZ5Y205eUxtTmhjSFIxY21WVGRHRmphMVJ5WVdObEtTQjdYRzRnSUNBZ1JYSnliM0l1WTJGd2RIVnlaVk4wWVdOclZISmhZMlVvZEdocGN5d2dSWGhqWlhCMGFXOXVLVHRjYmlBZ2ZWeHVYRzRnSUhSeWVTQjdYRzRnSUNBZ2FXWWdLR3h2WXlrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVzYVc1bFRuVnRZbVZ5SUQwZ2JHbHVaVHRjYmlBZ0lDQWdJSFJvYVhNdVpXNWtUR2x1WlU1MWJXSmxjaUE5SUdWdVpFeHBibVZPZFcxaVpYSTdYRzVjYmlBZ0lDQWdJQzh2SUZkdmNtc2dZWEp2ZFc1a0lHbHpjM1ZsSUhWdVpHVnlJSE5oWm1GeWFTQjNhR1Z5WlNCM1pTQmpZVzRuZENCa2FYSmxZM1JzZVNCelpYUWdkR2hsSUdOdmJIVnRiaUIyWVd4MVpWeHVJQ0FnSUNBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHNWxlSFFnS2k5Y2JpQWdJQ0FnSUdsbUlDaFBZbXBsWTNRdVpHVm1hVzVsVUhKdmNHVnlkSGtwSUh0Y2JpQWdJQ0FnSUNBZ1QySnFaV04wTG1SbFptbHVaVkJ5YjNCbGNuUjVLSFJvYVhNc0lDZGpiMngxYlc0bkxDQjdYRzRnSUNBZ0lDQWdJQ0FnZG1Gc2RXVTZJR052YkhWdGJpeGNiaUFnSUNBZ0lDQWdJQ0JsYm5WdFpYSmhZbXhsT2lCMGNuVmxYRzRnSUNBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnSUNCUFltcGxZM1F1WkdWbWFXNWxVSEp2Y0dWeWRIa29kR2hwY3l3Z0oyVnVaRU52YkhWdGJpY3NJSHRjYmlBZ0lDQWdJQ0FnSUNCMllXeDFaVG9nWlc1a1EyOXNkVzF1TEZ4dUlDQWdJQ0FnSUNBZ0lHVnVkVzFsY21GaWJHVTZJSFJ5ZFdWY2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG1OdmJIVnRiaUE5SUdOdmJIVnRianRjYmlBZ0lDQWdJQ0FnZEdocGN5NWxibVJEYjJ4MWJXNGdQU0JsYm1SRGIyeDFiVzQ3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNCOUlHTmhkR05vSUNodWIzQXBJSHRjYmlBZ0lDQXZLaUJKWjI1dmNtVWdhV1lnZEdobElHSnliM2R6WlhJZ2FYTWdkbVZ5ZVNCd1lYSjBhV04xYkdGeUlDb3ZYRzRnSUgxY2JuMWNibHh1UlhoalpYQjBhVzl1TG5CeWIzUnZkSGx3WlNBOUlHNWxkeUJGY25KdmNpZ3BPMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JGZUdObGNIUnBiMjQ3WEc0aVhYMD1cbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX2lkZW50aXR5IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gcGlwZSgpIHtcbiAgICB2YXIgZm5zID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgZm5zW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7XG59XG5leHBvcnQgZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHtcbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gaWRlbnRpdHk7XG4gICAgfVxuICAgIGlmIChmbnMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmbnNbMF07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBwaXBlZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbiAocHJldiwgZm4pIHsgcmV0dXJuIGZuKHByZXYpOyB9LCBpbnB1dCk7XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBpcGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG52YXIgbmV4dEhhbmRsZSA9IDE7XG52YXIgUkVTT0xWRUQgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7IHJldHVybiAvKkBfX1BVUkVfXyovIFByb21pc2UucmVzb2x2ZSgpOyB9KSgpO1xudmFyIGFjdGl2ZUhhbmRsZXMgPSB7fTtcbmZ1bmN0aW9uIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUpIHtcbiAgICBpZiAoaGFuZGxlIGluIGFjdGl2ZUhhbmRsZXMpIHtcbiAgICAgICAgZGVsZXRlIGFjdGl2ZUhhbmRsZXNbaGFuZGxlXTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmV4cG9ydCB2YXIgSW1tZWRpYXRlID0ge1xuICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24gKGNiKSB7XG4gICAgICAgIHZhciBoYW5kbGUgPSBuZXh0SGFuZGxlKys7XG4gICAgICAgIGFjdGl2ZUhhbmRsZXNbaGFuZGxlXSA9IHRydWU7XG4gICAgICAgIFJFU09MVkVELnRoZW4oZnVuY3Rpb24gKCkgeyByZXR1cm4gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZSkgJiYgY2IoKTsgfSk7XG4gICAgICAgIHJldHVybiBoYW5kbGU7XG4gICAgfSxcbiAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24gKGhhbmRsZSkge1xuICAgICAgICBmaW5kQW5kQ2xlYXJIYW5kbGUoaGFuZGxlKTtcbiAgICB9LFxufTtcbmV4cG9ydCB2YXIgVGVzdFRvb2xzID0ge1xuICAgIHBlbmRpbmc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDtcbiAgICB9XG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9SW1tZWRpYXRlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfdXRpbF9JbW1lZGlhdGUsX0FzeW5jQWN0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBJbW1lZGlhdGUgfSBmcm9tICcuLi91dGlsL0ltbWVkaWF0ZSc7XG5pbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xudmFyIEFzYXBBY3Rpb24gPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQXNhcEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc2FwQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXNhcEFjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVsYXkgIT09IG51bGwgJiYgZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgICAgICBzY2hlZHVsZXIuYWN0aW9ucy5wdXNoKHRoaXMpO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlZCB8fCAoc2NoZWR1bGVyLnNjaGVkdWxlZCA9IEltbWVkaWF0ZS5zZXRJbW1lZGlhdGUoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCBudWxsKSkpO1xuICAgIH07XG4gICAgQXNhcEFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkgfHwgKGRlbGF5ID09PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVkdWxlci5hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgSW1tZWRpYXRlLmNsZWFySW1tZWRpYXRlKGlkKTtcbiAgICAgICAgICAgIHNjaGVkdWxlci5zY2hlZHVsZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIHJldHVybiBBc2FwQWN0aW9uO1xufShBc3luY0FjdGlvbikpO1xuZXhwb3J0IHsgQXNhcEFjdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QXNhcEFjdGlvbi5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX0FzYXBBY3Rpb24sX0FzYXBTY2hlZHVsZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgQXNhcEFjdGlvbiB9IGZyb20gJy4vQXNhcEFjdGlvbic7XG5pbXBvcnQgeyBBc2FwU2NoZWR1bGVyIH0gZnJvbSAnLi9Bc2FwU2NoZWR1bGVyJztcbmV4cG9ydCB2YXIgYXNhcFNjaGVkdWxlciA9IC8qQF9fUFVSRV9fKi8gbmV3IEFzYXBTY2hlZHVsZXIoQXNhcEFjdGlvbik7XG5leHBvcnQgdmFyIGFzYXAgPSBhc2FwU2NoZWR1bGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXNhcC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX0FzeW5jU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xudmFyIEFzYXBTY2hlZHVsZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQXNhcFNjaGVkdWxlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBBc2FwU2NoZWR1bGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFzYXBTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIGNvdW50ID0gYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgrK2luZGV4IDwgY291bnQgJiYgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgrK2luZGV4IDwgY291bnQgJiYgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQXNhcFNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydCB7IEFzYXBTY2hlZHVsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFzYXBTY2hlZHVsZXIuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG5leHBvcnQgdmFyIHJ4U3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IC8qQF9fUFVSRV9fKi8gU3ltYm9sKCdyeFN1YnNjcmliZXInKVxuICAgICAgICA6ICdAQHJ4U3Vic2NyaWJlcl8nICsgLypAX19QVVJFX18qLyBNYXRoLnJhbmRvbSgpO1xufSkoKTtcbmV4cG9ydCB2YXIgJCRyeFN1YnNjcmliZXIgPSByeFN1YnNjcmliZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yeFN1YnNjcmliZXIuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG52YXIgVW5zdWJzY3JpcHRpb25FcnJvckltcGwgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVW5zdWJzY3JpcHRpb25FcnJvckltcGwoZXJyb3JzKSB7XG4gICAgICAgIEVycm9yLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IGVycm9ycyA/XG4gICAgICAgICAgICBlcnJvcnMubGVuZ3RoICsgXCIgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcXG5cIiArIGVycm9ycy5tYXAoZnVuY3Rpb24gKGVyciwgaSkgeyByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBlcnIudG9TdHJpbmcoKTsgfSkuam9pbignXFxuICAnKSA6ICcnO1xuICAgICAgICB0aGlzLm5hbWUgPSAnVW5zdWJzY3JpcHRpb25FcnJvcic7XG4gICAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgVW5zdWJzY3JpcHRpb25FcnJvckltcGwucHJvdG90eXBlID0gLypAX19QVVJFX18qLyBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG4gICAgcmV0dXJuIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsO1xufSkoKTtcbmV4cG9ydCB2YXIgVW5zdWJzY3JpcHRpb25FcnJvciA9IFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VW5zdWJzY3JpcHRpb25FcnJvci5qcy5tYXBcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgb3B0aW9ucyA9IHt9O1xuICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgbm8tcGFyYW0tcmVhc3NpZ25cblxuXG4gIHVybCA9IHVybCAmJiB1cmwuX19lc01vZHVsZSA/IHVybC5kZWZhdWx0IDogdXJsO1xuXG4gIGlmICh0eXBlb2YgdXJsICE9PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfSAvLyBJZiB1cmwgaXMgYWxyZWFkeSB3cmFwcGVkIGluIHF1b3RlcywgcmVtb3ZlIHRoZW1cblxuXG4gIGlmICgvXlsnXCJdLipbJ1wiXSQvLnRlc3QodXJsKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIHVybCA9IHVybC5zbGljZSgxLCAtMSk7XG4gIH1cblxuICBpZiAob3B0aW9ucy5oYXNoKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdXJsICs9IG9wdGlvbnMuaGFzaDtcbiAgfSAvLyBTaG91bGQgdXJsIGJlIHdyYXBwZWQ/XG4gIC8vIFNlZSBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG5cblxuICBpZiAoL1tcIicoKSBcXHRcXG5dLy50ZXN0KHVybCkgfHwgb3B0aW9ucy5uZWVkUXVvdGVzKSB7XG4gICAgcmV0dXJuIFwiXFxcIlwiLmNvbmNhdCh1cmwucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLCBcIlxcXCJcIik7XG4gIH1cblxuICByZXR1cm4gdXJsO1xufTsiLCIvLyBDcmVhdGUgYSBzaW1wbGUgcGF0aCBhbGlhcyB0byBhbGxvdyBicm93c2VyaWZ5IHRvIHJlc29sdmVcbi8vIHRoZSBydW50aW1lIG9uIGEgc3VwcG9ydGVkIHBhdGguXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGlzdC9janMvaGFuZGxlYmFycy5ydW50aW1lJylbJ2RlZmF1bHQnXTtcbiIsInZhciBiYXNlSXNOYXRpdmUgPSByZXF1aXJlKCcuL19iYXNlSXNOYXRpdmUnKSxcbiAgICBnZXRWYWx1ZSA9IHJlcXVpcmUoJy4vX2dldFZhbHVlJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0TmF0aXZlO1xuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHJlZkNvdW50KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiByZWZDb3VudE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgUmVmQ291bnRPcGVyYXRvcihzb3VyY2UpKTtcbiAgICB9O1xufVxudmFyIFJlZkNvdW50T3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVmQ291bnRPcGVyYXRvcihjb25uZWN0YWJsZSkge1xuICAgICAgICB0aGlzLmNvbm5lY3RhYmxlID0gY29ubmVjdGFibGU7XG4gICAgfVxuICAgIFJlZkNvdW50T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHZhciBjb25uZWN0YWJsZSA9IHRoaXMuY29ubmVjdGFibGU7XG4gICAgICAgIGNvbm5lY3RhYmxlLl9yZWZDb3VudCsrO1xuICAgICAgICB2YXIgcmVmQ291bnRlciA9IG5ldyBSZWZDb3VudFN1YnNjcmliZXIoc3Vic2NyaWJlciwgY29ubmVjdGFibGUpO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTtcbiAgICAgICAgaWYgKCFyZWZDb3VudGVyLmNsb3NlZCkge1xuICAgICAgICAgICAgcmVmQ291bnRlci5jb25uZWN0aW9uID0gY29ubmVjdGFibGUuY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfTtcbiAgICByZXR1cm4gUmVmQ291bnRPcGVyYXRvcjtcbn0oKSk7XG52YXIgUmVmQ291bnRTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFJlZkNvdW50U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZWZDb3VudFN1YnNjcmliZXIoZGVzdGluYXRpb24sIGNvbm5lY3RhYmxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jb25uZWN0YWJsZSA9IGNvbm5lY3RhYmxlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFJlZkNvdW50U3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29ubmVjdGFibGUgPSB0aGlzLmNvbm5lY3RhYmxlO1xuICAgICAgICBpZiAoIWNvbm5lY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29ubmVjdGFibGUgPSBudWxsO1xuICAgICAgICB2YXIgcmVmQ291bnQgPSBjb25uZWN0YWJsZS5fcmVmQ291bnQ7XG4gICAgICAgIGlmIChyZWZDb3VudCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbm5lY3RhYmxlLl9yZWZDb3VudCA9IHJlZkNvdW50IC0gMTtcbiAgICAgICAgaWYgKHJlZkNvdW50ID4gMSkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29ubmVjdGlvbiA9IHRoaXMuY29ubmVjdGlvbjtcbiAgICAgICAgdmFyIHNoYXJlZENvbm5lY3Rpb24gPSBjb25uZWN0YWJsZS5fY29ubmVjdGlvbjtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbDtcbiAgICAgICAgaWYgKHNoYXJlZENvbm5lY3Rpb24gJiYgKCFjb25uZWN0aW9uIHx8IHNoYXJlZENvbm5lY3Rpb24gPT09IGNvbm5lY3Rpb24pKSB7XG4gICAgICAgICAgICBzaGFyZWRDb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSZWZDb3VudFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlZkNvdW50LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfc2NoZWR1bGVyX3F1ZXVlLF9TdWJzY3JpcHRpb24sX29wZXJhdG9yc19vYnNlcnZlT24sX3V0aWxfT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IsX1N1YmplY3RTdWJzY3JpcHRpb24gUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IHsgcXVldWUgfSBmcm9tICcuL3NjaGVkdWxlci9xdWV1ZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBPYnNlcnZlT25TdWJzY3JpYmVyIH0gZnJvbSAnLi9vcGVyYXRvcnMvb2JzZXJ2ZU9uJztcbmltcG9ydCB7IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yIH0gZnJvbSAnLi91dGlsL09iamVjdFVuc3Vic2NyaWJlZEVycm9yJztcbmltcG9ydCB7IFN1YmplY3RTdWJzY3JpcHRpb24gfSBmcm9tICcuL1N1YmplY3RTdWJzY3JpcHRpb24nO1xudmFyIFJlcGxheVN1YmplY3QgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmVwbGF5U3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZXBsYXlTdWJqZWN0KGJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcikge1xuICAgICAgICBpZiAoYnVmZmVyU2l6ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBidWZmZXJTaXplID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgICAgICB9XG4gICAgICAgIGlmICh3aW5kb3dUaW1lID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHdpbmRvd1RpbWUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy5fZXZlbnRzID0gW107XG4gICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBidWZmZXJTaXplIDwgMSA/IDEgOiBidWZmZXJTaXplO1xuICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IHdpbmRvd1RpbWUgPCAxID8gMSA6IHdpbmRvd1RpbWU7XG4gICAgICAgIGlmICh3aW5kb3dUaW1lID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgICAgIF90aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3cgPSB0cnVlO1xuICAgICAgICAgICAgX3RoaXMubmV4dCA9IF90aGlzLm5leHRJbmZpbml0ZVRpbWVXaW5kb3c7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfdGhpcy5uZXh0ID0gX3RoaXMubmV4dFRpbWVXaW5kb3c7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5uZXh0SW5maW5pdGVUaW1lV2luZG93ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciBfZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuICAgICAgICAgICAgX2V2ZW50cy5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChfZXZlbnRzLmxlbmd0aCA+IHRoaXMuX2J1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICBfZXZlbnRzLnNoaWZ0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5uZXh0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgIH07XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUubmV4dFRpbWVXaW5kb3cgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5fZXZlbnRzLnB1c2gobmV3IFJlcGxheUV2ZW50KHRoaXMuX2dldE5vdygpLCB2YWx1ZSkpO1xuICAgICAgICAgICAgdGhpcy5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMoKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSB0aGlzLl9pbmZpbml0ZVRpbWVXaW5kb3c7XG4gICAgICAgIHZhciBfZXZlbnRzID0gX2luZmluaXRlVGltZVdpbmRvdyA/IHRoaXMuX2V2ZW50cyA6IHRoaXMuX3RyaW1CdWZmZXJUaGVuR2V0RXZlbnRzKCk7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICAgICAgdmFyIGxlbiA9IF9ldmVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBPYmplY3RVbnN1YnNjcmliZWRFcnJvcigpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzLnB1c2goc3Vic2NyaWJlcik7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBuZXcgU3ViamVjdFN1YnNjcmlwdGlvbih0aGlzLCBzdWJzY3JpYmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZWR1bGVyKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzY3JpYmVyID0gbmV3IE9ic2VydmVPblN1YnNjcmliZXIoc3Vic2NyaWJlciwgc2NoZWR1bGVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKF9pbmZpbml0ZVRpbWVXaW5kb3cpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuICYmICFzdWJzY3JpYmVyLmNsb3NlZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KF9ldmVudHNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4gJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoX2V2ZW50c1tpXS52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IodGhpcy50aHJvd25FcnJvcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgUmVwbGF5U3ViamVjdC5wcm90b3R5cGUuX2dldE5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNjaGVkdWxlciB8fCBxdWV1ZSkubm93KCk7XG4gICAgfTtcbiAgICBSZXBsYXlTdWJqZWN0LnByb3RvdHlwZS5fdHJpbUJ1ZmZlclRoZW5HZXRFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBub3cgPSB0aGlzLl9nZXROb3coKTtcbiAgICAgICAgdmFyIF9idWZmZXJTaXplID0gdGhpcy5fYnVmZmVyU2l6ZTtcbiAgICAgICAgdmFyIF93aW5kb3dUaW1lID0gdGhpcy5fd2luZG93VGltZTtcbiAgICAgICAgdmFyIF9ldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICAgIHZhciBldmVudHNDb3VudCA9IF9ldmVudHMubGVuZ3RoO1xuICAgICAgICB2YXIgc3BsaWNlQ291bnQgPSAwO1xuICAgICAgICB3aGlsZSAoc3BsaWNlQ291bnQgPCBldmVudHNDb3VudCkge1xuICAgICAgICAgICAgaWYgKChub3cgLSBfZXZlbnRzW3NwbGljZUNvdW50XS50aW1lKSA8IF93aW5kb3dUaW1lKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGxpY2VDb3VudCsrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChldmVudHNDb3VudCA+IF9idWZmZXJTaXplKSB7XG4gICAgICAgICAgICBzcGxpY2VDb3VudCA9IE1hdGgubWF4KHNwbGljZUNvdW50LCBldmVudHNDb3VudCAtIF9idWZmZXJTaXplKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3BsaWNlQ291bnQgPiAwKSB7XG4gICAgICAgICAgICBfZXZlbnRzLnNwbGljZSgwLCBzcGxpY2VDb3VudCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9ldmVudHM7XG4gICAgfTtcbiAgICByZXR1cm4gUmVwbGF5U3ViamVjdDtcbn0oU3ViamVjdCkpO1xuZXhwb3J0IHsgUmVwbGF5U3ViamVjdCB9O1xudmFyIFJlcGxheUV2ZW50ID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlcGxheUV2ZW50KHRpbWUsIHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGltZSA9IHRpbWU7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuIFJlcGxheUV2ZW50O1xufSgpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVJlcGxheVN1YmplY3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0Vycm9yKGVycm9yLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoIXNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpOyB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikgeyByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoLCAwLCB7IGVycm9yOiBlcnJvciwgc3Vic2NyaWJlcjogc3Vic2NyaWJlciB9KTsgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZGlzcGF0Y2goX2EpIHtcbiAgICB2YXIgZXJyb3IgPSBfYS5lcnJvciwgc3Vic2NyaWJlciA9IF9hLnN1YnNjcmliZXI7XG4gICAgc3Vic2NyaWJlci5lcnJvcihlcnJvcik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvd0Vycm9yLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfdXRpbF9pc1NjaGVkdWxlcixfdXRpbF9pc0FycmF5LF9PdXRlclN1YnNjcmliZXIsX3V0aWxfc3Vic2NyaWJlVG9SZXN1bHQsX2Zyb21BcnJheSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaXNTY2hlZHVsZXIgfSBmcm9tICcuLi91dGlsL2lzU2NoZWR1bGVyJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlsL2lzQXJyYXknO1xuaW1wb3J0IHsgT3V0ZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vT3V0ZXJTdWJzY3JpYmVyJztcbmltcG9ydCB7IHN1YnNjcmliZVRvUmVzdWx0IH0gZnJvbSAnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCc7XG5pbXBvcnQgeyBmcm9tQXJyYXkgfSBmcm9tICcuL2Zyb21BcnJheSc7XG52YXIgTk9ORSA9IHt9O1xuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVMYXRlc3QoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdFNlbGVjdG9yID0gdW5kZWZpbmVkO1xuICAgIHZhciBzY2hlZHVsZXIgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGlzU2NoZWR1bGVyKG9ic2VydmFibGVzW29ic2VydmFibGVzLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICBzY2hlZHVsZXIgPSBvYnNlcnZhYmxlcy5wb3AoKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXN1bHRTZWxlY3RvciA9IG9ic2VydmFibGVzLnBvcCgpO1xuICAgIH1cbiAgICBpZiAob2JzZXJ2YWJsZXMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkob2JzZXJ2YWJsZXNbMF0pKSB7XG4gICAgICAgIG9ic2VydmFibGVzID0gb2JzZXJ2YWJsZXNbMF07XG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXkob2JzZXJ2YWJsZXMsIHNjaGVkdWxlcikubGlmdChuZXcgQ29tYmluZUxhdGVzdE9wZXJhdG9yKHJlc3VsdFNlbGVjdG9yKSk7XG59XG52YXIgQ29tYmluZUxhdGVzdE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIENvbWJpbmVMYXRlc3RPcGVyYXRvcihyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIENvbWJpbmVMYXRlc3RPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMucmVzdWx0U2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb21iaW5lTGF0ZXN0T3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0IHsgQ29tYmluZUxhdGVzdE9wZXJhdG9yIH07XG52YXIgQ29tYmluZUxhdGVzdFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQ29tYmluZUxhdGVzdFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ29tYmluZUxhdGVzdFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5yZXN1bHRTZWxlY3RvciA9IHJlc3VsdFNlbGVjdG9yO1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSAwO1xuICAgICAgICBfdGhpcy52YWx1ZXMgPSBbXTtcbiAgICAgICAgX3RoaXMub2JzZXJ2YWJsZXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAob2JzZXJ2YWJsZSkge1xuICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKE5PTkUpO1xuICAgICAgICB0aGlzLm9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XG4gICAgfTtcbiAgICBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZXMgPSB0aGlzLm9ic2VydmFibGVzO1xuICAgICAgICB2YXIgbGVuID0gb2JzZXJ2YWJsZXMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGxlbjtcbiAgICAgICAgICAgIHRoaXMudG9SZXNwb25kID0gbGVuO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gb2JzZXJ2YWJsZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgb2JzZXJ2YWJsZSwgdW5kZWZpbmVkLCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICh1bnVzZWQpIHtcbiAgICAgICAgaWYgKCh0aGlzLmFjdGl2ZSAtPSAxKSA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBDb21iaW5lTGF0ZXN0U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChfb3V0ZXJWYWx1ZSwgaW5uZXJWYWx1ZSwgb3V0ZXJJbmRleCkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgICAgIHZhciBvbGRWYWwgPSB2YWx1ZXNbb3V0ZXJJbmRleF07XG4gICAgICAgIHZhciB0b1Jlc3BvbmQgPSAhdGhpcy50b1Jlc3BvbmRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBvbGRWYWwgPT09IE5PTkUgPyAtLXRoaXMudG9SZXNwb25kIDogdGhpcy50b1Jlc3BvbmQ7XG4gICAgICAgIHZhbHVlc1tvdXRlckluZGV4XSA9IGlubmVyVmFsdWU7XG4gICAgICAgIGlmICh0b1Jlc3BvbmQgPT09IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJ5UmVzdWx0U2VsZWN0b3IodmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZXMuc2xpY2UoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5fdHJ5UmVzdWx0U2VsZWN0b3IgPSBmdW5jdGlvbiAodmFsdWVzKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnJlc3VsdFNlbGVjdG9yLmFwcGx5KHRoaXMsIHZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyZXN1bHQpO1xuICAgIH07XG4gICAgcmV0dXJuIENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IENvbWJpbmVMYXRlc3RTdWJzY3JpYmVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lTGF0ZXN0LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfbWVyZ2VNYXAsX3V0aWxfaWRlbnRpdHkgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgbWVyZ2VNYXAgfSBmcm9tICcuL21lcmdlTWFwJztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VBbGwoY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHtcbiAgICAgICAgY29uY3VycmVudCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlTWFwKGlkZW50aXR5LCBjb25jdXJyZW50KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlQWxsLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfT2JzZXJ2YWJsZSxfZnJvbSxfZW1wdHkgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4vZnJvbSc7XG5pbXBvcnQgeyBlbXB0eSB9IGZyb20gJy4vZW1wdHknO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmVyKG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBpbnB1dDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlucHV0ID0gb2JzZXJ2YWJsZUZhY3RvcnkoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzb3VyY2UgPSBpbnB1dCA/IGZyb20oaW5wdXQpIDogZW1wdHkoKTtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWZlci5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX2Zyb21BcnJheSxfdXRpbF9pc0FycmF5LF9TdWJzY3JpYmVyLF8uLl9pbnRlcm5hbF9zeW1ib2xfaXRlcmF0b3IsX2lubmVyU3Vic2NyaWJlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBmcm9tQXJyYXkgfSBmcm9tICcuL2Zyb21BcnJheSc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5JztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IGl0ZXJhdG9yIGFzIFN5bWJvbF9pdGVyYXRvciB9IGZyb20gJy4uLy4uL2ludGVybmFsL3N5bWJvbC9pdGVyYXRvcic7XG5pbXBvcnQgeyBTaW1wbGVPdXRlclN1YnNjcmliZXIsIFNpbXBsZUlubmVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUgfSBmcm9tICcuLi9pbm5lclN1YnNjcmliZSc7XG5leHBvcnQgZnVuY3Rpb24gemlwKCkge1xuICAgIHZhciBvYnNlcnZhYmxlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG9ic2VydmFibGVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciByZXN1bHRTZWxlY3RvciA9IG9ic2VydmFibGVzW29ic2VydmFibGVzLmxlbmd0aCAtIDFdO1xuICAgIGlmICh0eXBlb2YgcmVzdWx0U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb2JzZXJ2YWJsZXMucG9wKCk7XG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXkob2JzZXJ2YWJsZXMsIHVuZGVmaW5lZCkubGlmdChuZXcgWmlwT3BlcmF0b3IocmVzdWx0U2VsZWN0b3IpKTtcbn1cbnZhciBaaXBPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBaaXBPcGVyYXRvcihyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgfVxuICAgIFppcE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgWmlwU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnJlc3VsdFNlbGVjdG9yKSk7XG4gICAgfTtcbiAgICByZXR1cm4gWmlwT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0IHsgWmlwT3BlcmF0b3IgfTtcbnZhciBaaXBTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFppcFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gWmlwU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcmVzdWx0U2VsZWN0b3IsIHZhbHVlcykge1xuICAgICAgICBpZiAodmFsdWVzID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHZhbHVlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIF90aGlzLml0ZXJhdG9ycyA9IFtdO1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSAwO1xuICAgICAgICBfdGhpcy5yZXN1bHRTZWxlY3RvciA9ICh0eXBlb2YgcmVzdWx0U2VsZWN0b3IgPT09ICdmdW5jdGlvbicpID8gcmVzdWx0U2VsZWN0b3IgOiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgWmlwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGl0ZXJhdG9ycyA9IHRoaXMuaXRlcmF0b3JzO1xuICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9ycy5wdXNoKG5ldyBTdGF0aWNBcnJheUl0ZXJhdG9yKHZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhbHVlW1N5bWJvbF9pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9ycy5wdXNoKG5ldyBTdGF0aWNJdGVyYXRvcih2YWx1ZVtTeW1ib2xfaXRlcmF0b3JdKCkpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGl0ZXJhdG9ycy5wdXNoKG5ldyBaaXBCdWZmZXJJdGVyYXRvcih0aGlzLmRlc3RpbmF0aW9uLCB0aGlzLCB2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBaaXBTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBpdGVyYXRvcnMgPSB0aGlzLml0ZXJhdG9ycztcbiAgICAgICAgdmFyIGxlbiA9IGl0ZXJhdG9ycy5sZW5ndGg7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlID0gbGVuO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvcnNbaV07XG4gICAgICAgICAgICBpZiAoaXRlcmF0b3Iuc3RpbGxVbnN1YnNjcmliZWQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChpdGVyYXRvci5zdWJzY3JpYmUoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZS0tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBaaXBTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlJbmFjdGl2ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hY3RpdmUtLTtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFppcFN1YnNjcmliZXIucHJvdG90eXBlLmNoZWNrSXRlcmF0b3JzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaXRlcmF0b3JzID0gdGhpcy5pdGVyYXRvcnM7XG4gICAgICAgIHZhciBsZW4gPSBpdGVyYXRvcnMubGVuZ3RoO1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvcnNbaV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yLmhhc1ZhbHVlID09PSAnZnVuY3Rpb24nICYmICFpdGVyYXRvci5oYXNWYWx1ZSgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBzaG91bGRDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvcnNbaV07XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gaXRlcmF0b3IubmV4dCgpO1xuICAgICAgICAgICAgaWYgKGl0ZXJhdG9yLmhhc0NvbXBsZXRlZCgpKSB7XG4gICAgICAgICAgICAgICAgc2hvdWxkQ29tcGxldGUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcmdzLnB1c2gocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5yZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICAgICAgdGhpcy5fdHJ5cmVzdWx0U2VsZWN0b3IoYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KGFyZ3MpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRDb21wbGV0ZSkge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgWmlwU3Vic2NyaWJlci5wcm90b3R5cGUuX3RyeXJlc3VsdFNlbGVjdG9yID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucmVzdWx0U2VsZWN0b3IuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChyZXN1bHQpO1xuICAgIH07XG4gICAgcmV0dXJuIFppcFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IFppcFN1YnNjcmliZXIgfTtcbnZhciBTdGF0aWNJdGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTdGF0aWNJdGVyYXRvcihpdGVyYXRvcikge1xuICAgICAgICB0aGlzLml0ZXJhdG9yID0gaXRlcmF0b3I7XG4gICAgICAgIHRoaXMubmV4dFJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICB9XG4gICAgU3RhdGljSXRlcmF0b3IucHJvdG90eXBlLmhhc1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFN0YXRpY0l0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5uZXh0UmVzdWx0O1xuICAgICAgICB0aGlzLm5leHRSZXN1bHQgPSB0aGlzLml0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9O1xuICAgIFN0YXRpY0l0ZXJhdG9yLnByb3RvdHlwZS5oYXNDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBuZXh0UmVzdWx0ID0gdGhpcy5uZXh0UmVzdWx0O1xuICAgICAgICByZXR1cm4gQm9vbGVhbihuZXh0UmVzdWx0ICYmIG5leHRSZXN1bHQuZG9uZSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3RhdGljSXRlcmF0b3I7XG59KCkpO1xudmFyIFN0YXRpY0FycmF5SXRlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3RhdGljQXJyYXlJdGVyYXRvcihhcnJheSkge1xuICAgICAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLmxlbmd0aCA9IDA7XG4gICAgICAgIHRoaXMubGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICAgIH1cbiAgICBTdGF0aWNBcnJheUl0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2xfaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFN0YXRpY0FycmF5SXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIHZhciBhcnJheSA9IHRoaXMuYXJyYXk7XG4gICAgICAgIHJldHVybiBpIDwgdGhpcy5sZW5ndGggPyB7IHZhbHVlOiBhcnJheVtpXSwgZG9uZTogZmFsc2UgfSA6IHsgdmFsdWU6IG51bGwsIGRvbmU6IHRydWUgfTtcbiAgICB9O1xuICAgIFN0YXRpY0FycmF5SXRlcmF0b3IucHJvdG90eXBlLmhhc1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcnJheS5sZW5ndGggPiB0aGlzLmluZGV4O1xuICAgIH07XG4gICAgU3RhdGljQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuaGFzQ29tcGxldGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcnJheS5sZW5ndGggPT09IHRoaXMuaW5kZXg7XG4gICAgfTtcbiAgICByZXR1cm4gU3RhdGljQXJyYXlJdGVyYXRvcjtcbn0oKSk7XG52YXIgWmlwQnVmZmVySXRlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoWmlwQnVmZmVySXRlcmF0b3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gWmlwQnVmZmVySXRlcmF0b3IoZGVzdGluYXRpb24sIHBhcmVudCwgb2JzZXJ2YWJsZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBfdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZTtcbiAgICAgICAgX3RoaXMuc3RpbGxVbnN1YnNjcmliZWQgPSB0cnVlO1xuICAgICAgICBfdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgX3RoaXMuaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2xfaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYnVmZmVyID0gdGhpcy5idWZmZXI7XG4gICAgICAgIGlmIChidWZmZXIubGVuZ3RoID09PSAwICYmIHRoaXMuaXNDb21wbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG51bGwsIGRvbmU6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBidWZmZXIuc2hpZnQoKSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgWmlwQnVmZmVySXRlcmF0b3IucHJvdG90eXBlLmhhc1ZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5idWZmZXIubGVuZ3RoID4gMDtcbiAgICB9O1xuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZS5oYXNDb21wbGV0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDAgJiYgdGhpcy5pc0NvbXBsZXRlO1xuICAgIH07XG4gICAgWmlwQnVmZmVySXRlcmF0b3IucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pc0NvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMucGFyZW50Lm5vdGlmeUluYWN0aXZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKGlubmVyVmFsdWUpIHtcbiAgICAgICAgdGhpcy5idWZmZXIucHVzaChpbm5lclZhbHVlKTtcbiAgICAgICAgdGhpcy5wYXJlbnQuY2hlY2tJdGVyYXRvcnMoKTtcbiAgICB9O1xuICAgIFppcEJ1ZmZlckl0ZXJhdG9yLnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBpbm5lclN1YnNjcmliZSh0aGlzLm9ic2VydmFibGUsIG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIodGhpcykpO1xuICAgIH07XG4gICAgcmV0dXJuIFppcEJ1ZmZlckl0ZXJhdG9yO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgIFBVUkVfSU1QT1JUU19FTkQgKi9cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdCh4KSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNPYmplY3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBjYW5SZXBvcnRFcnJvcihvYnNlcnZlcikge1xuICAgIHdoaWxlIChvYnNlcnZlcikge1xuICAgICAgICB2YXIgX2EgPSBvYnNlcnZlciwgY2xvc2VkXzEgPSBfYS5jbG9zZWQsIGRlc3RpbmF0aW9uID0gX2EuZGVzdGluYXRpb24sIGlzU3RvcHBlZCA9IF9hLmlzU3RvcHBlZDtcbiAgICAgICAgaWYgKGNsb3NlZF8xIHx8IGlzU3RvcHBlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRlc3RpbmF0aW9uICYmIGRlc3RpbmF0aW9uIGluc3RhbmNlb2YgU3Vic2NyaWJlcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIgPSBkZXN0aW5hdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG9ic2VydmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhblJlcG9ydEVycm9yLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfT2JzZXJ2YWJsZSxfU3Vic2NyaXB0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVBcnJheShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgc3ViLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGkgPT09IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5wdXRbaSsrXSk7XG4gICAgICAgICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgc3ViLmFkZCh0aGlzLnNjaGVkdWxlKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBzdWI7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZUFycmF5LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfY29uZmlnLF91dGlsX2hvc3RSZXBvcnRFcnJvciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBjb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBob3N0UmVwb3J0RXJyb3IgfSBmcm9tICcuL3V0aWwvaG9zdFJlcG9ydEVycm9yJztcbmV4cG9ydCB2YXIgZW1wdHkgPSB7XG4gICAgY2xvc2VkOiB0cnVlLFxuICAgIG5leHQ6IGZ1bmN0aW9uICh2YWx1ZSkgeyB9LFxuICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykge1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaG9zdFJlcG9ydEVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1PYnNlcnZlci5qcy5tYXBcbiIsInZhciBTeW1ib2wgPSByZXF1aXJlKCcuL19TeW1ib2wnKSxcbiAgICBnZXRSYXdUYWcgPSByZXF1aXJlKCcuL19nZXRSYXdUYWcnKSxcbiAgICBvYmplY3RUb1N0cmluZyA9IHJlcXVpcmUoJy4vX29iamVjdFRvU3RyaW5nJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBudWxsVGFnID0gJ1tvYmplY3QgTnVsbF0nLFxuICAgIHVuZGVmaW5lZFRhZyA9ICdbb2JqZWN0IFVuZGVmaW5lZF0nO1xuXG4vKiogQnVpbHQtaW4gdmFsdWUgcmVmZXJlbmNlcy4gKi9cbnZhciBzeW1Ub1N0cmluZ1RhZyA9IFN5bWJvbCA/IFN5bWJvbC50b1N0cmluZ1RhZyA6IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXRUYWcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZFRhZyA6IG51bGxUYWc7XG4gIH1cbiAgcmV0dXJuIChzeW1Ub1N0cmluZ1RhZyAmJiBzeW1Ub1N0cmluZ1RhZyBpbiBPYmplY3QodmFsdWUpKVxuICAgID8gZ2V0UmF3VGFnKHZhbHVlKVxuICAgIDogb2JqZWN0VG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VHZXRUYWc7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLiBBIHZhbHVlIGlzIG9iamVjdC1saWtlIGlmIGl0J3Mgbm90IGBudWxsYFxuICogYW5kIGhhcyBhIGB0eXBlb2ZgIHJlc3VsdCBvZiBcIm9iamVjdFwiLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIG9iamVjdC1saWtlLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKHt9KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKF8ubm9vcCk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNPYmplY3RMaWtlKG51bGwpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc09iamVjdExpa2U7XG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9Bc3luY0FjdGlvbiBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgQXN5bmNBY3Rpb24gfSBmcm9tICcuL0FzeW5jQWN0aW9uJztcbnZhciBRdWV1ZUFjdGlvbiA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhRdWV1ZUFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBRdWV1ZUFjdGlvbihzY2hlZHVsZXIsIHdvcmspIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFF1ZXVlQWN0aW9uLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uIChzdGF0ZSwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVsYXkgPiAwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZWxheSA9IGRlbGF5O1xuICAgICAgICB0aGlzLnN0YXRlID0gc3RhdGU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyLmZsdXNoKHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFF1ZXVlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICByZXR1cm4gKGRlbGF5ID4gMCB8fCB0aGlzLmNsb3NlZCkgP1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KSA6XG4gICAgICAgICAgICB0aGlzLl9leGVjdXRlKHN0YXRlLCBkZWxheSk7XG4gICAgfTtcbiAgICBRdWV1ZUFjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkgfHwgKGRlbGF5ID09PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh0aGlzKTtcbiAgICB9O1xuICAgIHJldHVybiBRdWV1ZUFjdGlvbjtcbn0oQXN5bmNBY3Rpb24pKTtcbmV4cG9ydCB7IFF1ZXVlQWN0aW9uIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWV1ZUFjdGlvbi5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX1F1ZXVlQWN0aW9uLF9RdWV1ZVNjaGVkdWxlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBRdWV1ZUFjdGlvbiB9IGZyb20gJy4vUXVldWVBY3Rpb24nO1xuaW1wb3J0IHsgUXVldWVTY2hlZHVsZXIgfSBmcm9tICcuL1F1ZXVlU2NoZWR1bGVyJztcbmV4cG9ydCB2YXIgcXVldWVTY2hlZHVsZXIgPSAvKkBfX1BVUkVfXyovIG5ldyBRdWV1ZVNjaGVkdWxlcihRdWV1ZUFjdGlvbik7XG5leHBvcnQgdmFyIHF1ZXVlID0gcXVldWVTY2hlZHVsZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1xdWV1ZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX0FzeW5jU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xudmFyIFF1ZXVlU2NoZWR1bGVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFF1ZXVlU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFF1ZXVlU2NoZWR1bGVyKCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIHJldHVybiBRdWV1ZVNjaGVkdWxlcjtcbn0oQXN5bmNTY2hlZHVsZXIpKTtcbmV4cG9ydCB7IFF1ZXVlU2NoZWR1bGVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1RdWV1ZVNjaGVkdWxlci5qcy5tYXBcbiIsInZhciBTY2hlZHVsZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbm93KSB7XG4gICAgICAgIGlmIChub3cgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgbm93ID0gU2NoZWR1bGVyLm5vdztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLlNjaGVkdWxlckFjdGlvbiA9IFNjaGVkdWxlckFjdGlvbjtcbiAgICAgICAgdGhpcy5ub3cgPSBub3c7XG4gICAgfVxuICAgIFNjaGVkdWxlci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbiAod29yaywgZGVsYXksIHN0YXRlKSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzLlNjaGVkdWxlckFjdGlvbih0aGlzLCB3b3JrKS5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLm5vdyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIERhdGUubm93KCk7IH07XG4gICAgcmV0dXJuIFNjaGVkdWxlcjtcbn0oKSk7XG5leHBvcnQgeyBTY2hlZHVsZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNjaGVkdWxlci5qcy5tYXBcbiIsIi8qXG5cdE1JVCBMaWNlbnNlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvbWl0LWxpY2Vuc2UucGhwXG5cdEF1dGhvciBUb2JpYXMgS29wcGVycyBAc29rcmFcbiovXG5cbnZhciBzdHlsZXNJbkRvbSA9IHt9O1xuXG52YXJcdG1lbW9pemUgPSBmdW5jdGlvbiAoZm4pIHtcblx0dmFyIG1lbW87XG5cblx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRpZiAodHlwZW9mIG1lbW8gPT09IFwidW5kZWZpbmVkXCIpIG1lbW8gPSBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdHJldHVybiBtZW1vO1xuXHR9O1xufTtcblxudmFyIGlzT2xkSUUgPSBtZW1vaXplKGZ1bmN0aW9uICgpIHtcblx0Ly8gVGVzdCBmb3IgSUUgPD0gOSBhcyBwcm9wb3NlZCBieSBCcm93c2VyaGFja3Ncblx0Ly8gQHNlZSBodHRwOi8vYnJvd3NlcmhhY2tzLmNvbS8jaGFjay1lNzFkODY5MmY2NTMzNDE3M2ZlZTcxNWMyMjJjYjgwNVxuXHQvLyBUZXN0cyBmb3IgZXhpc3RlbmNlIG9mIHN0YW5kYXJkIGdsb2JhbHMgaXMgdG8gYWxsb3cgc3R5bGUtbG9hZGVyXG5cdC8vIHRvIG9wZXJhdGUgY29ycmVjdGx5IGludG8gbm9uLXN0YW5kYXJkIGVudmlyb25tZW50c1xuXHQvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWJwYWNrLWNvbnRyaWIvc3R5bGUtbG9hZGVyL2lzc3Vlcy8xNzdcblx0cmV0dXJuIHdpbmRvdyAmJiBkb2N1bWVudCAmJiBkb2N1bWVudC5hbGwgJiYgIXdpbmRvdy5hdG9iO1xufSk7XG5cbnZhciBnZXRUYXJnZXQgPSBmdW5jdGlvbiAodGFyZ2V0LCBwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCl7XG4gICAgcmV0dXJuIHBhcmVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcbn07XG5cbnZhciBnZXRFbGVtZW50ID0gKGZ1bmN0aW9uIChmbikge1xuXHR2YXIgbWVtbyA9IHt9O1xuXG5cdHJldHVybiBmdW5jdGlvbih0YXJnZXQsIHBhcmVudCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHBhc3NpbmcgZnVuY3Rpb24gaW4gb3B0aW9ucywgdGhlbiB1c2UgaXQgZm9yIHJlc29sdmUgXCJoZWFkXCIgZWxlbWVudC5cbiAgICAgICAgICAgICAgICAvLyBVc2VmdWwgZm9yIFNoYWRvdyBSb290IHN0eWxlIGkuZVxuICAgICAgICAgICAgICAgIC8vIHtcbiAgICAgICAgICAgICAgICAvLyAgIGluc2VydEludG86IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjZm9vXCIpLnNoYWRvd1Jvb3QgfVxuICAgICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRhcmdldCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dmFyIHN0eWxlVGFyZ2V0ID0gZ2V0VGFyZ2V0LmNhbGwodGhpcywgdGFyZ2V0LCBwYXJlbnQpO1xuXHRcdFx0Ly8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblx0XHRcdGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFjY2VzcyB0byBpZnJhbWUgaXMgYmxvY2tlZFxuXHRcdFx0XHRcdC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcblx0XHRcdFx0fSBjYXRjaChlKSB7XG5cdFx0XHRcdFx0c3R5bGVUYXJnZXQgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcblx0XHR9XG5cdFx0cmV0dXJuIG1lbW9bdGFyZ2V0XVxuXHR9O1xufSkoKTtcblxudmFyIHNpbmdsZXRvbiA9IG51bGw7XG52YXJcdHNpbmdsZXRvbkNvdW50ZXIgPSAwO1xudmFyXHRzdHlsZXNJbnNlcnRlZEF0VG9wID0gW107XG5cbnZhclx0Zml4VXJscyA9IHJlcXVpcmUoXCIuL3VybHNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24obGlzdCwgb3B0aW9ucykge1xuXHRpZiAodHlwZW9mIERFQlVHICE9PSBcInVuZGVmaW5lZFwiICYmIERFQlVHKSB7XG5cdFx0aWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHN0eWxlLWxvYWRlciBjYW5ub3QgYmUgdXNlZCBpbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50XCIpO1xuXHR9XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5hdHRycyA9IHR5cGVvZiBvcHRpb25zLmF0dHJzID09PSBcIm9iamVjdFwiID8gb3B0aW9ucy5hdHRycyA6IHt9O1xuXG5cdC8vIEZvcmNlIHNpbmdsZS10YWcgc29sdXRpb24gb24gSUU2LTksIHdoaWNoIGhhcyBhIGhhcmQgbGltaXQgb24gdGhlICMgb2YgPHN0eWxlPlxuXHQvLyB0YWdzIGl0IHdpbGwgYWxsb3cgb24gYSBwYWdlXG5cdGlmICghb3B0aW9ucy5zaW5nbGV0b24gJiYgdHlwZW9mIG9wdGlvbnMuc2luZ2xldG9uICE9PSBcImJvb2xlYW5cIikgb3B0aW9ucy5zaW5nbGV0b24gPSBpc09sZElFKCk7XG5cblx0Ly8gQnkgZGVmYXVsdCwgYWRkIDxzdHlsZT4gdGFncyB0byB0aGUgPGhlYWQ+IGVsZW1lbnRcbiAgICAgICAgaWYgKCFvcHRpb25zLmluc2VydEludG8pIG9wdGlvbnMuaW5zZXJ0SW50byA9IFwiaGVhZFwiO1xuXG5cdC8vIEJ5IGRlZmF1bHQsIGFkZCA8c3R5bGU+IHRhZ3MgdG8gdGhlIGJvdHRvbSBvZiB0aGUgdGFyZ2V0XG5cdGlmICghb3B0aW9ucy5pbnNlcnRBdCkgb3B0aW9ucy5pbnNlcnRBdCA9IFwiYm90dG9tXCI7XG5cblx0dmFyIHN0eWxlcyA9IGxpc3RUb1N0eWxlcyhsaXN0LCBvcHRpb25zKTtcblxuXHRhZGRTdHlsZXNUb0RvbShzdHlsZXMsIG9wdGlvbnMpO1xuXG5cdHJldHVybiBmdW5jdGlvbiB1cGRhdGUgKG5ld0xpc3QpIHtcblx0XHR2YXIgbWF5UmVtb3ZlID0gW107XG5cblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0eWxlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGl0ZW0gPSBzdHlsZXNbaV07XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdFx0ZG9tU3R5bGUucmVmcy0tO1xuXHRcdFx0bWF5UmVtb3ZlLnB1c2goZG9tU3R5bGUpO1xuXHRcdH1cblxuXHRcdGlmKG5ld0xpc3QpIHtcblx0XHRcdHZhciBuZXdTdHlsZXMgPSBsaXN0VG9TdHlsZXMobmV3TGlzdCwgb3B0aW9ucyk7XG5cdFx0XHRhZGRTdHlsZXNUb0RvbShuZXdTdHlsZXMsIG9wdGlvbnMpO1xuXHRcdH1cblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5UmVtb3ZlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgZG9tU3R5bGUgPSBtYXlSZW1vdmVbaV07XG5cblx0XHRcdGlmKGRvbVN0eWxlLnJlZnMgPT09IDApIHtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykgZG9tU3R5bGUucGFydHNbal0oKTtcblxuXHRcdFx0XHRkZWxldGUgc3R5bGVzSW5Eb21bZG9tU3R5bGUuaWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn07XG5cbmZ1bmN0aW9uIGFkZFN0eWxlc1RvRG9tIChzdHlsZXMsIG9wdGlvbnMpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IHN0eWxlc1tpXTtcblx0XHR2YXIgZG9tU3R5bGUgPSBzdHlsZXNJbkRvbVtpdGVtLmlkXTtcblxuXHRcdGlmKGRvbVN0eWxlKSB7XG5cdFx0XHRkb21TdHlsZS5yZWZzKys7XG5cblx0XHRcdGZvcih2YXIgaiA9IDA7IGogPCBkb21TdHlsZS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRkb21TdHlsZS5wYXJ0c1tqXShpdGVtLnBhcnRzW2pdKTtcblx0XHRcdH1cblxuXHRcdFx0Zm9yKDsgaiA8IGl0ZW0ucGFydHMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0ZG9tU3R5bGUucGFydHMucHVzaChhZGRTdHlsZShpdGVtLnBhcnRzW2pdLCBvcHRpb25zKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBwYXJ0cyA9IFtdO1xuXG5cdFx0XHRmb3IodmFyIGogPSAwOyBqIDwgaXRlbS5wYXJ0cy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRwYXJ0cy5wdXNoKGFkZFN0eWxlKGl0ZW0ucGFydHNbal0sIG9wdGlvbnMpKTtcblx0XHRcdH1cblxuXHRcdFx0c3R5bGVzSW5Eb21baXRlbS5pZF0gPSB7aWQ6IGl0ZW0uaWQsIHJlZnM6IDEsIHBhcnRzOiBwYXJ0c307XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGxpc3RUb1N0eWxlcyAobGlzdCwgb3B0aW9ucykge1xuXHR2YXIgc3R5bGVzID0gW107XG5cdHZhciBuZXdTdHlsZXMgPSB7fTtcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgaXRlbSA9IGxpc3RbaV07XG5cdFx0dmFyIGlkID0gb3B0aW9ucy5iYXNlID8gaXRlbVswXSArIG9wdGlvbnMuYmFzZSA6IGl0ZW1bMF07XG5cdFx0dmFyIGNzcyA9IGl0ZW1bMV07XG5cdFx0dmFyIG1lZGlhID0gaXRlbVsyXTtcblx0XHR2YXIgc291cmNlTWFwID0gaXRlbVszXTtcblx0XHR2YXIgcGFydCA9IHtjc3M6IGNzcywgbWVkaWE6IG1lZGlhLCBzb3VyY2VNYXA6IHNvdXJjZU1hcH07XG5cblx0XHRpZighbmV3U3R5bGVzW2lkXSkgc3R5bGVzLnB1c2gobmV3U3R5bGVzW2lkXSA9IHtpZDogaWQsIHBhcnRzOiBbcGFydF19KTtcblx0XHRlbHNlIG5ld1N0eWxlc1tpZF0ucGFydHMucHVzaChwYXJ0KTtcblx0fVxuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudCAob3B0aW9ucywgc3R5bGUpIHtcblx0dmFyIHRhcmdldCA9IGdldEVsZW1lbnQob3B0aW9ucy5pbnNlcnRJbnRvKVxuXG5cdGlmICghdGFyZ2V0KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnRJbnRvJyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG5cdH1cblxuXHR2YXIgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AgPSBzdHlsZXNJbnNlcnRlZEF0VG9wW3N0eWxlc0luc2VydGVkQXRUb3AubGVuZ3RoIC0gMV07XG5cblx0aWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwidG9wXCIpIHtcblx0XHRpZiAoIWxhc3RTdHlsZUVsZW1lbnRJbnNlcnRlZEF0VG9wKSB7XG5cdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCB0YXJnZXQuZmlyc3RDaGlsZCk7XG5cdFx0fSBlbHNlIGlmIChsYXN0U3R5bGVFbGVtZW50SW5zZXJ0ZWRBdFRvcC5uZXh0U2libGluZykge1xuXHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSwgbGFzdFN0eWxlRWxlbWVudEluc2VydGVkQXRUb3AubmV4dFNpYmxpbmcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHRcdH1cblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnB1c2goc3R5bGUpO1xuXHR9IGVsc2UgaWYgKG9wdGlvbnMuaW5zZXJ0QXQgPT09IFwiYm90dG9tXCIpIHtcblx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBvcHRpb25zLmluc2VydEF0ID09PSBcIm9iamVjdFwiICYmIG9wdGlvbnMuaW5zZXJ0QXQuYmVmb3JlKSB7XG5cdFx0dmFyIG5leHRTaWJsaW5nID0gZ2V0RWxlbWVudChvcHRpb25zLmluc2VydEF0LmJlZm9yZSwgdGFyZ2V0KTtcblx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBuZXh0U2libGluZyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiW1N0eWxlIExvYWRlcl1cXG5cXG4gSW52YWxpZCB2YWx1ZSBmb3IgcGFyYW1ldGVyICdpbnNlcnRBdCcgKCdvcHRpb25zLmluc2VydEF0JykgZm91bmQuXFxuIE11c3QgYmUgJ3RvcCcsICdib3R0b20nLCBvciBPYmplY3QuXFxuIChodHRwczovL2dpdGh1Yi5jb20vd2VicGFjay1jb250cmliL3N0eWxlLWxvYWRlciNpbnNlcnRhdClcXG5cIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50IChzdHlsZSkge1xuXHRpZiAoc3R5bGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuXHRzdHlsZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlKTtcblxuXHR2YXIgaWR4ID0gc3R5bGVzSW5zZXJ0ZWRBdFRvcC5pbmRleE9mKHN0eWxlKTtcblx0aWYoaWR4ID49IDApIHtcblx0XHRzdHlsZXNJbnNlcnRlZEF0VG9wLnNwbGljZShpZHgsIDEpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0eWxlRWxlbWVudCAob3B0aW9ucykge1xuXHR2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG5cblx0aWYob3B0aW9ucy5hdHRycy50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdH1cblxuXHRpZihvcHRpb25zLmF0dHJzLm5vbmNlID09PSB1bmRlZmluZWQpIHtcblx0XHR2YXIgbm9uY2UgPSBnZXROb25jZSgpO1xuXHRcdGlmIChub25jZSkge1xuXHRcdFx0b3B0aW9ucy5hdHRycy5ub25jZSA9IG5vbmNlO1xuXHRcdH1cblx0fVxuXG5cdGFkZEF0dHJzKHN0eWxlLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIHN0eWxlKTtcblxuXHRyZXR1cm4gc3R5bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpbmtFbGVtZW50IChvcHRpb25zKSB7XG5cdHZhciBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImxpbmtcIik7XG5cblx0aWYob3B0aW9ucy5hdHRycy50eXBlID09PSB1bmRlZmluZWQpIHtcblx0XHRvcHRpb25zLmF0dHJzLnR5cGUgPSBcInRleHQvY3NzXCI7XG5cdH1cblx0b3B0aW9ucy5hdHRycy5yZWwgPSBcInN0eWxlc2hlZXRcIjtcblxuXHRhZGRBdHRycyhsaW5rLCBvcHRpb25zLmF0dHJzKTtcblx0aW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMsIGxpbmspO1xuXG5cdHJldHVybiBsaW5rO1xufVxuXG5mdW5jdGlvbiBhZGRBdHRycyAoZWwsIGF0dHJzKSB7XG5cdE9iamVjdC5rZXlzKGF0dHJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRlbC5zZXRBdHRyaWJ1dGUoa2V5LCBhdHRyc1trZXldKTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vbmNlKCkge1xuXHRpZiAodHlwZW9mIF9fd2VicGFja19ub25jZV9fID09PSAndW5kZWZpbmVkJykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0cmV0dXJuIF9fd2VicGFja19ub25jZV9fO1xufVxuXG5mdW5jdGlvbiBhZGRTdHlsZSAob2JqLCBvcHRpb25zKSB7XG5cdHZhciBzdHlsZSwgdXBkYXRlLCByZW1vdmUsIHJlc3VsdDtcblxuXHQvLyBJZiBhIHRyYW5zZm9ybSBmdW5jdGlvbiB3YXMgZGVmaW5lZCwgcnVuIGl0IG9uIHRoZSBjc3Ncblx0aWYgKG9wdGlvbnMudHJhbnNmb3JtICYmIG9iai5jc3MpIHtcblx0ICAgIHJlc3VsdCA9IHR5cGVvZiBvcHRpb25zLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdCA/IG9wdGlvbnMudHJhbnNmb3JtKG9iai5jc3MpIFxuXHRcdCA6IG9wdGlvbnMudHJhbnNmb3JtLmRlZmF1bHQob2JqLmNzcyk7XG5cblx0ICAgIGlmIChyZXN1bHQpIHtcblx0ICAgIFx0Ly8gSWYgdHJhbnNmb3JtIHJldHVybnMgYSB2YWx1ZSwgdXNlIHRoYXQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBydW5uaW5nIHJ1bnRpbWUgdHJhbnNmb3JtYXRpb25zIG9uIHRoZSBjc3MuXG5cdCAgICBcdG9iai5jc3MgPSByZXN1bHQ7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHQvLyBJZiB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uIHJldHVybnMgYSBmYWxzeSB2YWx1ZSwgZG9uJ3QgYWRkIHRoaXMgY3NzLlxuXHQgICAgXHQvLyBUaGlzIGFsbG93cyBjb25kaXRpb25hbCBsb2FkaW5nIG9mIGNzc1xuXHQgICAgXHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdCAgICBcdFx0Ly8gbm9vcFxuXHQgICAgXHR9O1xuXHQgICAgfVxuXHR9XG5cblx0aWYgKG9wdGlvbnMuc2luZ2xldG9uKSB7XG5cdFx0dmFyIHN0eWxlSW5kZXggPSBzaW5nbGV0b25Db3VudGVyKys7XG5cblx0XHRzdHlsZSA9IHNpbmdsZXRvbiB8fCAoc2luZ2xldG9uID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpKTtcblxuXHRcdHVwZGF0ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgZmFsc2UpO1xuXHRcdHJlbW92ZSA9IGFwcGx5VG9TaW5nbGV0b25UYWcuYmluZChudWxsLCBzdHlsZSwgc3R5bGVJbmRleCwgdHJ1ZSk7XG5cblx0fSBlbHNlIGlmIChcblx0XHRvYmouc291cmNlTWFwICYmXG5cdFx0dHlwZW9mIFVSTCA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIFVSTC5jcmVhdGVPYmplY3RVUkwgPT09IFwiZnVuY3Rpb25cIiAmJlxuXHRcdHR5cGVvZiBVUkwucmV2b2tlT2JqZWN0VVJMID09PSBcImZ1bmN0aW9uXCIgJiZcblx0XHR0eXBlb2YgQmxvYiA9PT0gXCJmdW5jdGlvblwiICYmXG5cdFx0dHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIlxuXHQpIHtcblx0XHRzdHlsZSA9IGNyZWF0ZUxpbmtFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IHVwZGF0ZUxpbmsuYmluZChudWxsLCBzdHlsZSwgb3B0aW9ucyk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblxuXHRcdFx0aWYoc3R5bGUuaHJlZikgVVJMLnJldm9rZU9iamVjdFVSTChzdHlsZS5ocmVmKTtcblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdHN0eWxlID0gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuXHRcdHVwZGF0ZSA9IGFwcGx5VG9UYWcuYmluZChudWxsLCBzdHlsZSk7XG5cdFx0cmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0cmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlKTtcblx0XHR9O1xuXHR9XG5cblx0dXBkYXRlKG9iaik7XG5cblx0cmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZVN0eWxlIChuZXdPYmopIHtcblx0XHRpZiAobmV3T2JqKSB7XG5cdFx0XHRpZiAoXG5cdFx0XHRcdG5ld09iai5jc3MgPT09IG9iai5jc3MgJiZcblx0XHRcdFx0bmV3T2JqLm1lZGlhID09PSBvYmoubWVkaWEgJiZcblx0XHRcdFx0bmV3T2JqLnNvdXJjZU1hcCA9PT0gb2JqLnNvdXJjZU1hcFxuXHRcdFx0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0dXBkYXRlKG9iaiA9IG5ld09iaik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlbW92ZSgpO1xuXHRcdH1cblx0fTtcbn1cblxudmFyIHJlcGxhY2VUZXh0ID0gKGZ1bmN0aW9uICgpIHtcblx0dmFyIHRleHRTdG9yZSA9IFtdO1xuXG5cdHJldHVybiBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50KSB7XG5cdFx0dGV4dFN0b3JlW2luZGV4XSA9IHJlcGxhY2VtZW50O1xuXG5cdFx0cmV0dXJuIHRleHRTdG9yZS5maWx0ZXIoQm9vbGVhbikuam9pbignXFxuJyk7XG5cdH07XG59KSgpO1xuXG5mdW5jdGlvbiBhcHBseVRvU2luZ2xldG9uVGFnIChzdHlsZSwgaW5kZXgsIHJlbW92ZSwgb2JqKSB7XG5cdHZhciBjc3MgPSByZW1vdmUgPyBcIlwiIDogb2JqLmNzcztcblxuXHRpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IHJlcGxhY2VUZXh0KGluZGV4LCBjc3MpO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBjc3NOb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKTtcblx0XHR2YXIgY2hpbGROb2RlcyA9IHN0eWxlLmNoaWxkTm9kZXM7XG5cblx0XHRpZiAoY2hpbGROb2Rlc1tpbmRleF0pIHN0eWxlLnJlbW92ZUNoaWxkKGNoaWxkTm9kZXNbaW5kZXhdKTtcblxuXHRcdGlmIChjaGlsZE5vZGVzLmxlbmd0aCkge1xuXHRcdFx0c3R5bGUuaW5zZXJ0QmVmb3JlKGNzc05vZGUsIGNoaWxkTm9kZXNbaW5kZXhdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3R5bGUuYXBwZW5kQ2hpbGQoY3NzTm9kZSk7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGFwcGx5VG9UYWcgKHN0eWxlLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBtZWRpYSA9IG9iai5tZWRpYTtcblxuXHRpZihtZWRpYSkge1xuXHRcdHN0eWxlLnNldEF0dHJpYnV0ZShcIm1lZGlhXCIsIG1lZGlhKVxuXHR9XG5cblx0aWYoc3R5bGUuc3R5bGVTaGVldCkge1xuXHRcdHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcblx0fSBlbHNlIHtcblx0XHR3aGlsZShzdHlsZS5maXJzdENoaWxkKSB7XG5cdFx0XHRzdHlsZS5yZW1vdmVDaGlsZChzdHlsZS5maXJzdENoaWxkKTtcblx0XHR9XG5cblx0XHRzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcblx0fVxufVxuXG5mdW5jdGlvbiB1cGRhdGVMaW5rIChsaW5rLCBvcHRpb25zLCBvYmopIHtcblx0dmFyIGNzcyA9IG9iai5jc3M7XG5cdHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG5cdC8qXG5cdFx0SWYgY29udmVydFRvQWJzb2x1dGVVcmxzIGlzbid0IGRlZmluZWQsIGJ1dCBzb3VyY2VtYXBzIGFyZSBlbmFibGVkXG5cdFx0YW5kIHRoZXJlIGlzIG5vIHB1YmxpY1BhdGggZGVmaW5lZCB0aGVuIGxldHMgdHVybiBjb252ZXJ0VG9BYnNvbHV0ZVVybHNcblx0XHRvbiBieSBkZWZhdWx0LiAgT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGNvbnZlcnRUb0Fic29sdXRlVXJscyBvcHRpb25cblx0XHRkaXJlY3RseVxuXHQqL1xuXHR2YXIgYXV0b0ZpeFVybHMgPSBvcHRpb25zLmNvbnZlcnRUb0Fic29sdXRlVXJscyA9PT0gdW5kZWZpbmVkICYmIHNvdXJjZU1hcDtcblxuXHRpZiAob3B0aW9ucy5jb252ZXJ0VG9BYnNvbHV0ZVVybHMgfHwgYXV0b0ZpeFVybHMpIHtcblx0XHRjc3MgPSBmaXhVcmxzKGNzcyk7XG5cdH1cblxuXHRpZiAoc291cmNlTWFwKSB7XG5cdFx0Ly8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjY2MDM4NzVcblx0XHRjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiICsgYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSArIFwiICovXCI7XG5cdH1cblxuXHR2YXIgYmxvYiA9IG5ldyBCbG9iKFtjc3NdLCB7IHR5cGU6IFwidGV4dC9jc3NcIiB9KTtcblxuXHR2YXIgb2xkU3JjID0gbGluay5ocmVmO1xuXG5cdGxpbmsuaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG5cblx0aWYob2xkU3JjKSBVUkwucmV2b2tlT2JqZWN0VVJMKG9sZFNyYyk7XG59XG4iLCJjb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5jb25zdCBldmVudEVtaXR0ZXIgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5jb25zdCBISURFX0VWRU5UID0gJ2hpZGVOb3RpZmljYXRpb24nO1xuY29uc3QgU0hPV19FVkVOVCA9ICdzaG93Tm90aWZpY2F0aW9uJztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEV2ZW50RW1pdHRlcjogKCkgPT4gZXZlbnRFbWl0dGVyLFxuICBoaWRlOiAoKSA9PiB7XG4gICAgZXZlbnRFbWl0dGVyLmVtaXQoSElERV9FVkVOVClcbiAgfSxcbiAgb25IaWRlOiAoaGFuZGxlcikgPT4ge1xuICAgIGV2ZW50RW1pdHRlci5vbihISURFX0VWRU5ULCBoYW5kbGVyKVxuICB9LFxuICBzaG93OiAoLi4ucHJvcHMpID0+IHtcbiAgICBldmVudEVtaXR0ZXIuZW1pdChTSE9XX0VWRU5ULCAuLi5wcm9wcylcbiAgfSxcbiAgb25TaG93OiAoaGFuZGxlcikgPT4ge1xuICAgIGV2ZW50RW1pdHRlci5vbihTSE9XX0VWRU5ULCBoYW5kbGVyKVxuICB9LFxuICByZXNldDogKCkgPT4ge1xuICAgIGV2ZW50RW1pdHRlci5yZW1vdmVBbGxMaXN0ZW5lcnMoU0hPV19FVkVOVClcbiAgICBldmVudEVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKEhJREVfRVZFTlQpXG4gIH1cbn1cbiIsInZhciBsaXN0Q2FjaGVDbGVhciA9IHJlcXVpcmUoJy4vX2xpc3RDYWNoZUNsZWFyJyksXG4gICAgbGlzdENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlRGVsZXRlJyksXG4gICAgbGlzdENhY2hlR2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlR2V0JyksXG4gICAgbGlzdENhY2hlSGFzID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlSGFzJyksXG4gICAgbGlzdENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbGlzdENhY2hlU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYExpc3RDYWNoZWAuXG5MaXN0Q2FjaGUucHJvdG90eXBlLmNsZWFyID0gbGlzdENhY2hlQ2xlYXI7XG5MaXN0Q2FjaGUucHJvdG90eXBlWydkZWxldGUnXSA9IGxpc3RDYWNoZURlbGV0ZTtcbkxpc3RDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbGlzdENhY2hlR2V0O1xuTGlzdENhY2hlLnByb3RvdHlwZS5oYXMgPSBsaXN0Q2FjaGVIYXM7XG5MaXN0Q2FjaGUucHJvdG90eXBlLnNldCA9IGxpc3RDYWNoZVNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBMaXN0Q2FjaGU7XG4iLCJ2YXIgZXEgPSByZXF1aXJlKCcuL2VxJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgaW5kZXggYXQgd2hpY2ggdGhlIGBrZXlgIGlzIGZvdW5kIGluIGBhcnJheWAgb2Yga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gaW5zcGVjdC5cbiAqIEBwYXJhbSB7Kn0ga2V5IFRoZSBrZXkgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBtYXRjaGVkIHZhbHVlLCBlbHNlIGAtMWAuXG4gKi9cbmZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkge1xuICAgIGlmIChlcShhcnJheVtsZW5ndGhdWzBdLCBrZXkpKSB7XG4gICAgICByZXR1cm4gbGVuZ3RoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXNzb2NJbmRleE9mO1xuIiwidmFyIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIFN5bWJvbCA9IHJvb3QuU3ltYm9sO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN5bWJvbDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGlzT2JqZWN0O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgbmF0aXZlQ3JlYXRlID0gZ2V0TmF0aXZlKE9iamVjdCwgJ2NyZWF0ZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUNyZWF0ZTtcbiIsInZhciBpc0tleWFibGUgPSByZXF1aXJlKCcuL19pc0tleWFibGUnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBkYXRhIGZvciBgbWFwYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG1hcCBUaGUgbWFwIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUgcmVmZXJlbmNlIGtleS5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBtYXAgZGF0YS5cbiAqL1xuZnVuY3Rpb24gZ2V0TWFwRGF0YShtYXAsIGtleSkge1xuICB2YXIgZGF0YSA9IG1hcC5fX2RhdGFfXztcbiAgcmV0dXJuIGlzS2V5YWJsZShrZXkpXG4gICAgPyBkYXRhW3R5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyAnc3RyaW5nJyA6ICdoYXNoJ11cbiAgICA6IGRhdGEubWFwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hcERhdGE7XG4iLCJ2YXIgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgc3ltYm9sVGFnID0gJ1tvYmplY3QgU3ltYm9sXSc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgY2xhc3NpZmllZCBhcyBhIGBTeW1ib2xgIHByaW1pdGl2ZSBvciBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBzeW1ib2wsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc1N5bWJvbChTeW1ib2wuaXRlcmF0b3IpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNTeW1ib2woJ2FiYycpO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTeW1ib2wodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSAnc3ltYm9sJyB8fFxuICAgIChpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IHN5bWJvbFRhZyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNTeW1ib2w7XG4iLCJ2YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybnMge3N0cmluZ3xzeW1ib2x9IFJldHVybnMgdGhlIGtleS5cbiAqL1xuZnVuY3Rpb24gdG9LZXkodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnc3RyaW5nJyB8fCBpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdmFyIHJlc3VsdCA9ICh2YWx1ZSArICcnKTtcbiAgcmV0dXJuIChyZXN1bHQgPT0gJzAnICYmICgxIC8gdmFsdWUpID09IC1JTkZJTklUWSkgPyAnLTAnIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvS2V5O1xuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfU3Vic2NyaXB0aW9uLF9PYnNlcnZhYmxlLF9TdWJqZWN0IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnkoa2V5U2VsZWN0b3IsIGVsZW1lbnRTZWxlY3RvciwgZHVyYXRpb25TZWxlY3Rvciwgc3ViamVjdFNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBHcm91cEJ5T3BlcmF0b3Ioa2V5U2VsZWN0b3IsIGVsZW1lbnRTZWxlY3RvciwgZHVyYXRpb25TZWxlY3Rvciwgc3ViamVjdFNlbGVjdG9yKSk7XG4gICAgfTtcbn1cbnZhciBHcm91cEJ5T3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gR3JvdXBCeU9wZXJhdG9yKGtleVNlbGVjdG9yLCBlbGVtZW50U2VsZWN0b3IsIGR1cmF0aW9uU2VsZWN0b3IsIHN1YmplY3RTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLmtleVNlbGVjdG9yID0ga2V5U2VsZWN0b3I7XG4gICAgICAgIHRoaXMuZWxlbWVudFNlbGVjdG9yID0gZWxlbWVudFNlbGVjdG9yO1xuICAgICAgICB0aGlzLmR1cmF0aW9uU2VsZWN0b3IgPSBkdXJhdGlvblNlbGVjdG9yO1xuICAgICAgICB0aGlzLnN1YmplY3RTZWxlY3RvciA9IHN1YmplY3RTZWxlY3RvcjtcbiAgICB9XG4gICAgR3JvdXBCeU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgR3JvdXBCeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5rZXlTZWxlY3RvciwgdGhpcy5lbGVtZW50U2VsZWN0b3IsIHRoaXMuZHVyYXRpb25TZWxlY3RvciwgdGhpcy5zdWJqZWN0U2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBHcm91cEJ5T3BlcmF0b3I7XG59KCkpO1xudmFyIEdyb3VwQnlTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEdyb3VwQnlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEdyb3VwQnlTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBrZXlTZWxlY3RvciwgZWxlbWVudFNlbGVjdG9yLCBkdXJhdGlvblNlbGVjdG9yLCBzdWJqZWN0U2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmtleVNlbGVjdG9yID0ga2V5U2VsZWN0b3I7XG4gICAgICAgIF90aGlzLmVsZW1lbnRTZWxlY3RvciA9IGVsZW1lbnRTZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIF90aGlzLnN1YmplY3RTZWxlY3RvciA9IHN1YmplY3RTZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuZ3JvdXBzID0gbnVsbDtcbiAgICAgICAgX3RoaXMuYXR0ZW1wdGVkVG9VbnN1YnNjcmliZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgR3JvdXBCeVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBrZXk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSB0aGlzLmtleVNlbGVjdG9yKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZ3JvdXAodmFsdWUsIGtleSk7XG4gICAgfTtcbiAgICBHcm91cEJ5U3Vic2NyaWJlci5wcm90b3R5cGUuX2dyb3VwID0gZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuICAgICAgICBpZiAoIWdyb3Vwcykge1xuICAgICAgICAgICAgZ3JvdXBzID0gdGhpcy5ncm91cHMgPSBuZXcgTWFwKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGdyb3VwID0gZ3JvdXBzLmdldChrZXkpO1xuICAgICAgICB2YXIgZWxlbWVudDtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudFNlbGVjdG9yKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRTZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxlbWVudCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZ3JvdXApIHtcbiAgICAgICAgICAgIGdyb3VwID0gKHRoaXMuc3ViamVjdFNlbGVjdG9yID8gdGhpcy5zdWJqZWN0U2VsZWN0b3IoKSA6IG5ldyBTdWJqZWN0KCkpO1xuICAgICAgICAgICAgZ3JvdXBzLnNldChrZXksIGdyb3VwKTtcbiAgICAgICAgICAgIHZhciBncm91cGVkT2JzZXJ2YWJsZSA9IG5ldyBHcm91cGVkT2JzZXJ2YWJsZShrZXksIGdyb3VwLCB0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChncm91cGVkT2JzZXJ2YWJsZSk7XG4gICAgICAgICAgICBpZiAodGhpcy5kdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgICAgICAgICAgICAgdmFyIGR1cmF0aW9uID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gdGhpcy5kdXJhdGlvblNlbGVjdG9yKG5ldyBHcm91cGVkT2JzZXJ2YWJsZShrZXksIGdyb3VwKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGR1cmF0aW9uLnN1YnNjcmliZShuZXcgR3JvdXBEdXJhdGlvblN1YnNjcmliZXIoa2V5LCBncm91cCwgdGhpcykpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdyb3VwLmNsb3NlZCkge1xuICAgICAgICAgICAgZ3JvdXAubmV4dChlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgR3JvdXBCeVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIGdyb3VwcyA9IHRoaXMuZ3JvdXBzO1xuICAgICAgICBpZiAoZ3JvdXBzKSB7XG4gICAgICAgICAgICBncm91cHMuZm9yRWFjaChmdW5jdGlvbiAoZ3JvdXAsIGtleSkge1xuICAgICAgICAgICAgICAgIGdyb3VwLmVycm9yKGVycik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGdyb3Vwcy5jbGVhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIEdyb3VwQnlTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBncm91cHMgPSB0aGlzLmdyb3VwcztcbiAgICAgICAgaWYgKGdyb3Vwcykge1xuICAgICAgICAgICAgZ3JvdXBzLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBncm91cC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBncm91cHMuY2xlYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBHcm91cEJ5U3Vic2NyaWJlci5wcm90b3R5cGUucmVtb3ZlR3JvdXAgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHRoaXMuZ3JvdXBzLmRlbGV0ZShrZXkpO1xuICAgIH07XG4gICAgR3JvdXBCeVN1YnNjcmliZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLmF0dGVtcHRlZFRvVW5zdWJzY3JpYmUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuY291bnQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBHcm91cEJ5U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xudmFyIEdyb3VwRHVyYXRpb25TdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEdyb3VwRHVyYXRpb25TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEdyb3VwRHVyYXRpb25TdWJzY3JpYmVyKGtleSwgZ3JvdXAsIHBhcmVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBncm91cCkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMua2V5ID0ga2V5O1xuICAgICAgICBfdGhpcy5ncm91cCA9IGdyb3VwO1xuICAgICAgICBfdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgR3JvdXBEdXJhdGlvblN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIEdyb3VwRHVyYXRpb25TdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHBhcmVudCA9IF9hLnBhcmVudCwga2V5ID0gX2Eua2V5O1xuICAgICAgICB0aGlzLmtleSA9IHRoaXMucGFyZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgcGFyZW50LnJlbW92ZUdyb3VwKGtleSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBHcm91cER1cmF0aW9uU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xudmFyIEdyb3VwZWRPYnNlcnZhYmxlID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEdyb3VwZWRPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEdyb3VwZWRPYnNlcnZhYmxlKGtleSwgZ3JvdXBTdWJqZWN0LCByZWZDb3VudFN1YnNjcmlwdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5rZXkgPSBrZXk7XG4gICAgICAgIF90aGlzLmdyb3VwU3ViamVjdCA9IGdyb3VwU3ViamVjdDtcbiAgICAgICAgX3RoaXMucmVmQ291bnRTdWJzY3JpcHRpb24gPSByZWZDb3VudFN1YnNjcmlwdGlvbjtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBHcm91cGVkT2JzZXJ2YWJsZS5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHJlZkNvdW50U3Vic2NyaXB0aW9uID0gX2EucmVmQ291bnRTdWJzY3JpcHRpb24sIGdyb3VwU3ViamVjdCA9IF9hLmdyb3VwU3ViamVjdDtcbiAgICAgICAgaWYgKHJlZkNvdW50U3Vic2NyaXB0aW9uICYmICFyZWZDb3VudFN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQobmV3IElubmVyUmVmQ291bnRTdWJzY3JpcHRpb24ocmVmQ291bnRTdWJzY3JpcHRpb24pKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpcHRpb24uYWRkKGdyb3VwU3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIEdyb3VwZWRPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlKSk7XG5leHBvcnQgeyBHcm91cGVkT2JzZXJ2YWJsZSB9O1xudmFyIElubmVyUmVmQ291bnRTdWJzY3JpcHRpb24gPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoSW5uZXJSZWZDb3VudFN1YnNjcmlwdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBJbm5lclJlZkNvdW50U3Vic2NyaXB0aW9uKHBhcmVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHBhcmVudC5jb3VudCsrO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIElubmVyUmVmQ291bnRTdWJzY3JpcHRpb24ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnQ7XG4gICAgICAgIGlmICghcGFyZW50LmNsb3NlZCAmJiAhdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIHBhcmVudC5jb3VudCAtPSAxO1xuICAgICAgICAgICAgaWYgKHBhcmVudC5jb3VudCA9PT0gMCAmJiBwYXJlbnQuYXR0ZW1wdGVkVG9VbnN1YnNjcmliZSkge1xuICAgICAgICAgICAgICAgIHBhcmVudC51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gSW5uZXJSZWZDb3VudFN1YnNjcmlwdGlvbjtcbn0oU3Vic2NyaXB0aW9uKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1ncm91cEJ5LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfT2JzZXJ2YWJsZSxfU3Vic2NyaWJlcixfU3Vic2NyaXB0aW9uLF9vcGVyYXRvcnNfcmVmQ291bnQgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3RTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgcmVmQ291bnQgYXMgaGlnaGVyT3JkZXJSZWZDb3VudCB9IGZyb20gJy4uL29wZXJhdG9ycy9yZWZDb3VudCc7XG52YXIgQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKENvbm5lY3RhYmxlT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb25uZWN0YWJsZU9ic2VydmFibGUoc291cmNlLCBzdWJqZWN0RmFjdG9yeSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIF90aGlzLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7XG4gICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7XG4gICAgICAgIF90aGlzLl9pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN1YmplY3QgPSB0aGlzLl9zdWJqZWN0O1xuICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3N1YmplY3Q7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZU9ic2VydmFibGUucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjtcbiAgICAgICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbXBsZXRlID0gZmFsc2U7XG4gICAgICAgICAgICBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIGNvbm5lY3Rpb24uYWRkKHRoaXMuc291cmNlXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZShuZXcgQ29ubmVjdGFibGVTdWJzY3JpYmVyKHRoaXMuZ2V0U3ViamVjdCgpLCB0aGlzKSkpO1xuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICAgICAgY29ubmVjdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29ubmVjdGlvbjtcbiAgICB9O1xuICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGUucmVmQ291bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBoaWdoZXJPcmRlclJlZkNvdW50KCkodGhpcyk7XG4gICAgfTtcbiAgICByZXR1cm4gQ29ubmVjdGFibGVPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlKSk7XG5leHBvcnQgeyBDb25uZWN0YWJsZU9ic2VydmFibGUgfTtcbmV4cG9ydCB2YXIgY29ubmVjdGFibGVPYnNlcnZhYmxlRGVzY3JpcHRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgY29ubmVjdGFibGVQcm90byA9IENvbm5lY3RhYmxlT2JzZXJ2YWJsZS5wcm90b3R5cGU7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgb3BlcmF0b3I6IHsgdmFsdWU6IG51bGwgfSxcbiAgICAgICAgX3JlZkNvdW50OiB7IHZhbHVlOiAwLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgICAgICBfc3ViamVjdDogeyB2YWx1ZTogbnVsbCwgd3JpdGFibGU6IHRydWUgfSxcbiAgICAgICAgX2Nvbm5lY3Rpb246IHsgdmFsdWU6IG51bGwsIHdyaXRhYmxlOiB0cnVlIH0sXG4gICAgICAgIF9zdWJzY3JpYmU6IHsgdmFsdWU6IGNvbm5lY3RhYmxlUHJvdG8uX3N1YnNjcmliZSB9LFxuICAgICAgICBfaXNDb21wbGV0ZTogeyB2YWx1ZTogY29ubmVjdGFibGVQcm90by5faXNDb21wbGV0ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICAgICAgZ2V0U3ViamVjdDogeyB2YWx1ZTogY29ubmVjdGFibGVQcm90by5nZXRTdWJqZWN0IH0sXG4gICAgICAgIGNvbm5lY3Q6IHsgdmFsdWU6IGNvbm5lY3RhYmxlUHJvdG8uY29ubmVjdCB9LFxuICAgICAgICByZWZDb3VudDogeyB2YWx1ZTogY29ubmVjdGFibGVQcm90by5yZWZDb3VudCB9XG4gICAgfTtcbn0pKCk7XG52YXIgQ29ubmVjdGFibGVTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKENvbm5lY3RhYmxlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBDb25uZWN0YWJsZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGNvbm5lY3RhYmxlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jb25uZWN0YWJsZSA9IGNvbm5lY3RhYmxlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvbm5lY3RhYmxlU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSgpO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsIGVycik7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0YWJsZS5faXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlKCk7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBDb25uZWN0YWJsZVN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNvbm5lY3RhYmxlID0gdGhpcy5jb25uZWN0YWJsZTtcbiAgICAgICAgaWYgKGNvbm5lY3RhYmxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RhYmxlID0gbnVsbDtcbiAgICAgICAgICAgIHZhciBjb25uZWN0aW9uID0gY29ubmVjdGFibGUuX2Nvbm5lY3Rpb247XG4gICAgICAgICAgICBjb25uZWN0YWJsZS5fcmVmQ291bnQgPSAwO1xuICAgICAgICAgICAgY29ubmVjdGFibGUuX3N1YmplY3QgPSBudWxsO1xuICAgICAgICAgICAgY29ubmVjdGFibGUuX2Nvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbm5lY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBDb25uZWN0YWJsZVN1YnNjcmliZXI7XG59KFN1YmplY3RTdWJzY3JpYmVyKSk7XG52YXIgUmVmQ291bnRPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZWZDb3VudE9wZXJhdG9yKGNvbm5lY3RhYmxlKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGFibGUgPSBjb25uZWN0YWJsZTtcbiAgICB9XG4gICAgUmVmQ291bnRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIGNvbm5lY3RhYmxlID0gdGhpcy5jb25uZWN0YWJsZTtcbiAgICAgICAgY29ubmVjdGFibGUuX3JlZkNvdW50Kys7XG4gICAgICAgIHZhciByZWZDb3VudGVyID0gbmV3IFJlZkNvdW50U3Vic2NyaWJlcihzdWJzY3JpYmVyLCBjb25uZWN0YWJsZSk7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKHJlZkNvdW50ZXIpO1xuICAgICAgICBpZiAoIXJlZkNvdW50ZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICByZWZDb3VudGVyLmNvbm5lY3Rpb24gPSBjb25uZWN0YWJsZS5jb25uZWN0KCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICB9O1xuICAgIHJldHVybiBSZWZDb3VudE9wZXJhdG9yO1xufSgpKTtcbnZhciBSZWZDb3VudFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmVmQ291bnRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJlZkNvdW50U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY29ubmVjdGFibGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNvbm5lY3RhYmxlID0gY29ubmVjdGFibGU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVmQ291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb25uZWN0YWJsZSA9IHRoaXMuY29ubmVjdGFibGU7XG4gICAgICAgIGlmICghY29ubmVjdGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb25uZWN0YWJsZSA9IG51bGw7XG4gICAgICAgIHZhciByZWZDb3VudCA9IGNvbm5lY3RhYmxlLl9yZWZDb3VudDtcbiAgICAgICAgaWYgKHJlZkNvdW50IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGw7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29ubmVjdGFibGUuX3JlZkNvdW50ID0gcmVmQ291bnQgLSAxO1xuICAgICAgICBpZiAocmVmQ291bnQgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5jb25uZWN0aW9uO1xuICAgICAgICB2YXIgc2hhcmVkQ29ubmVjdGlvbiA9IGNvbm5lY3RhYmxlLl9jb25uZWN0aW9uO1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICBpZiAoc2hhcmVkQ29ubmVjdGlvbiAmJiAoIWNvbm5lY3Rpb24gfHwgc2hhcmVkQ29ubmVjdGlvbiA9PT0gY29ubmVjdGlvbikpIHtcbiAgICAgICAgICAgIHNoYXJlZENvbm5lY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFJlZkNvdW50U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Q29ubmVjdGFibGVPYnNlcnZhYmxlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfdXRpbF9PYmplY3RVbnN1YnNjcmliZWRFcnJvciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4vU3ViamVjdCc7XG5pbXBvcnQgeyBPYmplY3RVbnN1YnNjcmliZWRFcnJvciB9IGZyb20gJy4vdXRpbC9PYmplY3RVbnN1YnNjcmliZWRFcnJvcic7XG52YXIgQmVoYXZpb3JTdWJqZWN0ID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEJlaGF2aW9yU3ViamVjdCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCZWhhdmlvclN1YmplY3QoX3ZhbHVlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZSwgXCJ2YWx1ZVwiLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VmFsdWUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgQmVoYXZpb3JTdWJqZWN0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpO1xuICAgICAgICBpZiAoc3Vic2NyaXB0aW9uICYmICFzdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodGhpcy5fdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzdWJzY3JpcHRpb247XG4gICAgfTtcbiAgICBCZWhhdmlvclN1YmplY3QucHJvdG90eXBlLmdldFZhbHVlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5oYXNFcnJvcikge1xuICAgICAgICAgICAgdGhyb3cgdGhpcy50aHJvd25FcnJvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE9iamVjdFVuc3Vic2NyaWJlZEVycm9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJlaGF2aW9yU3ViamVjdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB0aGlzLl92YWx1ZSA9IHZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBCZWhhdmlvclN1YmplY3Q7XG59KFN1YmplY3QpKTtcbmV4cG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmVoYXZpb3JTdWJqZWN0LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfTm90aWZpY2F0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuLi9Ob3RpZmljYXRpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVPbihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgZGVsYXkgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gb2JzZXJ2ZU9uT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBPYnNlcnZlT25PcGVyYXRvcihzY2hlZHVsZXIsIGRlbGF5KSk7XG4gICAgfTtcbn1cbnZhciBPYnNlcnZlT25PcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZlT25PcGVyYXRvcihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICB9XG4gICAgT2JzZXJ2ZU9uT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBPYnNlcnZlT25TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuc2NoZWR1bGVyLCB0aGlzLmRlbGF5KSk7XG4gICAgfTtcbiAgICByZXR1cm4gT2JzZXJ2ZU9uT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0IHsgT2JzZXJ2ZU9uT3BlcmF0b3IgfTtcbnZhciBPYnNlcnZlT25TdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKE9ic2VydmVPblN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gT2JzZXJ2ZU9uU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgc2NoZWR1bGVyLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT2JzZXJ2ZU9uU3Vic2NyaWJlci5kaXNwYXRjaCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IGFyZy5ub3RpZmljYXRpb24sIGRlc3RpbmF0aW9uID0gYXJnLmRlc3RpbmF0aW9uO1xuICAgICAgICBub3RpZmljYXRpb24ub2JzZXJ2ZShkZXN0aW5hdGlvbik7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIE9ic2VydmVPblN1YnNjcmliZXIucHJvdG90eXBlLnNjaGVkdWxlTWVzc2FnZSA9IGZ1bmN0aW9uIChub3RpZmljYXRpb24pIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb24uYWRkKHRoaXMuc2NoZWR1bGVyLnNjaGVkdWxlKE9ic2VydmVPblN1YnNjcmliZXIuZGlzcGF0Y2gsIHRoaXMuZGVsYXksIG5ldyBPYnNlcnZlT25NZXNzYWdlKG5vdGlmaWNhdGlvbiwgdGhpcy5kZXN0aW5hdGlvbikpKTtcbiAgICB9O1xuICAgIE9ic2VydmVPblN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVNZXNzYWdlKE5vdGlmaWNhdGlvbi5jcmVhdGVOZXh0KHZhbHVlKSk7XG4gICAgfTtcbiAgICBPYnNlcnZlT25TdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVNZXNzYWdlKE5vdGlmaWNhdGlvbi5jcmVhdGVFcnJvcihlcnIpKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgT2JzZXJ2ZU9uU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNjaGVkdWxlTWVzc2FnZShOb3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHJldHVybiBPYnNlcnZlT25TdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5leHBvcnQgeyBPYnNlcnZlT25TdWJzY3JpYmVyIH07XG52YXIgT2JzZXJ2ZU9uTWVzc2FnZSA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBPYnNlcnZlT25NZXNzYWdlKG5vdGlmaWNhdGlvbiwgZGVzdGluYXRpb24pIHtcbiAgICAgICAgdGhpcy5ub3RpZmljYXRpb24gPSBub3RpZmljYXRpb247XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIE9ic2VydmVPbk1lc3NhZ2U7XG59KCkpO1xuZXhwb3J0IHsgT2JzZXJ2ZU9uTWVzc2FnZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9b2JzZXJ2ZU9uLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCAgUFVSRV9JTVBPUlRTX0VORCAqL1xudmFyIFRpbWVvdXRFcnJvckltcGwgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGltZW91dEVycm9ySW1wbCgpIHtcbiAgICAgICAgRXJyb3IuY2FsbCh0aGlzKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gJ1RpbWVvdXQgaGFzIG9jY3VycmVkJztcbiAgICAgICAgdGhpcy5uYW1lID0gJ1RpbWVvdXRFcnJvcic7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBUaW1lb3V0RXJyb3JJbXBsLnByb3RvdHlwZSA9IC8qQF9fUFVSRV9fKi8gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICAgIHJldHVybiBUaW1lb3V0RXJyb3JJbXBsO1xufSkoKTtcbmV4cG9ydCB2YXIgVGltZW91dEVycm9yID0gVGltZW91dEVycm9ySW1wbDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVRpbWVvdXRFcnJvci5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX21lcmdlQWxsIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IG1lcmdlQWxsIH0gZnJvbSAnLi9tZXJnZUFsbCc7XG5leHBvcnQgZnVuY3Rpb24gY29uY2F0QWxsKCkge1xuICAgIHJldHVybiBtZXJnZUFsbCgxKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmNhdEFsbC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX3V0aWxfaXNTY2hlZHVsZXIsX29wZXJhdG9yc19tZXJnZUFsbCxfZnJvbUFycmF5IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5pbXBvcnQgeyBtZXJnZUFsbCB9IGZyb20gJy4uL29wZXJhdG9ycy9tZXJnZUFsbCc7XG5pbXBvcnQgeyBmcm9tQXJyYXkgfSBmcm9tICcuL2Zyb21BcnJheSc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgdmFyIGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgdmFyIHNjaGVkdWxlciA9IG51bGw7XG4gICAgdmFyIGxhc3QgPSBvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXTtcbiAgICBpZiAoaXNTY2hlZHVsZXIobGFzdCkpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gb2JzZXJ2YWJsZXMucG9wKCk7XG4gICAgICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPiAxICYmIHR5cGVvZiBvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbmN1cnJlbnQgPSBvYnNlcnZhYmxlcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgbGFzdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uY3VycmVudCA9IG9ic2VydmFibGVzLnBvcCgpO1xuICAgIH1cbiAgICBpZiAoc2NoZWR1bGVyID09PSBudWxsICYmIG9ic2VydmFibGVzLmxlbmd0aCA9PT0gMSAmJiBvYnNlcnZhYmxlc1swXSBpbnN0YW5jZW9mIE9ic2VydmFibGUpIHtcbiAgICAgICAgcmV0dXJuIG9ic2VydmFibGVzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VBbGwoY29uY3VycmVudCkoZnJvbUFycmF5KG9ic2VydmFibGVzLCBzY2hlZHVsZXIpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfdXRpbF9pc0FycmF5LF9mcm9tQXJyYXksX091dGVyU3Vic2NyaWJlcixfdXRpbF9zdWJzY3JpYmVUb1Jlc3VsdCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheSc7XG5pbXBvcnQgeyBmcm9tQXJyYXkgfSBmcm9tICcuL2Zyb21BcnJheSc7XG5pbXBvcnQgeyBPdXRlclN1YnNjcmliZXIgfSBmcm9tICcuLi9PdXRlclN1YnNjcmliZXInO1xuaW1wb3J0IHsgc3Vic2NyaWJlVG9SZXN1bHQgfSBmcm9tICcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0JztcbmV4cG9ydCBmdW5jdGlvbiByYWNlKCkge1xuICAgIHZhciBvYnNlcnZhYmxlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG9ic2VydmFibGVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgaWYgKGlzQXJyYXkob2JzZXJ2YWJsZXNbMF0pKSB7XG4gICAgICAgICAgICBvYnNlcnZhYmxlcyA9IG9ic2VydmFibGVzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVzWzBdO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmcm9tQXJyYXkob2JzZXJ2YWJsZXMsIHVuZGVmaW5lZCkubGlmdChuZXcgUmFjZU9wZXJhdG9yKCkpO1xufVxudmFyIFJhY2VPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSYWNlT3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIFJhY2VPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFJhY2VTdWJzY3JpYmVyKHN1YnNjcmliZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBSYWNlT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0IHsgUmFjZU9wZXJhdG9yIH07XG52YXIgUmFjZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmFjZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmFjZVN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmhhc0ZpcnN0ID0gZmFsc2U7XG4gICAgICAgIF90aGlzLm9ic2VydmFibGVzID0gW107XG4gICAgICAgIF90aGlzLnN1YnNjcmlwdGlvbnMgPSBbXTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSYWNlU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAob2JzZXJ2YWJsZSkge1xuICAgICAgICB0aGlzLm9ic2VydmFibGVzLnB1c2gob2JzZXJ2YWJsZSk7XG4gICAgfTtcbiAgICBSYWNlU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgb2JzZXJ2YWJsZXMgPSB0aGlzLm9ic2VydmFibGVzO1xuICAgICAgICB2YXIgbGVuID0gb2JzZXJ2YWJsZXMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbiAmJiAhdGhpcy5oYXNGaXJzdDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG9ic2VydmFibGUgPSBvYnNlcnZhYmxlc1tpXTtcbiAgICAgICAgICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgb2JzZXJ2YWJsZSwgdW5kZWZpbmVkLCBpKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm9ic2VydmFibGVzID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUmFjZVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAoX291dGVyVmFsdWUsIGlubmVyVmFsdWUsIG91dGVySW5kZXgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmhhc0ZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLmhhc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zdWJzY3JpcHRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgIT09IG91dGVySW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHRoaXMuc3Vic2NyaXB0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoaW5uZXJWYWx1ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gUmFjZVN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgUmFjZVN1YnNjcmliZXIgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJhY2UuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlLF9zY2hlZHVsZXJfYXN5bmMsX3V0aWxfaXNOdW1lcmljLF91dGlsX2lzU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gJy4uL3V0aWwvaXNOdW1lcmljJztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5leHBvcnQgZnVuY3Rpb24gdGltZXIoZHVlVGltZSwgcGVyaW9kT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikge1xuICAgIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHtcbiAgICAgICAgZHVlVGltZSA9IDA7XG4gICAgfVxuICAgIHZhciBwZXJpb2QgPSAtMTtcbiAgICBpZiAoaXNOdW1lcmljKHBlcmlvZE9yU2NoZWR1bGVyKSkge1xuICAgICAgICBwZXJpb2QgPSBOdW1iZXIocGVyaW9kT3JTY2hlZHVsZXIpIDwgMSAmJiAxIHx8IE51bWJlcihwZXJpb2RPclNjaGVkdWxlcik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU2NoZWR1bGVyKHBlcmlvZE9yU2NoZWR1bGVyKSkge1xuICAgICAgICBzY2hlZHVsZXIgPSBwZXJpb2RPclNjaGVkdWxlcjtcbiAgICB9XG4gICAgaWYgKCFpc1NjaGVkdWxlcihzY2hlZHVsZXIpKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFzeW5jO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGR1ZSA9IGlzTnVtZXJpYyhkdWVUaW1lKVxuICAgICAgICAgICAgPyBkdWVUaW1lXG4gICAgICAgICAgICA6ICgrZHVlVGltZSAtIHNjaGVkdWxlci5ub3coKSk7XG4gICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2gsIGR1ZSwge1xuICAgICAgICAgICAgaW5kZXg6IDAsIHBlcmlvZDogcGVyaW9kLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyXG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2goc3RhdGUpIHtcbiAgICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCwgcGVyaW9kID0gc3RhdGUucGVyaW9kLCBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlcjtcbiAgICBzdWJzY3JpYmVyLm5leHQoaW5kZXgpO1xuICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsc2UgaWYgKHBlcmlvZCA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICB9XG4gICAgc3RhdGUuaW5kZXggPSBpbmRleCArIDE7XG4gICAgdGhpcy5zY2hlZHVsZShzdGF0ZSwgcGVyaW9kKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVyLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfc2NoZWR1bGVPYnNlcnZhYmxlLF9zY2hlZHVsZVByb21pc2UsX3NjaGVkdWxlQXJyYXksX3NjaGVkdWxlSXRlcmFibGUsX3V0aWxfaXNJbnRlcm9wT2JzZXJ2YWJsZSxfdXRpbF9pc1Byb21pc2UsX3V0aWxfaXNBcnJheUxpa2UsX3V0aWxfaXNJdGVyYWJsZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBzY2hlZHVsZU9ic2VydmFibGUgfSBmcm9tICcuL3NjaGVkdWxlT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBzY2hlZHVsZVByb21pc2UgfSBmcm9tICcuL3NjaGVkdWxlUHJvbWlzZSc7XG5pbXBvcnQgeyBzY2hlZHVsZUFycmF5IH0gZnJvbSAnLi9zY2hlZHVsZUFycmF5JztcbmltcG9ydCB7IHNjaGVkdWxlSXRlcmFibGUgfSBmcm9tICcuL3NjaGVkdWxlSXRlcmFibGUnO1xuaW1wb3J0IHsgaXNJbnRlcm9wT2JzZXJ2YWJsZSB9IGZyb20gJy4uL3V0aWwvaXNJbnRlcm9wT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuLi91dGlsL2lzUHJvbWlzZSc7XG5pbXBvcnQgeyBpc0FycmF5TGlrZSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheUxpa2UnO1xuaW1wb3J0IHsgaXNJdGVyYWJsZSB9IGZyb20gJy4uL3V0aWwvaXNJdGVyYWJsZSc7XG5leHBvcnQgZnVuY3Rpb24gc2NoZWR1bGVkKGlucHV0LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZU9ic2VydmFibGUoaW5wdXQsIHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNQcm9taXNlKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlUHJvbWlzZShpbnB1dCwgc2NoZWR1bGVyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzSXRlcmFibGUoaW5wdXQpIHx8IHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZUl0ZXJhYmxlKGlucHV0LCBzY2hlZHVsZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoKGlucHV0ICE9PSBudWxsICYmIHR5cGVvZiBpbnB1dCB8fCBpbnB1dCkgKyAnIGlzIG5vdCBvYnNlcnZhYmxlJyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZWQuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9zeW1ib2xfb2JzZXJ2YWJsZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi4vc3ltYm9sL29ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJvcE9ic2VydmFibGUoaW5wdXQpIHtcbiAgICByZXR1cm4gaW5wdXQgJiYgdHlwZW9mIGlucHV0W1N5bWJvbF9vYnNlcnZhYmxlXSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzSW50ZXJvcE9ic2VydmFibGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlLF9TdWJzY3JpcHRpb24sX3N5bWJvbF9vYnNlcnZhYmxlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBvYnNlcnZhYmxlIGFzIFN5bWJvbF9vYnNlcnZhYmxlIH0gZnJvbSAnLi4vc3ltYm9sL29ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlT2JzZXJ2YWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWIgPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHN1Yi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gaW5wdXRbU3ltYm9sX29ic2VydmFibGVdKCk7XG4gICAgICAgICAgICBzdWIuYWRkKG9ic2VydmFibGUuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHsgc3ViLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlci5uZXh0KHZhbHVlKTsgfSkpOyB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7IHN1Yi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsgfSkpOyB9LFxuICAgICAgICAgICAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7IHN1Yi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSkpOyB9LFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBzdWI7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZU9ic2VydmFibGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlLF9TdWJzY3JpcHRpb24gUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmV4cG9ydCBmdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3ViID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgICAgICBzdWIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdWIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHN1Yi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsgfSkpO1xuICAgICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH0sIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzdWIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0pKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgICAgIHJldHVybiBzdWI7XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY2hlZHVsZVByb21pc2UuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9zeW1ib2xfaXRlcmF0b3IgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgaXRlcmF0b3IgYXMgU3ltYm9sX2l0ZXJhdG9yIH0gZnJvbSAnLi4vc3ltYm9sL2l0ZXJhdG9yJztcbmV4cG9ydCBmdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7XG4gICAgcmV0dXJuIGlucHV0ICYmIHR5cGVvZiBpbnB1dFtTeW1ib2xfaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aXNJdGVyYWJsZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX1N1YnNjcmlwdGlvbixfc3ltYm9sX2l0ZXJhdG9yIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBpdGVyYXRvciBhcyBTeW1ib2xfaXRlcmF0b3IgfSBmcm9tICcuLi9zeW1ib2wvaXRlcmF0b3InO1xuZXhwb3J0IGZ1bmN0aW9uIHNjaGVkdWxlSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikge1xuICAgIGlmICghaW5wdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJdGVyYWJsZSBjYW5ub3QgYmUgbnVsbCcpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHN1YiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgdmFyIGl0ZXJhdG9yO1xuICAgICAgICBzdWIuYWRkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChpdGVyYXRvciAmJiB0eXBlb2YgaXRlcmF0b3IucmV0dXJuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgaXRlcmF0b3IucmV0dXJuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdWIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdGVyYXRvciA9IGlucHV0W1N5bWJvbF9pdGVyYXRvcl0oKTtcbiAgICAgICAgICAgIHN1Yi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgdmFsdWU7XG4gICAgICAgICAgICAgICAgdmFyIGRvbmU7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZXN1bHQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUgPSByZXN1bHQuZG9uZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zY2hlZHVsZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gc3ViO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2NoZWR1bGVJdGVyYWJsZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmlwdGlvbiBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi9TdWJzY3JpcHRpb24nO1xudmFyIFN1YmplY3RTdWJzY3JpcHRpb24gPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoU3ViamVjdFN1YnNjcmlwdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJqZWN0U3Vic2NyaXB0aW9uKHN1YmplY3QsIHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc3ViamVjdCA9IHN1YmplY3Q7XG4gICAgICAgIF90aGlzLnN1YnNjcmliZXIgPSBzdWJzY3JpYmVyO1xuICAgICAgICBfdGhpcy5jbG9zZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJqZWN0U3Vic2NyaXB0aW9uLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbG9zZWQgPSB0cnVlO1xuICAgICAgICB2YXIgc3ViamVjdCA9IHRoaXMuc3ViamVjdDtcbiAgICAgICAgdmFyIG9ic2VydmVycyA9IHN1YmplY3Qub2JzZXJ2ZXJzO1xuICAgICAgICB0aGlzLnN1YmplY3QgPSBudWxsO1xuICAgICAgICBpZiAoIW9ic2VydmVycyB8fCBvYnNlcnZlcnMubGVuZ3RoID09PSAwIHx8IHN1YmplY3QuaXNTdG9wcGVkIHx8IHN1YmplY3QuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN1YnNjcmliZXJJbmRleCA9IG9ic2VydmVycy5pbmRleE9mKHRoaXMuc3Vic2NyaWJlcik7XG4gICAgICAgIGlmIChzdWJzY3JpYmVySW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICBvYnNlcnZlcnMuc3BsaWNlKHN1YnNjcmliZXJJbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTdWJqZWN0U3Vic2NyaXB0aW9uO1xufShTdWJzY3JpcHRpb24pKTtcbmV4cG9ydCB7IFN1YmplY3RTdWJzY3JpcHRpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVN1YmplY3RTdWJzY3JpcHRpb24uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG5leHBvcnQgdmFyIHN1YnNjcmliZVRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyYXkpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbiAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkrKykge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KGFycmF5W2ldKTtcbiAgICAgICAgfVxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgfTtcbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdWJzY3JpYmVUb0FycmF5LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCAgUFVSRV9JTVBPUlRTX0VORCAqL1xuZXhwb3J0IHZhciBpc0FycmF5TGlrZSA9IChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCAmJiB0eXBlb2YgeC5sZW5ndGggPT09ICdudW1iZXInICYmIHR5cGVvZiB4ICE9PSAnZnVuY3Rpb24nOyB9KTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzQXJyYXlMaWtlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCAgUFVSRV9JTVBPUlRTX0VORCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZSkge1xuICAgIHJldHVybiAhIXZhbHVlICYmIHR5cGVvZiB2YWx1ZS5zdWJzY3JpYmUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbHVlLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc1Byb21pc2UuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUICBQVVJFX0lNUE9SVFNfRU5EICovXG5leHBvcnQgZnVuY3Rpb24gbm90KHByZWQsIHRoaXNBcmcpIHtcbiAgICBmdW5jdGlvbiBub3RQcmVkKCkge1xuICAgICAgICByZXR1cm4gIShub3RQcmVkLnByZWQuYXBwbHkobm90UHJlZC50aGlzQXJnLCBhcmd1bWVudHMpKTtcbiAgICB9XG4gICAgbm90UHJlZC5wcmVkID0gcHJlZDtcbiAgICBub3RQcmVkLnRoaXNBcmcgPSB0aGlzQXJnO1xuICAgIHJldHVybiBub3RQcmVkO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bm90LmpzLm1hcFxuIiwidmFyIGc7XG5cbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXG5nID0gKGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn0pKCk7XG5cbnRyeSB7XG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxuXHRnID0gZyB8fCBuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1xufSBjYXRjaCAoZSkge1xuXHQvLyBUaGlzIHdvcmtzIGlmIHRoZSB3aW5kb3cgcmVmZXJlbmNlIGlzIGF2YWlsYWJsZVxuXHRpZiAodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIikgZyA9IHdpbmRvdztcbn1cblxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3Ncbi8vIGVhc2llciB0byBoYW5kbGUgdGhpcyBjYXNlLiBpZighZ2xvYmFsKSB7IC4uLn1cblxubW9kdWxlLmV4cG9ydHMgPSBnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBNYXAgPSBnZXROYXRpdmUocm9vdCwgJ01hcCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1hcDtcbiIsInZhciBtYXBDYWNoZUNsZWFyID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVDbGVhcicpLFxuICAgIG1hcENhY2hlRGVsZXRlID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVEZWxldGUnKSxcbiAgICBtYXBDYWNoZUdldCA9IHJlcXVpcmUoJy4vX21hcENhY2hlR2V0JyksXG4gICAgbWFwQ2FjaGVIYXMgPSByZXF1aXJlKCcuL19tYXBDYWNoZUhhcycpLFxuICAgIG1hcENhY2hlU2V0ID0gcmVxdWlyZSgnLi9fbWFwQ2FjaGVTZXQnKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbWFwIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIE1hcENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID09IG51bGwgPyAwIDogZW50cmllcy5sZW5ndGg7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLy8gQWRkIG1ldGhvZHMgdG8gYE1hcENhY2hlYC5cbk1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7XG5NYXBDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbWFwQ2FjaGVEZWxldGU7XG5NYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7XG5NYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7XG5NYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7XG5cbm1vZHVsZS5leHBvcnRzID0gTWFwQ2FjaGU7XG4iLCJ2YXIgYXJyYXlMaWtlS2V5cyA9IHJlcXVpcmUoJy4vX2FycmF5TGlrZUtleXMnKSxcbiAgICBiYXNlS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VLZXlzJyksXG4gICAgaXNBcnJheUxpa2UgPSByZXF1aXJlKCcuL2lzQXJyYXlMaWtlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiB0aGUgb3duIGVudW1lcmFibGUgcHJvcGVydHkgbmFtZXMgb2YgYG9iamVjdGAuXG4gKlxuICogKipOb3RlOioqIE5vbi1vYmplY3QgdmFsdWVzIGFyZSBjb2VyY2VkIHRvIG9iamVjdHMuIFNlZSB0aGVcbiAqIFtFUyBzcGVjXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3Qua2V5cylcbiAqIGZvciBtb3JlIGRldGFpbHMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqIEBleGFtcGxlXG4gKlxuICogZnVuY3Rpb24gRm9vKCkge1xuICogICB0aGlzLmEgPSAxO1xuICogICB0aGlzLmIgPSAyO1xuICogfVxuICpcbiAqIEZvby5wcm90b3R5cGUuYyA9IDM7XG4gKlxuICogXy5rZXlzKG5ldyBGb28pO1xuICogLy8gPT4gWydhJywgJ2InXSAoaXRlcmF0aW9uIG9yZGVyIGlzIG5vdCBndWFyYW50ZWVkKVxuICpcbiAqIF8ua2V5cygnaGknKTtcbiAqIC8vID0+IFsnMCcsICcxJ11cbiAqL1xuZnVuY3Rpb24ga2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGlzQXJyYXlMaWtlKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGtleXM7XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgbGVuZ3RoLlxuICpcbiAqICoqTm90ZToqKiBUaGlzIG1ldGhvZCBpcyBsb29zZWx5IGJhc2VkIG9uXG4gKiBbYFRvTGVuZ3RoYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9sZW5ndGgpLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgdmFsaWQgbGVuZ3RoLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNMZW5ndGgoMyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0xlbmd0aChOdW1iZXIuTUlOX1ZBTFVFKTtcbiAqIC8vID0+IGZhbHNlXG4gKlxuICogXy5pc0xlbmd0aChJbmZpbml0eSk7XG4gKiAvLyA9PiBmYWxzZVxuICpcbiAqIF8uaXNMZW5ndGgoJzMnKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzTGVuZ3RoKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicgJiZcbiAgICB2YWx1ZSA+IC0xICYmIHZhbHVlICUgMSA9PSAwICYmIHZhbHVlIDw9IE1BWF9TQUZFX0lOVEVHRVI7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNMZW5ndGg7XG4iLCJ2YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVJc0RlZXBQcm9wID0gL1xcLnxcXFsoPzpbXltcXF1dKnwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKj9cXDEpXFxdLyxcbiAgICByZUlzUGxhaW5Qcm9wID0gL15cXHcqJC87XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBwcm9wZXJ0eSBuYW1lIGFuZCBub3QgYSBwcm9wZXJ0eSBwYXRoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5IGtleXMgb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHByb3BlcnR5IG5hbWUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNLZXkodmFsdWUsIG9iamVjdCkge1xuICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGlmICh0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicgfHxcbiAgICAgIHZhbHVlID09IG51bGwgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgcmV0dXJuIHJlSXNQbGFpblByb3AudGVzdCh2YWx1ZSkgfHwgIXJlSXNEZWVwUHJvcC50ZXN0KHZhbHVlKSB8fFxuICAgIChvYmplY3QgIT0gbnVsbCAmJiB2YWx1ZSBpbiBPYmplY3Qob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNLZXk7XG4iLCJjbGFzcyBCYXNlUGFnZSB7XG5cbiAgdGVtcGxhdGU7XG5cbiAgY29uc3RydWN0b3IocHJvcHMgPSB7fSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICB0aGlzW2tleV0gPSBwcm9wc1trZXldO1xuICAgIH0pO1xuICAgIHRoaXMud2F0Y2hGYWNlID0gcHJvcHMud2F0Y2hGYWNlO1xuICB9XG5cbiAgbmF2aWdhdGUobG9jYXRpb24pIHtcbiAgICB0aGlzLm5hdmlnYXRlKGxvY2F0aW9uKVxuICB9XG5cbiAgcGFnZVdpbGxMb2FkKCkge1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmICghdGhpcy50ZW1wbGF0ZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGVtcGxhdGUgbm90IGRlZmluZWQ6IERpZCB5b3UgZm9yZ2V0IGB0ZW1wbGF0ZSA9IHJlcXVpcmUoJ3BhdGgvdG8vdGVtcGxhdGUuaGJzJyk7YD9cIik7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcykpXG5cbiAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZShjb250ZXh0KTtcbiAgfVxuXG4gIHBhZ2VEaWRMb2FkKCkge1xuICB9XG5cbiAgcmlnaHRCdXR0b25FdmVudCgpIHtcbiAgfVxuXG4gIGxlZnRCdXR0b25FdmVudCgpIHtcbiAgfVxuXG4gIHRvcEJ1dHRvbkV2ZW50KCkge1xuICB9XG5cbiAgYm90dG9tQnV0dG9uRXZlbnQoKSB7XG4gIH1cblxuICBmYWNlQnV0dG9uRXZlbnQoKSB7XG4gIH1cblxuICAvLyBkb3VibGUgY2xpY2tzXG4gIHJpZ2h0QnV0dG9uRXZlbnREb3VibGVDbGljaygpIHtcbiAgfVxuXG4gIGxlZnRCdXR0b25FdmVudERvdWJsZUNsaWNrKCkge1xuICB9XG5cbiAgdG9wQnV0dG9uRXZlbnREb3VibGVDbGljaygpIHtcbiAgfVxuXG4gIGJvdHRvbUJ1dHRvbkV2ZW50RG91YmxlQ2xpY2soKSB7XG4gIH1cblxuICBmYWNlQnV0dG9uRXZlbnREb3VibGVDbGljaygpIHtcbiAgfVxuXG4gIC8vIGxvbmcgaG9sZFxuXG4gIHJpZ2h0QnV0dG9uRXZlbnRIb2xkKCkge1xuICB9XG5cbiAgbGVmdEJ1dHRvbkV2ZW50SG9sZCgpIHtcbiAgfVxuXG4gIHRvcEJ1dHRvbkV2ZW50SG9sZCgpIHtcbiAgfVxuXG4gIGJvdHRvbUJ1dHRvbkV2ZW50SG9sZCgpIHtcbiAgfVxuXG4gIGZhY2VCdXR0b25FdmVudEhvbGQoKSB7XG4gIH1cblxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VQYWdlO1xuIiwiY29uc3QgQmFzZVBhZ2UgPSByZXF1aXJlKCcuL0Jhc2VQYWdlJyk7XG5jb25zdCBOb3RpZmljYXRpb25IdWIgPSByZXF1aXJlKCcuLi9QdWJsaWNOb3RpZmljYXRpb25IdWInKTtcblxuY2xhc3MgQmFzZU5vdGlmaWNhdGlvbiBleHRlbmRzIEJhc2VQYWdlIHtcbiAgdGVtcGxhdGUgPSByZXF1aXJlKCcuLi90ZW1wbGF0ZXMvYmFzZU5vdGlmaWNhdGlvbi5oYnMnKVxuICBcbiAgbGVmdEJ1dHRvbkV2ZW50KCkge1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5oaWRlKCk7XG4gIH1cbiAgcmlnaHRCdXR0b25FdmVudCgpIHtcbiAgICBOb3RpZmljYXRpb25IdWIuaGlkZSgpO1xuICB9XG4gIHRvcEJ1dHRvbkV2ZW50KCkge1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5oaWRlKCk7XG4gIH1cbiAgYm90dG9tQnV0dG9uRXZlbnQoKSB7XG4gICAgTm90aWZpY2F0aW9uSHViLmhpZGUoKTtcbiAgfVxuICBmYWNlQnV0dG9uRXZlbnQoKSB7XG4gICAgTm90aWZpY2F0aW9uSHViLmhpZGUoKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEJhc2VOb3RpZmljYXRpb247XG4iLCJjb25zdCBOb3RpZmljYXRpb25IdWIgPSByZXF1aXJlKCcuL3NyYy9Ob3RpZmljYXRpb25IdWInKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNob3c6IE5vdGlmaWNhdGlvbkh1Yi5zaG93LFxuICBoaWRlOiBOb3RpZmljYXRpb25IdWIuaGlkZSxcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuSGFuZGxlYmFyc0Vudmlyb25tZW50ID0gSGFuZGxlYmFyc0Vudmlyb25tZW50O1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX3V0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbnZhciBfaGVscGVycyA9IHJlcXVpcmUoJy4vaGVscGVycycpO1xuXG52YXIgX2RlY29yYXRvcnMgPSByZXF1aXJlKCcuL2RlY29yYXRvcnMnKTtcblxudmFyIF9sb2dnZXIgPSByZXF1aXJlKCcuL2xvZ2dlcicpO1xuXG52YXIgX2xvZ2dlcjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9sb2dnZXIpO1xuXG52YXIgX2ludGVybmFsUHJvdG9BY2Nlc3MgPSByZXF1aXJlKCcuL2ludGVybmFsL3Byb3RvLWFjY2VzcycpO1xuXG52YXIgVkVSU0lPTiA9ICc0LjcuNyc7XG5leHBvcnRzLlZFUlNJT04gPSBWRVJTSU9OO1xudmFyIENPTVBJTEVSX1JFVklTSU9OID0gODtcbmV4cG9ydHMuQ09NUElMRVJfUkVWSVNJT04gPSBDT01QSUxFUl9SRVZJU0lPTjtcbnZhciBMQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gPSA3O1xuXG5leHBvcnRzLkxBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTiA9IExBU1RfQ09NUEFUSUJMRV9DT01QSUxFUl9SRVZJU0lPTjtcbnZhciBSRVZJU0lPTl9DSEFOR0VTID0ge1xuICAxOiAnPD0gMS4wLnJjLjInLCAvLyAxLjAucmMuMiBpcyBhY3R1YWxseSByZXYyIGJ1dCBkb2Vzbid0IHJlcG9ydCBpdFxuICAyOiAnPT0gMS4wLjAtcmMuMycsXG4gIDM6ICc9PSAxLjAuMC1yYy40JyxcbiAgNDogJz09IDEueC54JyxcbiAgNTogJz09IDIuMC4wLWFscGhhLngnLFxuICA2OiAnPj0gMi4wLjAtYmV0YS4xJyxcbiAgNzogJz49IDQuMC4wIDw0LjMuMCcsXG4gIDg6ICc+PSA0LjMuMCdcbn07XG5cbmV4cG9ydHMuUkVWSVNJT05fQ0hBTkdFUyA9IFJFVklTSU9OX0NIQU5HRVM7XG52YXIgb2JqZWN0VHlwZSA9ICdbb2JqZWN0IE9iamVjdF0nO1xuXG5mdW5jdGlvbiBIYW5kbGViYXJzRW52aXJvbm1lbnQoaGVscGVycywgcGFydGlhbHMsIGRlY29yYXRvcnMpIHtcbiAgdGhpcy5oZWxwZXJzID0gaGVscGVycyB8fCB7fTtcbiAgdGhpcy5wYXJ0aWFscyA9IHBhcnRpYWxzIHx8IHt9O1xuICB0aGlzLmRlY29yYXRvcnMgPSBkZWNvcmF0b3JzIHx8IHt9O1xuXG4gIF9oZWxwZXJzLnJlZ2lzdGVyRGVmYXVsdEhlbHBlcnModGhpcyk7XG4gIF9kZWNvcmF0b3JzLnJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnModGhpcyk7XG59XG5cbkhhbmRsZWJhcnNFbnZpcm9ubWVudC5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBIYW5kbGViYXJzRW52aXJvbm1lbnQsXG5cbiAgbG9nZ2VyOiBfbG9nZ2VyMlsnZGVmYXVsdCddLFxuICBsb2c6IF9sb2dnZXIyWydkZWZhdWx0J10ubG9nLFxuXG4gIHJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiByZWdpc3RlckhlbHBlcihuYW1lLCBmbikge1xuICAgIGlmIChfdXRpbHMudG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGhlbHBlcnMnKTtcbiAgICAgIH1cbiAgICAgIF91dGlscy5leHRlbmQodGhpcy5oZWxwZXJzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWxwZXJzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVySGVscGVyOiBmdW5jdGlvbiB1bnJlZ2lzdGVySGVscGVyKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5oZWxwZXJzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24gcmVnaXN0ZXJQYXJ0aWFsKG5hbWUsIHBhcnRpYWwpIHtcbiAgICBpZiAoX3V0aWxzLnRvU3RyaW5nLmNhbGwobmFtZSkgPT09IG9iamVjdFR5cGUpIHtcbiAgICAgIF91dGlscy5leHRlbmQodGhpcy5wYXJ0aWFscywgbmFtZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0eXBlb2YgcGFydGlhbCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ0F0dGVtcHRpbmcgdG8gcmVnaXN0ZXIgYSBwYXJ0aWFsIGNhbGxlZCBcIicgKyBuYW1lICsgJ1wiIGFzIHVuZGVmaW5lZCcpO1xuICAgICAgfVxuICAgICAgdGhpcy5wYXJ0aWFsc1tuYW1lXSA9IHBhcnRpYWw7XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyUGFydGlhbDogZnVuY3Rpb24gdW5yZWdpc3RlclBhcnRpYWwobmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLnBhcnRpYWxzW25hbWVdO1xuICB9LFxuXG4gIHJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbiByZWdpc3RlckRlY29yYXRvcihuYW1lLCBmbikge1xuICAgIGlmIChfdXRpbHMudG9TdHJpbmcuY2FsbChuYW1lKSA9PT0gb2JqZWN0VHlwZSkge1xuICAgICAgaWYgKGZuKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdBcmcgbm90IHN1cHBvcnRlZCB3aXRoIG11bHRpcGxlIGRlY29yYXRvcnMnKTtcbiAgICAgIH1cbiAgICAgIF91dGlscy5leHRlbmQodGhpcy5kZWNvcmF0b3JzLCBuYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWNvcmF0b3JzW25hbWVdID0gZm47XG4gICAgfVxuICB9LFxuICB1bnJlZ2lzdGVyRGVjb3JhdG9yOiBmdW5jdGlvbiB1bnJlZ2lzdGVyRGVjb3JhdG9yKG5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy5kZWNvcmF0b3JzW25hbWVdO1xuICB9LFxuICAvKipcbiAgICogUmVzZXQgdGhlIG1lbW9yeSBvZiBpbGxlZ2FsIHByb3BlcnR5IGFjY2Vzc2VzIHRoYXQgaGF2ZSBhbHJlYWR5IGJlZW4gbG9nZ2VkLlxuICAgKiBAZGVwcmVjYXRlZCBzaG91bGQgb25seSBiZSB1c2VkIGluIGhhbmRsZWJhcnMgdGVzdC1jYXNlc1xuICAgKi9cbiAgcmVzZXRMb2dnZWRQcm9wZXJ0eUFjY2Vzc2VzOiBmdW5jdGlvbiByZXNldExvZ2dlZFByb3BlcnR5QWNjZXNzZXMoKSB7XG4gICAgX2ludGVybmFsUHJvdG9BY2Nlc3MucmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCk7XG4gIH1cbn07XG5cbnZhciBsb2cgPSBfbG9nZ2VyMlsnZGVmYXVsdCddLmxvZztcblxuZXhwb3J0cy5sb2cgPSBsb2c7XG5leHBvcnRzLmNyZWF0ZUZyYW1lID0gX3V0aWxzLmNyZWF0ZUZyYW1lO1xuZXhwb3J0cy5sb2dnZXIgPSBfbG9nZ2VyMlsnZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMkpoYzJVdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3pzN2NVSkJRVGhETEZOQlFWTTdPM2xDUVVOcVF5eGhRVUZoT3pzN08zVkNRVU5KTEZkQlFWYzdPekJDUVVOU0xHTkJRV003TzNOQ1FVTnlReXhWUVVGVk96czdPMjFEUVVOVExIbENRVUY1UWpzN1FVRkZlRVFzU1VGQlRTeFBRVUZQTEVkQlFVY3NUMEZCVHl4RFFVRkRPenRCUVVONFFpeEpRVUZOTEdsQ1FVRnBRaXhIUVVGSExFTkJRVU1zUTBGQlF6czdRVUZETlVJc1NVRkJUU3hwUTBGQmFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNN096dEJRVVUxUXl4SlFVRk5MR2RDUVVGblFpeEhRVUZITzBGQlF6bENMRWRCUVVNc1JVRkJSU3hoUVVGaE8wRkJRMmhDTEVkQlFVTXNSVUZCUlN4bFFVRmxPMEZCUTJ4Q0xFZEJRVU1zUlVGQlJTeGxRVUZsTzBGQlEyeENMRWRCUVVNc1JVRkJSU3hWUVVGVk8wRkJRMklzUjBGQlF5eEZRVUZGTEd0Q1FVRnJRanRCUVVOeVFpeEhRVUZETEVWQlFVVXNhVUpCUVdsQ08wRkJRM0JDTEVkQlFVTXNSVUZCUlN4cFFrRkJhVUk3UVVGRGNFSXNSMEZCUXl4RlFVRkZMRlZCUVZVN1EwRkRaQ3hEUVVGRE96czdRVUZGUml4SlFVRk5MRlZCUVZVc1IwRkJSeXhwUWtGQmFVSXNRMEZCUXpzN1FVRkZPVUlzVTBGQlV5eHhRa0ZCY1VJc1EwRkJReXhQUVVGUExFVkJRVVVzVVVGQlVTeEZRVUZGTEZWQlFWVXNSVUZCUlR0QlFVTnVSU3hOUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNTVUZCU1N4RlFVRkZMRU5CUVVNN1FVRkROMElzVFVGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4UlFVRlJMRWxCUVVrc1JVRkJSU3hEUVVGRE8wRkJReTlDTEUxQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1ZVRkJWU3hKUVVGSkxFVkJRVVVzUTBGQlF6czdRVUZGYmtNc2EwTkJRWFZDTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUXpkQ0xIZERRVUV3UWl4SlFVRkpMRU5CUVVNc1EwRkJRenREUVVOcVF6czdRVUZGUkN4eFFrRkJjVUlzUTBGQlF5eFRRVUZUTEVkQlFVYzdRVUZEYUVNc1lVRkJWeXhGUVVGRkxIRkNRVUZ4UWpzN1FVRkZiRU1zVVVGQlRTeHhRa0ZCVVR0QlFVTmtMRXRCUVVjc1JVRkJSU3h2UWtGQlR5eEhRVUZIT3p0QlFVVm1MR2RDUVVGakxFVkJRVVVzZDBKQlFWTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1JVRkJSVHRCUVVOcVF5eFJRVUZKTEdkQ1FVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eFZRVUZWTEVWQlFVVTdRVUZEZEVNc1ZVRkJTU3hGUVVGRkxFVkJRVVU3UVVGRFRpeGpRVUZOTERKQ1FVRmpMSGxEUVVGNVF5eERRVUZETEVOQlFVTTdUMEZEYUVVN1FVRkRSQ3h2UWtGQlR5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRelZDTEUxQlFVMDdRVUZEVEN4VlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0TFFVTjZRanRIUVVOR08wRkJRMFFzYTBKQlFXZENMRVZCUVVVc01FSkJRVk1zU1VGQlNTeEZRVUZGTzBGQlF5OUNMRmRCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0SFFVTXpRanM3UVVGRlJDeHBRa0ZCWlN4RlFVRkZMSGxDUVVGVExFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVTdRVUZEZGtNc1VVRkJTU3huUWtGQlV5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1ZVRkJWU3hGUVVGRk8wRkJRM1JETEc5Q1FVRlBMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzU1VGQlNTeERRVUZETEVOQlFVTTdTMEZETjBJc1RVRkJUVHRCUVVOTUxGVkJRVWtzVDBGQlR5eFBRVUZQTEV0QlFVc3NWMEZCVnl4RlFVRkZPMEZCUTJ4RExHTkJRVTBzZVVWQlEzZERMRWxCUVVrc2IwSkJRMnBFTEVOQlFVTTdUMEZEU0R0QlFVTkVMRlZCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRPMHRCUXk5Q08wZEJRMFk3UVVGRFJDeHRRa0ZCYVVJc1JVRkJSU3d5UWtGQlV5eEpRVUZKTEVWQlFVVTdRVUZEYUVNc1YwRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMGRCUXpWQ096dEJRVVZFTEcxQ1FVRnBRaXhGUVVGRkxESkNRVUZUTEVsQlFVa3NSVUZCUlN4RlFVRkZMRVZCUVVVN1FVRkRjRU1zVVVGQlNTeG5Ra0ZCVXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzVlVGQlZTeEZRVUZGTzBGQlEzUkRMRlZCUVVrc1JVRkJSU3hGUVVGRk8wRkJRMDRzWTBGQlRTd3lRa0ZCWXl3MFEwRkJORU1zUTBGQlF5eERRVUZETzA5QlEyNUZPMEZCUTBRc2IwSkJRVThzU1VGQlNTeERRVUZETEZWQlFWVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJRenRMUVVNdlFpeE5RVUZOTzBGQlEwd3NWVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdTMEZETlVJN1IwRkRSanRCUVVORUxIRkNRVUZ0UWl4RlFVRkZMRFpDUVVGVExFbEJRVWtzUlVGQlJUdEJRVU5zUXl4WFFVRlBMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdSMEZET1VJN096czdPMEZCUzBRc05rSkJRVEpDTEVWQlFVRXNkVU5CUVVjN1FVRkROVUlzWjBSQlFYVkNMRU5CUVVNN1IwRkRla0k3UTBGRFJpeERRVUZET3p0QlFVVkxMRWxCUVVrc1IwRkJSeXhIUVVGSExHOUNRVUZQTEVkQlFVY3NRMEZCUXpzN08xRkJSVzVDTEZkQlFWYzdVVUZCUlN4TlFVRk5JaXdpWm1sc1pTSTZJbUpoYzJVdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpwYlhCdmNuUWdleUJqY21WaGRHVkdjbUZ0WlN3Z1pYaDBaVzVrTENCMGIxTjBjbWx1WnlCOUlHWnliMjBnSnk0dmRYUnBiSE1uTzF4dWFXMXdiM0owSUVWNFkyVndkR2x2YmlCbWNtOXRJQ2N1TDJWNFkyVndkR2x2YmljN1hHNXBiWEJ2Y25RZ2V5QnlaV2RwYzNSbGNrUmxabUYxYkhSSVpXeHdaWEp6SUgwZ1puSnZiU0FuTGk5b1pXeHdaWEp6Snp0Y2JtbHRjRzl5ZENCN0lISmxaMmx6ZEdWeVJHVm1ZWFZzZEVSbFkyOXlZWFJ2Y25NZ2ZTQm1jbTl0SUNjdUwyUmxZMjl5WVhSdmNuTW5PMXh1YVcxd2IzSjBJR3h2WjJkbGNpQm1jbTl0SUNjdUwyeHZaMmRsY2ljN1hHNXBiWEJ2Y25RZ2V5QnlaWE5sZEV4dloyZGxaRkJ5YjNCbGNuUnBaWE1nZlNCbWNtOXRJQ2N1TDJsdWRHVnlibUZzTDNCeWIzUnZMV0ZqWTJWemN5YzdYRzVjYm1WNGNHOXlkQ0JqYjI1emRDQldSVkpUU1U5T0lEMGdKelF1Tnk0M0p6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRFQwMVFTVXhGVWw5U1JWWkpVMGxQVGlBOUlEZzdYRzVsZUhCdmNuUWdZMjl1YzNRZ1RFRlRWRjlEVDAxUVFWUkpRa3hGWDBOUFRWQkpURVZTWDFKRlZrbFRTVTlPSUQwZ056dGNibHh1Wlhod2IzSjBJR052Ym5OMElGSkZWa2xUU1U5T1gwTklRVTVIUlZNZ1BTQjdYRzRnSURFNklDYzhQU0F4TGpBdWNtTXVNaWNzSUM4dklERXVNQzV5WXk0eUlHbHpJR0ZqZEhWaGJHeDVJSEpsZGpJZ1luVjBJR1J2WlhOdUozUWdjbVZ3YjNKMElHbDBYRzRnSURJNklDYzlQU0F4TGpBdU1DMXlZeTR6Snl4Y2JpQWdNem9nSnowOUlERXVNQzR3TFhKakxqUW5MRnh1SUNBME9pQW5QVDBnTVM1NExuZ25MRnh1SUNBMU9pQW5QVDBnTWk0d0xqQXRZV3h3YUdFdWVDY3NYRzRnSURZNklDYytQU0F5TGpBdU1DMWlaWFJoTGpFbkxGeHVJQ0EzT2lBblBqMGdOQzR3TGpBZ1BEUXVNeTR3Snl4Y2JpQWdPRG9nSno0OUlEUXVNeTR3SjF4dWZUdGNibHh1WTI5dWMzUWdiMkpxWldOMFZIbHdaU0E5SUNkYmIySnFaV04wSUU5aWFtVmpkRjBuTzF4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1NHRnVaR3hsWW1GeWMwVnVkbWx5YjI1dFpXNTBLR2hsYkhCbGNuTXNJSEJoY25ScFlXeHpMQ0JrWldOdmNtRjBiM0p6S1NCN1hHNGdJSFJvYVhNdWFHVnNjR1Z5Y3lBOUlHaGxiSEJsY25NZ2ZId2dlMzA3WEc0Z0lIUm9hWE11Y0dGeWRHbGhiSE1nUFNCd1lYSjBhV0ZzY3lCOGZDQjdmVHRjYmlBZ2RHaHBjeTVrWldOdmNtRjBiM0p6SUQwZ1pHVmpiM0poZEc5eWN5QjhmQ0I3ZlR0Y2JseHVJQ0J5WldkcGMzUmxja1JsWm1GMWJIUklaV3h3WlhKektIUm9hWE1wTzF4dUlDQnlaV2RwYzNSbGNrUmxabUYxYkhSRVpXTnZjbUYwYjNKektIUm9hWE1wTzF4dWZWeHVYRzVJWVc1a2JHVmlZWEp6Ulc1MmFYSnZibTFsYm5RdWNISnZkRzkwZVhCbElEMGdlMXh1SUNCamIyNXpkSEoxWTNSdmNqb2dTR0Z1Wkd4bFltRnljMFZ1ZG1seWIyNXRaVzUwTEZ4dVhHNGdJR3h2WjJkbGNqb2diRzluWjJWeUxGeHVJQ0JzYjJjNklHeHZaMmRsY2k1c2IyY3NYRzVjYmlBZ2NtVm5hWE4wWlhKSVpXeHdaWEk2SUdaMWJtTjBhVzl1S0c1aGJXVXNJR1p1S1NCN1hHNGdJQ0FnYVdZZ0tIUnZVM1J5YVc1bkxtTmhiR3dvYm1GdFpTa2dQVDA5SUc5aWFtVmpkRlI1Y0dVcElIdGNiaUFnSUNBZ0lHbG1JQ2htYmlrZ2UxeHVJQ0FnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLQ2RCY21jZ2JtOTBJSE4xY0hCdmNuUmxaQ0IzYVhSb0lHMTFiSFJwY0d4bElHaGxiSEJsY25NbktUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHVjRkR1Z1WkNoMGFHbHpMbWhsYkhCbGNuTXNJRzVoYldVcE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0IwYUdsekxtaGxiSEJsY25OYmJtRnRaVjBnUFNCbWJqdGNiaUFnSUNCOVhHNGdJSDBzWEc0Z0lIVnVjbVZuYVhOMFpYSklaV3h3WlhJNklHWjFibU4wYVc5dUtHNWhiV1VwSUh0Y2JpQWdJQ0JrWld4bGRHVWdkR2hwY3k1b1pXeHdaWEp6VzI1aGJXVmRPMXh1SUNCOUxGeHVYRzRnSUhKbFoybHpkR1Z5VUdGeWRHbGhiRG9nWm5WdVkzUnBiMjRvYm1GdFpTd2djR0Z5ZEdsaGJDa2dlMXh1SUNBZ0lHbG1JQ2gwYjFOMGNtbHVaeTVqWVd4c0tHNWhiV1VwSUQwOVBTQnZZbXBsWTNSVWVYQmxLU0I3WEc0Z0lDQWdJQ0JsZUhSbGJtUW9kR2hwY3k1d1lYSjBhV0ZzY3l3Z2JtRnRaU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHbG1JQ2gwZVhCbGIyWWdjR0Z5ZEdsaGJDQTlQVDBnSjNWdVpHVm1hVzVsWkNjcElIdGNiaUFnSUNBZ0lDQWdkR2h5YjNjZ2JtVjNJRVY0WTJWd2RHbHZiaWhjYmlBZ0lDQWdJQ0FnSUNCZ1FYUjBaVzF3ZEdsdVp5QjBieUJ5WldkcGMzUmxjaUJoSUhCaGNuUnBZV3dnWTJGc2JHVmtJRndpSkh0dVlXMWxmVndpSUdGeklIVnVaR1ZtYVc1bFpHQmNiaUFnSUNBZ0lDQWdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSFJvYVhNdWNHRnlkR2xoYkhOYmJtRnRaVjBnUFNCd1lYSjBhV0ZzTzF4dUlDQWdJSDFjYmlBZ2ZTeGNiaUFnZFc1eVpXZHBjM1JsY2xCaGNuUnBZV3c2SUdaMWJtTjBhVzl1S0c1aGJXVXBJSHRjYmlBZ0lDQmtaV3hsZEdVZ2RHaHBjeTV3WVhKMGFXRnNjMXR1WVcxbFhUdGNiaUFnZlN4Y2JseHVJQ0J5WldkcGMzUmxja1JsWTI5eVlYUnZjam9nWm5WdVkzUnBiMjRvYm1GdFpTd2dabTRwSUh0Y2JpQWdJQ0JwWmlBb2RHOVRkSEpwYm1jdVkyRnNiQ2h1WVcxbEtTQTlQVDBnYjJKcVpXTjBWSGx3WlNrZ2UxeHVJQ0FnSUNBZ2FXWWdLR1p1S1NCN1hHNGdJQ0FnSUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9KMEZ5WnlCdWIzUWdjM1Z3Y0c5eWRHVmtJSGRwZEdnZ2JYVnNkR2x3YkdVZ1pHVmpiM0poZEc5eWN5Y3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdaWGgwWlc1a0tIUm9hWE11WkdWamIzSmhkRzl5Y3l3Z2JtRnRaU2s3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lIUm9hWE11WkdWamIzSmhkRzl5YzF0dVlXMWxYU0E5SUdadU8xeHVJQ0FnSUgxY2JpQWdmU3hjYmlBZ2RXNXlaV2RwYzNSbGNrUmxZMjl5WVhSdmNqb2dablZ1WTNScGIyNG9ibUZ0WlNrZ2UxeHVJQ0FnSUdSbGJHVjBaU0IwYUdsekxtUmxZMjl5WVhSdmNuTmJibUZ0WlYwN1hHNGdJSDBzWEc0Z0lDOHFLbHh1SUNBZ0tpQlNaWE5sZENCMGFHVWdiV1Z0YjNKNUlHOW1JR2xzYkdWbllXd2djSEp2Y0dWeWRIa2dZV05qWlhOelpYTWdkR2hoZENCb1lYWmxJR0ZzY21WaFpIa2dZbVZsYmlCc2IyZG5aV1F1WEc0Z0lDQXFJRUJrWlhCeVpXTmhkR1ZrSUhOb2IzVnNaQ0J2Ym14NUlHSmxJSFZ6WldRZ2FXNGdhR0Z1Wkd4bFltRnljeUIwWlhOMExXTmhjMlZ6WEc0Z0lDQXFMMXh1SUNCeVpYTmxkRXh2WjJkbFpGQnliM0JsY25SNVFXTmpaWE56WlhNb0tTQjdYRzRnSUNBZ2NtVnpaWFJNYjJkblpXUlFjbTl3WlhKMGFXVnpLQ2s3WEc0Z0lIMWNibjA3WEc1Y2JtVjRjRzl5ZENCc1pYUWdiRzluSUQwZ2JHOW5aMlZ5TG14dlp6dGNibHh1Wlhod2IzSjBJSHNnWTNKbFlYUmxSbkpoYldVc0lHeHZaMmRsY2lCOU8xeHVJbDE5XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5leHBvcnRzLnJlZ2lzdGVyRGVmYXVsdEhlbHBlcnMgPSByZWdpc3RlckRlZmF1bHRIZWxwZXJzO1xuZXhwb3J0cy5tb3ZlSGVscGVyVG9Ib29rcyA9IG1vdmVIZWxwZXJUb0hvb2tzO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG52YXIgX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmcgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmxvY2staGVscGVyLW1pc3NpbmcnKTtcblxudmFyIF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNCbG9ja0hlbHBlck1pc3NpbmcpO1xuXG52YXIgX2hlbHBlcnNFYWNoID0gcmVxdWlyZSgnLi9oZWxwZXJzL2VhY2gnKTtcblxudmFyIF9oZWxwZXJzRWFjaDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzRWFjaCk7XG5cbnZhciBfaGVscGVyc0hlbHBlck1pc3NpbmcgPSByZXF1aXJlKCcuL2hlbHBlcnMvaGVscGVyLW1pc3NpbmcnKTtcblxudmFyIF9oZWxwZXJzSGVscGVyTWlzc2luZzIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzSGVscGVyTWlzc2luZyk7XG5cbnZhciBfaGVscGVyc0lmID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lmJyk7XG5cbnZhciBfaGVscGVyc0lmMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNJZik7XG5cbnZhciBfaGVscGVyc0xvZyA9IHJlcXVpcmUoJy4vaGVscGVycy9sb2cnKTtcblxudmFyIF9oZWxwZXJzTG9nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hlbHBlcnNMb2cpO1xuXG52YXIgX2hlbHBlcnNMb29rdXAgPSByZXF1aXJlKCcuL2hlbHBlcnMvbG9va3VwJyk7XG5cbnZhciBfaGVscGVyc0xvb2t1cDIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9oZWxwZXJzTG9va3VwKTtcblxudmFyIF9oZWxwZXJzV2l0aCA9IHJlcXVpcmUoJy4vaGVscGVycy93aXRoJyk7XG5cbnZhciBfaGVscGVyc1dpdGgyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGVscGVyc1dpdGgpO1xuXG5mdW5jdGlvbiByZWdpc3RlckRlZmF1bHRIZWxwZXJzKGluc3RhbmNlKSB7XG4gIF9oZWxwZXJzQmxvY2tIZWxwZXJNaXNzaW5nMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNFYWNoMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNIZWxwZXJNaXNzaW5nMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNJZjJbJ2RlZmF1bHQnXShpbnN0YW5jZSk7XG4gIF9oZWxwZXJzTG9nMlsnZGVmYXVsdCddKGluc3RhbmNlKTtcbiAgX2hlbHBlcnNMb29rdXAyWydkZWZhdWx0J10oaW5zdGFuY2UpO1xuICBfaGVscGVyc1dpdGgyWydkZWZhdWx0J10oaW5zdGFuY2UpO1xufVxuXG5mdW5jdGlvbiBtb3ZlSGVscGVyVG9Ib29rcyhpbnN0YW5jZSwgaGVscGVyTmFtZSwga2VlcEhlbHBlcikge1xuICBpZiAoaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXSkge1xuICAgIGluc3RhbmNlLmhvb2tzW2hlbHBlck5hbWVdID0gaW5zdGFuY2UuaGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBpZiAoIWtlZXBIZWxwZXIpIHtcbiAgICAgIGRlbGV0ZSBpbnN0YW5jZS5oZWxwZXJzW2hlbHBlck5hbWVdO1xuICAgIH1cbiAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPM2xEUVVGMVF5eG5RMEZCWjBNN096czdNa0pCUXpsRExHZENRVUZuUWpzN096dHZRMEZEVUN3d1FrRkJNRUk3T3pzN2VVSkJRM0pETEdOQlFXTTdPenM3TUVKQlEySXNaVUZCWlRzN096czJRa0ZEV2l4clFrRkJhMEk3T3pzN01rSkJRM0JDTEdkQ1FVRm5RanM3T3p0QlFVVnNReXhUUVVGVExITkNRVUZ6UWl4RFFVRkRMRkZCUVZFc1JVRkJSVHRCUVVNdlF5eDVRMEZCTWtJc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGNrTXNNa0pCUVdFc1VVRkJVU3hEUVVGRExFTkJRVU03UVVGRGRrSXNiME5CUVhOQ0xGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEyaERMSGxDUVVGWExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzSkNMREJDUVVGWkxGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzUkNMRFpDUVVGbExGRkJRVkVzUTBGQlF5eERRVUZETzBGQlEzcENMREpDUVVGaExGRkJRVkVzUTBGQlF5eERRVUZETzBOQlEzaENPenRCUVVWTkxGTkJRVk1zYVVKQlFXbENMRU5CUVVNc1VVRkJVU3hGUVVGRkxGVkJRVlVzUlVGQlJTeFZRVUZWTEVWQlFVVTdRVUZEYkVVc1RVRkJTU3hSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEZWQlFWVXNRMEZCUXl4RlFVRkZPMEZCUTJoRExGbEJRVkVzUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVRkRMRWRCUVVjc1VVRkJVU3hEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZWTEVOQlFVTXNRMEZCUXp0QlFVTXhSQ3hSUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGTzBGQlEyWXNZVUZCVHl4UlFVRlJMRU5CUVVNc1QwRkJUeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzB0QlEzSkRPMGRCUTBZN1EwRkRSaUlzSW1acGJHVWlPaUpvWld4d1pYSnpMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhKbFoybHpkR1Z5UW14dlkydElaV3h3WlhKTmFYTnphVzVuSUdaeWIyMGdKeTR2YUdWc2NHVnljeTlpYkc5amF5MW9aV3h3WlhJdGJXbHpjMmx1WnljN1hHNXBiWEJ2Y25RZ2NtVm5hWE4wWlhKRllXTm9JR1p5YjIwZ0p5NHZhR1ZzY0dWeWN5OWxZV05vSnp0Y2JtbHRjRzl5ZENCeVpXZHBjM1JsY2tobGJIQmxjazFwYzNOcGJtY2dabkp2YlNBbkxpOW9aV3h3WlhKekwyaGxiSEJsY2kxdGFYTnphVzVuSnp0Y2JtbHRjRzl5ZENCeVpXZHBjM1JsY2tsbUlHWnliMjBnSnk0dmFHVnNjR1Z5Y3k5cFppYzdYRzVwYlhCdmNuUWdjbVZuYVhOMFpYSk1iMmNnWm5KdmJTQW5MaTlvWld4d1pYSnpMMnh2WnljN1hHNXBiWEJ2Y25RZ2NtVm5hWE4wWlhKTWIyOXJkWEFnWm5KdmJTQW5MaTlvWld4d1pYSnpMMnh2YjJ0MWNDYzdYRzVwYlhCdmNuUWdjbVZuYVhOMFpYSlhhWFJvSUdaeWIyMGdKeTR2YUdWc2NHVnljeTkzYVhSb0p6dGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSEpsWjJsemRHVnlSR1ZtWVhWc2RFaGxiSEJsY25Nb2FXNXpkR0Z1WTJVcElIdGNiaUFnY21WbmFYTjBaWEpDYkc5amEwaGxiSEJsY2sxcGMzTnBibWNvYVc1emRHRnVZMlVwTzF4dUlDQnlaV2RwYzNSbGNrVmhZMmdvYVc1emRHRnVZMlVwTzF4dUlDQnlaV2RwYzNSbGNraGxiSEJsY2sxcGMzTnBibWNvYVc1emRHRnVZMlVwTzF4dUlDQnlaV2RwYzNSbGNrbG1LR2x1YzNSaGJtTmxLVHRjYmlBZ2NtVm5hWE4wWlhKTWIyY29hVzV6ZEdGdVkyVXBPMXh1SUNCeVpXZHBjM1JsY2t4dmIydDFjQ2hwYm5OMFlXNWpaU2s3WEc0Z0lISmxaMmx6ZEdWeVYybDBhQ2hwYm5OMFlXNWpaU2s3WEc1OVhHNWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnRiM1psU0dWc2NHVnlWRzlJYjI5cmN5aHBibk4wWVc1alpTd2dhR1ZzY0dWeVRtRnRaU3dnYTJWbGNFaGxiSEJsY2lrZ2UxeHVJQ0JwWmlBb2FXNXpkR0Z1WTJVdWFHVnNjR1Z5YzF0b1pXeHdaWEpPWVcxbFhTa2dlMXh1SUNBZ0lHbHVjM1JoYm1ObExtaHZiMnR6VzJobGJIQmxjazVoYldWZElEMGdhVzV6ZEdGdVkyVXVhR1ZzY0dWeWMxdG9aV3h3WlhKT1lXMWxYVHRjYmlBZ0lDQnBaaUFvSVd0bFpYQklaV3h3WlhJcElIdGNiaUFnSUNBZ0lHUmxiR1YwWlNCcGJuTjBZVzVqWlM1b1pXeHdaWEp6VzJobGJIQmxjazVoYldWZE8xeHVJQ0FnSUgxY2JpQWdmVnh1ZlZ4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIGxvZ2dlciA9IHtcbiAgbWV0aG9kTWFwOiBbJ2RlYnVnJywgJ2luZm8nLCAnd2FybicsICdlcnJvciddLFxuICBsZXZlbDogJ2luZm8nLFxuXG4gIC8vIE1hcHMgYSBnaXZlbiBsZXZlbCB2YWx1ZSB0byB0aGUgYG1ldGhvZE1hcGAgaW5kZXhlcyBhYm92ZS5cbiAgbG9va3VwTGV2ZWw6IGZ1bmN0aW9uIGxvb2t1cExldmVsKGxldmVsKSB7XG4gICAgaWYgKHR5cGVvZiBsZXZlbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhciBsZXZlbE1hcCA9IF91dGlscy5pbmRleE9mKGxvZ2dlci5tZXRob2RNYXAsIGxldmVsLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgaWYgKGxldmVsTWFwID49IDApIHtcbiAgICAgICAgbGV2ZWwgPSBsZXZlbE1hcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldmVsID0gcGFyc2VJbnQobGV2ZWwsIDEwKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGV2ZWw7XG4gIH0sXG5cbiAgLy8gQ2FuIGJlIG92ZXJyaWRkZW4gaW4gdGhlIGhvc3QgZW52aXJvbm1lbnRcbiAgbG9nOiBmdW5jdGlvbiBsb2cobGV2ZWwpIHtcbiAgICBsZXZlbCA9IGxvZ2dlci5sb29rdXBMZXZlbChsZXZlbCk7XG5cbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGxvZ2dlci5sb29rdXBMZXZlbChsb2dnZXIubGV2ZWwpIDw9IGxldmVsKSB7XG4gICAgICB2YXIgbWV0aG9kID0gbG9nZ2VyLm1ldGhvZE1hcFtsZXZlbF07XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgaWYgKCFjb25zb2xlW21ldGhvZF0pIHtcbiAgICAgICAgbWV0aG9kID0gJ2xvZyc7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBtZXNzYWdlID0gQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBtZXNzYWdlW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgY29uc29sZVttZXRob2RdLmFwcGx5KGNvbnNvbGUsIG1lc3NhZ2UpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGxvZ2dlcjtcbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMnh2WjJkbGNpNXFjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lPenM3TzNGQ1FVRjNRaXhUUVVGVE96dEJRVVZxUXl4SlFVRkpMRTFCUVUwc1IwRkJSenRCUVVOWUxGZEJRVk1zUlVGQlJTeERRVUZETEU5QlFVOHNSVUZCUlN4TlFVRk5MRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF6dEJRVU0zUXl4UFFVRkxMRVZCUVVVc1RVRkJUVHM3TzBGQlIySXNZVUZCVnl4RlFVRkZMSEZDUVVGVExFdEJRVXNzUlVGQlJUdEJRVU16UWl4UlFVRkpMRTlCUVU4c1MwRkJTeXhMUVVGTExGRkJRVkVzUlVGQlJUdEJRVU0zUWl4VlFVRkpMRkZCUVZFc1IwRkJSeXhsUVVGUkxFMUJRVTBzUTBGQlF5eFRRVUZUTEVWQlFVVXNTMEZCU3l4RFFVRkRMRmRCUVZjc1JVRkJSU3hEUVVGRExFTkJRVU03UVVGRE9VUXNWVUZCU1N4UlFVRlJMRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRMnBDTEdGQlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNN1QwRkRiRUlzVFVGQlRUdEJRVU5NTEdGQlFVc3NSMEZCUnl4UlFVRlJMRU5CUVVNc1MwRkJTeXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzA5QlF6ZENPMHRCUTBZN08wRkJSVVFzVjBGQlR5eExRVUZMTEVOQlFVTTdSMEZEWkRzN08wRkJSMFFzUzBGQlJ5eEZRVUZGTEdGQlFWTXNTMEZCU3l4RlFVRmpPMEZCUXk5Q0xGTkJRVXNzUjBGQlJ5eE5RVUZOTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dEJRVVZzUXl4UlFVTkZMRTlCUVU4c1QwRkJUeXhMUVVGTExGZEJRVmNzU1VGRE9VSXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3l4RlFVTjZRenRCUVVOQkxGVkJRVWtzVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03TzBGQlJYSkRMRlZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVTdRVUZEY0VJc1kwRkJUU3hIUVVGSExFdEJRVXNzUTBGQlF6dFBRVU5vUWpzN2QwTkJXRzFDTEU5QlFVODdRVUZCVUN4bFFVRlBPenM3UVVGWk0wSXNZVUZCVHl4RFFVRkRMRTFCUVUwc1QwRkJReXhEUVVGbUxFOUJRVThzUlVGQldTeFBRVUZQTEVOQlFVTXNRMEZCUXp0TFFVTTNRanRIUVVOR08wTkJRMFlzUTBGQlF6czdjVUpCUldFc1RVRkJUU0lzSW1acGJHVWlPaUpzYjJkblpYSXVhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnZXlCcGJtUmxlRTltSUgwZ1puSnZiU0FuTGk5MWRHbHNjeWM3WEc1Y2JteGxkQ0JzYjJkblpYSWdQU0I3WEc0Z0lHMWxkR2h2WkUxaGNEb2dXeWRrWldKMVp5Y3NJQ2RwYm1adkp5d2dKM2RoY200bkxDQW5aWEp5YjNJblhTeGNiaUFnYkdWMlpXdzZJQ2RwYm1adkp5eGNibHh1SUNBdkx5Qk5ZWEJ6SUdFZ1oybDJaVzRnYkdWMlpXd2dkbUZzZFdVZ2RHOGdkR2hsSUdCdFpYUm9iMlJOWVhCZ0lHbHVaR1Y0WlhNZ1lXSnZkbVV1WEc0Z0lHeHZiMnQxY0V4bGRtVnNPaUJtZFc1amRHbHZiaWhzWlhabGJDa2dlMXh1SUNBZ0lHbG1JQ2gwZVhCbGIyWWdiR1YyWld3Z1BUMDlJQ2R6ZEhKcGJtY25LU0I3WEc0Z0lDQWdJQ0JzWlhRZ2JHVjJaV3hOWVhBZ1BTQnBibVJsZUU5bUtHeHZaMmRsY2k1dFpYUm9iMlJOWVhBc0lHeGxkbVZzTG5SdlRHOTNaWEpEWVhObEtDa3BPMXh1SUNBZ0lDQWdhV1lnS0d4bGRtVnNUV0Z3SUQ0OUlEQXBJSHRjYmlBZ0lDQWdJQ0FnYkdWMlpXd2dQU0JzWlhabGJFMWhjRHRjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR3hsZG1Wc0lEMGdjR0Z5YzJWSmJuUW9iR1YyWld3c0lERXdLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2JHVjJaV3c3WEc0Z0lIMHNYRzVjYmlBZ0x5OGdRMkZ1SUdKbElHOTJaWEp5YVdSa1pXNGdhVzRnZEdobElHaHZjM1FnWlc1MmFYSnZibTFsYm5SY2JpQWdiRzluT2lCbWRXNWpkR2x2Ymloc1pYWmxiQ3dnTGk0dWJXVnpjMkZuWlNrZ2UxeHVJQ0FnSUd4bGRtVnNJRDBnYkc5bloyVnlMbXh2YjJ0MWNFeGxkbVZzS0d4bGRtVnNLVHRjYmx4dUlDQWdJR2xtSUNoY2JpQWdJQ0FnSUhSNWNHVnZaaUJqYjI1emIyeGxJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QW1KbHh1SUNBZ0lDQWdiRzluWjJWeUxteHZiMnQxY0V4bGRtVnNLR3h2WjJkbGNpNXNaWFpsYkNrZ1BEMGdiR1YyWld4Y2JpQWdJQ0FwSUh0Y2JpQWdJQ0FnSUd4bGRDQnRaWFJvYjJRZ1BTQnNiMmRuWlhJdWJXVjBhRzlrVFdGd1cyeGxkbVZzWFR0Y2JpQWdJQ0FnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MWpiMjV6YjJ4bFhHNGdJQ0FnSUNCcFppQW9JV052Ym5OdmJHVmJiV1YwYUc5a1hTa2dlMXh1SUNBZ0lDQWdJQ0J0WlhSb2IyUWdQU0FuYkc5bkp6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTnZibk52YkdWYmJXVjBhRzlrWFNndUxpNXRaWE56WVdkbEtUc2dMeThnWlhOc2FXNTBMV1JwYzJGaWJHVXRiR2x1WlNCdWJ5MWpiMjV6YjJ4bFhHNGdJQ0FnZlZ4dUlDQjlYRzU5TzF4dVhHNWxlSEJ2Y25RZ1pHVm1ZWFZzZENCc2IyZG5aWEk3WEc0aVhYMD1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmV4cG9ydHMuY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sID0gY3JlYXRlUHJvdG9BY2Nlc3NDb250cm9sO1xuZXhwb3J0cy5yZXN1bHRJc0FsbG93ZWQgPSByZXN1bHRJc0FsbG93ZWQ7XG5leHBvcnRzLnJlc2V0TG9nZ2VkUHJvcGVydGllcyA9IHJlc2V0TG9nZ2VkUHJvcGVydGllcztcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gZWxzZSB7IHZhciBuZXdPYmogPSB7fTsgaWYgKG9iaiAhPSBudWxsKSB7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSBuZXdPYmpbJ2RlZmF1bHQnXSA9IG9iajsgcmV0dXJuIG5ld09iajsgfSB9XG5cbnZhciBfY3JlYXRlTmV3TG9va3VwT2JqZWN0ID0gcmVxdWlyZSgnLi9jcmVhdGUtbmV3LWxvb2t1cC1vYmplY3QnKTtcblxudmFyIF9sb2dnZXIgPSByZXF1aXJlKCcuLi9sb2dnZXInKTtcblxudmFyIGxvZ2dlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9sb2dnZXIpO1xuXG52YXIgbG9nZ2VkUHJvcGVydGllcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVByb3RvQWNjZXNzQ29udHJvbChydW50aW1lT3B0aW9ucykge1xuICB2YXIgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ2NvbnN0cnVjdG9yJ10gPSBmYWxzZTtcbiAgZGVmYXVsdE1ldGhvZFdoaXRlTGlzdFsnX19kZWZpbmVHZXR0ZXJfXyddID0gZmFsc2U7XG4gIGRlZmF1bHRNZXRob2RXaGl0ZUxpc3RbJ19fZGVmaW5lU2V0dGVyX18nXSA9IGZhbHNlO1xuICBkZWZhdWx0TWV0aG9kV2hpdGVMaXN0WydfX2xvb2t1cEdldHRlcl9fJ10gPSBmYWxzZTtcblxuICB2YXIgZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG4gIGRlZmF1bHRQcm9wZXJ0eVdoaXRlTGlzdFsnX19wcm90b19fJ10gPSBmYWxzZTtcblxuICByZXR1cm4ge1xuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHdoaXRlbGlzdDogX2NyZWF0ZU5ld0xvb2t1cE9iamVjdC5jcmVhdGVOZXdMb29rdXBPYmplY3QoZGVmYXVsdFByb3BlcnR5V2hpdGVMaXN0LCBydW50aW1lT3B0aW9ucy5hbGxvd2VkUHJvdG9Qcm9wZXJ0aWVzKSxcbiAgICAgIGRlZmF1bHRWYWx1ZTogcnVudGltZU9wdGlvbnMuYWxsb3dQcm90b1Byb3BlcnRpZXNCeURlZmF1bHRcbiAgICB9LFxuICAgIG1ldGhvZHM6IHtcbiAgICAgIHdoaXRlbGlzdDogX2NyZWF0ZU5ld0xvb2t1cE9iamVjdC5jcmVhdGVOZXdMb29rdXBPYmplY3QoZGVmYXVsdE1ldGhvZFdoaXRlTGlzdCwgcnVudGltZU9wdGlvbnMuYWxsb3dlZFByb3RvTWV0aG9kcyksXG4gICAgICBkZWZhdWx0VmFsdWU6IHJ1bnRpbWVPcHRpb25zLmFsbG93UHJvdG9NZXRob2RzQnlEZWZhdWx0XG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiByZXN1bHRJc0FsbG93ZWQocmVzdWx0LCBwcm90b0FjY2Vzc0NvbnRyb2wsIHByb3BlcnR5TmFtZSkge1xuICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBjaGVja1doaXRlTGlzdChwcm90b0FjY2Vzc0NvbnRyb2wubWV0aG9kcywgcHJvcGVydHlOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sLnByb3BlcnRpZXMsIHByb3BlcnR5TmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tXaGl0ZUxpc3QocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZSwgcHJvcGVydHlOYW1lKSB7XG4gIGlmIChwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLndoaXRlbGlzdFtwcm9wZXJ0eU5hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gcHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS53aGl0ZWxpc3RbcHJvcGVydHlOYW1lXSA9PT0gdHJ1ZTtcbiAgfVxuICBpZiAocHJvdG9BY2Nlc3NDb250cm9sRm9yVHlwZS5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBwcm90b0FjY2Vzc0NvbnRyb2xGb3JUeXBlLmRlZmF1bHRWYWx1ZTtcbiAgfVxuICBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBsb2dVbmV4cGVjZWRQcm9wZXJ0eUFjY2Vzc09uY2UocHJvcGVydHlOYW1lKSB7XG4gIGlmIChsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gIT09IHRydWUpIHtcbiAgICBsb2dnZWRQcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0gPSB0cnVlO1xuICAgIGxvZ2dlci5sb2coJ2Vycm9yJywgJ0hhbmRsZWJhcnM6IEFjY2VzcyBoYXMgYmVlbiBkZW5pZWQgdG8gcmVzb2x2ZSB0aGUgcHJvcGVydHkgXCInICsgcHJvcGVydHlOYW1lICsgJ1wiIGJlY2F1c2UgaXQgaXMgbm90IGFuIFwib3duIHByb3BlcnR5XCIgb2YgaXRzIHBhcmVudC5cXG4nICsgJ1lvdSBjYW4gYWRkIGEgcnVudGltZSBvcHRpb24gdG8gZGlzYWJsZSB0aGUgY2hlY2sgb3IgdGhpcyB3YXJuaW5nOlxcbicgKyAnU2VlIGh0dHBzOi8vaGFuZGxlYmFyc2pzLmNvbS9hcGktcmVmZXJlbmNlL3J1bnRpbWUtb3B0aW9ucy5odG1sI29wdGlvbnMtdG8tY29udHJvbC1wcm90b3R5cGUtYWNjZXNzIGZvciBkZXRhaWxzJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzZXRMb2dnZWRQcm9wZXJ0aWVzKCkge1xuICBPYmplY3Qua2V5cyhsb2dnZWRQcm9wZXJ0aWVzKS5mb3JFYWNoKGZ1bmN0aW9uIChwcm9wZXJ0eU5hbWUpIHtcbiAgICBkZWxldGUgbG9nZ2VkUHJvcGVydGllc1twcm9wZXJ0eU5hbWVdO1xuICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwybHVkR1Z5Ym1Gc0wzQnliM1J2TFdGalkyVnpjeTVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPenM3TzNGRFFVRnpReXcwUWtGQk5FSTdPM05DUVVNeFF5eFhRVUZYT3p0SlFVRjJRaXhOUVVGTk96dEJRVVZzUWl4SlFVRk5MR2RDUVVGblFpeEhRVUZITEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03TzBGQlJYUkRMRk5CUVZNc2QwSkJRWGRDTEVOQlFVTXNZMEZCWXl4RlFVRkZPMEZCUTNaRUxFMUJRVWtzYzBKQlFYTkNMRWRCUVVjc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0QlFVTnFSQ3gzUWtGQmMwSXNRMEZCUXl4aFFVRmhMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRE9VTXNkMEpCUVhOQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGJrUXNkMEpCUVhOQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03UVVGRGJrUXNkMEpCUVhOQ0xFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhMUVVGTExFTkJRVU03TzBGQlJXNUVMRTFCUVVrc2QwSkJRWGRDTEVkQlFVY3NUVUZCVFN4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6czdRVUZGYmtRc01FSkJRWGRDTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWRCUVVjc1MwRkJTeXhEUVVGRE96dEJRVVU1UXl4VFFVRlBPMEZCUTB3c1kwRkJWU3hGUVVGRk8wRkJRMVlzWlVGQlV5eEZRVUZGTERaRFFVTlVMSGRDUVVGM1FpeEZRVU40UWl4alFVRmpMRU5CUVVNc2MwSkJRWE5DTEVOQlEzUkRPMEZCUTBRc2EwSkJRVmtzUlVGQlJTeGpRVUZqTEVOQlFVTXNOa0pCUVRaQ08wdEJRek5FTzBGQlEwUXNWMEZCVHl4RlFVRkZPMEZCUTFBc1pVRkJVeXhGUVVGRkxEWkRRVU5VTEhOQ1FVRnpRaXhGUVVOMFFpeGpRVUZqTEVOQlFVTXNiVUpCUVcxQ0xFTkJRMjVETzBGQlEwUXNhMEpCUVZrc1JVRkJSU3hqUVVGakxFTkJRVU1zTUVKQlFUQkNPMHRCUTNoRU8wZEJRMFlzUTBGQlF6dERRVU5JT3p0QlFVVk5MRk5CUVZNc1pVRkJaU3hEUVVGRExFMUJRVTBzUlVGQlJTeHJRa0ZCYTBJc1JVRkJSU3haUVVGWkxFVkJRVVU3UVVGRGVFVXNUVUZCU1N4UFFVRlBMRTFCUVUwc1MwRkJTeXhWUVVGVkxFVkJRVVU3UVVGRGFFTXNWMEZCVHl4alFVRmpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNUMEZCVHl4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGRE8wZEJRMnBGTEUxQlFVMDdRVUZEVEN4WFFVRlBMR05CUVdNc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4VlFVRlZMRVZCUVVVc1dVRkJXU3hEUVVGRExFTkJRVU03UjBGRGNFVTdRMEZEUmpzN1FVRkZSQ3hUUVVGVExHTkJRV01zUTBGQlF5eDVRa0ZCZVVJc1JVRkJSU3haUVVGWkxFVkJRVVU3UVVGREwwUXNUVUZCU1N4NVFrRkJlVUlzUTBGQlF5eFRRVUZUTEVOQlFVTXNXVUZCV1N4RFFVRkRMRXRCUVVzc1UwRkJVeXhGUVVGRk8wRkJRMjVGTEZkQlFVOHNlVUpCUVhsQ0xFTkJRVU1zVTBGQlV5eERRVUZETEZsQlFWa3NRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRenRIUVVOdVJUdEJRVU5FTEUxQlFVa3NlVUpCUVhsQ0xFTkJRVU1zV1VGQldTeExRVUZMTEZOQlFWTXNSVUZCUlR0QlFVTjRSQ3hYUVVGUExIbENRVUY1UWl4RFFVRkRMRmxCUVZrc1EwRkJRenRIUVVNdlF6dEJRVU5FTEdkRFFVRTRRaXhEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzBGQlF6ZERMRk5CUVU4c1MwRkJTeXhEUVVGRE8wTkJRMlE3TzBGQlJVUXNVMEZCVXl3NFFrRkJPRUlzUTBGQlF5eFpRVUZaTEVWQlFVVTdRVUZEY0VRc1RVRkJTU3huUWtGQlowSXNRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRVVU3UVVGRE0wTXNiMEpCUVdkQ0xFTkJRVU1zV1VGQldTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMEZCUTNSRExGVkJRVTBzUTBGQlF5eEhRVUZITEVOQlExSXNUMEZCVHl4RlFVTlFMR2xGUVVFclJDeFpRVUZaTEc5SlFVTklMRzlJUVVNeVF5eERRVU53U0N4RFFVRkRPMGRCUTBnN1EwRkRSanM3UVVGRlRTeFRRVUZUTEhGQ1FVRnhRaXhIUVVGSE8wRkJRM1JETEZGQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJRU3haUVVGWkxFVkJRVWs3UVVGRGNFUXNWMEZCVHl4blFrRkJaMElzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXp0SFFVTjJReXhEUVVGRExFTkJRVU03UTBGRFNpSXNJbVpwYkdVaU9pSndjbTkwYnkxaFkyTmxjM011YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ2V5QmpjbVZoZEdWT1pYZE1iMjlyZFhCUFltcGxZM1FnZlNCbWNtOXRJQ2N1TDJOeVpXRjBaUzF1WlhjdGJHOXZhM1Z3TFc5aWFtVmpkQ2M3WEc1cGJYQnZjblFnS2lCaGN5QnNiMmRuWlhJZ1puSnZiU0FuTGk0dmJHOW5aMlZ5Snp0Y2JseHVZMjl1YzNRZ2JHOW5aMlZrVUhKdmNHVnlkR2xsY3lBOUlFOWlhbVZqZEM1amNtVmhkR1VvYm5Wc2JDazdYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqY21WaGRHVlFjbTkwYjBGalkyVnpjME52Ym5SeWIyd29jblZ1ZEdsdFpVOXdkR2x2Ym5NcElIdGNiaUFnYkdWMElHUmxabUYxYkhSTlpYUm9iMlJYYUdsMFpVeHBjM1FnUFNCUFltcGxZM1F1WTNKbFlYUmxLRzUxYkd3cE8xeHVJQ0JrWldaaGRXeDBUV1YwYUc5a1YyaHBkR1ZNYVhOMFd5ZGpiMjV6ZEhKMVkzUnZjaWRkSUQwZ1ptRnNjMlU3WEc0Z0lHUmxabUYxYkhSTlpYUm9iMlJYYUdsMFpVeHBjM1JiSjE5ZlpHVm1hVzVsUjJWMGRHVnlYMThuWFNBOUlHWmhiSE5sTzF4dUlDQmtaV1poZFd4MFRXVjBhRzlrVjJocGRHVk1hWE4wV3lkZlgyUmxabWx1WlZObGRIUmxjbDlmSjEwZ1BTQm1ZV3h6WlR0Y2JpQWdaR1ZtWVhWc2RFMWxkR2h2WkZkb2FYUmxUR2x6ZEZzblgxOXNiMjlyZFhCSFpYUjBaWEpmWHlkZElEMGdabUZzYzJVN1hHNWNiaUFnYkdWMElHUmxabUYxYkhSUWNtOXdaWEowZVZkb2FYUmxUR2x6ZENBOUlFOWlhbVZqZEM1amNtVmhkR1VvYm5Wc2JDazdYRzRnSUM4dklHVnpiR2x1ZEMxa2FYTmhZbXhsTFc1bGVIUXRiR2x1WlNCdWJ5MXdjbTkwYjF4dUlDQmtaV1poZFd4MFVISnZjR1Z5ZEhsWGFHbDBaVXhwYzNSYkoxOWZjSEp2ZEc5Zlh5ZGRJRDBnWm1Gc2MyVTdYRzVjYmlBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0J3Y205d1pYSjBhV1Z6T2lCN1hHNGdJQ0FnSUNCM2FHbDBaV3hwYzNRNklHTnlaV0YwWlU1bGQweHZiMnQxY0U5aWFtVmpkQ2hjYmlBZ0lDQWdJQ0FnWkdWbVlYVnNkRkJ5YjNCbGNuUjVWMmhwZEdWTWFYTjBMRnh1SUNBZ0lDQWdJQ0J5ZFc1MGFXMWxUM0IwYVc5dWN5NWhiR3h2ZDJWa1VISnZkRzlRY205d1pYSjBhV1Z6WEc0Z0lDQWdJQ0FwTEZ4dUlDQWdJQ0FnWkdWbVlYVnNkRlpoYkhWbE9pQnlkVzUwYVcxbFQzQjBhVzl1Y3k1aGJHeHZkMUJ5YjNSdlVISnZjR1Z5ZEdsbGMwSjVSR1ZtWVhWc2RGeHVJQ0FnSUgwc1hHNGdJQ0FnYldWMGFHOWtjem9nZTF4dUlDQWdJQ0FnZDJocGRHVnNhWE4wT2lCamNtVmhkR1ZPWlhkTWIyOXJkWEJQWW1wbFkzUW9YRzRnSUNBZ0lDQWdJR1JsWm1GMWJIUk5aWFJvYjJSWGFHbDBaVXhwYzNRc1hHNGdJQ0FnSUNBZ0lISjFiblJwYldWUGNIUnBiMjV6TG1Gc2JHOTNaV1JRY205MGIwMWxkR2h2WkhOY2JpQWdJQ0FnSUNrc1hHNGdJQ0FnSUNCa1pXWmhkV3gwVm1Gc2RXVTZJSEoxYm5ScGJXVlBjSFJwYjI1ekxtRnNiRzkzVUhKdmRHOU5aWFJvYjJSelFubEVaV1poZFd4MFhHNGdJQ0FnZlZ4dUlDQjlPMXh1ZlZ4dVhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z2NtVnpkV3gwU1hOQmJHeHZkMlZrS0hKbGMzVnNkQ3dnY0hKdmRHOUJZMk5sYzNORGIyNTBjbTlzTENCd2NtOXdaWEowZVU1aGJXVXBJSHRjYmlBZ2FXWWdLSFI1Y0dWdlppQnlaWE4xYkhRZ1BUMDlJQ2RtZFc1amRHbHZiaWNwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdZMmhsWTJ0WGFHbDBaVXhwYzNRb2NISnZkRzlCWTJObGMzTkRiMjUwY205c0xtMWxkR2h2WkhNc0lIQnliM0JsY25SNVRtRnRaU2s3WEc0Z0lIMGdaV3h6WlNCN1hHNGdJQ0FnY21WMGRYSnVJR05vWldOclYyaHBkR1ZNYVhOMEtIQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDNXdjbTl3WlhKMGFXVnpMQ0J3Y205d1pYSjBlVTVoYldVcE8xeHVJQ0I5WEc1OVhHNWNibVoxYm1OMGFXOXVJR05vWldOclYyaHBkR1ZNYVhOMEtIQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJFWnZjbFI1Y0dVc0lIQnliM0JsY25SNVRtRnRaU2tnZTF4dUlDQnBaaUFvY0hKdmRHOUJZMk5sYzNORGIyNTBjbTlzUm05eVZIbHdaUzUzYUdsMFpXeHBjM1JiY0hKdmNHVnlkSGxPWVcxbFhTQWhQVDBnZFc1a1pXWnBibVZrS1NCN1hHNGdJQ0FnY21WMGRYSnVJSEJ5YjNSdlFXTmpaWE56UTI5dWRISnZiRVp2Y2xSNWNHVXVkMmhwZEdWc2FYTjBXM0J5YjNCbGNuUjVUbUZ0WlYwZ1BUMDlJSFJ5ZFdVN1hHNGdJSDFjYmlBZ2FXWWdLSEJ5YjNSdlFXTmpaWE56UTI5dWRISnZiRVp2Y2xSNWNHVXVaR1ZtWVhWc2RGWmhiSFZsSUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQnlaWFIxY200Z2NISnZkRzlCWTJObGMzTkRiMjUwY205c1JtOXlWSGx3WlM1a1pXWmhkV3gwVm1Gc2RXVTdYRzRnSUgxY2JpQWdiRzluVlc1bGVIQmxZMlZrVUhKdmNHVnlkSGxCWTJObGMzTlBibU5sS0hCeWIzQmxjblI1VG1GdFpTazdYRzRnSUhKbGRIVnliaUJtWVd4elpUdGNibjFjYmx4dVpuVnVZM1JwYjI0Z2JHOW5WVzVsZUhCbFkyVmtVSEp2Y0dWeWRIbEJZMk5sYzNOUGJtTmxLSEJ5YjNCbGNuUjVUbUZ0WlNrZ2UxeHVJQ0JwWmlBb2JHOW5aMlZrVUhKdmNHVnlkR2xsYzF0d2NtOXdaWEowZVU1aGJXVmRJQ0U5UFNCMGNuVmxLU0I3WEc0Z0lDQWdiRzluWjJWa1VISnZjR1Z5ZEdsbGMxdHdjbTl3WlhKMGVVNWhiV1ZkSUQwZ2RISjFaVHRjYmlBZ0lDQnNiMmRuWlhJdWJHOW5LRnh1SUNBZ0lDQWdKMlZ5Y205eUp5eGNiaUFnSUNBZ0lHQklZVzVrYkdWaVlYSnpPaUJCWTJObGMzTWdhR0Z6SUdKbFpXNGdaR1Z1YVdWa0lIUnZJSEpsYzI5c2RtVWdkR2hsSUhCeWIzQmxjblI1SUZ3aUpIdHdjbTl3WlhKMGVVNWhiV1Y5WENJZ1ltVmpZWFZ6WlNCcGRDQnBjeUJ1YjNRZ1lXNGdYQ0p2ZDI0Z2NISnZjR1Z5ZEhsY0lpQnZaaUJwZEhNZ2NHRnlaVzUwTGx4Y2JtQWdLMXh1SUNBZ0lDQWdJQ0JnV1c5MUlHTmhiaUJoWkdRZ1lTQnlkVzUwYVcxbElHOXdkR2x2YmlCMGJ5QmthWE5oWW14bElIUm9aU0JqYUdWamF5QnZjaUIwYUdseklIZGhjbTVwYm1jNlhGeHVZQ0FyWEc0Z0lDQWdJQ0FnSUdCVFpXVWdhSFIwY0hNNkx5OW9ZVzVrYkdWaVlYSnphbk11WTI5dEwyRndhUzF5WldabGNtVnVZMlV2Y25WdWRHbHRaUzF2Y0hScGIyNXpMbWgwYld3amIzQjBhVzl1Y3kxMGJ5MWpiMjUwY205c0xYQnliM1J2ZEhsd1pTMWhZMk5sYzNNZ1ptOXlJR1JsZEdGcGJITmdYRzRnSUNBZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZ6WlhSTWIyZG5aV1JRY205d1pYSjBhV1Z6S0NrZ2UxeHVJQ0JQWW1wbFkzUXVhMlY1Y3loc2IyZG5aV1JRY205d1pYSjBhV1Z6S1M1bWIzSkZZV05vS0hCeWIzQmxjblI1VG1GdFpTQTlQaUI3WEc0Z0lDQWdaR1ZzWlhSbElHeHZaMmRsWkZCeWIzQmxjblJwWlhOYmNISnZjR1Z5ZEhsT1lXMWxYVHRjYmlBZ2ZTazdYRzU5WEc0aVhYMD1cbiIsInZhciBjcmVhdGVGaW5kID0gcmVxdWlyZSgnLi9fY3JlYXRlRmluZCcpLFxuICAgIGZpbmRJbmRleCA9IHJlcXVpcmUoJy4vZmluZEluZGV4Jyk7XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBlbGVtZW50cyBvZiBgY29sbGVjdGlvbmAsIHJldHVybmluZyB0aGUgZmlyc3QgZWxlbWVudFxuICogYHByZWRpY2F0ZWAgcmV0dXJucyB0cnV0aHkgZm9yLiBUaGUgcHJlZGljYXRlIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICogYXJndW1lbnRzOiAodmFsdWUsIGluZGV4fGtleSwgY29sbGVjdGlvbikuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IENvbGxlY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl8T2JqZWN0fSBjb2xsZWN0aW9uIFRoZSBjb2xsZWN0aW9uIHRvIGluc3BlY3QuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcHJlZGljYXRlPV8uaWRlbnRpdHldIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gW2Zyb21JbmRleD0wXSBUaGUgaW5kZXggdG8gc2VhcmNoIGZyb20uXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgbWF0Y2hlZCBlbGVtZW50LCBlbHNlIGB1bmRlZmluZWRgLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgdXNlcnMgPSBbXG4gKiAgIHsgJ3VzZXInOiAnYmFybmV5JywgICdhZ2UnOiAzNiwgJ2FjdGl2ZSc6IHRydWUgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FnZSc6IDQwLCAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdwZWJibGVzJywgJ2FnZSc6IDEsICAnYWN0aXZlJzogdHJ1ZSB9XG4gKiBdO1xuICpcbiAqIF8uZmluZCh1c2VycywgZnVuY3Rpb24obykgeyByZXR1cm4gby5hZ2UgPCA0MDsgfSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdiYXJuZXknXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgeyAnYWdlJzogMSwgJ2FjdGl2ZSc6IHRydWUgfSk7XG4gKiAvLyA9PiBvYmplY3QgZm9yICdwZWJibGVzJ1xuICpcbiAqIC8vIFRoZSBgXy5tYXRjaGVzUHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgWydhY3RpdmUnLCBmYWxzZV0pO1xuICogLy8gPT4gb2JqZWN0IGZvciAnZnJlZCdcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZCh1c2VycywgJ2FjdGl2ZScpO1xuICogLy8gPT4gb2JqZWN0IGZvciAnYmFybmV5J1xuICovXG52YXIgZmluZCA9IGNyZWF0ZUZpbmQoZmluZEluZGV4KTtcblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kO1xuIiwidmFyIGJhc2VNYXRjaGVzID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXMnKSxcbiAgICBiYXNlTWF0Y2hlc1Byb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZU1hdGNoZXNQcm9wZXJ0eScpLFxuICAgIGlkZW50aXR5ID0gcmVxdWlyZSgnLi9pZGVudGl0eScpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBwcm9wZXJ0eSA9IHJlcXVpcmUoJy4vcHJvcGVydHknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pdGVyYXRlZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlPV8uaWRlbnRpdHldIFRoZSB2YWx1ZSB0byBjb252ZXJ0IHRvIGFuIGl0ZXJhdGVlLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBpdGVyYXRlZS5cbiAqL1xuZnVuY3Rpb24gYmFzZUl0ZXJhdGVlKHZhbHVlKSB7XG4gIC8vIERvbid0IHN0b3JlIHRoZSBgdHlwZW9mYCByZXN1bHQgaW4gYSB2YXJpYWJsZSB0byBhdm9pZCBhIEpJVCBidWcgaW4gU2FmYXJpIDkuXG4gIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MDM0IGZvciBtb3JlIGRldGFpbHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBpZGVudGl0eTtcbiAgfVxuICBpZiAodHlwZW9mIHZhbHVlID09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGlzQXJyYXkodmFsdWUpXG4gICAgICA/IGJhc2VNYXRjaGVzUHJvcGVydHkodmFsdWVbMF0sIHZhbHVlWzFdKVxuICAgICAgOiBiYXNlTWF0Y2hlcyh2YWx1ZSk7XG4gIH1cbiAgcmV0dXJuIHByb3BlcnR5KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXRlcmF0ZWU7XG4iLCJ2YXIgTGlzdENhY2hlID0gcmVxdWlyZSgnLi9fTGlzdENhY2hlJyksXG4gICAgc3RhY2tDbGVhciA9IHJlcXVpcmUoJy4vX3N0YWNrQ2xlYXInKSxcbiAgICBzdGFja0RlbGV0ZSA9IHJlcXVpcmUoJy4vX3N0YWNrRGVsZXRlJyksXG4gICAgc3RhY2tHZXQgPSByZXF1aXJlKCcuL19zdGFja0dldCcpLFxuICAgIHN0YWNrSGFzID0gcmVxdWlyZSgnLi9fc3RhY2tIYXMnKSxcbiAgICBzdGFja1NldCA9IHJlcXVpcmUoJy4vX3N0YWNrU2V0Jyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0YWNrIGNhY2hlIG9iamVjdCB0byBzdG9yZSBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjb25zdHJ1Y3RvclxuICogQHBhcmFtIHtBcnJheX0gW2VudHJpZXNdIFRoZSBrZXktdmFsdWUgcGFpcnMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFN0YWNrKGVudHJpZXMpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fID0gbmV3IExpc3RDYWNoZShlbnRyaWVzKTtcbiAgdGhpcy5zaXplID0gZGF0YS5zaXplO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU3RhY2tgLlxuU3RhY2sucHJvdG90eXBlLmNsZWFyID0gc3RhY2tDbGVhcjtcblN0YWNrLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBzdGFja0RlbGV0ZTtcblN0YWNrLnByb3RvdHlwZS5nZXQgPSBzdGFja0dldDtcblN0YWNrLnByb3RvdHlwZS5oYXMgPSBzdGFja0hhcztcblN0YWNrLnByb3RvdHlwZS5zZXQgPSBzdGFja1NldDtcblxubW9kdWxlLmV4cG9ydHMgPSBTdGFjaztcbiIsIi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxO1xuIiwidmFyIGJhc2VHZXRUYWcgPSByZXF1aXJlKCcuL19iYXNlR2V0VGFnJyksXG4gICAgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhc3luY1RhZyA9ICdbb2JqZWN0IEFzeW5jRnVuY3Rpb25dJyxcbiAgICBmdW5jVGFnID0gJ1tvYmplY3QgRnVuY3Rpb25dJyxcbiAgICBnZW5UYWcgPSAnW29iamVjdCBHZW5lcmF0b3JGdW5jdGlvbl0nLFxuICAgIHByb3h5VGFnID0gJ1tvYmplY3QgUHJveHldJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBjbGFzc2lmaWVkIGFzIGEgYEZ1bmN0aW9uYCBvYmplY3QuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBmdW5jdGlvbiwgZWxzZSBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oXyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0Z1bmN0aW9uKC9hYmMvKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gVGhlIHVzZSBvZiBgT2JqZWN0I3RvU3RyaW5nYCBhdm9pZHMgaXNzdWVzIHdpdGggdGhlIGB0eXBlb2ZgIG9wZXJhdG9yXG4gIC8vIGluIFNhZmFyaSA5IHdoaWNoIHJldHVybnMgJ29iamVjdCcgZm9yIHR5cGVkIGFycmF5cyBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gYmFzZUdldFRhZyh2YWx1ZSk7XG4gIHJldHVybiB0YWcgPT0gZnVuY1RhZyB8fCB0YWcgPT0gZ2VuVGFnIHx8IHRhZyA9PSBhc3luY1RhZyB8fCB0YWcgPT0gcHJveHlUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNGdW5jdGlvbjtcbiIsIi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbm1vZHVsZS5leHBvcnRzID0gZnJlZUdsb2JhbDtcbiIsIi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIHJlc29sdmUgdGhlIGRlY29tcGlsZWQgc291cmNlIG9mIGZ1bmN0aW9ucy4gKi9cbnZhciBmdW5jVG9TdHJpbmcgPSBmdW5jUHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b1NvdXJjZTtcbiIsInZhciBiYXNlSXNFcXVhbERlZXAgPSByZXF1aXJlKCcuL19iYXNlSXNFcXVhbERlZXAnKSxcbiAgICBpc09iamVjdExpa2UgPSByZXF1aXJlKCcuL2lzT2JqZWN0TGlrZScpO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzRXF1YWxgIHdoaWNoIHN1cHBvcnRzIHBhcnRpYWwgY29tcGFyaXNvbnNcbiAqIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0geyp9IG90aGVyIFRoZSBvdGhlciB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtib29sZWFufSBiaXRtYXNrIFRoZSBiaXRtYXNrIGZsYWdzLlxuICogIDEgLSBVbm9yZGVyZWQgY29tcGFyaXNvblxuICogIDIgLSBQYXJ0aWFsIGNvbXBhcmlzb25cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtjdXN0b21pemVyXSBUaGUgZnVuY3Rpb24gdG8gY3VzdG9taXplIGNvbXBhcmlzb25zLlxuICogQHBhcmFtIHtPYmplY3R9IFtzdGFja10gVHJhY2tzIHRyYXZlcnNlZCBgdmFsdWVgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbCh2YWx1ZSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSB7XG4gIGlmICh2YWx1ZSA9PT0gb3RoZXIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodmFsdWUgPT0gbnVsbCB8fCBvdGhlciA9PSBudWxsIHx8ICghaXNPYmplY3RMaWtlKHZhbHVlKSAmJiAhaXNPYmplY3RMaWtlKG90aGVyKSkpIHtcbiAgICByZXR1cm4gdmFsdWUgIT09IHZhbHVlICYmIG90aGVyICE9PSBvdGhlcjtcbiAgfVxuICByZXR1cm4gYmFzZUlzRXF1YWxEZWVwKHZhbHVlLCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgYmFzZUlzRXF1YWwsIHN0YWNrKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNFcXVhbDtcbiIsInZhciBTZXRDYWNoZSA9IHJlcXVpcmUoJy4vX1NldENhY2hlJyksXG4gICAgYXJyYXlTb21lID0gcmVxdWlyZSgnLi9fYXJyYXlTb21lJyksXG4gICAgY2FjaGVIYXMgPSByZXF1aXJlKCcuL19jYWNoZUhhcycpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBhcnJheXMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBUaGUgYXJyYXkgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7QXJyYXl9IG90aGVyIFRoZSBvdGhlciBhcnJheSB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgYXJyYXlgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGFycmF5cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhcnJheSwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIGFyckxlbmd0aCA9IGFycmF5Lmxlbmd0aCxcbiAgICAgIG90aExlbmd0aCA9IG90aGVyLmxlbmd0aDtcblxuICBpZiAoYXJyTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhKGlzUGFydGlhbCAmJiBvdGhMZW5ndGggPiBhcnJMZW5ndGgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBhcnJTdGFja2VkID0gc3RhY2suZ2V0KGFycmF5KTtcbiAgdmFyIG90aFN0YWNrZWQgPSBzdGFjay5nZXQob3RoZXIpO1xuICBpZiAoYXJyU3RhY2tlZCAmJiBvdGhTdGFja2VkKSB7XG4gICAgcmV0dXJuIGFyclN0YWNrZWQgPT0gb3RoZXIgJiYgb3RoU3RhY2tlZCA9PSBhcnJheTtcbiAgfVxuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IHRydWUsXG4gICAgICBzZWVuID0gKGJpdG1hc2sgJiBDT01QQVJFX1VOT1JERVJFRF9GTEFHKSA/IG5ldyBTZXRDYWNoZSA6IHVuZGVmaW5lZDtcblxuICBzdGFjay5zZXQoYXJyYXksIG90aGVyKTtcbiAgc3RhY2suc2V0KG90aGVyLCBhcnJheSk7XG5cbiAgLy8gSWdub3JlIG5vbi1pbmRleCBwcm9wZXJ0aWVzLlxuICB3aGlsZSAoKytpbmRleCA8IGFyckxlbmd0aCkge1xuICAgIHZhciBhcnJWYWx1ZSA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgb3RoVmFsdWUgPSBvdGhlcltpbmRleF07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgYXJyVmFsdWUsIGluZGV4LCBvdGhlciwgYXJyYXksIHN0YWNrKVxuICAgICAgICA6IGN1c3RvbWl6ZXIoYXJyVmFsdWUsIG90aFZhbHVlLCBpbmRleCwgYXJyYXksIG90aGVyLCBzdGFjayk7XG4gICAgfVxuICAgIGlmIChjb21wYXJlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29tcGFyZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIGFycmF5cyAoc3VzY2VwdGlibGUgdG8gY2FsbCBzdGFjayBsaW1pdHMpLlxuICAgIGlmIChzZWVuKSB7XG4gICAgICBpZiAoIWFycmF5U29tZShvdGhlciwgZnVuY3Rpb24ob3RoVmFsdWUsIG90aEluZGV4KSB7XG4gICAgICAgICAgICBpZiAoIWNhY2hlSGFzKHNlZW4sIG90aEluZGV4KSAmJlxuICAgICAgICAgICAgICAgIChhcnJWYWx1ZSA9PT0gb3RoVmFsdWUgfHwgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spKSkge1xuICAgICAgICAgICAgICByZXR1cm4gc2Vlbi5wdXNoKG90aEluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KSkge1xuICAgICAgICByZXN1bHQgPSBmYWxzZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICghKFxuICAgICAgICAgIGFyclZhbHVlID09PSBvdGhWYWx1ZSB8fFxuICAgICAgICAgICAgZXF1YWxGdW5jKGFyclZhbHVlLCBvdGhWYWx1ZSwgYml0bWFzaywgY3VzdG9taXplciwgc3RhY2spXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShhcnJheSk7XG4gIHN0YWNrWydkZWxldGUnXShvdGhlcik7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZXF1YWxBcnJheXM7XG4iLCJ2YXIgYmFzZUlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9fYmFzZUlzQXJndW1lbnRzJyksXG4gICAgaXNPYmplY3RMaWtlID0gcmVxdWlyZSgnLi9pc09iamVjdExpa2UnKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgcHJvcGVydHlJc0VudW1lcmFibGUgPSBvYmplY3RQcm90by5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBsaWtlbHkgYW4gYGFyZ3VtZW50c2Agb2JqZWN0LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqICBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNBcmd1bWVudHMoZnVuY3Rpb24oKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FyZ3VtZW50cyhbMSwgMiwgM10pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xudmFyIGlzQXJndW1lbnRzID0gYmFzZUlzQXJndW1lbnRzKGZ1bmN0aW9uKCkgeyByZXR1cm4gYXJndW1lbnRzOyB9KCkpID8gYmFzZUlzQXJndW1lbnRzIDogZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZSkgJiYgaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2NhbGxlZScpICYmXG4gICAgIXByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwodmFsdWUsICdjYWxsZWUnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcmd1bWVudHM7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKSxcbiAgICBzdHViRmFsc2UgPSByZXF1aXJlKCcuL3N0dWJGYWxzZScpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIEJ1ZmZlciA9IG1vZHVsZUV4cG9ydHMgPyByb290LkJ1ZmZlciA6IHVuZGVmaW5lZDtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyID8gQnVmZmVyLmlzQnVmZmVyIDogdW5kZWZpbmVkO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4zLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGEgYnVmZmVyLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNCdWZmZXIobmV3IEJ1ZmZlcigyKSk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0J1ZmZlcihuZXcgVWludDhBcnJheSgyKSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNCdWZmZXIgPSBuYXRpdmVJc0J1ZmZlciB8fCBzdHViRmFsc2U7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNCdWZmZXI7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHRpZiAoIW1vZHVsZS53ZWJwYWNrUG9seWZpbGwpIHtcblx0XHRtb2R1bGUuZGVwcmVjYXRlID0gZnVuY3Rpb24oKSB7fTtcblx0XHRtb2R1bGUucGF0aHMgPSBbXTtcblx0XHQvLyBtb2R1bGUucGFyZW50ID0gdW5kZWZpbmVkIGJ5IGRlZmF1bHRcblx0XHRpZiAoIW1vZHVsZS5jaGlsZHJlbikgbW9kdWxlLmNoaWxkcmVuID0gW107XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgXCJsb2FkZWRcIiwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBtb2R1bGUubDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobW9kdWxlLCBcImlkXCIsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gbW9kdWxlLmk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0bW9kdWxlLndlYnBhY2tQb2x5ZmlsbCA9IDE7XG5cdH1cblx0cmV0dXJuIG1vZHVsZTtcbn07XG4iLCIvKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IHVuc2lnbmVkIGludGVnZXIgdmFsdWVzLiAqL1xudmFyIHJlSXNVaW50ID0gL14oPzowfFsxLTldXFxkKikkLztcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhIHZhbGlkIGFycmF5LWxpa2UgaW5kZXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9TUFYX1NBRkVfSU5URUdFUl0gVGhlIHVwcGVyIGJvdW5kcyBvZiBhIHZhbGlkIGluZGV4LlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB2YWxpZCBpbmRleCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0luZGV4KHZhbHVlLCBsZW5ndGgpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDtcblxuICByZXR1cm4gISFsZW5ndGggJiZcbiAgICAodHlwZSA9PSAnbnVtYmVyJyB8fFxuICAgICAgKHR5cGUgIT0gJ3N5bWJvbCcgJiYgcmVJc1VpbnQudGVzdCh2YWx1ZSkpKSAmJlxuICAgICAgICAodmFsdWUgPiAtMSAmJiB2YWx1ZSAlIDEgPT0gMCAmJiB2YWx1ZSA8IGxlbmd0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNJbmRleDtcbiIsInZhciBiYXNlSXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9fYmFzZUlzVHlwZWRBcnJheScpLFxuICAgIGJhc2VVbmFyeSA9IHJlcXVpcmUoJy4vX2Jhc2VVbmFyeScpLFxuICAgIG5vZGVVdGlsID0gcmVxdWlyZSgnLi9fbm9kZVV0aWwnKTtcblxuLyogTm9kZS5qcyBoZWxwZXIgcmVmZXJlbmNlcy4gKi9cbnZhciBub2RlSXNUeXBlZEFycmF5ID0gbm9kZVV0aWwgJiYgbm9kZVV0aWwuaXNUeXBlZEFycmF5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSB0eXBlZCBhcnJheS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDMuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIHR5cGVkIGFycmF5LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNUeXBlZEFycmF5KG5ldyBVaW50OEFycmF5KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzVHlwZWRBcnJheShbXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG52YXIgaXNUeXBlZEFycmF5ID0gbm9kZUlzVHlwZWRBcnJheSA/IGJhc2VVbmFyeShub2RlSXNUeXBlZEFycmF5KSA6IGJhc2VJc1R5cGVkQXJyYXk7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNUeXBlZEFycmF5O1xuIiwidmFyIGlzRnVuY3Rpb24gPSByZXF1aXJlKCcuL2lzRnVuY3Rpb24nKSxcbiAgICBpc0xlbmd0aCA9IHJlcXVpcmUoJy4vaXNMZW5ndGgnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHZhbHVlYCBpcyBhcnJheS1saWtlLiBBIHZhbHVlIGlzIGNvbnNpZGVyZWQgYXJyYXktbGlrZSBpZiBpdCdzXG4gKiBub3QgYSBmdW5jdGlvbiBhbmQgaGFzIGEgYHZhbHVlLmxlbmd0aGAgdGhhdCdzIGFuIGludGVnZXIgZ3JlYXRlciB0aGFuIG9yXG4gKiBlcXVhbCB0byBgMGAgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFycmF5LWxpa2UsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5pc0FycmF5TGlrZShbMSwgMiwgM10pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNBcnJheUxpa2UoZG9jdW1lbnQuYm9keS5jaGlsZHJlbik7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZSgnYWJjJyk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc0FycmF5TGlrZShfLm5vb3ApO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhaXNGdW5jdGlvbih2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNBcnJheUxpa2U7XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL2lzT2JqZWN0Jyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpZiBzdWl0YWJsZSBmb3Igc3RyaWN0XG4gKiAgZXF1YWxpdHkgY29tcGFyaXNvbnMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNTdHJpY3RDb21wYXJhYmxlKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgJiYgIWlzT2JqZWN0KHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc1N0cmljdENvbXBhcmFibGU7XG4iLCIvKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgbWF0Y2hlc1Byb3BlcnR5YCBmb3Igc291cmNlIHZhbHVlcyBzdWl0YWJsZVxuICogZm9yIHN0cmljdCBlcXVhbGl0eSBjb21wYXJpc29ucywgaS5lLiBgPT09YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcGFyYW0geyp9IHNyY1ZhbHVlIFRoZSB2YWx1ZSB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKGtleSwgc3JjVmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIGlmIChvYmplY3QgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0W2tleV0gPT09IHNyY1ZhbHVlICYmXG4gICAgICAoc3JjVmFsdWUgIT09IHVuZGVmaW5lZCB8fCAoa2V5IGluIE9iamVjdChvYmplY3QpKSk7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWF0Y2hlc1N0cmljdENvbXBhcmFibGU7XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5nZXRgIHdpdGhvdXQgc3VwcG9ydCBmb3IgZGVmYXVsdCB2YWx1ZXMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIG9mIHRoZSBwcm9wZXJ0eSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGJhc2VHZXQob2JqZWN0LCBwYXRoKSB7XG4gIHBhdGggPSBjYXN0UGF0aChwYXRoLCBvYmplY3QpO1xuXG4gIHZhciBpbmRleCA9IDAsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aDtcblxuICB3aGlsZSAob2JqZWN0ICE9IG51bGwgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbdG9LZXkocGF0aFtpbmRleCsrXSldO1xuICB9XG4gIHJldHVybiAoaW5kZXggJiYgaW5kZXggPT0gbGVuZ3RoKSA/IG9iamVjdCA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0O1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgc3RyaW5nVG9QYXRoID0gcmVxdWlyZSgnLi9fc3RyaW5nVG9QYXRoJyksXG4gICAgdG9TdHJpbmcgPSByZXF1aXJlKCcuL3RvU3RyaW5nJyk7XG5cbi8qKlxuICogQ2FzdHMgYHZhbHVlYCB0byBhIHBhdGggYXJyYXkgaWYgaXQncyBub3Qgb25lLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkga2V5cyBvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY2FzdCBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICovXG5mdW5jdGlvbiBjYXN0UGF0aCh2YWx1ZSwgb2JqZWN0KSB7XG4gIGlmIChpc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaXNLZXkodmFsdWUsIG9iamVjdCkgPyBbdmFsdWVdIDogc3RyaW5nVG9QYXRoKHRvU3RyaW5nKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FzdFBhdGg7XG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBpbm5lclN1YnNjcmliZSwgU2ltcGxlSW5uZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0KGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gYXVkaXRPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IEF1ZGl0T3BlcmF0b3IoZHVyYXRpb25TZWxlY3RvcikpO1xuICAgIH07XG59XG52YXIgQXVkaXRPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBBdWRpdE9wZXJhdG9yKGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5kdXJhdGlvblNlbGVjdG9yID0gZHVyYXRpb25TZWxlY3RvcjtcbiAgICB9XG4gICAgQXVkaXRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEF1ZGl0U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmR1cmF0aW9uU2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBBdWRpdE9wZXJhdG9yO1xufSgpKTtcbnZhciBBdWRpdFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQXVkaXRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEF1ZGl0U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgZHVyYXRpb25TZWxlY3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIF90aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQXVkaXRTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMudGhyb3R0bGVkKSB7XG4gICAgICAgICAgICB2YXIgZHVyYXRpb24gPSB2b2lkIDA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHZhciBkdXJhdGlvblNlbGVjdG9yID0gdGhpcy5kdXJhdGlvblNlbGVjdG9yO1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uID0gZHVyYXRpb25TZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpbm5lclN1YnNjcmlwdGlvbiA9IGlubmVyU3Vic2NyaWJlKGR1cmF0aW9uLCBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHRoaXMpKTtcbiAgICAgICAgICAgIGlmICghaW5uZXJTdWJzY3JpcHRpb24gfHwgaW5uZXJTdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhclRocm90dGxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZCh0aGlzLnRocm90dGxlZCA9IGlubmVyU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQXVkaXRTdWJzY3JpYmVyLnByb3RvdHlwZS5jbGVhclRocm90dGxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCB2YWx1ZSA9IF9hLnZhbHVlLCBoYXNWYWx1ZSA9IF9hLmhhc1ZhbHVlLCB0aHJvdHRsZWQgPSBfYS50aHJvdHRsZWQ7XG4gICAgICAgIGlmICh0aHJvdHRsZWQpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRocm90dGxlZCk7XG4gICAgICAgICAgICB0aGlzLnRocm90dGxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRocm90dGxlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEF1ZGl0U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbGVhclRocm90dGxlKCk7XG4gICAgfTtcbiAgICBBdWRpdFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNsZWFyVGhyb3R0bGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBBdWRpdFN1YnNjcmliZXI7XG59KFNpbXBsZU91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVkaXQuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9zY2hlZHVsZXJfYXN5bmMsX2F1ZGl0LF9vYnNlcnZhYmxlX3RpbWVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IGF1ZGl0IH0gZnJvbSAnLi9hdWRpdCc7XG5pbXBvcnQgeyB0aW1lciB9IGZyb20gJy4uL29ic2VydmFibGUvdGltZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGF1ZGl0VGltZShkdXJhdGlvbiwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFzeW5jO1xuICAgIH1cbiAgICByZXR1cm4gYXVkaXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gdGltZXIoZHVyYXRpb24sIHNjaGVkdWxlcik7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXVkaXRUaW1lLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUsIFNpbXBsZUlubmVyU3Vic2NyaWJlciB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJ1ZmZlck9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgQnVmZmVyT3BlcmF0b3IoY2xvc2luZ05vdGlmaWVyKSk7XG4gICAgfTtcbn1cbnZhciBCdWZmZXJPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCdWZmZXJPcGVyYXRvcihjbG9zaW5nTm90aWZpZXIpIHtcbiAgICAgICAgdGhpcy5jbG9zaW5nTm90aWZpZXIgPSBjbG9zaW5nTm90aWZpZXI7XG4gICAgfVxuICAgIEJ1ZmZlck9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgQnVmZmVyU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmNsb3NpbmdOb3RpZmllcikpO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlck9wZXJhdG9yO1xufSgpKTtcbnZhciBCdWZmZXJTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEJ1ZmZlclN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQnVmZmVyU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY2xvc2luZ05vdGlmaWVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgX3RoaXMuYWRkKGlubmVyU3Vic2NyaWJlKGNsb3NpbmdOb3RpZmllciwgbmV3IFNpbXBsZUlubmVyU3Vic2NyaWJlcihfdGhpcykpKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBCdWZmZXJTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICB9O1xuICAgIEJ1ZmZlclN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGJ1ZmZlcik7XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyU3Vic2NyaWJlcjtcbn0oU2ltcGxlT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXIuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gYnVmZmVyQ291bnQoYnVmZmVyU2l6ZSwgc3RhcnRCdWZmZXJFdmVyeSkge1xuICAgIGlmIChzdGFydEJ1ZmZlckV2ZXJ5ID09PSB2b2lkIDApIHtcbiAgICAgICAgc3RhcnRCdWZmZXJFdmVyeSA9IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiBidWZmZXJDb3VudE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgQnVmZmVyQ291bnRPcGVyYXRvcihidWZmZXJTaXplLCBzdGFydEJ1ZmZlckV2ZXJ5KSk7XG4gICAgfTtcbn1cbnZhciBCdWZmZXJDb3VudE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJ1ZmZlckNvdW50T3BlcmF0b3IoYnVmZmVyU2l6ZSwgc3RhcnRCdWZmZXJFdmVyeSkge1xuICAgICAgICB0aGlzLmJ1ZmZlclNpemUgPSBidWZmZXJTaXplO1xuICAgICAgICB0aGlzLnN0YXJ0QnVmZmVyRXZlcnkgPSBzdGFydEJ1ZmZlckV2ZXJ5O1xuICAgICAgICBpZiAoIXN0YXJ0QnVmZmVyRXZlcnkgfHwgYnVmZmVyU2l6ZSA9PT0gc3RhcnRCdWZmZXJFdmVyeSkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpYmVyQ2xhc3MgPSBCdWZmZXJDb3VudFN1YnNjcmliZXI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmliZXJDbGFzcyA9IEJ1ZmZlclNraXBDb3VudFN1YnNjcmliZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgQnVmZmVyQ291bnRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IHRoaXMuc3Vic2NyaWJlckNsYXNzKHN1YnNjcmliZXIsIHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy5zdGFydEJ1ZmZlckV2ZXJ5KSk7XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyQ291bnRPcGVyYXRvcjtcbn0oKSk7XG52YXIgQnVmZmVyQ291bnRTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEJ1ZmZlckNvdW50U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdWZmZXJDb3VudFN1YnNjcmliZXIoZGVzdGluYXRpb24sIGJ1ZmZlclNpemUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmJ1ZmZlclNpemUgPSBidWZmZXJTaXplO1xuICAgICAgICBfdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBCdWZmZXJDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PSB0aGlzLmJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChidWZmZXIpO1xuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyQ291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoYnVmZmVyKTtcbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlckNvdW50U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xudmFyIEJ1ZmZlclNraXBDb3VudFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQnVmZmVyU2tpcENvdW50U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdWZmZXJTa2lwQ291bnRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBidWZmZXJTaXplLCBzdGFydEJ1ZmZlckV2ZXJ5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5idWZmZXJTaXplID0gYnVmZmVyU2l6ZTtcbiAgICAgICAgX3RoaXMuc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnk7XG4gICAgICAgIF90aGlzLmJ1ZmZlcnMgPSBbXTtcbiAgICAgICAgX3RoaXMuY291bnQgPSAwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEJ1ZmZlclNraXBDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGJ1ZmZlclNpemUgPSBfYS5idWZmZXJTaXplLCBzdGFydEJ1ZmZlckV2ZXJ5ID0gX2Euc3RhcnRCdWZmZXJFdmVyeSwgYnVmZmVycyA9IF9hLmJ1ZmZlcnMsIGNvdW50ID0gX2EuY291bnQ7XG4gICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50ICUgc3RhcnRCdWZmZXJFdmVyeSA9PT0gMCkge1xuICAgICAgICAgICAgYnVmZmVycy5wdXNoKFtdKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gYnVmZmVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHZhciBidWZmZXIgPSBidWZmZXJzW2ldO1xuICAgICAgICAgICAgYnVmZmVyLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IGJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICBidWZmZXJzLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyU2tpcENvdW50U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBidWZmZXJzID0gX2EuYnVmZmVycywgZGVzdGluYXRpb24gPSBfYS5kZXN0aW5hdGlvbjtcbiAgICAgICAgd2hpbGUgKGJ1ZmZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnMuc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChidWZmZXIubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlclNraXBDb3VudFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlckNvdW50LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfc2NoZWR1bGVyX2FzeW5jLF9TdWJzY3JpYmVyLF91dGlsX2lzU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBhc3luYyB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBpc1NjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvaXNTY2hlZHVsZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHtcbiAgICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICB2YXIgc2NoZWR1bGVyID0gYXN5bmM7XG4gICAgaWYgKGlzU2NoZWR1bGVyKGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0pKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGxlbmd0aC0tO1xuICAgIH1cbiAgICB2YXIgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgaWYgKGxlbmd0aCA+PSAyKSB7XG4gICAgICAgIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSBhcmd1bWVudHNbMV07XG4gICAgfVxuICAgIHZhciBtYXhCdWZmZXJTaXplID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIGlmIChsZW5ndGggPj0gMykge1xuICAgICAgICBtYXhCdWZmZXJTaXplID0gYXJndW1lbnRzWzJdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gYnVmZmVyVGltZU9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgQnVmZmVyVGltZU9wZXJhdG9yKGJ1ZmZlclRpbWVTcGFuLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCBtYXhCdWZmZXJTaXplLCBzY2hlZHVsZXIpKTtcbiAgICB9O1xufVxudmFyIEJ1ZmZlclRpbWVPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBCdWZmZXJUaW1lT3BlcmF0b3IoYnVmZmVyVGltZVNwYW4sIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwsIG1heEJ1ZmZlclNpemUsIHNjaGVkdWxlcikge1xuICAgICAgICB0aGlzLmJ1ZmZlclRpbWVTcGFuID0gYnVmZmVyVGltZVNwYW47XG4gICAgICAgIHRoaXMuYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA9IGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWw7XG4gICAgICAgIHRoaXMubWF4QnVmZmVyU2l6ZSA9IG1heEJ1ZmZlclNpemU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBCdWZmZXJUaW1lT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBCdWZmZXJUaW1lU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmJ1ZmZlclRpbWVTcGFuLCB0aGlzLmJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwsIHRoaXMubWF4QnVmZmVyU2l6ZSwgdGhpcy5zY2hlZHVsZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXJUaW1lT3BlcmF0b3I7XG59KCkpO1xudmFyIENvbnRleHQgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5idWZmZXIgPSBbXTtcbiAgICB9XG4gICAgcmV0dXJuIENvbnRleHQ7XG59KCkpO1xudmFyIEJ1ZmZlclRpbWVTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEJ1ZmZlclRpbWVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1ZmZlclRpbWVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBidWZmZXJUaW1lU3BhbiwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCwgbWF4QnVmZmVyU2l6ZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5idWZmZXJUaW1lU3BhbiA9IGJ1ZmZlclRpbWVTcGFuO1xuICAgICAgICBfdGhpcy5idWZmZXJDcmVhdGlvbkludGVydmFsID0gYnVmZmVyQ3JlYXRpb25JbnRlcnZhbDtcbiAgICAgICAgX3RoaXMubWF4QnVmZmVyU2l6ZSA9IG1heEJ1ZmZlclNpemU7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMuY29udGV4dHMgPSBbXTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSBfdGhpcy5vcGVuQ29udGV4dCgpO1xuICAgICAgICBfdGhpcy50aW1lc3Bhbk9ubHkgPSBidWZmZXJDcmVhdGlvbkludGVydmFsID09IG51bGwgfHwgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA8IDA7XG4gICAgICAgIGlmIChfdGhpcy50aW1lc3Bhbk9ubHkpIHtcbiAgICAgICAgICAgIHZhciB0aW1lU3Bhbk9ubHlTdGF0ZSA9IHsgc3Vic2NyaWJlcjogX3RoaXMsIGNvbnRleHQ6IGNvbnRleHQsIGJ1ZmZlclRpbWVTcGFuOiBidWZmZXJUaW1lU3BhbiB9O1xuICAgICAgICAgICAgX3RoaXMuYWRkKGNvbnRleHQuY2xvc2VBY3Rpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hCdWZmZXJUaW1lU3Bhbk9ubHksIGJ1ZmZlclRpbWVTcGFuLCB0aW1lU3Bhbk9ubHlTdGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNsb3NlU3RhdGUgPSB7IHN1YnNjcmliZXI6IF90aGlzLCBjb250ZXh0OiBjb250ZXh0IH07XG4gICAgICAgICAgICB2YXIgY3JlYXRpb25TdGF0ZSA9IHsgYnVmZmVyVGltZVNwYW46IGJ1ZmZlclRpbWVTcGFuLCBidWZmZXJDcmVhdGlvbkludGVydmFsOiBidWZmZXJDcmVhdGlvbkludGVydmFsLCBzdWJzY3JpYmVyOiBfdGhpcywgc2NoZWR1bGVyOiBzY2hlZHVsZXIgfTtcbiAgICAgICAgICAgIF90aGlzLmFkZChjb250ZXh0LmNsb3NlQWN0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoQnVmZmVyQ2xvc2UsIGJ1ZmZlclRpbWVTcGFuLCBjbG9zZVN0YXRlKSk7XG4gICAgICAgICAgICBfdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoQnVmZmVyQ3JlYXRpb24sIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwsIGNyZWF0aW9uU3RhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEJ1ZmZlclRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgbGVuID0gY29udGV4dHMubGVuZ3RoO1xuICAgICAgICB2YXIgZmlsbGVkQnVmZmVyQ29udGV4dDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMSA9IGNvbnRleHRzW2ldO1xuICAgICAgICAgICAgdmFyIGJ1ZmZlciA9IGNvbnRleHRfMS5idWZmZXI7XG4gICAgICAgICAgICBidWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PSB0aGlzLm1heEJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgICAgICBmaWxsZWRCdWZmZXJDb250ZXh0ID0gY29udGV4dF8xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxsZWRCdWZmZXJDb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLm9uQnVmZmVyRnVsbChmaWxsZWRCdWZmZXJDb250ZXh0KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyVGltZVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0cy5sZW5ndGggPSAwO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsIGVycik7XG4gICAgfTtcbiAgICBCdWZmZXJUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBjb250ZXh0cyA9IF9hLmNvbnRleHRzLCBkZXN0aW5hdGlvbiA9IF9hLmRlc3RpbmF0aW9uO1xuICAgICAgICB3aGlsZSAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMiA9IGNvbnRleHRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KGNvbnRleHRfMi5idWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBCdWZmZXJUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmNvbnRleHRzID0gbnVsbDtcbiAgICB9O1xuICAgIEJ1ZmZlclRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5vbkJ1ZmZlckZ1bGwgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB0aGlzLmNsb3NlQ29udGV4dChjb250ZXh0KTtcbiAgICAgICAgdmFyIGNsb3NlQWN0aW9uID0gY29udGV4dC5jbG9zZUFjdGlvbjtcbiAgICAgICAgY2xvc2VBY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5yZW1vdmUoY2xvc2VBY3Rpb24pO1xuICAgICAgICBpZiAoIXRoaXMuY2xvc2VkICYmIHRoaXMudGltZXNwYW5Pbmx5KSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gdGhpcy5vcGVuQ29udGV4dCgpO1xuICAgICAgICAgICAgdmFyIGJ1ZmZlclRpbWVTcGFuID0gdGhpcy5idWZmZXJUaW1lU3BhbjtcbiAgICAgICAgICAgIHZhciB0aW1lU3Bhbk9ubHlTdGF0ZSA9IHsgc3Vic2NyaWJlcjogdGhpcywgY29udGV4dDogY29udGV4dCwgYnVmZmVyVGltZVNwYW46IGJ1ZmZlclRpbWVTcGFuIH07XG4gICAgICAgICAgICB0aGlzLmFkZChjb250ZXh0LmNsb3NlQWN0aW9uID0gdGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hCdWZmZXJUaW1lU3Bhbk9ubHksIGJ1ZmZlclRpbWVTcGFuLCB0aW1lU3Bhbk9ubHlTdGF0ZSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBCdWZmZXJUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUub3BlbkNvbnRleHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQoKTtcbiAgICAgICAgdGhpcy5jb250ZXh0cy5wdXNoKGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9O1xuICAgIEJ1ZmZlclRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5jbG9zZUNvbnRleHQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoY29udGV4dC5idWZmZXIpO1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgc3BsaWNlSW5kZXggPSBjb250ZXh0cyA/IGNvbnRleHRzLmluZGV4T2YoY29udGV4dCkgOiAtMTtcbiAgICAgICAgaWYgKHNwbGljZUluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGNvbnRleHRzLnNwbGljZShjb250ZXh0cy5pbmRleE9mKGNvbnRleHQpLCAxKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEJ1ZmZlclRpbWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBkaXNwYXRjaEJ1ZmZlclRpbWVTcGFuT25seShzdGF0ZSkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlcjtcbiAgICB2YXIgcHJldkNvbnRleHQgPSBzdGF0ZS5jb250ZXh0O1xuICAgIGlmIChwcmV2Q29udGV4dCkge1xuICAgICAgICBzdWJzY3JpYmVyLmNsb3NlQ29udGV4dChwcmV2Q29udGV4dCk7XG4gICAgfVxuICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgc3RhdGUuY29udGV4dCA9IHN1YnNjcmliZXIub3BlbkNvbnRleHQoKTtcbiAgICAgICAgc3RhdGUuY29udGV4dC5jbG9zZUFjdGlvbiA9IHRoaXMuc2NoZWR1bGUoc3RhdGUsIHN0YXRlLmJ1ZmZlclRpbWVTcGFuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkaXNwYXRjaEJ1ZmZlckNyZWF0aW9uKHN0YXRlKSB7XG4gICAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSBzdGF0ZS5idWZmZXJDcmVhdGlvbkludGVydmFsLCBidWZmZXJUaW1lU3BhbiA9IHN0YXRlLmJ1ZmZlclRpbWVTcGFuLCBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgc2NoZWR1bGVyID0gc3RhdGUuc2NoZWR1bGVyO1xuICAgIHZhciBjb250ZXh0ID0gc3Vic2NyaWJlci5vcGVuQ29udGV4dCgpO1xuICAgIHZhciBhY3Rpb24gPSB0aGlzO1xuICAgIGlmICghc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgc3Vic2NyaWJlci5hZGQoY29udGV4dC5jbG9zZUFjdGlvbiA9IHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaEJ1ZmZlckNsb3NlLCBidWZmZXJUaW1lU3BhbiwgeyBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyLCBjb250ZXh0OiBjb250ZXh0IH0pKTtcbiAgICAgICAgYWN0aW9uLnNjaGVkdWxlKHN0YXRlLCBidWZmZXJDcmVhdGlvbkludGVydmFsKTtcbiAgICB9XG59XG5mdW5jdGlvbiBkaXNwYXRjaEJ1ZmZlckNsb3NlKGFyZykge1xuICAgIHZhciBzdWJzY3JpYmVyID0gYXJnLnN1YnNjcmliZXIsIGNvbnRleHQgPSBhcmcuY29udGV4dDtcbiAgICBzdWJzY3JpYmVyLmNsb3NlQ29udGV4dChjb250ZXh0KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1ZmZlclRpbWUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpcHRpb24sX3V0aWxfc3Vic2NyaWJlVG9SZXN1bHQsX091dGVyU3Vic2NyaWJlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAnLi4vU3Vic2NyaXB0aW9uJztcbmltcG9ydCB7IHN1YnNjcmliZVRvUmVzdWx0IH0gZnJvbSAnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCc7XG5pbXBvcnQgeyBPdXRlclN1YnNjcmliZXIgfSBmcm9tICcuLi9PdXRlclN1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRvZ2dsZShvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGJ1ZmZlclRvZ2dsZU9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgQnVmZmVyVG9nZ2xlT3BlcmF0b3Iob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3RvcikpO1xuICAgIH07XG59XG52YXIgQnVmZmVyVG9nZ2xlT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQnVmZmVyVG9nZ2xlT3BlcmF0b3Iob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLm9wZW5pbmdzID0gb3BlbmluZ3M7XG4gICAgICAgIHRoaXMuY2xvc2luZ1NlbGVjdG9yID0gY2xvc2luZ1NlbGVjdG9yO1xuICAgIH1cbiAgICBCdWZmZXJUb2dnbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5vcGVuaW5ncywgdGhpcy5jbG9zaW5nU2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXJUb2dnbGVPcGVyYXRvcjtcbn0oKSk7XG52YXIgQnVmZmVyVG9nZ2xlU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhCdWZmZXJUb2dnbGVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9wZW5pbmdzLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuY29udGV4dHMgPSBbXTtcbiAgICAgICAgX3RoaXMuYWRkKHN1YnNjcmliZVRvUmVzdWx0KF90aGlzLCBvcGVuaW5ncykpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIHZhciBsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnRleHRzW2ldLmJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyVG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB3aGlsZSAoY29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGNvbnRleHRfMSA9IGNvbnRleHRzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb250ZXh0XzEuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBjb250ZXh0XzEuYnVmZmVyID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnRleHRfMS5zdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udGV4dHMgPSBudWxsO1xuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9lcnJvci5jYWxsKHRoaXMsIGVycik7XG4gICAgfTtcbiAgICBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIHdoaWxlIChjb250ZXh0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dF8yID0gY29udGV4dHMuc2hpZnQoKTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChjb250ZXh0XzIuYnVmZmVyKTtcbiAgICAgICAgICAgIGNvbnRleHRfMi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGNvbnRleHRfMi5idWZmZXIgPSBudWxsO1xuICAgICAgICAgICAgY29udGV4dF8yLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IG51bGw7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgfTtcbiAgICBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIGlubmVyVmFsdWUpIHtcbiAgICAgICAgb3V0ZXJWYWx1ZSA/IHRoaXMuY2xvc2VCdWZmZXIob3V0ZXJWYWx1ZSkgOiB0aGlzLm9wZW5CdWZmZXIoaW5uZXJWYWx1ZSk7XG4gICAgfTtcbiAgICBCdWZmZXJUb2dnbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB0aGlzLmNsb3NlQnVmZmVyKGlubmVyU3ViLmNvbnRleHQpO1xuICAgIH07XG4gICAgQnVmZmVyVG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUub3BlbkJ1ZmZlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdTZWxlY3RvciA9IHRoaXMuY2xvc2luZ1NlbGVjdG9yO1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdOb3RpZmllciA9IGNsb3NpbmdTZWxlY3Rvci5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGlmIChjbG9zaW5nTm90aWZpZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyeVN1YnNjcmliZShjbG9zaW5nTm90aWZpZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEJ1ZmZlclRvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLmNsb3NlQnVmZmVyID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgaWYgKGNvbnRleHRzICYmIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHZhciBidWZmZXIgPSBjb250ZXh0LmJ1ZmZlciwgc3Vic2NyaXB0aW9uID0gY29udGV4dC5zdWJzY3JpcHRpb247XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoYnVmZmVyKTtcbiAgICAgICAgICAgIGNvbnRleHRzLnNwbGljZShjb250ZXh0cy5pbmRleE9mKGNvbnRleHQpLCAxKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyVG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24gKGNsb3NpbmdOb3RpZmllcikge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgYnVmZmVyID0gW107XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHZhciBjb250ZXh0ID0geyBidWZmZXI6IGJ1ZmZlciwgc3Vic2NyaXB0aW9uOiBzdWJzY3JpcHRpb24gfTtcbiAgICAgICAgY29udGV4dHMucHVzaChjb250ZXh0KTtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgY2xvc2luZ05vdGlmaWVyLCBjb250ZXh0KTtcbiAgICAgICAgaWYgKCFpbm5lclN1YnNjcmlwdGlvbiB8fCBpbm5lclN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VCdWZmZXIoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpbm5lclN1YnNjcmlwdGlvbi5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgICAgIHRoaXMuYWRkKGlubmVyU3Vic2NyaXB0aW9uKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQnVmZmVyVG9nZ2xlU3Vic2NyaWJlcjtcbn0oT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJUb2dnbGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpcHRpb24sX2lubmVyU3Vic2NyaWJlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBpbm5lclN1YnNjcmliZSwgU2ltcGxlSW5uZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlcldoZW4oY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBCdWZmZXJXaGVuT3BlcmF0b3IoY2xvc2luZ1NlbGVjdG9yKSk7XG4gICAgfTtcbn1cbnZhciBCdWZmZXJXaGVuT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQnVmZmVyV2hlbk9wZXJhdG9yKGNsb3NpbmdTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICB9XG4gICAgQnVmZmVyV2hlbk9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgQnVmZmVyV2hlblN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5jbG9zaW5nU2VsZWN0b3IpKTtcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXJXaGVuT3BlcmF0b3I7XG59KCkpO1xudmFyIEJ1ZmZlcldoZW5TdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEJ1ZmZlcldoZW5TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEJ1ZmZlcldoZW5TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuc3Vic2NyaWJpbmcgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMub3BlbkJ1ZmZlcigpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEJ1ZmZlcldoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICB9O1xuICAgIEJ1ZmZlcldoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgaWYgKGJ1ZmZlcikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGJ1ZmZlcik7XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICB9O1xuICAgIEJ1ZmZlcldoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnN1YnNjcmliaW5nID0gZmFsc2U7XG4gICAgfTtcbiAgICBCdWZmZXJXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5vcGVuQnVmZmVyKCk7XG4gICAgfTtcbiAgICBCdWZmZXJXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN1YnNjcmliaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9wZW5CdWZmZXIoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgQnVmZmVyV2hlblN1YnNjcmliZXIucHJvdG90eXBlLm9wZW5CdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBjbG9zaW5nU3Vic2NyaXB0aW9uID0gdGhpcy5jbG9zaW5nU3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAoY2xvc2luZ1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoY2xvc2luZ1N1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICBjbG9zaW5nU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICBpZiAodGhpcy5idWZmZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChidWZmZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYnVmZmVyID0gW107XG4gICAgICAgIHZhciBjbG9zaW5nTm90aWZpZXI7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgY2xvc2luZ1NlbGVjdG9yID0gdGhpcy5jbG9zaW5nU2VsZWN0b3I7XG4gICAgICAgICAgICBjbG9zaW5nTm90aWZpZXIgPSBjbG9zaW5nU2VsZWN0b3IoKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgICAgIGNsb3NpbmdTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gICAgICAgIHRoaXMuY2xvc2luZ1N1YnNjcmlwdGlvbiA9IGNsb3NpbmdTdWJzY3JpcHRpb247XG4gICAgICAgIHRoaXMuYWRkKGNsb3NpbmdTdWJzY3JpcHRpb24pO1xuICAgICAgICB0aGlzLnN1YnNjcmliaW5nID0gdHJ1ZTtcbiAgICAgICAgY2xvc2luZ1N1YnNjcmlwdGlvbi5hZGQoaW5uZXJTdWJzY3JpYmUoY2xvc2luZ05vdGlmaWVyLCBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHRoaXMpKSk7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJpbmcgPSBmYWxzZTtcbiAgICB9O1xuICAgIHJldHVybiBCdWZmZXJXaGVuU3Vic2NyaWJlcjtcbn0oU2ltcGxlT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1idWZmZXJXaGVuLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgU2ltcGxlSW5uZXJTdWJzY3JpYmVyLCBpbm5lclN1YnNjcmliZSB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiBjYXRjaEVycm9yKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGNhdGNoRXJyb3JPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICB2YXIgb3BlcmF0b3IgPSBuZXcgQ2F0Y2hPcGVyYXRvcihzZWxlY3Rvcik7XG4gICAgICAgIHZhciBjYXVnaHQgPSBzb3VyY2UubGlmdChvcGVyYXRvcik7XG4gICAgICAgIHJldHVybiAob3BlcmF0b3IuY2F1Z2h0ID0gY2F1Z2h0KTtcbiAgICB9O1xufVxudmFyIENhdGNoT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQ2F0Y2hPcGVyYXRvcihzZWxlY3Rvcikge1xuICAgICAgICB0aGlzLnNlbGVjdG9yID0gc2VsZWN0b3I7XG4gICAgfVxuICAgIENhdGNoT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBDYXRjaFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5zZWxlY3RvciwgdGhpcy5jYXVnaHQpKTtcbiAgICB9O1xuICAgIHJldHVybiBDYXRjaE9wZXJhdG9yO1xufSgpKTtcbnZhciBDYXRjaFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQ2F0Y2hTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENhdGNoU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgc2VsZWN0b3IsIGNhdWdodCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuY2F1Z2h0ID0gY2F1Z2h0O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENhdGNoU3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuc2VsZWN0b3IoZXJyLCB0aGlzLmNhdWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZXJyMikge1xuICAgICAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLCBlcnIyKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKTtcbiAgICAgICAgICAgIHZhciBpbm5lclN1YnNjcmliZXIgPSBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5hZGQoaW5uZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIHZhciBpbm5lclN1YnNjcmlwdGlvbiA9IGlubmVyU3Vic2NyaWJlKHJlc3VsdCwgaW5uZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIGlmIChpbm5lclN1YnNjcmlwdGlvbiAhPT0gaW5uZXJTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQoaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQ2F0Y2hTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNhdGNoRXJyb3IuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9vYnNlcnZhYmxlX2NvbWJpbmVMYXRlc3QgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgQ29tYmluZUxhdGVzdE9wZXJhdG9yIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0JztcbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lQWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IENvbWJpbmVMYXRlc3RPcGVyYXRvcihwcm9qZWN0KSk7IH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb21iaW5lQWxsLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfdXRpbF9pc0FycmF5LF9vYnNlcnZhYmxlX2NvbWJpbmVMYXRlc3QsX29ic2VydmFibGVfZnJvbSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5JztcbmltcG9ydCB7IENvbWJpbmVMYXRlc3RPcGVyYXRvciB9IGZyb20gJy4uL29ic2VydmFibGUvY29tYmluZUxhdGVzdCc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9mcm9tJztcbnZhciBub25lID0ge307XG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUxhdGVzdCgpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgcHJvamVjdCA9IG51bGw7XG4gICAgaWYgKHR5cGVvZiBvYnNlcnZhYmxlc1tvYnNlcnZhYmxlcy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBwcm9qZWN0ID0gb2JzZXJ2YWJsZXMucG9wKCk7XG4gICAgfVxuICAgIGlmIChvYnNlcnZhYmxlcy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShvYnNlcnZhYmxlc1swXSkpIHtcbiAgICAgICAgb2JzZXJ2YWJsZXMgPSBvYnNlcnZhYmxlc1swXS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQuY2FsbChmcm9tKFtzb3VyY2VdLmNvbmNhdChvYnNlcnZhYmxlcykpLCBuZXcgQ29tYmluZUxhdGVzdE9wZXJhdG9yKHByb2plY3QpKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbWJpbmVMYXRlc3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9vYnNlcnZhYmxlX2NvbmNhdCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBjb25jYXQgYXMgY29uY2F0U3RhdGljIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9jb25jYXQnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdCgpIHtcbiAgICB2YXIgb2JzZXJ2YWJsZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBvYnNlcnZhYmxlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQuY2FsbChjb25jYXRTdGF0aWMuYXBwbHkodm9pZCAwLCBbc291cmNlXS5jb25jYXQob2JzZXJ2YWJsZXMpKSk7IH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXQuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9tZXJnZU1hcCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBtZXJnZU1hcCB9IGZyb20gJy4vbWVyZ2VNYXAnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdE1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgMSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1jb25jYXRNYXAuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9jb25jYXRNYXAgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgY29uY2F0TWFwIH0gZnJvbSAnLi9jb25jYXRNYXAnO1xuZXhwb3J0IGZ1bmN0aW9uIGNvbmNhdE1hcFRvKGlubmVyT2JzZXJ2YWJsZSwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gY29uY2F0TWFwKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGlubmVyT2JzZXJ2YWJsZTsgfSwgcmVzdWx0U2VsZWN0b3IpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uY2F0TWFwVG8uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gY291bnQocHJlZGljYXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBDb3VudE9wZXJhdG9yKHByZWRpY2F0ZSwgc291cmNlKSk7IH07XG59XG52YXIgQ291bnRPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBDb3VudE9wZXJhdG9yKHByZWRpY2F0ZSwgc291cmNlKSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG4gICAgQ291bnRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IENvdW50U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnByZWRpY2F0ZSwgdGhpcy5zb3VyY2UpKTtcbiAgICB9O1xuICAgIHJldHVybiBDb3VudE9wZXJhdG9yO1xufSgpKTtcbnZhciBDb3VudFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQ291bnRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIENvdW50U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJlZGljYXRlLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIF90aGlzLmluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSkge1xuICAgICAgICAgICAgdGhpcy5fdHJ5UHJlZGljYXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fdHJ5UHJlZGljYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnByZWRpY2F0ZSh2YWx1ZSwgdGhpcy5pbmRleCsrLCB0aGlzLnNvdXJjZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMuY291bnQrKztcbiAgICAgICAgfVxuICAgIH07XG4gICAgQ291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmNvdW50KTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIENvdW50U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y291bnQuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBpbm5lclN1YnNjcmliZSwgU2ltcGxlSW5uZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERlYm91bmNlT3BlcmF0b3IoZHVyYXRpb25TZWxlY3RvcikpOyB9O1xufVxudmFyIERlYm91bmNlT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVib3VuY2VPcGVyYXRvcihkdXJhdGlvblNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgfVxuICAgIERlYm91bmNlT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBEZWJvdW5jZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5kdXJhdGlvblNlbGVjdG9yKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRGVib3VuY2VPcGVyYXRvcjtcbn0oKSk7XG52YXIgRGVib3VuY2VTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKERlYm91bmNlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBEZWJvdW5jZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmR1cmF0aW9uU2VsZWN0b3IgPSBkdXJhdGlvblNlbGVjdG9yO1xuICAgICAgICBfdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIERlYm91bmNlU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmR1cmF0aW9uU2VsZWN0b3IuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJ5TmV4dCh2YWx1ZSwgcmVzdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERlYm91bmNlU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmVtaXRWYWx1ZSgpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBEZWJvdW5jZVN1YnNjcmliZXIucHJvdG90eXBlLl90cnlOZXh0ID0gZnVuY3Rpb24gKHZhbHVlLCBkdXJhdGlvbikge1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5kdXJhdGlvblN1YnNjcmlwdGlvbjtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShzdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNjcmlwdGlvbiA9IGlubmVyU3Vic2NyaWJlKGR1cmF0aW9uLCBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHRoaXMpKTtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbiAmJiAhc3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5kdXJhdGlvblN1YnNjcmlwdGlvbiA9IHN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERlYm91bmNlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB9O1xuICAgIERlYm91bmNlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgfTtcbiAgICBEZWJvdW5jZVN1YnNjcmliZXIucHJvdG90eXBlLmVtaXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWU7XG4gICAgICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gdGhpcy5kdXJhdGlvblN1YnNjcmlwdGlvbjtcbiAgICAgICAgICAgIGlmIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmR1cmF0aW9uU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlKHN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fbmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIERlYm91bmNlU3Vic2NyaWJlcjtcbn0oU2ltcGxlT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWJvdW5jZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIsX3NjaGVkdWxlcl9hc3luYyBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgYXN5bmMgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXN5bmMnO1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlVGltZShkdWVUaW1lLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHtcbiAgICAgICAgc2NoZWR1bGVyID0gYXN5bmM7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRGVib3VuY2VUaW1lT3BlcmF0b3IoZHVlVGltZSwgc2NoZWR1bGVyKSk7IH07XG59XG52YXIgRGVib3VuY2VUaW1lT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVib3VuY2VUaW1lT3BlcmF0b3IoZHVlVGltZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMuZHVlVGltZSA9IGR1ZVRpbWU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBEZWJvdW5jZVRpbWVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IERlYm91bmNlVGltZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5kdWVUaW1lLCB0aGlzLnNjaGVkdWxlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIERlYm91bmNlVGltZU9wZXJhdG9yO1xufSgpKTtcbnZhciBEZWJvdW5jZVRpbWVTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKERlYm91bmNlVGltZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGVib3VuY2VUaW1lU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgZHVlVGltZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kdWVUaW1lID0gZHVlVGltZTtcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb24gPSBudWxsO1xuICAgICAgICBfdGhpcy5sYXN0VmFsdWUgPSBudWxsO1xuICAgICAgICBfdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIERlYm91bmNlVGltZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2xlYXJEZWJvdW5jZSgpO1xuICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZGQodGhpcy5kZWJvdW5jZWRTdWJzY3JpcHRpb24gPSB0aGlzLnNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaE5leHQsIHRoaXMuZHVlVGltZSwgdGhpcykpO1xuICAgIH07XG4gICAgRGVib3VuY2VUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmRlYm91bmNlZE5leHQoKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgRGVib3VuY2VUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuZGVib3VuY2VkTmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jbGVhckRlYm91bmNlKCk7XG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgbGFzdFZhbHVlID0gdGhpcy5sYXN0VmFsdWU7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQobGFzdFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVib3VuY2VUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuY2xlYXJEZWJvdW5jZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRlYm91bmNlZFN1YnNjcmlwdGlvbiA9IHRoaXMuZGVib3VuY2VkU3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAoZGVib3VuY2VkU3Vic2NyaXB0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZShkZWJvdW5jZWRTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgZGVib3VuY2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLmRlYm91bmNlZFN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEZWJvdW5jZVRpbWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBkaXNwYXRjaE5leHQoc3Vic2NyaWJlcikge1xuICAgIHN1YnNjcmliZXIuZGVib3VuY2VkTmV4dCgpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVib3VuY2VUaW1lLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmIChkZWZhdWx0VmFsdWUgPT09IHZvaWQgMCkge1xuICAgICAgICBkZWZhdWx0VmFsdWUgPSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERlZmF1bHRJZkVtcHR5T3BlcmF0b3IoZGVmYXVsdFZhbHVlKSk7IH07XG59XG52YXIgRGVmYXVsdElmRW1wdHlPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBEZWZhdWx0SWZFbXB0eU9wZXJhdG9yKGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gICAgRGVmYXVsdElmRW1wdHlPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IERlZmF1bHRJZkVtcHR5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmRlZmF1bHRWYWx1ZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIERlZmF1bHRJZkVtcHR5T3BlcmF0b3I7XG59KCkpO1xudmFyIERlZmF1bHRJZkVtcHR5U3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhEZWZhdWx0SWZFbXB0eVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGVmYXVsdElmRW1wdHlTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgX3RoaXMuaXNFbXB0eSA9IHRydWU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgRGVmYXVsdElmRW1wdHlTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLmlzRW1wdHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIERlZmF1bHRJZkVtcHR5U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pc0VtcHR5KSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5kZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWZhdWx0SWZFbXB0eVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRlZmF1bHRJZkVtcHR5LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCAgUFVSRV9JTVBPUlRTX0VORCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKCt2YWx1ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pc0RhdGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9zY2hlZHVsZXJfYXN5bmMsX3V0aWxfaXNEYXRlLF9TdWJzY3JpYmVyLF9Ob3RpZmljYXRpb24gUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJy4uL3V0aWwvaXNEYXRlJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IE5vdGlmaWNhdGlvbiB9IGZyb20gJy4uL05vdGlmaWNhdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gZGVsYXkoZGVsYXksIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkge1xuICAgICAgICBzY2hlZHVsZXIgPSBhc3luYztcbiAgICB9XG4gICAgdmFyIGFic29sdXRlRGVsYXkgPSBpc0RhdGUoZGVsYXkpO1xuICAgIHZhciBkZWxheUZvciA9IGFic29sdXRlRGVsYXkgPyAoK2RlbGF5IC0gc2NoZWR1bGVyLm5vdygpKSA6IE1hdGguYWJzKGRlbGF5KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERlbGF5T3BlcmF0b3IoZGVsYXlGb3IsIHNjaGVkdWxlcikpOyB9O1xufVxudmFyIERlbGF5T3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVsYXlPcGVyYXRvcihkZWxheSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIERlbGF5T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBEZWxheVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5kZWxheSwgdGhpcy5zY2hlZHVsZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWxheU9wZXJhdG9yO1xufSgpKTtcbnZhciBEZWxheVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoRGVsYXlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIERlbGF5U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgZGVsYXksIHNjaGVkdWxlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuZGVsYXkgPSBkZWxheTtcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy5xdWV1ZSA9IFtdO1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuZXJyb3JlZCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIERlbGF5U3Vic2NyaWJlci5kaXNwYXRjaCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgc291cmNlID0gc3RhdGUuc291cmNlO1xuICAgICAgICB2YXIgcXVldWUgPSBzb3VyY2UucXVldWU7XG4gICAgICAgIHZhciBzY2hlZHVsZXIgPSBzdGF0ZS5zY2hlZHVsZXI7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHN0YXRlLmRlc3RpbmF0aW9uO1xuICAgICAgICB3aGlsZSAocXVldWUubGVuZ3RoID4gMCAmJiAocXVldWVbMF0udGltZSAtIHNjaGVkdWxlci5ub3coKSkgPD0gMCkge1xuICAgICAgICAgICAgcXVldWUuc2hpZnQoKS5ub3RpZmljYXRpb24ub2JzZXJ2ZShkZXN0aW5hdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHF1ZXVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciBkZWxheV8xID0gTWF0aC5tYXgoMCwgcXVldWVbMF0udGltZSAtIHNjaGVkdWxlci5ub3coKSk7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlKHN0YXRlLCBkZWxheV8xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHNvdXJjZS5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5fc2NoZWR1bGUgPSBmdW5jdGlvbiAoc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb24uYWRkKHNjaGVkdWxlci5zY2hlZHVsZShEZWxheVN1YnNjcmliZXIuZGlzcGF0Y2gsIHRoaXMuZGVsYXksIHtcbiAgICAgICAgICAgIHNvdXJjZTogdGhpcywgZGVzdGluYXRpb246IHRoaXMuZGVzdGluYXRpb24sIHNjaGVkdWxlcjogc2NoZWR1bGVyXG4gICAgICAgIH0pKTtcbiAgICB9O1xuICAgIERlbGF5U3Vic2NyaWJlci5wcm90b3R5cGUuc2NoZWR1bGVOb3RpZmljYXRpb24gPSBmdW5jdGlvbiAobm90aWZpY2F0aW9uKSB7XG4gICAgICAgIGlmICh0aGlzLmVycm9yZWQgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgICAgIHZhciBtZXNzYWdlID0gbmV3IERlbGF5TWVzc2FnZShzY2hlZHVsZXIubm93KCkgKyB0aGlzLmRlbGF5LCBub3RpZmljYXRpb24pO1xuICAgICAgICB0aGlzLnF1ZXVlLnB1c2gobWVzc2FnZSk7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3NjaGVkdWxlKHNjaGVkdWxlcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERlbGF5U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZU5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uY3JlYXRlTmV4dCh2YWx1ZSkpO1xuICAgIH07XG4gICAgRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMuZXJyb3JlZCA9IHRydWU7XG4gICAgICAgIHRoaXMucXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICBEZWxheVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zY2hlZHVsZU5vdGlmaWNhdGlvbihOb3RpZmljYXRpb24uY3JlYXRlQ29tcGxldGUoKSk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHJldHVybiBEZWxheVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbnZhciBEZWxheU1lc3NhZ2UgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRGVsYXlNZXNzYWdlKHRpbWUsIG5vdGlmaWNhdGlvbikge1xuICAgICAgICB0aGlzLnRpbWUgPSB0aW1lO1xuICAgICAgICB0aGlzLm5vdGlmaWNhdGlvbiA9IG5vdGlmaWNhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIERlbGF5TWVzc2FnZTtcbn0oKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIsX09ic2VydmFibGUsX091dGVyU3Vic2NyaWJlcixfdXRpbF9zdWJzY3JpYmVUb1Jlc3VsdCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgT3V0ZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vT3V0ZXJTdWJzY3JpYmVyJztcbmltcG9ydCB7IHN1YnNjcmliZVRvUmVzdWx0IH0gZnJvbSAnLi4vdXRpbC9zdWJzY3JpYmVUb1Jlc3VsdCc7XG5leHBvcnQgZnVuY3Rpb24gZGVsYXlXaGVuKGRlbGF5RHVyYXRpb25TZWxlY3Rvciwgc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICBpZiAoc3Vic2NyaXB0aW9uRGVsYXkpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uRGVsYXlPYnNlcnZhYmxlKHNvdXJjZSwgc3Vic2NyaXB0aW9uRGVsYXkpXG4gICAgICAgICAgICAgICAgLmxpZnQobmV3IERlbGF5V2hlbk9wZXJhdG9yKGRlbGF5RHVyYXRpb25TZWxlY3RvcikpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERlbGF5V2hlbk9wZXJhdG9yKGRlbGF5RHVyYXRpb25TZWxlY3RvcikpOyB9O1xufVxudmFyIERlbGF5V2hlbk9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlbGF5V2hlbk9wZXJhdG9yKGRlbGF5RHVyYXRpb25TZWxlY3Rvcikge1xuICAgICAgICB0aGlzLmRlbGF5RHVyYXRpb25TZWxlY3RvciA9IGRlbGF5RHVyYXRpb25TZWxlY3RvcjtcbiAgICB9XG4gICAgRGVsYXlXaGVuT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBEZWxheVdoZW5TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuZGVsYXlEdXJhdGlvblNlbGVjdG9yKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRGVsYXlXaGVuT3BlcmF0b3I7XG59KCkpO1xudmFyIERlbGF5V2hlblN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoRGVsYXlXaGVuU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBEZWxheVdoZW5TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBkZWxheUR1cmF0aW9uU2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlbGF5RHVyYXRpb25TZWxlY3RvciA9IGRlbGF5RHVyYXRpb25TZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuY29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zID0gW107XG4gICAgICAgIF90aGlzLmluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBEZWxheVdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKG91dGVyVmFsdWUsIF9pbm5lclZhbHVlLCBfb3V0ZXJJbmRleCwgX2lubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChvdXRlclZhbHVlKTtcbiAgICAgICAgdGhpcy5yZW1vdmVTdWJzY3JpcHRpb24oaW5uZXJTdWIpO1xuICAgICAgICB0aGlzLnRyeUNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBEZWxheVdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnJvciwgaW5uZXJTdWIpIHtcbiAgICAgICAgdGhpcy5fZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgRGVsYXlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoaW5uZXJTdWIpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdGhpcy5yZW1vdmVTdWJzY3JpcHRpb24oaW5uZXJTdWIpO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50cnlDb21wbGV0ZSgpO1xuICAgIH07XG4gICAgRGVsYXlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCsrO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGRlbGF5Tm90aWZpZXIgPSB0aGlzLmRlbGF5RHVyYXRpb25TZWxlY3Rvcih2YWx1ZSwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKGRlbGF5Tm90aWZpZXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyeURlbGF5KGRlbGF5Tm90aWZpZXIsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIERlbGF5V2hlblN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnRyeUNvbXBsZXRlKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIERlbGF5V2hlblN1YnNjcmliZXIucHJvdG90eXBlLnJlbW92ZVN1YnNjcmlwdGlvbiA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHZhciBzdWJzY3JpcHRpb25JZHggPSB0aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zLmluZGV4T2Yoc3Vic2NyaXB0aW9uKTtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbklkeCAhPT0gLTEpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsYXlOb3RpZmllclN1YnNjcmlwdGlvbnMuc3BsaWNlKHN1YnNjcmlwdGlvbklkeCwgMSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbi5vdXRlclZhbHVlO1xuICAgIH07XG4gICAgRGVsYXlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5RGVsYXkgPSBmdW5jdGlvbiAoZGVsYXlOb3RpZmllciwgdmFsdWUpIHtcbiAgICAgICAgdmFyIG5vdGlmaWVyU3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZXN1bHQodGhpcywgZGVsYXlOb3RpZmllciwgdmFsdWUpO1xuICAgICAgICBpZiAobm90aWZpZXJTdWJzY3JpcHRpb24gJiYgIW5vdGlmaWVyU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChub3RpZmllclN1YnNjcmlwdGlvbik7XG4gICAgICAgICAgICB0aGlzLmRlbGF5Tm90aWZpZXJTdWJzY3JpcHRpb25zLnB1c2gobm90aWZpZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEZWxheVdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS50cnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuY29tcGxldGVkICYmIHRoaXMuZGVsYXlOb3RpZmllclN1YnNjcmlwdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEZWxheVdoZW5TdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXIpKTtcbnZhciBTdWJzY3JpcHRpb25EZWxheU9ic2VydmFibGUgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoU3Vic2NyaXB0aW9uRGVsYXlPYnNlcnZhYmxlLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbkRlbGF5T2JzZXJ2YWJsZShzb3VyY2UsIHN1YnNjcmlwdGlvbkRlbGF5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgX3RoaXMuc3Vic2NyaXB0aW9uRGVsYXkgPSBzdWJzY3JpcHRpb25EZWxheTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb25EZWxheU9ic2VydmFibGUucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbkRlbGF5LnN1YnNjcmliZShuZXcgU3Vic2NyaXB0aW9uRGVsYXlTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uRGVsYXlPYnNlcnZhYmxlO1xufShPYnNlcnZhYmxlKSk7XG52YXIgU3Vic2NyaXB0aW9uRGVsYXlTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFN1YnNjcmlwdGlvbkRlbGF5U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpcHRpb25EZWxheVN1YnNjcmliZXIocGFyZW50LCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIF90aGlzLnNvdXJjZVN1YnNjcmliZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTdWJzY3JpcHRpb25EZWxheVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHVudXNlZCkge1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvU291cmNlKCk7XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb25EZWxheVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnBhcmVudC5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb1NvdXJjZSgpO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uRGVsYXlTdWJzY3JpYmVyLnByb3RvdHlwZS5zdWJzY3JpYmVUb1NvdXJjZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNvdXJjZVN1YnNjcmliZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc291cmNlU3Vic2NyaWJlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5zdWJzY3JpYmUodGhpcy5wYXJlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3Vic2NyaXB0aW9uRGVsYXlTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kZWxheVdoZW4uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZGVtYXRlcmlhbGl6ZSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gZGVtYXRlcmlhbGl6ZU9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgRGVNYXRlcmlhbGl6ZU9wZXJhdG9yKCkpO1xuICAgIH07XG59XG52YXIgRGVNYXRlcmlhbGl6ZU9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERlTWF0ZXJpYWxpemVPcGVyYXRvcigpIHtcbiAgICB9XG4gICAgRGVNYXRlcmlhbGl6ZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRGVNYXRlcmlhbGl6ZVN1YnNjcmliZXIoc3Vic2NyaWJlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIERlTWF0ZXJpYWxpemVPcGVyYXRvcjtcbn0oKSk7XG52YXIgRGVNYXRlcmlhbGl6ZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoRGVNYXRlcmlhbGl6ZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGVNYXRlcmlhbGl6ZVN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgIH1cbiAgICBEZU1hdGVyaWFsaXplU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFsdWUub2JzZXJ2ZSh0aGlzLmRlc3RpbmF0aW9uKTtcbiAgICB9O1xuICAgIHJldHVybiBEZU1hdGVyaWFsaXplU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGVtYXRlcmlhbGl6ZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX2lubmVyU3Vic2NyaWJlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTaW1wbGVPdXRlclN1YnNjcmliZXIsIGlubmVyU3Vic2NyaWJlLCBTaW1wbGVJbm5lclN1YnNjcmliZXIgfSBmcm9tICcuLi9pbm5lclN1YnNjcmliZSc7XG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3Qoa2V5U2VsZWN0b3IsIGZsdXNoZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERpc3RpbmN0T3BlcmF0b3Ioa2V5U2VsZWN0b3IsIGZsdXNoZXMpKTsgfTtcbn1cbnZhciBEaXN0aW5jdE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERpc3RpbmN0T3BlcmF0b3Ioa2V5U2VsZWN0b3IsIGZsdXNoZXMpIHtcbiAgICAgICAgdGhpcy5rZXlTZWxlY3RvciA9IGtleVNlbGVjdG9yO1xuICAgICAgICB0aGlzLmZsdXNoZXMgPSBmbHVzaGVzO1xuICAgIH1cbiAgICBEaXN0aW5jdE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRGlzdGluY3RTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMua2V5U2VsZWN0b3IsIHRoaXMuZmx1c2hlcykpO1xuICAgIH07XG4gICAgcmV0dXJuIERpc3RpbmN0T3BlcmF0b3I7XG59KCkpO1xudmFyIERpc3RpbmN0U3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhEaXN0aW5jdFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGlzdGluY3RTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBrZXlTZWxlY3RvciwgZmx1c2hlcykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMua2V5U2VsZWN0b3IgPSBrZXlTZWxlY3RvcjtcbiAgICAgICAgX3RoaXMudmFsdWVzID0gbmV3IFNldCgpO1xuICAgICAgICBpZiAoZmx1c2hlcykge1xuICAgICAgICAgICAgX3RoaXMuYWRkKGlubmVyU3Vic2NyaWJlKGZsdXNoZXMsIG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIoX3RoaXMpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBEaXN0aW5jdFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudmFsdWVzLmNsZWFyKCk7XG4gICAgfTtcbiAgICBEaXN0aW5jdFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUVycm9yID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIHRoaXMuX2Vycm9yKGVycm9yKTtcbiAgICB9O1xuICAgIERpc3RpbmN0U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMua2V5U2VsZWN0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZUtleVNlbGVjdG9yKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2ZpbmFsaXplTmV4dCh2YWx1ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBEaXN0aW5jdFN1YnNjcmliZXIucHJvdG90eXBlLl91c2VLZXlTZWxlY3RvciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0gdGhpcy5rZXlTZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9maW5hbGl6ZU5leHQoa2V5LCB2YWx1ZSk7XG4gICAgfTtcbiAgICBEaXN0aW5jdFN1YnNjcmliZXIucHJvdG90eXBlLl9maW5hbGl6ZU5leHQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy52YWx1ZXM7XG4gICAgICAgIGlmICghdmFsdWVzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB2YWx1ZXMuYWRkKGtleSk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gRGlzdGluY3RTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbmV4cG9ydCB7IERpc3RpbmN0U3Vic2NyaWJlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGlzdGluY3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZGlzdGluY3RVbnRpbENoYW5nZWQoY29tcGFyZSwga2V5U2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IERpc3RpbmN0VW50aWxDaGFuZ2VkT3BlcmF0b3IoY29tcGFyZSwga2V5U2VsZWN0b3IpKTsgfTtcbn1cbnZhciBEaXN0aW5jdFVudGlsQ2hhbmdlZE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERpc3RpbmN0VW50aWxDaGFuZ2VkT3BlcmF0b3IoY29tcGFyZSwga2V5U2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5jb21wYXJlID0gY29tcGFyZTtcbiAgICAgICAgdGhpcy5rZXlTZWxlY3RvciA9IGtleVNlbGVjdG9yO1xuICAgIH1cbiAgICBEaXN0aW5jdFVudGlsQ2hhbmdlZE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRGlzdGluY3RVbnRpbENoYW5nZWRTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuY29tcGFyZSwgdGhpcy5rZXlTZWxlY3RvcikpO1xuICAgIH07XG4gICAgcmV0dXJuIERpc3RpbmN0VW50aWxDaGFuZ2VkT3BlcmF0b3I7XG59KCkpO1xudmFyIERpc3RpbmN0VW50aWxDaGFuZ2VkU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhEaXN0aW5jdFVudGlsQ2hhbmdlZFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRGlzdGluY3RVbnRpbENoYW5nZWRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjb21wYXJlLCBrZXlTZWxlY3Rvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMua2V5U2VsZWN0b3IgPSBrZXlTZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuaGFzS2V5ID0gZmFsc2U7XG4gICAgICAgIGlmICh0eXBlb2YgY29tcGFyZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgX3RoaXMuY29tcGFyZSA9IGNvbXBhcmU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBEaXN0aW5jdFVudGlsQ2hhbmdlZFN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiAoeCwgeSkge1xuICAgICAgICByZXR1cm4geCA9PT0geTtcbiAgICB9O1xuICAgIERpc3RpbmN0VW50aWxDaGFuZ2VkU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGtleTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHZhciBrZXlTZWxlY3RvciA9IHRoaXMua2V5U2VsZWN0b3I7XG4gICAgICAgICAgICBrZXkgPSBrZXlTZWxlY3RvciA/IGtleVNlbGVjdG9yKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5oYXNLZXkpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGNvbXBhcmUgPSB0aGlzLmNvbXBhcmU7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gY29tcGFyZSh0aGlzLmtleSwga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYXNLZXkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICB0aGlzLmtleSA9IGtleTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBEaXN0aW5jdFVudGlsQ2hhbmdlZFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc3RpbmN0VW50aWxDaGFuZ2VkLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfZGlzdGluY3RVbnRpbENoYW5nZWQgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgZGlzdGluY3RVbnRpbENoYW5nZWQgfSBmcm9tICcuL2Rpc3RpbmN0VW50aWxDaGFuZ2VkJztcbmV4cG9ydCBmdW5jdGlvbiBkaXN0aW5jdFVudGlsS2V5Q2hhbmdlZChrZXksIGNvbXBhcmUpIHtcbiAgICByZXR1cm4gZGlzdGluY3RVbnRpbENoYW5nZWQoZnVuY3Rpb24gKHgsIHkpIHsgcmV0dXJuIGNvbXBhcmUgPyBjb21wYXJlKHhba2V5XSwgeVtrZXldKSA6IHhba2V5XSA9PT0geVtrZXldOyB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRpc3RpbmN0VW50aWxLZXlDaGFuZ2VkLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfdXRpbF9FbXB0eUVycm9yLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBFbXB0eUVycm9yIH0gZnJvbSAnLi4vdXRpbC9FbXB0eUVycm9yJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiB0aHJvd0lmRW1wdHkoZXJyb3JGYWN0b3J5KSB7XG4gICAgaWYgKGVycm9yRmFjdG9yeSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGVycm9yRmFjdG9yeSA9IGRlZmF1bHRFcnJvckZhY3Rvcnk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgVGhyb3dJZkVtcHR5T3BlcmF0b3IoZXJyb3JGYWN0b3J5KSk7XG4gICAgfTtcbn1cbnZhciBUaHJvd0lmRW1wdHlPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaHJvd0lmRW1wdHlPcGVyYXRvcihlcnJvckZhY3RvcnkpIHtcbiAgICAgICAgdGhpcy5lcnJvckZhY3RvcnkgPSBlcnJvckZhY3Rvcnk7XG4gICAgfVxuICAgIFRocm93SWZFbXB0eU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgVGhyb3dJZkVtcHR5U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmVycm9yRmFjdG9yeSkpO1xuICAgIH07XG4gICAgcmV0dXJuIFRocm93SWZFbXB0eU9wZXJhdG9yO1xufSgpKTtcbnZhciBUaHJvd0lmRW1wdHlTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFRocm93SWZFbXB0eVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGhyb3dJZkVtcHR5U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgZXJyb3JGYWN0b3J5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5lcnJvckZhY3RvcnkgPSBlcnJvckZhY3Rvcnk7XG4gICAgICAgIF90aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVGhyb3dJZkVtcHR5U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBUaHJvd0lmRW1wdHlTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNWYWx1ZSkge1xuICAgICAgICAgICAgdmFyIGVyciA9IHZvaWQgMDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZXJyID0gdGhpcy5lcnJvckZhY3RvcnkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgZXJyID0gZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUaHJvd0lmRW1wdHlTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBkZWZhdWx0RXJyb3JGYWN0b3J5KCkge1xuICAgIHJldHVybiBuZXcgRW1wdHlFcnJvcigpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGhyb3dJZkVtcHR5LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfdXRpbF9Bcmd1bWVudE91dE9mUmFuZ2VFcnJvcixfb2JzZXJ2YWJsZV9lbXB0eSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgfSBmcm9tICcuLi91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yJztcbmltcG9ydCB7IGVtcHR5IH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9lbXB0eSc7XG5leHBvcnQgZnVuY3Rpb24gdGFrZShjb3VudCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFRha2VPcGVyYXRvcihjb3VudCkpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbnZhciBUYWtlT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFrZU9wZXJhdG9yKHRvdGFsKSB7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgaWYgKHRoaXMudG90YWwgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgVGFrZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgVGFrZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy50b3RhbCkpO1xuICAgIH07XG4gICAgcmV0dXJuIFRha2VPcGVyYXRvcjtcbn0oKSk7XG52YXIgVGFrZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoVGFrZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGFrZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIHRvdGFsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICBfdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVGFrZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciB0b3RhbCA9IHRoaXMudG90YWw7XG4gICAgICAgIHZhciBjb3VudCA9ICsrdGhpcy5jb3VudDtcbiAgICAgICAgaWYgKGNvdW50IDw9IHRvdGFsKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGNvdW50ID09PSB0b3RhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUYWtlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3V0aWxfQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IsX2ZpbHRlcixfdGhyb3dJZkVtcHR5LF9kZWZhdWx0SWZFbXB0eSxfdGFrZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvciB9IGZyb20gJy4uL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi90aHJvd0lmRW1wdHknO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHkgfSBmcm9tICcuL2RlZmF1bHRJZkVtcHR5JztcbmltcG9ydCB7IHRha2UgfSBmcm9tICcuL3Rha2UnO1xuZXhwb3J0IGZ1bmN0aW9uIGVsZW1lbnRBdChpbmRleCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IoKTtcbiAgICB9XG4gICAgdmFyIGhhc0RlZmF1bHRWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPj0gMjtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnBpcGUoZmlsdGVyKGZ1bmN0aW9uICh2LCBpKSB7IHJldHVybiBpID09PSBpbmRleDsgfSksIHRha2UoMSksIGhhc0RlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgPyBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICA6IHRocm93SWZFbXB0eShmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IoKTsgfSkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1lbGVtZW50QXQuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9vYnNlcnZhYmxlX2NvbmNhdCxfb2JzZXJ2YWJsZV9vZiBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBjb25jYXQgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2NvbmNhdCc7XG5pbXBvcnQgeyBvZiB9IGZyb20gJy4uL29ic2VydmFibGUvb2YnO1xuZXhwb3J0IGZ1bmN0aW9uIGVuZFdpdGgoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJyYXlbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIGNvbmNhdChzb3VyY2UsIG9mLmFwcGx5KHZvaWQgMCwgYXJyYXkpKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVuZFdpdGguanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZXZlcnkocHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBFdmVyeU9wZXJhdG9yKHByZWRpY2F0ZSwgdGhpc0FyZywgc291cmNlKSk7IH07XG59XG52YXIgRXZlcnlPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBFdmVyeU9wZXJhdG9yKHByZWRpY2F0ZSwgdGhpc0FyZywgc291cmNlKSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICB0aGlzLnRoaXNBcmcgPSB0aGlzQXJnO1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG4gICAgRXZlcnlPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChvYnNlcnZlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBFdmVyeVN1YnNjcmliZXIob2JzZXJ2ZXIsIHRoaXMucHJlZGljYXRlLCB0aGlzLnRoaXNBcmcsIHRoaXMuc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRXZlcnlPcGVyYXRvcjtcbn0oKSk7XG52YXIgRXZlcnlTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEV2ZXJ5U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFdmVyeVN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByZWRpY2F0ZSwgdGhpc0FyZywgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIF90aGlzLnRoaXNBcmcgPSB0aGlzQXJnO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIF90aGlzLmluZGV4ID0gMDtcbiAgICAgICAgX3RoaXMudGhpc0FyZyA9IHRoaXNBcmcgfHwgX3RoaXM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgRXZlcnlTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChldmVyeVZhbHVlTWF0Y2gpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGV2ZXJ5VmFsdWVNYXRjaCk7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIEV2ZXJ5U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcmVkaWNhdGUuY2FsbCh0aGlzLnRoaXNBcmcsIHZhbHVlLCB0aGlzLmluZGV4KyssIHRoaXMuc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyZXN1bHQpIHtcbiAgICAgICAgICAgIHRoaXMubm90aWZ5Q29tcGxldGUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFdmVyeVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlDb21wbGV0ZSh0cnVlKTtcbiAgICB9O1xuICAgIHJldHVybiBFdmVyeVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZXJ5LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUsIFNpbXBsZUlubmVyU3Vic2NyaWJlciB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiBleGhhdXN0KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU3dpdGNoRmlyc3RPcGVyYXRvcigpKTsgfTtcbn1cbnZhciBTd2l0Y2hGaXJzdE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFN3aXRjaEZpcnN0T3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIFN3aXRjaEZpcnN0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTd2l0Y2hGaXJzdFN1YnNjcmliZXIoc3Vic2NyaWJlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFN3aXRjaEZpcnN0T3BlcmF0b3I7XG59KCkpO1xudmFyIFN3aXRjaEZpcnN0U3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTd2l0Y2hGaXJzdFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU3dpdGNoRmlyc3RTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5oYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzU3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3dpdGNoRmlyc3RTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmhhc1N1YnNjcmlwdGlvbiA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFkZChpbm5lclN1YnNjcmliZSh2YWx1ZSwgbmV3IFNpbXBsZUlubmVyU3Vic2NyaWJlcih0aGlzKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTd2l0Y2hGaXJzdFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5oYXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN3aXRjaEZpcnN0U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaGFzU3Vic2NyaXB0aW9uID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU3dpdGNoRmlyc3RTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4aGF1c3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9tYXAsX29ic2VydmFibGVfZnJvbSxfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vbWFwJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2Zyb20nO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBTaW1wbGVJbm5lclN1YnNjcmliZXIsIGlubmVyU3Vic2NyaWJlIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIGV4aGF1c3RNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5waXBlKGV4aGF1c3RNYXAoZnVuY3Rpb24gKGEsIGkpIHsgcmV0dXJuIGZyb20ocHJvamVjdChhLCBpKSkucGlwZShtYXAoZnVuY3Rpb24gKGIsIGlpKSB7IHJldHVybiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSk7IH0pKTsgfSkpOyB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IEV4aGF1c3RNYXBPcGVyYXRvcihwcm9qZWN0KSk7XG4gICAgfTtcbn1cbnZhciBFeGhhdXN0TWFwT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRXhoYXVzdE1hcE9wZXJhdG9yKHByb2plY3QpIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB9XG4gICAgRXhoYXVzdE1hcE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRXhoYXVzdE1hcFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcm9qZWN0KSk7XG4gICAgfTtcbiAgICByZXR1cm4gRXhoYXVzdE1hcE9wZXJhdG9yO1xufSgpKTtcbnZhciBFeGhhdXN0TWFwU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhFeGhhdXN0TWFwU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBFeGhhdXN0TWFwU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJvamVjdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIF90aGlzLmhhc1N1YnNjcmlwdGlvbiA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5oYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEV4aGF1c3RNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuaGFzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLnRyeU5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFeGhhdXN0TWFwU3Vic2NyaWJlci5wcm90b3R5cGUudHJ5TmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLnByb2plY3QodmFsdWUsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5oYXNTdWJzY3JpcHRpb24gPSB0cnVlO1xuICAgICAgICB0aGlzLl9pbm5lclN1YihyZXN1bHQpO1xuICAgIH07XG4gICAgRXhoYXVzdE1hcFN1YnNjcmliZXIucHJvdG90eXBlLl9pbm5lclN1YiA9IGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaWJlciA9IG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIodGhpcyk7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLmFkZChpbm5lclN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgaW5uZXJTdWJzY3JpcHRpb24gPSBpbm5lclN1YnNjcmliZShyZXN1bHQsIGlubmVyU3Vic2NyaWJlcik7XG4gICAgICAgIGlmIChpbm5lclN1YnNjcmlwdGlvbiAhPT0gaW5uZXJTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBFeGhhdXN0TWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc0NvbXBsZXRlZCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5oYXNTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICBFeGhhdXN0TWFwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChpbm5lclZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICB9O1xuICAgIEV4aGF1c3RNYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgRXhoYXVzdE1hcFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc1N1YnNjcmlwdGlvbiA9IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5oYXNDb21wbGV0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEV4aGF1c3RNYXBTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV4aGF1c3RNYXAuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBpbm5lclN1YnNjcmliZSwgU2ltcGxlSW5uZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGFuZChwcm9qZWN0LCBjb25jdXJyZW50LCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoY29uY3VycmVudCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbmN1cnJlbnQgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgfVxuICAgIGNvbmN1cnJlbnQgPSAoY29uY3VycmVudCB8fCAwKSA8IDEgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBjb25jdXJyZW50O1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRXhwYW5kT3BlcmF0b3IocHJvamVjdCwgY29uY3VycmVudCwgc2NoZWR1bGVyKSk7IH07XG59XG52YXIgRXhwYW5kT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRXhwYW5kT3BlcmF0b3IocHJvamVjdCwgY29uY3VycmVudCwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgICAgIHRoaXMuY29uY3VycmVudCA9IGNvbmN1cnJlbnQ7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBFeHBhbmRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEV4cGFuZFN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcm9qZWN0LCB0aGlzLmNvbmN1cnJlbnQsIHRoaXMuc2NoZWR1bGVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRXhwYW5kT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0IHsgRXhwYW5kT3BlcmF0b3IgfTtcbnZhciBFeHBhbmRTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEV4cGFuZFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRXhwYW5kU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcHJvamVjdCwgY29uY3VycmVudCwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICAgICAgX3RoaXMuY29uY3VycmVudCA9IGNvbmN1cnJlbnQ7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMuaW5kZXggPSAwO1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSAwO1xuICAgICAgICBfdGhpcy5oYXNDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbmN1cnJlbnQgPCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpIHtcbiAgICAgICAgICAgIF90aGlzLmJ1ZmZlciA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgRXhwYW5kU3Vic2NyaWJlci5kaXNwYXRjaCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBhcmcuc3Vic2NyaWJlciwgcmVzdWx0ID0gYXJnLnJlc3VsdCwgdmFsdWUgPSBhcmcudmFsdWUsIGluZGV4ID0gYXJnLmluZGV4O1xuICAgICAgICBzdWJzY3JpYmVyLnN1YnNjcmliZVRvUHJvamVjdGlvbihyZXN1bHQsIHZhbHVlLCBpbmRleCk7XG4gICAgfTtcbiAgICBFeHBhbmRTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBpZiAoZGVzdGluYXRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICB0aGlzLl9jb21wbGV0ZSgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXgrKztcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlIDwgdGhpcy5jb25jdXJyZW50KSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIHByb2plY3QgPSB0aGlzLnByb2plY3Q7XG4gICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHByb2plY3QodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc2NoZWR1bGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3Vic2NyaWJlVG9Qcm9qZWN0aW9uKHJlc3VsdCwgdmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHsgc3Vic2NyaWJlcjogdGhpcywgcmVzdWx0OiByZXN1bHQsIHZhbHVlOiB2YWx1ZSwgaW5kZXg6IGluZGV4IH07XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZXN0aW5hdGlvbl8xID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgZGVzdGluYXRpb25fMS5hZGQodGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoRXhwYW5kU3Vic2NyaWJlci5kaXNwYXRjaCwgMCwgc3RhdGUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5idWZmZXIucHVzaCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIEV4cGFuZFN1YnNjcmliZXIucHJvdG90eXBlLnN1YnNjcmliZVRvUHJvamVjdGlvbiA9IGZ1bmN0aW9uIChyZXN1bHQsIHZhbHVlLCBpbmRleCkge1xuICAgICAgICB0aGlzLmFjdGl2ZSsrO1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBkZXN0aW5hdGlvbi5hZGQoaW5uZXJTdWJzY3JpYmUocmVzdWx0LCBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHRoaXMpKSk7XG4gICAgfTtcbiAgICBFeHBhbmRTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaGFzQ29tcGxldGVkID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaGFzQ29tcGxldGVkICYmIHRoaXMuYWN0aXZlID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgRXhwYW5kU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChpbm5lclZhbHVlKSB7XG4gICAgICAgIHRoaXMuX25leHQoaW5uZXJWYWx1ZSk7XG4gICAgfTtcbiAgICBFeHBhbmRTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGJ1ZmZlciA9IHRoaXMuYnVmZmVyO1xuICAgICAgICB0aGlzLmFjdGl2ZS0tO1xuICAgICAgICBpZiAoYnVmZmVyICYmIGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KGJ1ZmZlci5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5oYXNDb21wbGV0ZWQgJiYgdGhpcy5hY3RpdmUgPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIEV4cGFuZFN1YnNjcmliZXI7XG59KFNpbXBsZU91dGVyU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgRXhwYW5kU3Vic2NyaWJlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZXhwYW5kLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfU3Vic2NyaXB0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICcuLi9TdWJzY3JpcHRpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmFsaXplKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBGaW5hbGx5T3BlcmF0b3IoY2FsbGJhY2spKTsgfTtcbn1cbnZhciBGaW5hbGx5T3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmluYWxseU9wZXJhdG9yKGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG4gICAgRmluYWxseU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgRmluYWxseVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5jYWxsYmFjaykpO1xuICAgIH07XG4gICAgcmV0dXJuIEZpbmFsbHlPcGVyYXRvcjtcbn0oKSk7XG52YXIgRmluYWxseVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoRmluYWxseVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmluYWxseVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5hZGQobmV3IFN1YnNjcmlwdGlvbihjYWxsYmFjaykpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBGaW5hbGx5U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZmluYWxpemUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gZmluZChwcmVkaWNhdGUsIHRoaXNBcmcpIHtcbiAgICBpZiAodHlwZW9mIHByZWRpY2F0ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwcmVkaWNhdGUgaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBGaW5kVmFsdWVPcGVyYXRvcihwcmVkaWNhdGUsIHNvdXJjZSwgZmFsc2UsIHRoaXNBcmcpKTsgfTtcbn1cbnZhciBGaW5kVmFsdWVPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBGaW5kVmFsdWVPcGVyYXRvcihwcmVkaWNhdGUsIHNvdXJjZSwgeWllbGRJbmRleCwgdGhpc0FyZykge1xuICAgICAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHRoaXMueWllbGRJbmRleCA9IHlpZWxkSW5kZXg7XG4gICAgICAgIHRoaXMudGhpc0FyZyA9IHRoaXNBcmc7XG4gICAgfVxuICAgIEZpbmRWYWx1ZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKG9ic2VydmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IEZpbmRWYWx1ZVN1YnNjcmliZXIob2JzZXJ2ZXIsIHRoaXMucHJlZGljYXRlLCB0aGlzLnNvdXJjZSwgdGhpcy55aWVsZEluZGV4LCB0aGlzLnRoaXNBcmcpKTtcbiAgICB9O1xuICAgIHJldHVybiBGaW5kVmFsdWVPcGVyYXRvcjtcbn0oKSk7XG5leHBvcnQgeyBGaW5kVmFsdWVPcGVyYXRvciB9O1xudmFyIEZpbmRWYWx1ZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoRmluZFZhbHVlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBGaW5kVmFsdWVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcmVkaWNhdGUsIHNvdXJjZSwgeWllbGRJbmRleCwgdGhpc0FyZykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIF90aGlzLnlpZWxkSW5kZXggPSB5aWVsZEluZGV4O1xuICAgICAgICBfdGhpcy50aGlzQXJnID0gdGhpc0FyZztcbiAgICAgICAgX3RoaXMuaW5kZXggPSAwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEZpbmRWYWx1ZVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfTtcbiAgICBGaW5kVmFsdWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBwcmVkaWNhdGUgPSBfYS5wcmVkaWNhdGUsIHRoaXNBcmcgPSBfYS50aGlzQXJnO1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gcHJlZGljYXRlLmNhbGwodGhpc0FyZyB8fCB0aGlzLCB2YWx1ZSwgaW5kZXgsIHRoaXMuc291cmNlKTtcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRlKHRoaXMueWllbGRJbmRleCA/IGluZGV4IDogdmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgRmluZFZhbHVlU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRlKHRoaXMueWllbGRJbmRleCA/IC0xIDogdW5kZWZpbmVkKTtcbiAgICB9O1xuICAgIHJldHVybiBGaW5kVmFsdWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5leHBvcnQgeyBGaW5kVmFsdWVTdWJzY3JpYmVyIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1maW5kLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfb3BlcmF0b3JzX2ZpbmQgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgRmluZFZhbHVlT3BlcmF0b3IgfSBmcm9tICcuLi9vcGVyYXRvcnMvZmluZCc7XG5leHBvcnQgZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgRmluZFZhbHVlT3BlcmF0b3IocHJlZGljYXRlLCBzb3VyY2UsIHRydWUsIHRoaXNBcmcpKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWZpbmRJbmRleC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3V0aWxfRW1wdHlFcnJvcixfZmlsdGVyLF90YWtlLF9kZWZhdWx0SWZFbXB0eSxfdGhyb3dJZkVtcHR5LF91dGlsX2lkZW50aXR5IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi9maWx0ZXInO1xuaW1wb3J0IHsgdGFrZSB9IGZyb20gJy4vdGFrZSc7XG5pbXBvcnQgeyBkZWZhdWx0SWZFbXB0eSB9IGZyb20gJy4vZGVmYXVsdElmRW1wdHknO1xuaW1wb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi90aHJvd0lmRW1wdHknO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChwcmVkaWNhdGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBoYXNEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5waXBlKHByZWRpY2F0ZSA/IGZpbHRlcihmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSk7IH0pIDogaWRlbnRpdHksIHRha2UoMSksIGhhc0RlZmF1bHRWYWx1ZSA/IGRlZmF1bHRJZkVtcHR5KGRlZmF1bHRWYWx1ZSkgOiB0aHJvd0lmRW1wdHkoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEVtcHR5RXJyb3IoKTsgfSkpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zmlyc3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gaWdub3JlRWxlbWVudHMoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGlnbm9yZUVsZW1lbnRzT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBJZ25vcmVFbGVtZW50c09wZXJhdG9yKCkpO1xuICAgIH07XG59XG52YXIgSWdub3JlRWxlbWVudHNPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBJZ25vcmVFbGVtZW50c09wZXJhdG9yKCkge1xuICAgIH1cbiAgICBJZ25vcmVFbGVtZW50c09wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgSWdub3JlRWxlbWVudHNTdWJzY3JpYmVyKHN1YnNjcmliZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBJZ25vcmVFbGVtZW50c09wZXJhdG9yO1xufSgpKTtcbnZhciBJZ25vcmVFbGVtZW50c1N1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoSWdub3JlRWxlbWVudHNTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIElnbm9yZUVsZW1lbnRzU3Vic2NyaWJlcigpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBJZ25vcmVFbGVtZW50c1N1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHVudXNlZCkge1xuICAgIH07XG4gICAgcmV0dXJuIElnbm9yZUVsZW1lbnRzU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWdub3JlRWxlbWVudHMuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IElzRW1wdHlPcGVyYXRvcigpKTsgfTtcbn1cbnZhciBJc0VtcHR5T3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gSXNFbXB0eU9wZXJhdG9yKCkge1xuICAgIH1cbiAgICBJc0VtcHR5T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAob2JzZXJ2ZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgSXNFbXB0eVN1YnNjcmliZXIob2JzZXJ2ZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBJc0VtcHR5T3BlcmF0b3I7XG59KCkpO1xudmFyIElzRW1wdHlTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKElzRW1wdHlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIElzRW1wdHlTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICB9XG4gICAgSXNFbXB0eVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlzRW1wdHkpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb24ubmV4dChpc0VtcHR5KTtcbiAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIElzRW1wdHlTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLm5vdGlmeUNvbXBsZXRlKGZhbHNlKTtcbiAgICB9O1xuICAgIElzRW1wdHlTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZ5Q29tcGxldGUodHJ1ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gSXNFbXB0eVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzRW1wdHkuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyLF91dGlsX0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLF9vYnNlcnZhYmxlX2VtcHR5IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvciB9IGZyb20gJy4uL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2VtcHR5JztcbmV4cG9ydCBmdW5jdGlvbiB0YWtlTGFzdChjb3VudCkge1xuICAgIHJldHVybiBmdW5jdGlvbiB0YWtlTGFzdE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFRha2VMYXN0T3BlcmF0b3IoY291bnQpKTtcbiAgICAgICAgfVxuICAgIH07XG59XG52YXIgVGFrZUxhc3RPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUYWtlTGFzdE9wZXJhdG9yKHRvdGFsKSB7XG4gICAgICAgIHRoaXMudG90YWwgPSB0b3RhbDtcbiAgICAgICAgaWYgKHRoaXMudG90YWwgPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3I7XG4gICAgICAgIH1cbiAgICB9XG4gICAgVGFrZUxhc3RPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFRha2VMYXN0U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnRvdGFsKSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGFrZUxhc3RPcGVyYXRvcjtcbn0oKSk7XG52YXIgVGFrZUxhc3RTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFRha2VMYXN0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUYWtlTGFzdFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHRvdGFsKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgICAgICBfdGhpcy5yaW5nID0gbmV3IEFycmF5KCk7XG4gICAgICAgIF90aGlzLmNvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUYWtlTGFzdFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciByaW5nID0gdGhpcy5yaW5nO1xuICAgICAgICB2YXIgdG90YWwgPSB0aGlzLnRvdGFsO1xuICAgICAgICB2YXIgY291bnQgPSB0aGlzLmNvdW50Kys7XG4gICAgICAgIGlmIChyaW5nLmxlbmd0aCA8IHRvdGFsKSB7XG4gICAgICAgICAgICByaW5nLnB1c2godmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gY291bnQgJSB0b3RhbDtcbiAgICAgICAgICAgIHJpbmdbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRha2VMYXN0U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICB2YXIgY291bnQgPSB0aGlzLmNvdW50O1xuICAgICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgICAgICB2YXIgdG90YWwgPSB0aGlzLmNvdW50ID49IHRoaXMudG90YWwgPyB0aGlzLnRvdGFsIDogdGhpcy5jb3VudDtcbiAgICAgICAgICAgIHZhciByaW5nID0gdGhpcy5yaW5nO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b3RhbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlkeCA9IChjb3VudCsrKSAlIHRvdGFsO1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQocmluZ1tpZHhdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFRha2VMYXN0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZUxhc3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF91dGlsX0VtcHR5RXJyb3IsX2ZpbHRlcixfdGFrZUxhc3QsX3Rocm93SWZFbXB0eSxfZGVmYXVsdElmRW1wdHksX3V0aWxfaWRlbnRpdHkgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgRW1wdHlFcnJvciB9IGZyb20gJy4uL3V0aWwvRW1wdHlFcnJvcic7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuL2ZpbHRlcic7XG5pbXBvcnQgeyB0YWtlTGFzdCB9IGZyb20gJy4vdGFrZUxhc3QnO1xuaW1wb3J0IHsgdGhyb3dJZkVtcHR5IH0gZnJvbSAnLi90aHJvd0lmRW1wdHknO1xuaW1wb3J0IHsgZGVmYXVsdElmRW1wdHkgfSBmcm9tICcuL2RlZmF1bHRJZkVtcHR5JztcbmltcG9ydCB7IGlkZW50aXR5IH0gZnJvbSAnLi4vdXRpbC9pZGVudGl0eSc7XG5leHBvcnQgZnVuY3Rpb24gbGFzdChwcmVkaWNhdGUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciBoYXNEZWZhdWx0VmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID49IDI7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5waXBlKHByZWRpY2F0ZSA/IGZpbHRlcihmdW5jdGlvbiAodiwgaSkgeyByZXR1cm4gcHJlZGljYXRlKHYsIGksIHNvdXJjZSk7IH0pIDogaWRlbnRpdHksIHRha2VMYXN0KDEpLCBoYXNEZWZhdWx0VmFsdWUgPyBkZWZhdWx0SWZFbXB0eShkZWZhdWx0VmFsdWUpIDogdGhyb3dJZkVtcHR5KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBFbXB0eUVycm9yKCk7IH0pKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxhc3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWFwVG8odmFsdWUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IE1hcFRvT3BlcmF0b3IodmFsdWUpKTsgfTtcbn1cbnZhciBNYXBUb09wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE1hcFRvT3BlcmF0b3IodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgICBNYXBUb09wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgTWFwVG9TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMudmFsdWUpKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXBUb09wZXJhdG9yO1xufSgpKTtcbnZhciBNYXBUb1N1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoTWFwVG9TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE1hcFRvU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgTWFwVG9TdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLnZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBNYXBUb1N1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1hcFRvLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfTm90aWZpY2F0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBOb3RpZmljYXRpb24gfSBmcm9tICcuLi9Ob3RpZmljYXRpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIG1hdGVyaWFsaXplKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiBtYXRlcmlhbGl6ZU9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgTWF0ZXJpYWxpemVPcGVyYXRvcigpKTtcbiAgICB9O1xufVxudmFyIE1hdGVyaWFsaXplT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTWF0ZXJpYWxpemVPcGVyYXRvcigpIHtcbiAgICB9XG4gICAgTWF0ZXJpYWxpemVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IE1hdGVyaWFsaXplU3Vic2NyaWJlcihzdWJzY3JpYmVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gTWF0ZXJpYWxpemVPcGVyYXRvcjtcbn0oKSk7XG52YXIgTWF0ZXJpYWxpemVTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKE1hdGVyaWFsaXplU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBNYXRlcmlhbGl6ZVN1YnNjcmliZXIoZGVzdGluYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgIH1cbiAgICBNYXRlcmlhbGl6ZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChOb3RpZmljYXRpb24uY3JlYXRlTmV4dCh2YWx1ZSkpO1xuICAgIH07XG4gICAgTWF0ZXJpYWxpemVTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQoTm90aWZpY2F0aW9uLmNyZWF0ZUVycm9yKGVycikpO1xuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgTWF0ZXJpYWxpemVTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQoTm90aWZpY2F0aW9uLmNyZWF0ZUNvbXBsZXRlKCkpO1xuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIE1hdGVyaWFsaXplU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWF0ZXJpYWxpemUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gc2NhbihhY2N1bXVsYXRvciwgc2VlZCkge1xuICAgIHZhciBoYXNTZWVkID0gZmFsc2U7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPj0gMikge1xuICAgICAgICBoYXNTZWVkID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHNjYW5PcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFNjYW5PcGVyYXRvcihhY2N1bXVsYXRvciwgc2VlZCwgaGFzU2VlZCkpO1xuICAgIH07XG59XG52YXIgU2Nhbk9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFNjYW5PcGVyYXRvcihhY2N1bXVsYXRvciwgc2VlZCwgaGFzU2VlZCkge1xuICAgICAgICBpZiAoaGFzU2VlZCA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBoYXNTZWVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5hY2N1bXVsYXRvciA9IGFjY3VtdWxhdG9yO1xuICAgICAgICB0aGlzLnNlZWQgPSBzZWVkO1xuICAgICAgICB0aGlzLmhhc1NlZWQgPSBoYXNTZWVkO1xuICAgIH1cbiAgICBTY2FuT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTY2FuU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmFjY3VtdWxhdG9yLCB0aGlzLnNlZWQsIHRoaXMuaGFzU2VlZCkpO1xuICAgIH07XG4gICAgcmV0dXJuIFNjYW5PcGVyYXRvcjtcbn0oKSk7XG52YXIgU2NhblN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoU2NhblN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2NhblN1YnNjcmliZXIoZGVzdGluYXRpb24sIGFjY3VtdWxhdG9yLCBfc2VlZCwgaGFzU2VlZCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcjtcbiAgICAgICAgX3RoaXMuX3NlZWQgPSBfc2VlZDtcbiAgICAgICAgX3RoaXMuaGFzU2VlZCA9IGhhc1NlZWQ7XG4gICAgICAgIF90aGlzLmluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoU2NhblN1YnNjcmliZXIucHJvdG90eXBlLCBcInNlZWRcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zZWVkO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5oYXNTZWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX3NlZWQgPSB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgU2NhblN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5oYXNTZWVkKSB7XG4gICAgICAgICAgICB0aGlzLnNlZWQgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdHJ5TmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNjYW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fdHJ5TmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIHZhciByZXN1bHQ7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmFjY3VtdWxhdG9yKHRoaXMuc2VlZCwgdmFsdWUsIGluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWVkID0gcmVzdWx0O1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQocmVzdWx0KTtcbiAgICB9O1xuICAgIHJldHVybiBTY2FuU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2Nhbi5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3NjYW4sX3Rha2VMYXN0LF9kZWZhdWx0SWZFbXB0eSxfdXRpbF9waXBlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IHNjYW4gfSBmcm9tICcuL3NjYW4nO1xuaW1wb3J0IHsgdGFrZUxhc3QgfSBmcm9tICcuL3Rha2VMYXN0JztcbmltcG9ydCB7IGRlZmF1bHRJZkVtcHR5IH0gZnJvbSAnLi9kZWZhdWx0SWZFbXB0eSc7XG5pbXBvcnQgeyBwaXBlIH0gZnJvbSAnLi4vdXRpbC9waXBlJztcbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYWNjdW11bGF0b3IsIHNlZWQpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiByZWR1Y2VPcGVyYXRvckZ1bmN0aW9uV2l0aFNlZWQoc291cmNlKSB7XG4gICAgICAgICAgICByZXR1cm4gcGlwZShzY2FuKGFjY3VtdWxhdG9yLCBzZWVkKSwgdGFrZUxhc3QoMSksIGRlZmF1bHRJZkVtcHR5KHNlZWQpKShzb3VyY2UpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gcmVkdWNlT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHBpcGUoc2NhbihmdW5jdGlvbiAoYWNjLCB2YWx1ZSwgaW5kZXgpIHsgcmV0dXJuIGFjY3VtdWxhdG9yKGFjYywgdmFsdWUsIGluZGV4ICsgMSk7IH0pLCB0YWtlTGFzdCgxKSkoc291cmNlKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVkdWNlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfcmVkdWNlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IHJlZHVjZSB9IGZyb20gJy4vcmVkdWNlJztcbmV4cG9ydCBmdW5jdGlvbiBtYXgoY29tcGFyZXIpIHtcbiAgICB2YXIgbWF4ID0gKHR5cGVvZiBjb21wYXJlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgPyBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gY29tcGFyZXIoeCwgeSkgPiAwID8geCA6IHk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCA+IHkgPyB4IDogeTsgfTtcbiAgICByZXR1cm4gcmVkdWNlKG1heCk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tYXguanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9vYnNlcnZhYmxlX21lcmdlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IG1lcmdlIGFzIG1lcmdlU3RhdGljIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9tZXJnZSc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2UoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0LmNhbGwobWVyZ2VTdGF0aWMuYXBwbHkodm9pZCAwLCBbc291cmNlXS5jb25jYXQob2JzZXJ2YWJsZXMpKSk7IH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tZXJnZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX21lcmdlTWFwIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IG1lcmdlTWFwIH0gZnJvbSAnLi9tZXJnZU1hcCc7XG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VNYXBUbyhpbm5lck9ic2VydmFibGUsIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KSB7XG4gICAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjb25jdXJyZW50ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0sIHJlc3VsdFNlbGVjdG9yLCBjb25jdXJyZW50KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXN1bHRTZWxlY3RvciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yO1xuICAgIH1cbiAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXJPYnNlcnZhYmxlOyB9LCBjb25jdXJyZW50KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW1lcmdlTWFwVG8uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBTaW1wbGVJbm5lclN1YnNjcmliZXIsIGlubmVyU3Vic2NyaWJlIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlU2NhbihhY2N1bXVsYXRvciwgc2VlZCwgY29uY3VycmVudCkge1xuICAgIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHtcbiAgICAgICAgY29uY3VycmVudCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBNZXJnZVNjYW5PcGVyYXRvcihhY2N1bXVsYXRvciwgc2VlZCwgY29uY3VycmVudCkpOyB9O1xufVxudmFyIE1lcmdlU2Nhbk9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE1lcmdlU2Nhbk9wZXJhdG9yKGFjY3VtdWxhdG9yLCBzZWVkLCBjb25jdXJyZW50KSB7XG4gICAgICAgIHRoaXMuYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcjtcbiAgICAgICAgdGhpcy5zZWVkID0gc2VlZDtcbiAgICAgICAgdGhpcy5jb25jdXJyZW50ID0gY29uY3VycmVudDtcbiAgICB9XG4gICAgTWVyZ2VTY2FuT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBNZXJnZVNjYW5TdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuYWNjdW11bGF0b3IsIHRoaXMuc2VlZCwgdGhpcy5jb25jdXJyZW50KSk7XG4gICAgfTtcbiAgICByZXR1cm4gTWVyZ2VTY2FuT3BlcmF0b3I7XG59KCkpO1xuZXhwb3J0IHsgTWVyZ2VTY2FuT3BlcmF0b3IgfTtcbnZhciBNZXJnZVNjYW5TdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKE1lcmdlU2NhblN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWVyZ2VTY2FuU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgYWNjdW11bGF0b3IsIGFjYywgY29uY3VycmVudCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWNjdW11bGF0b3IgPSBhY2N1bXVsYXRvcjtcbiAgICAgICAgX3RoaXMuYWNjID0gYWNjO1xuICAgICAgICBfdGhpcy5jb25jdXJyZW50ID0gY29uY3VycmVudDtcbiAgICAgICAgX3RoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXMuaGFzQ29tcGxldGVkID0gZmFsc2U7XG4gICAgICAgIF90aGlzLmJ1ZmZlciA9IFtdO1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSAwO1xuICAgICAgICBfdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgTWVyZ2VTY2FuU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlIDwgdGhpcy5jb25jdXJyZW50KSB7XG4gICAgICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgdmFyIGlzaCA9IHZvaWQgMDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGFjY3VtdWxhdG9yID0gdGhpcy5hY2N1bXVsYXRvcjtcbiAgICAgICAgICAgICAgICBpc2ggPSBhY2N1bXVsYXRvcih0aGlzLmFjYywgdmFsdWUsIGluZGV4KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5hY3RpdmUrKztcbiAgICAgICAgICAgIHRoaXMuX2lubmVyU3ViKGlzaCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmJ1ZmZlci5wdXNoKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTWVyZ2VTY2FuU3Vic2NyaWJlci5wcm90b3R5cGUuX2lubmVyU3ViID0gZnVuY3Rpb24gKGlzaCkge1xuICAgICAgICB2YXIgaW5uZXJTdWJzY3JpYmVyID0gbmV3IFNpbXBsZUlubmVyU3Vic2NyaWJlcih0aGlzKTtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgZGVzdGluYXRpb24uYWRkKGlubmVyU3Vic2NyaWJlcik7XG4gICAgICAgIHZhciBpbm5lclN1YnNjcmlwdGlvbiA9IGlubmVyU3Vic2NyaWJlKGlzaCwgaW5uZXJTdWJzY3JpYmVyKTtcbiAgICAgICAgaWYgKGlubmVyU3Vic2NyaXB0aW9uICE9PSBpbm5lclN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChpbm5lclN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lcmdlU2NhblN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5oYXNDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgPT09IDAgJiYgdGhpcy5idWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5hY2MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIE1lcmdlU2NhblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAoaW5uZXJWYWx1ZSkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICB0aGlzLmFjYyA9IGlubmVyVmFsdWU7XG4gICAgICAgIHRoaXMuaGFzVmFsdWUgPSB0cnVlO1xuICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KGlubmVyVmFsdWUpO1xuICAgIH07XG4gICAgTWVyZ2VTY2FuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBidWZmZXIgPSB0aGlzLmJ1ZmZlcjtcbiAgICAgICAgdGhpcy5hY3RpdmUtLTtcbiAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl9uZXh0KGJ1ZmZlci5zaGlmdCgpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLmFjdGl2ZSA9PT0gMCAmJiB0aGlzLmhhc0NvbXBsZXRlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHRoaXMuYWNjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE1lcmdlU2NhblN1YnNjcmliZXI7XG59KFNpbXBsZU91dGVyU3Vic2NyaWJlcikpO1xuZXhwb3J0IHsgTWVyZ2VTY2FuU3Vic2NyaWJlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWVyZ2VTY2FuLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfcmVkdWNlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IHJlZHVjZSB9IGZyb20gJy4vcmVkdWNlJztcbmV4cG9ydCBmdW5jdGlvbiBtaW4oY29tcGFyZXIpIHtcbiAgICB2YXIgbWluID0gKHR5cGVvZiBjb21wYXJlciA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgPyBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4gY29tcGFyZXIoeCwgeSkgPCAwID8geCA6IHk7IH1cbiAgICAgICAgOiBmdW5jdGlvbiAoeCwgeSkgeyByZXR1cm4geCA8IHkgPyB4IDogeTsgfTtcbiAgICByZXR1cm4gcmVkdWNlKG1pbik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1taW4uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9vYnNlcnZhYmxlX0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBjb25uZWN0YWJsZU9ic2VydmFibGVEZXNjcmlwdG9yIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUnO1xuZXhwb3J0IGZ1bmN0aW9uIG11bHRpY2FzdChzdWJqZWN0T3JTdWJqZWN0RmFjdG9yeSwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gbXVsdGljYXN0T3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgdmFyIHN1YmplY3RGYWN0b3J5O1xuICAgICAgICBpZiAodHlwZW9mIHN1YmplY3RPclN1YmplY3RGYWN0b3J5ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdWJqZWN0RmFjdG9yeSA9IHN1YmplY3RPclN1YmplY3RGYWN0b3J5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3ViamVjdEZhY3RvcnkgPSBmdW5jdGlvbiBzdWJqZWN0RmFjdG9yeSgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3ViamVjdE9yU3ViamVjdEZhY3Rvcnk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgTXVsdGljYXN0T3BlcmF0b3Ioc3ViamVjdEZhY3RvcnksIHNlbGVjdG9yKSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGNvbm5lY3RhYmxlID0gT2JqZWN0LmNyZWF0ZShzb3VyY2UsIGNvbm5lY3RhYmxlT2JzZXJ2YWJsZURlc2NyaXB0b3IpO1xuICAgICAgICBjb25uZWN0YWJsZS5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIGNvbm5lY3RhYmxlLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7XG4gICAgICAgIHJldHVybiBjb25uZWN0YWJsZTtcbiAgICB9O1xufVxudmFyIE11bHRpY2FzdE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE11bHRpY2FzdE9wZXJhdG9yKHN1YmplY3RGYWN0b3J5LCBzZWxlY3Rvcikge1xuICAgICAgICB0aGlzLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICB9XG4gICAgTXVsdGljYXN0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHZhciBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3I7XG4gICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5zdWJqZWN0RmFjdG9yeSgpO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc2VsZWN0b3Ioc3ViamVjdCkuc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICBzdWJzY3JpcHRpb24uYWRkKHNvdXJjZS5zdWJzY3JpYmUoc3ViamVjdCkpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIE11bHRpY2FzdE9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydCB7IE11bHRpY2FzdE9wZXJhdG9yIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tdWx0aWNhc3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9vYnNlcnZhYmxlX2Zyb20sX3V0aWxfaXNBcnJheSxfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuLi9vYnNlcnZhYmxlL2Zyb20nO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheSc7XG5pbXBvcnQgeyBTaW1wbGVPdXRlclN1YnNjcmliZXIsIFNpbXBsZUlubmVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUgfSBmcm9tICcuLi9pbm5lclN1YnNjcmliZSc7XG5leHBvcnQgZnVuY3Rpb24gb25FcnJvclJlc3VtZU5leHQoKSB7XG4gICAgdmFyIG5leHRTb3VyY2VzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgbmV4dFNvdXJjZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgaWYgKG5leHRTb3VyY2VzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG5leHRTb3VyY2VzWzBdKSkge1xuICAgICAgICBuZXh0U291cmNlcyA9IG5leHRTb3VyY2VzWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IE9uRXJyb3JSZXN1bWVOZXh0T3BlcmF0b3IobmV4dFNvdXJjZXMpKTsgfTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBvbkVycm9yUmVzdW1lTmV4dFN0YXRpYygpIHtcbiAgICB2YXIgbmV4dFNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBuZXh0U291cmNlc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgc291cmNlID0gdW5kZWZpbmVkO1xuICAgIGlmIChuZXh0U291cmNlcy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShuZXh0U291cmNlc1swXSkpIHtcbiAgICAgICAgbmV4dFNvdXJjZXMgPSBuZXh0U291cmNlc1swXTtcbiAgICB9XG4gICAgc291cmNlID0gbmV4dFNvdXJjZXMuc2hpZnQoKTtcbiAgICByZXR1cm4gZnJvbShzb3VyY2UpLmxpZnQobmV3IE9uRXJyb3JSZXN1bWVOZXh0T3BlcmF0b3IobmV4dFNvdXJjZXMpKTtcbn1cbnZhciBPbkVycm9yUmVzdW1lTmV4dE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE9uRXJyb3JSZXN1bWVOZXh0T3BlcmF0b3IobmV4dFNvdXJjZXMpIHtcbiAgICAgICAgdGhpcy5uZXh0U291cmNlcyA9IG5leHRTb3VyY2VzO1xuICAgIH1cbiAgICBPbkVycm9yUmVzdW1lTmV4dE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMubmV4dFNvdXJjZXMpKTtcbiAgICB9O1xuICAgIHJldHVybiBPbkVycm9yUmVzdW1lTmV4dE9wZXJhdG9yO1xufSgpKTtcbnZhciBPbkVycm9yUmVzdW1lTmV4dFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIE9uRXJyb3JSZXN1bWVOZXh0U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgbmV4dFNvdXJjZXMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLm5leHRTb3VyY2VzID0gbmV4dFNvdXJjZXM7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb05leHRTb3VyY2UoKTtcbiAgICB9O1xuICAgIE9uRXJyb3JSZXN1bWVOZXh0U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9OZXh0U291cmNlKCk7XG4gICAgfTtcbiAgICBPbkVycm9yUmVzdW1lTmV4dFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVUb05leHRTb3VyY2UoKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaWJlVG9OZXh0U291cmNlKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIE9uRXJyb3JSZXN1bWVOZXh0U3Vic2NyaWJlci5wcm90b3R5cGUuc3Vic2NyaWJlVG9OZXh0U291cmNlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbmV4dCA9IHRoaXMubmV4dFNvdXJjZXMuc2hpZnQoKTtcbiAgICAgICAgaWYgKCEhbmV4dCkge1xuICAgICAgICAgICAgdmFyIGlubmVyU3Vic2NyaWJlciA9IG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIodGhpcyk7XG4gICAgICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICAgICAgZGVzdGluYXRpb24uYWRkKGlubmVyU3Vic2NyaWJlcik7XG4gICAgICAgICAgICB2YXIgaW5uZXJTdWJzY3JpcHRpb24gPSBpbm5lclN1YnNjcmliZShuZXh0LCBpbm5lclN1YnNjcmliZXIpO1xuICAgICAgICAgICAgaWYgKGlubmVyU3Vic2NyaXB0aW9uICE9PSBpbm5lclN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQoaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gT25FcnJvclJlc3VtZU5leHRTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uRXJyb3JSZXN1bWVOZXh0LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHBhaXJ3aXNlKCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgUGFpcndpc2VPcGVyYXRvcigpKTsgfTtcbn1cbnZhciBQYWlyd2lzZU9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFBhaXJ3aXNlT3BlcmF0b3IoKSB7XG4gICAgfVxuICAgIFBhaXJ3aXNlT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBQYWlyd2lzZVN1YnNjcmliZXIoc3Vic2NyaWJlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFBhaXJ3aXNlT3BlcmF0b3I7XG59KCkpO1xudmFyIFBhaXJ3aXNlU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhQYWlyd2lzZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUGFpcndpc2VTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5oYXNQcmV2ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUGFpcndpc2VTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgcGFpcjtcbiAgICAgICAgaWYgKHRoaXMuaGFzUHJldikge1xuICAgICAgICAgICAgcGFpciA9IFt0aGlzLnByZXYsIHZhbHVlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaGFzUHJldiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcmV2ID0gdmFsdWU7XG4gICAgICAgIGlmIChwYWlyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQocGFpcik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBQYWlyd2lzZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhaXJ3aXNlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfdXRpbF9ub3QsX2ZpbHRlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBub3QgfSBmcm9tICcuLi91dGlsL25vdCc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICcuL2ZpbHRlcic7XG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uKHByZWRpY2F0ZSwgdGhpc0FyZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKShzb3VyY2UpLFxuICAgICAgICAgICAgZmlsdGVyKG5vdChwcmVkaWNhdGUsIHRoaXNBcmcpKShzb3VyY2UpXG4gICAgICAgIF07XG4gICAgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBhcnRpdGlvbi5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX21hcCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuL21hcCc7XG5leHBvcnQgZnVuY3Rpb24gcGx1Y2soKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBwcm9wZXJ0aWVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBsZW5ndGggPSBwcm9wZXJ0aWVzLmxlbmd0aDtcbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignbGlzdCBvZiBwcm9wZXJ0aWVzIGNhbm5vdCBiZSBlbXB0eS4nKTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIG1hcChwbHVja2VyKHByb3BlcnRpZXMsIGxlbmd0aCkpKHNvdXJjZSk7IH07XG59XG5mdW5jdGlvbiBwbHVja2VyKHByb3BzLCBsZW5ndGgpIHtcbiAgICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgdmFyIGN1cnJlbnRQcm9wID0geDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHAgPSBjdXJyZW50UHJvcCAhPSBudWxsID8gY3VycmVudFByb3BbcHJvcHNbaV1dIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHAgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9wID0gcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQcm9wO1xuICAgIH07XG4gICAgcmV0dXJuIG1hcHBlcjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXBsdWNrLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfU3ViamVjdCxfbXVsdGljYXN0IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IG11bHRpY2FzdCB9IGZyb20gJy4vbXVsdGljYXN0JztcbmV4cG9ydCBmdW5jdGlvbiBwdWJsaXNoKHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yID9cbiAgICAgICAgbXVsdGljYXN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5ldyBTdWJqZWN0KCk7IH0sIHNlbGVjdG9yKSA6XG4gICAgICAgIG11bHRpY2FzdChuZXcgU3ViamVjdCgpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1Ymxpc2guanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9CZWhhdmlvclN1YmplY3QsX211bHRpY2FzdCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICcuLi9CZWhhdmlvclN1YmplY3QnO1xuaW1wb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi9tdWx0aWNhc3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hCZWhhdmlvcih2YWx1ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3QobmV3IEJlaGF2aW9yU3ViamVjdCh2YWx1ZSkpKHNvdXJjZSk7IH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wdWJsaXNoQmVoYXZpb3IuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9Bc3luY1N1YmplY3QsX211bHRpY2FzdCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBBc3luY1N1YmplY3QgfSBmcm9tICcuLi9Bc3luY1N1YmplY3QnO1xuaW1wb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi9tdWx0aWNhc3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hMYXN0KCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBtdWx0aWNhc3QobmV3IEFzeW5jU3ViamVjdCgpKShzb3VyY2UpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaExhc3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9SZXBsYXlTdWJqZWN0LF9tdWx0aWNhc3QgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgUmVwbGF5U3ViamVjdCB9IGZyb20gJy4uL1JlcGxheVN1YmplY3QnO1xuaW1wb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi9tdWx0aWNhc3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHB1Ymxpc2hSZXBsYXkoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2VsZWN0b3JPclNjaGVkdWxlciwgc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNlbGVjdG9yT3JTY2hlZHVsZXIgJiYgdHlwZW9mIHNlbGVjdG9yT3JTY2hlZHVsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gc2VsZWN0b3JPclNjaGVkdWxlcjtcbiAgICB9XG4gICAgdmFyIHNlbGVjdG9yID0gdHlwZW9mIHNlbGVjdG9yT3JTY2hlZHVsZXIgPT09ICdmdW5jdGlvbicgPyBzZWxlY3Rvck9yU2NoZWR1bGVyIDogdW5kZWZpbmVkO1xuICAgIHZhciBzdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3QoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2NoZWR1bGVyKTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gbXVsdGljYXN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN1YmplY3Q7IH0sIHNlbGVjdG9yKShzb3VyY2UpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cHVibGlzaFJlcGxheS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3V0aWxfaXNBcnJheSxfb2JzZXJ2YWJsZV9yYWNlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlsL2lzQXJyYXknO1xuaW1wb3J0IHsgcmFjZSBhcyByYWNlU3RhdGljIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9yYWNlJztcbmV4cG9ydCBmdW5jdGlvbiByYWNlKCkge1xuICAgIHZhciBvYnNlcnZhYmxlcyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIG9ic2VydmFibGVzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiByYWNlT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgaWYgKG9ic2VydmFibGVzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG9ic2VydmFibGVzWzBdKSkge1xuICAgICAgICAgICAgb2JzZXJ2YWJsZXMgPSBvYnNlcnZhYmxlc1swXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQuY2FsbChyYWNlU3RhdGljLmFwcGx5KHZvaWQgMCwgW3NvdXJjZV0uY29uY2F0KG9ic2VydmFibGVzKSkpO1xuICAgIH07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYWNlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfb2JzZXJ2YWJsZV9lbXB0eSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgZW1wdHkgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2VtcHR5JztcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXQoY291bnQpIHtcbiAgICBpZiAoY291bnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjb3VudCA9IC0xO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICBpZiAoY291bnQgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBlbXB0eSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvdW50IDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBSZXBlYXRPcGVyYXRvcigtMSwgc291cmNlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFJlcGVhdE9wZXJhdG9yKGNvdW50IC0gMSwgc291cmNlKSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxudmFyIFJlcGVhdE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlcGVhdE9wZXJhdG9yKGNvdW50LCBzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50O1xuICAgICAgICB0aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICB9XG4gICAgUmVwZWF0T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBSZXBlYXRTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuY291bnQsIHRoaXMuc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gUmVwZWF0T3BlcmF0b3I7XG59KCkpO1xudmFyIFJlcGVhdFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmVwZWF0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZXBlYXRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjb3VudCwgc291cmNlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jb3VudCA9IGNvdW50O1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVwZWF0U3Vic2NyaWJlci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIHNvdXJjZSA9IF9hLnNvdXJjZSwgY291bnQgPSBfYS5jb3VudDtcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb3VudCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudCA9IGNvdW50IC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNvdXJjZS5zdWJzY3JpYmUodGhpcy5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gUmVwZWF0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVwZWF0LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUsIFNpbXBsZUlubmVyU3Vic2NyaWJlciB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiByZXBlYXRXaGVuKG5vdGlmaWVyKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBSZXBlYXRXaGVuT3BlcmF0b3Iobm90aWZpZXIpKTsgfTtcbn1cbnZhciBSZXBlYXRXaGVuT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVwZWF0V2hlbk9wZXJhdG9yKG5vdGlmaWVyKSB7XG4gICAgICAgIHRoaXMubm90aWZpZXIgPSBub3RpZmllcjtcbiAgICB9XG4gICAgUmVwZWF0V2hlbk9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgUmVwZWF0V2hlblN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5ub3RpZmllciwgc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gUmVwZWF0V2hlbk9wZXJhdG9yO1xufSgpKTtcbnZhciBSZXBlYXRXaGVuU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhSZXBlYXRXaGVuU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZXBlYXRXaGVuU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgbm90aWZpZXIsIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubm90aWZpZXIgPSBub3RpZmllcjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICBfdGhpcy5zb3VyY2VJc0JlaW5nU3Vic2NyaWJlZFRvID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBSZXBlYXRXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zb3VyY2VJc0JlaW5nU3Vic2NyaWJlZFRvID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHRoaXMpO1xuICAgIH07XG4gICAgUmVwZWF0V2hlblN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5zb3VyY2VJc0JlaW5nU3Vic2NyaWJlZFRvID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUmVwZWF0V2hlblN1YnNjcmliZXIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNvdXJjZUlzQmVpbmdTdWJzY3JpYmVkVG8gPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJldHJpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmliZVRvUmV0cmllcygpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24gfHwgdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9uLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5uZXh0KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFJlcGVhdFdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIG5vdGlmaWNhdGlvbnMgPSBfYS5ub3RpZmljYXRpb25zLCByZXRyaWVzU3Vic2NyaXB0aW9uID0gX2EucmV0cmllc1N1YnNjcmlwdGlvbjtcbiAgICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgICAgIG5vdGlmaWNhdGlvbnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocmV0cmllc1N1YnNjcmlwdGlvbikge1xuICAgICAgICAgICAgcmV0cmllc1N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmV0cmllcyA9IHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFJlcGVhdFdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3Vuc3Vic2NyaWJlID0gdGhpcy5fdW5zdWJzY3JpYmU7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlID0gbnVsbDtcbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlLmNhbGwodGhpcyk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlID0gX3Vuc3Vic2NyaWJlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIFJlcGVhdFdoZW5TdWJzY3JpYmVyLnByb3RvdHlwZS5zdWJzY3JpYmVUb1JldHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubm90aWZpY2F0aW9ucyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHZhciByZXRyaWVzO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIG5vdGlmaWVyID0gdGhpcy5ub3RpZmllcjtcbiAgICAgICAgICAgIHJldHJpZXMgPSBub3RpZmllcih0aGlzLm5vdGlmaWNhdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmV0cmllcyA9IHJldHJpZXM7XG4gICAgICAgIHRoaXMucmV0cmllc1N1YnNjcmlwdGlvbiA9IGlubmVyU3Vic2NyaWJlKHJldHJpZXMsIG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIodGhpcykpO1xuICAgIH07XG4gICAgcmV0dXJuIFJlcGVhdFdoZW5TdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJlcGVhdFdoZW4uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gcmV0cnkoY291bnQpIHtcbiAgICBpZiAoY291bnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjb3VudCA9IC0xO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFJldHJ5T3BlcmF0b3IoY291bnQsIHNvdXJjZSkpOyB9O1xufVxudmFyIFJldHJ5T3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmV0cnlPcGVyYXRvcihjb3VudCwgc291cmNlKSB7XG4gICAgICAgIHRoaXMuY291bnQgPSBjb3VudDtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIFJldHJ5T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBSZXRyeVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5jb3VudCwgdGhpcy5zb3VyY2UpKTtcbiAgICB9O1xuICAgIHJldHVybiBSZXRyeU9wZXJhdG9yO1xufSgpKTtcbnZhciBSZXRyeVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoUmV0cnlTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFJldHJ5U3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgY291bnQsIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuY291bnQgPSBjb3VudDtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFJldHJ5U3Vic2NyaWJlci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMsIHNvdXJjZSA9IF9hLnNvdXJjZSwgY291bnQgPSBfYS5jb3VudDtcbiAgICAgICAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLmVycm9yLmNhbGwodGhpcywgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvdW50ID4gLTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50ID0gY291bnQgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLnN1YnNjcmliZSh0aGlzLl91bnN1YnNjcmliZUFuZFJlY3ljbGUoKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBSZXRyeVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXJldHJ5LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUsIFNpbXBsZUlubmVyU3Vic2NyaWJlciB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiByZXRyeVdoZW4obm90aWZpZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFJldHJ5V2hlbk9wZXJhdG9yKG5vdGlmaWVyLCBzb3VyY2UpKTsgfTtcbn1cbnZhciBSZXRyeVdoZW5PcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXRyeVdoZW5PcGVyYXRvcihub3RpZmllciwgc291cmNlKSB7XG4gICAgICAgIHRoaXMubm90aWZpZXIgPSBub3RpZmllcjtcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgfVxuICAgIFJldHJ5V2hlbk9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgUmV0cnlXaGVuU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLm5vdGlmaWVyLCB0aGlzLnNvdXJjZSkpO1xuICAgIH07XG4gICAgcmV0dXJuIFJldHJ5V2hlbk9wZXJhdG9yO1xufSgpKTtcbnZhciBSZXRyeVdoZW5TdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFJldHJ5V2hlblN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gUmV0cnlXaGVuU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgbm90aWZpZXIsIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMubm90aWZpZXIgPSBub3RpZmllcjtcbiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFJldHJ5V2hlblN1YnNjcmliZXIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSB7XG4gICAgICAgICAgICB2YXIgZXJyb3JzID0gdGhpcy5lcnJvcnM7XG4gICAgICAgICAgICB2YXIgcmV0cmllcyA9IHRoaXMucmV0cmllcztcbiAgICAgICAgICAgIHZhciByZXRyaWVzU3Vic2NyaXB0aW9uID0gdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKCFyZXRyaWVzKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JzID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm90aWZpZXIgPSB0aGlzLm5vdGlmaWVyO1xuICAgICAgICAgICAgICAgICAgICByZXRyaWVzID0gbm90aWZpZXIoZXJyb3JzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuZXJyb3IuY2FsbCh0aGlzLCBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0cmllc1N1YnNjcmlwdGlvbiA9IGlubmVyU3Vic2NyaWJlKHJldHJpZXMsIG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5lcnJvcnMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXRyaWVzU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCk7XG4gICAgICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAgICAgICAgIHRoaXMucmV0cmllcyA9IHJldHJpZXM7XG4gICAgICAgICAgICB0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24gPSByZXRyaWVzU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgZXJyb3JzLm5leHQoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUmV0cnlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBlcnJvcnMgPSBfYS5lcnJvcnMsIHJldHJpZXNTdWJzY3JpcHRpb24gPSBfYS5yZXRyaWVzU3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICBlcnJvcnMudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMuZXJyb3JzID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXRyaWVzU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICByZXRyaWVzU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB0aGlzLnJldHJpZXNTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXRyaWVzID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgUmV0cnlXaGVuU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF91bnN1YnNjcmliZSA9IHRoaXMuX3Vuc3Vic2NyaWJlO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSA9IG51bGw7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQW5kUmVjeWNsZSgpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZSA9IF91bnN1YnNjcmliZTtcbiAgICAgICAgdGhpcy5zb3VyY2Uuc3Vic2NyaWJlKHRoaXMpO1xuICAgIH07XG4gICAgcmV0dXJuIFJldHJ5V2hlblN1YnNjcmliZXI7XG59KFNpbXBsZU91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmV0cnlXaGVuLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUsIFNpbXBsZUlubmVyU3Vic2NyaWJlciB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiBzYW1wbGUobm90aWZpZXIpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFNhbXBsZU9wZXJhdG9yKG5vdGlmaWVyKSk7IH07XG59XG52YXIgU2FtcGxlT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2FtcGxlT3BlcmF0b3Iobm90aWZpZXIpIHtcbiAgICAgICAgdGhpcy5ub3RpZmllciA9IG5vdGlmaWVyO1xuICAgIH1cbiAgICBTYW1wbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgdmFyIHNhbXBsZVN1YnNjcmliZXIgPSBuZXcgU2FtcGxlU3Vic2NyaWJlcihzdWJzY3JpYmVyKTtcbiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IHNvdXJjZS5zdWJzY3JpYmUoc2FtcGxlU3Vic2NyaWJlcik7XG4gICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoaW5uZXJTdWJzY3JpYmUodGhpcy5ub3RpZmllciwgbmV3IFNpbXBsZUlubmVyU3Vic2NyaWJlcihzYW1wbGVTdWJzY3JpYmVyKSkpO1xuICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIFNhbXBsZU9wZXJhdG9yO1xufSgpKTtcbnZhciBTYW1wbGVTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFNhbXBsZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gU2FtcGxlU3Vic2NyaWJlcigpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmhhc1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU2FtcGxlU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9O1xuICAgIFNhbXBsZVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuZW1pdFZhbHVlKCk7XG4gICAgfTtcbiAgICBTYW1wbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5lbWl0VmFsdWUoKTtcbiAgICB9O1xuICAgIFNhbXBsZVN1YnNjcmliZXIucHJvdG90eXBlLmVtaXRWYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFNhbXBsZVN1YnNjcmliZXI7XG59KFNpbXBsZU91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfc2NoZWR1bGVyX2FzeW5jIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBhc3luYyB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5leHBvcnQgZnVuY3Rpb24gc2FtcGxlVGltZShwZXJpb2QsIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkge1xuICAgICAgICBzY2hlZHVsZXIgPSBhc3luYztcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBTYW1wbGVUaW1lT3BlcmF0b3IocGVyaW9kLCBzY2hlZHVsZXIpKTsgfTtcbn1cbnZhciBTYW1wbGVUaW1lT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2FtcGxlVGltZU9wZXJhdG9yKHBlcmlvZCwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMucGVyaW9kID0gcGVyaW9kO1xuICAgICAgICB0aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICB9XG4gICAgU2FtcGxlVGltZU9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU2FtcGxlVGltZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wZXJpb2QsIHRoaXMuc2NoZWR1bGVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2FtcGxlVGltZU9wZXJhdG9yO1xufSgpKTtcbnZhciBTYW1wbGVUaW1lU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTYW1wbGVUaW1lU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTYW1wbGVUaW1lU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgcGVyaW9kLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnBlcmlvZCA9IHBlcmlvZDtcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoTm90aWZpY2F0aW9uLCBwZXJpb2QsIHsgc3Vic2NyaWJlcjogX3RoaXMsIHBlcmlvZDogcGVyaW9kIH0pKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTYW1wbGVUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5sYXN0VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5oYXNWYWx1ZSA9IHRydWU7XG4gICAgfTtcbiAgICBTYW1wbGVUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuaGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLmxhc3RWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBTYW1wbGVUaW1lU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuZnVuY3Rpb24gZGlzcGF0Y2hOb3RpZmljYXRpb24oc3RhdGUpIHtcbiAgICB2YXIgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXIsIHBlcmlvZCA9IHN0YXRlLnBlcmlvZDtcbiAgICBzdWJzY3JpYmVyLm5vdGlmeU5leHQoKTtcbiAgICB0aGlzLnNjaGVkdWxlKHN0YXRlLCBwZXJpb2QpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2FtcGxlVGltZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmV4cG9ydCBmdW5jdGlvbiBzZXF1ZW5jZUVxdWFsKGNvbXBhcmVUbywgY29tcGFyYXRvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU2VxdWVuY2VFcXVhbE9wZXJhdG9yKGNvbXBhcmVUbywgY29tcGFyYXRvcikpOyB9O1xufVxudmFyIFNlcXVlbmNlRXF1YWxPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTZXF1ZW5jZUVxdWFsT3BlcmF0b3IoY29tcGFyZVRvLCBjb21wYXJhdG9yKSB7XG4gICAgICAgIHRoaXMuY29tcGFyZVRvID0gY29tcGFyZVRvO1xuICAgICAgICB0aGlzLmNvbXBhcmF0b3IgPSBjb21wYXJhdG9yO1xuICAgIH1cbiAgICBTZXF1ZW5jZUVxdWFsT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTZXF1ZW5jZUVxdWFsU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmNvbXBhcmVUbywgdGhpcy5jb21wYXJhdG9yKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2VxdWVuY2VFcXVhbE9wZXJhdG9yO1xufSgpKTtcbmV4cG9ydCB7IFNlcXVlbmNlRXF1YWxPcGVyYXRvciB9O1xudmFyIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjb21wYXJlVG8sIGNvbXBhcmF0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmNvbXBhcmVUbyA9IGNvbXBhcmVUbztcbiAgICAgICAgX3RoaXMuY29tcGFyYXRvciA9IGNvbXBhcmF0b3I7XG4gICAgICAgIF90aGlzLl9hID0gW107XG4gICAgICAgIF90aGlzLl9iID0gW107XG4gICAgICAgIF90aGlzLl9vbmVDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbi5hZGQoY29tcGFyZVRvLnN1YnNjcmliZShuZXcgU2VxdWVuY2VFcXVhbENvbXBhcmVUb1N1YnNjcmliZXIoZGVzdGluYXRpb24sIF90aGlzKSkpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5fb25lQ29tcGxldGUgJiYgdGhpcy5fYi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdChmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9hLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5jaGVja1ZhbHVlcygpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTZXF1ZW5jZUVxdWFsU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fb25lQ29tcGxldGUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdCh0aGlzLl9hLmxlbmd0aCA9PT0gMCAmJiB0aGlzLl9iLmxlbmd0aCA9PT0gMCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9vbmVDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgU2VxdWVuY2VFcXVhbFN1YnNjcmliZXIucHJvdG90eXBlLmNoZWNrVmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2MgPSB0aGlzLCBfYSA9IF9jLl9hLCBfYiA9IF9jLl9iLCBjb21wYXJhdG9yID0gX2MuY29tcGFyYXRvcjtcbiAgICAgICAgd2hpbGUgKF9hLmxlbmd0aCA+IDAgJiYgX2IubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGEgPSBfYS5zaGlmdCgpO1xuICAgICAgICAgICAgdmFyIGIgPSBfYi5zaGlmdCgpO1xuICAgICAgICAgICAgdmFyIGFyZUVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGFyZUVxdWFsID0gY29tcGFyYXRvciA/IGNvbXBhcmF0b3IoYSwgYikgOiBhID09PSBiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhcmVFcXVhbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdChmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH07XG4gICAgU2VxdWVuY2VFcXVhbFN1YnNjcmliZXIucHJvdG90eXBlLm5leHRCID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9vbmVDb21wbGV0ZSAmJiB0aGlzLl9hLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2IucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyLnByb3RvdHlwZS5jb21wbGV0ZUIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9vbmVDb21wbGV0ZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0KHRoaXMuX2EubGVuZ3RoID09PSAwICYmIHRoaXMuX2IubGVuZ3RoID09PSAwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX29uZUNvbXBsZXRlID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFNlcXVlbmNlRXF1YWxTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5leHBvcnQgeyBTZXF1ZW5jZUVxdWFsU3Vic2NyaWJlciB9O1xudmFyIFNlcXVlbmNlRXF1YWxDb21wYXJlVG9TdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFNlcXVlbmNlRXF1YWxDb21wYXJlVG9TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNlcXVlbmNlRXF1YWxDb21wYXJlVG9TdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwYXJlbnQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTZXF1ZW5jZUVxdWFsQ29tcGFyZVRvU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQubmV4dEIodmFsdWUpO1xuICAgIH07XG4gICAgU2VxdWVuY2VFcXVhbENvbXBhcmVUb1N1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgU2VxdWVuY2VFcXVhbENvbXBhcmVUb1N1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQuY29tcGxldGVCKCk7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9O1xuICAgIHJldHVybiBTZXF1ZW5jZUVxdWFsQ29tcGFyZVRvU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2VxdWVuY2VFcXVhbC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX211bHRpY2FzdCxfcmVmQ291bnQsX1N1YmplY3QgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgbXVsdGljYXN0IH0gZnJvbSAnLi9tdWx0aWNhc3QnO1xuaW1wb3J0IHsgcmVmQ291bnQgfSBmcm9tICcuL3JlZkNvdW50JztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmZ1bmN0aW9uIHNoYXJlU3ViamVjdEZhY3RvcnkoKSB7XG4gICAgcmV0dXJuIG5ldyBTdWJqZWN0KCk7XG59XG5leHBvcnQgZnVuY3Rpb24gc2hhcmUoKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHJlZkNvdW50KCkobXVsdGljYXN0KHNoYXJlU3ViamVjdEZhY3RvcnkpKHNvdXJjZSkpOyB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9SZXBsYXlTdWJqZWN0IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IFJlcGxheVN1YmplY3QgfSBmcm9tICcuLi9SZXBsYXlTdWJqZWN0JztcbmV4cG9ydCBmdW5jdGlvbiBzaGFyZVJlcGxheShjb25maWdPckJ1ZmZlclNpemUsIHdpbmRvd1RpbWUsIHNjaGVkdWxlcikge1xuICAgIHZhciBjb25maWc7XG4gICAgaWYgKGNvbmZpZ09yQnVmZmVyU2l6ZSAmJiB0eXBlb2YgY29uZmlnT3JCdWZmZXJTaXplID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25maWcgPSBjb25maWdPckJ1ZmZlclNpemU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25maWcgPSB7XG4gICAgICAgICAgICBidWZmZXJTaXplOiBjb25maWdPckJ1ZmZlclNpemUsXG4gICAgICAgICAgICB3aW5kb3dUaW1lOiB3aW5kb3dUaW1lLFxuICAgICAgICAgICAgcmVmQ291bnQ6IGZhbHNlLFxuICAgICAgICAgICAgc2NoZWR1bGVyOiBzY2hlZHVsZXIsXG4gICAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChzaGFyZVJlcGxheU9wZXJhdG9yKGNvbmZpZykpOyB9O1xufVxuZnVuY3Rpb24gc2hhcmVSZXBsYXlPcGVyYXRvcihfYSkge1xuICAgIHZhciBfYiA9IF9hLmJ1ZmZlclNpemUsIGJ1ZmZlclNpemUgPSBfYiA9PT0gdm9pZCAwID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogX2IsIF9jID0gX2Eud2luZG93VGltZSwgd2luZG93VGltZSA9IF9jID09PSB2b2lkIDAgPyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgOiBfYywgdXNlUmVmQ291bnQgPSBfYS5yZWZDb3VudCwgc2NoZWR1bGVyID0gX2Euc2NoZWR1bGVyO1xuICAgIHZhciBzdWJqZWN0O1xuICAgIHZhciByZWZDb3VudCA9IDA7XG4gICAgdmFyIHN1YnNjcmlwdGlvbjtcbiAgICB2YXIgaGFzRXJyb3IgPSBmYWxzZTtcbiAgICB2YXIgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiBzaGFyZVJlcGxheU9wZXJhdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmVmQ291bnQrKztcbiAgICAgICAgdmFyIGlubmVyU3ViO1xuICAgICAgICBpZiAoIXN1YmplY3QgfHwgaGFzRXJyb3IpIHtcbiAgICAgICAgICAgIGhhc0Vycm9yID0gZmFsc2U7XG4gICAgICAgICAgICBzdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3QoYnVmZmVyU2l6ZSwgd2luZG93VGltZSwgc2NoZWR1bGVyKTtcbiAgICAgICAgICAgIGlubmVyU3ViID0gc3ViamVjdC5zdWJzY3JpYmUodGhpcyk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNDb21wbGV0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaW5uZXJTdWIgPSBzdWJqZWN0LnN1YnNjcmliZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZWZDb3VudC0tO1xuICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlubmVyU3ViID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKHN1YnNjcmlwdGlvbiAmJiAhaXNDb21wbGV0ZSAmJiB1c2VSZWZDb3VudCAmJiByZWZDb3VudCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBzdWJqZWN0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2hhcmVSZXBsYXkuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyLF91dGlsX0VtcHR5RXJyb3IgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IEVtcHR5RXJyb3IgfSBmcm9tICcuLi91dGlsL0VtcHR5RXJyb3InO1xuZXhwb3J0IGZ1bmN0aW9uIHNpbmdsZShwcmVkaWNhdGUpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFNpbmdsZU9wZXJhdG9yKHByZWRpY2F0ZSwgc291cmNlKSk7IH07XG59XG52YXIgU2luZ2xlT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2luZ2xlT3BlcmF0b3IocHJlZGljYXRlLCBzb3VyY2UpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgIH1cbiAgICBTaW5nbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFNpbmdsZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcmVkaWNhdGUsIHRoaXMuc291cmNlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2luZ2xlT3BlcmF0b3I7XG59KCkpO1xudmFyIFNpbmdsZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoU2luZ2xlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTaW5nbGVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcmVkaWNhdGUsIHNvdXJjZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7XG4gICAgICAgIF90aGlzLnNlZW5WYWx1ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU2luZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuYXBwbHlTaW5nbGVWYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5zZWVuVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoJ1NlcXVlbmNlIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZWxlbWVudCcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWVuVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5zaW5nbGVWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTaW5nbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4Kys7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZSkge1xuICAgICAgICAgICAgdGhpcy50cnlOZXh0KHZhbHVlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFwcGx5U2luZ2xlVmFsdWUodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTaW5nbGVTdWJzY3JpYmVyLnByb3RvdHlwZS50cnlOZXh0ID0gZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlKHZhbHVlLCBpbmRleCwgdGhpcy5zb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseVNpbmdsZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFNpbmdsZVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXggPiAwKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHRoaXMuc2VlblZhbHVlID8gdGhpcy5zaW5nbGVWYWx1ZSA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IobmV3IEVtcHR5RXJyb3IpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2luZ2xlU3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2luZ2xlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHNraXAoY291bnQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFNraXBPcGVyYXRvcihjb3VudCkpOyB9O1xufVxudmFyIFNraXBPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTa2lwT3BlcmF0b3IodG90YWwpIHtcbiAgICAgICAgdGhpcy50b3RhbCA9IHRvdGFsO1xuICAgIH1cbiAgICBTa2lwT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBTa2lwU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnRvdGFsKSk7XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcE9wZXJhdG9yO1xufSgpKTtcbnZhciBTa2lwU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTa2lwU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTa2lwU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgdG90YWwpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnRvdGFsID0gdG90YWw7XG4gICAgICAgIF90aGlzLmNvdW50ID0gMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTa2lwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAoeCkge1xuICAgICAgICBpZiAoKyt0aGlzLmNvdW50ID4gdGhpcy50b3RhbCkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHgpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcFN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNraXAuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyLF91dGlsX0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvciB9IGZyb20gJy4uL3V0aWwvQXJndW1lbnRPdXRPZlJhbmdlRXJyb3InO1xuZXhwb3J0IGZ1bmN0aW9uIHNraXBMYXN0KGNvdW50KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBTa2lwTGFzdE9wZXJhdG9yKGNvdW50KSk7IH07XG59XG52YXIgU2tpcExhc3RPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTa2lwTGFzdE9wZXJhdG9yKF9za2lwQ291bnQpIHtcbiAgICAgICAgdGhpcy5fc2tpcENvdW50ID0gX3NraXBDb3VudDtcbiAgICAgICAgaWYgKHRoaXMuX3NraXBDb3VudCA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBTa2lwTGFzdE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICBpZiAodGhpcy5fc2tpcENvdW50ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU3Vic2NyaWJlcihzdWJzY3JpYmVyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU2tpcExhc3RTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuX3NraXBDb3VudCkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcExhc3RPcGVyYXRvcjtcbn0oKSk7XG52YXIgU2tpcExhc3RTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFNraXBMYXN0U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTa2lwTGFzdFN1YnNjcmliZXIoZGVzdGluYXRpb24sIF9za2lwQ291bnQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLl9za2lwQ291bnQgPSBfc2tpcENvdW50O1xuICAgICAgICBfdGhpcy5fY291bnQgPSAwO1xuICAgICAgICBfdGhpcy5fcmluZyA9IG5ldyBBcnJheShfc2tpcENvdW50KTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTa2lwTGFzdFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBza2lwQ291bnQgPSB0aGlzLl9za2lwQ291bnQ7XG4gICAgICAgIHZhciBjb3VudCA9IHRoaXMuX2NvdW50Kys7XG4gICAgICAgIGlmIChjb3VudCA8IHNraXBDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5fcmluZ1tjb3VudF0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjdXJyZW50SW5kZXggPSBjb3VudCAlIHNraXBDb3VudDtcbiAgICAgICAgICAgIHZhciByaW5nID0gdGhpcy5fcmluZztcbiAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IHJpbmdbY3VycmVudEluZGV4XTtcbiAgICAgICAgICAgIHJpbmdbY3VycmVudEluZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KG9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFNraXBMYXN0U3Vic2NyaWJlcjtcbn0oU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c2tpcExhc3QuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBTaW1wbGVJbm5lclN1YnNjcmliZXIsIGlubmVyU3Vic2NyaWJlIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIHNraXBVbnRpbChub3RpZmllcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU2tpcFVudGlsT3BlcmF0b3Iobm90aWZpZXIpKTsgfTtcbn1cbnZhciBTa2lwVW50aWxPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTa2lwVW50aWxPcGVyYXRvcihub3RpZmllcikge1xuICAgICAgICB0aGlzLm5vdGlmaWVyID0gbm90aWZpZXI7XG4gICAgfVxuICAgIFNraXBVbnRpbE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKGRlc3RpbmF0aW9uLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFNraXBVbnRpbFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHRoaXMubm90aWZpZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBTa2lwVW50aWxPcGVyYXRvcjtcbn0oKSk7XG52YXIgU2tpcFVudGlsU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTa2lwVW50aWxTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNraXBVbnRpbFN1YnNjcmliZXIoZGVzdGluYXRpb24sIG5vdGlmaWVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB2YXIgaW5uZXJTdWJzY3JpYmVyID0gbmV3IFNpbXBsZUlubmVyU3Vic2NyaWJlcihfdGhpcyk7XG4gICAgICAgIF90aGlzLmFkZChpbm5lclN1YnNjcmliZXIpO1xuICAgICAgICBfdGhpcy5pbm5lclN1YnNjcmlwdGlvbiA9IGlubmVyU3Vic2NyaWJlcjtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaXB0aW9uID0gaW5uZXJTdWJzY3JpYmUobm90aWZpZXIsIGlubmVyU3Vic2NyaWJlcik7XG4gICAgICAgIGlmIChpbm5lclN1YnNjcmlwdGlvbiAhPT0gaW5uZXJTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICBfdGhpcy5hZGQoaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgX3RoaXMuaW5uZXJTdWJzY3JpcHRpb24gPSBpbm5lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFNraXBVbnRpbFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmhhc1ZhbHVlKSB7XG4gICAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9uZXh0LmNhbGwodGhpcywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTa2lwVW50aWxTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuaW5uZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU2tpcFVudGlsU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgfTtcbiAgICByZXR1cm4gU2tpcFVudGlsU3Vic2NyaWJlcjtcbn0oU2ltcGxlT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1za2lwVW50aWwuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9TdWJzY3JpYmVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5leHBvcnQgZnVuY3Rpb24gc2tpcFdoaWxlKHByZWRpY2F0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgU2tpcFdoaWxlT3BlcmF0b3IocHJlZGljYXRlKSk7IH07XG59XG52YXIgU2tpcFdoaWxlT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2tpcFdoaWxlT3BlcmF0b3IocHJlZGljYXRlKSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIH1cbiAgICBTa2lwV2hpbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFNraXBXaGlsZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcmVkaWNhdGUpKTtcbiAgICB9O1xuICAgIHJldHVybiBTa2lwV2hpbGVPcGVyYXRvcjtcbn0oKSk7XG52YXIgU2tpcFdoaWxlU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTa2lwV2hpbGVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFNraXBXaGlsZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByZWRpY2F0ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICBfdGhpcy5za2lwcGluZyA9IHRydWU7XG4gICAgICAgIF90aGlzLmluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBTa2lwV2hpbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBpZiAodGhpcy5za2lwcGluZykge1xuICAgICAgICAgICAgdGhpcy50cnlDYWxsUHJlZGljYXRlKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2tpcHBpbmcpIHtcbiAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTa2lwV2hpbGVTdWJzY3JpYmVyLnByb3RvdHlwZS50cnlDYWxsUHJlZGljYXRlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5wcmVkaWNhdGUodmFsdWUsIHRoaXMuaW5kZXgrKyk7XG4gICAgICAgICAgICB0aGlzLnNraXBwaW5nID0gQm9vbGVhbihyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFNraXBXaGlsZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNraXBXaGlsZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX29ic2VydmFibGVfY29uY2F0LF91dGlsX2lzU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGNvbmNhdCB9IGZyb20gJy4uL29ic2VydmFibGUvY29uY2F0JztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5leHBvcnQgZnVuY3Rpb24gc3RhcnRXaXRoKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFycmF5W19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIHZhciBzY2hlZHVsZXIgPSBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbiAgICBpZiAoaXNTY2hlZHVsZXIoc2NoZWR1bGVyKSkge1xuICAgICAgICBhcnJheS5wb3AoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIGNvbmNhdChhcnJheSwgc291cmNlLCBzY2hlZHVsZXIpOyB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIGNvbmNhdChhcnJheSwgc291cmNlKTsgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zdGFydFdpdGguanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9PYnNlcnZhYmxlLF9zY2hlZHVsZXJfYXNhcCxfdXRpbF9pc051bWVyaWMgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGFzYXAgfSBmcm9tICcuLi9zY2hlZHVsZXIvYXNhcCc7XG5pbXBvcnQgeyBpc051bWVyaWMgfSBmcm9tICcuLi91dGlsL2lzTnVtZXJpYyc7XG52YXIgU3Vic2NyaWJlT25PYnNlcnZhYmxlID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFN1YnNjcmliZU9uT2JzZXJ2YWJsZSwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTdWJzY3JpYmVPbk9ic2VydmFibGUoc291cmNlLCBkZWxheVRpbWUsIHNjaGVkdWxlcikge1xuICAgICAgICBpZiAoZGVsYXlUaW1lID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5VGltZSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSBhc2FwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNvdXJjZSA9IHNvdXJjZTtcbiAgICAgICAgX3RoaXMuZGVsYXlUaW1lID0gZGVsYXlUaW1lO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIGlmICghaXNOdW1lcmljKGRlbGF5VGltZSkgfHwgZGVsYXlUaW1lIDwgMCkge1xuICAgICAgICAgICAgX3RoaXMuZGVsYXlUaW1lID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNjaGVkdWxlciB8fCB0eXBlb2Ygc2NoZWR1bGVyLnNjaGVkdWxlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBhc2FwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3Vic2NyaWJlT25PYnNlcnZhYmxlLmNyZWF0ZSA9IGZ1bmN0aW9uIChzb3VyY2UsIGRlbGF5LCBzY2hlZHVsZXIpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIHNjaGVkdWxlciA9IGFzYXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBTdWJzY3JpYmVPbk9ic2VydmFibGUoc291cmNlLCBkZWxheSwgc2NoZWR1bGVyKTtcbiAgICB9O1xuICAgIFN1YnNjcmliZU9uT2JzZXJ2YWJsZS5kaXNwYXRjaCA9IGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgdmFyIHNvdXJjZSA9IGFyZy5zb3VyY2UsIHN1YnNjcmliZXIgPSBhcmcuc3Vic2NyaWJlcjtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkKHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xuICAgIH07XG4gICAgU3Vic2NyaWJlT25PYnNlcnZhYmxlLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGRlbGF5ID0gdGhpcy5kZWxheVRpbWU7XG4gICAgICAgIHZhciBzb3VyY2UgPSB0aGlzLnNvdXJjZTtcbiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyO1xuICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKFN1YnNjcmliZU9uT2JzZXJ2YWJsZS5kaXNwYXRjaCwgZGVsYXksIHtcbiAgICAgICAgICAgIHNvdXJjZTogc291cmNlLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyXG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmliZU9uT2JzZXJ2YWJsZTtcbn0oT2JzZXJ2YWJsZSkpO1xuZXhwb3J0IHsgU3Vic2NyaWJlT25PYnNlcnZhYmxlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TdWJzY3JpYmVPbk9ic2VydmFibGUuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9vYnNlcnZhYmxlX1N1YnNjcmliZU9uT2JzZXJ2YWJsZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBTdWJzY3JpYmVPbk9ic2VydmFibGUgfSBmcm9tICcuLi9vYnNlcnZhYmxlL1N1YnNjcmliZU9uT2JzZXJ2YWJsZSc7XG5leHBvcnQgZnVuY3Rpb24gc3Vic2NyaWJlT24oc2NoZWR1bGVyLCBkZWxheSkge1xuICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGRlbGF5ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHN1YnNjcmliZU9uT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBTdWJzY3JpYmVPbk9wZXJhdG9yKHNjaGVkdWxlciwgZGVsYXkpKTtcbiAgICB9O1xufVxudmFyIFN1YnNjcmliZU9uT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaWJlT25PcGVyYXRvcihzY2hlZHVsZXIsIGRlbGF5KSB7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICB0aGlzLmRlbGF5ID0gZGVsYXk7XG4gICAgfVxuICAgIFN1YnNjcmliZU9uT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgU3Vic2NyaWJlT25PYnNlcnZhYmxlKHNvdXJjZSwgdGhpcy5kZWxheSwgdGhpcy5zY2hlZHVsZXIpLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICB9O1xuICAgIHJldHVybiBTdWJzY3JpYmVPbk9wZXJhdG9yO1xufSgpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN1YnNjcmliZU9uLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfbWFwLF9vYnNlcnZhYmxlX2Zyb20sX2lubmVyU3Vic2NyaWJlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuL21hcCc7XG5pbXBvcnQgeyBmcm9tIH0gZnJvbSAnLi4vb2JzZXJ2YWJsZS9mcm9tJztcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgU2ltcGxlSW5uZXJTdWJzY3JpYmVyLCBpbm5lclN1YnNjcmliZSB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiBzd2l0Y2hNYXAocHJvamVjdCwgcmVzdWx0U2VsZWN0b3IpIHtcbiAgICBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UucGlwZShzd2l0Y2hNYXAoZnVuY3Rpb24gKGEsIGkpIHsgcmV0dXJuIGZyb20ocHJvamVjdChhLCBpKSkucGlwZShtYXAoZnVuY3Rpb24gKGIsIGlpKSB7IHJldHVybiByZXN1bHRTZWxlY3RvcihhLCBiLCBpLCBpaSk7IH0pKTsgfSkpOyB9O1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFN3aXRjaE1hcE9wZXJhdG9yKHByb2plY3QpKTsgfTtcbn1cbnZhciBTd2l0Y2hNYXBPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBTd2l0Y2hNYXBPcGVyYXRvcihwcm9qZWN0KSB7XG4gICAgICAgIHRoaXMucHJvamVjdCA9IHByb2plY3Q7XG4gICAgfVxuICAgIFN3aXRjaE1hcE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgU3dpdGNoTWFwU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLnByb2plY3QpKTtcbiAgICB9O1xuICAgIHJldHVybiBTd2l0Y2hNYXBPcGVyYXRvcjtcbn0oKSk7XG52YXIgU3dpdGNoTWFwU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhTd2l0Y2hNYXBTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFN3aXRjaE1hcFN1YnNjcmliZXIoZGVzdGluYXRpb24sIHByb2plY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICBfdGhpcy5pbmRleCA9IDA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCsrO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcm9qZWN0KHZhbHVlLCBpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9pbm5lclN1YihyZXN1bHQpO1xuICAgIH07XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX2lubmVyU3ViID0gZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICB2YXIgaW5uZXJTdWJzY3JpcHRpb24gPSB0aGlzLmlubmVyU3Vic2NyaXB0aW9uO1xuICAgICAgICBpZiAoaW5uZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIGlubmVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaWJlciA9IG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIodGhpcyk7XG4gICAgICAgIHZhciBkZXN0aW5hdGlvbiA9IHRoaXMuZGVzdGluYXRpb247XG4gICAgICAgIGRlc3RpbmF0aW9uLmFkZChpbm5lclN1YnNjcmliZXIpO1xuICAgICAgICB0aGlzLmlubmVyU3Vic2NyaXB0aW9uID0gaW5uZXJTdWJzY3JpYmUocmVzdWx0LCBpbm5lclN1YnNjcmliZXIpO1xuICAgICAgICBpZiAodGhpcy5pbm5lclN1YnNjcmlwdGlvbiAhPT0gaW5uZXJTdWJzY3JpYmVyKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5hZGQodGhpcy5pbm5lclN1YnNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN3aXRjaE1hcFN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGlubmVyU3Vic2NyaXB0aW9uID0gdGhpcy5pbm5lclN1YnNjcmlwdGlvbjtcbiAgICAgICAgaWYgKCFpbm5lclN1YnNjcmlwdGlvbiB8fCBpbm5lclN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUuX2NvbXBsZXRlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLmlubmVyU3Vic2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuaW5uZXJTdWJzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkge1xuICAgICAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGUuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgU3dpdGNoTWFwU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChpbm5lclZhbHVlKSB7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChpbm5lclZhbHVlKTtcbiAgICB9O1xuICAgIHJldHVybiBTd2l0Y2hNYXBTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaE1hcC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3N3aXRjaE1hcCxfdXRpbF9pZGVudGl0eSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICcuL3N3aXRjaE1hcCc7XG5pbXBvcnQgeyBpZGVudGl0eSB9IGZyb20gJy4uL3V0aWwvaWRlbnRpdHknO1xuZXhwb3J0IGZ1bmN0aW9uIHN3aXRjaEFsbCgpIHtcbiAgICByZXR1cm4gc3dpdGNoTWFwKGlkZW50aXR5KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN3aXRjaEFsbC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3N3aXRjaE1hcCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICcuL3N3aXRjaE1hcCc7XG5leHBvcnQgZnVuY3Rpb24gc3dpdGNoTWFwVG8oaW5uZXJPYnNlcnZhYmxlLCByZXN1bHRTZWxlY3Rvcikge1xuICAgIHJldHVybiByZXN1bHRTZWxlY3RvciA/IHN3aXRjaE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0sIHJlc3VsdFNlbGVjdG9yKSA6IHN3aXRjaE1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lck9ic2VydmFibGU7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9c3dpdGNoTWFwVG8uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgaW5uZXJTdWJzY3JpYmUsIFNpbXBsZUlubmVyU3Vic2NyaWJlciwgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VVbnRpbChub3RpZmllcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgVGFrZVVudGlsT3BlcmF0b3Iobm90aWZpZXIpKTsgfTtcbn1cbnZhciBUYWtlVW50aWxPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUYWtlVW50aWxPcGVyYXRvcihub3RpZmllcikge1xuICAgICAgICB0aGlzLm5vdGlmaWVyID0gbm90aWZpZXI7XG4gICAgfVxuICAgIFRha2VVbnRpbE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICB2YXIgdGFrZVVudGlsU3Vic2NyaWJlciA9IG5ldyBUYWtlVW50aWxTdWJzY3JpYmVyKHN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgbm90aWZpZXJTdWJzY3JpcHRpb24gPSBpbm5lclN1YnNjcmliZSh0aGlzLm5vdGlmaWVyLCBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHRha2VVbnRpbFN1YnNjcmliZXIpKTtcbiAgICAgICAgaWYgKG5vdGlmaWVyU3Vic2NyaXB0aW9uICYmICF0YWtlVW50aWxTdWJzY3JpYmVyLnNlZW5WYWx1ZSkge1xuICAgICAgICAgICAgdGFrZVVudGlsU3Vic2NyaWJlci5hZGQobm90aWZpZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUodGFrZVVudGlsU3Vic2NyaWJlcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRha2VVbnRpbFN1YnNjcmliZXI7XG4gICAgfTtcbiAgICByZXR1cm4gVGFrZVVudGlsT3BlcmF0b3I7XG59KCkpO1xudmFyIFRha2VVbnRpbFN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoVGFrZVVudGlsU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUYWtlVW50aWxTdWJzY3JpYmVyKGRlc3RpbmF0aW9uKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zZWVuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUYWtlVW50aWxTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnNlZW5WYWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuY29tcGxldGUoKTtcbiAgICB9O1xuICAgIFRha2VVbnRpbFN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG4gICAgcmV0dXJuIFRha2VVbnRpbFN1YnNjcmliZXI7XG59KFNpbXBsZU91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGFrZVVudGlsLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuZXhwb3J0IGZ1bmN0aW9uIHRha2VXaGlsZShwcmVkaWNhdGUsIGluY2x1c2l2ZSkge1xuICAgIGlmIChpbmNsdXNpdmUgPT09IHZvaWQgMCkge1xuICAgICAgICBpbmNsdXNpdmUgPSBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBUYWtlV2hpbGVPcGVyYXRvcihwcmVkaWNhdGUsIGluY2x1c2l2ZSkpO1xuICAgIH07XG59XG52YXIgVGFrZVdoaWxlT3BlcmF0b3IgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gVGFrZVdoaWxlT3BlcmF0b3IocHJlZGljYXRlLCBpbmNsdXNpdmUpIHtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7XG4gICAgICAgIHRoaXMuaW5jbHVzaXZlID0gaW5jbHVzaXZlO1xuICAgIH1cbiAgICBUYWtlV2hpbGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFRha2VXaGlsZVN1YnNjcmliZXIoc3Vic2NyaWJlciwgdGhpcy5wcmVkaWNhdGUsIHRoaXMuaW5jbHVzaXZlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGFrZVdoaWxlT3BlcmF0b3I7XG59KCkpO1xudmFyIFRha2VXaGlsZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoVGFrZVdoaWxlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUYWtlV2hpbGVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBwcmVkaWNhdGUsIGluY2x1c2l2ZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgICAgICBfdGhpcy5pbmNsdXNpdmUgPSBpbmNsdXNpdmU7XG4gICAgICAgIF90aGlzLmluZGV4ID0gMDtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUYWtlV2hpbGVTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5wcmVkaWNhdGUodmFsdWUsIHRoaXMuaW5kZXgrKyk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5leHRPckNvbXBsZXRlKHZhbHVlLCByZXN1bHQpO1xuICAgIH07XG4gICAgVGFrZVdoaWxlU3Vic2NyaWJlci5wcm90b3R5cGUubmV4dE9yQ29tcGxldGUgPSBmdW5jdGlvbiAodmFsdWUsIHByZWRpY2F0ZVJlc3VsdCkge1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBpZiAoQm9vbGVhbihwcmVkaWNhdGVSZXN1bHQpKSB7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmluY2x1c2l2ZSkge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIFRha2VXaGlsZVN1YnNjcmliZXI7XG59KFN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRha2VXaGlsZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIsX3V0aWxfbm9vcCxfdXRpbF9pc0Z1bmN0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJzY3JpYmVyIH0gZnJvbSAnLi4vU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vdXRpbC9ub29wJztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuZXhwb3J0IGZ1bmN0aW9uIHRhcChuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHRhcE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgRG9PcGVyYXRvcihuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKSk7XG4gICAgfTtcbn1cbnZhciBEb09wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIERvT3BlcmF0b3IobmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkge1xuICAgICAgICB0aGlzLm5leHRPck9ic2VydmVyID0gbmV4dE9yT2JzZXJ2ZXI7XG4gICAgICAgIHRoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgdGhpcy5jb21wbGV0ZSA9IGNvbXBsZXRlO1xuICAgIH1cbiAgICBEb09wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgVGFwU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLm5leHRPck9ic2VydmVyLCB0aGlzLmVycm9yLCB0aGlzLmNvbXBsZXRlKSk7XG4gICAgfTtcbiAgICByZXR1cm4gRG9PcGVyYXRvcjtcbn0oKSk7XG52YXIgVGFwU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhUYXBTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRhcFN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9ic2VydmVyT3JOZXh0LCBlcnJvciwgY29tcGxldGUpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLl90YXBOZXh0ID0gbm9vcDtcbiAgICAgICAgX3RoaXMuX3RhcEVycm9yID0gbm9vcDtcbiAgICAgICAgX3RoaXMuX3RhcENvbXBsZXRlID0gbm9vcDtcbiAgICAgICAgX3RoaXMuX3RhcEVycm9yID0gZXJyb3IgfHwgbm9vcDtcbiAgICAgICAgX3RoaXMuX3RhcENvbXBsZXRlID0gY29tcGxldGUgfHwgbm9vcDtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQpKSB7XG4gICAgICAgICAgICBfdGhpcy5fY29udGV4dCA9IF90aGlzO1xuICAgICAgICAgICAgX3RoaXMuX3RhcE5leHQgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvYnNlcnZlck9yTmV4dCkge1xuICAgICAgICAgICAgX3RoaXMuX2NvbnRleHQgPSBvYnNlcnZlck9yTmV4dDtcbiAgICAgICAgICAgIF90aGlzLl90YXBOZXh0ID0gb2JzZXJ2ZXJPck5leHQubmV4dCB8fCBub29wO1xuICAgICAgICAgICAgX3RoaXMuX3RhcEVycm9yID0gb2JzZXJ2ZXJPck5leHQuZXJyb3IgfHwgbm9vcDtcbiAgICAgICAgICAgIF90aGlzLl90YXBDb21wbGV0ZSA9IG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlIHx8IG5vb3A7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUYXBTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fdGFwTmV4dC5jYWxsKHRoaXMuX2NvbnRleHQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFRhcFN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuX3RhcEVycm9yLmNhbGwodGhpcy5fY29udGV4dCwgZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgVGFwU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5fdGFwQ29tcGxldGUuY2FsbCh0aGlzLl9jb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9O1xuICAgIHJldHVybiBUYXBTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10YXAuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9pbm5lclN1YnNjcmliZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU2ltcGxlT3V0ZXJTdWJzY3JpYmVyLCBpbm5lclN1YnNjcmliZSwgU2ltcGxlSW5uZXJTdWJzY3JpYmVyIH0gZnJvbSAnLi4vaW5uZXJTdWJzY3JpYmUnO1xuZXhwb3J0IHZhciBkZWZhdWx0VGhyb3R0bGVDb25maWcgPSB7XG4gICAgbGVhZGluZzogdHJ1ZSxcbiAgICB0cmFpbGluZzogZmFsc2Vcbn07XG5leHBvcnQgZnVuY3Rpb24gdGhyb3R0bGUoZHVyYXRpb25TZWxlY3RvciwgY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZyA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGNvbmZpZyA9IGRlZmF1bHRUaHJvdHRsZUNvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBUaHJvdHRsZU9wZXJhdG9yKGR1cmF0aW9uU2VsZWN0b3IsICEhY29uZmlnLmxlYWRpbmcsICEhY29uZmlnLnRyYWlsaW5nKSk7IH07XG59XG52YXIgVGhyb3R0bGVPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaHJvdHRsZU9wZXJhdG9yKGR1cmF0aW9uU2VsZWN0b3IsIGxlYWRpbmcsIHRyYWlsaW5nKSB7XG4gICAgICAgIHRoaXMuZHVyYXRpb25TZWxlY3RvciA9IGR1cmF0aW9uU2VsZWN0b3I7XG4gICAgICAgIHRoaXMubGVhZGluZyA9IGxlYWRpbmc7XG4gICAgICAgIHRoaXMudHJhaWxpbmcgPSB0cmFpbGluZztcbiAgICB9XG4gICAgVGhyb3R0bGVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFRocm90dGxlU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLmR1cmF0aW9uU2VsZWN0b3IsIHRoaXMubGVhZGluZywgdGhpcy50cmFpbGluZykpO1xuICAgIH07XG4gICAgcmV0dXJuIFRocm90dGxlT3BlcmF0b3I7XG59KCkpO1xudmFyIFRocm90dGxlU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhUaHJvdHRsZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVGhyb3R0bGVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBkdXJhdGlvblNlbGVjdG9yLCBfbGVhZGluZywgX3RyYWlsaW5nKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy5kdXJhdGlvblNlbGVjdG9yID0gZHVyYXRpb25TZWxlY3RvcjtcbiAgICAgICAgX3RoaXMuX2xlYWRpbmcgPSBfbGVhZGluZztcbiAgICAgICAgX3RoaXMuX3RyYWlsaW5nID0gX3RyYWlsaW5nO1xuICAgICAgICBfdGhpcy5faGFzVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUaHJvdHRsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX2hhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fc2VuZFZhbHVlID0gdmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5fdGhyb3R0bGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fbGVhZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy50aHJvdHRsZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRocm90dGxlU3Vic2NyaWJlci5wcm90b3R5cGUuc2VuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcywgX2hhc1ZhbHVlID0gX2EuX2hhc1ZhbHVlLCBfc2VuZFZhbHVlID0gX2EuX3NlbmRWYWx1ZTtcbiAgICAgICAgaWYgKF9oYXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KF9zZW5kVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50aHJvdHRsZShfc2VuZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9oYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZW5kVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBUaHJvdHRsZVN1YnNjcmliZXIucHJvdG90eXBlLnRocm90dGxlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IHRoaXMudHJ5RHVyYXRpb25TZWxlY3Rvcih2YWx1ZSk7XG4gICAgICAgIGlmICghIWR1cmF0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFkZCh0aGlzLl90aHJvdHRsZWQgPSBpbm5lclN1YnNjcmliZShkdXJhdGlvbiwgbmV3IFNpbXBsZUlubmVyU3Vic2NyaWJlcih0aGlzKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUaHJvdHRsZVN1YnNjcmliZXIucHJvdG90eXBlLnRyeUR1cmF0aW9uU2VsZWN0b3IgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmR1cmF0aW9uU2VsZWN0b3IodmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBUaHJvdHRsZVN1YnNjcmliZXIucHJvdG90eXBlLnRocm90dGxpbmdEb25lID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLCBfdGhyb3R0bGVkID0gX2EuX3Rocm90dGxlZCwgX3RyYWlsaW5nID0gX2EuX3RyYWlsaW5nO1xuICAgICAgICBpZiAoX3Rocm90dGxlZCkge1xuICAgICAgICAgICAgX3Rocm90dGxlZC51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Rocm90dGxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKF90cmFpbGluZykge1xuICAgICAgICAgICAgdGhpcy5zZW5kKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRocm90dGxlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aHJvdHRsaW5nRG9uZSgpO1xuICAgIH07XG4gICAgVGhyb3R0bGVTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy50aHJvdHRsaW5nRG9uZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFRocm90dGxlU3Vic2NyaWJlcjtcbn0oU2ltcGxlT3V0ZXJTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aHJvdHRsZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YnNjcmliZXIsX3NjaGVkdWxlcl9hc3luYyxfdGhyb3R0bGUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IGRlZmF1bHRUaHJvdHRsZUNvbmZpZyB9IGZyb20gJy4vdGhyb3R0bGUnO1xuZXhwb3J0IGZ1bmN0aW9uIHRocm90dGxlVGltZShkdXJhdGlvbiwgc2NoZWR1bGVyLCBjb25maWcpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHtcbiAgICAgICAgc2NoZWR1bGVyID0gYXN5bmM7XG4gICAgfVxuICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkge1xuICAgICAgICBjb25maWcgPSBkZWZhdWx0VGhyb3R0bGVDb25maWc7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgVGhyb3R0bGVUaW1lT3BlcmF0b3IoZHVyYXRpb24sIHNjaGVkdWxlciwgY29uZmlnLmxlYWRpbmcsIGNvbmZpZy50cmFpbGluZykpOyB9O1xufVxudmFyIFRocm90dGxlVGltZU9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRocm90dGxlVGltZU9wZXJhdG9yKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGxlYWRpbmcsIHRyYWlsaW5nKSB7XG4gICAgICAgIHRoaXMuZHVyYXRpb24gPSBkdXJhdGlvbjtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIHRoaXMubGVhZGluZyA9IGxlYWRpbmc7XG4gICAgICAgIHRoaXMudHJhaWxpbmcgPSB0cmFpbGluZztcbiAgICB9XG4gICAgVGhyb3R0bGVUaW1lT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBUaHJvdHRsZVRpbWVTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuZHVyYXRpb24sIHRoaXMuc2NoZWR1bGVyLCB0aGlzLmxlYWRpbmcsIHRoaXMudHJhaWxpbmcpKTtcbiAgICB9O1xuICAgIHJldHVybiBUaHJvdHRsZVRpbWVPcGVyYXRvcjtcbn0oKSk7XG52YXIgVGhyb3R0bGVUaW1lU3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhUaHJvdHRsZVRpbWVTdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFRocm90dGxlVGltZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIGR1cmF0aW9uLCBzY2hlZHVsZXIsIGxlYWRpbmcsIHRyYWlsaW5nKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kdXJhdGlvbiA9IGR1cmF0aW9uO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLmxlYWRpbmcgPSBsZWFkaW5nO1xuICAgICAgICBfdGhpcy50cmFpbGluZyA9IHRyYWlsaW5nO1xuICAgICAgICBfdGhpcy5faGFzVHJhaWxpbmdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpcy5fdHJhaWxpbmdWYWx1ZSA9IG51bGw7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgVGhyb3R0bGVUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMudGhyb3R0bGVkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmFpbGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3RyYWlsaW5nVmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNUcmFpbGluZ1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKHRoaXMudGhyb3R0bGVkID0gdGhpcy5zY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hOZXh0LCB0aGlzLmR1cmF0aW9uLCB7IHN1YnNjcmliZXI6IHRoaXMgfSkpO1xuICAgICAgICAgICAgaWYgKHRoaXMubGVhZGluZykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnRyYWlsaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJhaWxpbmdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2hhc1RyYWlsaW5nVmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBUaHJvdHRsZVRpbWVTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLl9oYXNUcmFpbGluZ1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQodGhpcy5fdHJhaWxpbmdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFRocm90dGxlVGltZVN1YnNjcmliZXIucHJvdG90eXBlLmNsZWFyVGhyb3R0bGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB0aHJvdHRsZWQgPSB0aGlzLnRocm90dGxlZDtcbiAgICAgICAgaWYgKHRocm90dGxlZCkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJhaWxpbmcgJiYgdGhpcy5faGFzVHJhaWxpbmdWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh0aGlzLl90cmFpbGluZ1ZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmFpbGluZ1ZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB0aGlzLl9oYXNUcmFpbGluZ1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdHRsZWQudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKHRocm90dGxlZCk7XG4gICAgICAgICAgICB0aGlzLnRocm90dGxlZCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBUaHJvdHRsZVRpbWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBkaXNwYXRjaE5leHQoYXJnKSB7XG4gICAgdmFyIHN1YnNjcmliZXIgPSBhcmcuc3Vic2NyaWJlcjtcbiAgICBzdWJzY3JpYmVyLmNsZWFyVGhyb3R0bGUoKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRocm90dGxlVGltZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3NjaGVkdWxlcl9hc3luYyxfc2Nhbixfb2JzZXJ2YWJsZV9kZWZlcixfbWFwIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IHNjYW4gfSBmcm9tICcuL3NjYW4nO1xuaW1wb3J0IHsgZGVmZXIgfSBmcm9tICcuLi9vYnNlcnZhYmxlL2RlZmVyJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vbWFwJztcbmV4cG9ydCBmdW5jdGlvbiB0aW1lSW50ZXJ2YWwoc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFzeW5jO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gZGVmZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHNvdXJjZS5waXBlKHNjYW4oZnVuY3Rpb24gKF9hLCB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gX2EuY3VycmVudDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKHsgdmFsdWU6IHZhbHVlLCBjdXJyZW50OiBzY2hlZHVsZXIubm93KCksIGxhc3Q6IGN1cnJlbnQgfSk7XG4gICAgICAgICAgICB9LCB7IGN1cnJlbnQ6IHNjaGVkdWxlci5ub3coKSwgdmFsdWU6IHVuZGVmaW5lZCwgbGFzdDogdW5kZWZpbmVkIH0pLCBtYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSBfYS5jdXJyZW50LCBsYXN0ID0gX2EubGFzdCwgdmFsdWUgPSBfYS52YWx1ZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFRpbWVJbnRlcnZhbCh2YWx1ZSwgY3VycmVudCAtIGxhc3QpO1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICB9O1xufVxudmFyIFRpbWVJbnRlcnZhbCA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBUaW1lSW50ZXJ2YWwodmFsdWUsIGludGVydmFsKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnRlcnZhbCA9IGludGVydmFsO1xuICAgIH1cbiAgICByZXR1cm4gVGltZUludGVydmFsO1xufSgpKTtcbmV4cG9ydCB7IFRpbWVJbnRlcnZhbCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZUludGVydmFsLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfc2NoZWR1bGVyX2FzeW5jLF91dGlsX2lzRGF0ZSxfaW5uZXJTdWJzY3JpYmUgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IGlzRGF0ZSB9IGZyb20gJy4uL3V0aWwvaXNEYXRlJztcbmltcG9ydCB7IFNpbXBsZU91dGVyU3Vic2NyaWJlciwgaW5uZXJTdWJzY3JpYmUsIFNpbXBsZUlubmVyU3Vic2NyaWJlciB9IGZyb20gJy4uL2lubmVyU3Vic2NyaWJlJztcbmV4cG9ydCBmdW5jdGlvbiB0aW1lb3V0V2l0aChkdWUsIHdpdGhPYnNlcnZhYmxlLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHtcbiAgICAgICAgc2NoZWR1bGVyID0gYXN5bmM7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgIHZhciBhYnNvbHV0ZVRpbWVvdXQgPSBpc0RhdGUoZHVlKTtcbiAgICAgICAgdmFyIHdhaXRGb3IgPSBhYnNvbHV0ZVRpbWVvdXQgPyAoK2R1ZSAtIHNjaGVkdWxlci5ub3coKSkgOiBNYXRoLmFicyhkdWUpO1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFRpbWVvdXRXaXRoT3BlcmF0b3Iod2FpdEZvciwgYWJzb2x1dGVUaW1lb3V0LCB3aXRoT2JzZXJ2YWJsZSwgc2NoZWR1bGVyKSk7XG4gICAgfTtcbn1cbnZhciBUaW1lb3V0V2l0aE9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRpbWVvdXRXaXRoT3BlcmF0b3Iod2FpdEZvciwgYWJzb2x1dGVUaW1lb3V0LCB3aXRoT2JzZXJ2YWJsZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMud2FpdEZvciA9IHdhaXRGb3I7XG4gICAgICAgIHRoaXMuYWJzb2x1dGVUaW1lb3V0ID0gYWJzb2x1dGVUaW1lb3V0O1xuICAgICAgICB0aGlzLndpdGhPYnNlcnZhYmxlID0gd2l0aE9ic2VydmFibGU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgIH1cbiAgICBUaW1lb3V0V2l0aE9wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLnN1YnNjcmliZShuZXcgVGltZW91dFdpdGhTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuYWJzb2x1dGVUaW1lb3V0LCB0aGlzLndhaXRGb3IsIHRoaXMud2l0aE9ic2VydmFibGUsIHRoaXMuc2NoZWR1bGVyKSk7XG4gICAgfTtcbiAgICByZXR1cm4gVGltZW91dFdpdGhPcGVyYXRvcjtcbn0oKSk7XG52YXIgVGltZW91dFdpdGhTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFRpbWVvdXRXaXRoU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBUaW1lb3V0V2l0aFN1YnNjcmliZXIoZGVzdGluYXRpb24sIGFic29sdXRlVGltZW91dCwgd2FpdEZvciwgd2l0aE9ic2VydmFibGUsIHNjaGVkdWxlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuYWJzb2x1dGVUaW1lb3V0ID0gYWJzb2x1dGVUaW1lb3V0O1xuICAgICAgICBfdGhpcy53YWl0Rm9yID0gd2FpdEZvcjtcbiAgICAgICAgX3RoaXMud2l0aE9ic2VydmFibGUgPSB3aXRoT2JzZXJ2YWJsZTtcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZVRpbWVvdXQoKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBUaW1lb3V0V2l0aFN1YnNjcmliZXIuZGlzcGF0Y2hUaW1lb3V0ID0gZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIHdpdGhPYnNlcnZhYmxlID0gc3Vic2NyaWJlci53aXRoT2JzZXJ2YWJsZTtcbiAgICAgICAgc3Vic2NyaWJlci5fdW5zdWJzY3JpYmVBbmRSZWN5Y2xlKCk7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKGlubmVyU3Vic2NyaWJlKHdpdGhPYnNlcnZhYmxlLCBuZXcgU2ltcGxlSW5uZXJTdWJzY3JpYmVyKHN1YnNjcmliZXIpKSk7XG4gICAgfTtcbiAgICBUaW1lb3V0V2l0aFN1YnNjcmliZXIucHJvdG90eXBlLnNjaGVkdWxlVGltZW91dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFjdGlvbiA9IHRoaXMuYWN0aW9uO1xuICAgICAgICBpZiAoYWN0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmFjdGlvbiA9IGFjdGlvbi5zY2hlZHVsZSh0aGlzLCB0aGlzLndhaXRGb3IpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5hZGQodGhpcy5hY3Rpb24gPSB0aGlzLnNjaGVkdWxlci5zY2hlZHVsZShUaW1lb3V0V2l0aFN1YnNjcmliZXIuZGlzcGF0Y2hUaW1lb3V0LCB0aGlzLndhaXRGb3IsIHRoaXMpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVGltZW91dFdpdGhTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuYWJzb2x1dGVUaW1lb3V0KSB7XG4gICAgICAgICAgICB0aGlzLnNjaGVkdWxlVGltZW91dCgpO1xuICAgICAgICB9XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUuX25leHQuY2FsbCh0aGlzLCB2YWx1ZSk7XG4gICAgfTtcbiAgICBUaW1lb3V0V2l0aFN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gbnVsbDtcbiAgICAgICAgdGhpcy53aXRoT2JzZXJ2YWJsZSA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gVGltZW91dFdpdGhTdWJzY3JpYmVyO1xufShTaW1wbGVPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXRpbWVvdXRXaXRoLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfc2NoZWR1bGVyX2FzeW5jLF91dGlsX1RpbWVvdXRFcnJvcixfdGltZW91dFdpdGgsX29ic2VydmFibGVfdGhyb3dFcnJvciBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBhc3luYyB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBUaW1lb3V0RXJyb3IgfSBmcm9tICcuLi91dGlsL1RpbWVvdXRFcnJvcic7XG5pbXBvcnQgeyB0aW1lb3V0V2l0aCB9IGZyb20gJy4vdGltZW91dFdpdGgnO1xuaW1wb3J0IHsgdGhyb3dFcnJvciB9IGZyb20gJy4uL29ic2VydmFibGUvdGhyb3dFcnJvcic7XG5leHBvcnQgZnVuY3Rpb24gdGltZW91dChkdWUsIHNjaGVkdWxlcikge1xuICAgIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkge1xuICAgICAgICBzY2hlZHVsZXIgPSBhc3luYztcbiAgICB9XG4gICAgcmV0dXJuIHRpbWVvdXRXaXRoKGR1ZSwgdGhyb3dFcnJvcihuZXcgVGltZW91dEVycm9yKCkpLCBzY2hlZHVsZXIpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dGltZW91dC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX3NjaGVkdWxlcl9hc3luYyxfbWFwIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJy4vbWFwJztcbmV4cG9ydCBmdW5jdGlvbiB0aW1lc3RhbXAoc2NoZWR1bGVyKSB7XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFzeW5jO1xuICAgIH1cbiAgICByZXR1cm4gbWFwKGZ1bmN0aW9uICh2YWx1ZSkgeyByZXR1cm4gbmV3IFRpbWVzdGFtcCh2YWx1ZSwgc2NoZWR1bGVyLm5vdygpKTsgfSk7XG59XG52YXIgVGltZXN0YW1wID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFRpbWVzdGFtcCh2YWx1ZSwgdGltZXN0YW1wKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7XG4gICAgfVxuICAgIHJldHVybiBUaW1lc3RhbXA7XG59KCkpO1xuZXhwb3J0IHsgVGltZXN0YW1wIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD10aW1lc3RhbXAuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9yZWR1Y2UgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgcmVkdWNlIH0gZnJvbSAnLi9yZWR1Y2UnO1xuZnVuY3Rpb24gdG9BcnJheVJlZHVjZXIoYXJyLCBpdGVtLCBpbmRleCkge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2l0ZW1dO1xuICAgIH1cbiAgICBhcnIucHVzaChpdGVtKTtcbiAgICByZXR1cm4gYXJyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgcmV0dXJuIHJlZHVjZSh0b0FycmF5UmVkdWNlciwgW10pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dG9BcnJheS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YmplY3QsX2lubmVyU3Vic2NyaWJlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBTaW1wbGVPdXRlclN1YnNjcmliZXIsIGlubmVyU3Vic2NyaWJlLCBTaW1wbGVJbm5lclN1YnNjcmliZXIgfSBmcm9tICcuLi9pbm5lclN1YnNjcmliZSc7XG5leHBvcnQgZnVuY3Rpb24gd2luZG93KHdpbmRvd0JvdW5kYXJpZXMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gd2luZG93T3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBXaW5kb3dPcGVyYXRvcih3aW5kb3dCb3VuZGFyaWVzKSk7XG4gICAgfTtcbn1cbnZhciBXaW5kb3dPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBXaW5kb3dPcGVyYXRvcih3aW5kb3dCb3VuZGFyaWVzKSB7XG4gICAgICAgIHRoaXMud2luZG93Qm91bmRhcmllcyA9IHdpbmRvd0JvdW5kYXJpZXM7XG4gICAgfVxuICAgIFdpbmRvd09wZXJhdG9yLnByb3RvdHlwZS5jYWxsID0gZnVuY3Rpb24gKHN1YnNjcmliZXIsIHNvdXJjZSkge1xuICAgICAgICB2YXIgd2luZG93U3Vic2NyaWJlciA9IG5ldyBXaW5kb3dTdWJzY3JpYmVyKHN1YnNjcmliZXIpO1xuICAgICAgICB2YXIgc291cmNlU3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZSh3aW5kb3dTdWJzY3JpYmVyKTtcbiAgICAgICAgaWYgKCFzb3VyY2VTdWJzY3JpcHRpb24uY2xvc2VkKSB7XG4gICAgICAgICAgICB3aW5kb3dTdWJzY3JpYmVyLmFkZChpbm5lclN1YnNjcmliZSh0aGlzLndpbmRvd0JvdW5kYXJpZXMsIG5ldyBTaW1wbGVJbm5lclN1YnNjcmliZXIod2luZG93U3Vic2NyaWJlcikpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc291cmNlU3Vic2NyaXB0aW9uO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd09wZXJhdG9yO1xufSgpKTtcbnZhciBXaW5kb3dTdWJzY3JpYmVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFdpbmRvd1N1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gV2luZG93U3Vic2NyaWJlcihkZXN0aW5hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBkZXN0aW5hdGlvbikgfHwgdGhpcztcbiAgICAgICAgX3RoaXMud2luZG93ID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgZGVzdGluYXRpb24ubmV4dChfdGhpcy53aW5kb3cpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMub3BlbldpbmRvdygpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5fZXJyb3IoZXJyb3IpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5Q29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICB0aGlzLndpbmRvdy5uZXh0KHZhbHVlKTtcbiAgICB9O1xuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdGhpcy53aW5kb3cuZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLndpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5fdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMud2luZG93ID0gbnVsbDtcbiAgICB9O1xuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLm9wZW5XaW5kb3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBwcmV2V2luZG93ID0gdGhpcy53aW5kb3c7XG4gICAgICAgIGlmIChwcmV2V2luZG93KSB7XG4gICAgICAgICAgICBwcmV2V2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRlc3RpbmF0aW9uID0gdGhpcy5kZXN0aW5hdGlvbjtcbiAgICAgICAgdmFyIG5ld1dpbmRvdyA9IHRoaXMud2luZG93ID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgZGVzdGluYXRpb24ubmV4dChuZXdXaW5kb3cpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd1N1YnNjcmliZXI7XG59KFNpbXBsZU91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3Vic2NyaWJlcixfU3ViamVjdCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgKiBhcyB0c2xpYl8xIGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgU3Vic2NyaWJlciB9IGZyb20gJy4uL1N1YnNjcmliZXInO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJy4uL1N1YmplY3QnO1xuZXhwb3J0IGZ1bmN0aW9uIHdpbmRvd0NvdW50KHdpbmRvd1NpemUsIHN0YXJ0V2luZG93RXZlcnkpIHtcbiAgICBpZiAoc3RhcnRXaW5kb3dFdmVyeSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHN0YXJ0V2luZG93RXZlcnkgPSAwO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gd2luZG93Q291bnRPcGVyYXRvckZ1bmN0aW9uKHNvdXJjZSkge1xuICAgICAgICByZXR1cm4gc291cmNlLmxpZnQobmV3IFdpbmRvd0NvdW50T3BlcmF0b3Iod2luZG93U2l6ZSwgc3RhcnRXaW5kb3dFdmVyeSkpO1xuICAgIH07XG59XG52YXIgV2luZG93Q291bnRPcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBXaW5kb3dDb3VudE9wZXJhdG9yKHdpbmRvd1NpemUsIHN0YXJ0V2luZG93RXZlcnkpIHtcbiAgICAgICAgdGhpcy53aW5kb3dTaXplID0gd2luZG93U2l6ZTtcbiAgICAgICAgdGhpcy5zdGFydFdpbmRvd0V2ZXJ5ID0gc3RhcnRXaW5kb3dFdmVyeTtcbiAgICB9XG4gICAgV2luZG93Q291bnRPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFdpbmRvd0NvdW50U3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLndpbmRvd1NpemUsIHRoaXMuc3RhcnRXaW5kb3dFdmVyeSkpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd0NvdW50T3BlcmF0b3I7XG59KCkpO1xudmFyIFdpbmRvd0NvdW50U3Vic2NyaWJlciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICB0c2xpYl8xLl9fZXh0ZW5kcyhXaW5kb3dDb3VudFN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gV2luZG93Q291bnRTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCB3aW5kb3dTaXplLCBzdGFydFdpbmRvd0V2ZXJ5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5kZXN0aW5hdGlvbiA9IGRlc3RpbmF0aW9uO1xuICAgICAgICBfdGhpcy53aW5kb3dTaXplID0gd2luZG93U2l6ZTtcbiAgICAgICAgX3RoaXMuc3RhcnRXaW5kb3dFdmVyeSA9IHN0YXJ0V2luZG93RXZlcnk7XG4gICAgICAgIF90aGlzLndpbmRvd3MgPSBbbmV3IFN1YmplY3QoKV07XG4gICAgICAgIF90aGlzLmNvdW50ID0gMDtcbiAgICAgICAgZGVzdGluYXRpb24ubmV4dChfdGhpcy53aW5kb3dzWzBdKTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBXaW5kb3dDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBzdGFydFdpbmRvd0V2ZXJ5ID0gKHRoaXMuc3RhcnRXaW5kb3dFdmVyeSA+IDApID8gdGhpcy5zdGFydFdpbmRvd0V2ZXJ5IDogdGhpcy53aW5kb3dTaXplO1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICB2YXIgd2luZG93U2l6ZSA9IHRoaXMud2luZG93U2l6ZTtcbiAgICAgICAgdmFyIHdpbmRvd3MgPSB0aGlzLndpbmRvd3M7XG4gICAgICAgIHZhciBsZW4gPSB3aW5kb3dzLmxlbmd0aDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW4gJiYgIXRoaXMuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgIHdpbmRvd3NbaV0ubmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGMgPSB0aGlzLmNvdW50IC0gd2luZG93U2l6ZSArIDE7XG4gICAgICAgIGlmIChjID49IDAgJiYgYyAlIHN0YXJ0V2luZG93RXZlcnkgPT09IDAgJiYgIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKyt0aGlzLmNvdW50ICUgc3RhcnRXaW5kb3dFdmVyeSA9PT0gMCAmJiAhdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgICAgICB3aW5kb3dzLnB1c2god2luZG93XzEpO1xuICAgICAgICAgICAgZGVzdGluYXRpb24ubmV4dCh3aW5kb3dfMSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpbmRvd0NvdW50U3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgd2luZG93cyA9IHRoaXMud2luZG93cztcbiAgICAgICAgaWYgKHdpbmRvd3MpIHtcbiAgICAgICAgICAgIHdoaWxlICh3aW5kb3dzLmxlbmd0aCA+IDAgJiYgIXRoaXMuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgV2luZG93Q291bnRTdWJzY3JpYmVyLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gdGhpcy53aW5kb3dzO1xuICAgICAgICBpZiAod2luZG93cykge1xuICAgICAgICAgICAgd2hpbGUgKHdpbmRvd3MubGVuZ3RoID4gMCAmJiAhdGhpcy5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB3aW5kb3dzLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBXaW5kb3dDb3VudFN1YnNjcmliZXIucHJvdG90eXBlLl91bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5jb3VudCA9IDA7XG4gICAgICAgIHRoaXMud2luZG93cyA9IG51bGw7XG4gICAgfTtcbiAgICByZXR1cm4gV2luZG93Q291bnRTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dDb3VudC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX1N1YmplY3QsX3NjaGVkdWxlcl9hc3luYyxfU3Vic2NyaWJlcixfdXRpbF9pc051bWVyaWMsX3V0aWxfaXNTY2hlZHVsZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IGFzeW5jIH0gZnJvbSAnLi4vc2NoZWR1bGVyL2FzeW5jJztcbmltcG9ydCB7IFN1YnNjcmliZXIgfSBmcm9tICcuLi9TdWJzY3JpYmVyJztcbmltcG9ydCB7IGlzTnVtZXJpYyB9IGZyb20gJy4uL3V0aWwvaXNOdW1lcmljJztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5leHBvcnQgZnVuY3Rpb24gd2luZG93VGltZSh3aW5kb3dUaW1lU3Bhbikge1xuICAgIHZhciBzY2hlZHVsZXIgPSBhc3luYztcbiAgICB2YXIgd2luZG93Q3JlYXRpb25JbnRlcnZhbCA9IG51bGw7XG4gICAgdmFyIG1heFdpbmRvd1NpemUgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgaWYgKGlzU2NoZWR1bGVyKGFyZ3VtZW50c1szXSkpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gYXJndW1lbnRzWzNdO1xuICAgIH1cbiAgICBpZiAoaXNTY2hlZHVsZXIoYXJndW1lbnRzWzJdKSkge1xuICAgICAgICBzY2hlZHVsZXIgPSBhcmd1bWVudHNbMl07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzTnVtZXJpYyhhcmd1bWVudHNbMl0pKSB7XG4gICAgICAgIG1heFdpbmRvd1NpemUgPSBOdW1iZXIoYXJndW1lbnRzWzJdKTtcbiAgICB9XG4gICAgaWYgKGlzU2NoZWR1bGVyKGFyZ3VtZW50c1sxXSkpIHtcbiAgICAgICAgc2NoZWR1bGVyID0gYXJndW1lbnRzWzFdO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc051bWVyaWMoYXJndW1lbnRzWzFdKSkge1xuICAgICAgICB3aW5kb3dDcmVhdGlvbkludGVydmFsID0gTnVtYmVyKGFyZ3VtZW50c1sxXSk7XG4gICAgfVxuICAgIHJldHVybiBmdW5jdGlvbiB3aW5kb3dUaW1lT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBXaW5kb3dUaW1lT3BlcmF0b3Iod2luZG93VGltZVNwYW4sIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwsIG1heFdpbmRvd1NpemUsIHNjaGVkdWxlcikpO1xuICAgIH07XG59XG52YXIgV2luZG93VGltZU9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFdpbmRvd1RpbWVPcGVyYXRvcih3aW5kb3dUaW1lU3Bhbiwgd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgbWF4V2luZG93U2l6ZSwgc2NoZWR1bGVyKSB7XG4gICAgICAgIHRoaXMud2luZG93VGltZVNwYW4gPSB3aW5kb3dUaW1lU3BhbjtcbiAgICAgICAgdGhpcy53aW5kb3dDcmVhdGlvbkludGVydmFsID0gd2luZG93Q3JlYXRpb25JbnRlcnZhbDtcbiAgICAgICAgdGhpcy5tYXhXaW5kb3dTaXplID0gbWF4V2luZG93U2l6ZTtcbiAgICAgICAgdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgfVxuICAgIFdpbmRvd1RpbWVPcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFdpbmRvd1RpbWVTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMud2luZG93VGltZVNwYW4sIHRoaXMud2luZG93Q3JlYXRpb25JbnRlcnZhbCwgdGhpcy5tYXhXaW5kb3dTaXplLCB0aGlzLnNjaGVkdWxlcikpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd1RpbWVPcGVyYXRvcjtcbn0oKSk7XG52YXIgQ291bnRlZFN1YmplY3QgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQ291bnRlZFN1YmplY3QsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQ291bnRlZFN1YmplY3QoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5fbnVtYmVyT2ZOZXh0ZWRWYWx1ZXMgPSAwO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIENvdW50ZWRTdWJqZWN0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHRoaXMuX251bWJlck9mTmV4dGVkVmFsdWVzKys7XG4gICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHZhbHVlKTtcbiAgICB9O1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb3VudGVkU3ViamVjdC5wcm90b3R5cGUsIFwibnVtYmVyT2ZOZXh0ZWRWYWx1ZXNcIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9udW1iZXJPZk5leHRlZFZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgcmV0dXJuIENvdW50ZWRTdWJqZWN0O1xufShTdWJqZWN0KSk7XG52YXIgV2luZG93VGltZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoV2luZG93VGltZVN1YnNjcmliZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gV2luZG93VGltZVN1YnNjcmliZXIoZGVzdGluYXRpb24sIHdpbmRvd1RpbWVTcGFuLCB3aW5kb3dDcmVhdGlvbkludGVydmFsLCBtYXhXaW5kb3dTaXplLCBzY2hlZHVsZXIpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLndpbmRvd1RpbWVTcGFuID0gd2luZG93VGltZVNwYW47XG4gICAgICAgIF90aGlzLndpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgPSB3aW5kb3dDcmVhdGlvbkludGVydmFsO1xuICAgICAgICBfdGhpcy5tYXhXaW5kb3dTaXplID0gbWF4V2luZG93U2l6ZTtcbiAgICAgICAgX3RoaXMuc2NoZWR1bGVyID0gc2NoZWR1bGVyO1xuICAgICAgICBfdGhpcy53aW5kb3dzID0gW107XG4gICAgICAgIHZhciB3aW5kb3cgPSBfdGhpcy5vcGVuV2luZG93KCk7XG4gICAgICAgIGlmICh3aW5kb3dDcmVhdGlvbkludGVydmFsICE9PSBudWxsICYmIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgPj0gMCkge1xuICAgICAgICAgICAgdmFyIGNsb3NlU3RhdGUgPSB7IHN1YnNjcmliZXI6IF90aGlzLCB3aW5kb3c6IHdpbmRvdywgY29udGV4dDogbnVsbCB9O1xuICAgICAgICAgICAgdmFyIGNyZWF0aW9uU3RhdGUgPSB7IHdpbmRvd1RpbWVTcGFuOiB3aW5kb3dUaW1lU3Bhbiwgd2luZG93Q3JlYXRpb25JbnRlcnZhbDogd2luZG93Q3JlYXRpb25JbnRlcnZhbCwgc3Vic2NyaWJlcjogX3RoaXMsIHNjaGVkdWxlcjogc2NoZWR1bGVyIH07XG4gICAgICAgICAgICBfdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoV2luZG93Q2xvc2UsIHdpbmRvd1RpbWVTcGFuLCBjbG9zZVN0YXRlKSk7XG4gICAgICAgICAgICBfdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoV2luZG93Q3JlYXRpb24sIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwsIGNyZWF0aW9uU3RhdGUpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB0aW1lU3Bhbk9ubHlTdGF0ZSA9IHsgc3Vic2NyaWJlcjogX3RoaXMsIHdpbmRvdzogd2luZG93LCB3aW5kb3dUaW1lU3Bhbjogd2luZG93VGltZVNwYW4gfTtcbiAgICAgICAgICAgIF90aGlzLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hXaW5kb3dUaW1lU3Bhbk9ubHksIHdpbmRvd1RpbWVTcGFuLCB0aW1lU3Bhbk9ubHlTdGF0ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgV2luZG93VGltZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciB3aW5kb3dzID0gdGhpcy53aW5kb3dzO1xuICAgICAgICB2YXIgbGVuID0gd2luZG93cy5sZW5ndGg7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3dfMSA9IHdpbmRvd3NbaV07XG4gICAgICAgICAgICBpZiAoIXdpbmRvd18xLmNsb3NlZCkge1xuICAgICAgICAgICAgICAgIHdpbmRvd18xLm5leHQodmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICh3aW5kb3dfMS5udW1iZXJPZk5leHRlZFZhbHVlcyA+PSB0aGlzLm1heFdpbmRvd1NpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zZVdpbmRvdyh3aW5kb3dfMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBXaW5kb3dUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICB2YXIgd2luZG93cyA9IHRoaXMud2luZG93cztcbiAgICAgICAgd2hpbGUgKHdpbmRvd3MubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgd2luZG93cy5zaGlmdCgpLmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlcnIpO1xuICAgIH07XG4gICAgV2luZG93VGltZVN1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdpbmRvd3MgPSB0aGlzLndpbmRvd3M7XG4gICAgICAgIHdoaWxlICh3aW5kb3dzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciB3aW5kb3dfMiA9IHdpbmRvd3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGlmICghd2luZG93XzIuY2xvc2VkKSB7XG4gICAgICAgICAgICAgICAgd2luZG93XzIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfTtcbiAgICBXaW5kb3dUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUub3BlbldpbmRvdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdpbmRvdyA9IG5ldyBDb3VudGVkU3ViamVjdCgpO1xuICAgICAgICB0aGlzLndpbmRvd3MucHVzaCh3aW5kb3cpO1xuICAgICAgICB2YXIgZGVzdGluYXRpb24gPSB0aGlzLmRlc3RpbmF0aW9uO1xuICAgICAgICBkZXN0aW5hdGlvbi5uZXh0KHdpbmRvdyk7XG4gICAgICAgIHJldHVybiB3aW5kb3c7XG4gICAgfTtcbiAgICBXaW5kb3dUaW1lU3Vic2NyaWJlci5wcm90b3R5cGUuY2xvc2VXaW5kb3cgPSBmdW5jdGlvbiAod2luZG93KSB7XG4gICAgICAgIHdpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICB2YXIgd2luZG93cyA9IHRoaXMud2luZG93cztcbiAgICAgICAgd2luZG93cy5zcGxpY2Uod2luZG93cy5pbmRleE9mKHdpbmRvdyksIDEpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd1RpbWVTdWJzY3JpYmVyO1xufShTdWJzY3JpYmVyKSk7XG5mdW5jdGlvbiBkaXNwYXRjaFdpbmRvd1RpbWVTcGFuT25seShzdGF0ZSkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgd2luZG93VGltZVNwYW4gPSBzdGF0ZS53aW5kb3dUaW1lU3Bhbiwgd2luZG93ID0gc3RhdGUud2luZG93O1xuICAgIGlmICh3aW5kb3cpIHtcbiAgICAgICAgc3Vic2NyaWJlci5jbG9zZVdpbmRvdyh3aW5kb3cpO1xuICAgIH1cbiAgICBzdGF0ZS53aW5kb3cgPSBzdWJzY3JpYmVyLm9wZW5XaW5kb3coKTtcbiAgICB0aGlzLnNjaGVkdWxlKHN0YXRlLCB3aW5kb3dUaW1lU3Bhbik7XG59XG5mdW5jdGlvbiBkaXNwYXRjaFdpbmRvd0NyZWF0aW9uKHN0YXRlKSB7XG4gICAgdmFyIHdpbmRvd1RpbWVTcGFuID0gc3RhdGUud2luZG93VGltZVNwYW4sIHN1YnNjcmliZXIgPSBzdGF0ZS5zdWJzY3JpYmVyLCBzY2hlZHVsZXIgPSBzdGF0ZS5zY2hlZHVsZXIsIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwgPSBzdGF0ZS53aW5kb3dDcmVhdGlvbkludGVydmFsO1xuICAgIHZhciB3aW5kb3cgPSBzdWJzY3JpYmVyLm9wZW5XaW5kb3coKTtcbiAgICB2YXIgYWN0aW9uID0gdGhpcztcbiAgICB2YXIgY29udGV4dCA9IHsgYWN0aW9uOiBhY3Rpb24sIHN1YnNjcmlwdGlvbjogbnVsbCB9O1xuICAgIHZhciB0aW1lU3BhblN0YXRlID0geyBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyLCB3aW5kb3c6IHdpbmRvdywgY29udGV4dDogY29udGV4dCB9O1xuICAgIGNvbnRleHQuc3Vic2NyaXB0aW9uID0gc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoV2luZG93Q2xvc2UsIHdpbmRvd1RpbWVTcGFuLCB0aW1lU3BhblN0YXRlKTtcbiAgICBhY3Rpb24uYWRkKGNvbnRleHQuc3Vic2NyaXB0aW9uKTtcbiAgICBhY3Rpb24uc2NoZWR1bGUoc3RhdGUsIHdpbmRvd0NyZWF0aW9uSW50ZXJ2YWwpO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hXaW5kb3dDbG9zZShzdGF0ZSkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgd2luZG93ID0gc3RhdGUud2luZG93LCBjb250ZXh0ID0gc3RhdGUuY29udGV4dDtcbiAgICBpZiAoY29udGV4dCAmJiBjb250ZXh0LmFjdGlvbiAmJiBjb250ZXh0LnN1YnNjcmlwdGlvbikge1xuICAgICAgICBjb250ZXh0LmFjdGlvbi5yZW1vdmUoY29udGV4dC5zdWJzY3JpcHRpb24pO1xuICAgIH1cbiAgICBzdWJzY3JpYmVyLmNsb3NlV2luZG93KHdpbmRvdyk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD13aW5kb3dUaW1lLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfU3Vic2NyaXB0aW9uLF9PdXRlclN1YnNjcmliZXIsX3V0aWxfc3Vic2NyaWJlVG9SZXN1bHQgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICcuLi9TdWJqZWN0JztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5pbXBvcnQgeyBPdXRlclN1YnNjcmliZXIgfSBmcm9tICcuLi9PdXRlclN1YnNjcmliZXInO1xuaW1wb3J0IHsgc3Vic2NyaWJlVG9SZXN1bHQgfSBmcm9tICcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0JztcbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dUb2dnbGUob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoc291cmNlKSB7IHJldHVybiBzb3VyY2UubGlmdChuZXcgV2luZG93VG9nZ2xlT3BlcmF0b3Iob3BlbmluZ3MsIGNsb3NpbmdTZWxlY3RvcikpOyB9O1xufVxudmFyIFdpbmRvd1RvZ2dsZU9wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFdpbmRvd1RvZ2dsZU9wZXJhdG9yKG9wZW5pbmdzLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5vcGVuaW5ncyA9IG9wZW5pbmdzO1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICB9XG4gICAgV2luZG93VG9nZ2xlT3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBXaW5kb3dUb2dnbGVTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMub3BlbmluZ3MsIHRoaXMuY2xvc2luZ1NlbGVjdG9yKSk7XG4gICAgfTtcbiAgICByZXR1cm4gV2luZG93VG9nZ2xlT3BlcmF0b3I7XG59KCkpO1xudmFyIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoV2luZG93VG9nZ2xlU3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBXaW5kb3dUb2dnbGVTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBvcGVuaW5ncywgY2xvc2luZ1NlbGVjdG9yKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGRlc3RpbmF0aW9uKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5vcGVuaW5ncyA9IG9wZW5pbmdzO1xuICAgICAgICBfdGhpcy5jbG9zaW5nU2VsZWN0b3IgPSBjbG9zaW5nU2VsZWN0b3I7XG4gICAgICAgIF90aGlzLmNvbnRleHRzID0gW107XG4gICAgICAgIF90aGlzLmFkZChfdGhpcy5vcGVuU3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlVG9SZXN1bHQoX3RoaXMsIG9wZW5pbmdzLCBvcGVuaW5ncykpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHZhciBjb250ZXh0cyA9IHRoaXMuY29udGV4dHM7XG4gICAgICAgIGlmIChjb250ZXh0cykge1xuICAgICAgICAgICAgdmFyIGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb250ZXh0c1tpXS53aW5kb3cubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgdmFyIGNvbnRleHRzID0gdGhpcy5jb250ZXh0cztcbiAgICAgICAgdGhpcy5jb250ZXh0cyA9IG51bGw7XG4gICAgICAgIGlmIChjb250ZXh0cykge1xuICAgICAgICAgICAgdmFyIGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IC0xO1xuICAgICAgICAgICAgd2hpbGUgKCsraW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgICAgICB2YXIgY29udGV4dF8xID0gY29udGV4dHNbaW5kZXhdO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMS53aW5kb3cuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICBjb250ZXh0XzEuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgX3N1cGVyLnByb3RvdHlwZS5fZXJyb3IuY2FsbCh0aGlzLCBlcnIpO1xuICAgIH07XG4gICAgV2luZG93VG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB0aGlzLmNvbnRleHRzID0gbnVsbDtcbiAgICAgICAgaWYgKGNvbnRleHRzKSB7XG4gICAgICAgICAgICB2YXIgbGVuID0gY29udGV4dHMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbikge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0XzIgPSBjb250ZXh0c1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29udGV4dF8yLndpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMi5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBfc3VwZXIucHJvdG90eXBlLl9jb21wbGV0ZS5jYWxsKHRoaXMpO1xuICAgIH07XG4gICAgV2luZG93VG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUuX3Vuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB0aGlzLmNvbnRleHRzID0gbnVsbDtcbiAgICAgICAgaWYgKGNvbnRleHRzKSB7XG4gICAgICAgICAgICB2YXIgbGVuID0gY29udGV4dHMubGVuZ3RoO1xuICAgICAgICAgICAgdmFyIGluZGV4ID0gLTE7XG4gICAgICAgICAgICB3aGlsZSAoKytpbmRleCA8IGxlbikge1xuICAgICAgICAgICAgICAgIHZhciBjb250ZXh0XzMgPSBjb250ZXh0c1tpbmRleF07XG4gICAgICAgICAgICAgICAgY29udGV4dF8zLndpbmRvdy51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIGNvbnRleHRfMy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgV2luZG93VG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5TmV4dCA9IGZ1bmN0aW9uIChvdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4LCBpbm5lckluZGV4LCBpbm5lclN1Yikge1xuICAgICAgICBpZiAob3V0ZXJWYWx1ZSA9PT0gdGhpcy5vcGVuaW5ncykge1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdOb3RpZmllciA9IHZvaWQgMDtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgdmFyIGNsb3NpbmdTZWxlY3RvciA9IHRoaXMuY2xvc2luZ1NlbGVjdG9yO1xuICAgICAgICAgICAgICAgIGNsb3NpbmdOb3RpZmllciA9IGNsb3NpbmdTZWxlY3Rvcihpbm5lclZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXJyb3IoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgd2luZG93XzEgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHZhciBjb250ZXh0XzQgPSB7IHdpbmRvdzogd2luZG93XzEsIHN1YnNjcmlwdGlvbjogc3Vic2NyaXB0aW9uIH07XG4gICAgICAgICAgICB0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dF80KTtcbiAgICAgICAgICAgIHZhciBpbm5lclN1YnNjcmlwdGlvbiA9IHN1YnNjcmliZVRvUmVzdWx0KHRoaXMsIGNsb3NpbmdOb3RpZmllciwgY29udGV4dF80KTtcbiAgICAgICAgICAgIGlmIChpbm5lclN1YnNjcmlwdGlvbi5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlV2luZG93KHRoaXMuY29udGV4dHMubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbm5lclN1YnNjcmlwdGlvbi5jb250ZXh0ID0gY29udGV4dF80O1xuICAgICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoaW5uZXJTdWJzY3JpcHRpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHdpbmRvd18xKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VXaW5kb3codGhpcy5jb250ZXh0cy5pbmRleE9mKG91dGVyVmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgV2luZG93VG9nZ2xlU3Vic2NyaWJlci5wcm90b3R5cGUubm90aWZ5RXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMuZXJyb3IoZXJyKTtcbiAgICB9O1xuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKGlubmVyKSB7XG4gICAgICAgIGlmIChpbm5lciAhPT0gdGhpcy5vcGVuU3Vic2NyaXB0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlV2luZG93KHRoaXMuY29udGV4dHMuaW5kZXhPZihpbm5lci5jb250ZXh0KSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXIucHJvdG90eXBlLmNsb3NlV2luZG93ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29udGV4dHMgPSB0aGlzLmNvbnRleHRzO1xuICAgICAgICB2YXIgY29udGV4dCA9IGNvbnRleHRzW2luZGV4XTtcbiAgICAgICAgdmFyIHdpbmRvdyA9IGNvbnRleHQud2luZG93LCBzdWJzY3JpcHRpb24gPSBjb250ZXh0LnN1YnNjcmlwdGlvbjtcbiAgICAgICAgY29udGV4dHMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgd2luZG93LmNvbXBsZXRlKCk7XG4gICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH07XG4gICAgcmV0dXJuIFdpbmRvd1RvZ2dsZVN1YnNjcmliZXI7XG59KE91dGVyU3Vic2NyaWJlcikpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2luZG93VG9nZ2xlLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfU3ViamVjdCxfT3V0ZXJTdWJzY3JpYmVyLF91dGlsX3N1YnNjcmliZVRvUmVzdWx0IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAnLi4vU3ViamVjdCc7XG5pbXBvcnQgeyBPdXRlclN1YnNjcmliZXIgfSBmcm9tICcuLi9PdXRlclN1YnNjcmliZXInO1xuaW1wb3J0IHsgc3Vic2NyaWJlVG9SZXN1bHQgfSBmcm9tICcuLi91dGlsL3N1YnNjcmliZVRvUmVzdWx0JztcbmV4cG9ydCBmdW5jdGlvbiB3aW5kb3dXaGVuKGNsb3NpbmdTZWxlY3Rvcikge1xuICAgIHJldHVybiBmdW5jdGlvbiB3aW5kb3dXaGVuT3BlcmF0b3JGdW5jdGlvbihzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5saWZ0KG5ldyBXaW5kb3dPcGVyYXRvcihjbG9zaW5nU2VsZWN0b3IpKTtcbiAgICB9O1xufVxudmFyIFdpbmRvd09wZXJhdG9yID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFdpbmRvd09wZXJhdG9yKGNsb3NpbmdTZWxlY3Rvcikge1xuICAgICAgICB0aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICB9XG4gICAgV2luZG93T3BlcmF0b3IucHJvdG90eXBlLmNhbGwgPSBmdW5jdGlvbiAoc3Vic2NyaWJlciwgc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2Uuc3Vic2NyaWJlKG5ldyBXaW5kb3dTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHRoaXMuY2xvc2luZ1NlbGVjdG9yKSk7XG4gICAgfTtcbiAgICByZXR1cm4gV2luZG93T3BlcmF0b3I7XG59KCkpO1xudmFyIFdpbmRvd1N1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoV2luZG93U3Vic2NyaWJlciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBXaW5kb3dTdWJzY3JpYmVyKGRlc3RpbmF0aW9uLCBjbG9zaW5nU2VsZWN0b3IpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247XG4gICAgICAgIF90aGlzLmNsb3NpbmdTZWxlY3RvciA9IGNsb3NpbmdTZWxlY3RvcjtcbiAgICAgICAgX3RoaXMub3BlbldpbmRvdygpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeU5leHQgPSBmdW5jdGlvbiAoX291dGVyVmFsdWUsIF9pbm5lclZhbHVlLCBfb3V0ZXJJbmRleCwgX2lubmVySW5kZXgsIGlubmVyU3ViKSB7XG4gICAgICAgIHRoaXMub3BlbldpbmRvdyhpbm5lclN1Yik7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlFcnJvciA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICB0aGlzLl9lcnJvcihlcnJvcik7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlDb21wbGV0ZSA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICB0aGlzLm9wZW5XaW5kb3coaW5uZXJTdWIpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdGhpcy53aW5kb3cubmV4dCh2YWx1ZSk7XG4gICAgfTtcbiAgICBXaW5kb3dTdWJzY3JpYmVyLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIHRoaXMud2luZG93LmVycm9yKGVycik7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZUNsb3NpbmdOb3RpZmljYXRpb24oKTtcbiAgICB9O1xuICAgIFdpbmRvd1N1YnNjcmliZXIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy53aW5kb3cuY29tcGxldGUoKTtcbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlQ2xvc2luZ05vdGlmaWNhdGlvbigpO1xuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUudW5zdWJzY3JpYmVDbG9zaW5nTm90aWZpY2F0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5jbG9zaW5nTm90aWZpY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NpbmdOb3RpZmljYXRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgV2luZG93U3Vic2NyaWJlci5wcm90b3R5cGUub3BlbldpbmRvdyA9IGZ1bmN0aW9uIChpbm5lclN1Yikge1xuICAgICAgICBpZiAoaW5uZXJTdWIgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgaW5uZXJTdWIgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbm5lclN1Yikge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoaW5uZXJTdWIpO1xuICAgICAgICAgICAgaW5uZXJTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcHJldldpbmRvdyA9IHRoaXMud2luZG93O1xuICAgICAgICBpZiAocHJldldpbmRvdykge1xuICAgICAgICAgICAgcHJldldpbmRvdy5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3aW5kb3cgPSB0aGlzLndpbmRvdyA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh3aW5kb3cpO1xuICAgICAgICB2YXIgY2xvc2luZ05vdGlmaWVyO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIGNsb3NpbmdTZWxlY3RvciA9IHRoaXMuY2xvc2luZ1NlbGVjdG9yO1xuICAgICAgICAgICAgY2xvc2luZ05vdGlmaWVyID0gY2xvc2luZ1NlbGVjdG9yKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgICAgICAgICB0aGlzLndpbmRvdy5lcnJvcihlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZCh0aGlzLmNsb3NpbmdOb3RpZmljYXRpb24gPSBzdWJzY3JpYmVUb1Jlc3VsdCh0aGlzLCBjbG9zaW5nTm90aWZpZXIpKTtcbiAgICB9O1xuICAgIHJldHVybiBXaW5kb3dTdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpbmRvd1doZW4uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9PdXRlclN1YnNjcmliZXIsX3V0aWxfc3Vic2NyaWJlVG9SZXN1bHQgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IE91dGVyU3Vic2NyaWJlciB9IGZyb20gJy4uL091dGVyU3Vic2NyaWJlcic7XG5pbXBvcnQgeyBzdWJzY3JpYmVUb1Jlc3VsdCB9IGZyb20gJy4uL3V0aWwvc3Vic2NyaWJlVG9SZXN1bHQnO1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhMYXRlc3RGcm9tKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgICB2YXIgcHJvamVjdDtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHByb2plY3QgPSBhcmdzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBvYnNlcnZhYmxlcyA9IGFyZ3M7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdChuZXcgV2l0aExhdGVzdEZyb21PcGVyYXRvcihvYnNlcnZhYmxlcywgcHJvamVjdCkpO1xuICAgIH07XG59XG52YXIgV2l0aExhdGVzdEZyb21PcGVyYXRvciA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBXaXRoTGF0ZXN0RnJvbU9wZXJhdG9yKG9ic2VydmFibGVzLCBwcm9qZWN0KSB7XG4gICAgICAgIHRoaXMub2JzZXJ2YWJsZXMgPSBvYnNlcnZhYmxlcztcbiAgICAgICAgdGhpcy5wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB9XG4gICAgV2l0aExhdGVzdEZyb21PcGVyYXRvci5wcm90b3R5cGUuY2FsbCA9IGZ1bmN0aW9uIChzdWJzY3JpYmVyLCBzb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUobmV3IFdpdGhMYXRlc3RGcm9tU3Vic2NyaWJlcihzdWJzY3JpYmVyLCB0aGlzLm9ic2VydmFibGVzLCB0aGlzLnByb2plY3QpKTtcbiAgICB9O1xuICAgIHJldHVybiBXaXRoTGF0ZXN0RnJvbU9wZXJhdG9yO1xufSgpKTtcbnZhciBXaXRoTGF0ZXN0RnJvbVN1YnNjcmliZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoV2l0aExhdGVzdEZyb21TdWJzY3JpYmVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFdpdGhMYXRlc3RGcm9tU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb2JzZXJ2YWJsZXMsIHByb2plY3QpIHtcbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm9ic2VydmFibGVzID0gb2JzZXJ2YWJsZXM7XG4gICAgICAgIF90aGlzLnByb2plY3QgPSBwcm9qZWN0O1xuICAgICAgICBfdGhpcy50b1Jlc3BvbmQgPSBbXTtcbiAgICAgICAgdmFyIGxlbiA9IG9ic2VydmFibGVzLmxlbmd0aDtcbiAgICAgICAgX3RoaXMudmFsdWVzID0gbmV3IEFycmF5KGxlbik7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIF90aGlzLnRvUmVzcG9uZC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBvYnNlcnZhYmxlID0gb2JzZXJ2YWJsZXNbaV07XG4gICAgICAgICAgICBfdGhpcy5hZGQoc3Vic2NyaWJlVG9SZXN1bHQoX3RoaXMsIG9ic2VydmFibGUsIHVuZGVmaW5lZCwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgV2l0aExhdGVzdEZyb21TdWJzY3JpYmVyLnByb3RvdHlwZS5ub3RpZnlOZXh0ID0gZnVuY3Rpb24gKF9vdXRlclZhbHVlLCBpbm5lclZhbHVlLCBvdXRlckluZGV4KSB7XG4gICAgICAgIHRoaXMudmFsdWVzW291dGVySW5kZXhdID0gaW5uZXJWYWx1ZTtcbiAgICAgICAgdmFyIHRvUmVzcG9uZCA9IHRoaXMudG9SZXNwb25kO1xuICAgICAgICBpZiAodG9SZXNwb25kLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHZhciBmb3VuZCA9IHRvUmVzcG9uZC5pbmRleE9mKG91dGVySW5kZXgpO1xuICAgICAgICAgICAgaWYgKGZvdW5kICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRvUmVzcG9uZC5zcGxpY2UoZm91bmQsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBXaXRoTGF0ZXN0RnJvbVN1YnNjcmliZXIucHJvdG90eXBlLm5vdGlmeUNvbXBsZXRlID0gZnVuY3Rpb24gKCkge1xuICAgIH07XG4gICAgV2l0aExhdGVzdEZyb21TdWJzY3JpYmVyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy50b1Jlc3BvbmQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2YXIgYXJncyA9IFt2YWx1ZV0uY29uY2F0KHRoaXMudmFsdWVzKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByb2plY3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90cnlQcm9qZWN0KGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGFyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBXaXRoTGF0ZXN0RnJvbVN1YnNjcmliZXIucHJvdG90eXBlLl90cnlQcm9qZWN0ID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgdmFyIHJlc3VsdDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMucHJvamVjdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KHJlc3VsdCk7XG4gICAgfTtcbiAgICByZXR1cm4gV2l0aExhdGVzdEZyb21TdWJzY3JpYmVyO1xufShPdXRlclN1YnNjcmliZXIpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdpdGhMYXRlc3RGcm9tLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfb2JzZXJ2YWJsZV96aXAgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgemlwIGFzIHppcFN0YXRpYyB9IGZyb20gJy4uL29ic2VydmFibGUvemlwJztcbmV4cG9ydCBmdW5jdGlvbiB6aXAoKSB7XG4gICAgdmFyIG9ic2VydmFibGVzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgb2JzZXJ2YWJsZXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHppcE9wZXJhdG9yRnVuY3Rpb24oc291cmNlKSB7XG4gICAgICAgIHJldHVybiBzb3VyY2UubGlmdC5jYWxsKHppcFN0YXRpYy5hcHBseSh2b2lkIDAsIFtzb3VyY2VdLmNvbmNhdChvYnNlcnZhYmxlcykpKTtcbiAgICB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9emlwLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfb2JzZXJ2YWJsZV96aXAgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgWmlwT3BlcmF0b3IgfSBmcm9tICcuLi9vYnNlcnZhYmxlL3ppcCc7XG5leHBvcnQgZnVuY3Rpb24gemlwQWxsKHByb2plY3QpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmxpZnQobmV3IFppcE9wZXJhdG9yKHByb2plY3QpKTsgfTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXppcEFsbC5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgdHNsaWIsX0FzeW5jQWN0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCAqIGFzIHRzbGliXzEgZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyBBc3luY0FjdGlvbiB9IGZyb20gJy4vQXN5bmNBY3Rpb24nO1xudmFyIEFuaW1hdGlvbkZyYW1lQWN0aW9uID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKEFuaW1hdGlvbkZyYW1lQWN0aW9uLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEFuaW1hdGlvbkZyYW1lQWN0aW9uKHNjaGVkdWxlciwgd29yaykge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIHdvcmspIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjtcbiAgICAgICAgX3RoaXMud29yayA9IHdvcms7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24ucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5zY2hlZHVsZWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2NoZWR1bGVyLmZsdXNoKG51bGwpOyB9KSk7XG4gICAgfTtcbiAgICBBbmltYXRpb25GcmFtZUFjdGlvbi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKGRlbGF5ICE9PSBudWxsICYmIGRlbGF5ID4gMCkgfHwgKGRlbGF5ID09PSBudWxsICYmIHRoaXMuZGVsYXkgPiAwKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNjaGVkdWxlci5hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUoaWQpO1xuICAgICAgICAgICAgc2NoZWR1bGVyLnNjaGVkdWxlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH07XG4gICAgcmV0dXJuIEFuaW1hdGlvbkZyYW1lQWN0aW9uO1xufShBc3luY0FjdGlvbikpO1xuZXhwb3J0IHsgQW5pbWF0aW9uRnJhbWVBY3Rpb24gfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFuaW1hdGlvbkZyYW1lQWN0aW9uLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfQW5pbWF0aW9uRnJhbWVBY3Rpb24sX0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IEFuaW1hdGlvbkZyYW1lQWN0aW9uIH0gZnJvbSAnLi9BbmltYXRpb25GcmFtZUFjdGlvbic7XG5pbXBvcnQgeyBBbmltYXRpb25GcmFtZVNjaGVkdWxlciB9IGZyb20gJy4vQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXInO1xuZXhwb3J0IHZhciBhbmltYXRpb25GcmFtZVNjaGVkdWxlciA9IC8qQF9fUFVSRV9fKi8gbmV3IEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKEFuaW1hdGlvbkZyYW1lQWN0aW9uKTtcbmV4cG9ydCB2YXIgYW5pbWF0aW9uRnJhbWUgPSBhbmltYXRpb25GcmFtZVNjaGVkdWxlcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWFuaW1hdGlvbkZyYW1lLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCB0c2xpYixfQXN5bmNTY2hlZHVsZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jU2NoZWR1bGVyIH0gZnJvbSAnLi9Bc3luY1NjaGVkdWxlcic7XG52YXIgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24gKGFjdGlvbikge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc2NoZWR1bGVkID0gdW5kZWZpbmVkO1xuICAgICAgICB2YXIgYWN0aW9ucyA9IHRoaXMuYWN0aW9ucztcbiAgICAgICAgdmFyIGVycm9yO1xuICAgICAgICB2YXIgaW5kZXggPSAtMTtcbiAgICAgICAgdmFyIGNvdW50ID0gYWN0aW9ucy5sZW5ndGg7XG4gICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IHdoaWxlICgrK2luZGV4IDwgY291bnQgJiYgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlICgrK2luZGV4IDwgY291bnQgJiYgKGFjdGlvbiA9IGFjdGlvbnMuc2hpZnQoKSkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnQgeyBBbmltYXRpb25GcmFtZVNjaGVkdWxlciB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIHRzbGliLF9Bc3luY0FjdGlvbixfQXN5bmNTY2hlZHVsZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0ICogYXMgdHNsaWJfMSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IEFzeW5jQWN0aW9uIH0gZnJvbSAnLi9Bc3luY0FjdGlvbic7XG5pbXBvcnQgeyBBc3luY1NjaGVkdWxlciB9IGZyb20gJy4vQXN5bmNTY2hlZHVsZXInO1xudmFyIFZpcnR1YWxUaW1lU2NoZWR1bGVyID0gLypAX19QVVJFX18qLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIHRzbGliXzEuX19leHRlbmRzKFZpcnR1YWxUaW1lU2NoZWR1bGVyLCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyKFNjaGVkdWxlckFjdGlvbiwgbWF4RnJhbWVzKSB7XG4gICAgICAgIGlmIChTY2hlZHVsZXJBY3Rpb24gPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgU2NoZWR1bGVyQWN0aW9uID0gVmlydHVhbEFjdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4RnJhbWVzID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIG1heEZyYW1lcyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmZyYW1lOyB9KSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5tYXhGcmFtZXMgPSBtYXhGcmFtZXM7XG4gICAgICAgIF90aGlzLmZyYW1lID0gMDtcbiAgICAgICAgX3RoaXMuaW5kZXggPSAtMTtcbiAgICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cbiAgICBWaXJ0dWFsVGltZVNjaGVkdWxlci5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIGFjdGlvbnMgPSBfYS5hY3Rpb25zLCBtYXhGcmFtZXMgPSBfYS5tYXhGcmFtZXM7XG4gICAgICAgIHZhciBlcnJvciwgYWN0aW9uO1xuICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5kZWxheSA8PSBtYXhGcmFtZXMpIHtcbiAgICAgICAgICAgIGFjdGlvbnMuc2hpZnQoKTtcbiAgICAgICAgICAgIHRoaXMuZnJhbWUgPSBhY3Rpb24uZGVsYXk7XG4gICAgICAgICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBWaXJ0dWFsVGltZVNjaGVkdWxlci5mcmFtZVRpbWVGYWN0b3IgPSAxMDtcbiAgICByZXR1cm4gVmlydHVhbFRpbWVTY2hlZHVsZXI7XG59KEFzeW5jU2NoZWR1bGVyKSk7XG5leHBvcnQgeyBWaXJ0dWFsVGltZVNjaGVkdWxlciB9O1xudmFyIFZpcnR1YWxBY3Rpb24gPSAvKkBfX1BVUkVfXyovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgdHNsaWJfMS5fX2V4dGVuZHMoVmlydHVhbEFjdGlvbiwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBWaXJ0dWFsQWN0aW9uKHNjaGVkdWxlciwgd29yaywgaW5kZXgpIHtcbiAgICAgICAgaWYgKGluZGV4ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGluZGV4ID0gc2NoZWR1bGVyLmluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7XG4gICAgICAgIF90aGlzLndvcmsgPSB3b3JrO1xuICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlO1xuICAgICAgICBfdGhpcy5pbmRleCA9IHNjaGVkdWxlci5pbmRleCA9IGluZGV4O1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAoZGVsYXkgPT09IHZvaWQgMCkge1xuICAgICAgICAgICAgZGVsYXkgPSAwO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5pZCkge1xuICAgICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuc2NoZWR1bGUuY2FsbCh0aGlzLCBzdGF0ZSwgZGVsYXkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIHZhciBhY3Rpb24gPSBuZXcgVmlydHVhbEFjdGlvbih0aGlzLnNjaGVkdWxlciwgdGhpcy53b3JrKTtcbiAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTtcbiAgICAgICAgcmV0dXJuIGFjdGlvbi5zY2hlZHVsZShzdGF0ZSwgZGVsYXkpO1xuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbiAoc2NoZWR1bGVyLCBpZCwgZGVsYXkpIHtcbiAgICAgICAgaWYgKGRlbGF5ID09PSB2b2lkIDApIHtcbiAgICAgICAgICAgIGRlbGF5ID0gMDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRlbGF5ID0gc2NoZWR1bGVyLmZyYW1lICsgZGVsYXk7XG4gICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7XG4gICAgICAgIGFjdGlvbnMucHVzaCh0aGlzKTtcbiAgICAgICAgYWN0aW9ucy5zb3J0KFZpcnR1YWxBY3Rpb24uc29ydEFjdGlvbnMpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24gKHNjaGVkdWxlciwgaWQsIGRlbGF5KSB7XG4gICAgICAgIGlmIChkZWxheSA9PT0gdm9pZCAwKSB7XG4gICAgICAgICAgICBkZWxheSA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9O1xuICAgIFZpcnR1YWxBY3Rpb24ucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24gKHN0YXRlLCBkZWxheSkge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl9leGVjdXRlLmNhbGwodGhpcywgc3RhdGUsIGRlbGF5KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVmlydHVhbEFjdGlvbi5zb3J0QWN0aW9ucyA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIGlmIChhLmRlbGF5ID09PSBiLmRlbGF5KSB7XG4gICAgICAgICAgICBpZiAoYS5pbmRleCA9PT0gYi5pbmRleCkge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYS5pbmRleCA+IGIuaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhLmRlbGF5ID4gYi5kZWxheSkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBWaXJ0dWFsQWN0aW9uO1xufShBc3luY0FjdGlvbikpO1xuZXhwb3J0IHsgVmlydHVhbEFjdGlvbiB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9VmlydHVhbFRpbWVTY2hlZHVsZXIuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiBpc09ic2VydmFibGUob2JqKSB7XG4gICAgcmV0dXJuICEhb2JqICYmIChvYmogaW5zdGFuY2VvZiBPYnNlcnZhYmxlIHx8ICh0eXBlb2Ygb2JqLmxpZnQgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWlzT2JzZXJ2YWJsZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX0FzeW5jU3ViamVjdCxfb3BlcmF0b3JzX21hcCxfdXRpbF9jYW5SZXBvcnRFcnJvcixfdXRpbF9pc0FycmF5LF91dGlsX2lzU2NoZWR1bGVyIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEFzeW5jU3ViamVjdCB9IGZyb20gJy4uL0FzeW5jU3ViamVjdCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuLi9vcGVyYXRvcnMvbWFwJztcbmltcG9ydCB7IGNhblJlcG9ydEVycm9yIH0gZnJvbSAnLi4vdXRpbC9jYW5SZXBvcnRFcnJvcic7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5JztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5leHBvcnQgZnVuY3Rpb24gYmluZENhbGxiYWNrKGNhbGxiYWNrRnVuYywgcmVzdWx0U2VsZWN0b3IsIHNjaGVkdWxlcikge1xuICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICBpZiAoaXNTY2hlZHVsZXIocmVzdWx0U2VsZWN0b3IpKSB7XG4gICAgICAgICAgICBzY2hlZHVsZXIgPSByZXN1bHRTZWxlY3RvcjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiaW5kQ2FsbGJhY2soY2FsbGJhY2tGdW5jLCBzY2hlZHVsZXIpLmFwcGx5KHZvaWQgMCwgYXJncykucGlwZShtYXAoZnVuY3Rpb24gKGFyZ3MpIHsgcmV0dXJuIGlzQXJyYXkoYXJncykgPyByZXN1bHRTZWxlY3Rvci5hcHBseSh2b2lkIDAsIGFyZ3MpIDogcmVzdWx0U2VsZWN0b3IoYXJncyk7IH0pKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29udGV4dCA9IHRoaXM7XG4gICAgICAgIHZhciBzdWJqZWN0O1xuICAgICAgICB2YXIgcGFyYW1zID0ge1xuICAgICAgICAgICAgY29udGV4dDogY29udGV4dCxcbiAgICAgICAgICAgIHN1YmplY3Q6IHN1YmplY3QsXG4gICAgICAgICAgICBjYWxsYmFja0Z1bmM6IGNhbGxiYWNrRnVuYyxcbiAgICAgICAgICAgIHNjaGVkdWxlcjogc2NoZWR1bGVyLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIGlmICghc2NoZWR1bGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QgPSBuZXcgQXN5bmNTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QubmV4dChpbm5lckFyZ3MubGVuZ3RoIDw9IDEgPyBpbm5lckFyZ3NbMF0gOiBpbm5lckFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tGdW5jLmFwcGx5KGNvbnRleHQsIGFyZ3MuY29uY2F0KFtoYW5kbGVyXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5SZXBvcnRFcnJvcihzdWJqZWN0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWJqZWN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgICAgICAgICAgICAgICAgYXJnczogYXJncywgc3Vic2NyaWJlcjogc3Vic2NyaWJlciwgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoLCAwLCBzdGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG59XG5mdW5jdGlvbiBkaXNwYXRjaChzdGF0ZSkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBhcmdzID0gc3RhdGUuYXJncywgc3Vic2NyaWJlciA9IHN0YXRlLnN1YnNjcmliZXIsIHBhcmFtcyA9IHN0YXRlLnBhcmFtcztcbiAgICB2YXIgY2FsbGJhY2tGdW5jID0gcGFyYW1zLmNhbGxiYWNrRnVuYywgY29udGV4dCA9IHBhcmFtcy5jb250ZXh0LCBzY2hlZHVsZXIgPSBwYXJhbXMuc2NoZWR1bGVyO1xuICAgIHZhciBzdWJqZWN0ID0gcGFyYW1zLnN1YmplY3Q7XG4gICAgaWYgKCFzdWJqZWN0KSB7XG4gICAgICAgIHN1YmplY3QgPSBwYXJhbXMuc3ViamVjdCA9IG5ldyBBc3luY1N1YmplY3QoKTtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgaW5uZXJBcmdzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgICAgIGlubmVyQXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5uZXJBcmdzLmxlbmd0aCA8PSAxID8gaW5uZXJBcmdzWzBdIDogaW5uZXJBcmdzO1xuICAgICAgICAgICAgX3RoaXMuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaE5leHQsIDAsIHsgdmFsdWU6IHZhbHVlLCBzdWJqZWN0OiBzdWJqZWN0IH0pKTtcbiAgICAgICAgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNhbGxiYWNrRnVuYy5hcHBseShjb250ZXh0LCBhcmdzLmNvbmNhdChbaGFuZGxlcl0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGQoc3ViamVjdC5zdWJzY3JpYmUoc3Vic2NyaWJlcikpO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hOZXh0KHN0YXRlKSB7XG4gICAgdmFyIHZhbHVlID0gc3RhdGUudmFsdWUsIHN1YmplY3QgPSBzdGF0ZS5zdWJqZWN0O1xuICAgIHN1YmplY3QubmV4dCh2YWx1ZSk7XG4gICAgc3ViamVjdC5jb21wbGV0ZSgpO1xufVxuZnVuY3Rpb24gZGlzcGF0Y2hFcnJvcihzdGF0ZSkge1xuICAgIHZhciBlcnIgPSBzdGF0ZS5lcnIsIHN1YmplY3QgPSBzdGF0ZS5zdWJqZWN0O1xuICAgIHN1YmplY3QuZXJyb3IoZXJyKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJpbmRDYWxsYmFjay5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX0FzeW5jU3ViamVjdCxfb3BlcmF0b3JzX21hcCxfdXRpbF9jYW5SZXBvcnRFcnJvcixfdXRpbF9pc1NjaGVkdWxlcixfdXRpbF9pc0FycmF5IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IEFzeW5jU3ViamVjdCB9IGZyb20gJy4uL0FzeW5jU3ViamVjdCc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuLi9vcGVyYXRvcnMvbWFwJztcbmltcG9ydCB7IGNhblJlcG9ydEVycm9yIH0gZnJvbSAnLi4vdXRpbC9jYW5SZXBvcnRFcnJvcic7XG5pbXBvcnQgeyBpc1NjaGVkdWxlciB9IGZyb20gJy4uL3V0aWwvaXNTY2hlZHVsZXInO1xuaW1wb3J0IHsgaXNBcnJheSB9IGZyb20gJy4uL3V0aWwvaXNBcnJheSc7XG5leHBvcnQgZnVuY3Rpb24gYmluZE5vZGVDYWxsYmFjayhjYWxsYmFja0Z1bmMsIHJlc3VsdFNlbGVjdG9yLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAocmVzdWx0U2VsZWN0b3IpIHtcbiAgICAgICAgaWYgKGlzU2NoZWR1bGVyKHJlc3VsdFNlbGVjdG9yKSkge1xuICAgICAgICAgICAgc2NoZWR1bGVyID0gcmVzdWx0U2VsZWN0b3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmluZE5vZGVDYWxsYmFjayhjYWxsYmFja0Z1bmMsIHNjaGVkdWxlcikuYXBwbHkodm9pZCAwLCBhcmdzKS5waXBlKG1hcChmdW5jdGlvbiAoYXJncykgeyByZXR1cm4gaXNBcnJheShhcmdzKSA/IHJlc3VsdFNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgYXJncykgOiByZXN1bHRTZWxlY3RvcihhcmdzKTsgfSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwYXJhbXMgPSB7XG4gICAgICAgICAgICBzdWJqZWN0OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBhcmdzOiBhcmdzLFxuICAgICAgICAgICAgY2FsbGJhY2tGdW5jOiBjYWxsYmFja0Z1bmMsXG4gICAgICAgICAgICBzY2hlZHVsZXI6IHNjaGVkdWxlcixcbiAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIGNvbnRleHQgPSBwYXJhbXMuY29udGV4dDtcbiAgICAgICAgICAgIHZhciBzdWJqZWN0ID0gcGFyYW1zLnN1YmplY3Q7XG4gICAgICAgICAgICBpZiAoIXNjaGVkdWxlcikge1xuICAgICAgICAgICAgICAgIGlmICghc3ViamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0ID0gcGFyYW1zLnN1YmplY3QgPSBuZXcgQXN5bmNTdWJqZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbm5lckFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSBpbm5lckFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5uZXh0KGlubmVyQXJncy5sZW5ndGggPD0gMSA/IGlubmVyQXJnc1swXSA6IGlubmVyQXJncyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja0Z1bmMuYXBwbHkoY29udGV4dCwgYXJncy5jb25jYXQoW2hhbmRsZXJdKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNhblJlcG9ydEVycm9yKHN1YmplY3QpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViamVjdC5lcnJvcihlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaCwgMCwgeyBwYXJhbXM6IHBhcmFtcywgc3Vic2NyaWJlcjogc3Vic2NyaWJlciwgY29udGV4dDogY29udGV4dCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoKHN0YXRlKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgcGFyYW1zID0gc3RhdGUucGFyYW1zLCBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgY29udGV4dCA9IHN0YXRlLmNvbnRleHQ7XG4gICAgdmFyIGNhbGxiYWNrRnVuYyA9IHBhcmFtcy5jYWxsYmFja0Z1bmMsIGFyZ3MgPSBwYXJhbXMuYXJncywgc2NoZWR1bGVyID0gcGFyYW1zLnNjaGVkdWxlcjtcbiAgICB2YXIgc3ViamVjdCA9IHBhcmFtcy5zdWJqZWN0O1xuICAgIGlmICghc3ViamVjdCkge1xuICAgICAgICBzdWJqZWN0ID0gcGFyYW1zLnN1YmplY3QgPSBuZXcgQXN5bmNTdWJqZWN0KCk7XG4gICAgICAgIHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGlubmVyQXJncyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBpbm5lckFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBlcnIgPSBpbm5lckFyZ3Muc2hpZnQoKTtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoRXJyb3IsIDAsIHsgZXJyOiBlcnIsIHN1YmplY3Q6IHN1YmplY3QgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5uZXJBcmdzLmxlbmd0aCA8PSAxID8gaW5uZXJBcmdzWzBdIDogaW5uZXJBcmdzO1xuICAgICAgICAgICAgICAgIF90aGlzLmFkZChzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2hOZXh0LCAwLCB7IHZhbHVlOiB2YWx1ZSwgc3ViamVjdDogc3ViamVjdCB9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjYWxsYmFja0Z1bmMuYXBwbHkoY29udGV4dCwgYXJncy5jb25jYXQoW2hhbmRsZXJdKSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgdGhpcy5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoRXJyb3IsIDAsIHsgZXJyOiBlcnIsIHN1YmplY3Q6IHN1YmplY3QgfSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkKHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpKTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoTmV4dChhcmcpIHtcbiAgICB2YXIgdmFsdWUgPSBhcmcudmFsdWUsIHN1YmplY3QgPSBhcmcuc3ViamVjdDtcbiAgICBzdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIHN1YmplY3QuY29tcGxldGUoKTtcbn1cbmZ1bmN0aW9uIGRpc3BhdGNoRXJyb3IoYXJnKSB7XG4gICAgdmFyIGVyciA9IGFyZy5lcnIsIHN1YmplY3QgPSBhcmcuc3ViamVjdDtcbiAgICBzdWJqZWN0LmVycm9yKGVycik7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1iaW5kTm9kZUNhbGxiYWNrLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfT2JzZXJ2YWJsZSxfdXRpbF9pc0FycmF5LF9vcGVyYXRvcnNfbWFwLF91dGlsX2lzT2JqZWN0LF9mcm9tIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlsL2lzQXJyYXknO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi4vb3BlcmF0b3JzL21hcCc7XG5pbXBvcnQgeyBpc09iamVjdCB9IGZyb20gJy4uL3V0aWwvaXNPYmplY3QnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4vZnJvbSc7XG5leHBvcnQgZnVuY3Rpb24gZm9ya0pvaW4oKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIGlmIChzb3VyY2VzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICB2YXIgZmlyc3RfMSA9IHNvdXJjZXNbMF07XG4gICAgICAgIGlmIChpc0FycmF5KGZpcnN0XzEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ya0pvaW5JbnRlcm5hbChmaXJzdF8xLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNPYmplY3QoZmlyc3RfMSkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKGZpcnN0XzEpID09PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0XzEpO1xuICAgICAgICAgICAgcmV0dXJuIGZvcmtKb2luSW50ZXJuYWwoa2V5cy5tYXAoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gZmlyc3RfMVtrZXldOyB9KSwga2V5cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBzb3VyY2VzW3NvdXJjZXMubGVuZ3RoIC0gMV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIHJlc3VsdFNlbGVjdG9yXzEgPSBzb3VyY2VzLnBvcCgpO1xuICAgICAgICBzb3VyY2VzID0gKHNvdXJjZXMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkoc291cmNlc1swXSkpID8gc291cmNlc1swXSA6IHNvdXJjZXM7XG4gICAgICAgIHJldHVybiBmb3JrSm9pbkludGVybmFsKHNvdXJjZXMsIG51bGwpLnBpcGUobWFwKGZ1bmN0aW9uIChhcmdzKSB7IHJldHVybiByZXN1bHRTZWxlY3Rvcl8xLmFwcGx5KHZvaWQgMCwgYXJncyk7IH0pKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcmtKb2luSW50ZXJuYWwoc291cmNlcywgbnVsbCk7XG59XG5mdW5jdGlvbiBmb3JrSm9pbkludGVybmFsKHNvdXJjZXMsIGtleXMpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGxlbiA9IHNvdXJjZXMubGVuZ3RoO1xuICAgICAgICBpZiAobGVuID09PSAwKSB7XG4gICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHZhbHVlcyA9IG5ldyBBcnJheShsZW4pO1xuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgdmFyIGVtaXR0ZWQgPSAwO1xuICAgICAgICB2YXIgX2xvb3BfMSA9IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICB2YXIgc291cmNlID0gZnJvbShzb3VyY2VzW2ldKTtcbiAgICAgICAgICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5hZGQoc291cmNlLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtaXR0ZWQrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZXNbaV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyKSB7IHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7IH0sXG4gICAgICAgICAgICAgICAgY29tcGxldGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGVkKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV0ZWQgPT09IGxlbiB8fCAhaGFzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbWl0dGVkID09PSBsZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoa2V5cyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMucmVkdWNlKGZ1bmN0aW9uIChyZXN1bHQsIGtleSwgaSkgeyByZXR1cm4gKHJlc3VsdFtrZXldID0gdmFsdWVzW2ldLCByZXN1bHQpOyB9LCB7fSkgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9O1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBfbG9vcF8xKGkpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mb3JrSm9pbi5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX3V0aWxfaXNBcnJheSxfdXRpbF9pc0Z1bmN0aW9uLF9vcGVyYXRvcnNfbWFwIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICcuLi91dGlsL2lzQXJyYXknO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJy4uL3V0aWwvaXNGdW5jdGlvbic7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICcuLi9vcGVyYXRvcnMvbWFwJztcbnZhciB0b1N0cmluZyA9IC8qQF9fUFVSRV9fKi8gKGZ1bmN0aW9uICgpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7IH0pKCk7XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3Rvcikge1xuICAgIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdFNlbGVjdG9yID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgaWYgKHJlc3VsdFNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIG9wdGlvbnMpLnBpcGUobWFwKGZ1bmN0aW9uIChhcmdzKSB7IHJldHVybiBpc0FycmF5KGFyZ3MpID8gcmVzdWx0U2VsZWN0b3IuYXBwbHkodm9pZCAwLCBhcmdzKSA6IHJlc3VsdFNlbGVjdG9yKGFyZ3MpOyB9KSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICBmdW5jdGlvbiBoYW5kbGVyKGUpIHtcbiAgICAgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXR1cFN1YnNjcmlwdGlvbih0YXJnZXQsIGV2ZW50TmFtZSwgaGFuZGxlciwgc3Vic2NyaWJlciwgb3B0aW9ucyk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBzZXR1cFN1YnNjcmlwdGlvbihzb3VyY2VPYmosIGV2ZW50TmFtZSwgaGFuZGxlciwgc3Vic2NyaWJlciwgb3B0aW9ucykge1xuICAgIHZhciB1bnN1YnNjcmliZTtcbiAgICBpZiAoaXNFdmVudFRhcmdldChzb3VyY2VPYmopKSB7XG4gICAgICAgIHZhciBzb3VyY2VfMSA9IHNvdXJjZU9iajtcbiAgICAgICAgc291cmNlT2JqLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgdW5zdWJzY3JpYmUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBzb3VyY2VfMS5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7IH07XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIoc291cmNlT2JqKSkge1xuICAgICAgICB2YXIgc291cmNlXzIgPSBzb3VyY2VPYmo7XG4gICAgICAgIHNvdXJjZU9iai5vbihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICB1bnN1YnNjcmliZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNvdXJjZV8yLm9mZihldmVudE5hbWUsIGhhbmRsZXIpOyB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChpc05vZGVTdHlsZUV2ZW50RW1pdHRlcihzb3VyY2VPYmopKSB7XG4gICAgICAgIHZhciBzb3VyY2VfMyA9IHNvdXJjZU9iajtcbiAgICAgICAgc291cmNlT2JqLmFkZExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgIHVuc3Vic2NyaWJlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc291cmNlXzMucmVtb3ZlTGlzdGVuZXIoZXZlbnROYW1lLCBoYW5kbGVyKTsgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc291cmNlT2JqICYmIHNvdXJjZU9iai5sZW5ndGgpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNvdXJjZU9iai5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgc2V0dXBTdWJzY3JpcHRpb24oc291cmNlT2JqW2ldLCBldmVudE5hbWUsIGhhbmRsZXIsIHN1YnNjcmliZXIsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGV2ZW50IHRhcmdldCcpO1xuICAgIH1cbiAgICBzdWJzY3JpYmVyLmFkZCh1bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBpc05vZGVTdHlsZUV2ZW50RW1pdHRlcihzb3VyY2VPYmopIHtcbiAgICByZXR1cm4gc291cmNlT2JqICYmIHR5cGVvZiBzb3VyY2VPYmouYWRkTGlzdGVuZXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNvdXJjZU9iai5yZW1vdmVMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIoc291cmNlT2JqKSB7XG4gICAgcmV0dXJuIHNvdXJjZU9iaiAmJiB0eXBlb2Ygc291cmNlT2JqLm9uID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzb3VyY2VPYmoub2ZmID09PSAnZnVuY3Rpb24nO1xufVxuZnVuY3Rpb24gaXNFdmVudFRhcmdldChzb3VyY2VPYmopIHtcbiAgICByZXR1cm4gc291cmNlT2JqICYmIHR5cGVvZiBzb3VyY2VPYmouYWRkRXZlbnRMaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc291cmNlT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbic7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1mcm9tRXZlbnQuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlLF91dGlsX2lzQXJyYXksX3V0aWxfaXNGdW5jdGlvbixfb3BlcmF0b3JzX21hcCBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5JztcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICcuLi91dGlsL2lzRnVuY3Rpb24nO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnLi4vb3BlcmF0b3JzL21hcCc7XG5leHBvcnQgZnVuY3Rpb24gZnJvbUV2ZW50UGF0dGVybihhZGRIYW5kbGVyLCByZW1vdmVIYW5kbGVyLCByZXN1bHRTZWxlY3Rvcikge1xuICAgIGlmIChyZXN1bHRTZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gZnJvbUV2ZW50UGF0dGVybihhZGRIYW5kbGVyLCByZW1vdmVIYW5kbGVyKS5waXBlKG1hcChmdW5jdGlvbiAoYXJncykgeyByZXR1cm4gaXNBcnJheShhcmdzKSA/IHJlc3VsdFNlbGVjdG9yLmFwcGx5KHZvaWQgMCwgYXJncykgOiByZXN1bHRTZWxlY3RvcihhcmdzKTsgfSkpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgdmFyIGhhbmRsZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZSA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgICAgICBlW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KGUubGVuZ3RoID09PSAxID8gZVswXSA6IGUpO1xuICAgICAgICB9O1xuICAgICAgICB2YXIgcmV0VmFsdWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXRWYWx1ZSA9IGFkZEhhbmRsZXIoaGFuZGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRnVuY3Rpb24ocmVtb3ZlSGFuZGxlcikpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZUhhbmRsZXIoaGFuZGxlciwgcmV0VmFsdWUpOyB9O1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZnJvbUV2ZW50UGF0dGVybi5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX3V0aWxfaWRlbnRpdHksX3V0aWxfaXNTY2hlZHVsZXIgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgaWRlbnRpdHkgfSBmcm9tICcuLi91dGlsL2lkZW50aXR5JztcbmltcG9ydCB7IGlzU2NoZWR1bGVyIH0gZnJvbSAnLi4vdXRpbC9pc1NjaGVkdWxlcic7XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGUoaW5pdGlhbFN0YXRlT3JPcHRpb25zLCBjb25kaXRpb24sIGl0ZXJhdGUsIHJlc3VsdFNlbGVjdG9yT3JPYnNlcnZhYmxlLCBzY2hlZHVsZXIpIHtcbiAgICB2YXIgcmVzdWx0U2VsZWN0b3I7XG4gICAgdmFyIGluaXRpYWxTdGF0ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgIHZhciBvcHRpb25zID0gaW5pdGlhbFN0YXRlT3JPcHRpb25zO1xuICAgICAgICBpbml0aWFsU3RhdGUgPSBvcHRpb25zLmluaXRpYWxTdGF0ZTtcbiAgICAgICAgY29uZGl0aW9uID0gb3B0aW9ucy5jb25kaXRpb247XG4gICAgICAgIGl0ZXJhdGUgPSBvcHRpb25zLml0ZXJhdGU7XG4gICAgICAgIHJlc3VsdFNlbGVjdG9yID0gb3B0aW9ucy5yZXN1bHRTZWxlY3RvciB8fCBpZGVudGl0eTtcbiAgICAgICAgc2NoZWR1bGVyID0gb3B0aW9ucy5zY2hlZHVsZXI7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJlc3VsdFNlbGVjdG9yT3JPYnNlcnZhYmxlID09PSB1bmRlZmluZWQgfHwgaXNTY2hlZHVsZXIocmVzdWx0U2VsZWN0b3JPck9ic2VydmFibGUpKSB7XG4gICAgICAgIGluaXRpYWxTdGF0ZSA9IGluaXRpYWxTdGF0ZU9yT3B0aW9ucztcbiAgICAgICAgcmVzdWx0U2VsZWN0b3IgPSBpZGVudGl0eTtcbiAgICAgICAgc2NoZWR1bGVyID0gcmVzdWx0U2VsZWN0b3JPck9ic2VydmFibGU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdGUgPSBpbml0aWFsU3RhdGVPck9wdGlvbnM7XG4gICAgICAgIHJlc3VsdFNlbGVjdG9yID0gcmVzdWx0U2VsZWN0b3JPck9ic2VydmFibGU7XG4gICAgfVxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICB2YXIgc3RhdGUgPSBpbml0aWFsU3RhdGU7XG4gICAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2gsIDAsIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyLFxuICAgICAgICAgICAgICAgIGl0ZXJhdGU6IGl0ZXJhdGUsXG4gICAgICAgICAgICAgICAgY29uZGl0aW9uOiBjb25kaXRpb24sXG4gICAgICAgICAgICAgICAgcmVzdWx0U2VsZWN0b3I6IHJlc3VsdFNlbGVjdG9yLFxuICAgICAgICAgICAgICAgIHN0YXRlOiBzdGF0ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBjb25kaXRpb25SZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUmVzdWx0ID0gY29uZGl0aW9uKHN0YXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghY29uZGl0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlID0gdm9pZCAwO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdFNlbGVjdG9yKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgc3RhdGUgPSBpdGVyYXRlKHN0YXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkaXNwYXRjaChzdGF0ZSkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgY29uZGl0aW9uID0gc3RhdGUuY29uZGl0aW9uO1xuICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBpZiAoc3RhdGUubmVlZEl0ZXJhdGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHN0YXRlLnN0YXRlID0gc3RhdGUuaXRlcmF0ZShzdGF0ZS5zdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgc3RhdGUubmVlZEl0ZXJhdGUgPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICAgIHZhciBjb25kaXRpb25SZXN1bHQgPSB2b2lkIDA7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25kaXRpb25SZXN1bHQgPSBjb25kaXRpb24oc3RhdGUuc3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFjb25kaXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciB2YWx1ZTtcbiAgICB0cnkge1xuICAgICAgICB2YWx1ZSA9IHN0YXRlLnJlc3VsdFNlbGVjdG9yKHN0YXRlLnN0YXRlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBzdWJzY3JpYmVyLmVycm9yKGVycik7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUpO1xuICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5zY2hlZHVsZShzdGF0ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1nZW5lcmF0ZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX2RlZmVyLF9lbXB0eSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBkZWZlciB9IGZyb20gJy4vZGVmZXInO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICcuL2VtcHR5JztcbmV4cG9ydCBmdW5jdGlvbiBpaWYoY29uZGl0aW9uLCB0cnVlUmVzdWx0LCBmYWxzZVJlc3VsdCkge1xuICAgIGlmICh0cnVlUmVzdWx0ID09PSB2b2lkIDApIHtcbiAgICAgICAgdHJ1ZVJlc3VsdCA9IEVNUFRZO1xuICAgIH1cbiAgICBpZiAoZmFsc2VSZXN1bHQgPT09IHZvaWQgMCkge1xuICAgICAgICBmYWxzZVJlc3VsdCA9IEVNUFRZO1xuICAgIH1cbiAgICByZXR1cm4gZGVmZXIoZnVuY3Rpb24gKCkgeyByZXR1cm4gY29uZGl0aW9uKCkgPyB0cnVlUmVzdWx0IDogZmFsc2VSZXN1bHQ7IH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aWlmLmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfT2JzZXJ2YWJsZSxfc2NoZWR1bGVyX2FzeW5jLF91dGlsX2lzTnVtZXJpYyBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5pbXBvcnQgeyBhc3luYyB9IGZyb20gJy4uL3NjaGVkdWxlci9hc3luYyc7XG5pbXBvcnQgeyBpc051bWVyaWMgfSBmcm9tICcuLi91dGlsL2lzTnVtZXJpYyc7XG5leHBvcnQgZnVuY3Rpb24gaW50ZXJ2YWwocGVyaW9kLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAocGVyaW9kID09PSB2b2lkIDApIHtcbiAgICAgICAgcGVyaW9kID0gMDtcbiAgICB9XG4gICAgaWYgKHNjaGVkdWxlciA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNjaGVkdWxlciA9IGFzeW5jO1xuICAgIH1cbiAgICBpZiAoIWlzTnVtZXJpYyhwZXJpb2QpIHx8IHBlcmlvZCA8IDApIHtcbiAgICAgICAgcGVyaW9kID0gMDtcbiAgICB9XG4gICAgaWYgKCFzY2hlZHVsZXIgfHwgdHlwZW9mIHNjaGVkdWxlci5zY2hlZHVsZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzY2hlZHVsZXIgPSBhc3luYztcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShkaXNwYXRjaCwgcGVyaW9kLCB7IHN1YnNjcmliZXI6IHN1YnNjcmliZXIsIGNvdW50ZXI6IDAsIHBlcmlvZDogcGVyaW9kIH0pKTtcbiAgICAgICAgcmV0dXJuIHN1YnNjcmliZXI7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBkaXNwYXRjaChzdGF0ZSkge1xuICAgIHZhciBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgY291bnRlciA9IHN0YXRlLmNvdW50ZXIsIHBlcmlvZCA9IHN0YXRlLnBlcmlvZDtcbiAgICBzdWJzY3JpYmVyLm5leHQoY291bnRlcik7XG4gICAgdGhpcy5zY2hlZHVsZSh7IHN1YnNjcmliZXI6IHN1YnNjcmliZXIsIGNvdW50ZXI6IGNvdW50ZXIgKyAxLCBwZXJpb2Q6IHBlcmlvZCB9LCBwZXJpb2QpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW50ZXJ2YWwuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlLF91dGlsX25vb3AgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgbm9vcCB9IGZyb20gJy4uL3V0aWwvbm9vcCc7XG5leHBvcnQgdmFyIE5FVkVSID0gLypAX19QVVJFX18qLyBuZXcgT2JzZXJ2YWJsZShub29wKTtcbmV4cG9ydCBmdW5jdGlvbiBuZXZlcigpIHtcbiAgICByZXR1cm4gTkVWRVI7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1uZXZlci5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX2Zyb20sX3V0aWxfaXNBcnJheSxfZW1wdHkgUFVSRV9JTVBPUlRTX0VORCAqL1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJy4uL09ic2VydmFibGUnO1xuaW1wb3J0IHsgZnJvbSB9IGZyb20gJy4vZnJvbSc7XG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnLi4vdXRpbC9pc0FycmF5JztcbmltcG9ydCB7IEVNUFRZIH0gZnJvbSAnLi9lbXB0eSc7XG5leHBvcnQgZnVuY3Rpb24gb25FcnJvclJlc3VtZU5leHQoKSB7XG4gICAgdmFyIHNvdXJjZXMgPSBbXTtcbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICBzb3VyY2VzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgfVxuICAgIGlmIChzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgfVxuICAgIHZhciBmaXJzdCA9IHNvdXJjZXNbMF0sIHJlbWFpbmRlciA9IHNvdXJjZXMuc2xpY2UoMSk7XG4gICAgaWYgKHNvdXJjZXMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkoZmlyc3QpKSB7XG4gICAgICAgIHJldHVybiBvbkVycm9yUmVzdW1lTmV4dC5hcHBseSh2b2lkIDAsIGZpcnN0KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciBzdWJOZXh0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gc3Vic2NyaWJlci5hZGQob25FcnJvclJlc3VtZU5leHQuYXBwbHkodm9pZCAwLCByZW1haW5kZXIpLnN1YnNjcmliZShzdWJzY3JpYmVyKSk7IH07XG4gICAgICAgIHJldHVybiBmcm9tKGZpcnN0KS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKHZhbHVlKSB7IHN1YnNjcmliZXIubmV4dCh2YWx1ZSk7IH0sXG4gICAgICAgICAgICBlcnJvcjogc3ViTmV4dCxcbiAgICAgICAgICAgIGNvbXBsZXRlOiBzdWJOZXh0LFxuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPW9uRXJyb3JSZXN1bWVOZXh0LmpzLm1hcFxuIiwiLyoqIFBVUkVfSU1QT1JUU19TVEFSVCBfT2JzZXJ2YWJsZSxfU3Vic2NyaXB0aW9uIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJy4uL1N1YnNjcmlwdGlvbic7XG5leHBvcnQgZnVuY3Rpb24gcGFpcnMob2JqLCBzY2hlZHVsZXIpIHtcbiAgICBpZiAoIXNjaGVkdWxlcikge1xuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24gKHN1YnNjcmliZXIpIHtcbiAgICAgICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICAgICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KFtrZXksIG9ialtrZXldXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbiAoc3Vic2NyaWJlcikge1xuICAgICAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgICAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi5hZGQoc2NoZWR1bGVyLnNjaGVkdWxlKGRpc3BhdGNoLCAwLCB7IGtleXM6IGtleXMsIGluZGV4OiAwLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbiwgb2JqOiBvYmogfSkpO1xuICAgICAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BhdGNoKHN0YXRlKSB7XG4gICAgdmFyIGtleXMgPSBzdGF0ZS5rZXlzLCBpbmRleCA9IHN0YXRlLmluZGV4LCBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlciwgc3Vic2NyaXB0aW9uID0gc3RhdGUuc3Vic2NyaXB0aW9uLCBvYmogPSBzdGF0ZS5vYmo7XG4gICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkge1xuICAgICAgICBpZiAoaW5kZXggPCBrZXlzLmxlbmd0aCkge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaW5kZXhdO1xuICAgICAgICAgICAgc3Vic2NyaWJlci5uZXh0KFtrZXksIG9ialtrZXldXSk7XG4gICAgICAgICAgICBzdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUoeyBrZXlzOiBrZXlzLCBpbmRleDogaW5kZXggKyAxLCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyLCBzdWJzY3JpcHRpb246IHN1YnNjcmlwdGlvbiwgb2JqOiBvYmogfSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cGFpcnMuanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF91dGlsX25vdCxfdXRpbF9zdWJzY3JpYmVUbyxfb3BlcmF0b3JzX2ZpbHRlcixfT2JzZXJ2YWJsZSBQVVJFX0lNUE9SVFNfRU5EICovXG5pbXBvcnQgeyBub3QgfSBmcm9tICcuLi91dGlsL25vdCc7XG5pbXBvcnQgeyBzdWJzY3JpYmVUbyB9IGZyb20gJy4uL3V0aWwvc3Vic2NyaWJlVG8nO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnLi4vb3BlcmF0b3JzL2ZpbHRlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAnLi4vT2JzZXJ2YWJsZSc7XG5leHBvcnQgZnVuY3Rpb24gcGFydGl0aW9uKHNvdXJjZSwgcHJlZGljYXRlLCB0aGlzQXJnKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgZmlsdGVyKHByZWRpY2F0ZSwgdGhpc0FyZykobmV3IE9ic2VydmFibGUoc3Vic2NyaWJlVG8oc291cmNlKSkpLFxuICAgICAgICBmaWx0ZXIobm90KHByZWRpY2F0ZSwgdGhpc0FyZykpKG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZVRvKHNvdXJjZSkpKVxuICAgIF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1wYXJ0aXRpb24uanMubWFwXG4iLCIvKiogUFVSRV9JTVBPUlRTX1NUQVJUIF9PYnNlcnZhYmxlIFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmV4cG9ydCBmdW5jdGlvbiByYW5nZShzdGFydCwgY291bnQsIHNjaGVkdWxlcikge1xuICAgIGlmIChzdGFydCA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gMDtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb3VudCA9IHN0YXJ0O1xuICAgICAgICAgICAgc3RhcnQgPSAwO1xuICAgICAgICB9XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBjdXJyZW50ID0gc3RhcnQ7XG4gICAgICAgIGlmIChzY2hlZHVsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2hlZHVsZXIuc2NoZWR1bGUoZGlzcGF0Y2gsIDAsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsIGNvdW50OiBjb3VudCwgc3RhcnQ6IHN0YXJ0LCBzdWJzY3JpYmVyOiBzdWJzY3JpYmVyXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXgrKyA+PSBjb3VudCkge1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudCsrKTtcbiAgICAgICAgICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSB3aGlsZSAodHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBkaXNwYXRjaChzdGF0ZSkge1xuICAgIHZhciBzdGFydCA9IHN0YXRlLnN0YXJ0LCBpbmRleCA9IHN0YXRlLmluZGV4LCBjb3VudCA9IHN0YXRlLmNvdW50LCBzdWJzY3JpYmVyID0gc3RhdGUuc3Vic2NyaWJlcjtcbiAgICBpZiAoaW5kZXggPj0gY291bnQpIHtcbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHN1YnNjcmliZXIubmV4dChzdGFydCk7XG4gICAgaWYgKHN1YnNjcmliZXIuY2xvc2VkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3RhdGUuaW5kZXggPSBpbmRleCArIDE7XG4gICAgc3RhdGUuc3RhcnQgPSBzdGFydCArIDE7XG4gICAgdGhpcy5zY2hlZHVsZShzdGF0ZSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yYW5nZS5qcy5tYXBcbiIsIi8qKiBQVVJFX0lNUE9SVFNfU1RBUlQgX09ic2VydmFibGUsX2Zyb20sX2VtcHR5IFBVUkVfSU1QT1JUU19FTkQgKi9cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICcuLi9PYnNlcnZhYmxlJztcbmltcG9ydCB7IGZyb20gfSBmcm9tICcuL2Zyb20nO1xuaW1wb3J0IHsgRU1QVFkgfSBmcm9tICcuL2VtcHR5JztcbmV4cG9ydCBmdW5jdGlvbiB1c2luZyhyZXNvdXJjZUZhY3RvcnksIG9ic2VydmFibGVGYWN0b3J5KSB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uIChzdWJzY3JpYmVyKSB7XG4gICAgICAgIHZhciByZXNvdXJjZTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc291cmNlID0gcmVzb3VyY2VGYWN0b3J5KCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gb2JzZXJ2YWJsZUZhY3RvcnkocmVzb3VyY2UpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNvdXJjZSA9IHJlc3VsdCA/IGZyb20ocmVzdWx0KSA6IEVNUFRZO1xuICAgICAgICB2YXIgc3Vic2NyaXB0aW9uID0gc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICAgICAgcmVzb3VyY2UudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzaW5nLmpzLm1hcFxuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjd2F0Y2gge1xcbiAgY29sb3I6ICNmZmY7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NsaWVudC9zcmMvbWFpbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI3dhdGNoIHtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjaG9tZSB7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7XFxufVwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2NsaWVudC9zcmMvanMvcGFnZXMvaG9tZVBhZ2UvaG9tZVBhZ2UuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0Usa0JBQWtCO0FBQ3BCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNob21lIHtcXG4gIGZvbnQtc3R5bGU6IGl0YWxpYztcXG59XCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiI21hcCB7XFxuICAgIHdpZHRoOiAyMDBweDtcXG4gICAgaGVpZ2h0OiAyMDBweDtcXG4gICAgZmxvYXQ6IGxlZnQ7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vY2xpZW50L3NyYy9tYXAuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksWUFBWTtJQUNaLGFBQWE7SUFDYixXQUFXO0lBQ1gsa0JBQWtCO0FBQ3RCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNtYXAge1xcbiAgICB3aWR0aDogMjAwcHg7XFxuICAgIGhlaWdodDogMjAwcHg7XFxuICAgIGZsb2F0OiBsZWZ0O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIltkYXRhLXNlbGVjdGVkPXRydWVde1xcbiAgY29sb3I6IG1lZGl1bXNlYWdyZWVuO1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9jbGllbnQvc3JjL21lbnUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0VBQ0UscUJBQXFCO0FBQ3ZCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIltkYXRhLXNlbGVjdGVkPXRydWVde1xcbiAgY29sb3I6IG1lZGl1bXNlYWdyZWVuO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiYTYxMzc0NTZlZDE2MGQ3NjA2OTgxYWE1N2M1NTk4OTgucG5nXCI7IiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiNGYwMjgzYzZjZTI4ZTg4ODAwMGU5NzhlNTM3YTZhNTYucG5nXCI7IiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiMjI3M2UzZDhhZDkyNjRiN2RhYTViZGJmOGU2YjQ3ZjgucG5nXCI7IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8wX19fIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm9ybWFsaXplLm1pbi5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzFfX18gZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9sYXlvdXQuY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8yX19fIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vd2F0Y2guY3NzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8zX19fIGZyb20gXCItIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbm90aWZpY2F0aW9uLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNF9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21lbnUuY3NzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMl9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfM19fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5pKF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfNF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCJcIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiXCIsXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIvKiEgbm9ybWFsaXplLmNzcyB2My4wLjIgfCBNSVQgTGljZW5zZSB8IGdpdC5pby9ub3JtYWxpemUgKi9odG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1ib2R5e21hcmdpbjowfWFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfVtoaWRkZW5dLHRlbXBsYXRle2Rpc3BsYXk6bm9uZX1he2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9YTphY3RpdmUsYTpob3ZlcntvdXRsaW5lOjB9YWJiclt0aXRsZV17Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkfWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OjcwMH1kZm57Zm9udC1zdHlsZTppdGFsaWN9aDF7Zm9udC1zaXplOjJlbTttYXJnaW46LjY3ZW0gMH1tYXJre2JhY2tncm91bmQ6I2ZmMDtjb2xvcjojMDAwfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vwe3RvcDotLjVlbX1zdWJ7Ym90dG9tOi0uMjVlbX1pbWd7Ym9yZGVyOjB9c3ZnOm5vdCg6cm9vdCl7b3ZlcmZsb3c6aGlkZGVufWZpZ3VyZXttYXJnaW46MWVtIDQwcHh9aHJ7LW1vei1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3g7aGVpZ2h0OjB9cHJle292ZXJmbG93OmF1dG99Y29kZSxrYmQscHJlLHNhbXB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLG1vbm9zcGFjZTtmb250LXNpemU6MWVtfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7Y29sb3I6aW5oZXJpdDtmb250OmluaGVyaXQ7bWFyZ2luOjB9YnV0dG9ue292ZXJmbG93OnZpc2libGV9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixodG1sIGlucHV0W3R5cGU9YnV0dG9uXSxpbnB1dFt0eXBlPXJlc2V0XSxpbnB1dFt0eXBlPXN1Ym1pdF17LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtjdXJzb3I6cG9pbnRlcn1idXR0b25bZGlzYWJsZWRdLGh0bWwgaW5wdXRbZGlzYWJsZWRde2N1cnNvcjpkZWZhdWx0fWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixpbnB1dDo6LW1vei1mb2N1cy1pbm5lcntib3JkZXI6MDtwYWRkaW5nOjB9aW5wdXR7bGluZS1oZWlnaHQ6bm9ybWFsfWlucHV0W3R5cGU9Y2hlY2tib3hdLGlucHV0W3R5cGU9cmFkaW9de2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9aW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7LXdlYmtpdC1ib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JveC1zaXppbmc6Y29udGVudC1ib3h9aW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLGlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbnstd2Via2l0LWFwcGVhcmFuY2U6bm9uZX1maWVsZHNldHtib3JkZXI6MXB4IHNvbGlkIHNpbHZlcjttYXJnaW46MCAycHg7cGFkZGluZzouMzVlbSAuNjI1ZW0gLjc1ZW19bGVnZW5ke2JvcmRlcjowO3BhZGRpbmc6MH10ZXh0YXJlYXtvdmVyZmxvdzphdXRvfW9wdGdyb3Vwe2ZvbnQtd2VpZ2h0OjcwMH10YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH10ZCx0aHtwYWRkaW5nOjB9XCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vZnJhbWV3b3JrL3N0eWxlcy9ub3JtYWxpemUubWluLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSwyREFBMkQsQ0FBQyxLQUFLLHNCQUFzQixDQUFDLHlCQUF5QixDQUFDLDZCQUE2QixDQUFDLEtBQUssUUFBUSxDQUFDLDJGQUEyRixhQUFhLENBQUMsNEJBQTRCLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLHNCQUFzQixZQUFZLENBQUMsUUFBUSxDQUFDLGtCQUFrQixZQUFZLENBQUMsRUFBRSw0QkFBNEIsQ0FBQyxpQkFBaUIsU0FBUyxDQUFDLFlBQVksd0JBQXdCLENBQUMsU0FBUyxlQUFlLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxlQUFlLENBQUMsVUFBVSxDQUFDLE1BQU0sYUFBYSxDQUFDLFFBQVEsYUFBYSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxJQUFJLFFBQVEsQ0FBQyxlQUFlLGVBQWUsQ0FBQyxPQUFPLGVBQWUsQ0FBQyxHQUFHLDJCQUEyQixDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxrQkFBa0IsK0JBQStCLENBQUMsYUFBYSxDQUFDLHNDQUFzQyxhQUFhLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLGdCQUFnQixDQUFDLGNBQWMsbUJBQW1CLENBQUMsb0VBQW9FLHlCQUF5QixDQUFDLGNBQWMsQ0FBQyxzQ0FBc0MsY0FBYyxDQUFDLGlEQUFpRCxRQUFRLENBQUMsU0FBUyxDQUFDLE1BQU0sa0JBQWtCLENBQUMsdUNBQXVDLHFCQUFxQixDQUFDLFNBQVMsQ0FBQyw0RkFBNEYsV0FBVyxDQUFDLG1CQUFtQiw0QkFBNEIsQ0FBQywyQkFBMkIsQ0FBQyw4QkFBOEIsQ0FBQyxzQkFBc0IsQ0FBQywrRkFBK0YsdUJBQXVCLENBQUMsU0FBUyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLENBQUMsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsYUFBYSxDQUFDLFNBQVMsZUFBZSxDQUFDLE1BQU0sd0JBQXdCLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxTQUFTXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi8qISBub3JtYWxpemUuY3NzIHYzLjAuMiB8IE1JVCBMaWNlbnNlIHwgZ2l0LmlvL25vcm1hbGl6ZSAqL2h0bWx7Zm9udC1mYW1pbHk6c2Fucy1zZXJpZjstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9YXJ0aWNsZSxhc2lkZSxkZXRhaWxzLGZpZ2NhcHRpb24sZmlndXJlLGZvb3RlcixoZWFkZXIsaGdyb3VwLG1haW4sbWVudSxuYXYsc2VjdGlvbixzdW1tYXJ5e2Rpc3BsYXk6YmxvY2t9YXVkaW8sY2FudmFzLHByb2dyZXNzLHZpZGVve2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfWF1ZGlvOm5vdChbY29udHJvbHNdKXtkaXNwbGF5Om5vbmU7aGVpZ2h0OjB9W2hpZGRlbl0sdGVtcGxhdGV7ZGlzcGxheTpub25lfWF7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1hOmFjdGl2ZSxhOmhvdmVye291dGxpbmU6MH1hYmJyW3RpdGxlXXtib3JkZXItYm90dG9tOjFweCBkb3R0ZWR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6NzAwfWRmbntmb250LXN0eWxlOml0YWxpY31oMXtmb250LXNpemU6MmVtO21hcmdpbjouNjdlbSAwfW1hcmt7YmFja2dyb3VuZDojZmYwO2NvbG9yOiMwMDB9c21hbGx7Zm9udC1zaXplOjgwJX1zdWIsc3Vwe2ZvbnQtc2l6ZTo3NSU7bGluZS1oZWlnaHQ6MDtwb3NpdGlvbjpyZWxhdGl2ZTt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1zdXB7dG9wOi0uNWVtfXN1Yntib3R0b206LS4yNWVtfWltZ3tib3JkZXI6MH1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59ZmlndXJle21hcmdpbjoxZW0gNDBweH1ocnstbW96LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MH1wcmV7b3ZlcmZsb3c6YXV0b31jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDttYXJnaW46MH1idXR0b257b3ZlcmZsb3c6dmlzaWJsZX1idXR0b24sc2VsZWN0e3RleHQtdHJhbnNmb3JtOm5vbmV9YnV0dG9uLGh0bWwgaW5wdXRbdHlwZT1idXR0b25dLGlucHV0W3R5cGU9cmVzZXRdLGlucHV0W3R5cGU9c3VibWl0XXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9uO2N1cnNvcjpwb2ludGVyfWJ1dHRvbltkaXNhYmxlZF0saHRtbCBpbnB1dFtkaXNhYmxlZF17Y3Vyc29yOmRlZmF1bHR9YnV0dG9uOjotbW96LWZvY3VzLWlubmVyLGlucHV0OjotbW96LWZvY3VzLWlubmVye2JvcmRlcjowO3BhZGRpbmc6MH1pbnB1dHtsaW5lLWhlaWdodDpub3JtYWx9aW5wdXRbdHlwZT1jaGVja2JveF0saW5wdXRbdHlwZT1yYWRpb117Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1pbnB1dFt0eXBlPW51bWJlcl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24saW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfWlucHV0W3R5cGU9c2VhcmNoXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkOy1tb3otYm94LXNpemluZzpjb250ZW50LWJveDstd2Via2l0LWJveC1zaXppbmc6Y29udGVudC1ib3g7Ym94LXNpemluZzpjb250ZW50LWJveH1pbnB1dFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWNhbmNlbC1idXR0b24saW5wdXRbdHlwZT1zZWFyY2hdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfWZpZWxkc2V0e2JvcmRlcjoxcHggc29saWQgc2lsdmVyO21hcmdpbjowIDJweDtwYWRkaW5nOi4zNWVtIC42MjVlbSAuNzVlbX1sZWdlbmR7Ym9yZGVyOjA7cGFkZGluZzowfXRleHRhcmVhe292ZXJmbG93OmF1dG99b3B0Z3JvdXB7Zm9udC13ZWlnaHQ6NzAwfXRhYmxle2JvcmRlci1jb2xsYXBzZTpjb2xsYXBzZTtib3JkZXItc3BhY2luZzowfXRkLHRoe3BhZGRpbmc6MH1cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjbGVmdCB7XFxuICB3aWR0aDogMTAwJTtcXG4gIHBhZGRpbmc6IDAgNSU7XFxuICBmb250LWZhbWlseTogXFxcIlRyZWJ1Y2hldCBNU1xcXCIsIE9wZW5TYW5zLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbn1cXG5cXG4jbGVmdCBoMSB7XFxuICAgIGZvbnQtZmFtaWx5OiBcXFwiVHJlYnVjaGV0IE1TXFxcIiwgT3BlblNhbnMtTGlnaHQsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XFxuICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XFxuICAgIGZvbnQtc2l6ZTogNDJwdDtcXG4gICAgY29sb3I6ICM1ZTVlNWU7XFxufVxcblxcbiNsZWZ0IHAge1xcbiAgICBmb250LXNpemU6IDE2cHQ7XFxuICAgIGNvbG9yOiAjOTk5OTk5O1xcbn1cXG5cXG4jbGVmdCAubm90aWZpY2F0aW9uLWZvcm0ge1xcbiAgICBiYWNrZ3JvdW5kOiBsaWdodGdyZXk7XFxuICAgIHBhZGRpbmc6IDIwcHg7XFxufVxcblxcbiNsZWZ0IC5ub3RpZmljYXRpb24tZm9ybSBsYWJlbCB7XFxuICAgICAgZGlzcGxheTogYmxvY2s7XFxuICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICAgICAgY29sb3I6IGJsYWNrO1xcbn1cXG5cXG4jbGVmdCAubm90aWZpY2F0aW9uLWZvcm0gcCB7XFxuICAgICAgY29sb3I6IGJsYWNrO1xcbiAgICAgIGZvbnQtc2l6ZTogMzBweDtcXG4gICAgICBtYXJnaW46IDA7XFxufVxcblxcbiNyaWdodCB7XFxuICBtYXJnaW4tdG9wOiA2MHB4O1xcbiAgd2lkdGg6IDEwMCU7XFxufVxcblwiLCBcIlwiLHtcInZlcnNpb25cIjozLFwic291cmNlc1wiOltcIndlYnBhY2s6Ly8uL2ZyYW1ld29yay9zdHlsZXMvbGF5b3V0LmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtFQUNFLFdBQVc7RUFDWCxhQUFhO0VBQ2IsbUVBQW1FO0FBQ3JFOztBQUVBO0lBQ0kseUVBQXlFO0lBQ3pFLG1CQUFtQjtJQUNuQixlQUFlO0lBQ2YsY0FBYztBQUNsQjs7QUFFQTtJQUNJLGVBQWU7SUFDZixjQUFjO0FBQ2xCOztBQUVBO0lBQ0kscUJBQXFCO0lBQ3JCLGFBQWE7QUFDakI7O0FBRUE7TUFDTSxjQUFjO01BQ2QsaUJBQWlCO01BQ2pCLFlBQVk7QUFDbEI7O0FBRUE7TUFDTSxZQUFZO01BQ1osZUFBZTtNQUNmLFNBQVM7QUFDZjs7QUFFQTtFQUNFLGdCQUFnQjtFQUNoQixXQUFXO0FBQ2JcIixcInNvdXJjZXNDb250ZW50XCI6W1wiI2xlZnQge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBwYWRkaW5nOiAwIDUlO1xcbiAgZm9udC1mYW1pbHk6IFxcXCJUcmVidWNoZXQgTVNcXFwiLCBPcGVuU2FucywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcXG59XFxuXFxuI2xlZnQgaDEge1xcbiAgICBmb250LWZhbWlseTogXFxcIlRyZWJ1Y2hldCBNU1xcXCIsIE9wZW5TYW5zLUxpZ2h0LCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmO1xcbiAgICBmb250LXdlaWdodDogbm9ybWFsO1xcbiAgICBmb250LXNpemU6IDQycHQ7XFxuICAgIGNvbG9yOiAjNWU1ZTVlO1xcbn1cXG5cXG4jbGVmdCBwIHtcXG4gICAgZm9udC1zaXplOiAxNnB0O1xcbiAgICBjb2xvcjogIzk5OTk5OTtcXG59XFxuXFxuI2xlZnQgLm5vdGlmaWNhdGlvbi1mb3JtIHtcXG4gICAgYmFja2dyb3VuZDogbGlnaHRncmV5O1xcbiAgICBwYWRkaW5nOiAyMHB4O1xcbn1cXG5cXG4jbGVmdCAubm90aWZpY2F0aW9uLWZvcm0gbGFiZWwge1xcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xcbiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xcbiAgICAgIGNvbG9yOiBibGFjaztcXG59XFxuXFxuI2xlZnQgLm5vdGlmaWNhdGlvbi1mb3JtIHAge1xcbiAgICAgIGNvbG9yOiBibGFjaztcXG4gICAgICBmb250LXNpemU6IDMwcHg7XFxuICAgICAgbWFyZ2luOiAwO1xcbn1cXG5cXG4jcmlnaHQge1xcbiAgbWFyZ2luLXRvcDogNjBweDtcXG4gIHdpZHRoOiAxMDAlO1xcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIuc2NyZWVue1xcbiAgcGFkZGluZy1sZWZ0OiAxLjVlbTtcXG4gIGZvbnQtZmFtaWx5OiBPcGVuU2Fucy1MaWdodDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG5cXG4jd2F0Y2gtZmFjZXtcXG4gIGhlaWdodDogMjQwcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMjQwcHg7XFxuICB0b3A6IDMwcHg7XFxuICBsZWZ0OiAyMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4jd2F0Y2h7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y0ODRBO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG59XFxuXFxuLndhdGNoe1xcbiAgcG9zaXRpb246cmVsYXRpdmU7XFxuICBtYXJnaW46MCBhdXRvO1xcbiAgd2lkdGg6MzIwcHg7XFxuICBwYWRkaW5nOjcuM2VtIDBcXG59XFxuXFxuLnBvd2VyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnBvd2VyOm50aC1jaGlsZCgxKXtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgcmlnaHQ6LTEuNGVtO1xcbiAgdG9wOiA3LjNlbTtcXG4gIGhlaWdodDozLjVlbTtcXG4gIHdpZHRoOjAuOGVtO1xcbiAgYmFja2dyb3VuZDojZTRlNGU0O1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDIpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0Oi0xLjRlbTtcXG4gIHRvcDogNy4zZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDMpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0OiA4LjhlbTtcXG4gIGJvdHRvbTotMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZyk7XFxufVxcblxcbi5wb3dlcjpudGgtY2hpbGQoNCl7XFxuICBwb3NpdGlvbjphYnNvbHV0ZTtcXG4gIGxlZnQ6IDguOGVtO1xcbiAgdG9wOiAtMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZykgcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4uY2FzZXtcXG4gIHBvc2l0aW9uOnJlbGF0aXZlO1xcbiAgei1pbmRleDoyO1xcbiAgYmFja2dyb3VuZDojMDMwMzAzO1xcbiAgd2lkdGg6MzAwcHg7XFxuICBoZWlnaHQ6MzAwcHg7XFxuICBib3JkZXItcmFkaXVzOjRlbTtcXG4gIGJhY2tncm91bmQ6ICMzRjQ4NEE7IC8qIERpYWwgY29sb3VyICovXFxuICBib3JkZXI6IDEwcHggc29saWQgc2lsdmVyOyAvKiBGYWNlIGJvcmRlciAqL1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpLCAxcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XFxufVxcblxcblxcbi5zdHJhcHtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgei1pbmRleDoxO1xcbiAgbGVmdDo0LjRlbTtcXG4gIHdpZHRoOjExLjJlbTtcXG4gIGhlaWdodDo3LjZlbTtcXG4gIGJhY2tncm91bmQ6IGRpbWdyZXk7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4IDEwcHggMCAwO1xcbn1cXG5cXG4uc3RyYXAuc3RyYXAtdG9we1xcbiAgdG9wOjA7XFxufVxcblxcbi5zdHJhcC5zdHJhcC1ib3R0b217XFxuICBib3R0b206MDtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5yZXNpemVye1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICB0b3A6MWVtO1xcbiAgbGVmdDoxZW07XFxuICB3aWR0aDoyMzBweDtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vZnJhbWV3b3JrL3N0eWxlcy93YXRjaC5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSxtQkFBbUI7RUFDbkIsMkJBQTJCO0VBQzNCLGVBQWU7RUFDZixtQkFBbUI7RUFDbkIsbUJBQW1CO0FBQ3JCOztBQUVBO0VBQ0UsYUFBYTtFQUNiLGtCQUFrQjtFQUNsQixZQUFZO0VBQ1osU0FBUztFQUNULFVBQVU7RUFDVixjQUFjO0VBQ2QsZ0JBQWdCO0FBQ2xCOztBQUVBO0VBQ0UseUJBQXlCO0VBQ3pCLHFCQUFxQjtFQUNyQixtQkFBbUI7QUFDckI7O0FBRUE7RUFDRSxpQkFBaUI7RUFDakIsYUFBYTtFQUNiLFdBQVc7RUFDWDtBQUNGOztBQUVBO0VBQ0UsZUFBZTtBQUNqQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixZQUFZO0VBQ1osVUFBVTtFQUNWLFlBQVk7RUFDWixXQUFXO0VBQ1gsa0JBQWtCO0FBQ3BCOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFdBQVc7RUFDWCxVQUFVO0VBQ1YsWUFBWTtFQUNaLFdBQVc7RUFDWCxrQkFBa0I7RUFDbEIsMEJBQTBCO0FBQzVCOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFdBQVc7RUFDWCxhQUFhO0VBQ2IsWUFBWTtFQUNaLFdBQVc7RUFDWCxrQkFBa0I7RUFDbEIseUJBQXlCO0FBQzNCOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFdBQVc7RUFDWCxXQUFXO0VBQ1gsWUFBWTtFQUNaLFdBQVc7RUFDWCxrQkFBa0I7RUFDbEIseUNBQXlDO0FBQzNDOztBQUVBO0VBQ0UsaUJBQWlCO0VBQ2pCLFNBQVM7RUFDVCxrQkFBa0I7RUFDbEIsV0FBVztFQUNYLFlBQVk7RUFDWixpQkFBaUI7RUFDakIsbUJBQW1CLEVBQUUsZ0JBQWdCO0VBQ3JDLHlCQUF5QixFQUFFLGdCQUFnQjtFQUMzQyw2RUFBNkU7QUFDL0U7OztBQUdBO0VBQ0UsaUJBQWlCO0VBQ2pCLFNBQVM7RUFDVCxVQUFVO0VBQ1YsWUFBWTtFQUNaLFlBQVk7RUFDWixtQkFBbUI7RUFDbkIsNEJBQTRCO0FBQzlCOztBQUVBO0VBQ0UsS0FBSztBQUNQOztBQUVBO0VBQ0UsUUFBUTtFQUNSLHlCQUF5QjtBQUMzQjs7QUFFQTtFQUNFLGlCQUFpQjtFQUNqQixPQUFPO0VBQ1AsUUFBUTtFQUNSLFdBQVc7QUFDYlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuc2NyZWVue1xcbiAgcGFkZGluZy1sZWZ0OiAxLjVlbTtcXG4gIGZvbnQtZmFtaWx5OiBPcGVuU2Fucy1MaWdodDtcXG4gIGZvbnQtc2l6ZTogMTNweDtcXG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XFxuICBmb250LXdlaWdodDogbm9ybWFsO1xcbn1cXG5cXG4jd2F0Y2gtZmFjZXtcXG4gIGhlaWdodDogMjQwcHg7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogMjQwcHg7XFxuICB0b3A6IDMwcHg7XFxuICBsZWZ0OiAyMHB4O1xcbiAgZGlzcGxheTogYmxvY2s7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4jd2F0Y2h7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAjM0Y0ODRBO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgdmVydGljYWwtYWxpZ246IHRvcDtcXG59XFxuXFxuLndhdGNoe1xcbiAgcG9zaXRpb246cmVsYXRpdmU7XFxuICBtYXJnaW46MCBhdXRvO1xcbiAgd2lkdGg6MzIwcHg7XFxuICBwYWRkaW5nOjcuM2VtIDBcXG59XFxuXFxuLnBvd2VyIHtcXG4gIGN1cnNvcjogcG9pbnRlcjtcXG59XFxuXFxuLnBvd2VyOm50aC1jaGlsZCgxKXtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgcmlnaHQ6LTEuNGVtO1xcbiAgdG9wOiA3LjNlbTtcXG4gIGhlaWdodDozLjVlbTtcXG4gIHdpZHRoOjAuOGVtO1xcbiAgYmFja2dyb3VuZDojZTRlNGU0O1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDIpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0Oi0xLjRlbTtcXG4gIHRvcDogNy4zZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4ucG93ZXI6bnRoLWNoaWxkKDMpe1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICBsZWZ0OiA4LjhlbTtcXG4gIGJvdHRvbTotMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZyk7XFxufVxcblxcbi5wb3dlcjpudGgtY2hpbGQoNCl7XFxuICBwb3NpdGlvbjphYnNvbHV0ZTtcXG4gIGxlZnQ6IDguOGVtO1xcbiAgdG9wOiAtMi43ZW07XFxuICBoZWlnaHQ6My41ZW07XFxuICB3aWR0aDowLjhlbTtcXG4gIGJhY2tncm91bmQ6I2U0ZTRlNDtcXG4gIHRyYW5zZm9ybTogcm90YXRlWig5MGRlZykgcm90YXRlWSgxODBkZWcpO1xcbn1cXG5cXG4uY2FzZXtcXG4gIHBvc2l0aW9uOnJlbGF0aXZlO1xcbiAgei1pbmRleDoyO1xcbiAgYmFja2dyb3VuZDojMDMwMzAzO1xcbiAgd2lkdGg6MzAwcHg7XFxuICBoZWlnaHQ6MzAwcHg7XFxuICBib3JkZXItcmFkaXVzOjRlbTtcXG4gIGJhY2tncm91bmQ6ICMzRjQ4NEE7IC8qIERpYWwgY29sb3VyICovXFxuICBib3JkZXI6IDEwcHggc29saWQgc2lsdmVyOyAvKiBGYWNlIGJvcmRlciAqL1xcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDE1cHggcmdiYSgwLCAwLCAwLCAwLjUpLCAxcHggMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMyk7XFxufVxcblxcblxcbi5zdHJhcHtcXG4gIHBvc2l0aW9uOmFic29sdXRlO1xcbiAgei1pbmRleDoxO1xcbiAgbGVmdDo0LjRlbTtcXG4gIHdpZHRoOjExLjJlbTtcXG4gIGhlaWdodDo3LjZlbTtcXG4gIGJhY2tncm91bmQ6IGRpbWdyZXk7XFxuICBib3JkZXItcmFkaXVzOiAxMHB4IDEwcHggMCAwO1xcbn1cXG5cXG4uc3RyYXAuc3RyYXAtdG9we1xcbiAgdG9wOjA7XFxufVxcblxcbi5zdHJhcC5zdHJhcC1ib3R0b217XFxuICBib3R0b206MDtcXG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XFxufVxcblxcbi5yZXNpemVye1xcbiAgcG9zaXRpb246YWJzb2x1dGU7XFxuICB0b3A6MWVtO1xcbiAgbGVmdDoxZW07XFxuICB3aWR0aDoyMzBweDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiI25vdGlmaWNhdGlvbi1jb250YWluZXIge1xcbiAgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7XFxuICBjb2xvcjogd2hpdGU7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBoZWlnaHQ6IDE2MHB4O1xcbiAgd2lkdGg6IDE2MHB4O1xcbiAgdG9wOiA1MHB4O1xcbiAgbGVmdDogNTBweDtcXG4gIG9wYWNpdHk6IDAuOTtcXG4gIHotaW5kZXg6IDEwMDtcXG4gIHBhZGRpbmc6IDIwcHg7XFxufVxcblxcbiNub3RpZmljYXRpb24tbWVzc2FnZS1kaXNwbGF5IHtcXG4gIGhlaWdodDogNzAlO1xcbn1cXG5cXG4jbm90aWZpY2F0aW9uLWJ1dHRvbnMge1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuXFxuLm5vdGlmaWNhdGlvbi1idXR0b24ge1xcbiAgZmxleDogMTtcXG4gIGN1cnNvcjogZGVmYXVsdDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG59XFxuXFxuI25vdGlmaWNhdGlvbi1idXR0b24tcmlnaHQge1xcbiB0ZXh0LWFsaWduOiByaWdodFxcbn1cXG5cXG4jbm90aWZpY2F0aW9uLWJ1dHRvbi1sZWZ0IHtcXG4gdGV4dC1hbGlnbjogbGVmdFxcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9mcmFtZXdvcmsvc3R5bGVzL25vdGlmaWNhdGlvbi5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7RUFDRSx1QkFBdUI7RUFDdkIsWUFBWTtFQUNaLGtCQUFrQjtFQUNsQixhQUFhO0VBQ2IsWUFBWTtFQUNaLFNBQVM7RUFDVCxVQUFVO0VBQ1YsWUFBWTtFQUNaLFlBQVk7RUFDWixhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxXQUFXO0FBQ2I7O0FBRUE7RUFDRSxhQUFhO0FBQ2Y7O0FBRUE7RUFDRSxPQUFPO0VBQ1AsZUFBZTtFQUNmLGtCQUFrQjtBQUNwQjs7QUFFQTtDQUNDO0FBQ0Q7O0FBRUE7Q0FDQztBQUNEXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIiNub3RpZmljYXRpb24tY29udGFpbmVyIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IGJsYWNrO1xcbiAgY29sb3I6IHdoaXRlO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgaGVpZ2h0OiAxNjBweDtcXG4gIHdpZHRoOiAxNjBweDtcXG4gIHRvcDogNTBweDtcXG4gIGxlZnQ6IDUwcHg7XFxuICBvcGFjaXR5OiAwLjk7XFxuICB6LWluZGV4OiAxMDA7XFxuICBwYWRkaW5nOiAyMHB4O1xcbn1cXG5cXG4jbm90aWZpY2F0aW9uLW1lc3NhZ2UtZGlzcGxheSB7XFxuICBoZWlnaHQ6IDcwJTtcXG59XFxuXFxuI25vdGlmaWNhdGlvbi1idXR0b25zIHtcXG4gIGRpc3BsYXk6IGZsZXg7XFxufVxcblxcbi5ub3RpZmljYXRpb24tYnV0dG9uIHtcXG4gIGZsZXg6IDE7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcblxcbiNub3RpZmljYXRpb24tYnV0dG9uLXJpZ2h0IHtcXG4gdGV4dC1hbGlnbjogcmlnaHRcXG59XFxuXFxuI25vdGlmaWNhdGlvbi1idXR0b24tbGVmdCB7XFxuIHRleHQtYWxpZ246IGxlZnRcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnBhZ2Utd2l0aC1tZW51IC5tZW51IHtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7XFxufVxcblxcbi5wYWdlLXdpdGgtbWVudSBsaSB7XFxuICAgICAgcGFkZGluZzogNHB4O1xcbn1cXG5cXG4ucGFnZS13aXRoLW1lbnUgIC5zZWxlY3RlZCB7XFxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkO1xcbn1cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9mcmFtZXdvcmsvc3R5bGVzL21lbnUuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0ksU0FBUztJQUNULFVBQVU7SUFDVixxQkFBcUI7QUFDekI7O0FBRUE7TUFDTSxZQUFZO0FBQ2xCOztBQUVBO01BQ00scUJBQXFCO0FBQzNCXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5wYWdlLXdpdGgtbWVudSAubWVudSB7XFxuICAgIG1hcmdpbjogMDtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xcbn1cXG5cXG4ucGFnZS13aXRoLW1lbnUgbGkge1xcbiAgICAgIHBhZGRpbmc6IDRweDtcXG59XFxuXFxuLnBhZ2Utd2l0aC1tZW51ICAuc2VsZWN0ZWQge1xcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIm1vZHVsZS5leHBvcnRzID0gX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcIk9wZW5TYW5zLVJlZ3VsYXIudHRmXCI7IiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiT3BlblNhbnMtTGlnaHQudHRmXCI7IiwicmVxdWlyZSgnLi9hcHAuY3NzJyk7XG5yZXF1aXJlKCcuL2pzL3N0b3JhZ2UnKTtcblxuY29uc3QgQXBwID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuQXBwO1xuXG5jb25zdCByb3V0ZXMgPSByZXF1aXJlKFwiLi9qcy9yb3V0ZXNcIik7XG5jb25zdCBub3RpZmljYXRpb25zID0gcmVxdWlyZShcIi4vanMvbm90aWZpY2F0aW9uc1wiKTtcblxubmV3IEFwcChyb3V0ZXMsIG5vdGlmaWNhdGlvbnMpLmRlZmluZUN1c3RvbUVsZW1lbnRzKCkubmF2aWdhdGVUb0xvY2F0aW9uKHdpbmRvdy5sb2NhdGlvbik7XG4iLCJcbnZhciBjb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9hcHAuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FwcC5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FwcC5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2Nzc1dpdGhNYXBwaW5nVG9TdHJpbmcuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzBfX18gZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tYWluLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMV9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2pzL3BhZ2VzL2hvbWVQYWdlL2hvbWVQYWdlLmNzc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMl9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21hcC5jc3NcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzNfX18gZnJvbSBcIi0hLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tZW51LmNzc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzBfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzFfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzJfX18pO1xuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18uaShfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzNfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiXFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W10sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIlwiLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlxuLyoqXG4gKiBXaGVuIHNvdXJjZSBtYXBzIGFyZSBlbmFibGVkLCBgc3R5bGUtbG9hZGVyYCB1c2VzIGEgbGluayBlbGVtZW50IHdpdGggYSBkYXRhLXVyaSB0b1xuICogZW1iZWQgdGhlIGNzcyBvbiB0aGUgcGFnZS4gVGhpcyBicmVha3MgYWxsIHJlbGF0aXZlIHVybHMgYmVjYXVzZSBub3cgdGhleSBhcmUgcmVsYXRpdmUgdG8gYVxuICogYnVuZGxlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cbiAqXG4gKiBPbmUgc29sdXRpb24gaXMgdG8gb25seSB1c2UgZnVsbCB1cmxzLCBidXQgdGhhdCBtYXkgYmUgaW1wb3NzaWJsZS5cbiAqXG4gKiBJbnN0ZWFkLCB0aGlzIGZ1bmN0aW9uIFwiZml4ZXNcIiB0aGUgcmVsYXRpdmUgdXJscyB0byBiZSBhYnNvbHV0ZSBhY2NvcmRpbmcgdG8gdGhlIGN1cnJlbnQgcGFnZSBsb2NhdGlvbi5cbiAqXG4gKiBBIHJ1ZGltZW50YXJ5IHRlc3Qgc3VpdGUgaXMgbG9jYXRlZCBhdCBgdGVzdC9maXhVcmxzLmpzYCBhbmQgY2FuIGJlIHJ1biB2aWEgdGhlIGBucG0gdGVzdGAgY29tbWFuZC5cbiAqXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzKSB7XG4gIC8vIGdldCBjdXJyZW50IGxvY2F0aW9uXG4gIHZhciBsb2NhdGlvbiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgd2luZG93LmxvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJmaXhVcmxzIHJlcXVpcmVzIHdpbmRvdy5sb2NhdGlvblwiKTtcbiAgfVxuXG5cdC8vIGJsYW5rIG9yIG51bGw/XG5cdGlmICghY3NzIHx8IHR5cGVvZiBjc3MgIT09IFwic3RyaW5nXCIpIHtcblx0ICByZXR1cm4gY3NzO1xuICB9XG5cbiAgdmFyIGJhc2VVcmwgPSBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiArIGxvY2F0aW9uLmhvc3Q7XG4gIHZhciBjdXJyZW50RGlyID0gYmFzZVVybCArIGxvY2F0aW9uLnBhdGhuYW1lLnJlcGxhY2UoL1xcL1teXFwvXSokLywgXCIvXCIpO1xuXG5cdC8vIGNvbnZlcnQgZWFjaCB1cmwoLi4uKVxuXHQvKlxuXHRUaGlzIHJlZ3VsYXIgZXhwcmVzc2lvbiBpcyBqdXN0IGEgd2F5IHRvIHJlY3Vyc2l2ZWx5IG1hdGNoIGJyYWNrZXRzIHdpdGhpblxuXHRhIHN0cmluZy5cblxuXHQgL3VybFxccypcXCggID0gTWF0Y2ggb24gdGhlIHdvcmQgXCJ1cmxcIiB3aXRoIGFueSB3aGl0ZXNwYWNlIGFmdGVyIGl0IGFuZCB0aGVuIGEgcGFyZW5zXG5cdCAgICggID0gU3RhcnQgYSBjYXB0dXJpbmcgZ3JvdXBcblx0ICAgICAoPzogID0gU3RhcnQgYSBub24tY2FwdHVyaW5nIGdyb3VwXG5cdCAgICAgICAgIFteKShdICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgIFxcKCAgPSBNYXRjaCBhIHN0YXJ0IHBhcmVudGhlc2VzXG5cdCAgICAgICAgICAgICAoPzogID0gU3RhcnQgYW5vdGhlciBub24tY2FwdHVyaW5nIGdyb3Vwc1xuXHQgICAgICAgICAgICAgICAgIFteKShdKyAgPSBNYXRjaCBhbnl0aGluZyB0aGF0IGlzbid0IGEgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICB8ICA9IE9SXG5cdCAgICAgICAgICAgICAgICAgXFwoICA9IE1hdGNoIGEgc3RhcnQgcGFyZW50aGVzZXNcblx0ICAgICAgICAgICAgICAgICAgICAgW14pKF0qICA9IE1hdGNoIGFueXRoaW5nIHRoYXQgaXNuJ3QgYSBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgICAgIFxcKSAgPSBNYXRjaCBhIGVuZCBwYXJlbnRoZXNlc1xuXHQgICAgICAgICAgICAgKSAgPSBFbmQgR3JvdXBcbiAgICAgICAgICAgICAgKlxcKSA9IE1hdGNoIGFueXRoaW5nIGFuZCB0aGVuIGEgY2xvc2UgcGFyZW5zXG4gICAgICAgICAgKSAgPSBDbG9zZSBub24tY2FwdHVyaW5nIGdyb3VwXG4gICAgICAgICAgKiAgPSBNYXRjaCBhbnl0aGluZ1xuICAgICAgICkgID0gQ2xvc2UgY2FwdHVyaW5nIGdyb3VwXG5cdCBcXCkgID0gTWF0Y2ggYSBjbG9zZSBwYXJlbnNcblxuXHQgL2dpICA9IEdldCBhbGwgbWF0Y2hlcywgbm90IHRoZSBmaXJzdC4gIEJlIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqL1xuXHR2YXIgZml4ZWRDc3MgPSBjc3MucmVwbGFjZSgvdXJsXFxzKlxcKCgoPzpbXikoXXxcXCgoPzpbXikoXSt8XFwoW14pKF0qXFwpKSpcXCkpKilcXCkvZ2ksIGZ1bmN0aW9uKGZ1bGxNYXRjaCwgb3JpZ1VybCkge1xuXHRcdC8vIHN0cmlwIHF1b3RlcyAoaWYgdGhleSBleGlzdClcblx0XHR2YXIgdW5xdW90ZWRPcmlnVXJsID0gb3JpZ1VybFxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoL15cIiguKilcIiQvLCBmdW5jdGlvbihvLCAkMSl7IHJldHVybiAkMTsgfSlcblx0XHRcdC5yZXBsYWNlKC9eJyguKiknJC8sIGZ1bmN0aW9uKG8sICQxKXsgcmV0dXJuICQxOyB9KTtcblxuXHRcdC8vIGFscmVhZHkgYSBmdWxsIHVybD8gbm8gY2hhbmdlXG5cdFx0aWYgKC9eKCN8ZGF0YTp8aHR0cDpcXC9cXC98aHR0cHM6XFwvXFwvfGZpbGU6XFwvXFwvXFwvfFxccyokKS9pLnRlc3QodW5xdW90ZWRPcmlnVXJsKSkge1xuXHRcdCAgcmV0dXJuIGZ1bGxNYXRjaDtcblx0XHR9XG5cblx0XHQvLyBjb252ZXJ0IHRoZSB1cmwgdG8gYSBmdWxsIHVybFxuXHRcdHZhciBuZXdVcmw7XG5cblx0XHRpZiAodW5xdW90ZWRPcmlnVXJsLmluZGV4T2YoXCIvL1wiKSA9PT0gMCkge1xuXHRcdCAgXHQvL1RPRE86IHNob3VsZCB3ZSBhZGQgcHJvdG9jb2w/XG5cdFx0XHRuZXdVcmwgPSB1bnF1b3RlZE9yaWdVcmw7XG5cdFx0fSBlbHNlIGlmICh1bnF1b3RlZE9yaWdVcmwuaW5kZXhPZihcIi9cIikgPT09IDApIHtcblx0XHRcdC8vIHBhdGggc2hvdWxkIGJlIHJlbGF0aXZlIHRvIHRoZSBiYXNlIHVybFxuXHRcdFx0bmV3VXJsID0gYmFzZVVybCArIHVucXVvdGVkT3JpZ1VybDsgLy8gYWxyZWFkeSBzdGFydHMgd2l0aCAnLydcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcGF0aCBzaG91bGQgYmUgcmVsYXRpdmUgdG8gY3VycmVudCBkaXJlY3Rvcnlcblx0XHRcdG5ld1VybCA9IGN1cnJlbnREaXIgKyB1bnF1b3RlZE9yaWdVcmwucmVwbGFjZSgvXlxcLlxcLy8sIFwiXCIpOyAvLyBTdHJpcCBsZWFkaW5nICcuLydcblx0XHR9XG5cblx0XHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIHVybCguLi4pXG5cdFx0cmV0dXJuIFwidXJsKFwiICsgSlNPTi5zdHJpbmdpZnkobmV3VXJsKSArIFwiKVwiO1xuXHR9KTtcblxuXHQvLyBzZW5kIGJhY2sgdGhlIGZpeGVkIGNzc1xuXHRyZXR1cm4gZml4ZWRDc3M7XG59O1xuIiwiY29uc3QgU3RvcmFnZUh1YiA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLlN0b3JhZ2VIdWI7XG5jb25zdCBkYXRhID0gcmVxdWlyZSgnLi4vLi4vcmVzb3VyY2VzL21lbnUuanNvbicpO1xuU3RvcmFnZUh1Yi5zZXRKU09OKGRhdGEpO1xuU3RvcmFnZUh1Yi5zZXREYXRhKCdoZWxsbycsICd3b3JsZCcpXG4iLCIvLyBDb3B5cmlnaHQgSm95ZW50LCBJbmMuIGFuZCBvdGhlciBOb2RlIGNvbnRyaWJ1dG9ycy5cbi8vXG4vLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYVxuLy8gY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZVxuLy8gXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nXG4vLyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsXG4vLyBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0XG4vLyBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGVcbi8vIGZvbGxvd2luZyBjb25kaXRpb25zOlxuLy9cbi8vIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkXG4vLyBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbi8vXG4vLyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTXG4vLyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GXG4vLyBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOXG4vLyBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSxcbi8vIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUlxuLy8gT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRVxuLy8gVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS5cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgUiA9IHR5cGVvZiBSZWZsZWN0ID09PSAnb2JqZWN0JyA/IFJlZmxlY3QgOiBudWxsXG52YXIgUmVmbGVjdEFwcGx5ID0gUiAmJiB0eXBlb2YgUi5hcHBseSA9PT0gJ2Z1bmN0aW9uJ1xuICA/IFIuYXBwbHlcbiAgOiBmdW5jdGlvbiBSZWZsZWN0QXBwbHkodGFyZ2V0LCByZWNlaXZlciwgYXJncykge1xuICAgIHJldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbCh0YXJnZXQsIHJlY2VpdmVyLCBhcmdzKTtcbiAgfVxuXG52YXIgUmVmbGVjdE93bktleXNcbmlmIChSICYmIHR5cGVvZiBSLm93bktleXMgPT09ICdmdW5jdGlvbicpIHtcbiAgUmVmbGVjdE93bktleXMgPSBSLm93bktleXNcbn0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpXG4gICAgICAuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModGFyZ2V0KSk7XG4gIH07XG59IGVsc2Uge1xuICBSZWZsZWN0T3duS2V5cyA9IGZ1bmN0aW9uIFJlZmxlY3RPd25LZXlzKHRhcmdldCkge1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0YXJnZXQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBQcm9jZXNzRW1pdFdhcm5pbmcod2FybmluZykge1xuICBpZiAoY29uc29sZSAmJiBjb25zb2xlLndhcm4pIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbn1cblxudmFyIE51bWJlcklzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uIE51bWJlcklzTmFOKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIEV2ZW50RW1pdHRlcigpIHtcbiAgRXZlbnRFbWl0dGVyLmluaXQuY2FsbCh0aGlzKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gRXZlbnRFbWl0dGVyO1xubW9kdWxlLmV4cG9ydHMub25jZSA9IG9uY2U7XG5cbi8vIEJhY2t3YXJkcy1jb21wYXQgd2l0aCBub2RlIDAuMTAueFxuRXZlbnRFbWl0dGVyLkV2ZW50RW1pdHRlciA9IEV2ZW50RW1pdHRlcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzID0gdW5kZWZpbmVkO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fZXZlbnRzQ291bnQgPSAwO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzID0gdW5kZWZpbmVkO1xuXG4vLyBCeSBkZWZhdWx0IEV2ZW50RW1pdHRlcnMgd2lsbCBwcmludCBhIHdhcm5pbmcgaWYgbW9yZSB0aGFuIDEwIGxpc3RlbmVycyBhcmVcbi8vIGFkZGVkIHRvIGl0LiBUaGlzIGlzIGEgdXNlZnVsIGRlZmF1bHQgd2hpY2ggaGVscHMgZmluZGluZyBtZW1vcnkgbGVha3MuXG52YXIgZGVmYXVsdE1heExpc3RlbmVycyA9IDEwO1xuXG5mdW5jdGlvbiBjaGVja0xpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIGlmICh0eXBlb2YgbGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgXCJsaXN0ZW5lclwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBGdW5jdGlvbi4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIGxpc3RlbmVyKTtcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRXZlbnRFbWl0dGVyLCAnZGVmYXVsdE1heExpc3RlbmVycycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGVmYXVsdE1heExpc3RlbmVycztcbiAgfSxcbiAgc2V0OiBmdW5jdGlvbihhcmcpIHtcbiAgICBpZiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgfHwgYXJnIDwgMCB8fCBOdW1iZXJJc05hTihhcmcpKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVGhlIHZhbHVlIG9mIFwiZGVmYXVsdE1heExpc3RlbmVyc1wiIGlzIG91dCBvZiByYW5nZS4gSXQgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIuIFJlY2VpdmVkICcgKyBhcmcgKyAnLicpO1xuICAgIH1cbiAgICBkZWZhdWx0TWF4TGlzdGVuZXJzID0gYXJnO1xuICB9XG59KTtcblxuRXZlbnRFbWl0dGVyLmluaXQgPSBmdW5jdGlvbigpIHtcblxuICBpZiAodGhpcy5fZXZlbnRzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHRoaXMuX2V2ZW50cyA9PT0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpLl9ldmVudHMpIHtcbiAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgIHRoaXMuX2V2ZW50c0NvdW50ID0gMDtcbiAgfVxuXG4gIHRoaXMuX21heExpc3RlbmVycyA9IHRoaXMuX21heExpc3RlbmVycyB8fCB1bmRlZmluZWQ7XG59O1xuXG4vLyBPYnZpb3VzbHkgbm90IGFsbCBFbWl0dGVycyBzaG91bGQgYmUgbGltaXRlZCB0byAxMC4gVGhpcyBmdW5jdGlvbiBhbGxvd3Ncbi8vIHRoYXQgdG8gYmUgaW5jcmVhc2VkLiBTZXQgdG8gemVybyBmb3IgdW5saW1pdGVkLlxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBzZXRNYXhMaXN0ZW5lcnMobikge1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInIHx8IG4gPCAwIHx8IE51bWJlcklzTmFOKG4pKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBvZiBcIm5cIiBpcyBvdXQgb2YgcmFuZ2UuIEl0IG11c3QgYmUgYSBub24tbmVnYXRpdmUgbnVtYmVyLiBSZWNlaXZlZCAnICsgbiArICcuJyk7XG4gIH1cbiAgdGhpcy5fbWF4TGlzdGVuZXJzID0gbjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5mdW5jdGlvbiBfZ2V0TWF4TGlzdGVuZXJzKHRoYXQpIHtcbiAgaWYgKHRoYXQuX21heExpc3RlbmVycyA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBFdmVudEVtaXR0ZXIuZGVmYXVsdE1heExpc3RlbmVycztcbiAgcmV0dXJuIHRoYXQuX21heExpc3RlbmVycztcbn1cblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5nZXRNYXhMaXN0ZW5lcnMgPSBmdW5jdGlvbiBnZXRNYXhMaXN0ZW5lcnMoKSB7XG4gIHJldHVybiBfZ2V0TWF4TGlzdGVuZXJzKHRoaXMpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gZW1pdCh0eXBlKSB7XG4gIHZhciBhcmdzID0gW107XG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSBhcmdzLnB1c2goYXJndW1lbnRzW2ldKTtcbiAgdmFyIGRvRXJyb3IgPSAodHlwZSA9PT0gJ2Vycm9yJyk7XG5cbiAgdmFyIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgaWYgKGV2ZW50cyAhPT0gdW5kZWZpbmVkKVxuICAgIGRvRXJyb3IgPSAoZG9FcnJvciAmJiBldmVudHMuZXJyb3IgPT09IHVuZGVmaW5lZCk7XG4gIGVsc2UgaWYgKCFkb0Vycm9yKVxuICAgIHJldHVybiBmYWxzZTtcblxuICAvLyBJZiB0aGVyZSBpcyBubyAnZXJyb3InIGV2ZW50IGxpc3RlbmVyIHRoZW4gdGhyb3cuXG4gIGlmIChkb0Vycm9yKSB7XG4gICAgdmFyIGVyO1xuICAgIGlmIChhcmdzLmxlbmd0aCA+IDApXG4gICAgICBlciA9IGFyZ3NbMF07XG4gICAgaWYgKGVyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIC8vIE5vdGU6IFRoZSBjb21tZW50cyBvbiB0aGUgYHRocm93YCBsaW5lcyBhcmUgaW50ZW50aW9uYWwsIHRoZXkgc2hvd1xuICAgICAgLy8gdXAgaW4gTm9kZSdzIG91dHB1dCBpZiB0aGlzIHJlc3VsdHMgaW4gYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICAgIHRocm93IGVyOyAvLyBVbmhhbmRsZWQgJ2Vycm9yJyBldmVudFxuICAgIH1cbiAgICAvLyBBdCBsZWFzdCBnaXZlIHNvbWUga2luZCBvZiBjb250ZXh0IHRvIHRoZSB1c2VyXG4gICAgdmFyIGVyciA9IG5ldyBFcnJvcignVW5oYW5kbGVkIGVycm9yLicgKyAoZXIgPyAnICgnICsgZXIubWVzc2FnZSArICcpJyA6ICcnKSk7XG4gICAgZXJyLmNvbnRleHQgPSBlcjtcbiAgICB0aHJvdyBlcnI7IC8vIFVuaGFuZGxlZCAnZXJyb3InIGV2ZW50XG4gIH1cblxuICB2YXIgaGFuZGxlciA9IGV2ZW50c1t0eXBlXTtcblxuICBpZiAoaGFuZGxlciA9PT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBpZiAodHlwZW9mIGhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICBSZWZsZWN0QXBwbHkoaGFuZGxlciwgdGhpcywgYXJncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGxlbiA9IGhhbmRsZXIubGVuZ3RoO1xuICAgIHZhciBsaXN0ZW5lcnMgPSBhcnJheUNsb25lKGhhbmRsZXIsIGxlbik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgIFJlZmxlY3RBcHBseShsaXN0ZW5lcnNbaV0sIHRoaXMsIGFyZ3MpO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5mdW5jdGlvbiBfYWRkTGlzdGVuZXIodGFyZ2V0LCB0eXBlLCBsaXN0ZW5lciwgcHJlcGVuZCkge1xuICB2YXIgbTtcbiAgdmFyIGV2ZW50cztcbiAgdmFyIGV4aXN0aW5nO1xuXG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICBldmVudHMgPSB0YXJnZXQuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgdGFyZ2V0Ll9ldmVudHNDb3VudCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgLy8gVG8gYXZvaWQgcmVjdXJzaW9uIGluIHRoZSBjYXNlIHRoYXQgdHlwZSA9PT0gXCJuZXdMaXN0ZW5lclwiISBCZWZvcmVcbiAgICAvLyBhZGRpbmcgaXQgdG8gdGhlIGxpc3RlbmVycywgZmlyc3QgZW1pdCBcIm5ld0xpc3RlbmVyXCIuXG4gICAgaWYgKGV2ZW50cy5uZXdMaXN0ZW5lciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0YXJnZXQuZW1pdCgnbmV3TGlzdGVuZXInLCB0eXBlLFxuICAgICAgICAgICAgICAgICAgbGlzdGVuZXIubGlzdGVuZXIgPyBsaXN0ZW5lci5saXN0ZW5lciA6IGxpc3RlbmVyKTtcblxuICAgICAgLy8gUmUtYXNzaWduIGBldmVudHNgIGJlY2F1c2UgYSBuZXdMaXN0ZW5lciBoYW5kbGVyIGNvdWxkIGhhdmUgY2F1c2VkIHRoZVxuICAgICAgLy8gdGhpcy5fZXZlbnRzIHRvIGJlIGFzc2lnbmVkIHRvIGEgbmV3IG9iamVjdFxuICAgICAgZXZlbnRzID0gdGFyZ2V0Ll9ldmVudHM7XG4gICAgfVxuICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdO1xuICB9XG5cbiAgaWYgKGV4aXN0aW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPcHRpbWl6ZSB0aGUgY2FzZSBvZiBvbmUgbGlzdGVuZXIuIERvbid0IG5lZWQgdGhlIGV4dHJhIGFycmF5IG9iamVjdC5cbiAgICBleGlzdGluZyA9IGV2ZW50c1t0eXBlXSA9IGxpc3RlbmVyO1xuICAgICsrdGFyZ2V0Ll9ldmVudHNDb3VudDtcbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGV4aXN0aW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBBZGRpbmcgdGhlIHNlY29uZCBlbGVtZW50LCBuZWVkIHRvIGNoYW5nZSB0byBhcnJheS5cbiAgICAgIGV4aXN0aW5nID0gZXZlbnRzW3R5cGVdID1cbiAgICAgICAgcHJlcGVuZCA/IFtsaXN0ZW5lciwgZXhpc3RpbmddIDogW2V4aXN0aW5nLCBsaXN0ZW5lcl07XG4gICAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IGdvdCBhbiBhcnJheSwganVzdCBhcHBlbmQuXG4gICAgfSBlbHNlIGlmIChwcmVwZW5kKSB7XG4gICAgICBleGlzdGluZy51bnNoaWZ0KGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3RpbmcucHVzaChsaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgLy8gQ2hlY2sgZm9yIGxpc3RlbmVyIGxlYWtcbiAgICBtID0gX2dldE1heExpc3RlbmVycyh0YXJnZXQpO1xuICAgIGlmIChtID4gMCAmJiBleGlzdGluZy5sZW5ndGggPiBtICYmICFleGlzdGluZy53YXJuZWQpIHtcbiAgICAgIGV4aXN0aW5nLndhcm5lZCA9IHRydWU7XG4gICAgICAvLyBObyBlcnJvciBjb2RlIGZvciB0aGlzIHNpbmNlIGl0IGlzIGEgV2FybmluZ1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4XG4gICAgICB2YXIgdyA9IG5ldyBFcnJvcignUG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpc3RpbmcubGVuZ3RoICsgJyAnICsgU3RyaW5nKHR5cGUpICsgJyBsaXN0ZW5lcnMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdhZGRlZC4gVXNlIGVtaXR0ZXIuc2V0TWF4TGlzdGVuZXJzKCkgdG8gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdpbmNyZWFzZSBsaW1pdCcpO1xuICAgICAgdy5uYW1lID0gJ01heExpc3RlbmVyc0V4Y2VlZGVkV2FybmluZyc7XG4gICAgICB3LmVtaXR0ZXIgPSB0YXJnZXQ7XG4gICAgICB3LnR5cGUgPSB0eXBlO1xuICAgICAgdy5jb3VudCA9IGV4aXN0aW5nLmxlbmd0aDtcbiAgICAgIFByb2Nlc3NFbWl0V2FybmluZyh3KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmFkZExpc3RlbmVyID0gZnVuY3Rpb24gYWRkTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgcmV0dXJuIF9hZGRMaXN0ZW5lcih0aGlzLCB0eXBlLCBsaXN0ZW5lciwgZmFsc2UpO1xufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5vbiA9IEV2ZW50RW1pdHRlci5wcm90b3R5cGUuYWRkTGlzdGVuZXI7XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZExpc3RlbmVyID1cbiAgICBmdW5jdGlvbiBwcmVwZW5kTGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcbiAgICAgIHJldHVybiBfYWRkTGlzdGVuZXIodGhpcywgdHlwZSwgbGlzdGVuZXIsIHRydWUpO1xuICAgIH07XG5cbmZ1bmN0aW9uIG9uY2VXcmFwcGVyKCkge1xuICBpZiAoIXRoaXMuZmlyZWQpIHtcbiAgICB0aGlzLnRhcmdldC5yZW1vdmVMaXN0ZW5lcih0aGlzLnR5cGUsIHRoaXMud3JhcEZuKTtcbiAgICB0aGlzLmZpcmVkID0gdHJ1ZTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmNhbGwodGhpcy50YXJnZXQpO1xuICAgIHJldHVybiB0aGlzLmxpc3RlbmVyLmFwcGx5KHRoaXMudGFyZ2V0LCBhcmd1bWVudHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9vbmNlV3JhcCh0YXJnZXQsIHR5cGUsIGxpc3RlbmVyKSB7XG4gIHZhciBzdGF0ZSA9IHsgZmlyZWQ6IGZhbHNlLCB3cmFwRm46IHVuZGVmaW5lZCwgdGFyZ2V0OiB0YXJnZXQsIHR5cGU6IHR5cGUsIGxpc3RlbmVyOiBsaXN0ZW5lciB9O1xuICB2YXIgd3JhcHBlZCA9IG9uY2VXcmFwcGVyLmJpbmQoc3RhdGUpO1xuICB3cmFwcGVkLmxpc3RlbmVyID0gbGlzdGVuZXI7XG4gIHN0YXRlLndyYXBGbiA9IHdyYXBwZWQ7XG4gIHJldHVybiB3cmFwcGVkO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbiBvbmNlKHR5cGUsIGxpc3RlbmVyKSB7XG4gIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuICB0aGlzLm9uKHR5cGUsIF9vbmNlV3JhcCh0aGlzLCB0eXBlLCBsaXN0ZW5lcikpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucHJlcGVuZE9uY2VMaXN0ZW5lciA9XG4gICAgZnVuY3Rpb24gcHJlcGVuZE9uY2VMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgY2hlY2tMaXN0ZW5lcihsaXN0ZW5lcik7XG4gICAgICB0aGlzLnByZXBlbmRMaXN0ZW5lcih0eXBlLCBfb25jZVdyYXAodGhpcywgdHlwZSwgbGlzdGVuZXIpKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbi8vIEVtaXRzIGEgJ3JlbW92ZUxpc3RlbmVyJyBldmVudCBpZiBhbmQgb25seSBpZiB0aGUgbGlzdGVuZXIgd2FzIHJlbW92ZWQuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyID1cbiAgICBmdW5jdGlvbiByZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcikge1xuICAgICAgdmFyIGxpc3QsIGV2ZW50cywgcG9zaXRpb24sIGksIG9yaWdpbmFsTGlzdGVuZXI7XG5cbiAgICAgIGNoZWNrTGlzdGVuZXIobGlzdGVuZXIpO1xuXG4gICAgICBldmVudHMgPSB0aGlzLl9ldmVudHM7XG4gICAgICBpZiAoZXZlbnRzID09PSB1bmRlZmluZWQpXG4gICAgICAgIHJldHVybiB0aGlzO1xuXG4gICAgICBsaXN0ID0gZXZlbnRzW3R5cGVdO1xuICAgICAgaWYgKGxpc3QgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIGlmIChsaXN0ID09PSBsaXN0ZW5lciB8fCBsaXN0Lmxpc3RlbmVyID09PSBsaXN0ZW5lcikge1xuICAgICAgICBpZiAoLS10aGlzLl9ldmVudHNDb3VudCA9PT0gMClcbiAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBkZWxldGUgZXZlbnRzW3R5cGVdO1xuICAgICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgbGlzdC5saXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGxpc3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcG9zaXRpb24gPSAtMTtcblxuICAgICAgICBmb3IgKGkgPSBsaXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgaWYgKGxpc3RbaV0gPT09IGxpc3RlbmVyIHx8IGxpc3RbaV0ubGlzdGVuZXIgPT09IGxpc3RlbmVyKSB7XG4gICAgICAgICAgICBvcmlnaW5hbExpc3RlbmVyID0gbGlzdFtpXS5saXN0ZW5lcjtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwb3NpdGlvbiA8IDApXG4gICAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgICAgaWYgKHBvc2l0aW9uID09PSAwKVxuICAgICAgICAgIGxpc3Quc2hpZnQoKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgc3BsaWNlT25lKGxpc3QsIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsaXN0Lmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICBldmVudHNbdHlwZV0gPSBsaXN0WzBdO1xuXG4gICAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICB0aGlzLmVtaXQoJ3JlbW92ZUxpc3RlbmVyJywgdHlwZSwgb3JpZ2luYWxMaXN0ZW5lciB8fCBsaXN0ZW5lcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUub2ZmID0gRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVMaXN0ZW5lcjtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnMgPVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyh0eXBlKSB7XG4gICAgICB2YXIgbGlzdGVuZXJzLCBldmVudHMsIGk7XG5cbiAgICAgIGV2ZW50cyA9IHRoaXMuX2V2ZW50cztcbiAgICAgIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHRoaXM7XG5cbiAgICAgIC8vIG5vdCBsaXN0ZW5pbmcgZm9yIHJlbW92ZUxpc3RlbmVyLCBubyBuZWVkIHRvIGVtaXRcbiAgICAgIGlmIChldmVudHMucmVtb3ZlTGlzdGVuZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50c1t0eXBlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKC0tdGhpcy5fZXZlbnRzQ291bnQgPT09IDApXG4gICAgICAgICAgICB0aGlzLl9ldmVudHMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGRlbGV0ZSBldmVudHNbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIC8vIGVtaXQgcmVtb3ZlTGlzdGVuZXIgZm9yIGFsbCBsaXN0ZW5lcnMgb24gYWxsIGV2ZW50c1xuICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhldmVudHMpO1xuICAgICAgICB2YXIga2V5O1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgaWYgKGtleSA9PT0gJ3JlbW92ZUxpc3RlbmVyJykgY29udGludWU7XG4gICAgICAgICAgdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoa2V5KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnJlbW92ZUFsbExpc3RlbmVycygncmVtb3ZlTGlzdGVuZXInKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdGhpcy5fZXZlbnRzQ291bnQgPSAwO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgbGlzdGVuZXJzID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgICBpZiAodHlwZW9mIGxpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnJlbW92ZUxpc3RlbmVyKHR5cGUsIGxpc3RlbmVycyk7XG4gICAgICB9IGVsc2UgaWYgKGxpc3RlbmVycyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIExJRk8gb3JkZXJcbiAgICAgICAgZm9yIChpID0gbGlzdGVuZXJzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lcnNbaV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH07XG5cbmZ1bmN0aW9uIF9saXN0ZW5lcnModGFyZ2V0LCB0eXBlLCB1bndyYXApIHtcbiAgdmFyIGV2ZW50cyA9IHRhcmdldC5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgPT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gW107XG5cbiAgdmFyIGV2bGlzdGVuZXIgPSBldmVudHNbdHlwZV07XG4gIGlmIChldmxpc3RlbmVyID09PSB1bmRlZmluZWQpXG4gICAgcmV0dXJuIFtdO1xuXG4gIGlmICh0eXBlb2YgZXZsaXN0ZW5lciA9PT0gJ2Z1bmN0aW9uJylcbiAgICByZXR1cm4gdW53cmFwID8gW2V2bGlzdGVuZXIubGlzdGVuZXIgfHwgZXZsaXN0ZW5lcl0gOiBbZXZsaXN0ZW5lcl07XG5cbiAgcmV0dXJuIHVud3JhcCA/XG4gICAgdW53cmFwTGlzdGVuZXJzKGV2bGlzdGVuZXIpIDogYXJyYXlDbG9uZShldmxpc3RlbmVyLCBldmxpc3RlbmVyLmxlbmd0aCk7XG59XG5cbkV2ZW50RW1pdHRlci5wcm90b3R5cGUubGlzdGVuZXJzID0gZnVuY3Rpb24gbGlzdGVuZXJzKHR5cGUpIHtcbiAgcmV0dXJuIF9saXN0ZW5lcnModGhpcywgdHlwZSwgdHJ1ZSk7XG59O1xuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnJhd0xpc3RlbmVycyA9IGZ1bmN0aW9uIHJhd0xpc3RlbmVycyh0eXBlKSB7XG4gIHJldHVybiBfbGlzdGVuZXJzKHRoaXMsIHR5cGUsIGZhbHNlKTtcbn07XG5cbkV2ZW50RW1pdHRlci5saXN0ZW5lckNvdW50ID0gZnVuY3Rpb24oZW1pdHRlciwgdHlwZSkge1xuICBpZiAodHlwZW9mIGVtaXR0ZXIubGlzdGVuZXJDb3VudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxpc3RlbmVyQ291bnQuY2FsbChlbWl0dGVyLCB0eXBlKTtcbiAgfVxufTtcblxuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5saXN0ZW5lckNvdW50ID0gbGlzdGVuZXJDb3VudDtcbmZ1bmN0aW9uIGxpc3RlbmVyQ291bnQodHlwZSkge1xuICB2YXIgZXZlbnRzID0gdGhpcy5fZXZlbnRzO1xuXG4gIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkge1xuICAgIHZhciBldmxpc3RlbmVyID0gZXZlbnRzW3R5cGVdO1xuXG4gICAgaWYgKHR5cGVvZiBldmxpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9IGVsc2UgaWYgKGV2bGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV2bGlzdGVuZXIubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAwO1xufVxuXG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLmV2ZW50TmFtZXMgPSBmdW5jdGlvbiBldmVudE5hbWVzKCkge1xuICByZXR1cm4gdGhpcy5fZXZlbnRzQ291bnQgPiAwID8gUmVmbGVjdE93bktleXModGhpcy5fZXZlbnRzKSA6IFtdO1xufTtcblxuZnVuY3Rpb24gYXJyYXlDbG9uZShhcnIsIG4pIHtcbiAgdmFyIGNvcHkgPSBuZXcgQXJyYXkobik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKVxuICAgIGNvcHlbaV0gPSBhcnJbaV07XG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiBzcGxpY2VPbmUobGlzdCwgaW5kZXgpIHtcbiAgZm9yICg7IGluZGV4ICsgMSA8IGxpc3QubGVuZ3RoOyBpbmRleCsrKVxuICAgIGxpc3RbaW5kZXhdID0gbGlzdFtpbmRleCArIDFdO1xuICBsaXN0LnBvcCgpO1xufVxuXG5mdW5jdGlvbiB1bndyYXBMaXN0ZW5lcnMoYXJyKSB7XG4gIHZhciByZXQgPSBuZXcgQXJyYXkoYXJyLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcmV0Lmxlbmd0aDsgKytpKSB7XG4gICAgcmV0W2ldID0gYXJyW2ldLmxpc3RlbmVyIHx8IGFycltpXTtcbiAgfVxuICByZXR1cm4gcmV0O1xufVxuXG5mdW5jdGlvbiBvbmNlKGVtaXR0ZXIsIG5hbWUpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICBmdW5jdGlvbiBldmVudExpc3RlbmVyKCkge1xuICAgICAgaWYgKGVycm9yTGlzdGVuZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBlbWl0dGVyLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIGVycm9yTGlzdGVuZXIpO1xuICAgICAgfVxuICAgICAgcmVzb2x2ZShbXS5zbGljZS5jYWxsKGFyZ3VtZW50cykpO1xuICAgIH07XG4gICAgdmFyIGVycm9yTGlzdGVuZXI7XG5cbiAgICAvLyBBZGRpbmcgYW4gZXJyb3IgbGlzdGVuZXIgaXMgbm90IG9wdGlvbmFsIGJlY2F1c2VcbiAgICAvLyBpZiBhbiBlcnJvciBpcyB0aHJvd24gb24gYW4gZXZlbnQgZW1pdHRlciB3ZSBjYW5ub3RcbiAgICAvLyBndWFyYW50ZWUgdGhhdCB0aGUgYWN0dWFsIGV2ZW50IHdlIGFyZSB3YWl0aW5nIHdpbGxcbiAgICAvLyBiZSBmaXJlZC4gVGhlIHJlc3VsdCBjb3VsZCBiZSBhIHNpbGVudCB3YXkgdG8gY3JlYXRlXG4gICAgLy8gbWVtb3J5IG9yIGZpbGUgZGVzY3JpcHRvciBsZWFrcywgd2hpY2ggaXMgc29tZXRoaW5nXG4gICAgLy8gd2Ugc2hvdWxkIGF2b2lkLlxuICAgIGlmIChuYW1lICE9PSAnZXJyb3InKSB7XG4gICAgICBlcnJvckxpc3RlbmVyID0gZnVuY3Rpb24gZXJyb3JMaXN0ZW5lcihlcnIpIHtcbiAgICAgICAgZW1pdHRlci5yZW1vdmVMaXN0ZW5lcihuYW1lLCBldmVudExpc3RlbmVyKTtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICB9O1xuXG4gICAgICBlbWl0dGVyLm9uY2UoJ2Vycm9yJywgZXJyb3JMaXN0ZW5lcik7XG4gICAgfVxuXG4gICAgZW1pdHRlci5vbmNlKG5hbWUsIGV2ZW50TGlzdGVuZXIpO1xuICB9KTtcbn1cbiIsInZhciBIYW5kbGViYXJzID0gcmVxdWlyZSgnL2hvbWUvY2lyY2xlY2kvcHJvamVjdC9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9ydW50aW1lLmpzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IChIYW5kbGViYXJzWydkZWZhdWx0J10gfHwgSGFuZGxlYmFycykudGVtcGxhdGUoe1wiY29tcGlsZXJcIjpbOCxcIj49IDQuMy4wXCJdLFwibWFpblwiOmZ1bmN0aW9uKGNvbnRhaW5lcixkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gICAgdmFyIGhlbHBlciwgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH07XG5cbiAgcmV0dXJuIFwiQmFzZSBub3RpZmljYXRpb246IFwiXG4gICAgKyBjb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbigoKGhlbHBlciA9IChoZWxwZXIgPSBsb29rdXBQcm9wZXJ0eShoZWxwZXJzLFwibWVzc2FnZVwiKSB8fCAoZGVwdGgwICE9IG51bGwgPyBsb29rdXBQcm9wZXJ0eShkZXB0aDAsXCJtZXNzYWdlXCIpIDogZGVwdGgwKSkgIT0gbnVsbCA/IGhlbHBlciA6IGNvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nKSwodHlwZW9mIGhlbHBlciA9PT0gXCJmdW5jdGlvblwiID8gaGVscGVyLmNhbGwoZGVwdGgwICE9IG51bGwgPyBkZXB0aDAgOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KSx7XCJuYW1lXCI6XCJtZXNzYWdlXCIsXCJoYXNoXCI6e30sXCJkYXRhXCI6ZGF0YSxcImxvY1wiOntcInN0YXJ0XCI6e1wibGluZVwiOjEsXCJjb2x1bW5cIjoxOX0sXCJlbmRcIjp7XCJsaW5lXCI6MSxcImNvbHVtblwiOjMwfX19KSA6IGhlbHBlcikpKVxuICAgICsgXCJcXG5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBlbHNlIHsgdmFyIG5ld09iaiA9IHt9OyBpZiAob2JqICE9IG51bGwpIHsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IG5ld09ialsnZGVmYXVsdCddID0gb2JqOyByZXR1cm4gbmV3T2JqOyB9IH1cblxudmFyIF9oYW5kbGViYXJzQmFzZSA9IHJlcXVpcmUoJy4vaGFuZGxlYmFycy9iYXNlJyk7XG5cbnZhciBiYXNlID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoX2hhbmRsZWJhcnNCYXNlKTtcblxuLy8gRWFjaCBvZiB0aGVzZSBhdWdtZW50IHRoZSBIYW5kbGViYXJzIG9iamVjdC4gTm8gbmVlZCB0byBzZXR1cCBoZXJlLlxuLy8gKFRoaXMgaXMgZG9uZSB0byBlYXNpbHkgc2hhcmUgY29kZSBiZXR3ZWVuIGNvbW1vbmpzIGFuZCBicm93c2UgZW52cylcblxudmFyIF9oYW5kbGViYXJzU2FmZVN0cmluZyA9IHJlcXVpcmUoJy4vaGFuZGxlYmFycy9zYWZlLXN0cmluZycpO1xuXG52YXIgX2hhbmRsZWJhcnNTYWZlU3RyaW5nMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2hhbmRsZWJhcnNTYWZlU3RyaW5nKTtcblxudmFyIF9oYW5kbGViYXJzRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL2V4Y2VwdGlvbicpO1xuXG52YXIgX2hhbmRsZWJhcnNFeGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc0V4Y2VwdGlvbik7XG5cbnZhciBfaGFuZGxlYmFyc1V0aWxzID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL3V0aWxzJyk7XG5cbnZhciBVdGlscyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKF9oYW5kbGViYXJzVXRpbHMpO1xuXG52YXIgX2hhbmRsZWJhcnNSdW50aW1lID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL3J1bnRpbWUnKTtcblxudmFyIHJ1bnRpbWUgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfaGFuZGxlYmFyc1J1bnRpbWUpO1xuXG52YXIgX2hhbmRsZWJhcnNOb0NvbmZsaWN0ID0gcmVxdWlyZSgnLi9oYW5kbGViYXJzL25vLWNvbmZsaWN0Jyk7XG5cbnZhciBfaGFuZGxlYmFyc05vQ29uZmxpY3QyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfaGFuZGxlYmFyc05vQ29uZmxpY3QpO1xuXG4vLyBGb3IgY29tcGF0aWJpbGl0eSBhbmQgdXNhZ2Ugb3V0c2lkZSBvZiBtb2R1bGUgc3lzdGVtcywgbWFrZSB0aGUgSGFuZGxlYmFycyBvYmplY3QgYSBuYW1lc3BhY2VcbmZ1bmN0aW9uIGNyZWF0ZSgpIHtcbiAgdmFyIGhiID0gbmV3IGJhc2UuSGFuZGxlYmFyc0Vudmlyb25tZW50KCk7XG5cbiAgVXRpbHMuZXh0ZW5kKGhiLCBiYXNlKTtcbiAgaGIuU2FmZVN0cmluZyA9IF9oYW5kbGViYXJzU2FmZVN0cmluZzJbJ2RlZmF1bHQnXTtcbiAgaGIuRXhjZXB0aW9uID0gX2hhbmRsZWJhcnNFeGNlcHRpb24yWydkZWZhdWx0J107XG4gIGhiLlV0aWxzID0gVXRpbHM7XG4gIGhiLmVzY2FwZUV4cHJlc3Npb24gPSBVdGlscy5lc2NhcGVFeHByZXNzaW9uO1xuXG4gIGhiLlZNID0gcnVudGltZTtcbiAgaGIudGVtcGxhdGUgPSBmdW5jdGlvbiAoc3BlYykge1xuICAgIHJldHVybiBydW50aW1lLnRlbXBsYXRlKHNwZWMsIGhiKTtcbiAgfTtcblxuICByZXR1cm4gaGI7XG59XG5cbnZhciBpbnN0ID0gY3JlYXRlKCk7XG5pbnN0LmNyZWF0ZSA9IGNyZWF0ZTtcblxuX2hhbmRsZWJhcnNOb0NvbmZsaWN0MlsnZGVmYXVsdCddKGluc3QpO1xuXG5pbnN0WydkZWZhdWx0J10gPSBpbnN0O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBpbnN0O1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TG5KMWJuUnBiV1V1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3T3pzN09FSkJRWE5DTEcxQ1FVRnRRanM3U1VGQk4wSXNTVUZCU1RzN096czdiME5CU1U4c01FSkJRVEJDT3pzN08yMURRVU16UWl4M1FrRkJkMEk3T3pzN0swSkJRM1pDTEc5Q1FVRnZRanM3U1VGQkwwSXNTMEZCU3pzN2FVTkJRMUVzYzBKQlFYTkNPenRKUVVGdVF5eFBRVUZQT3p0dlEwRkZTU3d3UWtGQk1FSTdPenM3TzBGQlIycEVMRk5CUVZNc1RVRkJUU3hIUVVGSE8wRkJRMmhDTEUxQlFVa3NSVUZCUlN4SFFVRkhMRWxCUVVrc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RlFVRkZMRU5CUVVNN08wRkJSVEZETEU5QlFVc3NRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzBGQlEzWkNMRWxCUVVVc1EwRkJReXhWUVVGVkxHOURRVUZoTEVOQlFVTTdRVUZETTBJc1NVRkJSU3hEUVVGRExGTkJRVk1zYlVOQlFWa3NRMEZCUXp0QlFVTjZRaXhKUVVGRkxFTkJRVU1zUzBGQlN5eEhRVUZITEV0QlFVc3NRMEZCUXp0QlFVTnFRaXhKUVVGRkxFTkJRVU1zWjBKQlFXZENMRWRCUVVjc1MwRkJTeXhEUVVGRExHZENRVUZuUWl4RFFVRkRPenRCUVVVM1F5eEpRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJRenRCUVVOb1FpeEpRVUZGTEVOQlFVTXNVVUZCVVN4SFFVRkhMRlZCUVZNc1NVRkJTU3hGUVVGRk8wRkJRek5DTEZkQlFVOHNUMEZCVHl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdSMEZEYmtNc1EwRkJRenM3UVVGRlJpeFRRVUZQTEVWQlFVVXNRMEZCUXp0RFFVTllPenRCUVVWRUxFbEJRVWtzU1VGQlNTeEhRVUZITEUxQlFVMHNSVUZCUlN4RFFVRkRPMEZCUTNCQ0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRPenRCUVVWeVFpeHJRMEZCVnl4SlFVRkpMRU5CUVVNc1EwRkJRenM3UVVGRmFrSXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF6czdjVUpCUlZJc1NVRkJTU0lzSW1acGJHVWlPaUpvWVc1a2JHVmlZWEp6TG5KMWJuUnBiV1V1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJpWVhObElHWnliMjBnSnk0dmFHRnVaR3hsWW1GeWN5OWlZWE5sSnp0Y2JseHVMeThnUldGamFDQnZaaUIwYUdWelpTQmhkV2R0Wlc1MElIUm9aU0JJWVc1a2JHVmlZWEp6SUc5aWFtVmpkQzRnVG04Z2JtVmxaQ0IwYnlCelpYUjFjQ0JvWlhKbExseHVMeThnS0ZSb2FYTWdhWE1nWkc5dVpTQjBieUJsWVhOcGJIa2djMmhoY21VZ1kyOWtaU0JpWlhSM1pXVnVJR052YlcxdmJtcHpJR0Z1WkNCaWNtOTNjMlVnWlc1MmN5bGNibWx0Y0c5eWRDQlRZV1psVTNSeWFXNW5JR1p5YjIwZ0p5NHZhR0Z1Wkd4bFltRnljeTl6WVdabExYTjBjbWx1WnljN1hHNXBiWEJ2Y25RZ1JYaGpaWEIwYVc5dUlHWnliMjBnSnk0dmFHRnVaR3hsWW1GeWN5OWxlR05sY0hScGIyNG5PMXh1YVcxd2IzSjBJQ29nWVhNZ1ZYUnBiSE1nWm5KdmJTQW5MaTlvWVc1a2JHVmlZWEp6TDNWMGFXeHpKenRjYm1sdGNHOXlkQ0FxSUdGeklISjFiblJwYldVZ1puSnZiU0FuTGk5b1lXNWtiR1ZpWVhKekwzSjFiblJwYldVbk8xeHVYRzVwYlhCdmNuUWdibTlEYjI1bWJHbGpkQ0JtY205dElDY3VMMmhoYm1Sc1pXSmhjbk12Ym04dFkyOXVabXhwWTNRbk8xeHVYRzR2THlCR2IzSWdZMjl0Y0dGMGFXSnBiR2wwZVNCaGJtUWdkWE5oWjJVZ2IzVjBjMmxrWlNCdlppQnRiMlIxYkdVZ2MzbHpkR1Z0Y3l3Z2JXRnJaU0IwYUdVZ1NHRnVaR3hsWW1GeWN5QnZZbXBsWTNRZ1lTQnVZVzFsYzNCaFkyVmNibVoxYm1OMGFXOXVJR055WldGMFpTZ3BJSHRjYmlBZ2JHVjBJR2hpSUQwZ2JtVjNJR0poYzJVdVNHRnVaR3hsWW1GeWMwVnVkbWx5YjI1dFpXNTBLQ2s3WEc1Y2JpQWdWWFJwYkhNdVpYaDBaVzVrS0doaUxDQmlZWE5sS1R0Y2JpQWdhR0l1VTJGbVpWTjBjbWx1WnlBOUlGTmhabVZUZEhKcGJtYzdYRzRnSUdoaUxrVjRZMlZ3ZEdsdmJpQTlJRVY0WTJWd2RHbHZianRjYmlBZ2FHSXVWWFJwYkhNZ1BTQlZkR2xzY3p0Y2JpQWdhR0l1WlhOallYQmxSWGh3Y21WemMybHZiaUE5SUZWMGFXeHpMbVZ6WTJGd1pVVjRjSEpsYzNOcGIyNDdYRzVjYmlBZ2FHSXVWazBnUFNCeWRXNTBhVzFsTzF4dUlDQm9ZaTUwWlcxd2JHRjBaU0E5SUdaMWJtTjBhVzl1S0hOd1pXTXBJSHRjYmlBZ0lDQnlaWFIxY200Z2NuVnVkR2x0WlM1MFpXMXdiR0YwWlNoemNHVmpMQ0JvWWlrN1hHNGdJSDA3WEc1Y2JpQWdjbVYwZFhKdUlHaGlPMXh1ZlZ4dVhHNXNaWFFnYVc1emRDQTlJR055WldGMFpTZ3BPMXh1YVc1emRDNWpjbVZoZEdVZ1BTQmpjbVZoZEdVN1hHNWNibTV2UTI5dVpteHBZM1FvYVc1emRDazdYRzVjYm1sdWMzUmJKMlJsWm1GMWJIUW5YU0E5SUdsdWMzUTdYRzVjYm1WNGNHOXlkQ0JrWldaaGRXeDBJR2x1YzNRN1hHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2Jsb2NrSGVscGVyTWlzc2luZycsIGZ1bmN0aW9uIChjb250ZXh0LCBvcHRpb25zKSB7XG4gICAgdmFyIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmIChjb250ZXh0ID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZm4odGhpcyk7XG4gICAgfSBlbHNlIGlmIChjb250ZXh0ID09PSBmYWxzZSB8fCBjb250ZXh0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpbnZlcnNlKHRoaXMpO1xuICAgIH0gZWxzZSBpZiAoX3V0aWxzLmlzQXJyYXkoY29udGV4dCkpIHtcbiAgICAgIGlmIChjb250ZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuaWRzKSB7XG4gICAgICAgICAgb3B0aW9ucy5pZHMgPSBbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzLmVhY2goY29udGV4dCwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gaW52ZXJzZSh0aGlzKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICB2YXIgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgICAgICBkYXRhLmNvbnRleHRQYXRoID0gX3V0aWxzLmFwcGVuZENvbnRleHRQYXRoKG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCwgb3B0aW9ucy5uYW1lKTtcbiAgICAgICAgb3B0aW9ucyA9IHsgZGF0YTogZGF0YSB9O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4oY29udGV4dCwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJobGJIQmxjbk12WW14dlkyc3RhR1ZzY0dWeUxXMXBjM05wYm1jdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenR4UWtGQmQwUXNWVUZCVlRzN2NVSkJSVzVFTEZWQlFWTXNVVUZCVVN4RlFVRkZPMEZCUTJoRExGVkJRVkVzUTBGQlF5eGpRVUZqTEVOQlFVTXNiMEpCUVc5Q0xFVkJRVVVzVlVGQlV5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkZPMEZCUTNaRkxGRkJRVWtzVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4UFFVRlBPMUZCUXpOQ0xFVkJRVVVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRPenRCUVVWc1FpeFJRVUZKTEU5QlFVOHNTMEZCU3l4SlFVRkpMRVZCUVVVN1FVRkRjRUlzWVVGQlR5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRha0lzVFVGQlRTeEpRVUZKTEU5QlFVOHNTMEZCU3l4TFFVRkxMRWxCUVVrc1QwRkJUeXhKUVVGSkxFbEJRVWtzUlVGQlJUdEJRVU12UXl4aFFVRlBMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dExRVU4wUWl4TlFVRk5MRWxCUVVrc1pVRkJVU3hQUVVGUExFTkJRVU1zUlVGQlJUdEJRVU16UWl4VlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF5eEZRVUZGTzBGQlEzUkNMRmxCUVVrc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJUdEJRVU5tTEdsQ1FVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMU5CUXpsQ096dEJRVVZFTEdWQlFVOHNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMDlCUTJoRUxFMUJRVTA3UVVGRFRDeGxRVUZQTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRQUVVOMFFqdExRVU5HTEUxQlFVMDdRVUZEVEN4VlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTXZRaXhaUVVGSkxFbEJRVWtzUjBGQlJ5eHRRa0ZCV1N4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGRGNrTXNXVUZCU1N4RFFVRkRMRmRCUVZjc1IwRkJSeXg1UWtGRGFrSXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRM2hDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUTJJc1EwRkJRenRCUVVOR0xHVkJRVThzUjBGQlJ5eEZRVUZGTEVsQlFVa3NSVUZCUlN4SlFVRkpMRVZCUVVVc1EwRkJRenRQUVVNeFFqczdRVUZGUkN4aFFVRlBMRVZCUVVVc1EwRkJReXhQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVOQlFVTTdTMEZETjBJN1IwRkRSaXhEUVVGRExFTkJRVU03UTBGRFNpSXNJbVpwYkdVaU9pSmliRzlqYXkxb1pXeHdaWEl0YldsemMybHVaeTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN0lHRndjR1Z1WkVOdmJuUmxlSFJRWVhSb0xDQmpjbVZoZEdWR2NtRnRaU3dnYVhOQmNuSmhlU0I5SUdaeWIyMGdKeTR1TDNWMGFXeHpKenRjYmx4dVpYaHdiM0owSUdSbFptRjFiSFFnWm5WdVkzUnBiMjRvYVc1emRHRnVZMlVwSUh0Y2JpQWdhVzV6ZEdGdVkyVXVjbVZuYVhOMFpYSklaV3h3WlhJb0oySnNiMk5yU0dWc2NHVnlUV2x6YzJsdVp5Y3NJR1oxYm1OMGFXOXVLR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnNaWFFnYVc1MlpYSnpaU0E5SUc5d2RHbHZibk11YVc1MlpYSnpaU3hjYmlBZ0lDQWdJR1p1SUQwZ2IzQjBhVzl1Y3k1bWJqdGNibHh1SUNBZ0lHbG1JQ2hqYjI1MFpYaDBJRDA5UFNCMGNuVmxLU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdabTRvZEdocGN5azdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGpiMjUwWlhoMElEMDlQU0JtWVd4elpTQjhmQ0JqYjI1MFpYaDBJRDA5SUc1MWJHd3BJSHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnBiblpsY25ObEtIUm9hWE1wTzF4dUlDQWdJSDBnWld4elpTQnBaaUFvYVhOQmNuSmhlU2hqYjI1MFpYaDBLU2tnZTF4dUlDQWdJQ0FnYVdZZ0tHTnZiblJsZUhRdWJHVnVaM1JvSUQ0Z01Da2dlMXh1SUNBZ0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1cFpITXBJSHRjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6TG1sa2N5QTlJRnR2Y0hScGIyNXpMbTVoYldWZE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR2x1YzNSaGJtTmxMbWhsYkhCbGNuTXVaV0ZqYUNoamIyNTBaWGgwTENCdmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUhKbGRIVnliaUJwYm5abGNuTmxLSFJvYVhNcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1a1lYUmhJQ1ltSUc5d2RHbHZibk11YVdSektTQjdYRzRnSUNBZ0lDQWdJR3hsZENCa1lYUmhJRDBnWTNKbFlYUmxSbkpoYldVb2IzQjBhVzl1Y3k1a1lYUmhLVHRjYmlBZ0lDQWdJQ0FnWkdGMFlTNWpiMjUwWlhoMFVHRjBhQ0E5SUdGd2NHVnVaRU52Ym5SbGVIUlFZWFJvS0Z4dUlDQWdJQ0FnSUNBZ0lHOXdkR2x2Ym5NdVpHRjBZUzVqYjI1MFpYaDBVR0YwYUN4Y2JpQWdJQ0FnSUNBZ0lDQnZjSFJwYjI1ekxtNWhiV1ZjYmlBZ0lDQWdJQ0FnS1R0Y2JpQWdJQ0FnSUNBZ2IzQjBhVzl1Y3lBOUlIc2daR0YwWVRvZ1pHRjBZU0I5TzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnWm00b1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3lrN1hHNGdJQ0FnZlZ4dUlDQjlLVHRjYm4xY2JpSmRmUT09XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4uL2V4Y2VwdGlvbicpO1xuXG52YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2VhY2gnLCBmdW5jdGlvbiAoY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ011c3QgcGFzcyBpdGVyYXRvciB0byAjZWFjaCcpO1xuICAgIH1cblxuICAgIHZhciBmbiA9IG9wdGlvbnMuZm4sXG4gICAgICAgIGludmVyc2UgPSBvcHRpb25zLmludmVyc2UsXG4gICAgICAgIGkgPSAwLFxuICAgICAgICByZXQgPSAnJyxcbiAgICAgICAgZGF0YSA9IHVuZGVmaW5lZCxcbiAgICAgICAgY29udGV4dFBhdGggPSB1bmRlZmluZWQ7XG5cbiAgICBpZiAob3B0aW9ucy5kYXRhICYmIG9wdGlvbnMuaWRzKSB7XG4gICAgICBjb250ZXh0UGF0aCA9IF91dGlscy5hcHBlbmRDb250ZXh0UGF0aChvcHRpb25zLmRhdGEuY29udGV4dFBhdGgsIG9wdGlvbnMuaWRzWzBdKSArICcuJztcbiAgICB9XG5cbiAgICBpZiAoX3V0aWxzLmlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGF0YSkge1xuICAgICAgZGF0YSA9IF91dGlscy5jcmVhdGVGcmFtZShvcHRpb25zLmRhdGEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4ZWNJdGVyYXRpb24oZmllbGQsIGluZGV4LCBsYXN0KSB7XG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICBkYXRhLmtleSA9IGZpZWxkO1xuICAgICAgICBkYXRhLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIGRhdGEuZmlyc3QgPSBpbmRleCA9PT0gMDtcbiAgICAgICAgZGF0YS5sYXN0ID0gISFsYXN0O1xuXG4gICAgICAgIGlmIChjb250ZXh0UGF0aCkge1xuICAgICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBjb250ZXh0UGF0aCArIGZpZWxkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldCA9IHJldCArIGZuKGNvbnRleHRbZmllbGRdLCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBfdXRpbHMuYmxvY2tQYXJhbXMoW2NvbnRleHRbZmllbGRdLCBmaWVsZF0sIFtjb250ZXh0UGF0aCArIGZpZWxkLCBudWxsXSlcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0ID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKF91dGlscy5pc0FycmF5KGNvbnRleHQpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGlmIChpIGluIGNvbnRleHQpIHtcbiAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsLlN5bWJvbCAmJiBjb250ZXh0W2dsb2JhbC5TeW1ib2wuaXRlcmF0b3JdKSB7XG4gICAgICAgIHZhciBuZXdDb250ZXh0ID0gW107XG4gICAgICAgIHZhciBpdGVyYXRvciA9IGNvbnRleHRbZ2xvYmFsLlN5bWJvbC5pdGVyYXRvcl0oKTtcbiAgICAgICAgZm9yICh2YXIgaXQgPSBpdGVyYXRvci5uZXh0KCk7ICFpdC5kb25lOyBpdCA9IGl0ZXJhdG9yLm5leHQoKSkge1xuICAgICAgICAgIG5ld0NvbnRleHQucHVzaChpdC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29udGV4dCA9IG5ld0NvbnRleHQ7XG4gICAgICAgIGZvciAodmFyIGogPSBjb250ZXh0Lmxlbmd0aDsgaSA8IGo7IGkrKykge1xuICAgICAgICAgIGV4ZWNJdGVyYXRpb24oaSwgaSwgaSA9PT0gY29udGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB2YXIgcHJpb3JLZXkgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBPYmplY3Qua2V5cyhjb250ZXh0KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIHJ1bm5pbmcgdGhlIGl0ZXJhdGlvbnMgb25lIHN0ZXAgb3V0IG9mIHN5bmMgc28gd2UgY2FuIGRldGVjdFxuICAgICAgICAgICAgLy8gdGhlIGxhc3QgaXRlcmF0aW9uIHdpdGhvdXQgaGF2ZSB0byBzY2FuIHRoZSBvYmplY3QgdHdpY2UgYW5kIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYW4gaXRlcm1lZGlhdGUga2V5cyBhcnJheS5cbiAgICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIGV4ZWNJdGVyYXRpb24ocHJpb3JLZXksIGkgLSAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByaW9yS2V5ID0ga2V5O1xuICAgICAgICAgICAgaSsrO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChwcmlvcktleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBleGVjSXRlcmF0aW9uKHByaW9yS2V5LCBpIC0gMSwgdHJ1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpID09PSAwKSB7XG4gICAgICByZXQgPSBpbnZlcnNlKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZaV0ZqYUM1cWN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenM3TzNGQ1FVMVBMRlZCUVZVN08zbENRVU5MTEdOQlFXTTdPenM3Y1VKQlJYSkNMRlZCUVZNc1VVRkJVU3hGUVVGRk8wRkJRMmhETEZWQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1RVRkJUU3hGUVVGRkxGVkJRVk1zVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlR0QlFVTjZSQ3hSUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTzBGQlExb3NXVUZCVFN3eVFrRkJZeXcyUWtGQk5rSXNRMEZCUXl4RFFVRkRPMHRCUTNCRU96dEJRVVZFTEZGQlFVa3NSVUZCUlN4SFFVRkhMRTlCUVU4c1EwRkJReXhGUVVGRk8xRkJRMnBDTEU5QlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNc1QwRkJUenRSUVVONlFpeERRVUZETEVkQlFVY3NRMEZCUXp0UlFVTk1MRWRCUVVjc1IwRkJSeXhGUVVGRk8xRkJRMUlzU1VGQlNTeFpRVUZCTzFGQlEwb3NWMEZCVnl4WlFVRkJMRU5CUVVNN08wRkJSV1FzVVVGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4SlFVRkpMRTlCUVU4c1EwRkJReXhIUVVGSExFVkJRVVU3UVVGREwwSXNhVUpCUVZjc1IwRkRWQ3g1UWtGQmEwSXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF6dExRVU55UlRzN1FVRkZSQ3hSUVVGSkxHdENRVUZYTEU5QlFVOHNRMEZCUXl4RlFVRkZPMEZCUTNaQ0xHRkJRVThzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRemxDT3p0QlFVVkVMRkZCUVVrc1QwRkJUeXhEUVVGRExFbEJRVWtzUlVGQlJUdEJRVU5vUWl4VlFVRkpMRWRCUVVjc2JVSkJRVmtzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMHRCUTJ4RE96dEJRVVZFTEdGQlFWTXNZVUZCWVN4RFFVRkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFVkJRVVVzU1VGQlNTeEZRVUZGTzBGQlEzcERMRlZCUVVrc1NVRkJTU3hGUVVGRk8wRkJRMUlzV1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRha0lzV1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1FVRkRia0lzV1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM3BDTEZsQlFVa3NRMEZCUXl4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6czdRVUZGYmtJc1dVRkJTU3hYUVVGWExFVkJRVVU3UVVGRFppeGpRVUZKTEVOQlFVTXNWMEZCVnl4SFFVRkhMRmRCUVZjc1IwRkJSeXhMUVVGTExFTkJRVU03VTBGRGVFTTdUMEZEUmpzN1FVRkZSQ3hUUVVGSExFZEJRMFFzUjBGQlJ5eEhRVU5JTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVU3UVVGRGFrSXNXVUZCU1N4RlFVRkZMRWxCUVVrN1FVRkRWaXh0UWtGQlZ5eEZRVUZGTEcxQ1FVTllMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RlFVTjJRaXhEUVVGRExGZEJRVmNzUjBGQlJ5eExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUXpWQ08wOUJRMFlzUTBGQlF5eERRVUZETzB0QlEwNDdPMEZCUlVRc1VVRkJTU3hQUVVGUExFbEJRVWtzVDBGQlR5eFBRVUZQTEV0QlFVc3NVVUZCVVN4RlFVRkZPMEZCUXpGRExGVkJRVWtzWlVGQlVTeFBRVUZQTEVOQlFVTXNSVUZCUlR0QlFVTndRaXhoUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEU5QlFVOHNRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTjJReXhqUVVGSkxFTkJRVU1zU1VGQlNTeFBRVUZQTEVWQlFVVTdRVUZEYUVJc2VVSkJRV0VzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1MwRkJTeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMWRCUXk5RE8xTkJRMFk3VDBGRFJpeE5RVUZOTEVsQlFVa3NUVUZCVFN4RFFVRkRMRTFCUVUwc1NVRkJTU3hQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1JVRkJSVHRCUVVNelJDeFpRVUZOTEZWQlFWVXNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRkRUlzV1VGQlRTeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXp0QlFVTnVSQ3hoUVVGTExFbEJRVWtzUlVGQlJTeEhRVUZITEZGQlFWRXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUlN4SFFVRkhMRkZCUVZFc1EwRkJReXhKUVVGSkxFVkJRVVVzUlVGQlJUdEJRVU0zUkN4dlFrRkJWU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1UwRkRNMEk3UVVGRFJDeGxRVUZQTEVkQlFVY3NWVUZCVlN4RFFVRkRPMEZCUTNKQ0xHRkJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZPMEZCUTNaRExIVkNRVUZoTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFdEJRVXNzVDBGQlR5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNdlF6dFBRVU5HTEUxQlFVMDdPMEZCUTB3c1kwRkJTU3hSUVVGUkxGbEJRVUVzUTBGQlF6czdRVUZGWWl4blFrRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1ZVRkJRU3hIUVVGSExFVkJRVWs3T3pzN1FVRkpiRU1zWjBKQlFVa3NVVUZCVVN4TFFVRkxMRk5CUVZNc1JVRkJSVHRCUVVNeFFpd3lRa0ZCWVN4RFFVRkRMRkZCUVZFc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdZVUZEYUVNN1FVRkRSQ3h2UWtGQlVTeEhRVUZITEVkQlFVY3NRMEZCUXp0QlFVTm1MR0ZCUVVNc1JVRkJSU3hEUVVGRE8xZEJRMHdzUTBGQlF5eERRVUZETzBGQlEwZ3NZMEZCU1N4UlFVRlJMRXRCUVVzc1UwRkJVeXhGUVVGRk8wRkJRekZDTEhsQ1FVRmhMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1YwRkRkRU03TzA5QlEwWTdTMEZEUmpzN1FVRkZSQ3hSUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVTdRVUZEV0N4VFFVRkhMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlEzSkNPenRCUVVWRUxGZEJRVThzUjBGQlJ5eERRVUZETzBkQlExb3NRMEZCUXl4RFFVRkRPME5CUTBvaUxDSm1hV3hsSWpvaVpXRmphQzVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1hHNGdJR0Z3Y0dWdVpFTnZiblJsZUhSUVlYUm9MRnh1SUNCaWJHOWphMUJoY21GdGN5eGNiaUFnWTNKbFlYUmxSbkpoYldVc1hHNGdJR2x6UVhKeVlYa3NYRzRnSUdselJuVnVZM1JwYjI1Y2JuMGdabkp2YlNBbkxpNHZkWFJwYkhNbk8xeHVhVzF3YjNKMElFVjRZMlZ3ZEdsdmJpQm1jbTl0SUNjdUxpOWxlR05sY0hScGIyNG5PMXh1WEc1bGVIQnZjblFnWkdWbVlYVnNkQ0JtZFc1amRHbHZiaWhwYm5OMFlXNWpaU2tnZTF4dUlDQnBibk4wWVc1alpTNXlaV2RwYzNSbGNraGxiSEJsY2lnblpXRmphQ2NzSUdaMWJtTjBhVzl1S0dOdmJuUmxlSFFzSUc5d2RHbHZibk1wSUh0Y2JpQWdJQ0JwWmlBb0lXOXdkR2x2Ym5NcElIdGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9KMDExYzNRZ2NHRnpjeUJwZEdWeVlYUnZjaUIwYnlBalpXRmphQ2NwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCbWJpQTlJRzl3ZEdsdmJuTXVabTRzWEc0Z0lDQWdJQ0JwYm5abGNuTmxJRDBnYjNCMGFXOXVjeTVwYm5abGNuTmxMRnh1SUNBZ0lDQWdhU0E5SURBc1hHNGdJQ0FnSUNCeVpYUWdQU0FuSnl4Y2JpQWdJQ0FnSUdSaGRHRXNYRzRnSUNBZ0lDQmpiMjUwWlhoMFVHRjBhRHRjYmx4dUlDQWdJR2xtSUNodmNIUnBiMjV6TG1SaGRHRWdKaVlnYjNCMGFXOXVjeTVwWkhNcElIdGNiaUFnSUNBZ0lHTnZiblJsZUhSUVlYUm9JRDFjYmlBZ0lDQWdJQ0FnWVhCd1pXNWtRMjl1ZEdWNGRGQmhkR2dvYjNCMGFXOXVjeTVrWVhSaExtTnZiblJsZUhSUVlYUm9MQ0J2Y0hScGIyNXpMbWxrYzFzd1hTa2dLeUFuTGljN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnYVdZZ0tHbHpSblZ1WTNScGIyNG9ZMjl1ZEdWNGRDa3BJSHRjYmlBZ0lDQWdJR052Ym5SbGVIUWdQU0JqYjI1MFpYaDBMbU5oYkd3b2RHaHBjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11WkdGMFlTa2dlMXh1SUNBZ0lDQWdaR0YwWVNBOUlHTnlaV0YwWlVaeVlXMWxLRzl3ZEdsdmJuTXVaR0YwWVNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnWm5WdVkzUnBiMjRnWlhobFkwbDBaWEpoZEdsdmJpaG1hV1ZzWkN3Z2FXNWtaWGdzSUd4aGMzUXBJSHRjYmlBZ0lDQWdJR2xtSUNoa1lYUmhLU0I3WEc0Z0lDQWdJQ0FnSUdSaGRHRXVhMlY1SUQwZ1ptbGxiR1E3WEc0Z0lDQWdJQ0FnSUdSaGRHRXVhVzVrWlhnZ1BTQnBibVJsZUR0Y2JpQWdJQ0FnSUNBZ1pHRjBZUzVtYVhKemRDQTlJR2x1WkdWNElEMDlQU0F3TzF4dUlDQWdJQ0FnSUNCa1lYUmhMbXhoYzNRZ1BTQWhJV3hoYzNRN1hHNWNiaUFnSUNBZ0lDQWdhV1lnS0dOdmJuUmxlSFJRWVhSb0tTQjdYRzRnSUNBZ0lDQWdJQ0FnWkdGMFlTNWpiMjUwWlhoMFVHRjBhQ0E5SUdOdmJuUmxlSFJRWVhSb0lDc2dabWxsYkdRN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNibHh1SUNBZ0lDQWdjbVYwSUQxY2JpQWdJQ0FnSUNBZ2NtVjBJQ3RjYmlBZ0lDQWdJQ0FnWm00b1kyOXVkR1Y0ZEZ0bWFXVnNaRjBzSUh0Y2JpQWdJQ0FnSUNBZ0lDQmtZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdJQ0FnSUdKc2IyTnJVR0Z5WVcxek9pQmliRzlqYTFCaGNtRnRjeWhjYmlBZ0lDQWdJQ0FnSUNBZ0lGdGpiMjUwWlhoMFcyWnBaV3hrWFN3Z1ptbGxiR1JkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdXMk52Ym5SbGVIUlFZWFJvSUNzZ1ptbGxiR1FzSUc1MWJHeGRYRzRnSUNBZ0lDQWdJQ0FnS1Z4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9ZMjl1ZEdWNGRDQW1KaUIwZVhCbGIyWWdZMjl1ZEdWNGRDQTlQVDBnSjI5aWFtVmpkQ2NwSUh0Y2JpQWdJQ0FnSUdsbUlDaHBjMEZ5Y21GNUtHTnZiblJsZUhRcEtTQjdYRzRnSUNBZ0lDQWdJR1p2Y2lBb2JHVjBJR29nUFNCamIyNTBaWGgwTG14bGJtZDBhRHNnYVNBOElHbzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2xtSUNocElHbHVJR052Ym5SbGVIUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVjRaV05KZEdWeVlYUnBiMjRvYVN3Z2FTd2dhU0E5UFQwZ1kyOXVkR1Y0ZEM1c1pXNW5kR2dnTFNBeEtUdGNiaUFnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUgwZ1pXeHpaU0JwWmlBb1oyeHZZbUZzTGxONWJXSnZiQ0FtSmlCamIyNTBaWGgwVzJkc2IySmhiQzVUZVcxaWIyd3VhWFJsY21GMGIzSmRLU0I3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzVsZDBOdmJuUmxlSFFnUFNCYlhUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FYUmxjbUYwYjNJZ1BTQmpiMjUwWlhoMFcyZHNiMkpoYkM1VGVXMWliMnd1YVhSbGNtRjBiM0pkS0NrN1hHNGdJQ0FnSUNBZ0lHWnZjaUFvYkdWMElHbDBJRDBnYVhSbGNtRjBiM0l1Ym1WNGRDZ3BPeUFoYVhRdVpHOXVaVHNnYVhRZ1BTQnBkR1Z5WVhSdmNpNXVaWGgwS0NrcElIdGNiaUFnSUNBZ0lDQWdJQ0J1WlhkRGIyNTBaWGgwTG5CMWMyZ29hWFF1ZG1Gc2RXVXBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdOdmJuUmxlSFFnUFNCdVpYZERiMjUwWlhoME8xeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnWTI5dWRHVjRkQzVzWlc1bmRHZzdJR2tnUENCcU95QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQmxlR1ZqU1hSbGNtRjBhVzl1S0drc0lHa3NJR2tnUFQwOUlHTnZiblJsZUhRdWJHVnVaM1JvSUMwZ01TazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQWdJR3hsZENCd2NtbHZja3RsZVR0Y2JseHVJQ0FnSUNBZ0lDQlBZbXBsWTNRdWEyVjVjeWhqYjI1MFpYaDBLUzVtYjNKRllXTm9LR3RsZVNBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnTHk4Z1YyVW5jbVVnY25WdWJtbHVaeUIwYUdVZ2FYUmxjbUYwYVc5dWN5QnZibVVnYzNSbGNDQnZkWFFnYjJZZ2MzbHVZeUJ6YnlCM1pTQmpZVzRnWkdWMFpXTjBYRzRnSUNBZ0lDQWdJQ0FnTHk4Z2RHaGxJR3hoYzNRZ2FYUmxjbUYwYVc5dUlIZHBkR2h2ZFhRZ2FHRjJaU0IwYnlCelkyRnVJSFJvWlNCdlltcGxZM1FnZEhkcFkyVWdZVzVrSUdOeVpXRjBaVnh1SUNBZ0lDQWdJQ0FnSUM4dklHRnVJR2wwWlhKdFpXUnBZWFJsSUd0bGVYTWdZWEp5WVhrdVhHNGdJQ0FnSUNBZ0lDQWdhV1lnS0hCeWFXOXlTMlY1SUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHVjRaV05KZEdWeVlYUnBiMjRvY0hKcGIzSkxaWGtzSUdrZ0xTQXhLVHRjYmlBZ0lDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lDQWdjSEpwYjNKTFpYa2dQU0JyWlhrN1hHNGdJQ0FnSUNBZ0lDQWdhU3NyTzF4dUlDQWdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hCeWFXOXlTMlY1SUNFOVBTQjFibVJsWm1sdVpXUXBJSHRjYmlBZ0lDQWdJQ0FnSUNCbGVHVmpTWFJsY21GMGFXOXVLSEJ5YVc5eVMyVjVMQ0JwSUMwZ01Td2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCcFppQW9hU0E5UFQwZ01Da2dlMXh1SUNBZ0lDQWdjbVYwSUQwZ2FXNTJaWEp6WlNoMGFHbHpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z2NtVjBPMXh1SUNCOUtUdGNibjFjYmlKZGZRPT1cbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9leGNlcHRpb24gPSByZXF1aXJlKCcuLi9leGNlcHRpb24nKTtcblxudmFyIF9leGNlcHRpb24yID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZXhjZXB0aW9uKTtcblxuZXhwb3J0c1snZGVmYXVsdCddID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gIGluc3RhbmNlLnJlZ2lzdGVySGVscGVyKCdoZWxwZXJNaXNzaW5nJywgZnVuY3Rpb24gKCkgLyogW2FyZ3MsIF1vcHRpb25zICove1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBBIG1pc3NpbmcgZmllbGQgaW4gYSB7e2Zvb319IGNvbnN0cnVjdC5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNvbWVvbmUgaXMgYWN0dWFsbHkgdHJ5aW5nIHRvIGNhbGwgc29tZXRoaW5nLCBibG93IHVwLlxuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ01pc3NpbmcgaGVscGVyOiBcIicgKyBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLm5hbWUgKyAnXCInKTtcbiAgICB9XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZhR1ZzY0dWeUxXMXBjM05wYm1jdWFuTWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdPenM3T3p0NVFrRkJjMElzWTBGQll6czdPenR4UWtGRmNrSXNWVUZCVXl4UlFVRlJMRVZCUVVVN1FVRkRhRU1zVlVGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4bFFVRmxMRVZCUVVVc2FVTkJRV2RETzBGQlEzWkZMRkZCUVVrc1UwRkJVeXhEUVVGRExFMUJRVTBzUzBGQlN5eERRVUZETEVWQlFVVTdPMEZCUlRGQ0xHRkJRVThzVTBGQlV5eERRVUZETzB0QlEyeENMRTFCUVUwN08wRkJSVXdzV1VGQlRTd3lRa0ZEU2l4dFFrRkJiVUlzUjBGQlJ5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVkQlFVY3NSMEZCUnl4RFFVTnFSU3hEUVVGRE8wdEJRMGc3UjBGRFJpeERRVUZETEVOQlFVTTdRMEZEU2lJc0ltWnBiR1VpT2lKb1pXeHdaWEl0YldsemMybHVaeTVxY3lJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCRmVHTmxjSFJwYjI0Z1puSnZiU0FuTGk0dlpYaGpaWEIwYVc5dUp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKSVpXeHdaWElvSjJobGJIQmxjazFwYzNOcGJtY25MQ0JtZFc1amRHbHZiaWd2S2lCYllYSm5jeXdnWFc5d2RHbHZibk1nS2k4cElIdGNiaUFnSUNCcFppQW9ZWEpuZFcxbGJuUnpMbXhsYm1kMGFDQTlQVDBnTVNrZ2UxeHVJQ0FnSUNBZ0x5OGdRU0J0YVhOemFXNW5JR1pwWld4a0lHbHVJR0VnZTN0bWIyOTlmU0JqYjI1emRISjFZM1F1WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkVzVrWldacGJtVmtPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBdkx5QlRiMjFsYjI1bElHbHpJR0ZqZEhWaGJHeDVJSFJ5ZVdsdVp5QjBieUJqWVd4c0lITnZiV1YwYUdsdVp5d2dZbXh2ZHlCMWNDNWNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9YRzRnSUNBZ0lDQWdJQ2ROYVhOemFXNW5JR2hsYkhCbGNqb2dYQ0luSUNzZ1lYSm5kVzFsYm5SelcyRnlaM1Z0Wlc1MGN5NXNaVzVuZEdnZ0xTQXhYUzV1WVcxbElDc2dKMXdpSjF4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc0Z0lIMHBPMXh1ZlZ4dUlsMTlcbiIsIid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF91dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG5cbnZhciBfZXhjZXB0aW9uID0gcmVxdWlyZSgnLi4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignaWYnLCBmdW5jdGlvbiAoY29uZGl0aW9uYWwsIG9wdGlvbnMpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPSAyKSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnI2lmIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIGlmIChfdXRpbHMuaXNGdW5jdGlvbihjb25kaXRpb25hbCkpIHtcbiAgICAgIGNvbmRpdGlvbmFsID0gY29uZGl0aW9uYWwuY2FsbCh0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBEZWZhdWx0IGJlaGF2aW9yIGlzIHRvIHJlbmRlciB0aGUgcG9zaXRpdmUgcGF0aCBpZiB0aGUgdmFsdWUgaXMgdHJ1dGh5IGFuZCBub3QgZW1wdHkuXG4gICAgLy8gVGhlIGBpbmNsdWRlWmVyb2Agb3B0aW9uIG1heSBiZSBzZXQgdG8gdHJlYXQgdGhlIGNvbmR0aW9uYWwgYXMgcHVyZWx5IG5vdCBlbXB0eSBiYXNlZCBvbiB0aGVcbiAgICAvLyBiZWhhdmlvciBvZiBpc0VtcHR5LiBFZmZlY3RpdmVseSB0aGlzIGRldGVybWluZXMgaWYgMCBpcyBoYW5kbGVkIGJ5IHRoZSBwb3NpdGl2ZSBwYXRoIG9yIG5lZ2F0aXZlLlxuICAgIGlmICghb3B0aW9ucy5oYXNoLmluY2x1ZGVaZXJvICYmICFjb25kaXRpb25hbCB8fCBfdXRpbHMuaXNFbXB0eShjb25kaXRpb25hbCkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmludmVyc2UodGhpcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvcHRpb25zLmZuKHRoaXMpO1xuICAgIH1cbiAgfSk7XG5cbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3VubGVzcycsIGZ1bmN0aW9uIChjb25kaXRpb25hbCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCcjdW5sZXNzIHJlcXVpcmVzIGV4YWN0bHkgb25lIGFyZ3VtZW50Jyk7XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZS5oZWxwZXJzWydpZiddLmNhbGwodGhpcywgY29uZGl0aW9uYWwsIHtcbiAgICAgIGZuOiBvcHRpb25zLmludmVyc2UsXG4gICAgICBpbnZlcnNlOiBvcHRpb25zLmZuLFxuICAgICAgaGFzaDogb3B0aW9ucy5oYXNoXG4gICAgfSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZhV1l1YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenR4UWtGQmIwTXNWVUZCVlRzN2VVSkJRM2hDTEdOQlFXTTdPenM3Y1VKQlJYSkNMRlZCUVZNc1VVRkJVU3hGUVVGRk8wRkJRMmhETEZWQlFWRXNRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hGUVVGRkxGVkJRVk1zVjBGQlZ5eEZRVUZGTEU5QlFVOHNSVUZCUlR0QlFVTXpSQ3hSUVVGSkxGTkJRVk1zUTBGQlF5eE5RVUZOTEVsQlFVa3NRMEZCUXl4RlFVRkZPMEZCUTNwQ0xGbEJRVTBzTWtKQlFXTXNiVU5CUVcxRExFTkJRVU1zUTBGQlF6dExRVU14UkR0QlFVTkVMRkZCUVVrc2EwSkJRVmNzVjBGQlZ5eERRVUZETEVWQlFVVTdRVUZETTBJc2FVSkJRVmNzUjBGQlJ5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wdEJRM1JET3pzN096dEJRVXRFTEZGQlFVa3NRVUZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4SlFVRkxMR1ZCUVZFc1YwRkJWeXhEUVVGRExFVkJRVVU3UVVGRGRrVXNZVUZCVHl4UFFVRlBMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzB0QlF6bENMRTFCUVUwN1FVRkRUQ3hoUVVGUExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1MwRkRla0k3UjBGRFJpeERRVUZETEVOQlFVTTdPMEZCUlVnc1ZVRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eFJRVUZSTEVWQlFVVXNWVUZCVXl4WFFVRlhMRVZCUVVVc1QwRkJUeXhGUVVGRk8wRkJReTlFTEZGQlFVa3NVMEZCVXl4RFFVRkRMRTFCUVUwc1NVRkJTU3hEUVVGRExFVkJRVVU3UVVGRGVrSXNXVUZCVFN3eVFrRkJZeXgxUTBGQmRVTXNRMEZCUXl4RFFVRkRPMHRCUXpsRU8wRkJRMFFzVjBGQlR5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVWQlFVVXNWMEZCVnl4RlFVRkZPMEZCUTNCRUxGRkJRVVVzUlVGQlJTeFBRVUZQTEVOQlFVTXNUMEZCVHp0QlFVTnVRaXhoUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVWQlFVVTdRVUZEYmtJc1ZVRkJTU3hGUVVGRkxFOUJRVThzUTBGQlF5eEpRVUZKTzB0QlEyNUNMRU5CUVVNc1EwRkJRenRIUVVOS0xFTkJRVU1zUTBGQlF6dERRVU5LSWl3aVptbHNaU0k2SW1sbUxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSHNnYVhORmJYQjBlU3dnYVhOR2RXNWpkR2x2YmlCOUlHWnliMjBnSnk0dUwzVjBhV3h6Snp0Y2JtbHRjRzl5ZENCRmVHTmxjSFJwYjI0Z1puSnZiU0FuTGk0dlpYaGpaWEIwYVc5dUp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKSVpXeHdaWElvSjJsbUp5d2dablZ1WTNScGIyNG9ZMjl1WkdsMGFXOXVZV3dzSUc5d2RHbHZibk1wSUh0Y2JpQWdJQ0JwWmlBb1lYSm5kVzFsYm5SekxteGxibWQwYUNBaFBTQXlLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NjamFXWWdjbVZ4ZFdseVpYTWdaWGhoWTNSc2VTQnZibVVnWVhKbmRXMWxiblFuS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0dselJuVnVZM1JwYjI0b1kyOXVaR2wwYVc5dVlXd3BLU0I3WEc0Z0lDQWdJQ0JqYjI1a2FYUnBiMjVoYkNBOUlHTnZibVJwZEdsdmJtRnNMbU5oYkd3b2RHaHBjeWs3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdMeThnUkdWbVlYVnNkQ0JpWldoaGRtbHZjaUJwY3lCMGJ5QnlaVzVrWlhJZ2RHaGxJSEJ2YzJsMGFYWmxJSEJoZEdnZ2FXWWdkR2hsSUhaaGJIVmxJR2x6SUhSeWRYUm9lU0JoYm1RZ2JtOTBJR1Z0Y0hSNUxseHVJQ0FnSUM4dklGUm9aU0JnYVc1amJIVmtaVnBsY205Z0lHOXdkR2x2YmlCdFlYa2dZbVVnYzJWMElIUnZJSFJ5WldGMElIUm9aU0JqYjI1a2RHbHZibUZzSUdGeklIQjFjbVZzZVNCdWIzUWdaVzF3ZEhrZ1ltRnpaV1FnYjI0Z2RHaGxYRzRnSUNBZ0x5OGdZbVZvWVhacGIzSWdiMllnYVhORmJYQjBlUzRnUldabVpXTjBhWFpsYkhrZ2RHaHBjeUJrWlhSbGNtMXBibVZ6SUdsbUlEQWdhWE1nYUdGdVpHeGxaQ0JpZVNCMGFHVWdjRzl6YVhScGRtVWdjR0YwYUNCdmNpQnVaV2RoZEdsMlpTNWNiaUFnSUNCcFppQW9LQ0Z2Y0hScGIyNXpMbWhoYzJndWFXNWpiSFZrWlZwbGNtOGdKaVlnSVdOdmJtUnBkR2x2Ym1Gc0tTQjhmQ0JwYzBWdGNIUjVLR052Ym1ScGRHbHZibUZzS1NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUc5d2RHbHZibk11YVc1MlpYSnpaU2gwYUdsektUdGNiaUFnSUNCOUlHVnNjMlVnZTF4dUlDQWdJQ0FnY21WMGRYSnVJRzl3ZEdsdmJuTXVabTRvZEdocGN5azdYRzRnSUNBZ2ZWeHVJQ0I5S1R0Y2JseHVJQ0JwYm5OMFlXNWpaUzV5WldkcGMzUmxja2hsYkhCbGNpZ25kVzVzWlhOekp5d2dablZ1WTNScGIyNG9ZMjl1WkdsMGFXOXVZV3dzSUc5d2RHbHZibk1wSUh0Y2JpQWdJQ0JwWmlBb1lYSm5kVzFsYm5SekxteGxibWQwYUNBaFBTQXlLU0I3WEc0Z0lDQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0NjamRXNXNaWE56SUhKbGNYVnBjbVZ6SUdWNFlXTjBiSGtnYjI1bElHRnlaM1Z0Wlc1MEp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUhKbGRIVnliaUJwYm5OMFlXNWpaUzVvWld4d1pYSnpXeWRwWmlkZExtTmhiR3dvZEdocGN5d2dZMjl1WkdsMGFXOXVZV3dzSUh0Y2JpQWdJQ0FnSUdadU9pQnZjSFJwYjI1ekxtbHVkbVZ5YzJVc1hHNGdJQ0FnSUNCcGJuWmxjbk5sT2lCdmNIUnBiMjV6TG1adUxGeHVJQ0FnSUNBZ2FHRnphRG9nYjNCMGFXOXVjeTVvWVhOb1hHNGdJQ0FnZlNrN1hHNGdJSDBwTzF4dWZWeHVJbDE5XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbmV4cG9ydHNbJ2RlZmF1bHQnXSA9IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICBpbnN0YW5jZS5yZWdpc3RlckhlbHBlcignbG9nJywgZnVuY3Rpb24gKCkgLyogbWVzc2FnZSwgb3B0aW9ucyAqL3tcbiAgICB2YXIgYXJncyA9IFt1bmRlZmluZWRdLFxuICAgICAgICBvcHRpb25zID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGFyZ3MucHVzaChhcmd1bWVudHNbaV0pO1xuICAgIH1cblxuICAgIHZhciBsZXZlbCA9IDE7XG4gICAgaWYgKG9wdGlvbnMuaGFzaC5sZXZlbCAhPSBudWxsKSB7XG4gICAgICBsZXZlbCA9IG9wdGlvbnMuaGFzaC5sZXZlbDtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmRhdGEubGV2ZWwgIT0gbnVsbCkge1xuICAgICAgbGV2ZWwgPSBvcHRpb25zLmRhdGEubGV2ZWw7XG4gICAgfVxuICAgIGFyZ3NbMF0gPSBsZXZlbDtcblxuICAgIGluc3RhbmNlLmxvZy5hcHBseShpbnN0YW5jZSwgYXJncyk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMmhsYkhCbGNuTXZiRzluTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdjVUpCUVdVc1ZVRkJVeXhSUVVGUkxFVkJRVVU3UVVGRGFFTXNWVUZCVVN4RFFVRkRMR05CUVdNc1EwRkJReXhMUVVGTExFVkJRVVVzYTBOQlFXbERPMEZCUXpsRUxGRkJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNVMEZCVXl4RFFVRkRPMUZCUTNCQ0xFOUJRVThzUjBGQlJ5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU0xUXl4VFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVWQlFVVTdRVUZETjBNc1ZVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRMUVVONlFqczdRVUZGUkN4UlFVRkpMRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVU03UVVGRFpDeFJRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSkxFbEJRVWtzUlVGQlJUdEJRVU01UWl4WFFVRkxMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdTMEZETlVJc1RVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eEpRVUZKTEVsQlFVa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWtzU1VGQlNTeEZRVUZGTzBGQlEzSkVMRmRCUVVzc1IwRkJSeXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXp0TFFVTTFRanRCUVVORUxGRkJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNN08wRkJSV2hDTEZsQlFWRXNRMEZCUXl4SFFVRkhMRTFCUVVFc1EwRkJXaXhSUVVGUkxFVkJRVkVzU1VGQlNTeERRVUZETEVOQlFVTTdSMEZEZGtJc1EwRkJReXhEUVVGRE8wTkJRMG9pTENKbWFXeGxJam9pYkc5bkxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKSVpXeHdaWElvSjJ4dlp5Y3NJR1oxYm1OMGFXOXVLQzhxSUcxbGMzTmhaMlVzSUc5d2RHbHZibk1nS2k4cElIdGNiaUFnSUNCc1pYUWdZWEpuY3lBOUlGdDFibVJsWm1sdVpXUmRMRnh1SUNBZ0lDQWdiM0IwYVc5dWN5QTlJR0Z5WjNWdFpXNTBjMXRoY21kMWJXVnVkSE11YkdWdVozUm9JQzBnTVYwN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCaGNtZDFiV1Z1ZEhNdWJHVnVaM1JvSUMwZ01Uc2dhU3NyS1NCN1hHNGdJQ0FnSUNCaGNtZHpMbkIxYzJnb1lYSm5kVzFsYm5SelcybGRLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnNaWFFnYkdWMlpXd2dQU0F4TzF4dUlDQWdJR2xtSUNodmNIUnBiMjV6TG1oaGMyZ3ViR1YyWld3Z0lUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ2JHVjJaV3dnUFNCdmNIUnBiMjV6TG1oaGMyZ3ViR1YyWld3N1hHNGdJQ0FnZlNCbGJITmxJR2xtSUNodmNIUnBiMjV6TG1SaGRHRWdKaVlnYjNCMGFXOXVjeTVrWVhSaExteGxkbVZzSUNFOUlHNTFiR3dwSUh0Y2JpQWdJQ0FnSUd4bGRtVnNJRDBnYjNCMGFXOXVjeTVrWVhSaExteGxkbVZzTzF4dUlDQWdJSDFjYmlBZ0lDQmhjbWR6V3pCZElEMGdiR1YyWld3N1hHNWNiaUFnSUNCcGJuTjBZVzVqWlM1c2IyY29MaTR1WVhKbmN5azdYRzRnSUgwcE8xeHVmVnh1SWwxOVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ2xvb2t1cCcsIGZ1bmN0aW9uIChvYmosIGZpZWxkLCBvcHRpb25zKSB7XG4gICAgaWYgKCFvYmopIHtcbiAgICAgIC8vIE5vdGUgZm9yIDUuMDogQ2hhbmdlIHRvIFwib2JqID09IG51bGxcIiBpbiA1LjBcbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zLmxvb2t1cFByb3BlcnR5KG9iaiwgZmllbGQpO1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJobGJIQmxjbk12Ykc5dmEzVndMbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN2NVSkJRV1VzVlVGQlV5eFJRVUZSTEVWQlFVVTdRVUZEYUVNc1ZVRkJVU3hEUVVGRExHTkJRV01zUTBGQlF5eFJRVUZSTEVWQlFVVXNWVUZCVXl4SFFVRkhMRVZCUVVVc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJUdEJRVU01UkN4UlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRk96dEJRVVZTTEdGQlFVOHNSMEZCUnl4RFFVRkRPMHRCUTFvN1FVRkRSQ3hYUVVGUExFOUJRVThzUTBGQlF5eGpRVUZqTEVOQlFVTXNSMEZCUnl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wZEJRek5ETEVOQlFVTXNRMEZCUXp0RFFVTktJaXdpWm1sc1pTSTZJbXh2YjJ0MWNDNXFjeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1WNGNHOXlkQ0JrWldaaGRXeDBJR1oxYm1OMGFXOXVLR2x1YzNSaGJtTmxLU0I3WEc0Z0lHbHVjM1JoYm1ObExuSmxaMmx6ZEdWeVNHVnNjR1Z5S0Nkc2IyOXJkWEFuTENCbWRXNWpkR2x2Ymlodlltb3NJR1pwWld4a0xDQnZjSFJwYjI1ektTQjdYRzRnSUNBZ2FXWWdLQ0Z2WW1vcElIdGNiaUFnSUNBZ0lDOHZJRTV2ZEdVZ1ptOXlJRFV1TURvZ1EyaGhibWRsSUhSdklGd2liMkpxSUQwOUlHNTFiR3hjSWlCcGJpQTFMakJjYmlBZ0lDQWdJSEpsZEhWeWJpQnZZbW83WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdmNIUnBiMjV6TG14dmIydDFjRkJ5YjNCbGNuUjVLRzlpYWl3Z1ptbGxiR1FwTzF4dUlDQjlLVHRjYm4xY2JpSmRmUT09XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyAnZGVmYXVsdCc6IG9iaiB9OyB9XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4uL2V4Y2VwdGlvbicpO1xuXG52YXIgX2V4Y2VwdGlvbjIgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KF9leGNlcHRpb24pO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJIZWxwZXIoJ3dpdGgnLCBmdW5jdGlvbiAoY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoICE9IDIpIHtcbiAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCcjd2l0aCByZXF1aXJlcyBleGFjdGx5IG9uZSBhcmd1bWVudCcpO1xuICAgIH1cbiAgICBpZiAoX3V0aWxzLmlzRnVuY3Rpb24oY29udGV4dCkpIHtcbiAgICAgIGNvbnRleHQgPSBjb250ZXh0LmNhbGwodGhpcyk7XG4gICAgfVxuXG4gICAgdmFyIGZuID0gb3B0aW9ucy5mbjtcblxuICAgIGlmICghX3V0aWxzLmlzRW1wdHkoY29udGV4dCkpIHtcbiAgICAgIHZhciBkYXRhID0gb3B0aW9ucy5kYXRhO1xuICAgICAgaWYgKG9wdGlvbnMuZGF0YSAmJiBvcHRpb25zLmlkcykge1xuICAgICAgICBkYXRhID0gX3V0aWxzLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIGRhdGEuY29udGV4dFBhdGggPSBfdXRpbHMuYXBwZW5kQ29udGV4dFBhdGgob3B0aW9ucy5kYXRhLmNvbnRleHRQYXRoLCBvcHRpb25zLmlkc1swXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmbihjb250ZXh0LCB7XG4gICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgIGJsb2NrUGFyYW1zOiBfdXRpbHMuYmxvY2tQYXJhbXMoW2NvbnRleHRdLCBbZGF0YSAmJiBkYXRhLmNvbnRleHRQYXRoXSlcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5pbnZlcnNlKHRoaXMpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwyaGxiSEJsY25NdmQybDBhQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096czdPM0ZDUVUxUExGVkJRVlU3TzNsQ1FVTkxMR05CUVdNN096czdjVUpCUlhKQ0xGVkJRVk1zVVVGQlVTeEZRVUZGTzBGQlEyaERMRlZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zVFVGQlRTeEZRVUZGTEZWQlFWTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSVHRCUVVONlJDeFJRVUZKTEZOQlFWTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhGUVVGRk8wRkJRM3BDTEZsQlFVMHNNa0pCUVdNc2NVTkJRWEZETEVOQlFVTXNRMEZCUXp0TFFVTTFSRHRCUVVORUxGRkJRVWtzYTBKQlFWY3NUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRka0lzWVVGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE9VSTdPMEZCUlVRc1VVRkJTU3hGUVVGRkxFZEJRVWNzVDBGQlR5eERRVUZETEVWQlFVVXNRMEZCUXpzN1FVRkZjRUlzVVVGQlNTeERRVUZETEdWQlFWRXNUMEZCVHl4RFFVRkRMRVZCUVVVN1FVRkRja0lzVlVGQlNTeEpRVUZKTEVkQlFVY3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJRenRCUVVONFFpeFZRVUZKTEU5QlFVOHNRMEZCUXl4SlFVRkpMRWxCUVVrc1QwRkJUeXhEUVVGRExFZEJRVWNzUlVGQlJUdEJRVU12UWl4WlFVRkpMRWRCUVVjc2JVSkJRVmtzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJwRExGbEJRVWtzUTBGQlF5eFhRVUZYTEVkQlFVY3NlVUpCUTJwQ0xFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RlFVTjRRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVTm1MRU5CUVVNN1QwRkRTRHM3UVVGRlJDeGhRVUZQTEVWQlFVVXNRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkRha0lzV1VGQlNTeEZRVUZGTEVsQlFVazdRVUZEVml4dFFrRkJWeXhGUVVGRkxHMUNRVUZaTEVOQlFVTXNUMEZCVHl4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRPMDlCUTJoRkxFTkJRVU1zUTBGQlF6dExRVU5LTEUxQlFVMDdRVUZEVEN4aFFVRlBMRTlCUVU4c1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdTMEZET1VJN1IwRkRSaXhEUVVGRExFTkJRVU03UTBGRFNpSXNJbVpwYkdVaU9pSjNhWFJvTG1weklpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdGNiaUFnWVhCd1pXNWtRMjl1ZEdWNGRGQmhkR2dzWEc0Z0lHSnNiMk5yVUdGeVlXMXpMRnh1SUNCamNtVmhkR1ZHY21GdFpTeGNiaUFnYVhORmJYQjBlU3hjYmlBZ2FYTkdkVzVqZEdsdmJseHVmU0JtY205dElDY3VMaTkxZEdsc2N5YzdYRzVwYlhCdmNuUWdSWGhqWlhCMGFXOXVJR1p5YjIwZ0p5NHVMMlY0WTJWd2RHbHZiaWM3WEc1Y2JtVjRjRzl5ZENCa1pXWmhkV3gwSUdaMWJtTjBhVzl1S0dsdWMzUmhibU5sS1NCN1hHNGdJR2x1YzNSaGJtTmxMbkpsWjJsemRHVnlTR1ZzY0dWeUtDZDNhWFJvSnl3Z1puVnVZM1JwYjI0b1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3lrZ2UxeHVJQ0FnSUdsbUlDaGhjbWQxYldWdWRITXViR1Z1WjNSb0lDRTlJRElwSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmVHTmxjSFJwYjI0b0p5TjNhWFJvSUhKbGNYVnBjbVZ6SUdWNFlXTjBiSGtnYjI1bElHRnlaM1Z0Wlc1MEp5azdYRzRnSUNBZ2ZWeHVJQ0FnSUdsbUlDaHBjMFoxYm1OMGFXOXVLR052Ym5SbGVIUXBLU0I3WEc0Z0lDQWdJQ0JqYjI1MFpYaDBJRDBnWTI5dWRHVjRkQzVqWVd4c0tIUm9hWE1wTzF4dUlDQWdJSDFjYmx4dUlDQWdJR3hsZENCbWJpQTlJRzl3ZEdsdmJuTXVabTQ3WEc1Y2JpQWdJQ0JwWmlBb0lXbHpSVzF3ZEhrb1kyOXVkR1Y0ZENrcElIdGNiaUFnSUNBZ0lHeGxkQ0JrWVhSaElEMGdiM0IwYVc5dWN5NWtZWFJoTzF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdVpHRjBZU0FtSmlCdmNIUnBiMjV6TG1sa2N5a2dlMXh1SUNBZ0lDQWdJQ0JrWVhSaElEMGdZM0psWVhSbFJuSmhiV1VvYjNCMGFXOXVjeTVrWVhSaEtUdGNiaUFnSUNBZ0lDQWdaR0YwWVM1amIyNTBaWGgwVUdGMGFDQTlJR0Z3Y0dWdVpFTnZiblJsZUhSUVlYUm9LRnh1SUNBZ0lDQWdJQ0FnSUc5d2RHbHZibk11WkdGMFlTNWpiMjUwWlhoMFVHRjBhQ3hjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6TG1sa2Mxc3dYVnh1SUNBZ0lDQWdJQ0FwTzF4dUlDQWdJQ0FnZlZ4dVhHNGdJQ0FnSUNCeVpYUjFjbTRnWm00b1kyOXVkR1Y0ZEN3Z2UxeHVJQ0FnSUNBZ0lDQmtZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdJQ0JpYkc5amExQmhjbUZ0Y3pvZ1lteHZZMnRRWVhKaGJYTW9XMk52Ym5SbGVIUmRMQ0JiWkdGMFlTQW1KaUJrWVhSaExtTnZiblJsZUhSUVlYUm9YU2xjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2IzQjBhVzl1Y3k1cGJuWmxjbk5sS0hSb2FYTXBPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNTlYRzRpWFgwPVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5yZWdpc3RlckRlZmF1bHREZWNvcmF0b3JzID0gcmVnaXN0ZXJEZWZhdWx0RGVjb3JhdG9ycztcbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7ICdkZWZhdWx0Jzogb2JqIH07IH1cblxudmFyIF9kZWNvcmF0b3JzSW5saW5lID0gcmVxdWlyZSgnLi9kZWNvcmF0b3JzL2lubGluZScpO1xuXG52YXIgX2RlY29yYXRvcnNJbmxpbmUyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChfZGVjb3JhdG9yc0lubGluZSk7XG5cbmZ1bmN0aW9uIHJlZ2lzdGVyRGVmYXVsdERlY29yYXRvcnMoaW5zdGFuY2UpIHtcbiAgX2RlY29yYXRvcnNJbmxpbmUyWydkZWZhdWx0J10oaW5zdGFuY2UpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMMlJsWTI5eVlYUnZjbk11YW5NaVhTd2libUZ0WlhNaU9sdGRMQ0p0WVhCd2FXNW5jeUk2SWpzN096czdPenM3WjBOQlFUSkNMSEZDUVVGeFFqczdPenRCUVVWNlF5eFRRVUZUTEhsQ1FVRjVRaXhEUVVGRExGRkJRVkVzUlVGQlJUdEJRVU5zUkN4blEwRkJaU3hSUVVGUkxFTkJRVU1zUTBGQlF6dERRVU14UWlJc0ltWnBiR1VpT2lKa1pXTnZjbUYwYjNKekxtcHpJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpYVcxd2IzSjBJSEpsWjJsemRHVnlTVzVzYVc1bElHWnliMjBnSnk0dlpHVmpiM0poZEc5eWN5OXBibXhwYm1Vbk8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjbVZuYVhOMFpYSkVaV1poZFd4MFJHVmpiM0poZEc5eWN5aHBibk4wWVc1alpTa2dlMXh1SUNCeVpXZHBjM1JsY2tsdWJHbHVaU2hwYm5OMFlXNWpaU2s3WEc1OVhHNGlYWDA9XG4iLCIndXNlIHN0cmljdCc7XG5cbmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoaW5zdGFuY2UpIHtcbiAgaW5zdGFuY2UucmVnaXN0ZXJEZWNvcmF0b3IoJ2lubGluZScsIGZ1bmN0aW9uIChmbiwgcHJvcHMsIGNvbnRhaW5lciwgb3B0aW9ucykge1xuICAgIHZhciByZXQgPSBmbjtcbiAgICBpZiAoIXByb3BzLnBhcnRpYWxzKSB7XG4gICAgICBwcm9wcy5wYXJ0aWFscyA9IHt9O1xuICAgICAgcmV0ID0gZnVuY3Rpb24gKGNvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IHBhcnRpYWxzIHN0YWNrIGZyYW1lIHByaW9yIHRvIGV4ZWMuXG4gICAgICAgIHZhciBvcmlnaW5hbCA9IGNvbnRhaW5lci5wYXJ0aWFscztcbiAgICAgICAgY29udGFpbmVyLnBhcnRpYWxzID0gX3V0aWxzLmV4dGVuZCh7fSwgb3JpZ2luYWwsIHByb3BzLnBhcnRpYWxzKTtcbiAgICAgICAgdmFyIHJldCA9IGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcmlnaW5hbDtcbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcHJvcHMucGFydGlhbHNbb3B0aW9ucy5hcmdzWzBdXSA9IG9wdGlvbnMuZm47XG5cbiAgICByZXR1cm4gcmV0O1xuICB9KTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZXhwb3J0c1snZGVmYXVsdCddO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJSbFkyOXlZWFJ2Y25NdmFXNXNhVzVsTG1weklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lJN096czdjVUpCUVhWQ0xGVkJRVlU3TzNGQ1FVVnNRaXhWUVVGVExGRkJRVkVzUlVGQlJUdEJRVU5vUXl4VlFVRlJMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNVVUZCVVN4RlFVRkZMRlZCUVZNc1JVRkJSU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFRRVUZUTEVWQlFVVXNUMEZCVHl4RlFVRkZPMEZCUXpORkxGRkJRVWtzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTmlMRkZCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeEZRVUZGTzBGQlEyNUNMRmRCUVVzc1EwRkJReXhSUVVGUkxFZEJRVWNzUlVGQlJTeERRVUZETzBGQlEzQkNMRk5CUVVjc1IwRkJSeXhWUVVGVExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVVTdPMEZCUlM5Q0xGbEJRVWtzVVVGQlVTeEhRVUZITEZOQlFWTXNRMEZCUXl4UlFVRlJMRU5CUVVNN1FVRkRiRU1zYVVKQlFWTXNRMEZCUXl4UlFVRlJMRWRCUVVjc1kwRkJUeXhGUVVGRkxFVkJRVVVzVVVGQlVTeEZRVUZGTEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRCUVVNeFJDeFpRVUZKTEVkQlFVY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBGQlF5OUNMR2xDUVVGVExFTkJRVU1zVVVGQlVTeEhRVUZITEZGQlFWRXNRMEZCUXp0QlFVTTVRaXhsUVVGUExFZEJRVWNzUTBGQlF6dFBRVU5hTEVOQlFVTTdTMEZEU0RzN1FVRkZSQ3hUUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFBRVUZQTEVOQlFVTXNSVUZCUlN4RFFVRkRPenRCUVVVM1F5eFhRVUZQTEVkQlFVY3NRMEZCUXp0SFFVTmFMRU5CUVVNc1EwRkJRenREUVVOS0lpd2labWxzWlNJNkltbHViR2x1WlM1cWN5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbWx0Y0c5eWRDQjdJR1Y0ZEdWdVpDQjlJR1p5YjIwZ0p5NHVMM1YwYVd4ekp6dGNibHh1Wlhod2IzSjBJR1JsWm1GMWJIUWdablZ1WTNScGIyNG9hVzV6ZEdGdVkyVXBJSHRjYmlBZ2FXNXpkR0Z1WTJVdWNtVm5hWE4wWlhKRVpXTnZjbUYwYjNJb0oybHViR2x1WlNjc0lHWjFibU4wYVc5dUtHWnVMQ0J3Y205d2N5d2dZMjl1ZEdGcGJtVnlMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdiR1YwSUhKbGRDQTlJR1p1TzF4dUlDQWdJR2xtSUNnaGNISnZjSE11Y0dGeWRHbGhiSE1wSUh0Y2JpQWdJQ0FnSUhCeWIzQnpMbkJoY25ScFlXeHpJRDBnZTMwN1hHNGdJQ0FnSUNCeVpYUWdQU0JtZFc1amRHbHZiaWhqYjI1MFpYaDBMQ0J2Y0hScGIyNXpLU0I3WEc0Z0lDQWdJQ0FnSUM4dklFTnlaV0YwWlNCaElHNWxkeUJ3WVhKMGFXRnNjeUJ6ZEdGamF5Qm1jbUZ0WlNCd2NtbHZjaUIwYnlCbGVHVmpMbHh1SUNBZ0lDQWdJQ0JzWlhRZ2IzSnBaMmx1WVd3Z1BTQmpiMjUwWVdsdVpYSXVjR0Z5ZEdsaGJITTdYRzRnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTV3WVhKMGFXRnNjeUE5SUdWNGRHVnVaQ2g3ZlN3Z2IzSnBaMmx1WVd3c0lIQnliM0J6TG5CaGNuUnBZV3h6S1R0Y2JpQWdJQ0FnSUNBZ2JHVjBJSEpsZENBOUlHWnVLR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBPMXh1SUNBZ0lDQWdJQ0JqYjI1MFlXbHVaWEl1Y0dGeWRHbGhiSE1nUFNCdmNtbG5hVzVoYkR0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGREdGNiaUFnSUNBZ0lIMDdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NISnZjSE11Y0dGeWRHbGhiSE5iYjNCMGFXOXVjeTVoY21keld6QmRYU0E5SUc5d2RHbHZibk11Wm00N1hHNWNiaUFnSUNCeVpYUjFjbTRnY21WME8xeHVJQ0I5S1R0Y2JuMWNiaUpkZlE9PVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jcmVhdGVOZXdMb29rdXBPYmplY3QgPSBjcmVhdGVOZXdMb29rdXBPYmplY3Q7XG5cbnZhciBfdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBvYmplY3Qgd2l0aCBcIm51bGxcIi1wcm90b3R5cGUgdG8gYXZvaWQgdHJ1dGh5IHJlc3VsdHMgb24gcHJvdG90eXBlIHByb3BlcnRpZXMuXG4gKiBUaGUgcmVzdWx0aW5nIG9iamVjdCBjYW4gYmUgdXNlZCB3aXRoIFwib2JqZWN0W3Byb3BlcnR5XVwiIHRvIGNoZWNrIGlmIGEgcHJvcGVydHkgZXhpc3RzXG4gKiBAcGFyYW0gey4uLm9iamVjdH0gc291cmNlcyBhIHZhcmFyZ3MgcGFyYW1ldGVyIG9mIHNvdXJjZSBvYmplY3RzIHRoYXQgd2lsbCBiZSBtZXJnZWRcbiAqIEByZXR1cm5zIHtvYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gY3JlYXRlTmV3TG9va3VwT2JqZWN0KCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgc291cmNlcyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIHNvdXJjZXNbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gX3V0aWxzLmV4dGVuZC5hcHBseSh1bmRlZmluZWQsIFtPYmplY3QuY3JlYXRlKG51bGwpXS5jb25jYXQoc291cmNlcykpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDJsdWRHVnlibUZzTDJOeVpXRjBaUzF1WlhjdGJHOXZhM1Z3TFc5aWFtVmpkQzVxY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096dHhRa0ZCZFVJc1ZVRkJWVHM3T3pzN096czdPMEZCVVRGQ0xGTkJRVk1zY1VKQlFYRkNMRWRCUVdFN2IwTkJRVlFzVDBGQlR6dEJRVUZRTEZkQlFVODdPenRCUVVNNVF5eFRRVUZQTEdkRFFVRlBMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFVc3NUMEZCVHl4RlFVRkRMRU5CUVVNN1EwRkRhRVFpTENKbWFXeGxJam9pWTNKbFlYUmxMVzVsZHkxc2IyOXJkWEF0YjJKcVpXTjBMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUhzZ1pYaDBaVzVrSUgwZ1puSnZiU0FuTGk0dmRYUnBiSE1uTzF4dVhHNHZLaXBjYmlBcUlFTnlaV0YwWlNCaElHNWxkeUJ2WW1wbFkzUWdkMmwwYUNCY0ltNTFiR3hjSWkxd2NtOTBiM1I1Y0dVZ2RHOGdZWFp2YVdRZ2RISjFkR2g1SUhKbGMzVnNkSE1nYjI0Z2NISnZkRzkwZVhCbElIQnliM0JsY25ScFpYTXVYRzRnS2lCVWFHVWdjbVZ6ZFd4MGFXNW5JRzlpYW1WamRDQmpZVzRnWW1VZ2RYTmxaQ0IzYVhSb0lGd2liMkpxWldOMFczQnliM0JsY25SNVhWd2lJSFJ2SUdOb1pXTnJJR2xtSUdFZ2NISnZjR1Z5ZEhrZ1pYaHBjM1J6WEc0Z0tpQkFjR0Z5WVcwZ2V5NHVMbTlpYW1WamRIMGdjMjkxY21ObGN5QmhJSFpoY21GeVozTWdjR0Z5WVcxbGRHVnlJRzltSUhOdmRYSmpaU0J2WW1wbFkzUnpJSFJvWVhRZ2QybHNiQ0JpWlNCdFpYSm5aV1JjYmlBcUlFQnlaWFIxY201eklIdHZZbXBsWTNSOVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJqY21WaGRHVk9aWGRNYjI5cmRYQlBZbXBsWTNRb0xpNHVjMjkxY21ObGN5a2dlMXh1SUNCeVpYUjFjbTRnWlhoMFpXNWtLRTlpYW1WamRDNWpjbVZoZEdVb2JuVnNiQ2tzSUM0dUxuTnZkWEpqWlhNcE8xeHVmVnh1SWwxOVxuIiwiLy8gQnVpbGQgb3V0IG91ciBiYXNpYyBTYWZlU3RyaW5nIHR5cGVcbid1c2Ugc3RyaWN0JztcblxuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZTtcbmZ1bmN0aW9uIFNhZmVTdHJpbmcoc3RyaW5nKSB7XG4gIHRoaXMuc3RyaW5nID0gc3RyaW5nO1xufVxuXG5TYWZlU3RyaW5nLnByb3RvdHlwZS50b1N0cmluZyA9IFNhZmVTdHJpbmcucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuICcnICsgdGhpcy5zdHJpbmc7XG59O1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBTYWZlU3RyaW5nO1xubW9kdWxlLmV4cG9ydHMgPSBleHBvcnRzWydkZWZhdWx0J107XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJaTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwzTmhabVV0YzNSeWFXNW5MbXB6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUk3T3pzN1FVRkRRU3hUUVVGVExGVkJRVlVzUTBGQlF5eE5RVUZOTEVWQlFVVTdRVUZETVVJc1RVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTTdRMEZEZEVJN08wRkJSVVFzVlVGQlZTeERRVUZETEZOQlFWTXNRMEZCUXl4UlFVRlJMRWRCUVVjc1ZVRkJWU3hEUVVGRExGTkJRVk1zUTBGQlF5eE5RVUZOTEVkQlFVY3NXVUZCVnp0QlFVTjJSU3hUUVVGUExFVkJRVVVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRPME5CUTNwQ0xFTkJRVU03TzNGQ1FVVmhMRlZCUVZVaUxDSm1hV3hsSWpvaWMyRm1aUzF6ZEhKcGJtY3Vhbk1pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lJdkx5QkNkV2xzWkNCdmRYUWdiM1Z5SUdKaGMybGpJRk5oWm1WVGRISnBibWNnZEhsd1pWeHVablZ1WTNScGIyNGdVMkZtWlZOMGNtbHVaeWh6ZEhKcGJtY3BJSHRjYmlBZ2RHaHBjeTV6ZEhKcGJtY2dQU0J6ZEhKcGJtYzdYRzU5WEc1Y2JsTmhabVZUZEhKcGJtY3VjSEp2ZEc5MGVYQmxMblJ2VTNSeWFXNW5JRDBnVTJGbVpWTjBjbWx1Wnk1d2NtOTBiM1I1Y0dVdWRHOUlWRTFNSUQwZ1puVnVZM1JwYjI0b0tTQjdYRzRnSUhKbGRIVnliaUFuSnlBcklIUm9hWE11YzNSeWFXNW5PMXh1ZlR0Y2JseHVaWGh3YjNKMElHUmxabUYxYkhRZ1UyRm1aVk4wY21sdVp6dGNiaUpkZlE9PVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy5jaGVja1JldmlzaW9uID0gY2hlY2tSZXZpc2lvbjtcbmV4cG9ydHMudGVtcGxhdGUgPSB0ZW1wbGF0ZTtcbmV4cG9ydHMud3JhcFByb2dyYW0gPSB3cmFwUHJvZ3JhbTtcbmV4cG9ydHMucmVzb2x2ZVBhcnRpYWwgPSByZXNvbHZlUGFydGlhbDtcbmV4cG9ydHMuaW52b2tlUGFydGlhbCA9IGludm9rZVBhcnRpYWw7XG5leHBvcnRzLm5vb3AgPSBub29wO1xuLy8gaXN0YW5idWwgaWdub3JlIG5leHRcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgJ2RlZmF1bHQnOiBvYmogfTsgfVxuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGVsc2UgeyB2YXIgbmV3T2JqID0ge307IGlmIChvYmogIT0gbnVsbCkgeyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gbmV3T2JqWydkZWZhdWx0J10gPSBvYmo7IHJldHVybiBuZXdPYmo7IH0gfVxuXG52YXIgX3V0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xuXG52YXIgVXRpbHMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChfdXRpbHMpO1xuXG52YXIgX2V4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyk7XG5cbnZhciBfZXhjZXB0aW9uMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQoX2V4Y2VwdGlvbik7XG5cbnZhciBfYmFzZSA9IHJlcXVpcmUoJy4vYmFzZScpO1xuXG52YXIgX2hlbHBlcnMgPSByZXF1aXJlKCcuL2hlbHBlcnMnKTtcblxudmFyIF9pbnRlcm5hbFdyYXBIZWxwZXIgPSByZXF1aXJlKCcuL2ludGVybmFsL3dyYXBIZWxwZXInKTtcblxudmFyIF9pbnRlcm5hbFByb3RvQWNjZXNzID0gcmVxdWlyZSgnLi9pbnRlcm5hbC9wcm90by1hY2Nlc3MnKTtcblxuZnVuY3Rpb24gY2hlY2tSZXZpc2lvbihjb21waWxlckluZm8pIHtcbiAgdmFyIGNvbXBpbGVyUmV2aXNpb24gPSBjb21waWxlckluZm8gJiYgY29tcGlsZXJJbmZvWzBdIHx8IDEsXG4gICAgICBjdXJyZW50UmV2aXNpb24gPSBfYmFzZS5DT01QSUxFUl9SRVZJU0lPTjtcblxuICBpZiAoY29tcGlsZXJSZXZpc2lvbiA+PSBfYmFzZS5MQVNUX0NPTVBBVElCTEVfQ09NUElMRVJfUkVWSVNJT04gJiYgY29tcGlsZXJSZXZpc2lvbiA8PSBfYmFzZS5DT01QSUxFUl9SRVZJU0lPTikge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjb21waWxlclJldmlzaW9uIDwgX2Jhc2UuTEFTVF9DT01QQVRJQkxFX0NPTVBJTEVSX1JFVklTSU9OKSB7XG4gICAgdmFyIHJ1bnRpbWVWZXJzaW9ucyA9IF9iYXNlLlJFVklTSU9OX0NIQU5HRVNbY3VycmVudFJldmlzaW9uXSxcbiAgICAgICAgY29tcGlsZXJWZXJzaW9ucyA9IF9iYXNlLlJFVklTSU9OX0NIQU5HRVNbY29tcGlsZXJSZXZpc2lvbl07XG4gICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ1RlbXBsYXRlIHdhcyBwcmVjb21waWxlZCB3aXRoIGFuIG9sZGVyIHZlcnNpb24gb2YgSGFuZGxlYmFycyB0aGFuIHRoZSBjdXJyZW50IHJ1bnRpbWUuICcgKyAnUGxlYXNlIHVwZGF0ZSB5b3VyIHByZWNvbXBpbGVyIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIHJ1bnRpbWVWZXJzaW9ucyArICcpIG9yIGRvd25ncmFkZSB5b3VyIHJ1bnRpbWUgdG8gYW4gb2xkZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVyVmVyc2lvbnMgKyAnKS4nKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBVc2UgdGhlIGVtYmVkZGVkIHZlcnNpb24gaW5mbyBzaW5jZSB0aGUgcnVudGltZSBkb2Vzbid0IGtub3cgYWJvdXQgdGhpcyByZXZpc2lvbiB5ZXRcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGVtcGxhdGUgd2FzIHByZWNvbXBpbGVkIHdpdGggYSBuZXdlciB2ZXJzaW9uIG9mIEhhbmRsZWJhcnMgdGhhbiB0aGUgY3VycmVudCBydW50aW1lLiAnICsgJ1BsZWFzZSB1cGRhdGUgeW91ciBydW50aW1lIHRvIGEgbmV3ZXIgdmVyc2lvbiAoJyArIGNvbXBpbGVySW5mb1sxXSArICcpLicpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRlbXBsYXRlKHRlbXBsYXRlU3BlYywgZW52KSB7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGlmICghZW52KSB7XG4gICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ05vIGVudmlyb25tZW50IHBhc3NlZCB0byB0ZW1wbGF0ZScpO1xuICB9XG4gIGlmICghdGVtcGxhdGVTcGVjIHx8ICF0ZW1wbGF0ZVNwZWMubWFpbikge1xuICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdVbmtub3duIHRlbXBsYXRlIG9iamVjdDogJyArIHR5cGVvZiB0ZW1wbGF0ZVNwZWMpO1xuICB9XG5cbiAgdGVtcGxhdGVTcGVjLm1haW4uZGVjb3JhdG9yID0gdGVtcGxhdGVTcGVjLm1haW5fZDtcblxuICAvLyBOb3RlOiBVc2luZyBlbnYuVk0gcmVmZXJlbmNlcyByYXRoZXIgdGhhbiBsb2NhbCB2YXIgcmVmZXJlbmNlcyB0aHJvdWdob3V0IHRoaXMgc2VjdGlvbiB0byBhbGxvd1xuICAvLyBmb3IgZXh0ZXJuYWwgdXNlcnMgdG8gb3ZlcnJpZGUgdGhlc2UgYXMgcHNldWRvLXN1cHBvcnRlZCBBUElzLlxuICBlbnYuVk0uY2hlY2tSZXZpc2lvbih0ZW1wbGF0ZVNwZWMuY29tcGlsZXIpO1xuXG4gIC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBwcmVjb21waWxlZCB0ZW1wbGF0ZXMgd2l0aCBjb21waWxlci12ZXJzaW9uIDcgKDw0LjMuMClcbiAgdmFyIHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNyA9IHRlbXBsYXRlU3BlYy5jb21waWxlciAmJiB0ZW1wbGF0ZVNwZWMuY29tcGlsZXJbMF0gPT09IDc7XG5cbiAgZnVuY3Rpb24gaW52b2tlUGFydGlhbFdyYXBwZXIocGFydGlhbCwgY29udGV4dCwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLmhhc2gpIHtcbiAgICAgIGNvbnRleHQgPSBVdGlscy5leHRlbmQoe30sIGNvbnRleHQsIG9wdGlvbnMuaGFzaCk7XG4gICAgICBpZiAob3B0aW9ucy5pZHMpIHtcbiAgICAgICAgb3B0aW9ucy5pZHNbMF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBwYXJ0aWFsID0gZW52LlZNLnJlc29sdmVQYXJ0aWFsLmNhbGwodGhpcywgcGFydGlhbCwgY29udGV4dCwgb3B0aW9ucyk7XG5cbiAgICB2YXIgZXh0ZW5kZWRPcHRpb25zID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLCB7XG4gICAgICBob29rczogdGhpcy5ob29rcyxcbiAgICAgIHByb3RvQWNjZXNzQ29udHJvbDogdGhpcy5wcm90b0FjY2Vzc0NvbnRyb2xcbiAgICB9KTtcblxuICAgIHZhciByZXN1bHQgPSBlbnYuVk0uaW52b2tlUGFydGlhbC5jYWxsKHRoaXMsIHBhcnRpYWwsIGNvbnRleHQsIGV4dGVuZGVkT3B0aW9ucyk7XG5cbiAgICBpZiAocmVzdWx0ID09IG51bGwgJiYgZW52LmNvbXBpbGUpIHtcbiAgICAgIG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXSA9IGVudi5jb21waWxlKHBhcnRpYWwsIHRlbXBsYXRlU3BlYy5jb21waWxlck9wdGlvbnMsIGVudik7XG4gICAgICByZXN1bHQgPSBvcHRpb25zLnBhcnRpYWxzW29wdGlvbnMubmFtZV0oY29udGV4dCwgZXh0ZW5kZWRPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdCAhPSBudWxsKSB7XG4gICAgICBpZiAob3B0aW9ucy5pbmRlbnQpIHtcbiAgICAgICAgdmFyIGxpbmVzID0gcmVzdWx0LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSBsaW5lcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICBpZiAoIWxpbmVzW2ldICYmIGkgKyAxID09PSBsKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsaW5lc1tpXSA9IG9wdGlvbnMuaW5kZW50ICsgbGluZXNbaV07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGNvbXBpbGVkIHdoZW4gcnVubmluZyBpbiBydW50aW1lLW9ubHkgbW9kZScpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEp1c3QgYWRkIHdhdGVyXG4gIHZhciBjb250YWluZXIgPSB7XG4gICAgc3RyaWN0OiBmdW5jdGlvbiBzdHJpY3Qob2JqLCBuYW1lLCBsb2MpIHtcbiAgICAgIGlmICghb2JqIHx8ICEobmFtZSBpbiBvYmopKSB7XG4gICAgICAgIHRocm93IG5ldyBfZXhjZXB0aW9uMlsnZGVmYXVsdCddKCdcIicgKyBuYW1lICsgJ1wiIG5vdCBkZWZpbmVkIGluICcgKyBvYmosIHtcbiAgICAgICAgICBsb2M6IGxvY1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBjb250YWluZXIubG9va3VwUHJvcGVydHkob2JqLCBuYW1lKTtcbiAgICB9LFxuICAgIGxvb2t1cFByb3BlcnR5OiBmdW5jdGlvbiBsb29rdXBQcm9wZXJ0eShwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgdmFyIHJlc3VsdCA9IHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoX2ludGVybmFsUHJvdG9BY2Nlc3MucmVzdWx0SXNBbGxvd2VkKHJlc3VsdCwgY29udGFpbmVyLnByb3RvQWNjZXNzQ29udHJvbCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LFxuICAgIGxvb2t1cDogZnVuY3Rpb24gbG9va3VwKGRlcHRocywgbmFtZSkge1xuICAgICAgdmFyIGxlbiA9IGRlcHRocy5sZW5ndGg7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBkZXB0aHNbaV0gJiYgY29udGFpbmVyLmxvb2t1cFByb3BlcnR5KGRlcHRoc1tpXSwgbmFtZSk7XG4gICAgICAgIGlmIChyZXN1bHQgIT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiBkZXB0aHNbaV1bbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGxhbWJkYTogZnVuY3Rpb24gbGFtYmRhKGN1cnJlbnQsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0eXBlb2YgY3VycmVudCA9PT0gJ2Z1bmN0aW9uJyA/IGN1cnJlbnQuY2FsbChjb250ZXh0KSA6IGN1cnJlbnQ7XG4gICAgfSxcblxuICAgIGVzY2FwZUV4cHJlc3Npb246IFV0aWxzLmVzY2FwZUV4cHJlc3Npb24sXG4gICAgaW52b2tlUGFydGlhbDogaW52b2tlUGFydGlhbFdyYXBwZXIsXG5cbiAgICBmbjogZnVuY3Rpb24gZm4oaSkge1xuICAgICAgdmFyIHJldCA9IHRlbXBsYXRlU3BlY1tpXTtcbiAgICAgIHJldC5kZWNvcmF0b3IgPSB0ZW1wbGF0ZVNwZWNbaSArICdfZCddO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9LFxuXG4gICAgcHJvZ3JhbXM6IFtdLFxuICAgIHByb2dyYW06IGZ1bmN0aW9uIHByb2dyYW0oaSwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICAgICAgdmFyIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSxcbiAgICAgICAgICBmbiA9IHRoaXMuZm4oaSk7XG4gICAgICBpZiAoZGF0YSB8fCBkZXB0aHMgfHwgYmxvY2tQYXJhbXMgfHwgZGVjbGFyZWRCbG9ja1BhcmFtcykge1xuICAgICAgICBwcm9ncmFtV3JhcHBlciA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuLCBkYXRhLCBkZWNsYXJlZEJsb2NrUGFyYW1zLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICAgIH0gZWxzZSBpZiAoIXByb2dyYW1XcmFwcGVyKSB7XG4gICAgICAgIHByb2dyYW1XcmFwcGVyID0gdGhpcy5wcm9ncmFtc1tpXSA9IHdyYXBQcm9ncmFtKHRoaXMsIGksIGZuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwcm9ncmFtV3JhcHBlcjtcbiAgICB9LFxuXG4gICAgZGF0YTogZnVuY3Rpb24gZGF0YSh2YWx1ZSwgZGVwdGgpIHtcbiAgICAgIHdoaWxlICh2YWx1ZSAmJiBkZXB0aC0tKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuX3BhcmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9LFxuICAgIG1lcmdlSWZOZWVkZWQ6IGZ1bmN0aW9uIG1lcmdlSWZOZWVkZWQocGFyYW0sIGNvbW1vbikge1xuICAgICAgdmFyIG9iaiA9IHBhcmFtIHx8IGNvbW1vbjtcblxuICAgICAgaWYgKHBhcmFtICYmIGNvbW1vbiAmJiBwYXJhbSAhPT0gY29tbW9uKSB7XG4gICAgICAgIG9iaiA9IFV0aWxzLmV4dGVuZCh7fSwgY29tbW9uLCBwYXJhbSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfSxcbiAgICAvLyBBbiBlbXB0eSBvYmplY3QgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBudWxsLWNvbnRleHRzXG4gICAgbnVsbENvbnRleHQ6IE9iamVjdC5zZWFsKHt9KSxcblxuICAgIG5vb3A6IGVudi5WTS5ub29wLFxuICAgIGNvbXBpbGVySW5mbzogdGVtcGxhdGVTcGVjLmNvbXBpbGVyXG4gIH07XG5cbiAgZnVuY3Rpb24gcmV0KGNvbnRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgdmFyIGRhdGEgPSBvcHRpb25zLmRhdGE7XG5cbiAgICByZXQuX3NldHVwKG9wdGlvbnMpO1xuICAgIGlmICghb3B0aW9ucy5wYXJ0aWFsICYmIHRlbXBsYXRlU3BlYy51c2VEYXRhKSB7XG4gICAgICBkYXRhID0gaW5pdERhdGEoY29udGV4dCwgZGF0YSk7XG4gICAgfVxuICAgIHZhciBkZXB0aHMgPSB1bmRlZmluZWQsXG4gICAgICAgIGJsb2NrUGFyYW1zID0gdGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zID8gW10gOiB1bmRlZmluZWQ7XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMpIHtcbiAgICAgIGlmIChvcHRpb25zLmRlcHRocykge1xuICAgICAgICBkZXB0aHMgPSBjb250ZXh0ICE9IG9wdGlvbnMuZGVwdGhzWzBdID8gW2NvbnRleHRdLmNvbmNhdChvcHRpb25zLmRlcHRocykgOiBvcHRpb25zLmRlcHRocztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlcHRocyA9IFtjb250ZXh0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWluKGNvbnRleHQgLyosIG9wdGlvbnMqLykge1xuICAgICAgcmV0dXJuICcnICsgdGVtcGxhdGVTcGVjLm1haW4oY29udGFpbmVyLCBjb250ZXh0LCBjb250YWluZXIuaGVscGVycywgY29udGFpbmVyLnBhcnRpYWxzLCBkYXRhLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgICB9XG5cbiAgICBtYWluID0gZXhlY3V0ZURlY29yYXRvcnModGVtcGxhdGVTcGVjLm1haW4sIG1haW4sIGNvbnRhaW5lciwgb3B0aW9ucy5kZXB0aHMgfHwgW10sIGRhdGEsIGJsb2NrUGFyYW1zKTtcbiAgICByZXR1cm4gbWFpbihjb250ZXh0LCBvcHRpb25zKTtcbiAgfVxuXG4gIHJldC5pc1RvcCA9IHRydWU7XG5cbiAgcmV0Ll9zZXR1cCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zLnBhcnRpYWwpIHtcbiAgICAgIHZhciBtZXJnZWRIZWxwZXJzID0gVXRpbHMuZXh0ZW5kKHt9LCBlbnYuaGVscGVycywgb3B0aW9ucy5oZWxwZXJzKTtcbiAgICAgIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKTtcbiAgICAgIGNvbnRhaW5lci5oZWxwZXJzID0gbWVyZ2VkSGVscGVycztcblxuICAgICAgaWYgKHRlbXBsYXRlU3BlYy51c2VQYXJ0aWFsKSB7XG4gICAgICAgIC8vIFVzZSBtZXJnZUlmTmVlZGVkIGhlcmUgdG8gcHJldmVudCBjb21waWxpbmcgZ2xvYmFsIHBhcnRpYWxzIG11bHRpcGxlIHRpbWVzXG4gICAgICAgIGNvbnRhaW5lci5wYXJ0aWFscyA9IGNvbnRhaW5lci5tZXJnZUlmTmVlZGVkKG9wdGlvbnMucGFydGlhbHMsIGVudi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgICBpZiAodGVtcGxhdGVTcGVjLnVzZVBhcnRpYWwgfHwgdGVtcGxhdGVTcGVjLnVzZURlY29yYXRvcnMpIHtcbiAgICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBVdGlscy5leHRlbmQoe30sIGVudi5kZWNvcmF0b3JzLCBvcHRpb25zLmRlY29yYXRvcnMpO1xuICAgICAgfVxuXG4gICAgICBjb250YWluZXIuaG9va3MgPSB7fTtcbiAgICAgIGNvbnRhaW5lci5wcm90b0FjY2Vzc0NvbnRyb2wgPSBfaW50ZXJuYWxQcm90b0FjY2Vzcy5jcmVhdGVQcm90b0FjY2Vzc0NvbnRyb2wob3B0aW9ucyk7XG5cbiAgICAgIHZhciBrZWVwSGVscGVySW5IZWxwZXJzID0gb3B0aW9ucy5hbGxvd0NhbGxzVG9IZWxwZXJNaXNzaW5nIHx8IHRlbXBsYXRlV2FzUHJlY29tcGlsZWRXaXRoQ29tcGlsZXJWNztcbiAgICAgIF9oZWxwZXJzLm1vdmVIZWxwZXJUb0hvb2tzKGNvbnRhaW5lciwgJ2hlbHBlck1pc3NpbmcnLCBrZWVwSGVscGVySW5IZWxwZXJzKTtcbiAgICAgIF9oZWxwZXJzLm1vdmVIZWxwZXJUb0hvb2tzKGNvbnRhaW5lciwgJ2Jsb2NrSGVscGVyTWlzc2luZycsIGtlZXBIZWxwZXJJbkhlbHBlcnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250YWluZXIucHJvdG9BY2Nlc3NDb250cm9sID0gb3B0aW9ucy5wcm90b0FjY2Vzc0NvbnRyb2w7IC8vIGludGVybmFsIG9wdGlvblxuICAgICAgY29udGFpbmVyLmhlbHBlcnMgPSBvcHRpb25zLmhlbHBlcnM7XG4gICAgICBjb250YWluZXIucGFydGlhbHMgPSBvcHRpb25zLnBhcnRpYWxzO1xuICAgICAgY29udGFpbmVyLmRlY29yYXRvcnMgPSBvcHRpb25zLmRlY29yYXRvcnM7XG4gICAgICBjb250YWluZXIuaG9va3MgPSBvcHRpb25zLmhvb2tzO1xuICAgIH1cbiAgfTtcblxuICByZXQuX2NoaWxkID0gZnVuY3Rpb24gKGksIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpIHtcbiAgICBpZiAodGVtcGxhdGVTcGVjLnVzZUJsb2NrUGFyYW1zICYmICFibG9ja1BhcmFtcykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ211c3QgcGFzcyBibG9jayBwYXJhbXMnKTtcbiAgICB9XG4gICAgaWYgKHRlbXBsYXRlU3BlYy51c2VEZXB0aHMgJiYgIWRlcHRocykge1xuICAgICAgdGhyb3cgbmV3IF9leGNlcHRpb24yWydkZWZhdWx0J10oJ211c3QgcGFzcyBwYXJlbnQgZGVwdGhzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHdyYXBQcm9ncmFtKGNvbnRhaW5lciwgaSwgdGVtcGxhdGVTcGVjW2ldLCBkYXRhLCAwLCBibG9ja1BhcmFtcywgZGVwdGhzKTtcbiAgfTtcbiAgcmV0dXJuIHJldDtcbn1cblxuZnVuY3Rpb24gd3JhcFByb2dyYW0oY29udGFpbmVyLCBpLCBmbiwgZGF0YSwgZGVjbGFyZWRCbG9ja1BhcmFtcywgYmxvY2tQYXJhbXMsIGRlcHRocykge1xuICBmdW5jdGlvbiBwcm9nKGNvbnRleHQpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgdmFyIGN1cnJlbnREZXB0aHMgPSBkZXB0aHM7XG4gICAgaWYgKGRlcHRocyAmJiBjb250ZXh0ICE9IGRlcHRoc1swXSAmJiAhKGNvbnRleHQgPT09IGNvbnRhaW5lci5udWxsQ29udGV4dCAmJiBkZXB0aHNbMF0gPT09IG51bGwpKSB7XG4gICAgICBjdXJyZW50RGVwdGhzID0gW2NvbnRleHRdLmNvbmNhdChkZXB0aHMpO1xuICAgIH1cblxuICAgIHJldHVybiBmbihjb250YWluZXIsIGNvbnRleHQsIGNvbnRhaW5lci5oZWxwZXJzLCBjb250YWluZXIucGFydGlhbHMsIG9wdGlvbnMuZGF0YSB8fCBkYXRhLCBibG9ja1BhcmFtcyAmJiBbb3B0aW9ucy5ibG9ja1BhcmFtc10uY29uY2F0KGJsb2NrUGFyYW1zKSwgY3VycmVudERlcHRocyk7XG4gIH1cblxuICBwcm9nID0gZXhlY3V0ZURlY29yYXRvcnMoZm4sIHByb2csIGNvbnRhaW5lciwgZGVwdGhzLCBkYXRhLCBibG9ja1BhcmFtcyk7XG5cbiAgcHJvZy5wcm9ncmFtID0gaTtcbiAgcHJvZy5kZXB0aCA9IGRlcHRocyA/IGRlcHRocy5sZW5ndGggOiAwO1xuICBwcm9nLmJsb2NrUGFyYW1zID0gZGVjbGFyZWRCbG9ja1BhcmFtcyB8fCAwO1xuICByZXR1cm4gcHJvZztcbn1cblxuLyoqXG4gKiBUaGlzIGlzIGN1cnJlbnRseSBwYXJ0IG9mIHRoZSBvZmZpY2lhbCBBUEksIHRoZXJlZm9yZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIHNob3VsZCBub3QgYmUgY2hhbmdlZC5cbiAqL1xuXG5mdW5jdGlvbiByZXNvbHZlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIGlmICghcGFydGlhbCkge1xuICAgIGlmIChvcHRpb25zLm5hbWUgPT09ICdAcGFydGlhbC1ibG9jaycpIHtcbiAgICAgIHBhcnRpYWwgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFydGlhbCA9IG9wdGlvbnMucGFydGlhbHNbb3B0aW9ucy5uYW1lXTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoIXBhcnRpYWwuY2FsbCAmJiAhb3B0aW9ucy5uYW1lKSB7XG4gICAgLy8gVGhpcyBpcyBhIGR5bmFtaWMgcGFydGlhbCB0aGF0IHJldHVybmVkIGEgc3RyaW5nXG4gICAgb3B0aW9ucy5uYW1lID0gcGFydGlhbDtcbiAgICBwYXJ0aWFsID0gb3B0aW9ucy5wYXJ0aWFsc1twYXJ0aWFsXTtcbiAgfVxuICByZXR1cm4gcGFydGlhbDtcbn1cblxuZnVuY3Rpb24gaW52b2tlUGFydGlhbChwYXJ0aWFsLCBjb250ZXh0LCBvcHRpb25zKSB7XG4gIC8vIFVzZSB0aGUgY3VycmVudCBjbG9zdXJlIGNvbnRleHQgdG8gc2F2ZSB0aGUgcGFydGlhbC1ibG9jayBpZiB0aGlzIHBhcnRpYWxcbiAgdmFyIGN1cnJlbnRQYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGEgJiYgb3B0aW9ucy5kYXRhWydwYXJ0aWFsLWJsb2NrJ107XG4gIG9wdGlvbnMucGFydGlhbCA9IHRydWU7XG4gIGlmIChvcHRpb25zLmlkcykge1xuICAgIG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aCA9IG9wdGlvbnMuaWRzWzBdIHx8IG9wdGlvbnMuZGF0YS5jb250ZXh0UGF0aDtcbiAgfVxuXG4gIHZhciBwYXJ0aWFsQmxvY2sgPSB1bmRlZmluZWQ7XG4gIGlmIChvcHRpb25zLmZuICYmIG9wdGlvbnMuZm4gIT09IG5vb3ApIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgb3B0aW9ucy5kYXRhID0gX2Jhc2UuY3JlYXRlRnJhbWUob3B0aW9ucy5kYXRhKTtcbiAgICAgIC8vIFdyYXBwZXIgZnVuY3Rpb24gdG8gZ2V0IGFjY2VzcyB0byBjdXJyZW50UGFydGlhbEJsb2NrIGZyb20gdGhlIGNsb3N1cmVcbiAgICAgIHZhciBmbiA9IG9wdGlvbnMuZm47XG4gICAgICBwYXJ0aWFsQmxvY2sgPSBvcHRpb25zLmRhdGFbJ3BhcnRpYWwtYmxvY2snXSA9IGZ1bmN0aW9uIHBhcnRpYWxCbG9ja1dyYXBwZXIoY29udGV4dCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPD0gMSB8fCBhcmd1bWVudHNbMV0gPT09IHVuZGVmaW5lZCA/IHt9IDogYXJndW1lbnRzWzFdO1xuXG4gICAgICAgIC8vIFJlc3RvcmUgdGhlIHBhcnRpYWwtYmxvY2sgZnJvbSB0aGUgY2xvc3VyZSBmb3IgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgYmxvY2tcbiAgICAgICAgLy8gaS5lLiB0aGUgcGFydCBpbnNpZGUgdGhlIGJsb2NrIG9mIHRoZSBwYXJ0aWFsIGNhbGwuXG4gICAgICAgIG9wdGlvbnMuZGF0YSA9IF9iYXNlLmNyZWF0ZUZyYW1lKG9wdGlvbnMuZGF0YSk7XG4gICAgICAgIG9wdGlvbnMuZGF0YVsncGFydGlhbC1ibG9jayddID0gY3VycmVudFBhcnRpYWxCbG9jaztcbiAgICAgICAgcmV0dXJuIGZuKGNvbnRleHQsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICAgIGlmIChmbi5wYXJ0aWFscykge1xuICAgICAgICBvcHRpb25zLnBhcnRpYWxzID0gVXRpbHMuZXh0ZW5kKHt9LCBvcHRpb25zLnBhcnRpYWxzLCBmbi5wYXJ0aWFscyk7XG4gICAgICB9XG4gICAgfSkoKTtcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQgJiYgcGFydGlhbEJsb2NrKSB7XG4gICAgcGFydGlhbCA9IHBhcnRpYWxCbG9jaztcbiAgfVxuXG4gIGlmIChwYXJ0aWFsID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgX2V4Y2VwdGlvbjJbJ2RlZmF1bHQnXSgnVGhlIHBhcnRpYWwgJyArIG9wdGlvbnMubmFtZSArICcgY291bGQgbm90IGJlIGZvdW5kJyk7XG4gIH0gZWxzZSBpZiAocGFydGlhbCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgcmV0dXJuIHBhcnRpYWwoY29udGV4dCwgb3B0aW9ucyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9vcCgpIHtcbiAgcmV0dXJuICcnO1xufVxuXG5mdW5jdGlvbiBpbml0RGF0YShjb250ZXh0LCBkYXRhKSB7XG4gIGlmICghZGF0YSB8fCAhKCdyb290JyBpbiBkYXRhKSkge1xuICAgIGRhdGEgPSBkYXRhID8gX2Jhc2UuY3JlYXRlRnJhbWUoZGF0YSkgOiB7fTtcbiAgICBkYXRhLnJvb3QgPSBjb250ZXh0O1xuICB9XG4gIHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBleGVjdXRlRGVjb3JhdG9ycyhmbiwgcHJvZywgY29udGFpbmVyLCBkZXB0aHMsIGRhdGEsIGJsb2NrUGFyYW1zKSB7XG4gIGlmIChmbi5kZWNvcmF0b3IpIHtcbiAgICB2YXIgcHJvcHMgPSB7fTtcbiAgICBwcm9nID0gZm4uZGVjb3JhdG9yKHByb2csIHByb3BzLCBjb250YWluZXIsIGRlcHRocyAmJiBkZXB0aHNbMF0sIGRhdGEsIGJsb2NrUGFyYW1zLCBkZXB0aHMpO1xuICAgIFV0aWxzLmV4dGVuZChwcm9nLCBwcm9wcyk7XG4gIH1cbiAgcmV0dXJuIHByb2c7XG59XG5cbmZ1bmN0aW9uIHdyYXBIZWxwZXJzVG9QYXNzTG9va3VwUHJvcGVydHkobWVyZ2VkSGVscGVycywgY29udGFpbmVyKSB7XG4gIE9iamVjdC5rZXlzKG1lcmdlZEhlbHBlcnMpLmZvckVhY2goZnVuY3Rpb24gKGhlbHBlck5hbWUpIHtcbiAgICB2YXIgaGVscGVyID0gbWVyZ2VkSGVscGVyc1toZWxwZXJOYW1lXTtcbiAgICBtZXJnZWRIZWxwZXJzW2hlbHBlck5hbWVdID0gcGFzc0xvb2t1cFByb3BlcnR5T3B0aW9uKGhlbHBlciwgY29udGFpbmVyKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHBhc3NMb29rdXBQcm9wZXJ0eU9wdGlvbihoZWxwZXIsIGNvbnRhaW5lcikge1xuICB2YXIgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHk7XG4gIHJldHVybiBfaW50ZXJuYWxXcmFwSGVscGVyLndyYXBIZWxwZXIoaGVscGVyLCBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiBVdGlscy5leHRlbmQoeyBsb29rdXBQcm9wZXJ0eTogbG9va3VwUHJvcGVydHkgfSwgb3B0aW9ucyk7XG4gIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmLTg7YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0p6YjNWeVkyVnpJanBiSWk0dUx5NHVMeTR1TDJ4cFlpOW9ZVzVrYkdWaVlYSnpMM0oxYm5ScGJXVXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN096czdPenM3T3pzN096czdjVUpCUVhWQ0xGTkJRVk03TzBsQlFYQkNMRXRCUVVzN08zbENRVU5MTEdGQlFXRTdPenM3YjBKQlRUVkNMRkZCUVZFN08zVkNRVU50UWl4WFFVRlhPenRyUTBGRGJFSXNkVUpCUVhWQ096dHRRMEZKTTBNc2VVSkJRWGxDT3p0QlFVVjZRaXhUUVVGVExHRkJRV0VzUTBGQlF5eFpRVUZaTEVWQlFVVTdRVUZETVVNc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4QlFVRkRMRmxCUVZrc1NVRkJTU3haUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVc3NRMEZCUXp0TlFVTTNSQ3hsUVVGbExEQkNRVUZ2UWl4RFFVRkRPenRCUVVWMFF5eE5RVU5GTEdkQ1FVRm5RaXd5UTBGQmNVTXNTVUZEY2tRc1owSkJRV2RDTERKQ1FVRnhRaXhGUVVOeVF6dEJRVU5CTEZkQlFVODdSMEZEVWpzN1FVRkZSQ3hOUVVGSkxHZENRVUZuUWl3d1EwRkJiME1zUlVGQlJUdEJRVU40UkN4UlFVRk5MR1ZCUVdVc1IwRkJSeXgxUWtGQmFVSXNaVUZCWlN4RFFVRkRPMUZCUTNaRUxHZENRVUZuUWl4SFFVRkhMSFZDUVVGcFFpeG5Ra0ZCWjBJc1EwRkJReXhEUVVGRE8wRkJRM2hFTEZWQlFVMHNNa0pCUTBvc2VVWkJRWGxHTEVkQlEzWkdMSEZFUVVGeFJDeEhRVU55UkN4bFFVRmxMRWRCUTJZc2JVUkJRVzFFTEVkQlEyNUVMR2RDUVVGblFpeEhRVU5vUWl4SlFVRkpMRU5CUTFBc1EwRkJRenRIUVVOSUxFMUJRVTA3TzBGQlJVd3NWVUZCVFN3eVFrRkRTaXgzUmtGQmQwWXNSMEZEZEVZc2FVUkJRV2xFTEVkQlEycEVMRmxCUVZrc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGRFppeEpRVUZKTEVOQlExQXNRMEZCUXp0SFFVTklPME5CUTBZN08wRkJSVTBzVTBGQlV5eFJRVUZSTEVOQlFVTXNXVUZCV1N4RlFVRkZMRWRCUVVjc1JVRkJSVHM3UVVGRk1VTXNUVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSVHRCUVVOU0xGVkJRVTBzTWtKQlFXTXNiVU5CUVcxRExFTkJRVU1zUTBGQlF6dEhRVU14UkR0QlFVTkVMRTFCUVVrc1EwRkJReXhaUVVGWkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTNaRExGVkJRVTBzTWtKQlFXTXNNa0pCUVRKQ0xFZEJRVWNzVDBGQlR5eFpRVUZaTEVOQlFVTXNRMEZCUXp0SFFVTjRSVHM3UVVGRlJDeGpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1IwRkJSeXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZET3pzN08wRkJTV3hFTEV0QlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXpzN08wRkJSelZETEUxQlFVMHNiME5CUVc5RExFZEJRM2hETEZsQlFWa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1dVRkJXU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN08wRkJSVEZFTEZkQlFWTXNiMEpCUVc5Q0xFTkJRVU1zVDBGQlR5eEZRVUZGTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVN1FVRkRka1FzVVVGQlNTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZPMEZCUTJoQ0xHRkJRVThzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVVVzVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTJ4RUxGVkJRVWtzVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlR0QlFVTm1MR1ZCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRPMDlCUTNaQ08wdEJRMFk3UVVGRFJDeFhRVUZQTEVkQlFVY3NSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhqUVVGakxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZET3p0QlFVVjBSU3hSUVVGSkxHVkJRV1VzUjBGQlJ5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1JVRkJSU3hQUVVGUExFVkJRVVU3UVVGRE9VTXNWMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhMUVVGTE8wRkJRMnBDTEhkQ1FVRnJRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJN1MwRkROVU1zUTBGQlF5eERRVUZET3p0QlFVVklMRkZCUVVrc1RVRkJUU3hIUVVGSExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkRjRU1zU1VGQlNTeEZRVU5LTEU5QlFVOHNSVUZEVUN4UFFVRlBMRVZCUTFBc1pVRkJaU3hEUVVOb1FpeERRVUZET3p0QlFVVkdMRkZCUVVrc1RVRkJUU3hKUVVGSkxFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTJwRExHRkJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFZEJRVWNzUTBGQlF5eFBRVUZQTEVOQlF6RkRMRTlCUVU4c1JVRkRVQ3haUVVGWkxFTkJRVU1zWlVGQlpTeEZRVU0xUWl4SFFVRkhMRU5CUTBvc1EwRkJRenRCUVVOR0xGbEJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNVVUZCVVN4RFFVRkRMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFBRVUZQTEVWQlFVVXNaVUZCWlN4RFFVRkRMRU5CUVVNN1MwRkRia1U3UVVGRFJDeFJRVUZKTEUxQlFVMHNTVUZCU1N4SlFVRkpMRVZCUVVVN1FVRkRiRUlzVlVGQlNTeFBRVUZQTEVOQlFVTXNUVUZCVFN4RlFVRkZPMEZCUTJ4Q0xGbEJRVWtzUzBGQlN5eEhRVUZITEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UVVGREwwSXNZVUZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0QlFVTTFReXhqUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEZRVUZGTzBGQlF6VkNMR3RDUVVGTk8xZEJRMUE3TzBGQlJVUXNaVUZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFOUJRVThzUTBGQlF5eE5RVUZOTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JETzBGQlEwUXNZMEZCVFN4SFFVRkhMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdUMEZETTBJN1FVRkRSQ3hoUVVGUExFMUJRVTBzUTBGQlF6dExRVU5tTEUxQlFVMDdRVUZEVEN4WlFVRk5MREpDUVVOS0xHTkJRV01zUjBGRFdpeFBRVUZQTEVOQlFVTXNTVUZCU1N4SFFVTmFMREJFUVVFd1JDeERRVU0zUkN4RFFVRkRPMHRCUTBnN1IwRkRSanM3TzBGQlIwUXNUVUZCU1N4VFFVRlRMRWRCUVVjN1FVRkRaQ3hWUVVGTkxFVkJRVVVzWjBKQlFWTXNSMEZCUnl4RlFVRkZMRWxCUVVrc1JVRkJSU3hIUVVGSExFVkJRVVU3UVVGREwwSXNWVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hGUVVGRkxFbEJRVWtzU1VGQlNTeEhRVUZITEVOQlFVRXNRVUZCUXl4RlFVRkZPMEZCUXpGQ0xHTkJRVTBzTWtKQlFXTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1IwRkJSeXh0UWtGQmJVSXNSMEZCUnl4SFFVRkhMRVZCUVVVN1FVRkRNVVFzWVVGQlJ5eEZRVUZGTEVkQlFVYzdVMEZEVkN4RFFVRkRMRU5CUVVNN1QwRkRTanRCUVVORUxHRkJRVThzVTBGQlV5eERRVUZETEdOQlFXTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE5VTTdRVUZEUkN4clFrRkJZeXhGUVVGRkxIZENRVUZUTEUxQlFVMHNSVUZCUlN4WlFVRlpMRVZCUVVVN1FVRkROME1zVlVGQlNTeE5RVUZOTEVkQlFVY3NUVUZCVFN4RFFVRkRMRmxCUVZrc1EwRkJReXhEUVVGRE8wRkJRMnhETEZWQlFVa3NUVUZCVFN4SlFVRkpMRWxCUVVrc1JVRkJSVHRCUVVOc1FpeGxRVUZQTEUxQlFVMHNRMEZCUXp0UFFVTm1PMEZCUTBRc1ZVRkJTU3hOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxGbEJRVmtzUTBGQlF5eEZRVUZGTzBGQlF6bEVMR1ZCUVU4c1RVRkJUU3hEUVVGRE8wOUJRMlk3TzBGQlJVUXNWVUZCU1N4eFEwRkJaMElzVFVGQlRTeEZRVUZGTEZOQlFWTXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeFpRVUZaTEVOQlFVTXNSVUZCUlR0QlFVTjJSU3hsUVVGUExFMUJRVTBzUTBGQlF6dFBRVU5tTzBGQlEwUXNZVUZCVHl4VFFVRlRMRU5CUVVNN1MwRkRiRUk3UVVGRFJDeFZRVUZOTEVWQlFVVXNaMEpCUVZNc1RVRkJUU3hGUVVGRkxFbEJRVWtzUlVGQlJUdEJRVU0zUWl4VlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zVFVGQlRTeERRVUZETzBGQlF6RkNMRmRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3UVVGRE5VSXNXVUZCU1N4TlFVRk5MRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEZOQlFWTXNRMEZCUXl4alFVRmpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMEZCUTNCRkxGbEJRVWtzVFVGQlRTeEpRVUZKTEVsQlFVa3NSVUZCUlR0QlFVTnNRaXhwUWtGQlR5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRGVFSTdUMEZEUmp0TFFVTkdPMEZCUTBRc1ZVRkJUU3hGUVVGRkxHZENRVUZUTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVN1FVRkRha01zWVVGQlR5eFBRVUZQTEU5QlFVOHNTMEZCU3l4VlFVRlZMRWRCUVVjc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNSMEZCUnl4UFFVRlBMRU5CUVVNN1MwRkRlRVU3TzBGQlJVUXNiMEpCUVdkQ0xFVkJRVVVzUzBGQlN5eERRVUZETEdkQ1FVRm5RanRCUVVONFF5eHBRa0ZCWVN4RlFVRkZMRzlDUVVGdlFqczdRVUZGYmtNc1RVRkJSU3hGUVVGRkxGbEJRVk1zUTBGQlF5eEZRVUZGTzBGQlEyUXNWVUZCU1N4SFFVRkhMRWRCUVVjc1dVRkJXU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBGQlF6RkNMRk5CUVVjc1EwRkJReXhUUVVGVExFZEJRVWNzV1VGQldTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVOMlF5eGhRVUZQTEVkQlFVY3NRMEZCUXp0TFFVTmFPenRCUVVWRUxGbEJRVkVzUlVGQlJTeEZRVUZGTzBGQlExb3NWMEZCVHl4RlFVRkZMR2xDUVVGVExFTkJRVU1zUlVGQlJTeEpRVUZKTEVWQlFVVXNiVUpCUVcxQ0xFVkJRVVVzVjBGQlZ5eEZRVUZGTEUxQlFVMHNSVUZCUlR0QlFVTnVSU3hWUVVGSkxHTkJRV01zUjBGQlJ5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRWUVVOdVF5eEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5zUWl4VlFVRkpMRWxCUVVrc1NVRkJTU3hOUVVGTkxFbEJRVWtzVjBGQlZ5eEpRVUZKTEcxQ1FVRnRRaXhGUVVGRk8wRkJRM2hFTEhOQ1FVRmpMRWRCUVVjc1YwRkJWeXhEUVVNeFFpeEpRVUZKTEVWQlEwb3NRMEZCUXl4RlFVTkVMRVZCUVVVc1JVRkRSaXhKUVVGSkxFVkJRMG9zYlVKQlFXMUNMRVZCUTI1Q0xGZEJRVmNzUlVGRFdDeE5RVUZOTEVOQlExQXNRMEZCUXp0UFFVTklMRTFCUVUwc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJUdEJRVU14UWl4elFrRkJZeXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1YwRkJWeXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN1QwRkRPVVE3UVVGRFJDeGhRVUZQTEdOQlFXTXNRMEZCUXp0TFFVTjJRanM3UVVGRlJDeFJRVUZKTEVWQlFVVXNZMEZCVXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhGUVVGRk8wRkJRek5DTEdGQlFVOHNTMEZCU3l4SlFVRkpMRXRCUVVzc1JVRkJSU3hGUVVGRk8wRkJRM1pDTEdGQlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRE8wOUJRM1pDTzBGQlEwUXNZVUZCVHl4TFFVRkxMRU5CUVVNN1MwRkRaRHRCUVVORUxHbENRVUZoTEVWQlFVVXNkVUpCUVZNc1MwRkJTeXhGUVVGRkxFMUJRVTBzUlVGQlJUdEJRVU55UXl4VlFVRkpMRWRCUVVjc1IwRkJSeXhMUVVGTExFbEJRVWtzVFVGQlRTeERRVUZET3p0QlFVVXhRaXhWUVVGSkxFdEJRVXNzU1VGQlNTeE5RVUZOTEVsQlFVa3NTMEZCU3l4TFFVRkxMRTFCUVUwc1JVRkJSVHRCUVVOMlF5eFhRVUZITEVkQlFVY3NTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFVkJRVVVzVFVGQlRTeEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMDlCUTNaRE96dEJRVVZFTEdGQlFVOHNSMEZCUnl4RFFVRkRPMHRCUTFvN08wRkJSVVFzWlVGQlZ5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRE96dEJRVVUxUWl4UlFVRkpMRVZCUVVVc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEpRVUZKTzBGQlEycENMR2RDUVVGWkxFVkJRVVVzV1VGQldTeERRVUZETEZGQlFWRTdSMEZEY0VNc1EwRkJRenM3UVVGRlJpeFhRVUZUTEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVdkQ08xRkJRV1FzVDBGQlR5eDVSRUZCUnl4RlFVRkZPenRCUVVOb1F5eFJRVUZKTEVsQlFVa3NSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRE96dEJRVVY0UWl4UFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEzQkNMRkZCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVDBGQlR5eEpRVUZKTEZsQlFWa3NRMEZCUXl4UFFVRlBMRVZCUVVVN1FVRkROVU1zVlVGQlNTeEhRVUZITEZGQlFWRXNRMEZCUXl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRGFFTTdRVUZEUkN4UlFVRkpMRTFCUVUwc1dVRkJRVHRSUVVOU0xGZEJRVmNzUjBGQlJ5eFpRVUZaTEVOQlFVTXNZMEZCWXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhUUVVGVExFTkJRVU03UVVGRE4wUXNVVUZCU1N4WlFVRlpMRU5CUVVNc1UwRkJVeXhGUVVGRk8wRkJRekZDTEZWQlFVa3NUMEZCVHl4RFFVRkRMRTFCUVUwc1JVRkJSVHRCUVVOc1FpeGpRVUZOTEVkQlEwb3NUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlEzaENMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zVFVGQlRTeERRVUZETEU5QlFVOHNRMEZCUXl4TlFVRk5MRU5CUVVNc1IwRkRhRU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXp0UFFVTjBRaXhOUVVGTk8wRkJRMHdzWTBGQlRTeEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1QwRkRjRUk3UzBGRFJqczdRVUZGUkN4aFFVRlRMRWxCUVVrc1EwRkJReXhQUVVGUExHZENRVUZuUWp0QlFVTnVReXhoUVVORkxFVkJRVVVzUjBGRFJpeFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVTm1MRk5CUVZNc1JVRkRWQ3hQUVVGUExFVkJRMUFzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZEYWtJc1UwRkJVeXhEUVVGRExGRkJRVkVzUlVGRGJFSXNTVUZCU1N4RlFVTktMRmRCUVZjc1JVRkRXQ3hOUVVGTkxFTkJRMUFzUTBGRFJEdExRVU5JT3p0QlFVVkVMRkZCUVVrc1IwRkJSeXhwUWtGQmFVSXNRMEZEZEVJc1dVRkJXU3hEUVVGRExFbEJRVWtzUlVGRGFrSXNTVUZCU1N4RlFVTktMRk5CUVZNc1JVRkRWQ3hQUVVGUExFTkJRVU1zVFVGQlRTeEpRVUZKTEVWQlFVVXNSVUZEY0VJc1NVRkJTU3hGUVVOS0xGZEJRVmNzUTBGRFdpeERRVUZETzBGQlEwWXNWMEZCVHl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzBkQlF5OUNPenRCUVVWRUxFdEJRVWNzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRPenRCUVVWcVFpeExRVUZITEVOQlFVTXNUVUZCVFN4SFFVRkhMRlZCUVZNc1QwRkJUeXhGUVVGRk8wRkJRemRDTEZGQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1QwRkJUeXhGUVVGRk8wRkJRM0JDTEZWQlFVa3NZVUZCWVN4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETzBGQlEyNUZMSEZEUVVFclFpeERRVUZETEdGQlFXRXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRCUVVNeFJDeGxRVUZUTEVOQlFVTXNUMEZCVHl4SFFVRkhMR0ZCUVdFc1EwRkJRenM3UVVGRmJFTXNWVUZCU1N4WlFVRlpMRU5CUVVNc1ZVRkJWU3hGUVVGRk96dEJRVVV6UWl4cFFrRkJVeXhEUVVGRExGRkJRVkVzUjBGQlJ5eFRRVUZUTEVOQlFVTXNZVUZCWVN4RFFVTXhReXhQUVVGUExFTkJRVU1zVVVGQlVTeEZRVU5vUWl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVOaUxFTkJRVU03VDBGRFNEdEJRVU5FTEZWQlFVa3NXVUZCV1N4RFFVRkRMRlZCUVZVc1NVRkJTU3haUVVGWkxFTkJRVU1zWVVGQllTeEZRVUZGTzBGQlEzcEVMR2xDUVVGVExFTkJRVU1zVlVGQlZTeEhRVUZITEV0QlFVc3NRMEZCUXl4TlFVRk5MRU5CUTJwRExFVkJRVVVzUlVGRFJpeEhRVUZITEVOQlFVTXNWVUZCVlN4RlFVTmtMRTlCUVU4c1EwRkJReXhWUVVGVkxFTkJRMjVDTEVOQlFVTTdUMEZEU0RzN1FVRkZSQ3hsUVVGVExFTkJRVU1zUzBGQlN5eEhRVUZITEVWQlFVVXNRMEZCUXp0QlFVTnlRaXhsUVVGVExFTkJRVU1zYTBKQlFXdENMRWRCUVVjc09FTkJRWGxDTEU5QlFVOHNRMEZCUXl4RFFVRkRPenRCUVVWcVJTeFZRVUZKTEcxQ1FVRnRRaXhIUVVOeVFpeFBRVUZQTEVOQlFVTXNlVUpCUVhsQ0xFbEJRMnBETEc5RFFVRnZReXhEUVVGRE8wRkJRM1pETEdsRFFVRnJRaXhUUVVGVExFVkJRVVVzWlVGQlpTeEZRVUZGTEcxQ1FVRnRRaXhEUVVGRExFTkJRVU03UVVGRGJrVXNhVU5CUVd0Q0xGTkJRVk1zUlVGQlJTeHZRa0ZCYjBJc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4RFFVRkRPMHRCUTNwRkxFMUJRVTA3UVVGRFRDeGxRVUZUTEVOQlFVTXNhMEpCUVd0Q0xFZEJRVWNzVDBGQlR5eERRVUZETEd0Q1FVRnJRaXhEUVVGRE8wRkJRekZFTEdWQlFWTXNRMEZCUXl4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFOUJRVThzUTBGQlF6dEJRVU53UXl4bFFVRlRMRU5CUVVNc1VVRkJVU3hIUVVGSExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTTdRVUZEZEVNc1pVRkJVeXhEUVVGRExGVkJRVlVzUjBGQlJ5eFBRVUZQTEVOQlFVTXNWVUZCVlN4RFFVRkRPMEZCUXpGRExHVkJRVk1zUTBGQlF5eExRVUZMTEVkQlFVY3NUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJRenRMUVVOcVF6dEhRVU5HTEVOQlFVTTdPMEZCUlVZc1MwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eFZRVUZUTEVOQlFVTXNSVUZCUlN4SlFVRkpMRVZCUVVVc1YwRkJWeXhGUVVGRkxFMUJRVTBzUlVGQlJUdEJRVU5zUkN4UlFVRkpMRmxCUVZrc1EwRkJReXhqUVVGakxFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVTdRVUZETDBNc1dVRkJUU3d5UWtGQll5eDNRa0ZCZDBJc1EwRkJReXhEUVVGRE8wdEJReTlETzBGQlEwUXNVVUZCU1N4WlFVRlpMRU5CUVVNc1UwRkJVeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTzBGQlEzSkRMRmxCUVUwc01rSkJRV01zZVVKQlFYbENMRU5CUVVNc1EwRkJRenRMUVVOb1JEczdRVUZGUkN4WFFVRlBMRmRCUVZjc1EwRkRhRUlzVTBGQlV5eEZRVU5VTEVOQlFVTXNSVUZEUkN4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRMllzU1VGQlNTeEZRVU5LTEVOQlFVTXNSVUZEUkN4WFFVRlhMRVZCUTFnc1RVRkJUU3hEUVVOUUxFTkJRVU03UjBGRFNDeERRVUZETzBGQlEwWXNVMEZCVHl4SFFVRkhMRU5CUVVNN1EwRkRXanM3UVVGRlRTeFRRVUZUTEZkQlFWY3NRMEZEZWtJc1UwRkJVeXhGUVVOVUxFTkJRVU1zUlVGRFJDeEZRVUZGTEVWQlEwWXNTVUZCU1N4RlFVTktMRzFDUVVGdFFpeEZRVU51UWl4WFFVRlhMRVZCUTFnc1RVRkJUU3hGUVVOT08wRkJRMEVzVjBGQlV5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRm5RanRSUVVGa0xFOUJRVThzZVVSQlFVY3NSVUZCUlRzN1FVRkRha01zVVVGQlNTeGhRVUZoTEVkQlFVY3NUVUZCVFN4RFFVRkRPMEZCUXpOQ0xGRkJRMFVzVFVGQlRTeEpRVU5PTEU5QlFVOHNTVUZCU1N4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRM0JDTEVWQlFVVXNUMEZCVHl4TFFVRkxMRk5CUVZNc1EwRkJReXhYUVVGWExFbEJRVWtzVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRU3hCUVVGRExFVkJRekZFTzBGQlEwRXNiVUpCUVdFc1IwRkJSeXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRMUVVNeFF6czdRVUZGUkN4WFFVRlBMRVZCUVVVc1EwRkRVQ3hUUVVGVExFVkJRMVFzVDBGQlR5eEZRVU5RTEZOQlFWTXNRMEZCUXl4UFFVRlBMRVZCUTJwQ0xGTkJRVk1zUTBGQlF5eFJRVUZSTEVWQlEyeENMRTlCUVU4c1EwRkJReXhKUVVGSkxFbEJRVWtzU1VGQlNTeEZRVU53UWl4WFFVRlhMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRmRCUVZjc1EwRkJReXhGUVVONFJDeGhRVUZoTEVOQlEyUXNRMEZCUXp0SFFVTklPenRCUVVWRUxFMUJRVWtzUjBGQlJ5eHBRa0ZCYVVJc1EwRkJReXhGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEZOQlFWTXNSVUZCUlN4TlFVRk5MRVZCUVVVc1NVRkJTU3hGUVVGRkxGZEJRVmNzUTBGQlF5eERRVUZET3p0QlFVVjZSU3hOUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXp0QlFVTnFRaXhOUVVGSkxFTkJRVU1zUzBGQlN5eEhRVUZITEUxQlFVMHNSMEZCUnl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF6dEJRVU40UXl4TlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExHMUNRVUZ0UWl4SlFVRkpMRU5CUVVNc1EwRkJRenRCUVVNMVF5eFRRVUZQTEVsQlFVa3NRMEZCUXp0RFFVTmlPenM3T3pzN1FVRkxUU3hUUVVGVExHTkJRV01zUTBGQlF5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSVHRCUVVONFJDeE5RVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZPMEZCUTFvc1VVRkJTU3hQUVVGUExFTkJRVU1zU1VGQlNTeExRVUZMTEdkQ1FVRm5RaXhGUVVGRk8wRkJRM0pETEdGQlFVOHNSMEZCUnl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzB0QlEzcERMRTFCUVUwN1FVRkRUQ3hoUVVGUExFZEJRVWNzVDBGQlR5eERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03UzBGRE1VTTdSMEZEUml4TlFVRk5MRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1JVRkJSVHM3UVVGRmVrTXNWMEZCVHl4RFFVRkRMRWxCUVVrc1IwRkJSeXhQUVVGUExFTkJRVU03UVVGRGRrSXNWMEZCVHl4SFFVRkhMRTlCUVU4c1EwRkJReXhSUVVGUkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdSMEZEY2tNN1FVRkRSQ3hUUVVGUExFOUJRVThzUTBGQlF6dERRVU5vUWpzN1FVRkZUU3hUUVVGVExHRkJRV0VzUTBGQlF5eFBRVUZQTEVWQlFVVXNUMEZCVHl4RlFVRkZMRTlCUVU4c1JVRkJSVHM3UVVGRmRrUXNUVUZCVFN4dFFrRkJiVUlzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4SlFVRkpMRTlCUVU4c1EwRkJReXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEVOQlFVTTdRVUZETVVVc1UwRkJUeXhEUVVGRExFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTTdRVUZEZGtJc1RVRkJTU3hQUVVGUExFTkJRVU1zUjBGQlJ5eEZRVUZGTzBGQlEyWXNWMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFZEJRVWNzVDBGQlR5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXp0SFFVTjJSVHM3UVVGRlJDeE5RVUZKTEZsQlFWa3NXVUZCUVN4RFFVRkRPMEZCUTJwQ0xFMUJRVWtzVDBGQlR5eERRVUZETEVWQlFVVXNTVUZCU1N4UFFVRlBMRU5CUVVNc1JVRkJSU3hMUVVGTExFbEJRVWtzUlVGQlJUczdRVUZEY2tNc1lVRkJUeXhEUVVGRExFbEJRVWtzUjBGQlJ5eHJRa0ZCV1N4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03TzBGQlJYcERMRlZCUVVrc1JVRkJSU3hIUVVGSExFOUJRVThzUTBGQlF5eEZRVUZGTEVOQlFVTTdRVUZEY0VJc2EwSkJRVmtzUjBGQlJ5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMR1ZCUVdVc1EwRkJReXhIUVVGSExGTkJRVk1zYlVKQlFXMUNMRU5CUTNwRkxFOUJRVThzUlVGRlVEdFpRVVJCTEU5QlFVOHNlVVJCUVVjc1JVRkJSVHM3T3p0QlFVbGFMR1ZCUVU4c1EwRkJReXhKUVVGSkxFZEJRVWNzYTBKQlFWa3NUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wRkJRM3BETEdWQlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFZEJRVWNzYlVKQlFXMUNMRU5CUVVNN1FVRkRjRVFzWlVGQlR5eEZRVUZGTEVOQlFVTXNUMEZCVHl4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8wOUJRemRDTEVOQlFVTTdRVUZEUml4VlFVRkpMRVZCUVVVc1EwRkJReXhSUVVGUkxFVkJRVVU3UVVGRFppeGxRVUZQTEVOQlFVTXNVVUZCVVN4SFFVRkhMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeEZRVUZGTEU5QlFVOHNRMEZCUXl4UlFVRlJMRVZCUVVVc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETzA5QlEzQkZPenRIUVVOR096dEJRVVZFTEUxQlFVa3NUMEZCVHl4TFFVRkxMRk5CUVZNc1NVRkJTU3haUVVGWkxFVkJRVVU3UVVGRGVrTXNWMEZCVHl4SFFVRkhMRmxCUVZrc1EwRkJRenRIUVVONFFqczdRVUZGUkN4TlFVRkpMRTlCUVU4c1MwRkJTeXhUUVVGVExFVkJRVVU3UVVGRGVrSXNWVUZCVFN3eVFrRkJZeXhqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEVsQlFVa3NSMEZCUnl4eFFrRkJjVUlzUTBGQlF5eERRVUZETzBkQlF6VkZMRTFCUVUwc1NVRkJTU3hQUVVGUExGbEJRVmtzVVVGQlVTeEZRVUZGTzBGQlEzUkRMRmRCUVU4c1QwRkJUeXhEUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXp0SFFVTnNRenREUVVOR096dEJRVVZOTEZOQlFWTXNTVUZCU1N4SFFVRkhPMEZCUTNKQ0xGTkJRVThzUlVGQlJTeERRVUZETzBOQlExZzdPMEZCUlVRc1UwRkJVeXhSUVVGUkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NSVUZCUlR0QlFVTXZRaXhOUVVGSkxFTkJRVU1zU1VGQlNTeEpRVUZKTEVWQlFVVXNUVUZCVFN4SlFVRkpMRWxCUVVrc1EwRkJRU3hCUVVGRExFVkJRVVU3UVVGRE9VSXNVVUZCU1N4SFFVRkhMRWxCUVVrc1IwRkJSeXhyUWtGQldTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1FVRkRja01zVVVGQlNTeERRVUZETEVsQlFVa3NSMEZCUnl4UFFVRlBMRU5CUVVNN1IwRkRja0k3UVVGRFJDeFRRVUZQTEVsQlFVa3NRMEZCUXp0RFFVTmlPenRCUVVWRUxGTkJRVk1zYVVKQlFXbENMRU5CUVVNc1JVRkJSU3hGUVVGRkxFbEJRVWtzUlVGQlJTeFRRVUZUTEVWQlFVVXNUVUZCVFN4RlFVRkZMRWxCUVVrc1JVRkJSU3hYUVVGWExFVkJRVVU3UVVGRGVrVXNUVUZCU1N4RlFVRkZMRU5CUVVNc1UwRkJVeXhGUVVGRk8wRkJRMmhDTEZGQlFVa3NTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJRenRCUVVObUxGRkJRVWtzUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVTnFRaXhKUVVGSkxFVkJRMG9zUzBGQlN5eEZRVU5NTEZOQlFWTXNSVUZEVkN4TlFVRk5MRWxCUVVrc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVU51UWl4SlFVRkpMRVZCUTBvc1YwRkJWeXhGUVVOWUxFMUJRVTBzUTBGRFVDeERRVUZETzBGQlEwWXNVMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJReXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTTdSMEZETTBJN1FVRkRSQ3hUUVVGUExFbEJRVWtzUTBGQlF6dERRVU5pT3p0QlFVVkVMRk5CUVZNc0swSkJRU3RDTEVOQlFVTXNZVUZCWVN4RlFVRkZMRk5CUVZNc1JVRkJSVHRCUVVOcVJTeFJRVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eFZRVUZCTEZWQlFWVXNSVUZCU1R0QlFVTXZReXhSUVVGSkxFMUJRVTBzUjBGQlJ5eGhRVUZoTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1FVRkRka01zYVVKQlFXRXNRMEZCUXl4VlFVRlZMRU5CUVVNc1IwRkJSeXgzUWtGQmQwSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03UjBGRGVrVXNRMEZCUXl4RFFVRkRPME5CUTBvN08wRkJSVVFzVTBGQlV5eDNRa0ZCZDBJc1EwRkJReXhOUVVGTkxFVkJRVVVzVTBGQlV5eEZRVUZGTzBGQlEyNUVMRTFCUVUwc1kwRkJZeXhIUVVGSExGTkJRVk1zUTBGQlF5eGpRVUZqTEVOQlFVTTdRVUZEYUVRc1UwRkJUeXdyUWtGQlZ5eE5RVUZOTEVWQlFVVXNWVUZCUVN4UFFVRlBMRVZCUVVrN1FVRkRia01zVjBGQlR5eExRVUZMTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1kwRkJZeXhGUVVGa0xHTkJRV01zUlVGQlJTeEZRVUZGTEU5QlFVOHNRMEZCUXl4RFFVRkRPMGRCUTJ4RUxFTkJRVU1zUTBGQlF6dERRVU5LSWl3aVptbHNaU0k2SW5KMWJuUnBiV1V1YW5NaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJWZEdsc2N5Qm1jbTl0SUNjdUwzVjBhV3h6Snp0Y2JtbHRjRzl5ZENCRmVHTmxjSFJwYjI0Z1puSnZiU0FuTGk5bGVHTmxjSFJwYjI0bk8xeHVhVzF3YjNKMElIdGNiaUFnUTA5TlVFbE1SVkpmVWtWV1NWTkpUMDRzWEc0Z0lHTnlaV0YwWlVaeVlXMWxMRnh1SUNCTVFWTlVYME5QVFZCQlZFbENURVZmUTA5TlVFbE1SVkpmVWtWV1NWTkpUMDRzWEc0Z0lGSkZWa2xUU1U5T1gwTklRVTVIUlZOY2JuMGdabkp2YlNBbkxpOWlZWE5sSnp0Y2JtbHRjRzl5ZENCN0lHMXZkbVZJWld4d1pYSlViMGh2YjJ0eklIMGdabkp2YlNBbkxpOW9aV3h3WlhKekp6dGNibWx0Y0c5eWRDQjdJSGR5WVhCSVpXeHdaWElnZlNCbWNtOXRJQ2N1TDJsdWRHVnlibUZzTDNkeVlYQklaV3h3WlhJbk8xeHVhVzF3YjNKMElIdGNiaUFnWTNKbFlYUmxVSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNMRnh1SUNCeVpYTjFiSFJKYzBGc2JHOTNaV1JjYm4wZ1puSnZiU0FuTGk5cGJuUmxjbTVoYkM5d2NtOTBieTFoWTJObGMzTW5PMXh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWTJobFkydFNaWFpwYzJsdmJpaGpiMjF3YVd4bGNrbHVabThwSUh0Y2JpQWdZMjl1YzNRZ1kyOXRjR2xzWlhKU1pYWnBjMmx2YmlBOUlDaGpiMjF3YVd4bGNrbHVabThnSmlZZ1kyOXRjR2xzWlhKSmJtWnZXekJkS1NCOGZDQXhMRnh1SUNBZ0lHTjFjbkpsYm5SU1pYWnBjMmx2YmlBOUlFTlBUVkJKVEVWU1gxSkZWa2xUU1U5T08xeHVYRzRnSUdsbUlDaGNiaUFnSUNCamIyMXdhV3hsY2xKbGRtbHphVzl1SUQ0OUlFeEJVMVJmUTA5TlVFRlVTVUpNUlY5RFQwMVFTVXhGVWw5U1JWWkpVMGxQVGlBbUpseHVJQ0FnSUdOdmJYQnBiR1Z5VW1WMmFYTnBiMjRnUEQwZ1EwOU5VRWxNUlZKZlVrVldTVk5KVDA1Y2JpQWdLU0I3WEc0Z0lDQWdjbVYwZFhKdU8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0dOdmJYQnBiR1Z5VW1WMmFYTnBiMjRnUENCTVFWTlVYME5QVFZCQlZFbENURVZmUTA5TlVFbE1SVkpmVWtWV1NWTkpUMDRwSUh0Y2JpQWdJQ0JqYjI1emRDQnlkVzUwYVcxbFZtVnljMmx2Ym5NZ1BTQlNSVlpKVTBsUFRsOURTRUZPUjBWVFcyTjFjbkpsYm5SU1pYWnBjMmx2Ymwwc1hHNGdJQ0FnSUNCamIyMXdhV3hsY2xabGNuTnBiMjV6SUQwZ1VrVldTVk5KVDA1ZlEwaEJUa2RGVTF0amIyMXdhV3hsY2xKbGRtbHphVzl1WFR0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhoalpYQjBhVzl1S0Z4dUlDQWdJQ0FnSjFSbGJYQnNZWFJsSUhkaGN5QndjbVZqYjIxd2FXeGxaQ0IzYVhSb0lHRnVJRzlzWkdWeUlIWmxjbk5wYjI0Z2IyWWdTR0Z1Wkd4bFltRnljeUIwYUdGdUlIUm9aU0JqZFhKeVpXNTBJSEoxYm5ScGJXVXVJQ2NnSzF4dUlDQWdJQ0FnSUNBblVHeGxZWE5sSUhWd1pHRjBaU0I1YjNWeUlIQnlaV052YlhCcGJHVnlJSFJ2SUdFZ2JtVjNaWElnZG1WeWMybHZiaUFvSnlBclhHNGdJQ0FnSUNBZ0lISjFiblJwYldWV1pYSnphVzl1Y3lBclhHNGdJQ0FnSUNBZ0lDY3BJRzl5SUdSdmQyNW5jbUZrWlNCNWIzVnlJSEoxYm5ScGJXVWdkRzhnWVc0Z2IyeGtaWElnZG1WeWMybHZiaUFvSnlBclhHNGdJQ0FnSUNBZ0lHTnZiWEJwYkdWeVZtVnljMmx2Ym5NZ0sxeHVJQ0FnSUNBZ0lDQW5LUzRuWEc0Z0lDQWdLVHRjYmlBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0F2THlCVmMyVWdkR2hsSUdWdFltVmtaR1ZrSUhabGNuTnBiMjRnYVc1bWJ5QnphVzVqWlNCMGFHVWdjblZ1ZEdsdFpTQmtiMlZ6YmlkMElHdHViM2NnWVdKdmRYUWdkR2hwY3lCeVpYWnBjMmx2YmlCNVpYUmNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYaGpaWEIwYVc5dUtGeHVJQ0FnSUNBZ0oxUmxiWEJzWVhSbElIZGhjeUJ3Y21WamIyMXdhV3hsWkNCM2FYUm9JR0VnYm1WM1pYSWdkbVZ5YzJsdmJpQnZaaUJJWVc1a2JHVmlZWEp6SUhSb1lXNGdkR2hsSUdOMWNuSmxiblFnY25WdWRHbHRaUzRnSnlBclhHNGdJQ0FnSUNBZ0lDZFFiR1ZoYzJVZ2RYQmtZWFJsSUhsdmRYSWdjblZ1ZEdsdFpTQjBieUJoSUc1bGQyVnlJSFpsY25OcGIyNGdLQ2NnSzF4dUlDQWdJQ0FnSUNCamIyMXdhV3hsY2tsdVptOWJNVjBnSzF4dUlDQWdJQ0FnSUNBbktTNG5YRzRnSUNBZ0tUdGNiaUFnZlZ4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdkR1Z0Y0d4aGRHVW9kR1Z0Y0d4aGRHVlRjR1ZqTENCbGJuWXBJSHRjYmlBZ0x5b2dhWE4wWVc1aWRXd2dhV2R1YjNKbElHNWxlSFFnS2k5Y2JpQWdhV1lnS0NGbGJuWXBJSHRjYmlBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLQ2RPYnlCbGJuWnBjbTl1YldWdWRDQndZWE56WldRZ2RHOGdkR1Z0Y0d4aGRHVW5LVHRjYmlBZ2ZWeHVJQ0JwWmlBb0lYUmxiWEJzWVhSbFUzQmxZeUI4ZkNBaGRHVnRjR3hoZEdWVGNHVmpMbTFoYVc0cElIdGNiaUFnSUNCMGFISnZkeUJ1WlhjZ1JYaGpaWEIwYVc5dUtDZFZibXR1YjNkdUlIUmxiWEJzWVhSbElHOWlhbVZqZERvZ0p5QXJJSFI1Y0dWdlppQjBaVzF3YkdGMFpWTndaV01wTzF4dUlDQjlYRzVjYmlBZ2RHVnRjR3hoZEdWVGNHVmpMbTFoYVc0dVpHVmpiM0poZEc5eUlEMGdkR1Z0Y0d4aGRHVlRjR1ZqTG0xaGFXNWZaRHRjYmx4dUlDQXZMeUJPYjNSbE9pQlZjMmx1WnlCbGJuWXVWazBnY21WbVpYSmxibU5sY3lCeVlYUm9aWElnZEdoaGJpQnNiMk5oYkNCMllYSWdjbVZtWlhKbGJtTmxjeUIwYUhKdmRXZG9iM1YwSUhSb2FYTWdjMlZqZEdsdmJpQjBieUJoYkd4dmQxeHVJQ0F2THlCbWIzSWdaWGgwWlhKdVlXd2dkWE5sY25NZ2RHOGdiM1psY25KcFpHVWdkR2hsYzJVZ1lYTWdjSE5sZFdSdkxYTjFjSEJ2Y25SbFpDQkJVRWx6TGx4dUlDQmxibll1VmswdVkyaGxZMnRTWlhacGMybHZiaWgwWlcxd2JHRjBaVk53WldNdVkyOXRjR2xzWlhJcE8xeHVYRzRnSUM4dklHSmhZMnQzWVhKa2N5QmpiMjF3WVhScFltbHNhWFI1SUdadmNpQndjbVZqYjIxd2FXeGxaQ0IwWlcxd2JHRjBaWE1nZDJsMGFDQmpiMjF3YVd4bGNpMTJaWEp6YVc5dUlEY2dLRHcwTGpNdU1DbGNiaUFnWTI5dWMzUWdkR1Z0Y0d4aGRHVlhZWE5RY21WamIyMXdhV3hsWkZkcGRHaERiMjF3YVd4bGNsWTNJRDFjYmlBZ0lDQjBaVzF3YkdGMFpWTndaV011WTI5dGNHbHNaWElnSmlZZ2RHVnRjR3hoZEdWVGNHVmpMbU52YlhCcGJHVnlXekJkSUQwOVBTQTNPMXh1WEc0Z0lHWjFibU4wYVc5dUlHbHVkbTlyWlZCaGNuUnBZV3hYY21Gd2NHVnlLSEJoY25ScFlXd3NJR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ0lDQnBaaUFvYjNCMGFXOXVjeTVvWVhOb0tTQjdYRzRnSUNBZ0lDQmpiMjUwWlhoMElEMGdWWFJwYkhNdVpYaDBaVzVrS0h0OUxDQmpiMjUwWlhoMExDQnZjSFJwYjI1ekxtaGhjMmdwTzF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdWFXUnpLU0I3WEc0Z0lDQWdJQ0FnSUc5d2RHbHZibk11YVdSeld6QmRJRDBnZEhKMVpUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNGdJQ0FnY0dGeWRHbGhiQ0E5SUdWdWRpNVdUUzV5WlhOdmJIWmxVR0Z5ZEdsaGJDNWpZV3hzS0hSb2FYTXNJSEJoY25ScFlXd3NJR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBPMXh1WEc0Z0lDQWdiR1YwSUdWNGRHVnVaR1ZrVDNCMGFXOXVjeUE5SUZWMGFXeHpMbVY0ZEdWdVpDaDdmU3dnYjNCMGFXOXVjeXdnZTF4dUlDQWdJQ0FnYUc5dmEzTTZJSFJvYVhNdWFHOXZhM01zWEc0Z0lDQWdJQ0J3Y205MGIwRmpZMlZ6YzBOdmJuUnliMnc2SUhSb2FYTXVjSEp2ZEc5QlkyTmxjM05EYjI1MGNtOXNYRzRnSUNBZ2ZTazdYRzVjYmlBZ0lDQnNaWFFnY21WemRXeDBJRDBnWlc1MkxsWk5MbWx1ZG05clpWQmhjblJwWVd3dVkyRnNiQ2hjYmlBZ0lDQWdJSFJvYVhNc1hHNGdJQ0FnSUNCd1lYSjBhV0ZzTEZ4dUlDQWdJQ0FnWTI5dWRHVjRkQ3hjYmlBZ0lDQWdJR1Y0ZEdWdVpHVmtUM0IwYVc5dWMxeHVJQ0FnSUNrN1hHNWNiaUFnSUNCcFppQW9jbVZ6ZFd4MElEMDlJRzUxYkd3Z0ppWWdaVzUyTG1OdmJYQnBiR1VwSUh0Y2JpQWdJQ0FnSUc5d2RHbHZibk11Y0dGeWRHbGhiSE5iYjNCMGFXOXVjeTV1WVcxbFhTQTlJR1Z1ZGk1amIyMXdhV3hsS0Z4dUlDQWdJQ0FnSUNCd1lYSjBhV0ZzTEZ4dUlDQWdJQ0FnSUNCMFpXMXdiR0YwWlZOd1pXTXVZMjl0Y0dsc1pYSlBjSFJwYjI1ekxGeHVJQ0FnSUNBZ0lDQmxiblpjYmlBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0J5WlhOMWJIUWdQU0J2Y0hScGIyNXpMbkJoY25ScFlXeHpXMjl3ZEdsdmJuTXVibUZ0WlYwb1kyOXVkR1Y0ZEN3Z1pYaDBaVzVrWldSUGNIUnBiMjV6S1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hKbGMzVnNkQ0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0JwWmlBb2IzQjBhVzl1Y3k1cGJtUmxiblFwSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR3hwYm1WeklEMGdjbVZ6ZFd4MExuTndiR2wwS0NkY1hHNG5LVHRjYmlBZ0lDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3dnUFNCc2FXNWxjeTVzWlc1bmRHZzdJR2tnUENCc095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvSVd4cGJtVnpXMmxkSUNZbUlHa2dLeUF4SUQwOVBTQnNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmljbVZoYXp0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnSUNCc2FXNWxjMXRwWFNBOUlHOXdkR2x2Ym5NdWFXNWtaVzUwSUNzZ2JHbHVaWE5iYVYwN1hHNGdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdjbVZ6ZFd4MElEMGdiR2x1WlhNdWFtOXBiaWduWEZ4dUp5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWGhqWlhCMGFXOXVLRnh1SUNBZ0lDQWdJQ0FuVkdobElIQmhjblJwWVd3Z0p5QXJYRzRnSUNBZ0lDQWdJQ0FnYjNCMGFXOXVjeTV1WVcxbElDdGNiaUFnSUNBZ0lDQWdJQ0FuSUdOdmRXeGtJRzV2ZENCaVpTQmpiMjF3YVd4bFpDQjNhR1Z1SUhKMWJtNXBibWNnYVc0Z2NuVnVkR2x0WlMxdmJteDVJRzF2WkdVblhHNGdJQ0FnSUNBcE8xeHVJQ0FnSUgxY2JpQWdmVnh1WEc0Z0lDOHZJRXAxYzNRZ1lXUmtJSGRoZEdWeVhHNGdJR3hsZENCamIyNTBZV2x1WlhJZ1BTQjdYRzRnSUNBZ2MzUnlhV04wT2lCbWRXNWpkR2x2Ymlodlltb3NJRzVoYldVc0lHeHZZeWtnZTF4dUlDQWdJQ0FnYVdZZ0tDRnZZbW9nZkh3Z0lTaHVZVzFsSUdsdUlHOWlhaWtwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVjRZMlZ3ZEdsdmJpZ25YQ0luSUNzZ2JtRnRaU0FySUNkY0lpQnViM1FnWkdWbWFXNWxaQ0JwYmlBbklDc2diMkpxTENCN1hHNGdJQ0FnSUNBZ0lDQWdiRzlqT2lCc2IyTmNiaUFnSUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0J5WlhSMWNtNGdZMjl1ZEdGcGJtVnlMbXh2YjJ0MWNGQnliM0JsY25SNUtHOWlhaXdnYm1GdFpTazdYRzRnSUNBZ2ZTeGNiaUFnSUNCc2IyOXJkWEJRY205d1pYSjBlVG9nWm5WdVkzUnBiMjRvY0dGeVpXNTBMQ0J3Y205d1pYSjBlVTVoYldVcElIdGNiaUFnSUNBZ0lHeGxkQ0J5WlhOMWJIUWdQU0J3WVhKbGJuUmJjSEp2Y0dWeWRIbE9ZVzFsWFR0Y2JpQWdJQ0FnSUdsbUlDaHlaWE4xYkhRZ1BUMGdiblZzYkNrZ2UxeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z2NtVnpkV3gwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnYVdZZ0tFOWlhbVZqZEM1d2NtOTBiM1I1Y0dVdWFHRnpUM2R1VUhKdmNHVnlkSGt1WTJGc2JDaHdZWEpsYm5Rc0lIQnliM0JsY25SNVRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJSDFjYmx4dUlDQWdJQ0FnYVdZZ0tISmxjM1ZzZEVselFXeHNiM2RsWkNoeVpYTjFiSFFzSUdOdmJuUmhhVzVsY2k1d2NtOTBiMEZqWTJWemMwTnZiblJ5YjJ3c0lIQnliM0JsY25SNVRtRnRaU2twSUh0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUhKbGMzVnNkRHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQjFibVJsWm1sdVpXUTdYRzRnSUNBZ2ZTeGNiaUFnSUNCc2IyOXJkWEE2SUdaMWJtTjBhVzl1S0dSbGNIUm9jeXdnYm1GdFpTa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ2JHVnVJRDBnWkdWd2RHaHpMbXhsYm1kMGFEdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2diR1Z1T3lCcEt5c3BJSHRjYmlBZ0lDQWdJQ0FnYkdWMElISmxjM1ZzZENBOUlHUmxjSFJvYzF0cFhTQW1KaUJqYjI1MFlXbHVaWEl1Ykc5dmEzVndVSEp2Y0dWeWRIa29aR1Z3ZEdoelcybGRMQ0J1WVcxbEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hKbGMzVnNkQ0FoUFNCdWRXeHNLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdSbGNIUm9jMXRwWFZ0dVlXMWxYVHRjYmlBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnZlZ4dUlDQWdJSDBzWEc0Z0lDQWdiR0Z0WW1SaE9pQm1kVzVqZEdsdmJpaGpkWEp5Wlc1MExDQmpiMjUwWlhoMEtTQjdYRzRnSUNBZ0lDQnlaWFIxY200Z2RIbHdaVzltSUdOMWNuSmxiblFnUFQwOUlDZG1kVzVqZEdsdmJpY2dQeUJqZFhKeVpXNTBMbU5oYkd3b1kyOXVkR1Y0ZENrZ09pQmpkWEp5Wlc1ME8xeHVJQ0FnSUgwc1hHNWNiaUFnSUNCbGMyTmhjR1ZGZUhCeVpYTnphVzl1T2lCVmRHbHNjeTVsYzJOaGNHVkZlSEJ5WlhOemFXOXVMRnh1SUNBZ0lHbHVkbTlyWlZCaGNuUnBZV3c2SUdsdWRtOXJaVkJoY25ScFlXeFhjbUZ3Y0dWeUxGeHVYRzRnSUNBZ1ptNDZJR1oxYm1OMGFXOXVLR2twSUh0Y2JpQWdJQ0FnSUd4bGRDQnlaWFFnUFNCMFpXMXdiR0YwWlZOd1pXTmJhVjA3WEc0Z0lDQWdJQ0J5WlhRdVpHVmpiM0poZEc5eUlEMGdkR1Z0Y0d4aGRHVlRjR1ZqVzJrZ0t5QW5YMlFuWFR0Y2JpQWdJQ0FnSUhKbGRIVnliaUJ5WlhRN1hHNGdJQ0FnZlN4Y2JseHVJQ0FnSUhCeWIyZHlZVzF6T2lCYlhTeGNiaUFnSUNCd2NtOW5jbUZ0T2lCbWRXNWpkR2x2YmlocExDQmtZWFJoTENCa1pXTnNZWEpsWkVKc2IyTnJVR0Z5WVcxekxDQmliRzlqYTFCaGNtRnRjeXdnWkdWd2RHaHpLU0I3WEc0Z0lDQWdJQ0JzWlhRZ2NISnZaM0poYlZkeVlYQndaWElnUFNCMGFHbHpMbkJ5YjJkeVlXMXpXMmxkTEZ4dUlDQWdJQ0FnSUNCbWJpQTlJSFJvYVhNdVptNG9hU2s3WEc0Z0lDQWdJQ0JwWmlBb1pHRjBZU0I4ZkNCa1pYQjBhSE1nZkh3Z1lteHZZMnRRWVhKaGJYTWdmSHdnWkdWamJHRnlaV1JDYkc5amExQmhjbUZ0Y3lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTluY21GdFYzSmhjSEJsY2lBOUlIZHlZWEJRY205bmNtRnRLRnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXNYRzRnSUNBZ0lDQWdJQ0FnYVN4Y2JpQWdJQ0FnSUNBZ0lDQm1iaXhjYmlBZ0lDQWdJQ0FnSUNCa1lYUmhMRnh1SUNBZ0lDQWdJQ0FnSUdSbFkyeGhjbVZrUW14dlkydFFZWEpoYlhNc1hHNGdJQ0FnSUNBZ0lDQWdZbXh2WTJ0UVlYSmhiWE1zWEc0Z0lDQWdJQ0FnSUNBZ1pHVndkR2h6WEc0Z0lDQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tDRndjbTluY21GdFYzSmhjSEJsY2lrZ2UxeHVJQ0FnSUNBZ0lDQndjbTluY21GdFYzSmhjSEJsY2lBOUlIUm9hWE11Y0hKdlozSmhiWE5iYVYwZ1BTQjNjbUZ3VUhKdlozSmhiU2gwYUdsekxDQnBMQ0JtYmlrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnSUNCeVpYUjFjbTRnY0hKdlozSmhiVmR5WVhCd1pYSTdYRzRnSUNBZ2ZTeGNibHh1SUNBZ0lHUmhkR0U2SUdaMWJtTjBhVzl1S0haaGJIVmxMQ0JrWlhCMGFDa2dlMXh1SUNBZ0lDQWdkMmhwYkdVZ0tIWmhiSFZsSUNZbUlHUmxjSFJvTFMwcElIdGNiaUFnSUNBZ0lDQWdkbUZzZFdVZ1BTQjJZV3gxWlM1ZmNHRnlaVzUwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnY21WMGRYSnVJSFpoYkhWbE8xeHVJQ0FnSUgwc1hHNGdJQ0FnYldWeVoyVkpaazVsWldSbFpEb2dablZ1WTNScGIyNG9jR0Z5WVcwc0lHTnZiVzF2YmlrZ2UxeHVJQ0FnSUNBZ2JHVjBJRzlpYWlBOUlIQmhjbUZ0SUh4OElHTnZiVzF2Ymp0Y2JseHVJQ0FnSUNBZ2FXWWdLSEJoY21GdElDWW1JR052YlcxdmJpQW1KaUJ3WVhKaGJTQWhQVDBnWTI5dGJXOXVLU0I3WEc0Z0lDQWdJQ0FnSUc5aWFpQTlJRlYwYVd4ekxtVjRkR1Z1WkNoN2ZTd2dZMjl0Ylc5dUxDQndZWEpoYlNrN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lISmxkSFZ5YmlCdlltbzdYRzRnSUNBZ2ZTeGNiaUFnSUNBdkx5QkJiaUJsYlhCMGVTQnZZbXBsWTNRZ2RHOGdkWE5sSUdGeklISmxjR3hoWTJWdFpXNTBJR1p2Y2lCdWRXeHNMV052Ym5SbGVIUnpYRzRnSUNBZ2JuVnNiRU52Ym5SbGVIUTZJRTlpYW1WamRDNXpaV0ZzS0h0OUtTeGNibHh1SUNBZ0lHNXZiM0E2SUdWdWRpNVdUUzV1YjI5d0xGeHVJQ0FnSUdOdmJYQnBiR1Z5U1c1bWJ6b2dkR1Z0Y0d4aGRHVlRjR1ZqTG1OdmJYQnBiR1Z5WEc0Z0lIMDdYRzVjYmlBZ1puVnVZM1JwYjI0Z2NtVjBLR052Ym5SbGVIUXNJRzl3ZEdsdmJuTWdQU0I3ZlNrZ2UxeHVJQ0FnSUd4bGRDQmtZWFJoSUQwZ2IzQjBhVzl1Y3k1a1lYUmhPMXh1WEc0Z0lDQWdjbVYwTGw5elpYUjFjQ2h2Y0hScGIyNXpLVHRjYmlBZ0lDQnBaaUFvSVc5d2RHbHZibk11Y0dGeWRHbGhiQ0FtSmlCMFpXMXdiR0YwWlZOd1pXTXVkWE5sUkdGMFlTa2dlMXh1SUNBZ0lDQWdaR0YwWVNBOUlHbHVhWFJFWVhSaEtHTnZiblJsZUhRc0lHUmhkR0VwTzF4dUlDQWdJSDFjYmlBZ0lDQnNaWFFnWkdWd2RHaHpMRnh1SUNBZ0lDQWdZbXh2WTJ0UVlYSmhiWE1nUFNCMFpXMXdiR0YwWlZOd1pXTXVkWE5sUW14dlkydFFZWEpoYlhNZ1B5QmJYU0E2SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0JwWmlBb2RHVnRjR3hoZEdWVGNHVmpMblZ6WlVSbGNIUm9jeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHOXdkR2x2Ym5NdVpHVndkR2h6S1NCN1hHNGdJQ0FnSUNBZ0lHUmxjSFJvY3lBOVhHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDQWhQU0J2Y0hScGIyNXpMbVJsY0hSb2Mxc3dYVnh1SUNBZ0lDQWdJQ0FnSUNBZ1B5QmJZMjl1ZEdWNGRGMHVZMjl1WTJGMEtHOXdkR2x2Ym5NdVpHVndkR2h6S1Z4dUlDQWdJQ0FnSUNBZ0lDQWdPaUJ2Y0hScGIyNXpMbVJsY0hSb2N6dGNiaUFnSUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNBZ0lHUmxjSFJvY3lBOUlGdGpiMjUwWlhoMFhUdGNiaUFnSUNBZ0lIMWNiaUFnSUNCOVhHNWNiaUFnSUNCbWRXNWpkR2x2YmlCdFlXbHVLR052Ym5SbGVIUWdMeW9zSUc5d2RHbHZibk1xTHlrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUNoY2JpQWdJQ0FnSUNBZ0p5Y2dLMXh1SUNBZ0lDQWdJQ0IwWlcxd2JHRjBaVk53WldNdWJXRnBiaWhjYmlBZ0lDQWdJQ0FnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnSUNBZ0lDQWdZMjl1ZEdWNGRDeGNiaUFnSUNBZ0lDQWdJQ0JqYjI1MFlXbHVaWEl1YUdWc2NHVnljeXhjYmlBZ0lDQWdJQ0FnSUNCamIyNTBZV2x1WlhJdWNHRnlkR2xoYkhNc1hHNGdJQ0FnSUNBZ0lDQWdaR0YwWVN4Y2JpQWdJQ0FnSUNBZ0lDQmliRzlqYTFCaGNtRnRjeXhjYmlBZ0lDQWdJQ0FnSUNCa1pYQjBhSE5jYmlBZ0lDQWdJQ0FnS1Z4dUlDQWdJQ0FnS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J0WVdsdUlEMGdaWGhsWTNWMFpVUmxZMjl5WVhSdmNuTW9YRzRnSUNBZ0lDQjBaVzF3YkdGMFpWTndaV011YldGcGJpeGNiaUFnSUNBZ0lHMWhhVzRzWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWElzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbVJsY0hSb2N5QjhmQ0JiWFN4Y2JpQWdJQ0FnSUdSaGRHRXNYRzRnSUNBZ0lDQmliRzlqYTFCaGNtRnRjMXh1SUNBZ0lDazdYRzRnSUNBZ2NtVjBkWEp1SUcxaGFXNG9ZMjl1ZEdWNGRDd2diM0IwYVc5dWN5azdYRzRnSUgxY2JseHVJQ0J5WlhRdWFYTlViM0FnUFNCMGNuVmxPMXh1WEc0Z0lISmxkQzVmYzJWMGRYQWdQU0JtZFc1amRHbHZiaWh2Y0hScGIyNXpLU0I3WEc0Z0lDQWdhV1lnS0NGdmNIUnBiMjV6TG5CaGNuUnBZV3dwSUh0Y2JpQWdJQ0FnSUd4bGRDQnRaWEpuWldSSVpXeHdaWEp6SUQwZ1ZYUnBiSE11WlhoMFpXNWtLSHQ5TENCbGJuWXVhR1ZzY0dWeWN5d2diM0IwYVc5dWN5NW9aV3h3WlhKektUdGNiaUFnSUNBZ0lIZHlZWEJJWld4d1pYSnpWRzlRWVhOelRHOXZhM1Z3VUhKdmNHVnlkSGtvYldWeVoyVmtTR1ZzY0dWeWN5d2dZMjl1ZEdGcGJtVnlLVHRjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTVvWld4d1pYSnpJRDBnYldWeVoyVmtTR1ZzY0dWeWN6dGNibHh1SUNBZ0lDQWdhV1lnS0hSbGJYQnNZWFJsVTNCbFl5NTFjMlZRWVhKMGFXRnNLU0I3WEc0Z0lDQWdJQ0FnSUM4dklGVnpaU0J0WlhKblpVbG1UbVZsWkdWa0lHaGxjbVVnZEc4Z2NISmxkbVZ1ZENCamIyMXdhV3hwYm1jZ1oyeHZZbUZzSUhCaGNuUnBZV3h6SUcxMWJIUnBjR3hsSUhScGJXVnpYRzRnSUNBZ0lDQWdJR052Ym5SaGFXNWxjaTV3WVhKMGFXRnNjeUE5SUdOdmJuUmhhVzVsY2k1dFpYSm5aVWxtVG1WbFpHVmtLRnh1SUNBZ0lDQWdJQ0FnSUc5d2RHbHZibk11Y0dGeWRHbGhiSE1zWEc0Z0lDQWdJQ0FnSUNBZ1pXNTJMbkJoY25ScFlXeHpYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JwWmlBb2RHVnRjR3hoZEdWVGNHVmpMblZ6WlZCaGNuUnBZV3dnZkh3Z2RHVnRjR3hoZEdWVGNHVmpMblZ6WlVSbFkyOXlZWFJ2Y25NcElIdGNiaUFnSUNBZ0lDQWdZMjl1ZEdGcGJtVnlMbVJsWTI5eVlYUnZjbk1nUFNCVmRHbHNjeTVsZUhSbGJtUW9YRzRnSUNBZ0lDQWdJQ0FnZTMwc1hHNGdJQ0FnSUNBZ0lDQWdaVzUyTG1SbFkyOXlZWFJ2Y25Nc1hHNGdJQ0FnSUNBZ0lDQWdiM0IwYVc5dWN5NWtaV052Y21GMGIzSnpYRzRnSUNBZ0lDQWdJQ2s3WEc0Z0lDQWdJQ0I5WEc1Y2JpQWdJQ0FnSUdOdmJuUmhhVzVsY2k1b2IyOXJjeUE5SUh0OU8xeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxuQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDQTlJR055WldGMFpWQnliM1J2UVdOalpYTnpRMjl1ZEhKdmJDaHZjSFJwYjI1ektUdGNibHh1SUNBZ0lDQWdiR1YwSUd0bFpYQklaV3h3WlhKSmJraGxiSEJsY25NZ1BWeHVJQ0FnSUNBZ0lDQnZjSFJwYjI1ekxtRnNiRzkzUTJGc2JITlViMGhsYkhCbGNrMXBjM05wYm1jZ2ZIeGNiaUFnSUNBZ0lDQWdkR1Z0Y0d4aGRHVlhZWE5RY21WamIyMXdhV3hsWkZkcGRHaERiMjF3YVd4bGNsWTNPMXh1SUNBZ0lDQWdiVzkyWlVobGJIQmxjbFJ2U0c5dmEzTW9ZMjl1ZEdGcGJtVnlMQ0FuYUdWc2NHVnlUV2x6YzJsdVp5Y3NJR3RsWlhCSVpXeHdaWEpKYmtobGJIQmxjbk1wTzF4dUlDQWdJQ0FnYlc5MlpVaGxiSEJsY2xSdlNHOXZhM01vWTI5dWRHRnBibVZ5TENBbllteHZZMnRJWld4d1pYSk5hWE56YVc1bkp5d2dhMlZsY0VobGJIQmxja2x1U0dWc2NHVnljeWs3WEc0Z0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpNXdjbTkwYjBGalkyVnpjME52Ym5SeWIyd2dQU0J2Y0hScGIyNXpMbkJ5YjNSdlFXTmpaWE56UTI5dWRISnZiRHNnTHk4Z2FXNTBaWEp1WVd3Z2IzQjBhVzl1WEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEl1YUdWc2NHVnljeUE5SUc5d2RHbHZibk11YUdWc2NHVnljenRjYmlBZ0lDQWdJR052Ym5SaGFXNWxjaTV3WVhKMGFXRnNjeUE5SUc5d2RHbHZibk11Y0dGeWRHbGhiSE03WEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWEl1WkdWamIzSmhkRzl5Y3lBOUlHOXdkR2x2Ym5NdVpHVmpiM0poZEc5eWN6dGNiaUFnSUNBZ0lHTnZiblJoYVc1bGNpNW9iMjlyY3lBOUlHOXdkR2x2Ym5NdWFHOXZhM003WEc0Z0lDQWdmVnh1SUNCOU8xeHVYRzRnSUhKbGRDNWZZMmhwYkdRZ1BTQm1kVzVqZEdsdmJpaHBMQ0JrWVhSaExDQmliRzlqYTFCaGNtRnRjeXdnWkdWd2RHaHpLU0I3WEc0Z0lDQWdhV1lnS0hSbGJYQnNZWFJsVTNCbFl5NTFjMlZDYkc5amExQmhjbUZ0Y3lBbUppQWhZbXh2WTJ0UVlYSmhiWE1wSUh0Y2JpQWdJQ0FnSUhSb2NtOTNJRzVsZHlCRmVHTmxjSFJwYjI0b0oyMTFjM1FnY0dGemN5QmliRzlqYXlCd1lYSmhiWE1uS1R0Y2JpQWdJQ0I5WEc0Z0lDQWdhV1lnS0hSbGJYQnNZWFJsVTNCbFl5NTFjMlZFWlhCMGFITWdKaVlnSVdSbGNIUm9jeWtnZTF4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWNFkyVndkR2x2YmlnbmJYVnpkQ0J3WVhOeklIQmhjbVZ1ZENCa1pYQjBhSE1uS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkM0poY0ZCeWIyZHlZVzBvWEc0Z0lDQWdJQ0JqYjI1MFlXbHVaWElzWEc0Z0lDQWdJQ0JwTEZ4dUlDQWdJQ0FnZEdWdGNHeGhkR1ZUY0dWalcybGRMRnh1SUNBZ0lDQWdaR0YwWVN4Y2JpQWdJQ0FnSURBc1hHNGdJQ0FnSUNCaWJHOWphMUJoY21GdGN5eGNiaUFnSUNBZ0lHUmxjSFJvYzF4dUlDQWdJQ2s3WEc0Z0lIMDdYRzRnSUhKbGRIVnliaUJ5WlhRN1hHNTlYRzVjYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIzY21Gd1VISnZaM0poYlNoY2JpQWdZMjl1ZEdGcGJtVnlMRnh1SUNCcExGeHVJQ0JtYml4Y2JpQWdaR0YwWVN4Y2JpQWdaR1ZqYkdGeVpXUkNiRzlqYTFCaGNtRnRjeXhjYmlBZ1lteHZZMnRRWVhKaGJYTXNYRzRnSUdSbGNIUm9jMXh1S1NCN1hHNGdJR1oxYm1OMGFXOXVJSEJ5YjJjb1kyOXVkR1Y0ZEN3Z2IzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lDQWdiR1YwSUdOMWNuSmxiblJFWlhCMGFITWdQU0JrWlhCMGFITTdYRzRnSUNBZ2FXWWdLRnh1SUNBZ0lDQWdaR1Z3ZEdoeklDWW1YRzRnSUNBZ0lDQmpiMjUwWlhoMElDRTlJR1JsY0hSb2Mxc3dYU0FtSmx4dUlDQWdJQ0FnSVNoamIyNTBaWGgwSUQwOVBTQmpiMjUwWVdsdVpYSXViblZzYkVOdmJuUmxlSFFnSmlZZ1pHVndkR2h6V3pCZElEMDlQU0J1ZFd4c0tWeHVJQ0FnSUNrZ2UxeHVJQ0FnSUNBZ1kzVnljbVZ1ZEVSbGNIUm9jeUE5SUZ0amIyNTBaWGgwWFM1amIyNWpZWFFvWkdWd2RHaHpLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQnlaWFIxY200Z1ptNG9YRzRnSUNBZ0lDQmpiMjUwWVdsdVpYSXNYRzRnSUNBZ0lDQmpiMjUwWlhoMExGeHVJQ0FnSUNBZ1kyOXVkR0ZwYm1WeUxtaGxiSEJsY25Nc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJdWNHRnlkR2xoYkhNc1hHNGdJQ0FnSUNCdmNIUnBiMjV6TG1SaGRHRWdmSHdnWkdGMFlTeGNiaUFnSUNBZ0lHSnNiMk5yVUdGeVlXMXpJQ1ltSUZ0dmNIUnBiMjV6TG1Kc2IyTnJVR0Z5WVcxelhTNWpiMjVqWVhRb1lteHZZMnRRWVhKaGJYTXBMRnh1SUNBZ0lDQWdZM1Z5Y21WdWRFUmxjSFJvYzF4dUlDQWdJQ2s3WEc0Z0lIMWNibHh1SUNCd2NtOW5JRDBnWlhobFkzVjBaVVJsWTI5eVlYUnZjbk1vWm00c0lIQnliMmNzSUdOdmJuUmhhVzVsY2l3Z1pHVndkR2h6TENCa1lYUmhMQ0JpYkc5amExQmhjbUZ0Y3lrN1hHNWNiaUFnY0hKdlp5NXdjbTluY21GdElEMGdhVHRjYmlBZ2NISnZaeTVrWlhCMGFDQTlJR1JsY0hSb2N5QS9JR1JsY0hSb2N5NXNaVzVuZEdnZ09pQXdPMXh1SUNCd2NtOW5MbUpzYjJOclVHRnlZVzF6SUQwZ1pHVmpiR0Z5WldSQ2JHOWphMUJoY21GdGN5QjhmQ0F3TzF4dUlDQnlaWFIxY200Z2NISnZaenRjYm4xY2JseHVMeW9xWEc0Z0tpQlVhR2x6SUdseklHTjFjbkpsYm5Sc2VTQndZWEowSUc5bUlIUm9aU0J2Wm1acFkybGhiQ0JCVUVrc0lIUm9aWEpsWm05eVpTQnBiWEJzWlcxbGJuUmhkR2x2YmlCa1pYUmhhV3h6SUhOb2IzVnNaQ0J1YjNRZ1ltVWdZMmhoYm1kbFpDNWNiaUFxTDF4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhKbGMyOXNkbVZRWVhKMGFXRnNLSEJoY25ScFlXd3NJR052Ym5SbGVIUXNJRzl3ZEdsdmJuTXBJSHRjYmlBZ2FXWWdLQ0Z3WVhKMGFXRnNLU0I3WEc0Z0lDQWdhV1lnS0c5d2RHbHZibk11Ym1GdFpTQTlQVDBnSjBCd1lYSjBhV0ZzTFdKc2IyTnJKeWtnZTF4dUlDQWdJQ0FnY0dGeWRHbGhiQ0E5SUc5d2RHbHZibk11WkdGMFlWc25jR0Z5ZEdsaGJDMWliRzlqYXlkZE8xeHVJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0J3WVhKMGFXRnNJRDBnYjNCMGFXOXVjeTV3WVhKMGFXRnNjMXR2Y0hScGIyNXpMbTVoYldWZE8xeHVJQ0FnSUgxY2JpQWdmU0JsYkhObElHbG1JQ2doY0dGeWRHbGhiQzVqWVd4c0lDWW1JQ0Z2Y0hScGIyNXpMbTVoYldVcElIdGNiaUFnSUNBdkx5QlVhR2x6SUdseklHRWdaSGx1WVcxcFl5QndZWEowYVdGc0lIUm9ZWFFnY21WMGRYSnVaV1FnWVNCemRISnBibWRjYmlBZ0lDQnZjSFJwYjI1ekxtNWhiV1VnUFNCd1lYSjBhV0ZzTzF4dUlDQWdJSEJoY25ScFlXd2dQU0J2Y0hScGIyNXpMbkJoY25ScFlXeHpXM0JoY25ScFlXeGRPMXh1SUNCOVhHNGdJSEpsZEhWeWJpQndZWEowYVdGc08xeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnYVc1MmIydGxVR0Z5ZEdsaGJDaHdZWEowYVdGc0xDQmpiMjUwWlhoMExDQnZjSFJwYjI1ektTQjdYRzRnSUM4dklGVnpaU0IwYUdVZ1kzVnljbVZ1ZENCamJHOXpkWEpsSUdOdmJuUmxlSFFnZEc4Z2MyRjJaU0IwYUdVZ2NHRnlkR2xoYkMxaWJHOWpheUJwWmlCMGFHbHpJSEJoY25ScFlXeGNiaUFnWTI5dWMzUWdZM1Z5Y21WdWRGQmhjblJwWVd4Q2JHOWpheUE5SUc5d2RHbHZibk11WkdGMFlTQW1KaUJ2Y0hScGIyNXpMbVJoZEdGYkozQmhjblJwWVd3dFlteHZZMnNuWFR0Y2JpQWdiM0IwYVc5dWN5NXdZWEowYVdGc0lEMGdkSEoxWlR0Y2JpQWdhV1lnS0c5d2RHbHZibk11YVdSektTQjdYRzRnSUNBZ2IzQjBhVzl1Y3k1a1lYUmhMbU52Ym5SbGVIUlFZWFJvSUQwZ2IzQjBhVzl1Y3k1cFpITmJNRjBnZkh3Z2IzQjBhVzl1Y3k1a1lYUmhMbU52Ym5SbGVIUlFZWFJvTzF4dUlDQjlYRzVjYmlBZ2JHVjBJSEJoY25ScFlXeENiRzlqYXp0Y2JpQWdhV1lnS0c5d2RHbHZibk11Wm00Z0ppWWdiM0IwYVc5dWN5NW1iaUFoUFQwZ2JtOXZjQ2tnZTF4dUlDQWdJRzl3ZEdsdmJuTXVaR0YwWVNBOUlHTnlaV0YwWlVaeVlXMWxLRzl3ZEdsdmJuTXVaR0YwWVNrN1hHNGdJQ0FnTHk4Z1YzSmhjSEJsY2lCbWRXNWpkR2x2YmlCMGJ5Qm5aWFFnWVdOalpYTnpJSFJ2SUdOMWNuSmxiblJRWVhKMGFXRnNRbXh2WTJzZ1puSnZiU0IwYUdVZ1kyeHZjM1Z5WlZ4dUlDQWdJR3hsZENCbWJpQTlJRzl3ZEdsdmJuTXVabTQ3WEc0Z0lDQWdjR0Z5ZEdsaGJFSnNiMk5ySUQwZ2IzQjBhVzl1Y3k1a1lYUmhXeWR3WVhKMGFXRnNMV0pzYjJOckoxMGdQU0JtZFc1amRHbHZiaUJ3WVhKMGFXRnNRbXh2WTJ0WGNtRndjR1Z5S0Z4dUlDQWdJQ0FnWTI5dWRHVjRkQ3hjYmlBZ0lDQWdJRzl3ZEdsdmJuTWdQU0I3ZlZ4dUlDQWdJQ2tnZTF4dUlDQWdJQ0FnTHk4Z1VtVnpkRzl5WlNCMGFHVWdjR0Z5ZEdsaGJDMWliRzlqYXlCbWNtOXRJSFJvWlNCamJHOXpkWEpsSUdadmNpQjBhR1VnWlhobFkzVjBhVzl1SUc5bUlIUm9aU0JpYkc5amExeHVJQ0FnSUNBZ0x5OGdhUzVsTGlCMGFHVWdjR0Z5ZENCcGJuTnBaR1VnZEdobElHSnNiMk5ySUc5bUlIUm9aU0J3WVhKMGFXRnNJR05oYkd3dVhHNGdJQ0FnSUNCdmNIUnBiMjV6TG1SaGRHRWdQU0JqY21WaGRHVkdjbUZ0WlNodmNIUnBiMjV6TG1SaGRHRXBPMXh1SUNBZ0lDQWdiM0IwYVc5dWN5NWtZWFJoV3lkd1lYSjBhV0ZzTFdKc2IyTnJKMTBnUFNCamRYSnlaVzUwVUdGeWRHbGhiRUpzYjJOck8xeHVJQ0FnSUNBZ2NtVjBkWEp1SUdadUtHTnZiblJsZUhRc0lHOXdkR2x2Ym5NcE8xeHVJQ0FnSUgwN1hHNGdJQ0FnYVdZZ0tHWnVMbkJoY25ScFlXeHpLU0I3WEc0Z0lDQWdJQ0J2Y0hScGIyNXpMbkJoY25ScFlXeHpJRDBnVlhScGJITXVaWGgwWlc1a0tIdDlMQ0J2Y0hScGIyNXpMbkJoY25ScFlXeHpMQ0JtYmk1d1lYSjBhV0ZzY3lrN1hHNGdJQ0FnZlZ4dUlDQjlYRzVjYmlBZ2FXWWdLSEJoY25ScFlXd2dQVDA5SUhWdVpHVm1hVzVsWkNBbUppQndZWEowYVdGc1FteHZZMnNwSUh0Y2JpQWdJQ0J3WVhKMGFXRnNJRDBnY0dGeWRHbGhiRUpzYjJOck8xeHVJQ0I5WEc1Y2JpQWdhV1lnS0hCaGNuUnBZV3dnUFQwOUlIVnVaR1ZtYVc1bFpDa2dlMXh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZlR05sY0hScGIyNG9KMVJvWlNCd1lYSjBhV0ZzSUNjZ0t5QnZjSFJwYjI1ekxtNWhiV1VnS3lBbklHTnZkV3hrSUc1dmRDQmlaU0JtYjNWdVpDY3BPMXh1SUNCOUlHVnNjMlVnYVdZZ0tIQmhjblJwWVd3Z2FXNXpkR0Z1WTJWdlppQkdkVzVqZEdsdmJpa2dlMXh1SUNBZ0lISmxkSFZ5YmlCd1lYSjBhV0ZzS0dOdmJuUmxlSFFzSUc5d2RHbHZibk1wTzF4dUlDQjlYRzU5WEc1Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCdWIyOXdLQ2tnZTF4dUlDQnlaWFIxY200Z0p5YzdYRzU5WEc1Y2JtWjFibU4wYVc5dUlHbHVhWFJFWVhSaEtHTnZiblJsZUhRc0lHUmhkR0VwSUh0Y2JpQWdhV1lnS0NGa1lYUmhJSHg4SUNFb0ozSnZiM1FuSUdsdUlHUmhkR0VwS1NCN1hHNGdJQ0FnWkdGMFlTQTlJR1JoZEdFZ1B5QmpjbVZoZEdWR2NtRnRaU2hrWVhSaEtTQTZJSHQ5TzF4dUlDQWdJR1JoZEdFdWNtOXZkQ0E5SUdOdmJuUmxlSFE3WEc0Z0lIMWNiaUFnY21WMGRYSnVJR1JoZEdFN1hHNTlYRzVjYm1aMWJtTjBhVzl1SUdWNFpXTjFkR1ZFWldOdmNtRjBiM0p6S0dadUxDQndjbTluTENCamIyNTBZV2x1WlhJc0lHUmxjSFJvY3l3Z1pHRjBZU3dnWW14dlkydFFZWEpoYlhNcElIdGNiaUFnYVdZZ0tHWnVMbVJsWTI5eVlYUnZjaWtnZTF4dUlDQWdJR3hsZENCd2NtOXdjeUE5SUh0OU8xeHVJQ0FnSUhCeWIyY2dQU0JtYmk1a1pXTnZjbUYwYjNJb1hHNGdJQ0FnSUNCd2NtOW5MRnh1SUNBZ0lDQWdjSEp2Y0hNc1hHNGdJQ0FnSUNCamIyNTBZV2x1WlhJc1hHNGdJQ0FnSUNCa1pYQjBhSE1nSmlZZ1pHVndkR2h6V3pCZExGeHVJQ0FnSUNBZ1pHRjBZU3hjYmlBZ0lDQWdJR0pzYjJOclVHRnlZVzF6TEZ4dUlDQWdJQ0FnWkdWd2RHaHpYRzRnSUNBZ0tUdGNiaUFnSUNCVmRHbHNjeTVsZUhSbGJtUW9jSEp2Wnl3Z2NISnZjSE1wTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ3Y205bk8xeHVmVnh1WEc1bWRXNWpkR2x2YmlCM2NtRndTR1ZzY0dWeWMxUnZVR0Z6YzB4dmIydDFjRkJ5YjNCbGNuUjVLRzFsY21kbFpFaGxiSEJsY25Nc0lHTnZiblJoYVc1bGNpa2dlMXh1SUNCUFltcGxZM1F1YTJWNWN5aHRaWEpuWldSSVpXeHdaWEp6S1M1bWIzSkZZV05vS0dobGJIQmxjazVoYldVZ1BUNGdlMXh1SUNBZ0lHeGxkQ0JvWld4d1pYSWdQU0J0WlhKblpXUklaV3h3WlhKelcyaGxiSEJsY2s1aGJXVmRPMXh1SUNBZ0lHMWxjbWRsWkVobGJIQmxjbk5iYUdWc2NHVnlUbUZ0WlYwZ1BTQndZWE56VEc5dmEzVndVSEp2Y0dWeWRIbFBjSFJwYjI0b2FHVnNjR1Z5TENCamIyNTBZV2x1WlhJcE8xeHVJQ0I5S1R0Y2JuMWNibHh1Wm5WdVkzUnBiMjRnY0dGemMweHZiMnQxY0ZCeWIzQmxjblI1VDNCMGFXOXVLR2hsYkhCbGNpd2dZMjl1ZEdGcGJtVnlLU0I3WEc0Z0lHTnZibk4wSUd4dmIydDFjRkJ5YjNCbGNuUjVJRDBnWTI5dWRHRnBibVZ5TG14dmIydDFjRkJ5YjNCbGNuUjVPMXh1SUNCeVpYUjFjbTRnZDNKaGNFaGxiSEJsY2lob1pXeHdaWElzSUc5d2RHbHZibk1nUFQ0Z2UxeHVJQ0FnSUhKbGRIVnliaUJWZEdsc2N5NWxlSFJsYm1Rb2V5QnNiMjlyZFhCUWNtOXdaWEowZVNCOUxDQnZjSFJwYjI1ektUdGNiaUFnZlNrN1hHNTlYRzRpWFgwPVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuZXhwb3J0cy53cmFwSGVscGVyID0gd3JhcEhlbHBlcjtcblxuZnVuY3Rpb24gd3JhcEhlbHBlcihoZWxwZXIsIHRyYW5zZm9ybU9wdGlvbnNGbikge1xuICBpZiAodHlwZW9mIGhlbHBlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGJ1dCBhcHBhcmVudGx5IGl0IGRvZXMgaW4gaHR0cHM6Ly9naXRodWIuY29tL3d5Y2F0cy9oYW5kbGViYXJzLmpzL2lzc3Vlcy8xNjM5XG4gICAgLy8gV2UgdHJ5IHRvIG1ha2UgdGhlIHdyYXBwZXIgbGVhc3QtaW52YXNpdmUgYnkgbm90IHdyYXBwaW5nIGl0LCBpZiB0aGUgaGVscGVyIGlzIG5vdCBhIGZ1bmN0aW9uLlxuICAgIHJldHVybiBoZWxwZXI7XG4gIH1cbiAgdmFyIHdyYXBwZXIgPSBmdW5jdGlvbiB3cmFwcGVyKCkgLyogZHluYW1pYyBhcmd1bWVudHMgKi97XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0gPSB0cmFuc2Zvcm1PcHRpb25zRm4ob3B0aW9ucyk7XG4gICAgcmV0dXJuIGhlbHBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xuICByZXR1cm4gd3JhcHBlcjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMnhwWWk5b1lXNWtiR1ZpWVhKekwybHVkR1Z5Ym1Gc0wzZHlZWEJJWld4d1pYSXVhbk1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJanM3T3pzN1FVRkJUeXhUUVVGVExGVkJRVlVzUTBGQlF5eE5RVUZOTEVWQlFVVXNhMEpCUVd0Q0xFVkJRVVU3UVVGRGNrUXNUVUZCU1N4UFFVRlBMRTFCUVUwc1MwRkJTeXhWUVVGVkxFVkJRVVU3T3p0QlFVZG9ReXhYUVVGUExFMUJRVTBzUTBGQlF6dEhRVU5tTzBGQlEwUXNUVUZCU1N4UFFVRlBMRWRCUVVjc1UwRkJWaXhQUVVGUExEQkNRVUZ4UXp0QlFVTTVReXhSUVVGTkxFOUJRVThzUjBGQlJ5eFRRVUZUTEVOQlFVTXNVMEZCVXl4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEJRVU5vUkN4aFFVRlRMRU5CUVVNc1UwRkJVeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4clFrRkJhMElzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0QlFVTTVSQ3hYUVVGUExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RlFVRkZMRk5CUVZNc1EwRkJReXhEUVVGRE8wZEJRM1JETEVOQlFVTTdRVUZEUml4VFFVRlBMRTlCUVU4c1EwRkJRenREUVVOb1FpSXNJbVpwYkdVaU9pSjNjbUZ3U0dWc2NHVnlMbXB6SWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdaMWJtTjBhVzl1SUhkeVlYQklaV3h3WlhJb2FHVnNjR1Z5TENCMGNtRnVjMlp2Y20xUGNIUnBiMjV6Um00cElIdGNiaUFnYVdZZ0tIUjVjR1Z2WmlCb1pXeHdaWElnSVQwOUlDZG1kVzVqZEdsdmJpY3BJSHRjYmlBZ0lDQXZMeUJVYUdseklITm9iM1ZzWkNCdWIzUWdhR0Z3Y0dWdUxDQmlkWFFnWVhCd1lYSmxiblJzZVNCcGRDQmtiMlZ6SUdsdUlHaDBkSEJ6T2k4dloybDBhSFZpTG1OdmJTOTNlV05oZEhNdmFHRnVaR3hsWW1GeWN5NXFjeTlwYzNOMVpYTXZNVFl6T1Z4dUlDQWdJQzh2SUZkbElIUnllU0IwYnlCdFlXdGxJSFJvWlNCM2NtRndjR1Z5SUd4bFlYTjBMV2x1ZG1GemFYWmxJR0o1SUc1dmRDQjNjbUZ3Y0dsdVp5QnBkQ3dnYVdZZ2RHaGxJR2hsYkhCbGNpQnBjeUJ1YjNRZ1lTQm1kVzVqZEdsdmJpNWNiaUFnSUNCeVpYUjFjbTRnYUdWc2NHVnlPMXh1SUNCOVhHNGdJR3hsZENCM2NtRndjR1Z5SUQwZ1puVnVZM1JwYjI0b0x5b2daSGx1WVcxcFl5QmhjbWQxYldWdWRITWdLaThwSUh0Y2JpQWdJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdZWEpuZFcxbGJuUnpXMkZ5WjNWdFpXNTBjeTVzWlc1bmRHZ2dMU0F4WFR0Y2JpQWdJQ0JoY21kMWJXVnVkSE5iWVhKbmRXMWxiblJ6TG14bGJtZDBhQ0F0SURGZElEMGdkSEpoYm5ObWIzSnRUM0IwYVc5dWMwWnVLRzl3ZEdsdmJuTXBPMXh1SUNBZ0lISmxkSFZ5YmlCb1pXeHdaWEl1WVhCd2JIa29kR2hwY3l3Z1lYSm5kVzFsYm5SektUdGNiaUFnZlR0Y2JpQWdjbVYwZFhKdUlIZHlZWEJ3WlhJN1hHNTlYRzRpWFgwPVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlO1xuXG5leHBvcnRzWydkZWZhdWx0J10gPSBmdW5jdGlvbiAoSGFuZGxlYmFycykge1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsIDogd2luZG93LFxuICAgICAgJEhhbmRsZWJhcnMgPSByb290LkhhbmRsZWJhcnM7XG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIEhhbmRsZWJhcnMubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocm9vdC5IYW5kbGViYXJzID09PSBIYW5kbGViYXJzKSB7XG4gICAgICByb290LkhhbmRsZWJhcnMgPSAkSGFuZGxlYmFycztcbiAgICB9XG4gICAgcmV0dXJuIEhhbmRsZWJhcnM7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGV4cG9ydHNbJ2RlZmF1bHQnXTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUwyeHBZaTlvWVc1a2JHVmlZWEp6TDI1dkxXTnZibVpzYVdOMExtcHpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPenM3Y1VKQlFXVXNWVUZCVXl4VlFVRlZMRVZCUVVVN08wRkJSV3hETEUxQlFVa3NTVUZCU1N4SFFVRkhMRTlCUVU4c1RVRkJUU3hMUVVGTExGZEJRVmNzUjBGQlJ5eE5RVUZOTEVkQlFVY3NUVUZCVFR0TlFVTjRSQ3hYUVVGWExFZEJRVWNzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXpzN1FVRkZhRU1zV1VGQlZTeERRVUZETEZWQlFWVXNSMEZCUnl4WlFVRlhPMEZCUTJwRExGRkJRVWtzU1VGQlNTeERRVUZETEZWQlFWVXNTMEZCU3l4VlFVRlZMRVZCUVVVN1FVRkRiRU1zVlVGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4WFFVRlhMRU5CUVVNN1MwRkRMMEk3UVVGRFJDeFhRVUZQTEZWQlFWVXNRMEZCUXp0SFFVTnVRaXhEUVVGRE8wTkJRMGdpTENKbWFXeGxJam9pYm04dFkyOXVabXhwWTNRdWFuTWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpsZUhCdmNuUWdaR1ZtWVhWc2RDQm1kVzVqZEdsdmJpaElZVzVrYkdWaVlYSnpLU0I3WEc0Z0lDOHFJR2x6ZEdGdVluVnNJR2xuYm05eVpTQnVaWGgwSUNvdlhHNGdJR3hsZENCeWIyOTBJRDBnZEhsd1pXOW1JR2RzYjJKaGJDQWhQVDBnSjNWdVpHVm1hVzVsWkNjZ1B5Qm5iRzlpWVd3Z09pQjNhVzVrYjNjc1hHNGdJQ0FnSkVoaGJtUnNaV0poY25NZ1BTQnliMjkwTGtoaGJtUnNaV0poY25NN1hHNGdJQzhxSUdsemRHRnVZblZzSUdsbmJtOXlaU0J1WlhoMElDb3ZYRzRnSUVoaGJtUnNaV0poY25NdWJtOURiMjVtYkdsamRDQTlJR1oxYm1OMGFXOXVLQ2tnZTF4dUlDQWdJR2xtSUNoeWIyOTBMa2hoYm1Sc1pXSmhjbk1nUFQwOUlFaGhibVJzWldKaGNuTXBJSHRjYmlBZ0lDQWdJSEp2YjNRdVNHRnVaR3hsWW1GeWN5QTlJQ1JJWVc1a2JHVmlZWEp6TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z1NHRnVaR3hsWW1GeWN6dGNiaUFnZlR0Y2JuMWNiaUpkZlE9PVxuIiwicmVxdWlyZSgnLi4vc3R5bGVzL21haW4uY3NzJyk7XG5yZXF1aXJlKCcuLi9mb250cy9mb250cy5jc3MnKTtcbmNvbnN0IE5vdGlmaWNhdGlvbkZvcm0gPSByZXF1aXJlKCcuL05vdGlmaWNhdGlvbkZvcm0nKTtcbmNvbnN0IE5vdGlmaWNhdGlvbkh1YiA9IHJlcXVpcmUoJy4vTm90aWZpY2F0aW9uSHViJyk7XG5jb25zdCB7IGdldFJ4anNUYXJnZXQsIGdldFJ4anNUYXJnZXRGcm9tS2V5LCBnZXRUaW1lZEV2ZW50IH0gPSByZXF1aXJlKCcuL3J4anMvd2F0Y2hPcGVyYXRvcnMnKTtcbmNvbnN0IHsgZnJvbUV2ZW50IH0gPSByZXF1aXJlKCdyeGpzJyk7XG5jb25zdCB7IG1hcCwgbWVyZ2UsIHN3aXRjaE1hcCwgZXhoYXVzdE1hcCB9ID0gcmVxdWlyZSgncnhqcy9vcGVyYXRvcnMnKTtcbmltcG9ydCB7IGRlZmF1bHQgYXMgTXlNYXAgfSBmcm9tICcuLi9zcmMvTXlNYXAnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEFwcCB7XG4gIGNvbnN0cnVjdG9yKHJvdXRlcywgbm90aWZpY2F0aW9ucykge1xuICAgIHRoaXMubmF2aWdhdGUgPSB0aGlzLm5hdmlnYXRlLmJpbmQodGhpcyk7XG4gICAgdGhpcy5uYXZpZ2F0ZVRvTG9jYXRpb24gPSB0aGlzLm5hdmlnYXRlVG9Mb2NhdGlvbi5iaW5kKHRoaXMpO1xuICAgIHRoaXMucmVuZGVyID0gdGhpcy5yZW5kZXIuYmluZCh0aGlzKTtcbiAgICB0aGlzLnJlbmRlclBhdGggPSB0aGlzLnJlbmRlclBhdGguYmluZCh0aGlzKTtcbiAgICB0aGlzLmhhbmRsZUV2ZW50ID0gdGhpcy5oYW5kbGVFdmVudC5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5yb3V0ZXMgPSByb3V0ZXM7XG4gICAgdGhpcy5ub3RpZmljYXRpb25Gb3JtID0gbmV3IE5vdGlmaWNhdGlvbkZvcm0obm90aWZpY2F0aW9ucywgdGhpcy5yZW5kZXIpO1xuXG4gICAgdGhpcy53YXRjaEZhY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndhdGNoLWZhY2VcIik7XG4gICAgdGhpcy5sZWZ0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b24tbGVmdFwiKTtcbiAgICB0aGlzLnJpZ2h0QnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJidXR0b24tcmlnaHRcIik7XG4gICAgdGhpcy50b3BCdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbi10b3BcIik7XG4gICAgdGhpcy5ib3R0b21CdXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJ1dHRvbi1ib3R0b21cIik7XG4gICAgdGhpcy5ub3RpZmljYXRpb25Db250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5vdGlmaWNhdGlvbi1jb250YWluZXJcIik7XG4gICAgdGhpcy53aG9sZVBhZ2UgPSBkb2N1bWVudC5ib2R5O1xuICAgIHRoaXMud2F0Y2hDb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnd2F0Y2gnKTtcblxuICAgIHRoaXMuY2xpY2tzID0gMDtcbiAgICB0aGlzLmNsaWNrVGltZW91dCA9IG51bGw7XG5cbiAgICBjb25zdCBoaWRlTm90aWZpY2F0aW9uID0gKCkgPT4ge1xuICAgICAgdGhpcy5uYXZpZ2F0ZVRvTG9jYXRpb24od2luZG93LmxvY2F0aW9uLCB0aGlzLnByZXZQcm9wcyk7XG4gICAgfVxuXG4gICAgd2luZG93Lm9uaGFzaGNoYW5nZSA9IChoYXNoQ2hhbmdlRXZlbnQpID0+IHtcbiAgICAgIGlmIChoYXNoQ2hhbmdlRXZlbnQubmV3VVJMICE9PSBoYXNoQ2hhbmdlRXZlbnQub2xkVVJMKSB7XG4gICAgICAgIGNvbnN0IHBhdGggPSBoYXNoQ2hhbmdlRXZlbnQubmV3VVJMLnNwbGl0KFwiI1wiKVsxXTtcbiAgICAgICAgdGhpcy5yZW5kZXJQYXRoKHBhdGgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIE5vdGlmaWNhdGlvbkh1Yi5vbkhpZGUoaGlkZU5vdGlmaWNhdGlvbik7XG5cbiAgICB0aGlzLnNldHVwUnhqc0xpc3RlbmVycygpO1xuICB9XG5cbiAgZGVmaW5lQ3VzdG9tRWxlbWVudHMoKXtcbiAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUoJ215LW1hcCcsIE15TWFwKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIG5hdmlnYXRlVG9Mb2NhdGlvbihsb2NhdGlvbiwgcHJvcHMgPSB7fSkge1xuICAgIGxldCBwYXRoID0gbG9jYXRpb24uaGFzaC5zbGljZSgxKTtcbiAgICBpZiAocGF0aCA9PT0gXCJcIikge1xuICAgICAgcGF0aCA9IFwiL1wiO1xuICAgIH1cbiAgICB0aGlzLnJlbmRlclBhdGgocGF0aCwgcHJvcHMpO1xuICB9XG5cbiAgc2V0dXBSeGpzTGlzdGVuZXJzKCkge1xuICAgIHRoaXMud2F0Y2hNb3VzZURvd24kID0gZnJvbUV2ZW50KHRoaXMud2F0Y2hDb250YWluZXIsICdtb3VzZWRvd24nKS5waXBlKGdldFJ4anNUYXJnZXQoKSlcbiAgICB0aGlzLndhdGNoTW91c2VVcCQgPSBmcm9tRXZlbnQodGhpcy53YXRjaENvbnRhaW5lciwgJ21vdXNldXAnKS5waXBlKGdldFJ4anNUYXJnZXQoKSlcbiAgICB0aGlzLndhdGNoS2V5RG93biQgPSBmcm9tRXZlbnQodGhpcy53aG9sZVBhZ2UsICdrZXlkb3duJykucGlwZShnZXRSeGpzVGFyZ2V0RnJvbUtleSgpKVxuICAgIHRoaXMud2F0Y2hLZXlVcCQgPSBmcm9tRXZlbnQodGhpcy53aG9sZVBhZ2UsICdrZXl1cCcpLnBpcGUoZ2V0Unhqc1RhcmdldEZyb21LZXkoKSlcblxuICAgIHRoaXMubWVyZ2VFdmVudHMoKTtcbiAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKCk7XG4gIH1cblxuICBtZXJnZUV2ZW50cygpIHtcbiAgICB0aGlzLndhdGNoRG93biQgPSB0aGlzLndhdGNoTW91c2VEb3duJC5waXBlKFxuICAgICAgbWVyZ2UodGhpcy53YXRjaEtleURvd24kKSxcbiAgICAgIGdldFRpbWVkRXZlbnQoKSxcbiAgICApO1xuICAgIHRoaXMud2F0Y2hVcCQgPSB0aGlzLndhdGNoTW91c2VVcCQucGlwZShcbiAgICAgIG1lcmdlKHRoaXMud2F0Y2hLZXlVcCQpLFxuICAgICAgZ2V0VGltZWRFdmVudCgpLFxuICAgICk7XG4gIH1cblxuICB0ZXN0Q2xpY2soLi4uYXJncykge1xuICAgIHRoaXMuY2xpY2tzKys7XG4gICAgaWYgKHRoaXMuY2xpY2tUaW1lb3V0KSB7XG4gICAgICBpZiAodGhpcy5jbGlja3MgPD0gMikge1xuICAgICAgICB0aGlzLnNldENsaWNrVGltZW91dCgoKSA9PiB7dGhpcy5oYW5kbGVEb3VibGVDbGljayguLi5hcmdzKX0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRDbGlja1RpbWVvdXQoKCkgPT4ge30pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmxvZyh0aGlzKVxuICAgICAgdGhpcy5zZXRDbGlja1RpbWVvdXQoKCkgPT4ge3RoaXMuaGFuZGxlRXZlbnQoLi4uYXJncyl9KTtcbiAgICB9XG4gIH1cblxuICBzZXRDbGlja1RpbWVvdXQoY2IpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5jbGlja1RpbWVvdXQpO1xuICAgIHRoaXMuY2xpY2tUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmNsaWNrVGltZW91dCA9IG51bGw7XG4gICAgICB0aGlzLmNsaWNrcyA9IDA7XG4gICAgICBjYigpO1xuICAgIH0sIDQwMCk7XG4gIH1cblxuICBzdWJzY3JpYmVUb0V2ZW50cygpIHtcbiAgICB0aGlzLndhdGNoQ2xpY2skID0gdGhpcy53YXRjaERvd24kLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKGRvd25FdmVudCkgPT4gdGhpcy53YXRjaFVwJC5waXBlKFxuICAgICAgICBtYXAoKHVwRXZlbnQpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGFyZ2V0OiB1cEV2ZW50LnRhcmdldCxcbiAgICAgICAgICAgIHRpbWVUYWtlbjogdXBFdmVudC50aW1lc3RhbXAgLSBkb3duRXZlbnQudGltZXN0YW1wLFxuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICApKSxcbiAgICApXG4gICAgdGhpcy53YXRjaENsaWNrJC5zdWJzY3JpYmUoKC4uLmFyZ3MpID0+IHt0aGlzLnRlc3RDbGljayguLi5hcmdzKX0pO1xuICB9XG4gIFxuICBoYW5kbGVFdmVudCh7IHRhcmdldCwgdGltZVRha2VuIH0pIHtcbiAgICBsZXQgZXZlbnROYW1lID0gYCR7dGFyZ2V0fUJ1dHRvbkV2ZW50YDtcbiAgICBsZXQgZXZlbnRIYW5kbGVyUGFyYW1zO1xuICAgIGlmICh0aW1lVGFrZW4gPiA3NTApIHtcbiAgICAgIGV2ZW50TmFtZSA9IGAke2V2ZW50TmFtZX1Ib2xkYDtcbiAgICAgIGV2ZW50SGFuZGxlclBhcmFtcyA9IHsgdGltZVRha2VuIH07XG4gICAgfVxuICAgIGNvbnN0IHZpZXdOYW1lID0gdGhpcy5jdXJyZW50Vmlldy5jb25zdHJ1Y3Rvci5uYW1lO1xuXG4gICAgY29uc3QgZXZlbnRIYW5kbGVyID0gdGhpcy5jdXJyZW50Vmlld1tldmVudE5hbWVdO1xuICAgIGlmIChldmVudEhhbmRsZXIpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBFeGVjdXRpbmcgJyR7ZXZlbnROYW1lfSgpJyBvbiAke3ZpZXdOYW1lfWApO1xuICAgICAgZXZlbnRIYW5kbGVyLmJpbmQodGhpcy5jdXJyZW50VmlldykoZXZlbnRIYW5kbGVyUGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcihgJHt2aWV3TmFtZX0gbmVlZHMgJyR7ZXZlbnROYW1lfSgpJyB0byBiZSBkZWZpbmVkLmApO1xuICAgIH1cbiAgfVxuXG4gIGhhbmRsZURvdWJsZUNsaWNrKHsgdGFyZ2V0LCB0aW1lVGFrZW4gfSkge1xuICAgIGxldCBldmVudE5hbWUgPSBgJHt0YXJnZXR9QnV0dG9uRXZlbnREb3VibGVDbGlja2A7XG4gICAgbGV0IGV2ZW50SGFuZGxlclBhcmFtcztcbiAgICBjb25zdCB2aWV3TmFtZSA9IHRoaXMuY3VycmVudFZpZXcuY29uc3RydWN0b3IubmFtZTtcbiAgICBjb25zdCBldmVudEhhbmRsZXIgPSB0aGlzLmN1cnJlbnRWaWV3W2V2ZW50TmFtZV07XG4gICAgaWYgKGV2ZW50SGFuZGxlcikge1xuICAgICAgY29uc29sZS5sb2coYEV4ZWN1dGluZyAnJHtldmVudE5hbWV9KCknIG9uICR7dmlld05hbWV9YCk7XG4gICAgICBldmVudEhhbmRsZXIuYmluZCh0aGlzLmN1cnJlbnRWaWV3KShldmVudEhhbmRsZXJQYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKGAke3ZpZXdOYW1lfSBuZWVkcyAnJHtldmVudE5hbWV9KCknIHRvIGJlIGRlZmluZWQuYCk7XG4gICAgfVxuICB9XG5cbiAgbmF2aWdhdGUocGF0aCkge1xuICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoID0gcGF0aDtcbiAgfVxuXG4gIHJlbmRlcihlbGVtZW50LCBWaWV3VHlwZSwgcHJvcHMpIHtcbiAgICB0aGlzLnByZXZQcm9wcyA9IHByb3BzO1xuXG4gICAgY29uc3QgdmlldyA9IG5ldyBWaWV3VHlwZSh7XG4gICAgICAuLi5wcm9wcyxcbiAgICAgIG5hdmlnYXRlOiB0aGlzLm5hdmlnYXRlLFxuICAgICAgd2F0Y2hGYWNlOiB0aGlzLndhdGNoRmFjZSxcbiAgICB9KTtcblxuICAgIHRoaXMuY3VycmVudFZpZXcgPSB2aWV3O1xuXG4gICAgdmlldy5wYWdlV2lsbExvYWQoKTtcbiAgICBlbGVtZW50LmlubmVySFRNTCA9IHZpZXcucmVuZGVyKCk7XG4gICAgdmlldy5wYWdlRGlkTG9hZCgpO1xuICB9XG5cbiAgcmVuZGVyUGF0aChwYXRoLHByb3BzKXtcbiAgICBjb25zdCBQYWdlID0gdGhpcy5yb3V0ZXNbcGF0aF0gfHwgdGhpcy5yb3V0ZXNbXCI0MDRcIl07XG4gICAgdGhpcy5yZW5kZXIodGhpcy53YXRjaEZhY2UsIFBhZ2UsIHByb3BzKTtcbiAgfVxufTtcbiIsImltcG9ydCBMIGZyb20gJ2xlYWZsZXQnO1xuaW1wb3J0ICdsZWFmbGV0L2Rpc3QvbGVhZmxldC5jc3MnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNYXAgZXh0ZW5kcyBIVE1MRWxlbWVudCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMucmVuZGVyTWFwKCk7XG4gICAgfVxuICAgIFxuICAgIHJlbmRlck1hcCgpe1xuICAgICAgY29uc29sZS5sb2coXCJyZW5kZXJpbmcgbWFwXCIpO1xuICAgICAgdGhpcy5tYXAgPSBMLm1hcCgnbWFwJyx7XG4gICAgICAgIGNlbnRlcjogWzMzLjgsMTUxLjIwXSxcbiAgICAgICAgem9vbTogMCxcbiAgICAgICAgem9vbUNvbnRyb2w6IHRydWVcbiAgICAgIH0pXG4gICAgICBMLnRpbGVMYXllcignaHR0cHM6Ly97c30udGlsZS5vcGVuc3RyZWV0bWFwLm9yZy97en0ve3h9L3t5fS5wbmcnLCB7XG4gICAgICBhdHRyaWJ1dGlvbjogJyZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvY29weXJpZ2h0XCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzJ1xuICAgICAgfSkuYWRkVG8odGhpcy5tYXApO1xuICAgIH1cbn1cbiIsIi8qIEBwcmVzZXJ2ZVxuICogTGVhZmxldCAxLjcuMSwgYSBKUyBsaWJyYXJ5IGZvciBpbnRlcmFjdGl2ZSBtYXBzLiBodHRwOi8vbGVhZmxldGpzLmNvbVxuICogKGMpIDIwMTAtMjAxOSBWbGFkaW1pciBBZ2Fmb25raW4sIChjKSAyMDEwLTIwMTEgQ2xvdWRNYWRlXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZmFjdG9yeSgoZ2xvYmFsLkwgPSB7fSkpKTtcbn0odGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICB2YXIgdmVyc2lvbiA9IFwiMS43LjFcIjtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgVXRpbFxyXG4gICAqXHJcbiAgICogVmFyaW91cyB1dGlsaXR5IGZ1bmN0aW9ucywgdXNlZCBieSBMZWFmbGV0IGludGVybmFsbHkuXHJcbiAgICovXHJcblxyXG4gIC8vIEBmdW5jdGlvbiBleHRlbmQoZGVzdDogT2JqZWN0LCBzcmM/OiBPYmplY3QpOiBPYmplY3RcclxuICAvLyBNZXJnZXMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGBzcmNgIG9iamVjdCAob3IgbXVsdGlwbGUgb2JqZWN0cykgaW50byBgZGVzdGAgb2JqZWN0IGFuZCByZXR1cm5zIHRoZSBsYXR0ZXIuIEhhcyBhbiBgTC5leHRlbmRgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIGV4dGVuZChkZXN0KSB7XHJcbiAgXHR2YXIgaSwgaiwgbGVuLCBzcmM7XHJcblxyXG4gIFx0Zm9yIChqID0gMSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaiA8IGxlbjsgaisrKSB7XHJcbiAgXHRcdHNyYyA9IGFyZ3VtZW50c1tqXTtcclxuICBcdFx0Zm9yIChpIGluIHNyYykge1xyXG4gIFx0XHRcdGRlc3RbaV0gPSBzcmNbaV07XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICBcdHJldHVybiBkZXN0O1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNyZWF0ZShwcm90bzogT2JqZWN0LCBwcm9wZXJ0aWVzPzogT2JqZWN0KTogT2JqZWN0XHJcbiAgLy8gQ29tcGF0aWJpbGl0eSBwb2x5ZmlsbCBmb3IgW09iamVjdC5jcmVhdGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL09iamVjdC9jcmVhdGUpXHJcbiAgdmFyIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGUgfHwgKGZ1bmN0aW9uICgpIHtcclxuICBcdGZ1bmN0aW9uIEYoKSB7fVxyXG4gIFx0cmV0dXJuIGZ1bmN0aW9uIChwcm90bykge1xyXG4gIFx0XHRGLnByb3RvdHlwZSA9IHByb3RvO1xyXG4gIFx0XHRyZXR1cm4gbmV3IEYoKTtcclxuICBcdH07XHJcbiAgfSkoKTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGJpbmQoZm46IEZ1bmN0aW9uLCDigKYpOiBGdW5jdGlvblxyXG4gIC8vIFJldHVybnMgYSBuZXcgZnVuY3Rpb24gYm91bmQgdG8gdGhlIGFyZ3VtZW50cyBwYXNzZWQsIGxpa2UgW0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9GdW5jdGlvbi9iaW5kKS5cclxuICAvLyBIYXMgYSBgTC5iaW5kKClgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIGJpbmQoZm4sIG9iaikge1xyXG4gIFx0dmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xyXG5cclxuICBcdGlmIChmbi5iaW5kKSB7XHJcbiAgXHRcdHJldHVybiBmbi5iaW5kLmFwcGx5KGZuLCBzbGljZS5jYWxsKGFyZ3VtZW50cywgMSkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xyXG5cclxuICBcdHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBmbi5hcHBseShvYmosIGFyZ3MubGVuZ3RoID8gYXJncy5jb25jYXQoc2xpY2UuY2FsbChhcmd1bWVudHMpKSA6IGFyZ3VtZW50cyk7XHJcbiAgXHR9O1xyXG4gIH1cclxuXHJcbiAgLy8gQHByb3BlcnR5IGxhc3RJZDogTnVtYmVyXHJcbiAgLy8gTGFzdCB1bmlxdWUgSUQgdXNlZCBieSBbYHN0YW1wKClgXSgjdXRpbC1zdGFtcClcclxuICB2YXIgbGFzdElkID0gMDtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHN0YW1wKG9iajogT2JqZWN0KTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgdW5pcXVlIElEIG9mIGFuIG9iamVjdCwgYXNzaWduaW5nIGl0IG9uZSBpZiBpdCBkb2Vzbid0IGhhdmUgaXQuXHJcbiAgZnVuY3Rpb24gc3RhbXAob2JqKSB7XHJcbiAgXHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRvYmouX2xlYWZsZXRfaWQgPSBvYmouX2xlYWZsZXRfaWQgfHwgKytsYXN0SWQ7XHJcbiAgXHRyZXR1cm4gb2JqLl9sZWFmbGV0X2lkO1xyXG4gIFx0LyogZXNsaW50LWVuYWJsZSAqL1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHRocm90dGxlKGZuOiBGdW5jdGlvbiwgdGltZTogTnVtYmVyLCBjb250ZXh0OiBPYmplY3QpOiBGdW5jdGlvblxyXG4gIC8vIFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBleGVjdXRlcyBmdW5jdGlvbiBgZm5gIHdpdGggdGhlIGdpdmVuIHNjb3BlIGBjb250ZXh0YFxyXG4gIC8vIChzbyB0aGF0IHRoZSBgdGhpc2Aga2V5d29yZCByZWZlcnMgdG8gYGNvbnRleHRgIGluc2lkZSBgZm5gJ3MgY29kZSkuIFRoZSBmdW5jdGlvblxyXG4gIC8vIGBmbmAgd2lsbCBiZSBjYWxsZWQgbm8gbW9yZSB0aGFuIG9uZSB0aW1lIHBlciBnaXZlbiBhbW91bnQgb2YgYHRpbWVgLiBUaGUgYXJndW1lbnRzXHJcbiAgLy8gcmVjZWl2ZWQgYnkgdGhlIGJvdW5kIGZ1bmN0aW9uIHdpbGwgYmUgYW55IGFyZ3VtZW50cyBwYXNzZWQgd2hlbiBiaW5kaW5nIHRoZVxyXG4gIC8vIGZ1bmN0aW9uLCBmb2xsb3dlZCBieSBhbnkgYXJndW1lbnRzIHBhc3NlZCB3aGVuIGludm9raW5nIHRoZSBib3VuZCBmdW5jdGlvbi5cclxuICAvLyBIYXMgYW4gYEwudGhyb3R0bGVgIHNob3J0Y3V0LlxyXG4gIGZ1bmN0aW9uIHRocm90dGxlKGZuLCB0aW1lLCBjb250ZXh0KSB7XHJcbiAgXHR2YXIgbG9jaywgYXJncywgd3JhcHBlckZuLCBsYXRlcjtcclxuXHJcbiAgXHRsYXRlciA9IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gcmVzZXQgbG9jayBhbmQgY2FsbCBpZiBxdWV1ZWRcclxuICBcdFx0bG9jayA9IGZhbHNlO1xyXG4gIFx0XHRpZiAoYXJncykge1xyXG4gIFx0XHRcdHdyYXBwZXJGbi5hcHBseShjb250ZXh0LCBhcmdzKTtcclxuICBcdFx0XHRhcmdzID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcblxyXG4gIFx0d3JhcHBlckZuID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAobG9jaykge1xyXG4gIFx0XHRcdC8vIGNhbGxlZCB0b28gc29vbiwgcXVldWUgdG8gY2FsbCBsYXRlclxyXG4gIFx0XHRcdGFyZ3MgPSBhcmd1bWVudHM7XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIGNhbGwgYW5kIGxvY2sgdW50aWwgbGF0ZXJcclxuICBcdFx0XHRmbi5hcHBseShjb250ZXh0LCBhcmd1bWVudHMpO1xyXG4gIFx0XHRcdHNldFRpbWVvdXQobGF0ZXIsIHRpbWUpO1xyXG4gIFx0XHRcdGxvY2sgPSB0cnVlO1xyXG4gIFx0XHR9XHJcbiAgXHR9O1xyXG5cclxuICBcdHJldHVybiB3cmFwcGVyRm47XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gd3JhcE51bShudW06IE51bWJlciwgcmFuZ2U6IE51bWJlcltdLCBpbmNsdWRlTWF4PzogQm9vbGVhbik6IE51bWJlclxyXG4gIC8vIFJldHVybnMgdGhlIG51bWJlciBgbnVtYCBtb2R1bG8gYHJhbmdlYCBpbiBzdWNoIGEgd2F5IHNvIGl0IGxpZXMgd2l0aGluXHJcbiAgLy8gYHJhbmdlWzBdYCBhbmQgYHJhbmdlWzFdYC4gVGhlIHJldHVybmVkIHZhbHVlIHdpbGwgYmUgYWx3YXlzIHNtYWxsZXIgdGhhblxyXG4gIC8vIGByYW5nZVsxXWAgdW5sZXNzIGBpbmNsdWRlTWF4YCBpcyBzZXQgdG8gYHRydWVgLlxyXG4gIGZ1bmN0aW9uIHdyYXBOdW0oeCwgcmFuZ2UsIGluY2x1ZGVNYXgpIHtcclxuICBcdHZhciBtYXggPSByYW5nZVsxXSxcclxuICBcdCAgICBtaW4gPSByYW5nZVswXSxcclxuICBcdCAgICBkID0gbWF4IC0gbWluO1xyXG4gIFx0cmV0dXJuIHggPT09IG1heCAmJiBpbmNsdWRlTWF4ID8geCA6ICgoeCAtIG1pbikgJSBkICsgZCkgJSBkICsgbWluO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGZhbHNlRm4oKTogRnVuY3Rpb25cclxuICAvLyBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggYWx3YXlzIHJldHVybnMgYGZhbHNlYC5cclxuICBmdW5jdGlvbiBmYWxzZUZuKCkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGZvcm1hdE51bShudW06IE51bWJlciwgZGlnaXRzPzogTnVtYmVyKTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgbnVtYmVyIGBudW1gIHJvdW5kZWQgdG8gYGRpZ2l0c2AgZGVjaW1hbHMsIG9yIHRvIDYgZGVjaW1hbHMgYnkgZGVmYXVsdC5cclxuICBmdW5jdGlvbiBmb3JtYXROdW0obnVtLCBkaWdpdHMpIHtcclxuICBcdHZhciBwb3cgPSBNYXRoLnBvdygxMCwgKGRpZ2l0cyA9PT0gdW5kZWZpbmVkID8gNiA6IGRpZ2l0cykpO1xyXG4gIFx0cmV0dXJuIE1hdGgucm91bmQobnVtICogcG93KSAvIHBvdztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0cmltKHN0cjogU3RyaW5nKTogU3RyaW5nXHJcbiAgLy8gQ29tcGF0aWJpbGl0eSBwb2x5ZmlsbCBmb3IgW1N0cmluZy5wcm90b3R5cGUudHJpbV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL1RyaW0pXHJcbiAgZnVuY3Rpb24gdHJpbShzdHIpIHtcclxuICBcdHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNwbGl0V29yZHMoc3RyOiBTdHJpbmcpOiBTdHJpbmdbXVxyXG4gIC8vIFRyaW1zIGFuZCBzcGxpdHMgdGhlIHN0cmluZyBvbiB3aGl0ZXNwYWNlIGFuZCByZXR1cm5zIHRoZSBhcnJheSBvZiBwYXJ0cy5cclxuICBmdW5jdGlvbiBzcGxpdFdvcmRzKHN0cikge1xyXG4gIFx0cmV0dXJuIHRyaW0oc3RyKS5zcGxpdCgvXFxzKy8pO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNldE9wdGlvbnMob2JqOiBPYmplY3QsIG9wdGlvbnM6IE9iamVjdCk6IE9iamVjdFxyXG4gIC8vIE1lcmdlcyB0aGUgZ2l2ZW4gcHJvcGVydGllcyB0byB0aGUgYG9wdGlvbnNgIG9mIHRoZSBgb2JqYCBvYmplY3QsIHJldHVybmluZyB0aGUgcmVzdWx0aW5nIG9wdGlvbnMuIFNlZSBgQ2xhc3Mgb3B0aW9uc2AuIEhhcyBhbiBgTC5zZXRPcHRpb25zYCBzaG9ydGN1dC5cclxuICBmdW5jdGlvbiBzZXRPcHRpb25zKG9iaiwgb3B0aW9ucykge1xyXG4gIFx0aWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCAnb3B0aW9ucycpKSB7XHJcbiAgXHRcdG9iai5vcHRpb25zID0gb2JqLm9wdGlvbnMgPyBjcmVhdGUob2JqLm9wdGlvbnMpIDoge307XHJcbiAgXHR9XHJcbiAgXHRmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcclxuICBcdFx0b2JqLm9wdGlvbnNbaV0gPSBvcHRpb25zW2ldO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG9iai5vcHRpb25zO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFBhcmFtU3RyaW5nKG9iajogT2JqZWN0LCBleGlzdGluZ1VybD86IFN0cmluZywgdXBwZXJjYXNlPzogQm9vbGVhbik6IFN0cmluZ1xyXG4gIC8vIENvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgcGFyYW1ldGVyIFVSTCBzdHJpbmcsIGUuZy4gYHthOiBcImZvb1wiLCBiOiBcImJhclwifWBcclxuICAvLyB0cmFuc2xhdGVzIHRvIGAnP2E9Zm9vJmI9YmFyJ2AuIElmIGBleGlzdGluZ1VybGAgaXMgc2V0LCB0aGUgcGFyYW1ldGVycyB3aWxsXHJcbiAgLy8gYmUgYXBwZW5kZWQgYXQgdGhlIGVuZC4gSWYgYHVwcGVyY2FzZWAgaXMgYHRydWVgLCB0aGUgcGFyYW1ldGVyIG5hbWVzIHdpbGxcclxuICAvLyBiZSB1cHBlcmNhc2VkIChlLmcuIGAnP0E9Zm9vJkI9YmFyJ2ApXHJcbiAgZnVuY3Rpb24gZ2V0UGFyYW1TdHJpbmcob2JqLCBleGlzdGluZ1VybCwgdXBwZXJjYXNlKSB7XHJcbiAgXHR2YXIgcGFyYW1zID0gW107XHJcbiAgXHRmb3IgKHZhciBpIGluIG9iaikge1xyXG4gIFx0XHRwYXJhbXMucHVzaChlbmNvZGVVUklDb21wb25lbnQodXBwZXJjYXNlID8gaS50b1VwcGVyQ2FzZSgpIDogaSkgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQob2JqW2ldKSk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gKCghZXhpc3RpbmdVcmwgfHwgZXhpc3RpbmdVcmwuaW5kZXhPZignPycpID09PSAtMSkgPyAnPycgOiAnJicpICsgcGFyYW1zLmpvaW4oJyYnKTtcclxuICB9XHJcblxyXG4gIHZhciB0ZW1wbGF0ZVJlID0gL1xceyAqKFtcXHdfLV0rKSAqXFx9L2c7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0ZW1wbGF0ZShzdHI6IFN0cmluZywgZGF0YTogT2JqZWN0KTogU3RyaW5nXHJcbiAgLy8gU2ltcGxlIHRlbXBsYXRpbmcgZmFjaWxpdHksIGFjY2VwdHMgYSB0ZW1wbGF0ZSBzdHJpbmcgb2YgdGhlIGZvcm0gYCdIZWxsbyB7YX0sIHtifSdgXHJcbiAgLy8gYW5kIGEgZGF0YSBvYmplY3QgbGlrZSBge2E6ICdmb28nLCBiOiAnYmFyJ31gLCByZXR1cm5zIGV2YWx1YXRlZCBzdHJpbmdcclxuICAvLyBgKCdIZWxsbyBmb28sIGJhcicpYC4gWW91IGNhbiBhbHNvIHNwZWNpZnkgZnVuY3Rpb25zIGluc3RlYWQgb2Ygc3RyaW5ncyBmb3JcclxuICAvLyBkYXRhIHZhbHVlcyDigJQgdGhleSB3aWxsIGJlIGV2YWx1YXRlZCBwYXNzaW5nIGBkYXRhYCBhcyBhbiBhcmd1bWVudC5cclxuICBmdW5jdGlvbiB0ZW1wbGF0ZShzdHIsIGRhdGEpIHtcclxuICBcdHJldHVybiBzdHIucmVwbGFjZSh0ZW1wbGF0ZVJlLCBmdW5jdGlvbiAoc3RyLCBrZXkpIHtcclxuICBcdFx0dmFyIHZhbHVlID0gZGF0YVtrZXldO1xyXG5cclxuICBcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbHVlIHByb3ZpZGVkIGZvciB2YXJpYWJsZSAnICsgc3RyKTtcclxuXHJcbiAgXHRcdH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgXHRcdFx0dmFsdWUgPSB2YWx1ZShkYXRhKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdmFsdWU7XHJcbiAgXHR9KTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBpc0FycmF5KG9iaik6IEJvb2xlYW5cclxuICAvLyBDb21wYXRpYmlsaXR5IHBvbHlmaWxsIGZvciBbQXJyYXkuaXNBcnJheV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvaXNBcnJheSlcclxuICB2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0cmV0dXJuIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgQXJyYXldJyk7XHJcbiAgfTtcclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGluZGV4T2YoYXJyYXk6IEFycmF5LCBlbDogT2JqZWN0KTogTnVtYmVyXHJcbiAgLy8gQ29tcGF0aWJpbGl0eSBwb2x5ZmlsbCBmb3IgW0FycmF5LnByb3RvdHlwZS5pbmRleE9mXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9pbmRleE9mKVxyXG4gIGZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIGVsKSB7XHJcbiAgXHRmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdGlmIChhcnJheVtpXSA9PT0gZWwpIHsgcmV0dXJuIGk7IH1cclxuICBcdH1cclxuICBcdHJldHVybiAtMTtcclxuICB9XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBlbXB0eUltYWdlVXJsOiBTdHJpbmdcclxuICAvLyBEYXRhIFVSSSBzdHJpbmcgY29udGFpbmluZyBhIGJhc2U2NC1lbmNvZGVkIGVtcHR5IEdJRiBpbWFnZS5cclxuICAvLyBVc2VkIGFzIGEgaGFjayB0byBmcmVlIG1lbW9yeSBmcm9tIHVudXNlZCBpbWFnZXMgb24gV2ViS2l0LXBvd2VyZWRcclxuICAvLyBtb2JpbGUgZGV2aWNlcyAoYnkgc2V0dGluZyBpbWFnZSBgc3JjYCB0byB0aGlzIHN0cmluZykuXHJcbiAgdmFyIGVtcHR5SW1hZ2VVcmwgPSAnZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFBRC9BQ3dBQUFBQUFRQUJBQUFDQURzPSc7XHJcblxyXG4gIC8vIGluc3BpcmVkIGJ5IGh0dHA6Ly9wYXVsaXJpc2guY29tLzIwMTEvcmVxdWVzdGFuaW1hdGlvbmZyYW1lLWZvci1zbWFydC1hbmltYXRpbmcvXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWZpeGVkKG5hbWUpIHtcclxuICBcdHJldHVybiB3aW5kb3dbJ3dlYmtpdCcgKyBuYW1lXSB8fCB3aW5kb3dbJ21veicgKyBuYW1lXSB8fCB3aW5kb3dbJ21zJyArIG5hbWVdO1xyXG4gIH1cclxuXHJcbiAgdmFyIGxhc3RUaW1lID0gMDtcclxuXHJcbiAgLy8gZmFsbGJhY2sgZm9yIElFIDctOFxyXG4gIGZ1bmN0aW9uIHRpbWVvdXREZWZlcihmbikge1xyXG4gIFx0dmFyIHRpbWUgPSArbmV3IERhdGUoKSxcclxuICBcdCAgICB0aW1lVG9DYWxsID0gTWF0aC5tYXgoMCwgMTYgLSAodGltZSAtIGxhc3RUaW1lKSk7XHJcblxyXG4gIFx0bGFzdFRpbWUgPSB0aW1lICsgdGltZVRvQ2FsbDtcclxuICBcdHJldHVybiB3aW5kb3cuc2V0VGltZW91dChmbiwgdGltZVRvQ2FsbCk7XHJcbiAgfVxyXG5cclxuICB2YXIgcmVxdWVzdEZuID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBnZXRQcmVmaXhlZCgnUmVxdWVzdEFuaW1hdGlvbkZyYW1lJykgfHwgdGltZW91dERlZmVyO1xyXG4gIHZhciBjYW5jZWxGbiA9IHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSB8fCBnZXRQcmVmaXhlZCgnQ2FuY2VsQW5pbWF0aW9uRnJhbWUnKSB8fFxyXG4gIFx0XHRnZXRQcmVmaXhlZCgnQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lJykgfHwgZnVuY3Rpb24gKGlkKSB7IHdpbmRvdy5jbGVhclRpbWVvdXQoaWQpOyB9O1xyXG5cclxuICAvLyBAZnVuY3Rpb24gcmVxdWVzdEFuaW1GcmFtZShmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QsIGltbWVkaWF0ZT86IEJvb2xlYW4pOiBOdW1iZXJcclxuICAvLyBTY2hlZHVsZXMgYGZuYCB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSBicm93c2VyIHJlcGFpbnRzLiBgZm5gIGlzIGJvdW5kIHRvXHJcbiAgLy8gYGNvbnRleHRgIGlmIGdpdmVuLiBXaGVuIGBpbW1lZGlhdGVgIGlzIHNldCwgYGZuYCBpcyBjYWxsZWQgaW1tZWRpYXRlbHkgaWZcclxuICAvLyB0aGUgYnJvd3NlciBkb2Vzbid0IGhhdmUgbmF0aXZlIHN1cHBvcnQgZm9yXHJcbiAgLy8gW2B3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL3dpbmRvdy9yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpLFxyXG4gIC8vIG90aGVyd2lzZSBpdCdzIGRlbGF5ZWQuIFJldHVybnMgYSByZXF1ZXN0IElEIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2FuY2VsIHRoZSByZXF1ZXN0LlxyXG4gIGZ1bmN0aW9uIHJlcXVlc3RBbmltRnJhbWUoZm4sIGNvbnRleHQsIGltbWVkaWF0ZSkge1xyXG4gIFx0aWYgKGltbWVkaWF0ZSAmJiByZXF1ZXN0Rm4gPT09IHRpbWVvdXREZWZlcikge1xyXG4gIFx0XHRmbi5jYWxsKGNvbnRleHQpO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0cmV0dXJuIHJlcXVlc3RGbi5jYWxsKHdpbmRvdywgYmluZChmbiwgY29udGV4dCkpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNhbmNlbEFuaW1GcmFtZShpZDogTnVtYmVyKTogdW5kZWZpbmVkXHJcbiAgLy8gQ2FuY2VscyBhIHByZXZpb3VzIGByZXF1ZXN0QW5pbUZyYW1lYC4gU2VlIGFsc28gW3dpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL3dpbmRvdy9jYW5jZWxBbmltYXRpb25GcmFtZSkuXHJcbiAgZnVuY3Rpb24gY2FuY2VsQW5pbUZyYW1lKGlkKSB7XHJcbiAgXHRpZiAoaWQpIHtcclxuICBcdFx0Y2FuY2VsRm4uY2FsbCh3aW5kb3csIGlkKTtcclxuICBcdH1cclxuICB9XG5cbiAgdmFyIFV0aWwgPSAoe1xuICAgIGV4dGVuZDogZXh0ZW5kLFxuICAgIGNyZWF0ZTogY3JlYXRlLFxuICAgIGJpbmQ6IGJpbmQsXG4gICAgbGFzdElkOiBsYXN0SWQsXG4gICAgc3RhbXA6IHN0YW1wLFxuICAgIHRocm90dGxlOiB0aHJvdHRsZSxcbiAgICB3cmFwTnVtOiB3cmFwTnVtLFxuICAgIGZhbHNlRm46IGZhbHNlRm4sXG4gICAgZm9ybWF0TnVtOiBmb3JtYXROdW0sXG4gICAgdHJpbTogdHJpbSxcbiAgICBzcGxpdFdvcmRzOiBzcGxpdFdvcmRzLFxuICAgIHNldE9wdGlvbnM6IHNldE9wdGlvbnMsXG4gICAgZ2V0UGFyYW1TdHJpbmc6IGdldFBhcmFtU3RyaW5nLFxuICAgIHRlbXBsYXRlOiB0ZW1wbGF0ZSxcbiAgICBpc0FycmF5OiBpc0FycmF5LFxuICAgIGluZGV4T2Y6IGluZGV4T2YsXG4gICAgZW1wdHlJbWFnZVVybDogZW1wdHlJbWFnZVVybCxcbiAgICByZXF1ZXN0Rm46IHJlcXVlc3RGbixcbiAgICBjYW5jZWxGbjogY2FuY2VsRm4sXG4gICAgcmVxdWVzdEFuaW1GcmFtZTogcmVxdWVzdEFuaW1GcmFtZSxcbiAgICBjYW5jZWxBbmltRnJhbWU6IGNhbmNlbEFuaW1GcmFtZVxuICB9KTtcblxuICAvLyBAY2xhc3MgQ2xhc3NcclxuICAvLyBAYWthIEwuQ2xhc3NcclxuXHJcbiAgLy8gQHNlY3Rpb25cclxuICAvLyBAdW5pbmhlcml0YWJsZVxyXG5cclxuICAvLyBUaGFua3MgdG8gSm9obiBSZXNpZyBhbmQgRGVhbiBFZHdhcmRzIGZvciBpbnNwaXJhdGlvbiFcclxuXHJcbiAgZnVuY3Rpb24gQ2xhc3MoKSB7fVxyXG5cclxuICBDbGFzcy5leHRlbmQgPSBmdW5jdGlvbiAocHJvcHMpIHtcclxuXHJcbiAgXHQvLyBAZnVuY3Rpb24gZXh0ZW5kKHByb3BzOiBPYmplY3QpOiBGdW5jdGlvblxyXG4gIFx0Ly8gW0V4dGVuZHMgdGhlIGN1cnJlbnQgY2xhc3NdKCNjbGFzcy1pbmhlcml0YW5jZSkgZ2l2ZW4gdGhlIHByb3BlcnRpZXMgdG8gYmUgaW5jbHVkZWQuXHJcbiAgXHQvLyBSZXR1cm5zIGEgSmF2YXNjcmlwdCBmdW5jdGlvbiB0aGF0IGlzIGEgY2xhc3MgY29uc3RydWN0b3IgKHRvIGJlIGNhbGxlZCB3aXRoIGBuZXdgKS5cclxuICBcdHZhciBOZXdDbGFzcyA9IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdC8vIGNhbGwgdGhlIGNvbnN0cnVjdG9yXHJcbiAgXHRcdGlmICh0aGlzLmluaXRpYWxpemUpIHtcclxuICBcdFx0XHR0aGlzLmluaXRpYWxpemUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gY2FsbCBhbGwgY29uc3RydWN0b3IgaG9va3NcclxuICBcdFx0dGhpcy5jYWxsSW5pdEhvb2tzKCk7XHJcbiAgXHR9O1xyXG5cclxuICBcdHZhciBwYXJlbnRQcm90byA9IE5ld0NsYXNzLl9fc3VwZXJfXyA9IHRoaXMucHJvdG90eXBlO1xyXG5cclxuICBcdHZhciBwcm90byA9IGNyZWF0ZShwYXJlbnRQcm90byk7XHJcbiAgXHRwcm90by5jb25zdHJ1Y3RvciA9IE5ld0NsYXNzO1xyXG5cclxuICBcdE5ld0NsYXNzLnByb3RvdHlwZSA9IHByb3RvO1xyXG5cclxuICBcdC8vIGluaGVyaXQgcGFyZW50J3Mgc3RhdGljc1xyXG4gIFx0Zm9yICh2YXIgaSBpbiB0aGlzKSB7XHJcbiAgXHRcdGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcywgaSkgJiYgaSAhPT0gJ3Byb3RvdHlwZScgJiYgaSAhPT0gJ19fc3VwZXJfXycpIHtcclxuICBcdFx0XHROZXdDbGFzc1tpXSA9IHRoaXNbaV07XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHQvLyBtaXggc3RhdGljIHByb3BlcnRpZXMgaW50byB0aGUgY2xhc3NcclxuICBcdGlmIChwcm9wcy5zdGF0aWNzKSB7XHJcbiAgXHRcdGV4dGVuZChOZXdDbGFzcywgcHJvcHMuc3RhdGljcyk7XHJcbiAgXHRcdGRlbGV0ZSBwcm9wcy5zdGF0aWNzO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIG1peCBpbmNsdWRlcyBpbnRvIHRoZSBwcm90b3R5cGVcclxuICBcdGlmIChwcm9wcy5pbmNsdWRlcykge1xyXG4gIFx0XHRjaGVja0RlcHJlY2F0ZWRNaXhpbkV2ZW50cyhwcm9wcy5pbmNsdWRlcyk7XHJcbiAgXHRcdGV4dGVuZC5hcHBseShudWxsLCBbcHJvdG9dLmNvbmNhdChwcm9wcy5pbmNsdWRlcykpO1xyXG4gIFx0XHRkZWxldGUgcHJvcHMuaW5jbHVkZXM7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gbWVyZ2Ugb3B0aW9uc1xyXG4gIFx0aWYgKHByb3RvLm9wdGlvbnMpIHtcclxuICBcdFx0cHJvcHMub3B0aW9ucyA9IGV4dGVuZChjcmVhdGUocHJvdG8ub3B0aW9ucyksIHByb3BzLm9wdGlvbnMpO1xyXG4gIFx0fVxyXG5cclxuICBcdC8vIG1peCBnaXZlbiBwcm9wZXJ0aWVzIGludG8gdGhlIHByb3RvdHlwZVxyXG4gIFx0ZXh0ZW5kKHByb3RvLCBwcm9wcyk7XHJcblxyXG4gIFx0cHJvdG8uX2luaXRIb29rcyA9IFtdO1xyXG5cclxuICBcdC8vIGFkZCBtZXRob2QgZm9yIGNhbGxpbmcgYWxsIGhvb2tzXHJcbiAgXHRwcm90by5jYWxsSW5pdEhvb2tzID0gZnVuY3Rpb24gKCkge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2luaXRIb29rc0NhbGxlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGlmIChwYXJlbnRQcm90by5jYWxsSW5pdEhvb2tzKSB7XHJcbiAgXHRcdFx0cGFyZW50UHJvdG8uY2FsbEluaXRIb29rcy5jYWxsKHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0SG9va3NDYWxsZWQgPSB0cnVlO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHByb3RvLl9pbml0SG9va3MubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRwcm90by5faW5pdEhvb2tzW2ldLmNhbGwodGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcblxyXG4gIFx0cmV0dXJuIE5ld0NsYXNzO1xyXG4gIH07XHJcblxyXG5cclxuICAvLyBAZnVuY3Rpb24gaW5jbHVkZShwcm9wZXJ0aWVzOiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gW0luY2x1ZGVzIGEgbWl4aW5dKCNjbGFzcy1pbmNsdWRlcykgaW50byB0aGUgY3VycmVudCBjbGFzcy5cclxuICBDbGFzcy5pbmNsdWRlID0gZnVuY3Rpb24gKHByb3BzKSB7XHJcbiAgXHRleHRlbmQodGhpcy5wcm90b3R5cGUsIHByb3BzKTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBtZXJnZU9wdGlvbnMob3B0aW9uczogT2JqZWN0KTogdGhpc1xyXG4gIC8vIFtNZXJnZXMgYG9wdGlvbnNgXSgjY2xhc3Mtb3B0aW9ucykgaW50byB0aGUgZGVmYXVsdHMgb2YgdGhlIGNsYXNzLlxyXG4gIENsYXNzLm1lcmdlT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRleHRlbmQodGhpcy5wcm90b3R5cGUub3B0aW9ucywgb3B0aW9ucyk7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICAvLyBAZnVuY3Rpb24gYWRkSW5pdEhvb2soZm46IEZ1bmN0aW9uKTogdGhpc1xyXG4gIC8vIEFkZHMgYSBbY29uc3RydWN0b3IgaG9va10oI2NsYXNzLWNvbnN0cnVjdG9yLWhvb2tzKSB0byB0aGUgY2xhc3MuXHJcbiAgQ2xhc3MuYWRkSW5pdEhvb2sgPSBmdW5jdGlvbiAoZm4pIHsgLy8gKEZ1bmN0aW9uKSB8fCAoU3RyaW5nLCBhcmdzLi4uKVxyXG4gIFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xyXG5cclxuICBcdHZhciBpbml0ID0gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nID8gZm4gOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXNbZm5dLmFwcGx5KHRoaXMsIGFyZ3MpO1xyXG4gIFx0fTtcclxuXHJcbiAgXHR0aGlzLnByb3RvdHlwZS5faW5pdEhvb2tzID0gdGhpcy5wcm90b3R5cGUuX2luaXRIb29rcyB8fCBbXTtcclxuICBcdHRoaXMucHJvdG90eXBlLl9pbml0SG9va3MucHVzaChpbml0KTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIGZ1bmN0aW9uIGNoZWNrRGVwcmVjYXRlZE1peGluRXZlbnRzKGluY2x1ZGVzKSB7XHJcbiAgXHRpZiAodHlwZW9mIEwgPT09ICd1bmRlZmluZWQnIHx8ICFMIHx8ICFMLk1peGluKSB7IHJldHVybjsgfVxyXG5cclxuICBcdGluY2x1ZGVzID0gaXNBcnJheShpbmNsdWRlcykgPyBpbmNsdWRlcyA6IFtpbmNsdWRlc107XHJcblxyXG4gIFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbmNsdWRlcy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRpZiAoaW5jbHVkZXNbaV0gPT09IEwuTWl4aW4uRXZlbnRzKSB7XHJcbiAgXHRcdFx0Y29uc29sZS53YXJuKCdEZXByZWNhdGVkIGluY2x1ZGUgb2YgTC5NaXhpbi5FdmVudHM6ICcgK1xyXG4gIFx0XHRcdFx0J3RoaXMgcHJvcGVydHkgd2lsbCBiZSByZW1vdmVkIGluIGZ1dHVyZSByZWxlYXNlcywgJyArXHJcbiAgXHRcdFx0XHQncGxlYXNlIGluaGVyaXQgZnJvbSBMLkV2ZW50ZWQgaW5zdGVhZC4nLCBuZXcgRXJyb3IoKS5zdGFjayk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgRXZlbnRlZFxyXG4gICAqIEBha2EgTC5FdmVudGVkXHJcbiAgICogQGluaGVyaXRzIENsYXNzXHJcbiAgICpcclxuICAgKiBBIHNldCBvZiBtZXRob2RzIHNoYXJlZCBiZXR3ZWVuIGV2ZW50LXBvd2VyZWQgY2xhc3NlcyAobGlrZSBgTWFwYCBhbmQgYE1hcmtlcmApLiBHZW5lcmFsbHksIGV2ZW50cyBhbGxvdyB5b3UgdG8gZXhlY3V0ZSBzb21lIGZ1bmN0aW9uIHdoZW4gc29tZXRoaW5nIGhhcHBlbnMgd2l0aCBhbiBvYmplY3QgKGUuZy4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBtYXAsIGNhdXNpbmcgdGhlIG1hcCB0byBmaXJlIGAnY2xpY2snYCBldmVudCkuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAub24oJ2NsaWNrJywgZnVuY3Rpb24oZSkge1xyXG4gICAqIFx0YWxlcnQoZS5sYXRsbmcpO1xyXG4gICAqIH0gKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIExlYWZsZXQgZGVhbHMgd2l0aCBldmVudCBsaXN0ZW5lcnMgYnkgcmVmZXJlbmNlLCBzbyBpZiB5b3Ugd2FudCB0byBhZGQgYSBsaXN0ZW5lciBhbmQgdGhlbiByZW1vdmUgaXQsIGRlZmluZSBpdCBhcyBhIGZ1bmN0aW9uOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBmdW5jdGlvbiBvbkNsaWNrKGUpIHsgLi4uIH1cclxuICAgKlxyXG4gICAqIG1hcC5vbignY2xpY2snLCBvbkNsaWNrKTtcclxuICAgKiBtYXAub2ZmKCdjbGljaycsIG9uQ2xpY2spO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgRXZlbnRzID0ge1xyXG4gIFx0LyogQG1ldGhvZCBvbih0eXBlOiBTdHJpbmcsIGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICBcdCAqIEFkZHMgYSBsaXN0ZW5lciBmdW5jdGlvbiAoYGZuYCkgdG8gYSBwYXJ0aWN1bGFyIGV2ZW50IHR5cGUgb2YgdGhlIG9iamVjdC4gWW91IGNhbiBvcHRpb25hbGx5IHNwZWNpZnkgdGhlIGNvbnRleHQgb2YgdGhlIGxpc3RlbmVyIChvYmplY3QgdGhlIHRoaXMga2V5d29yZCB3aWxsIHBvaW50IHRvKS4gWW91IGNhbiBhbHNvIHBhc3Mgc2V2ZXJhbCBzcGFjZS1zZXBhcmF0ZWQgdHlwZXMgKGUuZy4gYCdjbGljayBkYmxjbGljaydgKS5cclxuICBcdCAqXHJcbiAgXHQgKiBAYWx0ZXJuYXRpdmVcclxuICBcdCAqIEBtZXRob2Qgb24oZXZlbnRNYXA6IE9iamVjdCk6IHRoaXNcclxuICBcdCAqIEFkZHMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycywgZS5nLiBge2NsaWNrOiBvbkNsaWNrLCBtb3VzZW1vdmU6IG9uTW91c2VNb3ZlfWBcclxuICBcdCAqL1xyXG4gIFx0b246IGZ1bmN0aW9uICh0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRcdC8vIHR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xyXG4gIFx0XHRpZiAodHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRcdGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHtcclxuICBcdFx0XHRcdC8vIHdlIGRvbid0IHByb2Nlc3Mgc3BhY2Utc2VwYXJhdGVkIGV2ZW50cyBoZXJlIGZvciBwZXJmb3JtYW5jZTtcclxuICBcdFx0XHRcdC8vIGl0J3MgYSBob3QgcGF0aCBzaW5jZSBMYXllciB1c2VzIHRoZSBvbihvYmopIHN5bnRheFxyXG4gIFx0XHRcdFx0dGhpcy5fb24odHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdC8vIHR5cGVzIGNhbiBiZSBhIHN0cmluZyBvZiBzcGFjZS1zZXBhcmF0ZWQgd29yZHNcclxuICBcdFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuX29uKHR5cGVzW2ldLCBmbiwgY29udGV4dCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQG1ldGhvZCBvZmYodHlwZTogU3RyaW5nLCBmbj86IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIFx0ICogUmVtb3ZlcyBhIHByZXZpb3VzbHkgYWRkZWQgbGlzdGVuZXIgZnVuY3Rpb24uIElmIG5vIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCwgaXQgd2lsbCByZW1vdmUgYWxsIHRoZSBsaXN0ZW5lcnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGV2ZW50IGZyb20gdGhlIG9iamVjdC4gTm90ZSB0aGF0IGlmIHlvdSBwYXNzZWQgYSBjdXN0b20gY29udGV4dCB0byBgb25gLCB5b3UgbXVzdCBwYXNzIHRoZSBzYW1lIGNvbnRleHQgdG8gYG9mZmAgaW4gb3JkZXIgdG8gcmVtb3ZlIHRoZSBsaXN0ZW5lci5cclxuICBcdCAqXHJcbiAgXHQgKiBAYWx0ZXJuYXRpdmVcclxuICBcdCAqIEBtZXRob2Qgb2ZmKGV2ZW50TWFwOiBPYmplY3QpOiB0aGlzXHJcbiAgXHQgKiBSZW1vdmVzIGEgc2V0IG9mIHR5cGUvbGlzdGVuZXIgcGFpcnMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQGFsdGVybmF0aXZlXHJcbiAgXHQgKiBAbWV0aG9kIG9mZjogdGhpc1xyXG4gIFx0ICogUmVtb3ZlcyBhbGwgbGlzdGVuZXJzIHRvIGFsbCBldmVudHMgb24gdGhlIG9iamVjdC4gVGhpcyBpbmNsdWRlcyBpbXBsaWNpdGx5IGF0dGFjaGVkIGV2ZW50cy5cclxuICBcdCAqL1xyXG4gIFx0b2ZmOiBmdW5jdGlvbiAodHlwZXMsIGZuLCBjb250ZXh0KSB7XHJcblxyXG4gIFx0XHRpZiAoIXR5cGVzKSB7XHJcbiAgXHRcdFx0Ly8gY2xlYXIgYWxsIGxpc3RlbmVycyBpZiBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRzO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdFx0dGhpcy5fb2ZmKHR5cGUsIHR5cGVzW3R5cGVdLCBmbik7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdHlwZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuX29mZih0eXBlc1tpXSwgZm4sIGNvbnRleHQpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGF0dGFjaCBsaXN0ZW5lciAod2l0aG91dCBzeW50YWN0aWMgc3VnYXIgbm93KVxyXG4gIFx0X29uOiBmdW5jdGlvbiAodHlwZSwgZm4sIGNvbnRleHQpIHtcclxuICBcdFx0dGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzIHx8IHt9O1xyXG5cclxuICBcdFx0LyogZ2V0L2luaXQgbGlzdGVuZXJzIGZvciB0eXBlICovXHJcbiAgXHRcdHZhciB0eXBlTGlzdGVuZXJzID0gdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gIFx0XHRpZiAoIXR5cGVMaXN0ZW5lcnMpIHtcclxuICBcdFx0XHR0eXBlTGlzdGVuZXJzID0gW107XHJcbiAgXHRcdFx0dGhpcy5fZXZlbnRzW3R5cGVdID0gdHlwZUxpc3RlbmVycztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGNvbnRleHQgPT09IHRoaXMpIHtcclxuICBcdFx0XHQvLyBMZXNzIG1lbW9yeSBmb290cHJpbnQuXHJcbiAgXHRcdFx0Y29udGV4dCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG4gIFx0XHR2YXIgbmV3TGlzdGVuZXIgPSB7Zm46IGZuLCBjdHg6IGNvbnRleHR9LFxyXG4gIFx0XHQgICAgbGlzdGVuZXJzID0gdHlwZUxpc3RlbmVycztcclxuXHJcbiAgXHRcdC8vIGNoZWNrIGlmIGZuIGFscmVhZHkgdGhlcmVcclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdGlmIChsaXN0ZW5lcnNbaV0uZm4gPT09IGZuICYmIGxpc3RlbmVyc1tpXS5jdHggPT09IGNvbnRleHQpIHtcclxuICBcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGxpc3RlbmVycy5wdXNoKG5ld0xpc3RlbmVyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29mZjogZnVuY3Rpb24gKHR5cGUsIGZuLCBjb250ZXh0KSB7XHJcbiAgXHRcdHZhciBsaXN0ZW5lcnMsXHJcbiAgXHRcdCAgICBpLFxyXG4gIFx0XHQgICAgbGVuO1xyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9ldmVudHMpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XHJcblxyXG4gIFx0XHRpZiAoIWxpc3RlbmVycykge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCFmbikge1xyXG4gIFx0XHRcdC8vIFNldCBhbGwgcmVtb3ZlZCBsaXN0ZW5lcnMgdG8gbm9vcCBzbyB0aGV5IGFyZSBub3QgY2FsbGVkIGlmIHJlbW92ZSBoYXBwZW5zIGluIGZpcmVcclxuICBcdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdGxpc3RlbmVyc1tpXS5mbiA9IGZhbHNlRm47XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdC8vIGNsZWFyIGFsbCBsaXN0ZW5lcnMgZm9yIGEgdHlwZSBpZiBmdW5jdGlvbiBpc24ndCBzcGVjaWZpZWRcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRzW3R5cGVdO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGNvbnRleHQgPT09IHRoaXMpIHtcclxuICBcdFx0XHRjb250ZXh0ID0gdW5kZWZpbmVkO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobGlzdGVuZXJzKSB7XHJcblxyXG4gIFx0XHRcdC8vIGZpbmQgZm4gYW5kIHJlbW92ZSBpdFxyXG4gIFx0XHRcdGZvciAoaSA9IDAsIGxlbiA9IGxpc3RlbmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0dmFyIGwgPSBsaXN0ZW5lcnNbaV07XHJcbiAgXHRcdFx0XHRpZiAobC5jdHggIT09IGNvbnRleHQpIHsgY29udGludWU7IH1cclxuICBcdFx0XHRcdGlmIChsLmZuID09PSBmbikge1xyXG5cclxuICBcdFx0XHRcdFx0Ly8gc2V0IHRoZSByZW1vdmVkIGxpc3RlbmVyIHRvIG5vb3Agc28gdGhhdCdzIG5vdCBjYWxsZWQgaWYgcmVtb3ZlIGhhcHBlbnMgaW4gZmlyZVxyXG4gIFx0XHRcdFx0XHRsLmZuID0gZmFsc2VGbjtcclxuXHJcbiAgXHRcdFx0XHRcdGlmICh0aGlzLl9maXJpbmdDb3VudCkge1xyXG4gIFx0XHRcdFx0XHRcdC8qIGNvcHkgYXJyYXkgaW4gY2FzZSBldmVudHMgYXJlIGJlaW5nIGZpcmVkICovXHJcbiAgXHRcdFx0XHRcdFx0dGhpcy5fZXZlbnRzW3R5cGVdID0gbGlzdGVuZXJzID0gbGlzdGVuZXJzLnNsaWNlKCk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdFx0bGlzdGVuZXJzLnNwbGljZShpLCAxKTtcclxuXHJcbiAgXHRcdFx0XHRcdHJldHVybjtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBmaXJlKHR5cGU6IFN0cmluZywgZGF0YT86IE9iamVjdCwgcHJvcGFnYXRlPzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIEZpcmVzIGFuIGV2ZW50IG9mIHRoZSBzcGVjaWZpZWQgdHlwZS4gWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYW4gZGF0YVxyXG4gIFx0Ly8gb2JqZWN0IOKAlCB0aGUgZmlyc3QgYXJndW1lbnQgb2YgdGhlIGxpc3RlbmVyIGZ1bmN0aW9uIHdpbGwgY29udGFpbiBpdHNcclxuICBcdC8vIHByb3BlcnRpZXMuIFRoZSBldmVudCBjYW4gb3B0aW9uYWxseSBiZSBwcm9wYWdhdGVkIHRvIGV2ZW50IHBhcmVudHMuXHJcbiAgXHRmaXJlOiBmdW5jdGlvbiAodHlwZSwgZGF0YSwgcHJvcGFnYXRlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5saXN0ZW5zKHR5cGUsIHByb3BhZ2F0ZSkpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdHZhciBldmVudCA9IGV4dGVuZCh7fSwgZGF0YSwge1xyXG4gIFx0XHRcdHR5cGU6IHR5cGUsXHJcbiAgXHRcdFx0dGFyZ2V0OiB0aGlzLFxyXG4gIFx0XHRcdHNvdXJjZVRhcmdldDogZGF0YSAmJiBkYXRhLnNvdXJjZVRhcmdldCB8fCB0aGlzXHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2V2ZW50cykge1xyXG4gIFx0XHRcdHZhciBsaXN0ZW5lcnMgPSB0aGlzLl9ldmVudHNbdHlwZV07XHJcblxyXG4gIFx0XHRcdGlmIChsaXN0ZW5lcnMpIHtcclxuICBcdFx0XHRcdHRoaXMuX2ZpcmluZ0NvdW50ID0gKHRoaXMuX2ZpcmluZ0NvdW50ICsgMSkgfHwgMTtcclxuICBcdFx0XHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsaXN0ZW5lcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdFx0dmFyIGwgPSBsaXN0ZW5lcnNbaV07XHJcbiAgXHRcdFx0XHRcdGwuZm4uY2FsbChsLmN0eCB8fCB0aGlzLCBldmVudCk7XHJcbiAgXHRcdFx0XHR9XHJcblxyXG4gIFx0XHRcdFx0dGhpcy5fZmlyaW5nQ291bnQtLTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChwcm9wYWdhdGUpIHtcclxuICBcdFx0XHQvLyBwcm9wYWdhdGUgdGhlIGV2ZW50IHRvIHBhcmVudHMgKHNldCB3aXRoIGFkZEV2ZW50UGFyZW50KVxyXG4gIFx0XHRcdHRoaXMuX3Byb3BhZ2F0ZUV2ZW50KGV2ZW50KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGlzdGVucyh0eXBlOiBTdHJpbmcpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiBhIHBhcnRpY3VsYXIgZXZlbnQgdHlwZSBoYXMgYW55IGxpc3RlbmVycyBhdHRhY2hlZCB0byBpdC5cclxuICBcdGxpc3RlbnM6IGZ1bmN0aW9uICh0eXBlLCBwcm9wYWdhdGUpIHtcclxuICBcdFx0dmFyIGxpc3RlbmVycyA9IHRoaXMuX2V2ZW50cyAmJiB0aGlzLl9ldmVudHNbdHlwZV07XHJcbiAgXHRcdGlmIChsaXN0ZW5lcnMgJiYgbGlzdGVuZXJzLmxlbmd0aCkgeyByZXR1cm4gdHJ1ZTsgfVxyXG5cclxuICBcdFx0aWYgKHByb3BhZ2F0ZSkge1xyXG4gIFx0XHRcdC8vIGFsc28gY2hlY2sgcGFyZW50cyBmb3IgbGlzdGVuZXJzIGlmIGV2ZW50IHByb3BhZ2F0ZXNcclxuICBcdFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9ldmVudFBhcmVudHMpIHtcclxuICBcdFx0XHRcdGlmICh0aGlzLl9ldmVudFBhcmVudHNbaWRdLmxpc3RlbnModHlwZSwgcHJvcGFnYXRlKSkgeyByZXR1cm4gdHJ1ZTsgfVxyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgb25jZSjigKYpOiB0aGlzXHJcbiAgXHQvLyBCZWhhdmVzIGFzIFtgb24o4oCmKWBdKCNldmVudGVkLW9uKSwgZXhjZXB0IHRoZSBsaXN0ZW5lciB3aWxsIG9ubHkgZ2V0IGZpcmVkIG9uY2UgYW5kIHRoZW4gcmVtb3ZlZC5cclxuICBcdG9uY2U6IGZ1bmN0aW9uICh0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRcdGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgdHlwZSBpbiB0eXBlcykge1xyXG4gIFx0XHRcdFx0dGhpcy5vbmNlKHR5cGUsIHR5cGVzW3R5cGVdLCBmbik7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgaGFuZGxlciA9IGJpbmQoZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRcdHRoaXNcclxuICBcdFx0XHQgICAgLm9mZih0eXBlcywgZm4sIGNvbnRleHQpXHJcbiAgXHRcdFx0ICAgIC5vZmYodHlwZXMsIGhhbmRsZXIsIGNvbnRleHQpO1xyXG4gIFx0XHR9LCB0aGlzKTtcclxuXHJcbiAgXHRcdC8vIGFkZCBhIGxpc3RlbmVyIHRoYXQncyBleGVjdXRlZCBvbmNlIGFuZCByZW1vdmVkIGFmdGVyIHRoYXRcclxuICBcdFx0cmV0dXJuIHRoaXNcclxuICBcdFx0ICAgIC5vbih0eXBlcywgZm4sIGNvbnRleHQpXHJcbiAgXHRcdCAgICAub24odHlwZXMsIGhhbmRsZXIsIGNvbnRleHQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEV2ZW50UGFyZW50KG9iajogRXZlbnRlZCk6IHRoaXNcclxuICBcdC8vIEFkZHMgYW4gZXZlbnQgcGFyZW50IC0gYW4gYEV2ZW50ZWRgIHRoYXQgd2lsbCByZWNlaXZlIHByb3BhZ2F0ZWQgZXZlbnRzXHJcbiAgXHRhZGRFdmVudFBhcmVudDogZnVuY3Rpb24gKG9iaikge1xyXG4gIFx0XHR0aGlzLl9ldmVudFBhcmVudHMgPSB0aGlzLl9ldmVudFBhcmVudHMgfHwge307XHJcbiAgXHRcdHRoaXMuX2V2ZW50UGFyZW50c1tzdGFtcChvYmopXSA9IG9iajtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlRXZlbnRQYXJlbnQob2JqOiBFdmVudGVkKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyBhbiBldmVudCBwYXJlbnQsIHNvIGl0IHdpbGwgc3RvcCByZWNlaXZpbmcgcHJvcGFnYXRlZCBldmVudHNcclxuICBcdHJlbW92ZUV2ZW50UGFyZW50OiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9ldmVudFBhcmVudHMpIHtcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fZXZlbnRQYXJlbnRzW3N0YW1wKG9iaildO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcHJvcGFnYXRlRXZlbnQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2V2ZW50UGFyZW50cykge1xyXG4gIFx0XHRcdHRoaXMuX2V2ZW50UGFyZW50c1tpZF0uZmlyZShlLnR5cGUsIGV4dGVuZCh7XHJcbiAgXHRcdFx0XHRsYXllcjogZS50YXJnZXQsXHJcbiAgXHRcdFx0XHRwcm9wYWdhdGVkRnJvbTogZS50YXJnZXRcclxuICBcdFx0XHR9LCBlKSwgdHJ1ZSk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9O1xyXG5cclxuICAvLyBhbGlhc2VzOyB3ZSBzaG91bGQgZGl0Y2ggdGhvc2UgZXZlbnR1YWxseVxyXG5cclxuICAvLyBAbWV0aG9kIGFkZEV2ZW50TGlzdGVuZXIo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb24o4oCmKWBdKCNldmVudGVkLW9uKVxyXG4gIEV2ZW50cy5hZGRFdmVudExpc3RlbmVyID0gRXZlbnRzLm9uO1xyXG5cclxuICAvLyBAbWV0aG9kIHJlbW92ZUV2ZW50TGlzdGVuZXIo4oCmKTogdGhpc1xyXG4gIC8vIEFsaWFzIHRvIFtgb2ZmKOKApilgXSgjZXZlbnRlZC1vZmYpXHJcblxyXG4gIC8vIEBtZXRob2QgY2xlYXJBbGxFdmVudExpc3RlbmVycyjigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BvZmYoKWBdKCNldmVudGVkLW9mZilcclxuICBFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lciA9IEV2ZW50cy5jbGVhckFsbEV2ZW50TGlzdGVuZXJzID0gRXZlbnRzLm9mZjtcclxuXHJcbiAgLy8gQG1ldGhvZCBhZGRPbmVUaW1lRXZlbnRMaXN0ZW5lcijigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BvbmNlKOKApilgXSgjZXZlbnRlZC1vbmNlKVxyXG4gIEV2ZW50cy5hZGRPbmVUaW1lRXZlbnRMaXN0ZW5lciA9IEV2ZW50cy5vbmNlO1xyXG5cclxuICAvLyBAbWV0aG9kIGZpcmVFdmVudCjigKYpOiB0aGlzXHJcbiAgLy8gQWxpYXMgdG8gW2BmaXJlKOKApilgXSgjZXZlbnRlZC1maXJlKVxyXG4gIEV2ZW50cy5maXJlRXZlbnQgPSBFdmVudHMuZmlyZTtcclxuXHJcbiAgLy8gQG1ldGhvZCBoYXNFdmVudExpc3RlbmVycyjigKYpOiBCb29sZWFuXHJcbiAgLy8gQWxpYXMgdG8gW2BsaXN0ZW5zKOKApilgXSgjZXZlbnRlZC1saXN0ZW5zKVxyXG4gIEV2ZW50cy5oYXNFdmVudExpc3RlbmVycyA9IEV2ZW50cy5saXN0ZW5zO1xyXG5cclxuICB2YXIgRXZlbnRlZCA9IENsYXNzLmV4dGVuZChFdmVudHMpO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFBvaW50XHJcbiAgICogQGFrYSBMLlBvaW50XHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgcG9pbnQgd2l0aCBgeGAgYW5kIGB5YCBjb29yZGluYXRlcyBpbiBwaXhlbHMuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgcG9pbnQgPSBMLnBvaW50KDIwMCwgMzAwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEFsbCBMZWFmbGV0IG1ldGhvZHMgYW5kIG9wdGlvbnMgdGhhdCBhY2NlcHQgYFBvaW50YCBvYmplY3RzIGFsc28gYWNjZXB0IHRoZW0gaW4gYSBzaW1wbGUgQXJyYXkgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZXNlIGxpbmVzIGFyZSBlcXVpdmFsZW50OlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAucGFuQnkoWzIwMCwgMzAwXSk7XHJcbiAgICogbWFwLnBhbkJ5KEwucG9pbnQoMjAwLCAzMDApKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgUG9pbnRgIGRvZXMgbm90IGluaGVyaXQgZnJvbSBMZWFmbGV0J3MgYENsYXNzYCBvYmplY3QsXHJcbiAgICogd2hpY2ggbWVhbnMgbmV3IGNsYXNzZXMgY2FuJ3QgaW5oZXJpdCBmcm9tIGl0LCBhbmQgbmV3IG1ldGhvZHNcclxuICAgKiBjYW4ndCBiZSBhZGRlZCB0byBpdCB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXHJcbiAgICovXHJcblxyXG4gIGZ1bmN0aW9uIFBvaW50KHgsIHksIHJvdW5kKSB7XHJcbiAgXHQvLyBAcHJvcGVydHkgeDogTnVtYmVyOyBUaGUgYHhgIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50XHJcbiAgXHR0aGlzLnggPSAocm91bmQgPyBNYXRoLnJvdW5kKHgpIDogeCk7XHJcbiAgXHQvLyBAcHJvcGVydHkgeTogTnVtYmVyOyBUaGUgYHlgIGNvb3JkaW5hdGUgb2YgdGhlIHBvaW50XHJcbiAgXHR0aGlzLnkgPSAocm91bmQgPyBNYXRoLnJvdW5kKHkpIDogeSk7XHJcbiAgfVxyXG5cclxuICB2YXIgdHJ1bmMgPSBNYXRoLnRydW5jIHx8IGZ1bmN0aW9uICh2KSB7XHJcbiAgXHRyZXR1cm4gdiA+IDAgPyBNYXRoLmZsb29yKHYpIDogTWF0aC5jZWlsKHYpO1xyXG4gIH07XHJcblxyXG4gIFBvaW50LnByb3RvdHlwZSA9IHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNsb25lKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludC5cclxuICBcdGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQodGhpcy54LCB0aGlzLnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZChvdGhlclBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgYWRkaXRpb24gb2YgdGhlIGN1cnJlbnQgYW5kIHRoZSBnaXZlbiBwb2ludHMuXHJcbiAgXHRhZGQ6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHQvLyBub24tZGVzdHJ1Y3RpdmUsIHJldHVybnMgYSBuZXcgcG9pbnRcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fYWRkKHRvUG9pbnQocG9pbnQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FkZDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdC8vIGRlc3RydWN0aXZlLCB1c2VkIGRpcmVjdGx5IGZvciBwZXJmb3JtYW5jZSBpbiBzaXR1YXRpb25zIHdoZXJlIGl0J3Mgc2FmZSB0byBtb2RpZnkgZXhpc3RpbmcgcG9pbnRcclxuICBcdFx0dGhpcy54ICs9IHBvaW50Lng7XHJcbiAgXHRcdHRoaXMueSArPSBwb2ludC55O1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzdWJ0cmFjdChvdGhlclBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2Ygc3VidHJhY3Rpb24gb2YgdGhlIGdpdmVuIHBvaW50IGZyb20gdGhlIGN1cnJlbnQuXHJcbiAgXHRzdWJ0cmFjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX3N1YnRyYWN0KHRvUG9pbnQocG9pbnQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3N1YnRyYWN0OiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dGhpcy54IC09IHBvaW50Lng7XHJcbiAgXHRcdHRoaXMueSAtPSBwb2ludC55O1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXZpZGVCeShudW06IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXN1bHQgb2YgZGl2aXNpb24gb2YgdGhlIGN1cnJlbnQgcG9pbnQgYnkgdGhlIGdpdmVuIG51bWJlci5cclxuICBcdGRpdmlkZUJ5OiBmdW5jdGlvbiAobnVtKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmNsb25lKCkuX2RpdmlkZUJ5KG51bSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9kaXZpZGVCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHR0aGlzLnggLz0gbnVtO1xyXG4gIFx0XHR0aGlzLnkgLz0gbnVtO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBtdWx0aXBseUJ5KG51bTogTnVtYmVyKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHJlc3VsdCBvZiBtdWx0aXBsaWNhdGlvbiBvZiB0aGUgY3VycmVudCBwb2ludCBieSB0aGUgZ2l2ZW4gbnVtYmVyLlxyXG4gIFx0bXVsdGlwbHlCeTogZnVuY3Rpb24gKG51bSkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9tdWx0aXBseUJ5KG51bSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tdWx0aXBseUJ5OiBmdW5jdGlvbiAobnVtKSB7XHJcbiAgXHRcdHRoaXMueCAqPSBudW07XHJcbiAgXHRcdHRoaXMueSAqPSBudW07XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNjYWxlQnkoc2NhbGU6IFBvaW50KTogUG9pbnRcclxuICBcdC8vIE11bHRpcGx5IGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludCBieSBlYWNoIGNvb3JkaW5hdGUgb2ZcclxuICBcdC8vIGBzY2FsZWAuIEluIGxpbmVhciBhbGdlYnJhIHRlcm1zLCBtdWx0aXBseSB0aGUgcG9pbnQgYnkgdGhlXHJcbiAgXHQvLyBbc2NhbGluZyBtYXRyaXhdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NjYWxpbmdfJTI4Z2VvbWV0cnklMjkjTWF0cml4X3JlcHJlc2VudGF0aW9uKVxyXG4gIFx0Ly8gZGVmaW5lZCBieSBgc2NhbGVgLlxyXG4gIFx0c2NhbGVCeTogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQodGhpcy54ICogcG9pbnQueCwgdGhpcy55ICogcG9pbnQueSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW5zY2FsZUJ5KHNjYWxlOiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBJbnZlcnNlIG9mIGBzY2FsZUJ5YC4gRGl2aWRlIGVhY2ggY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludCBieVxyXG4gIFx0Ly8gZWFjaCBjb29yZGluYXRlIG9mIGBzY2FsZWAuXHJcbiAgXHR1bnNjYWxlQnk6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHRoaXMueCAvIHBvaW50LngsIHRoaXMueSAvIHBvaW50LnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJvdW5kKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIHJvdW5kZWQgY29vcmRpbmF0ZXMuXHJcbiAgXHRyb3VuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9yb3VuZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcm91bmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy54ID0gTWF0aC5yb3VuZCh0aGlzLngpO1xyXG4gIFx0XHR0aGlzLnkgPSBNYXRoLnJvdW5kKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGZsb29yKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIGZsb29yZWQgY29vcmRpbmF0ZXMgKHJvdW5kZWQgZG93bikuXHJcbiAgXHRmbG9vcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5jbG9uZSgpLl9mbG9vcigpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZmxvb3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy54ID0gTWF0aC5mbG9vcih0aGlzLngpO1xyXG4gIFx0XHR0aGlzLnkgPSBNYXRoLmZsb29yKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNlaWwoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgYSBjb3B5IG9mIHRoZSBjdXJyZW50IHBvaW50IHdpdGggY2VpbGVkIGNvb3JkaW5hdGVzIChyb3VuZGVkIHVwKS5cclxuICBcdGNlaWw6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fY2VpbCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2VpbDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLnggPSBNYXRoLmNlaWwodGhpcy54KTtcclxuICBcdFx0dGhpcy55ID0gTWF0aC5jZWlsKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHRydW5jKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIGEgY29weSBvZiB0aGUgY3VycmVudCBwb2ludCB3aXRoIHRydW5jYXRlZCBjb29yZGluYXRlcyAocm91bmRlZCB0b3dhcmRzIHplcm8pLlxyXG4gIFx0dHJ1bmM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY2xvbmUoKS5fdHJ1bmMoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RydW5jOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMueCA9IHRydW5jKHRoaXMueCk7XHJcbiAgXHRcdHRoaXMueSA9IHRydW5jKHRoaXMueSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGRpc3RhbmNlVG8ob3RoZXJQb2ludDogUG9pbnQpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGNhcnRlc2lhbiBkaXN0YW5jZSBiZXR3ZWVuIHRoZSBjdXJyZW50IGFuZCB0aGUgZ2l2ZW4gcG9pbnRzLlxyXG4gIFx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHR2YXIgeCA9IHBvaW50LnggLSB0aGlzLngsXHJcbiAgXHRcdCAgICB5ID0gcG9pbnQueSAtIHRoaXMueTtcclxuXHJcbiAgXHRcdHJldHVybiBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyUG9pbnQ6IFBvaW50KTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIHBvaW50IGhhcyB0aGUgc2FtZSBjb29yZGluYXRlcy5cclxuICBcdGVxdWFsczogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gcG9pbnQueCA9PT0gdGhpcy54ICYmXHJcbiAgXHRcdCAgICAgICBwb2ludC55ID09PSB0aGlzLnk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJQb2ludDogUG9pbnQpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiBib3RoIGNvb3JkaW5hdGVzIG9mIHRoZSBnaXZlbiBwb2ludCBhcmUgbGVzcyB0aGFuIHRoZSBjb3JyZXNwb25kaW5nIGN1cnJlbnQgcG9pbnQgY29vcmRpbmF0ZXMgKGluIGFic29sdXRlIHZhbHVlcykuXHJcbiAgXHRjb250YWluczogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHBvaW50ID0gdG9Qb2ludChwb2ludCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gTWF0aC5hYnMocG9pbnQueCkgPD0gTWF0aC5hYnModGhpcy54KSAmJlxyXG4gIFx0XHQgICAgICAgTWF0aC5hYnMocG9pbnQueSkgPD0gTWF0aC5hYnModGhpcy55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0b1N0cmluZygpOiBTdHJpbmdcclxuICBcdC8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuXHJcbiAgXHR0b1N0cmluZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gJ1BvaW50KCcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLngpICsgJywgJyArXHJcbiAgXHRcdCAgICAgICAgZm9ybWF0TnVtKHRoaXMueSkgKyAnKSc7XHJcbiAgXHR9XHJcbiAgfTtcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5wb2ludCh4OiBOdW1iZXIsIHk6IE51bWJlciwgcm91bmQ/OiBCb29sZWFuKVxyXG4gIC8vIENyZWF0ZXMgYSBQb2ludCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gYHhgIGFuZCBgeWAgY29vcmRpbmF0ZXMuIElmIG9wdGlvbmFsIGByb3VuZGAgaXMgc2V0IHRvIHRydWUsIHJvdW5kcyB0aGUgYHhgIGFuZCBgeWAgdmFsdWVzLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLnBvaW50KGNvb3JkczogTnVtYmVyW10pXHJcbiAgLy8gRXhwZWN0cyBhbiBhcnJheSBvZiB0aGUgZm9ybSBgW3gsIHldYCBpbnN0ZWFkLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLnBvaW50KGNvb3JkczogT2JqZWN0KVxyXG4gIC8vIEV4cGVjdHMgYSBwbGFpbiBvYmplY3Qgb2YgdGhlIGZvcm0gYHt4OiBOdW1iZXIsIHk6IE51bWJlcn1gIGluc3RlYWQuXHJcbiAgZnVuY3Rpb24gdG9Qb2ludCh4LCB5LCByb3VuZCkge1xyXG4gIFx0aWYgKHggaW5zdGFuY2VvZiBQb2ludCkge1xyXG4gIFx0XHRyZXR1cm4geDtcclxuICBcdH1cclxuICBcdGlmIChpc0FycmF5KHgpKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoeFswXSwgeFsxXSk7XHJcbiAgXHR9XHJcbiAgXHRpZiAoeCA9PT0gdW5kZWZpbmVkIHx8IHggPT09IG51bGwpIHtcclxuICBcdFx0cmV0dXJuIHg7XHJcbiAgXHR9XHJcbiAgXHRpZiAodHlwZW9mIHggPT09ICdvYmplY3QnICYmICd4JyBpbiB4ICYmICd5JyBpbiB4KSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoeC54LCB4LnkpO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBQb2ludCh4LCB5LCByb3VuZCk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIEJvdW5kc1xyXG4gICAqIEBha2EgTC5Cb3VuZHNcclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYSByZWN0YW5ndWxhciBhcmVhIGluIHBpeGVsIGNvb3JkaW5hdGVzLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogdmFyIHAxID0gTC5wb2ludCgxMCwgMTApLFxyXG4gICAqIHAyID0gTC5wb2ludCg0MCwgNjApLFxyXG4gICAqIGJvdW5kcyA9IEwuYm91bmRzKHAxLCBwMik7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBBbGwgTGVhZmxldCBtZXRob2RzIHRoYXQgYWNjZXB0IGBCb3VuZHNgIG9iamVjdHMgYWxzbyBhY2NlcHQgdGhlbSBpbiBhIHNpbXBsZSBBcnJheSBmb3JtICh1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlKSwgc28gdGhlIGJvdW5kcyBleGFtcGxlIGFib3ZlIGNhbiBiZSBwYXNzZWQgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBvdGhlckJvdW5kcy5pbnRlcnNlY3RzKFtbMTAsIDEwXSwgWzQwLCA2MF1dKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgQm91bmRzYCBkb2VzIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIHdoaWNoIG1lYW5zIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSBpdCwgYW5kIG5ldyBtZXRob2RzXHJcbiAgICogY2FuJ3QgYmUgYWRkZWQgdG8gaXQgd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBCb3VuZHMoYSwgYikge1xyXG4gIFx0aWYgKCFhKSB7IHJldHVybjsgfVxyXG5cclxuICBcdHZhciBwb2ludHMgPSBiID8gW2EsIGJdIDogYTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHRoaXMuZXh0ZW5kKHBvaW50c1tpXSk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBCb3VuZHMucHJvdG90eXBlID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCBleHRlbmQocG9pbnQ6IFBvaW50KTogdGhpc1xyXG4gIFx0Ly8gRXh0ZW5kcyB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBvaW50LlxyXG4gIFx0ZXh0ZW5kOiBmdW5jdGlvbiAocG9pbnQpIHsgLy8gKFBvaW50KVxyXG4gIFx0XHRwb2ludCA9IHRvUG9pbnQocG9pbnQpO1xyXG5cclxuICBcdFx0Ly8gQHByb3BlcnR5IG1pbjogUG9pbnRcclxuICBcdFx0Ly8gVGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gIFx0XHQvLyBAcHJvcGVydHkgbWF4OiBQb2ludFxyXG4gIFx0XHQvLyBUaGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLlxyXG4gIFx0XHRpZiAoIXRoaXMubWluICYmICF0aGlzLm1heCkge1xyXG4gIFx0XHRcdHRoaXMubWluID0gcG9pbnQuY2xvbmUoKTtcclxuICBcdFx0XHR0aGlzLm1heCA9IHBvaW50LmNsb25lKCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0dGhpcy5taW4ueCA9IE1hdGgubWluKHBvaW50LngsIHRoaXMubWluLngpO1xyXG4gIFx0XHRcdHRoaXMubWF4LnggPSBNYXRoLm1heChwb2ludC54LCB0aGlzLm1heC54KTtcclxuICBcdFx0XHR0aGlzLm1pbi55ID0gTWF0aC5taW4ocG9pbnQueSwgdGhpcy5taW4ueSk7XHJcbiAgXHRcdFx0dGhpcy5tYXgueSA9IE1hdGgubWF4KHBvaW50LnksIHRoaXMubWF4LnkpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENlbnRlcihyb3VuZD86IEJvb2xlYW4pOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uIChyb3VuZCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KFxyXG4gIFx0XHQgICAgICAgICh0aGlzLm1pbi54ICsgdGhpcy5tYXgueCkgLyAyLFxyXG4gIFx0XHQgICAgICAgICh0aGlzLm1pbi55ICsgdGhpcy5tYXgueSkgLyAyLCByb3VuZCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm90dG9tTGVmdCgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgYm90dG9tLWxlZnQgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldEJvdHRvbUxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludCh0aGlzLm1pbi54LCB0aGlzLm1heC55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRUb3BSaWdodCgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgdG9wLXJpZ2h0IHBvaW50IG9mIHRoZSBib3VuZHMuXHJcbiAgXHRnZXRUb3BSaWdodDogZnVuY3Rpb24gKCkgeyAvLyAtPiBQb2ludFxyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KHRoaXMubWF4LngsIHRoaXMubWluLnkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFRvcExlZnQoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIHRvcC1sZWZ0IHBvaW50IG9mIHRoZSBib3VuZHMgKGkuZS4gW2B0aGlzLm1pbmBdKCNib3VuZHMtbWluKSkuXHJcbiAgXHRnZXRUb3BMZWZ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm1pbjsgLy8gbGVmdCwgdG9wXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm90dG9tUmlnaHQoKTogUG9pbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGJvdHRvbS1yaWdodCBwb2ludCBvZiB0aGUgYm91bmRzIChpLmUuIFtgdGhpcy5tYXhgXSgjYm91bmRzLW1heCkpLlxyXG4gIFx0Z2V0Qm90dG9tUmlnaHQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMubWF4OyAvLyByaWdodCwgYm90dG9tXHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U2l6ZSgpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAgXHRnZXRTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm1heC5zdWJ0cmFjdCh0aGlzLm1pbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJCb3VuZHM6IEJvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIG9uZS5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBjb250YWlucyhwb2ludDogUG9pbnQpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGNvbnRhaW5zIHRoZSBnaXZlbiBwb2ludC5cclxuICBcdGNvbnRhaW5zOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdHZhciBtaW4sIG1heDtcclxuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb2JqWzBdID09PSAnbnVtYmVyJyB8fCBvYmogaW5zdGFuY2VvZiBQb2ludCkge1xyXG4gIFx0XHRcdG9iaiA9IHRvUG9pbnQob2JqKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmogPSB0b0JvdW5kcyhvYmopO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAob2JqIGluc3RhbmNlb2YgQm91bmRzKSB7XHJcbiAgXHRcdFx0bWluID0gb2JqLm1pbjtcclxuICBcdFx0XHRtYXggPSBvYmoubWF4O1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG1pbiA9IG1heCA9IG9iajtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIChtaW4ueCA+PSB0aGlzLm1pbi54KSAmJlxyXG4gIFx0XHQgICAgICAgKG1heC54IDw9IHRoaXMubWF4LngpICYmXHJcbiAgXHRcdCAgICAgICAobWluLnkgPj0gdGhpcy5taW4ueSkgJiZcclxuICBcdFx0ICAgICAgIChtYXgueSA8PSB0aGlzLm1heC55KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBpbnRlcnNlY3RzKG90aGVyQm91bmRzOiBCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIGludGVyc2VjdHMgdGhlIGdpdmVuIGJvdW5kcy4gVHdvIGJvdW5kc1xyXG4gIFx0Ly8gaW50ZXJzZWN0IGlmIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgcG9pbnQgaW4gY29tbW9uLlxyXG4gIFx0aW50ZXJzZWN0czogZnVuY3Rpb24gKGJvdW5kcykgeyAvLyAoQm91bmRzKSAtPiBCb29sZWFuXHJcbiAgXHRcdGJvdW5kcyA9IHRvQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHR2YXIgbWluID0gdGhpcy5taW4sXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLm1heCxcclxuICBcdFx0ICAgIG1pbjIgPSBib3VuZHMubWluLFxyXG4gIFx0XHQgICAgbWF4MiA9IGJvdW5kcy5tYXgsXHJcbiAgXHRcdCAgICB4SW50ZXJzZWN0cyA9IChtYXgyLnggPj0gbWluLngpICYmIChtaW4yLnggPD0gbWF4LngpLFxyXG4gIFx0XHQgICAgeUludGVyc2VjdHMgPSAobWF4Mi55ID49IG1pbi55KSAmJiAobWluMi55IDw9IG1heC55KTtcclxuXHJcbiAgXHRcdHJldHVybiB4SW50ZXJzZWN0cyAmJiB5SW50ZXJzZWN0cztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBvdmVybGFwcyhvdGhlckJvdW5kczogQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBvdmVybGFwcyB0aGUgZ2l2ZW4gYm91bmRzLiBUd28gYm91bmRzXHJcbiAgXHQvLyBvdmVybGFwIGlmIHRoZWlyIGludGVyc2VjdGlvbiBpcyBhbiBhcmVhLlxyXG4gIFx0b3ZlcmxhcHM6IGZ1bmN0aW9uIChib3VuZHMpIHsgLy8gKEJvdW5kcykgLT4gQm9vbGVhblxyXG4gIFx0XHRib3VuZHMgPSB0b0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIG1pbiA9IHRoaXMubWluLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5tYXgsXHJcbiAgXHRcdCAgICBtaW4yID0gYm91bmRzLm1pbixcclxuICBcdFx0ICAgIG1heDIgPSBib3VuZHMubWF4LFxyXG4gIFx0XHQgICAgeE92ZXJsYXBzID0gKG1heDIueCA+IG1pbi54KSAmJiAobWluMi54IDwgbWF4LngpLFxyXG4gIFx0XHQgICAgeU92ZXJsYXBzID0gKG1heDIueSA+IG1pbi55KSAmJiAobWluMi55IDwgbWF4LnkpO1xyXG5cclxuICBcdFx0cmV0dXJuIHhPdmVybGFwcyAmJiB5T3ZlcmxhcHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdGlzVmFsaWQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICEhKHRoaXMubWluICYmIHRoaXMubWF4KTtcclxuICBcdH1cclxuICB9O1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5ib3VuZHMoY29ybmVyMTogUG9pbnQsIGNvcm5lcjI6IFBvaW50KVxyXG4gIC8vIENyZWF0ZXMgYSBCb3VuZHMgb2JqZWN0IGZyb20gdHdvIGNvcm5lcnMgY29vcmRpbmF0ZSBwYWlycy5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLmJvdW5kcyhwb2ludHM6IFBvaW50W10pXHJcbiAgLy8gQ3JlYXRlcyBhIEJvdW5kcyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4gYXJyYXkgb2YgcG9pbnRzLlxyXG4gIGZ1bmN0aW9uIHRvQm91bmRzKGEsIGIpIHtcclxuICBcdGlmICghYSB8fCBhIGluc3RhbmNlb2YgQm91bmRzKSB7XHJcbiAgXHRcdHJldHVybiBhO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBCb3VuZHMoYSwgYik7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIExhdExuZ0JvdW5kc1xyXG4gICAqIEBha2EgTC5MYXRMbmdCb3VuZHNcclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYSByZWN0YW5ndWxhciBnZW9ncmFwaGljYWwgYXJlYSBvbiBhIG1hcC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBjb3JuZXIxID0gTC5sYXRMbmcoNDAuNzEyLCAtNzQuMjI3KSxcclxuICAgKiBjb3JuZXIyID0gTC5sYXRMbmcoNDAuNzc0LCAtNzQuMTI1KSxcclxuICAgKiBib3VuZHMgPSBMLmxhdExuZ0JvdW5kcyhjb3JuZXIxLCBjb3JuZXIyKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEFsbCBMZWFmbGV0IG1ldGhvZHMgdGhhdCBhY2NlcHQgTGF0TG5nQm91bmRzIG9iamVjdHMgYWxzbyBhY2NlcHQgdGhlbSBpbiBhIHNpbXBsZSBBcnJheSBmb3JtICh1bmxlc3Mgbm90ZWQgb3RoZXJ3aXNlKSwgc28gdGhlIGJvdW5kcyBleGFtcGxlIGFib3ZlIGNhbiBiZSBwYXNzZWQgbGlrZSB0aGlzOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXAuZml0Qm91bmRzKFtcclxuICAgKiBcdFs0MC43MTIsIC03NC4yMjddLFxyXG4gICAqIFx0WzQwLjc3NCwgLTc0LjEyNV1cclxuICAgKiBdKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIENhdXRpb246IGlmIHRoZSBhcmVhIGNyb3NzZXMgdGhlIGFudGltZXJpZGlhbiAob2Z0ZW4gY29uZnVzZWQgd2l0aCB0aGUgSW50ZXJuYXRpb25hbCBEYXRlIExpbmUpLCB5b3UgbXVzdCBzcGVjaWZ5IGNvcm5lcnMgX291dHNpZGVfIHRoZSBbLTE4MCwgMTgwXSBkZWdyZWVzIGxvbmdpdHVkZSByYW5nZS5cclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCBgTGF0TG5nQm91bmRzYCBkb2VzIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxyXG4gICAqIHdoaWNoIG1lYW5zIG5ldyBjbGFzc2VzIGNhbid0IGluaGVyaXQgZnJvbSBpdCwgYW5kIG5ldyBtZXRob2RzXHJcbiAgICogY2FuJ3QgYmUgYWRkZWQgdG8gaXQgd2l0aCB0aGUgYGluY2x1ZGVgIGZ1bmN0aW9uLlxyXG4gICAqL1xyXG5cclxuICBmdW5jdGlvbiBMYXRMbmdCb3VuZHMoY29ybmVyMSwgY29ybmVyMikgeyAvLyAoTGF0TG5nLCBMYXRMbmcpIG9yIChMYXRMbmdbXSlcclxuICBcdGlmICghY29ybmVyMSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHR2YXIgbGF0bG5ncyA9IGNvcm5lcjIgPyBbY29ybmVyMSwgY29ybmVyMl0gOiBjb3JuZXIxO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBsYXRsbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHRoaXMuZXh0ZW5kKGxhdGxuZ3NbaV0pO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgTGF0TG5nQm91bmRzLnByb3RvdHlwZSA9IHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGV4dGVuZChsYXRsbmc6IExhdExuZyk6IHRoaXNcclxuICBcdC8vIEV4dGVuZCB0aGUgYm91bmRzIHRvIGNvbnRhaW4gdGhlIGdpdmVuIHBvaW50XHJcblxyXG4gIFx0Ly8gQGFsdGVybmF0aXZlXHJcbiAgXHQvLyBAbWV0aG9kIGV4dGVuZChvdGhlckJvdW5kczogTGF0TG5nQm91bmRzKTogdGhpc1xyXG4gIFx0Ly8gRXh0ZW5kIHRoZSBib3VuZHMgdG8gY29udGFpbiB0aGUgZ2l2ZW4gYm91bmRzXHJcbiAgXHRleHRlbmQ6IGZ1bmN0aW9uIChvYmopIHtcclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIsIG5lMjtcclxuXHJcbiAgXHRcdGlmIChvYmogaW5zdGFuY2VvZiBMYXRMbmcpIHtcclxuICBcdFx0XHRzdzIgPSBvYmo7XHJcbiAgXHRcdFx0bmUyID0gb2JqO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBMYXRMbmdCb3VuZHMpIHtcclxuICBcdFx0XHRzdzIgPSBvYmouX3NvdXRoV2VzdDtcclxuICBcdFx0XHRuZTIgPSBvYmouX25vcnRoRWFzdDtcclxuXHJcbiAgXHRcdFx0aWYgKCFzdzIgfHwgIW5lMikgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRyZXR1cm4gb2JqID8gdGhpcy5leHRlbmQodG9MYXRMbmcob2JqKSB8fCB0b0xhdExuZ0JvdW5kcyhvYmopKSA6IHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICghc3cgJiYgIW5lKSB7XHJcbiAgXHRcdFx0dGhpcy5fc291dGhXZXN0ID0gbmV3IExhdExuZyhzdzIubGF0LCBzdzIubG5nKTtcclxuICBcdFx0XHR0aGlzLl9ub3J0aEVhc3QgPSBuZXcgTGF0TG5nKG5lMi5sYXQsIG5lMi5sbmcpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHN3LmxhdCA9IE1hdGgubWluKHN3Mi5sYXQsIHN3LmxhdCk7XHJcbiAgXHRcdFx0c3cubG5nID0gTWF0aC5taW4oc3cyLmxuZywgc3cubG5nKTtcclxuICBcdFx0XHRuZS5sYXQgPSBNYXRoLm1heChuZTIubGF0LCBuZS5sYXQpO1xyXG4gIFx0XHRcdG5lLmxuZyA9IE1hdGgubWF4KG5lMi5sbmcsIG5lLmxuZyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhZChidWZmZXJSYXRpbzogTnVtYmVyKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGJvdW5kcyBjcmVhdGVkIGJ5IGV4dGVuZGluZyBvciByZXRyYWN0aW5nIHRoZSBjdXJyZW50IGJvdW5kcyBieSBhIGdpdmVuIHJhdGlvIGluIGVhY2ggZGlyZWN0aW9uLlxyXG4gIFx0Ly8gRm9yIGV4YW1wbGUsIGEgcmF0aW8gb2YgMC41IGV4dGVuZHMgdGhlIGJvdW5kcyBieSA1MCUgaW4gZWFjaCBkaXJlY3Rpb24uXHJcbiAgXHQvLyBOZWdhdGl2ZSB2YWx1ZXMgd2lsbCByZXRyYWN0IHRoZSBib3VuZHMuXHJcbiAgXHRwYWQ6IGZ1bmN0aW9uIChidWZmZXJSYXRpbykge1xyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIGhlaWdodEJ1ZmZlciA9IE1hdGguYWJzKHN3LmxhdCAtIG5lLmxhdCkgKiBidWZmZXJSYXRpbyxcclxuICBcdFx0ICAgIHdpZHRoQnVmZmVyID0gTWF0aC5hYnMoc3cubG5nIC0gbmUubG5nKSAqIGJ1ZmZlclJhdGlvO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgbmV3IExhdExuZyhzdy5sYXQgLSBoZWlnaHRCdWZmZXIsIHN3LmxuZyAtIHdpZHRoQnVmZmVyKSxcclxuICBcdFx0ICAgICAgICBuZXcgTGF0TG5nKG5lLmxhdCArIGhlaWdodEJ1ZmZlciwgbmUubG5nICsgd2lkdGhCdWZmZXIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjZW50ZXIgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldENlbnRlcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhcclxuICBcdFx0ICAgICAgICAodGhpcy5fc291dGhXZXN0LmxhdCArIHRoaXMuX25vcnRoRWFzdC5sYXQpIC8gMixcclxuICBcdFx0ICAgICAgICAodGhpcy5fc291dGhXZXN0LmxuZyArIHRoaXMuX25vcnRoRWFzdC5sbmcpIC8gMik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0U291dGhXZXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgc291dGgtd2VzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0U291dGhXZXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9zb3V0aFdlc3Q7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Tm9ydGhFYXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGgtZWFzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Tm9ydGhFYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ub3J0aEVhc3Q7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Tm9ydGhXZXN0KCk6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGgtd2VzdCBwb2ludCBvZiB0aGUgYm91bmRzLlxyXG4gIFx0Z2V0Tm9ydGhXZXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHRoaXMuZ2V0Tm9ydGgoKSwgdGhpcy5nZXRXZXN0KCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNvdXRoRWFzdCgpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIHNvdXRoLWVhc3QgcG9pbnQgb2YgdGhlIGJvdW5kcy5cclxuICBcdGdldFNvdXRoRWFzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyh0aGlzLmdldFNvdXRoKCksIHRoaXMuZ2V0RWFzdCgpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRXZXN0KCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgd2VzdCBsb25naXR1ZGUgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Z2V0V2VzdDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0LmxuZztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTb3V0aCgpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIHNvdXRoIGxhdGl0dWRlIG9mIHRoZSBib3VuZHNcclxuICBcdGdldFNvdXRoOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9zb3V0aFdlc3QubGF0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEVhc3QoKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBlYXN0IGxvbmdpdHVkZSBvZiB0aGUgYm91bmRzXHJcbiAgXHRnZXRFYXN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9ub3J0aEVhc3QubG5nO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldE5vcnRoKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbm9ydGggbGF0aXR1ZGUgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Z2V0Tm9ydGg6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX25vcnRoRWFzdC5sYXQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMob3RoZXJCb3VuZHM6IExhdExuZ0JvdW5kcyk6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgY29udGFpbnMgdGhlIGdpdmVuIG9uZS5cclxuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgY29udGFpbnMgKGxhdGxuZzogTGF0TG5nKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBjb250YWlucyB0aGUgZ2l2ZW4gcG9pbnQuXHJcbiAgXHRjb250YWluczogZnVuY3Rpb24gKG9iaikgeyAvLyAoTGF0TG5nQm91bmRzKSBvciAoTGF0TG5nKSAtPiBCb29sZWFuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb2JqWzBdID09PSAnbnVtYmVyJyB8fCBvYmogaW5zdGFuY2VvZiBMYXRMbmcgfHwgJ2xhdCcgaW4gb2JqKSB7XHJcbiAgXHRcdFx0b2JqID0gdG9MYXRMbmcob2JqKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvYmogPSB0b0xhdExuZ0JvdW5kcyhvYmopO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIHN3MiwgbmUyO1xyXG5cclxuICBcdFx0aWYgKG9iaiBpbnN0YW5jZW9mIExhdExuZ0JvdW5kcykge1xyXG4gIFx0XHRcdHN3MiA9IG9iai5nZXRTb3V0aFdlc3QoKTtcclxuICBcdFx0XHRuZTIgPSBvYmouZ2V0Tm9ydGhFYXN0KCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0c3cyID0gbmUyID0gb2JqO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gKHN3Mi5sYXQgPj0gc3cubGF0KSAmJiAobmUyLmxhdCA8PSBuZS5sYXQpICYmXHJcbiAgXHRcdCAgICAgICAoc3cyLmxuZyA+PSBzdy5sbmcpICYmIChuZTIubG5nIDw9IG5lLmxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaW50ZXJzZWN0cyhvdGhlckJvdW5kczogTGF0TG5nQm91bmRzKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHJlY3RhbmdsZSBpbnRlcnNlY3RzIHRoZSBnaXZlbiBib3VuZHMuIFR3byBib3VuZHMgaW50ZXJzZWN0IGlmIHRoZXkgaGF2ZSBhdCBsZWFzdCBvbmUgcG9pbnQgaW4gY29tbW9uLlxyXG4gIFx0aW50ZXJzZWN0czogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0dmFyIHN3ID0gdGhpcy5fc291dGhXZXN0LFxyXG4gIFx0XHQgICAgbmUgPSB0aGlzLl9ub3J0aEVhc3QsXHJcbiAgXHRcdCAgICBzdzIgPSBib3VuZHMuZ2V0U291dGhXZXN0KCksXHJcbiAgXHRcdCAgICBuZTIgPSBib3VuZHMuZ2V0Tm9ydGhFYXN0KCksXHJcblxyXG4gIFx0XHQgICAgbGF0SW50ZXJzZWN0cyA9IChuZTIubGF0ID49IHN3LmxhdCkgJiYgKHN3Mi5sYXQgPD0gbmUubGF0KSxcclxuICBcdFx0ICAgIGxuZ0ludGVyc2VjdHMgPSAobmUyLmxuZyA+PSBzdy5sbmcpICYmIChzdzIubG5nIDw9IG5lLmxuZyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0SW50ZXJzZWN0cyAmJiBsbmdJbnRlcnNlY3RzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG92ZXJsYXBzKG90aGVyQm91bmRzOiBMYXRMbmdCb3VuZHMpOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgcmVjdGFuZ2xlIG92ZXJsYXBzIHRoZSBnaXZlbiBib3VuZHMuIFR3byBib3VuZHMgb3ZlcmxhcCBpZiB0aGVpciBpbnRlcnNlY3Rpb24gaXMgYW4gYXJlYS5cclxuICBcdG92ZXJsYXBzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHR2YXIgc3cgPSB0aGlzLl9zb3V0aFdlc3QsXHJcbiAgXHRcdCAgICBuZSA9IHRoaXMuX25vcnRoRWFzdCxcclxuICBcdFx0ICAgIHN3MiA9IGJvdW5kcy5nZXRTb3V0aFdlc3QoKSxcclxuICBcdFx0ICAgIG5lMiA9IGJvdW5kcy5nZXROb3J0aEVhc3QoKSxcclxuXHJcbiAgXHRcdCAgICBsYXRPdmVybGFwcyA9IChuZTIubGF0ID4gc3cubGF0KSAmJiAoc3cyLmxhdCA8IG5lLmxhdCksXHJcbiAgXHRcdCAgICBsbmdPdmVybGFwcyA9IChuZTIubG5nID4gc3cubG5nKSAmJiAoc3cyLmxuZyA8IG5lLmxuZyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0T3ZlcmxhcHMgJiYgbG5nT3ZlcmxhcHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9CQm94U3RyaW5nKCk6IFN0cmluZ1xyXG4gIFx0Ly8gUmV0dXJucyBhIHN0cmluZyB3aXRoIGJvdW5kaW5nIGJveCBjb29yZGluYXRlcyBpbiBhICdzb3V0aHdlc3RfbG5nLHNvdXRod2VzdF9sYXQsbm9ydGhlYXN0X2xuZyxub3J0aGVhc3RfbGF0JyBmb3JtYXQuIFVzZWZ1bCBmb3Igc2VuZGluZyByZXF1ZXN0cyB0byB3ZWIgc2VydmljZXMgdGhhdCByZXR1cm4gZ2VvIGRhdGEuXHJcbiAgXHR0b0JCb3hTdHJpbmc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIFt0aGlzLmdldFdlc3QoKSwgdGhpcy5nZXRTb3V0aCgpLCB0aGlzLmdldEVhc3QoKSwgdGhpcy5nZXROb3J0aCgpXS5qb2luKCcsJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZXF1YWxzKG90aGVyQm91bmRzOiBMYXRMbmdCb3VuZHMsIG1heE1hcmdpbj86IE51bWJlcik6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSByZWN0YW5nbGUgaXMgZXF1aXZhbGVudCAod2l0aGluIGEgc21hbGwgbWFyZ2luIG9mIGVycm9yKSB0byB0aGUgZ2l2ZW4gYm91bmRzLiBUaGUgbWFyZ2luIG9mIGVycm9yIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYG1heE1hcmdpbmAgdG8gYSBzbWFsbCBudW1iZXIuXHJcbiAgXHRlcXVhbHM6IGZ1bmN0aW9uIChib3VuZHMsIG1heE1hcmdpbikge1xyXG4gIFx0XHRpZiAoIWJvdW5kcykgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fc291dGhXZXN0LmVxdWFscyhib3VuZHMuZ2V0U291dGhXZXN0KCksIG1heE1hcmdpbikgJiZcclxuICBcdFx0ICAgICAgIHRoaXMuX25vcnRoRWFzdC5lcXVhbHMoYm91bmRzLmdldE5vcnRoRWFzdCgpLCBtYXhNYXJnaW4pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGlzVmFsaWQoKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGJvdW5kcyBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQuXHJcbiAgXHRpc1ZhbGlkOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiAhISh0aGlzLl9zb3V0aFdlc3QgJiYgdGhpcy5fbm9ydGhFYXN0KTtcclxuICBcdH1cclxuICB9O1xyXG5cclxuICAvLyBUT0RPIEludGVybmF0aW9uYWwgZGF0ZSBsaW5lP1xyXG5cclxuICAvLyBAZmFjdG9yeSBMLmxhdExuZ0JvdW5kcyhjb3JuZXIxOiBMYXRMbmcsIGNvcm5lcjI6IExhdExuZylcclxuICAvLyBDcmVhdGVzIGEgYExhdExuZ0JvdW5kc2Agb2JqZWN0IGJ5IGRlZmluaW5nIHR3byBkaWFnb25hbGx5IG9wcG9zaXRlIGNvcm5lcnMgb2YgdGhlIHJlY3RhbmdsZS5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmdCb3VuZHMobGF0bG5nczogTGF0TG5nW10pXHJcbiAgLy8gQ3JlYXRlcyBhIGBMYXRMbmdCb3VuZHNgIG9iamVjdCBkZWZpbmVkIGJ5IHRoZSBnZW9ncmFwaGljYWwgcG9pbnRzIGl0IGNvbnRhaW5zLiBWZXJ5IHVzZWZ1bCBmb3Igem9vbWluZyB0aGUgbWFwIHRvIGZpdCBhIHBhcnRpY3VsYXIgc2V0IG9mIGxvY2F0aW9ucyB3aXRoIFtgZml0Qm91bmRzYF0oI21hcC1maXRib3VuZHMpLlxyXG4gIGZ1bmN0aW9uIHRvTGF0TG5nQm91bmRzKGEsIGIpIHtcclxuICBcdGlmIChhIGluc3RhbmNlb2YgTGF0TG5nQm91bmRzKSB7XHJcbiAgXHRcdHJldHVybiBhO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoYSwgYik7XHJcbiAgfVxuXG4gIC8qIEBjbGFzcyBMYXRMbmdcclxuICAgKiBAYWthIEwuTGF0TG5nXHJcbiAgICpcclxuICAgKiBSZXByZXNlbnRzIGEgZ2VvZ3JhcGhpY2FsIHBvaW50IHdpdGggYSBjZXJ0YWluIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogdmFyIGxhdGxuZyA9IEwubGF0TG5nKDUwLjUsIDMwLjUpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogQWxsIExlYWZsZXQgbWV0aG9kcyB0aGF0IGFjY2VwdCBMYXRMbmcgb2JqZWN0cyBhbHNvIGFjY2VwdCB0aGVtIGluIGEgc2ltcGxlIEFycmF5IGZvcm0gYW5kIHNpbXBsZSBvYmplY3QgZm9ybSAodW5sZXNzIG5vdGVkIG90aGVyd2lzZSksIHNvIHRoZXNlIGxpbmVzIGFyZSBlcXVpdmFsZW50OlxyXG4gICAqXHJcbiAgICogYGBgXHJcbiAgICogbWFwLnBhblRvKFs1MCwgMzBdKTtcclxuICAgKiBtYXAucGFuVG8oe2xvbjogMzAsIGxhdDogNTB9KTtcclxuICAgKiBtYXAucGFuVG8oe2xhdDogNTAsIGxuZzogMzB9KTtcclxuICAgKiBtYXAucGFuVG8oTC5sYXRMbmcoNTAsIDMwKSk7XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBOb3RlIHRoYXQgYExhdExuZ2AgZG9lcyBub3QgaW5oZXJpdCBmcm9tIExlYWZsZXQncyBgQ2xhc3NgIG9iamVjdCxcclxuICAgKiB3aGljaCBtZWFucyBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gaXQsIGFuZCBuZXcgbWV0aG9kc1xyXG4gICAqIGNhbid0IGJlIGFkZGVkIHRvIGl0IHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cclxuICAgKi9cclxuXHJcbiAgZnVuY3Rpb24gTGF0TG5nKGxhdCwgbG5nLCBhbHQpIHtcclxuICBcdGlmIChpc05hTihsYXQpIHx8IGlzTmFOKGxuZykpIHtcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIExhdExuZyBvYmplY3Q6ICgnICsgbGF0ICsgJywgJyArIGxuZyArICcpJyk7XHJcbiAgXHR9XHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGxhdDogTnVtYmVyXHJcbiAgXHQvLyBMYXRpdHVkZSBpbiBkZWdyZWVzXHJcbiAgXHR0aGlzLmxhdCA9ICtsYXQ7XHJcblxyXG4gIFx0Ly8gQHByb3BlcnR5IGxuZzogTnVtYmVyXHJcbiAgXHQvLyBMb25naXR1ZGUgaW4gZGVncmVlc1xyXG4gIFx0dGhpcy5sbmcgPSArbG5nO1xyXG5cclxuICBcdC8vIEBwcm9wZXJ0eSBhbHQ6IE51bWJlclxyXG4gIFx0Ly8gQWx0aXR1ZGUgaW4gbWV0ZXJzIChvcHRpb25hbClcclxuICBcdGlmIChhbHQgIT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHR0aGlzLmFsdCA9ICthbHQ7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICBMYXRMbmcucHJvdG90eXBlID0ge1xyXG4gIFx0Ly8gQG1ldGhvZCBlcXVhbHMob3RoZXJMYXRMbmc6IExhdExuZywgbWF4TWFyZ2luPzogTnVtYmVyKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGBMYXRMbmdgIHBvaW50IGlzIGF0IHRoZSBzYW1lIHBvc2l0aW9uICh3aXRoaW4gYSBzbWFsbCBtYXJnaW4gb2YgZXJyb3IpLiBUaGUgbWFyZ2luIG9mIGVycm9yIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgYG1heE1hcmdpbmAgdG8gYSBzbWFsbCBudW1iZXIuXHJcbiAgXHRlcXVhbHM6IGZ1bmN0aW9uIChvYmosIG1heE1hcmdpbikge1xyXG4gIFx0XHRpZiAoIW9iaikgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdG9iaiA9IHRvTGF0TG5nKG9iaik7XHJcblxyXG4gIFx0XHR2YXIgbWFyZ2luID0gTWF0aC5tYXgoXHJcbiAgXHRcdCAgICAgICAgTWF0aC5hYnModGhpcy5sYXQgLSBvYmoubGF0KSxcclxuICBcdFx0ICAgICAgICBNYXRoLmFicyh0aGlzLmxuZyAtIG9iai5sbmcpKTtcclxuXHJcbiAgXHRcdHJldHVybiBtYXJnaW4gPD0gKG1heE1hcmdpbiA9PT0gdW5kZWZpbmVkID8gMS4wRS05IDogbWF4TWFyZ2luKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB0b1N0cmluZygpOiBTdHJpbmdcclxuICBcdC8vIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHBvaW50IChmb3IgZGVidWdnaW5nIHB1cnBvc2VzKS5cclxuICBcdHRvU3RyaW5nOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHJldHVybiAnTGF0TG5nKCcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLmxhdCwgcHJlY2lzaW9uKSArICcsICcgK1xyXG4gIFx0XHQgICAgICAgIGZvcm1hdE51bSh0aGlzLmxuZywgcHJlY2lzaW9uKSArICcpJztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZVRvKG90aGVyTGF0TG5nOiBMYXRMbmcpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIChpbiBtZXRlcnMpIHRvIHRoZSBnaXZlbiBgTGF0TG5nYCBjYWxjdWxhdGVkIHVzaW5nIHRoZSBbU3BoZXJpY2FsIExhdyBvZiBDb3NpbmVzXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcGhlcmljYWxfbGF3X29mX2Nvc2luZXMpLlxyXG4gIFx0ZGlzdGFuY2VUbzogZnVuY3Rpb24gKG90aGVyKSB7XHJcbiAgXHRcdHJldHVybiBFYXJ0aC5kaXN0YW5jZSh0aGlzLCB0b0xhdExuZyhvdGhlcikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXAoKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgbmV3IGBMYXRMbmdgIG9iamVjdCB3aXRoIHRoZSBsb25naXR1ZGUgd3JhcHBlZCBzbyBpdCdzIGFsd2F5cyBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlcy5cclxuICBcdHdyYXA6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIEVhcnRoLndyYXBMYXRMbmcodGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9Cb3VuZHMoc2l6ZUluTWV0ZXJzOiBOdW1iZXIpOiBMYXRMbmdCb3VuZHNcclxuICBcdC8vIFJldHVybnMgYSBuZXcgYExhdExuZ0JvdW5kc2Agb2JqZWN0IGluIHdoaWNoIGVhY2ggYm91bmRhcnkgaXMgYHNpemVJbk1ldGVycy8yYCBtZXRlcnMgYXBhcnQgZnJvbSB0aGUgYExhdExuZ2AuXHJcbiAgXHR0b0JvdW5kczogZnVuY3Rpb24gKHNpemVJbk1ldGVycykge1xyXG4gIFx0XHR2YXIgbGF0QWNjdXJhY3kgPSAxODAgKiBzaXplSW5NZXRlcnMgLyA0MDA3NTAxNyxcclxuICBcdFx0ICAgIGxuZ0FjY3VyYWN5ID0gbGF0QWNjdXJhY3kgLyBNYXRoLmNvcygoTWF0aC5QSSAvIDE4MCkgKiB0aGlzLmxhdCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdG9MYXRMbmdCb3VuZHMoXHJcbiAgXHRcdCAgICAgICAgW3RoaXMubGF0IC0gbGF0QWNjdXJhY3ksIHRoaXMubG5nIC0gbG5nQWNjdXJhY3ldLFxyXG4gIFx0XHQgICAgICAgIFt0aGlzLmxhdCArIGxhdEFjY3VyYWN5LCB0aGlzLmxuZyArIGxuZ0FjY3VyYWN5XSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGNsb25lOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKHRoaXMubGF0LCB0aGlzLmxuZywgdGhpcy5hbHQpO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmcobGF0aXR1ZGU6IE51bWJlciwgbG9uZ2l0dWRlOiBOdW1iZXIsIGFsdGl0dWRlPzogTnVtYmVyKTogTGF0TG5nXHJcbiAgLy8gQ3JlYXRlcyBhbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgZ2VvZ3JhcGhpY2FsIHBvaW50IHdpdGggdGhlIGdpdmVuIGxhdGl0dWRlIGFuZCBsb25naXR1ZGUgKGFuZCBvcHRpb25hbGx5IGFsdGl0dWRlKS5cclxuXHJcbiAgLy8gQGFsdGVybmF0aXZlXHJcbiAgLy8gQGZhY3RvcnkgTC5sYXRMbmcoY29vcmRzOiBBcnJheSk6IExhdExuZ1xyXG4gIC8vIEV4cGVjdHMgYW4gYXJyYXkgb2YgdGhlIGZvcm0gYFtOdW1iZXIsIE51bWJlcl1gIG9yIGBbTnVtYmVyLCBOdW1iZXIsIE51bWJlcl1gIGluc3RlYWQuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwubGF0TG5nKGNvb3JkczogT2JqZWN0KTogTGF0TG5nXHJcbiAgLy8gRXhwZWN0cyBhbiBwbGFpbiBvYmplY3Qgb2YgdGhlIGZvcm0gYHtsYXQ6IE51bWJlciwgbG5nOiBOdW1iZXJ9YCBvciBge2xhdDogTnVtYmVyLCBsbmc6IE51bWJlciwgYWx0OiBOdW1iZXJ9YCBpbnN0ZWFkLlxyXG5cclxuICBmdW5jdGlvbiB0b0xhdExuZyhhLCBiLCBjKSB7XHJcbiAgXHRpZiAoYSBpbnN0YW5jZW9mIExhdExuZykge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdGlmIChpc0FycmF5KGEpICYmIHR5cGVvZiBhWzBdICE9PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRpZiAoYS5sZW5ndGggPT09IDMpIHtcclxuICBcdFx0XHRyZXR1cm4gbmV3IExhdExuZyhhWzBdLCBhWzFdLCBhWzJdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoYS5sZW5ndGggPT09IDIpIHtcclxuICBcdFx0XHRyZXR1cm4gbmV3IExhdExuZyhhWzBdLCBhWzFdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gbnVsbDtcclxuICBcdH1cclxuICBcdGlmIChhID09PSB1bmRlZmluZWQgfHwgYSA9PT0gbnVsbCkge1xyXG4gIFx0XHRyZXR1cm4gYTtcclxuICBcdH1cclxuICBcdGlmICh0eXBlb2YgYSA9PT0gJ29iamVjdCcgJiYgJ2xhdCcgaW4gYSkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhhLmxhdCwgJ2xuZycgaW4gYSA/IGEubG5nIDogYS5sb24sIGEuYWx0KTtcclxuICBcdH1cclxuICBcdGlmIChiID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gbmV3IExhdExuZyhhLCBiLCBjKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIENSU1xyXG4gICAqIEBjcnMgTC5DUlMuQmFzZVxyXG4gICAqIE9iamVjdCB0aGF0IGRlZmluZXMgY29vcmRpbmF0ZSByZWZlcmVuY2Ugc3lzdGVtcyBmb3IgcHJvamVjdGluZ1xyXG4gICAqIGdlb2dyYXBoaWNhbCBwb2ludHMgaW50byBwaXhlbCAoc2NyZWVuKSBjb29yZGluYXRlcyBhbmQgYmFjayAoYW5kIHRvXHJcbiAgICogY29vcmRpbmF0ZXMgaW4gb3RoZXIgdW5pdHMgZm9yIFtXTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9NYXBfU2VydmljZSkgc2VydmljZXMpLiBTZWVcclxuICAgKiBbc3BhdGlhbCByZWZlcmVuY2Ugc3lzdGVtXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Nvb3JkaW5hdGVfcmVmZXJlbmNlX3N5c3RlbSkuXHJcbiAgICpcclxuICAgKiBMZWFmbGV0IGRlZmluZXMgdGhlIG1vc3QgdXN1YWwgQ1JTcyBieSBkZWZhdWx0LiBJZiB5b3Ugd2FudCB0byB1c2UgYVxyXG4gICAqIENSUyBub3QgZGVmaW5lZCBieSBkZWZhdWx0LCB0YWtlIGEgbG9vayBhdCB0aGVcclxuICAgKiBbUHJvajRMZWFmbGV0XShodHRwczovL2dpdGh1Yi5jb20va2FydGVuYS9Qcm9qNExlYWZsZXQpIHBsdWdpbi5cclxuICAgKlxyXG4gICAqIE5vdGUgdGhhdCB0aGUgQ1JTIGluc3RhbmNlcyBkbyBub3QgaW5oZXJpdCBmcm9tIExlYWZsZXQncyBgQ2xhc3NgIG9iamVjdCxcclxuICAgKiBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiBBbHNvLCBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gdGhlbSxcclxuICAgKiBhbmQgbWV0aG9kcyBjYW4ndCBiZSBhZGRlZCB0byB0aGVtIHdpdGggdGhlIGBpbmNsdWRlYCBmdW5jdGlvbi5cclxuICAgKi9cclxuXHJcbiAgdmFyIENSUyA9IHtcclxuICBcdC8vIEBtZXRob2QgbGF0TG5nVG9Qb2ludChsYXRsbmc6IExhdExuZywgem9vbTogTnVtYmVyKTogUG9pbnRcclxuICBcdC8vIFByb2plY3RzIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcyBpbnRvIHBpeGVsIGNvb3JkaW5hdGVzIGZvciBhIGdpdmVuIHpvb20uXHJcbiAgXHRsYXRMbmdUb1BvaW50OiBmdW5jdGlvbiAobGF0bG5nLCB6b29tKSB7XHJcbiAgXHRcdHZhciBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdGlvbi5wcm9qZWN0KGxhdGxuZyksXHJcbiAgXHRcdCAgICBzY2FsZSA9IHRoaXMuc2NhbGUoem9vbSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy50cmFuc2Zvcm1hdGlvbi5fdHJhbnNmb3JtKHByb2plY3RlZFBvaW50LCBzY2FsZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcG9pbnRUb0xhdExuZyhwb2ludDogUG9pbnQsIHpvb206IE51bWJlcik6IExhdExuZ1xyXG4gIFx0Ly8gVGhlIGludmVyc2Ugb2YgYGxhdExuZ1RvUG9pbnRgLiBQcm9qZWN0cyBwaXhlbCBjb29yZGluYXRlcyBvbiBhIGdpdmVuXHJcbiAgXHQvLyB6b29tIGludG8gZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzLlxyXG4gIFx0cG9pbnRUb0xhdExuZzogZnVuY3Rpb24gKHBvaW50LCB6b29tKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuc2NhbGUoem9vbSksXHJcbiAgXHRcdCAgICB1bnRyYW5zZm9ybWVkUG9pbnQgPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnVudHJhbnNmb3JtKHBvaW50LCBzY2FsZSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0aW9uLnVucHJvamVjdCh1bnRyYW5zZm9ybWVkUG9pbnQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHByb2plY3QobGF0bG5nOiBMYXRMbmcpOiBQb2ludFxyXG4gIFx0Ly8gUHJvamVjdHMgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGludG8gY29vcmRpbmF0ZXMgaW4gdW5pdHMgYWNjZXB0ZWQgZm9yXHJcbiAgXHQvLyB0aGlzIENSUyAoZS5nLiBtZXRlcnMgZm9yIEVQU0c6Mzg1NywgZm9yIHBhc3NpbmcgaXQgdG8gV01TIHNlcnZpY2VzKS5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMucHJvamVjdGlvbi5wcm9qZWN0KGxhdGxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW5wcm9qZWN0KHBvaW50OiBQb2ludCk6IExhdExuZ1xyXG4gIFx0Ly8gR2l2ZW4gYSBwcm9qZWN0ZWQgY29vcmRpbmF0ZSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIExhdExuZy5cclxuICBcdC8vIFRoZSBpbnZlcnNlIG9mIGBwcm9qZWN0YC5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLnByb2plY3Rpb24udW5wcm9qZWN0KHBvaW50KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzY2FsZSh6b29tOiBOdW1iZXIpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIHNjYWxlIHVzZWQgd2hlbiB0cmFuc2Zvcm1pbmcgcHJvamVjdGVkIGNvb3JkaW5hdGVzIGludG9cclxuICBcdC8vIHBpeGVsIGNvb3JkaW5hdGVzIGZvciBhIHBhcnRpY3VsYXIgem9vbS4gRm9yIGV4YW1wbGUsIGl0IHJldHVybnNcclxuICBcdC8vIGAyNTYgKiAyXnpvb21gIGZvciBNZXJjYXRvci1iYXNlZCBDUlMuXHJcbiAgXHRzY2FsZTogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0cmV0dXJuIDI1NiAqIE1hdGgucG93KDIsIHpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHpvb20oc2NhbGU6IE51bWJlcik6IE51bWJlclxyXG4gIFx0Ly8gSW52ZXJzZSBvZiBgc2NhbGUoKWAsIHJldHVybnMgdGhlIHpvb20gbGV2ZWwgY29ycmVzcG9uZGluZyB0byBhIHNjYWxlXHJcbiAgXHQvLyBmYWN0b3Igb2YgYHNjYWxlYC5cclxuICBcdHpvb206IGZ1bmN0aW9uIChzY2FsZSkge1xyXG4gIFx0XHRyZXR1cm4gTWF0aC5sb2coc2NhbGUgLyAyNTYpIC8gTWF0aC5MTjI7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UHJvamVjdGVkQm91bmRzKHpvb206IE51bWJlcik6IEJvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcHJvamVjdGlvbidzIGJvdW5kcyBzY2FsZWQgYW5kIHRyYW5zZm9ybWVkIGZvciB0aGUgcHJvdmlkZWQgYHpvb21gLlxyXG4gIFx0Z2V0UHJvamVjdGVkQm91bmRzOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHRpZiAodGhpcy5pbmZpbml0ZSkgeyByZXR1cm4gbnVsbDsgfVxyXG5cclxuICBcdFx0dmFyIGIgPSB0aGlzLnByb2plY3Rpb24uYm91bmRzLFxyXG4gIFx0XHQgICAgcyA9IHRoaXMuc2NhbGUoem9vbSksXHJcbiAgXHRcdCAgICBtaW4gPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShiLm1pbiwgcyksXHJcbiAgXHRcdCAgICBtYXggPSB0aGlzLnRyYW5zZm9ybWF0aW9uLnRyYW5zZm9ybShiLm1heCwgcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IEJvdW5kcyhtaW4sIG1heCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGlzdGFuY2UobGF0bG5nMTogTGF0TG5nLCBsYXRsbmcyOiBMYXRMbmcpOiBOdW1iZXJcclxuICBcdC8vIFJldHVybnMgdGhlIGRpc3RhbmNlIGJldHdlZW4gdHdvIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlcy5cclxuXHJcbiAgXHQvLyBAcHJvcGVydHkgY29kZTogU3RyaW5nXHJcbiAgXHQvLyBTdGFuZGFyZCBjb2RlIG5hbWUgb2YgdGhlIENSUyBwYXNzZWQgaW50byBXTVMgc2VydmljZXMgKGUuZy4gYCdFUFNHOjM4NTcnYClcclxuICBcdC8vXHJcbiAgXHQvLyBAcHJvcGVydHkgd3JhcExuZzogTnVtYmVyW11cclxuICBcdC8vIEFuIGFycmF5IG9mIHR3byBudW1iZXJzIGRlZmluaW5nIHdoZXRoZXIgdGhlIGxvbmdpdHVkZSAoaG9yaXpvbnRhbCkgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gYXhpcyB3cmFwcyBhcm91bmQgYSBnaXZlbiByYW5nZSBhbmQgaG93LiBEZWZhdWx0cyB0byBgWy0xODAsIDE4MF1gIGluIG1vc3RcclxuICBcdC8vIGdlb2dyYXBoaWNhbCBDUlNzLiBJZiBgdW5kZWZpbmVkYCwgdGhlIGxvbmdpdHVkZSBheGlzIGRvZXMgbm90IHdyYXAgYXJvdW5kLlxyXG4gIFx0Ly9cclxuICBcdC8vIEBwcm9wZXJ0eSB3cmFwTGF0OiBOdW1iZXJbXVxyXG4gIFx0Ly8gTGlrZSBgd3JhcExuZ2AsIGJ1dCBmb3IgdGhlIGxhdGl0dWRlICh2ZXJ0aWNhbCkgYXhpcy5cclxuXHJcbiAgXHQvLyB3cmFwTG5nOiBbbWluLCBtYXhdLFxyXG4gIFx0Ly8gd3JhcExhdDogW21pbiwgbWF4XSxcclxuXHJcbiAgXHQvLyBAcHJvcGVydHkgaW5maW5pdGU6IEJvb2xlYW5cclxuICBcdC8vIElmIHRydWUsIHRoZSBjb29yZGluYXRlIHNwYWNlIHdpbGwgYmUgdW5ib3VuZGVkIChpbmZpbml0ZSBpbiBib3RoIGF4ZXMpXHJcbiAgXHRpbmZpbml0ZTogZmFsc2UsXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nKGxhdGxuZzogTGF0TG5nKTogTGF0TG5nXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ2Agd2hlcmUgbGF0IGFuZCBsbmcgaGFzIGJlZW4gd3JhcHBlZCBhY2NvcmRpbmcgdG8gdGhlXHJcbiAgXHQvLyBDUlMncyBgd3JhcExhdGAgYW5kIGB3cmFwTG5nYCBwcm9wZXJ0aWVzLCBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHR3cmFwTGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBsbmcgPSB0aGlzLndyYXBMbmcgPyB3cmFwTnVtKGxhdGxuZy5sbmcsIHRoaXMud3JhcExuZywgdHJ1ZSkgOiBsYXRsbmcubG5nLFxyXG4gIFx0XHQgICAgbGF0ID0gdGhpcy53cmFwTGF0ID8gd3JhcE51bShsYXRsbmcubGF0LCB0aGlzLndyYXBMYXQsIHRydWUpIDogbGF0bG5nLmxhdCxcclxuICBcdFx0ICAgIGFsdCA9IGxhdGxuZy5hbHQ7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhsYXQsIGxuZywgYWx0KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ0JvdW5kc2Agd2l0aCB0aGUgc2FtZSBzaXplIGFzIHRoZSBnaXZlbiBvbmUsIGVuc3VyaW5nXHJcbiAgXHQvLyB0aGF0IGl0cyBjZW50ZXIgaXMgd2l0aGluIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHQvLyBPbmx5IGFjY2VwdHMgYWN0dWFsIGBMLkxhdExuZ0JvdW5kc2AgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxyXG4gIFx0d3JhcExhdExuZ0JvdW5kczogZnVuY3Rpb24gKGJvdW5kcykge1xyXG4gIFx0XHR2YXIgY2VudGVyID0gYm91bmRzLmdldENlbnRlcigpLFxyXG4gIFx0XHQgICAgbmV3Q2VudGVyID0gdGhpcy53cmFwTGF0TG5nKGNlbnRlciksXHJcbiAgXHRcdCAgICBsYXRTaGlmdCA9IGNlbnRlci5sYXQgLSBuZXdDZW50ZXIubGF0LFxyXG4gIFx0XHQgICAgbG5nU2hpZnQgPSBjZW50ZXIubG5nIC0gbmV3Q2VudGVyLmxuZztcclxuXHJcbiAgXHRcdGlmIChsYXRTaGlmdCA9PT0gMCAmJiBsbmdTaGlmdCA9PT0gMCkge1xyXG4gIFx0XHRcdHJldHVybiBib3VuZHM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBzdyA9IGJvdW5kcy5nZXRTb3V0aFdlc3QoKSxcclxuICBcdFx0ICAgIG5lID0gYm91bmRzLmdldE5vcnRoRWFzdCgpLFxyXG4gIFx0XHQgICAgbmV3U3cgPSBuZXcgTGF0TG5nKHN3LmxhdCAtIGxhdFNoaWZ0LCBzdy5sbmcgLSBsbmdTaGlmdCksXHJcbiAgXHRcdCAgICBuZXdOZSA9IG5ldyBMYXRMbmcobmUubGF0IC0gbGF0U2hpZnQsIG5lLmxuZyAtIGxuZ1NoaWZ0KTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nQm91bmRzKG5ld1N3LCBuZXdOZSk7XHJcbiAgXHR9XHJcbiAgfTtcblxuICAvKlxuICAgKiBAbmFtZXNwYWNlIENSU1xuICAgKiBAY3JzIEwuQ1JTLkVhcnRoXG4gICAqXG4gICAqIFNlcnZlcyBhcyB0aGUgYmFzZSBmb3IgQ1JTIHRoYXQgYXJlIGdsb2JhbCBzdWNoIHRoYXQgdGhleSBjb3ZlciB0aGUgZWFydGguXG4gICAqIENhbiBvbmx5IGJlIHVzZWQgYXMgdGhlIGJhc2UgZm9yIG90aGVyIENSUyBhbmQgY2Fubm90IGJlIHVzZWQgZGlyZWN0bHksXG4gICAqIHNpbmNlIGl0IGRvZXMgbm90IGhhdmUgYSBgY29kZWAsIGBwcm9qZWN0aW9uYCBvciBgdHJhbnNmb3JtYXRpb25gLiBgZGlzdGFuY2UoKWAgcmV0dXJuc1xuICAgKiBtZXRlcnMuXG4gICAqL1xuXG4gIHZhciBFYXJ0aCA9IGV4dGVuZCh7fSwgQ1JTLCB7XG4gIFx0d3JhcExuZzogWy0xODAsIDE4MF0sXG5cbiAgXHQvLyBNZWFuIEVhcnRoIFJhZGl1cywgYXMgcmVjb21tZW5kZWQgZm9yIHVzZSBieVxuICBcdC8vIHRoZSBJbnRlcm5hdGlvbmFsIFVuaW9uIG9mIEdlb2Rlc3kgYW5kIEdlb3BoeXNpY3MsXG4gIFx0Ly8gc2VlIGh0dHA6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9IYXZlcnNpbmVfZm9ybXVsYVxuICBcdFI6IDYzNzEwMDAsXG5cbiAgXHQvLyBkaXN0YW5jZSBiZXR3ZWVuIHR3byBnZW9ncmFwaGljYWwgcG9pbnRzIHVzaW5nIHNwaGVyaWNhbCBsYXcgb2YgY29zaW5lcyBhcHByb3hpbWF0aW9uXG4gIFx0ZGlzdGFuY2U6IGZ1bmN0aW9uIChsYXRsbmcxLCBsYXRsbmcyKSB7XG4gIFx0XHR2YXIgcmFkID0gTWF0aC5QSSAvIDE4MCxcbiAgXHRcdCAgICBsYXQxID0gbGF0bG5nMS5sYXQgKiByYWQsXG4gIFx0XHQgICAgbGF0MiA9IGxhdGxuZzIubGF0ICogcmFkLFxuICBcdFx0ICAgIHNpbkRMYXQgPSBNYXRoLnNpbigobGF0bG5nMi5sYXQgLSBsYXRsbmcxLmxhdCkgKiByYWQgLyAyKSxcbiAgXHRcdCAgICBzaW5ETG9uID0gTWF0aC5zaW4oKGxhdGxuZzIubG5nIC0gbGF0bG5nMS5sbmcpICogcmFkIC8gMiksXG4gIFx0XHQgICAgYSA9IHNpbkRMYXQgKiBzaW5ETGF0ICsgTWF0aC5jb3MobGF0MSkgKiBNYXRoLmNvcyhsYXQyKSAqIHNpbkRMb24gKiBzaW5ETG9uLFxuICBcdFx0ICAgIGMgPSAyICogTWF0aC5hdGFuMihNYXRoLnNxcnQoYSksIE1hdGguc3FydCgxIC0gYSkpO1xuICBcdFx0cmV0dXJuIHRoaXMuUiAqIGM7XG4gIFx0fVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUHJvamVjdGlvblxyXG4gICAqIEBwcm9qZWN0aW9uIEwuUHJvamVjdGlvbi5TcGhlcmljYWxNZXJjYXRvclxyXG4gICAqXHJcbiAgICogU3BoZXJpY2FsIE1lcmNhdG9yIHByb2plY3Rpb24g4oCUIHRoZSBtb3N0IGNvbW1vbiBwcm9qZWN0aW9uIGZvciBvbmxpbmUgbWFwcyxcclxuICAgKiB1c2VkIGJ5IGFsbW9zdCBhbGwgZnJlZSBhbmQgY29tbWVyY2lhbCB0aWxlIHByb3ZpZGVycy4gQXNzdW1lcyB0aGF0IEVhcnRoIGlzXHJcbiAgICogYSBzcGhlcmUuIFVzZWQgYnkgdGhlIGBFUFNHOjM4NTdgIENSUy5cclxuICAgKi9cclxuXHJcbiAgdmFyIGVhcnRoUmFkaXVzID0gNjM3ODEzNztcclxuXHJcbiAgdmFyIFNwaGVyaWNhbE1lcmNhdG9yID0ge1xyXG5cclxuICBcdFI6IGVhcnRoUmFkaXVzLFxyXG4gIFx0TUFYX0xBVElUVURFOiA4NS4wNTExMjg3Nzk4LFxyXG5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5NQVhfTEFUSVRVREUsXHJcbiAgXHRcdCAgICBsYXQgPSBNYXRoLm1heChNYXRoLm1pbihtYXgsIGxhdGxuZy5sYXQpLCAtbWF4KSxcclxuICBcdFx0ICAgIHNpbiA9IE1hdGguc2luKGxhdCAqIGQpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChcclxuICBcdFx0XHR0aGlzLlIgKiBsYXRsbmcubG5nICogZCxcclxuICBcdFx0XHR0aGlzLlIgKiBNYXRoLmxvZygoMSArIHNpbikgLyAoMSAtIHNpbikpIC8gMik7XHJcbiAgXHR9LFxyXG5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBkID0gMTgwIC8gTWF0aC5QSTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgTGF0TG5nKFxyXG4gIFx0XHRcdCgyICogTWF0aC5hdGFuKE1hdGguZXhwKHBvaW50LnkgLyB0aGlzLlIpKSAtIChNYXRoLlBJIC8gMikpICogZCxcclxuICBcdFx0XHRwb2ludC54ICogZCAvIHRoaXMuUik7XHJcbiAgXHR9LFxyXG5cclxuICBcdGJvdW5kczogKGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGQgPSBlYXJ0aFJhZGl1cyAqIE1hdGguUEk7XHJcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKFstZCwgLWRdLCBbZCwgZF0pO1xyXG4gIFx0fSkoKVxyXG4gIH07XG5cbiAgLypcclxuICAgKiBAY2xhc3MgVHJhbnNmb3JtYXRpb25cclxuICAgKiBAYWthIEwuVHJhbnNmb3JtYXRpb25cclxuICAgKlxyXG4gICAqIFJlcHJlc2VudHMgYW4gYWZmaW5lIHRyYW5zZm9ybWF0aW9uOiBhIHNldCBvZiBjb2VmZmljaWVudHMgYGFgLCBgYmAsIGBjYCwgYGRgXHJcbiAgICogZm9yIHRyYW5zZm9ybWluZyBhIHBvaW50IG9mIGEgZm9ybSBgKHgsIHkpYCBpbnRvIGAoYSp4ICsgYiwgYyp5ICsgZClgIGFuZCBkb2luZ1xyXG4gICAqIHRoZSByZXZlcnNlLiBVc2VkIGJ5IExlYWZsZXQgaW4gaXRzIHByb2plY3Rpb25zIGNvZGUuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgdHJhbnNmb3JtYXRpb24gPSBMLnRyYW5zZm9ybWF0aW9uKDIsIDUsIC0xLCAxMCksXHJcbiAgICogXHRwID0gTC5wb2ludCgxLCAyKSxcclxuICAgKiBcdHAyID0gdHJhbnNmb3JtYXRpb24udHJhbnNmb3JtKHApLCAvLyAgTC5wb2ludCg3LCA4KVxyXG4gICAqIFx0cDMgPSB0cmFuc2Zvcm1hdGlvbi51bnRyYW5zZm9ybShwMik7IC8vICBMLnBvaW50KDEsIDIpXHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG5cclxuICAvLyBmYWN0b3J5IG5ldyBMLlRyYW5zZm9ybWF0aW9uKGE6IE51bWJlciwgYjogTnVtYmVyLCBjOiBOdW1iZXIsIGQ6IE51bWJlcilcclxuICAvLyBDcmVhdGVzIGEgYFRyYW5zZm9ybWF0aW9uYCBvYmplY3Qgd2l0aCB0aGUgZ2l2ZW4gY29lZmZpY2llbnRzLlxyXG4gIGZ1bmN0aW9uIFRyYW5zZm9ybWF0aW9uKGEsIGIsIGMsIGQpIHtcclxuICBcdGlmIChpc0FycmF5KGEpKSB7XHJcbiAgXHRcdC8vIHVzZSBhcnJheSBwcm9wZXJ0aWVzXHJcbiAgXHRcdHRoaXMuX2EgPSBhWzBdO1xyXG4gIFx0XHR0aGlzLl9iID0gYVsxXTtcclxuICBcdFx0dGhpcy5fYyA9IGFbMl07XHJcbiAgXHRcdHRoaXMuX2QgPSBhWzNdO1xyXG4gIFx0XHRyZXR1cm47XHJcbiAgXHR9XHJcbiAgXHR0aGlzLl9hID0gYTtcclxuICBcdHRoaXMuX2IgPSBiO1xyXG4gIFx0dGhpcy5fYyA9IGM7XHJcbiAgXHR0aGlzLl9kID0gZDtcclxuICB9XHJcblxyXG4gIFRyYW5zZm9ybWF0aW9uLnByb3RvdHlwZSA9IHtcclxuICBcdC8vIEBtZXRob2QgdHJhbnNmb3JtKHBvaW50OiBQb2ludCwgc2NhbGU/OiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyBhIHRyYW5zZm9ybWVkIHBvaW50LCBvcHRpb25hbGx5IG11bHRpcGxpZWQgYnkgdGhlIGdpdmVuIHNjYWxlLlxyXG4gIFx0Ly8gT25seSBhY2NlcHRzIGFjdHVhbCBgTC5Qb2ludGAgaW5zdGFuY2VzLCBub3QgYXJyYXlzLlxyXG4gIFx0dHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7IC8vIChQb2ludCwgTnVtYmVyKSAtPiBQb2ludFxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fdHJhbnNmb3JtKHBvaW50LmNsb25lKCksIHNjYWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gZGVzdHJ1Y3RpdmUgdHJhbnNmb3JtIChmYXN0ZXIpXHJcbiAgXHRfdHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7XHJcbiAgXHRcdHNjYWxlID0gc2NhbGUgfHwgMTtcclxuICBcdFx0cG9pbnQueCA9IHNjYWxlICogKHRoaXMuX2EgKiBwb2ludC54ICsgdGhpcy5fYik7XHJcbiAgXHRcdHBvaW50LnkgPSBzY2FsZSAqICh0aGlzLl9jICogcG9pbnQueSArIHRoaXMuX2QpO1xyXG4gIFx0XHRyZXR1cm4gcG9pbnQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdW50cmFuc2Zvcm0ocG9pbnQ6IFBvaW50LCBzY2FsZT86IE51bWJlcik6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSByZXZlcnNlIHRyYW5zZm9ybWF0aW9uIG9mIHRoZSBnaXZlbiBwb2ludCwgb3B0aW9uYWxseSBkaXZpZGVkXHJcbiAgXHQvLyBieSB0aGUgZ2l2ZW4gc2NhbGUuIE9ubHkgYWNjZXB0cyBhY3R1YWwgYEwuUG9pbnRgIGluc3RhbmNlcywgbm90IGFycmF5cy5cclxuICBcdHVudHJhbnNmb3JtOiBmdW5jdGlvbiAocG9pbnQsIHNjYWxlKSB7XHJcbiAgXHRcdHNjYWxlID0gc2NhbGUgfHwgMTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2ludChcclxuICBcdFx0ICAgICAgICAocG9pbnQueCAvIHNjYWxlIC0gdGhpcy5fYikgLyB0aGlzLl9hLFxyXG4gIFx0XHQgICAgICAgIChwb2ludC55IC8gc2NhbGUgLSB0aGlzLl9kKSAvIHRoaXMuX2MpO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG4gIC8vIGZhY3RvcnkgTC50cmFuc2Zvcm1hdGlvbihhOiBOdW1iZXIsIGI6IE51bWJlciwgYzogTnVtYmVyLCBkOiBOdW1iZXIpXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwudHJhbnNmb3JtYXRpb24oYTogTnVtYmVyLCBiOiBOdW1iZXIsIGM6IE51bWJlciwgZDogTnVtYmVyKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIFRyYW5zZm9ybWF0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiBjb2VmZmljaWVudHMuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmYWN0b3J5IEwudHJhbnNmb3JtYXRpb24oY29lZmZpY2llbnRzOiBBcnJheSk6IFRyYW5zZm9ybWF0aW9uXHJcbiAgLy8gRXhwZWN0cyBhbiBjb2VmZmljaWVudHMgYXJyYXkgb2YgdGhlIGZvcm1cclxuICAvLyBgW2E6IE51bWJlciwgYjogTnVtYmVyLCBjOiBOdW1iZXIsIGQ6IE51bWJlcl1gLlxyXG5cclxuICBmdW5jdGlvbiB0b1RyYW5zZm9ybWF0aW9uKGEsIGIsIGMsIGQpIHtcclxuICBcdHJldHVybiBuZXcgVHJhbnNmb3JtYXRpb24oYSwgYiwgYywgZCk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBDUlNcclxuICAgKiBAY3JzIEwuQ1JTLkVQU0czODU3XHJcbiAgICpcclxuICAgKiBUaGUgbW9zdCBjb21tb24gQ1JTIGZvciBvbmxpbmUgbWFwcywgdXNlZCBieSBhbG1vc3QgYWxsIGZyZWUgYW5kIGNvbW1lcmNpYWxcclxuICAgKiB0aWxlIHByb3ZpZGVycy4gVXNlcyBTcGhlcmljYWwgTWVyY2F0b3IgcHJvamVjdGlvbi4gU2V0IGluIGJ5IGRlZmF1bHQgaW5cclxuICAgKiBNYXAncyBgY3JzYCBvcHRpb24uXHJcbiAgICovXHJcblxyXG4gIHZhciBFUFNHMzg1NyA9IGV4dGVuZCh7fSwgRWFydGgsIHtcclxuICBcdGNvZGU6ICdFUFNHOjM4NTcnLFxyXG4gIFx0cHJvamVjdGlvbjogU3BoZXJpY2FsTWVyY2F0b3IsXHJcblxyXG4gIFx0dHJhbnNmb3JtYXRpb246IChmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IDAuNSAvIChNYXRoLlBJICogU3BoZXJpY2FsTWVyY2F0b3IuUik7XHJcbiAgXHRcdHJldHVybiB0b1RyYW5zZm9ybWF0aW9uKHNjYWxlLCAwLjUsIC1zY2FsZSwgMC41KTtcclxuICBcdH0oKSlcclxuICB9KTtcclxuXHJcbiAgdmFyIEVQU0c5MDA5MTMgPSBleHRlbmQoe30sIEVQU0czODU3LCB7XHJcbiAgXHRjb2RlOiAnRVBTRzo5MDA5MTMnXHJcbiAgfSk7XG5cbiAgLy8gQG5hbWVzcGFjZSBTVkc7IEBzZWN0aW9uXG4gIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRob3V0IGluc3RhbnRpYXRpbmcgTC5TVkc6XG5cbiAgLy8gQGZ1bmN0aW9uIGNyZWF0ZShuYW1lOiBTdHJpbmcpOiBTVkdFbGVtZW50XG4gIC8vIFJldHVybnMgYSBpbnN0YW5jZSBvZiBbU1ZHRWxlbWVudF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL1NWR0VsZW1lbnQpLFxuICAvLyBjb3JyZXNwb25kaW5nIHRvIHRoZSBjbGFzcyBuYW1lIHBhc3NlZC4gRm9yIGV4YW1wbGUsIHVzaW5nICdsaW5lJyB3aWxsIHJldHVyblxuICAvLyBhbiBpbnN0YW5jZSBvZiBbU1ZHTGluZUVsZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9TVkdMaW5lRWxlbWVudCkuXG4gIGZ1bmN0aW9uIHN2Z0NyZWF0ZShuYW1lKSB7XG4gIFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCBuYW1lKTtcbiAgfVxuXG4gIC8vIEBmdW5jdGlvbiBwb2ludHNUb1BhdGgocmluZ3M6IFBvaW50W10sIGNsb3NlZDogQm9vbGVhbik6IFN0cmluZ1xuICAvLyBHZW5lcmF0ZXMgYSBTVkcgcGF0aCBzdHJpbmcgZm9yIG11bHRpcGxlIHJpbmdzLCB3aXRoIGVhY2ggcmluZyB0dXJuaW5nXG4gIC8vIGludG8gXCJNLi5MLi5MLi5cIiBpbnN0cnVjdGlvbnNcbiAgZnVuY3Rpb24gcG9pbnRzVG9QYXRoKHJpbmdzLCBjbG9zZWQpIHtcbiAgXHR2YXIgc3RyID0gJycsXG4gIFx0aSwgaiwgbGVuLCBsZW4yLCBwb2ludHMsIHA7XG5cbiAgXHRmb3IgKGkgPSAwLCBsZW4gPSByaW5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0cG9pbnRzID0gcmluZ3NbaV07XG5cbiAgXHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwb2ludHMubGVuZ3RoOyBqIDwgbGVuMjsgaisrKSB7XG4gIFx0XHRcdHAgPSBwb2ludHNbal07XG4gIFx0XHRcdHN0ciArPSAoaiA/ICdMJyA6ICdNJykgKyBwLnggKyAnICcgKyBwLnk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIGNsb3NlcyB0aGUgcmluZyBmb3IgcG9seWdvbnM7IFwieFwiIGlzIFZNTCBzeW50YXhcbiAgXHRcdHN0ciArPSBjbG9zZWQgPyAoc3ZnID8gJ3onIDogJ3gnKSA6ICcnO1xuICBcdH1cblxuICBcdC8vIFNWRyBjb21wbGFpbnMgYWJvdXQgZW1wdHkgcGF0aCBzdHJpbmdzXG4gIFx0cmV0dXJuIHN0ciB8fCAnTTAgMCc7XG4gIH1cblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgQnJvd3NlclxyXG4gICAqIEBha2EgTC5Ccm93c2VyXHJcbiAgICpcclxuICAgKiBBIG5hbWVzcGFjZSB3aXRoIHN0YXRpYyBwcm9wZXJ0aWVzIGZvciBicm93c2VyL2ZlYXR1cmUgZGV0ZWN0aW9uIHVzZWQgYnkgTGVhZmxldCBpbnRlcm5hbGx5LlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogaWYgKEwuQnJvd3Nlci5pZWx0OSkge1xyXG4gICAqICAgYWxlcnQoJ1VwZ3JhZGUgeW91ciBicm93c2VyLCBkdWRlIScpO1xyXG4gICAqIH1cclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIHN0eWxlJDEgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBpZTogQm9vbGVhbjsgYHRydWVgIGZvciBhbGwgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbnMgKG5vdCBFZGdlKS5cclxuICB2YXIgaWUgPSAnQWN0aXZlWE9iamVjdCcgaW4gd2luZG93O1xyXG5cclxuICAvLyBAcHJvcGVydHkgaWVsdDk6IEJvb2xlYW47IGB0cnVlYCBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgdmVyc2lvbnMgbGVzcyB0aGFuIDkuXHJcbiAgdmFyIGllbHQ5ID0gaWUgJiYgIWRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXI7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBlZGdlOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIHRoZSBFZGdlIHdlYiBicm93c2VyLlxyXG4gIHZhciBlZGdlID0gJ21zTGF1bmNoVXJpJyBpbiBuYXZpZ2F0b3IgJiYgISgnZG9jdW1lbnRNb2RlJyBpbiBkb2N1bWVudCk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB3ZWJraXQ6IEJvb2xlYW47XHJcbiAgLy8gYHRydWVgIGZvciB3ZWJraXQtYmFzZWQgYnJvd3NlcnMgbGlrZSBDaHJvbWUgYW5kIFNhZmFyaSAoaW5jbHVkaW5nIG1vYmlsZSB2ZXJzaW9ucykuXHJcbiAgdmFyIHdlYmtpdCA9IHVzZXJBZ2VudENvbnRhaW5zKCd3ZWJraXQnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGFuZHJvaWQ6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGFueSBicm93c2VyIHJ1bm5pbmcgb24gYW4gQW5kcm9pZCBwbGF0Zm9ybS5cclxuICB2YXIgYW5kcm9pZCA9IHVzZXJBZ2VudENvbnRhaW5zKCdhbmRyb2lkJyk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBhbmRyb2lkMjM6IEJvb2xlYW47IGB0cnVlYCBmb3IgYnJvd3NlcnMgcnVubmluZyBvbiBBbmRyb2lkIDIgb3IgQW5kcm9pZCAzLlxyXG4gIHZhciBhbmRyb2lkMjMgPSB1c2VyQWdlbnRDb250YWlucygnYW5kcm9pZCAyJykgfHwgdXNlckFnZW50Q29udGFpbnMoJ2FuZHJvaWQgMycpO1xyXG5cclxuICAvKiBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE3OTYxMjY2IGZvciBkZXRhaWxzIG9uIGRldGVjdGluZyBzdG9jayBBbmRyb2lkICovXHJcbiAgdmFyIHdlYmtpdFZlciA9IHBhcnNlSW50KC9XZWJLaXRcXC8oWzAtOV0rKXwkLy5leGVjKG5hdmlnYXRvci51c2VyQWdlbnQpWzFdLCAxMCk7IC8vIGFsc28gbWF0Y2hlcyBBcHBsZVdlYktpdFxyXG4gIC8vIEBwcm9wZXJ0eSBhbmRyb2lkU3RvY2s6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIEFuZHJvaWQgc3RvY2sgYnJvd3NlciAoaS5lLiBub3QgQ2hyb21lKVxyXG4gIHZhciBhbmRyb2lkU3RvY2sgPSBhbmRyb2lkICYmIHVzZXJBZ2VudENvbnRhaW5zKCdHb29nbGUnKSAmJiB3ZWJraXRWZXIgPCA1MzcgJiYgISgnQXVkaW9Ob2RlJyBpbiB3aW5kb3cpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgb3BlcmE6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIE9wZXJhIGJyb3dzZXJcclxuICB2YXIgb3BlcmEgPSAhIXdpbmRvdy5vcGVyYTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGNocm9tZTogQm9vbGVhbjsgYHRydWVgIGZvciB0aGUgQ2hyb21lIGJyb3dzZXIuXHJcbiAgdmFyIGNocm9tZSA9ICFlZGdlICYmIHVzZXJBZ2VudENvbnRhaW5zKCdjaHJvbWUnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGdlY2tvOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGdlY2tvLWJhc2VkIGJyb3dzZXJzIGxpa2UgRmlyZWZveC5cclxuICB2YXIgZ2Vja28gPSB1c2VyQWdlbnRDb250YWlucygnZ2Vja28nKSAmJiAhd2Via2l0ICYmICFvcGVyYSAmJiAhaWU7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBzYWZhcmk6IEJvb2xlYW47IGB0cnVlYCBmb3IgdGhlIFNhZmFyaSBicm93c2VyLlxyXG4gIHZhciBzYWZhcmkgPSAhY2hyb21lICYmIHVzZXJBZ2VudENvbnRhaW5zKCdzYWZhcmknKTtcclxuXHJcbiAgdmFyIHBoYW50b20gPSB1c2VyQWdlbnRDb250YWlucygncGhhbnRvbScpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgb3BlcmExMjogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgdGhlIE9wZXJhIGJyb3dzZXIgc3VwcG9ydGluZyBDU1MgdHJhbnNmb3JtcyAodmVyc2lvbiAxMiBvciBsYXRlcikuXHJcbiAgdmFyIG9wZXJhMTIgPSAnT1RyYW5zaXRpb24nIGluIHN0eWxlJDE7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB3aW46IEJvb2xlYW47IGB0cnVlYCB3aGVuIHRoZSBicm93c2VyIGlzIHJ1bm5pbmcgaW4gYSBXaW5kb3dzIHBsYXRmb3JtXHJcbiAgdmFyIHdpbiA9IG5hdmlnYXRvci5wbGF0Zm9ybS5pbmRleE9mKCdXaW4nKSA9PT0gMDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IGllM2Q6IEJvb2xlYW47IGB0cnVlYCBmb3IgYWxsIEludGVybmV0IEV4cGxvcmVyIHZlcnNpb25zIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGllM2QgPSBpZSAmJiAoJ3RyYW5zaXRpb24nIGluIHN0eWxlJDEpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgd2Via2l0M2Q6IEJvb2xlYW47IGB0cnVlYCBmb3Igd2Via2l0LWJhc2VkIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIHdlYmtpdDNkID0gKCdXZWJLaXRDU1NNYXRyaXgnIGluIHdpbmRvdykgJiYgKCdtMTEnIGluIG5ldyB3aW5kb3cuV2ViS2l0Q1NTTWF0cml4KCkpICYmICFhbmRyb2lkMjM7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBnZWNrbzNkOiBCb29sZWFuOyBgdHJ1ZWAgZm9yIGdlY2tvLWJhc2VkIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGdlY2tvM2QgPSAnTW96UGVyc3BlY3RpdmUnIGluIHN0eWxlJDE7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBhbnkzZDogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHN1cHBvcnRpbmcgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgdmFyIGFueTNkID0gIXdpbmRvdy5MX0RJU0FCTEVfM0QgJiYgKGllM2QgfHwgd2Via2l0M2QgfHwgZ2Vja28zZCkgJiYgIW9wZXJhMTIgJiYgIXBoYW50b207XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBtb2JpbGU6IEJvb2xlYW47IGB0cnVlYCBmb3IgYWxsIGJyb3dzZXJzIHJ1bm5pbmcgaW4gYSBtb2JpbGUgZGV2aWNlLlxyXG4gIHZhciBtb2JpbGUgPSB0eXBlb2Ygb3JpZW50YXRpb24gIT09ICd1bmRlZmluZWQnIHx8IHVzZXJBZ2VudENvbnRhaW5zKCdtb2JpbGUnKTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZVdlYmtpdDogQm9vbGVhbjsgYHRydWVgIGZvciBhbGwgd2Via2l0LWJhc2VkIGJyb3dzZXJzIGluIGEgbW9iaWxlIGRldmljZS5cclxuICB2YXIgbW9iaWxlV2Via2l0ID0gbW9iaWxlICYmIHdlYmtpdDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1vYmlsZVdlYmtpdDNkOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgd2Via2l0LWJhc2VkIGJyb3dzZXJzIGluIGEgbW9iaWxlIGRldmljZSBzdXBwb3J0aW5nIENTUyB0cmFuc2Zvcm1zLlxyXG4gIHZhciBtb2JpbGVXZWJraXQzZCA9IG1vYmlsZSAmJiB3ZWJraXQzZDtcclxuXHJcbiAgLy8gQHByb3BlcnR5IG1zUG9pbnRlcjogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYnJvd3NlcnMgaW1wbGVtZW50aW5nIHRoZSBNaWNyb3NvZnQgdG91Y2ggZXZlbnRzIG1vZGVsIChub3RhYmx5IElFMTApLlxyXG4gIHZhciBtc1BvaW50ZXIgPSAhd2luZG93LlBvaW50ZXJFdmVudCAmJiB3aW5kb3cuTVNQb2ludGVyRXZlbnQ7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBwb2ludGVyOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIGZvciBhbGwgYnJvd3NlcnMgc3VwcG9ydGluZyBbcG9pbnRlciBldmVudHNdKGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvZG40MzMyNDQlMjh2PXZzLjg1JTI5LmFzcHgpLlxyXG4gIHZhciBwb2ludGVyID0gISEod2luZG93LlBvaW50ZXJFdmVudCB8fCBtc1BvaW50ZXIpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgdG91Y2g6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGFsbCBicm93c2VycyBzdXBwb3J0aW5nIFt0b3VjaCBldmVudHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9Ub3VjaF9ldmVudHMpLlxyXG4gIC8vIFRoaXMgZG9lcyBub3QgbmVjZXNzYXJpbHkgbWVhbiB0aGF0IHRoZSBicm93c2VyIGlzIHJ1bm5pbmcgaW4gYSBjb21wdXRlciB3aXRoXHJcbiAgLy8gYSB0b3VjaHNjcmVlbiwgaXQgb25seSBtZWFucyB0aGF0IHRoZSBicm93c2VyIGlzIGNhcGFibGUgb2YgdW5kZXJzdGFuZGluZ1xyXG4gIC8vIHRvdWNoIGV2ZW50cy5cclxuICB2YXIgdG91Y2ggPSAhd2luZG93LkxfTk9fVE9VQ0ggJiYgKHBvaW50ZXIgfHwgJ29udG91Y2hzdGFydCcgaW4gd2luZG93IHx8XHJcbiAgXHRcdCh3aW5kb3cuRG9jdW1lbnRUb3VjaCAmJiBkb2N1bWVudCBpbnN0YW5jZW9mIHdpbmRvdy5Eb2N1bWVudFRvdWNoKSk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBtb2JpbGVPcGVyYTogQm9vbGVhbjsgYHRydWVgIGZvciB0aGUgT3BlcmEgYnJvd3NlciBpbiBhIG1vYmlsZSBkZXZpY2UuXHJcbiAgdmFyIG1vYmlsZU9wZXJhID0gbW9iaWxlICYmIG9wZXJhO1xyXG5cclxuICAvLyBAcHJvcGVydHkgbW9iaWxlR2Vja286IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGdlY2tvLWJhc2VkIGJyb3dzZXJzIHJ1bm5pbmcgaW4gYSBtb2JpbGUgZGV2aWNlLlxyXG4gIHZhciBtb2JpbGVHZWNrbyA9IG1vYmlsZSAmJiBnZWNrbztcclxuXHJcbiAgLy8gQHByb3BlcnR5IHJldGluYTogQm9vbGVhblxyXG4gIC8vIGB0cnVlYCBmb3IgYnJvd3NlcnMgb24gYSBoaWdoLXJlc29sdXRpb24gXCJyZXRpbmFcIiBzY3JlZW4gb3Igb24gYW55IHNjcmVlbiB3aGVuIGJyb3dzZXIncyBkaXNwbGF5IHpvb20gaXMgbW9yZSB0aGFuIDEwMCUuXHJcbiAgdmFyIHJldGluYSA9ICh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAod2luZG93LnNjcmVlbi5kZXZpY2VYRFBJIC8gd2luZG93LnNjcmVlbi5sb2dpY2FsWERQSSkpID4gMTtcclxuXHJcbiAgLy8gQHByb3BlcnR5IHBhc3NpdmVFdmVudHM6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgZm9yIGJyb3dzZXJzIHRoYXQgc3VwcG9ydCBwYXNzaXZlIGV2ZW50cy5cclxuICB2YXIgcGFzc2l2ZUV2ZW50cyA9IChmdW5jdGlvbiAoKSB7XHJcbiAgXHR2YXIgc3VwcG9ydHNQYXNzaXZlT3B0aW9uID0gZmFsc2U7XHJcbiAgXHR0cnkge1xyXG4gIFx0XHR2YXIgb3B0cyA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3Bhc3NpdmUnLCB7XHJcbiAgXHRcdFx0Z2V0OiBmdW5jdGlvbiAoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZ2V0dGVyLXJldHVyblxyXG4gIFx0XHRcdFx0c3VwcG9ydHNQYXNzaXZlT3B0aW9uID0gdHJ1ZTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH0pO1xyXG4gIFx0XHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdFBhc3NpdmVFdmVudFN1cHBvcnQnLCBmYWxzZUZuLCBvcHRzKTtcclxuICBcdFx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Rlc3RQYXNzaXZlRXZlbnRTdXBwb3J0JywgZmFsc2VGbiwgb3B0cyk7XHJcbiAgXHR9IGNhdGNoIChlKSB7XHJcbiAgXHRcdC8vIEVycm9ycyBjYW4gc2FmZWx5IGJlIGlnbm9yZWQgc2luY2UgdGhpcyBpcyBvbmx5IGEgYnJvd3NlciBzdXBwb3J0IHRlc3QuXHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gc3VwcG9ydHNQYXNzaXZlT3B0aW9uO1xyXG4gIH0oKSk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSBjYW52YXM6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgd2hlbiB0aGUgYnJvd3NlciBzdXBwb3J0cyBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0NhbnZhc19BUEkpLlxyXG4gIHZhciBjYW52YXMgPSAoZnVuY3Rpb24gKCkge1xyXG4gIFx0cmV0dXJuICEhZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykuZ2V0Q29udGV4dDtcclxuICB9KCkpO1xyXG5cclxuICAvLyBAcHJvcGVydHkgc3ZnOiBCb29sZWFuXHJcbiAgLy8gYHRydWVgIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgW1NWR10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHKS5cclxuICB2YXIgc3ZnID0gISEoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TICYmIHN2Z0NyZWF0ZSgnc3ZnJykuY3JlYXRlU1ZHUmVjdCk7XHJcblxyXG4gIC8vIEBwcm9wZXJ0eSB2bWw6IEJvb2xlYW5cclxuICAvLyBgdHJ1ZWAgaWYgdGhlIGJyb3dzZXIgc3VwcG9ydHMgW1ZNTF0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVmVjdG9yX01hcmt1cF9MYW5ndWFnZSkuXHJcbiAgdmFyIHZtbCA9ICFzdmcgJiYgKGZ1bmN0aW9uICgpIHtcclxuICBcdHRyeSB7XHJcbiAgXHRcdHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICBcdFx0ZGl2LmlubmVySFRNTCA9ICc8djpzaGFwZSBhZGo9XCIxXCIvPic7XHJcblxyXG4gIFx0XHR2YXIgc2hhcGUgPSBkaXYuZmlyc3RDaGlsZDtcclxuICBcdFx0c2hhcGUuc3R5bGUuYmVoYXZpb3IgPSAndXJsKCNkZWZhdWx0I1ZNTCknO1xyXG5cclxuICBcdFx0cmV0dXJuIHNoYXBlICYmICh0eXBlb2Ygc2hhcGUuYWRqID09PSAnb2JqZWN0Jyk7XHJcblxyXG4gIFx0fSBjYXRjaCAoZSkge1xyXG4gIFx0XHRyZXR1cm4gZmFsc2U7XHJcbiAgXHR9XHJcbiAgfSgpKTtcclxuXHJcblxyXG4gIGZ1bmN0aW9uIHVzZXJBZ2VudENvbnRhaW5zKHN0cikge1xyXG4gIFx0cmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKHN0cikgPj0gMDtcclxuICB9XG5cbiAgdmFyIEJyb3dzZXIgPSAoe1xuICAgIGllOiBpZSxcbiAgICBpZWx0OTogaWVsdDksXG4gICAgZWRnZTogZWRnZSxcbiAgICB3ZWJraXQ6IHdlYmtpdCxcbiAgICBhbmRyb2lkOiBhbmRyb2lkLFxuICAgIGFuZHJvaWQyMzogYW5kcm9pZDIzLFxuICAgIGFuZHJvaWRTdG9jazogYW5kcm9pZFN0b2NrLFxuICAgIG9wZXJhOiBvcGVyYSxcbiAgICBjaHJvbWU6IGNocm9tZSxcbiAgICBnZWNrbzogZ2Vja28sXG4gICAgc2FmYXJpOiBzYWZhcmksXG4gICAgcGhhbnRvbTogcGhhbnRvbSxcbiAgICBvcGVyYTEyOiBvcGVyYTEyLFxuICAgIHdpbjogd2luLFxuICAgIGllM2Q6IGllM2QsXG4gICAgd2Via2l0M2Q6IHdlYmtpdDNkLFxuICAgIGdlY2tvM2Q6IGdlY2tvM2QsXG4gICAgYW55M2Q6IGFueTNkLFxuICAgIG1vYmlsZTogbW9iaWxlLFxuICAgIG1vYmlsZVdlYmtpdDogbW9iaWxlV2Via2l0LFxuICAgIG1vYmlsZVdlYmtpdDNkOiBtb2JpbGVXZWJraXQzZCxcbiAgICBtc1BvaW50ZXI6IG1zUG9pbnRlcixcbiAgICBwb2ludGVyOiBwb2ludGVyLFxuICAgIHRvdWNoOiB0b3VjaCxcbiAgICBtb2JpbGVPcGVyYTogbW9iaWxlT3BlcmEsXG4gICAgbW9iaWxlR2Vja286IG1vYmlsZUdlY2tvLFxuICAgIHJldGluYTogcmV0aW5hLFxuICAgIHBhc3NpdmVFdmVudHM6IHBhc3NpdmVFdmVudHMsXG4gICAgY2FudmFzOiBjYW52YXMsXG4gICAgc3ZnOiBzdmcsXG4gICAgdm1sOiB2bWxcbiAgfSk7XG5cbiAgLypcbiAgICogRXh0ZW5kcyBMLkRvbUV2ZW50IHRvIHByb3ZpZGUgdG91Y2ggc3VwcG9ydCBmb3IgSW50ZXJuZXQgRXhwbG9yZXIgYW5kIFdpbmRvd3MtYmFzZWQgZGV2aWNlcy5cbiAgICovXG5cblxuICB2YXIgUE9JTlRFUl9ET1dOID0gICBtc1BvaW50ZXIgPyAnTVNQb2ludGVyRG93bicgICA6ICdwb2ludGVyZG93bic7XG4gIHZhciBQT0lOVEVSX01PVkUgPSAgIG1zUG9pbnRlciA/ICdNU1BvaW50ZXJNb3ZlJyAgIDogJ3BvaW50ZXJtb3ZlJztcbiAgdmFyIFBPSU5URVJfVVAgPSAgICAgbXNQb2ludGVyID8gJ01TUG9pbnRlclVwJyAgICAgOiAncG9pbnRlcnVwJztcbiAgdmFyIFBPSU5URVJfQ0FOQ0VMID0gbXNQb2ludGVyID8gJ01TUG9pbnRlckNhbmNlbCcgOiAncG9pbnRlcmNhbmNlbCc7XG5cbiAgdmFyIF9wb2ludGVycyA9IHt9O1xuICB2YXIgX3BvaW50ZXJEb2NMaXN0ZW5lciA9IGZhbHNlO1xuXG4gIC8vIFByb3ZpZGVzIGEgdG91Y2ggZXZlbnRzIHdyYXBwZXIgZm9yIChtcylwb2ludGVyIGV2ZW50cy5cbiAgLy8gcmVmIGh0dHA6Ly93d3cudzMub3JnL1RSL3BvaW50ZXJldmVudHMvIGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MjI4OTBcblxuICBmdW5jdGlvbiBhZGRQb2ludGVyTGlzdGVuZXIob2JqLCB0eXBlLCBoYW5kbGVyLCBpZCkge1xuICBcdGlmICh0eXBlID09PSAndG91Y2hzdGFydCcpIHtcbiAgXHRcdF9hZGRQb2ludGVyU3RhcnQob2JqLCBoYW5kbGVyLCBpZCk7XG5cbiAgXHR9IGVsc2UgaWYgKHR5cGUgPT09ICd0b3VjaG1vdmUnKSB7XG4gIFx0XHRfYWRkUG9pbnRlck1vdmUob2JqLCBoYW5kbGVyLCBpZCk7XG5cbiAgXHR9IGVsc2UgaWYgKHR5cGUgPT09ICd0b3VjaGVuZCcpIHtcbiAgXHRcdF9hZGRQb2ludGVyRW5kKG9iaiwgaGFuZGxlciwgaWQpO1xuICBcdH1cblxuICBcdHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlUG9pbnRlckxpc3RlbmVyKG9iaiwgdHlwZSwgaWQpIHtcbiAgXHR2YXIgaGFuZGxlciA9IG9ialsnX2xlYWZsZXRfJyArIHR5cGUgKyBpZF07XG5cbiAgXHRpZiAodHlwZSA9PT0gJ3RvdWNoc3RhcnQnKSB7XG4gIFx0XHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0RPV04sIGhhbmRsZXIsIGZhbHNlKTtcblxuICBcdH0gZWxzZSBpZiAodHlwZSA9PT0gJ3RvdWNobW92ZScpIHtcbiAgXHRcdG9iai5yZW1vdmVFdmVudExpc3RlbmVyKFBPSU5URVJfTU9WRSwgaGFuZGxlciwgZmFsc2UpO1xuXG4gIFx0fSBlbHNlIGlmICh0eXBlID09PSAndG91Y2hlbmQnKSB7XG4gIFx0XHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihQT0lOVEVSX1VQLCBoYW5kbGVyLCBmYWxzZSk7XG4gIFx0XHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0NBTkNFTCwgaGFuZGxlciwgZmFsc2UpO1xuICBcdH1cblxuICBcdHJldHVybiB0aGlzO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FkZFBvaW50ZXJTdGFydChvYmosIGhhbmRsZXIsIGlkKSB7XG4gIFx0dmFyIG9uRG93biA9IGJpbmQoZnVuY3Rpb24gKGUpIHtcbiAgXHRcdC8vIElFMTAgc3BlY2lmaWM6IE1zVG91Y2ggbmVlZHMgcHJldmVudERlZmF1bHQuIFNlZSAjMjAwMFxuICBcdFx0aWYgKGUuTVNQT0lOVEVSX1RZUEVfVE9VQ0ggJiYgZS5wb2ludGVyVHlwZSA9PT0gZS5NU1BPSU5URVJfVFlQRV9UT1VDSCkge1xuICBcdFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcbiAgXHRcdH1cblxuICBcdFx0X2hhbmRsZVBvaW50ZXIoZSwgaGFuZGxlcik7XG4gIFx0fSk7XG5cbiAgXHRvYmpbJ19sZWFmbGV0X3RvdWNoc3RhcnQnICsgaWRdID0gb25Eb3duO1xuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfRE9XTiwgb25Eb3duLCBmYWxzZSk7XG5cbiAgXHQvLyBuZWVkIHRvIGtlZXAgdHJhY2sgb2Ygd2hhdCBwb2ludGVycyBhbmQgaG93IG1hbnkgYXJlIGFjdGl2ZSB0byBwcm92aWRlIGUudG91Y2hlcyBlbXVsYXRpb25cbiAgXHRpZiAoIV9wb2ludGVyRG9jTGlzdGVuZXIpIHtcbiAgXHRcdC8vIHdlIGxpc3RlbiBkb2N1bWVudCBhcyBhbnkgZHJhZ3MgdGhhdCBlbmQgYnkgbW92aW5nIHRoZSB0b3VjaCBvZmYgdGhlIHNjcmVlbiBnZXQgZmlyZWQgdGhlcmVcbiAgXHRcdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoUE9JTlRFUl9ET1dOLCBfZ2xvYmFsUG9pbnRlckRvd24sIHRydWUpO1xuICBcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX01PVkUsIF9nbG9iYWxQb2ludGVyTW92ZSwgdHJ1ZSk7XG4gIFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfVVAsIF9nbG9iYWxQb2ludGVyVXAsIHRydWUpO1xuICBcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0NBTkNFTCwgX2dsb2JhbFBvaW50ZXJVcCwgdHJ1ZSk7XG5cbiAgXHRcdF9wb2ludGVyRG9jTGlzdGVuZXIgPSB0cnVlO1xuICBcdH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9nbG9iYWxQb2ludGVyRG93bihlKSB7XG4gIFx0X3BvaW50ZXJzW2UucG9pbnRlcklkXSA9IGU7XG4gIH1cblxuICBmdW5jdGlvbiBfZ2xvYmFsUG9pbnRlck1vdmUoZSkge1xuICBcdGlmIChfcG9pbnRlcnNbZS5wb2ludGVySWRdKSB7XG4gIFx0XHRfcG9pbnRlcnNbZS5wb2ludGVySWRdID0gZTtcbiAgXHR9XG4gIH1cblxuICBmdW5jdGlvbiBfZ2xvYmFsUG9pbnRlclVwKGUpIHtcbiAgXHRkZWxldGUgX3BvaW50ZXJzW2UucG9pbnRlcklkXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9oYW5kbGVQb2ludGVyKGUsIGhhbmRsZXIpIHtcbiAgXHRlLnRvdWNoZXMgPSBbXTtcbiAgXHRmb3IgKHZhciBpIGluIF9wb2ludGVycykge1xuICBcdFx0ZS50b3VjaGVzLnB1c2goX3BvaW50ZXJzW2ldKTtcbiAgXHR9XG4gIFx0ZS5jaGFuZ2VkVG91Y2hlcyA9IFtlXTtcblxuICBcdGhhbmRsZXIoZSk7XG4gIH1cblxuICBmdW5jdGlvbiBfYWRkUG9pbnRlck1vdmUob2JqLCBoYW5kbGVyLCBpZCkge1xuICBcdHZhciBvbk1vdmUgPSBmdW5jdGlvbiAoZSkge1xuICBcdFx0Ly8gZG9uJ3QgZmlyZSB0b3VjaCBtb3ZlcyB3aGVuIG1vdXNlIGlzbid0IGRvd25cbiAgXHRcdGlmICgoZS5wb2ludGVyVHlwZSA9PT0gKGUuTVNQT0lOVEVSX1RZUEVfTU9VU0UgfHwgJ21vdXNlJykpICYmIGUuYnV0dG9ucyA9PT0gMCkge1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdF9oYW5kbGVQb2ludGVyKGUsIGhhbmRsZXIpO1xuICBcdH07XG5cbiAgXHRvYmpbJ19sZWFmbGV0X3RvdWNobW92ZScgKyBpZF0gPSBvbk1vdmU7XG4gIFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIoUE9JTlRFUl9NT1ZFLCBvbk1vdmUsIGZhbHNlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9hZGRQb2ludGVyRW5kKG9iaiwgaGFuZGxlciwgaWQpIHtcbiAgXHR2YXIgb25VcCA9IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRfaGFuZGxlUG9pbnRlcihlLCBoYW5kbGVyKTtcbiAgXHR9O1xuXG4gIFx0b2JqWydfbGVhZmxldF90b3VjaGVuZCcgKyBpZF0gPSBvblVwO1xuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKFBPSU5URVJfVVAsIG9uVXAsIGZhbHNlKTtcbiAgXHRvYmouYWRkRXZlbnRMaXN0ZW5lcihQT0lOVEVSX0NBTkNFTCwgb25VcCwgZmFsc2UpO1xuICB9XG5cbiAgLypcclxuICAgKiBFeHRlbmRzIHRoZSBldmVudCBoYW5kbGluZyBjb2RlIHdpdGggZG91YmxlIHRhcCBzdXBwb3J0IGZvciBtb2JpbGUgYnJvd3NlcnMuXHJcbiAgICovXHJcblxyXG4gIHZhciBfdG91Y2hzdGFydCA9IG1zUG9pbnRlciA/ICdNU1BvaW50ZXJEb3duJyA6IHBvaW50ZXIgPyAncG9pbnRlcmRvd24nIDogJ3RvdWNoc3RhcnQnO1xyXG4gIHZhciBfdG91Y2hlbmQgPSBtc1BvaW50ZXIgPyAnTVNQb2ludGVyVXAnIDogcG9pbnRlciA/ICdwb2ludGVydXAnIDogJ3RvdWNoZW5kJztcclxuICB2YXIgX3ByZSA9ICdfbGVhZmxldF8nO1xyXG5cclxuICAvLyBpbnNwaXJlZCBieSBaZXB0byB0b3VjaCBjb2RlIGJ5IFRob21hcyBGdWNoc1xyXG4gIGZ1bmN0aW9uIGFkZERvdWJsZVRhcExpc3RlbmVyKG9iaiwgaGFuZGxlciwgaWQpIHtcclxuICBcdHZhciBsYXN0LCB0b3VjaCQkMSxcclxuICBcdCAgICBkb3VibGVUYXAgPSBmYWxzZSxcclxuICBcdCAgICBkZWxheSA9IDI1MDtcclxuXHJcbiAgXHRmdW5jdGlvbiBvblRvdWNoU3RhcnQoZSkge1xyXG5cclxuICBcdFx0aWYgKHBvaW50ZXIpIHtcclxuICBcdFx0XHRpZiAoIWUuaXNQcmltYXJ5KSB7IHJldHVybjsgfVxyXG4gIFx0XHRcdGlmIChlLnBvaW50ZXJUeXBlID09PSAnbW91c2UnKSB7IHJldHVybjsgfSAvLyBtb3VzZSBmaXJlcyBuYXRpdmUgZGJsY2xpY2tcclxuICBcdFx0fSBlbHNlIGlmIChlLnRvdWNoZXMubGVuZ3RoID4gMSkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG5vdyA9IERhdGUubm93KCksXHJcbiAgXHRcdCAgICBkZWx0YSA9IG5vdyAtIChsYXN0IHx8IG5vdyk7XHJcblxyXG4gIFx0XHR0b3VjaCQkMSA9IGUudG91Y2hlcyA/IGUudG91Y2hlc1swXSA6IGU7XHJcbiAgXHRcdGRvdWJsZVRhcCA9IChkZWx0YSA+IDAgJiYgZGVsdGEgPD0gZGVsYXkpO1xyXG4gIFx0XHRsYXN0ID0gbm93O1xyXG4gIFx0fVxyXG5cclxuICBcdGZ1bmN0aW9uIG9uVG91Y2hFbmQoZSkge1xyXG4gIFx0XHRpZiAoZG91YmxlVGFwICYmICF0b3VjaCQkMS5jYW5jZWxCdWJibGUpIHtcclxuICBcdFx0XHRpZiAocG9pbnRlcikge1xyXG4gIFx0XHRcdFx0aWYgKGUucG9pbnRlclR5cGUgPT09ICdtb3VzZScpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdFx0XHQvLyB3b3JrIGFyb3VuZCAudHlwZSBiZWluZyByZWFkb25seSB3aXRoIE1TUG9pbnRlciogZXZlbnRzXHJcbiAgXHRcdFx0XHR2YXIgbmV3VG91Y2ggPSB7fSxcclxuICBcdFx0XHRcdCAgICBwcm9wLCBpO1xyXG5cclxuICBcdFx0XHRcdGZvciAoaSBpbiB0b3VjaCQkMSkge1xyXG4gIFx0XHRcdFx0XHRwcm9wID0gdG91Y2gkJDFbaV07XHJcbiAgXHRcdFx0XHRcdG5ld1RvdWNoW2ldID0gcHJvcCAmJiBwcm9wLmJpbmQgPyBwcm9wLmJpbmQodG91Y2gkJDEpIDogcHJvcDtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHRcdHRvdWNoJCQxID0gbmV3VG91Y2g7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHRvdWNoJCQxLnR5cGUgPSAnZGJsY2xpY2snO1xyXG4gIFx0XHRcdHRvdWNoJCQxLmJ1dHRvbiA9IDA7XHJcbiAgXHRcdFx0aGFuZGxlcih0b3VjaCQkMSk7XHJcbiAgXHRcdFx0bGFzdCA9IG51bGw7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuXHJcbiAgXHRvYmpbX3ByZSArIF90b3VjaHN0YXJ0ICsgaWRdID0gb25Ub3VjaFN0YXJ0O1xyXG4gIFx0b2JqW19wcmUgKyBfdG91Y2hlbmQgKyBpZF0gPSBvblRvdWNoRW5kO1xyXG4gIFx0b2JqW19wcmUgKyAnZGJsY2xpY2snICsgaWRdID0gaGFuZGxlcjtcclxuXHJcbiAgXHRvYmouYWRkRXZlbnRMaXN0ZW5lcihfdG91Y2hzdGFydCwgb25Ub3VjaFN0YXJ0LCBwYXNzaXZlRXZlbnRzID8ge3Bhc3NpdmU6IGZhbHNlfSA6IGZhbHNlKTtcclxuICBcdG9iai5hZGRFdmVudExpc3RlbmVyKF90b3VjaGVuZCwgb25Ub3VjaEVuZCwgcGFzc2l2ZUV2ZW50cyA/IHtwYXNzaXZlOiBmYWxzZX0gOiBmYWxzZSk7XHJcblxyXG4gIFx0Ly8gT24gc29tZSBwbGF0Zm9ybXMgKG5vdGFibHksIGNocm9tZTw1NSBvbiB3aW4xMCArIHRvdWNoc2NyZWVuICsgbW91c2UpLFxyXG4gIFx0Ly8gdGhlIGJyb3dzZXIgZG9lc24ndCBmaXJlIHRvdWNoZW5kL3BvaW50ZXJ1cCBldmVudHMgYnV0IGRvZXMgZmlyZVxyXG4gIFx0Ly8gbmF0aXZlIGRibGNsaWNrcy4gU2VlICM0MTI3LlxyXG4gIFx0Ly8gRWRnZSAxNCBhbHNvIGZpcmVzIG5hdGl2ZSBkYmxjbGlja3MsIGJ1dCBvbmx5IGZvciBwb2ludGVyVHlwZSBtb3VzZSwgc2VlICM1MTgwLlxyXG4gIFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgaGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gcmVtb3ZlRG91YmxlVGFwTGlzdGVuZXIob2JqLCBpZCkge1xyXG4gIFx0dmFyIHRvdWNoc3RhcnQgPSBvYmpbX3ByZSArIF90b3VjaHN0YXJ0ICsgaWRdLFxyXG4gIFx0ICAgIHRvdWNoZW5kID0gb2JqW19wcmUgKyBfdG91Y2hlbmQgKyBpZF0sXHJcbiAgXHQgICAgZGJsY2xpY2sgPSBvYmpbX3ByZSArICdkYmxjbGljaycgKyBpZF07XHJcblxyXG4gIFx0b2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoX3RvdWNoc3RhcnQsIHRvdWNoc3RhcnQsIHBhc3NpdmVFdmVudHMgPyB7cGFzc2l2ZTogZmFsc2V9IDogZmFsc2UpO1xyXG4gIFx0b2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoX3RvdWNoZW5kLCB0b3VjaGVuZCwgcGFzc2l2ZUV2ZW50cyA/IHtwYXNzaXZlOiBmYWxzZX0gOiBmYWxzZSk7XHJcbiAgXHRvYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCBkYmxjbGljaywgZmFsc2UpO1xyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgRG9tVXRpbFxyXG4gICAqXHJcbiAgICogVXRpbGl0eSBmdW5jdGlvbnMgdG8gd29yayB3aXRoIHRoZSBbRE9NXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRfT2JqZWN0X01vZGVsKVxyXG4gICAqIHRyZWUsIHVzZWQgYnkgTGVhZmxldCBpbnRlcm5hbGx5LlxyXG4gICAqXHJcbiAgICogTW9zdCBmdW5jdGlvbnMgZXhwZWN0aW5nIG9yIHJldHVybmluZyBhIGBIVE1MRWxlbWVudGAgYWxzbyB3b3JrIGZvclxyXG4gICAqIFNWRyBlbGVtZW50cy4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IGNsYXNzZXMgcmVmZXIgdG8gQ1NTIGNsYXNzZXNcclxuICAgKiBpbiBIVE1MIGFuZCBTVkcgY2xhc3NlcyBpbiBTVkcuXHJcbiAgICovXHJcblxyXG5cclxuICAvLyBAcHJvcGVydHkgVFJBTlNGT1JNOiBTdHJpbmdcclxuICAvLyBWZW5kb3ItcHJlZml4ZWQgdHJhbnNmb3JtIHN0eWxlIG5hbWUgKGUuZy4gYCd3ZWJraXRUcmFuc2Zvcm0nYCBmb3IgV2ViS2l0KS5cclxuICB2YXIgVFJBTlNGT1JNID0gdGVzdFByb3AoXHJcbiAgXHRbJ3RyYW5zZm9ybScsICd3ZWJraXRUcmFuc2Zvcm0nLCAnT1RyYW5zZm9ybScsICdNb3pUcmFuc2Zvcm0nLCAnbXNUcmFuc2Zvcm0nXSk7XHJcblxyXG4gIC8vIHdlYmtpdFRyYW5zaXRpb24gY29tZXMgZmlyc3QgYmVjYXVzZSBzb21lIGJyb3dzZXIgdmVyc2lvbnMgdGhhdCBkcm9wIHZlbmRvciBwcmVmaXggZG9uJ3QgZG9cclxuICAvLyB0aGUgc2FtZSBmb3IgdGhlIHRyYW5zaXRpb25lbmQgZXZlbnQsIGluIHBhcnRpY3VsYXIgdGhlIEFuZHJvaWQgNC4xIHN0b2NrIGJyb3dzZXJcclxuXHJcbiAgLy8gQHByb3BlcnR5IFRSQU5TSVRJT046IFN0cmluZ1xyXG4gIC8vIFZlbmRvci1wcmVmaXhlZCB0cmFuc2l0aW9uIHN0eWxlIG5hbWUuXHJcbiAgdmFyIFRSQU5TSVRJT04gPSB0ZXN0UHJvcChcclxuICBcdFsnd2Via2l0VHJhbnNpdGlvbicsICd0cmFuc2l0aW9uJywgJ09UcmFuc2l0aW9uJywgJ01velRyYW5zaXRpb24nLCAnbXNUcmFuc2l0aW9uJ10pO1xyXG5cclxuICAvLyBAcHJvcGVydHkgVFJBTlNJVElPTl9FTkQ6IFN0cmluZ1xyXG4gIC8vIFZlbmRvci1wcmVmaXhlZCB0cmFuc2l0aW9uZW5kIGV2ZW50IG5hbWUuXHJcbiAgdmFyIFRSQU5TSVRJT05fRU5EID1cclxuICBcdFRSQU5TSVRJT04gPT09ICd3ZWJraXRUcmFuc2l0aW9uJyB8fCBUUkFOU0lUSU9OID09PSAnT1RyYW5zaXRpb24nID8gVFJBTlNJVElPTiArICdFbmQnIDogJ3RyYW5zaXRpb25lbmQnO1xyXG5cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldChpZDogU3RyaW5nfEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICAvLyBSZXR1cm5zIGFuIGVsZW1lbnQgZ2l2ZW4gaXRzIERPTSBpZCwgb3IgcmV0dXJucyB0aGUgZWxlbWVudCBpdHNlbGZcclxuICAvLyBpZiBpdCB3YXMgcGFzc2VkIGRpcmVjdGx5LlxyXG4gIGZ1bmN0aW9uIGdldChpZCkge1xyXG4gIFx0cmV0dXJuIHR5cGVvZiBpZCA9PT0gJ3N0cmluZycgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgOiBpZDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRTdHlsZShlbDogSFRNTEVsZW1lbnQsIHN0eWxlQXR0cmliOiBTdHJpbmcpOiBTdHJpbmdcclxuICAvLyBSZXR1cm5zIHRoZSB2YWx1ZSBmb3IgYSBjZXJ0YWluIHN0eWxlIGF0dHJpYnV0ZSBvbiBhbiBlbGVtZW50LFxyXG4gIC8vIGluY2x1ZGluZyBjb21wdXRlZCB2YWx1ZXMgb3IgdmFsdWVzIHNldCB0aHJvdWdoIENTUy5cclxuICBmdW5jdGlvbiBnZXRTdHlsZShlbCwgc3R5bGUpIHtcclxuICBcdHZhciB2YWx1ZSA9IGVsLnN0eWxlW3N0eWxlXSB8fCAoZWwuY3VycmVudFN0eWxlICYmIGVsLmN1cnJlbnRTdHlsZVtzdHlsZV0pO1xyXG5cclxuICBcdGlmICgoIXZhbHVlIHx8IHZhbHVlID09PSAnYXV0bycpICYmIGRvY3VtZW50LmRlZmF1bHRWaWV3KSB7XHJcbiAgXHRcdHZhciBjc3MgPSBkb2N1bWVudC5kZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlKGVsLCBudWxsKTtcclxuICBcdFx0dmFsdWUgPSBjc3MgPyBjc3Nbc3R5bGVdIDogbnVsbDtcclxuICBcdH1cclxuICBcdHJldHVybiB2YWx1ZSA9PT0gJ2F1dG8nID8gbnVsbCA6IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGNyZWF0ZSh0YWdOYW1lOiBTdHJpbmcsIGNsYXNzTmFtZT86IFN0cmluZywgY29udGFpbmVyPzogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxyXG4gIC8vIENyZWF0ZXMgYW4gSFRNTCBlbGVtZW50IHdpdGggYHRhZ05hbWVgLCBzZXRzIGl0cyBjbGFzcyB0byBgY2xhc3NOYW1lYCwgYW5kIG9wdGlvbmFsbHkgYXBwZW5kcyBpdCB0byBgY29udGFpbmVyYCBlbGVtZW50LlxyXG4gIGZ1bmN0aW9uIGNyZWF0ZSQxKHRhZ05hbWUsIGNsYXNzTmFtZSwgY29udGFpbmVyKSB7XHJcbiAgXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xyXG4gIFx0ZWwuY2xhc3NOYW1lID0gY2xhc3NOYW1lIHx8ICcnO1xyXG5cclxuICBcdGlmIChjb250YWluZXIpIHtcclxuICBcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKGVsKTtcclxuICBcdH1cclxuICBcdHJldHVybiBlbDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiByZW1vdmUoZWw6IEhUTUxFbGVtZW50KVxyXG4gIC8vIFJlbW92ZXMgYGVsYCBmcm9tIGl0cyBwYXJlbnQgZWxlbWVudFxyXG4gIGZ1bmN0aW9uIHJlbW92ZShlbCkge1xyXG4gIFx0dmFyIHBhcmVudCA9IGVsLnBhcmVudE5vZGU7XHJcbiAgXHRpZiAocGFyZW50KSB7XHJcbiAgXHRcdHBhcmVudC5yZW1vdmVDaGlsZChlbCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZW1wdHkoZWw6IEhUTUxFbGVtZW50KVxyXG4gIC8vIFJlbW92ZXMgYWxsIG9mIGBlbGAncyBjaGlsZHJlbiBlbGVtZW50cyBmcm9tIGBlbGBcclxuICBmdW5jdGlvbiBlbXB0eShlbCkge1xyXG4gIFx0d2hpbGUgKGVsLmZpcnN0Q2hpbGQpIHtcclxuICBcdFx0ZWwucmVtb3ZlQ2hpbGQoZWwuZmlyc3RDaGlsZCk7XHJcbiAgXHR9XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gdG9Gcm9udChlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gTWFrZXMgYGVsYCB0aGUgbGFzdCBjaGlsZCBvZiBpdHMgcGFyZW50LCBzbyBpdCByZW5kZXJzIGluIGZyb250IG9mIHRoZSBvdGhlciBjaGlsZHJlbi5cclxuICBmdW5jdGlvbiB0b0Zyb250KGVsKSB7XHJcbiAgXHR2YXIgcGFyZW50ID0gZWwucGFyZW50Tm9kZTtcclxuICBcdGlmIChwYXJlbnQgJiYgcGFyZW50Lmxhc3RDaGlsZCAhPT0gZWwpIHtcclxuICBcdFx0cGFyZW50LmFwcGVuZENoaWxkKGVsKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0b0JhY2soZWw6IEhUTUxFbGVtZW50KVxyXG4gIC8vIE1ha2VzIGBlbGAgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQsIHNvIGl0IHJlbmRlcnMgYmVoaW5kIHRoZSBvdGhlciBjaGlsZHJlbi5cclxuICBmdW5jdGlvbiB0b0JhY2soZWwpIHtcclxuICBcdHZhciBwYXJlbnQgPSBlbC5wYXJlbnROb2RlO1xyXG4gIFx0aWYgKHBhcmVudCAmJiBwYXJlbnQuZmlyc3RDaGlsZCAhPT0gZWwpIHtcclxuICBcdFx0cGFyZW50Lmluc2VydEJlZm9yZShlbCwgcGFyZW50LmZpcnN0Q2hpbGQpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGhhc0NsYXNzKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogU3RyaW5nKTogQm9vbGVhblxyXG4gIC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBlbGVtZW50J3MgY2xhc3MgYXR0cmlidXRlIGNvbnRhaW5zIGBuYW1lYC5cclxuICBmdW5jdGlvbiBoYXNDbGFzcyhlbCwgbmFtZSkge1xyXG4gIFx0aWYgKGVsLmNsYXNzTGlzdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdHJldHVybiBlbC5jbGFzc0xpc3QuY29udGFpbnMobmFtZSk7XHJcbiAgXHR9XHJcbiAgXHR2YXIgY2xhc3NOYW1lID0gZ2V0Q2xhc3MoZWwpO1xyXG4gIFx0cmV0dXJuIGNsYXNzTmFtZS5sZW5ndGggPiAwICYmIG5ldyBSZWdFeHAoJyhefFxcXFxzKScgKyBuYW1lICsgJyhcXFxcc3wkKScpLnRlc3QoY2xhc3NOYW1lKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBhZGRDbGFzcyhlbDogSFRNTEVsZW1lbnQsIG5hbWU6IFN0cmluZylcclxuICAvLyBBZGRzIGBuYW1lYCB0byB0aGUgZWxlbWVudCdzIGNsYXNzIGF0dHJpYnV0ZS5cclxuICBmdW5jdGlvbiBhZGRDbGFzcyhlbCwgbmFtZSkge1xyXG4gIFx0aWYgKGVsLmNsYXNzTGlzdCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdHZhciBjbGFzc2VzID0gc3BsaXRXb3JkcyhuYW1lKTtcclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGNsYXNzZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRlbC5jbGFzc0xpc3QuYWRkKGNsYXNzZXNbaV0pO1xyXG4gIFx0XHR9XHJcbiAgXHR9IGVsc2UgaWYgKCFoYXNDbGFzcyhlbCwgbmFtZSkpIHtcclxuICBcdFx0dmFyIGNsYXNzTmFtZSA9IGdldENsYXNzKGVsKTtcclxuICBcdFx0c2V0Q2xhc3MoZWwsIChjbGFzc05hbWUgPyBjbGFzc05hbWUgKyAnICcgOiAnJykgKyBuYW1lKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbDogSFRNTEVsZW1lbnQsIG5hbWU6IFN0cmluZylcclxuICAvLyBSZW1vdmVzIGBuYW1lYCBmcm9tIHRoZSBlbGVtZW50J3MgY2xhc3MgYXR0cmlidXRlLlxyXG4gIGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsLCBuYW1lKSB7XHJcbiAgXHRpZiAoZWwuY2xhc3NMaXN0ICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0ZWwuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdHNldENsYXNzKGVsLCB0cmltKCgnICcgKyBnZXRDbGFzcyhlbCkgKyAnICcpLnJlcGxhY2UoJyAnICsgbmFtZSArICcgJywgJyAnKSkpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNldENsYXNzKGVsOiBIVE1MRWxlbWVudCwgbmFtZTogU3RyaW5nKVxyXG4gIC8vIFNldHMgdGhlIGVsZW1lbnQncyBjbGFzcy5cclxuICBmdW5jdGlvbiBzZXRDbGFzcyhlbCwgbmFtZSkge1xyXG4gIFx0aWYgKGVsLmNsYXNzTmFtZS5iYXNlVmFsID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0ZWwuY2xhc3NOYW1lID0gbmFtZTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdC8vIGluIGNhc2Ugb2YgU1ZHIGVsZW1lbnRcclxuICBcdFx0ZWwuY2xhc3NOYW1lLmJhc2VWYWwgPSBuYW1lO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldENsYXNzKGVsOiBIVE1MRWxlbWVudCk6IFN0cmluZ1xyXG4gIC8vIFJldHVybnMgdGhlIGVsZW1lbnQncyBjbGFzcy5cclxuICBmdW5jdGlvbiBnZXRDbGFzcyhlbCkge1xyXG4gIFx0Ly8gQ2hlY2sgaWYgdGhlIGVsZW1lbnQgaXMgYW4gU1ZHRWxlbWVudEluc3RhbmNlIGFuZCB1c2UgdGhlIGNvcnJlc3BvbmRpbmdFbGVtZW50IGluc3RlYWRcclxuICBcdC8vIChSZXF1aXJlZCBmb3IgbGlua2VkIFNWRyBlbGVtZW50cyBpbiBJRTExLilcclxuICBcdGlmIChlbC5jb3JyZXNwb25kaW5nRWxlbWVudCkge1xyXG4gIFx0XHRlbCA9IGVsLmNvcnJlc3BvbmRpbmdFbGVtZW50O1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIGVsLmNsYXNzTmFtZS5iYXNlVmFsID09PSB1bmRlZmluZWQgPyBlbC5jbGFzc05hbWUgOiBlbC5jbGFzc05hbWUuYmFzZVZhbDtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBzZXRPcGFjaXR5KGVsOiBIVE1MRWxlbWVudCwgb3BhY2l0eTogTnVtYmVyKVxyXG4gIC8vIFNldCB0aGUgb3BhY2l0eSBvZiBhbiBlbGVtZW50IChpbmNsdWRpbmcgb2xkIElFIHN1cHBvcnQpLlxyXG4gIC8vIGBvcGFjaXR5YCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gYDBgIHRvIGAxYC5cclxuICBmdW5jdGlvbiBzZXRPcGFjaXR5KGVsLCB2YWx1ZSkge1xyXG4gIFx0aWYgKCdvcGFjaXR5JyBpbiBlbC5zdHlsZSkge1xyXG4gIFx0XHRlbC5zdHlsZS5vcGFjaXR5ID0gdmFsdWU7XHJcbiAgXHR9IGVsc2UgaWYgKCdmaWx0ZXInIGluIGVsLnN0eWxlKSB7XHJcbiAgXHRcdF9zZXRPcGFjaXR5SUUoZWwsIHZhbHVlKTtcclxuICBcdH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9zZXRPcGFjaXR5SUUoZWwsIHZhbHVlKSB7XHJcbiAgXHR2YXIgZmlsdGVyID0gZmFsc2UsXHJcbiAgXHQgICAgZmlsdGVyTmFtZSA9ICdEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5BbHBoYSc7XHJcblxyXG4gIFx0Ly8gZmlsdGVycyBjb2xsZWN0aW9uIHRocm93cyBhbiBlcnJvciBpZiB3ZSB0cnkgdG8gcmV0cmlldmUgYSBmaWx0ZXIgdGhhdCBkb2Vzbid0IGV4aXN0XHJcbiAgXHR0cnkge1xyXG4gIFx0XHRmaWx0ZXIgPSBlbC5maWx0ZXJzLml0ZW0oZmlsdGVyTmFtZSk7XHJcbiAgXHR9IGNhdGNoIChlKSB7XHJcbiAgXHRcdC8vIGRvbid0IHNldCBvcGFjaXR5IHRvIDEgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHNldCBhbiBvcGFjaXR5LFxyXG4gIFx0XHQvLyBpdCBpc24ndCBuZWVkZWQgYW5kIGJyZWFrcyB0cmFuc3BhcmVudCBwbmdzLlxyXG4gIFx0XHRpZiAodmFsdWUgPT09IDEpIHsgcmV0dXJuOyB9XHJcbiAgXHR9XHJcblxyXG4gIFx0dmFsdWUgPSBNYXRoLnJvdW5kKHZhbHVlICogMTAwKTtcclxuXHJcbiAgXHRpZiAoZmlsdGVyKSB7XHJcbiAgXHRcdGZpbHRlci5FbmFibGVkID0gKHZhbHVlICE9PSAxMDApO1xyXG4gIFx0XHRmaWx0ZXIuT3BhY2l0eSA9IHZhbHVlO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0ZWwuc3R5bGUuZmlsdGVyICs9ICcgcHJvZ2lkOicgKyBmaWx0ZXJOYW1lICsgJyhvcGFjaXR5PScgKyB2YWx1ZSArICcpJztcclxuICBcdH1cclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiB0ZXN0UHJvcChwcm9wczogU3RyaW5nW10pOiBTdHJpbmd8ZmFsc2VcclxuICAvLyBHb2VzIHRocm91Z2ggdGhlIGFycmF5IG9mIHN0eWxlIG5hbWVzIGFuZCByZXR1cm5zIHRoZSBmaXJzdCBuYW1lXHJcbiAgLy8gdGhhdCBpcyBhIHZhbGlkIHN0eWxlIG5hbWUgZm9yIGFuIGVsZW1lbnQuIElmIG5vIHN1Y2ggbmFtZSBpcyBmb3VuZCxcclxuICAvLyBpdCByZXR1cm5zIGZhbHNlLiBVc2VmdWwgZm9yIHZlbmRvci1wcmVmaXhlZCBzdHlsZXMgbGlrZSBgdHJhbnNmb3JtYC5cclxuICBmdW5jdGlvbiB0ZXN0UHJvcChwcm9wcykge1xyXG4gIFx0dmFyIHN0eWxlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0aWYgKHByb3BzW2ldIGluIHN0eWxlKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHByb3BzW2ldO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsOiBIVE1MRWxlbWVudCwgb2Zmc2V0OiBQb2ludCwgc2NhbGU/OiBOdW1iZXIpXHJcbiAgLy8gUmVzZXRzIHRoZSAzRCBDU1MgdHJhbnNmb3JtIG9mIGBlbGAgc28gaXQgaXMgdHJhbnNsYXRlZCBieSBgb2Zmc2V0YCBwaXhlbHNcclxuICAvLyBhbmQgb3B0aW9uYWxseSBzY2FsZWQgYnkgYHNjYWxlYC4gRG9lcyBub3QgaGF2ZSBhbiBlZmZlY3QgaWYgdGhlXHJcbiAgLy8gYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgM0QgQ1NTIHRyYW5zZm9ybXMuXHJcbiAgZnVuY3Rpb24gc2V0VHJhbnNmb3JtKGVsLCBvZmZzZXQsIHNjYWxlKSB7XHJcbiAgXHR2YXIgcG9zID0gb2Zmc2V0IHx8IG5ldyBQb2ludCgwLCAwKTtcclxuXHJcbiAgXHRlbC5zdHlsZVtUUkFOU0ZPUk1dID1cclxuICBcdFx0KGllM2QgP1xyXG4gIFx0XHRcdCd0cmFuc2xhdGUoJyArIHBvcy54ICsgJ3B4LCcgKyBwb3MueSArICdweCknIDpcclxuICBcdFx0XHQndHJhbnNsYXRlM2QoJyArIHBvcy54ICsgJ3B4LCcgKyBwb3MueSArICdweCwwKScpICtcclxuICBcdFx0KHNjYWxlID8gJyBzY2FsZSgnICsgc2NhbGUgKyAnKScgOiAnJyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc2V0UG9zaXRpb24oZWw6IEhUTUxFbGVtZW50LCBwb3NpdGlvbjogUG9pbnQpXHJcbiAgLy8gU2V0cyB0aGUgcG9zaXRpb24gb2YgYGVsYCB0byBjb29yZGluYXRlcyBzcGVjaWZpZWQgYnkgYHBvc2l0aW9uYCxcclxuICAvLyB1c2luZyBDU1MgdHJhbnNsYXRlIG9yIHRvcC9sZWZ0IHBvc2l0aW9uaW5nIGRlcGVuZGluZyBvbiB0aGUgYnJvd3NlclxyXG4gIC8vICh1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseSB0byBwb3NpdGlvbiBpdHMgbGF5ZXJzKS5cclxuICBmdW5jdGlvbiBzZXRQb3NpdGlvbihlbCwgcG9pbnQpIHtcclxuXHJcbiAgXHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRlbC5fbGVhZmxldF9wb3MgPSBwb2ludDtcclxuICBcdC8qIGVzbGludC1lbmFibGUgKi9cclxuXHJcbiAgXHRpZiAoYW55M2QpIHtcclxuICBcdFx0c2V0VHJhbnNmb3JtKGVsLCBwb2ludCk7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRlbC5zdHlsZS5sZWZ0ID0gcG9pbnQueCArICdweCc7XHJcbiAgXHRcdGVsLnN0eWxlLnRvcCA9IHBvaW50LnkgKyAncHgnO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGdldFBvc2l0aW9uKGVsOiBIVE1MRWxlbWVudCk6IFBvaW50XHJcbiAgLy8gUmV0dXJucyB0aGUgY29vcmRpbmF0ZXMgb2YgYW4gZWxlbWVudCBwcmV2aW91c2x5IHBvc2l0aW9uZWQgd2l0aCBzZXRQb3NpdGlvbi5cclxuICBmdW5jdGlvbiBnZXRQb3NpdGlvbihlbCkge1xyXG4gIFx0Ly8gdGhpcyBtZXRob2QgaXMgb25seSB1c2VkIGZvciBlbGVtZW50cyBwcmV2aW91c2x5IHBvc2l0aW9uZWQgdXNpbmcgc2V0UG9zaXRpb24sXHJcbiAgXHQvLyBzbyBpdCdzIHNhZmUgdG8gY2FjaGUgdGhlIHBvc2l0aW9uIGZvciBwZXJmb3JtYW5jZVxyXG5cclxuICBcdHJldHVybiBlbC5fbGVhZmxldF9wb3MgfHwgbmV3IFBvaW50KDAsIDApO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGRpc2FibGVUZXh0U2VsZWN0aW9uKClcclxuICAvLyBQcmV2ZW50cyB0aGUgdXNlciBmcm9tIGdlbmVyYXRpbmcgYHNlbGVjdHN0YXJ0YCBET00gZXZlbnRzLCB1c3VhbGx5IGdlbmVyYXRlZFxyXG4gIC8vIHdoZW4gdGhlIHVzZXIgZHJhZ3MgdGhlIG1vdXNlIHRocm91Z2ggYSBwYWdlIHdpdGggdGV4dC4gVXNlZCBpbnRlcm5hbGx5XHJcbiAgLy8gYnkgTGVhZmxldCB0byBvdmVycmlkZSB0aGUgYmVoYXZpb3VyIG9mIGFueSBjbGljay1hbmQtZHJhZyBpbnRlcmFjdGlvbiBvblxyXG4gIC8vIHRoZSBtYXAuIEFmZmVjdHMgZHJhZyBpbnRlcmFjdGlvbnMgb24gdGhlIHdob2xlIGRvY3VtZW50LlxyXG5cclxuICAvLyBAZnVuY3Rpb24gZW5hYmxlVGV4dFNlbGVjdGlvbigpXHJcbiAgLy8gQ2FuY2VscyB0aGUgZWZmZWN0cyBvZiBhIHByZXZpb3VzIFtgTC5Eb21VdGlsLmRpc2FibGVUZXh0U2VsZWN0aW9uYF0oI2RvbXV0aWwtZGlzYWJsZXRleHRzZWxlY3Rpb24pLlxyXG4gIHZhciBkaXNhYmxlVGV4dFNlbGVjdGlvbjtcclxuICB2YXIgZW5hYmxlVGV4dFNlbGVjdGlvbjtcclxuICB2YXIgX3VzZXJTZWxlY3Q7XHJcbiAgaWYgKCdvbnNlbGVjdHN0YXJ0JyBpbiBkb2N1bWVudCkge1xyXG4gIFx0ZGlzYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdG9uKHdpbmRvdywgJ3NlbGVjdHN0YXJ0JywgcHJldmVudERlZmF1bHQpO1xyXG4gIFx0fTtcclxuICBcdGVuYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdG9mZih3aW5kb3csICdzZWxlY3RzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcclxuICBcdH07XHJcbiAgfSBlbHNlIHtcclxuICBcdHZhciB1c2VyU2VsZWN0UHJvcGVydHkgPSB0ZXN0UHJvcChcclxuICBcdFx0Wyd1c2VyU2VsZWN0JywgJ1dlYmtpdFVzZXJTZWxlY3QnLCAnT1VzZXJTZWxlY3QnLCAnTW96VXNlclNlbGVjdCcsICdtc1VzZXJTZWxlY3QnXSk7XHJcblxyXG4gIFx0ZGlzYWJsZVRleHRTZWxlY3Rpb24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh1c2VyU2VsZWN0UHJvcGVydHkpIHtcclxuICBcdFx0XHR2YXIgc3R5bGUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGU7XHJcbiAgXHRcdFx0X3VzZXJTZWxlY3QgPSBzdHlsZVt1c2VyU2VsZWN0UHJvcGVydHldO1xyXG4gIFx0XHRcdHN0eWxlW3VzZXJTZWxlY3RQcm9wZXJ0eV0gPSAnbm9uZSc7XHJcbiAgXHRcdH1cclxuICBcdH07XHJcbiAgXHRlbmFibGVUZXh0U2VsZWN0aW9uID0gZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodXNlclNlbGVjdFByb3BlcnR5KSB7XHJcbiAgXHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlW3VzZXJTZWxlY3RQcm9wZXJ0eV0gPSBfdXNlclNlbGVjdDtcclxuICBcdFx0XHRfdXNlclNlbGVjdCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG4gIFx0fTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBkaXNhYmxlSW1hZ2VEcmFnKClcclxuICAvLyBBcyBbYEwuRG9tVXRpbC5kaXNhYmxlVGV4dFNlbGVjdGlvbmBdKCNkb211dGlsLWRpc2FibGV0ZXh0c2VsZWN0aW9uKSwgYnV0XHJcbiAgLy8gZm9yIGBkcmFnc3RhcnRgIERPTSBldmVudHMsIHVzdWFsbHkgZ2VuZXJhdGVkIHdoZW4gdGhlIHVzZXIgZHJhZ3MgYW4gaW1hZ2UuXHJcbiAgZnVuY3Rpb24gZGlzYWJsZUltYWdlRHJhZygpIHtcclxuICBcdG9uKHdpbmRvdywgJ2RyYWdzdGFydCcsIHByZXZlbnREZWZhdWx0KTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBlbmFibGVJbWFnZURyYWcoKVxyXG4gIC8vIENhbmNlbHMgdGhlIGVmZmVjdHMgb2YgYSBwcmV2aW91cyBbYEwuRG9tVXRpbC5kaXNhYmxlSW1hZ2VEcmFnYF0oI2RvbXV0aWwtZGlzYWJsZXRleHRzZWxlY3Rpb24pLlxyXG4gIGZ1bmN0aW9uIGVuYWJsZUltYWdlRHJhZygpIHtcclxuICBcdG9mZih3aW5kb3csICdkcmFnc3RhcnQnLCBwcmV2ZW50RGVmYXVsdCk7XHJcbiAgfVxyXG5cclxuICB2YXIgX291dGxpbmVFbGVtZW50LCBfb3V0bGluZVN0eWxlO1xyXG4gIC8vIEBmdW5jdGlvbiBwcmV2ZW50T3V0bGluZShlbDogSFRNTEVsZW1lbnQpXHJcbiAgLy8gTWFrZXMgdGhlIFtvdXRsaW5lXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1Mvb3V0bGluZSlcclxuICAvLyBvZiB0aGUgZWxlbWVudCBgZWxgIGludmlzaWJsZS4gVXNlZCBpbnRlcm5hbGx5IGJ5IExlYWZsZXQgdG8gcHJldmVudFxyXG4gIC8vIGZvY3VzYWJsZSBlbGVtZW50cyBmcm9tIGRpc3BsYXlpbmcgYW4gb3V0bGluZSB3aGVuIHRoZSB1c2VyIHBlcmZvcm1zIGFcclxuICAvLyBkcmFnIGludGVyYWN0aW9uIG9uIHRoZW0uXHJcbiAgZnVuY3Rpb24gcHJldmVudE91dGxpbmUoZWxlbWVudCkge1xyXG4gIFx0d2hpbGUgKGVsZW1lbnQudGFiSW5kZXggPT09IC0xKSB7XHJcbiAgXHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudE5vZGU7XHJcbiAgXHR9XHJcbiAgXHRpZiAoIWVsZW1lbnQuc3R5bGUpIHsgcmV0dXJuOyB9XHJcbiAgXHRyZXN0b3JlT3V0bGluZSgpO1xyXG4gIFx0X291dGxpbmVFbGVtZW50ID0gZWxlbWVudDtcclxuICBcdF9vdXRsaW5lU3R5bGUgPSBlbGVtZW50LnN0eWxlLm91dGxpbmU7XHJcbiAgXHRlbGVtZW50LnN0eWxlLm91dGxpbmUgPSAnbm9uZSc7XHJcbiAgXHRvbih3aW5kb3csICdrZXlkb3duJywgcmVzdG9yZU91dGxpbmUpO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHJlc3RvcmVPdXRsaW5lKClcclxuICAvLyBDYW5jZWxzIHRoZSBlZmZlY3RzIG9mIGEgcHJldmlvdXMgW2BMLkRvbVV0aWwucHJldmVudE91dGxpbmVgXSgpLlxyXG4gIGZ1bmN0aW9uIHJlc3RvcmVPdXRsaW5lKCkge1xyXG4gIFx0aWYgKCFfb3V0bGluZUVsZW1lbnQpIHsgcmV0dXJuOyB9XHJcbiAgXHRfb3V0bGluZUVsZW1lbnQuc3R5bGUub3V0bGluZSA9IF9vdXRsaW5lU3R5bGU7XHJcbiAgXHRfb3V0bGluZUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgXHRfb3V0bGluZVN0eWxlID0gdW5kZWZpbmVkO1xyXG4gIFx0b2ZmKHdpbmRvdywgJ2tleWRvd24nLCByZXN0b3JlT3V0bGluZSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0U2l6ZWRQYXJlbnROb2RlKGVsOiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgLy8gRmluZHMgdGhlIGNsb3Nlc3QgcGFyZW50IG5vZGUgd2hpY2ggc2l6ZSAod2lkdGggYW5kIGhlaWdodCkgaXMgbm90IG51bGwuXHJcbiAgZnVuY3Rpb24gZ2V0U2l6ZWRQYXJlbnROb2RlKGVsZW1lbnQpIHtcclxuICBcdGRvIHtcclxuICBcdFx0ZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcclxuICBcdH0gd2hpbGUgKCghZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAhZWxlbWVudC5vZmZzZXRIZWlnaHQpICYmIGVsZW1lbnQgIT09IGRvY3VtZW50LmJvZHkpO1xyXG4gIFx0cmV0dXJuIGVsZW1lbnQ7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0U2NhbGUoZWw6IEhUTUxFbGVtZW50KTogT2JqZWN0XHJcbiAgLy8gQ29tcHV0ZXMgdGhlIENTUyBzY2FsZSBjdXJyZW50bHkgYXBwbGllZCBvbiB0aGUgZWxlbWVudC5cclxuICAvLyBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGB4YCBhbmQgYHlgIG1lbWJlcnMgYXMgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgc2NhbGVzIHJlc3BlY3RpdmVseSxcclxuICAvLyBhbmQgYGJvdW5kaW5nQ2xpZW50UmVjdGAgYXMgdGhlIHJlc3VsdCBvZiBbYGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpYF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvZ2V0Qm91bmRpbmdDbGllbnRSZWN0KS5cclxuICBmdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XHJcbiAgXHR2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7IC8vIFJlYWQtb25seSBpbiBvbGQgYnJvd3NlcnMuXHJcblxyXG4gIFx0cmV0dXJuIHtcclxuICBcdFx0eDogcmVjdC53aWR0aCAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMSxcclxuICBcdFx0eTogcmVjdC5oZWlnaHQgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxLFxyXG4gIFx0XHRib3VuZGluZ0NsaWVudFJlY3Q6IHJlY3RcclxuICBcdH07XHJcbiAgfVxuXG4gIHZhciBEb21VdGlsID0gKHtcbiAgICBUUkFOU0ZPUk06IFRSQU5TRk9STSxcbiAgICBUUkFOU0lUSU9OOiBUUkFOU0lUSU9OLFxuICAgIFRSQU5TSVRJT05fRU5EOiBUUkFOU0lUSU9OX0VORCxcbiAgICBnZXQ6IGdldCxcbiAgICBnZXRTdHlsZTogZ2V0U3R5bGUsXG4gICAgY3JlYXRlOiBjcmVhdGUkMSxcbiAgICByZW1vdmU6IHJlbW92ZSxcbiAgICBlbXB0eTogZW1wdHksXG4gICAgdG9Gcm9udDogdG9Gcm9udCxcbiAgICB0b0JhY2s6IHRvQmFjayxcbiAgICBoYXNDbGFzczogaGFzQ2xhc3MsXG4gICAgYWRkQ2xhc3M6IGFkZENsYXNzLFxuICAgIHJlbW92ZUNsYXNzOiByZW1vdmVDbGFzcyxcbiAgICBzZXRDbGFzczogc2V0Q2xhc3MsXG4gICAgZ2V0Q2xhc3M6IGdldENsYXNzLFxuICAgIHNldE9wYWNpdHk6IHNldE9wYWNpdHksXG4gICAgdGVzdFByb3A6IHRlc3RQcm9wLFxuICAgIHNldFRyYW5zZm9ybTogc2V0VHJhbnNmb3JtLFxuICAgIHNldFBvc2l0aW9uOiBzZXRQb3NpdGlvbixcbiAgICBnZXRQb3NpdGlvbjogZ2V0UG9zaXRpb24sXG4gICAgZGlzYWJsZVRleHRTZWxlY3Rpb246IGRpc2FibGVUZXh0U2VsZWN0aW9uLFxuICAgIGVuYWJsZVRleHRTZWxlY3Rpb246IGVuYWJsZVRleHRTZWxlY3Rpb24sXG4gICAgZGlzYWJsZUltYWdlRHJhZzogZGlzYWJsZUltYWdlRHJhZyxcbiAgICBlbmFibGVJbWFnZURyYWc6IGVuYWJsZUltYWdlRHJhZyxcbiAgICBwcmV2ZW50T3V0bGluZTogcHJldmVudE91dGxpbmUsXG4gICAgcmVzdG9yZU91dGxpbmU6IHJlc3RvcmVPdXRsaW5lLFxuICAgIGdldFNpemVkUGFyZW50Tm9kZTogZ2V0U2l6ZWRQYXJlbnROb2RlLFxuICAgIGdldFNjYWxlOiBnZXRTY2FsZVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgRG9tRXZlbnRcclxuICAgKiBVdGlsaXR5IGZ1bmN0aW9ucyB0byB3b3JrIHdpdGggdGhlIFtET00gZXZlbnRzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvRXZlbnQpLCB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseS5cclxuICAgKi9cclxuXHJcbiAgLy8gSW5zcGlyZWQgYnkgSm9obiBSZXNpZywgRGVhbiBFZHdhcmRzIGFuZCBZVUkgYWRkRXZlbnQgaW1wbGVtZW50YXRpb25zLlxyXG5cclxuICAvLyBAZnVuY3Rpb24gb24oZWw6IEhUTUxFbGVtZW50LCB0eXBlczogU3RyaW5nLCBmbjogRnVuY3Rpb24sIGNvbnRleHQ/OiBPYmplY3QpOiB0aGlzXHJcbiAgLy8gQWRkcyBhIGxpc3RlbmVyIGZ1bmN0aW9uIChgZm5gKSB0byBhIHBhcnRpY3VsYXIgRE9NIGV2ZW50IHR5cGUgb2YgdGhlXHJcbiAgLy8gZWxlbWVudCBgZWxgLiBZb3UgY2FuIG9wdGlvbmFsbHkgc3BlY2lmeSB0aGUgY29udGV4dCBvZiB0aGUgbGlzdGVuZXJcclxuICAvLyAob2JqZWN0IHRoZSBgdGhpc2Aga2V5d29yZCB3aWxsIHBvaW50IHRvKS4gWW91IGNhbiBhbHNvIHBhc3Mgc2V2ZXJhbFxyXG4gIC8vIHNwYWNlLXNlcGFyYXRlZCB0eXBlcyAoZS5nLiBgJ2NsaWNrIGRibGNsaWNrJ2ApLlxyXG5cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZnVuY3Rpb24gb24oZWw6IEhUTUxFbGVtZW50LCBldmVudE1hcDogT2JqZWN0LCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIC8vIEFkZHMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycywgZS5nLiBge2NsaWNrOiBvbkNsaWNrLCBtb3VzZW1vdmU6IG9uTW91c2VNb3ZlfWBcclxuICBmdW5jdGlvbiBvbihvYmosIHR5cGVzLCBmbiwgY29udGV4dCkge1xyXG5cclxuICBcdGlmICh0eXBlb2YgdHlwZXMgPT09ICdvYmplY3QnKSB7XHJcbiAgXHRcdGZvciAodmFyIHR5cGUgaW4gdHlwZXMpIHtcclxuICBcdFx0XHRhZGRPbmUob2JqLCB0eXBlLCB0eXBlc1t0eXBlXSwgZm4pO1xyXG4gIFx0XHR9XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0YWRkT25lKG9iaiwgdHlwZXNbaV0sIGZuLCBjb250ZXh0KTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgdmFyIGV2ZW50c0tleSA9ICdfbGVhZmxldF9ldmVudHMnO1xyXG5cclxuICAvLyBAZnVuY3Rpb24gb2ZmKGVsOiBIVE1MRWxlbWVudCwgdHlwZXM6IFN0cmluZywgZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIC8vIFJlbW92ZXMgYSBwcmV2aW91c2x5IGFkZGVkIGxpc3RlbmVyIGZ1bmN0aW9uLlxyXG4gIC8vIE5vdGUgdGhhdCBpZiB5b3UgcGFzc2VkIGEgY3VzdG9tIGNvbnRleHQgdG8gb24sIHlvdSBtdXN0IHBhc3MgdGhlIHNhbWVcclxuICAvLyBjb250ZXh0IHRvIGBvZmZgIGluIG9yZGVyIHRvIHJlbW92ZSB0aGUgbGlzdGVuZXIuXHJcblxyXG4gIC8vIEBhbHRlcm5hdGl2ZVxyXG4gIC8vIEBmdW5jdGlvbiBvZmYoZWw6IEhUTUxFbGVtZW50LCBldmVudE1hcDogT2JqZWN0LCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIC8vIFJlbW92ZXMgYSBzZXQgb2YgdHlwZS9saXN0ZW5lciBwYWlycywgZS5nLiBge2NsaWNrOiBvbkNsaWNrLCBtb3VzZW1vdmU6IG9uTW91c2VNb3ZlfWBcclxuICBmdW5jdGlvbiBvZmYob2JqLCB0eXBlcywgZm4sIGNvbnRleHQpIHtcclxuXHJcbiAgXHRpZiAodHlwZW9mIHR5cGVzID09PSAnb2JqZWN0Jykge1xyXG4gIFx0XHRmb3IgKHZhciB0eXBlIGluIHR5cGVzKSB7XHJcbiAgXHRcdFx0cmVtb3ZlT25lKG9iaiwgdHlwZSwgdHlwZXNbdHlwZV0sIGZuKTtcclxuICBcdFx0fVxyXG4gIFx0fSBlbHNlIGlmICh0eXBlcykge1xyXG4gIFx0XHR0eXBlcyA9IHNwbGl0V29yZHModHlwZXMpO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IHR5cGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdFx0cmVtb3ZlT25lKG9iaiwgdHlwZXNbaV0sIGZuLCBjb250ZXh0KTtcclxuICBcdFx0fVxyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0Zm9yICh2YXIgaiBpbiBvYmpbZXZlbnRzS2V5XSkge1xyXG4gIFx0XHRcdHJlbW92ZU9uZShvYmosIGosIG9ialtldmVudHNLZXldW2pdKTtcclxuICBcdFx0fVxyXG4gIFx0XHRkZWxldGUgb2JqW2V2ZW50c0tleV07XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBicm93c2VyRmlyZXNOYXRpdmVEYmxDbGljaygpIHtcclxuICBcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdzNjL3BvaW50ZXJldmVudHMvaXNzdWVzLzE3MVxyXG4gIFx0aWYgKHBvaW50ZXIpIHtcclxuICBcdFx0cmV0dXJuICEoZWRnZSB8fCBzYWZhcmkpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgdmFyIG1vdXNlU3Vic3QgPSB7XHJcbiAgXHRtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcclxuICBcdG1vdXNlbGVhdmU6ICdtb3VzZW91dCcsXHJcbiAgXHR3aGVlbDogISgnb253aGVlbCcgaW4gd2luZG93KSAmJiAnbW91c2V3aGVlbCdcclxuICB9O1xyXG5cclxuICBmdW5jdGlvbiBhZGRPbmUob2JqLCB0eXBlLCBmbiwgY29udGV4dCkge1xyXG4gIFx0dmFyIGlkID0gdHlwZSArIHN0YW1wKGZuKSArIChjb250ZXh0ID8gJ18nICsgc3RhbXAoY29udGV4dCkgOiAnJyk7XHJcblxyXG4gIFx0aWYgKG9ialtldmVudHNLZXldICYmIG9ialtldmVudHNLZXldW2lkXSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0cmV0dXJuIGZuLmNhbGwoY29udGV4dCB8fCBvYmosIGUgfHwgd2luZG93LmV2ZW50KTtcclxuICBcdH07XHJcblxyXG4gIFx0dmFyIG9yaWdpbmFsSGFuZGxlciA9IGhhbmRsZXI7XHJcblxyXG4gIFx0aWYgKHBvaW50ZXIgJiYgdHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XHJcbiAgXHRcdC8vIE5lZWRzIERvbUV2ZW50LlBvaW50ZXIuanNcclxuICBcdFx0YWRkUG9pbnRlckxpc3RlbmVyKG9iaiwgdHlwZSwgaGFuZGxlciwgaWQpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAodG91Y2ggJiYgKHR5cGUgPT09ICdkYmxjbGljaycpICYmICFicm93c2VyRmlyZXNOYXRpdmVEYmxDbGljaygpKSB7XHJcbiAgXHRcdGFkZERvdWJsZVRhcExpc3RlbmVyKG9iaiwgaGFuZGxlciwgaWQpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIG9iaikge1xyXG5cclxuICBcdFx0aWYgKHR5cGUgPT09ICd0b3VjaHN0YXJ0JyB8fCB0eXBlID09PSAndG91Y2htb3ZlJyB8fCB0eXBlID09PSAnd2hlZWwnIHx8ICB0eXBlID09PSAnbW91c2V3aGVlbCcpIHtcclxuICBcdFx0XHRvYmouYWRkRXZlbnRMaXN0ZW5lcihtb3VzZVN1YnN0W3R5cGVdIHx8IHR5cGUsIGhhbmRsZXIsIHBhc3NpdmVFdmVudHMgPyB7cGFzc2l2ZTogZmFsc2V9IDogZmFsc2UpO1xyXG5cclxuICBcdFx0fSBlbHNlIGlmICh0eXBlID09PSAnbW91c2VlbnRlcicgfHwgdHlwZSA9PT0gJ21vdXNlbGVhdmUnKSB7XHJcbiAgXHRcdFx0aGFuZGxlciA9IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdFx0XHRlID0gZSB8fCB3aW5kb3cuZXZlbnQ7XHJcbiAgXHRcdFx0XHRpZiAoaXNFeHRlcm5hbFRhcmdldChvYmosIGUpKSB7XHJcbiAgXHRcdFx0XHRcdG9yaWdpbmFsSGFuZGxlcihlKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9O1xyXG4gIFx0XHRcdG9iai5hZGRFdmVudExpc3RlbmVyKG1vdXNlU3Vic3RbdHlwZV0sIGhhbmRsZXIsIGZhbHNlKTtcclxuXHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0b2JqLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgb3JpZ2luYWxIYW5kbGVyLCBmYWxzZSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHR9IGVsc2UgaWYgKCdhdHRhY2hFdmVudCcgaW4gb2JqKSB7XHJcbiAgXHRcdG9iai5hdHRhY2hFdmVudCgnb24nICsgdHlwZSwgaGFuZGxlcik7XHJcbiAgXHR9XHJcblxyXG4gIFx0b2JqW2V2ZW50c0tleV0gPSBvYmpbZXZlbnRzS2V5XSB8fCB7fTtcclxuICBcdG9ialtldmVudHNLZXldW2lkXSA9IGhhbmRsZXI7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiByZW1vdmVPbmUob2JqLCB0eXBlLCBmbiwgY29udGV4dCkge1xyXG5cclxuICBcdHZhciBpZCA9IHR5cGUgKyBzdGFtcChmbikgKyAoY29udGV4dCA/ICdfJyArIHN0YW1wKGNvbnRleHQpIDogJycpLFxyXG4gIFx0ICAgIGhhbmRsZXIgPSBvYmpbZXZlbnRzS2V5XSAmJiBvYmpbZXZlbnRzS2V5XVtpZF07XHJcblxyXG4gIFx0aWYgKCFoYW5kbGVyKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0aWYgKHBvaW50ZXIgJiYgdHlwZS5pbmRleE9mKCd0b3VjaCcpID09PSAwKSB7XHJcbiAgXHRcdHJlbW92ZVBvaW50ZXJMaXN0ZW5lcihvYmosIHR5cGUsIGlkKTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKHRvdWNoICYmICh0eXBlID09PSAnZGJsY2xpY2snKSAmJiAhYnJvd3NlckZpcmVzTmF0aXZlRGJsQ2xpY2soKSkge1xyXG4gIFx0XHRyZW1vdmVEb3VibGVUYXBMaXN0ZW5lcihvYmosIGlkKTtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBvYmopIHtcclxuXHJcbiAgXHRcdG9iai5yZW1vdmVFdmVudExpc3RlbmVyKG1vdXNlU3Vic3RbdHlwZV0gfHwgdHlwZSwgaGFuZGxlciwgZmFsc2UpO1xyXG5cclxuICBcdH0gZWxzZSBpZiAoJ2RldGFjaEV2ZW50JyBpbiBvYmopIHtcclxuICBcdFx0b2JqLmRldGFjaEV2ZW50KCdvbicgKyB0eXBlLCBoYW5kbGVyKTtcclxuICBcdH1cclxuXHJcbiAgXHRvYmpbZXZlbnRzS2V5XVtpZF0gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHN0b3BQcm9wYWdhdGlvbihldjogRE9NRXZlbnQpOiB0aGlzXHJcbiAgLy8gU3RvcCB0aGUgZ2l2ZW4gZXZlbnQgZnJvbSBwcm9wYWdhdGlvbiB0byBwYXJlbnQgZWxlbWVudHMuIFVzZWQgaW5zaWRlIHRoZSBsaXN0ZW5lciBmdW5jdGlvbnM6XHJcbiAgLy8gYGBganNcclxuICAvLyBMLkRvbUV2ZW50Lm9uKGRpdiwgJ2NsaWNrJywgZnVuY3Rpb24gKGV2KSB7XHJcbiAgLy8gXHRMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbihldik7XHJcbiAgLy8gfSk7XHJcbiAgLy8gYGBgXHJcbiAgZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKGUpIHtcclxuXHJcbiAgXHRpZiAoZS5zdG9wUHJvcGFnYXRpb24pIHtcclxuICBcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICBcdH0gZWxzZSBpZiAoZS5vcmlnaW5hbEV2ZW50KSB7ICAvLyBJbiBjYXNlIG9mIExlYWZsZXQgZXZlbnQuXHJcbiAgXHRcdGUub3JpZ2luYWxFdmVudC5fc3RvcHBlZCA9IHRydWU7XHJcbiAgXHR9IGVsc2Uge1xyXG4gIFx0XHRlLmNhbmNlbEJ1YmJsZSA9IHRydWU7XHJcbiAgXHR9XHJcbiAgXHRza2lwcGVkKGUpO1xyXG5cclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbihlbDogSFRNTEVsZW1lbnQpOiB0aGlzXHJcbiAgLy8gQWRkcyBgc3RvcFByb3BhZ2F0aW9uYCB0byB0aGUgZWxlbWVudCdzIGAnd2hlZWwnYCBldmVudHMgKHBsdXMgYnJvd3NlciB2YXJpYW50cykuXHJcbiAgZnVuY3Rpb24gZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGVsKSB7XHJcbiAgXHRhZGRPbmUoZWwsICd3aGVlbCcsIHN0b3BQcm9wYWdhdGlvbik7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihlbDogSFRNTEVsZW1lbnQpOiB0aGlzXHJcbiAgLy8gQWRkcyBgc3RvcFByb3BhZ2F0aW9uYCB0byB0aGUgZWxlbWVudCdzIGAnY2xpY2snYCwgYCdkb3VibGVjbGljaydgLFxyXG4gIC8vIGAnbW91c2Vkb3duJ2AgYW5kIGAndG91Y2hzdGFydCdgIGV2ZW50cyAocGx1cyBicm93c2VyIHZhcmlhbnRzKS5cclxuICBmdW5jdGlvbiBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihlbCkge1xyXG4gIFx0b24oZWwsICdtb3VzZWRvd24gdG91Y2hzdGFydCBkYmxjbGljaycsIHN0b3BQcm9wYWdhdGlvbik7XHJcbiAgXHRhZGRPbmUoZWwsICdjbGljaycsIGZha2VTdG9wKTtcclxuICBcdHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHByZXZlbnREZWZhdWx0KGV2OiBET01FdmVudCk6IHRoaXNcclxuICAvLyBQcmV2ZW50cyB0aGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIERPTSBFdmVudCBgZXZgIGZyb20gaGFwcGVuaW5nIChzdWNoIGFzXHJcbiAgLy8gZm9sbG93aW5nIGEgbGluayBpbiB0aGUgaHJlZiBvZiB0aGUgYSBlbGVtZW50LCBvciBkb2luZyBhIFBPU1QgcmVxdWVzdFxyXG4gIC8vIHdpdGggcGFnZSByZWxvYWQgd2hlbiBhIGA8Zm9ybT5gIGlzIHN1Ym1pdHRlZCkuXHJcbiAgLy8gVXNlIGl0IGluc2lkZSBsaXN0ZW5lciBmdW5jdGlvbnMuXHJcbiAgZnVuY3Rpb24gcHJldmVudERlZmF1bHQoZSkge1xyXG4gIFx0aWYgKGUucHJldmVudERlZmF1bHQpIHtcclxuICBcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIFx0fSBlbHNlIHtcclxuICBcdFx0ZS5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xyXG4gIFx0fVxyXG4gIFx0cmV0dXJuIHRoaXM7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gc3RvcChldjogRE9NRXZlbnQpOiB0aGlzXHJcbiAgLy8gRG9lcyBgc3RvcFByb3BhZ2F0aW9uYCBhbmQgYHByZXZlbnREZWZhdWx0YCBhdCB0aGUgc2FtZSB0aW1lLlxyXG4gIGZ1bmN0aW9uIHN0b3AoZSkge1xyXG4gIFx0cHJldmVudERlZmF1bHQoZSk7XHJcbiAgXHRzdG9wUHJvcGFnYXRpb24oZSk7XHJcbiAgXHRyZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBnZXRNb3VzZVBvc2l0aW9uKGV2OiBET01FdmVudCwgY29udGFpbmVyPzogSFRNTEVsZW1lbnQpOiBQb2ludFxyXG4gIC8vIEdldHMgbm9ybWFsaXplZCBtb3VzZSBwb3NpdGlvbiBmcm9tIGEgRE9NIGV2ZW50IHJlbGF0aXZlIHRvIHRoZVxyXG4gIC8vIGBjb250YWluZXJgIChib3JkZXIgZXhjbHVkZWQpIG9yIHRvIHRoZSB3aG9sZSBwYWdlIGlmIG5vdCBzcGVjaWZpZWQuXHJcbiAgZnVuY3Rpb24gZ2V0TW91c2VQb3NpdGlvbihlLCBjb250YWluZXIpIHtcclxuICBcdGlmICghY29udGFpbmVyKSB7XHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoZS5jbGllbnRYLCBlLmNsaWVudFkpO1xyXG4gIFx0fVxyXG5cclxuICBcdHZhciBzY2FsZSA9IGdldFNjYWxlKGNvbnRhaW5lciksXHJcbiAgXHQgICAgb2Zmc2V0ID0gc2NhbGUuYm91bmRpbmdDbGllbnRSZWN0OyAvLyBsZWZ0IGFuZCB0b3AgIHZhbHVlcyBhcmUgaW4gcGFnZSBzY2FsZSAobGlrZSB0aGUgZXZlbnQgY2xpZW50WC9ZKVxyXG5cclxuICBcdHJldHVybiBuZXcgUG9pbnQoXHJcbiAgXHRcdC8vIG9mZnNldC5sZWZ0L3RvcCB2YWx1ZXMgYXJlIGluIHBhZ2Ugc2NhbGUgKGxpa2UgY2xpZW50WC9ZKSxcclxuICBcdFx0Ly8gd2hlcmVhcyBjbGllbnRMZWZ0L1RvcCAoYm9yZGVyIHdpZHRoKSB2YWx1ZXMgYXJlIHRoZSBvcmlnaW5hbCB2YWx1ZXMgKGJlZm9yZSBDU1Mgc2NhbGUgYXBwbGllcykuXHJcbiAgXHRcdChlLmNsaWVudFggLSBvZmZzZXQubGVmdCkgLyBzY2FsZS54IC0gY29udGFpbmVyLmNsaWVudExlZnQsXHJcbiAgXHRcdChlLmNsaWVudFkgLSBvZmZzZXQudG9wKSAvIHNjYWxlLnkgLSBjb250YWluZXIuY2xpZW50VG9wXHJcbiAgXHQpO1xyXG4gIH1cclxuXHJcbiAgLy8gQ2hyb21lIG9uIFdpbiBzY3JvbGxzIGRvdWJsZSB0aGUgcGl4ZWxzIGFzIGluIG90aGVyIHBsYXRmb3JtcyAoc2VlICM0NTM4KSxcclxuICAvLyBhbmQgRmlyZWZveCBzY3JvbGxzIGRldmljZSBwaXhlbHMsIG5vdCBDU1MgcGl4ZWxzXHJcbiAgdmFyIHdoZWVsUHhGYWN0b3IgPVxyXG4gIFx0KHdpbiAmJiBjaHJvbWUpID8gMiAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDpcclxuICBcdGdlY2tvID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxO1xyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2V0V2hlZWxEZWx0YShldjogRE9NRXZlbnQpOiBOdW1iZXJcclxuICAvLyBHZXRzIG5vcm1hbGl6ZWQgd2hlZWwgZGVsdGEgZnJvbSBhIHdoZWVsIERPTSBldmVudCwgaW4gdmVydGljYWxcclxuICAvLyBwaXhlbHMgc2Nyb2xsZWQgKG5lZ2F0aXZlIGlmIHNjcm9sbGluZyBkb3duKS5cclxuICAvLyBFdmVudHMgZnJvbSBwb2ludGluZyBkZXZpY2VzIHdpdGhvdXQgcHJlY2lzZSBzY3JvbGxpbmcgYXJlIG1hcHBlZCB0b1xyXG4gIC8vIGEgYmVzdCBndWVzcyBvZiA2MCBwaXhlbHMuXHJcbiAgZnVuY3Rpb24gZ2V0V2hlZWxEZWx0YShlKSB7XHJcbiAgXHRyZXR1cm4gKGVkZ2UpID8gZS53aGVlbERlbHRhWSAvIDIgOiAvLyBEb24ndCB0cnVzdCB3aW5kb3ctZ2VvbWV0cnktYmFzZWQgZGVsdGFcclxuICBcdCAgICAgICAoZS5kZWx0YVkgJiYgZS5kZWx0YU1vZGUgPT09IDApID8gLWUuZGVsdGFZIC8gd2hlZWxQeEZhY3RvciA6IC8vIFBpeGVsc1xyXG4gIFx0ICAgICAgIChlLmRlbHRhWSAmJiBlLmRlbHRhTW9kZSA9PT0gMSkgPyAtZS5kZWx0YVkgKiAyMCA6IC8vIExpbmVzXHJcbiAgXHQgICAgICAgKGUuZGVsdGFZICYmIGUuZGVsdGFNb2RlID09PSAyKSA/IC1lLmRlbHRhWSAqIDYwIDogLy8gUGFnZXNcclxuICBcdCAgICAgICAoZS5kZWx0YVggfHwgZS5kZWx0YVopID8gMCA6XHQvLyBTa2lwIGhvcml6b250YWwvZGVwdGggd2hlZWwgZXZlbnRzXHJcbiAgXHQgICAgICAgZS53aGVlbERlbHRhID8gKGUud2hlZWxEZWx0YVkgfHwgZS53aGVlbERlbHRhKSAvIDIgOiAvLyBMZWdhY3kgSUUgcGl4ZWxzXHJcbiAgXHQgICAgICAgKGUuZGV0YWlsICYmIE1hdGguYWJzKGUuZGV0YWlsKSA8IDMyNzY1KSA/IC1lLmRldGFpbCAqIDIwIDogLy8gTGVnYWN5IE1veiBsaW5lc1xyXG4gIFx0ICAgICAgIGUuZGV0YWlsID8gZS5kZXRhaWwgLyAtMzI3NjUgKiA2MCA6IC8vIExlZ2FjeSBNb3ogcGFnZXNcclxuICBcdCAgICAgICAwO1xyXG4gIH1cclxuXHJcbiAgdmFyIHNraXBFdmVudHMgPSB7fTtcclxuXHJcbiAgZnVuY3Rpb24gZmFrZVN0b3AoZSkge1xyXG4gIFx0Ly8gZmFrZXMgc3RvcFByb3BhZ2F0aW9uIGJ5IHNldHRpbmcgYSBzcGVjaWFsIGV2ZW50IGZsYWcsIGNoZWNrZWQvcmVzZXQgd2l0aCBza2lwcGVkKGUpXHJcbiAgXHRza2lwRXZlbnRzW2UudHlwZV0gPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gc2tpcHBlZChlKSB7XHJcbiAgXHR2YXIgZXZlbnRzID0gc2tpcEV2ZW50c1tlLnR5cGVdO1xyXG4gIFx0Ly8gcmVzZXQgd2hlbiBjaGVja2luZywgYXMgaXQncyBvbmx5IHVzZWQgaW4gbWFwIGNvbnRhaW5lciBhbmQgcHJvcGFnYXRlcyBvdXRzaWRlIG9mIHRoZSBtYXBcclxuICBcdHNraXBFdmVudHNbZS50eXBlXSA9IGZhbHNlO1xyXG4gIFx0cmV0dXJuIGV2ZW50cztcclxuICB9XHJcblxyXG4gIC8vIGNoZWNrIGlmIGVsZW1lbnQgcmVhbGx5IGxlZnQvZW50ZXJlZCB0aGUgZXZlbnQgdGFyZ2V0IChmb3IgbW91c2VlbnRlci9tb3VzZWxlYXZlKVxyXG4gIGZ1bmN0aW9uIGlzRXh0ZXJuYWxUYXJnZXQoZWwsIGUpIHtcclxuXHJcbiAgXHR2YXIgcmVsYXRlZCA9IGUucmVsYXRlZFRhcmdldDtcclxuXHJcbiAgXHRpZiAoIXJlbGF0ZWQpIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgXHR0cnkge1xyXG4gIFx0XHR3aGlsZSAocmVsYXRlZCAmJiAocmVsYXRlZCAhPT0gZWwpKSB7XHJcbiAgXHRcdFx0cmVsYXRlZCA9IHJlbGF0ZWQucGFyZW50Tm9kZTtcclxuICBcdFx0fVxyXG4gIFx0fSBjYXRjaCAoZXJyKSB7XHJcbiAgXHRcdHJldHVybiBmYWxzZTtcclxuICBcdH1cclxuICBcdHJldHVybiAocmVsYXRlZCAhPT0gZWwpO1xyXG4gIH1cblxuICB2YXIgRG9tRXZlbnQgPSAoe1xuICAgIG9uOiBvbixcbiAgICBvZmY6IG9mZixcbiAgICBzdG9wUHJvcGFnYXRpb246IHN0b3BQcm9wYWdhdGlvbixcbiAgICBkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb246IGRpc2FibGVTY3JvbGxQcm9wYWdhdGlvbixcbiAgICBkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbjogZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24sXG4gICAgcHJldmVudERlZmF1bHQ6IHByZXZlbnREZWZhdWx0LFxuICAgIHN0b3A6IHN0b3AsXG4gICAgZ2V0TW91c2VQb3NpdGlvbjogZ2V0TW91c2VQb3NpdGlvbixcbiAgICBnZXRXaGVlbERlbHRhOiBnZXRXaGVlbERlbHRhLFxuICAgIGZha2VTdG9wOiBmYWtlU3RvcCxcbiAgICBza2lwcGVkOiBza2lwcGVkLFxuICAgIGlzRXh0ZXJuYWxUYXJnZXQ6IGlzRXh0ZXJuYWxUYXJnZXQsXG4gICAgYWRkTGlzdGVuZXI6IG9uLFxuICAgIHJlbW92ZUxpc3RlbmVyOiBvZmZcbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIFBvc0FuaW1hdGlvblxuICAgKiBAYWthIEwuUG9zQW5pbWF0aW9uXG4gICAqIEBpbmhlcml0cyBFdmVudGVkXG4gICAqIFVzZWQgaW50ZXJuYWxseSBmb3IgcGFubmluZyBhbmltYXRpb25zLCB1dGlsaXppbmcgQ1NTMyBUcmFuc2l0aW9ucyBmb3IgbW9kZXJuIGJyb3dzZXJzIGFuZCBhIHRpbWVyIGZhbGxiYWNrIGZvciBJRTYtOS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIGZ4ID0gbmV3IEwuUG9zQW5pbWF0aW9uKCk7XG4gICAqIGZ4LnJ1bihlbCwgWzMwMCwgNTAwXSwgMC41KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBMLlBvc0FuaW1hdGlvbigpXG4gICAqIENyZWF0ZXMgYSBgUG9zQW5pbWF0aW9uYCBvYmplY3QuXG4gICAqXG4gICAqL1xuXG4gIHZhciBQb3NBbmltYXRpb24gPSBFdmVudGVkLmV4dGVuZCh7XG5cbiAgXHQvLyBAbWV0aG9kIHJ1bihlbDogSFRNTEVsZW1lbnQsIG5ld1BvczogUG9pbnQsIGR1cmF0aW9uPzogTnVtYmVyLCBlYXNlTGluZWFyaXR5PzogTnVtYmVyKVxuICBcdC8vIFJ1biBhbiBhbmltYXRpb24gb2YgYSBnaXZlbiBlbGVtZW50IHRvIGEgbmV3IHBvc2l0aW9uLCBvcHRpb25hbGx5IHNldHRpbmdcbiAgXHQvLyBkdXJhdGlvbiBpbiBzZWNvbmRzIChgMC4yNWAgYnkgZGVmYXVsdCkgYW5kIGVhc2luZyBsaW5lYXJpdHkgZmFjdG9yICgzcmRcbiAgXHQvLyBhcmd1bWVudCBvZiB0aGUgW2N1YmljIGJlemllciBjdXJ2ZV0oaHR0cDovL2N1YmljLWJlemllci5jb20vIzAsMCwuNSwxKSxcbiAgXHQvLyBgMC41YCBieSBkZWZhdWx0KS5cbiAgXHRydW46IGZ1bmN0aW9uIChlbCwgbmV3UG9zLCBkdXJhdGlvbiwgZWFzZUxpbmVhcml0eSkge1xuICBcdFx0dGhpcy5zdG9wKCk7XG5cbiAgXHRcdHRoaXMuX2VsID0gZWw7XG4gIFx0XHR0aGlzLl9pblByb2dyZXNzID0gdHJ1ZTtcbiAgXHRcdHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb24gfHwgMC4yNTtcbiAgXHRcdHRoaXMuX2Vhc2VPdXRQb3dlciA9IDEgLyBNYXRoLm1heChlYXNlTGluZWFyaXR5IHx8IDAuNSwgMC4yKTtcblxuICBcdFx0dGhpcy5fc3RhcnRQb3MgPSBnZXRQb3NpdGlvbihlbCk7XG4gIFx0XHR0aGlzLl9vZmZzZXQgPSBuZXdQb3Muc3VidHJhY3QodGhpcy5fc3RhcnRQb3MpO1xuICBcdFx0dGhpcy5fc3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XG5cbiAgXHRcdC8vIEBldmVudCBzdGFydDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHNcbiAgXHRcdHRoaXMuZmlyZSgnc3RhcnQnKTtcblxuICBcdFx0dGhpcy5fYW5pbWF0ZSgpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHN0b3AoKVxuICBcdC8vIFN0b3BzIHRoZSBhbmltYXRpb24gKGlmIGN1cnJlbnRseSBydW5uaW5nKS5cbiAgXHRzdG9wOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX2luUHJvZ3Jlc3MpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX3N0ZXAodHJ1ZSk7XG4gIFx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuICBcdH0sXG5cbiAgXHRfYW5pbWF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gYW5pbWF0aW9uIGxvb3BcbiAgXHRcdHRoaXMuX2FuaW1JZCA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fYW5pbWF0ZSwgdGhpcyk7XG4gIFx0XHR0aGlzLl9zdGVwKCk7XG4gIFx0fSxcblxuICBcdF9zdGVwOiBmdW5jdGlvbiAocm91bmQpIHtcbiAgXHRcdHZhciBlbGFwc2VkID0gKCtuZXcgRGF0ZSgpKSAtIHRoaXMuX3N0YXJ0VGltZSxcbiAgXHRcdCAgICBkdXJhdGlvbiA9IHRoaXMuX2R1cmF0aW9uICogMTAwMDtcblxuICBcdFx0aWYgKGVsYXBzZWQgPCBkdXJhdGlvbikge1xuICBcdFx0XHR0aGlzLl9ydW5GcmFtZSh0aGlzLl9lYXNlT3V0KGVsYXBzZWQgLyBkdXJhdGlvbiksIHJvdW5kKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX3J1bkZyYW1lKDEpO1xuICBcdFx0XHR0aGlzLl9jb21wbGV0ZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcnVuRnJhbWU6IGZ1bmN0aW9uIChwcm9ncmVzcywgcm91bmQpIHtcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9zdGFydFBvcy5hZGQodGhpcy5fb2Zmc2V0Lm11bHRpcGx5QnkocHJvZ3Jlc3MpKTtcbiAgXHRcdGlmIChyb3VuZCkge1xuICBcdFx0XHRwb3MuX3JvdW5kKCk7XG4gIFx0XHR9XG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9lbCwgcG9zKTtcblxuICBcdFx0Ly8gQGV2ZW50IHN0ZXA6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCBjb250aW51b3VzbHkgZHVyaW5nIHRoZSBhbmltYXRpb24uXG4gIFx0XHR0aGlzLmZpcmUoJ3N0ZXAnKTtcbiAgXHR9LFxuXG4gIFx0X2NvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbUlkKTtcblxuICBcdFx0dGhpcy5faW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBcdFx0Ly8gQGV2ZW50IGVuZDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLlxuICBcdFx0dGhpcy5maXJlKCdlbmQnKTtcbiAgXHR9LFxuXG4gIFx0X2Vhc2VPdXQ6IGZ1bmN0aW9uICh0KSB7XG4gIFx0XHRyZXR1cm4gMSAtIE1hdGgucG93KDEgLSB0LCB0aGlzLl9lYXNlT3V0UG93ZXIpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcclxuICAgKiBAY2xhc3MgTWFwXHJcbiAgICogQGFrYSBMLk1hcFxyXG4gICAqIEBpbmhlcml0cyBFdmVudGVkXHJcbiAgICpcclxuICAgKiBUaGUgY2VudHJhbCBjbGFzcyBvZiB0aGUgQVBJIOKAlCBpdCBpcyB1c2VkIHRvIGNyZWF0ZSBhIG1hcCBvbiBhIHBhZ2UgYW5kIG1hbmlwdWxhdGUgaXQuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiAvLyBpbml0aWFsaXplIHRoZSBtYXAgb24gdGhlIFwibWFwXCIgZGl2IHdpdGggYSBnaXZlbiBjZW50ZXIgYW5kIHpvb21cclxuICAgKiB2YXIgbWFwID0gTC5tYXAoJ21hcCcsIHtcclxuICAgKiBcdGNlbnRlcjogWzUxLjUwNSwgLTAuMDldLFxyXG4gICAqIFx0em9vbTogMTNcclxuICAgKiB9KTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqL1xyXG5cclxuICB2YXIgTWFwID0gRXZlbnRlZC5leHRlbmQoe1xyXG5cclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQHNlY3Rpb24gTWFwIFN0YXRlIE9wdGlvbnNcclxuICBcdFx0Ly8gQG9wdGlvbiBjcnM6IENSUyA9IEwuQ1JTLkVQU0czODU3XHJcbiAgXHRcdC8vIFRoZSBbQ29vcmRpbmF0ZSBSZWZlcmVuY2UgU3lzdGVtXSgjY3JzKSB0byB1c2UuIERvbid0IGNoYW5nZSB0aGlzIGlmIHlvdSdyZSBub3RcclxuICBcdFx0Ly8gc3VyZSB3aGF0IGl0IG1lYW5zLlxyXG4gIFx0XHRjcnM6IEVQU0czODU3LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjZW50ZXI6IExhdExuZyA9IHVuZGVmaW5lZFxyXG4gIFx0XHQvLyBJbml0aWFsIGdlb2dyYXBoaWMgY2VudGVyIG9mIHRoZSBtYXBcclxuICBcdFx0Y2VudGVyOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb206IE51bWJlciA9IHVuZGVmaW5lZFxyXG4gIFx0XHQvLyBJbml0aWFsIG1hcCB6b29tIGxldmVsXHJcbiAgXHRcdHpvb206IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWluWm9vbTogTnVtYmVyID0gKlxyXG4gIFx0XHQvLyBNaW5pbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC5cclxuICBcdFx0Ly8gSWYgbm90IHNwZWNpZmllZCBhbmQgYXQgbGVhc3Qgb25lIGBHcmlkTGF5ZXJgIG9yIGBUaWxlTGF5ZXJgIGlzIGluIHRoZSBtYXAsXHJcbiAgXHRcdC8vIHRoZSBsb3dlc3Qgb2YgdGhlaXIgYG1pblpvb21gIG9wdGlvbnMgd2lsbCBiZSB1c2VkIGluc3RlYWQuXHJcbiAgXHRcdG1pblpvb206IHVuZGVmaW5lZCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4Wm9vbTogTnVtYmVyID0gKlxyXG4gIFx0XHQvLyBNYXhpbXVtIHpvb20gbGV2ZWwgb2YgdGhlIG1hcC5cclxuICBcdFx0Ly8gSWYgbm90IHNwZWNpZmllZCBhbmQgYXQgbGVhc3Qgb25lIGBHcmlkTGF5ZXJgIG9yIGBUaWxlTGF5ZXJgIGlzIGluIHRoZSBtYXAsXHJcbiAgXHRcdC8vIHRoZSBoaWdoZXN0IG9mIHRoZWlyIGBtYXhab29tYCBvcHRpb25zIHdpbGwgYmUgdXNlZCBpbnN0ZWFkLlxyXG4gIFx0XHRtYXhab29tOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGxheWVyczogTGF5ZXJbXSA9IFtdXHJcbiAgXHRcdC8vIEFycmF5IG9mIGxheWVycyB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIG1hcCBpbml0aWFsbHlcclxuICBcdFx0bGF5ZXJzOiBbXSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4Qm91bmRzOiBMYXRMbmdCb3VuZHMgPSBudWxsXHJcbiAgXHRcdC8vIFdoZW4gdGhpcyBvcHRpb24gaXMgc2V0LCB0aGUgbWFwIHJlc3RyaWN0cyB0aGUgdmlldyB0byB0aGUgZ2l2ZW5cclxuICBcdFx0Ly8gZ2VvZ3JhcGhpY2FsIGJvdW5kcywgYm91bmNpbmcgdGhlIHVzZXIgYmFjayBpZiB0aGUgdXNlciB0cmllcyB0byBwYW5cclxuICBcdFx0Ly8gb3V0c2lkZSB0aGUgdmlldy4gVG8gc2V0IHRoZSByZXN0cmljdGlvbiBkeW5hbWljYWxseSwgdXNlXHJcbiAgXHRcdC8vIFtgc2V0TWF4Qm91bmRzYF0oI21hcC1zZXRtYXhib3VuZHMpIG1ldGhvZC5cclxuICBcdFx0bWF4Qm91bmRzOiB1bmRlZmluZWQsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJlbmRlcmVyOiBSZW5kZXJlciA9ICpcclxuICBcdFx0Ly8gVGhlIGRlZmF1bHQgbWV0aG9kIGZvciBkcmF3aW5nIHZlY3RvciBsYXllcnMgb24gdGhlIG1hcC4gYEwuU1ZHYFxyXG4gIFx0XHQvLyBvciBgTC5DYW52YXNgIGJ5IGRlZmF1bHQgZGVwZW5kaW5nIG9uIGJyb3dzZXIgc3VwcG9ydC5cclxuICBcdFx0cmVuZGVyZXI6IHVuZGVmaW5lZCxcclxuXHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBBbmltYXRpb24gT3B0aW9uc1xyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21BbmltYXRpb246IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIG1hcCB6b29tIGFuaW1hdGlvbiBpcyBlbmFibGVkLiBCeSBkZWZhdWx0IGl0J3MgZW5hYmxlZFxyXG4gIFx0XHQvLyBpbiBhbGwgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IENTUzMgVHJhbnNpdGlvbnMgZXhjZXB0IEFuZHJvaWQuXHJcbiAgXHRcdHpvb21BbmltYXRpb246IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21BbmltYXRpb25UaHJlc2hvbGQ6IE51bWJlciA9IDRcclxuICBcdFx0Ly8gV29uJ3QgYW5pbWF0ZSB6b29tIGlmIHRoZSB6b29tIGRpZmZlcmVuY2UgZXhjZWVkcyB0aGlzIHZhbHVlLlxyXG4gIFx0XHR6b29tQW5pbWF0aW9uVGhyZXNob2xkOiA0LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBmYWRlQW5pbWF0aW9uOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB0aWxlIGZhZGUgYW5pbWF0aW9uIGlzIGVuYWJsZWQuIEJ5IGRlZmF1bHQgaXQncyBlbmFibGVkXHJcbiAgXHRcdC8vIGluIGFsbCBicm93c2VycyB0aGF0IHN1cHBvcnQgQ1NTMyBUcmFuc2l0aW9ucyBleGNlcHQgQW5kcm9pZC5cclxuICBcdFx0ZmFkZUFuaW1hdGlvbjogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWFya2VyWm9vbUFuaW1hdGlvbjogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciBtYXJrZXJzIGFuaW1hdGUgdGhlaXIgem9vbSB3aXRoIHRoZSB6b29tIGFuaW1hdGlvbiwgaWYgZGlzYWJsZWRcclxuICBcdFx0Ly8gdGhleSB3aWxsIGRpc2FwcGVhciBmb3IgdGhlIGxlbmd0aCBvZiB0aGUgYW5pbWF0aW9uLiBCeSBkZWZhdWx0IGl0J3NcclxuICBcdFx0Ly8gZW5hYmxlZCBpbiBhbGwgYnJvd3NlcnMgdGhhdCBzdXBwb3J0IENTUzMgVHJhbnNpdGlvbnMgZXhjZXB0IEFuZHJvaWQuXHJcbiAgXHRcdG1hcmtlclpvb21BbmltYXRpb246IHRydWUsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHRyYW5zZm9ybTNETGltaXQ6IE51bWJlciA9IDJeMjNcclxuICBcdFx0Ly8gRGVmaW5lcyB0aGUgbWF4aW11bSBzaXplIG9mIGEgQ1NTIHRyYW5zbGF0aW9uIHRyYW5zZm9ybS4gVGhlIGRlZmF1bHRcclxuICBcdFx0Ly8gdmFsdWUgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkIHVubGVzcyBhIHdlYiBicm93c2VyIHBvc2l0aW9ucyBsYXllcnMgaW5cclxuICBcdFx0Ly8gdGhlIHdyb25nIHBsYWNlIGFmdGVyIGRvaW5nIGEgbGFyZ2UgYHBhbkJ5YC5cclxuICBcdFx0dHJhbnNmb3JtM0RMaW1pdDogODM4ODYwOCwgLy8gUHJlY2lzaW9uIGxpbWl0IG9mIGEgMzItYml0IGZsb2F0XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbVNuYXA6IE51bWJlciA9IDFcclxuICBcdFx0Ly8gRm9yY2VzIHRoZSBtYXAncyB6b29tIGxldmVsIHRvIGFsd2F5cyBiZSBhIG11bHRpcGxlIG9mIHRoaXMsIHBhcnRpY3VsYXJseVxyXG4gIFx0XHQvLyByaWdodCBhZnRlciBhIFtgZml0Qm91bmRzKClgXSgjbWFwLWZpdGJvdW5kcykgb3IgYSBwaW5jaC16b29tLlxyXG4gIFx0XHQvLyBCeSBkZWZhdWx0LCB0aGUgem9vbSBsZXZlbCBzbmFwcyB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyOyBsb3dlciB2YWx1ZXNcclxuICBcdFx0Ly8gKGUuZy4gYDAuNWAgb3IgYDAuMWApIGFsbG93IGZvciBncmVhdGVyIGdyYW51bGFyaXR5LiBBIHZhbHVlIG9mIGAwYFxyXG4gIFx0XHQvLyBtZWFucyB0aGUgem9vbSBsZXZlbCB3aWxsIG5vdCBiZSBzbmFwcGVkIGFmdGVyIGBmaXRCb3VuZHNgIG9yIGEgcGluY2gtem9vbS5cclxuICBcdFx0em9vbVNuYXA6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21EZWx0YTogTnVtYmVyID0gMVxyXG4gIFx0XHQvLyBDb250cm9scyBob3cgbXVjaCB0aGUgbWFwJ3Mgem9vbSBsZXZlbCB3aWxsIGNoYW5nZSBhZnRlciBhXHJcbiAgXHRcdC8vIFtgem9vbUluKClgXSgjbWFwLXpvb21pbiksIFtgem9vbU91dCgpYF0oI21hcC16b29tb3V0KSwgcHJlc3NpbmcgYCtgXHJcbiAgXHRcdC8vIG9yIGAtYCBvbiB0aGUga2V5Ym9hcmQsIG9yIHVzaW5nIHRoZSBbem9vbSBjb250cm9sc10oI2NvbnRyb2wtem9vbSkuXHJcbiAgXHRcdC8vIFZhbHVlcyBzbWFsbGVyIHRoYW4gYDFgIChlLmcuIGAwLjVgKSBhbGxvdyBmb3IgZ3JlYXRlciBncmFudWxhcml0eS5cclxuICBcdFx0em9vbURlbHRhOiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB0cmFja1Jlc2l6ZTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFwIGF1dG9tYXRpY2FsbHkgaGFuZGxlcyBicm93c2VyIHdpbmRvdyByZXNpemUgdG8gdXBkYXRlIGl0c2VsZi5cclxuICBcdFx0dHJhY2tSZXNpemU6IHRydWVcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGlkLCBvcHRpb25zKSB7IC8vIChIVE1MRWxlbWVudCBvciBTdHJpbmcsIE9iamVjdClcclxuICBcdFx0b3B0aW9ucyA9IHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHQvLyBNYWtlIHN1cmUgdG8gYXNzaWduIGludGVybmFsIGZsYWdzIGF0IHRoZSBiZWdpbm5pbmcsXHJcbiAgXHRcdC8vIHRvIGF2b2lkIGluY29uc2lzdGVudCBzdGF0ZSBpbiBzb21lIGVkZ2UgY2FzZXMuXHJcbiAgXHRcdHRoaXMuX2hhbmRsZXJzID0gW107XHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IHt9O1xyXG4gIFx0XHR0aGlzLl96b29tQm91bmRMYXllcnMgPSB7fTtcclxuICBcdFx0dGhpcy5fc2l6ZUNoYW5nZWQgPSB0cnVlO1xyXG5cclxuICBcdFx0dGhpcy5faW5pdENvbnRhaW5lcihpZCk7XHJcbiAgXHRcdHRoaXMuX2luaXRMYXlvdXQoKTtcclxuXHJcbiAgXHRcdC8vIGhhY2sgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzE5ODBcclxuICBcdFx0dGhpcy5fb25SZXNpemUgPSBiaW5kKHRoaXMuX29uUmVzaXplLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2luaXRFdmVudHMoKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm1heEJvdW5kcykge1xyXG4gIFx0XHRcdHRoaXMuc2V0TWF4Qm91bmRzKG9wdGlvbnMubWF4Qm91bmRzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMuem9vbSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fem9vbSA9IHRoaXMuX2xpbWl0Wm9vbShvcHRpb25zLnpvb20pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAob3B0aW9ucy5jZW50ZXIgJiYgb3B0aW9ucy56b29tICE9PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR0aGlzLnNldFZpZXcodG9MYXRMbmcob3B0aW9ucy5jZW50ZXIpLCBvcHRpb25zLnpvb20sIHtyZXNldDogdHJ1ZX0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLmNhbGxJbml0SG9va3MoKTtcclxuXHJcbiAgXHRcdC8vIGRvbid0IGFuaW1hdGUgb24gYnJvd3NlcnMgd2l0aG91dCBoYXJkd2FyZS1hY2NlbGVyYXRlZCB0cmFuc2l0aW9ucyBvciBvbGQgQW5kcm9pZC9PcGVyYVxyXG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSBUUkFOU0lUSU9OICYmIGFueTNkICYmICFtb2JpbGVPcGVyYSAmJlxyXG4gIFx0XHRcdFx0dGhpcy5vcHRpb25zLnpvb21BbmltYXRpb247XHJcblxyXG4gIFx0XHQvLyB6b29tIHRyYW5zaXRpb25zIHJ1biB3aXRoIHRoZSBzYW1lIGR1cmF0aW9uIGZvciBhbGwgbGF5ZXJzLCBzbyBpZiBvbmUgb2YgdHJhbnNpdGlvbmVuZCBldmVudHNcclxuICBcdFx0Ly8gaGFwcGVucyBhZnRlciBzdGFydGluZyB6b29tIGFuaW1hdGlvbiAocHJvcGFnYXRpbmcgdG8gdGhlIG1hcCBwYW5lKSwgd2Uga25vdyB0aGF0IGl0IGVuZGVkIGdsb2JhbGx5XHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHtcclxuICBcdFx0XHR0aGlzLl9jcmVhdGVBbmltUHJveHkoKTtcclxuICBcdFx0XHRvbih0aGlzLl9wcm94eSwgVFJBTlNJVElPTl9FTkQsIHRoaXMuX2NhdGNoVHJhbnNpdGlvbkVuZCwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2FkZExheWVycyh0aGlzLm9wdGlvbnMubGF5ZXJzKTtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE1ldGhvZHMgZm9yIG1vZGlmeWluZyBtYXAgc3RhdGVcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFZpZXcoY2VudGVyOiBMYXRMbmcsIHpvb206IE51bWJlciwgb3B0aW9ucz86IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB2aWV3IG9mIHRoZSBtYXAgKGdlb2dyYXBoaWNhbCBjZW50ZXIgYW5kIHpvb20pIHdpdGggdGhlIGdpdmVuXHJcbiAgXHQvLyBhbmltYXRpb24gb3B0aW9ucy5cclxuICBcdHNldFZpZXc6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdHpvb20gPSB6b29tID09PSB1bmRlZmluZWQgPyB0aGlzLl96b29tIDogdGhpcy5fbGltaXRab29tKHpvb20pO1xyXG4gIFx0XHRjZW50ZXIgPSB0aGlzLl9saW1pdENlbnRlcih0b0xhdExuZyhjZW50ZXIpLCB6b29tLCB0aGlzLm9wdGlvbnMubWF4Qm91bmRzKTtcclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG4gIFx0XHR0aGlzLl9zdG9wKCk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkICYmICFvcHRpb25zLnJlc2V0ICYmIG9wdGlvbnMgIT09IHRydWUpIHtcclxuXHJcbiAgXHRcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0XHRvcHRpb25zLnpvb20gPSBleHRlbmQoe2FuaW1hdGU6IG9wdGlvbnMuYW5pbWF0ZX0sIG9wdGlvbnMuem9vbSk7XHJcbiAgXHRcdFx0XHRvcHRpb25zLnBhbiA9IGV4dGVuZCh7YW5pbWF0ZTogb3B0aW9ucy5hbmltYXRlLCBkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbn0sIG9wdGlvbnMucGFuKTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdC8vIHRyeSBhbmltYXRpbmcgcGFuIG9yIHpvb21cclxuICBcdFx0XHR2YXIgbW92ZWQgPSAodGhpcy5fem9vbSAhPT0gem9vbSkgP1xyXG4gIFx0XHRcdFx0dGhpcy5fdHJ5QW5pbWF0ZWRab29tICYmIHRoaXMuX3RyeUFuaW1hdGVkWm9vbShjZW50ZXIsIHpvb20sIG9wdGlvbnMuem9vbSkgOlxyXG4gIFx0XHRcdFx0dGhpcy5fdHJ5QW5pbWF0ZWRQYW4oY2VudGVyLCBvcHRpb25zLnBhbik7XHJcblxyXG4gIFx0XHRcdGlmIChtb3ZlZCkge1xyXG4gIFx0XHRcdFx0Ly8gcHJldmVudCByZXNpemUgaGFuZGxlciBjYWxsLCB0aGUgdmlldyB3aWxsIHJlZnJlc2ggYWZ0ZXIgYW5pbWF0aW9uIGFueXdheVxyXG4gIFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3NpemVUaW1lcik7XHJcbiAgXHRcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGFuaW1hdGlvbiBkaWRuJ3Qgc3RhcnQsIGp1c3QgcmVzZXQgdGhlIG1hcCB2aWV3XHJcbiAgXHRcdHRoaXMuX3Jlc2V0VmlldyhjZW50ZXIsIHpvb20pO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0Wm9vbSh6b29tOiBOdW1iZXIsIG9wdGlvbnM/OiBab29tL3BhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgem9vbSBvZiB0aGUgbWFwLlxyXG4gIFx0c2V0Wm9vbTogZnVuY3Rpb24gKHpvb20sIG9wdGlvbnMpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aGlzLl96b29tID0gem9vbTtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksIHpvb20sIHt6b29tOiBvcHRpb25zfSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgem9vbUluKGRlbHRhPzogTnVtYmVyLCBvcHRpb25zPzogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gSW5jcmVhc2VzIHRoZSB6b29tIG9mIHRoZSBtYXAgYnkgYGRlbHRhYCAoW2B6b29tRGVsdGFgXSgjbWFwLXpvb21kZWx0YSkgYnkgZGVmYXVsdCkuXHJcbiAgXHR6b29tSW46IGZ1bmN0aW9uIChkZWx0YSwgb3B0aW9ucykge1xyXG4gIFx0XHRkZWx0YSA9IGRlbHRhIHx8IChhbnkzZCA/IHRoaXMub3B0aW9ucy56b29tRGVsdGEgOiAxKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tICsgZGVsdGEsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHpvb21PdXQoZGVsdGE/OiBOdW1iZXIsIG9wdGlvbnM/OiBab29tIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBEZWNyZWFzZXMgdGhlIHpvb20gb2YgdGhlIG1hcCBieSBgZGVsdGFgIChbYHpvb21EZWx0YWBdKCNtYXAtem9vbWRlbHRhKSBieSBkZWZhdWx0KS5cclxuICBcdHpvb21PdXQ6IGZ1bmN0aW9uIChkZWx0YSwgb3B0aW9ucykge1xyXG4gIFx0XHRkZWx0YSA9IGRlbHRhIHx8IChhbnkzZCA/IHRoaXMub3B0aW9ucy56b29tRGVsdGEgOiAxKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Wm9vbSh0aGlzLl96b29tIC0gZGVsdGEsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpvb21Bcm91bmQobGF0bG5nOiBMYXRMbmcsIHpvb206IE51bWJlciwgb3B0aW9uczogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gWm9vbXMgdGhlIG1hcCB3aGlsZSBrZWVwaW5nIGEgc3BlY2lmaWVkIGdlb2dyYXBoaWNhbCBwb2ludCBvbiB0aGUgbWFwXHJcbiAgXHQvLyBzdGF0aW9uYXJ5IChlLmcuIHVzZWQgaW50ZXJuYWxseSBmb3Igc2Nyb2xsIHpvb20gYW5kIGRvdWJsZS1jbGljayB6b29tKS5cclxuICBcdC8vIEBhbHRlcm5hdGl2ZVxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRab29tQXJvdW5kKG9mZnNldDogUG9pbnQsIHpvb206IE51bWJlciwgb3B0aW9uczogWm9vbSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gWm9vbXMgdGhlIG1hcCB3aGlsZSBrZWVwaW5nIGEgc3BlY2lmaWVkIHBpeGVsIG9uIHRoZSBtYXAgKHJlbGF0aXZlIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIpIHN0YXRpb25hcnkuXHJcbiAgXHRzZXRab29tQXJvdW5kOiBmdW5jdGlvbiAobGF0bG5nLCB6b29tLCBvcHRpb25zKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuZ2V0Wm9vbVNjYWxlKHpvb20pLFxyXG4gIFx0XHQgICAgdmlld0hhbGYgPSB0aGlzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxcclxuICBcdFx0ICAgIGNvbnRhaW5lclBvaW50ID0gbGF0bG5nIGluc3RhbmNlb2YgUG9pbnQgPyBsYXRsbmcgOiB0aGlzLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQobGF0bG5nKSxcclxuXHJcbiAgXHRcdCAgICBjZW50ZXJPZmZzZXQgPSBjb250YWluZXJQb2ludC5zdWJ0cmFjdCh2aWV3SGFsZikubXVsdGlwbHlCeSgxIC0gMSAvIHNjYWxlKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IHRoaXMuY29udGFpbmVyUG9pbnRUb0xhdExuZyh2aWV3SGFsZi5hZGQoY2VudGVyT2Zmc2V0KSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KG5ld0NlbnRlciwgem9vbSwge3pvb206IG9wdGlvbnN9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldEJvdW5kc0NlbnRlclpvb206IGZ1bmN0aW9uIChib3VuZHMsIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG4gIFx0XHRib3VuZHMgPSBib3VuZHMuZ2V0Qm91bmRzID8gYm91bmRzLmdldEJvdW5kcygpIDogdG9MYXRMbmdCb3VuZHMoYm91bmRzKTtcclxuXHJcbiAgXHRcdHZhciBwYWRkaW5nVEwgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ1RvcExlZnQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ0JvdHRvbVJpZ2h0IHx8IG9wdGlvbnMucGFkZGluZyB8fCBbMCwgMF0pLFxyXG5cclxuICBcdFx0ICAgIHpvb20gPSB0aGlzLmdldEJvdW5kc1pvb20oYm91bmRzLCBmYWxzZSwgcGFkZGluZ1RMLmFkZChwYWRkaW5nQlIpKTtcclxuXHJcbiAgXHRcdHpvb20gPSAodHlwZW9mIG9wdGlvbnMubWF4Wm9vbSA9PT0gJ251bWJlcicpID8gTWF0aC5taW4ob3B0aW9ucy5tYXhab29tLCB6b29tKSA6IHpvb207XHJcblxyXG4gIFx0XHRpZiAoem9vbSA9PT0gSW5maW5pdHkpIHtcclxuICBcdFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdFx0Y2VudGVyOiBib3VuZHMuZ2V0Q2VudGVyKCksXHJcbiAgXHRcdFx0XHR6b29tOiB6b29tXHJcbiAgXHRcdFx0fTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHBhZGRpbmdPZmZzZXQgPSBwYWRkaW5nQlIuc3VidHJhY3QocGFkZGluZ1RMKS5kaXZpZGVCeSgyKSxcclxuXHJcbiAgXHRcdCAgICBzd1BvaW50ID0gdGhpcy5wcm9qZWN0KGJvdW5kcy5nZXRTb3V0aFdlc3QoKSwgem9vbSksXHJcbiAgXHRcdCAgICBuZVBvaW50ID0gdGhpcy5wcm9qZWN0KGJvdW5kcy5nZXROb3J0aEVhc3QoKSwgem9vbSksXHJcbiAgXHRcdCAgICBjZW50ZXIgPSB0aGlzLnVucHJvamVjdChzd1BvaW50LmFkZChuZVBvaW50KS5kaXZpZGVCeSgyKS5hZGQocGFkZGluZ09mZnNldCksIHpvb20pO1xyXG5cclxuICBcdFx0cmV0dXJuIHtcclxuICBcdFx0XHRjZW50ZXI6IGNlbnRlcixcclxuICBcdFx0XHR6b29tOiB6b29tXHJcbiAgXHRcdH07XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZml0Qm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogZml0Qm91bmRzIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIGEgbWFwIHZpZXcgdGhhdCBjb250YWlucyB0aGUgZ2l2ZW4gZ2VvZ3JhcGhpY2FsIGJvdW5kcyB3aXRoIHRoZVxyXG4gIFx0Ly8gbWF4aW11bSB6b29tIGxldmVsIHBvc3NpYmxlLlxyXG4gIFx0Zml0Qm91bmRzOiBmdW5jdGlvbiAoYm91bmRzLCBvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKCFib3VuZHMuaXNWYWxpZCgpKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdCb3VuZHMgYXJlIG5vdCB2YWxpZC4nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHRhcmdldCA9IHRoaXMuX2dldEJvdW5kc0NlbnRlclpvb20oYm91bmRzLCBvcHRpb25zKTtcclxuICBcdFx0cmV0dXJuIHRoaXMuc2V0Vmlldyh0YXJnZXQuY2VudGVyLCB0YXJnZXQuem9vbSwgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZml0V29ybGQob3B0aW9ucz86IGZpdEJvdW5kcyBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyBhIG1hcCB2aWV3IHRoYXQgbW9zdGx5IGNvbnRhaW5zIHRoZSB3aG9sZSB3b3JsZCB3aXRoIHRoZSBtYXhpbXVtXHJcbiAgXHQvLyB6b29tIGxldmVsIHBvc3NpYmxlLlxyXG4gIFx0Zml0V29ybGQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmZpdEJvdW5kcyhbWy05MCwgLTE4MF0sIFs5MCwgMTgwXV0sIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhblRvKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogUGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBQYW5zIHRoZSBtYXAgdG8gYSBnaXZlbiBjZW50ZXIuXHJcbiAgXHRwYW5UbzogZnVuY3Rpb24gKGNlbnRlciwgb3B0aW9ucykgeyAvLyAoTGF0TG5nKVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRWaWV3KGNlbnRlciwgdGhpcy5fem9vbSwge3Bhbjogb3B0aW9uc30pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHBhbkJ5KG9mZnNldDogUG9pbnQsIG9wdGlvbnM/OiBQYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCBieSBhIGdpdmVuIG51bWJlciBvZiBwaXhlbHMgKGFuaW1hdGVkKS5cclxuICBcdHBhbkJ5OiBmdW5jdGlvbiAob2Zmc2V0LCBvcHRpb25zKSB7XHJcbiAgXHRcdG9mZnNldCA9IHRvUG9pbnQob2Zmc2V0KS5yb3VuZCgpO1xyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgXHRcdGlmICghb2Zmc2V0LnggJiYgIW9mZnNldC55KSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbW92ZWVuZCcpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdC8vIElmIHdlIHBhbiB0b28gZmFyLCBDaHJvbWUgZ2V0cyBpc3N1ZXMgd2l0aCB0aWxlc1xyXG4gIFx0XHQvLyBhbmQgbWFrZXMgdGhlbSBkaXNhcHBlYXIgb3IgYXBwZWFyIGluIHRoZSB3cm9uZyBwbGFjZSAoc2xpZ2h0bHkgb2Zmc2V0KSAjMjYwMlxyXG4gIFx0XHRpZiAob3B0aW9ucy5hbmltYXRlICE9PSB0cnVlICYmICF0aGlzLmdldFNpemUoKS5jb250YWlucyhvZmZzZXQpKSB7XHJcbiAgXHRcdFx0dGhpcy5fcmVzZXRWaWV3KHRoaXMudW5wcm9qZWN0KHRoaXMucHJvamVjdCh0aGlzLmdldENlbnRlcigpKS5hZGQob2Zmc2V0KSksIHRoaXMuZ2V0Wm9vbSgpKTtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCF0aGlzLl9wYW5BbmltKSB7XHJcbiAgXHRcdFx0dGhpcy5fcGFuQW5pbSA9IG5ldyBQb3NBbmltYXRpb24oKTtcclxuXHJcbiAgXHRcdFx0dGhpcy5fcGFuQW5pbS5vbih7XHJcbiAgXHRcdFx0XHQnc3RlcCc6IHRoaXMuX29uUGFuVHJhbnNpdGlvblN0ZXAsXHJcbiAgXHRcdFx0XHQnZW5kJzogdGhpcy5fb25QYW5UcmFuc2l0aW9uRW5kXHJcbiAgXHRcdFx0fSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGRvbid0IGZpcmUgbW92ZXN0YXJ0IGlmIGFuaW1hdGluZyBpbmVydGlhXHJcbiAgXHRcdGlmICghb3B0aW9ucy5ub01vdmVTdGFydCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGFuaW1hdGUgcGFuIHVubGVzcyBhbmltYXRlOiBmYWxzZSBzcGVjaWZpZWRcclxuICBcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gZmFsc2UpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCAnbGVhZmxldC1wYW4tYW5pbScpO1xyXG5cclxuICBcdFx0XHR2YXIgbmV3UG9zID0gdGhpcy5fZ2V0TWFwUGFuZVBvcygpLnN1YnRyYWN0KG9mZnNldCkucm91bmQoKTtcclxuICBcdFx0XHR0aGlzLl9wYW5BbmltLnJ1bih0aGlzLl9tYXBQYW5lLCBuZXdQb3MsIG9wdGlvbnMuZHVyYXRpb24gfHwgMC4yNSwgb3B0aW9ucy5lYXNlTGluZWFyaXR5KTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0aGlzLl9yYXdQYW5CeShvZmZzZXQpO1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZScpLmZpcmUoJ21vdmVlbmQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZmx5VG8obGF0bG5nOiBMYXRMbmcsIHpvb20/OiBOdW1iZXIsIG9wdGlvbnM/OiBab29tL3BhbiBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgdmlldyBvZiB0aGUgbWFwIChnZW9ncmFwaGljYWwgY2VudGVyIGFuZCB6b29tKSBwZXJmb3JtaW5nIGEgc21vb3RoXHJcbiAgXHQvLyBwYW4tem9vbSBhbmltYXRpb24uXHJcbiAgXHRmbHlUbzogZnVuY3Rpb24gKHRhcmdldENlbnRlciwgdGFyZ2V0Wm9vbSwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgPT09IGZhbHNlIHx8ICFhbnkzZCkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzLnNldFZpZXcodGFyZ2V0Q2VudGVyLCB0YXJnZXRab29tLCBvcHRpb25zKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fc3RvcCgpO1xyXG5cclxuICBcdFx0dmFyIGZyb20gPSB0aGlzLnByb2plY3QodGhpcy5nZXRDZW50ZXIoKSksXHJcbiAgXHRcdCAgICB0byA9IHRoaXMucHJvamVjdCh0YXJnZXRDZW50ZXIpLFxyXG4gIFx0XHQgICAgc2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpLFxyXG4gIFx0XHQgICAgc3RhcnRab29tID0gdGhpcy5fem9vbTtcclxuXHJcbiAgXHRcdHRhcmdldENlbnRlciA9IHRvTGF0TG5nKHRhcmdldENlbnRlcik7XHJcbiAgXHRcdHRhcmdldFpvb20gPSB0YXJnZXRab29tID09PSB1bmRlZmluZWQgPyBzdGFydFpvb20gOiB0YXJnZXRab29tO1xyXG5cclxuICBcdFx0dmFyIHcwID0gTWF0aC5tYXgoc2l6ZS54LCBzaXplLnkpLFxyXG4gIFx0XHQgICAgdzEgPSB3MCAqIHRoaXMuZ2V0Wm9vbVNjYWxlKHN0YXJ0Wm9vbSwgdGFyZ2V0Wm9vbSksXHJcbiAgXHRcdCAgICB1MSA9ICh0by5kaXN0YW5jZVRvKGZyb20pKSB8fCAxLFxyXG4gIFx0XHQgICAgcmhvID0gMS40MixcclxuICBcdFx0ICAgIHJobzIgPSByaG8gKiByaG87XHJcblxyXG4gIFx0XHRmdW5jdGlvbiByKGkpIHtcclxuICBcdFx0XHR2YXIgczEgPSBpID8gLTEgOiAxLFxyXG4gIFx0XHRcdCAgICBzMiA9IGkgPyB3MSA6IHcwLFxyXG4gIFx0XHRcdCAgICB0MSA9IHcxICogdzEgLSB3MCAqIHcwICsgczEgKiByaG8yICogcmhvMiAqIHUxICogdTEsXHJcbiAgXHRcdFx0ICAgIGIxID0gMiAqIHMyICogcmhvMiAqIHUxLFxyXG4gIFx0XHRcdCAgICBiID0gdDEgLyBiMSxcclxuICBcdFx0XHQgICAgc3EgPSBNYXRoLnNxcnQoYiAqIGIgKyAxKSAtIGI7XHJcblxyXG4gIFx0XHRcdCAgICAvLyB3b3JrYXJvdW5kIGZvciBmbG9hdGluZyBwb2ludCBwcmVjaXNpb24gYnVnIHdoZW4gc3EgPSAwLCBsb2cgPSAtSW5maW5pdGUsXHJcbiAgXHRcdFx0ICAgIC8vIHRodXMgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIGluIGZseVRvXHJcbiAgXHRcdFx0ICAgIHZhciBsb2cgPSBzcSA8IDAuMDAwMDAwMDAxID8gLTE4IDogTWF0aC5sb2coc3EpO1xyXG5cclxuICBcdFx0XHRyZXR1cm4gbG9nO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRmdW5jdGlvbiBzaW5oKG4pIHsgcmV0dXJuIChNYXRoLmV4cChuKSAtIE1hdGguZXhwKC1uKSkgLyAyOyB9XHJcbiAgXHRcdGZ1bmN0aW9uIGNvc2gobikgeyByZXR1cm4gKE1hdGguZXhwKG4pICsgTWF0aC5leHAoLW4pKSAvIDI7IH1cclxuICBcdFx0ZnVuY3Rpb24gdGFuaChuKSB7IHJldHVybiBzaW5oKG4pIC8gY29zaChuKTsgfVxyXG5cclxuICBcdFx0dmFyIHIwID0gcigwKTtcclxuXHJcbiAgXHRcdGZ1bmN0aW9uIHcocykgeyByZXR1cm4gdzAgKiAoY29zaChyMCkgLyBjb3NoKHIwICsgcmhvICogcykpOyB9XHJcbiAgXHRcdGZ1bmN0aW9uIHUocykgeyByZXR1cm4gdzAgKiAoY29zaChyMCkgKiB0YW5oKHIwICsgcmhvICogcykgLSBzaW5oKHIwKSkgLyByaG8yOyB9XHJcblxyXG4gIFx0XHRmdW5jdGlvbiBlYXNlT3V0KHQpIHsgcmV0dXJuIDEgLSBNYXRoLnBvdygxIC0gdCwgMS41KTsgfVxyXG5cclxuICBcdFx0dmFyIHN0YXJ0ID0gRGF0ZS5ub3coKSxcclxuICBcdFx0ICAgIFMgPSAocigxKSAtIHIwKSAvIHJobyxcclxuICBcdFx0ICAgIGR1cmF0aW9uID0gb3B0aW9ucy5kdXJhdGlvbiA/IDEwMDAgKiBvcHRpb25zLmR1cmF0aW9uIDogMTAwMCAqIFMgKiAwLjg7XHJcblxyXG4gIFx0XHRmdW5jdGlvbiBmcmFtZSgpIHtcclxuICBcdFx0XHR2YXIgdCA9IChEYXRlLm5vdygpIC0gc3RhcnQpIC8gZHVyYXRpb24sXHJcbiAgXHRcdFx0ICAgIHMgPSBlYXNlT3V0KHQpICogUztcclxuXHJcbiAgXHRcdFx0aWYgKHQgPD0gMSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fZmx5VG9GcmFtZSA9IHJlcXVlc3RBbmltRnJhbWUoZnJhbWUsIHRoaXMpO1xyXG5cclxuICBcdFx0XHRcdHRoaXMuX21vdmUoXHJcbiAgXHRcdFx0XHRcdHRoaXMudW5wcm9qZWN0KGZyb20uYWRkKHRvLnN1YnRyYWN0KGZyb20pLm11bHRpcGx5QnkodShzKSAvIHUxKSksIHN0YXJ0Wm9vbSksXHJcbiAgXHRcdFx0XHRcdHRoaXMuZ2V0U2NhbGVab29tKHcwIC8gdyhzKSwgc3RhcnRab29tKSxcclxuICBcdFx0XHRcdFx0e2ZseVRvOiB0cnVlfSk7XHJcblxyXG4gIFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHR0aGlzXHJcbiAgXHRcdFx0XHRcdC5fbW92ZSh0YXJnZXRDZW50ZXIsIHRhcmdldFpvb20pXHJcbiAgXHRcdFx0XHRcdC5fbW92ZUVuZCh0cnVlKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX21vdmVTdGFydCh0cnVlLCBvcHRpb25zLm5vTW92ZVN0YXJ0KTtcclxuXHJcbiAgXHRcdGZyYW1lLmNhbGwodGhpcyk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGZseVRvQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzLCBvcHRpb25zPzogZml0Qm91bmRzIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBTZXRzIHRoZSB2aWV3IG9mIHRoZSBtYXAgd2l0aCBhIHNtb290aCBhbmltYXRpb24gbGlrZSBbYGZseVRvYF0oI21hcC1mbHl0byksXHJcbiAgXHQvLyBidXQgdGFrZXMgYSBib3VuZHMgcGFyYW1ldGVyIGxpa2UgW2BmaXRCb3VuZHNgXSgjbWFwLWZpdGJvdW5kcykuXHJcbiAgXHRmbHlUb0JvdW5kczogZnVuY3Rpb24gKGJvdW5kcywgb3B0aW9ucykge1xyXG4gIFx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5fZ2V0Qm91bmRzQ2VudGVyWm9vbShib3VuZHMsIG9wdGlvbnMpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5mbHlUbyh0YXJnZXQuY2VudGVyLCB0YXJnZXQuem9vbSwgb3B0aW9ucyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TWF4Qm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogdGhpc1xyXG4gIFx0Ly8gUmVzdHJpY3RzIHRoZSBtYXAgdmlldyB0byB0aGUgZ2l2ZW4gYm91bmRzIChzZWUgdGhlIFttYXhCb3VuZHNdKCNtYXAtbWF4Ym91bmRzKSBvcHRpb24pLlxyXG4gIFx0c2V0TWF4Qm91bmRzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdGJvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRpZiAoIWJvdW5kcy5pc1ZhbGlkKCkpIHtcclxuICBcdFx0XHR0aGlzLm9wdGlvbnMubWF4Qm91bmRzID0gbnVsbDtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5vZmYoJ21vdmVlbmQnLCB0aGlzLl9wYW5JbnNpZGVNYXhCb3VuZHMpO1xyXG4gIFx0XHR9IGVsc2UgaWYgKHRoaXMub3B0aW9ucy5tYXhCb3VuZHMpIHtcclxuICBcdFx0XHR0aGlzLm9mZignbW92ZWVuZCcsIHRoaXMuX3Bhbkluc2lkZU1heEJvdW5kcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMub3B0aW9ucy5tYXhCb3VuZHMgPSBib3VuZHM7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLm9uKCdtb3ZlZW5kJywgdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRNaW5ab29tKHpvb206IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGxvd2VyIGxpbWl0IGZvciB0aGUgYXZhaWxhYmxlIHpvb20gbGV2ZWxzIChzZWUgdGhlIFttaW5ab29tXSgjbWFwLW1pbnpvb20pIG9wdGlvbikuXHJcbiAgXHRzZXRNaW5ab29tOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHR2YXIgb2xkWm9vbSA9IHRoaXMub3B0aW9ucy5taW5ab29tO1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMubWluWm9vbSA9IHpvb207XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkICYmIG9sZFpvb20gIT09IHpvb20pIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb21sZXZlbHNjaGFuZ2UnKTtcclxuXHJcbiAgXHRcdFx0aWYgKHRoaXMuZ2V0Wm9vbSgpIDwgdGhpcy5vcHRpb25zLm1pblpvb20pIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLnNldFpvb20oem9vbSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRNYXhab29tKHpvb206IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHVwcGVyIGxpbWl0IGZvciB0aGUgYXZhaWxhYmxlIHpvb20gbGV2ZWxzIChzZWUgdGhlIFttYXhab29tXSgjbWFwLW1heHpvb20pIG9wdGlvbikuXHJcbiAgXHRzZXRNYXhab29tOiBmdW5jdGlvbiAoem9vbSkge1xyXG4gIFx0XHR2YXIgb2xkWm9vbSA9IHRoaXMub3B0aW9ucy5tYXhab29tO1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMubWF4Wm9vbSA9IHpvb207XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkICYmIG9sZFpvb20gIT09IHpvb20pIHtcclxuICBcdFx0XHR0aGlzLmZpcmUoJ3pvb21sZXZlbHNjaGFuZ2UnKTtcclxuXHJcbiAgXHRcdFx0aWYgKHRoaXMuZ2V0Wm9vbSgpID4gdGhpcy5vcHRpb25zLm1heFpvb20pIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLnNldFpvb20oem9vbSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwYW5JbnNpZGVCb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBQYW4gb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCB0byB0aGUgY2xvc2VzdCB2aWV3IHRoYXQgd291bGQgbGllIGluc2lkZSB0aGUgZ2l2ZW4gYm91bmRzIChpZiBpdCdzIG5vdCBhbHJlYWR5KSwgY29udHJvbGxpbmcgdGhlIGFuaW1hdGlvbiB1c2luZyB0aGUgb3B0aW9ucyBzcGVjaWZpYywgaWYgYW55LlxyXG4gIFx0cGFuSW5zaWRlQm91bmRzOiBmdW5jdGlvbiAoYm91bmRzLCBvcHRpb25zKSB7XHJcbiAgXHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IHRydWU7XHJcbiAgXHRcdHZhciBjZW50ZXIgPSB0aGlzLmdldENlbnRlcigpLFxyXG4gIFx0XHQgICAgbmV3Q2VudGVyID0gdGhpcy5fbGltaXRDZW50ZXIoY2VudGVyLCB0aGlzLl96b29tLCB0b0xhdExuZ0JvdW5kcyhib3VuZHMpKTtcclxuXHJcbiAgXHRcdGlmICghY2VudGVyLmVxdWFscyhuZXdDZW50ZXIpKSB7XHJcbiAgXHRcdFx0dGhpcy5wYW5UbyhuZXdDZW50ZXIsIG9wdGlvbnMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9lbmZvcmNpbmdCb3VuZHMgPSBmYWxzZTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcGFuSW5zaWRlKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPzogb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFBhbnMgdGhlIG1hcCB0aGUgbWluaW11bSBhbW91bnQgdG8gbWFrZSB0aGUgYGxhdGxuZ2AgdmlzaWJsZS4gVXNlXHJcbiAgXHQvLyBgcGFkZGluZ2AsIGBwYWRkaW5nVG9wTGVmdGAgYW5kIGBwYWRkaW5nVG9wUmlnaHRgIG9wdGlvbnMgdG8gZml0XHJcbiAgXHQvLyB0aGUgZGlzcGxheSB0byBtb3JlIHJlc3RyaWN0ZWQgYm91bmRzLCBsaWtlIFtgZml0Qm91bmRzYF0oI21hcC1maXRib3VuZHMpLlxyXG4gIFx0Ly8gSWYgYGxhdGxuZ2AgaXMgYWxyZWFkeSB3aXRoaW4gdGhlIChvcHRpb25hbGx5IHBhZGRlZCkgZGlzcGxheSBib3VuZHMsXHJcbiAgXHQvLyB0aGUgbWFwIHdpbGwgbm90IGJlIHBhbm5lZC5cclxuICBcdHBhbkluc2lkZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcclxuXHJcbiAgXHRcdHZhciBwYWRkaW5nVEwgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ1RvcExlZnQgfHwgb3B0aW9ucy5wYWRkaW5nIHx8IFswLCAwXSksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KG9wdGlvbnMucGFkZGluZ0JvdHRvbVJpZ2h0IHx8IG9wdGlvbnMucGFkZGluZyB8fCBbMCwgMF0pLFxyXG4gIFx0XHQgICAgY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKSxcclxuICBcdFx0ICAgIHBpeGVsQ2VudGVyID0gdGhpcy5wcm9qZWN0KGNlbnRlciksXHJcbiAgXHRcdCAgICBwaXhlbFBvaW50ID0gdGhpcy5wcm9qZWN0KGxhdGxuZyksXHJcbiAgXHRcdCAgICBwaXhlbEJvdW5kcyA9IHRoaXMuZ2V0UGl4ZWxCb3VuZHMoKSxcclxuICBcdFx0ICAgIGhhbGZQaXhlbEJvdW5kcyA9IHBpeGVsQm91bmRzLmdldFNpemUoKS5kaXZpZGVCeSgyKSxcclxuICBcdFx0ICAgIHBhZGRlZEJvdW5kcyA9IHRvQm91bmRzKFtwaXhlbEJvdW5kcy5taW4uYWRkKHBhZGRpbmdUTCksIHBpeGVsQm91bmRzLm1heC5zdWJ0cmFjdChwYWRkaW5nQlIpXSk7XHJcblxyXG4gIFx0XHRpZiAoIXBhZGRlZEJvdW5kcy5jb250YWlucyhwaXhlbFBvaW50KSkge1xyXG4gIFx0XHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IHRydWU7XHJcbiAgXHRcdFx0dmFyIGRpZmYgPSBwaXhlbENlbnRlci5zdWJ0cmFjdChwaXhlbFBvaW50KSxcclxuICBcdFx0XHQgICAgbmV3Q2VudGVyID0gdG9Qb2ludChwaXhlbFBvaW50LnggKyBkaWZmLngsIHBpeGVsUG9pbnQueSArIGRpZmYueSk7XHJcblxyXG4gIFx0XHRcdGlmIChwaXhlbFBvaW50LnggPCBwYWRkZWRCb3VuZHMubWluLnggfHwgcGl4ZWxQb2ludC54ID4gcGFkZGVkQm91bmRzLm1heC54KSB7XHJcbiAgXHRcdFx0XHRuZXdDZW50ZXIueCA9IHBpeGVsQ2VudGVyLnggLSBkaWZmLng7XHJcbiAgXHRcdFx0XHRpZiAoZGlmZi54ID4gMCkge1xyXG4gIFx0XHRcdFx0XHRuZXdDZW50ZXIueCArPSBoYWxmUGl4ZWxCb3VuZHMueCAtIHBhZGRpbmdUTC54O1xyXG4gIFx0XHRcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRcdFx0bmV3Q2VudGVyLnggLT0gaGFsZlBpeGVsQm91bmRzLnggLSBwYWRkaW5nQlIueDtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0aWYgKHBpeGVsUG9pbnQueSA8IHBhZGRlZEJvdW5kcy5taW4ueSB8fCBwaXhlbFBvaW50LnkgPiBwYWRkZWRCb3VuZHMubWF4LnkpIHtcclxuICBcdFx0XHRcdG5ld0NlbnRlci55ID0gcGl4ZWxDZW50ZXIueSAtIGRpZmYueTtcclxuICBcdFx0XHRcdGlmIChkaWZmLnkgPiAwKSB7XHJcbiAgXHRcdFx0XHRcdG5ld0NlbnRlci55ICs9IGhhbGZQaXhlbEJvdW5kcy55IC0gcGFkZGluZ1RMLnk7XHJcbiAgXHRcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0XHRuZXdDZW50ZXIueSAtPSBoYWxmUGl4ZWxCb3VuZHMueSAtIHBhZGRpbmdCUi55O1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdH1cclxuICBcdFx0XHR0aGlzLnBhblRvKHRoaXMudW5wcm9qZWN0KG5ld0NlbnRlciksIG9wdGlvbnMpO1xyXG4gIFx0XHRcdHRoaXMuX2VuZm9yY2luZ0JvdW5kcyA9IGZhbHNlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGludmFsaWRhdGVTaXplKG9wdGlvbnM6IFpvb20vcGFuIG9wdGlvbnMpOiB0aGlzXHJcbiAgXHQvLyBDaGVja3MgaWYgdGhlIG1hcCBjb250YWluZXIgc2l6ZSBjaGFuZ2VkIGFuZCB1cGRhdGVzIHRoZSBtYXAgaWYgc28g4oCUXHJcbiAgXHQvLyBjYWxsIGl0IGFmdGVyIHlvdSd2ZSBjaGFuZ2VkIHRoZSBtYXAgc2l6ZSBkeW5hbWljYWxseSwgYWxzbyBhbmltYXRpbmdcclxuICBcdC8vIHBhbiBieSBkZWZhdWx0LiBJZiBgb3B0aW9ucy5wYW5gIGlzIGBmYWxzZWAsIHBhbm5pbmcgd2lsbCBub3Qgb2NjdXIuXHJcbiAgXHQvLyBJZiBgb3B0aW9ucy5kZWJvdW5jZU1vdmVlbmRgIGlzIGB0cnVlYCwgaXQgd2lsbCBkZWxheSBgbW92ZWVuZGAgZXZlbnQgc29cclxuICBcdC8vIHRoYXQgaXQgZG9lc24ndCBoYXBwZW4gb2Z0ZW4gZXZlbiBpZiB0aGUgbWV0aG9kIGlzIGNhbGxlZCBtYW55XHJcbiAgXHQvLyB0aW1lcyBpbiBhIHJvdy5cclxuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgaW52YWxpZGF0ZVNpemUoYW5pbWF0ZTogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIENoZWNrcyBpZiB0aGUgbWFwIGNvbnRhaW5lciBzaXplIGNoYW5nZWQgYW5kIHVwZGF0ZXMgdGhlIG1hcCBpZiBzbyDigJRcclxuICBcdC8vIGNhbGwgaXQgYWZ0ZXIgeW91J3ZlIGNoYW5nZWQgdGhlIG1hcCBzaXplIGR5bmFtaWNhbGx5LCBhbHNvIGFuaW1hdGluZ1xyXG4gIFx0Ly8gcGFuIGJ5IGRlZmF1bHQuXHJcbiAgXHRpbnZhbGlkYXRlU2l6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBleHRlbmQoe1xyXG4gIFx0XHRcdGFuaW1hdGU6IGZhbHNlLFxyXG4gIFx0XHRcdHBhbjogdHJ1ZVxyXG4gIFx0XHR9LCBvcHRpb25zID09PSB0cnVlID8ge2FuaW1hdGU6IHRydWV9IDogb3B0aW9ucyk7XHJcblxyXG4gIFx0XHR2YXIgb2xkU2l6ZSA9IHRoaXMuZ2V0U2l6ZSgpO1xyXG4gIFx0XHR0aGlzLl9zaXplQ2hhbmdlZCA9IHRydWU7XHJcbiAgXHRcdHRoaXMuX2xhc3RDZW50ZXIgPSBudWxsO1xyXG5cclxuICBcdFx0dmFyIG5ld1NpemUgPSB0aGlzLmdldFNpemUoKSxcclxuICBcdFx0ICAgIG9sZENlbnRlciA9IG9sZFNpemUuZGl2aWRlQnkoMikucm91bmQoKSxcclxuICBcdFx0ICAgIG5ld0NlbnRlciA9IG5ld1NpemUuZGl2aWRlQnkoMikucm91bmQoKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IG9sZENlbnRlci5zdWJ0cmFjdChuZXdDZW50ZXIpO1xyXG5cclxuICBcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLmFuaW1hdGUgJiYgb3B0aW9ucy5wYW4pIHtcclxuICBcdFx0XHR0aGlzLnBhbkJ5KG9mZnNldCk7XHJcblxyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlmIChvcHRpb25zLnBhbikge1xyXG4gIFx0XHRcdFx0dGhpcy5fcmF3UGFuQnkob2Zmc2V0KTtcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZScpO1xyXG5cclxuICBcdFx0XHRpZiAob3B0aW9ucy5kZWJvdW5jZU1vdmVlbmQpIHtcclxuICBcdFx0XHRcdGNsZWFyVGltZW91dCh0aGlzLl9zaXplVGltZXIpO1xyXG4gIFx0XHRcdFx0dGhpcy5fc2l6ZVRpbWVyID0gc2V0VGltZW91dChiaW5kKHRoaXMuZmlyZSwgdGhpcywgJ21vdmVlbmQnKSwgMjAwKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvbiBNYXAgc3RhdGUgY2hhbmdlIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgcmVzaXplOiBSZXNpemVFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgaXMgcmVzaXplZC5cclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgncmVzaXplJywge1xyXG4gIFx0XHRcdG9sZFNpemU6IG9sZFNpemUsXHJcbiAgXHRcdFx0bmV3U2l6ZTogbmV3U2l6ZVxyXG4gIFx0XHR9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgbW9kaWZ5aW5nIG1hcCBzdGF0ZVxyXG4gIFx0Ly8gQG1ldGhvZCBzdG9wKCk6IHRoaXNcclxuICBcdC8vIFN0b3BzIHRoZSBjdXJyZW50bHkgcnVubmluZyBgcGFuVG9gIG9yIGBmbHlUb2AgYW5pbWF0aW9uLCBpZiBhbnkuXHJcbiAgXHRzdG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuc2V0Wm9vbSh0aGlzLl9saW1pdFpvb20odGhpcy5fem9vbSkpO1xyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy56b29tU25hcCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgndmlld3Jlc2V0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMuX3N0b3AoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gR2VvbG9jYXRpb24gbWV0aG9kc1xyXG4gIFx0Ly8gQG1ldGhvZCBsb2NhdGUob3B0aW9ucz86IExvY2F0ZSBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gVHJpZXMgdG8gbG9jYXRlIHRoZSB1c2VyIHVzaW5nIHRoZSBHZW9sb2NhdGlvbiBBUEksIGZpcmluZyBhIFtgbG9jYXRpb25mb3VuZGBdKCNtYXAtbG9jYXRpb25mb3VuZClcclxuICBcdC8vIGV2ZW50IHdpdGggbG9jYXRpb24gZGF0YSBvbiBzdWNjZXNzIG9yIGEgW2Bsb2NhdGlvbmVycm9yYF0oI21hcC1sb2NhdGlvbmVycm9yKSBldmVudCBvbiBmYWlsdXJlLFxyXG4gIFx0Ly8gYW5kIG9wdGlvbmFsbHkgc2V0cyB0aGUgbWFwIHZpZXcgdG8gdGhlIHVzZXIncyBsb2NhdGlvbiB3aXRoIHJlc3BlY3QgdG9cclxuICBcdC8vIGRldGVjdGlvbiBhY2N1cmFjeSAob3IgdG8gdGhlIHdvcmxkIHZpZXcgaWYgZ2VvbG9jYXRpb24gZmFpbGVkKS5cclxuICBcdC8vIE5vdGUgdGhhdCwgaWYgeW91ciBwYWdlIGRvZXNuJ3QgdXNlIEhUVFBTLCB0aGlzIG1ldGhvZCB3aWxsIGZhaWwgaW5cclxuICBcdC8vIG1vZGVybiBicm93c2VycyAoW0Nocm9tZSA1MCBhbmQgbmV3ZXJdKGh0dHBzOi8vc2l0ZXMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9kZXYvSG9tZS9jaHJvbWl1bS1zZWN1cml0eS9kZXByZWNhdGluZy1wb3dlcmZ1bC1mZWF0dXJlcy1vbi1pbnNlY3VyZS1vcmlnaW5zKSlcclxuICBcdC8vIFNlZSBgTG9jYXRlIG9wdGlvbnNgIGZvciBtb3JlIGRldGFpbHMuXHJcbiAgXHRsb2NhdGU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gIFx0XHRvcHRpb25zID0gdGhpcy5fbG9jYXRlT3B0aW9ucyA9IGV4dGVuZCh7XHJcbiAgXHRcdFx0dGltZW91dDogMTAwMDAsXHJcbiAgXHRcdFx0d2F0Y2g6IGZhbHNlXHJcbiAgXHRcdFx0Ly8gc2V0VmlldzogZmFsc2VcclxuICBcdFx0XHQvLyBtYXhab29tOiA8TnVtYmVyPlxyXG4gIFx0XHRcdC8vIG1heGltdW1BZ2U6IDBcclxuICBcdFx0XHQvLyBlbmFibGVIaWdoQWNjdXJhY3k6IGZhbHNlXHJcbiAgXHRcdH0sIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0aWYgKCEoJ2dlb2xvY2F0aW9uJyBpbiBuYXZpZ2F0b3IpKSB7XHJcbiAgXHRcdFx0dGhpcy5faGFuZGxlR2VvbG9jYXRpb25FcnJvcih7XHJcbiAgXHRcdFx0XHRjb2RlOiAwLFxyXG4gIFx0XHRcdFx0bWVzc2FnZTogJ0dlb2xvY2F0aW9uIG5vdCBzdXBwb3J0ZWQuJ1xyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgb25SZXNwb25zZSA9IGJpbmQodGhpcy5faGFuZGxlR2VvbG9jYXRpb25SZXNwb25zZSwgdGhpcyksXHJcbiAgXHRcdCAgICBvbkVycm9yID0gYmluZCh0aGlzLl9oYW5kbGVHZW9sb2NhdGlvbkVycm9yLCB0aGlzKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLndhdGNoKSB7XHJcbiAgXHRcdFx0dGhpcy5fbG9jYXRpb25XYXRjaElkID1cclxuICBcdFx0XHQgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi53YXRjaFBvc2l0aW9uKG9uUmVzcG9uc2UsIG9uRXJyb3IsIG9wdGlvbnMpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ob25SZXNwb25zZSwgb25FcnJvciwgb3B0aW9ucyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc3RvcExvY2F0ZSgpOiB0aGlzXHJcbiAgXHQvLyBTdG9wcyB3YXRjaGluZyBsb2NhdGlvbiBwcmV2aW91c2x5IGluaXRpYXRlZCBieSBgbWFwLmxvY2F0ZSh7d2F0Y2g6IHRydWV9KWBcclxuICBcdC8vIGFuZCBhYm9ydHMgcmVzZXR0aW5nIHRoZSBtYXAgdmlldyBpZiBtYXAubG9jYXRlIHdhcyBjYWxsZWQgd2l0aFxyXG4gIFx0Ly8gYHtzZXRWaWV3OiB0cnVlfWAuXHJcbiAgXHRzdG9wTG9jYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmIChuYXZpZ2F0b3IuZ2VvbG9jYXRpb24gJiYgbmF2aWdhdG9yLmdlb2xvY2F0aW9uLmNsZWFyV2F0Y2gpIHtcclxuICBcdFx0XHRuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uY2xlYXJXYXRjaCh0aGlzLl9sb2NhdGlvbldhdGNoSWQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICh0aGlzLl9sb2NhdGVPcHRpb25zKSB7XHJcbiAgXHRcdFx0dGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3ID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVHZW9sb2NhdGlvbkVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICBcdFx0dmFyIGMgPSBlcnJvci5jb2RlLFxyXG4gIFx0XHQgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2UgfHxcclxuICBcdFx0ICAgICAgICAgICAgKGMgPT09IDEgPyAncGVybWlzc2lvbiBkZW5pZWQnIDpcclxuICBcdFx0ICAgICAgICAgICAgKGMgPT09IDIgPyAncG9zaXRpb24gdW5hdmFpbGFibGUnIDogJ3RpbWVvdXQnKSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbG9jYXRlT3B0aW9ucy5zZXRWaWV3ICYmICF0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aGlzLmZpdFdvcmxkKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIExvY2F0aW9uIGV2ZW50c1xyXG4gIFx0XHQvLyBAZXZlbnQgbG9jYXRpb25lcnJvcjogRXJyb3JFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGdlb2xvY2F0aW9uICh1c2luZyB0aGUgW2Bsb2NhdGVgXSgjbWFwLWxvY2F0ZSkgbWV0aG9kKSBmYWlsZWQuXHJcbiAgXHRcdHRoaXMuZmlyZSgnbG9jYXRpb25lcnJvcicsIHtcclxuICBcdFx0XHRjb2RlOiBjLFxyXG4gIFx0XHRcdG1lc3NhZ2U6ICdHZW9sb2NhdGlvbiBlcnJvcjogJyArIG1lc3NhZ2UgKyAnLidcclxuICBcdFx0fSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVHZW9sb2NhdGlvblJlc3BvbnNlOiBmdW5jdGlvbiAocG9zKSB7XHJcbiAgXHRcdHZhciBsYXQgPSBwb3MuY29vcmRzLmxhdGl0dWRlLFxyXG4gIFx0XHQgICAgbG5nID0gcG9zLmNvb3Jkcy5sb25naXR1ZGUsXHJcbiAgXHRcdCAgICBsYXRsbmcgPSBuZXcgTGF0TG5nKGxhdCwgbG5nKSxcclxuICBcdFx0ICAgIGJvdW5kcyA9IGxhdGxuZy50b0JvdW5kcyhwb3MuY29vcmRzLmFjY3VyYWN5ICogMiksXHJcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5fbG9jYXRlT3B0aW9ucztcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLnNldFZpZXcpIHtcclxuICBcdFx0XHR2YXIgem9vbSA9IHRoaXMuZ2V0Qm91bmRzWm9vbShib3VuZHMpO1xyXG4gIFx0XHRcdHRoaXMuc2V0VmlldyhsYXRsbmcsIG9wdGlvbnMubWF4Wm9vbSA/IE1hdGgubWluKHpvb20sIG9wdGlvbnMubWF4Wm9vbSkgOiB6b29tKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGRhdGEgPSB7XHJcbiAgXHRcdFx0bGF0bG5nOiBsYXRsbmcsXHJcbiAgXHRcdFx0Ym91bmRzOiBib3VuZHMsXHJcbiAgXHRcdFx0dGltZXN0YW1wOiBwb3MudGltZXN0YW1wXHJcbiAgXHRcdH07XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpIGluIHBvcy5jb29yZHMpIHtcclxuICBcdFx0XHRpZiAodHlwZW9mIHBvcy5jb29yZHNbaV0gPT09ICdudW1iZXInKSB7XHJcbiAgXHRcdFx0XHRkYXRhW2ldID0gcG9zLmNvb3Jkc1tpXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEBldmVudCBsb2NhdGlvbmZvdW5kOiBMb2NhdGlvbkV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gZ2VvbG9jYXRpb24gKHVzaW5nIHRoZSBbYGxvY2F0ZWBdKCNtYXAtbG9jYXRlKSBtZXRob2QpXHJcbiAgXHRcdC8vIHdlbnQgc3VjY2Vzc2Z1bGx5LlxyXG4gIFx0XHR0aGlzLmZpcmUoJ2xvY2F0aW9uZm91bmQnLCBkYXRhKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gVE9ETyBBcHByb3ByaWF0ZSBkb2NzIHNlY3Rpb24/XHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEhhbmRsZXIobmFtZTogU3RyaW5nLCBIYW5kbGVyQ2xhc3M6IEZ1bmN0aW9uKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhIG5ldyBgSGFuZGxlcmAgdG8gdGhlIG1hcCwgZ2l2ZW4gaXRzIG5hbWUgYW5kIGNvbnN0cnVjdG9yIGZ1bmN0aW9uLlxyXG4gIFx0YWRkSGFuZGxlcjogZnVuY3Rpb24gKG5hbWUsIEhhbmRsZXJDbGFzcykge1xyXG4gIFx0XHRpZiAoIUhhbmRsZXJDbGFzcykgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0dmFyIGhhbmRsZXIgPSB0aGlzW25hbWVdID0gbmV3IEhhbmRsZXJDbGFzcyh0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2hhbmRsZXJzLnB1c2goaGFuZGxlcik7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zW25hbWVdKSB7XHJcbiAgXHRcdFx0aGFuZGxlci5lbmFibGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlKCk6IHRoaXNcclxuICBcdC8vIERlc3Ryb3lzIHRoZSBtYXAgYW5kIGNsZWFycyBhbGwgcmVsYXRlZCBldmVudCBsaXN0ZW5lcnMuXHJcbiAgXHRyZW1vdmU6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdHRoaXMuX2luaXRFdmVudHModHJ1ZSk7XHJcbiAgXHRcdHRoaXMub2ZmKCdtb3ZlZW5kJywgdGhpcy5fcGFuSW5zaWRlTWF4Qm91bmRzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXJJZCAhPT0gdGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkKSB7XHJcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdNYXAgY29udGFpbmVyIGlzIGJlaW5nIHJldXNlZCBieSBhbm90aGVyIGluc3RhbmNlJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRyeSB7XHJcbiAgXHRcdFx0Ly8gdGhyb3dzIGVycm9yIGluIElFNi04XHJcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2NvbnRhaW5lci5fbGVhZmxldF9pZDtcclxuICBcdFx0XHRkZWxldGUgdGhpcy5fY29udGFpbmVySWQ7XHJcbiAgXHRcdH0gY2F0Y2ggKGUpIHtcclxuICBcdFx0XHQvKmVzbGludC1kaXNhYmxlICovXHJcbiAgXHRcdFx0dGhpcy5fY29udGFpbmVyLl9sZWFmbGV0X2lkID0gdW5kZWZpbmVkO1xyXG4gIFx0XHRcdC8qIGVzbGludC1lbmFibGUgKi9cclxuICBcdFx0XHR0aGlzLl9jb250YWluZXJJZCA9IHVuZGVmaW5lZDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvY2F0aW9uV2F0Y2hJZCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgXHRcdFx0dGhpcy5zdG9wTG9jYXRlKCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX3N0b3AoKTtcclxuXHJcbiAgXHRcdHJlbW92ZSh0aGlzLl9tYXBQYW5lKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9jbGVhckNvbnRyb2xQb3MpIHtcclxuICBcdFx0XHR0aGlzLl9jbGVhckNvbnRyb2xQb3MoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAodGhpcy5fcmVzaXplUmVxdWVzdCkge1xyXG4gIFx0XHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9yZXNpemVSZXF1ZXN0KTtcclxuICBcdFx0XHR0aGlzLl9yZXNpemVSZXF1ZXN0ID0gbnVsbDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fY2xlYXJIYW5kbGVycygpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIE1hcCBzdGF0ZSBjaGFuZ2UgZXZlbnRzXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHVubG9hZDogRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXAgaXMgZGVzdHJveWVkIHdpdGggW3JlbW92ZV0oI21hcC1yZW1vdmUpIG1ldGhvZC5cclxuICBcdFx0XHR0aGlzLmZpcmUoJ3VubG9hZCcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgaTtcclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpXS5yZW1vdmUoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRmb3IgKGkgaW4gdGhpcy5fcGFuZXMpIHtcclxuICBcdFx0XHRyZW1vdmUodGhpcy5fcGFuZXNbaV0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMgPSBbXTtcclxuICBcdFx0dGhpcy5fcGFuZXMgPSBbXTtcclxuICBcdFx0ZGVsZXRlIHRoaXMuX21hcFBhbmU7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9yZW5kZXJlcjtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBPdGhlciBNZXRob2RzXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZVBhbmUobmFtZTogU3RyaW5nLCBjb250YWluZXI/OiBIVE1MRWxlbWVudCk6IEhUTUxFbGVtZW50XHJcbiAgXHQvLyBDcmVhdGVzIGEgbmV3IFttYXAgcGFuZV0oI21hcC1wYW5lKSB3aXRoIHRoZSBnaXZlbiBuYW1lIGlmIGl0IGRvZXNuJ3QgZXhpc3QgYWxyZWFkeSxcclxuICBcdC8vIHRoZW4gcmV0dXJucyBpdC4gVGhlIHBhbmUgaXMgY3JlYXRlZCBhcyBhIGNoaWxkIG9mIGBjb250YWluZXJgLCBvclxyXG4gIFx0Ly8gYXMgYSBjaGlsZCBvZiB0aGUgbWFpbiBtYXAgcGFuZSBpZiBub3Qgc2V0LlxyXG4gIFx0Y3JlYXRlUGFuZTogZnVuY3Rpb24gKG5hbWUsIGNvbnRhaW5lcikge1xyXG4gIFx0XHR2YXIgY2xhc3NOYW1lID0gJ2xlYWZsZXQtcGFuZScgKyAobmFtZSA/ICcgbGVhZmxldC0nICsgbmFtZS5yZXBsYWNlKCdQYW5lJywgJycpICsgJy1wYW5lJyA6ICcnKSxcclxuICBcdFx0ICAgIHBhbmUgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lLCBjb250YWluZXIgfHwgdGhpcy5fbWFwUGFuZSk7XHJcblxyXG4gIFx0XHRpZiAobmFtZSkge1xyXG4gIFx0XHRcdHRoaXMuX3BhbmVzW25hbWVdID0gcGFuZTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gcGFuZTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgR2V0dGluZyBNYXAgU3RhdGVcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENlbnRlcigpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIGdlb2dyYXBoaWNhbCBjZW50ZXIgb2YgdGhlIG1hcCB2aWV3XHJcbiAgXHRnZXRDZW50ZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY2hlY2tJZkxvYWRlZCgpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2xhc3RDZW50ZXIgJiYgIXRoaXMuX21vdmVkKCkpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5fbGFzdENlbnRlcjtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fZ2V0Q2VudGVyTGF5ZXJQb2ludCgpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRab29tKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCB6b29tIGxldmVsIG9mIHRoZSBtYXAgdmlld1xyXG4gIFx0Z2V0Wm9vbTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fem9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRCb3VuZHMoKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBnZW9ncmFwaGljYWwgYm91bmRzIHZpc2libGUgaW4gdGhlIGN1cnJlbnQgbWFwIHZpZXdcclxuICBcdGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgYm91bmRzID0gdGhpcy5nZXRQaXhlbEJvdW5kcygpLFxyXG4gIFx0XHQgICAgc3cgPSB0aGlzLnVucHJvamVjdChib3VuZHMuZ2V0Qm90dG9tTGVmdCgpKSxcclxuICBcdFx0ICAgIG5lID0gdGhpcy51bnByb2plY3QoYm91bmRzLmdldFRvcFJpZ2h0KCkpO1xyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmdCb3VuZHMoc3csIG5lKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRNaW5ab29tKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbWluaW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKGlmIHNldCBpbiB0aGUgYG1pblpvb21gIG9wdGlvbiBvZiB0aGUgbWFwIG9yIG9mIGFueSBsYXllcnMpLCBvciBgMGAgYnkgZGVmYXVsdC5cclxuICBcdGdldE1pblpvb206IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5taW5ab29tID09PSB1bmRlZmluZWQgPyB0aGlzLl9sYXllcnNNaW5ab29tIHx8IDAgOiB0aGlzLm9wdGlvbnMubWluWm9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRNYXhab29tKCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbWF4aW11bSB6b29tIGxldmVsIG9mIHRoZSBtYXAgKGlmIHNldCBpbiB0aGUgYG1heFpvb21gIG9wdGlvbiBvZiB0aGUgbWFwIG9yIG9mIGFueSBsYXllcnMpLlxyXG4gIFx0Z2V0TWF4Wm9vbTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLm1heFpvb20gPT09IHVuZGVmaW5lZCA/XHJcbiAgXHRcdFx0KHRoaXMuX2xheWVyc01heFpvb20gPT09IHVuZGVmaW5lZCA/IEluZmluaXR5IDogdGhpcy5fbGF5ZXJzTWF4Wm9vbSkgOlxyXG4gIFx0XHRcdHRoaXMub3B0aW9ucy5tYXhab29tO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kc1pvb20oYm91bmRzOiBMYXRMbmdCb3VuZHMsIGluc2lkZT86IEJvb2xlYW4sIHBhZGRpbmc/OiBQb2ludCk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgbWF4aW11bSB6b29tIGxldmVsIG9uIHdoaWNoIHRoZSBnaXZlbiBib3VuZHMgZml0IHRvIHRoZSBtYXBcclxuICBcdC8vIHZpZXcgaW4gaXRzIGVudGlyZXR5LiBJZiBgaW5zaWRlYCAob3B0aW9uYWwpIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBtZXRob2RcclxuICBcdC8vIGluc3RlYWQgcmV0dXJucyB0aGUgbWluaW11bSB6b29tIGxldmVsIG9uIHdoaWNoIHRoZSBtYXAgdmlldyBmaXRzIGludG9cclxuICBcdC8vIHRoZSBnaXZlbiBib3VuZHMgaW4gaXRzIGVudGlyZXR5LlxyXG4gIFx0Z2V0Qm91bmRzWm9vbTogZnVuY3Rpb24gKGJvdW5kcywgaW5zaWRlLCBwYWRkaW5nKSB7IC8vIChMYXRMbmdCb3VuZHNbLCBCb29sZWFuLCBQb2ludF0pIC0+IE51bWJlclxyXG4gIFx0XHRib3VuZHMgPSB0b0xhdExuZ0JvdW5kcyhib3VuZHMpO1xyXG4gIFx0XHRwYWRkaW5nID0gdG9Qb2ludChwYWRkaW5nIHx8IFswLCAwXSk7XHJcblxyXG4gIFx0XHR2YXIgem9vbSA9IHRoaXMuZ2V0Wm9vbSgpIHx8IDAsXHJcbiAgXHRcdCAgICBtaW4gPSB0aGlzLmdldE1pblpvb20oKSxcclxuICBcdFx0ICAgIG1heCA9IHRoaXMuZ2V0TWF4Wm9vbSgpLFxyXG4gIFx0XHQgICAgbncgPSBib3VuZHMuZ2V0Tm9ydGhXZXN0KCksXHJcbiAgXHRcdCAgICBzZSA9IGJvdW5kcy5nZXRTb3V0aEVhc3QoKSxcclxuICBcdFx0ICAgIHNpemUgPSB0aGlzLmdldFNpemUoKS5zdWJ0cmFjdChwYWRkaW5nKSxcclxuICBcdFx0ICAgIGJvdW5kc1NpemUgPSB0b0JvdW5kcyh0aGlzLnByb2plY3Qoc2UsIHpvb20pLCB0aGlzLnByb2plY3QobncsIHpvb20pKS5nZXRTaXplKCksXHJcbiAgXHRcdCAgICBzbmFwID0gYW55M2QgPyB0aGlzLm9wdGlvbnMuem9vbVNuYXAgOiAxLFxyXG4gIFx0XHQgICAgc2NhbGV4ID0gc2l6ZS54IC8gYm91bmRzU2l6ZS54LFxyXG4gIFx0XHQgICAgc2NhbGV5ID0gc2l6ZS55IC8gYm91bmRzU2l6ZS55LFxyXG4gIFx0XHQgICAgc2NhbGUgPSBpbnNpZGUgPyBNYXRoLm1heChzY2FsZXgsIHNjYWxleSkgOiBNYXRoLm1pbihzY2FsZXgsIHNjYWxleSk7XHJcblxyXG4gIFx0XHR6b29tID0gdGhpcy5nZXRTY2FsZVpvb20oc2NhbGUsIHpvb20pO1xyXG5cclxuICBcdFx0aWYgKHNuYXApIHtcclxuICBcdFx0XHR6b29tID0gTWF0aC5yb3VuZCh6b29tIC8gKHNuYXAgLyAxMDApKSAqIChzbmFwIC8gMTAwKTsgLy8gZG9uJ3QganVtcCBpZiB3aXRoaW4gMSUgb2YgYSBzbmFwIGxldmVsXHJcbiAgXHRcdFx0em9vbSA9IGluc2lkZSA/IE1hdGguY2VpbCh6b29tIC8gc25hcCkgKiBzbmFwIDogTWF0aC5mbG9vcih6b29tIC8gc25hcCkgKiBzbmFwO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHpvb20pKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRTaXplKCk6IFBvaW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNpemUgb2YgdGhlIG1hcCBjb250YWluZXIgKGluIHBpeGVscykuXHJcbiAgXHRnZXRTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fc2l6ZSB8fCB0aGlzLl9zaXplQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuX3NpemUgPSBuZXcgUG9pbnQoXHJcbiAgXHRcdFx0XHR0aGlzLl9jb250YWluZXIuY2xpZW50V2lkdGggfHwgMCxcclxuICBcdFx0XHRcdHRoaXMuX2NvbnRhaW5lci5jbGllbnRIZWlnaHQgfHwgMCk7XHJcblxyXG4gIFx0XHRcdHRoaXMuX3NpemVDaGFuZ2VkID0gZmFsc2U7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXMuX3NpemUuY2xvbmUoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQaXhlbEJvdW5kcygpOiBCb3VuZHNcclxuICBcdC8vIFJldHVybnMgdGhlIGJvdW5kcyBvZiB0aGUgY3VycmVudCBtYXAgdmlldyBpbiBwcm9qZWN0ZWQgcGl4ZWxcclxuICBcdC8vIGNvb3JkaW5hdGVzIChzb21ldGltZXMgdXNlZnVsIGluIGxheWVyIGFuZCBvdmVybGF5IGltcGxlbWVudGF0aW9ucykuXHJcbiAgXHRnZXRQaXhlbEJvdW5kczogZnVuY3Rpb24gKGNlbnRlciwgem9vbSkge1xyXG4gIFx0XHR2YXIgdG9wTGVmdFBvaW50ID0gdGhpcy5fZ2V0VG9wTGVmdFBvaW50KGNlbnRlciwgem9vbSk7XHJcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKHRvcExlZnRQb2ludCwgdG9wTGVmdFBvaW50LmFkZCh0aGlzLmdldFNpemUoKSkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBUT0RPOiBDaGVjayBzZW1hbnRpY3MgLSBpc24ndCB0aGUgcGl4ZWwgb3JpZ2luIHRoZSAwLDAgY29vcmQgcmVsYXRpdmUgdG9cclxuICBcdC8vIHRoZSBtYXAgcGFuZT8gXCJsZWZ0IHBvaW50IG9mIHRoZSBtYXAgbGF5ZXJcIiBjYW4gYmUgY29uZnVzaW5nLCBzcGVjaWFsbHlcclxuICBcdC8vIHNpbmNlIHRoZXJlIGNhbiBiZSBuZWdhdGl2ZSBvZmZzZXRzLlxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRQaXhlbE9yaWdpbigpOiBQb2ludFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgcHJvamVjdGVkIHBpeGVsIGNvb3JkaW5hdGVzIG9mIHRoZSB0b3AgbGVmdCBwb2ludCBvZlxyXG4gIFx0Ly8gdGhlIG1hcCBsYXllciAodXNlZnVsIGluIGN1c3RvbSBsYXllciBhbmQgb3ZlcmxheSBpbXBsZW1lbnRhdGlvbnMpLlxyXG4gIFx0Z2V0UGl4ZWxPcmlnaW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY2hlY2tJZkxvYWRlZCgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fcGl4ZWxPcmlnaW47XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UGl4ZWxXb3JsZEJvdW5kcyh6b29tPzogTnVtYmVyKTogQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB3b3JsZCdzIGJvdW5kcyBpbiBwaXhlbCBjb29yZGluYXRlcyBmb3Igem9vbSBsZXZlbCBgem9vbWAuXHJcbiAgXHQvLyBJZiBgem9vbWAgaXMgb21pdHRlZCwgdGhlIG1hcCdzIGN1cnJlbnQgem9vbSBsZXZlbCBpcyB1c2VkLlxyXG4gIFx0Z2V0UGl4ZWxXb3JsZEJvdW5kczogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMuZ2V0UHJvamVjdGVkQm91bmRzKHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuZ2V0Wm9vbSgpIDogem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBzZWN0aW9uIE90aGVyIE1ldGhvZHNcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFBhbmUocGFuZTogU3RyaW5nfEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgYSBbbWFwIHBhbmVdKCNtYXAtcGFuZSksIGdpdmVuIGl0cyBuYW1lIG9yIGl0cyBIVE1MIGVsZW1lbnQgKGl0cyBpZGVudGl0eSkuXHJcbiAgXHRnZXRQYW5lOiBmdW5jdGlvbiAocGFuZSkge1xyXG4gIFx0XHRyZXR1cm4gdHlwZW9mIHBhbmUgPT09ICdzdHJpbmcnID8gdGhpcy5fcGFuZXNbcGFuZV0gOiBwYW5lO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFBhbmVzKCk6IE9iamVjdFxyXG4gIFx0Ly8gUmV0dXJucyBhIHBsYWluIG9iamVjdCBjb250YWluaW5nIHRoZSBuYW1lcyBvZiBhbGwgW3BhbmVzXSgjbWFwLXBhbmUpIGFzIGtleXMgYW5kXHJcbiAgXHQvLyB0aGUgcGFuZXMgYXMgdmFsdWVzLlxyXG4gIFx0Z2V0UGFuZXM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX3BhbmVzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldENvbnRhaW5lcjogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIEhUTUwgZWxlbWVudCB0aGF0IGNvbnRhaW5zIHRoZSBtYXAuXHJcbiAgXHRnZXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIEBzZWN0aW9uIENvbnZlcnNpb24gTWV0aG9kc1xyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Wm9vbVNjYWxlKHRvWm9vbTogTnVtYmVyLCBmcm9tWm9vbTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBzY2FsZSBmYWN0b3IgdG8gYmUgYXBwbGllZCB0byBhIG1hcCB0cmFuc2l0aW9uIGZyb20gem9vbSBsZXZlbFxyXG4gIFx0Ly8gYGZyb21ab29tYCB0byBgdG9ab29tYC4gVXNlZCBpbnRlcm5hbGx5IHRvIGhlbHAgd2l0aCB6b29tIGFuaW1hdGlvbnMuXHJcbiAgXHRnZXRab29tU2NhbGU6IGZ1bmN0aW9uICh0b1pvb20sIGZyb21ab29tKSB7XHJcbiAgXHRcdC8vIFRPRE8gcmVwbGFjZSB3aXRoIHVuaXZlcnNhbCBpbXBsZW1lbnRhdGlvbiBhZnRlciByZWZhY3RvcmluZyBwcm9qZWN0aW9uc1xyXG4gIFx0XHR2YXIgY3JzID0gdGhpcy5vcHRpb25zLmNycztcclxuICBcdFx0ZnJvbVpvb20gPSBmcm9tWm9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fem9vbSA6IGZyb21ab29tO1xyXG4gIFx0XHRyZXR1cm4gY3JzLnNjYWxlKHRvWm9vbSkgLyBjcnMuc2NhbGUoZnJvbVpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldFNjYWxlWm9vbShzY2FsZTogTnVtYmVyLCBmcm9tWm9vbTogTnVtYmVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSB6b29tIGxldmVsIHRoYXQgdGhlIG1hcCB3b3VsZCBlbmQgdXAgYXQsIGlmIGl0IGlzIGF0IGBmcm9tWm9vbWBcclxuICBcdC8vIGxldmVsIGFuZCBldmVyeXRoaW5nIGlzIHNjYWxlZCBieSBhIGZhY3RvciBvZiBgc2NhbGVgLiBJbnZlcnNlIG9mXHJcbiAgXHQvLyBbYGdldFpvb21TY2FsZWBdKCNtYXAtZ2V0Wm9vbVNjYWxlKS5cclxuICBcdGdldFNjYWxlWm9vbTogZnVuY3Rpb24gKHNjYWxlLCBmcm9tWm9vbSkge1xyXG4gIFx0XHR2YXIgY3JzID0gdGhpcy5vcHRpb25zLmNycztcclxuICBcdFx0ZnJvbVpvb20gPSBmcm9tWm9vbSA9PT0gdW5kZWZpbmVkID8gdGhpcy5fem9vbSA6IGZyb21ab29tO1xyXG4gIFx0XHR2YXIgem9vbSA9IGNycy56b29tKHNjYWxlICogY3JzLnNjYWxlKGZyb21ab29tKSk7XHJcbiAgXHRcdHJldHVybiBpc05hTih6b29tKSA/IEluZmluaXR5IDogem9vbTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBwcm9qZWN0KGxhdGxuZzogTGF0TG5nLCB6b29tOiBOdW1iZXIpOiBQb2ludFxyXG4gIFx0Ly8gUHJvamVjdHMgYSBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSBgTGF0TG5nYCBhY2NvcmRpbmcgdG8gdGhlIHByb2plY3Rpb25cclxuICBcdC8vIG9mIHRoZSBtYXAncyBDUlMsIHRoZW4gc2NhbGVzIGl0IGFjY29yZGluZyB0byBgem9vbWAgYW5kIHRoZSBDUlMnc1xyXG4gIFx0Ly8gYFRyYW5zZm9ybWF0aW9uYC4gVGhlIHJlc3VsdCBpcyBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvXHJcbiAgXHQvLyB0aGUgQ1JTIG9yaWdpbi5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcsIHpvb20pIHtcclxuICBcdFx0em9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiB6b29tO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5sYXRMbmdUb1BvaW50KHRvTGF0TG5nKGxhdGxuZyksIHpvb20pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVucHJvamVjdChwb2ludDogUG9pbnQsIHpvb206IE51bWJlcik6IExhdExuZ1xyXG4gIFx0Ly8gSW52ZXJzZSBvZiBbYHByb2plY3RgXSgjbWFwLXByb2plY3QpLlxyXG4gIFx0dW5wcm9qZWN0OiBmdW5jdGlvbiAocG9pbnQsIHpvb20pIHtcclxuICBcdFx0em9vbSA9IHpvb20gPT09IHVuZGVmaW5lZCA/IHRoaXMuX3pvb20gOiB6b29tO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5wb2ludFRvTGF0TG5nKHRvUG9pbnQocG9pbnQpLCB6b29tKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBsYXllclBvaW50VG9MYXRMbmcocG9pbnQ6IFBvaW50KTogTGF0TG5nXHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLFxyXG4gIFx0Ly8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSAoZm9yIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwpLlxyXG4gIFx0bGF5ZXJQb2ludFRvTGF0TG5nOiBmdW5jdGlvbiAocG9pbnQpIHtcclxuICBcdFx0dmFyIHByb2plY3RlZFBvaW50ID0gdG9Qb2ludChwb2ludCkuYWRkKHRoaXMuZ2V0UGl4ZWxPcmlnaW4oKSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLnVucHJvamVjdChwcm9qZWN0ZWRQb2ludCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbGF0TG5nVG9MYXllclBvaW50KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcclxuICBcdC8vIEdpdmVuIGEgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLlxyXG4gIFx0bGF0TG5nVG9MYXllclBvaW50OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBwcm9qZWN0ZWRQb2ludCA9IHRoaXMucHJvamVjdCh0b0xhdExuZyhsYXRsbmcpKS5fcm91bmQoKTtcclxuICBcdFx0cmV0dXJuIHByb2plY3RlZFBvaW50Ll9zdWJ0cmFjdCh0aGlzLmdldFBpeGVsT3JpZ2luKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHdyYXBMYXRMbmcobGF0bG5nOiBMYXRMbmcpOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgYSBgTGF0TG5nYCB3aGVyZSBgbGF0YCBhbmQgYGxuZ2AgaGFzIGJlZW4gd3JhcHBlZCBhY2NvcmRpbmcgdG8gdGhlXHJcbiAgXHQvLyBtYXAncyBDUlMncyBgd3JhcExhdGAgYW5kIGB3cmFwTG5nYCBwcm9wZXJ0aWVzLCBpZiB0aGV5IGFyZSBvdXRzaWRlIHRoZVxyXG4gIFx0Ly8gQ1JTJ3MgYm91bmRzLlxyXG4gIFx0Ly8gQnkgZGVmYXVsdCB0aGlzIG1lYW5zIGxvbmdpdHVkZSBpcyB3cmFwcGVkIGFyb3VuZCB0aGUgZGF0ZWxpbmUgc28gaXRzXHJcbiAgXHQvLyB2YWx1ZSBpcyBiZXR3ZWVuIC0xODAgYW5kICsxODAgZGVncmVlcy5cclxuICBcdHdyYXBMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZyh0b0xhdExuZyhsYXRsbmcpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB3cmFwTGF0TG5nQm91bmRzKGJvdW5kczogTGF0TG5nQm91bmRzKTogTGF0TG5nQm91bmRzXHJcbiAgXHQvLyBSZXR1cm5zIGEgYExhdExuZ0JvdW5kc2Agd2l0aCB0aGUgc2FtZSBzaXplIGFzIHRoZSBnaXZlbiBvbmUsIGVuc3VyaW5nIHRoYXRcclxuICBcdC8vIGl0cyBjZW50ZXIgaXMgd2l0aGluIHRoZSBDUlMncyBib3VuZHMuXHJcbiAgXHQvLyBCeSBkZWZhdWx0IHRoaXMgbWVhbnMgdGhlIGNlbnRlciBsb25naXR1ZGUgaXMgd3JhcHBlZCBhcm91bmQgdGhlIGRhdGVsaW5lIHNvIGl0c1xyXG4gIFx0Ly8gdmFsdWUgaXMgYmV0d2VlbiAtMTgwIGFuZCArMTgwIGRlZ3JlZXMsIGFuZCB0aGUgbWFqb3JpdHkgb2YgdGhlIGJvdW5kc1xyXG4gIFx0Ly8gb3ZlcmxhcHMgdGhlIENSUydzIGJvdW5kcy5cclxuICBcdHdyYXBMYXRMbmdCb3VuZHM6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5jcnMud3JhcExhdExuZ0JvdW5kcyh0b0xhdExuZ0JvdW5kcyhsYXRsbmcpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBkaXN0YW5jZShsYXRsbmcxOiBMYXRMbmcsIGxhdGxuZzI6IExhdExuZyk6IE51bWJlclxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiB0d28gZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGFjY29yZGluZyB0b1xyXG4gIFx0Ly8gdGhlIG1hcCdzIENSUy4gQnkgZGVmYXVsdCB0aGlzIG1lYXN1cmVzIGRpc3RhbmNlIGluIG1ldGVycy5cclxuICBcdGRpc3RhbmNlOiBmdW5jdGlvbiAobGF0bG5nMSwgbGF0bG5nMikge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmNycy5kaXN0YW5jZSh0b0xhdExuZyhsYXRsbmcxKSwgdG9MYXRMbmcobGF0bG5nMikpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KHBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIG1hcCBjb250YWluZXIsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmdcclxuICBcdC8vIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLlxyXG4gIFx0Y29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQ6IGZ1bmN0aW9uIChwb2ludCkgeyAvLyAoUG9pbnQpXHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHBvaW50KS5zdWJ0cmFjdCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHBvaW50OiBQb2ludCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIHBpeGVsIGNvb3JkaW5hdGUgcmVsYXRpdmUgdG8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pLFxyXG4gIFx0Ly8gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLlxyXG4gIFx0bGF5ZXJQb2ludFRvQ29udGFpbmVyUG9pbnQ6IGZ1bmN0aW9uIChwb2ludCkgeyAvLyAoUG9pbnQpXHJcbiAgXHRcdHJldHVybiB0b1BvaW50KHBvaW50KS5hZGQodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjb250YWluZXJQb2ludFRvTGF0TG5nKHBvaW50OiBQb2ludCk6IExhdExuZ1xyXG4gIFx0Ly8gR2l2ZW4gYSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZSBtYXAgY29udGFpbmVyLCByZXR1cm5zXHJcbiAgXHQvLyB0aGUgY29ycmVzcG9uZGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZSAoZm9yIHRoZSBjdXJyZW50IHpvb20gbGV2ZWwpLlxyXG4gIFx0Y29udGFpbmVyUG9pbnRUb0xhdExuZzogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBsYXllclBvaW50ID0gdGhpcy5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludCh0b1BvaW50KHBvaW50KSk7XHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyhsYXllclBvaW50KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBsYXRMbmdUb0NvbnRhaW5lclBvaW50KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcclxuICBcdC8vIEdpdmVuIGEgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGUsIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcGl4ZWwgY29vcmRpbmF0ZVxyXG4gIFx0Ly8gcmVsYXRpdmUgdG8gdGhlIG1hcCBjb250YWluZXIuXHJcbiAgXHRsYXRMbmdUb0NvbnRhaW5lclBvaW50OiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHRoaXMubGF0TG5nVG9MYXllclBvaW50KHRvTGF0TG5nKGxhdGxuZykpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBtb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChldjogTW91c2VFdmVudCk6IFBvaW50XHJcbiAgXHQvLyBHaXZlbiBhIE1vdXNlRXZlbnQgb2JqZWN0LCByZXR1cm5zIHRoZSBwaXhlbCBjb29yZGluYXRlIHJlbGF0aXZlIHRvIHRoZVxyXG4gIFx0Ly8gbWFwIGNvbnRhaW5lciB3aGVyZSB0aGUgZXZlbnQgdG9vayBwbGFjZS5cclxuICBcdG1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50OiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRyZXR1cm4gZ2V0TW91c2VQb3NpdGlvbihlLCB0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG1vdXNlRXZlbnRUb0xheWVyUG9pbnQoZXY6IE1vdXNlRXZlbnQpOiBQb2ludFxyXG4gIFx0Ly8gR2l2ZW4gYSBNb3VzZUV2ZW50IG9iamVjdCwgcmV0dXJucyB0aGUgcGl4ZWwgY29vcmRpbmF0ZSByZWxhdGl2ZSB0b1xyXG4gIFx0Ly8gdGhlIFtvcmlnaW4gcGl4ZWxdKCNtYXAtZ2V0cGl4ZWxvcmlnaW4pIHdoZXJlIHRoZSBldmVudCB0b29rIHBsYWNlLlxyXG4gIFx0bW91c2VFdmVudFRvTGF5ZXJQb2ludDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgbW91c2VFdmVudFRvTGF0TG5nKGV2OiBNb3VzZUV2ZW50KTogTGF0TG5nXHJcbiAgXHQvLyBHaXZlbiBhIE1vdXNlRXZlbnQgb2JqZWN0LCByZXR1cm5zIGdlb2dyYXBoaWNhbCBjb29yZGluYXRlIHdoZXJlIHRoZVxyXG4gIFx0Ly8gZXZlbnQgdG9vayBwbGFjZS5cclxuICBcdG1vdXNlRXZlbnRUb0xhdExuZzogZnVuY3Rpb24gKGUpIHsgLy8gKE1vdXNlRXZlbnQpXHJcbiAgXHRcdHJldHVybiB0aGlzLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLm1vdXNlRXZlbnRUb0xheWVyUG9pbnQoZSkpO1xyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gbWFwIGluaXRpYWxpemF0aW9uIG1ldGhvZHNcclxuXHJcbiAgXHRfaW5pdENvbnRhaW5lcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXIgPSBnZXQoaWQpO1xyXG5cclxuICBcdFx0aWYgKCFjb250YWluZXIpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ01hcCBjb250YWluZXIgbm90IGZvdW5kLicpO1xyXG4gIFx0XHR9IGVsc2UgaWYgKGNvbnRhaW5lci5fbGVhZmxldF9pZCkge1xyXG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTWFwIGNvbnRhaW5lciBpcyBhbHJlYWR5IGluaXRpYWxpemVkLicpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRvbihjb250YWluZXIsICdzY3JvbGwnLCB0aGlzLl9vblNjcm9sbCwgdGhpcyk7XHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lcklkID0gc3RhbXAoY29udGFpbmVyKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcjtcclxuXHJcbiAgXHRcdHRoaXMuX2ZhZGVBbmltYXRlZCA9IHRoaXMub3B0aW9ucy5mYWRlQW5pbWF0aW9uICYmIGFueTNkO1xyXG5cclxuICBcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC1jb250YWluZXInICtcclxuICBcdFx0XHQodG91Y2ggPyAnIGxlYWZsZXQtdG91Y2gnIDogJycpICtcclxuICBcdFx0XHQocmV0aW5hID8gJyBsZWFmbGV0LXJldGluYScgOiAnJykgK1xyXG4gIFx0XHRcdChpZWx0OSA/ICcgbGVhZmxldC1vbGRpZScgOiAnJykgK1xyXG4gIFx0XHRcdChzYWZhcmkgPyAnIGxlYWZsZXQtc2FmYXJpJyA6ICcnKSArXHJcbiAgXHRcdFx0KHRoaXMuX2ZhZGVBbmltYXRlZCA/ICcgbGVhZmxldC1mYWRlLWFuaW0nIDogJycpKTtcclxuXHJcbiAgXHRcdHZhciBwb3NpdGlvbiA9IGdldFN0eWxlKGNvbnRhaW5lciwgJ3Bvc2l0aW9uJyk7XHJcblxyXG4gIFx0XHRpZiAocG9zaXRpb24gIT09ICdhYnNvbHV0ZScgJiYgcG9zaXRpb24gIT09ICdyZWxhdGl2ZScgJiYgcG9zaXRpb24gIT09ICdmaXhlZCcpIHtcclxuICBcdFx0XHRjb250YWluZXIuc3R5bGUucG9zaXRpb24gPSAncmVsYXRpdmUnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pbml0UGFuZXMoKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pbml0Q29udHJvbFBvcykge1xyXG4gIFx0XHRcdHRoaXMuX2luaXRDb250cm9sUG9zKCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRQYW5lczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcGFuZXMgPSB0aGlzLl9wYW5lcyA9IHt9O1xyXG4gIFx0XHR0aGlzLl9wYW5lUmVuZGVyZXJzID0ge307XHJcblxyXG4gIFx0XHQvLyBAc2VjdGlvblxyXG4gIFx0XHQvL1xyXG4gIFx0XHQvLyBQYW5lcyBhcmUgRE9NIGVsZW1lbnRzIHVzZWQgdG8gY29udHJvbCB0aGUgb3JkZXJpbmcgb2YgbGF5ZXJzIG9uIHRoZSBtYXAuIFlvdVxyXG4gIFx0XHQvLyBjYW4gYWNjZXNzIHBhbmVzIHdpdGggW2BtYXAuZ2V0UGFuZWBdKCNtYXAtZ2V0cGFuZSkgb3JcclxuICBcdFx0Ly8gW2BtYXAuZ2V0UGFuZXNgXSgjbWFwLWdldHBhbmVzKSBtZXRob2RzLiBOZXcgcGFuZXMgY2FuIGJlIGNyZWF0ZWQgd2l0aCB0aGVcclxuICBcdFx0Ly8gW2BtYXAuY3JlYXRlUGFuZWBdKCNtYXAtY3JlYXRlcGFuZSkgbWV0aG9kLlxyXG4gIFx0XHQvL1xyXG4gIFx0XHQvLyBFdmVyeSBtYXAgaGFzIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBwYW5lcyB0aGF0IGRpZmZlciBvbmx5IGluIHpJbmRleC5cclxuICBcdFx0Ly9cclxuICBcdFx0Ly8gQHBhbmUgbWFwUGFuZTogSFRNTEVsZW1lbnQgPSAnYXV0bydcclxuICBcdFx0Ly8gUGFuZSB0aGF0IGNvbnRhaW5zIGFsbCBvdGhlciBtYXAgcGFuZXNcclxuXHJcbiAgXHRcdHRoaXMuX21hcFBhbmUgPSB0aGlzLmNyZWF0ZVBhbmUoJ21hcFBhbmUnLCB0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLCBuZXcgUG9pbnQoMCwgMCkpO1xyXG5cclxuICBcdFx0Ly8gQHBhbmUgdGlsZVBhbmU6IEhUTUxFbGVtZW50ID0gMjAwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIGBHcmlkTGF5ZXJgcyBhbmQgYFRpbGVMYXllcmBzXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgndGlsZVBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgb3ZlcmxheVBhbmU6IEhUTUxFbGVtZW50ID0gNDAwXHJcbiAgXHRcdC8vIFBhbmUgZm9yIG92ZXJsYXkgc2hhZG93cyAoZS5nLiBgTWFya2VyYCBzaGFkb3dzKVxyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ3NoYWRvd1BhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgc2hhZG93UGFuZTogSFRNTEVsZW1lbnQgPSA1MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgdmVjdG9ycyAoYFBhdGhgcywgbGlrZSBgUG9seWxpbmVgcyBhbmQgYFBvbHlnb25gcyksIGBJbWFnZU92ZXJsYXlgcyBhbmQgYFZpZGVvT3ZlcmxheWBzXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgnb3ZlcmxheVBhbmUnKTtcclxuICBcdFx0Ly8gQHBhbmUgbWFya2VyUGFuZTogSFRNTEVsZW1lbnQgPSA2MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgYEljb25gcyBvZiBgTWFya2VyYHNcclxuICBcdFx0dGhpcy5jcmVhdGVQYW5lKCdtYXJrZXJQYW5lJyk7XHJcbiAgXHRcdC8vIEBwYW5lIHRvb2x0aXBQYW5lOiBIVE1MRWxlbWVudCA9IDY1MFxyXG4gIFx0XHQvLyBQYW5lIGZvciBgVG9vbHRpcGBzLlxyXG4gIFx0XHR0aGlzLmNyZWF0ZVBhbmUoJ3Rvb2x0aXBQYW5lJyk7XHJcbiAgXHRcdC8vIEBwYW5lIHBvcHVwUGFuZTogSFRNTEVsZW1lbnQgPSA3MDBcclxuICBcdFx0Ly8gUGFuZSBmb3IgYFBvcHVwYHMuXHJcbiAgXHRcdHRoaXMuY3JlYXRlUGFuZSgncG9wdXBQYW5lJyk7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uKSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3MocGFuZXMubWFya2VyUGFuZSwgJ2xlYWZsZXQtem9vbS1oaWRlJyk7XHJcbiAgXHRcdFx0YWRkQ2xhc3MocGFuZXMuc2hhZG93UGFuZSwgJ2xlYWZsZXQtem9vbS1oaWRlJyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG5cclxuICBcdC8vIHByaXZhdGUgbWV0aG9kcyB0aGF0IG1vZGlmeSBtYXAgc3RhdGVcclxuXHJcbiAgXHQvLyBAc2VjdGlvbiBNYXAgc3RhdGUgY2hhbmdlIGV2ZW50c1xyXG4gIFx0X3Jlc2V0VmlldzogZnVuY3Rpb24gKGNlbnRlciwgem9vbSkge1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lLCBuZXcgUG9pbnQoMCwgMCkpO1xyXG5cclxuICBcdFx0dmFyIGxvYWRpbmcgPSAhdGhpcy5fbG9hZGVkO1xyXG4gIFx0XHR0aGlzLl9sb2FkZWQgPSB0cnVlO1xyXG4gIFx0XHR6b29tID0gdGhpcy5fbGltaXRab29tKHpvb20pO1xyXG5cclxuICBcdFx0dGhpcy5maXJlKCd2aWV3cHJlcmVzZXQnKTtcclxuXHJcbiAgXHRcdHZhciB6b29tQ2hhbmdlZCA9IHRoaXMuX3pvb20gIT09IHpvb207XHJcbiAgXHRcdHRoaXNcclxuICBcdFx0XHQuX21vdmVTdGFydCh6b29tQ2hhbmdlZCwgZmFsc2UpXHJcbiAgXHRcdFx0Ll9tb3ZlKGNlbnRlciwgem9vbSlcclxuICBcdFx0XHQuX21vdmVFbmQoem9vbUNoYW5nZWQpO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IHZpZXdyZXNldDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIG5lZWRzIHRvIHJlZHJhdyBpdHMgY29udGVudCAodGhpcyB1c3VhbGx5IGhhcHBlbnNcclxuICBcdFx0Ly8gb24gbWFwIHpvb20gb3IgbG9hZCkuIFZlcnkgdXNlZnVsIGZvciBjcmVhdGluZyBjdXN0b20gb3ZlcmxheXMuXHJcbiAgXHRcdHRoaXMuZmlyZSgndmlld3Jlc2V0Jyk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9hZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIGlzIGluaXRpYWxpemVkICh3aGVuIGl0cyBjZW50ZXIgYW5kIHpvb20gYXJlIHNldFxyXG4gIFx0XHQvLyBmb3IgdGhlIGZpcnN0IHRpbWUpLlxyXG4gIFx0XHRpZiAobG9hZGluZykge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbG9hZCcpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlU3RhcnQ6IGZ1bmN0aW9uICh6b29tQ2hhbmdlZCwgbm9Nb3ZlU3RhcnQpIHtcclxuICBcdFx0Ly8gQGV2ZW50IHpvb21zdGFydDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIHpvb20gaXMgYWJvdXQgdG8gY2hhbmdlIChlLmcuIGJlZm9yZSB6b29tIGFuaW1hdGlvbikuXHJcbiAgXHRcdC8vIEBldmVudCBtb3Zlc3RhcnQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHZpZXcgb2YgdGhlIG1hcCBzdGFydHMgY2hhbmdpbmcgKGUuZy4gdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlIG1hcCkuXHJcbiAgXHRcdGlmICh6b29tQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKCFub01vdmVTdGFydCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnbW92ZXN0YXJ0Jyk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBkYXRhKSB7XHJcbiAgXHRcdGlmICh6b29tID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHR6b29tID0gdGhpcy5fem9vbTtcclxuICBcdFx0fVxyXG4gIFx0XHR2YXIgem9vbUNoYW5nZWQgPSB0aGlzLl96b29tICE9PSB6b29tO1xyXG5cclxuICBcdFx0dGhpcy5fem9vbSA9IHpvb207XHJcbiAgXHRcdHRoaXMuX2xhc3RDZW50ZXIgPSBjZW50ZXI7XHJcbiAgXHRcdHRoaXMuX3BpeGVsT3JpZ2luID0gdGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCB6b29tOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCByZXBlYXRlZGx5IGR1cmluZyBhbnkgY2hhbmdlIGluIHpvb20gbGV2ZWwsIGluY2x1ZGluZyB6b29tXHJcbiAgXHRcdC8vIGFuZCBmbHkgYW5pbWF0aW9ucy5cclxuICBcdFx0aWYgKHpvb21DaGFuZ2VkIHx8IChkYXRhICYmIGRhdGEucGluY2gpKSB7XHQvLyBBbHdheXMgZmlyZSAnem9vbScgaWYgcGluY2hpbmcgYmVjYXVzZSAjMzUzMFxyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbScsIGRhdGEpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZTogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgcmVwZWF0ZWRseSBkdXJpbmcgYW55IG1vdmVtZW50IG9mIHRoZSBtYXAsIGluY2x1ZGluZyBwYW4gYW5kXHJcbiAgXHRcdC8vIGZseSBhbmltYXRpb25zLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlJywgZGF0YSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlRW5kOiBmdW5jdGlvbiAoem9vbUNoYW5nZWQpIHtcclxuICBcdFx0Ly8gQGV2ZW50IHpvb21lbmQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcCBoYXMgY2hhbmdlZCwgYWZ0ZXIgYW55IGFuaW1hdGlvbnMuXHJcbiAgXHRcdGlmICh6b29tQ2hhbmdlZCkge1xyXG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbWVuZCcpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZWVuZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgY2VudGVyIG9mIHRoZSBtYXAgc3RvcHMgY2hhbmdpbmcgKGUuZy4gdXNlciBzdG9wcGVkXHJcbiAgXHRcdC8vIGRyYWdnaW5nIHRoZSBtYXApLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlZW5kJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zdG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9mbHlUb0ZyYW1lKTtcclxuICBcdFx0aWYgKHRoaXMuX3BhbkFuaW0pIHtcclxuICBcdFx0XHR0aGlzLl9wYW5BbmltLnN0b3AoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3Jhd1BhbkJ5OiBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX21hcFBhbmUsIHRoaXMuX2dldE1hcFBhbmVQb3MoKS5zdWJ0cmFjdChvZmZzZXQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFpvb21TcGFuOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmdldE1heFpvb20oKSAtIHRoaXMuZ2V0TWluWm9vbSgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcGFuSW5zaWRlTWF4Qm91bmRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fZW5mb3JjaW5nQm91bmRzKSB7XHJcbiAgXHRcdFx0dGhpcy5wYW5JbnNpZGVCb3VuZHModGhpcy5vcHRpb25zLm1heEJvdW5kcyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2NoZWNrSWZMb2FkZWQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQpIHtcclxuICBcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1NldCBtYXAgY2VudGVyIGFuZCB6b29tIGZpcnN0LicpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIERPTSBldmVudCBoYW5kbGluZ1xyXG5cclxuICBcdC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIGV2ZW50c1xyXG4gIFx0X2luaXRFdmVudHM6IGZ1bmN0aW9uIChyZW1vdmUkJDEpIHtcclxuICBcdFx0dGhpcy5fdGFyZ2V0cyA9IHt9O1xyXG4gIFx0XHR0aGlzLl90YXJnZXRzW3N0YW1wKHRoaXMuX2NvbnRhaW5lcildID0gdGhpcztcclxuXHJcbiAgXHRcdHZhciBvbk9mZiA9IHJlbW92ZSQkMSA/IG9mZiA6IG9uO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGNsaWNrOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIChvciB0YXBzKSB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgZGJsY2xpY2s6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBkb3VibGUtY2xpY2tzIChvciBkb3VibGUtdGFwcykgdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IG1vdXNlZG93bjogTW91c2VFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHB1c2hlcyB0aGUgbW91c2UgYnV0dG9uIG9uIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZXVwOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcmVsZWFzZXMgdGhlIG1vdXNlIGJ1dHRvbiBvbiB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW91c2VvdmVyOiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1vdXNlIGVudGVycyB0aGUgbWFwLlxyXG4gIFx0XHQvLyBAZXZlbnQgbW91c2VvdXQ6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbW91c2UgbGVhdmVzIHRoZSBtYXAuXHJcbiAgXHRcdC8vIEBldmVudCBtb3VzZW1vdmU6IE1vdXNlRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hpbGUgdGhlIG1vdXNlIG1vdmVzIG92ZXIgdGhlIG1hcC5cclxuICBcdFx0Ly8gQGV2ZW50IGNvbnRleHRtZW51OiBNb3VzZUV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHVzaGVzIHRoZSByaWdodCBtb3VzZSBidXR0b24gb24gdGhlIG1hcCwgcHJldmVudHNcclxuICBcdFx0Ly8gZGVmYXVsdCBicm93c2VyIGNvbnRleHQgbWVudSBmcm9tIHNob3dpbmcgaWYgdGhlcmUgYXJlIGxpc3RlbmVycyBvblxyXG4gIFx0XHQvLyB0aGlzIGV2ZW50LiBBbHNvIGZpcmVkIG9uIG1vYmlsZSB3aGVuIHRoZSB1c2VyIGhvbGRzIGEgc2luZ2xlIHRvdWNoXHJcbiAgXHRcdC8vIGZvciBhIHNlY29uZCAoYWxzbyBjYWxsZWQgbG9uZyBwcmVzcykuXHJcbiAgXHRcdC8vIEBldmVudCBrZXlwcmVzczogS2V5Ym9hcmRFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHByZXNzZXMgYSBrZXkgZnJvbSB0aGUga2V5Ym9hcmQgdGhhdCBwcm9kdWNlcyBhIGNoYXJhY3RlciB2YWx1ZSB3aGlsZSB0aGUgbWFwIGlzIGZvY3VzZWQuXHJcbiAgXHRcdC8vIEBldmVudCBrZXlkb3duOiBLZXlib2FyZEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyBhIGtleSBmcm9tIHRoZSBrZXlib2FyZCB3aGlsZSB0aGUgbWFwIGlzIGZvY3VzZWQuIFVubGlrZSB0aGUgYGtleXByZXNzYCBldmVudCxcclxuICBcdFx0Ly8gdGhlIGBrZXlkb3duYCBldmVudCBpcyBmaXJlZCBmb3Iga2V5cyB0aGF0IHByb2R1Y2UgYSBjaGFyYWN0ZXIgdmFsdWUgYW5kIGZvciBrZXlzXHJcbiAgXHRcdC8vIHRoYXQgZG8gbm90IHByb2R1Y2UgYSBjaGFyYWN0ZXIgdmFsdWUuXHJcbiAgXHRcdC8vIEBldmVudCBrZXl1cDogS2V5Ym9hcmRFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSB1c2VyIHJlbGVhc2VzIGEga2V5IGZyb20gdGhlIGtleWJvYXJkIHdoaWxlIHRoZSBtYXAgaXMgZm9jdXNlZC5cclxuICBcdFx0b25PZmYodGhpcy5fY29udGFpbmVyLCAnY2xpY2sgZGJsY2xpY2sgbW91c2Vkb3duIG1vdXNldXAgJyArXHJcbiAgXHRcdFx0J21vdXNlb3ZlciBtb3VzZW91dCBtb3VzZW1vdmUgY29udGV4dG1lbnUga2V5cHJlc3Mga2V5ZG93biBrZXl1cCcsIHRoaXMuX2hhbmRsZURPTUV2ZW50LCB0aGlzKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMudHJhY2tSZXNpemUpIHtcclxuICBcdFx0XHRvbk9mZih3aW5kb3csICdyZXNpemUnLCB0aGlzLl9vblJlc2l6ZSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChhbnkzZCAmJiB0aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCkge1xyXG4gIFx0XHRcdChyZW1vdmUkJDEgPyB0aGlzLm9mZiA6IHRoaXMub24pLmNhbGwodGhpcywgJ21vdmVlbmQnLCB0aGlzLl9vbk1vdmVFbmQpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblJlc2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fcmVzaXplUmVxdWVzdCk7XHJcbiAgXHRcdHRoaXMuX3Jlc2l6ZVJlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lKFxyXG4gIFx0XHQgICAgICAgIGZ1bmN0aW9uICgpIHsgdGhpcy5pbnZhbGlkYXRlU2l6ZSh7ZGVib3VuY2VNb3ZlZW5kOiB0cnVlfSk7IH0sIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25TY3JvbGw6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dGhpcy5fY29udGFpbmVyLnNjcm9sbFRvcCAgPSAwO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2Nyb2xsTGVmdCA9IDA7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbk1vdmVFbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHBvcyA9IHRoaXMuX2dldE1hcFBhbmVQb3MoKTtcclxuICBcdFx0aWYgKE1hdGgubWF4KE1hdGguYWJzKHBvcy54KSwgTWF0aC5hYnMocG9zLnkpKSA+PSB0aGlzLm9wdGlvbnMudHJhbnNmb3JtM0RMaW1pdCkge1xyXG4gIFx0XHRcdC8vIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTEyMDM4NzMgYnV0IFdlYmtpdCBhbHNvIGhhdmVcclxuICBcdFx0XHQvLyBhIHBpeGVsIG9mZnNldCBvbiB2ZXJ5IGhpZ2ggdmFsdWVzLCBzZWU6IGh0dHA6Ly9qc2ZpZGRsZS5uZXQvZGc2cjVoaGIvXHJcbiAgXHRcdFx0dGhpcy5fcmVzZXRWaWV3KHRoaXMuZ2V0Q2VudGVyKCksIHRoaXMuZ2V0Wm9vbSgpKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfZmluZEV2ZW50VGFyZ2V0czogZnVuY3Rpb24gKGUsIHR5cGUpIHtcclxuICBcdFx0dmFyIHRhcmdldHMgPSBbXSxcclxuICBcdFx0ICAgIHRhcmdldCxcclxuICBcdFx0ICAgIGlzSG92ZXIgPSB0eXBlID09PSAnbW91c2VvdXQnIHx8IHR5cGUgPT09ICdtb3VzZW92ZXInLFxyXG4gIFx0XHQgICAgc3JjID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50LFxyXG4gIFx0XHQgICAgZHJhZ2dpbmcgPSBmYWxzZTtcclxuXHJcbiAgXHRcdHdoaWxlIChzcmMpIHtcclxuICBcdFx0XHR0YXJnZXQgPSB0aGlzLl90YXJnZXRzW3N0YW1wKHNyYyldO1xyXG4gIFx0XHRcdGlmICh0YXJnZXQgJiYgKHR5cGUgPT09ICdjbGljaycgfHwgdHlwZSA9PT0gJ3ByZWNsaWNrJykgJiYgIWUuX3NpbXVsYXRlZCAmJiB0aGlzLl9kcmFnZ2FibGVNb3ZlZCh0YXJnZXQpKSB7XHJcbiAgXHRcdFx0XHQvLyBQcmV2ZW50IGZpcmluZyBjbGljayBhZnRlciB5b3UganVzdCBkcmFnZ2VkIGFuIG9iamVjdC5cclxuICBcdFx0XHRcdGRyYWdnaW5nID0gdHJ1ZTtcclxuICBcdFx0XHRcdGJyZWFrO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRpZiAodGFyZ2V0ICYmIHRhcmdldC5saXN0ZW5zKHR5cGUsIHRydWUpKSB7XHJcbiAgXHRcdFx0XHRpZiAoaXNIb3ZlciAmJiAhaXNFeHRlcm5hbFRhcmdldChzcmMsIGUpKSB7IGJyZWFrOyB9XHJcbiAgXHRcdFx0XHR0YXJnZXRzLnB1c2godGFyZ2V0KTtcclxuICBcdFx0XHRcdGlmIChpc0hvdmVyKSB7IGJyZWFrOyB9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGlmIChzcmMgPT09IHRoaXMuX2NvbnRhaW5lcikgeyBicmVhazsgfVxyXG4gIFx0XHRcdHNyYyA9IHNyYy5wYXJlbnROb2RlO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGlmICghdGFyZ2V0cy5sZW5ndGggJiYgIWRyYWdnaW5nICYmICFpc0hvdmVyICYmIGlzRXh0ZXJuYWxUYXJnZXQoc3JjLCBlKSkge1xyXG4gIFx0XHRcdHRhcmdldHMgPSBbdGhpc107XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRhcmdldHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9oYW5kbGVET01FdmVudDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9sb2FkZWQgfHwgc2tpcHBlZChlKSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdHZhciB0eXBlID0gZS50eXBlO1xyXG5cclxuICBcdFx0aWYgKHR5cGUgPT09ICdtb3VzZWRvd24nIHx8IHR5cGUgPT09ICdrZXlwcmVzcycgfHwgdHlwZSA9PT0gJ2tleXVwJyB8fCB0eXBlID09PSAna2V5ZG93bicpIHtcclxuICBcdFx0XHQvLyBwcmV2ZW50cyBvdXRsaW5lIHdoZW4gY2xpY2tpbmcgb24ga2V5Ym9hcmQtZm9jdXNhYmxlIGVsZW1lbnRcclxuICBcdFx0XHRwcmV2ZW50T3V0bGluZShlLnRhcmdldCB8fCBlLnNyY0VsZW1lbnQpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9maXJlRE9NRXZlbnQoZSwgdHlwZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3VzZUV2ZW50czogWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnY29udGV4dG1lbnUnXSxcclxuXHJcbiAgXHRfZmlyZURPTUV2ZW50OiBmdW5jdGlvbiAoZSwgdHlwZSwgdGFyZ2V0cykge1xyXG5cclxuICBcdFx0aWYgKGUudHlwZSA9PT0gJ2NsaWNrJykge1xyXG4gIFx0XHRcdC8vIEZpcmUgYSBzeW50aGV0aWMgJ3ByZWNsaWNrJyBldmVudCB3aGljaCBwcm9wYWdhdGVzIHVwIChtYWlubHkgZm9yIGNsb3NpbmcgcG9wdXBzKS5cclxuICBcdFx0XHQvLyBAZXZlbnQgcHJlY2xpY2s6IE1vdXNlRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCBiZWZvcmUgbW91c2UgY2xpY2sgb24gdGhlIG1hcCAoc29tZXRpbWVzIHVzZWZ1bCB3aGVuIHlvdVxyXG4gIFx0XHRcdC8vIHdhbnQgc29tZXRoaW5nIHRvIGhhcHBlbiBvbiBjbGljayBiZWZvcmUgYW55IGV4aXN0aW5nIGNsaWNrXHJcbiAgXHRcdFx0Ly8gaGFuZGxlcnMgc3RhcnQgcnVubmluZykuXHJcbiAgXHRcdFx0dmFyIHN5bnRoID0gZXh0ZW5kKHt9LCBlKTtcclxuICBcdFx0XHRzeW50aC50eXBlID0gJ3ByZWNsaWNrJztcclxuICBcdFx0XHR0aGlzLl9maXJlRE9NRXZlbnQoc3ludGgsIHN5bnRoLnR5cGUsIHRhcmdldHMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoZS5fc3RvcHBlZCkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdC8vIEZpbmQgdGhlIGxheWVyIHRoZSBldmVudCBpcyBwcm9wYWdhdGluZyBmcm9tIGFuZCBpdHMgcGFyZW50cy5cclxuICBcdFx0dGFyZ2V0cyA9ICh0YXJnZXRzIHx8IFtdKS5jb25jYXQodGhpcy5fZmluZEV2ZW50VGFyZ2V0cyhlLCB0eXBlKSk7XHJcblxyXG4gIFx0XHRpZiAoIXRhcmdldHMubGVuZ3RoKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0dmFyIHRhcmdldCA9IHRhcmdldHNbMF07XHJcbiAgXHRcdGlmICh0eXBlID09PSAnY29udGV4dG1lbnUnICYmIHRhcmdldC5saXN0ZW5zKHR5cGUsIHRydWUpKSB7XHJcbiAgXHRcdFx0cHJldmVudERlZmF1bHQoZSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBkYXRhID0ge1xyXG4gIFx0XHRcdG9yaWdpbmFsRXZlbnQ6IGVcclxuICBcdFx0fTtcclxuXHJcbiAgXHRcdGlmIChlLnR5cGUgIT09ICdrZXlwcmVzcycgJiYgZS50eXBlICE9PSAna2V5ZG93bicgJiYgZS50eXBlICE9PSAna2V5dXAnKSB7XHJcbiAgXHRcdFx0dmFyIGlzTWFya2VyID0gdGFyZ2V0LmdldExhdExuZyAmJiAoIXRhcmdldC5fcmFkaXVzIHx8IHRhcmdldC5fcmFkaXVzIDw9IDEwKTtcclxuICBcdFx0XHRkYXRhLmNvbnRhaW5lclBvaW50ID0gaXNNYXJrZXIgP1xyXG4gIFx0XHRcdFx0dGhpcy5sYXRMbmdUb0NvbnRhaW5lclBvaW50KHRhcmdldC5nZXRMYXRMbmcoKSkgOiB0aGlzLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xyXG4gIFx0XHRcdGRhdGEubGF5ZXJQb2ludCA9IHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQoZGF0YS5jb250YWluZXJQb2ludCk7XHJcbiAgXHRcdFx0ZGF0YS5sYXRsbmcgPSBpc01hcmtlciA/IHRhcmdldC5nZXRMYXRMbmcoKSA6IHRoaXMubGF5ZXJQb2ludFRvTGF0TG5nKGRhdGEubGF5ZXJQb2ludCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGFyZ2V0cy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHRhcmdldHNbaV0uZmlyZSh0eXBlLCBkYXRhLCB0cnVlKTtcclxuICBcdFx0XHRpZiAoZGF0YS5vcmlnaW5hbEV2ZW50Ll9zdG9wcGVkIHx8XHJcbiAgXHRcdFx0XHQodGFyZ2V0c1tpXS5vcHRpb25zLmJ1YmJsaW5nTW91c2VFdmVudHMgPT09IGZhbHNlICYmIGluZGV4T2YodGhpcy5fbW91c2VFdmVudHMsIHR5cGUpICE9PSAtMSkpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2RyYWdnYWJsZU1vdmVkOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdG9iaiA9IG9iai5kcmFnZ2luZyAmJiBvYmouZHJhZ2dpbmcuZW5hYmxlZCgpID8gb2JqIDogdGhpcztcclxuICBcdFx0cmV0dXJuIChvYmouZHJhZ2dpbmcgJiYgb2JqLmRyYWdnaW5nLm1vdmVkKCkpIHx8ICh0aGlzLmJveFpvb20gJiYgdGhpcy5ib3hab29tLm1vdmVkKCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2xlYXJIYW5kbGVyczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5faGFuZGxlcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHR0aGlzLl9oYW5kbGVyc1tpXS5kaXNhYmxlKCk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQHNlY3Rpb24gT3RoZXIgTWV0aG9kc1xyXG5cclxuICBcdC8vIEBtZXRob2Qgd2hlblJlYWR5KGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcclxuICBcdC8vIFJ1bnMgdGhlIGdpdmVuIGZ1bmN0aW9uIGBmbmAgd2hlbiB0aGUgbWFwIGdldHMgaW5pdGlhbGl6ZWQgd2l0aFxyXG4gIFx0Ly8gYSB2aWV3IChjZW50ZXIgYW5kIHpvb20pIGFuZCBhdCBsZWFzdCBvbmUgbGF5ZXIsIG9yIGltbWVkaWF0ZWx5XHJcbiAgXHQvLyBpZiBpdCdzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG9wdGlvbmFsbHkgcGFzc2luZyBhIGZ1bmN0aW9uIGNvbnRleHQuXHJcbiAgXHR3aGVuUmVhZHk6IGZ1bmN0aW9uIChjYWxsYmFjaywgY29udGV4dCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbG9hZGVkKSB7XHJcbiAgXHRcdFx0Y2FsbGJhY2suY2FsbChjb250ZXh0IHx8IHRoaXMsIHt0YXJnZXQ6IHRoaXN9KTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHR0aGlzLm9uKCdsb2FkJywgY2FsbGJhY2ssIGNvbnRleHQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcblxyXG4gIFx0Ly8gcHJpdmF0ZSBtZXRob2RzIGZvciBnZXR0aW5nIG1hcCBzdGF0ZVxyXG5cclxuICBcdF9nZXRNYXBQYW5lUG9zOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBnZXRQb3NpdGlvbih0aGlzLl9tYXBQYW5lKSB8fCBuZXcgUG9pbnQoMCwgMCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9tb3ZlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fZ2V0TWFwUGFuZVBvcygpO1xyXG4gIFx0XHRyZXR1cm4gcG9zICYmICFwb3MuZXF1YWxzKFswLCAwXSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRUb3BMZWZ0UG9pbnQ6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcclxuICBcdFx0dmFyIHBpeGVsT3JpZ2luID0gY2VudGVyICYmIHpvb20gIT09IHVuZGVmaW5lZCA/XHJcbiAgXHRcdFx0dGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKSA6XHJcbiAgXHRcdFx0dGhpcy5nZXRQaXhlbE9yaWdpbigpO1xyXG4gIFx0XHRyZXR1cm4gcGl4ZWxPcmlnaW4uc3VidHJhY3QodGhpcy5fZ2V0TWFwUGFuZVBvcygpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldE5ld1BpeGVsT3JpZ2luOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tKSB7XHJcbiAgXHRcdHZhciB2aWV3SGFsZiA9IHRoaXMuZ2V0U2l6ZSgpLl9kaXZpZGVCeSgyKTtcclxuICBcdFx0cmV0dXJuIHRoaXMucHJvamVjdChjZW50ZXIsIHpvb20pLl9zdWJ0cmFjdCh2aWV3SGFsZikuX2FkZCh0aGlzLl9nZXRNYXBQYW5lUG9zKCkpLl9yb3VuZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbGF0TG5nVG9OZXdMYXllclBvaW50OiBmdW5jdGlvbiAobGF0bG5nLCB6b29tLCBjZW50ZXIpIHtcclxuICBcdFx0dmFyIHRvcExlZnQgPSB0aGlzLl9nZXROZXdQaXhlbE9yaWdpbihjZW50ZXIsIHpvb20pO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0KGxhdGxuZywgem9vbSkuX3N1YnRyYWN0KHRvcExlZnQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfbGF0TG5nQm91bmRzVG9OZXdMYXllckJvdW5kczogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcywgem9vbSwgY2VudGVyKSB7XHJcbiAgXHRcdHZhciB0b3BMZWZ0ID0gdGhpcy5fZ2V0TmV3UGl4ZWxPcmlnaW4oY2VudGVyLCB6b29tKTtcclxuICBcdFx0cmV0dXJuIHRvQm91bmRzKFtcclxuICBcdFx0XHR0aGlzLnByb2plY3QobGF0TG5nQm91bmRzLmdldFNvdXRoV2VzdCgpLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdCksXHJcbiAgXHRcdFx0dGhpcy5wcm9qZWN0KGxhdExuZ0JvdW5kcy5nZXROb3J0aFdlc3QoKSwgem9vbSkuX3N1YnRyYWN0KHRvcExlZnQpLFxyXG4gIFx0XHRcdHRoaXMucHJvamVjdChsYXRMbmdCb3VuZHMuZ2V0U291dGhFYXN0KCksIHpvb20pLl9zdWJ0cmFjdCh0b3BMZWZ0KSxcclxuICBcdFx0XHR0aGlzLnByb2plY3QobGF0TG5nQm91bmRzLmdldE5vcnRoRWFzdCgpLCB6b29tKS5fc3VidHJhY3QodG9wTGVmdClcclxuICBcdFx0XSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGxheWVyIHBvaW50IG9mIHRoZSBjdXJyZW50IGNlbnRlclxyXG4gIFx0X2dldENlbnRlckxheWVyUG9pbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuY29udGFpbmVyUG9pbnRUb0xheWVyUG9pbnQodGhpcy5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gb2Zmc2V0IG9mIHRoZSBzcGVjaWZpZWQgcGxhY2UgdG8gdGhlIGN1cnJlbnQgY2VudGVyIGluIHBpeGVsc1xyXG4gIFx0X2dldENlbnRlck9mZnNldDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5sYXRMbmdUb0xheWVyUG9pbnQobGF0bG5nKS5zdWJ0cmFjdCh0aGlzLl9nZXRDZW50ZXJMYXllclBvaW50KCkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBhZGp1c3QgY2VudGVyIGZvciB2aWV3IHRvIGdldCBpbnNpZGUgYm91bmRzXHJcbiAgXHRfbGltaXRDZW50ZXI6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIGJvdW5kcykge1xyXG5cclxuICBcdFx0aWYgKCFib3VuZHMpIHsgcmV0dXJuIGNlbnRlcjsgfVxyXG5cclxuICBcdFx0dmFyIGNlbnRlclBvaW50ID0gdGhpcy5wcm9qZWN0KGNlbnRlciwgem9vbSksXHJcbiAgXHRcdCAgICB2aWV3SGFsZiA9IHRoaXMuZ2V0U2l6ZSgpLmRpdmlkZUJ5KDIpLFxyXG4gIFx0XHQgICAgdmlld0JvdW5kcyA9IG5ldyBCb3VuZHMoY2VudGVyUG9pbnQuc3VidHJhY3Qodmlld0hhbGYpLCBjZW50ZXJQb2ludC5hZGQodmlld0hhbGYpKSxcclxuICBcdFx0ICAgIG9mZnNldCA9IHRoaXMuX2dldEJvdW5kc09mZnNldCh2aWV3Qm91bmRzLCBib3VuZHMsIHpvb20pO1xyXG5cclxuICBcdFx0Ly8gSWYgb2Zmc2V0IGlzIGxlc3MgdGhhbiBhIHBpeGVsLCBpZ25vcmUuXHJcbiAgXHRcdC8vIFRoaXMgcHJldmVudHMgdW5zdGFibGUgcHJvamVjdGlvbnMgZnJvbSBnZXR0aW5nIGludG9cclxuICBcdFx0Ly8gYW4gaW5maW5pdGUgbG9vcCBvZiB0aW55IG9mZnNldHMuXHJcbiAgXHRcdGlmIChvZmZzZXQucm91bmQoKS5lcXVhbHMoWzAsIDBdKSkge1xyXG4gIFx0XHRcdHJldHVybiBjZW50ZXI7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLnVucHJvamVjdChjZW50ZXJQb2ludC5hZGQob2Zmc2V0KSwgem9vbSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIGFkanVzdCBvZmZzZXQgZm9yIHZpZXcgdG8gZ2V0IGluc2lkZSBib3VuZHNcclxuICBcdF9saW1pdE9mZnNldDogZnVuY3Rpb24gKG9mZnNldCwgYm91bmRzKSB7XHJcbiAgXHRcdGlmICghYm91bmRzKSB7IHJldHVybiBvZmZzZXQ7IH1cclxuXHJcbiAgXHRcdHZhciB2aWV3Qm91bmRzID0gdGhpcy5nZXRQaXhlbEJvdW5kcygpLFxyXG4gIFx0XHQgICAgbmV3Qm91bmRzID0gbmV3IEJvdW5kcyh2aWV3Qm91bmRzLm1pbi5hZGQob2Zmc2V0KSwgdmlld0JvdW5kcy5tYXguYWRkKG9mZnNldCkpO1xyXG5cclxuICBcdFx0cmV0dXJuIG9mZnNldC5hZGQodGhpcy5fZ2V0Qm91bmRzT2Zmc2V0KG5ld0JvdW5kcywgYm91bmRzKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIHJldHVybnMgb2Zmc2V0IG5lZWRlZCBmb3IgcHhCb3VuZHMgdG8gZ2V0IGluc2lkZSBtYXhCb3VuZHMgYXQgYSBzcGVjaWZpZWQgem9vbVxyXG4gIFx0X2dldEJvdW5kc09mZnNldDogZnVuY3Rpb24gKHB4Qm91bmRzLCBtYXhCb3VuZHMsIHpvb20pIHtcclxuICBcdFx0dmFyIHByb2plY3RlZE1heEJvdW5kcyA9IHRvQm91bmRzKFxyXG4gIFx0XHQgICAgICAgIHRoaXMucHJvamVjdChtYXhCb3VuZHMuZ2V0Tm9ydGhFYXN0KCksIHpvb20pLFxyXG4gIFx0XHQgICAgICAgIHRoaXMucHJvamVjdChtYXhCb3VuZHMuZ2V0U291dGhXZXN0KCksIHpvb20pXHJcbiAgXHRcdCAgICApLFxyXG4gIFx0XHQgICAgbWluT2Zmc2V0ID0gcHJvamVjdGVkTWF4Qm91bmRzLm1pbi5zdWJ0cmFjdChweEJvdW5kcy5taW4pLFxyXG4gIFx0XHQgICAgbWF4T2Zmc2V0ID0gcHJvamVjdGVkTWF4Qm91bmRzLm1heC5zdWJ0cmFjdChweEJvdW5kcy5tYXgpLFxyXG5cclxuICBcdFx0ICAgIGR4ID0gdGhpcy5fcmVib3VuZChtaW5PZmZzZXQueCwgLW1heE9mZnNldC54KSxcclxuICBcdFx0ICAgIGR5ID0gdGhpcy5fcmVib3VuZChtaW5PZmZzZXQueSwgLW1heE9mZnNldC55KTtcclxuXHJcbiAgXHRcdHJldHVybiBuZXcgUG9pbnQoZHgsIGR5KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlYm91bmQ6IGZ1bmN0aW9uIChsZWZ0LCByaWdodCkge1xyXG4gIFx0XHRyZXR1cm4gbGVmdCArIHJpZ2h0ID4gMCA/XHJcbiAgXHRcdFx0TWF0aC5yb3VuZChsZWZ0IC0gcmlnaHQpIC8gMiA6XHJcbiAgXHRcdFx0TWF0aC5tYXgoMCwgTWF0aC5jZWlsKGxlZnQpKSAtIE1hdGgubWF4KDAsIE1hdGguZmxvb3IocmlnaHQpKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2xpbWl0Wm9vbTogZnVuY3Rpb24gKHpvb20pIHtcclxuICBcdFx0dmFyIG1pbiA9IHRoaXMuZ2V0TWluWm9vbSgpLFxyXG4gIFx0XHQgICAgbWF4ID0gdGhpcy5nZXRNYXhab29tKCksXHJcbiAgXHRcdCAgICBzbmFwID0gYW55M2QgPyB0aGlzLm9wdGlvbnMuem9vbVNuYXAgOiAxO1xyXG4gIFx0XHRpZiAoc25hcCkge1xyXG4gIFx0XHRcdHpvb20gPSBNYXRoLnJvdW5kKHpvb20gLyBzbmFwKSAqIHNuYXA7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4obWF4LCB6b29tKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblBhblRyYW5zaXRpb25TdGVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuZmlyZSgnbW92ZScpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25QYW5UcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcFBhbmUsICdsZWFmbGV0LXBhbi1hbmltJyk7XHJcbiAgXHRcdHRoaXMuZmlyZSgnbW92ZWVuZCcpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdHJ5QW5pbWF0ZWRQYW46IGZ1bmN0aW9uIChjZW50ZXIsIG9wdGlvbnMpIHtcclxuICBcdFx0Ly8gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBuZXcgYW5kIGN1cnJlbnQgY2VudGVycyBpbiBwaXhlbHNcclxuICBcdFx0dmFyIG9mZnNldCA9IHRoaXMuX2dldENlbnRlck9mZnNldChjZW50ZXIpLl90cnVuYygpO1xyXG5cclxuICBcdFx0Ly8gZG9uJ3QgYW5pbWF0ZSB0b28gZmFyIHVubGVzcyBhbmltYXRlOiB0cnVlIHNwZWNpZmllZCBpbiBvcHRpb25zXHJcbiAgXHRcdGlmICgob3B0aW9ucyAmJiBvcHRpb25zLmFuaW1hdGUpICE9PSB0cnVlICYmICF0aGlzLmdldFNpemUoKS5jb250YWlucyhvZmZzZXQpKSB7IHJldHVybiBmYWxzZTsgfVxyXG5cclxuICBcdFx0dGhpcy5wYW5CeShvZmZzZXQsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRydWU7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jcmVhdGVBbmltUHJveHk6IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdHZhciBwcm94eSA9IHRoaXMuX3Byb3h5ID0gY3JlYXRlJDEoJ2RpdicsICdsZWFmbGV0LXByb3h5IGxlYWZsZXQtem9vbS1hbmltYXRlZCcpO1xyXG4gIFx0XHR0aGlzLl9wYW5lcy5tYXBQYW5lLmFwcGVuZENoaWxkKHByb3h5KTtcclxuXHJcbiAgXHRcdHRoaXMub24oJ3pvb21hbmltJywgZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0XHR2YXIgcHJvcCA9IFRSQU5TRk9STSxcclxuICBcdFx0XHQgICAgdHJhbnNmb3JtID0gdGhpcy5fcHJveHkuc3R5bGVbcHJvcF07XHJcblxyXG4gIFx0XHRcdHNldFRyYW5zZm9ybSh0aGlzLl9wcm94eSwgdGhpcy5wcm9qZWN0KGUuY2VudGVyLCBlLnpvb20pLCB0aGlzLmdldFpvb21TY2FsZShlLnpvb20sIDEpKTtcclxuXHJcbiAgXHRcdFx0Ly8gd29ya2Fyb3VuZCBmb3IgY2FzZSB3aGVuIHRyYW5zZm9ybSBpcyB0aGUgc2FtZSBhbmQgc28gdHJhbnNpdGlvbmVuZCBldmVudCBpcyBub3QgZmlyZWRcclxuICBcdFx0XHRpZiAodHJhbnNmb3JtID09PSB0aGlzLl9wcm94eS5zdHlsZVtwcm9wXSAmJiB0aGlzLl9hbmltYXRpbmdab29tKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9vblpvb21UcmFuc2l0aW9uRW5kKCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9LCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMub24oJ2xvYWQgbW92ZWVuZCcsIHRoaXMuX2FuaW1Nb3ZlRW5kLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX29uKCd1bmxvYWQnLCB0aGlzLl9kZXN0cm95QW5pbVByb3h5LCB0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2Rlc3Ryb3lBbmltUHJveHk6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlKHRoaXMuX3Byb3h5KTtcclxuICBcdFx0dGhpcy5vZmYoJ2xvYWQgbW92ZWVuZCcsIHRoaXMuX2FuaW1Nb3ZlRW5kLCB0aGlzKTtcclxuICBcdFx0ZGVsZXRlIHRoaXMuX3Byb3h5O1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfYW5pbU1vdmVFbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGMgPSB0aGlzLmdldENlbnRlcigpLFxyXG4gIFx0XHQgICAgeiA9IHRoaXMuZ2V0Wm9vbSgpO1xyXG4gIFx0XHRzZXRUcmFuc2Zvcm0odGhpcy5fcHJveHksIHRoaXMucHJvamVjdChjLCB6KSwgdGhpcy5nZXRab29tU2NhbGUoeiwgMSkpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY2F0Y2hUcmFuc2l0aW9uRW5kOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRpZiAodGhpcy5fYW5pbWF0aW5nWm9vbSAmJiBlLnByb3BlcnR5TmFtZS5pbmRleE9mKCd0cmFuc2Zvcm0nKSA+PSAwKSB7XHJcbiAgXHRcdFx0dGhpcy5fb25ab29tVHJhbnNpdGlvbkVuZCgpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9ub3RoaW5nVG9BbmltYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiAhdGhpcy5fY29udGFpbmVyLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2xlYWZsZXQtem9vbS1hbmltYXRlZCcpLmxlbmd0aDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RyeUFuaW1hdGVkWm9vbTogZnVuY3Rpb24gKGNlbnRlciwgem9vbSwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuIHRydWU7IH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuICBcdFx0Ly8gZG9uJ3QgYW5pbWF0ZSBpZiBkaXNhYmxlZCwgbm90IHN1cHBvcnRlZCBvciB6b29tIGRpZmZlcmVuY2UgaXMgdG9vIGxhcmdlXHJcbiAgXHRcdGlmICghdGhpcy5fem9vbUFuaW1hdGVkIHx8IG9wdGlvbnMuYW5pbWF0ZSA9PT0gZmFsc2UgfHwgdGhpcy5fbm90aGluZ1RvQW5pbWF0ZSgpIHx8XHJcbiAgXHRcdCAgICAgICAgTWF0aC5hYnMoem9vbSAtIHRoaXMuX3pvb20pID4gdGhpcy5vcHRpb25zLnpvb21BbmltYXRpb25UaHJlc2hvbGQpIHsgcmV0dXJuIGZhbHNlOyB9XHJcblxyXG4gIFx0XHQvLyBvZmZzZXQgaXMgdGhlIHBpeGVsIGNvb3JkcyBvZiB0aGUgem9vbSBvcmlnaW4gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgY2VudGVyXHJcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuZ2V0Wm9vbVNjYWxlKHpvb20pLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gdGhpcy5fZ2V0Q2VudGVyT2Zmc2V0KGNlbnRlcikuX2RpdmlkZUJ5KDEgLSAxIC8gc2NhbGUpO1xyXG5cclxuICBcdFx0Ly8gZG9uJ3QgYW5pbWF0ZSBpZiB0aGUgem9vbSBvcmlnaW4gaXNuJ3Qgd2l0aGluIG9uZSBzY3JlZW4gZnJvbSB0aGUgY3VycmVudCBjZW50ZXIsIHVubGVzcyBmb3JjZWRcclxuICBcdFx0aWYgKG9wdGlvbnMuYW5pbWF0ZSAhPT0gdHJ1ZSAmJiAhdGhpcy5nZXRTaXplKCkuY29udGFpbnMob2Zmc2V0KSkgeyByZXR1cm4gZmFsc2U7IH1cclxuXHJcbiAgXHRcdHJlcXVlc3RBbmltRnJhbWUoZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRcdHRoaXNcclxuICBcdFx0XHQgICAgLl9tb3ZlU3RhcnQodHJ1ZSwgZmFsc2UpXHJcbiAgXHRcdFx0ICAgIC5fYW5pbWF0ZVpvb20oY2VudGVyLCB6b29tLCB0cnVlKTtcclxuICBcdFx0fSwgdGhpcyk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdHJ1ZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tLCBzdGFydEFuaW0sIG5vVXBkYXRlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbWFwUGFuZSkgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdGlmIChzdGFydEFuaW0pIHtcclxuICBcdFx0XHR0aGlzLl9hbmltYXRpbmdab29tID0gdHJ1ZTtcclxuXHJcbiAgXHRcdFx0Ly8gcmVtZW1iZXIgd2hhdCBjZW50ZXIvem9vbSB0byBzZXQgYWZ0ZXIgYW5pbWF0aW9uXHJcbiAgXHRcdFx0dGhpcy5fYW5pbWF0ZVRvQ2VudGVyID0gY2VudGVyO1xyXG4gIFx0XHRcdHRoaXMuX2FuaW1hdGVUb1pvb20gPSB6b29tO1xyXG5cclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9tYXBQYW5lLCAnbGVhZmxldC16b29tLWFuaW0nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQHNlY3Rpb24gT3RoZXIgRXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCB6b29tYW5pbTogWm9vbUFuaW1FdmVudFxyXG4gIFx0XHQvLyBGaXJlZCBhdCBsZWFzdCBvbmNlIHBlciB6b29tIGFuaW1hdGlvbi4gRm9yIGNvbnRpbnVvdXMgem9vbSwgbGlrZSBwaW5jaCB6b29taW5nLCBmaXJlZCBvbmNlIHBlciBmcmFtZSBkdXJpbmcgem9vbS5cclxuICBcdFx0dGhpcy5maXJlKCd6b29tYW5pbScsIHtcclxuICBcdFx0XHRjZW50ZXI6IGNlbnRlcixcclxuICBcdFx0XHR6b29tOiB6b29tLFxyXG4gIFx0XHRcdG5vVXBkYXRlOiBub1VwZGF0ZVxyXG4gIFx0XHR9KTtcclxuXHJcbiAgXHRcdC8vIFdvcmsgYXJvdW5kIHdlYmtpdCBub3QgZmlyaW5nICd0cmFuc2l0aW9uZW5kJywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzM2ODksIDI2OTNcclxuICBcdFx0c2V0VGltZW91dChiaW5kKHRoaXMuX29uWm9vbVRyYW5zaXRpb25FbmQsIHRoaXMpLCAyNTApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfb25ab29tVHJhbnNpdGlvbkVuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwUGFuZSkge1xyXG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcFBhbmUsICdsZWFmbGV0LXpvb20tYW5pbScpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9hbmltYXRpbmdab29tID0gZmFsc2U7XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlKHRoaXMuX2FuaW1hdGVUb0NlbnRlciwgdGhpcy5fYW5pbWF0ZVRvWm9vbSk7XHJcblxyXG4gIFx0XHQvLyBUaGlzIGFuaW0gZnJhbWUgc2hvdWxkIHByZXZlbnQgYW4gb2JzY3VyZSBpT1Mgd2Via2l0IHRpbGUgbG9hZGluZyByYWNlIGNvbmRpdGlvbi5cclxuICBcdFx0cmVxdWVzdEFuaW1GcmFtZShmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdFx0dGhpcy5fbW92ZUVuZCh0cnVlKTtcclxuICBcdFx0fSwgdGhpcyk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBzZWN0aW9uXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubWFwKGlkOiBTdHJpbmcsIG9wdGlvbnM/OiBNYXAgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBtYXAgb2JqZWN0IGdpdmVuIHRoZSBET00gSUQgb2YgYSBgPGRpdj5gIGVsZW1lbnRcclxuICAvLyBhbmQgb3B0aW9uYWxseSBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGBNYXAgb3B0aW9uc2AuXHJcbiAgLy9cclxuICAvLyBAYWx0ZXJuYXRpdmVcclxuICAvLyBAZmFjdG9yeSBMLm1hcChlbDogSFRNTEVsZW1lbnQsIG9wdGlvbnM/OiBNYXAgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBtYXAgb2JqZWN0IGdpdmVuIGFuIGluc3RhbmNlIG9mIGEgYDxkaXY+YCBIVE1MIGVsZW1lbnRcclxuICAvLyBhbmQgb3B0aW9uYWxseSBhbiBvYmplY3QgbGl0ZXJhbCB3aXRoIGBNYXAgb3B0aW9uc2AuXHJcbiAgZnVuY3Rpb24gY3JlYXRlTWFwKGlkLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IE1hcChpZCwgb3B0aW9ucyk7XHJcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2xcclxuICAgKiBAYWthIEwuQ29udHJvbFxyXG4gICAqIEBpbmhlcml0cyBDbGFzc1xyXG4gICAqXHJcbiAgICogTC5Db250cm9sIGlzIGEgYmFzZSBjbGFzcyBmb3IgaW1wbGVtZW50aW5nIG1hcCBjb250cm9scy4gSGFuZGxlcyBwb3NpdGlvbmluZy5cclxuICAgKiBBbGwgb3RoZXIgY29udHJvbHMgZXh0ZW5kIGZyb20gdGhpcyBjbGFzcy5cclxuICAgKi9cclxuXHJcbiAgdmFyIENvbnRyb2wgPSBDbGFzcy5leHRlbmQoe1xyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgQ29udHJvbCBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gcG9zaXRpb246IFN0cmluZyA9ICd0b3ByaWdodCdcclxuICBcdFx0Ly8gVGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sIChvbmUgb2YgdGhlIG1hcCBjb3JuZXJzKS4gUG9zc2libGUgdmFsdWVzIGFyZSBgJ3RvcGxlZnQnYCxcclxuICBcdFx0Ly8gYCd0b3ByaWdodCdgLCBgJ2JvdHRvbWxlZnQnYCBvciBgJ2JvdHRvbXJpZ2h0J2BcclxuICBcdFx0cG9zaXRpb246ICd0b3ByaWdodCdcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQHNlY3Rpb25cclxuICBcdCAqIENsYXNzZXMgZXh0ZW5kaW5nIEwuQ29udHJvbCB3aWxsIGluaGVyaXQgdGhlIGZvbGxvd2luZyBtZXRob2RzOlxyXG4gIFx0ICpcclxuICBcdCAqIEBtZXRob2QgZ2V0UG9zaXRpb246IHN0cmluZ1xyXG4gIFx0ICogUmV0dXJucyB0aGUgcG9zaXRpb24gb2YgdGhlIGNvbnRyb2wuXHJcbiAgXHQgKi9cclxuICBcdGdldFBvc2l0aW9uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLm9wdGlvbnMucG9zaXRpb247XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UG9zaXRpb24ocG9zaXRpb246IHN0cmluZyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHBvc2l0aW9uIG9mIHRoZSBjb250cm9sLlxyXG4gIFx0c2V0UG9zaXRpb246IGZ1bmN0aW9uIChwb3NpdGlvbikge1xyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xyXG5cclxuICBcdFx0aWYgKG1hcCkge1xyXG4gIFx0XHRcdG1hcC5yZW1vdmVDb250cm9sKHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLm9wdGlvbnMucG9zaXRpb24gPSBwb3NpdGlvbjtcclxuXHJcbiAgXHRcdGlmIChtYXApIHtcclxuICBcdFx0XHRtYXAuYWRkQ29udHJvbCh0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q29udGFpbmVyOiBIVE1MRWxlbWVudFxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgSFRNTEVsZW1lbnQgdGhhdCBjb250YWlucyB0aGUgY29udHJvbC5cclxuICBcdGdldENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZFRvKG1hcDogTWFwKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyB0aGUgY29udHJvbCB0byB0aGUgZ2l2ZW4gbWFwLlxyXG4gIFx0YWRkVG86IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0dGhpcy5yZW1vdmUoKTtcclxuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xyXG5cclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IHRoaXMub25BZGQobWFwKSxcclxuICBcdFx0ICAgIHBvcyA9IHRoaXMuZ2V0UG9zaXRpb24oKSxcclxuICBcdFx0ICAgIGNvcm5lciA9IG1hcC5fY29udHJvbENvcm5lcnNbcG9zXTtcclxuXHJcbiAgXHRcdGFkZENsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtY29udHJvbCcpO1xyXG5cclxuICBcdFx0aWYgKHBvcy5pbmRleE9mKCdib3R0b20nKSAhPT0gLTEpIHtcclxuICBcdFx0XHRjb3JuZXIuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lciwgY29ybmVyLmZpcnN0Q2hpbGQpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGNvcm5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tYXAub24oJ3VubG9hZCcsIHRoaXMucmVtb3ZlLCB0aGlzKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgY29udHJvbCBmcm9tIHRoZSBtYXAgaXQgaXMgY3VycmVudGx5IGFjdGl2ZSBvbi5cclxuICBcdHJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHJldHVybiB0aGlzO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZW1vdmUodGhpcy5fY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9uUmVtb3ZlKSB7XHJcbiAgXHRcdFx0dGhpcy5vblJlbW92ZSh0aGlzLl9tYXApO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tYXAub2ZmKCd1bmxvYWQnLCB0aGlzLnJlbW92ZSwgdGhpcyk7XHJcbiAgXHRcdHRoaXMuX21hcCA9IG51bGw7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlZm9jdXNPbk1hcDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0Ly8gaWYgbWFwIGV4aXN0cyBhbmQgZXZlbnQgaXMgbm90IGEga2V5Ym9hcmQgZXZlbnRcclxuICBcdFx0aWYgKHRoaXMuX21hcCAmJiBlICYmIGUuc2NyZWVuWCA+IDAgJiYgZS5zY3JlZW5ZID4gMCkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5nZXRDb250YWluZXIoKS5mb2N1cygpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIHZhciBjb250cm9sID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgQ29udHJvbChvcHRpb25zKTtcclxuICB9O1xyXG5cclxuICAvKiBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xyXG4gICAqIEB1bmluaGVyaXRhYmxlXHJcbiAgICpcclxuICAgKiBFdmVyeSBjb250cm9sIHNob3VsZCBleHRlbmQgZnJvbSBgTC5Db250cm9sYCBhbmQgKHJlLSlpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2RzLlxyXG4gICAqXHJcbiAgICogQG1ldGhvZCBvbkFkZChtYXA6IE1hcCk6IEhUTUxFbGVtZW50XHJcbiAgICogU2hvdWxkIHJldHVybiB0aGUgY29udGFpbmVyIERPTSBlbGVtZW50IGZvciB0aGUgY29udHJvbCBhbmQgYWRkIGxpc3RlbmVycyBvbiByZWxldmFudCBtYXAgZXZlbnRzLiBDYWxsZWQgb24gW2Bjb250cm9sLmFkZFRvKG1hcClgXSgjY29udHJvbC1hZGRUbykuXHJcbiAgICpcclxuICAgKiBAbWV0aG9kIG9uUmVtb3ZlKG1hcDogTWFwKVxyXG4gICAqIE9wdGlvbmFsIG1ldGhvZC4gU2hvdWxkIGNvbnRhaW4gYWxsIGNsZWFuIHVwIGNvZGUgdGhhdCByZW1vdmVzIHRoZSBsaXN0ZW5lcnMgcHJldmlvdXNseSBhZGRlZCBpbiBbYG9uQWRkYF0oI2NvbnRyb2wtb25hZGQpLiBDYWxsZWQgb24gW2Bjb250cm9sLnJlbW92ZSgpYF0oI2NvbnRyb2wtcmVtb3ZlKS5cclxuICAgKi9cclxuXHJcbiAgLyogQG5hbWVzcGFjZSBNYXBcclxuICAgKiBAc2VjdGlvbiBNZXRob2RzIGZvciBMYXllcnMgYW5kIENvbnRyb2xzXHJcbiAgICovXHJcbiAgTWFwLmluY2x1ZGUoe1xyXG4gIFx0Ly8gQG1ldGhvZCBhZGRDb250cm9sKGNvbnRyb2w6IENvbnRyb2wpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBjb250cm9sIHRvIHRoZSBtYXBcclxuICBcdGFkZENvbnRyb2w6IGZ1bmN0aW9uIChjb250cm9sKSB7XHJcbiAgXHRcdGNvbnRyb2wuYWRkVG8odGhpcyk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUNvbnRyb2woY29udHJvbDogQ29udHJvbCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIGdpdmVuIGNvbnRyb2wgZnJvbSB0aGUgbWFwXHJcbiAgXHRyZW1vdmVDb250cm9sOiBmdW5jdGlvbiAoY29udHJvbCkge1xyXG4gIFx0XHRjb250cm9sLnJlbW92ZSgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRDb250cm9sUG9zOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBjb3JuZXJzID0gdGhpcy5fY29udHJvbENvcm5lcnMgPSB7fSxcclxuICBcdFx0ICAgIGwgPSAnbGVhZmxldC0nLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udHJvbENvbnRhaW5lciA9XHJcbiAgXHRcdCAgICAgICAgICAgIGNyZWF0ZSQxKCdkaXYnLCBsICsgJ2NvbnRyb2wtY29udGFpbmVyJywgdGhpcy5fY29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGZ1bmN0aW9uIGNyZWF0ZUNvcm5lcih2U2lkZSwgaFNpZGUpIHtcclxuICBcdFx0XHR2YXIgY2xhc3NOYW1lID0gbCArIHZTaWRlICsgJyAnICsgbCArIGhTaWRlO1xyXG5cclxuICBcdFx0XHRjb3JuZXJzW3ZTaWRlICsgaFNpZGVdID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Y3JlYXRlQ29ybmVyKCd0b3AnLCAnbGVmdCcpO1xyXG4gIFx0XHRjcmVhdGVDb3JuZXIoJ3RvcCcsICdyaWdodCcpO1xyXG4gIFx0XHRjcmVhdGVDb3JuZXIoJ2JvdHRvbScsICdsZWZ0Jyk7XHJcbiAgXHRcdGNyZWF0ZUNvcm5lcignYm90dG9tJywgJ3JpZ2h0Jyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jbGVhckNvbnRyb2xQb3M6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9jb250cm9sQ29ybmVycykge1xyXG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9jb250cm9sQ29ybmVyc1tpXSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRyb2xDb250YWluZXIpO1xyXG4gIFx0XHRkZWxldGUgdGhpcy5fY29udHJvbENvcm5lcnM7XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jb250cm9sQ29udGFpbmVyO1xyXG4gIFx0fVxyXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIENvbnRyb2wuTGF5ZXJzXHJcbiAgICogQGFrYSBMLkNvbnRyb2wuTGF5ZXJzXHJcbiAgICogQGluaGVyaXRzIENvbnRyb2xcclxuICAgKlxyXG4gICAqIFRoZSBsYXllcnMgY29udHJvbCBnaXZlcyB1c2VycyB0aGUgYWJpbGl0eSB0byBzd2l0Y2ggYmV0d2VlbiBkaWZmZXJlbnQgYmFzZSBsYXllcnMgYW5kIHN3aXRjaCBvdmVybGF5cyBvbi9vZmYgKGNoZWNrIG91dCB0aGUgW2RldGFpbGVkIGV4YW1wbGVdKGh0dHA6Ly9sZWFmbGV0anMuY29tL2V4YW1wbGVzL2xheWVycy1jb250cm9sLykpLiBFeHRlbmRzIGBDb250cm9sYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBiYXNlTGF5ZXJzID0ge1xyXG4gICAqIFx0XCJNYXBib3hcIjogbWFwYm94LFxyXG4gICAqIFx0XCJPcGVuU3RyZWV0TWFwXCI6IG9zbVxyXG4gICAqIH07XHJcbiAgICpcclxuICAgKiB2YXIgb3ZlcmxheXMgPSB7XHJcbiAgICogXHRcIk1hcmtlclwiOiBtYXJrZXIsXHJcbiAgICogXHRcIlJvYWRzXCI6IHJvYWRzTGF5ZXJcclxuICAgKiB9O1xyXG4gICAqXHJcbiAgICogTC5jb250cm9sLmxheWVycyhiYXNlTGF5ZXJzLCBvdmVybGF5cykuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIFRoZSBgYmFzZUxheWVyc2AgYW5kIGBvdmVybGF5c2AgcGFyYW1ldGVycyBhcmUgb2JqZWN0IGxpdGVyYWxzIHdpdGggbGF5ZXIgbmFtZXMgYXMga2V5cyBhbmQgYExheWVyYCBvYmplY3RzIGFzIHZhbHVlczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICoge1xyXG4gICAqICAgICBcIjxzb21lTmFtZTE+XCI6IGxheWVyMSxcclxuICAgKiAgICAgXCI8c29tZU5hbWUyPlwiOiBsYXllcjJcclxuICAgKiB9XHJcbiAgICogYGBgXHJcbiAgICpcclxuICAgKiBUaGUgbGF5ZXIgbmFtZXMgY2FuIGNvbnRhaW4gSFRNTCwgd2hpY2ggYWxsb3dzIHlvdSB0byBhZGQgYWRkaXRpb25hbCBzdHlsaW5nIHRvIHRoZSBpdGVtczpcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICoge1wiPGltZyBzcmM9J215LWxheWVyLWljb24nIC8+IDxzcGFuIGNsYXNzPSdteS1sYXllci1pdGVtJz5NeSBMYXllcjwvc3Bhbj5cIjogbXlMYXllcn1cclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIExheWVycyA9IENvbnRyb2wuZXh0ZW5kKHtcclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIENvbnRyb2wuTGF5ZXJzIG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBjb2xsYXBzZWQ6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIGNvbnRyb2wgd2lsbCBiZSBjb2xsYXBzZWQgaW50byBhbiBpY29uIGFuZCBleHBhbmRlZCBvbiBtb3VzZSBob3ZlciBvciB0b3VjaC5cclxuICBcdFx0Y29sbGFwc2VkOiB0cnVlLFxyXG4gIFx0XHRwb3NpdGlvbjogJ3RvcHJpZ2h0JyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1pJbmRleDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgY29udHJvbCB3aWxsIGFzc2lnbiB6SW5kZXhlcyBpbiBpbmNyZWFzaW5nIG9yZGVyIHRvIGFsbCBvZiBpdHMgbGF5ZXJzIHNvIHRoYXQgdGhlIG9yZGVyIGlzIHByZXNlcnZlZCB3aGVuIHN3aXRjaGluZyB0aGVtIG9uL29mZi5cclxuICBcdFx0YXV0b1pJbmRleDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gaGlkZVNpbmdsZUJhc2U6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGxheWVycyBpbiB0aGUgY29udHJvbCB3aWxsIGJlIGhpZGRlbiB3aGVuIHRoZXJlIGlzIG9ubHkgb25lLlxyXG4gIFx0XHRoaWRlU2luZ2xlQmFzZTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHNvcnRMYXllcnM6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRvIHNvcnQgdGhlIGxheWVycy4gV2hlbiBgZmFsc2VgLCBsYXllcnMgd2lsbCBrZWVwIHRoZSBvcmRlclxyXG4gIFx0XHQvLyBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQgdG8gdGhlIGNvbnRyb2wuXHJcbiAgXHRcdHNvcnRMYXllcnM6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzb3J0RnVuY3Rpb246IEZ1bmN0aW9uID0gKlxyXG4gIFx0XHQvLyBBIFtjb21wYXJlIGZ1bmN0aW9uXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9BcnJheS9zb3J0KVxyXG4gIFx0XHQvLyB0aGF0IHdpbGwgYmUgdXNlZCBmb3Igc29ydGluZyB0aGUgbGF5ZXJzLCB3aGVuIGBzb3J0TGF5ZXJzYCBpcyBgdHJ1ZWAuXHJcbiAgXHRcdC8vIFRoZSBmdW5jdGlvbiByZWNlaXZlcyBib3RoIHRoZSBgTC5MYXllcmAgaW5zdGFuY2VzIGFuZCB0aGVpciBuYW1lcywgYXMgaW5cclxuICBcdFx0Ly8gYHNvcnRGdW5jdGlvbihsYXllckEsIGxheWVyQiwgbmFtZUEsIG5hbWVCKWAuXHJcbiAgXHRcdC8vIEJ5IGRlZmF1bHQsIGl0IHNvcnRzIGxheWVycyBhbHBoYWJldGljYWxseSBieSB0aGVpciBuYW1lLlxyXG4gIFx0XHRzb3J0RnVuY3Rpb246IGZ1bmN0aW9uIChsYXllckEsIGxheWVyQiwgbmFtZUEsIG5hbWVCKSB7XHJcbiAgXHRcdFx0cmV0dXJuIG5hbWVBIDwgbmFtZUIgPyAtMSA6IChuYW1lQiA8IG5hbWVBID8gMSA6IDApO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChiYXNlTGF5ZXJzLCBvdmVybGF5cywgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzID0gW107XHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IFtdO1xyXG4gIFx0XHR0aGlzLl9sYXN0WkluZGV4ID0gMDtcclxuICBcdFx0dGhpcy5faGFuZGxpbmdDbGljayA9IGZhbHNlO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSBpbiBiYXNlTGF5ZXJzKSB7XHJcbiAgXHRcdFx0dGhpcy5fYWRkTGF5ZXIoYmFzZUxheWVyc1tpXSwgaSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGZvciAoaSBpbiBvdmVybGF5cykge1xyXG4gIFx0XHRcdHRoaXMuX2FkZExheWVyKG92ZXJsYXlzW2ldLCBpLCB0cnVlKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLl9pbml0TGF5b3V0KCk7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xyXG5cclxuICBcdFx0dGhpcy5fbWFwID0gbWFwO1xyXG4gIFx0XHRtYXAub24oJ3pvb21lbmQnLCB0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzLCB0aGlzKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdFx0dGhpcy5fbGF5ZXJzW2ldLmxheWVyLm9uKCdhZGQgcmVtb3ZlJywgdGhpcy5fb25MYXllckNoYW5nZSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzLl9jb250YWluZXI7XHJcbiAgXHR9LFxyXG5cclxuICBcdGFkZFRvOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdENvbnRyb2wucHJvdG90eXBlLmFkZFRvLmNhbGwodGhpcywgbWFwKTtcclxuICBcdFx0Ly8gVHJpZ2dlciBleHBhbmQgYWZ0ZXIgTGF5ZXJzIENvbnRyb2wgaGFzIGJlZW4gaW5zZXJ0ZWQgaW50byBET00gc28gdGhhdCBpcyBub3cgaGFzIGFuIGFjdHVhbCBoZWlnaHQuXHJcbiAgXHRcdHJldHVybiB0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9tYXAub2ZmKCd6b29tZW5kJywgdGhpcy5fY2hlY2tEaXNhYmxlZExheWVycywgdGhpcyk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2xheWVycy5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpXS5sYXllci5vZmYoJ2FkZCByZW1vdmUnLCB0aGlzLl9vbkxheWVyQ2hhbmdlLCB0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEJhc2VMYXllcihsYXllcjogTGF5ZXIsIG5hbWU6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIEFkZHMgYSBiYXNlIGxheWVyIChyYWRpbyBidXR0b24gZW50cnkpIHdpdGggdGhlIGdpdmVuIG5hbWUgdG8gdGhlIGNvbnRyb2wuXHJcbiAgXHRhZGRCYXNlTGF5ZXI6IGZ1bmN0aW9uIChsYXllciwgbmFtZSkge1xyXG4gIFx0XHR0aGlzLl9hZGRMYXllcihsYXllciwgbmFtZSk7XHJcbiAgXHRcdHJldHVybiAodGhpcy5fbWFwKSA/IHRoaXMuX3VwZGF0ZSgpIDogdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBhZGRPdmVybGF5KGxheWVyOiBMYXllciwgbmFtZTogU3RyaW5nKTogdGhpc1xyXG4gIFx0Ly8gQWRkcyBhbiBvdmVybGF5IChjaGVja2JveCBlbnRyeSkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSB0byB0aGUgY29udHJvbC5cclxuICBcdGFkZE92ZXJsYXk6IGZ1bmN0aW9uIChsYXllciwgbmFtZSkge1xyXG4gIFx0XHR0aGlzLl9hZGRMYXllcihsYXllciwgbmFtZSwgdHJ1ZSk7XHJcbiAgXHRcdHJldHVybiAodGhpcy5fbWFwKSA/IHRoaXMuX3VwZGF0ZSgpIDogdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCByZW1vdmVMYXllcihsYXllcjogTGF5ZXIpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmUgdGhlIGdpdmVuIGxheWVyIGZyb20gdGhlIGNvbnRyb2wuXHJcbiAgXHRyZW1vdmVMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdGxheWVyLm9mZignYWRkIHJlbW92ZScsIHRoaXMuX29uTGF5ZXJDaGFuZ2UsIHRoaXMpO1xyXG5cclxuICBcdFx0dmFyIG9iaiA9IHRoaXMuX2dldExheWVyKHN0YW1wKGxheWVyKSk7XHJcbiAgXHRcdGlmIChvYmopIHtcclxuICBcdFx0XHR0aGlzLl9sYXllcnMuc3BsaWNlKHRoaXMuX2xheWVycy5pbmRleE9mKG9iaiksIDEpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiAodGhpcy5fbWFwKSA/IHRoaXMuX3VwZGF0ZSgpIDogdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBleHBhbmQoKTogdGhpc1xyXG4gIFx0Ly8gRXhwYW5kIHRoZSBjb250cm9sIGNvbnRhaW5lciBpZiBjb2xsYXBzZWQuXHJcbiAgXHRleHBhbmQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCcpO1xyXG4gIFx0XHR0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodCA9IG51bGw7XHJcbiAgXHRcdHZhciBhY2NlcHRhYmxlSGVpZ2h0ID0gdGhpcy5fbWFwLmdldFNpemUoKS55IC0gKHRoaXMuX2NvbnRhaW5lci5vZmZzZXRUb3AgKyA1MCk7XHJcbiAgXHRcdGlmIChhY2NlcHRhYmxlSGVpZ2h0IDwgdGhpcy5fc2VjdGlvbi5jbGllbnRIZWlnaHQpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9zZWN0aW9uLCAnbGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXInKTtcclxuICBcdFx0XHR0aGlzLl9zZWN0aW9uLnN0eWxlLmhlaWdodCA9IGFjY2VwdGFibGVIZWlnaHQgKyAncHgnO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX3NlY3Rpb24sICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXNjcm9sbGJhcicpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuX2NoZWNrRGlzYWJsZWRMYXllcnMoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY29sbGFwc2UoKTogdGhpc1xyXG4gIFx0Ly8gQ29sbGFwc2UgdGhlIGNvbnRyb2wgY29udGFpbmVyIGlmIGV4cGFuZGVkLlxyXG4gIFx0Y29sbGFwc2U6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCcpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRMYXlvdXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtbGF5ZXJzJyxcclxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUpLFxyXG4gIFx0XHQgICAgY29sbGFwc2VkID0gdGhpcy5vcHRpb25zLmNvbGxhcHNlZDtcclxuXHJcbiAgXHRcdC8vIG1ha2VzIHRoaXMgd29yayBvbiBJRSB0b3VjaCBkZXZpY2VzIGJ5IHN0b3BwaW5nIGl0IGZyb20gZmlyaW5nIGEgbW91c2VvdXQgZXZlbnQgd2hlbiB0aGUgdG91Y2ggaXMgcmVsZWFzZWRcclxuICBcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgnYXJpYS1oYXNwb3B1cCcsIHRydWUpO1xyXG5cclxuICBcdFx0ZGlzYWJsZUNsaWNrUHJvcGFnYXRpb24oY29udGFpbmVyKTtcclxuICBcdFx0ZGlzYWJsZVNjcm9sbFByb3BhZ2F0aW9uKGNvbnRhaW5lcik7XHJcblxyXG4gIFx0XHR2YXIgc2VjdGlvbiA9IHRoaXMuX3NlY3Rpb24gPSBjcmVhdGUkMSgnc2VjdGlvbicsIGNsYXNzTmFtZSArICctbGlzdCcpO1xyXG5cclxuICBcdFx0aWYgKGNvbGxhcHNlZCkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5vbignY2xpY2snLCB0aGlzLmNvbGxhcHNlLCB0aGlzKTtcclxuXHJcbiAgXHRcdFx0aWYgKCFhbmRyb2lkKSB7XHJcbiAgXHRcdFx0XHRvbihjb250YWluZXIsIHtcclxuICBcdFx0XHRcdFx0bW91c2VlbnRlcjogdGhpcy5leHBhbmQsXHJcbiAgXHRcdFx0XHRcdG1vdXNlbGVhdmU6IHRoaXMuY29sbGFwc2VcclxuICBcdFx0XHRcdH0sIHRoaXMpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIGxpbmsgPSB0aGlzLl9sYXllcnNMaW5rID0gY3JlYXRlJDEoJ2EnLCBjbGFzc05hbWUgKyAnLXRvZ2dsZScsIGNvbnRhaW5lcik7XHJcbiAgXHRcdGxpbmsuaHJlZiA9ICcjJztcclxuICBcdFx0bGluay50aXRsZSA9ICdMYXllcnMnO1xyXG5cclxuICBcdFx0aWYgKHRvdWNoKSB7XHJcbiAgXHRcdFx0b24obGluaywgJ2NsaWNrJywgc3RvcCk7XHJcbiAgXHRcdFx0b24obGluaywgJ2NsaWNrJywgdGhpcy5leHBhbmQsIHRoaXMpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdG9uKGxpbmssICdmb2N1cycsIHRoaXMuZXhwYW5kLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCFjb2xsYXBzZWQpIHtcclxuICBcdFx0XHR0aGlzLmV4cGFuZCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9iYXNlTGF5ZXJzTGlzdCA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUgKyAnLWJhc2UnLCBzZWN0aW9uKTtcclxuICBcdFx0dGhpcy5fc2VwYXJhdG9yID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSArICctc2VwYXJhdG9yJywgc2VjdGlvbik7XHJcbiAgXHRcdHRoaXMuX292ZXJsYXlzTGlzdCA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUgKyAnLW92ZXJsYXlzJywgc2VjdGlvbik7XHJcblxyXG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoc2VjdGlvbik7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRMYXllcjogZnVuY3Rpb24gKGlkKSB7XHJcbiAgXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5fbGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcblxyXG4gIFx0XHRcdGlmICh0aGlzLl9sYXllcnNbaV0gJiYgc3RhbXAodGhpcy5fbGF5ZXJzW2ldLmxheWVyKSA9PT0gaWQpIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLl9sYXllcnNbaV07XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGRMYXllcjogZnVuY3Rpb24gKGxheWVyLCBuYW1lLCBvdmVybGF5KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHRsYXllci5vbignYWRkIHJlbW92ZScsIHRoaXMuX29uTGF5ZXJDaGFuZ2UsIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnMucHVzaCh7XHJcbiAgXHRcdFx0bGF5ZXI6IGxheWVyLFxyXG4gIFx0XHRcdG5hbWU6IG5hbWUsXHJcbiAgXHRcdFx0b3ZlcmxheTogb3ZlcmxheVxyXG4gIFx0XHR9KTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuc29ydExheWVycykge1xyXG4gIFx0XHRcdHRoaXMuX2xheWVycy5zb3J0KGJpbmQoZnVuY3Rpb24gKGEsIGIpIHtcclxuICBcdFx0XHRcdHJldHVybiB0aGlzLm9wdGlvbnMuc29ydEZ1bmN0aW9uKGEubGF5ZXIsIGIubGF5ZXIsIGEubmFtZSwgYi5uYW1lKTtcclxuICBcdFx0XHR9LCB0aGlzKSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuYXV0b1pJbmRleCAmJiBsYXllci5zZXRaSW5kZXgpIHtcclxuICBcdFx0XHR0aGlzLl9sYXN0WkluZGV4Kys7XHJcbiAgXHRcdFx0bGF5ZXIuc2V0WkluZGV4KHRoaXMuX2xhc3RaSW5kZXgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9leHBhbmRJZk5vdENvbGxhcHNlZCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0XHRlbXB0eSh0aGlzLl9iYXNlTGF5ZXJzTGlzdCk7XHJcbiAgXHRcdGVtcHR5KHRoaXMuX292ZXJsYXlzTGlzdCk7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllckNvbnRyb2xJbnB1dHMgPSBbXTtcclxuICBcdFx0dmFyIGJhc2VMYXllcnNQcmVzZW50LCBvdmVybGF5c1ByZXNlbnQsIGksIG9iaiwgYmFzZUxheWVyc0NvdW50ID0gMDtcclxuXHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCB0aGlzLl9sYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRvYmogPSB0aGlzLl9sYXllcnNbaV07XHJcbiAgXHRcdFx0dGhpcy5fYWRkSXRlbShvYmopO1xyXG4gIFx0XHRcdG92ZXJsYXlzUHJlc2VudCA9IG92ZXJsYXlzUHJlc2VudCB8fCBvYmoub3ZlcmxheTtcclxuICBcdFx0XHRiYXNlTGF5ZXJzUHJlc2VudCA9IGJhc2VMYXllcnNQcmVzZW50IHx8ICFvYmoub3ZlcmxheTtcclxuICBcdFx0XHRiYXNlTGF5ZXJzQ291bnQgKz0gIW9iai5vdmVybGF5ID8gMSA6IDA7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIEhpZGUgYmFzZSBsYXllcnMgc2VjdGlvbiBpZiB0aGVyZSdzIG9ubHkgb25lIGxheWVyLlxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmhpZGVTaW5nbGVCYXNlKSB7XHJcbiAgXHRcdFx0YmFzZUxheWVyc1ByZXNlbnQgPSBiYXNlTGF5ZXJzUHJlc2VudCAmJiBiYXNlTGF5ZXJzQ291bnQgPiAxO1xyXG4gIFx0XHRcdHRoaXMuX2Jhc2VMYXllcnNMaXN0LnN0eWxlLmRpc3BsYXkgPSBiYXNlTGF5ZXJzUHJlc2VudCA/ICcnIDogJ25vbmUnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9zZXBhcmF0b3Iuc3R5bGUuZGlzcGxheSA9IG92ZXJsYXlzUHJlc2VudCAmJiBiYXNlTGF5ZXJzUHJlc2VudCA/ICcnIDogJ25vbmUnO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbkxheWVyQ2hhbmdlOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2hhbmRsaW5nQ2xpY2spIHtcclxuICBcdFx0XHR0aGlzLl91cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIG9iaiA9IHRoaXMuX2dldExheWVyKHN0YW1wKGUudGFyZ2V0KSk7XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBMYXllciBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IGJhc2VsYXllcmNoYW5nZTogTGF5ZXJzQ29udHJvbEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIGJhc2UgbGF5ZXIgaXMgY2hhbmdlZCB0aHJvdWdoIHRoZSBbbGF5ZXJzIGNvbnRyb2xdKCNjb250cm9sLWxheWVycykuXHJcbiAgXHRcdC8vIEBldmVudCBvdmVybGF5YWRkOiBMYXllcnNDb250cm9sRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhbiBvdmVybGF5IGlzIHNlbGVjdGVkIHRocm91Z2ggdGhlIFtsYXllcnMgY29udHJvbF0oI2NvbnRyb2wtbGF5ZXJzKS5cclxuICBcdFx0Ly8gQGV2ZW50IG92ZXJsYXlyZW1vdmU6IExheWVyc0NvbnRyb2xFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGFuIG92ZXJsYXkgaXMgZGVzZWxlY3RlZCB0aHJvdWdoIHRoZSBbbGF5ZXJzIGNvbnRyb2xdKCNjb250cm9sLWxheWVycykuXHJcbiAgXHRcdC8vIEBuYW1lc3BhY2UgQ29udHJvbC5MYXllcnNcclxuICBcdFx0dmFyIHR5cGUgPSBvYmoub3ZlcmxheSA/XHJcbiAgXHRcdFx0KGUudHlwZSA9PT0gJ2FkZCcgPyAnb3ZlcmxheWFkZCcgOiAnb3ZlcmxheXJlbW92ZScpIDpcclxuICBcdFx0XHQoZS50eXBlID09PSAnYWRkJyA/ICdiYXNlbGF5ZXJjaGFuZ2UnIDogbnVsbCk7XHJcblxyXG4gIFx0XHRpZiAodHlwZSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC5maXJlKHR5cGUsIG9iaik7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gSUU3IGJ1Z3Mgb3V0IGlmIHlvdSBjcmVhdGUgYSByYWRpbyBkeW5hbWljYWxseSwgc28geW91IGhhdmUgdG8gZG8gaXQgdGhpcyBoYWNreSB3YXkgKHNlZSBodHRwOi8vYml0Lmx5L1BxWUxCZSlcclxuICBcdF9jcmVhdGVSYWRpb0VsZW1lbnQ6IGZ1bmN0aW9uIChuYW1lLCBjaGVja2VkKSB7XHJcblxyXG4gIFx0XHR2YXIgcmFkaW9IdG1sID0gJzxpbnB1dCB0eXBlPVwicmFkaW9cIiBjbGFzcz1cImxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3JcIiBuYW1lPVwiJyArXHJcbiAgXHRcdFx0XHRuYW1lICsgJ1wiJyArIChjaGVja2VkID8gJyBjaGVja2VkPVwiY2hlY2tlZFwiJyA6ICcnKSArICcvPic7XHJcblxyXG4gIFx0XHR2YXIgcmFkaW9GcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG4gIFx0XHRyYWRpb0ZyYWdtZW50LmlubmVySFRNTCA9IHJhZGlvSHRtbDtcclxuXHJcbiAgXHRcdHJldHVybiByYWRpb0ZyYWdtZW50LmZpcnN0Q2hpbGQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGRJdGVtOiBmdW5jdGlvbiAob2JqKSB7XHJcbiAgXHRcdHZhciBsYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyksXHJcbiAgXHRcdCAgICBjaGVja2VkID0gdGhpcy5fbWFwLmhhc0xheWVyKG9iai5sYXllciksXHJcbiAgXHRcdCAgICBpbnB1dDtcclxuXHJcbiAgXHRcdGlmIChvYmoub3ZlcmxheSkge1xyXG4gIFx0XHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcclxuICBcdFx0XHRpbnB1dC50eXBlID0gJ2NoZWNrYm94JztcclxuICBcdFx0XHRpbnB1dC5jbGFzc05hbWUgPSAnbGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3Rvcic7XHJcbiAgXHRcdFx0aW5wdXQuZGVmYXVsdENoZWNrZWQgPSBjaGVja2VkO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlucHV0ID0gdGhpcy5fY3JlYXRlUmFkaW9FbGVtZW50KCdsZWFmbGV0LWJhc2UtbGF5ZXJzXycgKyBzdGFtcCh0aGlzKSwgY2hlY2tlZCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2xheWVyQ29udHJvbElucHV0cy5wdXNoKGlucHV0KTtcclxuICBcdFx0aW5wdXQubGF5ZXJJZCA9IHN0YW1wKG9iai5sYXllcik7XHJcblxyXG4gIFx0XHRvbihpbnB1dCwgJ2NsaWNrJywgdGhpcy5fb25JbnB1dENsaWNrLCB0aGlzKTtcclxuXHJcbiAgXHRcdHZhciBuYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xyXG4gIFx0XHRuYW1lLmlubmVySFRNTCA9ICcgJyArIG9iai5uYW1lO1xyXG5cclxuICBcdFx0Ly8gSGVscHMgZnJvbSBwcmV2ZW50aW5nIGxheWVyIGNvbnRyb2wgZmxpY2tlciB3aGVuIGNoZWNrYm94ZXMgYXJlIGRpc2FibGVkXHJcbiAgXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzI3NzFcclxuICBcdFx0dmFyIGhvbGRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xyXG5cclxuICBcdFx0bGFiZWwuYXBwZW5kQ2hpbGQoaG9sZGVyKTtcclxuICBcdFx0aG9sZGVyLmFwcGVuZENoaWxkKGlucHV0KTtcclxuICBcdFx0aG9sZGVyLmFwcGVuZENoaWxkKG5hbWUpO1xyXG5cclxuICBcdFx0dmFyIGNvbnRhaW5lciA9IG9iai5vdmVybGF5ID8gdGhpcy5fb3ZlcmxheXNMaXN0IDogdGhpcy5fYmFzZUxheWVyc0xpc3Q7XHJcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYWJlbCk7XHJcblxyXG4gIFx0XHR0aGlzLl9jaGVja0Rpc2FibGVkTGF5ZXJzKCk7XHJcbiAgXHRcdHJldHVybiBsYWJlbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uSW5wdXRDbGljazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaW5wdXRzID0gdGhpcy5fbGF5ZXJDb250cm9sSW5wdXRzLFxyXG4gIFx0XHQgICAgaW5wdXQsIGxheWVyO1xyXG4gIFx0XHR2YXIgYWRkZWRMYXllcnMgPSBbXSxcclxuICBcdFx0ICAgIHJlbW92ZWRMYXllcnMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuX2hhbmRsaW5nQ2xpY2sgPSB0cnVlO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSA9IGlucHV0cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gIFx0XHRcdGlucHV0ID0gaW5wdXRzW2ldO1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fZ2V0TGF5ZXIoaW5wdXQubGF5ZXJJZCkubGF5ZXI7XHJcblxyXG4gIFx0XHRcdGlmIChpbnB1dC5jaGVja2VkKSB7XHJcbiAgXHRcdFx0XHRhZGRlZExheWVycy5wdXNoKGxheWVyKTtcclxuICBcdFx0XHR9IGVsc2UgaWYgKCFpbnB1dC5jaGVja2VkKSB7XHJcbiAgXHRcdFx0XHRyZW1vdmVkTGF5ZXJzLnB1c2gobGF5ZXIpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gQnVnZml4IGlzc3VlIDIzMTg6IFNob3VsZCByZW1vdmUgYWxsIG9sZCBsYXllcnMgYmVmb3JlIHJlYWRkaW5nIG5ldyBvbmVzXHJcbiAgXHRcdGZvciAoaSA9IDA7IGkgPCByZW1vdmVkTGF5ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX21hcC5oYXNMYXllcihyZW1vdmVkTGF5ZXJzW2ldKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fbWFwLnJlbW92ZUxheWVyKHJlbW92ZWRMYXllcnNbaV0pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0XHRmb3IgKGkgPSAwOyBpIDwgYWRkZWRMYXllcnMubGVuZ3RoOyBpKyspIHtcclxuICBcdFx0XHRpZiAoIXRoaXMuX21hcC5oYXNMYXllcihhZGRlZExheWVyc1tpXSkpIHtcclxuICBcdFx0XHRcdHRoaXMuX21hcC5hZGRMYXllcihhZGRlZExheWVyc1tpXSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9oYW5kbGluZ0NsaWNrID0gZmFsc2U7XHJcblxyXG4gIFx0XHR0aGlzLl9yZWZvY3VzT25NYXAoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NoZWNrRGlzYWJsZWRMYXllcnM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGlucHV0cyA9IHRoaXMuX2xheWVyQ29udHJvbElucHV0cyxcclxuICBcdFx0ICAgIGlucHV0LFxyXG4gIFx0XHQgICAgbGF5ZXIsXHJcbiAgXHRcdCAgICB6b29tID0gdGhpcy5fbWFwLmdldFpvb20oKTtcclxuXHJcbiAgXHRcdGZvciAodmFyIGkgPSBpbnB1dHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICBcdFx0XHRpbnB1dCA9IGlucHV0c1tpXTtcclxuICBcdFx0XHRsYXllciA9IHRoaXMuX2dldExheWVyKGlucHV0LmxheWVySWQpLmxheWVyO1xyXG4gIFx0XHRcdGlucHV0LmRpc2FibGVkID0gKGxheWVyLm9wdGlvbnMubWluWm9vbSAhPT0gdW5kZWZpbmVkICYmIHpvb20gPCBsYXllci5vcHRpb25zLm1pblpvb20pIHx8XHJcbiAgXHRcdFx0ICAgICAgICAgICAgICAgICAobGF5ZXIub3B0aW9ucy5tYXhab29tICE9PSB1bmRlZmluZWQgJiYgem9vbSA+IGxheWVyLm9wdGlvbnMubWF4Wm9vbSk7XHJcblxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9leHBhbmRJZk5vdENvbGxhcHNlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwICYmICF0aGlzLm9wdGlvbnMuY29sbGFwc2VkKSB7XHJcbiAgXHRcdFx0dGhpcy5leHBhbmQoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X2V4cGFuZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHQvLyBCYWNrd2FyZCBjb21wYXRpYmlsaXR5LCByZW1vdmUgbWUgaW4gMS4xLlxyXG4gIFx0XHRyZXR1cm4gdGhpcy5leHBhbmQoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2NvbGxhcHNlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHJlbW92ZSBtZSBpbiAxLjEuXHJcbiAgXHRcdHJldHVybiB0aGlzLmNvbGxhcHNlKCk7XHJcbiAgXHR9XHJcblxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5jb250cm9sLmxheWVycyhiYXNlbGF5ZXJzPzogT2JqZWN0LCBvdmVybGF5cz86IE9iamVjdCwgb3B0aW9ucz86IENvbnRyb2wuTGF5ZXJzIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhIGxheWVycyBjb250cm9sIHdpdGggdGhlIGdpdmVuIGxheWVycy4gQmFzZSBsYXllcnMgd2lsbCBiZSBzd2l0Y2hlZCB3aXRoIHJhZGlvIGJ1dHRvbnMsIHdoaWxlIG92ZXJsYXlzIHdpbGwgYmUgc3dpdGNoZWQgd2l0aCBjaGVja2JveGVzLiBOb3RlIHRoYXQgYWxsIGJhc2UgbGF5ZXJzIHNob3VsZCBiZSBwYXNzZWQgaW4gdGhlIGJhc2UgbGF5ZXJzIG9iamVjdCwgYnV0IG9ubHkgb25lIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgbWFwIGR1cmluZyBtYXAgaW5zdGFudGlhdGlvbi5cclxuICB2YXIgbGF5ZXJzID0gZnVuY3Rpb24gKGJhc2VMYXllcnMsIG92ZXJsYXlzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExheWVycyhiYXNlTGF5ZXJzLCBvdmVybGF5cywgb3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBDb250cm9sLlpvb21cclxuICAgKiBAYWthIEwuQ29udHJvbC5ab29tXHJcbiAgICogQGluaGVyaXRzIENvbnRyb2xcclxuICAgKlxyXG4gICAqIEEgYmFzaWMgem9vbSBjb250cm9sIHdpdGggdHdvIGJ1dHRvbnMgKHpvb20gaW4gYW5kIHpvb20gb3V0KS4gSXQgaXMgcHV0IG9uIHRoZSBtYXAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IHNldCBpdHMgW2B6b29tQ29udHJvbGAgb3B0aW9uXSgjbWFwLXpvb21jb250cm9sKSB0byBgZmFsc2VgLiBFeHRlbmRzIGBDb250cm9sYC5cclxuICAgKi9cclxuXHJcbiAgdmFyIFpvb20gPSBDb250cm9sLmV4dGVuZCh7XHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBDb250cm9sLlpvb20gb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHRwb3NpdGlvbjogJ3RvcGxlZnQnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB6b29tSW5UZXh0OiBTdHJpbmcgPSAnKydcclxuICBcdFx0Ly8gVGhlIHRleHQgc2V0IG9uIHRoZSAnem9vbSBpbicgYnV0dG9uLlxyXG4gIFx0XHR6b29tSW5UZXh0OiAnKycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21JblRpdGxlOiBTdHJpbmcgPSAnWm9vbSBpbidcclxuICBcdFx0Ly8gVGhlIHRpdGxlIHNldCBvbiB0aGUgJ3pvb20gaW4nIGJ1dHRvbi5cclxuICBcdFx0em9vbUluVGl0bGU6ICdab29tIGluJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbU91dFRleHQ6IFN0cmluZyA9ICcmI3gyMjEyOydcclxuICBcdFx0Ly8gVGhlIHRleHQgc2V0IG9uIHRoZSAnem9vbSBvdXQnIGJ1dHRvbi5cclxuICBcdFx0em9vbU91dFRleHQ6ICcmI3gyMjEyOycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHpvb21PdXRUaXRsZTogU3RyaW5nID0gJ1pvb20gb3V0J1xyXG4gIFx0XHQvLyBUaGUgdGl0bGUgc2V0IG9uIHRoZSAnem9vbSBvdXQnIGJ1dHRvbi5cclxuICBcdFx0em9vbU91dFRpdGxlOiAnWm9vbSBvdXQnXHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHZhciB6b29tTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtem9vbScsXHJcbiAgXHRcdCAgICBjb250YWluZXIgPSBjcmVhdGUkMSgnZGl2Jywgem9vbU5hbWUgKyAnIGxlYWZsZXQtYmFyJyksXHJcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuICBcdFx0dGhpcy5fem9vbUluQnV0dG9uICA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihvcHRpb25zLnpvb21JblRleHQsIG9wdGlvbnMuem9vbUluVGl0bGUsXHJcbiAgXHRcdCAgICAgICAgem9vbU5hbWUgKyAnLWluJywgIGNvbnRhaW5lciwgdGhpcy5fem9vbUluKTtcclxuICBcdFx0dGhpcy5fem9vbU91dEJ1dHRvbiA9IHRoaXMuX2NyZWF0ZUJ1dHRvbihvcHRpb25zLnpvb21PdXRUZXh0LCBvcHRpb25zLnpvb21PdXRUaXRsZSxcclxuICBcdFx0ICAgICAgICB6b29tTmFtZSArICctb3V0JywgY29udGFpbmVyLCB0aGlzLl96b29tT3V0KTtcclxuXHJcbiAgXHRcdHRoaXMuX3VwZGF0ZURpc2FibGVkKCk7XHJcbiAgXHRcdG1hcC5vbignem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlJywgdGhpcy5fdXBkYXRlRGlzYWJsZWQsIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIGNvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0bWFwLm9mZignem9vbWVuZCB6b29tbGV2ZWxzY2hhbmdlJywgdGhpcy5fdXBkYXRlRGlzYWJsZWQsIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRkaXNhYmxlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX2Rpc2FibGVkID0gdHJ1ZTtcclxuICBcdFx0dGhpcy5fdXBkYXRlRGlzYWJsZWQoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdGVuYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl9kaXNhYmxlZCA9IGZhbHNlO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVEaXNhYmxlZCgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3pvb21JbjogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLl9tYXAuX3pvb20gPCB0aGlzLl9tYXAuZ2V0TWF4Wm9vbSgpKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLnpvb21Jbih0aGlzLl9tYXAub3B0aW9ucy56b29tRGVsdGEgKiAoZS5zaGlmdEtleSA/IDMgOiAxKSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3pvb21PdXQ6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5fbWFwLl96b29tID4gdGhpcy5fbWFwLmdldE1pblpvb20oKSkge1xyXG4gIFx0XHRcdHRoaXMuX21hcC56b29tT3V0KHRoaXMuX21hcC5vcHRpb25zLnpvb21EZWx0YSAqIChlLnNoaWZ0S2V5ID8gMyA6IDEpKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfY3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoaHRtbCwgdGl0bGUsIGNsYXNzTmFtZSwgY29udGFpbmVyLCBmbikge1xyXG4gIFx0XHR2YXIgbGluayA9IGNyZWF0ZSQxKCdhJywgY2xhc3NOYW1lLCBjb250YWluZXIpO1xyXG4gIFx0XHRsaW5rLmlubmVySFRNTCA9IGh0bWw7XHJcbiAgXHRcdGxpbmsuaHJlZiA9ICcjJztcclxuICBcdFx0bGluay50aXRsZSA9IHRpdGxlO1xyXG5cclxuICBcdFx0LypcclxuICBcdFx0ICogV2lsbCBmb3JjZSBzY3JlZW4gcmVhZGVycyBsaWtlIFZvaWNlT3ZlciB0byByZWFkIHRoaXMgYXMgXCJab29tIGluIC0gYnV0dG9uXCJcclxuICBcdFx0ICovXHJcbiAgXHRcdGxpbmsuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2J1dHRvbicpO1xyXG4gIFx0XHRsaW5rLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKTtcclxuXHJcbiAgXHRcdGRpc2FibGVDbGlja1Byb3BhZ2F0aW9uKGxpbmspO1xyXG4gIFx0XHRvbihsaW5rLCAnY2xpY2snLCBzdG9wKTtcclxuICBcdFx0b24obGluaywgJ2NsaWNrJywgZm4sIHRoaXMpO1xyXG4gIFx0XHRvbihsaW5rLCAnY2xpY2snLCB0aGlzLl9yZWZvY3VzT25NYXAsIHRoaXMpO1xyXG5cclxuICBcdFx0cmV0dXJuIGxpbms7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVEaXNhYmxlZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxyXG4gIFx0XHQgICAgY2xhc3NOYW1lID0gJ2xlYWZsZXQtZGlzYWJsZWQnO1xyXG5cclxuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fem9vbUluQnV0dG9uLCBjbGFzc05hbWUpO1xyXG4gIFx0XHRyZW1vdmVDbGFzcyh0aGlzLl96b29tT3V0QnV0dG9uLCBjbGFzc05hbWUpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2Rpc2FibGVkIHx8IG1hcC5fem9vbSA9PT0gbWFwLmdldE1pblpvb20oKSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX3pvb21PdXRCdXR0b24sIGNsYXNzTmFtZSk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKHRoaXMuX2Rpc2FibGVkIHx8IG1hcC5fem9vbSA9PT0gbWFwLmdldE1heFpvb20oKSkge1xyXG4gIFx0XHRcdGFkZENsYXNzKHRoaXMuX3pvb21JbkJ1dHRvbiwgY2xhc3NOYW1lKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIC8vIEBzZWN0aW9uIENvbnRyb2wgb3B0aW9uc1xyXG4gIC8vIEBvcHRpb24gem9vbUNvbnRyb2w6IEJvb2xlYW4gPSB0cnVlXHJcbiAgLy8gV2hldGhlciBhIFt6b29tIGNvbnRyb2xdKCNjb250cm9sLXpvb20pIGlzIGFkZGVkIHRvIHRoZSBtYXAgYnkgZGVmYXVsdC5cclxuICBNYXAubWVyZ2VPcHRpb25zKHtcclxuICBcdHpvb21Db250cm9sOiB0cnVlXHJcbiAgfSk7XHJcblxyXG4gIE1hcC5hZGRJbml0SG9vayhmdW5jdGlvbiAoKSB7XHJcbiAgXHRpZiAodGhpcy5vcHRpb25zLnpvb21Db250cm9sKSB7XHJcbiAgXHRcdC8vIEBzZWN0aW9uIENvbnRyb2xzXHJcbiAgXHRcdC8vIEBwcm9wZXJ0eSB6b29tQ29udHJvbDogQ29udHJvbC5ab29tXHJcbiAgXHRcdC8vIFRoZSBkZWZhdWx0IHpvb20gY29udHJvbCAob25seSBhdmFpbGFibGUgaWYgdGhlXHJcbiAgXHRcdC8vIFtgem9vbUNvbnRyb2xgIG9wdGlvbl0oI21hcC16b29tY29udHJvbCkgd2FzIGB0cnVlYCB3aGVuIGNyZWF0aW5nIHRoZSBtYXApLlxyXG4gIFx0XHR0aGlzLnpvb21Db250cm9sID0gbmV3IFpvb20oKTtcclxuICBcdFx0dGhpcy5hZGRDb250cm9sKHRoaXMuem9vbUNvbnRyb2wpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIENvbnRyb2wuWm9vbVxyXG4gIC8vIEBmYWN0b3J5IEwuY29udHJvbC56b29tKG9wdGlvbnM6IENvbnRyb2wuWm9vbSBvcHRpb25zKVxyXG4gIC8vIENyZWF0ZXMgYSB6b29tIGNvbnRyb2xcclxuICB2YXIgem9vbSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFpvb20ob3B0aW9ucyk7XHJcbiAgfTtcblxuICAvKlxuICAgKiBAY2xhc3MgQ29udHJvbC5TY2FsZVxuICAgKiBAYWthIEwuQ29udHJvbC5TY2FsZVxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxuICAgKlxuICAgKiBBIHNpbXBsZSBzY2FsZSBjb250cm9sIHRoYXQgc2hvd3MgdGhlIHNjYWxlIG9mIHRoZSBjdXJyZW50IGNlbnRlciBvZiBzY3JlZW4gaW4gbWV0cmljIChtL2ttKSBhbmQgaW1wZXJpYWwgKG1pL2Z0KSBzeXN0ZW1zLiBFeHRlbmRzIGBDb250cm9sYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogTC5jb250cm9sLnNjYWxlKCkuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTY2FsZSA9IENvbnRyb2wuZXh0ZW5kKHtcbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgQ29udHJvbC5TY2FsZSBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0cG9zaXRpb246ICdib3R0b21sZWZ0JyxcblxuICBcdFx0Ly8gQG9wdGlvbiBtYXhXaWR0aDogTnVtYmVyID0gMTAwXG4gIFx0XHQvLyBNYXhpbXVtIHdpZHRoIG9mIHRoZSBjb250cm9sIGluIHBpeGVscy4gVGhlIHdpZHRoIGlzIHNldCBkeW5hbWljYWxseSB0byBzaG93IHJvdW5kIHZhbHVlcyAoZS5nLiAxMDAsIDIwMCwgNTAwKS5cbiAgXHRcdG1heFdpZHRoOiAxMDAsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWV0cmljOiBCb29sZWFuID0gVHJ1ZVxuICBcdFx0Ly8gV2hldGhlciB0byBzaG93IHRoZSBtZXRyaWMgc2NhbGUgbGluZSAobS9rbSkuXG4gIFx0XHRtZXRyaWM6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gaW1wZXJpYWw6IEJvb2xlYW4gPSBUcnVlXG4gIFx0XHQvLyBXaGV0aGVyIHRvIHNob3cgdGhlIGltcGVyaWFsIHNjYWxlIGxpbmUgKG1pL2Z0KS5cbiAgXHRcdGltcGVyaWFsOiB0cnVlXG5cbiAgXHRcdC8vIEBvcHRpb24gdXBkYXRlV2hlbklkbGU6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgY29udHJvbCBpcyB1cGRhdGVkIG9uIFtgbW92ZWVuZGBdKCNtYXAtbW92ZWVuZCksIG90aGVyd2lzZSBpdCdzIGFsd2F5cyB1cC10by1kYXRlICh1cGRhdGVkIG9uIFtgbW92ZWBdKCNtYXAtbW92ZSkpLlxuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0dmFyIGNsYXNzTmFtZSA9ICdsZWFmbGV0LWNvbnRyb2wtc2NhbGUnLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IGNyZWF0ZSQxKCdkaXYnLCBjbGFzc05hbWUpLFxuICBcdFx0ICAgIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7XG5cbiAgXHRcdHRoaXMuX2FkZFNjYWxlcyhvcHRpb25zLCBjbGFzc05hbWUgKyAnLWxpbmUnLCBjb250YWluZXIpO1xuXG4gIFx0XHRtYXAub24ob3B0aW9ucy51cGRhdGVXaGVuSWRsZSA/ICdtb3ZlZW5kJyA6ICdtb3ZlJywgdGhpcy5fdXBkYXRlLCB0aGlzKTtcbiAgXHRcdG1hcC53aGVuUmVhZHkodGhpcy5fdXBkYXRlLCB0aGlzKTtcblxuICBcdFx0cmV0dXJuIGNvbnRhaW5lcjtcbiAgXHR9LFxuXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdG1hcC5vZmYodGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlID8gJ21vdmVlbmQnIDogJ21vdmUnLCB0aGlzLl91cGRhdGUsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfYWRkU2NhbGVzOiBmdW5jdGlvbiAob3B0aW9ucywgY2xhc3NOYW1lLCBjb250YWluZXIpIHtcbiAgXHRcdGlmIChvcHRpb25zLm1ldHJpYykge1xuICBcdFx0XHR0aGlzLl9tU2NhbGUgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lLCBjb250YWluZXIpO1xuICBcdFx0fVxuICBcdFx0aWYgKG9wdGlvbnMuaW1wZXJpYWwpIHtcbiAgXHRcdFx0dGhpcy5faVNjYWxlID0gY3JlYXRlJDEoJ2RpdicsIGNsYXNzTmFtZSwgY29udGFpbmVyKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB5ID0gbWFwLmdldFNpemUoKS55IC8gMjtcblxuICBcdFx0dmFyIG1heE1ldGVycyA9IG1hcC5kaXN0YW5jZShcbiAgXHRcdFx0bWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoWzAsIHldKSxcbiAgXHRcdFx0bWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcoW3RoaXMub3B0aW9ucy5tYXhXaWR0aCwgeV0pKTtcblxuICBcdFx0dGhpcy5fdXBkYXRlU2NhbGVzKG1heE1ldGVycyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVTY2FsZXM6IGZ1bmN0aW9uIChtYXhNZXRlcnMpIHtcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMubWV0cmljICYmIG1heE1ldGVycykge1xuICBcdFx0XHR0aGlzLl91cGRhdGVNZXRyaWMobWF4TWV0ZXJzKTtcbiAgXHRcdH1cbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW1wZXJpYWwgJiYgbWF4TWV0ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZUltcGVyaWFsKG1heE1ldGVycyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVNZXRyaWM6IGZ1bmN0aW9uIChtYXhNZXRlcnMpIHtcbiAgXHRcdHZhciBtZXRlcnMgPSB0aGlzLl9nZXRSb3VuZE51bShtYXhNZXRlcnMpLFxuICBcdFx0ICAgIGxhYmVsID0gbWV0ZXJzIDwgMTAwMCA/IG1ldGVycyArICcgbScgOiAobWV0ZXJzIC8gMTAwMCkgKyAnIGttJztcblxuICBcdFx0dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5fbVNjYWxlLCBsYWJlbCwgbWV0ZXJzIC8gbWF4TWV0ZXJzKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUltcGVyaWFsOiBmdW5jdGlvbiAobWF4TWV0ZXJzKSB7XG4gIFx0XHR2YXIgbWF4RmVldCA9IG1heE1ldGVycyAqIDMuMjgwODM5OSxcbiAgXHRcdCAgICBtYXhNaWxlcywgbWlsZXMsIGZlZXQ7XG5cbiAgXHRcdGlmIChtYXhGZWV0ID4gNTI4MCkge1xuICBcdFx0XHRtYXhNaWxlcyA9IG1heEZlZXQgLyA1MjgwO1xuICBcdFx0XHRtaWxlcyA9IHRoaXMuX2dldFJvdW5kTnVtKG1heE1pbGVzKTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlU2NhbGUodGhpcy5faVNjYWxlLCBtaWxlcyArICcgbWknLCBtaWxlcyAvIG1heE1pbGVzKTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0ZmVldCA9IHRoaXMuX2dldFJvdW5kTnVtKG1heEZlZXQpO1xuICBcdFx0XHR0aGlzLl91cGRhdGVTY2FsZSh0aGlzLl9pU2NhbGUsIGZlZXQgKyAnIGZ0JywgZmVldCAvIG1heEZlZXQpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlU2NhbGU6IGZ1bmN0aW9uIChzY2FsZSwgdGV4dCwgcmF0aW8pIHtcbiAgXHRcdHNjYWxlLnN0eWxlLndpZHRoID0gTWF0aC5yb3VuZCh0aGlzLm9wdGlvbnMubWF4V2lkdGggKiByYXRpbykgKyAncHgnO1xuICBcdFx0c2NhbGUuaW5uZXJIVE1MID0gdGV4dDtcbiAgXHR9LFxuXG4gIFx0X2dldFJvdW5kTnVtOiBmdW5jdGlvbiAobnVtKSB7XG4gIFx0XHR2YXIgcG93MTAgPSBNYXRoLnBvdygxMCwgKE1hdGguZmxvb3IobnVtKSArICcnKS5sZW5ndGggLSAxKSxcbiAgXHRcdCAgICBkID0gbnVtIC8gcG93MTA7XG5cbiAgXHRcdGQgPSBkID49IDEwID8gMTAgOlxuICBcdFx0ICAgIGQgPj0gNSA/IDUgOlxuICBcdFx0ICAgIGQgPj0gMyA/IDMgOlxuICBcdFx0ICAgIGQgPj0gMiA/IDIgOiAxO1xuXG4gIFx0XHRyZXR1cm4gcG93MTAgKiBkO1xuICBcdH1cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLmNvbnRyb2wuc2NhbGUob3B0aW9ucz86IENvbnRyb2wuU2NhbGUgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhbiBzY2FsZSBjb250cm9sIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXG4gIHZhciBzY2FsZSA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBTY2FsZShvcHRpb25zKTtcbiAgfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBDb250cm9sLkF0dHJpYnV0aW9uXHJcbiAgICogQGFrYSBMLkNvbnRyb2wuQXR0cmlidXRpb25cclxuICAgKiBAaW5oZXJpdHMgQ29udHJvbFxyXG4gICAqXHJcbiAgICogVGhlIGF0dHJpYnV0aW9uIGNvbnRyb2wgYWxsb3dzIHlvdSB0byBkaXNwbGF5IGF0dHJpYnV0aW9uIGRhdGEgaW4gYSBzbWFsbCB0ZXh0IGJveCBvbiBhIG1hcC4gSXQgaXMgcHV0IG9uIHRoZSBtYXAgYnkgZGVmYXVsdCB1bmxlc3MgeW91IHNldCBpdHMgW2BhdHRyaWJ1dGlvbkNvbnRyb2xgIG9wdGlvbl0oI21hcC1hdHRyaWJ1dGlvbmNvbnRyb2wpIHRvIGBmYWxzZWAsIGFuZCBpdCBmZXRjaGVzIGF0dHJpYnV0aW9uIHRleHRzIGZyb20gbGF5ZXJzIHdpdGggdGhlIFtgZ2V0QXR0cmlidXRpb25gIG1ldGhvZF0oI2xheWVyLWdldGF0dHJpYnV0aW9uKSBhdXRvbWF0aWNhbGx5LiBFeHRlbmRzIENvbnRyb2wuXHJcbiAgICovXHJcblxyXG4gIHZhciBBdHRyaWJ1dGlvbiA9IENvbnRyb2wuZXh0ZW5kKHtcclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIENvbnRyb2wuQXR0cmlidXRpb24gb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHRwb3NpdGlvbjogJ2JvdHRvbXJpZ2h0JyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcHJlZml4OiBTdHJpbmcgPSAnTGVhZmxldCdcclxuICBcdFx0Ly8gVGhlIEhUTUwgdGV4dCBzaG93biBiZWZvcmUgdGhlIGF0dHJpYnV0aW9ucy4gUGFzcyBgZmFsc2VgIHRvIGRpc2FibGUuXHJcbiAgXHRcdHByZWZpeDogJzxhIGhyZWY9XCJodHRwczovL2xlYWZsZXRqcy5jb21cIiB0aXRsZT1cIkEgSlMgbGlicmFyeSBmb3IgaW50ZXJhY3RpdmUgbWFwc1wiPkxlYWZsZXQ8L2E+J1xyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fYXR0cmlidXRpb25zID0ge307XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdG1hcC5hdHRyaWJ1dGlvbkNvbnRyb2wgPSB0aGlzO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbicpO1xyXG4gIFx0XHRkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbih0aGlzLl9jb250YWluZXIpO1xyXG5cclxuICBcdFx0Ly8gVE9ETyB1Z2x5LCByZWZhY3RvclxyXG4gIFx0XHRmb3IgKHZhciBpIGluIG1hcC5fbGF5ZXJzKSB7XHJcbiAgXHRcdFx0aWYgKG1hcC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmFkZEF0dHJpYnV0aW9uKG1hcC5fbGF5ZXJzW2ldLmdldEF0dHJpYnV0aW9uKCkpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fdXBkYXRlKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY29udGFpbmVyO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFByZWZpeChwcmVmaXg6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIHRleHQgYmVmb3JlIHRoZSBhdHRyaWJ1dGlvbnMuXHJcbiAgXHRzZXRQcmVmaXg6IGZ1bmN0aW9uIChwcmVmaXgpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLnByZWZpeCA9IHByZWZpeDtcclxuICBcdFx0dGhpcy5fdXBkYXRlKCk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZEF0dHJpYnV0aW9uKHRleHQ6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIEFkZHMgYW4gYXR0cmlidXRpb24gdGV4dCAoZS5nLiBgJ1ZlY3RvciBkYXRhICZjb3B5OyBNYXBib3gnYCkuXHJcbiAgXHRhZGRBdHRyaWJ1dGlvbjogZnVuY3Rpb24gKHRleHQpIHtcclxuICBcdFx0aWYgKCF0ZXh0KSB7IHJldHVybiB0aGlzOyB9XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX2F0dHJpYnV0aW9uc1t0ZXh0XSkge1xyXG4gIFx0XHRcdHRoaXMuX2F0dHJpYnV0aW9uc1t0ZXh0XSA9IDA7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fYXR0cmlidXRpb25zW3RleHRdKys7XHJcblxyXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUF0dHJpYnV0aW9uKHRleHQ6IFN0cmluZyk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgYW4gYXR0cmlidXRpb24gdGV4dC5cclxuICBcdHJlbW92ZUF0dHJpYnV0aW9uOiBmdW5jdGlvbiAodGV4dCkge1xyXG4gIFx0XHRpZiAoIXRleHQpIHsgcmV0dXJuIHRoaXM7IH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9hdHRyaWJ1dGlvbnNbdGV4dF0pIHtcclxuICBcdFx0XHR0aGlzLl9hdHRyaWJ1dGlvbnNbdGV4dF0tLTtcclxuICBcdFx0XHR0aGlzLl91cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgYXR0cmlicyA9IFtdO1xyXG5cclxuICBcdFx0Zm9yICh2YXIgaSBpbiB0aGlzLl9hdHRyaWJ1dGlvbnMpIHtcclxuICBcdFx0XHRpZiAodGhpcy5fYXR0cmlidXRpb25zW2ldKSB7XHJcbiAgXHRcdFx0XHRhdHRyaWJzLnB1c2goaSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgcHJlZml4QW5kQXR0cmlicyA9IFtdO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5wcmVmaXgpIHtcclxuICBcdFx0XHRwcmVmaXhBbmRBdHRyaWJzLnB1c2godGhpcy5vcHRpb25zLnByZWZpeCk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGF0dHJpYnMubGVuZ3RoKSB7XHJcbiAgXHRcdFx0cHJlZml4QW5kQXR0cmlicy5wdXNoKGF0dHJpYnMuam9pbignLCAnKSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5pbm5lckhUTUwgPSBwcmVmaXhBbmRBdHRyaWJzLmpvaW4oJyB8ICcpO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIC8vIEBzZWN0aW9uIENvbnRyb2wgb3B0aW9uc1xyXG4gIC8vIEBvcHRpb24gYXR0cmlidXRpb25Db250cm9sOiBCb29sZWFuID0gdHJ1ZVxyXG4gIC8vIFdoZXRoZXIgYSBbYXR0cmlidXRpb24gY29udHJvbF0oI2NvbnRyb2wtYXR0cmlidXRpb24pIGlzIGFkZGVkIHRvIHRoZSBtYXAgYnkgZGVmYXVsdC5cclxuICBNYXAubWVyZ2VPcHRpb25zKHtcclxuICBcdGF0dHJpYnV0aW9uQ29udHJvbDogdHJ1ZVxyXG4gIH0pO1xyXG5cclxuICBNYXAuYWRkSW5pdEhvb2soZnVuY3Rpb24gKCkge1xyXG4gIFx0aWYgKHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbkNvbnRyb2wpIHtcclxuICBcdFx0bmV3IEF0dHJpYnV0aW9uKCkuYWRkVG8odGhpcyk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgQ29udHJvbC5BdHRyaWJ1dGlvblxyXG4gIC8vIEBmYWN0b3J5IEwuY29udHJvbC5hdHRyaWJ1dGlvbihvcHRpb25zOiBDb250cm9sLkF0dHJpYnV0aW9uIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhbiBhdHRyaWJ1dGlvbiBjb250cm9sLlxyXG4gIHZhciBhdHRyaWJ1dGlvbiA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IEF0dHJpYnV0aW9uKG9wdGlvbnMpO1xyXG4gIH07XG5cbiAgQ29udHJvbC5MYXllcnMgPSBMYXllcnM7XG4gIENvbnRyb2wuWm9vbSA9IFpvb207XG4gIENvbnRyb2wuU2NhbGUgPSBTY2FsZTtcbiAgQ29udHJvbC5BdHRyaWJ1dGlvbiA9IEF0dHJpYnV0aW9uO1xuXG4gIGNvbnRyb2wubGF5ZXJzID0gbGF5ZXJzO1xuICBjb250cm9sLnpvb20gPSB6b29tO1xuICBjb250cm9sLnNjYWxlID0gc2NhbGU7XG4gIGNvbnRyb2wuYXR0cmlidXRpb24gPSBhdHRyaWJ1dGlvbjtcblxuICAvKlxuICBcdEwuSGFuZGxlciBpcyBhIGJhc2UgY2xhc3MgZm9yIGhhbmRsZXIgY2xhc3NlcyB0aGF0IGFyZSB1c2VkIGludGVybmFsbHkgdG8gaW5qZWN0XG4gIFx0aW50ZXJhY3Rpb24gZmVhdHVyZXMgbGlrZSBkcmFnZ2luZyB0byBjbGFzc2VzIGxpa2UgTWFwIGFuZCBNYXJrZXIuXG4gICovXG5cbiAgLy8gQGNsYXNzIEhhbmRsZXJcbiAgLy8gQGFrYSBMLkhhbmRsZXJcbiAgLy8gQWJzdHJhY3QgY2xhc3MgZm9yIG1hcCBpbnRlcmFjdGlvbiBoYW5kbGVyc1xuXG4gIHZhciBIYW5kbGVyID0gQ2xhc3MuZXh0ZW5kKHtcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHR0aGlzLl9tYXAgPSBtYXA7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZW5hYmxlKCk6IHRoaXNcbiAgXHQvLyBFbmFibGVzIHRoZSBoYW5kbGVyXG4gIFx0ZW5hYmxlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fZW5hYmxlZCkgeyByZXR1cm4gdGhpczsgfVxuXG4gIFx0XHR0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgXHRcdHRoaXMuYWRkSG9va3MoKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGRpc2FibGUoKTogdGhpc1xuICBcdC8vIERpc2FibGVzIHRoZSBoYW5kbGVyXG4gIFx0ZGlzYWJsZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9lbmFibGVkKSB7IHJldHVybiB0aGlzOyB9XG5cbiAgXHRcdHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgXHRcdHRoaXMucmVtb3ZlSG9va3MoKTtcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGVuYWJsZWQoKTogQm9vbGVhblxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBoYW5kbGVyIGlzIGVuYWJsZWRcbiAgXHRlbmFibGVkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gISF0aGlzLl9lbmFibGVkO1xuICBcdH1cblxuICBcdC8vIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXG4gIFx0Ly8gQ2xhc3NlcyBpbmhlcml0aW5nIGZyb20gYEhhbmRsZXJgIG11c3QgaW1wbGVtZW50IHRoZSB0d28gZm9sbG93aW5nIG1ldGhvZHM6XG4gIFx0Ly8gQG1ldGhvZCBhZGRIb29rcygpXG4gIFx0Ly8gQ2FsbGVkIHdoZW4gdGhlIGhhbmRsZXIgaXMgZW5hYmxlZCwgc2hvdWxkIGFkZCBldmVudCBob29rcy5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUhvb2tzKClcbiAgXHQvLyBDYWxsZWQgd2hlbiB0aGUgaGFuZGxlciBpcyBkaXNhYmxlZCwgc2hvdWxkIHJlbW92ZSB0aGUgZXZlbnQgaG9va3MgYWRkZWQgcHJldmlvdXNseS5cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gVGhlcmUgaXMgc3RhdGljIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgd2l0aG91dCBpbnN0YW50aWF0aW5nIEwuSGFuZGxlcjpcbiAgLy8gQGZ1bmN0aW9uIGFkZFRvKG1hcDogTWFwLCBuYW1lOiBTdHJpbmcpOiB0aGlzXG4gIC8vIEFkZHMgYSBuZXcgSGFuZGxlciB0byB0aGUgZ2l2ZW4gbWFwIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gIEhhbmRsZXIuYWRkVG8gPSBmdW5jdGlvbiAobWFwLCBuYW1lKSB7XG4gIFx0bWFwLmFkZEhhbmRsZXIobmFtZSwgdGhpcyk7XG4gIFx0cmV0dXJuIHRoaXM7XG4gIH07XG5cbiAgdmFyIE1peGluID0ge0V2ZW50czogRXZlbnRzfTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBEcmFnZ2FibGVcclxuICAgKiBAYWthIEwuRHJhZ2dhYmxlXHJcbiAgICogQGluaGVyaXRzIEV2ZW50ZWRcclxuICAgKlxyXG4gICAqIEEgY2xhc3MgZm9yIG1ha2luZyBET00gZWxlbWVudHMgZHJhZ2dhYmxlIChpbmNsdWRpbmcgdG91Y2ggc3VwcG9ydCkuXHJcbiAgICogVXNlZCBpbnRlcm5hbGx5IGZvciBtYXAgYW5kIG1hcmtlciBkcmFnZ2luZy4gT25seSB3b3JrcyBmb3IgZWxlbWVudHNcclxuICAgKiB0aGF0IHdlcmUgcG9zaXRpb25lZCB3aXRoIFtgTC5Eb21VdGlsLnNldFBvc2l0aW9uYF0oI2RvbXV0aWwtc2V0cG9zaXRpb24pLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBkcmFnZ2FibGUgPSBuZXcgTC5EcmFnZ2FibGUoZWxlbWVudFRvRHJhZyk7XHJcbiAgICogZHJhZ2dhYmxlLmVuYWJsZSgpO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuICB2YXIgU1RBUlQgPSB0b3VjaCA/ICd0b3VjaHN0YXJ0IG1vdXNlZG93bicgOiAnbW91c2Vkb3duJztcclxuICB2YXIgRU5EID0ge1xyXG4gIFx0bW91c2Vkb3duOiAnbW91c2V1cCcsXHJcbiAgXHR0b3VjaHN0YXJ0OiAndG91Y2hlbmQnLFxyXG4gIFx0cG9pbnRlcmRvd246ICd0b3VjaGVuZCcsXHJcbiAgXHRNU1BvaW50ZXJEb3duOiAndG91Y2hlbmQnXHJcbiAgfTtcclxuICB2YXIgTU9WRSA9IHtcclxuICBcdG1vdXNlZG93bjogJ21vdXNlbW92ZScsXHJcbiAgXHR0b3VjaHN0YXJ0OiAndG91Y2htb3ZlJyxcclxuICBcdHBvaW50ZXJkb3duOiAndG91Y2htb3ZlJyxcclxuICBcdE1TUG9pbnRlckRvd246ICd0b3VjaG1vdmUnXHJcbiAgfTtcclxuXHJcblxyXG4gIHZhciBEcmFnZ2FibGUgPSBFdmVudGVkLmV4dGVuZCh7XHJcblxyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAc2VjdGlvblxyXG4gIFx0XHQvLyBAYWthIERyYWdnYWJsZSBvcHRpb25zXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xpY2tUb2xlcmFuY2U6IE51bWJlciA9IDNcclxuICBcdFx0Ly8gVGhlIG1heCBudW1iZXIgb2YgcGl4ZWxzIGEgdXNlciBjYW4gc2hpZnQgdGhlIG1vdXNlIHBvaW50ZXIgZHVyaW5nIGEgY2xpY2tcclxuICBcdFx0Ly8gZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCBjbGljayAoYXMgb3Bwb3NlZCB0byBhIG1vdXNlIGRyYWcpLlxyXG4gIFx0XHRjbGlja1RvbGVyYW5jZTogM1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAY29uc3RydWN0b3IgTC5EcmFnZ2FibGUoZWw6IEhUTUxFbGVtZW50LCBkcmFnSGFuZGxlPzogSFRNTEVsZW1lbnQsIHByZXZlbnRPdXRsaW5lPzogQm9vbGVhbiwgb3B0aW9ucz86IERyYWdnYWJsZSBvcHRpb25zKVxyXG4gIFx0Ly8gQ3JlYXRlcyBhIGBEcmFnZ2FibGVgIG9iamVjdCBmb3IgbW92aW5nIGBlbGAgd2hlbiB5b3Ugc3RhcnQgZHJhZ2dpbmcgdGhlIGBkcmFnSGFuZGxlYCBlbGVtZW50IChlcXVhbHMgYGVsYCBpdHNlbGYgYnkgZGVmYXVsdCkuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoZWxlbWVudCwgZHJhZ1N0YXJ0VGFyZ2V0LCBwcmV2ZW50T3V0bGluZSQkMSwgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgXHRcdHRoaXMuX2RyYWdTdGFydFRhcmdldCA9IGRyYWdTdGFydFRhcmdldCB8fCBlbGVtZW50O1xyXG4gIFx0XHR0aGlzLl9wcmV2ZW50T3V0bGluZSA9IHByZXZlbnRPdXRsaW5lJCQxO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGVuYWJsZSgpXHJcbiAgXHQvLyBFbmFibGVzIHRoZSBkcmFnZ2luZyBhYmlsaXR5XHJcbiAgXHRlbmFibGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHRvbih0aGlzLl9kcmFnU3RhcnRUYXJnZXQsIFNUQVJULCB0aGlzLl9vbkRvd24sIHRoaXMpO1xyXG5cclxuICBcdFx0dGhpcy5fZW5hYmxlZCA9IHRydWU7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZGlzYWJsZSgpXHJcbiAgXHQvLyBEaXNhYmxlcyB0aGUgZHJhZ2dpbmcgYWJpbGl0eVxyXG4gIFx0ZGlzYWJsZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHQvLyBJZiB3ZSdyZSBjdXJyZW50bHkgZHJhZ2dpbmcgdGhpcyBkcmFnZ2FibGUsXHJcbiAgXHRcdC8vIGRpc2FibGluZyBpdCBjb3VudHMgYXMgZmlyc3QgZW5kaW5nIHRoZSBkcmFnLlxyXG4gIFx0XHRpZiAoRHJhZ2dhYmxlLl9kcmFnZ2luZyA9PT0gdGhpcykge1xyXG4gIFx0XHRcdHRoaXMuZmluaXNoRHJhZygpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRvZmYodGhpcy5fZHJhZ1N0YXJ0VGFyZ2V0LCBTVEFSVCwgdGhpcy5fb25Eb3duLCB0aGlzKTtcclxuXHJcbiAgXHRcdHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcclxuICBcdFx0dGhpcy5fbW92ZWQgPSBmYWxzZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uRG93bjogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0Ly8gSWdub3JlIHNpbXVsYXRlZCBldmVudHMsIHNpbmNlIHdlIGhhbmRsZSBib3RoIHRvdWNoIGFuZFxyXG4gIFx0XHQvLyBtb3VzZSBleHBsaWNpdGx5OyBvdGhlcndpc2Ugd2UgcmlzayBnZXR0aW5nIGR1cGxpY2F0ZXMgb2ZcclxuICBcdFx0Ly8gdG91Y2ggZXZlbnRzLCBzZWUgIzQzMTUuXHJcbiAgXHRcdC8vIEFsc28gaWdub3JlIHRoZSBldmVudCBpZiBkaXNhYmxlZDsgdGhpcyBoYXBwZW5zIGluIElFMTFcclxuICBcdFx0Ly8gdW5kZXIgc29tZSBjaXJjdW1zdGFuY2VzLCBzZWUgIzM2NjYuXHJcbiAgXHRcdGlmIChlLl9zaW11bGF0ZWQgfHwgIXRoaXMuX2VuYWJsZWQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZlZCA9IGZhbHNlO1xyXG5cclxuICBcdFx0aWYgKGhhc0NsYXNzKHRoaXMuX2VsZW1lbnQsICdsZWFmbGV0LXpvb20tYW5pbScpKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKERyYWdnYWJsZS5fZHJhZ2dpbmcgfHwgZS5zaGlmdEtleSB8fCAoKGUud2hpY2ggIT09IDEpICYmIChlLmJ1dHRvbiAhPT0gMSkgJiYgIWUudG91Y2hlcykpIHsgcmV0dXJuOyB9XHJcbiAgXHRcdERyYWdnYWJsZS5fZHJhZ2dpbmcgPSB0aGlzOyAgLy8gUHJldmVudCBkcmFnZ2luZyBtdWx0aXBsZSBvYmplY3RzIGF0IG9uY2UuXHJcblxyXG4gIFx0XHRpZiAodGhpcy5fcHJldmVudE91dGxpbmUpIHtcclxuICBcdFx0XHRwcmV2ZW50T3V0bGluZSh0aGlzLl9lbGVtZW50KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0ZGlzYWJsZUltYWdlRHJhZygpO1xyXG4gIFx0XHRkaXNhYmxlVGV4dFNlbGVjdGlvbigpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21vdmluZykgeyByZXR1cm47IH1cclxuXHJcbiAgXHRcdC8vIEBldmVudCBkb3duOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgZHJhZyBpcyBhYm91dCB0byBzdGFydC5cclxuICBcdFx0dGhpcy5maXJlKCdkb3duJyk7XHJcblxyXG4gIFx0XHR2YXIgZmlyc3QgPSBlLnRvdWNoZXMgPyBlLnRvdWNoZXNbMF0gOiBlLFxyXG4gIFx0XHQgICAgc2l6ZWRQYXJlbnQgPSBnZXRTaXplZFBhcmVudE5vZGUodGhpcy5fZWxlbWVudCk7XHJcblxyXG4gIFx0XHR0aGlzLl9zdGFydFBvaW50ID0gbmV3IFBvaW50KGZpcnN0LmNsaWVudFgsIGZpcnN0LmNsaWVudFkpO1xyXG5cclxuICBcdFx0Ly8gQ2FjaGUgdGhlIHNjYWxlLCBzbyB0aGF0IHdlIGNhbiBjb250aW51b3VzbHkgY29tcGVuc2F0ZSBmb3IgaXQgZHVyaW5nIGRyYWcgKF9vbk1vdmUpLlxyXG4gIFx0XHR0aGlzLl9wYXJlbnRTY2FsZSA9IGdldFNjYWxlKHNpemVkUGFyZW50KTtcclxuXHJcbiAgXHRcdG9uKGRvY3VtZW50LCBNT1ZFW2UudHlwZV0sIHRoaXMuX29uTW92ZSwgdGhpcyk7XHJcbiAgXHRcdG9uKGRvY3VtZW50LCBFTkRbZS50eXBlXSwgdGhpcy5fb25VcCwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbk1vdmU6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdC8vIElnbm9yZSBzaW11bGF0ZWQgZXZlbnRzLCBzaW5jZSB3ZSBoYW5kbGUgYm90aCB0b3VjaCBhbmRcclxuICBcdFx0Ly8gbW91c2UgZXhwbGljaXRseTsgb3RoZXJ3aXNlIHdlIHJpc2sgZ2V0dGluZyBkdXBsaWNhdGVzIG9mXHJcbiAgXHRcdC8vIHRvdWNoIGV2ZW50cywgc2VlICM0MzE1LlxyXG4gIFx0XHQvLyBBbHNvIGlnbm9yZSB0aGUgZXZlbnQgaWYgZGlzYWJsZWQ7IHRoaXMgaGFwcGVucyBpbiBJRTExXHJcbiAgXHRcdC8vIHVuZGVyIHNvbWUgY2lyY3Vtc3RhbmNlcywgc2VlICMzNjY2LlxyXG4gIFx0XHRpZiAoZS5fc2ltdWxhdGVkIHx8ICF0aGlzLl9lbmFibGVkKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0aWYgKGUudG91Y2hlcyAmJiBlLnRvdWNoZXMubGVuZ3RoID4gMSkge1xyXG4gIFx0XHRcdHRoaXMuX21vdmVkID0gdHJ1ZTtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBmaXJzdCA9IChlLnRvdWNoZXMgJiYgZS50b3VjaGVzLmxlbmd0aCA9PT0gMSA/IGUudG91Y2hlc1swXSA6IGUpLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gbmV3IFBvaW50KGZpcnN0LmNsaWVudFgsIGZpcnN0LmNsaWVudFkpLl9zdWJ0cmFjdCh0aGlzLl9zdGFydFBvaW50KTtcclxuXHJcbiAgXHRcdGlmICghb2Zmc2V0LnggJiYgIW9mZnNldC55KSB7IHJldHVybjsgfVxyXG4gIFx0XHRpZiAoTWF0aC5hYnMob2Zmc2V0LngpICsgTWF0aC5hYnMob2Zmc2V0LnkpIDwgdGhpcy5vcHRpb25zLmNsaWNrVG9sZXJhbmNlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0Ly8gV2UgYXNzdW1lIHRoYXQgdGhlIHBhcmVudCBjb250YWluZXIncyBwb3NpdGlvbiwgYm9yZGVyIGFuZCBzY2FsZSBkbyBub3QgY2hhbmdlIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGRyYWcuXHJcbiAgXHRcdC8vIFRoZXJlZm9yZSB0aGVyZSBpcyBubyBuZWVkIHRvIGFjY291bnQgZm9yIHRoZSBwb3NpdGlvbiBhbmQgYm9yZGVyICh0aGV5IGFyZSBlbGltaW5hdGVkIGJ5IHRoZSBzdWJ0cmFjdGlvbilcclxuICBcdFx0Ly8gYW5kIHdlIGNhbiB1c2UgdGhlIGNhY2hlZCB2YWx1ZSBmb3IgdGhlIHNjYWxlLlxyXG4gIFx0XHRvZmZzZXQueCAvPSB0aGlzLl9wYXJlbnRTY2FsZS54O1xyXG4gIFx0XHRvZmZzZXQueSAvPSB0aGlzLl9wYXJlbnRTY2FsZS55O1xyXG5cclxuICBcdFx0cHJldmVudERlZmF1bHQoZSk7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XHJcbiAgXHRcdFx0Ly8gQGV2ZW50IGRyYWdzdGFydDogRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIGEgZHJhZyBzdGFydHNcclxuICBcdFx0XHR0aGlzLmZpcmUoJ2RyYWdzdGFydCcpO1xyXG5cclxuICBcdFx0XHR0aGlzLl9tb3ZlZCA9IHRydWU7XHJcbiAgXHRcdFx0dGhpcy5fc3RhcnRQb3MgPSBnZXRQb3NpdGlvbih0aGlzLl9lbGVtZW50KS5zdWJ0cmFjdChvZmZzZXQpO1xyXG5cclxuICBcdFx0XHRhZGRDbGFzcyhkb2N1bWVudC5ib2R5LCAnbGVhZmxldC1kcmFnZ2luZycpO1xyXG5cclxuICBcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gZS50YXJnZXQgfHwgZS5zcmNFbGVtZW50O1xyXG4gIFx0XHRcdC8vIElFIGFuZCBFZGdlIGRvIG5vdCBnaXZlIHRoZSA8dXNlPiBlbGVtZW50LCBzbyBmZXRjaCBpdFxyXG4gIFx0XHRcdC8vIGlmIG5lY2Vzc2FyeVxyXG4gIFx0XHRcdGlmICh3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlICYmIHRoaXMuX2xhc3RUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuU1ZHRWxlbWVudEluc3RhbmNlKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gdGhpcy5fbGFzdFRhcmdldC5jb3JyZXNwb25kaW5nVXNlRWxlbWVudDtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0YWRkQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwgJ2xlYWZsZXQtZHJhZy10YXJnZXQnKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fbmV3UG9zID0gdGhpcy5fc3RhcnRQb3MuYWRkKG9mZnNldCk7XHJcbiAgXHRcdHRoaXMuX21vdmluZyA9IHRydWU7XHJcblxyXG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpO1xyXG4gIFx0XHR0aGlzLl9sYXN0RXZlbnQgPSBlO1xyXG4gIFx0XHR0aGlzLl9hbmltUmVxdWVzdCA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fdXBkYXRlUG9zaXRpb24sIHRoaXMsIHRydWUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlUG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGUgPSB7b3JpZ2luYWxFdmVudDogdGhpcy5fbGFzdEV2ZW50fTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBwcmVkcmFnOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCBjb250aW51b3VzbHkgZHVyaW5nIGRyYWdnaW5nICpiZWZvcmUqIGVhY2ggY29ycmVzcG9uZGluZ1xyXG4gIFx0XHQvLyB1cGRhdGUgb2YgdGhlIGVsZW1lbnQncyBwb3NpdGlvbi5cclxuICBcdFx0dGhpcy5maXJlKCdwcmVkcmFnJywgZSk7XHJcbiAgXHRcdHNldFBvc2l0aW9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuX25ld1Bvcyk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgZHJhZzogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgY29udGludW91c2x5IGR1cmluZyBkcmFnZ2luZy5cclxuICBcdFx0dGhpcy5maXJlKCdkcmFnJywgZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vblVwOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHQvLyBJZ25vcmUgc2ltdWxhdGVkIGV2ZW50cywgc2luY2Ugd2UgaGFuZGxlIGJvdGggdG91Y2ggYW5kXHJcbiAgXHRcdC8vIG1vdXNlIGV4cGxpY2l0bHk7IG90aGVyd2lzZSB3ZSByaXNrIGdldHRpbmcgZHVwbGljYXRlcyBvZlxyXG4gIFx0XHQvLyB0b3VjaCBldmVudHMsIHNlZSAjNDMxNS5cclxuICBcdFx0Ly8gQWxzbyBpZ25vcmUgdGhlIGV2ZW50IGlmIGRpc2FibGVkOyB0aGlzIGhhcHBlbnMgaW4gSUUxMVxyXG4gIFx0XHQvLyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMsIHNlZSAjMzY2Ni5cclxuICBcdFx0aWYgKGUuX3NpbXVsYXRlZCB8fCAhdGhpcy5fZW5hYmxlZCkgeyByZXR1cm47IH1cclxuICBcdFx0dGhpcy5maW5pc2hEcmFnKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdGZpbmlzaERyYWc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmVtb3ZlQ2xhc3MoZG9jdW1lbnQuYm9keSwgJ2xlYWZsZXQtZHJhZ2dpbmcnKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9sYXN0VGFyZ2V0KSB7XHJcbiAgXHRcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbGFzdFRhcmdldCwgJ2xlYWZsZXQtZHJhZy10YXJnZXQnKTtcclxuICBcdFx0XHR0aGlzLl9sYXN0VGFyZ2V0ID0gbnVsbDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Zm9yICh2YXIgaSBpbiBNT1ZFKSB7XHJcbiAgXHRcdFx0b2ZmKGRvY3VtZW50LCBNT1ZFW2ldLCB0aGlzLl9vbk1vdmUsIHRoaXMpO1xyXG4gIFx0XHRcdG9mZihkb2N1bWVudCwgRU5EW2ldLCB0aGlzLl9vblVwLCB0aGlzKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0ZW5hYmxlSW1hZ2VEcmFnKCk7XHJcbiAgXHRcdGVuYWJsZVRleHRTZWxlY3Rpb24oKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9tb3ZlZCAmJiB0aGlzLl9tb3ZpbmcpIHtcclxuICBcdFx0XHQvLyBlbnN1cmUgZHJhZyBpcyBub3QgZmlyZWQgYWZ0ZXIgZHJhZ2VuZFxyXG4gIFx0XHRcdGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9hbmltUmVxdWVzdCk7XHJcblxyXG4gIFx0XHRcdC8vIEBldmVudCBkcmFnZW5kOiBEcmFnRW5kRXZlbnRcclxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBkcmFnIGVuZHMuXHJcbiAgXHRcdFx0dGhpcy5maXJlKCdkcmFnZW5kJywge1xyXG4gIFx0XHRcdFx0ZGlzdGFuY2U6IHRoaXMuX25ld1Bvcy5kaXN0YW5jZVRvKHRoaXMuX3N0YXJ0UG9zKVxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9tb3ZpbmcgPSBmYWxzZTtcclxuICBcdFx0RHJhZ2dhYmxlLl9kcmFnZ2luZyA9IGZhbHNlO1xyXG4gIFx0fVxyXG5cclxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgTGluZVV0aWxcclxuICAgKlxyXG4gICAqIFZhcmlvdXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHBvbHlsaW5lIHBvaW50cyBwcm9jZXNzaW5nLCB1c2VkIGJ5IExlYWZsZXQgaW50ZXJuYWxseSB0byBtYWtlIHBvbHlsaW5lcyBsaWdodG5pbmctZmFzdC5cclxuICAgKi9cclxuXHJcbiAgLy8gU2ltcGxpZnkgcG9seWxpbmUgd2l0aCB2ZXJ0ZXggcmVkdWN0aW9uIGFuZCBEb3VnbGFzLVBldWNrZXIgc2ltcGxpZmljYXRpb24uXHJcbiAgLy8gSW1wcm92ZXMgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGRyYW1hdGljYWxseSBieSBsZXNzZW5pbmcgdGhlIG51bWJlciBvZiBwb2ludHMgdG8gZHJhdy5cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHNpbXBsaWZ5KHBvaW50czogUG9pbnRbXSwgdG9sZXJhbmNlOiBOdW1iZXIpOiBQb2ludFtdXHJcbiAgLy8gRHJhbWF0aWNhbGx5IHJlZHVjZXMgdGhlIG51bWJlciBvZiBwb2ludHMgaW4gYSBwb2x5bGluZSB3aGlsZSByZXRhaW5pbmdcclxuICAvLyBpdHMgc2hhcGUgYW5kIHJldHVybnMgYSBuZXcgYXJyYXkgb2Ygc2ltcGxpZmllZCBwb2ludHMsIHVzaW5nIHRoZVxyXG4gIC8vIFtEb3VnbGFzLVBldWNrZXIgYWxnb3JpdGhtXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RvdWdsYXMtUGV1Y2tlcl9hbGdvcml0aG0pLlxyXG4gIC8vIFVzZWQgZm9yIGEgaHVnZSBwZXJmb3JtYW5jZSBib29zdCB3aGVuIHByb2Nlc3NpbmcvZGlzcGxheWluZyBMZWFmbGV0IHBvbHlsaW5lcyBmb3JcclxuICAvLyBlYWNoIHpvb20gbGV2ZWwgYW5kIGFsc28gcmVkdWNpbmcgdmlzdWFsIG5vaXNlLiB0b2xlcmFuY2UgYWZmZWN0cyB0aGUgYW1vdW50IG9mXHJcbiAgLy8gc2ltcGxpZmljYXRpb24gKGxlc3NlciB2YWx1ZSBtZWFucyBoaWdoZXIgcXVhbGl0eSBidXQgc2xvd2VyIGFuZCB3aXRoIG1vcmUgcG9pbnRzKS5cclxuICAvLyBBbHNvIHJlbGVhc2VkIGFzIGEgc2VwYXJhdGVkIG1pY3JvLWxpYnJhcnkgW1NpbXBsaWZ5LmpzXShodHRwOi8vbW91cm5lci5naXRodWIuY29tL3NpbXBsaWZ5LWpzLykuXHJcbiAgZnVuY3Rpb24gc2ltcGxpZnkocG9pbnRzLCB0b2xlcmFuY2UpIHtcclxuICBcdGlmICghdG9sZXJhbmNlIHx8ICFwb2ludHMubGVuZ3RoKSB7XHJcbiAgXHRcdHJldHVybiBwb2ludHMuc2xpY2UoKTtcclxuICBcdH1cclxuXHJcbiAgXHR2YXIgc3FUb2xlcmFuY2UgPSB0b2xlcmFuY2UgKiB0b2xlcmFuY2U7XHJcblxyXG4gIFx0ICAgIC8vIHN0YWdlIDE6IHZlcnRleCByZWR1Y3Rpb25cclxuICBcdCAgICBwb2ludHMgPSBfcmVkdWNlUG9pbnRzKHBvaW50cywgc3FUb2xlcmFuY2UpO1xyXG5cclxuICBcdCAgICAvLyBzdGFnZSAyOiBEb3VnbGFzLVBldWNrZXIgc2ltcGxpZmljYXRpb25cclxuICBcdCAgICBwb2ludHMgPSBfc2ltcGxpZnlEUChwb2ludHMsIHNxVG9sZXJhbmNlKTtcclxuXHJcbiAgXHRyZXR1cm4gcG9pbnRzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIHBvaW50VG9TZWdtZW50RGlzdGFuY2UocDogUG9pbnQsIHAxOiBQb2ludCwgcDI6IFBvaW50KTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgZGlzdGFuY2UgYmV0d2VlbiBwb2ludCBgcGAgYW5kIHNlZ21lbnQgYHAxYCB0byBgcDJgLlxyXG4gIGZ1bmN0aW9uIHBvaW50VG9TZWdtZW50RGlzdGFuY2UocCwgcDEsIHAyKSB7XHJcbiAgXHRyZXR1cm4gTWF0aC5zcXJ0KF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIsIHRydWUpKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjbG9zZXN0UG9pbnRPblNlZ21lbnQocDogUG9pbnQsIHAxOiBQb2ludCwgcDI6IFBvaW50KTogTnVtYmVyXHJcbiAgLy8gUmV0dXJucyB0aGUgY2xvc2VzdCBwb2ludCBmcm9tIGEgcG9pbnQgYHBgIG9uIGEgc2VnbWVudCBgcDFgIHRvIGBwMmAuXHJcbiAgZnVuY3Rpb24gY2xvc2VzdFBvaW50T25TZWdtZW50KHAsIHAxLCBwMikge1xyXG4gIFx0cmV0dXJuIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIpO1xyXG4gIH1cclxuXHJcbiAgLy8gRG91Z2xhcy1QZXVja2VyIHNpbXBsaWZpY2F0aW9uLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Eb3VnbGFzLVBldWNrZXJfYWxnb3JpdGhtXHJcbiAgZnVuY3Rpb24gX3NpbXBsaWZ5RFAocG9pbnRzLCBzcVRvbGVyYW5jZSkge1xyXG5cclxuICBcdHZhciBsZW4gPSBwb2ludHMubGVuZ3RoLFxyXG4gIFx0ICAgIEFycmF5Q29uc3RydWN0b3IgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gdW5kZWZpbmVkICsgJycgPyBVaW50OEFycmF5IDogQXJyYXksXHJcbiAgXHQgICAgbWFya2VycyA9IG5ldyBBcnJheUNvbnN0cnVjdG9yKGxlbik7XHJcblxyXG4gIFx0ICAgIG1hcmtlcnNbMF0gPSBtYXJrZXJzW2xlbiAtIDFdID0gMTtcclxuXHJcbiAgXHRfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgMCwgbGVuIC0gMSk7XHJcblxyXG4gIFx0dmFyIGksXHJcbiAgXHQgICAgbmV3UG9pbnRzID0gW107XHJcblxyXG4gIFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdGlmIChtYXJrZXJzW2ldKSB7XHJcbiAgXHRcdFx0bmV3UG9pbnRzLnB1c2gocG9pbnRzW2ldKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBuZXdQb2ludHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgZmlyc3QsIGxhc3QpIHtcclxuXHJcbiAgXHR2YXIgbWF4U3FEaXN0ID0gMCxcclxuICBcdGluZGV4LCBpLCBzcURpc3Q7XHJcblxyXG4gIFx0Zm9yIChpID0gZmlyc3QgKyAxOyBpIDw9IGxhc3QgLSAxOyBpKyspIHtcclxuICBcdFx0c3FEaXN0ID0gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50KHBvaW50c1tpXSwgcG9pbnRzW2ZpcnN0XSwgcG9pbnRzW2xhc3RdLCB0cnVlKTtcclxuXHJcbiAgXHRcdGlmIChzcURpc3QgPiBtYXhTcURpc3QpIHtcclxuICBcdFx0XHRpbmRleCA9IGk7XHJcbiAgXHRcdFx0bWF4U3FEaXN0ID0gc3FEaXN0O1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKG1heFNxRGlzdCA+IHNxVG9sZXJhbmNlKSB7XHJcbiAgXHRcdG1hcmtlcnNbaW5kZXhdID0gMTtcclxuXHJcbiAgXHRcdF9zaW1wbGlmeURQU3RlcChwb2ludHMsIG1hcmtlcnMsIHNxVG9sZXJhbmNlLCBmaXJzdCwgaW5kZXgpO1xyXG4gIFx0XHRfc2ltcGxpZnlEUFN0ZXAocG9pbnRzLCBtYXJrZXJzLCBzcVRvbGVyYW5jZSwgaW5kZXgsIGxhc3QpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgLy8gcmVkdWNlIHBvaW50cyB0aGF0IGFyZSB0b28gY2xvc2UgdG8gZWFjaCBvdGhlciB0byBhIHNpbmdsZSBwb2ludFxyXG4gIGZ1bmN0aW9uIF9yZWR1Y2VQb2ludHMocG9pbnRzLCBzcVRvbGVyYW5jZSkge1xyXG4gIFx0dmFyIHJlZHVjZWRQb2ludHMgPSBbcG9pbnRzWzBdXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMSwgcHJldiA9IDAsIGxlbiA9IHBvaW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRpZiAoX3NxRGlzdChwb2ludHNbaV0sIHBvaW50c1twcmV2XSkgPiBzcVRvbGVyYW5jZSkge1xyXG4gIFx0XHRcdHJlZHVjZWRQb2ludHMucHVzaChwb2ludHNbaV0pO1xyXG4gIFx0XHRcdHByZXYgPSBpO1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcbiAgXHRpZiAocHJldiA8IGxlbiAtIDEpIHtcclxuICBcdFx0cmVkdWNlZFBvaW50cy5wdXNoKHBvaW50c1tsZW4gLSAxXSk7XHJcbiAgXHR9XHJcbiAgXHRyZXR1cm4gcmVkdWNlZFBvaW50cztcclxuICB9XHJcblxyXG4gIHZhciBfbGFzdENvZGU7XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjbGlwU2VnbWVudChhOiBQb2ludCwgYjogUG9pbnQsIGJvdW5kczogQm91bmRzLCB1c2VMYXN0Q29kZT86IEJvb2xlYW4sIHJvdW5kPzogQm9vbGVhbik6IFBvaW50W118Qm9vbGVhblxyXG4gIC8vIENsaXBzIHRoZSBzZWdtZW50IGEgdG8gYiBieSByZWN0YW5ndWxhciBib3VuZHMgd2l0aCB0aGVcclxuICAvLyBbQ29oZW4tU3V0aGVybGFuZCBhbGdvcml0aG1dKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvaGVuJUUyJTgwJTkzU3V0aGVybGFuZF9hbGdvcml0aG0pXHJcbiAgLy8gKG1vZGlmeWluZyB0aGUgc2VnbWVudCBwb2ludHMgZGlyZWN0bHkhKS4gVXNlZCBieSBMZWFmbGV0IHRvIG9ubHkgc2hvdyBwb2x5bGluZVxyXG4gIC8vIHBvaW50cyB0aGF0IGFyZSBvbiB0aGUgc2NyZWVuIG9yIG5lYXIsIGluY3JlYXNpbmcgcGVyZm9ybWFuY2UuXHJcbiAgZnVuY3Rpb24gY2xpcFNlZ21lbnQoYSwgYiwgYm91bmRzLCB1c2VMYXN0Q29kZSwgcm91bmQpIHtcclxuICBcdHZhciBjb2RlQSA9IHVzZUxhc3RDb2RlID8gX2xhc3RDb2RlIDogX2dldEJpdENvZGUoYSwgYm91bmRzKSxcclxuICBcdCAgICBjb2RlQiA9IF9nZXRCaXRDb2RlKGIsIGJvdW5kcyksXHJcblxyXG4gIFx0ICAgIGNvZGVPdXQsIHAsIG5ld0NvZGU7XHJcblxyXG4gIFx0ICAgIC8vIHNhdmUgMm5kIGNvZGUgdG8gYXZvaWQgY2FsY3VsYXRpbmcgaXQgb24gdGhlIG5leHQgc2VnbWVudFxyXG4gIFx0ICAgIF9sYXN0Q29kZSA9IGNvZGVCO1xyXG5cclxuICBcdHdoaWxlICh0cnVlKSB7XHJcbiAgXHRcdC8vIGlmIGEsYiBpcyBpbnNpZGUgdGhlIGNsaXAgd2luZG93ICh0cml2aWFsIGFjY2VwdClcclxuICBcdFx0aWYgKCEoY29kZUEgfCBjb2RlQikpIHtcclxuICBcdFx0XHRyZXR1cm4gW2EsIGJdO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBpZiBhLGIgaXMgb3V0c2lkZSB0aGUgY2xpcCB3aW5kb3cgKHRyaXZpYWwgcmVqZWN0KVxyXG4gIFx0XHRpZiAoY29kZUEgJiBjb2RlQikge1xyXG4gIFx0XHRcdHJldHVybiBmYWxzZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gb3RoZXIgY2FzZXNcclxuICBcdFx0Y29kZU91dCA9IGNvZGVBIHx8IGNvZGVCO1xyXG4gIFx0XHRwID0gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYSwgYiwgY29kZU91dCwgYm91bmRzLCByb3VuZCk7XHJcbiAgXHRcdG5ld0NvZGUgPSBfZ2V0Qml0Q29kZShwLCBib3VuZHMpO1xyXG5cclxuICBcdFx0aWYgKGNvZGVPdXQgPT09IGNvZGVBKSB7XHJcbiAgXHRcdFx0YSA9IHA7XHJcbiAgXHRcdFx0Y29kZUEgPSBuZXdDb2RlO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGIgPSBwO1xyXG4gIFx0XHRcdGNvZGVCID0gbmV3Q29kZTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYSwgYiwgY29kZSwgYm91bmRzLCByb3VuZCkge1xyXG4gIFx0dmFyIGR4ID0gYi54IC0gYS54LFxyXG4gIFx0ICAgIGR5ID0gYi55IC0gYS55LFxyXG4gIFx0ICAgIG1pbiA9IGJvdW5kcy5taW4sXHJcbiAgXHQgICAgbWF4ID0gYm91bmRzLm1heCxcclxuICBcdCAgICB4LCB5O1xyXG5cclxuICBcdGlmIChjb2RlICYgOCkgeyAvLyB0b3BcclxuICBcdFx0eCA9IGEueCArIGR4ICogKG1heC55IC0gYS55KSAvIGR5O1xyXG4gIFx0XHR5ID0gbWF4Lnk7XHJcblxyXG4gIFx0fSBlbHNlIGlmIChjb2RlICYgNCkgeyAvLyBib3R0b21cclxuICBcdFx0eCA9IGEueCArIGR4ICogKG1pbi55IC0gYS55KSAvIGR5O1xyXG4gIFx0XHR5ID0gbWluLnk7XHJcblxyXG4gIFx0fSBlbHNlIGlmIChjb2RlICYgMikgeyAvLyByaWdodFxyXG4gIFx0XHR4ID0gbWF4Lng7XHJcbiAgXHRcdHkgPSBhLnkgKyBkeSAqIChtYXgueCAtIGEueCkgLyBkeDtcclxuXHJcbiAgXHR9IGVsc2UgaWYgKGNvZGUgJiAxKSB7IC8vIGxlZnRcclxuICBcdFx0eCA9IG1pbi54O1xyXG4gIFx0XHR5ID0gYS55ICsgZHkgKiAobWluLnggLSBhLngpIC8gZHg7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIG5ldyBQb2ludCh4LCB5LCByb3VuZCk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZ2V0Qml0Q29kZShwLCBib3VuZHMpIHtcclxuICBcdHZhciBjb2RlID0gMDtcclxuXHJcbiAgXHRpZiAocC54IDwgYm91bmRzLm1pbi54KSB7IC8vIGxlZnRcclxuICBcdFx0Y29kZSB8PSAxO1xyXG4gIFx0fSBlbHNlIGlmIChwLnggPiBib3VuZHMubWF4LngpIHsgLy8gcmlnaHRcclxuICBcdFx0Y29kZSB8PSAyO1xyXG4gIFx0fVxyXG5cclxuICBcdGlmIChwLnkgPCBib3VuZHMubWluLnkpIHsgLy8gYm90dG9tXHJcbiAgXHRcdGNvZGUgfD0gNDtcclxuICBcdH0gZWxzZSBpZiAocC55ID4gYm91bmRzLm1heC55KSB7IC8vIHRvcFxyXG4gIFx0XHRjb2RlIHw9IDg7XHJcbiAgXHR9XHJcblxyXG4gIFx0cmV0dXJuIGNvZGU7XHJcbiAgfVxyXG5cclxuICAvLyBzcXVhcmUgZGlzdGFuY2UgKHRvIGF2b2lkIHVubmVjZXNzYXJ5IE1hdGguc3FydCBjYWxscylcclxuICBmdW5jdGlvbiBfc3FEaXN0KHAxLCBwMikge1xyXG4gIFx0dmFyIGR4ID0gcDIueCAtIHAxLngsXHJcbiAgXHQgICAgZHkgPSBwMi55IC0gcDEueTtcclxuICBcdHJldHVybiBkeCAqIGR4ICsgZHkgKiBkeTtcclxuICB9XHJcblxyXG4gIC8vIHJldHVybiBjbG9zZXN0IHBvaW50IG9uIHNlZ21lbnQgb3IgZGlzdGFuY2UgdG8gdGhhdCBwb2ludFxyXG4gIGZ1bmN0aW9uIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudChwLCBwMSwgcDIsIHNxRGlzdCkge1xyXG4gIFx0dmFyIHggPSBwMS54LFxyXG4gIFx0ICAgIHkgPSBwMS55LFxyXG4gIFx0ICAgIGR4ID0gcDIueCAtIHgsXHJcbiAgXHQgICAgZHkgPSBwMi55IC0geSxcclxuICBcdCAgICBkb3QgPSBkeCAqIGR4ICsgZHkgKiBkeSxcclxuICBcdCAgICB0O1xyXG5cclxuICBcdGlmIChkb3QgPiAwKSB7XHJcbiAgXHRcdHQgPSAoKHAueCAtIHgpICogZHggKyAocC55IC0geSkgKiBkeSkgLyBkb3Q7XHJcblxyXG4gIFx0XHRpZiAodCA+IDEpIHtcclxuICBcdFx0XHR4ID0gcDIueDtcclxuICBcdFx0XHR5ID0gcDIueTtcclxuICBcdFx0fSBlbHNlIGlmICh0ID4gMCkge1xyXG4gIFx0XHRcdHggKz0gZHggKiB0O1xyXG4gIFx0XHRcdHkgKz0gZHkgKiB0O1xyXG4gIFx0XHR9XHJcbiAgXHR9XHJcblxyXG4gIFx0ZHggPSBwLnggLSB4O1xyXG4gIFx0ZHkgPSBwLnkgLSB5O1xyXG5cclxuICBcdHJldHVybiBzcURpc3QgPyBkeCAqIGR4ICsgZHkgKiBkeSA6IG5ldyBQb2ludCh4LCB5KTtcclxuICB9XHJcblxyXG5cclxuICAvLyBAZnVuY3Rpb24gaXNGbGF0KGxhdGxuZ3M6IExhdExuZ1tdKTogQm9vbGVhblxyXG4gIC8vIFJldHVybnMgdHJ1ZSBpZiBgbGF0bG5nc2AgaXMgYSBmbGF0IGFycmF5LCBmYWxzZSBpcyBuZXN0ZWQuXHJcbiAgZnVuY3Rpb24gaXNGbGF0KGxhdGxuZ3MpIHtcclxuICBcdHJldHVybiAhaXNBcnJheShsYXRsbmdzWzBdKSB8fCAodHlwZW9mIGxhdGxuZ3NbMF1bMF0gIT09ICdvYmplY3QnICYmIHR5cGVvZiBsYXRsbmdzWzBdWzBdICE9PSAndW5kZWZpbmVkJyk7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBfZmxhdChsYXRsbmdzKSB7XHJcbiAgXHRjb25zb2xlLndhcm4oJ0RlcHJlY2F0ZWQgdXNlIG9mIF9mbGF0LCBwbGVhc2UgdXNlIEwuTGluZVV0aWwuaXNGbGF0IGluc3RlYWQuJyk7XHJcbiAgXHRyZXR1cm4gaXNGbGF0KGxhdGxuZ3MpO1xyXG4gIH1cblxuICB2YXIgTGluZVV0aWwgPSAoe1xuICAgIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgICBwb2ludFRvU2VnbWVudERpc3RhbmNlOiBwb2ludFRvU2VnbWVudERpc3RhbmNlLFxuICAgIGNsb3Nlc3RQb2ludE9uU2VnbWVudDogY2xvc2VzdFBvaW50T25TZWdtZW50LFxuICAgIGNsaXBTZWdtZW50OiBjbGlwU2VnbWVudCxcbiAgICBfZ2V0RWRnZUludGVyc2VjdGlvbjogX2dldEVkZ2VJbnRlcnNlY3Rpb24sXG4gICAgX2dldEJpdENvZGU6IF9nZXRCaXRDb2RlLFxuICAgIF9zcUNsb3Nlc3RQb2ludE9uU2VnbWVudDogX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50LFxuICAgIGlzRmxhdDogaXNGbGF0LFxuICAgIF9mbGF0OiBfZmxhdFxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUG9seVV0aWxcclxuICAgKiBWYXJpb3VzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBwb2x5Z29uIGdlb21ldHJpZXMuXHJcbiAgICovXHJcblxyXG4gIC8qIEBmdW5jdGlvbiBjbGlwUG9seWdvbihwb2ludHM6IFBvaW50W10sIGJvdW5kczogQm91bmRzLCByb3VuZD86IEJvb2xlYW4pOiBQb2ludFtdXHJcbiAgICogQ2xpcHMgdGhlIHBvbHlnb24gZ2VvbWV0cnkgZGVmaW5lZCBieSB0aGUgZ2l2ZW4gYHBvaW50c2AgYnkgdGhlIGdpdmVuIGJvdW5kcyAodXNpbmcgdGhlIFtTdXRoZXJsYW5kLUhvZGdtYW4gYWxnb3JpdGhtXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TdXRoZXJsYW5kJUUyJTgwJTkzSG9kZ21hbl9hbGdvcml0aG0pKS5cclxuICAgKiBVc2VkIGJ5IExlYWZsZXQgdG8gb25seSBzaG93IHBvbHlnb24gcG9pbnRzIHRoYXQgYXJlIG9uIHRoZSBzY3JlZW4gb3IgbmVhciwgaW5jcmVhc2luZ1xyXG4gICAqIHBlcmZvcm1hbmNlLiBOb3RlIHRoYXQgcG9seWdvbiBwb2ludHMgbmVlZHMgZGlmZmVyZW50IGFsZ29yaXRobSBmb3IgY2xpcHBpbmdcclxuICAgKiB0aGFuIHBvbHlsaW5lLCBzbyB0aGVyZSdzIGEgc2VwYXJhdGUgbWV0aG9kIGZvciBpdC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjbGlwUG9seWdvbihwb2ludHMsIGJvdW5kcywgcm91bmQpIHtcclxuICBcdHZhciBjbGlwcGVkUG9pbnRzLFxyXG4gIFx0ICAgIGVkZ2VzID0gWzEsIDQsIDIsIDhdLFxyXG4gIFx0ICAgIGksIGosIGssXHJcbiAgXHQgICAgYSwgYixcclxuICBcdCAgICBsZW4sIGVkZ2UsIHA7XHJcblxyXG4gIFx0Zm9yIChpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgXHRcdHBvaW50c1tpXS5fY29kZSA9IF9nZXRCaXRDb2RlKHBvaW50c1tpXSwgYm91bmRzKTtcclxuICBcdH1cclxuXHJcbiAgXHQvLyBmb3IgZWFjaCBlZGdlIChsZWZ0LCBib3R0b20sIHJpZ2h0LCB0b3ApXHJcbiAgXHRmb3IgKGsgPSAwOyBrIDwgNDsgaysrKSB7XHJcbiAgXHRcdGVkZ2UgPSBlZGdlc1trXTtcclxuICBcdFx0Y2xpcHBlZFBvaW50cyA9IFtdO1xyXG5cclxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gcG9pbnRzLmxlbmd0aCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcclxuICBcdFx0XHRhID0gcG9pbnRzW2ldO1xyXG4gIFx0XHRcdGIgPSBwb2ludHNbal07XHJcblxyXG4gIFx0XHRcdC8vIGlmIGEgaXMgaW5zaWRlIHRoZSBjbGlwIHdpbmRvd1xyXG4gIFx0XHRcdGlmICghKGEuX2NvZGUgJiBlZGdlKSkge1xyXG4gIFx0XHRcdFx0Ly8gaWYgYiBpcyBvdXRzaWRlIHRoZSBjbGlwIHdpbmRvdyAoYS0+YiBnb2VzIG91dCBvZiBzY3JlZW4pXHJcbiAgXHRcdFx0XHRpZiAoYi5fY29kZSAmIGVkZ2UpIHtcclxuICBcdFx0XHRcdFx0cCA9IF9nZXRFZGdlSW50ZXJzZWN0aW9uKGIsIGEsIGVkZ2UsIGJvdW5kcywgcm91bmQpO1xyXG4gIFx0XHRcdFx0XHRwLl9jb2RlID0gX2dldEJpdENvZGUocCwgYm91bmRzKTtcclxuICBcdFx0XHRcdFx0Y2xpcHBlZFBvaW50cy5wdXNoKHApO1xyXG4gIFx0XHRcdFx0fVxyXG4gIFx0XHRcdFx0Y2xpcHBlZFBvaW50cy5wdXNoKGEpO1xyXG5cclxuICBcdFx0XHQvLyBlbHNlIGlmIGIgaXMgaW5zaWRlIHRoZSBjbGlwIHdpbmRvdyAoYS0+YiBlbnRlcnMgdGhlIHNjcmVlbilcclxuICBcdFx0XHR9IGVsc2UgaWYgKCEoYi5fY29kZSAmIGVkZ2UpKSB7XHJcbiAgXHRcdFx0XHRwID0gX2dldEVkZ2VJbnRlcnNlY3Rpb24oYiwgYSwgZWRnZSwgYm91bmRzLCByb3VuZCk7XHJcbiAgXHRcdFx0XHRwLl9jb2RlID0gX2dldEJpdENvZGUocCwgYm91bmRzKTtcclxuICBcdFx0XHRcdGNsaXBwZWRQb2ludHMucHVzaChwKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cG9pbnRzID0gY2xpcHBlZFBvaW50cztcclxuICBcdH1cclxuXHJcbiAgXHRyZXR1cm4gcG9pbnRzO1xyXG4gIH1cblxuICB2YXIgUG9seVV0aWwgPSAoe1xuICAgIGNsaXBQb2x5Z29uOiBjbGlwUG9seWdvblxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUHJvamVjdGlvblxyXG4gICAqIEBzZWN0aW9uXHJcbiAgICogTGVhZmxldCBjb21lcyB3aXRoIGEgc2V0IG9mIGFscmVhZHkgZGVmaW5lZCBQcm9qZWN0aW9ucyBvdXQgb2YgdGhlIGJveDpcclxuICAgKlxyXG4gICAqIEBwcm9qZWN0aW9uIEwuUHJvamVjdGlvbi5Mb25MYXRcclxuICAgKlxyXG4gICAqIEVxdWlyZWN0YW5ndWxhciwgb3IgUGxhdGUgQ2FycmVlIHByb2plY3Rpb24g4oCUIHRoZSBtb3N0IHNpbXBsZSBwcm9qZWN0aW9uLFxyXG4gICAqIG1vc3RseSB1c2VkIGJ5IEdJUyBlbnRodXNpYXN0cy4gRGlyZWN0bHkgbWFwcyBgeGAgYXMgbG9uZ2l0dWRlLCBhbmQgYHlgIGFzXHJcbiAgICogbGF0aXR1ZGUuIEFsc28gc3VpdGFibGUgZm9yIGZsYXQgd29ybGRzLCBlLmcuIGdhbWUgbWFwcy4gVXNlZCBieSB0aGVcclxuICAgKiBgRVBTRzo0MzI2YCBhbmQgYFNpbXBsZWAgQ1JTLlxyXG4gICAqL1xyXG5cclxuICB2YXIgTG9uTGF0ID0ge1xyXG4gIFx0cHJvamVjdDogZnVuY3Rpb24gKGxhdGxuZykge1xyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KGxhdGxuZy5sbmcsIGxhdGxuZy5sYXQpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHR1bnByb2plY3Q6IGZ1bmN0aW9uIChwb2ludCkge1xyXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZyhwb2ludC55LCBwb2ludC54KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ym91bmRzOiBuZXcgQm91bmRzKFstMTgwLCAtOTBdLCBbMTgwLCA5MF0pXHJcbiAgfTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgUHJvamVjdGlvblxyXG4gICAqIEBwcm9qZWN0aW9uIEwuUHJvamVjdGlvbi5NZXJjYXRvclxyXG4gICAqXHJcbiAgICogRWxsaXB0aWNhbCBNZXJjYXRvciBwcm9qZWN0aW9uIOKAlCBtb3JlIGNvbXBsZXggdGhhbiBTcGhlcmljYWwgTWVyY2F0b3IuIEFzc3VtZXMgdGhhdCBFYXJ0aCBpcyBhbiBlbGxpcHNvaWQuIFVzZWQgYnkgdGhlIEVQU0c6MzM5NSBDUlMuXHJcbiAgICovXHJcblxyXG4gIHZhciBNZXJjYXRvciA9IHtcclxuICBcdFI6IDYzNzgxMzcsXHJcbiAgXHRSX01JTk9SOiA2MzU2NzUyLjMxNDI0NTE3OSxcclxuXHJcbiAgXHRib3VuZHM6IG5ldyBCb3VuZHMoWy0yMDAzNzUwOC4zNDI3OSwgLTE1NDk2NTcwLjczOTcyXSwgWzIwMDM3NTA4LjM0Mjc5LCAxODc2NDY1Ni4yMzEzOF0pLFxyXG5cclxuICBcdHByb2plY3Q6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxyXG4gIFx0XHQgICAgciA9IHRoaXMuUixcclxuICBcdFx0ICAgIHkgPSBsYXRsbmcubGF0ICogZCxcclxuICBcdFx0ICAgIHRtcCA9IHRoaXMuUl9NSU5PUiAvIHIsXHJcbiAgXHRcdCAgICBlID0gTWF0aC5zcXJ0KDEgLSB0bXAgKiB0bXApLFxyXG4gIFx0XHQgICAgY29uID0gZSAqIE1hdGguc2luKHkpO1xyXG5cclxuICBcdFx0dmFyIHRzID0gTWF0aC50YW4oTWF0aC5QSSAvIDQgLSB5IC8gMikgLyBNYXRoLnBvdygoMSAtIGNvbikgLyAoMSArIGNvbiksIGUgLyAyKTtcclxuICBcdFx0eSA9IC1yICogTWF0aC5sb2coTWF0aC5tYXgodHMsIDFFLTEwKSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbmV3IFBvaW50KGxhdGxuZy5sbmcgKiBkICogciwgeSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdHVucHJvamVjdDogZnVuY3Rpb24gKHBvaW50KSB7XHJcbiAgXHRcdHZhciBkID0gMTgwIC8gTWF0aC5QSSxcclxuICBcdFx0ICAgIHIgPSB0aGlzLlIsXHJcbiAgXHRcdCAgICB0bXAgPSB0aGlzLlJfTUlOT1IgLyByLFxyXG4gIFx0XHQgICAgZSA9IE1hdGguc3FydCgxIC0gdG1wICogdG1wKSxcclxuICBcdFx0ICAgIHRzID0gTWF0aC5leHAoLXBvaW50LnkgLyByKSxcclxuICBcdFx0ICAgIHBoaSA9IE1hdGguUEkgLyAyIC0gMiAqIE1hdGguYXRhbih0cyk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgZHBoaSA9IDAuMSwgY29uOyBpIDwgMTUgJiYgTWF0aC5hYnMoZHBoaSkgPiAxZS03OyBpKyspIHtcclxuICBcdFx0XHRjb24gPSBlICogTWF0aC5zaW4ocGhpKTtcclxuICBcdFx0XHRjb24gPSBNYXRoLnBvdygoMSAtIGNvbikgLyAoMSArIGNvbiksIGUgLyAyKTtcclxuICBcdFx0XHRkcGhpID0gTWF0aC5QSSAvIDIgLSAyICogTWF0aC5hdGFuKHRzICogY29uKSAtIHBoaTtcclxuICBcdFx0XHRwaGkgKz0gZHBoaTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIG5ldyBMYXRMbmcocGhpICogZCwgcG9pbnQueCAqIGQgLyByKTtcclxuICBcdH1cclxuICB9O1xuXG4gIC8qXG4gICAqIEBjbGFzcyBQcm9qZWN0aW9uXG5cbiAgICogQW4gb2JqZWN0IHdpdGggbWV0aG9kcyBmb3IgcHJvamVjdGluZyBnZW9ncmFwaGljYWwgY29vcmRpbmF0ZXMgb2YgdGhlIHdvcmxkIG9udG9cbiAgICogYSBmbGF0IHN1cmZhY2UgKGFuZCBiYWNrKS4gU2VlIFtNYXAgcHJvamVjdGlvbl0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9NYXBfcHJvamVjdGlvbikuXG5cbiAgICogQHByb3BlcnR5IGJvdW5kczogQm91bmRzXG4gICAqIFRoZSBib3VuZHMgKHNwZWNpZmllZCBpbiBDUlMgdW5pdHMpIHdoZXJlIHRoZSBwcm9qZWN0aW9uIGlzIHZhbGlkXG5cbiAgICogQG1ldGhvZCBwcm9qZWN0KGxhdGxuZzogTGF0TG5nKTogUG9pbnRcbiAgICogUHJvamVjdHMgZ2VvZ3JhcGhpY2FsIGNvb3JkaW5hdGVzIGludG8gYSAyRCBwb2ludC5cbiAgICogT25seSBhY2NlcHRzIGFjdHVhbCBgTC5MYXRMbmdgIGluc3RhbmNlcywgbm90IGFycmF5cy5cblxuICAgKiBAbWV0aG9kIHVucHJvamVjdChwb2ludDogUG9pbnQpOiBMYXRMbmdcbiAgICogVGhlIGludmVyc2Ugb2YgYHByb2plY3RgLiBQcm9qZWN0cyBhIDJEIHBvaW50IGludG8gYSBnZW9ncmFwaGljYWwgbG9jYXRpb24uXG4gICAqIE9ubHkgYWNjZXB0cyBhY3R1YWwgYEwuUG9pbnRgIGluc3RhbmNlcywgbm90IGFycmF5cy5cblxuICAgKiBOb3RlIHRoYXQgdGhlIHByb2plY3Rpb24gaW5zdGFuY2VzIGRvIG5vdCBpbmhlcml0IGZyb20gTGVhZmxldCdzIGBDbGFzc2Agb2JqZWN0LFxuICAgKiBhbmQgY2FuJ3QgYmUgaW5zdGFudGlhdGVkLiBBbHNvLCBuZXcgY2xhc3NlcyBjYW4ndCBpbmhlcml0IGZyb20gdGhlbSxcbiAgICogYW5kIG1ldGhvZHMgY2FuJ3QgYmUgYWRkZWQgdG8gdGhlbSB3aXRoIHRoZSBgaW5jbHVkZWAgZnVuY3Rpb24uXG5cbiAgICovXG5cbiAgdmFyIGluZGV4ID0gKHtcbiAgICBMb25MYXQ6IExvbkxhdCxcbiAgICBNZXJjYXRvcjogTWVyY2F0b3IsXG4gICAgU3BoZXJpY2FsTWVyY2F0b3I6IFNwaGVyaWNhbE1lcmNhdG9yXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQG5hbWVzcGFjZSBDUlNcclxuICAgKiBAY3JzIEwuQ1JTLkVQU0czMzk1XHJcbiAgICpcclxuICAgKiBSYXJlbHkgdXNlZCBieSBzb21lIGNvbW1lcmNpYWwgdGlsZSBwcm92aWRlcnMuIFVzZXMgRWxsaXB0aWNhbCBNZXJjYXRvciBwcm9qZWN0aW9uLlxyXG4gICAqL1xyXG4gIHZhciBFUFNHMzM5NSA9IGV4dGVuZCh7fSwgRWFydGgsIHtcclxuICBcdGNvZGU6ICdFUFNHOjMzOTUnLFxyXG4gIFx0cHJvamVjdGlvbjogTWVyY2F0b3IsXHJcblxyXG4gIFx0dHJhbnNmb3JtYXRpb246IChmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBzY2FsZSA9IDAuNSAvIChNYXRoLlBJICogTWVyY2F0b3IuUik7XHJcbiAgXHRcdHJldHVybiB0b1RyYW5zZm9ybWF0aW9uKHNjYWxlLCAwLjUsIC1zY2FsZSwgMC41KTtcclxuICBcdH0oKSlcclxuICB9KTtcblxuICAvKlxyXG4gICAqIEBuYW1lc3BhY2UgQ1JTXHJcbiAgICogQGNycyBMLkNSUy5FUFNHNDMyNlxyXG4gICAqXHJcbiAgICogQSBjb21tb24gQ1JTIGFtb25nIEdJUyBlbnRodXNpYXN0cy4gVXNlcyBzaW1wbGUgRXF1aXJlY3Rhbmd1bGFyIHByb2plY3Rpb24uXHJcbiAgICpcclxuICAgKiBMZWFmbGV0IDEuMC54IGNvbXBsaWVzIHdpdGggdGhlIFtUTVMgY29vcmRpbmF0ZSBzY2hlbWUgZm9yIEVQU0c6NDMyNl0oaHR0cHM6Ly93aWtpLm9zZ2VvLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2VfU3BlY2lmaWNhdGlvbiNnbG9iYWwtZ2VvZGV0aWMpLFxyXG4gICAqIHdoaWNoIGlzIGEgYnJlYWtpbmcgY2hhbmdlIGZyb20gMC43LnggYmVoYXZpb3VyLiAgSWYgeW91IGFyZSB1c2luZyBhIGBUaWxlTGF5ZXJgXHJcbiAgICogd2l0aCB0aGlzIENSUywgZW5zdXJlIHRoYXQgdGhlcmUgYXJlIHR3byAyNTZ4MjU2IHBpeGVsIHRpbGVzIGNvdmVyaW5nIHRoZVxyXG4gICAqIHdob2xlIGVhcnRoIGF0IHpvb20gbGV2ZWwgemVybywgYW5kIHRoYXQgdGhlIHRpbGUgY29vcmRpbmF0ZSBvcmlnaW4gaXMgKC0xODAsKzkwKSxcclxuICAgKiBvciAoLTE4MCwtOTApIGZvciBgVGlsZUxheWVyYHMgd2l0aCBbdGhlIGB0bXNgIG9wdGlvbl0oI3RpbGVsYXllci10bXMpIHNldC5cclxuICAgKi9cclxuXHJcbiAgdmFyIEVQU0c0MzI2ID0gZXh0ZW5kKHt9LCBFYXJ0aCwge1xyXG4gIFx0Y29kZTogJ0VQU0c6NDMyNicsXHJcbiAgXHRwcm9qZWN0aW9uOiBMb25MYXQsXHJcbiAgXHR0cmFuc2Zvcm1hdGlvbjogdG9UcmFuc2Zvcm1hdGlvbigxIC8gMTgwLCAxLCAtMSAvIDE4MCwgMC41KVxyXG4gIH0pO1xuXG4gIC8qXG4gICAqIEBuYW1lc3BhY2UgQ1JTXG4gICAqIEBjcnMgTC5DUlMuU2ltcGxlXG4gICAqXG4gICAqIEEgc2ltcGxlIENSUyB0aGF0IG1hcHMgbG9uZ2l0dWRlIGFuZCBsYXRpdHVkZSBpbnRvIGB4YCBhbmQgYHlgIGRpcmVjdGx5LlxuICAgKiBNYXkgYmUgdXNlZCBmb3IgbWFwcyBvZiBmbGF0IHN1cmZhY2VzIChlLmcuIGdhbWUgbWFwcykuIE5vdGUgdGhhdCB0aGUgYHlgXG4gICAqIGF4aXMgc2hvdWxkIHN0aWxsIGJlIGludmVydGVkIChnb2luZyBmcm9tIGJvdHRvbSB0byB0b3ApLiBgZGlzdGFuY2UoKWAgcmV0dXJuc1xuICAgKiBzaW1wbGUgZXVjbGlkZWFuIGRpc3RhbmNlLlxuICAgKi9cblxuICB2YXIgU2ltcGxlID0gZXh0ZW5kKHt9LCBDUlMsIHtcbiAgXHRwcm9qZWN0aW9uOiBMb25MYXQsXG4gIFx0dHJhbnNmb3JtYXRpb246IHRvVHJhbnNmb3JtYXRpb24oMSwgMCwgLTEsIDApLFxuXG4gIFx0c2NhbGU6IGZ1bmN0aW9uICh6b29tKSB7XG4gIFx0XHRyZXR1cm4gTWF0aC5wb3coMiwgem9vbSk7XG4gIFx0fSxcblxuICBcdHpvb206IGZ1bmN0aW9uIChzY2FsZSkge1xuICBcdFx0cmV0dXJuIE1hdGgubG9nKHNjYWxlKSAvIE1hdGguTE4yO1xuICBcdH0sXG5cbiAgXHRkaXN0YW5jZTogZnVuY3Rpb24gKGxhdGxuZzEsIGxhdGxuZzIpIHtcbiAgXHRcdHZhciBkeCA9IGxhdGxuZzIubG5nIC0gbGF0bG5nMS5sbmcsXG4gIFx0XHQgICAgZHkgPSBsYXRsbmcyLmxhdCAtIGxhdGxuZzEubGF0O1xuXG4gIFx0XHRyZXR1cm4gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcbiAgXHR9LFxuXG4gIFx0aW5maW5pdGU6IHRydWVcbiAgfSk7XG5cbiAgQ1JTLkVhcnRoID0gRWFydGg7XG4gIENSUy5FUFNHMzM5NSA9IEVQU0czMzk1O1xuICBDUlMuRVBTRzM4NTcgPSBFUFNHMzg1NztcbiAgQ1JTLkVQU0c5MDA5MTMgPSBFUFNHOTAwOTEzO1xuICBDUlMuRVBTRzQzMjYgPSBFUFNHNDMyNjtcbiAgQ1JTLlNpbXBsZSA9IFNpbXBsZTtcblxuICAvKlxuICAgKiBAY2xhc3MgTGF5ZXJcbiAgICogQGluaGVyaXRzIEV2ZW50ZWRcbiAgICogQGFrYSBMLkxheWVyXG4gICAqIEBha2EgSUxheWVyXG4gICAqXG4gICAqIEEgc2V0IG9mIG1ldGhvZHMgZnJvbSB0aGUgTGF5ZXIgYmFzZSBjbGFzcyB0aGF0IGFsbCBMZWFmbGV0IGxheWVycyB1c2UuXG4gICAqIEluaGVyaXRzIGFsbCBtZXRob2RzLCBvcHRpb25zIGFuZCBldmVudHMgZnJvbSBgTC5FdmVudGVkYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIGxheWVyID0gTC5tYXJrZXIobGF0bG5nKS5hZGRUbyhtYXApO1xuICAgKiBsYXllci5hZGRUbyhtYXApO1xuICAgKiBsYXllci5yZW1vdmUoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBldmVudCBhZGQ6IEV2ZW50XG4gICAqIEZpcmVkIGFmdGVyIHRoZSBsYXllciBpcyBhZGRlZCB0byBhIG1hcFxuICAgKlxuICAgKiBAZXZlbnQgcmVtb3ZlOiBFdmVudFxuICAgKiBGaXJlZCBhZnRlciB0aGUgbGF5ZXIgaXMgcmVtb3ZlZCBmcm9tIGEgbWFwXG4gICAqL1xuXG5cbiAgdmFyIExheWVyID0gRXZlbnRlZC5leHRlbmQoe1xuXG4gIFx0Ly8gQ2xhc3NlcyBleHRlbmRpbmcgYEwuTGF5ZXJgIHdpbGwgaW5oZXJpdCB0aGUgZm9sbG93aW5nIG9wdGlvbnM6XG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAnb3ZlcmxheVBhbmUnXG4gIFx0XHQvLyBCeSBkZWZhdWx0IHRoZSBsYXllciB3aWxsIGJlIGFkZGVkIHRvIHRoZSBtYXAncyBbb3ZlcmxheSBwYW5lXSgjbWFwLW92ZXJsYXlwYW5lKS4gT3ZlcnJpZGluZyB0aGlzIG9wdGlvbiB3aWxsIGNhdXNlIHRoZSBsYXllciB0byBiZSBwbGFjZWQgb24gYW5vdGhlciBwYW5lIGJ5IGRlZmF1bHQuXG4gIFx0XHRwYW5lOiAnb3ZlcmxheVBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGF0dHJpYnV0aW9uOiBTdHJpbmcgPSBudWxsXG4gIFx0XHQvLyBTdHJpbmcgdG8gYmUgc2hvd24gaW4gdGhlIGF0dHJpYnV0aW9uIGNvbnRyb2wsIGUuZy4gXCLCqSBPcGVuU3RyZWV0TWFwIGNvbnRyaWJ1dG9yc1wiLiBJdCBkZXNjcmliZXMgdGhlIGxheWVyIGRhdGEgYW5kIGlzIG9mdGVuIGEgbGVnYWwgb2JsaWdhdGlvbiB0b3dhcmRzIGNvcHlyaWdodCBob2xkZXJzIGFuZCB0aWxlIHByb3ZpZGVycy5cbiAgXHRcdGF0dHJpYnV0aW9uOiBudWxsLFxuXG4gIFx0XHRidWJibGluZ01vdXNlRXZlbnRzOiB0cnVlXG4gIFx0fSxcblxuICBcdC8qIEBzZWN0aW9uXG4gIFx0ICogQ2xhc3NlcyBleHRlbmRpbmcgYEwuTGF5ZXJgIHdpbGwgaW5oZXJpdCB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XG4gIFx0ICpcbiAgXHQgKiBAbWV0aG9kIGFkZFRvKG1hcDogTWFwfExheWVyR3JvdXApOiB0aGlzXG4gIFx0ICogQWRkcyB0aGUgbGF5ZXIgdG8gdGhlIGdpdmVuIG1hcCBvciBsYXllciBncm91cC5cbiAgXHQgKi9cbiAgXHRhZGRUbzogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0bWFwLmFkZExheWVyKHRoaXMpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVtb3ZlOiB0aGlzXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgbGF5ZXIgZnJvbSB0aGUgbWFwIGl0IGlzIGN1cnJlbnRseSBhY3RpdmUgb24uXG4gIFx0cmVtb3ZlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZW1vdmVGcm9tKHRoaXMuX21hcCB8fCB0aGlzLl9tYXBUb0FkZCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVtb3ZlRnJvbShtYXA6IE1hcCk6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBsYXllciBmcm9tIHRoZSBnaXZlbiBtYXBcbiAgXHQvL1xuICBcdC8vIEBhbHRlcm5hdGl2ZVxuICBcdC8vIEBtZXRob2QgcmVtb3ZlRnJvbShncm91cDogTGF5ZXJHcm91cCk6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBsYXllciBmcm9tIHRoZSBnaXZlbiBgTGF5ZXJHcm91cGBcbiAgXHRyZW1vdmVGcm9tOiBmdW5jdGlvbiAob2JqKSB7XG4gIFx0XHRpZiAob2JqKSB7XG4gIFx0XHRcdG9iai5yZW1vdmVMYXllcih0aGlzKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFBhbmUobmFtZT8gOiBTdHJpbmcpOiBIVE1MRWxlbWVudFxuICBcdC8vIFJldHVybnMgdGhlIGBIVE1MRWxlbWVudGAgcmVwcmVzZW50aW5nIHRoZSBuYW1lZCBwYW5lIG9uIHRoZSBtYXAuIElmIGBuYW1lYCBpcyBvbWl0dGVkLCByZXR1cm5zIHRoZSBwYW5lIGZvciB0aGlzIGxheWVyLlxuICBcdGdldFBhbmU6IGZ1bmN0aW9uIChuYW1lKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbWFwLmdldFBhbmUobmFtZSA/ICh0aGlzLm9wdGlvbnNbbmFtZV0gfHwgbmFtZSkgOiB0aGlzLm9wdGlvbnMucGFuZSk7XG4gIFx0fSxcblxuICBcdGFkZEludGVyYWN0aXZlVGFyZ2V0OiBmdW5jdGlvbiAodGFyZ2V0RWwpIHtcbiAgXHRcdHRoaXMuX21hcC5fdGFyZ2V0c1tzdGFtcCh0YXJnZXRFbCldID0gdGhpcztcbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVJbnRlcmFjdGl2ZVRhcmdldDogZnVuY3Rpb24gKHRhcmdldEVsKSB7XG4gIFx0XHRkZWxldGUgdGhpcy5fbWFwLl90YXJnZXRzW3N0YW1wKHRhcmdldEVsKV07XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRBdHRyaWJ1dGlvbjogU3RyaW5nXG4gIFx0Ly8gVXNlZCBieSB0aGUgYGF0dHJpYnV0aW9uIGNvbnRyb2xgLCByZXR1cm5zIHRoZSBbYXR0cmlidXRpb24gb3B0aW9uXSgjZ3JpZGxheWVyLWF0dHJpYnV0aW9uKS5cbiAgXHRnZXRBdHRyaWJ1dGlvbjogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5hdHRyaWJ1dGlvbjtcbiAgXHR9LFxuXG4gIFx0X2xheWVyQWRkOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IGUudGFyZ2V0O1xuXG4gIFx0XHQvLyBjaGVjayBpbiBjYXNlIGxheWVyIGdldHMgYWRkZWQgYW5kIHRoZW4gcmVtb3ZlZCBiZWZvcmUgdGhlIG1hcCBpcyByZWFkeVxuICBcdFx0aWYgKCFtYXAuaGFzTGF5ZXIodGhpcykpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcbiAgXHRcdHRoaXMuX3pvb21BbmltYXRlZCA9IG1hcC5fem9vbUFuaW1hdGVkO1xuXG4gIFx0XHRpZiAodGhpcy5nZXRFdmVudHMpIHtcbiAgXHRcdFx0dmFyIGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKCk7XG4gIFx0XHRcdG1hcC5vbihldmVudHMsIHRoaXMpO1xuICBcdFx0XHR0aGlzLm9uY2UoJ3JlbW92ZScsIGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0XHRtYXAub2ZmKGV2ZW50cywgdGhpcyk7XG4gIFx0XHRcdH0sIHRoaXMpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLm9uQWRkKG1hcCk7XG5cbiAgXHRcdGlmICh0aGlzLmdldEF0dHJpYnV0aW9uICYmIG1hcC5hdHRyaWJ1dGlvbkNvbnRyb2wpIHtcbiAgXHRcdFx0bWFwLmF0dHJpYnV0aW9uQ29udHJvbC5hZGRBdHRyaWJ1dGlvbih0aGlzLmdldEF0dHJpYnV0aW9uKCkpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLmZpcmUoJ2FkZCcpO1xuICBcdFx0bWFwLmZpcmUoJ2xheWVyYWRkJywge2xheWVyOiB0aGlzfSk7XG4gIFx0fVxuICB9KTtcblxuICAvKiBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xuICAgKiBAdW5pbmhlcml0YWJsZVxuICAgKlxuICAgKiBFdmVyeSBsYXllciBzaG91bGQgZXh0ZW5kIGZyb20gYEwuTGF5ZXJgIGFuZCAocmUtKWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZHMuXG4gICAqXG4gICAqIEBtZXRob2Qgb25BZGQobWFwOiBNYXApOiB0aGlzXG4gICAqIFNob3VsZCBjb250YWluIGNvZGUgdGhhdCBjcmVhdGVzIERPTSBlbGVtZW50cyBmb3IgdGhlIGxheWVyLCBhZGRzIHRoZW0gdG8gYG1hcCBwYW5lc2Agd2hlcmUgdGhleSBzaG91bGQgYmVsb25nIGFuZCBwdXRzIGxpc3RlbmVycyBvbiByZWxldmFudCBtYXAgZXZlbnRzLiBDYWxsZWQgb24gW2BtYXAuYWRkTGF5ZXIobGF5ZXIpYF0oI21hcC1hZGRsYXllcikuXG4gICAqXG4gICAqIEBtZXRob2Qgb25SZW1vdmUobWFwOiBNYXApOiB0aGlzXG4gICAqIFNob3VsZCBjb250YWluIGFsbCBjbGVhbiB1cCBjb2RlIHRoYXQgcmVtb3ZlcyB0aGUgbGF5ZXIncyBlbGVtZW50cyBmcm9tIHRoZSBET00gYW5kIHJlbW92ZXMgbGlzdGVuZXJzIHByZXZpb3VzbHkgYWRkZWQgaW4gW2BvbkFkZGBdKCNsYXllci1vbmFkZCkuIENhbGxlZCBvbiBbYG1hcC5yZW1vdmVMYXllcihsYXllcilgXSgjbWFwLXJlbW92ZWxheWVyKS5cbiAgICpcbiAgICogQG1ldGhvZCBnZXRFdmVudHMoKTogT2JqZWN0XG4gICAqIFRoaXMgb3B0aW9uYWwgbWV0aG9kIHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGxpa2UgYHsgdmlld3Jlc2V0OiB0aGlzLl9yZXNldCB9YCBmb3IgW2BhZGRFdmVudExpc3RlbmVyYF0oI2V2ZW50ZWQtYWRkZXZlbnRsaXN0ZW5lcikuIFRoZSBldmVudCBoYW5kbGVycyBpbiB0aGlzIG9iamVjdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgYWRkZWQgYW5kIHJlbW92ZWQgZnJvbSB0aGUgbWFwIHdpdGggeW91ciBsYXllci5cbiAgICpcbiAgICogQG1ldGhvZCBnZXRBdHRyaWJ1dGlvbigpOiBTdHJpbmdcbiAgICogVGhpcyBvcHRpb25hbCBtZXRob2Qgc2hvdWxkIHJldHVybiBhIHN0cmluZyBjb250YWluaW5nIEhUTUwgdG8gYmUgc2hvd24gb24gdGhlIGBBdHRyaWJ1dGlvbiBjb250cm9sYCB3aGVuZXZlciB0aGUgbGF5ZXIgaXMgdmlzaWJsZS5cbiAgICpcbiAgICogQG1ldGhvZCBiZWZvcmVBZGQobWFwOiBNYXApOiB0aGlzXG4gICAqIE9wdGlvbmFsIG1ldGhvZC4gQ2FsbGVkIG9uIFtgbWFwLmFkZExheWVyKGxheWVyKWBdKCNtYXAtYWRkbGF5ZXIpLCBiZWZvcmUgdGhlIGxheWVyIGlzIGFkZGVkIHRvIHRoZSBtYXAsIGJlZm9yZSBldmVudHMgYXJlIGluaXRpYWxpemVkLCB3aXRob3V0IHdhaXRpbmcgdW50aWwgdGhlIG1hcCBpcyBpbiBhIHVzYWJsZSBzdGF0ZS4gVXNlIGZvciBlYXJseSBpbml0aWFsaXphdGlvbiBvbmx5LlxuICAgKi9cblxuXG4gIC8qIEBuYW1lc3BhY2UgTWFwXG4gICAqIEBzZWN0aW9uIExheWVyIGV2ZW50c1xuICAgKlxuICAgKiBAZXZlbnQgbGF5ZXJhZGQ6IExheWVyRXZlbnRcbiAgICogRmlyZWQgd2hlbiBhIG5ldyBsYXllciBpcyBhZGRlZCB0byB0aGUgbWFwLlxuICAgKlxuICAgKiBAZXZlbnQgbGF5ZXJyZW1vdmU6IExheWVyRXZlbnRcbiAgICogRmlyZWQgd2hlbiBzb21lIGxheWVyIGlzIHJlbW92ZWQgZnJvbSB0aGUgbWFwXG4gICAqXG4gICAqIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcbiAgICovXG4gIE1hcC5pbmNsdWRlKHtcbiAgXHQvLyBAbWV0aG9kIGFkZExheWVyKGxheWVyOiBMYXllcik6IHRoaXNcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBsYXllciB0byB0aGUgbWFwXG4gIFx0YWRkTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCFsYXllci5fbGF5ZXJBZGQpIHtcbiAgXHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgcHJvdmlkZWQgb2JqZWN0IGlzIG5vdCBhIExheWVyLicpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgaWQgPSBzdGFtcChsYXllcik7XG4gIFx0XHRpZiAodGhpcy5fbGF5ZXJzW2lkXSkgeyByZXR1cm4gdGhpczsgfVxuICBcdFx0dGhpcy5fbGF5ZXJzW2lkXSA9IGxheWVyO1xuXG4gIFx0XHRsYXllci5fbWFwVG9BZGQgPSB0aGlzO1xuXG4gIFx0XHRpZiAobGF5ZXIuYmVmb3JlQWRkKSB7XG4gIFx0XHRcdGxheWVyLmJlZm9yZUFkZCh0aGlzKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy53aGVuUmVhZHkobGF5ZXIuX2xheWVyQWRkLCBsYXllcik7XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHJlbW92ZUxheWVyKGxheWVyOiBMYXllcik6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSBnaXZlbiBsYXllciBmcm9tIHRoZSBtYXAuXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIGlkID0gc3RhbXAobGF5ZXIpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX2xheWVyc1tpZF0pIHsgcmV0dXJuIHRoaXM7IH1cblxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xuICBcdFx0XHRsYXllci5vblJlbW92ZSh0aGlzKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKGxheWVyLmdldEF0dHJpYnV0aW9uICYmIHRoaXMuYXR0cmlidXRpb25Db250cm9sKSB7XG4gIFx0XHRcdHRoaXMuYXR0cmlidXRpb25Db250cm9sLnJlbW92ZUF0dHJpYnV0aW9uKGxheWVyLmdldEF0dHJpYnV0aW9uKCkpO1xuICBcdFx0fVxuXG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW2lkXTtcblxuICBcdFx0aWYgKHRoaXMuX2xvYWRlZCkge1xuICBcdFx0XHR0aGlzLmZpcmUoJ2xheWVycmVtb3ZlJywge2xheWVyOiBsYXllcn0pO1xuICBcdFx0XHRsYXllci5maXJlKCdyZW1vdmUnKTtcbiAgXHRcdH1cblxuICBcdFx0bGF5ZXIuX21hcCA9IGxheWVyLl9tYXBUb0FkZCA9IG51bGw7XG5cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGhhc0xheWVyKGxheWVyOiBMYXllcik6IEJvb2xlYW5cbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZ2l2ZW4gbGF5ZXIgaXMgY3VycmVudGx5IGFkZGVkIHRvIHRoZSBtYXBcbiAgXHRoYXNMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRyZXR1cm4gISFsYXllciAmJiAoc3RhbXAobGF5ZXIpIGluIHRoaXMuX2xheWVycyk7XG4gIFx0fSxcblxuICBcdC8qIEBtZXRob2QgZWFjaExheWVyKGZuOiBGdW5jdGlvbiwgY29udGV4dD86IE9iamVjdCk6IHRoaXNcbiAgXHQgKiBJdGVyYXRlcyBvdmVyIHRoZSBsYXllcnMgb2YgdGhlIG1hcCwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIGNvbnRleHQgb2YgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLlxuICBcdCAqIGBgYFxuICBcdCAqIG1hcC5lYWNoTGF5ZXIoZnVuY3Rpb24obGF5ZXIpe1xuICBcdCAqICAgICBsYXllci5iaW5kUG9wdXAoJ0hlbGxvJyk7XG4gIFx0ICogfSk7XG4gIFx0ICogYGBgXG4gIFx0ICovXG4gIFx0ZWFjaExheWVyOiBmdW5jdGlvbiAobWV0aG9kLCBjb250ZXh0KSB7XG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2xheWVycykge1xuICBcdFx0XHRtZXRob2QuY2FsbChjb250ZXh0LCB0aGlzLl9sYXllcnNbaV0pO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdF9hZGRMYXllcnM6IGZ1bmN0aW9uIChsYXllcnMpIHtcbiAgXHRcdGxheWVycyA9IGxheWVycyA/IChpc0FycmF5KGxheWVycykgPyBsYXllcnMgOiBbbGF5ZXJzXSkgOiBbXTtcblxuICBcdFx0Zm9yICh2YXIgaSA9IDAsIGxlbiA9IGxheWVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHR0aGlzLmFkZExheWVyKGxheWVyc1tpXSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9hZGRab29tTGltaXQ6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKGlzTmFOKGxheWVyLm9wdGlvbnMubWF4Wm9vbSkgfHwgIWlzTmFOKGxheWVyLm9wdGlvbnMubWluWm9vbSkpIHtcbiAgXHRcdFx0dGhpcy5fem9vbUJvdW5kTGF5ZXJzW3N0YW1wKGxheWVyKV0gPSBsYXllcjtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlWm9vbUxldmVscygpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfcmVtb3ZlWm9vbUxpbWl0OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBpZCA9IHN0YW1wKGxheWVyKTtcblxuICBcdFx0aWYgKHRoaXMuX3pvb21Cb3VuZExheWVyc1tpZF0pIHtcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX3pvb21Cb3VuZExheWVyc1tpZF07XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVpvb21MZXZlbHMoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVpvb21MZXZlbHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBtaW5ab29tID0gSW5maW5pdHksXG4gIFx0XHQgICAgbWF4Wm9vbSA9IC1JbmZpbml0eSxcbiAgXHRcdCAgICBvbGRab29tU3BhbiA9IHRoaXMuX2dldFpvb21TcGFuKCk7XG5cbiAgXHRcdGZvciAodmFyIGkgaW4gdGhpcy5fem9vbUJvdW5kTGF5ZXJzKSB7XG4gIFx0XHRcdHZhciBvcHRpb25zID0gdGhpcy5fem9vbUJvdW5kTGF5ZXJzW2ldLm9wdGlvbnM7XG5cbiAgXHRcdFx0bWluWm9vbSA9IG9wdGlvbnMubWluWm9vbSA9PT0gdW5kZWZpbmVkID8gbWluWm9vbSA6IE1hdGgubWluKG1pblpvb20sIG9wdGlvbnMubWluWm9vbSk7XG4gIFx0XHRcdG1heFpvb20gPSBvcHRpb25zLm1heFpvb20gPT09IHVuZGVmaW5lZCA/IG1heFpvb20gOiBNYXRoLm1heChtYXhab29tLCBvcHRpb25zLm1heFpvb20pO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9sYXllcnNNYXhab29tID0gbWF4Wm9vbSA9PT0gLUluZmluaXR5ID8gdW5kZWZpbmVkIDogbWF4Wm9vbTtcbiAgXHRcdHRoaXMuX2xheWVyc01pblpvb20gPSBtaW5ab29tID09PSBJbmZpbml0eSA/IHVuZGVmaW5lZCA6IG1pblpvb207XG5cbiAgXHRcdC8vIEBzZWN0aW9uIE1hcCBzdGF0ZSBjaGFuZ2UgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgem9vbWxldmVsc2NoYW5nZTogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG51bWJlciBvZiB6b29tbGV2ZWxzIG9uIHRoZSBtYXAgaXMgY2hhbmdlZCBkdWVcbiAgXHRcdC8vIHRvIGFkZGluZyBvciByZW1vdmluZyBhIGxheWVyLlxuICBcdFx0aWYgKG9sZFpvb21TcGFuICE9PSB0aGlzLl9nZXRab29tU3BhbigpKSB7XG4gIFx0XHRcdHRoaXMuZmlyZSgnem9vbWxldmVsc2NoYW5nZScpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm1heFpvb20gPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9sYXllcnNNYXhab29tICYmIHRoaXMuZ2V0Wm9vbSgpID4gdGhpcy5fbGF5ZXJzTWF4Wm9vbSkge1xuICBcdFx0XHR0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWF4Wm9vbSk7XG4gIFx0XHR9XG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm1pblpvb20gPT09IHVuZGVmaW5lZCAmJiB0aGlzLl9sYXllcnNNaW5ab29tICYmIHRoaXMuZ2V0Wm9vbSgpIDwgdGhpcy5fbGF5ZXJzTWluWm9vbSkge1xuICBcdFx0XHR0aGlzLnNldFpvb20odGhpcy5fbGF5ZXJzTWluWm9vbSk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvKlxyXG4gICAqIEBjbGFzcyBMYXllckdyb3VwXHJcbiAgICogQGFrYSBMLkxheWVyR3JvdXBcclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJcclxuICAgKlxyXG4gICAqIFVzZWQgdG8gZ3JvdXAgc2V2ZXJhbCBsYXllcnMgYW5kIGhhbmRsZSB0aGVtIGFzIG9uZS4gSWYgeW91IGFkZCBpdCB0byB0aGUgbWFwLFxyXG4gICAqIGFueSBsYXllcnMgYWRkZWQgb3IgcmVtb3ZlZCBmcm9tIHRoZSBncm91cCB3aWxsIGJlIGFkZGVkL3JlbW92ZWQgb24gdGhlIG1hcCBhc1xyXG4gICAqIHdlbGwuIEV4dGVuZHMgYExheWVyYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIEwubGF5ZXJHcm91cChbbWFya2VyMSwgbWFya2VyMl0pXHJcbiAgICogXHQuYWRkTGF5ZXIocG9seWxpbmUpXHJcbiAgICogXHQuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIExheWVyR3JvdXAgPSBMYXllci5leHRlbmQoe1xyXG5cclxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChsYXllcnMsIG9wdGlvbnMpIHtcclxuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdHRoaXMuX2xheWVycyA9IHt9O1xyXG5cclxuICBcdFx0dmFyIGksIGxlbjtcclxuXHJcbiAgXHRcdGlmIChsYXllcnMpIHtcclxuICBcdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBsYXllcnMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRcdHRoaXMuYWRkTGF5ZXIobGF5ZXJzW2ldKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBhZGRMYXllcihsYXllcjogTGF5ZXIpOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBnaXZlbiBsYXllciB0byB0aGUgZ3JvdXAuXHJcbiAgXHRhZGRMYXllcjogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdHZhciBpZCA9IHRoaXMuZ2V0TGF5ZXJJZChsYXllcik7XHJcblxyXG4gIFx0XHR0aGlzLl9sYXllcnNbaWRdID0gbGF5ZXI7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fbWFwLmFkZExheWVyKGxheWVyKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlTGF5ZXIobGF5ZXI6IExheWVyKTogdGhpc1xyXG4gIFx0Ly8gUmVtb3ZlcyB0aGUgZ2l2ZW4gbGF5ZXIgZnJvbSB0aGUgZ3JvdXAuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgcmVtb3ZlTGF5ZXIoaWQ6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIGxheWVyIHdpdGggdGhlIGdpdmVuIGludGVybmFsIElEIGZyb20gdGhlIGdyb3VwLlxyXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHR2YXIgaWQgPSBsYXllciBpbiB0aGlzLl9sYXllcnMgPyBsYXllciA6IHRoaXMuZ2V0TGF5ZXJJZChsYXllcik7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwICYmIHRoaXMuX2xheWVyc1tpZF0pIHtcclxuICBcdFx0XHR0aGlzLl9tYXAucmVtb3ZlTGF5ZXIodGhpcy5fbGF5ZXJzW2lkXSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGRlbGV0ZSB0aGlzLl9sYXllcnNbaWRdO1xyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaGFzTGF5ZXIobGF5ZXI6IExheWVyKTogQm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGdpdmVuIGxheWVyIGlzIGN1cnJlbnRseSBhZGRlZCB0byB0aGUgZ3JvdXAuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2QgaGFzTGF5ZXIoaWQ6IE51bWJlcik6IEJvb2xlYW5cclxuICBcdC8vIFJldHVybnMgYHRydWVgIGlmIHRoZSBnaXZlbiBpbnRlcm5hbCBJRCBpcyBjdXJyZW50bHkgYWRkZWQgdG8gdGhlIGdyb3VwLlxyXG4gIFx0aGFzTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAoIWxheWVyKSB7IHJldHVybiBmYWxzZTsgfVxyXG4gIFx0XHR2YXIgbGF5ZXJJZCA9IHR5cGVvZiBsYXllciA9PT0gJ251bWJlcicgPyBsYXllciA6IHRoaXMuZ2V0TGF5ZXJJZChsYXllcik7XHJcbiAgXHRcdHJldHVybiBsYXllcklkIGluIHRoaXMuX2xheWVycztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBjbGVhckxheWVycygpOiB0aGlzXHJcbiAgXHQvLyBSZW1vdmVzIGFsbCB0aGUgbGF5ZXJzIGZyb20gdGhlIGdyb3VwLlxyXG4gIFx0Y2xlYXJMYXllcnM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuZWFjaExheWVyKHRoaXMucmVtb3ZlTGF5ZXIsIHRoaXMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGludm9rZShtZXRob2ROYW1lOiBTdHJpbmcsIOKApik6IHRoaXNcclxuICBcdC8vIENhbGxzIGBtZXRob2ROYW1lYCBvbiBldmVyeSBsYXllciBjb250YWluZWQgaW4gdGhpcyBncm91cCwgcGFzc2luZyBhbnlcclxuICBcdC8vIGFkZGl0aW9uYWwgcGFyYW1ldGVycy4gSGFzIG5vIGVmZmVjdCBpZiB0aGUgbGF5ZXJzIGNvbnRhaW5lZCBkbyBub3RcclxuICBcdC8vIGltcGxlbWVudCBgbWV0aG9kTmFtZWAuXHJcbiAgXHRpbnZva2U6IGZ1bmN0aW9uIChtZXRob2ROYW1lKSB7XHJcbiAgXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKSxcclxuICBcdFx0ICAgIGksIGxheWVyO1xyXG5cclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fbGF5ZXJzW2ldO1xyXG5cclxuICBcdFx0XHRpZiAobGF5ZXJbbWV0aG9kTmFtZV0pIHtcclxuICBcdFx0XHRcdGxheWVyW21ldGhvZE5hbWVdLmFwcGx5KGxheWVyLCBhcmdzKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLmVhY2hMYXllcihtYXAuYWRkTGF5ZXIsIG1hcCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKG1hcC5yZW1vdmVMYXllciwgbWFwKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBlYWNoTGF5ZXIoZm46IEZ1bmN0aW9uLCBjb250ZXh0PzogT2JqZWN0KTogdGhpc1xyXG4gIFx0Ly8gSXRlcmF0ZXMgb3ZlciB0aGUgbGF5ZXJzIG9mIHRoZSBncm91cCwgb3B0aW9uYWxseSBzcGVjaWZ5aW5nIGNvbnRleHQgb2YgdGhlIGl0ZXJhdG9yIGZ1bmN0aW9uLlxyXG4gIFx0Ly8gYGBganNcclxuICBcdC8vIGdyb3VwLmVhY2hMYXllcihmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdC8vIFx0bGF5ZXIuYmluZFBvcHVwKCdIZWxsbycpO1xyXG4gIFx0Ly8gfSk7XHJcbiAgXHQvLyBgYGBcclxuICBcdGVhY2hMYXllcjogZnVuY3Rpb24gKG1ldGhvZCwgY29udGV4dCkge1xyXG4gIFx0XHRmb3IgKHZhciBpIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdG1ldGhvZC5jYWxsKGNvbnRleHQsIHRoaXMuX2xheWVyc1tpXSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TGF5ZXIoaWQ6IE51bWJlcik6IExheWVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBsYXllciB3aXRoIHRoZSBnaXZlbiBpbnRlcm5hbCBJRC5cclxuICBcdGdldExheWVyOiBmdW5jdGlvbiAoaWQpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2xheWVyc1tpZF07XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TGF5ZXJzKCk6IExheWVyW11cclxuICBcdC8vIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHRoZSBsYXllcnMgYWRkZWQgdG8gdGhlIGdyb3VwLlxyXG4gIFx0Z2V0TGF5ZXJzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBsYXllcnMgPSBbXTtcclxuICBcdFx0dGhpcy5lYWNoTGF5ZXIobGF5ZXJzLnB1c2gsIGxheWVycyk7XHJcbiAgXHRcdHJldHVybiBsYXllcnM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0WkluZGV4KHpJbmRleDogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2FsbHMgYHNldFpJbmRleGAgb24gZXZlcnkgbGF5ZXIgY29udGFpbmVkIGluIHRoaXMgZ3JvdXAsIHBhc3NpbmcgdGhlIHotaW5kZXguXHJcbiAgXHRzZXRaSW5kZXg6IGZ1bmN0aW9uICh6SW5kZXgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuaW52b2tlKCdzZXRaSW5kZXgnLCB6SW5kZXgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldExheWVySWQobGF5ZXI6IExheWVyKTogTnVtYmVyXHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnRlcm5hbCBJRCBmb3IgYSBsYXllclxyXG4gIFx0Z2V0TGF5ZXJJZDogZnVuY3Rpb24gKGxheWVyKSB7XHJcbiAgXHRcdHJldHVybiBzdGFtcChsYXllcik7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAZmFjdG9yeSBMLmxheWVyR3JvdXAobGF5ZXJzPzogTGF5ZXJbXSwgb3B0aW9ucz86IE9iamVjdClcclxuICAvLyBDcmVhdGUgYSBsYXllciBncm91cCwgb3B0aW9uYWxseSBnaXZlbiBhbiBpbml0aWFsIHNldCBvZiBsYXllcnMgYW5kIGFuIGBvcHRpb25zYCBvYmplY3QuXHJcbiAgdmFyIGxheWVyR3JvdXAgPSBmdW5jdGlvbiAobGF5ZXJzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExheWVyR3JvdXAobGF5ZXJzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIEZlYXR1cmVHcm91cFxyXG4gICAqIEBha2EgTC5GZWF0dXJlR3JvdXBcclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJHcm91cFxyXG4gICAqXHJcbiAgICogRXh0ZW5kZWQgYExheWVyR3JvdXBgIHRoYXQgbWFrZXMgaXQgZWFzaWVyIHRvIGRvIHRoZSBzYW1lIHRoaW5nIHRvIGFsbCBpdHMgbWVtYmVyIGxheWVyczpcclxuICAgKiAgKiBbYGJpbmRQb3B1cGBdKCNsYXllci1iaW5kcG9wdXApIGJpbmRzIGEgcG9wdXAgdG8gYWxsIG9mIHRoZSBsYXllcnMgYXQgb25jZSAobGlrZXdpc2Ugd2l0aCBbYGJpbmRUb29sdGlwYF0oI2xheWVyLWJpbmR0b29sdGlwKSlcclxuICAgKiAgKiBFdmVudHMgYXJlIHByb3BhZ2F0ZWQgdG8gdGhlIGBGZWF0dXJlR3JvdXBgLCBzbyBpZiB0aGUgZ3JvdXAgaGFzIGFuIGV2ZW50XHJcbiAgICogaGFuZGxlciwgaXQgd2lsbCBoYW5kbGUgZXZlbnRzIGZyb20gYW55IG9mIHRoZSBsYXllcnMuIFRoaXMgaW5jbHVkZXMgbW91c2UgZXZlbnRzXHJcbiAgICogYW5kIGN1c3RvbSBldmVudHMuXHJcbiAgICogICogSGFzIGBsYXllcmFkZGAgYW5kIGBsYXllcnJlbW92ZWAgZXZlbnRzXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBMLmZlYXR1cmVHcm91cChbbWFya2VyMSwgbWFya2VyMiwgcG9seWxpbmVdKVxyXG4gICAqIFx0LmJpbmRQb3B1cCgnSGVsbG8gd29ybGQhJylcclxuICAgKiBcdC5vbignY2xpY2snLCBmdW5jdGlvbigpIHsgYWxlcnQoJ0NsaWNrZWQgb24gYSBtZW1iZXIgb2YgdGhlIGdyb3VwIScpOyB9KVxyXG4gICAqIFx0LmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBGZWF0dXJlR3JvdXAgPSBMYXllckdyb3VwLmV4dGVuZCh7XHJcblxyXG4gIFx0YWRkTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAodGhpcy5oYXNMYXllcihsYXllcikpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcztcclxuICBcdFx0fVxyXG5cclxuICBcdFx0bGF5ZXIuYWRkRXZlbnRQYXJlbnQodGhpcyk7XHJcblxyXG4gIFx0XHRMYXllckdyb3VwLnByb3RvdHlwZS5hZGRMYXllci5jYWxsKHRoaXMsIGxheWVyKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBsYXllcmFkZDogTGF5ZXJFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgbGF5ZXIgaXMgYWRkZWQgdG8gdGhpcyBgRmVhdHVyZUdyb3VwYFxyXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdsYXllcmFkZCcsIHtsYXllcjogbGF5ZXJ9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0cmVtb3ZlTGF5ZXI6IGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRpZiAoIXRoaXMuaGFzTGF5ZXIobGF5ZXIpKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGxheWVyIGluIHRoaXMuX2xheWVycykge1xyXG4gIFx0XHRcdGxheWVyID0gdGhpcy5fbGF5ZXJzW2xheWVyXTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0bGF5ZXIucmVtb3ZlRXZlbnRQYXJlbnQodGhpcyk7XHJcblxyXG4gIFx0XHRMYXllckdyb3VwLnByb3RvdHlwZS5yZW1vdmVMYXllci5jYWxsKHRoaXMsIGxheWVyKTtcclxuXHJcbiAgXHRcdC8vIEBldmVudCBsYXllcnJlbW92ZTogTGF5ZXJFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgbGF5ZXIgaXMgcmVtb3ZlZCBmcm9tIHRoaXMgYEZlYXR1cmVHcm91cGBcclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbGF5ZXJyZW1vdmUnLCB7bGF5ZXI6IGxheWVyfSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0U3R5bGUoc3R5bGU6IFBhdGggb3B0aW9ucyk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGdpdmVuIHBhdGggb3B0aW9ucyB0byBlYWNoIGxheWVyIG9mIHRoZSBncm91cCB0aGF0IGhhcyBhIGBzZXRTdHlsZWAgbWV0aG9kLlxyXG4gIFx0c2V0U3R5bGU6IGZ1bmN0aW9uIChzdHlsZSkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5pbnZva2UoJ3NldFN0eWxlJywgc3R5bGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9Gcm9udCgpOiB0aGlzXHJcbiAgXHQvLyBCcmluZ3MgdGhlIGxheWVyIGdyb3VwIHRvIHRoZSB0b3Agb2YgYWxsIG90aGVyIGxheWVyc1xyXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLmludm9rZSgnYnJpbmdUb0Zyb250Jyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2soKTogdGhpc1xyXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciBncm91cCB0byB0aGUgYmFjayBvZiBhbGwgb3RoZXIgbGF5ZXJzXHJcbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5pbnZva2UoJ2JyaW5nVG9CYWNrJyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm91bmRzKCk6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgTGF0TG5nQm91bmRzIG9mIHRoZSBGZWF0dXJlIEdyb3VwIChjcmVhdGVkIGZyb20gYm91bmRzIGFuZCBjb29yZGluYXRlcyBvZiBpdHMgY2hpbGRyZW4pLlxyXG4gIFx0Z2V0Qm91bmRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBib3VuZHMgPSBuZXcgTGF0TG5nQm91bmRzKCk7XHJcblxyXG4gIFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9sYXllcnMpIHtcclxuICBcdFx0XHR2YXIgbGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xyXG4gIFx0XHRcdGJvdW5kcy5leHRlbmQobGF5ZXIuZ2V0Qm91bmRzID8gbGF5ZXIuZ2V0Qm91bmRzKCkgOiBsYXllci5nZXRMYXRMbmcoKSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIGJvdW5kcztcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLy8gQGZhY3RvcnkgTC5mZWF0dXJlR3JvdXAobGF5ZXJzPzogTGF5ZXJbXSwgb3B0aW9ucz86IE9iamVjdClcclxuICAvLyBDcmVhdGUgYSBmZWF0dXJlIGdyb3VwLCBvcHRpb25hbGx5IGdpdmVuIGFuIGluaXRpYWwgc2V0IG9mIGxheWVycyBhbmQgYW4gYG9wdGlvbnNgIG9iamVjdC5cclxuICB2YXIgZmVhdHVyZUdyb3VwID0gZnVuY3Rpb24gKGxheWVycywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBGZWF0dXJlR3JvdXAobGF5ZXJzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIEljb25cclxuICAgKiBAYWthIEwuSWNvblxyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhbiBpY29uIHRvIHByb3ZpZGUgd2hlbiBjcmVhdGluZyBhIG1hcmtlci5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBteUljb24gPSBMLmljb24oe1xyXG4gICAqICAgICBpY29uVXJsOiAnbXktaWNvbi5wbmcnLFxyXG4gICAqICAgICBpY29uUmV0aW5hVXJsOiAnbXktaWNvbkAyeC5wbmcnLFxyXG4gICAqICAgICBpY29uU2l6ZTogWzM4LCA5NV0sXHJcbiAgICogICAgIGljb25BbmNob3I6IFsyMiwgOTRdLFxyXG4gICAqICAgICBwb3B1cEFuY2hvcjogWy0zLCAtNzZdLFxyXG4gICAqICAgICBzaGFkb3dVcmw6ICdteS1pY29uLXNoYWRvdy5wbmcnLFxyXG4gICAqICAgICBzaGFkb3dSZXRpbmFVcmw6ICdteS1pY29uLXNoYWRvd0AyeC5wbmcnLFxyXG4gICAqICAgICBzaGFkb3dTaXplOiBbNjgsIDk1XSxcclxuICAgKiAgICAgc2hhZG93QW5jaG9yOiBbMjIsIDk0XVxyXG4gICAqIH0pO1xyXG4gICAqXHJcbiAgICogTC5tYXJrZXIoWzUwLjUwNSwgMzAuNTddLCB7aWNvbjogbXlJY29ufSkuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIGBMLkljb24uRGVmYXVsdGAgZXh0ZW5kcyBgTC5JY29uYCBhbmQgaXMgdGhlIGJsdWUgaWNvbiBMZWFmbGV0IHVzZXMgZm9yIG1hcmtlcnMgYnkgZGVmYXVsdC5cclxuICAgKlxyXG4gICAqL1xyXG5cclxuICB2YXIgSWNvbiA9IENsYXNzLmV4dGVuZCh7XHJcblxyXG4gIFx0LyogQHNlY3Rpb25cclxuICBcdCAqIEBha2EgSWNvbiBvcHRpb25zXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBpY29uVXJsOiBTdHJpbmcgPSBudWxsXHJcbiAgXHQgKiAqKihyZXF1aXJlZCkqKiBUaGUgVVJMIHRvIHRoZSBpY29uIGltYWdlIChhYnNvbHV0ZSBvciByZWxhdGl2ZSB0byB5b3VyIHNjcmlwdCBwYXRoKS5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGljb25SZXRpbmFVcmw6IFN0cmluZyA9IG51bGxcclxuICBcdCAqIFRoZSBVUkwgdG8gYSByZXRpbmEgc2l6ZWQgdmVyc2lvbiBvZiB0aGUgaWNvbiBpbWFnZSAoYWJzb2x1dGUgb3IgcmVsYXRpdmUgdG8geW91clxyXG4gIFx0ICogc2NyaXB0IHBhdGgpLiBVc2VkIGZvciBSZXRpbmEgc2NyZWVuIGRldmljZXMuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBpY29uU2l6ZTogUG9pbnQgPSBudWxsXHJcbiAgXHQgKiBTaXplIG9mIHRoZSBpY29uIGltYWdlIGluIHBpeGVscy5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGljb25BbmNob3I6IFBvaW50ID0gbnVsbFxyXG4gIFx0ICogVGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBcInRpcFwiIG9mIHRoZSBpY29uIChyZWxhdGl2ZSB0byBpdHMgdG9wIGxlZnQgY29ybmVyKS4gVGhlIGljb25cclxuICBcdCAqIHdpbGwgYmUgYWxpZ25lZCBzbyB0aGF0IHRoaXMgcG9pbnQgaXMgYXQgdGhlIG1hcmtlcidzIGdlb2dyYXBoaWNhbCBsb2NhdGlvbi4gQ2VudGVyZWRcclxuICBcdCAqIGJ5IGRlZmF1bHQgaWYgc2l6ZSBpcyBzcGVjaWZpZWQsIGFsc28gY2FuIGJlIHNldCBpbiBDU1Mgd2l0aCBuZWdhdGl2ZSBtYXJnaW5zLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gcG9wdXBBbmNob3I6IFBvaW50ID0gWzAsIDBdXHJcbiAgXHQgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGZyb20gd2hpY2ggcG9wdXBzIHdpbGwgXCJvcGVuXCIsIHJlbGF0aXZlIHRvIHRoZSBpY29uIGFuY2hvci5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHRvb2x0aXBBbmNob3I6IFBvaW50ID0gWzAsIDBdXHJcbiAgXHQgKiBUaGUgY29vcmRpbmF0ZXMgb2YgdGhlIHBvaW50IGZyb20gd2hpY2ggdG9vbHRpcHMgd2lsbCBcIm9wZW5cIiwgcmVsYXRpdmUgdG8gdGhlIGljb24gYW5jaG9yLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc2hhZG93VXJsOiBTdHJpbmcgPSBudWxsXHJcbiAgXHQgKiBUaGUgVVJMIHRvIHRoZSBpY29uIHNoYWRvdyBpbWFnZS4gSWYgbm90IHNwZWNpZmllZCwgbm8gc2hhZG93IGltYWdlIHdpbGwgYmUgY3JlYXRlZC5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHNoYWRvd1JldGluYVVybDogU3RyaW5nID0gbnVsbFxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc2hhZG93U2l6ZTogUG9pbnQgPSBudWxsXHJcbiAgXHQgKiBTaXplIG9mIHRoZSBzaGFkb3cgaW1hZ2UgaW4gcGl4ZWxzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc2hhZG93QW5jaG9yOiBQb2ludCA9IG51bGxcclxuICBcdCAqIFRoZSBjb29yZGluYXRlcyBvZiB0aGUgXCJ0aXBcIiBvZiB0aGUgc2hhZG93IChyZWxhdGl2ZSB0byBpdHMgdG9wIGxlZnQgY29ybmVyKSAodGhlIHNhbWVcclxuICBcdCAqIGFzIGljb25BbmNob3IgaWYgbm90IHNwZWNpZmllZCkuXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9ICcnXHJcbiAgXHQgKiBBIGN1c3RvbSBjbGFzcyBuYW1lIHRvIGFzc2lnbiB0byBib3RoIGljb24gYW5kIHNoYWRvdyBpbWFnZXMuIEVtcHR5IGJ5IGRlZmF1bHQuXHJcbiAgXHQgKi9cclxuXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdHBvcHVwQW5jaG9yOiBbMCwgMF0sXHJcbiAgXHRcdHRvb2x0aXBBbmNob3I6IFswLCAwXVxyXG4gIFx0fSxcclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAob3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZUljb24ob2xkSWNvbj86IEhUTUxFbGVtZW50KTogSFRNTEVsZW1lbnRcclxuICBcdC8vIENhbGxlZCBpbnRlcm5hbGx5IHdoZW4gdGhlIGljb24gaGFzIHRvIGJlIHNob3duLCByZXR1cm5zIGEgYDxpbWc+YCBIVE1MIGVsZW1lbnRcclxuICBcdC8vIHN0eWxlZCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnMuXHJcbiAgXHRjcmVhdGVJY29uOiBmdW5jdGlvbiAob2xkSWNvbikge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fY3JlYXRlSWNvbignaWNvbicsIG9sZEljb24pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGNyZWF0ZVNoYWRvdyhvbGRJY29uPzogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudFxyXG4gIFx0Ly8gQXMgYGNyZWF0ZUljb25gLCBidXQgZm9yIHRoZSBzaGFkb3cgYmVuZWF0aCBpdC5cclxuICBcdGNyZWF0ZVNoYWRvdzogZnVuY3Rpb24gKG9sZEljb24pIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NyZWF0ZUljb24oJ3NoYWRvdycsIG9sZEljb24pO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfY3JlYXRlSWNvbjogZnVuY3Rpb24gKG5hbWUsIG9sZEljb24pIHtcclxuICBcdFx0dmFyIHNyYyA9IHRoaXMuX2dldEljb25VcmwobmFtZSk7XHJcblxyXG4gIFx0XHRpZiAoIXNyYykge1xyXG4gIFx0XHRcdGlmIChuYW1lID09PSAnaWNvbicpIHtcclxuICBcdFx0XHRcdHRocm93IG5ldyBFcnJvcignaWNvblVybCBub3Qgc2V0IGluIEljb24gb3B0aW9ucyAoc2VlIHRoZSBkb2NzKS4nKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuIG51bGw7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBpbWcgPSB0aGlzLl9jcmVhdGVJbWcoc3JjLCBvbGRJY29uICYmIG9sZEljb24udGFnTmFtZSA9PT0gJ0lNRycgPyBvbGRJY29uIDogbnVsbCk7XHJcbiAgXHRcdHRoaXMuX3NldEljb25TdHlsZXMoaW1nLCBuYW1lKTtcclxuXHJcbiAgXHRcdHJldHVybiBpbWc7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zZXRJY29uU3R5bGVzOiBmdW5jdGlvbiAoaW1nLCBuYW1lKSB7XHJcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG4gIFx0XHR2YXIgc2l6ZU9wdGlvbiA9IG9wdGlvbnNbbmFtZSArICdTaXplJ107XHJcblxyXG4gIFx0XHRpZiAodHlwZW9mIHNpemVPcHRpb24gPT09ICdudW1iZXInKSB7XHJcbiAgXHRcdFx0c2l6ZU9wdGlvbiA9IFtzaXplT3B0aW9uLCBzaXplT3B0aW9uXTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dmFyIHNpemUgPSB0b1BvaW50KHNpemVPcHRpb24pLFxyXG4gIFx0XHQgICAgYW5jaG9yID0gdG9Qb2ludChuYW1lID09PSAnc2hhZG93JyAmJiBvcHRpb25zLnNoYWRvd0FuY2hvciB8fCBvcHRpb25zLmljb25BbmNob3IgfHxcclxuICBcdFx0ICAgICAgICAgICAgc2l6ZSAmJiBzaXplLmRpdmlkZUJ5KDIsIHRydWUpKTtcclxuXHJcbiAgXHRcdGltZy5jbGFzc05hbWUgPSAnbGVhZmxldC1tYXJrZXItJyArIG5hbWUgKyAnICcgKyAob3B0aW9ucy5jbGFzc05hbWUgfHwgJycpO1xyXG5cclxuICBcdFx0aWYgKGFuY2hvcikge1xyXG4gIFx0XHRcdGltZy5zdHlsZS5tYXJnaW5MZWZ0ID0gKC1hbmNob3IueCkgKyAncHgnO1xyXG4gIFx0XHRcdGltZy5zdHlsZS5tYXJnaW5Ub3AgID0gKC1hbmNob3IueSkgKyAncHgnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoc2l6ZSkge1xyXG4gIFx0XHRcdGltZy5zdHlsZS53aWR0aCAgPSBzaXplLnggKyAncHgnO1xyXG4gIFx0XHRcdGltZy5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9jcmVhdGVJbWc6IGZ1bmN0aW9uIChzcmMsIGVsKSB7XHJcbiAgXHRcdGVsID0gZWwgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7XHJcbiAgXHRcdGVsLnNyYyA9IHNyYztcclxuICBcdFx0cmV0dXJuIGVsO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0SWNvblVybDogZnVuY3Rpb24gKG5hbWUpIHtcclxuICBcdFx0cmV0dXJuIHJldGluYSAmJiB0aGlzLm9wdGlvbnNbbmFtZSArICdSZXRpbmFVcmwnXSB8fCB0aGlzLm9wdGlvbnNbbmFtZSArICdVcmwnXTtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwuaWNvbihvcHRpb25zOiBJY29uIG9wdGlvbnMpXHJcbiAgLy8gQ3JlYXRlcyBhbiBpY29uIGluc3RhbmNlIHdpdGggdGhlIGdpdmVuIG9wdGlvbnMuXHJcbiAgZnVuY3Rpb24gaWNvbihvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IEljb24ob3B0aW9ucyk7XHJcbiAgfVxuXG4gIC8qXG4gICAqIEBtaW5pY2xhc3MgSWNvbi5EZWZhdWx0IChJY29uKVxuICAgKiBAYWthIEwuSWNvbi5EZWZhdWx0XG4gICAqIEBzZWN0aW9uXG4gICAqXG4gICAqIEEgdHJpdmlhbCBzdWJjbGFzcyBvZiBgSWNvbmAsIHJlcHJlc2VudHMgdGhlIGljb24gdG8gdXNlIGluIGBNYXJrZXJgcyB3aGVuXG4gICAqIG5vIGljb24gaXMgc3BlY2lmaWVkLiBQb2ludHMgdG8gdGhlIGJsdWUgbWFya2VyIGltYWdlIGRpc3RyaWJ1dGVkIHdpdGggTGVhZmxldFxuICAgKiByZWxlYXNlcy5cbiAgICpcbiAgICogSW4gb3JkZXIgdG8gY3VzdG9taXplIHRoZSBkZWZhdWx0IGljb24sIGp1c3QgY2hhbmdlIHRoZSBwcm9wZXJ0aWVzIG9mIGBMLkljb24uRGVmYXVsdC5wcm90b3R5cGUub3B0aW9uc2BcbiAgICogKHdoaWNoIGlzIGEgc2V0IG9mIGBJY29uIG9wdGlvbnNgKS5cbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gX2NvbXBsZXRlbHlfIHJlcGxhY2UgdGhlIGRlZmF1bHQgaWNvbiwgb3ZlcnJpZGUgdGhlXG4gICAqIGBMLk1hcmtlci5wcm90b3R5cGUub3B0aW9ucy5pY29uYCB3aXRoIHlvdXIgb3duIGljb24gaW5zdGVhZC5cbiAgICovXG5cbiAgdmFyIEljb25EZWZhdWx0ID0gSWNvbi5leHRlbmQoe1xuXG4gIFx0b3B0aW9uczoge1xuICBcdFx0aWNvblVybDogICAgICAgJ21hcmtlci1pY29uLnBuZycsXG4gIFx0XHRpY29uUmV0aW5hVXJsOiAnbWFya2VyLWljb24tMngucG5nJyxcbiAgXHRcdHNoYWRvd1VybDogICAgICdtYXJrZXItc2hhZG93LnBuZycsXG4gIFx0XHRpY29uU2l6ZTogICAgWzI1LCA0MV0sXG4gIFx0XHRpY29uQW5jaG9yOiAgWzEyLCA0MV0sXG4gIFx0XHRwb3B1cEFuY2hvcjogWzEsIC0zNF0sXG4gIFx0XHR0b29sdGlwQW5jaG9yOiBbMTYsIC0yOF0sXG4gIFx0XHRzaGFkb3dTaXplOiAgWzQxLCA0MV1cbiAgXHR9LFxuXG4gIFx0X2dldEljb25Vcmw6IGZ1bmN0aW9uIChuYW1lKSB7XG4gIFx0XHRpZiAoIUljb25EZWZhdWx0LmltYWdlUGF0aCkge1x0Ly8gRGVwcmVjYXRlZCwgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgb25seVxuICBcdFx0XHRJY29uRGVmYXVsdC5pbWFnZVBhdGggPSB0aGlzLl9kZXRlY3RJY29uUGF0aCgpO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBAb3B0aW9uIGltYWdlUGF0aDogU3RyaW5nXG4gIFx0XHQvLyBgSWNvbi5EZWZhdWx0YCB3aWxsIHRyeSB0byBhdXRvLWRldGVjdCB0aGUgbG9jYXRpb24gb2YgdGhlXG4gIFx0XHQvLyBibHVlIGljb24gaW1hZ2VzLiBJZiB5b3UgYXJlIHBsYWNpbmcgdGhlc2UgaW1hZ2VzIGluIGEgbm9uLXN0YW5kYXJkXG4gIFx0XHQvLyB3YXksIHNldCB0aGlzIG9wdGlvbiB0byBwb2ludCB0byB0aGUgcmlnaHQgcGF0aC5cbiAgXHRcdHJldHVybiAodGhpcy5vcHRpb25zLmltYWdlUGF0aCB8fCBJY29uRGVmYXVsdC5pbWFnZVBhdGgpICsgSWNvbi5wcm90b3R5cGUuX2dldEljb25VcmwuY2FsbCh0aGlzLCBuYW1lKTtcbiAgXHR9LFxuXG4gIFx0X2RldGVjdEljb25QYXRoOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZWwgPSBjcmVhdGUkMSgnZGl2JywgICdsZWFmbGV0LWRlZmF1bHQtaWNvbi1wYXRoJywgZG9jdW1lbnQuYm9keSk7XG4gIFx0XHR2YXIgcGF0aCA9IGdldFN0eWxlKGVsLCAnYmFja2dyb3VuZC1pbWFnZScpIHx8XG4gIFx0XHQgICAgICAgICAgIGdldFN0eWxlKGVsLCAnYmFja2dyb3VuZEltYWdlJyk7XHQvLyBJRThcblxuICBcdFx0ZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlbCk7XG5cbiAgXHRcdGlmIChwYXRoID09PSBudWxsIHx8IHBhdGguaW5kZXhPZigndXJsJykgIT09IDApIHtcbiAgXHRcdFx0cGF0aCA9ICcnO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0cGF0aCA9IHBhdGgucmVwbGFjZSgvXnVybFxcKFtcIiddPy8sICcnKS5yZXBsYWNlKC9tYXJrZXItaWNvblxcLnBuZ1tcIiddP1xcKSQvLCAnJyk7XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiBwYXRoO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLk1hcmtlckRyYWcgaXMgdXNlZCBpbnRlcm5hbGx5IGJ5IEwuTWFya2VyIHRvIG1ha2UgdGhlIG1hcmtlcnMgZHJhZ2dhYmxlLlxuICAgKi9cblxuXG4gIC8qIEBuYW1lc3BhY2UgTWFya2VyXG4gICAqIEBzZWN0aW9uIEludGVyYWN0aW9uIGhhbmRsZXJzXG4gICAqXG4gICAqIEludGVyYWN0aW9uIGhhbmRsZXJzIGFyZSBwcm9wZXJ0aWVzIG9mIGEgbWFya2VyIGluc3RhbmNlIHRoYXQgYWxsb3cgeW91IHRvIGNvbnRyb2wgaW50ZXJhY3Rpb24gYmVoYXZpb3IgaW4gcnVudGltZSwgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGNlcnRhaW4gZmVhdHVyZXMgc3VjaCBhcyBkcmFnZ2luZyAoc2VlIGBIYW5kbGVyYCBtZXRob2RzKS4gRXhhbXBsZTpcbiAgICpcbiAgICogYGBganNcbiAgICogbWFya2VyLmRyYWdnaW5nLmRpc2FibGUoKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwcm9wZXJ0eSBkcmFnZ2luZzogSGFuZGxlclxuICAgKiBNYXJrZXIgZHJhZ2dpbmcgaGFuZGxlciAoYnkgYm90aCBtb3VzZSBhbmQgdG91Y2gpLiBPbmx5IHZhbGlkIHdoZW4gdGhlIG1hcmtlciBpcyBvbiB0aGUgbWFwIChPdGhlcndpc2Ugc2V0IFtgbWFya2VyLm9wdGlvbnMuZHJhZ2dhYmxlYF0oI21hcmtlci1kcmFnZ2FibGUpKS5cbiAgICovXG5cbiAgdmFyIE1hcmtlckRyYWcgPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG1hcmtlcikge1xuICBcdFx0dGhpcy5fbWFya2VyID0gbWFya2VyO1xuICBcdH0sXG5cbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGljb24gPSB0aGlzLl9tYXJrZXIuX2ljb247XG5cbiAgXHRcdGlmICghdGhpcy5fZHJhZ2dhYmxlKSB7XG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZSA9IG5ldyBEcmFnZ2FibGUoaWNvbiwgaWNvbiwgdHJ1ZSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5vbih7XG4gIFx0XHRcdGRyYWdzdGFydDogdGhpcy5fb25EcmFnU3RhcnQsXG4gIFx0XHRcdHByZWRyYWc6IHRoaXMuX29uUHJlRHJhZyxcbiAgXHRcdFx0ZHJhZzogdGhpcy5fb25EcmFnLFxuICBcdFx0XHRkcmFnZW5kOiB0aGlzLl9vbkRyYWdFbmRcbiAgXHRcdH0sIHRoaXMpLmVuYWJsZSgpO1xuXG4gIFx0XHRhZGRDbGFzcyhpY29uLCAnbGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlJyk7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUub2ZmKHtcbiAgXHRcdFx0ZHJhZ3N0YXJ0OiB0aGlzLl9vbkRyYWdTdGFydCxcbiAgXHRcdFx0cHJlZHJhZzogdGhpcy5fb25QcmVEcmFnLFxuICBcdFx0XHRkcmFnOiB0aGlzLl9vbkRyYWcsXG4gIFx0XHRcdGRyYWdlbmQ6IHRoaXMuX29uRHJhZ0VuZFxuICBcdFx0fSwgdGhpcykuZGlzYWJsZSgpO1xuXG4gIFx0XHRpZiAodGhpcy5fbWFya2VyLl9pY29uKSB7XG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcmtlci5faWNvbiwgJ2xlYWZsZXQtbWFya2VyLWRyYWdnYWJsZScpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRtb3ZlZDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLl9kcmFnZ2FibGUuX21vdmVkO1xuICBcdH0sXG5cbiAgXHRfYWRqdXN0UGFuOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcmtlciA9IHRoaXMuX21hcmtlcixcbiAgXHRcdCAgICBtYXAgPSBtYXJrZXIuX21hcCxcbiAgXHRcdCAgICBzcGVlZCA9IHRoaXMuX21hcmtlci5vcHRpb25zLmF1dG9QYW5TcGVlZCxcbiAgXHRcdCAgICBwYWRkaW5nID0gdGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1BhblBhZGRpbmcsXG4gIFx0XHQgICAgaWNvblBvcyA9IGdldFBvc2l0aW9uKG1hcmtlci5faWNvbiksXG4gIFx0XHQgICAgYm91bmRzID0gbWFwLmdldFBpeGVsQm91bmRzKCksXG4gIFx0XHQgICAgb3JpZ2luID0gbWFwLmdldFBpeGVsT3JpZ2luKCk7XG5cbiAgXHRcdHZhciBwYW5Cb3VuZHMgPSB0b0JvdW5kcyhcbiAgXHRcdFx0Ym91bmRzLm1pbi5fc3VidHJhY3Qob3JpZ2luKS5hZGQocGFkZGluZyksXG4gIFx0XHRcdGJvdW5kcy5tYXguX3N1YnRyYWN0KG9yaWdpbikuc3VidHJhY3QocGFkZGluZylcbiAgXHRcdCk7XG5cbiAgXHRcdGlmICghcGFuQm91bmRzLmNvbnRhaW5zKGljb25Qb3MpKSB7XG4gIFx0XHRcdC8vIENvbXB1dGUgaW5jcmVtZW50YWwgbW92ZW1lbnRcbiAgXHRcdFx0dmFyIG1vdmVtZW50ID0gdG9Qb2ludChcbiAgXHRcdFx0XHQoTWF0aC5tYXgocGFuQm91bmRzLm1heC54LCBpY29uUG9zLngpIC0gcGFuQm91bmRzLm1heC54KSAvIChib3VuZHMubWF4LnggLSBwYW5Cb3VuZHMubWF4LngpIC1cbiAgXHRcdFx0XHQoTWF0aC5taW4ocGFuQm91bmRzLm1pbi54LCBpY29uUG9zLngpIC0gcGFuQm91bmRzLm1pbi54KSAvIChib3VuZHMubWluLnggLSBwYW5Cb3VuZHMubWluLngpLFxuXG4gIFx0XHRcdFx0KE1hdGgubWF4KHBhbkJvdW5kcy5tYXgueSwgaWNvblBvcy55KSAtIHBhbkJvdW5kcy5tYXgueSkgLyAoYm91bmRzLm1heC55IC0gcGFuQm91bmRzLm1heC55KSAtXG4gIFx0XHRcdFx0KE1hdGgubWluKHBhbkJvdW5kcy5taW4ueSwgaWNvblBvcy55KSAtIHBhbkJvdW5kcy5taW4ueSkgLyAoYm91bmRzLm1pbi55IC0gcGFuQm91bmRzLm1pbi55KVxuICBcdFx0XHQpLm11bHRpcGx5Qnkoc3BlZWQpO1xuXG4gIFx0XHRcdG1hcC5wYW5CeShtb3ZlbWVudCwge2FuaW1hdGU6IGZhbHNlfSk7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuX2FkZChtb3ZlbWVudCk7XG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZS5fc3RhcnRQb3MuX2FkZChtb3ZlbWVudCk7XG5cbiAgXHRcdFx0c2V0UG9zaXRpb24obWFya2VyLl9pY29uLCB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcyk7XG4gIFx0XHRcdHRoaXMuX29uRHJhZyhlKTtcblxuICBcdFx0XHR0aGlzLl9wYW5SZXF1ZXN0ID0gcmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9hZGp1c3RQYW4uYmluZCh0aGlzLCBlKSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gQHNlY3Rpb24gRHJhZ2dpbmcgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgZHJhZ3N0YXJ0OiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdXNlciBzdGFydHMgZHJhZ2dpbmcgdGhlIG1hcmtlci5cblxuICBcdFx0Ly8gQGV2ZW50IG1vdmVzdGFydDogRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIG1hcmtlciBzdGFydHMgbW92aW5nIChiZWNhdXNlIG9mIGRyYWdnaW5nKS5cblxuICBcdFx0dGhpcy5fb2xkTGF0TG5nID0gdGhpcy5fbWFya2VyLmdldExhdExuZygpO1xuXG4gIFx0XHQvLyBXaGVuIHVzaW5nIEVTNiBpbXBvcnRzIGl0IGNvdWxkIG5vdCBiZSBzZXQgd2hlbiBgUG9wdXBgIHdhcyBub3QgaW1wb3J0ZWQgYXMgd2VsbFxuICBcdFx0dGhpcy5fbWFya2VyLmNsb3NlUG9wdXAgJiYgdGhpcy5fbWFya2VyLmNsb3NlUG9wdXAoKTtcblxuICBcdFx0dGhpcy5fbWFya2VyXG4gIFx0XHRcdC5maXJlKCdtb3Zlc3RhcnQnKVxuICBcdFx0XHQuZmlyZSgnZHJhZ3N0YXJ0Jyk7XG4gIFx0fSxcblxuICBcdF9vblByZURyYWc6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFya2VyLm9wdGlvbnMuYXV0b1Bhbikge1xuICBcdFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fcGFuUmVxdWVzdCk7XG4gIFx0XHRcdHRoaXMuX3BhblJlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX2FkanVzdFBhbi5iaW5kKHRoaXMsIGUpKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X29uRHJhZzogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXJrZXIgPSB0aGlzLl9tYXJrZXIsXG4gIFx0XHQgICAgc2hhZG93ID0gbWFya2VyLl9zaGFkb3csXG4gIFx0XHQgICAgaWNvblBvcyA9IGdldFBvc2l0aW9uKG1hcmtlci5faWNvbiksXG4gIFx0XHQgICAgbGF0bG5nID0gbWFya2VyLl9tYXAubGF5ZXJQb2ludFRvTGF0TG5nKGljb25Qb3MpO1xuXG4gIFx0XHQvLyB1cGRhdGUgc2hhZG93IHBvc2l0aW9uXG4gIFx0XHRpZiAoc2hhZG93KSB7XG4gIFx0XHRcdHNldFBvc2l0aW9uKHNoYWRvdywgaWNvblBvcyk7XG4gIFx0XHR9XG5cbiAgXHRcdG1hcmtlci5fbGF0bG5nID0gbGF0bG5nO1xuICBcdFx0ZS5sYXRsbmcgPSBsYXRsbmc7XG4gIFx0XHRlLm9sZExhdExuZyA9IHRoaXMuX29sZExhdExuZztcblxuICBcdFx0Ly8gQGV2ZW50IGRyYWc6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCByZXBlYXRlZGx5IHdoaWxlIHRoZSB1c2VyIGRyYWdzIHRoZSBtYXJrZXIuXG4gIFx0XHRtYXJrZXJcbiAgXHRcdCAgICAuZmlyZSgnbW92ZScsIGUpXG4gIFx0XHQgICAgLmZpcmUoJ2RyYWcnLCBlKTtcbiAgXHR9LFxuXG4gIFx0X29uRHJhZ0VuZDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdC8vIEBldmVudCBkcmFnZW5kOiBEcmFnRW5kRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIHVzZXIgc3RvcHMgZHJhZ2dpbmcgdGhlIG1hcmtlci5cblxuICBcdFx0IGNhbmNlbEFuaW1GcmFtZSh0aGlzLl9wYW5SZXF1ZXN0KTtcblxuICBcdFx0Ly8gQGV2ZW50IG1vdmVlbmQ6IEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBtYXJrZXIgc3RvcHMgbW92aW5nIChiZWNhdXNlIG9mIGRyYWdnaW5nKS5cbiAgXHRcdGRlbGV0ZSB0aGlzLl9vbGRMYXRMbmc7XG4gIFx0XHR0aGlzLl9tYXJrZXJcbiAgXHRcdCAgICAuZmlyZSgnbW92ZWVuZCcpXG4gIFx0XHQgICAgLmZpcmUoJ2RyYWdlbmQnLCBlKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIE1hcmtlclxyXG4gICAqIEBpbmhlcml0cyBJbnRlcmFjdGl2ZSBsYXllclxyXG4gICAqIEBha2EgTC5NYXJrZXJcclxuICAgKiBMLk1hcmtlciBpcyB1c2VkIHRvIGRpc3BsYXkgY2xpY2thYmxlL2RyYWdnYWJsZSBpY29ucyBvbiB0aGUgbWFwLiBFeHRlbmRzIGBMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBMLm1hcmtlcihbNTAuNSwgMzAuNV0pLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBNYXJrZXIgPSBMYXllci5leHRlbmQoe1xyXG5cclxuICBcdC8vIEBzZWN0aW9uXHJcbiAgXHQvLyBAYWthIE1hcmtlciBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gaWNvbjogSWNvbiA9ICpcclxuICBcdFx0Ly8gSWNvbiBpbnN0YW5jZSB0byB1c2UgZm9yIHJlbmRlcmluZyB0aGUgbWFya2VyLlxyXG4gIFx0XHQvLyBTZWUgW0ljb24gZG9jdW1lbnRhdGlvbl0oI0wuSWNvbikgZm9yIGRldGFpbHMgb24gaG93IHRvIGN1c3RvbWl6ZSB0aGUgbWFya2VyIGljb24uXHJcbiAgXHRcdC8vIElmIG5vdCBzcGVjaWZpZWQsIGEgY29tbW9uIGluc3RhbmNlIG9mIGBMLkljb24uRGVmYXVsdGAgaXMgdXNlZC5cclxuICBcdFx0aWNvbjogbmV3IEljb25EZWZhdWx0KCksXHJcblxyXG4gIFx0XHQvLyBPcHRpb24gaW5oZXJpdGVkIGZyb20gXCJJbnRlcmFjdGl2ZSBsYXllclwiIGFic3RyYWN0IGNsYXNzXHJcbiAgXHRcdGludGVyYWN0aXZlOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBrZXlib2FyZDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgbWFya2VyIGNhbiBiZSB0YWJiZWQgdG8gd2l0aCBhIGtleWJvYXJkIGFuZCBjbGlja2VkIGJ5IHByZXNzaW5nIGVudGVyLlxyXG4gIFx0XHRrZXlib2FyZDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdGl0bGU6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIFRleHQgZm9yIHRoZSBicm93c2VyIHRvb2x0aXAgdGhhdCBhcHBlYXIgb24gbWFya2VyIGhvdmVyIChubyB0b29sdGlwIGJ5IGRlZmF1bHQpLlxyXG4gIFx0XHR0aXRsZTogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGFsdDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVGV4dCBmb3IgdGhlIGBhbHRgIGF0dHJpYnV0ZSBvZiB0aGUgaWNvbiBpbWFnZSAodXNlZnVsIGZvciBhY2Nlc3NpYmlsaXR5KS5cclxuICBcdFx0YWx0OiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gekluZGV4T2Zmc2V0OiBOdW1iZXIgPSAwXHJcbiAgXHRcdC8vIEJ5IGRlZmF1bHQsIG1hcmtlciBpbWFnZXMgekluZGV4IGlzIHNldCBhdXRvbWF0aWNhbGx5IGJhc2VkIG9uIGl0cyBsYXRpdHVkZS4gVXNlIHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHB1dCB0aGUgbWFya2VyIG9uIHRvcCBvZiBhbGwgb3RoZXJzIChvciBiZWxvdyksIHNwZWNpZnlpbmcgYSBoaWdoIHZhbHVlIGxpa2UgYDEwMDBgIChvciBoaWdoIG5lZ2F0aXZlIHZhbHVlLCByZXNwZWN0aXZlbHkpLlxyXG4gIFx0XHR6SW5kZXhPZmZzZXQ6IDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxyXG4gIFx0XHQvLyBUaGUgb3BhY2l0eSBvZiB0aGUgbWFya2VyLlxyXG4gIFx0XHRvcGFjaXR5OiAxLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiByaXNlT25Ib3ZlcjogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgdGhlIG1hcmtlciB3aWxsIGdldCBvbiB0b3Agb2Ygb3RoZXJzIHdoZW4geW91IGhvdmVyIHRoZSBtb3VzZSBvdmVyIGl0LlxyXG4gIFx0XHRyaXNlT25Ib3ZlcjogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHJpc2VPZmZzZXQ6IE51bWJlciA9IDI1MFxyXG4gIFx0XHQvLyBUaGUgei1pbmRleCBvZmZzZXQgdXNlZCBmb3IgdGhlIGByaXNlT25Ib3ZlcmAgZmVhdHVyZS5cclxuICBcdFx0cmlzZU9mZnNldDogMjUwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAnbWFya2VyUGFuZSdcclxuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgbWFya2VycyBpY29uIHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHBhbmU6ICdtYXJrZXJQYW5lJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gc2hhZG93UGFuZTogU3RyaW5nID0gJ3NoYWRvd1BhbmUnXHJcbiAgXHRcdC8vIGBNYXAgcGFuZWAgd2hlcmUgdGhlIG1hcmtlcnMgc2hhZG93IHdpbGwgYmUgYWRkZWQuXHJcbiAgXHRcdHNoYWRvd1BhbmU6ICdzaGFkb3dQYW5lJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYnViYmxpbmdNb3VzZUV2ZW50czogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZW4gYHRydWVgLCBhIG1vdXNlIGV2ZW50IG9uIHRoaXMgbWFya2VyIHdpbGwgdHJpZ2dlciB0aGUgc2FtZSBldmVudCBvbiB0aGUgbWFwXHJcbiAgXHRcdC8vICh1bmxlc3MgW2BMLkRvbUV2ZW50LnN0b3BQcm9wYWdhdGlvbmBdKCNkb21ldmVudC1zdG9wcHJvcGFnYXRpb24pIGlzIHVzZWQpLlxyXG4gIFx0XHRidWJibGluZ01vdXNlRXZlbnRzOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBzZWN0aW9uIERyYWdnYWJsZSBtYXJrZXIgb3B0aW9uc1xyXG4gIFx0XHQvLyBAb3B0aW9uIGRyYWdnYWJsZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIG1hcmtlciBpcyBkcmFnZ2FibGUgd2l0aCBtb3VzZS90b3VjaCBvciBub3QuXHJcbiAgXHRcdGRyYWdnYWJsZTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW46IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRvIHBhbiB0aGUgbWFwIHdoZW4gZHJhZ2dpbmcgdGhpcyBtYXJrZXIgbmVhciBpdHMgZWRnZSBvciBub3QuXHJcbiAgXHRcdGF1dG9QYW46IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuUGFkZGluZzogUG9pbnQgPSBQb2ludCg1MCwgNTApXHJcbiAgXHRcdC8vIERpc3RhbmNlIChpbiBwaXhlbHMgdG8gdGhlIGxlZnQvcmlnaHQgYW5kIHRvIHRoZSB0b3AvYm90dG9tKSBvZiB0aGVcclxuICBcdFx0Ly8gbWFwIGVkZ2UgdG8gc3RhcnQgcGFubmluZyB0aGUgbWFwLlxyXG4gIFx0XHRhdXRvUGFuUGFkZGluZzogWzUwLCA1MF0sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW5TcGVlZDogTnVtYmVyID0gMTBcclxuICBcdFx0Ly8gTnVtYmVyIG9mIHBpeGVscyB0aGUgbWFwIHNob3VsZCBwYW4gYnkuXHJcbiAgXHRcdGF1dG9QYW5TcGVlZDogMTBcclxuICBcdH0sXHJcblxyXG4gIFx0LyogQHNlY3Rpb25cclxuICBcdCAqXHJcbiAgXHQgKiBJbiBhZGRpdGlvbiB0byBbc2hhcmVkIGxheWVyIG1ldGhvZHNdKCNMYXllcikgbGlrZSBgYWRkVG8oKWAgYW5kIGByZW1vdmUoKWAgYW5kIFtwb3B1cCBtZXRob2RzXSgjUG9wdXApIGxpa2UgYmluZFBvcHVwKCkgeW91IGNhbiBhbHNvIHVzZSB0aGUgZm9sbG93aW5nIG1ldGhvZHM6XHJcbiAgXHQgKi9cclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdHRoaXMuX3pvb21BbmltYXRlZCA9IHRoaXMuX3pvb21BbmltYXRlZCAmJiBtYXAub3B0aW9ucy5tYXJrZXJab29tQW5pbWF0aW9uO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdG1hcC5vbignem9vbWFuaW0nLCB0aGlzLl9hbmltYXRlWm9vbSwgdGhpcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHRoaXMuX2luaXRJY29uKCk7XHJcbiAgXHRcdHRoaXMudXBkYXRlKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XHJcbiAgXHRcdGlmICh0aGlzLmRyYWdnaW5nICYmIHRoaXMuZHJhZ2dpbmcuZW5hYmxlZCgpKSB7XHJcbiAgXHRcdFx0dGhpcy5vcHRpb25zLmRyYWdnYWJsZSA9IHRydWU7XHJcbiAgXHRcdFx0dGhpcy5kcmFnZ2luZy5yZW1vdmVIb29rcygpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdGRlbGV0ZSB0aGlzLmRyYWdnaW5nO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdG1hcC5vZmYoJ3pvb21hbmltJywgdGhpcy5fYW5pbWF0ZVpvb20sIHRoaXMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9yZW1vdmVJY29uKCk7XHJcbiAgXHRcdHRoaXMuX3JlbW92ZVNoYWRvdygpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHtcclxuICBcdFx0XHR6b29tOiB0aGlzLnVwZGF0ZSxcclxuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMudXBkYXRlXHJcbiAgXHRcdH07XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0TGF0TG5nOiBMYXRMbmdcclxuICBcdC8vIFJldHVybnMgdGhlIGN1cnJlbnQgZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uIG9mIHRoZSBtYXJrZXIuXHJcbiAgXHRnZXRMYXRMbmc6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2xhdGxuZztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRMYXRMbmcobGF0bG5nOiBMYXRMbmcpOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBtYXJrZXIgcG9zaXRpb24gdG8gdGhlIGdpdmVuIHBvaW50LlxyXG4gIFx0c2V0TGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XHJcbiAgXHRcdHZhciBvbGRMYXRMbmcgPSB0aGlzLl9sYXRsbmc7XHJcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XHJcbiAgXHRcdHRoaXMudXBkYXRlKCk7XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbW92ZTogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIG1vdmVkIHZpYSBbYHNldExhdExuZ2BdKCNtYXJrZXItc2V0bGF0bG5nKSBvciBieSBbZHJhZ2dpbmddKCNtYXJrZXItZHJhZ2dpbmcpLiBPbGQgYW5kIG5ldyBjb29yZGluYXRlcyBhcmUgaW5jbHVkZWQgaW4gZXZlbnQgYXJndW1lbnRzIGFzIGBvbGRMYXRMbmdgLCBgbGF0bG5nYC5cclxuICBcdFx0cmV0dXJuIHRoaXMuZmlyZSgnbW92ZScsIHtvbGRMYXRMbmc6IG9sZExhdExuZywgbGF0bG5nOiB0aGlzLl9sYXRsbmd9KTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRaSW5kZXhPZmZzZXQob2Zmc2V0OiBOdW1iZXIpOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBbekluZGV4IG9mZnNldF0oI21hcmtlci16aW5kZXhvZmZzZXQpIG9mIHRoZSBtYXJrZXIuXHJcbiAgXHRzZXRaSW5kZXhPZmZzZXQ6IGZ1bmN0aW9uIChvZmZzZXQpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLnpJbmRleE9mZnNldCA9IG9mZnNldDtcclxuICBcdFx0cmV0dXJuIHRoaXMudXBkYXRlKCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0SWNvbjogSWNvblxyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCBpY29uIHVzZWQgYnkgdGhlIG1hcmtlclxyXG4gIFx0Z2V0SWNvbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmljb247XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0SWNvbihpY29uOiBJY29uKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgbWFya2VyIGljb24uXHJcbiAgXHRzZXRJY29uOiBmdW5jdGlvbiAoaWNvbikge1xyXG5cclxuICBcdFx0dGhpcy5vcHRpb25zLmljb24gPSBpY29uO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX2luaXRJY29uKCk7XHJcbiAgXHRcdFx0dGhpcy51cGRhdGUoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgXHRcdFx0dGhpcy5iaW5kUG9wdXAodGhpcy5fcG9wdXAsIHRoaXMuX3BvcHVwLm9wdGlvbnMpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RWxlbWVudDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5faWNvbjtcclxuICBcdH0sXHJcblxyXG4gIFx0dXBkYXRlOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5faWNvbiAmJiB0aGlzLl9tYXApIHtcclxuICBcdFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLnJvdW5kKCk7XHJcbiAgXHRcdFx0dGhpcy5fc2V0UG9zKHBvcyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdEljb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnMsXHJcbiAgXHRcdCAgICBjbGFzc1RvQWRkID0gJ2xlYWZsZXQtem9vbS0nICsgKHRoaXMuX3pvb21BbmltYXRlZCA/ICdhbmltYXRlZCcgOiAnaGlkZScpO1xyXG5cclxuICBcdFx0dmFyIGljb24gPSBvcHRpb25zLmljb24uY3JlYXRlSWNvbih0aGlzLl9pY29uKSxcclxuICBcdFx0ICAgIGFkZEljb24gPSBmYWxzZTtcclxuXHJcbiAgXHRcdC8vIGlmIHdlJ3JlIG5vdCByZXVzaW5nIHRoZSBpY29uLCByZW1vdmUgdGhlIG9sZCBvbmUgYW5kIGluaXQgbmV3IG9uZVxyXG4gIFx0XHRpZiAoaWNvbiAhPT0gdGhpcy5faWNvbikge1xyXG4gIFx0XHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0XHR0aGlzLl9yZW1vdmVJY29uKCk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGFkZEljb24gPSB0cnVlO1xyXG5cclxuICBcdFx0XHRpZiAob3B0aW9ucy50aXRsZSkge1xyXG4gIFx0XHRcdFx0aWNvbi50aXRsZSA9IG9wdGlvbnMudGl0bGU7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHRpZiAoaWNvbi50YWdOYW1lID09PSAnSU1HJykge1xyXG4gIFx0XHRcdFx0aWNvbi5hbHQgPSBvcHRpb25zLmFsdCB8fCAnJztcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGFkZENsYXNzKGljb24sIGNsYXNzVG9BZGQpO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMua2V5Ym9hcmQpIHtcclxuICBcdFx0XHRpY29uLnRhYkluZGV4ID0gJzAnO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9pY29uID0gaWNvbjtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLnJpc2VPbkhvdmVyKSB7XHJcbiAgXHRcdFx0dGhpcy5vbih7XHJcbiAgXHRcdFx0XHRtb3VzZW92ZXI6IHRoaXMuX2JyaW5nVG9Gcm9udCxcclxuICBcdFx0XHRcdG1vdXNlb3V0OiB0aGlzLl9yZXNldFpJbmRleFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR2YXIgbmV3U2hhZG93ID0gb3B0aW9ucy5pY29uLmNyZWF0ZVNoYWRvdyh0aGlzLl9zaGFkb3cpLFxyXG4gIFx0XHQgICAgYWRkU2hhZG93ID0gZmFsc2U7XHJcblxyXG4gIFx0XHRpZiAobmV3U2hhZG93ICE9PSB0aGlzLl9zaGFkb3cpIHtcclxuICBcdFx0XHR0aGlzLl9yZW1vdmVTaGFkb3coKTtcclxuICBcdFx0XHRhZGRTaGFkb3cgPSB0cnVlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobmV3U2hhZG93KSB7XHJcbiAgXHRcdFx0YWRkQ2xhc3MobmV3U2hhZG93LCBjbGFzc1RvQWRkKTtcclxuICBcdFx0XHRuZXdTaGFkb3cuYWx0ID0gJyc7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fc2hhZG93ID0gbmV3U2hhZG93O1xyXG5cclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm9wYWNpdHkgPCAxKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHR9XHJcblxyXG5cclxuICBcdFx0aWYgKGFkZEljb24pIHtcclxuICBcdFx0XHR0aGlzLmdldFBhbmUoKS5hcHBlbmRDaGlsZCh0aGlzLl9pY29uKTtcclxuICBcdFx0fVxyXG4gIFx0XHR0aGlzLl9pbml0SW50ZXJhY3Rpb24oKTtcclxuICBcdFx0aWYgKG5ld1NoYWRvdyAmJiBhZGRTaGFkb3cpIHtcclxuICBcdFx0XHR0aGlzLmdldFBhbmUob3B0aW9ucy5zaGFkb3dQYW5lKS5hcHBlbmRDaGlsZCh0aGlzLl9zaGFkb3cpO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZW1vdmVJY29uOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMucmlzZU9uSG92ZXIpIHtcclxuICBcdFx0XHR0aGlzLm9mZih7XHJcbiAgXHRcdFx0XHRtb3VzZW92ZXI6IHRoaXMuX2JyaW5nVG9Gcm9udCxcclxuICBcdFx0XHRcdG1vdXNlb3V0OiB0aGlzLl9yZXNldFpJbmRleFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZW1vdmUodGhpcy5faWNvbik7XHJcbiAgXHRcdHRoaXMucmVtb3ZlSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbik7XHJcblxyXG4gIFx0XHR0aGlzLl9pY29uID0gbnVsbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3JlbW92ZVNoYWRvdzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fc2hhZG93KSB7XHJcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX3NoYWRvdyk7XHJcbiAgXHRcdH1cclxuICBcdFx0dGhpcy5fc2hhZG93ID0gbnVsbDtcclxuICBcdH0sXHJcblxyXG4gIFx0X3NldFBvczogZnVuY3Rpb24gKHBvcykge1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX2ljb24pIHtcclxuICBcdFx0XHRzZXRQb3NpdGlvbih0aGlzLl9pY29uLCBwb3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fc2hhZG93KSB7XHJcbiAgXHRcdFx0c2V0UG9zaXRpb24odGhpcy5fc2hhZG93LCBwb3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl96SW5kZXggPSBwb3MueSArIHRoaXMub3B0aW9ucy56SW5kZXhPZmZzZXQ7XHJcblxyXG4gIFx0XHR0aGlzLl9yZXNldFpJbmRleCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlWkluZGV4OiBmdW5jdGlvbiAob2Zmc2V0KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0dGhpcy5faWNvbi5zdHlsZS56SW5kZXggPSB0aGlzLl96SW5kZXggKyBvZmZzZXQ7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAob3B0KSB7XHJcbiAgXHRcdHZhciBwb3MgPSB0aGlzLl9tYXAuX2xhdExuZ1RvTmV3TGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcsIG9wdC56b29tLCBvcHQuY2VudGVyKS5yb3VuZCgpO1xyXG5cclxuICBcdFx0dGhpcy5fc2V0UG9zKHBvcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SW50ZXJhY3Rpb246IGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmludGVyYWN0aXZlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0YWRkQ2xhc3ModGhpcy5faWNvbiwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcclxuXHJcbiAgXHRcdHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5faWNvbik7XHJcblxyXG4gIFx0XHRpZiAoTWFya2VyRHJhZykge1xyXG4gIFx0XHRcdHZhciBkcmFnZ2FibGUgPSB0aGlzLm9wdGlvbnMuZHJhZ2dhYmxlO1xyXG4gIFx0XHRcdGlmICh0aGlzLmRyYWdnaW5nKSB7XHJcbiAgXHRcdFx0XHRkcmFnZ2FibGUgPSB0aGlzLmRyYWdnaW5nLmVuYWJsZWQoKTtcclxuICBcdFx0XHRcdHRoaXMuZHJhZ2dpbmcuZGlzYWJsZSgpO1xyXG4gIFx0XHRcdH1cclxuXHJcbiAgXHRcdFx0dGhpcy5kcmFnZ2luZyA9IG5ldyBNYXJrZXJEcmFnKHRoaXMpO1xyXG5cclxuICBcdFx0XHRpZiAoZHJhZ2dhYmxlKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmRyYWdnaW5nLmVuYWJsZSgpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldE9wYWNpdHkob3BhY2l0eTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgb3BhY2l0eSBvZiB0aGUgbWFya2VyLlxyXG4gIFx0c2V0T3BhY2l0eTogZnVuY3Rpb24gKG9wYWNpdHkpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5O1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZU9wYWNpdHk6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIG9wYWNpdHkgPSB0aGlzLm9wdGlvbnMub3BhY2l0eTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pY29uKSB7XHJcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9pY29uLCBvcGFjaXR5KTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuX3NoYWRvdykge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fc2hhZG93LCBvcGFjaXR5KTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfYnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHRoaXMuX3VwZGF0ZVpJbmRleCh0aGlzLm9wdGlvbnMucmlzZU9mZnNldCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZXNldFpJbmRleDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoMCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRQb3B1cEFuY2hvcjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLmljb24ub3B0aW9ucy5wb3B1cEFuY2hvcjtcclxuICBcdH0sXHJcblxyXG4gIFx0X2dldFRvb2x0aXBBbmNob3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMub3B0aW9ucy5pY29uLm9wdGlvbnMudG9vbHRpcEFuY2hvcjtcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIGZhY3RvcnkgTC5tYXJrZXIobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/IDogTWFya2VyIG9wdGlvbnMpXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwubWFya2VyKGxhdGxuZzogTGF0TG5nLCBvcHRpb25zPyA6IE1hcmtlciBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIE1hcmtlciBvYmplY3QgZ2l2ZW4gYSBnZW9ncmFwaGljYWwgcG9pbnQgYW5kIG9wdGlvbmFsbHkgYW4gb3B0aW9ucyBvYmplY3QuXHJcbiAgZnVuY3Rpb24gbWFya2VyKGxhdGxuZywgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBNYXJrZXIobGF0bG5nLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcbiAgICogQGNsYXNzIFBhdGhcbiAgICogQGFrYSBMLlBhdGhcbiAgICogQGluaGVyaXRzIEludGVyYWN0aXZlIGxheWVyXG4gICAqXG4gICAqIEFuIGFic3RyYWN0IGNsYXNzIHRoYXQgY29udGFpbnMgb3B0aW9ucyBhbmQgY29uc3RhbnRzIHNoYXJlZCBiZXR3ZWVuIHZlY3RvclxuICAgKiBvdmVybGF5cyAoUG9seWdvbiwgUG9seWxpbmUsIENpcmNsZSkuIERvIG5vdCB1c2UgaXQgZGlyZWN0bHkuIEV4dGVuZHMgYExheWVyYC5cbiAgICovXG5cbiAgdmFyIFBhdGggPSBMYXllci5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIFBhdGggb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gc3Ryb2tlOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gV2hldGhlciB0byBkcmF3IHN0cm9rZSBhbG9uZyB0aGUgcGF0aC4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBib3JkZXJzIG9uIHBvbHlnb25zIG9yIGNpcmNsZXMuXG4gIFx0XHRzdHJva2U6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gY29sb3I6IFN0cmluZyA9ICcjMzM4OGZmJ1xuICBcdFx0Ly8gU3Ryb2tlIGNvbG9yXG4gIFx0XHRjb2xvcjogJyMzMzg4ZmYnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHdlaWdodDogTnVtYmVyID0gM1xuICBcdFx0Ly8gU3Ryb2tlIHdpZHRoIGluIHBpeGVsc1xuICBcdFx0d2VpZ2h0OiAzLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxuICBcdFx0Ly8gU3Ryb2tlIG9wYWNpdHlcbiAgXHRcdG9wYWNpdHk6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gbGluZUNhcDogU3RyaW5nPSAncm91bmQnXG4gIFx0XHQvLyBBIHN0cmluZyB0aGF0IGRlZmluZXMgW3NoYXBlIHRvIGJlIHVzZWQgYXQgdGhlIGVuZF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtbGluZWNhcCkgb2YgdGhlIHN0cm9rZS5cbiAgXHRcdGxpbmVDYXA6ICdyb3VuZCcsXG5cbiAgXHRcdC8vIEBvcHRpb24gbGluZUpvaW46IFN0cmluZyA9ICdyb3VuZCdcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyBbc2hhcGUgdG8gYmUgdXNlZCBhdCB0aGUgY29ybmVyc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9zdHJva2UtbGluZWpvaW4pIG9mIHRoZSBzdHJva2UuXG4gIFx0XHRsaW5lSm9pbjogJ3JvdW5kJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBkYXNoQXJyYXk6IFN0cmluZyA9IG51bGxcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyB0aGUgc3Ryb2tlIFtkYXNoIHBhdHRlcm5dKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc3Ryb2tlLWRhc2hhcnJheSkuIERvZXNuJ3Qgd29yayBvbiBgQ2FudmFzYC1wb3dlcmVkIGxheWVycyBpbiBbc29tZSBvbGQgYnJvd3NlcnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQvc2V0TGluZURhc2gjQnJvd3Nlcl9jb21wYXRpYmlsaXR5KS5cbiAgXHRcdGRhc2hBcnJheTogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBkYXNoT2Zmc2V0OiBTdHJpbmcgPSBudWxsXG4gIFx0XHQvLyBBIHN0cmluZyB0aGF0IGRlZmluZXMgdGhlIFtkaXN0YW5jZSBpbnRvIHRoZSBkYXNoIHBhdHRlcm4gdG8gc3RhcnQgdGhlIGRhc2hdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL1NWRy9BdHRyaWJ1dGUvc3Ryb2tlLWRhc2hvZmZzZXQpLiBEb2Vzbid0IHdvcmsgb24gYENhbnZhc2AtcG93ZXJlZCBsYXllcnMgaW4gW3NvbWUgb2xkIGJyb3dzZXJzXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEL3NldExpbmVEYXNoI0Jyb3dzZXJfY29tcGF0aWJpbGl0eSkuXG4gIFx0XHRkYXNoT2Zmc2V0OiBudWxsLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGw6IEJvb2xlYW4gPSBkZXBlbmRzXG4gIFx0XHQvLyBXaGV0aGVyIHRvIGZpbGwgdGhlIHBhdGggd2l0aCBjb2xvci4gU2V0IGl0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBmaWxsaW5nIG9uIHBvbHlnb25zIG9yIGNpcmNsZXMuXG4gIFx0XHRmaWxsOiBmYWxzZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBmaWxsQ29sb3I6IFN0cmluZyA9ICpcbiAgXHRcdC8vIEZpbGwgY29sb3IuIERlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiB0aGUgW2Bjb2xvcmBdKCNwYXRoLWNvbG9yKSBvcHRpb25cbiAgXHRcdGZpbGxDb2xvcjogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBmaWxsT3BhY2l0eTogTnVtYmVyID0gMC4yXG4gIFx0XHQvLyBGaWxsIG9wYWNpdHkuXG4gIFx0XHRmaWxsT3BhY2l0eTogMC4yLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGZpbGxSdWxlOiBTdHJpbmcgPSAnZXZlbm9kZCdcbiAgXHRcdC8vIEEgc3RyaW5nIHRoYXQgZGVmaW5lcyBbaG93IHRoZSBpbnNpZGUgb2YgYSBzaGFwZV0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0F0dHJpYnV0ZS9maWxsLXJ1bGUpIGlzIGRldGVybWluZWQuXG4gIFx0XHRmaWxsUnVsZTogJ2V2ZW5vZGQnLFxuXG4gIFx0XHQvLyBjbGFzc05hbWU6ICcnLFxuXG4gIFx0XHQvLyBPcHRpb24gaW5oZXJpdGVkIGZyb20gXCJJbnRlcmFjdGl2ZSBsYXllclwiIGFic3RyYWN0IGNsYXNzXG4gIFx0XHRpbnRlcmFjdGl2ZTogdHJ1ZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBidWJibGluZ01vdXNlRXZlbnRzOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gV2hlbiBgdHJ1ZWAsIGEgbW91c2UgZXZlbnQgb24gdGhpcyBwYXRoIHdpbGwgdHJpZ2dlciB0aGUgc2FtZSBldmVudCBvbiB0aGUgbWFwXG4gIFx0XHQvLyAodW5sZXNzIFtgTC5Eb21FdmVudC5zdG9wUHJvcGFnYXRpb25gXSgjZG9tZXZlbnQtc3RvcHByb3BhZ2F0aW9uKSBpcyB1c2VkKS5cbiAgXHRcdGJ1YmJsaW5nTW91c2VFdmVudHM6IHRydWVcbiAgXHR9LFxuXG4gIFx0YmVmb3JlQWRkOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHQvLyBSZW5kZXJlciBpcyBzZXQgaGVyZSBiZWNhdXNlIHdlIG5lZWQgdG8gY2FsbCByZW5kZXJlci5nZXRFdmVudHNcbiAgXHRcdC8vIGJlZm9yZSB0aGlzLmdldEV2ZW50cy5cbiAgXHRcdHRoaXMuX3JlbmRlcmVyID0gbWFwLmdldFJlbmRlcmVyKHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX2luaXRQYXRoKHRoaXMpO1xuICBcdFx0dGhpcy5fcmVzZXQoKTtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl9hZGRQYXRoKHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3JlbW92ZVBhdGgodGhpcyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVkcmF3KCk6IHRoaXNcbiAgXHQvLyBSZWRyYXdzIHRoZSBsYXllci4gU29tZXRpbWVzIHVzZWZ1bCBhZnRlciB5b3UgY2hhbmdlZCB0aGUgY29vcmRpbmF0ZXMgdGhhdCB0aGUgcGF0aCB1c2VzLlxuICBcdHJlZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fdXBkYXRlUGF0aCh0aGlzKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldFN0eWxlKHN0eWxlOiBQYXRoIG9wdGlvbnMpOiB0aGlzXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgYXBwZWFyYW5jZSBvZiBhIFBhdGggYmFzZWQgb24gdGhlIG9wdGlvbnMgaW4gdGhlIGBQYXRoIG9wdGlvbnNgIG9iamVjdC5cbiAgXHRzZXRTdHlsZTogZnVuY3Rpb24gKHN0eWxlKSB7XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIHN0eWxlKTtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fdXBkYXRlU3R5bGUodGhpcyk7XG4gIFx0XHRcdGlmICh0aGlzLm9wdGlvbnMuc3Ryb2tlICYmIHN0eWxlICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdHlsZSwgJ3dlaWdodCcpKSB7XG4gIFx0XHRcdFx0dGhpcy5fdXBkYXRlQm91bmRzKCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9Gcm9udCgpOiB0aGlzXG4gIFx0Ly8gQnJpbmdzIHRoZSBsYXllciB0byB0aGUgdG9wIG9mIGFsbCBwYXRoIGxheWVycy5cbiAgXHRicmluZ1RvRnJvbnQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0Zyb250KHRoaXMpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2soKTogdGhpc1xuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgdG8gdGhlIGJvdHRvbSBvZiBhbGwgcGF0aCBsYXllcnMuXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9yZW5kZXJlcikge1xuICBcdFx0XHR0aGlzLl9yZW5kZXJlci5fYnJpbmdUb0JhY2sodGhpcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Z2V0RWxlbWVudDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3BhdGg7XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gZGVmaW5lZCBpbiBjaGlsZCBjbGFzc2VzXG4gIFx0XHR0aGlzLl9wcm9qZWN0KCk7XG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcbiAgXHR9LFxuXG4gIFx0X2NsaWNrVG9sZXJhbmNlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB1c2VkIHdoZW4gZG9pbmcgaGl0IGRldGVjdGlvbiBmb3IgQ2FudmFzIGxheWVyc1xuICBcdFx0cmV0dXJuICh0aGlzLm9wdGlvbnMuc3Ryb2tlID8gdGhpcy5vcHRpb25zLndlaWdodCAvIDIgOiAwKSArIHRoaXMuX3JlbmRlcmVyLm9wdGlvbnMudG9sZXJhbmNlO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIENpcmNsZU1hcmtlclxuICAgKiBAYWthIEwuQ2lyY2xlTWFya2VyXG4gICAqIEBpbmhlcml0cyBQYXRoXG4gICAqXG4gICAqIEEgY2lyY2xlIG9mIGEgZml4ZWQgc2l6ZSB3aXRoIHJhZGl1cyBzcGVjaWZpZWQgaW4gcGl4ZWxzLiBFeHRlbmRzIGBQYXRoYC5cbiAgICovXG5cbiAgdmFyIENpcmNsZU1hcmtlciA9IFBhdGguZXh0ZW5kKHtcblxuICBcdC8vIEBzZWN0aW9uXG4gIFx0Ly8gQGFrYSBDaXJjbGVNYXJrZXIgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdGZpbGw6IHRydWUsXG5cbiAgXHRcdC8vIEBvcHRpb24gcmFkaXVzOiBOdW1iZXIgPSAxMFxuICBcdFx0Ly8gUmFkaXVzIG9mIHRoZSBjaXJjbGUgbWFya2VyLCBpbiBwaXhlbHNcbiAgXHRcdHJhZGl1czogMTBcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdGxuZywgb3B0aW9ucykge1xuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuX2xhdGxuZyA9IHRvTGF0TG5nKGxhdGxuZyk7XG4gIFx0XHR0aGlzLl9yYWRpdXMgPSB0aGlzLm9wdGlvbnMucmFkaXVzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldExhdExuZyhsYXRMbmc6IExhdExuZyk6IHRoaXNcbiAgXHQvLyBTZXRzIHRoZSBwb3NpdGlvbiBvZiBhIGNpcmNsZSBtYXJrZXIgdG8gYSBuZXcgbG9jYXRpb24uXG4gIFx0c2V0TGF0TG5nOiBmdW5jdGlvbiAobGF0bG5nKSB7XG4gIFx0XHR2YXIgb2xkTGF0TG5nID0gdGhpcy5fbGF0bG5nO1xuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcbiAgXHRcdHRoaXMucmVkcmF3KCk7XG5cbiAgXHRcdC8vIEBldmVudCBtb3ZlOiBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFya2VyIGlzIG1vdmVkIHZpYSBbYHNldExhdExuZ2BdKCNjaXJjbGVtYXJrZXItc2V0bGF0bG5nKS4gT2xkIGFuZCBuZXcgY29vcmRpbmF0ZXMgYXJlIGluY2x1ZGVkIGluIGV2ZW50IGFyZ3VtZW50cyBhcyBgb2xkTGF0TG5nYCwgYGxhdGxuZ2AuXG4gIFx0XHRyZXR1cm4gdGhpcy5maXJlKCdtb3ZlJywge29sZExhdExuZzogb2xkTGF0TG5nLCBsYXRsbmc6IHRoaXMuX2xhdGxuZ30pO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldExhdExuZygpOiBMYXRMbmdcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGdlb2dyYXBoaWNhbCBwb3NpdGlvbiBvZiB0aGUgY2lyY2xlIG1hcmtlclxuICBcdGdldExhdExuZzogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2xhdGxuZztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRSYWRpdXMocmFkaXVzOiBOdW1iZXIpOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgcmFkaXVzIG9mIGEgY2lyY2xlIG1hcmtlci4gVW5pdHMgYXJlIGluIHBpeGVscy5cbiAgXHRzZXRSYWRpdXM6IGZ1bmN0aW9uIChyYWRpdXMpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy5yYWRpdXMgPSB0aGlzLl9yYWRpdXMgPSByYWRpdXM7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRSYWRpdXMoKTogTnVtYmVyXG4gIFx0Ly8gUmV0dXJucyB0aGUgY3VycmVudCByYWRpdXMgb2YgdGhlIGNpcmNsZVxuICBcdGdldFJhZGl1czogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX3JhZGl1cztcbiAgXHR9LFxuXG4gIFx0c2V0U3R5bGUgOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICBcdFx0dmFyIHJhZGl1cyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yYWRpdXMgfHwgdGhpcy5fcmFkaXVzO1xuICBcdFx0UGF0aC5wcm90b3R5cGUuc2V0U3R5bGUuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuc2V0UmFkaXVzKHJhZGl1cyk7XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0X3Byb2plY3Q6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3BvaW50ID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpO1xuICBcdFx0dGhpcy5fdXBkYXRlQm91bmRzKCk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciByID0gdGhpcy5fcmFkaXVzLFxuICBcdFx0ICAgIHIyID0gdGhpcy5fcmFkaXVzWSB8fCByLFxuICBcdFx0ICAgIHcgPSB0aGlzLl9jbGlja1RvbGVyYW5jZSgpLFxuICBcdFx0ICAgIHAgPSBbciArIHcsIHIyICsgd107XG4gIFx0XHR0aGlzLl9weEJvdW5kcyA9IG5ldyBCb3VuZHModGhpcy5fcG9pbnQuc3VidHJhY3QocCksIHRoaXMuX3BvaW50LmFkZChwKSk7XG4gIFx0fSxcblxuICBcdF91cGRhdGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlUGF0aCgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVuZGVyZXIuX3VwZGF0ZUNpcmNsZSh0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X2VtcHR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fcmFkaXVzICYmICF0aGlzLl9yZW5kZXJlci5fYm91bmRzLmludGVyc2VjdHModGhpcy5fcHhCb3VuZHMpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XG4gIFx0XHRyZXR1cm4gcC5kaXN0YW5jZVRvKHRoaXMuX3BvaW50KSA8PSB0aGlzLl9yYWRpdXMgKyB0aGlzLl9jbGlja1RvbGVyYW5jZSgpO1xuICBcdH1cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLmNpcmNsZU1hcmtlcihsYXRsbmc6IExhdExuZywgb3B0aW9ucz86IENpcmNsZU1hcmtlciBvcHRpb25zKVxuICAvLyBJbnN0YW50aWF0ZXMgYSBjaXJjbGUgbWFya2VyIG9iamVjdCBnaXZlbiBhIGdlb2dyYXBoaWNhbCBwb2ludCwgYW5kIGFuIG9wdGlvbmFsIG9wdGlvbnMgb2JqZWN0LlxuICBmdW5jdGlvbiBjaXJjbGVNYXJrZXIobGF0bG5nLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBDaXJjbGVNYXJrZXIobGF0bG5nLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qXG4gICAqIEBjbGFzcyBDaXJjbGVcbiAgICogQGFrYSBMLkNpcmNsZVxuICAgKiBAaW5oZXJpdHMgQ2lyY2xlTWFya2VyXG4gICAqXG4gICAqIEEgY2xhc3MgZm9yIGRyYXdpbmcgY2lyY2xlIG92ZXJsYXlzIG9uIGEgbWFwLiBFeHRlbmRzIGBDaXJjbGVNYXJrZXJgLlxuICAgKlxuICAgKiBJdCdzIGFuIGFwcHJveGltYXRpb24gYW5kIHN0YXJ0cyB0byBkaXZlcmdlIGZyb20gYSByZWFsIGNpcmNsZSBjbG9zZXIgdG8gcG9sZXMgKGR1ZSB0byBwcm9qZWN0aW9uIGRpc3RvcnRpb24pLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBMLmNpcmNsZShbNTAuNSwgMzAuNV0sIHtyYWRpdXM6IDIwMH0pLmFkZFRvKG1hcCk7XG4gICAqIGBgYFxuICAgKi9cblxuICB2YXIgQ2lyY2xlID0gQ2lyY2xlTWFya2VyLmV4dGVuZCh7XG5cbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKSB7XG4gIFx0XHRpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gIFx0XHRcdC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggMC43LnggZmFjdG9yeSAobGF0bG5nLCByYWRpdXMsIG9wdGlvbnM/KVxuICBcdFx0XHRvcHRpb25zID0gZXh0ZW5kKHt9LCBsZWdhY3lPcHRpb25zLCB7cmFkaXVzOiBvcHRpb25zfSk7XG4gIFx0XHR9XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcblxuICBcdFx0aWYgKGlzTmFOKHRoaXMub3B0aW9ucy5yYWRpdXMpKSB7IHRocm93IG5ldyBFcnJvcignQ2lyY2xlIHJhZGl1cyBjYW5ub3QgYmUgTmFOJyk7IH1cblxuICBcdFx0Ly8gQHNlY3Rpb25cbiAgXHRcdC8vIEBha2EgQ2lyY2xlIG9wdGlvbnNcbiAgXHRcdC8vIEBvcHRpb24gcmFkaXVzOiBOdW1iZXI7IFJhZGl1cyBvZiB0aGUgY2lyY2xlLCBpbiBtZXRlcnMuXG4gIFx0XHR0aGlzLl9tUmFkaXVzID0gdGhpcy5vcHRpb25zLnJhZGl1cztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRSYWRpdXMocmFkaXVzOiBOdW1iZXIpOiB0aGlzXG4gIFx0Ly8gU2V0cyB0aGUgcmFkaXVzIG9mIGEgY2lyY2xlLiBVbml0cyBhcmUgaW4gbWV0ZXJzLlxuICBcdHNldFJhZGl1czogZnVuY3Rpb24gKHJhZGl1cykge1xuICBcdFx0dGhpcy5fbVJhZGl1cyA9IHJhZGl1cztcbiAgXHRcdHJldHVybiB0aGlzLnJlZHJhdygpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFJhZGl1cygpOiBOdW1iZXJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHJhZGl1cyBvZiBhIGNpcmNsZS4gVW5pdHMgYXJlIGluIG1ldGVycy5cbiAgXHRnZXRSYWRpdXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9tUmFkaXVzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcbiAgXHQvLyBSZXR1cm5zIHRoZSBgTGF0TG5nQm91bmRzYCBvZiB0aGUgcGF0aC5cbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBoYWxmID0gW3RoaXMuX3JhZGl1cywgdGhpcy5fcmFkaXVzWSB8fCB0aGlzLl9yYWRpdXNdO1xuXG4gIFx0XHRyZXR1cm4gbmV3IExhdExuZ0JvdW5kcyhcbiAgXHRcdFx0dGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludC5zdWJ0cmFjdChoYWxmKSksXG4gIFx0XHRcdHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcodGhpcy5fcG9pbnQuYWRkKGhhbGYpKSk7XG4gIFx0fSxcblxuICBcdHNldFN0eWxlOiBQYXRoLnByb3RvdHlwZS5zZXRTdHlsZSxcblxuICBcdF9wcm9qZWN0OiBmdW5jdGlvbiAoKSB7XG5cbiAgXHRcdHZhciBsbmcgPSB0aGlzLl9sYXRsbmcubG5nLFxuICBcdFx0ICAgIGxhdCA9IHRoaXMuX2xhdGxuZy5sYXQsXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIGNycyA9IG1hcC5vcHRpb25zLmNycztcblxuICBcdFx0aWYgKGNycy5kaXN0YW5jZSA9PT0gRWFydGguZGlzdGFuY2UpIHtcbiAgXHRcdFx0dmFyIGQgPSBNYXRoLlBJIC8gMTgwLFxuICBcdFx0XHQgICAgbGF0UiA9ICh0aGlzLl9tUmFkaXVzIC8gRWFydGguUikgLyBkLFxuICBcdFx0XHQgICAgdG9wID0gbWFwLnByb2plY3QoW2xhdCArIGxhdFIsIGxuZ10pLFxuICBcdFx0XHQgICAgYm90dG9tID0gbWFwLnByb2plY3QoW2xhdCAtIGxhdFIsIGxuZ10pLFxuICBcdFx0XHQgICAgcCA9IHRvcC5hZGQoYm90dG9tKS5kaXZpZGVCeSgyKSxcbiAgXHRcdFx0ICAgIGxhdDIgPSBtYXAudW5wcm9qZWN0KHApLmxhdCxcbiAgXHRcdFx0ICAgIGxuZ1IgPSBNYXRoLmFjb3MoKE1hdGguY29zKGxhdFIgKiBkKSAtIE1hdGguc2luKGxhdCAqIGQpICogTWF0aC5zaW4obGF0MiAqIGQpKSAvXG4gIFx0XHRcdCAgICAgICAgICAgIChNYXRoLmNvcyhsYXQgKiBkKSAqIE1hdGguY29zKGxhdDIgKiBkKSkpIC8gZDtcblxuICBcdFx0XHRpZiAoaXNOYU4obG5nUikgfHwgbG5nUiA9PT0gMCkge1xuICBcdFx0XHRcdGxuZ1IgPSBsYXRSIC8gTWF0aC5jb3MoTWF0aC5QSSAvIDE4MCAqIGxhdCk7IC8vIEZhbGxiYWNrIGZvciBlZGdlIGNhc2UsICMyNDI1XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl9wb2ludCA9IHAuc3VidHJhY3QobWFwLmdldFBpeGVsT3JpZ2luKCkpO1xuICBcdFx0XHR0aGlzLl9yYWRpdXMgPSBpc05hTihsbmdSKSA/IDAgOiBwLnggLSBtYXAucHJvamVjdChbbGF0MiwgbG5nIC0gbG5nUl0pLng7XG4gIFx0XHRcdHRoaXMuX3JhZGl1c1kgPSBwLnkgLSB0b3AueTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dmFyIGxhdGxuZzIgPSBjcnMudW5wcm9qZWN0KGNycy5wcm9qZWN0KHRoaXMuX2xhdGxuZykuc3VidHJhY3QoW3RoaXMuX21SYWRpdXMsIDBdKSk7XG5cbiAgXHRcdFx0dGhpcy5fcG9pbnQgPSBtYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2xhdGxuZyk7XG4gIFx0XHRcdHRoaXMuX3JhZGl1cyA9IHRoaXMuX3BvaW50LnggLSBtYXAubGF0TG5nVG9MYXllclBvaW50KGxhdGxuZzIpLng7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZUJvdW5kcygpO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5jaXJjbGUobGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBDaXJjbGUgb3B0aW9ucylcbiAgLy8gSW5zdGFudGlhdGVzIGEgY2lyY2xlIG9iamVjdCBnaXZlbiBhIGdlb2dyYXBoaWNhbCBwb2ludCwgYW5kIGFuIG9wdGlvbnMgb2JqZWN0XG4gIC8vIHdoaWNoIGNvbnRhaW5zIHRoZSBjaXJjbGUgcmFkaXVzLlxuICAvLyBAYWx0ZXJuYXRpdmVcbiAgLy8gQGZhY3RvcnkgTC5jaXJjbGUobGF0bG5nOiBMYXRMbmcsIHJhZGl1czogTnVtYmVyLCBvcHRpb25zPzogQ2lyY2xlIG9wdGlvbnMpXG4gIC8vIE9ic29sZXRlIHdheSBvZiBpbnN0YW50aWF0aW5nIGEgY2lyY2xlLCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDAuNy54IGNvZGUuXG4gIC8vIERvIG5vdCB1c2UgaW4gbmV3IGFwcGxpY2F0aW9ucyBvciBwbHVnaW5zLlxuICBmdW5jdGlvbiBjaXJjbGUobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBDaXJjbGUobGF0bG5nLCBvcHRpb25zLCBsZWdhY3lPcHRpb25zKTtcbiAgfVxuXG4gIC8qXG4gICAqIEBjbGFzcyBQb2x5bGluZVxuICAgKiBAYWthIEwuUG9seWxpbmVcbiAgICogQGluaGVyaXRzIFBhdGhcbiAgICpcbiAgICogQSBjbGFzcyBmb3IgZHJhd2luZyBwb2x5bGluZSBvdmVybGF5cyBvbiBhIG1hcC4gRXh0ZW5kcyBgUGF0aGAuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGNyZWF0ZSBhIHJlZCBwb2x5bGluZSBmcm9tIGFuIGFycmF5IG9mIExhdExuZyBwb2ludHNcbiAgICogdmFyIGxhdGxuZ3MgPSBbXG4gICAqIFx0WzQ1LjUxLCAtMTIyLjY4XSxcbiAgICogXHRbMzcuNzcsIC0xMjIuNDNdLFxuICAgKiBcdFszNC4wNCwgLTExOC4yXVxuICAgKiBdO1xuICAgKlxuICAgKiB2YXIgcG9seWxpbmUgPSBMLnBvbHlsaW5lKGxhdGxuZ3MsIHtjb2xvcjogJ3JlZCd9KS5hZGRUbyhtYXApO1xuICAgKlxuICAgKiAvLyB6b29tIHRoZSBtYXAgdG8gdGhlIHBvbHlsaW5lXG4gICAqIG1hcC5maXRCb3VuZHMocG9seWxpbmUuZ2V0Qm91bmRzKCkpO1xuICAgKiBgYGBcbiAgICpcbiAgICogWW91IGNhbiBhbHNvIHBhc3MgYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSB0byByZXByZXNlbnQgYSBgTXVsdGlQb2x5bGluZWAgc2hhcGU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIC8vIGNyZWF0ZSBhIHJlZCBwb2x5bGluZSBmcm9tIGFuIGFycmF5IG9mIGFycmF5cyBvZiBMYXRMbmcgcG9pbnRzXG4gICAqIHZhciBsYXRsbmdzID0gW1xuICAgKiBcdFtbNDUuNTEsIC0xMjIuNjhdLFxuICAgKiBcdCBbMzcuNzcsIC0xMjIuNDNdLFxuICAgKiBcdCBbMzQuMDQsIC0xMTguMl1dLFxuICAgKiBcdFtbNDAuNzgsIC03My45MV0sXG4gICAqIFx0IFs0MS44MywgLTg3LjYyXSxcbiAgICogXHQgWzMyLjc2LCAtOTYuNzJdXVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG5cblxuICB2YXIgUG9seWxpbmUgPSBQYXRoLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgUG9seWxpbmUgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gc21vb3RoRmFjdG9yOiBOdW1iZXIgPSAxLjBcbiAgXHRcdC8vIEhvdyBtdWNoIHRvIHNpbXBsaWZ5IHRoZSBwb2x5bGluZSBvbiBlYWNoIHpvb20gbGV2ZWwuIE1vcmUgbWVhbnNcbiAgXHRcdC8vIGJldHRlciBwZXJmb3JtYW5jZSBhbmQgc21vb3RoZXIgbG9vaywgYW5kIGxlc3MgbWVhbnMgbW9yZSBhY2N1cmF0ZSByZXByZXNlbnRhdGlvbi5cbiAgXHRcdHNtb290aEZhY3RvcjogMS4wLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG5vQ2xpcDogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBEaXNhYmxlIHBvbHlsaW5lIGNsaXBwaW5nLlxuICBcdFx0bm9DbGlwOiBmYWxzZVxuICBcdH0sXG5cbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAobGF0bG5ncywgb3B0aW9ucykge1xuICBcdFx0c2V0T3B0aW9ucyh0aGlzLCBvcHRpb25zKTtcbiAgXHRcdHRoaXMuX3NldExhdExuZ3MobGF0bG5ncyk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgZ2V0TGF0TG5ncygpOiBMYXRMbmdbXVxuICBcdC8vIFJldHVybnMgYW4gYXJyYXkgb2YgdGhlIHBvaW50cyBpbiB0aGUgcGF0aCwgb3IgbmVzdGVkIGFycmF5cyBvZiBwb2ludHMgaW4gY2FzZSBvZiBtdWx0aS1wb2x5bGluZS5cbiAgXHRnZXRMYXRMbmdzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbGF0bG5ncztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRMYXRMbmdzKGxhdGxuZ3M6IExhdExuZ1tdKTogdGhpc1xuICBcdC8vIFJlcGxhY2VzIGFsbCB0aGUgcG9pbnRzIGluIHRoZSBwb2x5bGluZSB3aXRoIHRoZSBnaXZlbiBhcnJheSBvZiBnZW9ncmFwaGljYWwgcG9pbnRzLlxuICBcdHNldExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR0aGlzLl9zZXRMYXRMbmdzKGxhdGxuZ3MpO1xuICBcdFx0cmV0dXJuIHRoaXMucmVkcmF3KCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgaXNFbXB0eSgpOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIFBvbHlsaW5lIGhhcyBubyBMYXRMbmdzLlxuICBcdGlzRW1wdHk6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiAhdGhpcy5fbGF0bG5ncy5sZW5ndGg7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgY2xvc2VzdExheWVyUG9pbnQocDogUG9pbnQpOiBQb2ludFxuICBcdC8vIFJldHVybnMgdGhlIHBvaW50IGNsb3Nlc3QgdG8gYHBgIG9uIHRoZSBQb2x5bGluZS5cbiAgXHRjbG9zZXN0TGF5ZXJQb2ludDogZnVuY3Rpb24gKHApIHtcbiAgXHRcdHZhciBtaW5EaXN0YW5jZSA9IEluZmluaXR5LFxuICBcdFx0ICAgIG1pblBvaW50ID0gbnVsbCxcbiAgXHRcdCAgICBjbG9zZXN0ID0gX3NxQ2xvc2VzdFBvaW50T25TZWdtZW50LFxuICBcdFx0ICAgIHAxLCBwMjtcblxuICBcdFx0Zm9yICh2YXIgaiA9IDAsIGpMZW4gPSB0aGlzLl9wYXJ0cy5sZW5ndGg7IGogPCBqTGVuOyBqKyspIHtcbiAgXHRcdFx0dmFyIHBvaW50cyA9IHRoaXMuX3BhcnRzW2pdO1xuXG4gIFx0XHRcdGZvciAodmFyIGkgPSAxLCBsZW4gPSBwb2ludHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0XHRwMSA9IHBvaW50c1tpIC0gMV07XG4gIFx0XHRcdFx0cDIgPSBwb2ludHNbaV07XG5cbiAgXHRcdFx0XHR2YXIgc3FEaXN0ID0gY2xvc2VzdChwLCBwMSwgcDIsIHRydWUpO1xuXG4gIFx0XHRcdFx0aWYgKHNxRGlzdCA8IG1pbkRpc3RhbmNlKSB7XG4gIFx0XHRcdFx0XHRtaW5EaXN0YW5jZSA9IHNxRGlzdDtcbiAgXHRcdFx0XHRcdG1pblBvaW50ID0gY2xvc2VzdChwLCBwMSwgcDIpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0aWYgKG1pblBvaW50KSB7XG4gIFx0XHRcdG1pblBvaW50LmRpc3RhbmNlID0gTWF0aC5zcXJ0KG1pbkRpc3RhbmNlKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiBtaW5Qb2ludDtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRDZW50ZXIoKTogTGF0TG5nXG4gIFx0Ly8gUmV0dXJucyB0aGUgY2VudGVyIChbY2VudHJvaWRdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ2VudHJvaWQpKSBvZiB0aGUgcG9seWxpbmUuXG4gIFx0Z2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB0aHJvd3MgZXJyb3Igd2hlbiBub3QgeWV0IGFkZGVkIHRvIG1hcCBhcyB0aGlzIGNlbnRlciBjYWxjdWxhdGlvbiByZXF1aXJlcyBwcm9qZWN0ZWQgY29vcmRpbmF0ZXNcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTXVzdCBhZGQgbGF5ZXIgdG8gbWFwIGJlZm9yZSB1c2luZyBnZXRDZW50ZXIoKScpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgaSwgaGFsZkRpc3QsIHNlZ0Rpc3QsIGRpc3QsIHAxLCBwMiwgcmF0aW8sXG4gIFx0XHQgICAgcG9pbnRzID0gdGhpcy5fcmluZ3NbMF0sXG4gIFx0XHQgICAgbGVuID0gcG9pbnRzLmxlbmd0aDtcblxuICBcdFx0aWYgKCFsZW4pIHsgcmV0dXJuIG51bGw7IH1cblxuICBcdFx0Ly8gcG9seWxpbmUgY2VudHJvaWQgYWxnb3JpdGhtOyBvbmx5IHVzZXMgdGhlIGZpcnN0IHJpbmcgaWYgdGhlcmUgYXJlIG11bHRpcGxlXG5cbiAgXHRcdGZvciAoaSA9IDAsIGhhbGZEaXN0ID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICBcdFx0XHRoYWxmRGlzdCArPSBwb2ludHNbaV0uZGlzdGFuY2VUbyhwb2ludHNbaSArIDFdKSAvIDI7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIFRoZSBsaW5lIGlzIHNvIHNtYWxsIGluIHRoZSBjdXJyZW50IHZpZXcgdGhhdCBhbGwgcG9pbnRzIGFyZSBvbiB0aGUgc2FtZSBwaXhlbC5cbiAgXHRcdGlmIChoYWxmRGlzdCA9PT0gMCkge1xuICBcdFx0XHRyZXR1cm4gdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhwb2ludHNbMF0pO1xuICBcdFx0fVxuXG4gIFx0XHRmb3IgKGkgPSAwLCBkaXN0ID0gMDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICBcdFx0XHRwMSA9IHBvaW50c1tpXTtcbiAgXHRcdFx0cDIgPSBwb2ludHNbaSArIDFdO1xuICBcdFx0XHRzZWdEaXN0ID0gcDEuZGlzdGFuY2VUbyhwMik7XG4gIFx0XHRcdGRpc3QgKz0gc2VnRGlzdDtcblxuICBcdFx0XHRpZiAoZGlzdCA+IGhhbGZEaXN0KSB7XG4gIFx0XHRcdFx0cmF0aW8gPSAoZGlzdCAtIGhhbGZEaXN0KSAvIHNlZ0Rpc3Q7XG4gIFx0XHRcdFx0cmV0dXJuIHRoaXMuX21hcC5sYXllclBvaW50VG9MYXRMbmcoW1xuICBcdFx0XHRcdFx0cDIueCAtIHJhdGlvICogKHAyLnggLSBwMS54KSxcbiAgXHRcdFx0XHRcdHAyLnkgLSByYXRpbyAqIChwMi55IC0gcDEueSlcbiAgXHRcdFx0XHRdKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldEJvdW5kcygpOiBMYXRMbmdCb3VuZHNcbiAgXHQvLyBSZXR1cm5zIHRoZSBgTGF0TG5nQm91bmRzYCBvZiB0aGUgcGF0aC5cbiAgXHRnZXRCb3VuZHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9ib3VuZHM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgYWRkTGF0TG5nKGxhdGxuZzogTGF0TG5nLCBsYXRsbmdzPzogTGF0TG5nW10pOiB0aGlzXG4gIFx0Ly8gQWRkcyBhIGdpdmVuIHBvaW50IHRvIHRoZSBwb2x5bGluZS4gQnkgZGVmYXVsdCwgYWRkcyB0byB0aGUgZmlyc3QgcmluZyBvZlxuICBcdC8vIHRoZSBwb2x5bGluZSBpbiBjYXNlIG9mIGEgbXVsdGktcG9seWxpbmUsIGJ1dCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBwYXNzaW5nXG4gIFx0Ly8gYSBzcGVjaWZpYyByaW5nIGFzIGEgTGF0TG5nIGFycmF5ICh0aGF0IHlvdSBjYW4gZWFybGllciBhY2Nlc3Mgd2l0aCBbYGdldExhdExuZ3NgXSgjcG9seWxpbmUtZ2V0bGF0bG5ncykpLlxuICBcdGFkZExhdExuZzogZnVuY3Rpb24gKGxhdGxuZywgbGF0bG5ncykge1xuICBcdFx0bGF0bG5ncyA9IGxhdGxuZ3MgfHwgdGhpcy5fZGVmYXVsdFNoYXBlKCk7XG4gIFx0XHRsYXRsbmcgPSB0b0xhdExuZyhsYXRsbmcpO1xuICBcdFx0bGF0bG5ncy5wdXNoKGxhdGxuZyk7XG4gIFx0XHR0aGlzLl9ib3VuZHMuZXh0ZW5kKGxhdGxuZyk7XG4gIFx0XHRyZXR1cm4gdGhpcy5yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0X3NldExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR0aGlzLl9ib3VuZHMgPSBuZXcgTGF0TG5nQm91bmRzKCk7XG4gIFx0XHR0aGlzLl9sYXRsbmdzID0gdGhpcy5fY29udmVydExhdExuZ3MobGF0bG5ncyk7XG4gIFx0fSxcblxuICBcdF9kZWZhdWx0U2hhcGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBpc0ZsYXQodGhpcy5fbGF0bG5ncykgPyB0aGlzLl9sYXRsbmdzIDogdGhpcy5fbGF0bG5nc1swXTtcbiAgXHR9LFxuXG4gIFx0Ly8gcmVjdXJzaXZlbHkgY29udmVydCBsYXRsbmdzIGlucHV0IGludG8gYWN0dWFsIExhdExuZyBpbnN0YW5jZXM7IGNhbGN1bGF0ZSBib3VuZHMgYWxvbmcgdGhlIHdheVxuICBcdF9jb252ZXJ0TGF0TG5nczogZnVuY3Rpb24gKGxhdGxuZ3MpIHtcbiAgXHRcdHZhciByZXN1bHQgPSBbXSxcbiAgXHRcdCAgICBmbGF0ID0gaXNGbGF0KGxhdGxuZ3MpO1xuXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF0bG5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRpZiAoZmxhdCkge1xuICBcdFx0XHRcdHJlc3VsdFtpXSA9IHRvTGF0TG5nKGxhdGxuZ3NbaV0pO1xuICBcdFx0XHRcdHRoaXMuX2JvdW5kcy5leHRlbmQocmVzdWx0W2ldKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRyZXN1bHRbaV0gPSB0aGlzLl9jb252ZXJ0TGF0TG5ncyhsYXRsbmdzW2ldKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gcmVzdWx0O1xuICBcdH0sXG5cbiAgXHRfcHJvamVjdDogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHB4Qm91bmRzID0gbmV3IEJvdW5kcygpO1xuICBcdFx0dGhpcy5fcmluZ3MgPSBbXTtcbiAgXHRcdHRoaXMuX3Byb2plY3RMYXRsbmdzKHRoaXMuX2xhdGxuZ3MsIHRoaXMuX3JpbmdzLCBweEJvdW5kcyk7XG5cbiAgXHRcdGlmICh0aGlzLl9ib3VuZHMuaXNWYWxpZCgpICYmIHB4Qm91bmRzLmlzVmFsaWQoKSkge1xuICBcdFx0XHR0aGlzLl9yYXdQeEJvdW5kcyA9IHB4Qm91bmRzO1xuICBcdFx0XHR0aGlzLl91cGRhdGVCb3VuZHMoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUJvdW5kczogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHcgPSB0aGlzLl9jbGlja1RvbGVyYW5jZSgpLFxuICBcdFx0ICAgIHAgPSBuZXcgUG9pbnQodywgdyk7XG4gIFx0XHR0aGlzLl9weEJvdW5kcyA9IG5ldyBCb3VuZHMoW1xuICBcdFx0XHR0aGlzLl9yYXdQeEJvdW5kcy5taW4uc3VidHJhY3QocCksXG4gIFx0XHRcdHRoaXMuX3Jhd1B4Qm91bmRzLm1heC5hZGQocClcbiAgXHRcdF0pO1xuICBcdH0sXG5cbiAgXHQvLyByZWN1cnNpdmVseSB0dXJucyBsYXRsbmdzIGludG8gYSBzZXQgb2YgcmluZ3Mgd2l0aCBwcm9qZWN0ZWQgY29vcmRpbmF0ZXNcbiAgXHRfcHJvamVjdExhdGxuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzLCByZXN1bHQsIHByb2plY3RlZEJvdW5kcykge1xuICBcdFx0dmFyIGZsYXQgPSBsYXRsbmdzWzBdIGluc3RhbmNlb2YgTGF0TG5nLFxuICBcdFx0ICAgIGxlbiA9IGxhdGxuZ3MubGVuZ3RoLFxuICBcdFx0ICAgIGksIHJpbmc7XG5cbiAgXHRcdGlmIChmbGF0KSB7XG4gIFx0XHRcdHJpbmcgPSBbXTtcbiAgXHRcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdFx0cmluZ1tpXSA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQobGF0bG5nc1tpXSk7XG4gIFx0XHRcdFx0cHJvamVjdGVkQm91bmRzLmV4dGVuZChyaW5nW2ldKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRyZXN1bHQucHVzaChyaW5nKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRcdHRoaXMuX3Byb2plY3RMYXRsbmdzKGxhdGxuZ3NbaV0sIHJlc3VsdCwgcHJvamVjdGVkQm91bmRzKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdH0sXG5cbiAgXHQvLyBjbGlwIHBvbHlsaW5lIGJ5IHJlbmRlcmVyIGJvdW5kcyBzbyB0aGF0IHdlIGhhdmUgbGVzcyB0byByZW5kZXIgZm9yIHBlcmZvcm1hbmNlXG4gIFx0X2NsaXBQb2ludHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBib3VuZHMgPSB0aGlzLl9yZW5kZXJlci5fYm91bmRzO1xuXG4gIFx0XHR0aGlzLl9wYXJ0cyA9IFtdO1xuICBcdFx0aWYgKCF0aGlzLl9weEJvdW5kcyB8fCAhdGhpcy5fcHhCb3VuZHMuaW50ZXJzZWN0cyhib3VuZHMpKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5ub0NsaXApIHtcbiAgXHRcdFx0dGhpcy5fcGFydHMgPSB0aGlzLl9yaW5ncztcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgcGFydHMgPSB0aGlzLl9wYXJ0cyxcbiAgXHRcdCAgICBpLCBqLCBrLCBsZW4sIGxlbjIsIHNlZ21lbnQsIHBvaW50cztcblxuICBcdFx0Zm9yIChpID0gMCwgayA9IDAsIGxlbiA9IHRoaXMuX3JpbmdzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdHBvaW50cyA9IHRoaXMuX3JpbmdzW2ldO1xuXG4gIFx0XHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwb2ludHMubGVuZ3RoOyBqIDwgbGVuMiAtIDE7IGorKykge1xuICBcdFx0XHRcdHNlZ21lbnQgPSBjbGlwU2VnbWVudChwb2ludHNbal0sIHBvaW50c1tqICsgMV0sIGJvdW5kcywgaiwgdHJ1ZSk7XG5cbiAgXHRcdFx0XHRpZiAoIXNlZ21lbnQpIHsgY29udGludWU7IH1cblxuICBcdFx0XHRcdHBhcnRzW2tdID0gcGFydHNba10gfHwgW107XG4gIFx0XHRcdFx0cGFydHNba10ucHVzaChzZWdtZW50WzBdKTtcblxuICBcdFx0XHRcdC8vIGlmIHNlZ21lbnQgZ29lcyBvdXQgb2Ygc2NyZWVuLCBvciBpdCdzIHRoZSBsYXN0IG9uZSwgaXQncyB0aGUgZW5kIG9mIHRoZSBsaW5lIHBhcnRcbiAgXHRcdFx0XHRpZiAoKHNlZ21lbnRbMV0gIT09IHBvaW50c1tqICsgMV0pIHx8IChqID09PSBsZW4yIC0gMikpIHtcbiAgXHRcdFx0XHRcdHBhcnRzW2tdLnB1c2goc2VnbWVudFsxXSk7XG4gIFx0XHRcdFx0XHRrKys7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdC8vIHNpbXBsaWZ5IGVhY2ggY2xpcHBlZCBwYXJ0IG9mIHRoZSBwb2x5bGluZSBmb3IgcGVyZm9ybWFuY2VcbiAgXHRfc2ltcGxpZnlQb2ludHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBwYXJ0cyA9IHRoaXMuX3BhcnRzLFxuICBcdFx0ICAgIHRvbGVyYW5jZSA9IHRoaXMub3B0aW9ucy5zbW9vdGhGYWN0b3I7XG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBwYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRwYXJ0c1tpXSA9IHNpbXBsaWZ5KHBhcnRzW2ldLCB0b2xlcmFuY2UpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cblxuICBcdFx0dGhpcy5fY2xpcFBvaW50cygpO1xuICBcdFx0dGhpcy5fc2ltcGxpZnlQb2ludHMoKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZVBhdGgoKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVQb2x5KHRoaXMpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwLCBjbG9zZWQpIHtcbiAgXHRcdHZhciBpLCBqLCBrLCBsZW4sIGxlbjIsIHBhcnQsXG4gIFx0XHQgICAgdyA9IHRoaXMuX2NsaWNrVG9sZXJhbmNlKCk7XG5cbiAgXHRcdGlmICghdGhpcy5fcHhCb3VuZHMgfHwgIXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHApKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIFx0XHQvLyBoaXQgZGV0ZWN0aW9uIGZvciBwb2x5bGluZXNcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IHRoaXMuX3BhcnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdHBhcnQgPSB0aGlzLl9wYXJ0c1tpXTtcblxuICBcdFx0XHRmb3IgKGogPSAwLCBsZW4yID0gcGFydC5sZW5ndGgsIGsgPSBsZW4yIC0gMTsgaiA8IGxlbjI7IGsgPSBqKyspIHtcbiAgXHRcdFx0XHRpZiAoIWNsb3NlZCAmJiAoaiA9PT0gMCkpIHsgY29udGludWU7IH1cblxuICBcdFx0XHRcdGlmIChwb2ludFRvU2VnbWVudERpc3RhbmNlKHAsIHBhcnRba10sIHBhcnRbal0pIDw9IHcpIHtcbiAgXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIGZhbHNlO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5wb2x5bGluZShsYXRsbmdzOiBMYXRMbmdbXSwgb3B0aW9ucz86IFBvbHlsaW5lIG9wdGlvbnMpXG4gIC8vIEluc3RhbnRpYXRlcyBhIHBvbHlsaW5lIG9iamVjdCBnaXZlbiBhbiBhcnJheSBvZiBnZW9ncmFwaGljYWwgcG9pbnRzIGFuZFxuICAvLyBvcHRpb25hbGx5IGFuIG9wdGlvbnMgb2JqZWN0LiBZb3UgY2FuIGNyZWF0ZSBhIGBQb2x5bGluZWAgb2JqZWN0IHdpdGhcbiAgLy8gbXVsdGlwbGUgc2VwYXJhdGUgbGluZXMgKGBNdWx0aVBvbHlsaW5lYCkgYnkgcGFzc2luZyBhbiBhcnJheSBvZiBhcnJheXNcbiAgLy8gb2YgZ2VvZ3JhcGhpYyBwb2ludHMuXG4gIGZ1bmN0aW9uIHBvbHlsaW5lKGxhdGxuZ3MsIG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IFBvbHlsaW5lKGxhdGxuZ3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gUmV0cm9jb21wYXQuIEFsbG93IHBsdWdpbnMgdG8gc3VwcG9ydCBMZWFmbGV0IHZlcnNpb25zIGJlZm9yZSBhbmQgYWZ0ZXIgMS4xLlxuICBQb2x5bGluZS5fZmxhdCA9IF9mbGF0O1xuXG4gIC8qXG4gICAqIEBjbGFzcyBQb2x5Z29uXG4gICAqIEBha2EgTC5Qb2x5Z29uXG4gICAqIEBpbmhlcml0cyBQb2x5bGluZVxuICAgKlxuICAgKiBBIGNsYXNzIGZvciBkcmF3aW5nIHBvbHlnb24gb3ZlcmxheXMgb24gYSBtYXAuIEV4dGVuZHMgYFBvbHlsaW5lYC5cbiAgICpcbiAgICogTm90ZSB0aGF0IHBvaW50cyB5b3UgcGFzcyB3aGVuIGNyZWF0aW5nIGEgcG9seWdvbiBzaG91bGRuJ3QgaGF2ZSBhbiBhZGRpdGlvbmFsIGxhc3QgcG9pbnQgZXF1YWwgdG8gdGhlIGZpcnN0IG9uZSDigJQgaXQncyBiZXR0ZXIgdG8gZmlsdGVyIG91dCBzdWNoIHBvaW50cy5cbiAgICpcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gY3JlYXRlIGEgcmVkIHBvbHlnb24gZnJvbSBhbiBhcnJheSBvZiBMYXRMbmcgcG9pbnRzXG4gICAqIHZhciBsYXRsbmdzID0gW1szNywgLTEwOS4wNV0sWzQxLCAtMTA5LjAzXSxbNDEsIC0xMDIuMDVdLFszNywgLTEwMi4wNF1dO1xuICAgKlxuICAgKiB2YXIgcG9seWdvbiA9IEwucG9seWdvbihsYXRsbmdzLCB7Y29sb3I6ICdyZWQnfSkuYWRkVG8obWFwKTtcbiAgICpcbiAgICogLy8gem9vbSB0aGUgbWFwIHRvIHRoZSBwb2x5Z29uXG4gICAqIG1hcC5maXRCb3VuZHMocG9seWdvbi5nZXRCb3VuZHMoKSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcGFzcyBhbiBhcnJheSBvZiBhcnJheXMgb2YgbGF0bG5ncywgd2l0aCB0aGUgZmlyc3QgYXJyYXkgcmVwcmVzZW50aW5nIHRoZSBvdXRlciBzaGFwZSBhbmQgdGhlIG90aGVyIGFycmF5cyByZXByZXNlbnRpbmcgaG9sZXMgaW4gdGhlIG91dGVyIHNoYXBlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbGF0bG5ncyA9IFtcbiAgICogICBbWzM3LCAtMTA5LjA1XSxbNDEsIC0xMDkuMDNdLFs0MSwgLTEwMi4wNV0sWzM3LCAtMTAyLjA0XV0sIC8vIG91dGVyIHJpbmdcbiAgICogICBbWzM3LjI5LCAtMTA4LjU4XSxbNDAuNzEsIC0xMDguNThdLFs0MC43MSwgLTEwMi41MF0sWzM3LjI5LCAtMTAyLjUwXV0gLy8gaG9sZVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCB5b3UgY2FuIHBhc3MgYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSB0byByZXByZXNlbnQgYSBNdWx0aVBvbHlnb24gc2hhcGUuXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIHZhciBsYXRsbmdzID0gW1xuICAgKiAgIFsgLy8gZmlyc3QgcG9seWdvblxuICAgKiAgICAgW1szNywgLTEwOS4wNV0sWzQxLCAtMTA5LjAzXSxbNDEsIC0xMDIuMDVdLFszNywgLTEwMi4wNF1dLCAvLyBvdXRlciByaW5nXG4gICAqICAgICBbWzM3LjI5LCAtMTA4LjU4XSxbNDAuNzEsIC0xMDguNThdLFs0MC43MSwgLTEwMi41MF0sWzM3LjI5LCAtMTAyLjUwXV0gLy8gaG9sZVxuICAgKiAgIF0sXG4gICAqICAgWyAvLyBzZWNvbmQgcG9seWdvblxuICAgKiAgICAgW1s0MSwgLTExMS4wM10sWzQ1LCAtMTExLjA0XSxbNDUsIC0xMDQuMDVdLFs0MSwgLTEwNC4wNV1dXG4gICAqICAgXVxuICAgKiBdO1xuICAgKiBgYGBcbiAgICovXG5cbiAgdmFyIFBvbHlnb24gPSBQb2x5bGluZS5leHRlbmQoe1xuXG4gIFx0b3B0aW9uczoge1xuICBcdFx0ZmlsbDogdHJ1ZVxuICBcdH0sXG5cbiAgXHRpc0VtcHR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gIXRoaXMuX2xhdGxuZ3MubGVuZ3RoIHx8ICF0aGlzLl9sYXRsbmdzWzBdLmxlbmd0aDtcbiAgXHR9LFxuXG4gIFx0Z2V0Q2VudGVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyB0aHJvd3MgZXJyb3Igd2hlbiBub3QgeWV0IGFkZGVkIHRvIG1hcCBhcyB0aGlzIGNlbnRlciBjYWxjdWxhdGlvbiByZXF1aXJlcyBwcm9qZWN0ZWQgY29vcmRpbmF0ZXNcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRocm93IG5ldyBFcnJvcignTXVzdCBhZGQgbGF5ZXIgdG8gbWFwIGJlZm9yZSB1c2luZyBnZXRDZW50ZXIoKScpO1xuICBcdFx0fVxuXG4gIFx0XHR2YXIgaSwgaiwgcDEsIHAyLCBmLCBhcmVhLCB4LCB5LCBjZW50ZXIsXG4gIFx0XHQgICAgcG9pbnRzID0gdGhpcy5fcmluZ3NbMF0sXG4gIFx0XHQgICAgbGVuID0gcG9pbnRzLmxlbmd0aDtcblxuICBcdFx0aWYgKCFsZW4pIHsgcmV0dXJuIG51bGw7IH1cblxuICBcdFx0Ly8gcG9seWdvbiBjZW50cm9pZCBhbGdvcml0aG07IG9ubHkgdXNlcyB0aGUgZmlyc3QgcmluZyBpZiB0aGVyZSBhcmUgbXVsdGlwbGVcblxuICBcdFx0YXJlYSA9IHggPSB5ID0gMDtcblxuICBcdFx0Zm9yIChpID0gMCwgaiA9IGxlbiAtIDE7IGkgPCBsZW47IGogPSBpKyspIHtcbiAgXHRcdFx0cDEgPSBwb2ludHNbaV07XG4gIFx0XHRcdHAyID0gcG9pbnRzW2pdO1xuXG4gIFx0XHRcdGYgPSBwMS55ICogcDIueCAtIHAyLnkgKiBwMS54O1xuICBcdFx0XHR4ICs9IChwMS54ICsgcDIueCkgKiBmO1xuICBcdFx0XHR5ICs9IChwMS55ICsgcDIueSkgKiBmO1xuICBcdFx0XHRhcmVhICs9IGYgKiAzO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoYXJlYSA9PT0gMCkge1xuICBcdFx0XHQvLyBQb2x5Z29uIGlzIHNvIHNtYWxsIHRoYXQgYWxsIHBvaW50cyBhcmUgb24gc2FtZSBwaXhlbC5cbiAgXHRcdFx0Y2VudGVyID0gcG9pbnRzWzBdO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0Y2VudGVyID0gW3ggLyBhcmVhLCB5IC8gYXJlYV07XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhjZW50ZXIpO1xuICBcdH0sXG5cbiAgXHRfY29udmVydExhdExuZ3M6IGZ1bmN0aW9uIChsYXRsbmdzKSB7XG4gIFx0XHR2YXIgcmVzdWx0ID0gUG9seWxpbmUucHJvdG90eXBlLl9jb252ZXJ0TGF0TG5ncy5jYWxsKHRoaXMsIGxhdGxuZ3MpLFxuICBcdFx0ICAgIGxlbiA9IHJlc3VsdC5sZW5ndGg7XG5cbiAgXHRcdC8vIHJlbW92ZSBsYXN0IHBvaW50IGlmIGl0IGVxdWFscyBmaXJzdCBvbmVcbiAgXHRcdGlmIChsZW4gPj0gMiAmJiByZXN1bHRbMF0gaW5zdGFuY2VvZiBMYXRMbmcgJiYgcmVzdWx0WzBdLmVxdWFscyhyZXN1bHRbbGVuIC0gMV0pKSB7XG4gIFx0XHRcdHJlc3VsdC5wb3AoKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiByZXN1bHQ7XG4gIFx0fSxcblxuICBcdF9zZXRMYXRMbmdzOiBmdW5jdGlvbiAobGF0bG5ncykge1xuICBcdFx0UG9seWxpbmUucHJvdG90eXBlLl9zZXRMYXRMbmdzLmNhbGwodGhpcywgbGF0bG5ncyk7XG4gIFx0XHRpZiAoaXNGbGF0KHRoaXMuX2xhdGxuZ3MpKSB7XG4gIFx0XHRcdHRoaXMuX2xhdGxuZ3MgPSBbdGhpcy5fbGF0bG5nc107XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9kZWZhdWx0U2hhcGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBpc0ZsYXQodGhpcy5fbGF0bG5nc1swXSkgPyB0aGlzLl9sYXRsbmdzWzBdIDogdGhpcy5fbGF0bG5nc1swXVswXTtcbiAgXHR9LFxuXG4gIFx0X2NsaXBQb2ludHM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIHBvbHlnb25zIG5lZWQgYSBkaWZmZXJlbnQgY2xpcHBpbmcgYWxnb3JpdGhtIHNvIHdlIHJlZGVmaW5lIHRoYXRcblxuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX3JlbmRlcmVyLl9ib3VuZHMsXG4gIFx0XHQgICAgdyA9IHRoaXMub3B0aW9ucy53ZWlnaHQsXG4gIFx0XHQgICAgcCA9IG5ldyBQb2ludCh3LCB3KTtcblxuICBcdFx0Ly8gaW5jcmVhc2UgY2xpcCBwYWRkaW5nIGJ5IHN0cm9rZSB3aWR0aCB0byBhdm9pZCBzdHJva2Ugb24gY2xpcCBlZGdlc1xuICBcdFx0Ym91bmRzID0gbmV3IEJvdW5kcyhib3VuZHMubWluLnN1YnRyYWN0KHApLCBib3VuZHMubWF4LmFkZChwKSk7XG5cbiAgXHRcdHRoaXMuX3BhcnRzID0gW107XG4gIFx0XHRpZiAoIXRoaXMuX3B4Qm91bmRzIHx8ICF0aGlzLl9weEJvdW5kcy5pbnRlcnNlY3RzKGJvdW5kcykpIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLm5vQ2xpcCkge1xuICBcdFx0XHR0aGlzLl9wYXJ0cyA9IHRoaXMuX3JpbmdzO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdGZvciAodmFyIGkgPSAwLCBsZW4gPSB0aGlzLl9yaW5ncy5sZW5ndGgsIGNsaXBwZWQ7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRjbGlwcGVkID0gY2xpcFBvbHlnb24odGhpcy5fcmluZ3NbaV0sIGJvdW5kcywgdHJ1ZSk7XG4gIFx0XHRcdGlmIChjbGlwcGVkLmxlbmd0aCkge1xuICBcdFx0XHRcdHRoaXMuX3BhcnRzLnB1c2goY2xpcHBlZCk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3JlbmRlcmVyLl91cGRhdGVQb2x5KHRoaXMsIHRydWUpO1xuICBcdH0sXG5cbiAgXHQvLyBOZWVkZWQgYnkgdGhlIGBDYW52YXNgIHJlbmRlcmVyIGZvciBpbnRlcmFjdGl2aXR5XG4gIFx0X2NvbnRhaW5zUG9pbnQ6IGZ1bmN0aW9uIChwKSB7XG4gIFx0XHR2YXIgaW5zaWRlID0gZmFsc2UsXG4gIFx0XHQgICAgcGFydCwgcDEsIHAyLCBpLCBqLCBrLCBsZW4sIGxlbjI7XG5cbiAgXHRcdGlmICghdGhpcy5fcHhCb3VuZHMgfHwgIXRoaXMuX3B4Qm91bmRzLmNvbnRhaW5zKHApKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIFx0XHQvLyByYXkgY2FzdGluZyBhbGdvcml0aG0gZm9yIGRldGVjdGluZyBpZiBwb2ludCBpcyBpbiBwb2x5Z29uXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSB0aGlzLl9wYXJ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRwYXJ0ID0gdGhpcy5fcGFydHNbaV07XG5cbiAgXHRcdFx0Zm9yIChqID0gMCwgbGVuMiA9IHBhcnQubGVuZ3RoLCBrID0gbGVuMiAtIDE7IGogPCBsZW4yOyBrID0gaisrKSB7XG4gIFx0XHRcdFx0cDEgPSBwYXJ0W2pdO1xuICBcdFx0XHRcdHAyID0gcGFydFtrXTtcblxuICBcdFx0XHRcdGlmICgoKHAxLnkgPiBwLnkpICE9PSAocDIueSA+IHAueSkpICYmIChwLnggPCAocDIueCAtIHAxLngpICogKHAueSAtIHAxLnkpIC8gKHAyLnkgLSBwMS55KSArIHAxLngpKSB7XG4gIFx0XHRcdFx0XHRpbnNpZGUgPSAhaW5zaWRlO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHQvLyBhbHNvIGNoZWNrIGlmIGl0J3Mgb24gcG9seWdvbiBzdHJva2VcbiAgXHRcdHJldHVybiBpbnNpZGUgfHwgUG9seWxpbmUucHJvdG90eXBlLl9jb250YWluc1BvaW50LmNhbGwodGhpcywgcCwgdHJ1ZSk7XG4gIFx0fVxuXG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5wb2x5Z29uKGxhdGxuZ3M6IExhdExuZ1tdLCBvcHRpb25zPzogUG9seWxpbmUgb3B0aW9ucylcbiAgZnVuY3Rpb24gcG9seWdvbihsYXRsbmdzLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBQb2x5Z29uKGxhdGxuZ3MsIG9wdGlvbnMpO1xuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgR2VvSlNPTlxyXG4gICAqIEBha2EgTC5HZW9KU09OXHJcbiAgICogQGluaGVyaXRzIEZlYXR1cmVHcm91cFxyXG4gICAqXHJcbiAgICogUmVwcmVzZW50cyBhIEdlb0pTT04gb2JqZWN0IG9yIGFuIGFycmF5IG9mIEdlb0pTT04gb2JqZWN0cy4gQWxsb3dzIHlvdSB0byBwYXJzZVxyXG4gICAqIEdlb0pTT04gZGF0YSBhbmQgZGlzcGxheSBpdCBvbiB0aGUgbWFwLiBFeHRlbmRzIGBGZWF0dXJlR3JvdXBgLlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIGBgYGpzXHJcbiAgICogTC5nZW9KU09OKGRhdGEsIHtcclxuICAgKiBcdHN0eWxlOiBmdW5jdGlvbiAoZmVhdHVyZSkge1xyXG4gICAqIFx0XHRyZXR1cm4ge2NvbG9yOiBmZWF0dXJlLnByb3BlcnRpZXMuY29sb3J9O1xyXG4gICAqIFx0fVxyXG4gICAqIH0pLmJpbmRQb3B1cChmdW5jdGlvbiAobGF5ZXIpIHtcclxuICAgKiBcdHJldHVybiBsYXllci5mZWF0dXJlLnByb3BlcnRpZXMuZGVzY3JpcHRpb247XHJcbiAgICogfSkuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIEdlb0pTT04gPSBGZWF0dXJlR3JvdXAuZXh0ZW5kKHtcclxuXHJcbiAgXHQvKiBAc2VjdGlvblxyXG4gIFx0ICogQGFrYSBHZW9KU09OIG9wdGlvbnNcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIHBvaW50VG9MYXllcjogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgZGVmaW5pbmcgaG93IEdlb0pTT04gcG9pbnRzIHNwYXduIExlYWZsZXQgbGF5ZXJzLiBJdCBpcyBpbnRlcm5hbGx5XHJcbiAgXHQgKiBjYWxsZWQgd2hlbiBkYXRhIGlzIGFkZGVkLCBwYXNzaW5nIHRoZSBHZW9KU09OIHBvaW50IGZlYXR1cmUgYW5kIGl0cyBgTGF0TG5nYC5cclxuICBcdCAqIFRoZSBkZWZhdWx0IGlzIHRvIHNwYXduIGEgZGVmYXVsdCBgTWFya2VyYDpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbihnZW9Kc29uUG9pbnQsIGxhdGxuZykge1xyXG4gIFx0ICogXHRyZXR1cm4gTC5tYXJrZXIobGF0bG5nKTtcclxuICBcdCAqIH1cclxuICBcdCAqIGBgYFxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gc3R5bGU6IEZ1bmN0aW9uID0gKlxyXG4gIFx0ICogQSBgRnVuY3Rpb25gIGRlZmluaW5nIHRoZSBgUGF0aCBvcHRpb25zYCBmb3Igc3R5bGluZyBHZW9KU09OIGxpbmVzIGFuZCBwb2x5Z29ucyxcclxuICBcdCAqIGNhbGxlZCBpbnRlcm5hbGx5IHdoZW4gZGF0YSBpcyBhZGRlZC5cclxuICBcdCAqIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRvIG5vdCBvdmVycmlkZSBhbnkgZGVmYXVsdHM6XHJcbiAgXHQgKiBgYGBqc1xyXG4gIFx0ICogZnVuY3Rpb24gKGdlb0pzb25GZWF0dXJlKSB7XHJcbiAgXHQgKiBcdHJldHVybiB7fVxyXG4gIFx0ICogfVxyXG4gIFx0ICogYGBgXHJcbiAgXHQgKlxyXG4gIFx0ICogQG9wdGlvbiBvbkVhY2hGZWF0dXJlOiBGdW5jdGlvbiA9ICpcclxuICBcdCAqIEEgYEZ1bmN0aW9uYCB0aGF0IHdpbGwgYmUgY2FsbGVkIG9uY2UgZm9yIGVhY2ggY3JlYXRlZCBgRmVhdHVyZWAsIGFmdGVyIGl0IGhhc1xyXG4gIFx0ICogYmVlbiBjcmVhdGVkIGFuZCBzdHlsZWQuIFVzZWZ1bCBmb3IgYXR0YWNoaW5nIGV2ZW50cyBhbmQgcG9wdXBzIHRvIGZlYXR1cmVzLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdG8gZG8gbm90aGluZyB3aXRoIHRoZSBuZXdseSBjcmVhdGVkIGxheWVyczpcclxuICBcdCAqIGBgYGpzXHJcbiAgXHQgKiBmdW5jdGlvbiAoZmVhdHVyZSwgbGF5ZXIpIHt9XHJcbiAgXHQgKiBgYGBcclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIGZpbHRlcjogRnVuY3Rpb24gPSAqXHJcbiAgXHQgKiBBIGBGdW5jdGlvbmAgdGhhdCB3aWxsIGJlIHVzZWQgdG8gZGVjaWRlIHdoZXRoZXIgdG8gaW5jbHVkZSBhIGZlYXR1cmUgb3Igbm90LlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdG8gaW5jbHVkZSBhbGwgZmVhdHVyZXM6XHJcbiAgXHQgKiBgYGBqc1xyXG4gIFx0ICogZnVuY3Rpb24gKGdlb0pzb25GZWF0dXJlKSB7XHJcbiAgXHQgKiBcdHJldHVybiB0cnVlO1xyXG4gIFx0ICogfVxyXG4gIFx0ICogYGBgXHJcbiAgXHQgKiBOb3RlOiBkeW5hbWljYWxseSBjaGFuZ2luZyB0aGUgYGZpbHRlcmAgb3B0aW9uIHdpbGwgaGF2ZSBlZmZlY3Qgb25seSBvbiBuZXdseVxyXG4gIFx0ICogYWRkZWQgZGF0YS4gSXQgd2lsbCBfbm90XyByZS1ldmFsdWF0ZSBhbHJlYWR5IGluY2x1ZGVkIGZlYXR1cmVzLlxyXG4gIFx0ICpcclxuICBcdCAqIEBvcHRpb24gY29vcmRzVG9MYXRMbmc6IEZ1bmN0aW9uID0gKlxyXG4gIFx0ICogQSBgRnVuY3Rpb25gIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBjb252ZXJ0aW5nIEdlb0pTT04gY29vcmRpbmF0ZXMgdG8gYExhdExuZ2BzLlxyXG4gIFx0ICogVGhlIGRlZmF1bHQgaXMgdGhlIGBjb29yZHNUb0xhdExuZ2Agc3RhdGljIG1ldGhvZC5cclxuICBcdCAqXHJcbiAgXHQgKiBAb3B0aW9uIG1hcmtlcnNJbmhlcml0T3B0aW9uczogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHQgKiBXaGV0aGVyIGRlZmF1bHQgTWFya2VycyBmb3IgXCJQb2ludFwiIHR5cGUgRmVhdHVyZXMgaW5oZXJpdCBmcm9tIGdyb3VwIG9wdGlvbnMuXHJcbiAgXHQgKi9cclxuXHJcbiAgXHRpbml0aWFsaXplOiBmdW5jdGlvbiAoZ2VvanNvbiwgb3B0aW9ucykge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fbGF5ZXJzID0ge307XHJcblxyXG4gIFx0XHRpZiAoZ2VvanNvbikge1xyXG4gIFx0XHRcdHRoaXMuYWRkRGF0YShnZW9qc29uKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGFkZERhdGEoIDxHZW9KU09OPiBkYXRhICk6IHRoaXNcclxuICBcdC8vIEFkZHMgYSBHZW9KU09OIG9iamVjdCB0byB0aGUgbGF5ZXIuXHJcbiAgXHRhZGREYXRhOiBmdW5jdGlvbiAoZ2VvanNvbikge1xyXG4gIFx0XHR2YXIgZmVhdHVyZXMgPSBpc0FycmF5KGdlb2pzb24pID8gZ2VvanNvbiA6IGdlb2pzb24uZmVhdHVyZXMsXHJcbiAgXHRcdCAgICBpLCBsZW4sIGZlYXR1cmU7XHJcblxyXG4gIFx0XHRpZiAoZmVhdHVyZXMpIHtcclxuICBcdFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBmZWF0dXJlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRcdFx0Ly8gb25seSBhZGQgdGhpcyBpZiBnZW9tZXRyeSBvciBnZW9tZXRyaWVzIGFyZSBzZXQgYW5kIG5vdCBudWxsXHJcbiAgXHRcdFx0XHRmZWF0dXJlID0gZmVhdHVyZXNbaV07XHJcbiAgXHRcdFx0XHRpZiAoZmVhdHVyZS5nZW9tZXRyaWVzIHx8IGZlYXR1cmUuZ2VvbWV0cnkgfHwgZmVhdHVyZS5mZWF0dXJlcyB8fCBmZWF0dXJlLmNvb3JkaW5hdGVzKSB7XHJcbiAgXHRcdFx0XHRcdHRoaXMuYWRkRGF0YShmZWF0dXJlKTtcclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xyXG5cclxuICBcdFx0aWYgKG9wdGlvbnMuZmlsdGVyICYmICFvcHRpb25zLmZpbHRlcihnZW9qc29uKSkgeyByZXR1cm4gdGhpczsgfVxyXG5cclxuICBcdFx0dmFyIGxheWVyID0gZ2VvbWV0cnlUb0xheWVyKGdlb2pzb24sIG9wdGlvbnMpO1xyXG4gIFx0XHRpZiAoIWxheWVyKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuICBcdFx0bGF5ZXIuZmVhdHVyZSA9IGFzRmVhdHVyZShnZW9qc29uKTtcclxuXHJcbiAgXHRcdGxheWVyLmRlZmF1bHRPcHRpb25zID0gbGF5ZXIub3B0aW9ucztcclxuICBcdFx0dGhpcy5yZXNldFN0eWxlKGxheWVyKTtcclxuXHJcbiAgXHRcdGlmIChvcHRpb25zLm9uRWFjaEZlYXR1cmUpIHtcclxuICBcdFx0XHRvcHRpb25zLm9uRWFjaEZlYXR1cmUoZ2VvanNvbiwgbGF5ZXIpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihsYXllcik7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgcmVzZXRTdHlsZSggPFBhdGg+IGxheWVyPyApOiB0aGlzXHJcbiAgXHQvLyBSZXNldHMgdGhlIGdpdmVuIHZlY3RvciBsYXllcidzIHN0eWxlIHRvIHRoZSBvcmlnaW5hbCBHZW9KU09OIHN0eWxlLCB1c2VmdWwgZm9yIHJlc2V0dGluZyBzdHlsZSBhZnRlciBob3ZlciBldmVudHMuXHJcbiAgXHQvLyBJZiBgbGF5ZXJgIGlzIG9taXR0ZWQsIHRoZSBzdHlsZSBvZiBhbGwgZmVhdHVyZXMgaW4gdGhlIGN1cnJlbnQgbGF5ZXIgaXMgcmVzZXQuXHJcbiAgXHRyZXNldFN0eWxlOiBmdW5jdGlvbiAobGF5ZXIpIHtcclxuICBcdFx0aWYgKGxheWVyID09PSB1bmRlZmluZWQpIHtcclxuICBcdFx0XHRyZXR1cm4gdGhpcy5lYWNoTGF5ZXIodGhpcy5yZXNldFN0eWxlLCB0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0XHQvLyByZXNldCBhbnkgY3VzdG9tIHN0eWxlc1xyXG4gIFx0XHRsYXllci5vcHRpb25zID0gZXh0ZW5kKHt9LCBsYXllci5kZWZhdWx0T3B0aW9ucyk7XHJcbiAgXHRcdHRoaXMuX3NldExheWVyU3R5bGUobGF5ZXIsIHRoaXMub3B0aW9ucy5zdHlsZSk7XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFN0eWxlKCA8RnVuY3Rpb24+IHN0eWxlICk6IHRoaXNcclxuICBcdC8vIENoYW5nZXMgc3R5bGVzIG9mIEdlb0pTT04gdmVjdG9yIGxheWVycyB3aXRoIHRoZSBnaXZlbiBzdHlsZSBmdW5jdGlvbi5cclxuICBcdHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGUpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdHRoaXMuX3NldExheWVyU3R5bGUobGF5ZXIsIHN0eWxlKTtcclxuICBcdFx0fSwgdGhpcyk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9zZXRMYXllclN0eWxlOiBmdW5jdGlvbiAobGF5ZXIsIHN0eWxlKSB7XHJcbiAgXHRcdGlmIChsYXllci5zZXRTdHlsZSkge1xyXG4gIFx0XHRcdGlmICh0eXBlb2Ygc3R5bGUgPT09ICdmdW5jdGlvbicpIHtcclxuICBcdFx0XHRcdHN0eWxlID0gc3R5bGUobGF5ZXIuZmVhdHVyZSk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdGxheWVyLnNldFN0eWxlKHN0eWxlKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAc2VjdGlvblxyXG4gIC8vIFRoZXJlIGFyZSBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggY2FuIGJlIGNhbGxlZCB3aXRob3V0IGluc3RhbnRpYXRpbmcgTC5HZW9KU09OOlxyXG5cclxuICAvLyBAZnVuY3Rpb24gZ2VvbWV0cnlUb0xheWVyKGZlYXR1cmVEYXRhOiBPYmplY3QsIG9wdGlvbnM/OiBHZW9KU09OIG9wdGlvbnMpOiBMYXllclxyXG4gIC8vIENyZWF0ZXMgYSBgTGF5ZXJgIGZyb20gYSBnaXZlbiBHZW9KU09OIGZlYXR1cmUuIENhbiB1c2UgYSBjdXN0b21cclxuICAvLyBbYHBvaW50VG9MYXllcmBdKCNnZW9qc29uLXBvaW50dG9sYXllcikgYW5kL29yIFtgY29vcmRzVG9MYXRMbmdgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZylcclxuICAvLyBmdW5jdGlvbnMgaWYgcHJvdmlkZWQgYXMgb3B0aW9ucy5cclxuICBmdW5jdGlvbiBnZW9tZXRyeVRvTGF5ZXIoZ2VvanNvbiwgb3B0aW9ucykge1xyXG5cclxuICBcdHZhciBnZW9tZXRyeSA9IGdlb2pzb24udHlwZSA9PT0gJ0ZlYXR1cmUnID8gZ2VvanNvbi5nZW9tZXRyeSA6IGdlb2pzb24sXHJcbiAgXHQgICAgY29vcmRzID0gZ2VvbWV0cnkgPyBnZW9tZXRyeS5jb29yZGluYXRlcyA6IG51bGwsXHJcbiAgXHQgICAgbGF5ZXJzID0gW10sXHJcbiAgXHQgICAgcG9pbnRUb0xheWVyID0gb3B0aW9ucyAmJiBvcHRpb25zLnBvaW50VG9MYXllcixcclxuICBcdCAgICBfY29vcmRzVG9MYXRMbmcgPSBvcHRpb25zICYmIG9wdGlvbnMuY29vcmRzVG9MYXRMbmcgfHwgY29vcmRzVG9MYXRMbmcsXHJcbiAgXHQgICAgbGF0bG5nLCBsYXRsbmdzLCBpLCBsZW47XHJcblxyXG4gIFx0aWYgKCFjb29yZHMgJiYgIWdlb21ldHJ5KSB7XHJcbiAgXHRcdHJldHVybiBudWxsO1xyXG4gIFx0fVxyXG5cclxuICBcdHN3aXRjaCAoZ2VvbWV0cnkudHlwZSkge1xyXG4gIFx0Y2FzZSAnUG9pbnQnOlxyXG4gIFx0XHRsYXRsbmcgPSBfY29vcmRzVG9MYXRMbmcoY29vcmRzKTtcclxuICBcdFx0cmV0dXJuIF9wb2ludFRvTGF5ZXIocG9pbnRUb0xheWVyLCBnZW9qc29uLCBsYXRsbmcsIG9wdGlvbnMpO1xyXG5cclxuICBcdGNhc2UgJ011bHRpUG9pbnQnOlxyXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb29yZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHRsYXRsbmcgPSBfY29vcmRzVG9MYXRMbmcoY29vcmRzW2ldKTtcclxuICBcdFx0XHRsYXllcnMucHVzaChfcG9pbnRUb0xheWVyKHBvaW50VG9MYXllciwgZ2VvanNvbiwgbGF0bG5nLCBvcHRpb25zKSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIG5ldyBGZWF0dXJlR3JvdXAobGF5ZXJzKTtcclxuXHJcbiAgXHRjYXNlICdMaW5lU3RyaW5nJzpcclxuICBcdGNhc2UgJ011bHRpTGluZVN0cmluZyc6XHJcbiAgXHRcdGxhdGxuZ3MgPSBjb29yZHNUb0xhdExuZ3MoY29vcmRzLCBnZW9tZXRyeS50eXBlID09PSAnTGluZVN0cmluZycgPyAwIDogMSwgX2Nvb3Jkc1RvTGF0TG5nKTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2x5bGluZShsYXRsbmdzLCBvcHRpb25zKTtcclxuXHJcbiAgXHRjYXNlICdQb2x5Z29uJzpcclxuICBcdGNhc2UgJ011bHRpUG9seWdvbic6XHJcbiAgXHRcdGxhdGxuZ3MgPSBjb29yZHNUb0xhdExuZ3MoY29vcmRzLCBnZW9tZXRyeS50eXBlID09PSAnUG9seWdvbicgPyAxIDogMiwgX2Nvb3Jkc1RvTGF0TG5nKTtcclxuICBcdFx0cmV0dXJuIG5ldyBQb2x5Z29uKGxhdGxuZ3MsIG9wdGlvbnMpO1xyXG5cclxuICBcdGNhc2UgJ0dlb21ldHJ5Q29sbGVjdGlvbic6XHJcbiAgXHRcdGZvciAoaSA9IDAsIGxlbiA9IGdlb21ldHJ5Lmdlb21ldHJpZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICBcdFx0XHR2YXIgbGF5ZXIgPSBnZW9tZXRyeVRvTGF5ZXIoe1xyXG4gIFx0XHRcdFx0Z2VvbWV0cnk6IGdlb21ldHJ5Lmdlb21ldHJpZXNbaV0sXHJcbiAgXHRcdFx0XHR0eXBlOiAnRmVhdHVyZScsXHJcbiAgXHRcdFx0XHRwcm9wZXJ0aWVzOiBnZW9qc29uLnByb3BlcnRpZXNcclxuICBcdFx0XHR9LCBvcHRpb25zKTtcclxuXHJcbiAgXHRcdFx0aWYgKGxheWVyKSB7XHJcbiAgXHRcdFx0XHRsYXllcnMucHVzaChsYXllcik7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBuZXcgRmVhdHVyZUdyb3VwKGxheWVycyk7XHJcblxyXG4gIFx0ZGVmYXVsdDpcclxuICBcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEdlb0pTT04gb2JqZWN0LicpO1xyXG4gIFx0fVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gX3BvaW50VG9MYXllcihwb2ludFRvTGF5ZXJGbiwgZ2VvanNvbiwgbGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gcG9pbnRUb0xheWVyRm4gP1xyXG4gIFx0XHRwb2ludFRvTGF5ZXJGbihnZW9qc29uLCBsYXRsbmcpIDpcclxuICBcdFx0bmV3IE1hcmtlcihsYXRsbmcsIG9wdGlvbnMgJiYgb3B0aW9ucy5tYXJrZXJzSW5oZXJpdE9wdGlvbnMgJiYgb3B0aW9ucyk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gY29vcmRzVG9MYXRMbmcoY29vcmRzOiBBcnJheSk6IExhdExuZ1xyXG4gIC8vIENyZWF0ZXMgYSBgTGF0TG5nYCBvYmplY3QgZnJvbSBhbiBhcnJheSBvZiAyIG51bWJlcnMgKGxvbmdpdHVkZSwgbGF0aXR1ZGUpXHJcbiAgLy8gb3IgMyBudW1iZXJzIChsb25naXR1ZGUsIGxhdGl0dWRlLCBhbHRpdHVkZSkgdXNlZCBpbiBHZW9KU09OIGZvciBwb2ludHMuXHJcbiAgZnVuY3Rpb24gY29vcmRzVG9MYXRMbmcoY29vcmRzKSB7XHJcbiAgXHRyZXR1cm4gbmV3IExhdExuZyhjb29yZHNbMV0sIGNvb3Jkc1swXSwgY29vcmRzWzJdKTtcclxuICB9XHJcblxyXG4gIC8vIEBmdW5jdGlvbiBjb29yZHNUb0xhdExuZ3MoY29vcmRzOiBBcnJheSwgbGV2ZWxzRGVlcD86IE51bWJlciwgY29vcmRzVG9MYXRMbmc/OiBGdW5jdGlvbik6IEFycmF5XHJcbiAgLy8gQ3JlYXRlcyBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXkgb2YgYExhdExuZ2BzIGZyb20gYSBHZW9KU09OIGNvb3JkaW5hdGVzIGFycmF5LlxyXG4gIC8vIGBsZXZlbHNEZWVwYCBzcGVjaWZpZXMgdGhlIG5lc3RpbmcgbGV2ZWwgKDAgaXMgZm9yIGFuIGFycmF5IG9mIHBvaW50cywgMSBmb3IgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIHBvaW50cywgZXRjLiwgMCBieSBkZWZhdWx0KS5cclxuICAvLyBDYW4gdXNlIGEgY3VzdG9tIFtgY29vcmRzVG9MYXRMbmdgXSgjZ2VvanNvbi1jb29yZHN0b2xhdGxuZykgZnVuY3Rpb24uXHJcbiAgZnVuY3Rpb24gY29vcmRzVG9MYXRMbmdzKGNvb3JkcywgbGV2ZWxzRGVlcCwgX2Nvb3Jkc1RvTGF0TG5nKSB7XHJcbiAgXHR2YXIgbGF0bG5ncyA9IFtdO1xyXG5cclxuICBcdGZvciAodmFyIGkgPSAwLCBsZW4gPSBjb29yZHMubGVuZ3RoLCBsYXRsbmc7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRsYXRsbmcgPSBsZXZlbHNEZWVwID9cclxuICBcdFx0XHRjb29yZHNUb0xhdExuZ3MoY29vcmRzW2ldLCBsZXZlbHNEZWVwIC0gMSwgX2Nvb3Jkc1RvTGF0TG5nKSA6XHJcbiAgXHRcdFx0KF9jb29yZHNUb0xhdExuZyB8fCBjb29yZHNUb0xhdExuZykoY29vcmRzW2ldKTtcclxuXHJcbiAgXHRcdGxhdGxuZ3MucHVzaChsYXRsbmcpO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBsYXRsbmdzO1xyXG4gIH1cclxuXHJcbiAgLy8gQGZ1bmN0aW9uIGxhdExuZ1RvQ29vcmRzKGxhdGxuZzogTGF0TG5nLCBwcmVjaXNpb24/OiBOdW1iZXIpOiBBcnJheVxyXG4gIC8vIFJldmVyc2Ugb2YgW2Bjb29yZHNUb0xhdExuZ2BdKCNnZW9qc29uLWNvb3Jkc3RvbGF0bG5nKVxyXG4gIGZ1bmN0aW9uIGxhdExuZ1RvQ29vcmRzKGxhdGxuZywgcHJlY2lzaW9uKSB7XHJcbiAgXHRwcmVjaXNpb24gPSB0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyA/IHByZWNpc2lvbiA6IDY7XHJcbiAgXHRyZXR1cm4gbGF0bG5nLmFsdCAhPT0gdW5kZWZpbmVkID9cclxuICBcdFx0W2Zvcm1hdE51bShsYXRsbmcubG5nLCBwcmVjaXNpb24pLCBmb3JtYXROdW0obGF0bG5nLmxhdCwgcHJlY2lzaW9uKSwgZm9ybWF0TnVtKGxhdGxuZy5hbHQsIHByZWNpc2lvbildIDpcclxuICBcdFx0W2Zvcm1hdE51bShsYXRsbmcubG5nLCBwcmVjaXNpb24pLCBmb3JtYXROdW0obGF0bG5nLmxhdCwgcHJlY2lzaW9uKV07XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gbGF0TG5nc1RvQ29vcmRzKGxhdGxuZ3M6IEFycmF5LCBsZXZlbHNEZWVwPzogTnVtYmVyLCBjbG9zZWQ/OiBCb29sZWFuKTogQXJyYXlcclxuICAvLyBSZXZlcnNlIG9mIFtgY29vcmRzVG9MYXRMbmdzYF0oI2dlb2pzb24tY29vcmRzdG9sYXRsbmdzKVxyXG4gIC8vIGBjbG9zZWRgIGRldGVybWluZXMgd2hldGhlciB0aGUgZmlyc3QgcG9pbnQgc2hvdWxkIGJlIGFwcGVuZGVkIHRvIHRoZSBlbmQgb2YgdGhlIGFycmF5IHRvIGNsb3NlIHRoZSBmZWF0dXJlLCBvbmx5IHVzZWQgd2hlbiBgbGV2ZWxzRGVlcGAgaXMgMC4gRmFsc2UgYnkgZGVmYXVsdC5cclxuICBmdW5jdGlvbiBsYXRMbmdzVG9Db29yZHMobGF0bG5ncywgbGV2ZWxzRGVlcCwgY2xvc2VkLCBwcmVjaXNpb24pIHtcclxuICBcdHZhciBjb29yZHMgPSBbXTtcclxuXHJcbiAgXHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF0bG5ncy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gIFx0XHRjb29yZHMucHVzaChsZXZlbHNEZWVwID9cclxuICBcdFx0XHRsYXRMbmdzVG9Db29yZHMobGF0bG5nc1tpXSwgbGV2ZWxzRGVlcCAtIDEsIGNsb3NlZCwgcHJlY2lzaW9uKSA6XHJcbiAgXHRcdFx0bGF0TG5nVG9Db29yZHMobGF0bG5nc1tpXSwgcHJlY2lzaW9uKSk7XHJcbiAgXHR9XHJcblxyXG4gIFx0aWYgKCFsZXZlbHNEZWVwICYmIGNsb3NlZCkge1xyXG4gIFx0XHRjb29yZHMucHVzaChjb29yZHNbMF0pO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiBjb29yZHM7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRGZWF0dXJlKGxheWVyLCBuZXdHZW9tZXRyeSkge1xyXG4gIFx0cmV0dXJuIGxheWVyLmZlYXR1cmUgP1xyXG4gIFx0XHRleHRlbmQoe30sIGxheWVyLmZlYXR1cmUsIHtnZW9tZXRyeTogbmV3R2VvbWV0cnl9KSA6XHJcbiAgXHRcdGFzRmVhdHVyZShuZXdHZW9tZXRyeSk7XHJcbiAgfVxyXG5cclxuICAvLyBAZnVuY3Rpb24gYXNGZWF0dXJlKGdlb2pzb246IE9iamVjdCk6IE9iamVjdFxyXG4gIC8vIE5vcm1hbGl6ZSBHZW9KU09OIGdlb21ldHJpZXMvZmVhdHVyZXMgaW50byBHZW9KU09OIGZlYXR1cmVzLlxyXG4gIGZ1bmN0aW9uIGFzRmVhdHVyZShnZW9qc29uKSB7XHJcbiAgXHRpZiAoZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZScgfHwgZ2VvanNvbi50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XHJcbiAgXHRcdHJldHVybiBnZW9qc29uO1xyXG4gIFx0fVxyXG5cclxuICBcdHJldHVybiB7XHJcbiAgXHRcdHR5cGU6ICdGZWF0dXJlJyxcclxuICBcdFx0cHJvcGVydGllczoge30sXHJcbiAgXHRcdGdlb21ldHJ5OiBnZW9qc29uXHJcbiAgXHR9O1xyXG4gIH1cclxuXHJcbiAgdmFyIFBvaW50VG9HZW9KU09OID0ge1xyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHJldHVybiBnZXRGZWF0dXJlKHRoaXMsIHtcclxuICBcdFx0XHR0eXBlOiAnUG9pbnQnLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBsYXRMbmdUb0Nvb3Jkcyh0aGlzLmdldExhdExuZygpLCBwcmVjaXNpb24pXHJcbiAgXHRcdH0pO1xyXG4gIFx0fVxyXG4gIH07XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgTWFya2VyXHJcbiAgLy8gQHNlY3Rpb24gT3RoZXIgbWV0aG9kc1xyXG4gIC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcik6IE9iamVjdFxyXG4gIC8vIGBwcmVjaXNpb25gIGlzIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgZm9yIGNvb3JkaW5hdGVzLlxyXG4gIC8vIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDYgcGxhY2VzLlxyXG4gIC8vIFJldHVybnMgYSBbYEdlb0pTT05gXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXJrZXIgKGFzIGEgR2VvSlNPTiBgUG9pbnRgIEZlYXR1cmUpLlxyXG4gIE1hcmtlci5pbmNsdWRlKFBvaW50VG9HZW9KU09OKTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBDaXJjbGVNYXJrZXJcclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXIpOiBPYmplY3RcclxuICAvLyBgcHJlY2lzaW9uYCBpcyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBjb29yZGluYXRlcy5cclxuICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2lyY2xlIG1hcmtlciAoYXMgYSBHZW9KU09OIGBQb2ludGAgRmVhdHVyZSkuXHJcbiAgQ2lyY2xlLmluY2x1ZGUoUG9pbnRUb0dlb0pTT04pO1xyXG4gIENpcmNsZU1hcmtlci5pbmNsdWRlKFBvaW50VG9HZW9KU09OKTtcclxuXHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgUG9seWxpbmVcclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXIpOiBPYmplY3RcclxuICAvLyBgcHJlY2lzaW9uYCBpcyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBjb29yZGluYXRlcy5cclxuICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9seWxpbmUgKGFzIGEgR2VvSlNPTiBgTGluZVN0cmluZ2Agb3IgYE11bHRpTGluZVN0cmluZ2AgRmVhdHVyZSkuXHJcbiAgUG9seWxpbmUuaW5jbHVkZSh7XHJcbiAgXHR0b0dlb0pTT046IGZ1bmN0aW9uIChwcmVjaXNpb24pIHtcclxuICBcdFx0dmFyIG11bHRpID0gIWlzRmxhdCh0aGlzLl9sYXRsbmdzKTtcclxuXHJcbiAgXHRcdHZhciBjb29yZHMgPSBsYXRMbmdzVG9Db29yZHModGhpcy5fbGF0bG5ncywgbXVsdGkgPyAxIDogMCwgZmFsc2UsIHByZWNpc2lvbik7XHJcblxyXG4gIFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0dHlwZTogKG11bHRpID8gJ011bHRpJyA6ICcnKSArICdMaW5lU3RyaW5nJyxcclxuICBcdFx0XHRjb29yZGluYXRlczogY29vcmRzXHJcbiAgXHRcdH0pO1xyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIFBvbHlnb25cclxuICAvLyBAbWV0aG9kIHRvR2VvSlNPTihwcmVjaXNpb24/OiBOdW1iZXIpOiBPYmplY3RcclxuICAvLyBgcHJlY2lzaW9uYCBpcyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGZvciBjb29yZGluYXRlcy5cclxuICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICAvLyBSZXR1cm5zIGEgW2BHZW9KU09OYF0oaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HZW9KU09OKSByZXByZXNlbnRhdGlvbiBvZiB0aGUgcG9seWdvbiAoYXMgYSBHZW9KU09OIGBQb2x5Z29uYCBvciBgTXVsdGlQb2x5Z29uYCBGZWF0dXJlKS5cclxuICBQb2x5Z29uLmluY2x1ZGUoe1xyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHZhciBob2xlcyA9ICFpc0ZsYXQodGhpcy5fbGF0bG5ncyksXHJcbiAgXHRcdCAgICBtdWx0aSA9IGhvbGVzICYmICFpc0ZsYXQodGhpcy5fbGF0bG5nc1swXSk7XHJcblxyXG4gIFx0XHR2YXIgY29vcmRzID0gbGF0TG5nc1RvQ29vcmRzKHRoaXMuX2xhdGxuZ3MsIG11bHRpID8gMiA6IGhvbGVzID8gMSA6IDAsIHRydWUsIHByZWNpc2lvbik7XHJcblxyXG4gIFx0XHRpZiAoIWhvbGVzKSB7XHJcbiAgXHRcdFx0Y29vcmRzID0gW2Nvb3Jkc107XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBnZXRGZWF0dXJlKHRoaXMsIHtcclxuICBcdFx0XHR0eXBlOiAobXVsdGkgPyAnTXVsdGknIDogJycpICsgJ1BvbHlnb24nLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBjb29yZHNcclxuICBcdFx0fSk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAbmFtZXNwYWNlIExheWVyR3JvdXBcclxuICBMYXllckdyb3VwLmluY2x1ZGUoe1xyXG4gIFx0dG9NdWx0aVBvaW50OiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcbiAgXHRcdHZhciBjb29yZHMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdGNvb3Jkcy5wdXNoKGxheWVyLnRvR2VvSlNPTihwcmVjaXNpb24pLmdlb21ldHJ5LmNvb3JkaW5hdGVzKTtcclxuICBcdFx0fSk7XHJcblxyXG4gIFx0XHRyZXR1cm4gZ2V0RmVhdHVyZSh0aGlzLCB7XHJcbiAgXHRcdFx0dHlwZTogJ011bHRpUG9pbnQnLFxyXG4gIFx0XHRcdGNvb3JkaW5hdGVzOiBjb29yZHNcclxuICBcdFx0fSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9HZW9KU09OKHByZWNpc2lvbj86IE51bWJlcik6IE9iamVjdFxyXG4gIFx0Ly8gYHByZWNpc2lvbmAgaXMgdGhlIG51bWJlciBvZiBkZWNpbWFsIHBsYWNlcyBmb3IgY29vcmRpbmF0ZXMuXHJcbiAgXHQvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA2IHBsYWNlcy5cclxuICBcdC8vIFJldHVybnMgYSBbYEdlb0pTT05gXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0dlb0pTT04pIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBsYXllciBncm91cCAoYXMgYSBHZW9KU09OIGBGZWF0dXJlQ29sbGVjdGlvbmAsIGBHZW9tZXRyeUNvbGxlY3Rpb25gLCBvciBgTXVsdGlQb2ludGApLlxyXG4gIFx0dG9HZW9KU09OOiBmdW5jdGlvbiAocHJlY2lzaW9uKSB7XHJcblxyXG4gIFx0XHR2YXIgdHlwZSA9IHRoaXMuZmVhdHVyZSAmJiB0aGlzLmZlYXR1cmUuZ2VvbWV0cnkgJiYgdGhpcy5mZWF0dXJlLmdlb21ldHJ5LnR5cGU7XHJcblxyXG4gIFx0XHRpZiAodHlwZSA9PT0gJ011bHRpUG9pbnQnKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXMudG9NdWx0aVBvaW50KHByZWNpc2lvbik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBpc0dlb21ldHJ5Q29sbGVjdGlvbiA9IHR5cGUgPT09ICdHZW9tZXRyeUNvbGxlY3Rpb24nLFxyXG4gIFx0XHQgICAganNvbnMgPSBbXTtcclxuXHJcbiAgXHRcdHRoaXMuZWFjaExheWVyKGZ1bmN0aW9uIChsYXllcikge1xyXG4gIFx0XHRcdGlmIChsYXllci50b0dlb0pTT04pIHtcclxuICBcdFx0XHRcdHZhciBqc29uID0gbGF5ZXIudG9HZW9KU09OKHByZWNpc2lvbik7XHJcbiAgXHRcdFx0XHRpZiAoaXNHZW9tZXRyeUNvbGxlY3Rpb24pIHtcclxuICBcdFx0XHRcdFx0anNvbnMucHVzaChqc29uLmdlb21ldHJ5KTtcclxuICBcdFx0XHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0XHRcdHZhciBmZWF0dXJlID0gYXNGZWF0dXJlKGpzb24pO1xyXG4gIFx0XHRcdFx0XHQvLyBTcXVhc2ggbmVzdGVkIGZlYXR1cmUgY29sbGVjdGlvbnNcclxuICBcdFx0XHRcdFx0aWYgKGZlYXR1cmUudHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xyXG4gIFx0XHRcdFx0XHRcdGpzb25zLnB1c2guYXBwbHkoanNvbnMsIGZlYXR1cmUuZmVhdHVyZXMpO1xyXG4gIFx0XHRcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0XHRcdGpzb25zLnB1c2goZmVhdHVyZSk7XHJcbiAgXHRcdFx0XHRcdH1cclxuICBcdFx0XHRcdH1cclxuICBcdFx0XHR9XHJcbiAgXHRcdH0pO1xyXG5cclxuICBcdFx0aWYgKGlzR2VvbWV0cnlDb2xsZWN0aW9uKSB7XHJcbiAgXHRcdFx0cmV0dXJuIGdldEZlYXR1cmUodGhpcywge1xyXG4gIFx0XHRcdFx0Z2VvbWV0cmllczoganNvbnMsXHJcbiAgXHRcdFx0XHR0eXBlOiAnR2VvbWV0cnlDb2xsZWN0aW9uJ1xyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4ge1xyXG4gIFx0XHRcdHR5cGU6ICdGZWF0dXJlQ29sbGVjdGlvbicsXHJcbiAgXHRcdFx0ZmVhdHVyZXM6IGpzb25zXHJcbiAgXHRcdH07XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgR2VvSlNPTlxyXG4gIC8vIEBmYWN0b3J5IEwuZ2VvSlNPTihnZW9qc29uPzogT2JqZWN0LCBvcHRpb25zPzogR2VvSlNPTiBvcHRpb25zKVxyXG4gIC8vIENyZWF0ZXMgYSBHZW9KU09OIGxheWVyLiBPcHRpb25hbGx5IGFjY2VwdHMgYW4gb2JqZWN0IGluXHJcbiAgLy8gW0dlb0pTT04gZm9ybWF0XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzk0NikgdG8gZGlzcGxheSBvbiB0aGUgbWFwXHJcbiAgLy8gKHlvdSBjYW4gYWx0ZXJuYXRpdmVseSBhZGQgaXQgbGF0ZXIgd2l0aCBgYWRkRGF0YWAgbWV0aG9kKSBhbmQgYW4gYG9wdGlvbnNgIG9iamVjdC5cclxuICBmdW5jdGlvbiBnZW9KU09OKGdlb2pzb24sIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgR2VvSlNPTihnZW9qc29uLCBvcHRpb25zKTtcclxuICB9XHJcblxyXG4gIC8vIEJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXHJcbiAgdmFyIGdlb0pzb24gPSBnZW9KU09OO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIEltYWdlT3ZlcmxheVxyXG4gICAqIEBha2EgTC5JbWFnZU92ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgSW50ZXJhY3RpdmUgbGF5ZXJcclxuICAgKlxyXG4gICAqIFVzZWQgdG8gbG9hZCBhbmQgZGlzcGxheSBhIHNpbmdsZSBpbWFnZSBvdmVyIHNwZWNpZmljIGJvdW5kcyBvZiB0aGUgbWFwLiBFeHRlbmRzIGBMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgaW1hZ2VVcmwgPSAnaHR0cDovL3d3dy5saWIudXRleGFzLmVkdS9tYXBzL2hpc3RvcmljYWwvbmV3YXJrX25qXzE5MjIuanBnJyxcclxuICAgKiBcdGltYWdlQm91bmRzID0gW1s0MC43MTIyMTYsIC03NC4yMjY1NV0sIFs0MC43NzM5NDEsIC03NC4xMjU0NF1dO1xyXG4gICAqIEwuaW1hZ2VPdmVybGF5KGltYWdlVXJsLCBpbWFnZUJvdW5kcykuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKi9cclxuXHJcbiAgdmFyIEltYWdlT3ZlcmxheSA9IExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgSW1hZ2VPdmVybGF5IG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBvcGFjaXR5OiBOdW1iZXIgPSAxLjBcclxuICBcdFx0Ly8gVGhlIG9wYWNpdHkgb2YgdGhlIGltYWdlIG92ZXJsYXkuXHJcbiAgXHRcdG9wYWNpdHk6IDEsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGFsdDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVGV4dCBmb3IgdGhlIGBhbHRgIGF0dHJpYnV0ZSBvZiB0aGUgaW1hZ2UgKHVzZWZ1bCBmb3IgYWNjZXNzaWJpbGl0eSkuXHJcbiAgXHRcdGFsdDogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGludGVyYWN0aXZlOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgLCB0aGUgaW1hZ2Ugb3ZlcmxheSB3aWxsIGVtaXQgW21vdXNlIGV2ZW50c10oI2ludGVyYWN0aXZlLWxheWVyKSB3aGVuIGNsaWNrZWQgb3IgaG92ZXJlZC5cclxuICBcdFx0aW50ZXJhY3RpdmU6IGZhbHNlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjcm9zc09yaWdpbjogQm9vbGVhbnxTdHJpbmcgPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBjcm9zc09yaWdpbiBhdHRyaWJ1dGUgd2lsbCBiZSBhZGRlZCB0byB0aGUgaW1hZ2UuXHJcbiAgXHRcdC8vIElmIGEgU3RyaW5nIGlzIHByb3ZpZGVkLCB0aGUgaW1hZ2Ugd2lsbCBoYXZlIGl0cyBjcm9zc09yaWdpbiBhdHRyaWJ1dGUgc2V0IHRvIHRoZSBTdHJpbmcgcHJvdmlkZWQuIFRoaXMgaXMgbmVlZGVkIGlmIHlvdSB3YW50IHRvIGFjY2VzcyBpbWFnZSBwaXhlbCBkYXRhLlxyXG4gIFx0XHQvLyBSZWZlciB0byBbQ09SUyBTZXR0aW5nc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciB2YWxpZCBTdHJpbmcgdmFsdWVzLlxyXG4gIFx0XHRjcm9zc09yaWdpbjogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGVycm9yT3ZlcmxheVVybDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVVJMIHRvIHRoZSBvdmVybGF5IGltYWdlIHRvIHNob3cgaW4gcGxhY2Ugb2YgdGhlIG92ZXJsYXkgdGhhdCBmYWlsZWQgdG8gbG9hZC5cclxuICBcdFx0ZXJyb3JPdmVybGF5VXJsOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gekluZGV4OiBOdW1iZXIgPSAxXHJcbiAgXHRcdC8vIFRoZSBleHBsaWNpdCBbekluZGV4XShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9DU1MvQ1NTX1Bvc2l0aW9uaW5nL1VuZGVyc3RhbmRpbmdfel9pbmRleCkgb2YgdGhlIG92ZXJsYXkgbGF5ZXIuXHJcbiAgXHRcdHpJbmRleDogMSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xhc3NOYW1lOiBTdHJpbmcgPSAnJ1xyXG4gIFx0XHQvLyBBIGN1c3RvbSBjbGFzcyBuYW1lIHRvIGFzc2lnbiB0byB0aGUgaW1hZ2UuIEVtcHR5IGJ5IGRlZmF1bHQuXHJcbiAgXHRcdGNsYXNzTmFtZTogJydcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgYm91bmRzLCBvcHRpb25zKSB7IC8vIChTdHJpbmcsIExhdExuZ0JvdW5kcywgT2JqZWN0KVxyXG4gIFx0XHR0aGlzLl91cmwgPSB1cmw7XHJcbiAgXHRcdHRoaXMuX2JvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2ltYWdlKSB7XHJcbiAgXHRcdFx0dGhpcy5faW5pdEltYWdlKCk7XHJcblxyXG4gIFx0XHRcdGlmICh0aGlzLm9wdGlvbnMub3BhY2l0eSA8IDEpIHtcclxuICBcdFx0XHRcdHRoaXMuX3VwZGF0ZU9wYWNpdHkoKTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuaW50ZXJhY3RpdmUpIHtcclxuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9pbWFnZSwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcclxuICBcdFx0XHR0aGlzLmFkZEludGVyYWN0aXZlVGFyZ2V0KHRoaXMuX2ltYWdlKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHR0aGlzLl9yZXNldCgpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZW1vdmUodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmludGVyYWN0aXZlKSB7XHJcbiAgXHRcdFx0dGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl9pbWFnZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRPcGFjaXR5KG9wYWNpdHk6IE51bWJlcik6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIG9wYWNpdHkgb2YgdGhlIG92ZXJsYXkuXHJcbiAgXHRzZXRPcGFjaXR5OiBmdW5jdGlvbiAob3BhY2l0eSkge1xyXG4gIFx0XHR0aGlzLm9wdGlvbnMub3BhY2l0eSA9IG9wYWNpdHk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5faW1hZ2UpIHtcclxuICBcdFx0XHR0aGlzLl91cGRhdGVPcGFjaXR5KCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdHNldFN0eWxlOiBmdW5jdGlvbiAoc3R5bGVPcHRzKSB7XHJcbiAgXHRcdGlmIChzdHlsZU9wdHMub3BhY2l0eSkge1xyXG4gIFx0XHRcdHRoaXMuc2V0T3BhY2l0eShzdHlsZU9wdHMub3BhY2l0eSk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0Zyb250KCk6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgdG8gdGhlIHRvcCBvZiBhbGwgb3ZlcmxheXMuXHJcbiAgXHRicmluZ1RvRnJvbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRvRnJvbnQodGhpcy5faW1hZ2UpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJyaW5nVG9CYWNrKCk6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGUgbGF5ZXIgdG8gdGhlIGJvdHRvbSBvZiBhbGwgb3ZlcmxheXMuXHJcbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dG9CYWNrKHRoaXMuX2ltYWdlKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRVcmwodXJsOiBTdHJpbmcpOiB0aGlzXHJcbiAgXHQvLyBDaGFuZ2VzIHRoZSBVUkwgb2YgdGhlIGltYWdlLlxyXG4gIFx0c2V0VXJsOiBmdW5jdGlvbiAodXJsKSB7XHJcbiAgXHRcdHRoaXMuX3VybCA9IHVybDtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9pbWFnZSkge1xyXG4gIFx0XHRcdHRoaXMuX2ltYWdlLnNyYyA9IHVybDtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRCb3VuZHMoYm91bmRzOiBMYXRMbmdCb3VuZHMpOiB0aGlzXHJcbiAgXHQvLyBVcGRhdGUgdGhlIGJvdW5kcyB0aGF0IHRoaXMgSW1hZ2VPdmVybGF5IGNvdmVyc1xyXG4gIFx0c2V0Qm91bmRzOiBmdW5jdGlvbiAoYm91bmRzKSB7XHJcbiAgXHRcdHRoaXMuX2JvdW5kcyA9IHRvTGF0TG5nQm91bmRzKGJvdW5kcyk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0dGhpcy5fcmVzZXQoKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBldmVudHMgPSB7XHJcbiAgXHRcdFx0em9vbTogdGhpcy5fcmVzZXQsXHJcbiAgXHRcdFx0dmlld3Jlc2V0OiB0aGlzLl9yZXNldFxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHNldFpJbmRleCh2YWx1ZTogTnVtYmVyKTogdGhpc1xyXG4gIFx0Ly8gQ2hhbmdlcyB0aGUgW3pJbmRleF0oI2ltYWdlb3ZlcmxheS16aW5kZXgpIG9mIHRoZSBpbWFnZSBvdmVybGF5LlxyXG4gIFx0c2V0WkluZGV4OiBmdW5jdGlvbiAodmFsdWUpIHtcclxuICBcdFx0dGhpcy5vcHRpb25zLnpJbmRleCA9IHZhbHVlO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Qm91bmRzKCk6IExhdExuZ0JvdW5kc1xyXG4gIFx0Ly8gR2V0IHRoZSBib3VuZHMgdGhhdCB0aGlzIEltYWdlT3ZlcmxheSBjb3ZlcnNcclxuICBcdGdldEJvdW5kczogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fYm91bmRzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGdldEVsZW1lbnQoKTogSFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIGluc3RhbmNlIG9mIFtgSFRNTEltYWdlRWxlbWVudGBdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0FQSS9IVE1MSW1hZ2VFbGVtZW50KVxyXG4gIFx0Ly8gdXNlZCBieSB0aGlzIG92ZXJsYXkuXHJcbiAgXHRnZXRFbGVtZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9pbWFnZTtcclxuICBcdH0sXHJcblxyXG4gIFx0X2luaXRJbWFnZTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgd2FzRWxlbWVudFN1cHBsaWVkID0gdGhpcy5fdXJsLnRhZ05hbWUgPT09ICdJTUcnO1xyXG4gIFx0XHR2YXIgaW1nID0gdGhpcy5faW1hZ2UgPSB3YXNFbGVtZW50U3VwcGxpZWQgPyB0aGlzLl91cmwgOiBjcmVhdGUkMSgnaW1nJyk7XHJcblxyXG4gIFx0XHRhZGRDbGFzcyhpbWcsICdsZWFmbGV0LWltYWdlLWxheWVyJyk7XHJcbiAgXHRcdGlmICh0aGlzLl96b29tQW5pbWF0ZWQpIHsgYWRkQ2xhc3MoaW1nLCAnbGVhZmxldC16b29tLWFuaW1hdGVkJyk7IH1cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUpIHsgYWRkQ2xhc3MoaW1nLCB0aGlzLm9wdGlvbnMuY2xhc3NOYW1lKTsgfVxyXG5cclxuICBcdFx0aW1nLm9uc2VsZWN0c3RhcnQgPSBmYWxzZUZuO1xyXG4gIFx0XHRpbWcub25tb3VzZW1vdmUgPSBmYWxzZUZuO1xyXG5cclxuICBcdFx0Ly8gQGV2ZW50IGxvYWQ6IEV2ZW50XHJcbiAgXHRcdC8vIEZpcmVkIHdoZW4gdGhlIEltYWdlT3ZlcmxheSBsYXllciBoYXMgbG9hZGVkIGl0cyBpbWFnZVxyXG4gIFx0XHRpbWcub25sb2FkID0gYmluZCh0aGlzLmZpcmUsIHRoaXMsICdsb2FkJyk7XHJcbiAgXHRcdGltZy5vbmVycm9yID0gYmluZCh0aGlzLl9vdmVybGF5T25FcnJvciwgdGhpcywgJ2Vycm9yJyk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luIHx8IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbiA9PT0gJycpIHtcclxuICBcdFx0XHRpbWcuY3Jvc3NPcmlnaW4gPSB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnJyA6IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy56SW5kZXgpIHtcclxuICBcdFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHdhc0VsZW1lbnRTdXBwbGllZCkge1xyXG4gIFx0XHRcdHRoaXMuX3VybCA9IGltZy5zcmM7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpbWcuc3JjID0gdGhpcy5fdXJsO1xyXG4gIFx0XHRpbWcuYWx0ID0gdGhpcy5vcHRpb25zLmFsdDtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKGUuem9vbSksXHJcbiAgXHRcdCAgICBvZmZzZXQgPSB0aGlzLl9tYXAuX2xhdExuZ0JvdW5kc1RvTmV3TGF5ZXJCb3VuZHModGhpcy5fYm91bmRzLCBlLnpvb20sIGUuY2VudGVyKS5taW47XHJcblxyXG4gIFx0XHRzZXRUcmFuc2Zvcm0odGhpcy5faW1hZ2UsIG9mZnNldCwgc2NhbGUpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcmVzZXQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGltYWdlID0gdGhpcy5faW1hZ2UsXHJcbiAgXHRcdCAgICBib3VuZHMgPSBuZXcgQm91bmRzKFxyXG4gIFx0XHQgICAgICAgIHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fYm91bmRzLmdldE5vcnRoV2VzdCgpKSxcclxuICBcdFx0ICAgICAgICB0aGlzLl9tYXAubGF0TG5nVG9MYXllclBvaW50KHRoaXMuX2JvdW5kcy5nZXRTb3V0aEVhc3QoKSkpLFxyXG4gIFx0XHQgICAgc2l6ZSA9IGJvdW5kcy5nZXRTaXplKCk7XHJcblxyXG4gIFx0XHRzZXRQb3NpdGlvbihpbWFnZSwgYm91bmRzLm1pbik7XHJcblxyXG4gIFx0XHRpbWFnZS5zdHlsZS53aWR0aCAgPSBzaXplLnggKyAncHgnO1xyXG4gIFx0XHRpbWFnZS5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlT3BhY2l0eTogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRzZXRPcGFjaXR5KHRoaXMuX2ltYWdlLCB0aGlzLm9wdGlvbnMub3BhY2l0eSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF91cGRhdGVaSW5kZXg6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX2ltYWdlICYmIHRoaXMub3B0aW9ucy56SW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuekluZGV4ICE9PSBudWxsKSB7XHJcbiAgXHRcdFx0dGhpcy5faW1hZ2Uuc3R5bGUuekluZGV4ID0gdGhpcy5vcHRpb25zLnpJbmRleDtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfb3ZlcmxheU9uRXJyb3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gQGV2ZW50IGVycm9yOiBFdmVudFxyXG4gIFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBJbWFnZU92ZXJsYXkgbGF5ZXIgZmFpbHMgdG8gbG9hZCBpdHMgaW1hZ2VcclxuICBcdFx0dGhpcy5maXJlKCdlcnJvcicpO1xyXG5cclxuICBcdFx0dmFyIGVycm9yVXJsID0gdGhpcy5vcHRpb25zLmVycm9yT3ZlcmxheVVybDtcclxuICBcdFx0aWYgKGVycm9yVXJsICYmIHRoaXMuX3VybCAhPT0gZXJyb3JVcmwpIHtcclxuICBcdFx0XHR0aGlzLl91cmwgPSBlcnJvclVybDtcclxuICBcdFx0XHR0aGlzLl9pbWFnZS5zcmMgPSBlcnJvclVybDtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG4gIH0pO1xyXG5cclxuICAvLyBAZmFjdG9yeSBMLmltYWdlT3ZlcmxheShpbWFnZVVybDogU3RyaW5nLCBib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IEltYWdlT3ZlcmxheSBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiB0aGUgVVJMIG9mIHRoZSBpbWFnZSBhbmQgdGhlXHJcbiAgLy8gZ2VvZ3JhcGhpY2FsIGJvdW5kcyBpdCBpcyB0aWVkIHRvLlxyXG4gIHZhciBpbWFnZU92ZXJsYXkgPSBmdW5jdGlvbiAodXJsLCBib3VuZHMsIG9wdGlvbnMpIHtcclxuICBcdHJldHVybiBuZXcgSW1hZ2VPdmVybGF5KHVybCwgYm91bmRzLCBvcHRpb25zKTtcclxuICB9O1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFZpZGVvT3ZlcmxheVxyXG4gICAqIEBha2EgTC5WaWRlb092ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgSW1hZ2VPdmVybGF5XHJcbiAgICpcclxuICAgKiBVc2VkIHRvIGxvYWQgYW5kIGRpc3BsYXkgYSB2aWRlbyBwbGF5ZXIgb3ZlciBzcGVjaWZpYyBib3VuZHMgb2YgdGhlIG1hcC4gRXh0ZW5kcyBgSW1hZ2VPdmVybGF5YC5cclxuICAgKlxyXG4gICAqIEEgdmlkZW8gb3ZlcmxheSB1c2VzIHRoZSBbYDx2aWRlbz5gXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvdmlkZW8pXHJcbiAgICogSFRNTDUgZWxlbWVudC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciB2aWRlb1VybCA9ICdodHRwczovL3d3dy5tYXBib3guY29tL2JpdGVzLzAwMTg4L3BhdHJpY2lhX25hc2Eud2VibScsXHJcbiAgICogXHR2aWRlb0JvdW5kcyA9IFtbIDMyLCAtMTMwXSwgWyAxMywgLTEwMF1dO1xyXG4gICAqIEwudmlkZW9PdmVybGF5KHZpZGVvVXJsLCB2aWRlb0JvdW5kcyApLmFkZFRvKG1hcCk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBWaWRlb092ZXJsYXkgPSBJbWFnZU92ZXJsYXkuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBWaWRlb092ZXJsYXkgb3B0aW9uc1xyXG4gIFx0b3B0aW9uczoge1xyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9wbGF5OiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyBzdGFydHMgcGxheWluZyBhdXRvbWF0aWNhbGx5IHdoZW4gbG9hZGVkLlxyXG4gIFx0XHRhdXRvcGxheTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbG9vcDogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gV2hldGhlciB0aGUgdmlkZW8gd2lsbCBsb29wIGJhY2sgdG8gdGhlIGJlZ2lubmluZyB3aGVuIHBsYXllZC5cclxuICBcdFx0bG9vcDogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24ga2VlcEFzcGVjdFJhdGlvOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyB3aWxsIHNhdmUgYXNwZWN0IHJhdGlvIGFmdGVyIHRoZSBwcm9qZWN0aW9uLlxyXG4gIFx0XHQvLyBSZWxldmFudCBmb3Igc3VwcG9ydGVkIGJyb3dzZXJzLiBCcm93c2VyIGNvbXBhdGliaWxpdHktIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9vYmplY3QtZml0XHJcbiAgXHRcdGtlZXBBc3BlY3RSYXRpbzogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbXV0ZWQ6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSB2aWRlbyBzdGFydHMgb24gbXV0ZSB3aGVuIGxvYWRlZC5cclxuICBcdFx0bXV0ZWQ6IGZhbHNlXHJcbiAgXHR9LFxyXG5cclxuICBcdF9pbml0SW1hZ2U6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIHdhc0VsZW1lbnRTdXBwbGllZCA9IHRoaXMuX3VybC50YWdOYW1lID09PSAnVklERU8nO1xyXG4gIFx0XHR2YXIgdmlkID0gdGhpcy5faW1hZ2UgPSB3YXNFbGVtZW50U3VwcGxpZWQgPyB0aGlzLl91cmwgOiBjcmVhdGUkMSgndmlkZW8nKTtcclxuXHJcbiAgXHRcdGFkZENsYXNzKHZpZCwgJ2xlYWZsZXQtaW1hZ2UtbGF5ZXInKTtcclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkgeyBhZGRDbGFzcyh2aWQsICdsZWFmbGV0LXpvb20tYW5pbWF0ZWQnKTsgfVxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkgeyBhZGRDbGFzcyh2aWQsIHRoaXMub3B0aW9ucy5jbGFzc05hbWUpOyB9XHJcblxyXG4gIFx0XHR2aWQub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XHJcbiAgXHRcdHZpZC5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XHJcblxyXG4gIFx0XHQvLyBAZXZlbnQgbG9hZDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgdmlkZW8gaGFzIGZpbmlzaGVkIGxvYWRpbmcgdGhlIGZpcnN0IGZyYW1lXHJcbiAgXHRcdHZpZC5vbmxvYWRlZGRhdGEgPSBiaW5kKHRoaXMuZmlyZSwgdGhpcywgJ2xvYWQnKTtcclxuXHJcbiAgXHRcdGlmICh3YXNFbGVtZW50U3VwcGxpZWQpIHtcclxuICBcdFx0XHR2YXIgc291cmNlRWxlbWVudHMgPSB2aWQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NvdXJjZScpO1xyXG4gIFx0XHRcdHZhciBzb3VyY2VzID0gW107XHJcbiAgXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBzb3VyY2VFbGVtZW50cy5sZW5ndGg7IGorKykge1xyXG4gIFx0XHRcdFx0c291cmNlcy5wdXNoKHNvdXJjZUVsZW1lbnRzW2pdLnNyYyk7XHJcbiAgXHRcdFx0fVxyXG5cclxuICBcdFx0XHR0aGlzLl91cmwgPSAoc291cmNlRWxlbWVudHMubGVuZ3RoID4gMCkgPyBzb3VyY2VzIDogW3ZpZC5zcmNdO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKCFpc0FycmF5KHRoaXMuX3VybCkpIHsgdGhpcy5fdXJsID0gW3RoaXMuX3VybF07IH1cclxuXHJcbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmtlZXBBc3BlY3RSYXRpbyAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmlkLnN0eWxlLCAnb2JqZWN0Rml0JykpIHtcclxuICBcdFx0XHR2aWQuc3R5bGVbJ29iamVjdEZpdCddID0gJ2ZpbGwnO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHZpZC5hdXRvcGxheSA9ICEhdGhpcy5vcHRpb25zLmF1dG9wbGF5O1xyXG4gIFx0XHR2aWQubG9vcCA9ICEhdGhpcy5vcHRpb25zLmxvb3A7XHJcbiAgXHRcdHZpZC5tdXRlZCA9ICEhdGhpcy5vcHRpb25zLm11dGVkO1xyXG4gIFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX3VybC5sZW5ndGg7IGkrKykge1xyXG4gIFx0XHRcdHZhciBzb3VyY2UgPSBjcmVhdGUkMSgnc291cmNlJyk7XHJcbiAgXHRcdFx0c291cmNlLnNyYyA9IHRoaXMuX3VybFtpXTtcclxuICBcdFx0XHR2aWQuYXBwZW5kQ2hpbGQoc291cmNlKTtcclxuICBcdFx0fVxyXG4gIFx0fVxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0RWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBbYEhUTUxWaWRlb0VsZW1lbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvSFRNTFZpZGVvRWxlbWVudClcclxuICBcdC8vIHVzZWQgYnkgdGhpcyBvdmVybGF5LlxyXG4gIH0pO1xyXG5cclxuXHJcbiAgLy8gQGZhY3RvcnkgTC52aWRlb092ZXJsYXkodmlkZW86IFN0cmluZ3xBcnJheXxIVE1MVmlkZW9FbGVtZW50LCBib3VuZHM6IExhdExuZ0JvdW5kcywgb3B0aW9ucz86IFZpZGVvT3ZlcmxheSBvcHRpb25zKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiB0aGUgVVJMIG9mIHRoZSB2aWRlbyAob3IgYXJyYXkgb2YgVVJMcywgb3IgZXZlbiBhIHZpZGVvIGVsZW1lbnQpIGFuZCB0aGVcclxuICAvLyBnZW9ncmFwaGljYWwgYm91bmRzIGl0IGlzIHRpZWQgdG8uXHJcblxyXG4gIGZ1bmN0aW9uIHZpZGVvT3ZlcmxheSh2aWRlbywgYm91bmRzLCBvcHRpb25zKSB7XHJcbiAgXHRyZXR1cm4gbmV3IFZpZGVvT3ZlcmxheSh2aWRlbywgYm91bmRzLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcbiAgICogQGNsYXNzIFNWR092ZXJsYXlcbiAgICogQGFrYSBMLlNWR092ZXJsYXlcbiAgICogQGluaGVyaXRzIEltYWdlT3ZlcmxheVxuICAgKlxuICAgKiBVc2VkIHRvIGxvYWQsIGRpc3BsYXkgYW5kIHByb3ZpZGUgRE9NIGFjY2VzcyB0byBhbiBTVkcgZmlsZSBvdmVyIHNwZWNpZmljIGJvdW5kcyBvZiB0aGUgbWFwLiBFeHRlbmRzIGBJbWFnZU92ZXJsYXlgLlxuICAgKlxuICAgKiBBbiBTVkcgb3ZlcmxheSB1c2VzIHRoZSBbYDxzdmc+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvU1ZHL0VsZW1lbnQvc3ZnKSBlbGVtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgc3ZnRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwic3ZnXCIpO1xuICAgKiBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgneG1sbnMnLCBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIpO1xuICAgKiBzdmdFbGVtZW50LnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFwiMCAwIDIwMCAyMDBcIik7XG4gICAqIHN2Z0VsZW1lbnQuaW5uZXJIVE1MID0gJzxyZWN0IHdpZHRoPVwiMjAwXCIgaGVpZ2h0PVwiMjAwXCIvPjxyZWN0IHg9XCI3NVwiIHk9XCIyM1wiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIHN0eWxlPVwiZmlsbDpyZWRcIi8+PHJlY3QgeD1cIjc1XCIgeT1cIjEyM1wiIHdpZHRoPVwiNTBcIiBoZWlnaHQ9XCI1MFwiIHN0eWxlPVwiZmlsbDojMDAxM2ZmXCIvPic7XG4gICAqIHZhciBzdmdFbGVtZW50Qm91bmRzID0gWyBbIDMyLCAtMTMwIF0sIFsgMTMsIC0xMDAgXSBdO1xuICAgKiBMLnN2Z092ZXJsYXkoc3ZnRWxlbWVudCwgc3ZnRWxlbWVudEJvdW5kcykuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTVkdPdmVybGF5ID0gSW1hZ2VPdmVybGF5LmV4dGVuZCh7XG4gIFx0X2luaXRJbWFnZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGVsID0gdGhpcy5faW1hZ2UgPSB0aGlzLl91cmw7XG5cbiAgXHRcdGFkZENsYXNzKGVsLCAnbGVhZmxldC1pbWFnZS1sYXllcicpO1xuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkgeyBhZGRDbGFzcyhlbCwgJ2xlYWZsZXQtem9vbS1hbmltYXRlZCcpOyB9XG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmNsYXNzTmFtZSkgeyBhZGRDbGFzcyhlbCwgdGhpcy5vcHRpb25zLmNsYXNzTmFtZSk7IH1cblxuICBcdFx0ZWwub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XG4gIFx0XHRlbC5vbm1vdXNlbW92ZSA9IGZhbHNlRm47XG4gIFx0fVxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRFbGVtZW50KCk6IFNWR0VsZW1lbnRcbiAgXHQvLyBSZXR1cm5zIHRoZSBpbnN0YW5jZSBvZiBbYFNWR0VsZW1lbnRgXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9BUEkvU1ZHRWxlbWVudClcbiAgXHQvLyB1c2VkIGJ5IHRoaXMgb3ZlcmxheS5cbiAgfSk7XG5cblxuICAvLyBAZmFjdG9yeSBMLnN2Z092ZXJsYXkoc3ZnOiBTdHJpbmd8U1ZHRWxlbWVudCwgYm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBTVkdPdmVybGF5IG9wdGlvbnMpXG4gIC8vIEluc3RhbnRpYXRlcyBhbiBpbWFnZSBvdmVybGF5IG9iamVjdCBnaXZlbiBhbiBTVkcgZWxlbWVudCBhbmQgdGhlIGdlb2dyYXBoaWNhbCBib3VuZHMgaXQgaXMgdGllZCB0by5cbiAgLy8gQSB2aWV3Qm94IGF0dHJpYnV0ZSBpcyByZXF1aXJlZCBvbiB0aGUgU1ZHIGVsZW1lbnQgdG8gem9vbSBpbiBhbmQgb3V0IHByb3Blcmx5LlxuXG4gIGZ1bmN0aW9uIHN2Z092ZXJsYXkoZWwsIGJvdW5kcywgb3B0aW9ucykge1xuICBcdHJldHVybiBuZXcgU1ZHT3ZlcmxheShlbCwgYm91bmRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qXHJcbiAgICogQGNsYXNzIERpdk92ZXJsYXlcclxuICAgKiBAaW5oZXJpdHMgTGF5ZXJcclxuICAgKiBAYWthIEwuRGl2T3ZlcmxheVxyXG4gICAqIEJhc2UgbW9kZWwgZm9yIEwuUG9wdXAgYW5kIEwuVG9vbHRpcC4gSW5oZXJpdCBmcm9tIGl0IGZvciBjdXN0b20gcG9wdXAgbGlrZSBwbHVnaW5zLlxyXG4gICAqL1xyXG5cclxuICAvLyBAbmFtZXNwYWNlIERpdk92ZXJsYXlcclxuICB2YXIgRGl2T3ZlcmxheSA9IExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgRGl2T3ZlcmxheSBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gb2Zmc2V0OiBQb2ludCA9IFBvaW50KDAsIDcpXHJcbiAgXHRcdC8vIFRoZSBvZmZzZXQgb2YgdGhlIHBvcHVwIHBvc2l0aW9uLiBVc2VmdWwgdG8gY29udHJvbCB0aGUgYW5jaG9yXHJcbiAgXHRcdC8vIG9mIHRoZSBwb3B1cCB3aGVuIG9wZW5pbmcgaXQgb24gc29tZSBvdmVybGF5cy5cclxuICBcdFx0b2Zmc2V0OiBbMCwgN10sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gQSBjdXN0b20gQ1NTIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIHRoZSBwb3B1cC5cclxuICBcdFx0Y2xhc3NOYW1lOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gcGFuZTogU3RyaW5nID0gJ3BvcHVwUGFuZSdcclxuICBcdFx0Ly8gYE1hcCBwYW5lYCB3aGVyZSB0aGUgcG9wdXAgd2lsbCBiZSBhZGRlZC5cclxuICBcdFx0cGFuZTogJ3BvcHVwUGFuZSdcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xyXG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dGhpcy5fc291cmNlID0gc291cmNlO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHR0aGlzLl96b29tQW5pbWF0ZWQgPSBtYXAuX3pvb21BbmltYXRlZDtcclxuXHJcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7XHJcbiAgXHRcdFx0dGhpcy5faW5pdExheW91dCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAobWFwLl9mYWRlQW5pbWF0ZWQpIHtcclxuICBcdFx0XHRzZXRPcGFjaXR5KHRoaXMuX2NvbnRhaW5lciwgMCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGNsZWFyVGltZW91dCh0aGlzLl9yZW1vdmVUaW1lb3V0KTtcclxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy51cGRhdGUoKTtcclxuXHJcbiAgXHRcdGlmIChtYXAuX2ZhZGVBbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLCAxKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5icmluZ1RvRnJvbnQoKTtcclxuICBcdH0sXHJcblxyXG4gIFx0b25SZW1vdmU6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0aWYgKG1hcC5fZmFkZUFuaW1hdGVkKSB7XHJcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIDApO1xyXG4gIFx0XHRcdHRoaXMuX3JlbW92ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KGJpbmQocmVtb3ZlLCB1bmRlZmluZWQsIHRoaXMuX2NvbnRhaW5lciksIDIwMCk7XHJcbiAgXHRcdH0gZWxzZSB7XHJcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRMYXRMbmc6IExhdExuZ1xyXG4gIFx0Ly8gUmV0dXJucyB0aGUgZ2VvZ3JhcGhpY2FsIHBvaW50IG9mIHBvcHVwLlxyXG4gIFx0Z2V0TGF0TG5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiB0aGlzLl9sYXRsbmc7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0TGF0TG5nKGxhdGxuZzogTGF0TG5nKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgZ2VvZ3JhcGhpY2FsIHBvaW50IHdoZXJlIHRoZSBwb3B1cCB3aWxsIG9wZW4uXHJcbiAgXHRzZXRMYXRMbmc6IGZ1bmN0aW9uIChsYXRsbmcpIHtcclxuICBcdFx0dGhpcy5fbGF0bG5nID0gdG9MYXRMbmcobGF0bG5nKTtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVBvc2l0aW9uKCk7XHJcbiAgXHRcdFx0dGhpcy5fYWRqdXN0UGFuKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0Q29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50XHJcbiAgXHQvLyBSZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBwb3B1cC5cclxuICBcdGdldENvbnRlbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRlbnQ7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0Q29udGVudChodG1sQ29udGVudDogU3RyaW5nfEhUTUxFbGVtZW50fEZ1bmN0aW9uKTogdGhpc1xyXG4gIFx0Ly8gU2V0cyB0aGUgSFRNTCBjb250ZW50IG9mIHRoZSBwb3B1cC4gSWYgYSBmdW5jdGlvbiBpcyBwYXNzZWQgdGhlIHNvdXJjZSBsYXllciB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YCB0byBiZSB1c2VkIGluIHRoZSBwb3B1cC5cclxuICBcdHNldENvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgXHRcdHRoaXMuX2NvbnRlbnQgPSBjb250ZW50O1xyXG4gIFx0XHR0aGlzLnVwZGF0ZSgpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBnZXRFbGVtZW50OiBTdHJpbmd8SFRNTEVsZW1lbnRcclxuICBcdC8vIFJldHVybnMgdGhlIEhUTUwgY29udGFpbmVyIG9mIHRoZSBwb3B1cC5cclxuICBcdGdldEVsZW1lbnQ6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCB1cGRhdGU6IG51bGxcclxuICBcdC8vIFVwZGF0ZXMgdGhlIHBvcHVwIGNvbnRlbnQsIGxheW91dCBhbmQgcG9zaXRpb24uIFVzZWZ1bCBmb3IgdXBkYXRpbmcgdGhlIHBvcHVwIGFmdGVyIHNvbWV0aGluZyBpbnNpZGUgY2hhbmdlZCwgZS5nLiBpbWFnZSBsb2FkZWQuXHJcbiAgXHR1cGRhdGU6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cclxuICBcdFx0dGhpcy5fdXBkYXRlQ29udGVudCgpO1xyXG4gIFx0XHR0aGlzLl91cGRhdGVMYXlvdXQoKTtcclxuICBcdFx0dGhpcy5fdXBkYXRlUG9zaXRpb24oKTtcclxuXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gJyc7XHJcblxyXG4gIFx0XHR0aGlzLl9hZGp1c3RQYW4oKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciBldmVudHMgPSB7XHJcbiAgXHRcdFx0em9vbTogdGhpcy5fdXBkYXRlUG9zaXRpb24sXHJcbiAgXHRcdFx0dmlld3Jlc2V0OiB0aGlzLl91cGRhdGVQb3NpdGlvblxyXG4gIFx0XHR9O1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiBldmVudHM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaXNPcGVuOiBCb29sZWFuXHJcbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBwb3B1cCBpcyB2aXNpYmxlIG9uIHRoZSBtYXAuXHJcbiAgXHRpc09wZW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0cmV0dXJuICEhdGhpcy5fbWFwICYmIHRoaXMuX21hcC5oYXNMYXllcih0aGlzKTtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQ6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGlzIHBvcHVwIGluIGZyb250IG9mIG90aGVyIHBvcHVwcyAoaW4gdGhlIHNhbWUgbWFwIHBhbmUpLlxyXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0b0Zyb250KHRoaXMuX2NvbnRhaW5lcik7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgYnJpbmdUb0JhY2s6IHRoaXNcclxuICBcdC8vIEJyaW5ncyB0aGlzIHBvcHVwIHRvIHRoZSBiYWNrIG9mIG90aGVyIHBvcHVwcyAoaW4gdGhlIHNhbWUgbWFwIHBhbmUpLlxyXG4gIFx0YnJpbmdUb0JhY2s6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHRvQmFjayh0aGlzLl9jb250YWluZXIpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfcHJlcGFyZU9wZW46IGZ1bmN0aW9uIChwYXJlbnQsIGxheWVyLCBsYXRsbmcpIHtcclxuICBcdFx0aWYgKCEobGF5ZXIgaW5zdGFuY2VvZiBMYXllcikpIHtcclxuICBcdFx0XHRsYXRsbmcgPSBsYXllcjtcclxuICBcdFx0XHRsYXllciA9IHBhcmVudDtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKGxheWVyIGluc3RhbmNlb2YgRmVhdHVyZUdyb3VwKSB7XHJcbiAgXHRcdFx0Zm9yICh2YXIgaWQgaW4gcGFyZW50Ll9sYXllcnMpIHtcclxuICBcdFx0XHRcdGxheWVyID0gcGFyZW50Ll9sYXllcnNbaWRdO1xyXG4gIFx0XHRcdFx0YnJlYWs7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIWxhdGxuZykge1xyXG4gIFx0XHRcdGlmIChsYXllci5nZXRDZW50ZXIpIHtcclxuICBcdFx0XHRcdGxhdGxuZyA9IGxheWVyLmdldENlbnRlcigpO1xyXG4gIFx0XHRcdH0gZWxzZSBpZiAobGF5ZXIuZ2V0TGF0TG5nKSB7XHJcbiAgXHRcdFx0XHRsYXRsbmcgPSBsYXllci5nZXRMYXRMbmcoKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZ2V0IHNvdXJjZSBsYXllciBMYXRMbmcuJyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBzZXQgb3ZlcmxheSBzb3VyY2UgdG8gdGhpcyBsYXllclxyXG4gIFx0XHR0aGlzLl9zb3VyY2UgPSBsYXllcjtcclxuXHJcbiAgXHRcdC8vIHVwZGF0ZSB0aGUgb3ZlcmxheSAoY29udGVudCwgbGF5b3V0LCBlY3QuLi4pXHJcbiAgXHRcdHRoaXMudXBkYXRlKCk7XHJcblxyXG4gIFx0XHRyZXR1cm4gbGF0bG5nO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlQ29udGVudDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRpZiAoIXRoaXMuX2NvbnRlbnQpIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgbm9kZSA9IHRoaXMuX2NvbnRlbnROb2RlO1xyXG4gIFx0XHR2YXIgY29udGVudCA9ICh0eXBlb2YgdGhpcy5fY29udGVudCA9PT0gJ2Z1bmN0aW9uJykgPyB0aGlzLl9jb250ZW50KHRoaXMuX3NvdXJjZSB8fCB0aGlzKSA6IHRoaXMuX2NvbnRlbnQ7XHJcblxyXG4gIFx0XHRpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XHJcbiAgXHRcdFx0bm9kZS5pbm5lckhUTUwgPSBjb250ZW50O1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHdoaWxlIChub2RlLmhhc0NoaWxkTm9kZXMoKSkge1xyXG4gIFx0XHRcdFx0bm9kZS5yZW1vdmVDaGlsZChub2RlLmZpcnN0Q2hpbGQpO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRub2RlLmFwcGVuZENoaWxkKGNvbnRlbnQpO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHRoaXMuZmlyZSgnY29udGVudHVwZGF0ZScpO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfdXBkYXRlUG9zaXRpb246IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XHJcblxyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLmxhdExuZ1RvTGF5ZXJQb2ludCh0aGlzLl9sYXRsbmcpLFxyXG4gIFx0XHQgICAgb2Zmc2V0ID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KSxcclxuICBcdFx0ICAgIGFuY2hvciA9IHRoaXMuX2dldEFuY2hvcigpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xyXG4gIFx0XHRcdHNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lciwgcG9zLmFkZChhbmNob3IpKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRvZmZzZXQgPSBvZmZzZXQuYWRkKHBvcykuYWRkKGFuY2hvcik7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHZhciBib3R0b20gPSB0aGlzLl9jb250YWluZXJCb3R0b20gPSAtb2Zmc2V0LnksXHJcbiAgXHRcdCAgICBsZWZ0ID0gdGhpcy5fY29udGFpbmVyTGVmdCA9IC1NYXRoLnJvdW5kKHRoaXMuX2NvbnRhaW5lcldpZHRoIC8gMikgKyBvZmZzZXQueDtcclxuXHJcbiAgXHRcdC8vIGJvdHRvbSBwb3NpdGlvbiB0aGUgcG9wdXAgaW4gY2FzZSB0aGUgaGVpZ2h0IG9mIHRoZSBwb3B1cCBjaGFuZ2VzIChpbWFnZXMgbG9hZGluZyBldGMpXHJcbiAgXHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS5ib3R0b20gPSBib3R0b20gKyAncHgnO1xyXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc3R5bGUubGVmdCA9IGxlZnQgKyAncHgnO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0QW5jaG9yOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHJldHVybiBbMCwgMF07XHJcbiAgXHR9XHJcblxyXG4gIH0pO1xuXG4gIC8qXHJcbiAgICogQGNsYXNzIFBvcHVwXHJcbiAgICogQGluaGVyaXRzIERpdk92ZXJsYXlcclxuICAgKiBAYWthIEwuUG9wdXBcclxuICAgKiBVc2VkIHRvIG9wZW4gcG9wdXBzIGluIGNlcnRhaW4gcGxhY2VzIG9mIHRoZSBtYXAuIFVzZSBbTWFwLm9wZW5Qb3B1cF0oI21hcC1vcGVucG9wdXApIHRvXHJcbiAgICogb3BlbiBwb3B1cHMgd2hpbGUgbWFraW5nIHN1cmUgdGhhdCBvbmx5IG9uZSBwb3B1cCBpcyBvcGVuIGF0IG9uZSB0aW1lXHJcbiAgICogKHJlY29tbWVuZGVkIGZvciB1c2FiaWxpdHkpLCBvciB1c2UgW01hcC5hZGRMYXllcl0oI21hcC1hZGRsYXllcikgdG8gb3BlbiBhcyBtYW55IGFzIHlvdSB3YW50LlxyXG4gICAqXHJcbiAgICogQGV4YW1wbGVcclxuICAgKlxyXG4gICAqIElmIHlvdSB3YW50IHRvIGp1c3QgYmluZCBhIHBvcHVwIHRvIG1hcmtlciBjbGljayBhbmQgdGhlbiBvcGVuIGl0LCBpdCdzIHJlYWxseSBlYXN5OlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiBtYXJrZXIuYmluZFBvcHVwKHBvcHVwQ29udGVudCkub3BlblBvcHVwKCk7XHJcbiAgICogYGBgXHJcbiAgICogUGF0aCBvdmVybGF5cyBsaWtlIHBvbHlsaW5lcyBhbHNvIGhhdmUgYSBgYmluZFBvcHVwYCBtZXRob2QuXHJcbiAgICogSGVyZSdzIGEgbW9yZSBjb21wbGljYXRlZCB3YXkgdG8gb3BlbiBhIHBvcHVwIG9uIGEgbWFwOlxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgcG9wdXAgPSBMLnBvcHVwKClcclxuICAgKiBcdC5zZXRMYXRMbmcobGF0bG5nKVxyXG4gICAqIFx0LnNldENvbnRlbnQoJzxwPkhlbGxvIHdvcmxkITxiciAvPlRoaXMgaXMgYSBuaWNlIHBvcHVwLjwvcD4nKVxyXG4gICAqIFx0Lm9wZW5PbihtYXApO1xyXG4gICAqIGBgYFxyXG4gICAqL1xyXG5cclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIHZhciBQb3B1cCA9IERpdk92ZXJsYXkuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBQb3B1cCBvcHRpb25zXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4V2lkdGg6IE51bWJlciA9IDMwMFxyXG4gIFx0XHQvLyBNYXggd2lkdGggb2YgdGhlIHBvcHVwLCBpbiBwaXhlbHMuXHJcbiAgXHRcdG1heFdpZHRoOiAzMDAsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIG1pbldpZHRoOiBOdW1iZXIgPSA1MFxyXG4gIFx0XHQvLyBNaW4gd2lkdGggb2YgdGhlIHBvcHVwLCBpbiBwaXhlbHMuXHJcbiAgXHRcdG1pbldpZHRoOiA1MCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gbWF4SGVpZ2h0OiBOdW1iZXIgPSBudWxsXHJcbiAgXHRcdC8vIElmIHNldCwgY3JlYXRlcyBhIHNjcm9sbGFibGUgY29udGFpbmVyIG9mIHRoZSBnaXZlbiBoZWlnaHRcclxuICBcdFx0Ly8gaW5zaWRlIGEgcG9wdXAgaWYgaXRzIGNvbnRlbnQgZXhjZWVkcyBpdC5cclxuICBcdFx0bWF4SGVpZ2h0OiBudWxsLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuOiBCb29sZWFuID0gdHJ1ZVxyXG4gIFx0XHQvLyBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3Qgd2FudCB0aGUgbWFwIHRvIGRvIHBhbm5pbmcgYW5pbWF0aW9uXHJcbiAgXHRcdC8vIHRvIGZpdCB0aGUgb3BlbmVkIHBvcHVwLlxyXG4gIFx0XHRhdXRvUGFuOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvUGFuUGFkZGluZ1RvcExlZnQ6IFBvaW50ID0gbnVsbFxyXG4gIFx0XHQvLyBUaGUgbWFyZ2luIGJldHdlZW4gdGhlIHBvcHVwIGFuZCB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSBtYXBcclxuICBcdFx0Ly8gdmlldyBhZnRlciBhdXRvcGFubmluZyB3YXMgcGVyZm9ybWVkLlxyXG4gIFx0XHRhdXRvUGFuUGFkZGluZ1RvcExlZnQ6IG51bGwsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGF1dG9QYW5QYWRkaW5nQm90dG9tUmlnaHQ6IFBvaW50ID0gbnVsbFxyXG4gIFx0XHQvLyBUaGUgbWFyZ2luIGJldHdlZW4gdGhlIHBvcHVwIGFuZCB0aGUgYm90dG9tIHJpZ2h0IGNvcm5lciBvZiB0aGUgbWFwXHJcbiAgXHRcdC8vIHZpZXcgYWZ0ZXIgYXV0b3Bhbm5pbmcgd2FzIHBlcmZvcm1lZC5cclxuICBcdFx0YXV0b1BhblBhZGRpbmdCb3R0b21SaWdodDogbnVsbCxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gYXV0b1BhblBhZGRpbmc6IFBvaW50ID0gUG9pbnQoNSwgNSlcclxuICBcdFx0Ly8gRXF1aXZhbGVudCBvZiBzZXR0aW5nIGJvdGggdG9wIGxlZnQgYW5kIGJvdHRvbSByaWdodCBhdXRvcGFuIHBhZGRpbmcgdG8gdGhlIHNhbWUgdmFsdWUuXHJcbiAgXHRcdGF1dG9QYW5QYWRkaW5nOiBbNSwgNV0sXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGtlZXBJblZpZXc6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBTZXQgaXQgdG8gYHRydWVgIGlmIHlvdSB3YW50IHRvIHByZXZlbnQgdXNlcnMgZnJvbSBwYW5uaW5nIHRoZSBwb3B1cFxyXG4gIFx0XHQvLyBvZmYgb2YgdGhlIHNjcmVlbiB3aGlsZSBpdCBpcyBvcGVuLlxyXG4gIFx0XHRrZWVwSW5WaWV3OiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xvc2VCdXR0b246IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIENvbnRyb2xzIHRoZSBwcmVzZW5jZSBvZiBhIGNsb3NlIGJ1dHRvbiBpbiB0aGUgcG9wdXAuXHJcbiAgXHRcdGNsb3NlQnV0dG9uOiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBhdXRvQ2xvc2U6IEJvb2xlYW4gPSB0cnVlXHJcbiAgXHRcdC8vIFNldCBpdCB0byBgZmFsc2VgIGlmIHlvdSB3YW50IHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mXHJcbiAgXHRcdC8vIHRoZSBwb3B1cCBjbG9zaW5nIHdoZW4gYW5vdGhlciBwb3B1cCBpcyBvcGVuZWQuXHJcbiAgXHRcdGF1dG9DbG9zZTogdHJ1ZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gY2xvc2VPbkVzY2FwZUtleTogQm9vbGVhbiA9IHRydWVcclxuICBcdFx0Ly8gU2V0IGl0IHRvIGBmYWxzZWAgaWYgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2ZcclxuICBcdFx0Ly8gdGhlIEVTQyBrZXkgZm9yIGNsb3Npbmcgb2YgdGhlIHBvcHVwLlxyXG4gIFx0XHRjbG9zZU9uRXNjYXBlS2V5OiB0cnVlLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjbG9zZU9uQ2xpY2s6IEJvb2xlYW4gPSAqXHJcbiAgXHRcdC8vIFNldCBpdCBpZiB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiB0aGUgcG9wdXAgY2xvc2luZyB3aGVuIHVzZXIgY2xpY2tzXHJcbiAgXHRcdC8vIG9uIHRoZSBtYXAuIERlZmF1bHRzIHRvIHRoZSBtYXAncyBbYGNsb3NlUG9wdXBPbkNsaWNrYF0oI21hcC1jbG9zZXBvcHVwb25jbGljaykgb3B0aW9uLlxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIEEgY3VzdG9tIENTUyBjbGFzcyBuYW1lIHRvIGFzc2lnbiB0byB0aGUgcG9wdXAuXHJcbiAgXHRcdGNsYXNzTmFtZTogJydcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIFx0Ly8gQG1ldGhvZCBvcGVuT24obWFwOiBNYXApOiB0aGlzXHJcbiAgXHQvLyBBZGRzIHRoZSBwb3B1cCB0byB0aGUgbWFwIGFuZCBjbG9zZXMgdGhlIHByZXZpb3VzIG9uZS4gVGhlIHNhbWUgYXMgYG1hcC5vcGVuUG9wdXAocG9wdXApYC5cclxuICBcdG9wZW5PbjogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHRtYXAub3BlblBvcHVwKHRoaXMpO1xyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH0sXHJcblxyXG4gIFx0b25BZGQ6IGZ1bmN0aW9uIChtYXApIHtcclxuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xyXG5cclxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcclxuICBcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdC8vIEBldmVudCBwb3B1cG9wZW46IFBvcHVwRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGlzIG9wZW5lZCBpbiB0aGUgbWFwXHJcbiAgXHRcdG1hcC5maXJlKCdwb3B1cG9wZW4nLCB7cG9wdXA6IHRoaXN9KTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLl9zb3VyY2UpIHtcclxuICBcdFx0XHQvLyBAbmFtZXNwYWNlIExheWVyXHJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gUG9wdXAgZXZlbnRzXHJcbiAgXHRcdFx0Ly8gQGV2ZW50IHBvcHVwb3BlbjogUG9wdXBFdmVudFxyXG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGlzIG9wZW5lZFxyXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCdwb3B1cG9wZW4nLCB7cG9wdXA6IHRoaXN9LCB0cnVlKTtcclxuICBcdFx0XHQvLyBGb3Igbm9uLXBhdGggbGF5ZXJzLCB3ZSB0b2dnbGUgdGhlIHBvcHVwIHdoZW4gY2xpY2tpbmdcclxuICBcdFx0XHQvLyBhZ2FpbiB0aGUgbGF5ZXIsIHNvIHByZXZlbnQgdGhlIG1hcCB0byByZW9wZW4gaXQuXHJcbiAgXHRcdFx0aWYgKCEodGhpcy5fc291cmNlIGluc3RhbmNlb2YgUGF0aCkpIHtcclxuICBcdFx0XHRcdHRoaXMuX3NvdXJjZS5vbigncHJlY2xpY2snLCBzdG9wUHJvcGFnYXRpb24pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKG1hcCkge1xyXG4gIFx0XHREaXZPdmVybGF5LnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBQb3B1cCBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IHBvcHVwY2xvc2U6IFBvcHVwRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGluIHRoZSBtYXAgaXMgY2xvc2VkXHJcbiAgXHRcdG1hcC5maXJlKCdwb3B1cGNsb3NlJywge3BvcHVwOiB0aGlzfSk7XHJcblxyXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XHJcbiAgXHRcdFx0Ly8gQG5hbWVzcGFjZSBMYXllclxyXG4gIFx0XHRcdC8vIEBzZWN0aW9uIFBvcHVwIGV2ZW50c1xyXG4gIFx0XHRcdC8vIEBldmVudCBwb3B1cGNsb3NlOiBQb3B1cEV2ZW50XHJcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY2xvc2VkXHJcbiAgXHRcdFx0dGhpcy5fc291cmNlLmZpcmUoJ3BvcHVwY2xvc2UnLCB7cG9wdXA6IHRoaXN9LCB0cnVlKTtcclxuICBcdFx0XHRpZiAoISh0aGlzLl9zb3VyY2UgaW5zdGFuY2VvZiBQYXRoKSkge1xyXG4gIFx0XHRcdFx0dGhpcy5fc291cmNlLm9mZigncHJlY2xpY2snLCBzdG9wUHJvcGFnYXRpb24pO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRFdmVudHM6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0dmFyIGV2ZW50cyA9IERpdk92ZXJsYXkucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO1xyXG5cclxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgIT09IHVuZGVmaW5lZCA/IHRoaXMub3B0aW9ucy5jbG9zZU9uQ2xpY2sgOiB0aGlzLl9tYXAub3B0aW9ucy5jbG9zZVBvcHVwT25DbGljaykge1xyXG4gIFx0XHRcdGV2ZW50cy5wcmVjbGljayA9IHRoaXMuX2Nsb3NlO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAodGhpcy5vcHRpb25zLmtlZXBJblZpZXcpIHtcclxuICBcdFx0XHRldmVudHMubW92ZWVuZCA9IHRoaXMuX2FkanVzdFBhbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIGV2ZW50cztcclxuICBcdH0sXHJcblxyXG4gIFx0X2Nsb3NlOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9tYXApIHtcclxuICBcdFx0XHR0aGlzLl9tYXAuY2xvc2VQb3B1cCh0aGlzKTtcclxuICBcdFx0fVxyXG4gIFx0fSxcclxuXHJcbiAgXHRfaW5pdExheW91dDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgcHJlZml4ID0gJ2xlYWZsZXQtcG9wdXAnLFxyXG4gIFx0XHQgICAgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gY3JlYXRlJDEoJ2RpdicsXHJcbiAgXHRcdFx0cHJlZml4ICsgJyAnICsgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUgfHwgJycpICtcclxuICBcdFx0XHQnIGxlYWZsZXQtem9vbS1hbmltYXRlZCcpO1xyXG5cclxuICBcdFx0dmFyIHdyYXBwZXIgPSB0aGlzLl93cmFwcGVyID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctY29udGVudC13cmFwcGVyJywgY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy5fY29udGVudE5vZGUgPSBjcmVhdGUkMSgnZGl2JywgcHJlZml4ICsgJy1jb250ZW50Jywgd3JhcHBlcik7XHJcblxyXG4gIFx0XHRkaXNhYmxlQ2xpY2tQcm9wYWdhdGlvbihjb250YWluZXIpO1xyXG4gIFx0XHRkaXNhYmxlU2Nyb2xsUHJvcGFnYXRpb24odGhpcy5fY29udGVudE5vZGUpO1xyXG4gIFx0XHRvbihjb250YWluZXIsICdjb250ZXh0bWVudScsIHN0b3BQcm9wYWdhdGlvbik7XHJcblxyXG4gIFx0XHR0aGlzLl90aXBDb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgcHJlZml4ICsgJy10aXAtY29udGFpbmVyJywgY29udGFpbmVyKTtcclxuICBcdFx0dGhpcy5fdGlwID0gY3JlYXRlJDEoJ2RpdicsIHByZWZpeCArICctdGlwJywgdGhpcy5fdGlwQ29udGFpbmVyKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY2xvc2VCdXR0b24pIHtcclxuICBcdFx0XHR2YXIgY2xvc2VCdXR0b24gPSB0aGlzLl9jbG9zZUJ1dHRvbiA9IGNyZWF0ZSQxKCdhJywgcHJlZml4ICsgJy1jbG9zZS1idXR0b24nLCBjb250YWluZXIpO1xyXG4gIFx0XHRcdGNsb3NlQnV0dG9uLmhyZWYgPSAnI2Nsb3NlJztcclxuICBcdFx0XHRjbG9zZUJ1dHRvbi5pbm5lckhUTUwgPSAnJiMyMTU7JztcclxuXHJcbiAgXHRcdFx0b24oY2xvc2VCdXR0b24sICdjbGljaycsIHRoaXMuX29uQ2xvc2VCdXR0b25DbGljaywgdGhpcyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3VwZGF0ZUxheW91dDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGVudE5vZGUsXHJcbiAgXHRcdCAgICBzdHlsZSA9IGNvbnRhaW5lci5zdHlsZTtcclxuXHJcbiAgXHRcdHN0eWxlLndpZHRoID0gJyc7XHJcbiAgXHRcdHN0eWxlLndoaXRlU3BhY2UgPSAnbm93cmFwJztcclxuXHJcbiAgXHRcdHZhciB3aWR0aCA9IGNvbnRhaW5lci5vZmZzZXRXaWR0aDtcclxuICBcdFx0d2lkdGggPSBNYXRoLm1pbih3aWR0aCwgdGhpcy5vcHRpb25zLm1heFdpZHRoKTtcclxuICBcdFx0d2lkdGggPSBNYXRoLm1heCh3aWR0aCwgdGhpcy5vcHRpb25zLm1pbldpZHRoKTtcclxuXHJcbiAgXHRcdHN0eWxlLndpZHRoID0gKHdpZHRoICsgMSkgKyAncHgnO1xyXG4gIFx0XHRzdHlsZS53aGl0ZVNwYWNlID0gJyc7XHJcblxyXG4gIFx0XHRzdHlsZS5oZWlnaHQgPSAnJztcclxuXHJcbiAgXHRcdHZhciBoZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0LFxyXG4gIFx0XHQgICAgbWF4SGVpZ2h0ID0gdGhpcy5vcHRpb25zLm1heEhlaWdodCxcclxuICBcdFx0ICAgIHNjcm9sbGVkQ2xhc3MgPSAnbGVhZmxldC1wb3B1cC1zY3JvbGxlZCc7XHJcblxyXG4gIFx0XHRpZiAobWF4SGVpZ2h0ICYmIGhlaWdodCA+IG1heEhlaWdodCkge1xyXG4gIFx0XHRcdHN0eWxlLmhlaWdodCA9IG1heEhlaWdodCArICdweCc7XHJcbiAgXHRcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCBzY3JvbGxlZENsYXNzKTtcclxuICBcdFx0fSBlbHNlIHtcclxuICBcdFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsIHNjcm9sbGVkQ2xhc3MpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9jb250YWluZXJXaWR0aCA9IHRoaXMuX2NvbnRhaW5lci5vZmZzZXRXaWR0aDtcclxuICBcdH0sXHJcblxyXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoZSkge1xyXG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLCBlLnpvb20sIGUuY2VudGVyKSxcclxuICBcdFx0ICAgIGFuY2hvciA9IHRoaXMuX2dldEFuY2hvcigpO1xyXG4gIFx0XHRzZXRQb3NpdGlvbih0aGlzLl9jb250YWluZXIsIHBvcy5hZGQoYW5jaG9yKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9hZGp1c3RQYW46IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMuYXV0b1BhbikgeyByZXR1cm47IH1cclxuICBcdFx0aWYgKHRoaXMuX21hcC5fcGFuQW5pbSkgeyB0aGlzLl9tYXAuX3BhbkFuaW0uc3RvcCgpOyB9XHJcblxyXG4gIFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwLFxyXG4gIFx0XHQgICAgbWFyZ2luQm90dG9tID0gcGFyc2VJbnQoZ2V0U3R5bGUodGhpcy5fY29udGFpbmVyLCAnbWFyZ2luQm90dG9tJyksIDEwKSB8fCAwLFxyXG4gIFx0XHQgICAgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5fY29udGFpbmVyLm9mZnNldEhlaWdodCArIG1hcmdpbkJvdHRvbSxcclxuICBcdFx0ICAgIGNvbnRhaW5lcldpZHRoID0gdGhpcy5fY29udGFpbmVyV2lkdGgsXHJcbiAgXHRcdCAgICBsYXllclBvcyA9IG5ldyBQb2ludCh0aGlzLl9jb250YWluZXJMZWZ0LCAtY29udGFpbmVySGVpZ2h0IC0gdGhpcy5fY29udGFpbmVyQm90dG9tKTtcclxuXHJcbiAgXHRcdGxheWVyUG9zLl9hZGQoZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSk7XHJcblxyXG4gIFx0XHR2YXIgY29udGFpbmVyUG9zID0gbWFwLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KGxheWVyUG9zKSxcclxuICBcdFx0ICAgIHBhZGRpbmcgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZyksXHJcbiAgXHRcdCAgICBwYWRkaW5nVEwgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ1RvcExlZnQgfHwgcGFkZGluZyksXHJcbiAgXHRcdCAgICBwYWRkaW5nQlIgPSB0b1BvaW50KHRoaXMub3B0aW9ucy5hdXRvUGFuUGFkZGluZ0JvdHRvbVJpZ2h0IHx8IHBhZGRpbmcpLFxyXG4gIFx0XHQgICAgc2l6ZSA9IG1hcC5nZXRTaXplKCksXHJcbiAgXHRcdCAgICBkeCA9IDAsXHJcbiAgXHRcdCAgICBkeSA9IDA7XHJcblxyXG4gIFx0XHRpZiAoY29udGFpbmVyUG9zLnggKyBjb250YWluZXJXaWR0aCArIHBhZGRpbmdCUi54ID4gc2l6ZS54KSB7IC8vIHJpZ2h0XHJcbiAgXHRcdFx0ZHggPSBjb250YWluZXJQb3MueCArIGNvbnRhaW5lcldpZHRoIC0gc2l6ZS54ICsgcGFkZGluZ0JSLng7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGNvbnRhaW5lclBvcy54IC0gZHggLSBwYWRkaW5nVEwueCA8IDApIHsgLy8gbGVmdFxyXG4gIFx0XHRcdGR4ID0gY29udGFpbmVyUG9zLnggLSBwYWRkaW5nVEwueDtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAoY29udGFpbmVyUG9zLnkgKyBjb250YWluZXJIZWlnaHQgKyBwYWRkaW5nQlIueSA+IHNpemUueSkgeyAvLyBib3R0b21cclxuICBcdFx0XHRkeSA9IGNvbnRhaW5lclBvcy55ICsgY29udGFpbmVySGVpZ2h0IC0gc2l6ZS55ICsgcGFkZGluZ0JSLnk7XHJcbiAgXHRcdH1cclxuICBcdFx0aWYgKGNvbnRhaW5lclBvcy55IC0gZHkgLSBwYWRkaW5nVEwueSA8IDApIHsgLy8gdG9wXHJcbiAgXHRcdFx0ZHkgPSBjb250YWluZXJQb3MueSAtIHBhZGRpbmdUTC55O1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcFxyXG4gIFx0XHQvLyBAc2VjdGlvbiBQb3B1cCBldmVudHNcclxuICBcdFx0Ly8gQGV2ZW50IGF1dG9wYW5zdGFydDogRXZlbnRcclxuICBcdFx0Ly8gRmlyZWQgd2hlbiB0aGUgbWFwIHN0YXJ0cyBhdXRvcGFubmluZyB3aGVuIG9wZW5pbmcgYSBwb3B1cC5cclxuICBcdFx0aWYgKGR4IHx8IGR5KSB7XHJcbiAgXHRcdFx0bWFwXHJcbiAgXHRcdFx0ICAgIC5maXJlKCdhdXRvcGFuc3RhcnQnKVxyXG4gIFx0XHRcdCAgICAucGFuQnkoW2R4LCBkeV0pO1xyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vbkNsb3NlQnV0dG9uQ2xpY2s6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHRoaXMuX2Nsb3NlKCk7XHJcbiAgXHRcdHN0b3AoZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRBbmNob3I6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0Ly8gV2hlcmUgc2hvdWxkIHdlIGFuY2hvciB0aGUgcG9wdXAgb24gdGhlIHNvdXJjZSBsYXllcj9cclxuICBcdFx0cmV0dXJuIHRvUG9pbnQodGhpcy5fc291cmNlICYmIHRoaXMuX3NvdXJjZS5fZ2V0UG9wdXBBbmNob3IgPyB0aGlzLl9zb3VyY2UuX2dldFBvcHVwQW5jaG9yKCkgOiBbMCwgMF0pO1xyXG4gIFx0fVxyXG5cclxuICB9KTtcclxuXHJcbiAgLy8gQG5hbWVzcGFjZSBQb3B1cFxyXG4gIC8vIEBmYWN0b3J5IEwucG9wdXAob3B0aW9ucz86IFBvcHVwIG9wdGlvbnMsIHNvdXJjZT86IExheWVyKVxyXG4gIC8vIEluc3RhbnRpYXRlcyBhIGBQb3B1cGAgb2JqZWN0IGdpdmVuIGFuIG9wdGlvbmFsIGBvcHRpb25zYCBvYmplY3QgdGhhdCBkZXNjcmliZXMgaXRzIGFwcGVhcmFuY2UgYW5kIGxvY2F0aW9uIGFuZCBhbiBvcHRpb25hbCBgc291cmNlYCBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHRhZyB0aGUgcG9wdXAgd2l0aCBhIHJlZmVyZW5jZSB0byB0aGUgTGF5ZXIgdG8gd2hpY2ggaXQgcmVmZXJzLlxyXG4gIHZhciBwb3B1cCA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcclxuICBcdHJldHVybiBuZXcgUG9wdXAob3B0aW9ucywgc291cmNlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLyogQG5hbWVzcGFjZSBNYXBcclxuICAgKiBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXHJcbiAgICogQG9wdGlvbiBjbG9zZVBvcHVwT25DbGljazogQm9vbGVhbiA9IHRydWVcclxuICAgKiBTZXQgaXQgdG8gYGZhbHNlYCBpZiB5b3UgZG9uJ3Qgd2FudCBwb3B1cHMgdG8gY2xvc2Ugd2hlbiB1c2VyIGNsaWNrcyB0aGUgbWFwLlxyXG4gICAqL1xyXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xyXG4gIFx0Y2xvc2VQb3B1cE9uQ2xpY2s6IHRydWVcclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBuYW1lc3BhY2UgTWFwXHJcbiAgLy8gQHNlY3Rpb24gTWV0aG9kcyBmb3IgTGF5ZXJzIGFuZCBDb250cm9sc1xyXG4gIE1hcC5pbmNsdWRlKHtcclxuICBcdC8vIEBtZXRob2Qgb3BlblBvcHVwKHBvcHVwOiBQb3B1cCk6IHRoaXNcclxuICBcdC8vIE9wZW5zIHRoZSBzcGVjaWZpZWQgcG9wdXAgd2hpbGUgY2xvc2luZyB0aGUgcHJldmlvdXNseSBvcGVuZWQgKHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSBpcyBvcGVuZWQgYXQgb25lIHRpbWUgZm9yIHVzYWJpbGl0eSkuXHJcbiAgXHQvLyBAYWx0ZXJuYXRpdmVcclxuICBcdC8vIEBtZXRob2Qgb3BlblBvcHVwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudCwgbGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gQ3JlYXRlcyBhIHBvcHVwIHdpdGggdGhlIHNwZWNpZmllZCBjb250ZW50IGFuZCBvcHRpb25zIGFuZCBvcGVucyBpdCBpbiB0aGUgZ2l2ZW4gcG9pbnQgb24gYSBtYXAuXHJcbiAgXHRvcGVuUG9wdXA6IGZ1bmN0aW9uIChwb3B1cCwgbGF0bG5nLCBvcHRpb25zKSB7XHJcbiAgXHRcdGlmICghKHBvcHVwIGluc3RhbmNlb2YgUG9wdXApKSB7XHJcbiAgXHRcdFx0cG9wdXAgPSBuZXcgUG9wdXAob3B0aW9ucykuc2V0Q29udGVudChwb3B1cCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmIChsYXRsbmcpIHtcclxuICBcdFx0XHRwb3B1cC5zZXRMYXRMbmcobGF0bG5nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0aWYgKHRoaXMuaGFzTGF5ZXIocG9wdXApKSB7XHJcbiAgXHRcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCAmJiB0aGlzLl9wb3B1cC5vcHRpb25zLmF1dG9DbG9zZSkge1xyXG4gIFx0XHRcdHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHR0aGlzLl9wb3B1cCA9IHBvcHVwO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5hZGRMYXllcihwb3B1cCk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY2xvc2VQb3B1cChwb3B1cD86IFBvcHVwKTogdGhpc1xyXG4gIFx0Ly8gQ2xvc2VzIHRoZSBwb3B1cCBwcmV2aW91c2x5IG9wZW5lZCB3aXRoIFtvcGVuUG9wdXBdKCNtYXAtb3BlbnBvcHVwKSAob3IgdGhlIGdpdmVuIG9uZSkuXHJcbiAgXHRjbG9zZVBvcHVwOiBmdW5jdGlvbiAocG9wdXApIHtcclxuICBcdFx0aWYgKCFwb3B1cCB8fCBwb3B1cCA9PT0gdGhpcy5fcG9wdXApIHtcclxuICBcdFx0XHRwb3B1cCA9IHRoaXMuX3BvcHVwO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwID0gbnVsbDtcclxuICBcdFx0fVxyXG4gIFx0XHRpZiAocG9wdXApIHtcclxuICBcdFx0XHR0aGlzLnJlbW92ZUxheWVyKHBvcHVwKTtcclxuICBcdFx0fVxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH1cclxuICB9KTtcclxuXHJcbiAgLypcclxuICAgKiBAbmFtZXNwYWNlIExheWVyXHJcbiAgICogQHNlY3Rpb24gUG9wdXAgbWV0aG9kcyBleGFtcGxlXHJcbiAgICpcclxuICAgKiBBbGwgbGF5ZXJzIHNoYXJlIGEgc2V0IG9mIG1ldGhvZHMgY29udmVuaWVudCBmb3IgYmluZGluZyBwb3B1cHMgdG8gaXQuXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIHZhciBsYXllciA9IEwuUG9seWdvbihsYXRsbmdzKS5iaW5kUG9wdXAoJ0hpIFRoZXJlIScpLmFkZFRvKG1hcCk7XHJcbiAgICogbGF5ZXIub3BlblBvcHVwKCk7XHJcbiAgICogbGF5ZXIuY2xvc2VQb3B1cCgpO1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogUG9wdXBzIHdpbGwgYWxzbyBiZSBhdXRvbWF0aWNhbGx5IG9wZW5lZCB3aGVuIHRoZSBsYXllciBpcyBjbGlja2VkIG9uIGFuZCBjbG9zZWQgd2hlbiB0aGUgbGF5ZXIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBtYXAgb3IgYW5vdGhlciBwb3B1cCBpcyBvcGVuZWQuXHJcbiAgICovXHJcblxyXG4gIC8vIEBzZWN0aW9uIFBvcHVwIG1ldGhvZHNcclxuICBMYXllci5pbmNsdWRlKHtcclxuXHJcbiAgXHQvLyBAbWV0aG9kIGJpbmRQb3B1cChjb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnR8RnVuY3Rpb258UG9wdXAsIG9wdGlvbnM/OiBQb3B1cCBvcHRpb25zKTogdGhpc1xyXG4gIFx0Ly8gQmluZHMgYSBwb3B1cCB0byB0aGUgbGF5ZXIgd2l0aCB0aGUgcGFzc2VkIGBjb250ZW50YCBhbmQgc2V0cyB1cCB0aGVcclxuICBcdC8vIG5lY2Vzc2FyeSBldmVudCBsaXN0ZW5lcnMuIElmIGEgYEZ1bmN0aW9uYCBpcyBwYXNzZWQgaXQgd2lsbCByZWNlaXZlXHJcbiAgXHQvLyB0aGUgbGF5ZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YC5cclxuICBcdGJpbmRQb3B1cDogZnVuY3Rpb24gKGNvbnRlbnQsIG9wdGlvbnMpIHtcclxuXHJcbiAgXHRcdGlmIChjb250ZW50IGluc3RhbmNlb2YgUG9wdXApIHtcclxuICBcdFx0XHRzZXRPcHRpb25zKGNvbnRlbnQsIG9wdGlvbnMpO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwID0gY29udGVudDtcclxuICBcdFx0XHRjb250ZW50Ll9zb3VyY2UgPSB0aGlzO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGlmICghdGhpcy5fcG9wdXAgfHwgb3B0aW9ucykge1xyXG4gIFx0XHRcdFx0dGhpcy5fcG9wdXAgPSBuZXcgUG9wdXAob3B0aW9ucywgdGhpcyk7XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHRcdHRoaXMuX3BvcHVwLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICghdGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkKSB7XHJcbiAgXHRcdFx0dGhpcy5vbih7XHJcbiAgXHRcdFx0XHRjbGljazogdGhpcy5fb3BlblBvcHVwLFxyXG4gIFx0XHRcdFx0a2V5cHJlc3M6IHRoaXMuX29uS2V5UHJlc3MsXHJcbiAgXHRcdFx0XHRyZW1vdmU6IHRoaXMuY2xvc2VQb3B1cCxcclxuICBcdFx0XHRcdG1vdmU6IHRoaXMuX21vdmVQb3B1cFxyXG4gIFx0XHRcdH0pO1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwSGFuZGxlcnNBZGRlZCA9IHRydWU7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIHVuYmluZFBvcHVwKCk6IHRoaXNcclxuICBcdC8vIFJlbW92ZXMgdGhlIHBvcHVwIHByZXZpb3VzbHkgYm91bmQgd2l0aCBgYmluZFBvcHVwYC5cclxuICBcdHVuYmluZFBvcHVwOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMub2ZmKHtcclxuICBcdFx0XHRcdGNsaWNrOiB0aGlzLl9vcGVuUG9wdXAsXHJcbiAgXHRcdFx0XHRrZXlwcmVzczogdGhpcy5fb25LZXlQcmVzcyxcclxuICBcdFx0XHRcdHJlbW92ZTogdGhpcy5jbG9zZVBvcHVwLFxyXG4gIFx0XHRcdFx0bW92ZTogdGhpcy5fbW92ZVBvcHVwXHJcbiAgXHRcdFx0fSk7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXBIYW5kbGVyc0FkZGVkID0gZmFsc2U7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXAgPSBudWxsO1xyXG4gIFx0XHR9XHJcbiAgXHRcdHJldHVybiB0aGlzO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBAbWV0aG9kIG9wZW5Qb3B1cChsYXRsbmc/OiBMYXRMbmcpOiB0aGlzXHJcbiAgXHQvLyBPcGVucyB0aGUgYm91bmQgcG9wdXAgYXQgdGhlIHNwZWNpZmllZCBgbGF0bG5nYCBvciBhdCB0aGUgZGVmYXVsdCBwb3B1cCBhbmNob3IgaWYgbm8gYGxhdGxuZ2AgaXMgcGFzc2VkLlxyXG4gIFx0b3BlblBvcHVwOiBmdW5jdGlvbiAobGF5ZXIsIGxhdGxuZykge1xyXG4gIFx0XHRpZiAodGhpcy5fcG9wdXAgJiYgdGhpcy5fbWFwKSB7XHJcbiAgXHRcdFx0bGF0bG5nID0gdGhpcy5fcG9wdXAuX3ByZXBhcmVPcGVuKHRoaXMsIGxheWVyLCBsYXRsbmcpO1xyXG5cclxuICBcdFx0XHQvLyBvcGVuIHRoZSBwb3B1cCBvbiB0aGUgbWFwXHJcbiAgXHRcdFx0dGhpcy5fbWFwLm9wZW5Qb3B1cCh0aGlzLl9wb3B1cCwgbGF0bG5nKTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY2xvc2VQb3B1cCgpOiB0aGlzXHJcbiAgXHQvLyBDbG9zZXMgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaWYgaXQgaXMgb3Blbi5cclxuICBcdGNsb3NlUG9wdXA6IGZ1bmN0aW9uICgpIHtcclxuICBcdFx0aWYgKHRoaXMuX3BvcHVwKSB7XHJcbiAgXHRcdFx0dGhpcy5fcG9wdXAuX2Nsb3NlKCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgdG9nZ2xlUG9wdXAoKTogdGhpc1xyXG4gIFx0Ly8gT3BlbnMgb3IgY2xvc2VzIHRoZSBwb3B1cCBib3VuZCB0byB0aGlzIGxheWVyIGRlcGVuZGluZyBvbiBpdHMgY3VycmVudCBzdGF0ZS5cclxuICBcdHRvZ2dsZVBvcHVwOiBmdW5jdGlvbiAodGFyZ2V0KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdGlmICh0aGlzLl9wb3B1cC5fbWFwKSB7XHJcbiAgXHRcdFx0XHR0aGlzLmNsb3NlUG9wdXAoKTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0dGhpcy5vcGVuUG9wdXAodGFyZ2V0KTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgaXNQb3B1cE9wZW4oKTogYm9vbGVhblxyXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY3VycmVudGx5IG9wZW4uXHJcbiAgXHRpc1BvcHVwT3BlbjogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gKHRoaXMuX3BvcHVwID8gdGhpcy5fcG9wdXAuaXNPcGVuKCkgOiBmYWxzZSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2Qgc2V0UG9wdXBDb250ZW50KGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxQb3B1cCk6IHRoaXNcclxuICBcdC8vIFNldHMgdGhlIGNvbnRlbnQgb2YgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIuXHJcbiAgXHRzZXRQb3B1cENvbnRlbnQ6IGZ1bmN0aW9uIChjb250ZW50KSB7XHJcbiAgXHRcdGlmICh0aGlzLl9wb3B1cCkge1xyXG4gIFx0XHRcdHRoaXMuX3BvcHVwLnNldENvbnRlbnQoY29udGVudCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgZ2V0UG9wdXAoKTogUG9wdXBcclxuICBcdC8vIFJldHVybnMgdGhlIHBvcHVwIGJvdW5kIHRvIHRoaXMgbGF5ZXIuXHJcbiAgXHRnZXRQb3B1cDogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5fcG9wdXA7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9vcGVuUG9wdXA6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdHZhciBsYXllciA9IGUubGF5ZXIgfHwgZS50YXJnZXQ7XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX3BvcHVwKSB7XHJcbiAgXHRcdFx0cmV0dXJuO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRpZiAoIXRoaXMuX21hcCkge1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gcHJldmVudCBtYXAgY2xpY2tcclxuICBcdFx0c3RvcChlKTtcclxuXHJcbiAgXHRcdC8vIGlmIHRoaXMgaW5oZXJpdHMgZnJvbSBQYXRoIGl0cyBhIHZlY3RvciBhbmQgd2UgY2FuIGp1c3RcclxuICBcdFx0Ly8gb3BlbiB0aGUgcG9wdXAgYXQgdGhlIG5ldyBsb2NhdGlvblxyXG4gIFx0XHRpZiAobGF5ZXIgaW5zdGFuY2VvZiBQYXRoKSB7XHJcbiAgXHRcdFx0dGhpcy5vcGVuUG9wdXAoZS5sYXllciB8fCBlLnRhcmdldCwgZS5sYXRsbmcpO1xyXG4gIFx0XHRcdHJldHVybjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0Ly8gb3RoZXJ3aXNlIHRyZWF0IGl0IGxpa2UgYSBtYXJrZXIgYW5kIGZpZ3VyZSBvdXRcclxuICBcdFx0Ly8gaWYgd2Ugc2hvdWxkIHRvZ2dsZSBpdCBvcGVuL2Nsb3NlZFxyXG4gIFx0XHRpZiAodGhpcy5fbWFwLmhhc0xheWVyKHRoaXMuX3BvcHVwKSAmJiB0aGlzLl9wb3B1cC5fc291cmNlID09PSBsYXllcikge1xyXG4gIFx0XHRcdHRoaXMuY2xvc2VQb3B1cCgpO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdHRoaXMub3BlblBvcHVwKGxheWVyLCBlLmxhdGxuZyk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X21vdmVQb3B1cDogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0dGhpcy5fcG9wdXAuc2V0TGF0TG5nKGUubGF0bG5nKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uS2V5UHJlc3M6IGZ1bmN0aW9uIChlKSB7XHJcbiAgXHRcdGlmIChlLm9yaWdpbmFsRXZlbnQua2V5Q29kZSA9PT0gMTMpIHtcclxuICBcdFx0XHR0aGlzLl9vcGVuUG9wdXAoZSk7XHJcbiAgXHRcdH1cclxuICBcdH1cclxuICB9KTtcblxuICAvKlxuICAgKiBAY2xhc3MgVG9vbHRpcFxuICAgKiBAaW5oZXJpdHMgRGl2T3ZlcmxheVxuICAgKiBAYWthIEwuVG9vbHRpcFxuICAgKiBVc2VkIHRvIGRpc3BsYXkgc21hbGwgdGV4dHMgb24gdG9wIG9mIG1hcCBsYXllcnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIG1hcmtlci5iaW5kVG9vbHRpcChcIm15IHRvb2x0aXAgdGV4dFwiKS5vcGVuVG9vbHRpcCgpO1xuICAgKiBgYGBcbiAgICogTm90ZSBhYm91dCB0b29sdGlwIG9mZnNldC4gTGVhZmxldCB0YWtlcyB0d28gb3B0aW9ucyBpbiBjb25zaWRlcmF0aW9uXG4gICAqIGZvciBjb21wdXRpbmcgdG9vbHRpcCBvZmZzZXR0aW5nOlxuICAgKiAtIHRoZSBgb2Zmc2V0YCBUb29sdGlwIG9wdGlvbjogaXQgZGVmYXVsdHMgdG8gWzAsIDBdLCBhbmQgaXQncyBzcGVjaWZpYyB0byBvbmUgdG9vbHRpcC5cbiAgICogICBBZGQgYSBwb3NpdGl2ZSB4IG9mZnNldCB0byBtb3ZlIHRoZSB0b29sdGlwIHRvIHRoZSByaWdodCwgYW5kIGEgcG9zaXRpdmUgeSBvZmZzZXQgdG9cbiAgICogICBtb3ZlIGl0IHRvIHRoZSBib3R0b20uIE5lZ2F0aXZlcyB3aWxsIG1vdmUgdG8gdGhlIGxlZnQgYW5kIHRvcC5cbiAgICogLSB0aGUgYHRvb2x0aXBBbmNob3JgIEljb24gb3B0aW9uOiB0aGlzIHdpbGwgb25seSBiZSBjb25zaWRlcmVkIGZvciBNYXJrZXIuIFlvdVxuICAgKiAgIHNob3VsZCBhZGFwdCB0aGlzIHZhbHVlIGlmIHlvdSB1c2UgYSBjdXN0b20gaWNvbi5cbiAgICovXG5cblxuICAvLyBAbmFtZXNwYWNlIFRvb2x0aXBcbiAgdmFyIFRvb2x0aXAgPSBEaXZPdmVybGF5LmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgVG9vbHRpcCBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAndG9vbHRpcFBhbmUnXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSB0b29sdGlwIHdpbGwgYmUgYWRkZWQuXG4gIFx0XHRwYW5lOiAndG9vbHRpcFBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9mZnNldDogUG9pbnQgPSBQb2ludCgwLCAwKVxuICBcdFx0Ly8gT3B0aW9uYWwgb2Zmc2V0IG9mIHRoZSB0b29sdGlwIHBvc2l0aW9uLlxuICBcdFx0b2Zmc2V0OiBbMCwgMF0sXG5cbiAgXHRcdC8vIEBvcHRpb24gZGlyZWN0aW9uOiBTdHJpbmcgPSAnYXV0bydcbiAgXHRcdC8vIERpcmVjdGlvbiB3aGVyZSB0byBvcGVuIHRoZSB0b29sdGlwLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBgcmlnaHRgLCBgbGVmdGAsXG4gIFx0XHQvLyBgdG9wYCwgYGJvdHRvbWAsIGBjZW50ZXJgLCBgYXV0b2AuXG4gIFx0XHQvLyBgYXV0b2Agd2lsbCBkeW5hbWljYWxseSBzd2l0Y2ggYmV0d2VlbiBgcmlnaHRgIGFuZCBgbGVmdGAgYWNjb3JkaW5nIHRvIHRoZSB0b29sdGlwXG4gIFx0XHQvLyBwb3NpdGlvbiBvbiB0aGUgbWFwLlxuICBcdFx0ZGlyZWN0aW9uOiAnYXV0bycsXG5cbiAgXHRcdC8vIEBvcHRpb24gcGVybWFuZW50OiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIFdoZXRoZXIgdG8gb3BlbiB0aGUgdG9vbHRpcCBwZXJtYW5lbnRseSBvciBvbmx5IG9uIG1vdXNlb3Zlci5cbiAgXHRcdHBlcm1hbmVudDogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gc3RpY2t5OiBCb29sZWFuID0gZmFsc2VcbiAgXHRcdC8vIElmIHRydWUsIHRoZSB0b29sdGlwIHdpbGwgZm9sbG93IHRoZSBtb3VzZSBpbnN0ZWFkIG9mIGJlaW5nIGZpeGVkIGF0IHRoZSBmZWF0dXJlIGNlbnRlci5cbiAgXHRcdHN0aWNreTogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gaW50ZXJhY3RpdmU6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gSWYgdHJ1ZSwgdGhlIHRvb2x0aXAgd2lsbCBsaXN0ZW4gdG8gdGhlIGZlYXR1cmUgZXZlbnRzLlxuICBcdFx0aW50ZXJhY3RpdmU6IGZhbHNlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDAuOVxuICBcdFx0Ly8gVG9vbHRpcCBjb250YWluZXIgb3BhY2l0eS5cbiAgXHRcdG9wYWNpdHk6IDAuOVxuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0RGl2T3ZlcmxheS5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xuICBcdFx0dGhpcy5zZXRPcGFjaXR5KHRoaXMub3B0aW9ucy5vcGFjaXR5KTtcblxuICBcdFx0Ly8gQG5hbWVzcGFjZSBNYXBcbiAgXHRcdC8vIEBzZWN0aW9uIFRvb2x0aXAgZXZlbnRzXG4gIFx0XHQvLyBAZXZlbnQgdG9vbHRpcG9wZW46IFRvb2x0aXBFdmVudFxuICBcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgaXMgb3BlbmVkIGluIHRoZSBtYXAuXG4gIFx0XHRtYXAuZmlyZSgndG9vbHRpcG9wZW4nLCB7dG9vbHRpcDogdGhpc30pO1xuXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XG4gIFx0XHRcdC8vIEBuYW1lc3BhY2UgTGF5ZXJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gVG9vbHRpcCBldmVudHNcbiAgXHRcdFx0Ly8gQGV2ZW50IHRvb2x0aXBvcGVuOiBUb29sdGlwRXZlbnRcbiAgXHRcdFx0Ly8gRmlyZWQgd2hlbiBhIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBpcyBvcGVuZWQuXG4gIFx0XHRcdHRoaXMuX3NvdXJjZS5maXJlKCd0b29sdGlwb3BlbicsIHt0b29sdGlwOiB0aGlzfSwgdHJ1ZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHREaXZPdmVybGF5LnByb3RvdHlwZS5vblJlbW92ZS5jYWxsKHRoaXMsIG1hcCk7XG5cbiAgXHRcdC8vIEBuYW1lc3BhY2UgTWFwXG4gIFx0XHQvLyBAc2VjdGlvbiBUb29sdGlwIGV2ZW50c1xuICBcdFx0Ly8gQGV2ZW50IHRvb2x0aXBjbG9zZTogVG9vbHRpcEV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdG9vbHRpcCBpbiB0aGUgbWFwIGlzIGNsb3NlZC5cbiAgXHRcdG1hcC5maXJlKCd0b29sdGlwY2xvc2UnLCB7dG9vbHRpcDogdGhpc30pO1xuXG4gIFx0XHRpZiAodGhpcy5fc291cmNlKSB7XG4gIFx0XHRcdC8vIEBuYW1lc3BhY2UgTGF5ZXJcbiAgXHRcdFx0Ly8gQHNlY3Rpb24gVG9vbHRpcCBldmVudHNcbiAgXHRcdFx0Ly8gQGV2ZW50IHRvb2x0aXBjbG9zZTogVG9vbHRpcEV2ZW50XG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gYSB0b29sdGlwIGJvdW5kIHRvIHRoaXMgbGF5ZXIgaXMgY2xvc2VkLlxuICBcdFx0XHR0aGlzLl9zb3VyY2UuZmlyZSgndG9vbHRpcGNsb3NlJywge3Rvb2x0aXA6IHRoaXN9LCB0cnVlKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0gRGl2T3ZlcmxheS5wcm90b3R5cGUuZ2V0RXZlbnRzLmNhbGwodGhpcyk7XG5cbiAgXHRcdGlmICh0b3VjaCAmJiAhdGhpcy5vcHRpb25zLnBlcm1hbmVudCkge1xuICBcdFx0XHRldmVudHMucHJlY2xpY2sgPSB0aGlzLl9jbG9zZTtcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X2Nsb3NlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRoaXMuX21hcC5jbG9zZVRvb2x0aXAodGhpcyk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pbml0TGF5b3V0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcHJlZml4ID0gJ2xlYWZsZXQtdG9vbHRpcCcsXG4gIFx0XHQgICAgY2xhc3NOYW1lID0gcHJlZml4ICsgJyAnICsgKHRoaXMub3B0aW9ucy5jbGFzc05hbWUgfHwgJycpICsgJyBsZWFmbGV0LXpvb20tJyArICh0aGlzLl96b29tQW5pbWF0ZWQgPyAnYW5pbWF0ZWQnIDogJ2hpZGUnKTtcblxuICBcdFx0dGhpcy5fY29udGVudE5vZGUgPSB0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgY2xhc3NOYW1lKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUxheW91dDogZnVuY3Rpb24gKCkge30sXG5cbiAgXHRfYWRqdXN0UGFuOiBmdW5jdGlvbiAoKSB7fSxcblxuICBcdF9zZXRQb3NpdGlvbjogZnVuY3Rpb24gKHBvcykge1xuICBcdFx0dmFyIHN1YlgsIHN1YlksXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcixcbiAgXHRcdCAgICBjZW50ZXJQb2ludCA9IG1hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KG1hcC5nZXRDZW50ZXIoKSksXG4gIFx0XHQgICAgdG9vbHRpcFBvaW50ID0gbWFwLmxheWVyUG9pbnRUb0NvbnRhaW5lclBvaW50KHBvcyksXG4gIFx0XHQgICAgZGlyZWN0aW9uID0gdGhpcy5vcHRpb25zLmRpcmVjdGlvbixcbiAgXHRcdCAgICB0b29sdGlwV2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGgsXG4gIFx0XHQgICAgdG9vbHRpcEhlaWdodCA9IGNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gIFx0XHQgICAgb2Zmc2V0ID0gdG9Qb2ludCh0aGlzLm9wdGlvbnMub2Zmc2V0KSxcbiAgXHRcdCAgICBhbmNob3IgPSB0aGlzLl9nZXRBbmNob3IoKTtcblxuICBcdFx0aWYgKGRpcmVjdGlvbiA9PT0gJ3RvcCcpIHtcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aCAvIDI7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0O1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdib3R0b20nKSB7XG4gIFx0XHRcdHN1YlggPSB0b29sdGlwV2lkdGggLyAyO1xuICBcdFx0XHRzdWJZID0gMDtcbiAgXHRcdH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnY2VudGVyJykge1xuICBcdFx0XHRzdWJYID0gdG9vbHRpcFdpZHRoIC8gMjtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIGlmIChkaXJlY3Rpb24gPT09ICdyaWdodCcpIHtcbiAgXHRcdFx0c3ViWCA9IDA7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH0gZWxzZSBpZiAoZGlyZWN0aW9uID09PSAnbGVmdCcpIHtcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aDtcbiAgXHRcdFx0c3ViWSA9IHRvb2x0aXBIZWlnaHQgLyAyO1xuICBcdFx0fSBlbHNlIGlmICh0b29sdGlwUG9pbnQueCA8IGNlbnRlclBvaW50LngpIHtcbiAgXHRcdFx0ZGlyZWN0aW9uID0gJ3JpZ2h0JztcbiAgXHRcdFx0c3ViWCA9IDA7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGRpcmVjdGlvbiA9ICdsZWZ0JztcbiAgXHRcdFx0c3ViWCA9IHRvb2x0aXBXaWR0aCArIChvZmZzZXQueCArIGFuY2hvci54KSAqIDI7XG4gIFx0XHRcdHN1YlkgPSB0b29sdGlwSGVpZ2h0IC8gMjtcbiAgXHRcdH1cblxuICBcdFx0cG9zID0gcG9zLnN1YnRyYWN0KHRvUG9pbnQoc3ViWCwgc3ViWSwgdHJ1ZSkpLmFkZChvZmZzZXQpLmFkZChhbmNob3IpO1xuXG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtcmlnaHQnKTtcbiAgXHRcdHJlbW92ZUNsYXNzKGNvbnRhaW5lciwgJ2xlYWZsZXQtdG9vbHRpcC1sZWZ0Jyk7XG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtdG9wJyk7XG4gIFx0XHRyZW1vdmVDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtYm90dG9tJyk7XG4gIFx0XHRhZGRDbGFzcyhjb250YWluZXIsICdsZWFmbGV0LXRvb2x0aXAtJyArIGRpcmVjdGlvbik7XG4gIFx0XHRzZXRQb3NpdGlvbihjb250YWluZXIsIHBvcyk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVQb3NpdGlvbjogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIHBvcyA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQodGhpcy5fbGF0bG5nKTtcbiAgXHRcdHRoaXMuX3NldFBvc2l0aW9uKHBvcyk7XG4gIFx0fSxcblxuICBcdHNldE9wYWNpdHk6IGZ1bmN0aW9uIChvcGFjaXR5KSB7XG4gIFx0XHR0aGlzLm9wdGlvbnMub3BhY2l0eSA9IG9wYWNpdHk7XG5cbiAgXHRcdGlmICh0aGlzLl9jb250YWluZXIpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aGlzLl9jb250YWluZXIsIG9wYWNpdHkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfYW5pbWF0ZVpvb206IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHR2YXIgcG9zID0gdGhpcy5fbWFwLl9sYXRMbmdUb05ld0xheWVyUG9pbnQodGhpcy5fbGF0bG5nLCBlLnpvb20sIGUuY2VudGVyKTtcbiAgXHRcdHRoaXMuX3NldFBvc2l0aW9uKHBvcyk7XG4gIFx0fSxcblxuICBcdF9nZXRBbmNob3I6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFdoZXJlIHNob3VsZCB3ZSBhbmNob3IgdGhlIHRvb2x0aXAgb24gdGhlIHNvdXJjZSBsYXllcj9cbiAgXHRcdHJldHVybiB0b1BvaW50KHRoaXMuX3NvdXJjZSAmJiB0aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IgJiYgIXRoaXMub3B0aW9ucy5zdGlja3kgPyB0aGlzLl9zb3VyY2UuX2dldFRvb2x0aXBBbmNob3IoKSA6IFswLCAwXSk7XG4gIFx0fVxuXG4gIH0pO1xuXG4gIC8vIEBuYW1lc3BhY2UgVG9vbHRpcFxuICAvLyBAZmFjdG9yeSBMLnRvb2x0aXAob3B0aW9ucz86IFRvb2x0aXAgb3B0aW9ucywgc291cmNlPzogTGF5ZXIpXG4gIC8vIEluc3RhbnRpYXRlcyBhIFRvb2x0aXAgb2JqZWN0IGdpdmVuIGFuIG9wdGlvbmFsIGBvcHRpb25zYCBvYmplY3QgdGhhdCBkZXNjcmliZXMgaXRzIGFwcGVhcmFuY2UgYW5kIGxvY2F0aW9uIGFuZCBhbiBvcHRpb25hbCBgc291cmNlYCBvYmplY3QgdGhhdCBpcyB1c2VkIHRvIHRhZyB0aGUgdG9vbHRpcCB3aXRoIGEgcmVmZXJlbmNlIHRvIHRoZSBMYXllciB0byB3aGljaCBpdCByZWZlcnMuXG4gIHZhciB0b29sdGlwID0gZnVuY3Rpb24gKG9wdGlvbnMsIHNvdXJjZSkge1xuICBcdHJldHVybiBuZXcgVG9vbHRpcChvcHRpb25zLCBzb3VyY2UpO1xuICB9O1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIE1ldGhvZHMgZm9yIExheWVycyBhbmQgQ29udHJvbHNcbiAgTWFwLmluY2x1ZGUoe1xuXG4gIFx0Ly8gQG1ldGhvZCBvcGVuVG9vbHRpcCh0b29sdGlwOiBUb29sdGlwKTogdGhpc1xuICBcdC8vIE9wZW5zIHRoZSBzcGVjaWZpZWQgdG9vbHRpcC5cbiAgXHQvLyBAYWx0ZXJuYXRpdmVcbiAgXHQvLyBAbWV0aG9kIG9wZW5Ub29sdGlwKGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudCwgbGF0bG5nOiBMYXRMbmcsIG9wdGlvbnM/OiBUb29sdGlwIG9wdGlvbnMpOiB0aGlzXG4gIFx0Ly8gQ3JlYXRlcyBhIHRvb2x0aXAgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQgYW5kIG9wdGlvbnMgYW5kIG9wZW4gaXQuXG4gIFx0b3BlblRvb2x0aXA6IGZ1bmN0aW9uICh0b29sdGlwLCBsYXRsbmcsIG9wdGlvbnMpIHtcbiAgXHRcdGlmICghKHRvb2x0aXAgaW5zdGFuY2VvZiBUb29sdGlwKSkge1xuICBcdFx0XHR0b29sdGlwID0gbmV3IFRvb2x0aXAob3B0aW9ucykuc2V0Q29udGVudCh0b29sdGlwKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKGxhdGxuZykge1xuICBcdFx0XHR0b29sdGlwLnNldExhdExuZyhsYXRsbmcpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5oYXNMYXllcih0b29sdGlwKSkge1xuICBcdFx0XHRyZXR1cm4gdGhpcztcbiAgXHRcdH1cblxuICBcdFx0cmV0dXJuIHRoaXMuYWRkTGF5ZXIodG9vbHRpcCk7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgY2xvc2VUb29sdGlwKHRvb2x0aXA/OiBUb29sdGlwKTogdGhpc1xuICBcdC8vIENsb3NlcyB0aGUgdG9vbHRpcCBnaXZlbiBhcyBwYXJhbWV0ZXIuXG4gIFx0Y2xvc2VUb29sdGlwOiBmdW5jdGlvbiAodG9vbHRpcCkge1xuICBcdFx0aWYgKHRvb2x0aXApIHtcbiAgXHRcdFx0dGhpcy5yZW1vdmVMYXllcih0b29sdGlwKTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH1cblxuICB9KTtcblxuICAvKlxuICAgKiBAbmFtZXNwYWNlIExheWVyXG4gICAqIEBzZWN0aW9uIFRvb2x0aXAgbWV0aG9kcyBleGFtcGxlXG4gICAqXG4gICAqIEFsbCBsYXllcnMgc2hhcmUgYSBzZXQgb2YgbWV0aG9kcyBjb252ZW5pZW50IGZvciBiaW5kaW5nIHRvb2x0aXBzIHRvIGl0LlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgbGF5ZXIgPSBMLlBvbHlnb24obGF0bG5ncykuYmluZFRvb2x0aXAoJ0hpIFRoZXJlIScpLmFkZFRvKG1hcCk7XG4gICAqIGxheWVyLm9wZW5Ub29sdGlwKCk7XG4gICAqIGxheWVyLmNsb3NlVG9vbHRpcCgpO1xuICAgKiBgYGBcbiAgICovXG5cbiAgLy8gQHNlY3Rpb24gVG9vbHRpcCBtZXRob2RzXG4gIExheWVyLmluY2x1ZGUoe1xuXG4gIFx0Ly8gQG1ldGhvZCBiaW5kVG9vbHRpcChjb250ZW50OiBTdHJpbmd8SFRNTEVsZW1lbnR8RnVuY3Rpb258VG9vbHRpcCwgb3B0aW9ucz86IFRvb2x0aXAgb3B0aW9ucyk6IHRoaXNcbiAgXHQvLyBCaW5kcyBhIHRvb2x0aXAgdG8gdGhlIGxheWVyIHdpdGggdGhlIHBhc3NlZCBgY29udGVudGAgYW5kIHNldHMgdXAgdGhlXG4gIFx0Ly8gbmVjZXNzYXJ5IGV2ZW50IGxpc3RlbmVycy4gSWYgYSBgRnVuY3Rpb25gIGlzIHBhc3NlZCBpdCB3aWxsIHJlY2VpdmVcbiAgXHQvLyB0aGUgbGF5ZXIgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBzaG91bGQgcmV0dXJuIGEgYFN0cmluZ2Agb3IgYEhUTUxFbGVtZW50YC5cbiAgXHRiaW5kVG9vbHRpcDogZnVuY3Rpb24gKGNvbnRlbnQsIG9wdGlvbnMpIHtcblxuICBcdFx0aWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBUb29sdGlwKSB7XG4gIFx0XHRcdHNldE9wdGlvbnMoY29udGVudCwgb3B0aW9ucyk7XG4gIFx0XHRcdHRoaXMuX3Rvb2x0aXAgPSBjb250ZW50O1xuICBcdFx0XHRjb250ZW50Ll9zb3VyY2UgPSB0aGlzO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0aWYgKCF0aGlzLl90b29sdGlwIHx8IG9wdGlvbnMpIHtcbiAgXHRcdFx0XHR0aGlzLl90b29sdGlwID0gbmV3IFRvb2x0aXAob3B0aW9ucywgdGhpcyk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0dGhpcy5fdG9vbHRpcC5zZXRDb250ZW50KGNvbnRlbnQpO1xuXG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zKCk7XG5cbiAgXHRcdGlmICh0aGlzLl90b29sdGlwLm9wdGlvbnMucGVybWFuZW50ICYmIHRoaXMuX21hcCAmJiB0aGlzLl9tYXAuaGFzTGF5ZXIodGhpcykpIHtcbiAgXHRcdFx0dGhpcy5vcGVuVG9vbHRpcCgpO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCB1bmJpbmRUb29sdGlwKCk6IHRoaXNcbiAgXHQvLyBSZW1vdmVzIHRoZSB0b29sdGlwIHByZXZpb3VzbHkgYm91bmQgd2l0aCBgYmluZFRvb2x0aXBgLlxuICBcdHVuYmluZFRvb2x0aXA6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwKSB7XG4gIFx0XHRcdHRoaXMuX2luaXRUb29sdGlwSW50ZXJhY3Rpb25zKHRydWUpO1xuICBcdFx0XHR0aGlzLmNsb3NlVG9vbHRpcCgpO1xuICBcdFx0XHR0aGlzLl90b29sdGlwID0gbnVsbDtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHRfaW5pdFRvb2x0aXBJbnRlcmFjdGlvbnM6IGZ1bmN0aW9uIChyZW1vdmUkJDEpIHtcbiAgXHRcdGlmICghcmVtb3ZlJCQxICYmIHRoaXMuX3Rvb2x0aXBIYW5kbGVyc0FkZGVkKSB7IHJldHVybjsgfVxuICBcdFx0dmFyIG9uT2ZmID0gcmVtb3ZlJCQxID8gJ29mZicgOiAnb24nLFxuICBcdFx0ICAgIGV2ZW50cyA9IHtcbiAgXHRcdFx0cmVtb3ZlOiB0aGlzLmNsb3NlVG9vbHRpcCxcbiAgXHRcdFx0bW92ZTogdGhpcy5fbW92ZVRvb2x0aXBcbiAgXHRcdCAgICB9O1xuICBcdFx0aWYgKCF0aGlzLl90b29sdGlwLm9wdGlvbnMucGVybWFuZW50KSB7XG4gIFx0XHRcdGV2ZW50cy5tb3VzZW92ZXIgPSB0aGlzLl9vcGVuVG9vbHRpcDtcbiAgXHRcdFx0ZXZlbnRzLm1vdXNlb3V0ID0gdGhpcy5jbG9zZVRvb2x0aXA7XG4gIFx0XHRcdGlmICh0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5KSB7XG4gIFx0XHRcdFx0ZXZlbnRzLm1vdXNlbW92ZSA9IHRoaXMuX21vdmVUb29sdGlwO1xuICBcdFx0XHR9XG4gIFx0XHRcdGlmICh0b3VjaCkge1xuICBcdFx0XHRcdGV2ZW50cy5jbGljayA9IHRoaXMuX29wZW5Ub29sdGlwO1xuICBcdFx0XHR9XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRldmVudHMuYWRkID0gdGhpcy5fb3BlblRvb2x0aXA7XG4gIFx0XHR9XG4gIFx0XHR0aGlzW29uT2ZmXShldmVudHMpO1xuICBcdFx0dGhpcy5fdG9vbHRpcEhhbmRsZXJzQWRkZWQgPSAhcmVtb3ZlJCQxO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIG9wZW5Ub29sdGlwKGxhdGxuZz86IExhdExuZyk6IHRoaXNcbiAgXHQvLyBPcGVucyB0aGUgYm91bmQgdG9vbHRpcCBhdCB0aGUgc3BlY2lmaWVkIGBsYXRsbmdgIG9yIGF0IHRoZSBkZWZhdWx0IHRvb2x0aXAgYW5jaG9yIGlmIG5vIGBsYXRsbmdgIGlzIHBhc3NlZC5cbiAgXHRvcGVuVG9vbHRpcDogZnVuY3Rpb24gKGxheWVyLCBsYXRsbmcpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwICYmIHRoaXMuX21hcCkge1xuICBcdFx0XHRsYXRsbmcgPSB0aGlzLl90b29sdGlwLl9wcmVwYXJlT3Blbih0aGlzLCBsYXllciwgbGF0bG5nKTtcblxuICBcdFx0XHQvLyBvcGVuIHRoZSB0b29sdGlwIG9uIHRoZSBtYXBcbiAgXHRcdFx0dGhpcy5fbWFwLm9wZW5Ub29sdGlwKHRoaXMuX3Rvb2x0aXAsIGxhdGxuZyk7XG5cbiAgXHRcdFx0Ly8gVG9vbHRpcCBjb250YWluZXIgbWF5IG5vdCBiZSBkZWZpbmVkIGlmIG5vdCBwZXJtYW5lbnQgYW5kIG5ldmVyXG4gIFx0XHRcdC8vIG9wZW5lZC5cbiAgXHRcdFx0aWYgKHRoaXMuX3Rvb2x0aXAub3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiB0aGlzLl90b29sdGlwLl9jb250YWluZXIpIHtcbiAgXHRcdFx0XHRhZGRDbGFzcyh0aGlzLl90b29sdGlwLl9jb250YWluZXIsICdsZWFmbGV0LWNsaWNrYWJsZScpO1xuICBcdFx0XHRcdHRoaXMuYWRkSW50ZXJhY3RpdmVUYXJnZXQodGhpcy5fdG9vbHRpcC5fY29udGFpbmVyKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBjbG9zZVRvb2x0aXAoKTogdGhpc1xuICBcdC8vIENsb3NlcyB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGlmIGl0IGlzIG9wZW4uXG4gIFx0Y2xvc2VUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fdG9vbHRpcCkge1xuICBcdFx0XHR0aGlzLl90b29sdGlwLl9jbG9zZSgpO1xuICBcdFx0XHRpZiAodGhpcy5fdG9vbHRpcC5vcHRpb25zLmludGVyYWN0aXZlICYmIHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lcikge1xuICBcdFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX3Rvb2x0aXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtY2xpY2thYmxlJyk7XG4gIFx0XHRcdFx0dGhpcy5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldCh0aGlzLl90b29sdGlwLl9jb250YWluZXIpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCB0b2dnbGVUb29sdGlwKCk6IHRoaXNcbiAgXHQvLyBPcGVucyBvciBjbG9zZXMgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllciBkZXBlbmRpbmcgb24gaXRzIGN1cnJlbnQgc3RhdGUuXG4gIFx0dG9nZ2xlVG9vbHRpcDogZnVuY3Rpb24gKHRhcmdldCkge1xuICBcdFx0aWYgKHRoaXMuX3Rvb2x0aXApIHtcbiAgXHRcdFx0aWYgKHRoaXMuX3Rvb2x0aXAuX21hcCkge1xuICBcdFx0XHRcdHRoaXMuY2xvc2VUb29sdGlwKCk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0dGhpcy5vcGVuVG9vbHRpcCh0YXJnZXQpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBpc1Rvb2x0aXBPcGVuKCk6IGJvb2xlYW5cbiAgXHQvLyBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdG9vbHRpcCBib3VuZCB0byB0aGlzIGxheWVyIGlzIGN1cnJlbnRseSBvcGVuLlxuICBcdGlzVG9vbHRpcE9wZW46IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl90b29sdGlwLmlzT3BlbigpO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIHNldFRvb2x0aXBDb250ZW50KGNvbnRlbnQ6IFN0cmluZ3xIVE1MRWxlbWVudHxUb29sdGlwKTogdGhpc1xuICBcdC8vIFNldHMgdGhlIGNvbnRlbnQgb2YgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllci5cbiAgXHRzZXRUb29sdGlwQ29udGVudDogZnVuY3Rpb24gKGNvbnRlbnQpIHtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwKSB7XG4gIFx0XHRcdHRoaXMuX3Rvb2x0aXAuc2V0Q29udGVudChjb250ZW50KTtcbiAgXHRcdH1cbiAgXHRcdHJldHVybiB0aGlzO1xuICBcdH0sXG5cbiAgXHQvLyBAbWV0aG9kIGdldFRvb2x0aXAoKTogVG9vbHRpcFxuICBcdC8vIFJldHVybnMgdGhlIHRvb2x0aXAgYm91bmQgdG8gdGhpcyBsYXllci5cbiAgXHRnZXRUb29sdGlwOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fdG9vbHRpcDtcbiAgXHR9LFxuXG4gIFx0X29wZW5Ub29sdGlwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxheWVyID0gZS5sYXllciB8fCBlLnRhcmdldDtcblxuICBcdFx0aWYgKCF0aGlzLl90b29sdGlwIHx8ICF0aGlzLl9tYXApIHtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuICBcdFx0dGhpcy5vcGVuVG9vbHRpcChsYXllciwgdGhpcy5fdG9vbHRpcC5vcHRpb25zLnN0aWNreSA/IGUubGF0bG5nIDogdW5kZWZpbmVkKTtcbiAgXHR9LFxuXG4gIFx0X21vdmVUb29sdGlwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxhdGxuZyA9IGUubGF0bG5nLCBjb250YWluZXJQb2ludCwgbGF5ZXJQb2ludDtcbiAgXHRcdGlmICh0aGlzLl90b29sdGlwLm9wdGlvbnMuc3RpY2t5ICYmIGUub3JpZ2luYWxFdmVudCkge1xuICBcdFx0XHRjb250YWluZXJQb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLm9yaWdpbmFsRXZlbnQpO1xuICBcdFx0XHRsYXllclBvaW50ID0gdGhpcy5fbWFwLmNvbnRhaW5lclBvaW50VG9MYXllclBvaW50KGNvbnRhaW5lclBvaW50KTtcbiAgXHRcdFx0bGF0bG5nID0gdGhpcy5fbWFwLmxheWVyUG9pbnRUb0xhdExuZyhsYXllclBvaW50KTtcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3Rvb2x0aXAuc2V0TGF0TG5nKGxhdGxuZyk7XG4gIFx0fVxuICB9KTtcblxuICAvKlxuICAgKiBAY2xhc3MgRGl2SWNvblxuICAgKiBAYWthIEwuRGl2SWNvblxuICAgKiBAaW5oZXJpdHMgSWNvblxuICAgKlxuICAgKiBSZXByZXNlbnRzIGEgbGlnaHR3ZWlnaHQgaWNvbiBmb3IgbWFya2VycyB0aGF0IHVzZXMgYSBzaW1wbGUgYDxkaXY+YFxuICAgKiBlbGVtZW50IGluc3RlYWQgb2YgYW4gaW1hZ2UuIEluaGVyaXRzIGZyb20gYEljb25gIGJ1dCBpZ25vcmVzIHRoZSBgaWNvblVybGAgYW5kIHNoYWRvdyBvcHRpb25zLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiB2YXIgbXlJY29uID0gTC5kaXZJY29uKHtjbGFzc05hbWU6ICdteS1kaXYtaWNvbid9KTtcbiAgICogLy8geW91IGNhbiBzZXQgLm15LWRpdi1pY29uIHN0eWxlcyBpbiBDU1NcbiAgICpcbiAgICogTC5tYXJrZXIoWzUwLjUwNSwgMzAuNTddLCB7aWNvbjogbXlJY29ufSkuYWRkVG8obWFwKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIGl0IGhhcyBhICdsZWFmbGV0LWRpdi1pY29uJyBDU1MgY2xhc3MgYW5kIGlzIHN0eWxlZCBhcyBhIGxpdHRsZSB3aGl0ZSBzcXVhcmUgd2l0aCBhIHNoYWRvdy5cbiAgICovXG5cbiAgdmFyIERpdkljb24gPSBJY29uLmV4dGVuZCh7XG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQHNlY3Rpb25cbiAgXHRcdC8vIEBha2EgRGl2SWNvbiBvcHRpb25zXG4gIFx0XHRpY29uU2l6ZTogWzEyLCAxMl0sIC8vIGFsc28gY2FuIGJlIHNldCB0aHJvdWdoIENTU1xuXG4gIFx0XHQvLyBpY29uQW5jaG9yOiAoUG9pbnQpLFxuICBcdFx0Ly8gcG9wdXBBbmNob3I6IChQb2ludCksXG5cbiAgXHRcdC8vIEBvcHRpb24gaHRtbDogU3RyaW5nfEhUTUxFbGVtZW50ID0gJydcbiAgXHRcdC8vIEN1c3RvbSBIVE1MIGNvZGUgdG8gcHV0IGluc2lkZSB0aGUgZGl2IGVsZW1lbnQsIGVtcHR5IGJ5IGRlZmF1bHQuIEFsdGVybmF0aXZlbHksXG4gIFx0XHQvLyBhbiBpbnN0YW5jZSBvZiBgSFRNTEVsZW1lbnRgLlxuICBcdFx0aHRtbDogZmFsc2UsXG5cbiAgXHRcdC8vIEBvcHRpb24gYmdQb3M6IFBvaW50ID0gWzAsIDBdXG4gIFx0XHQvLyBPcHRpb25hbCByZWxhdGl2ZSBwb3NpdGlvbiBvZiB0aGUgYmFja2dyb3VuZCwgaW4gcGl4ZWxzXG4gIFx0XHRiZ1BvczogbnVsbCxcblxuICBcdFx0Y2xhc3NOYW1lOiAnbGVhZmxldC1kaXYtaWNvbidcbiAgXHR9LFxuXG4gIFx0Y3JlYXRlSWNvbjogZnVuY3Rpb24gKG9sZEljb24pIHtcbiAgXHRcdHZhciBkaXYgPSAob2xkSWNvbiAmJiBvbGRJY29uLnRhZ05hbWUgPT09ICdESVYnKSA/IG9sZEljb24gOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKSxcbiAgXHRcdCAgICBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIFx0XHRpZiAob3B0aW9ucy5odG1sIGluc3RhbmNlb2YgRWxlbWVudCkge1xuICBcdFx0XHRlbXB0eShkaXYpO1xuICBcdFx0XHRkaXYuYXBwZW5kQ2hpbGQob3B0aW9ucy5odG1sKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdGRpdi5pbm5lckhUTUwgPSBvcHRpb25zLmh0bWwgIT09IGZhbHNlID8gb3B0aW9ucy5odG1sIDogJyc7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLmJnUG9zKSB7XG4gIFx0XHRcdHZhciBiZ1BvcyA9IHRvUG9pbnQob3B0aW9ucy5iZ1Bvcyk7XG4gIFx0XHRcdGRpdi5zdHlsZS5iYWNrZ3JvdW5kUG9zaXRpb24gPSAoLWJnUG9zLngpICsgJ3B4ICcgKyAoLWJnUG9zLnkpICsgJ3B4JztcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3NldEljb25TdHlsZXMoZGl2LCAnaWNvbicpO1xuXG4gIFx0XHRyZXR1cm4gZGl2O1xuICBcdH0sXG5cbiAgXHRjcmVhdGVTaGFkb3c6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBudWxsO1xuICBcdH1cbiAgfSk7XG5cbiAgLy8gQGZhY3RvcnkgTC5kaXZJY29uKG9wdGlvbnM6IERpdkljb24gb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIGBEaXZJY29uYCBpbnN0YW5jZSB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBkaXZJY29uKG9wdGlvbnMpIHtcbiAgXHRyZXR1cm4gbmV3IERpdkljb24ob3B0aW9ucyk7XG4gIH1cblxuICBJY29uLkRlZmF1bHQgPSBJY29uRGVmYXVsdDtcblxuICAvKlxuICAgKiBAY2xhc3MgR3JpZExheWVyXG4gICAqIEBpbmhlcml0cyBMYXllclxuICAgKiBAYWthIEwuR3JpZExheWVyXG4gICAqXG4gICAqIEdlbmVyaWMgY2xhc3MgZm9yIGhhbmRsaW5nIGEgdGlsZWQgZ3JpZCBvZiBIVE1MIGVsZW1lbnRzLiBUaGlzIGlzIHRoZSBiYXNlIGNsYXNzIGZvciBhbGwgdGlsZSBsYXllcnMgYW5kIHJlcGxhY2VzIGBUaWxlTGF5ZXIuQ2FudmFzYC5cbiAgICogR3JpZExheWVyIGNhbiBiZSBleHRlbmRlZCB0byBjcmVhdGUgYSB0aWxlZCBncmlkIG9mIEhUTUwgZWxlbWVudHMgbGlrZSBgPGNhbnZhcz5gLCBgPGltZz5gIG9yIGA8ZGl2PmAuIEdyaWRMYXllciB3aWxsIGhhbmRsZSBjcmVhdGluZyBhbmQgYW5pbWF0aW5nIHRoZXNlIERPTSBlbGVtZW50cyBmb3IgeW91LlxuICAgKlxuICAgKlxuICAgKiBAc2VjdGlvbiBTeW5jaHJvbm91cyB1c2FnZVxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBUbyBjcmVhdGUgYSBjdXN0b20gbGF5ZXIsIGV4dGVuZCBHcmlkTGF5ZXIgYW5kIGltcGxlbWVudCB0aGUgYGNyZWF0ZVRpbGUoKWAgbWV0aG9kLCB3aGljaCB3aWxsIGJlIHBhc3NlZCBhIGBQb2ludGAgb2JqZWN0IHdpdGggdGhlIGB4YCwgYHlgLCBhbmQgYHpgICh6b29tIGxldmVsKSBjb29yZGluYXRlcyB0byBkcmF3IHlvdXIgdGlsZS5cbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIENhbnZhc0xheWVyID0gTC5HcmlkTGF5ZXIuZXh0ZW5kKHtcbiAgICogICAgIGNyZWF0ZVRpbGU6IGZ1bmN0aW9uKGNvb3Jkcyl7XG4gICAqICAgICAgICAgLy8gY3JlYXRlIGEgPGNhbnZhcz4gZWxlbWVudCBmb3IgZHJhd2luZ1xuICAgKiAgICAgICAgIHZhciB0aWxlID0gTC5Eb21VdGlsLmNyZWF0ZSgnY2FudmFzJywgJ2xlYWZsZXQtdGlsZScpO1xuICAgKlxuICAgKiAgICAgICAgIC8vIHNldHVwIHRpbGUgd2lkdGggYW5kIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICogICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgICogICAgICAgICB0aWxlLndpZHRoID0gc2l6ZS54O1xuICAgKiAgICAgICAgIHRpbGUuaGVpZ2h0ID0gc2l6ZS55O1xuICAgKlxuICAgKiAgICAgICAgIC8vIGdldCBhIGNhbnZhcyBjb250ZXh0IGFuZCBkcmF3IHNvbWV0aGluZyBvbiBpdCB1c2luZyBjb29yZHMueCwgY29vcmRzLnkgYW5kIGNvb3Jkcy56XG4gICAqICAgICAgICAgdmFyIGN0eCA9IHRpbGUuZ2V0Q29udGV4dCgnMmQnKTtcbiAgICpcbiAgICogICAgICAgICAvLyByZXR1cm4gdGhlIHRpbGUgc28gaXQgY2FuIGJlIHJlbmRlcmVkIG9uIHNjcmVlblxuICAgKiAgICAgICAgIHJldHVybiB0aWxlO1xuICAgKiAgICAgfVxuICAgKiB9KTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBzZWN0aW9uIEFzeW5jaHJvbm91cyB1c2FnZVxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBUaWxlIGNyZWF0aW9uIGNhbiBhbHNvIGJlIGFzeW5jaHJvbm91cywgdGhpcyBpcyB1c2VmdWwgd2hlbiB1c2luZyBhIHRoaXJkLXBhcnR5IGRyYXdpbmcgbGlicmFyeS4gT25jZSB0aGUgdGlsZSBpcyBmaW5pc2hlZCBkcmF3aW5nIGl0IGNhbiBiZSBwYXNzZWQgdG8gdGhlIGBkb25lKClgIGNhbGxiYWNrLlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiB2YXIgQ2FudmFzTGF5ZXIgPSBMLkdyaWRMYXllci5leHRlbmQoe1xuICAgKiAgICAgY3JlYXRlVGlsZTogZnVuY3Rpb24oY29vcmRzLCBkb25lKXtcbiAgICogICAgICAgICB2YXIgZXJyb3I7XG4gICAqXG4gICAqICAgICAgICAgLy8gY3JlYXRlIGEgPGNhbnZhcz4gZWxlbWVudCBmb3IgZHJhd2luZ1xuICAgKiAgICAgICAgIHZhciB0aWxlID0gTC5Eb21VdGlsLmNyZWF0ZSgnY2FudmFzJywgJ2xlYWZsZXQtdGlsZScpO1xuICAgKlxuICAgKiAgICAgICAgIC8vIHNldHVwIHRpbGUgd2lkdGggYW5kIGhlaWdodCBhY2NvcmRpbmcgdG8gdGhlIG9wdGlvbnNcbiAgICogICAgICAgICB2YXIgc2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgICogICAgICAgICB0aWxlLndpZHRoID0gc2l6ZS54O1xuICAgKiAgICAgICAgIHRpbGUuaGVpZ2h0ID0gc2l6ZS55O1xuICAgKlxuICAgKiAgICAgICAgIC8vIGRyYXcgc29tZXRoaW5nIGFzeW5jaHJvbm91c2x5IGFuZCBwYXNzIHRoZSB0aWxlIHRvIHRoZSBkb25lKCkgY2FsbGJhY2tcbiAgICogICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgKiAgICAgICAgICAgICBkb25lKGVycm9yLCB0aWxlKTtcbiAgICogICAgICAgICB9LCAxMDAwKTtcbiAgICpcbiAgICogICAgICAgICByZXR1cm4gdGlsZTtcbiAgICogICAgIH1cbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBAc2VjdGlvblxuICAgKi9cblxuXG4gIHZhciBHcmlkTGF5ZXIgPSBMYXllci5leHRlbmQoe1xuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAYWthIEdyaWRMYXllciBvcHRpb25zXG4gIFx0b3B0aW9uczoge1xuICBcdFx0Ly8gQG9wdGlvbiB0aWxlU2l6ZTogTnVtYmVyfFBvaW50ID0gMjU2XG4gIFx0XHQvLyBXaWR0aCBhbmQgaGVpZ2h0IG9mIHRpbGVzIGluIHRoZSBncmlkLiBVc2UgYSBudW1iZXIgaWYgd2lkdGggYW5kIGhlaWdodCBhcmUgZXF1YWwsIG9yIGBMLnBvaW50KHdpZHRoLCBoZWlnaHQpYCBvdGhlcndpc2UuXG4gIFx0XHR0aWxlU2l6ZTogMjU2LFxuXG4gIFx0XHQvLyBAb3B0aW9uIG9wYWNpdHk6IE51bWJlciA9IDEuMFxuICBcdFx0Ly8gT3BhY2l0eSBvZiB0aGUgdGlsZXMuIENhbiBiZSB1c2VkIGluIHRoZSBgY3JlYXRlVGlsZSgpYCBmdW5jdGlvbi5cbiAgXHRcdG9wYWNpdHk6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gdXBkYXRlV2hlbklkbGU6IEJvb2xlYW4gPSAoZGVwZW5kcylcbiAgXHRcdC8vIExvYWQgbmV3IHRpbGVzIG9ubHkgd2hlbiBwYW5uaW5nIGVuZHMuXG4gIFx0XHQvLyBgdHJ1ZWAgYnkgZGVmYXVsdCBvbiBtb2JpbGUgYnJvd3NlcnMsIGluIG9yZGVyIHRvIGF2b2lkIHRvbyBtYW55IHJlcXVlc3RzIGFuZCBrZWVwIHNtb290aCBuYXZpZ2F0aW9uLlxuICBcdFx0Ly8gYGZhbHNlYCBvdGhlcndpc2UgaW4gb3JkZXIgdG8gZGlzcGxheSBuZXcgdGlsZXMgX2R1cmluZ18gcGFubmluZywgc2luY2UgaXQgaXMgZWFzeSB0byBwYW4gb3V0c2lkZSB0aGVcbiAgXHRcdC8vIFtga2VlcEJ1ZmZlcmBdKCNncmlkbGF5ZXIta2VlcGJ1ZmZlcikgb3B0aW9uIGluIGRlc2t0b3AgYnJvd3NlcnMuXG4gIFx0XHR1cGRhdGVXaGVuSWRsZTogbW9iaWxlLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHVwZGF0ZVdoZW5ab29taW5nOiBCb29sZWFuID0gdHJ1ZVxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgYSBzbW9vdGggem9vbSBhbmltYXRpb24gKGR1cmluZyBhIFt0b3VjaCB6b29tXSgjbWFwLXRvdWNoem9vbSkgb3IgYSBbYGZseVRvKClgXSgjbWFwLWZseXRvKSkgd2lsbCB1cGRhdGUgZ3JpZCBsYXllcnMgZXZlcnkgaW50ZWdlciB6b29tIGxldmVsLiBTZXR0aW5nIHRoaXMgb3B0aW9uIHRvIGBmYWxzZWAgd2lsbCB1cGRhdGUgdGhlIGdyaWQgbGF5ZXIgb25seSB3aGVuIHRoZSBzbW9vdGggYW5pbWF0aW9uIGVuZHMuXG4gIFx0XHR1cGRhdGVXaGVuWm9vbWluZzogdHJ1ZSxcblxuICBcdFx0Ly8gQG9wdGlvbiB1cGRhdGVJbnRlcnZhbDogTnVtYmVyID0gMjAwXG4gIFx0XHQvLyBUaWxlcyB3aWxsIG5vdCB1cGRhdGUgbW9yZSB0aGFuIG9uY2UgZXZlcnkgYHVwZGF0ZUludGVydmFsYCBtaWxsaXNlY29uZHMgd2hlbiBwYW5uaW5nLlxuICBcdFx0dXBkYXRlSW50ZXJ2YWw6IDIwMCxcblxuICBcdFx0Ly8gQG9wdGlvbiB6SW5kZXg6IE51bWJlciA9IDFcbiAgXHRcdC8vIFRoZSBleHBsaWNpdCB6SW5kZXggb2YgdGhlIHRpbGUgbGF5ZXIuXG4gIFx0XHR6SW5kZXg6IDEsXG5cbiAgXHRcdC8vIEBvcHRpb24gYm91bmRzOiBMYXRMbmdCb3VuZHMgPSB1bmRlZmluZWRcbiAgXHRcdC8vIElmIHNldCwgdGlsZXMgd2lsbCBvbmx5IGJlIGxvYWRlZCBpbnNpZGUgdGhlIHNldCBgTGF0TG5nQm91bmRzYC5cbiAgXHRcdGJvdW5kczogbnVsbCxcblxuICBcdFx0Ly8gQG9wdGlvbiBtaW5ab29tOiBOdW1iZXIgPSAwXG4gIFx0XHQvLyBUaGUgbWluaW11bSB6b29tIGxldmVsIGRvd24gdG8gd2hpY2ggdGhpcyBsYXllciB3aWxsIGJlIGRpc3BsYXllZCAoaW5jbHVzaXZlKS5cbiAgXHRcdG1pblpvb206IDAsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWF4Wm9vbTogTnVtYmVyID0gdW5kZWZpbmVkXG4gIFx0XHQvLyBUaGUgbWF4aW11bSB6b29tIGxldmVsIHVwIHRvIHdoaWNoIHRoaXMgbGF5ZXIgd2lsbCBiZSBkaXNwbGF5ZWQgKGluY2x1c2l2ZSkuXG4gIFx0XHRtYXhab29tOiB1bmRlZmluZWQsXG5cbiAgXHRcdC8vIEBvcHRpb24gbWF4TmF0aXZlWm9vbTogTnVtYmVyID0gdW5kZWZpbmVkXG4gIFx0XHQvLyBNYXhpbXVtIHpvb20gbnVtYmVyIHRoZSB0aWxlIHNvdXJjZSBoYXMgYXZhaWxhYmxlLiBJZiBpdCBpcyBzcGVjaWZpZWQsXG4gIFx0XHQvLyB0aGUgdGlsZXMgb24gYWxsIHpvb20gbGV2ZWxzIGhpZ2hlciB0aGFuIGBtYXhOYXRpdmVab29tYCB3aWxsIGJlIGxvYWRlZFxuICBcdFx0Ly8gZnJvbSBgbWF4TmF0aXZlWm9vbWAgbGV2ZWwgYW5kIGF1dG8tc2NhbGVkLlxuICBcdFx0bWF4TmF0aXZlWm9vbTogdW5kZWZpbmVkLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG1pbk5hdGl2ZVpvb206IE51bWJlciA9IHVuZGVmaW5lZFxuICBcdFx0Ly8gTWluaW11bSB6b29tIG51bWJlciB0aGUgdGlsZSBzb3VyY2UgaGFzIGF2YWlsYWJsZS4gSWYgaXQgaXMgc3BlY2lmaWVkLFxuICBcdFx0Ly8gdGhlIHRpbGVzIG9uIGFsbCB6b29tIGxldmVscyBsb3dlciB0aGFuIGBtaW5OYXRpdmVab29tYCB3aWxsIGJlIGxvYWRlZFxuICBcdFx0Ly8gZnJvbSBgbWluTmF0aXZlWm9vbWAgbGV2ZWwgYW5kIGF1dG8tc2NhbGVkLlxuICBcdFx0bWluTmF0aXZlWm9vbTogdW5kZWZpbmVkLFxuXG4gIFx0XHQvLyBAb3B0aW9uIG5vV3JhcDogQm9vbGVhbiA9IGZhbHNlXG4gIFx0XHQvLyBXaGV0aGVyIHRoZSBsYXllciBpcyB3cmFwcGVkIGFyb3VuZCB0aGUgYW50aW1lcmlkaWFuLiBJZiBgdHJ1ZWAsIHRoZVxuICBcdFx0Ly8gR3JpZExheWVyIHdpbGwgb25seSBiZSBkaXNwbGF5ZWQgb25jZSBhdCBsb3cgem9vbSBsZXZlbHMuIEhhcyBub1xuICBcdFx0Ly8gZWZmZWN0IHdoZW4gdGhlIFttYXAgQ1JTXSgjbWFwLWNycykgZG9lc24ndCB3cmFwIGFyb3VuZC4gQ2FuIGJlIHVzZWRcbiAgXHRcdC8vIGluIGNvbWJpbmF0aW9uIHdpdGggW2Bib3VuZHNgXSgjZ3JpZGxheWVyLWJvdW5kcykgdG8gcHJldmVudCByZXF1ZXN0aW5nXG4gIFx0XHQvLyB0aWxlcyBvdXRzaWRlIHRoZSBDUlMgbGltaXRzLlxuICBcdFx0bm9XcmFwOiBmYWxzZSxcblxuICBcdFx0Ly8gQG9wdGlvbiBwYW5lOiBTdHJpbmcgPSAndGlsZVBhbmUnXG4gIFx0XHQvLyBgTWFwIHBhbmVgIHdoZXJlIHRoZSBncmlkIGxheWVyIHdpbGwgYmUgYWRkZWQuXG4gIFx0XHRwYW5lOiAndGlsZVBhbmUnLFxuXG4gIFx0XHQvLyBAb3B0aW9uIGNsYXNzTmFtZTogU3RyaW5nID0gJydcbiAgXHRcdC8vIEEgY3VzdG9tIGNsYXNzIG5hbWUgdG8gYXNzaWduIHRvIHRoZSB0aWxlIGxheWVyLiBFbXB0eSBieSBkZWZhdWx0LlxuICBcdFx0Y2xhc3NOYW1lOiAnJyxcblxuICBcdFx0Ly8gQG9wdGlvbiBrZWVwQnVmZmVyOiBOdW1iZXIgPSAyXG4gIFx0XHQvLyBXaGVuIHBhbm5pbmcgdGhlIG1hcCwga2VlcCB0aGlzIG1hbnkgcm93cyBhbmQgY29sdW1ucyBvZiB0aWxlcyBiZWZvcmUgdW5sb2FkaW5nIHRoZW0uXG4gIFx0XHRrZWVwQnVmZmVyOiAyXG4gIFx0fSxcblxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0XHRzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5faW5pdENvbnRhaW5lcigpO1xuXG4gIFx0XHR0aGlzLl9sZXZlbHMgPSB7fTtcbiAgXHRcdHRoaXMuX3RpbGVzID0ge307XG5cbiAgXHRcdHRoaXMuX3Jlc2V0VmlldygpO1xuICBcdFx0dGhpcy5fdXBkYXRlKCk7XG4gIFx0fSxcblxuICBcdGJlZm9yZUFkZDogZnVuY3Rpb24gKG1hcCkge1xuICBcdFx0bWFwLl9hZGRab29tTGltaXQodGhpcyk7XG4gIFx0fSxcblxuICBcdG9uUmVtb3ZlOiBmdW5jdGlvbiAobWFwKSB7XG4gIFx0XHR0aGlzLl9yZW1vdmVBbGxUaWxlcygpO1xuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRtYXAuX3JlbW92ZVpvb21MaW1pdCh0aGlzKTtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IG51bGw7XG4gIFx0XHR0aGlzLl90aWxlWm9vbSA9IHVuZGVmaW5lZDtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvRnJvbnQ6IHRoaXNcbiAgXHQvLyBCcmluZ3MgdGhlIHRpbGUgbGF5ZXIgdG8gdGhlIHRvcCBvZiBhbGwgdGlsZSBsYXllcnMuXG4gIFx0YnJpbmdUb0Zyb250OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRvRnJvbnQodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdFx0dGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1heCk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBicmluZ1RvQmFjazogdGhpc1xuICBcdC8vIEJyaW5ncyB0aGUgdGlsZSBsYXllciB0byB0aGUgYm90dG9tIG9mIGFsbCB0aWxlIGxheWVycy5cbiAgXHRicmluZ1RvQmFjazogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcCkge1xuICBcdFx0XHR0b0JhY2sodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdFx0dGhpcy5fc2V0QXV0b1pJbmRleChNYXRoLm1pbik7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gdGhpcztcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBnZXRDb250YWluZXI6IEhUTUxFbGVtZW50XG4gIFx0Ly8gUmV0dXJucyB0aGUgSFRNTCBlbGVtZW50IHRoYXQgY29udGFpbnMgdGhlIHRpbGVzIGZvciB0aGlzIGxheWVyLlxuICBcdGdldENvbnRhaW5lcjogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2NvbnRhaW5lcjtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRPcGFjaXR5KG9wYWNpdHk6IE51bWJlcik6IHRoaXNcbiAgXHQvLyBDaGFuZ2VzIHRoZSBbb3BhY2l0eV0oI2dyaWRsYXllci1vcGFjaXR5KSBvZiB0aGUgZ3JpZCBsYXllci5cbiAgXHRzZXRPcGFjaXR5OiBmdW5jdGlvbiAob3BhY2l0eSkge1xuICBcdFx0dGhpcy5vcHRpb25zLm9wYWNpdHkgPSBvcGFjaXR5O1xuICBcdFx0dGhpcy5fdXBkYXRlT3BhY2l0eSgpO1xuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2Qgc2V0WkluZGV4KHpJbmRleDogTnVtYmVyKTogdGhpc1xuICBcdC8vIENoYW5nZXMgdGhlIFt6SW5kZXhdKCNncmlkbGF5ZXItemluZGV4KSBvZiB0aGUgZ3JpZCBsYXllci5cbiAgXHRzZXRaSW5kZXg6IGZ1bmN0aW9uICh6SW5kZXgpIHtcbiAgXHRcdHRoaXMub3B0aW9ucy56SW5kZXggPSB6SW5kZXg7XG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcblxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgaXNMb2FkaW5nOiBCb29sZWFuXG4gIFx0Ly8gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IHRpbGUgaW4gdGhlIGdyaWQgbGF5ZXIgaGFzIG5vdCBmaW5pc2hlZCBsb2FkaW5nLlxuICBcdGlzTG9hZGluZzogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2xvYWRpbmc7XG4gIFx0fSxcblxuICBcdC8vIEBtZXRob2QgcmVkcmF3OiB0aGlzXG4gIFx0Ly8gQ2F1c2VzIHRoZSBsYXllciB0byBjbGVhciBhbGwgdGhlIHRpbGVzIGFuZCByZXF1ZXN0IHRoZW0gYWdhaW4uXG4gIFx0cmVkcmF3OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwKSB7XG4gIFx0XHRcdHRoaXMuX3JlbW92ZUFsbFRpbGVzKCk7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRoaXM7XG4gIFx0fSxcblxuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGV2ZW50cyA9IHtcbiAgXHRcdFx0dmlld3ByZXJlc2V0OiB0aGlzLl9pbnZhbGlkYXRlQWxsLFxuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMuX3Jlc2V0VmlldyxcbiAgXHRcdFx0em9vbTogdGhpcy5fcmVzZXRWaWV3LFxuICBcdFx0XHRtb3ZlZW5kOiB0aGlzLl9vbk1vdmVFbmRcbiAgXHRcdH07XG5cbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLnVwZGF0ZVdoZW5JZGxlKSB7XG4gIFx0XHRcdC8vIHVwZGF0ZSB0aWxlcyBvbiBtb3ZlLCBidXQgbm90IG1vcmUgb2Z0ZW4gdGhhbiBvbmNlIHBlciBnaXZlbiBpbnRlcnZhbFxuICBcdFx0XHRpZiAoIXRoaXMuX29uTW92ZSkge1xuICBcdFx0XHRcdHRoaXMuX29uTW92ZSA9IHRocm90dGxlKHRoaXMuX29uTW92ZUVuZCwgdGhpcy5vcHRpb25zLnVwZGF0ZUludGVydmFsLCB0aGlzKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdGV2ZW50cy5tb3ZlID0gdGhpcy5fb25Nb3ZlO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XG4gIFx0XHRcdGV2ZW50cy56b29tYW5pbSA9IHRoaXMuX2FuaW1hdGVab29tO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gZXZlbnRzO1xuICBcdH0sXG5cbiAgXHQvLyBAc2VjdGlvbiBFeHRlbnNpb24gbWV0aG9kc1xuICBcdC8vIExheWVycyBleHRlbmRpbmcgYEdyaWRMYXllcmAgc2hhbGwgcmVpbXBsZW1lbnQgdGhlIGZvbGxvd2luZyBtZXRob2QuXG4gIFx0Ly8gQG1ldGhvZCBjcmVhdGVUaWxlKGNvb3JkczogT2JqZWN0LCBkb25lPzogRnVuY3Rpb24pOiBIVE1MRWxlbWVudFxuICBcdC8vIENhbGxlZCBvbmx5IGludGVybmFsbHksIG11c3QgYmUgb3ZlcnJpZGRlbiBieSBjbGFzc2VzIGV4dGVuZGluZyBgR3JpZExheWVyYC5cbiAgXHQvLyBSZXR1cm5zIHRoZSBgSFRNTEVsZW1lbnRgIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGdpdmVuIGBjb29yZHNgLiBJZiB0aGUgYGRvbmVgIGNhbGxiYWNrXG4gIFx0Ly8gaXMgc3BlY2lmaWVkLCBpdCBtdXN0IGJlIGNhbGxlZCB3aGVuIHRoZSB0aWxlIGhhcyBmaW5pc2hlZCBsb2FkaW5nIGFuZCBkcmF3aW5nLlxuICBcdGNyZWF0ZVRpbGU6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQHNlY3Rpb25cbiAgXHQvLyBAbWV0aG9kIGdldFRpbGVTaXplOiBQb2ludFxuICBcdC8vIE5vcm1hbGl6ZXMgdGhlIFt0aWxlU2l6ZSBvcHRpb25dKCNncmlkbGF5ZXItdGlsZXNpemUpIGludG8gYSBwb2ludC4gVXNlZCBieSB0aGUgYGNyZWF0ZVRpbGUoKWAgbWV0aG9kLlxuICBcdGdldFRpbGVTaXplOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgcyA9IHRoaXMub3B0aW9ucy50aWxlU2l6ZTtcbiAgXHRcdHJldHVybiBzIGluc3RhbmNlb2YgUG9pbnQgPyBzIDogbmV3IFBvaW50KHMsIHMpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlWkluZGV4OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fY29udGFpbmVyICYmIHRoaXMub3B0aW9ucy56SW5kZXggIT09IHVuZGVmaW5lZCAmJiB0aGlzLm9wdGlvbnMuekluZGV4ICE9PSBudWxsKSB7XG4gIFx0XHRcdHRoaXMuX2NvbnRhaW5lci5zdHlsZS56SW5kZXggPSB0aGlzLm9wdGlvbnMuekluZGV4O1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfc2V0QXV0b1pJbmRleDogZnVuY3Rpb24gKGNvbXBhcmUpIHtcbiAgXHRcdC8vIGdvIHRocm91Z2ggYWxsIG90aGVyIGxheWVycyBvZiB0aGUgc2FtZSBwYW5lLCBzZXQgekluZGV4IHRvIG1heCArIDEgKGZyb250KSBvciBtaW4gLSAxIChiYWNrKVxuXG4gIFx0XHR2YXIgbGF5ZXJzID0gdGhpcy5nZXRQYW5lKCkuY2hpbGRyZW4sXG4gIFx0XHQgICAgZWRnZVpJbmRleCA9IC1jb21wYXJlKC1JbmZpbml0eSwgSW5maW5pdHkpOyAvLyAtSW5maW5pdHkgZm9yIG1heCwgSW5maW5pdHkgZm9yIG1pblxuXG4gIFx0XHRmb3IgKHZhciBpID0gMCwgbGVuID0gbGF5ZXJzLmxlbmd0aCwgekluZGV4OyBpIDwgbGVuOyBpKyspIHtcblxuICBcdFx0XHR6SW5kZXggPSBsYXllcnNbaV0uc3R5bGUuekluZGV4O1xuXG4gIFx0XHRcdGlmIChsYXllcnNbaV0gIT09IHRoaXMuX2NvbnRhaW5lciAmJiB6SW5kZXgpIHtcbiAgXHRcdFx0XHRlZGdlWkluZGV4ID0gY29tcGFyZShlZGdlWkluZGV4LCArekluZGV4KTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRpZiAoaXNGaW5pdGUoZWRnZVpJbmRleCkpIHtcbiAgXHRcdFx0dGhpcy5vcHRpb25zLnpJbmRleCA9IGVkZ2VaSW5kZXggKyBjb21wYXJlKC0xLCAxKTtcbiAgXHRcdFx0dGhpcy5fdXBkYXRlWkluZGV4KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVPcGFjaXR5OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCkgeyByZXR1cm47IH1cblxuICBcdFx0Ly8gSUUgZG9lc24ndCBpbmhlcml0IGZpbHRlciBvcGFjaXR5IHByb3Blcmx5LCBzbyB3ZSdyZSBmb3JjZWQgdG8gc2V0IGl0IG9uIHRpbGVzXG4gIFx0XHRpZiAoaWVsdDkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHNldE9wYWNpdHkodGhpcy5fY29udGFpbmVyLCB0aGlzLm9wdGlvbnMub3BhY2l0eSk7XG5cbiAgXHRcdHZhciBub3cgPSArbmV3IERhdGUoKSxcbiAgXHRcdCAgICBuZXh0RnJhbWUgPSBmYWxzZSxcbiAgXHRcdCAgICB3aWxsUHJ1bmUgPSBmYWxzZTtcblxuICBcdFx0Zm9yICh2YXIga2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgXHRcdFx0aWYgKCF0aWxlLmN1cnJlbnQgfHwgIXRpbGUubG9hZGVkKSB7IGNvbnRpbnVlOyB9XG5cbiAgXHRcdFx0dmFyIGZhZGUgPSBNYXRoLm1pbigxLCAobm93IC0gdGlsZS5sb2FkZWQpIC8gMjAwKTtcblxuICBcdFx0XHRzZXRPcGFjaXR5KHRpbGUuZWwsIGZhZGUpO1xuICBcdFx0XHRpZiAoZmFkZSA8IDEpIHtcbiAgXHRcdFx0XHRuZXh0RnJhbWUgPSB0cnVlO1xuICBcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdGlmICh0aWxlLmFjdGl2ZSkge1xuICBcdFx0XHRcdFx0d2lsbFBydW5lID0gdHJ1ZTtcbiAgXHRcdFx0XHR9IGVsc2Uge1xuICBcdFx0XHRcdFx0dGhpcy5fb25PcGFxdWVUaWxlKHRpbGUpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0XHR0aWxlLmFjdGl2ZSA9IHRydWU7XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0aWYgKHdpbGxQcnVuZSAmJiAhdGhpcy5fbm9QcnVuZSkgeyB0aGlzLl9wcnVuZVRpbGVzKCk7IH1cblxuICBcdFx0aWYgKG5leHRGcmFtZSkge1xuICBcdFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fZmFkZUZyYW1lKTtcbiAgXHRcdFx0dGhpcy5fZmFkZUZyYW1lID0gcmVxdWVzdEFuaW1GcmFtZSh0aGlzLl91cGRhdGVPcGFjaXR5LCB0aGlzKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X29uT3BhcXVlVGlsZTogZmFsc2VGbixcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fY29udGFpbmVyKSB7IHJldHVybjsgfVxuXG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtbGF5ZXIgJyArICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnKSk7XG4gIFx0XHR0aGlzLl91cGRhdGVaSW5kZXgoKTtcblxuICBcdFx0aWYgKHRoaXMub3B0aW9ucy5vcGFjaXR5IDwgMSkge1xuICBcdFx0XHR0aGlzLl91cGRhdGVPcGFjaXR5KCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuZ2V0UGFuZSgpLmFwcGVuZENoaWxkKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0fSxcblxuICBcdF91cGRhdGVMZXZlbHM6IGZ1bmN0aW9uICgpIHtcblxuICBcdFx0dmFyIHpvb20gPSB0aGlzLl90aWxlWm9vbSxcbiAgXHRcdCAgICBtYXhab29tID0gdGhpcy5vcHRpb25zLm1heFpvb207XG5cbiAgXHRcdGlmICh6b29tID09PSB1bmRlZmluZWQpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuXG4gIFx0XHRmb3IgKHZhciB6IGluIHRoaXMuX2xldmVscykge1xuICBcdFx0XHR6ID0gTnVtYmVyKHopO1xuICBcdFx0XHRpZiAodGhpcy5fbGV2ZWxzW3pdLmVsLmNoaWxkcmVuLmxlbmd0aCB8fCB6ID09PSB6b29tKSB7XG4gIFx0XHRcdFx0dGhpcy5fbGV2ZWxzW3pdLmVsLnN0eWxlLnpJbmRleCA9IG1heFpvb20gLSBNYXRoLmFicyh6b29tIC0geik7XG4gIFx0XHRcdFx0dGhpcy5fb25VcGRhdGVMZXZlbCh6KTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRyZW1vdmUodGhpcy5fbGV2ZWxzW3pdLmVsKTtcbiAgXHRcdFx0XHR0aGlzLl9yZW1vdmVUaWxlc0F0Wm9vbSh6KTtcbiAgXHRcdFx0XHR0aGlzLl9vblJlbW92ZUxldmVsKHopO1xuICBcdFx0XHRcdGRlbGV0ZSB0aGlzLl9sZXZlbHNbel07XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0dmFyIGxldmVsID0gdGhpcy5fbGV2ZWxzW3pvb21dLFxuICBcdFx0ICAgIG1hcCA9IHRoaXMuX21hcDtcblxuICBcdFx0aWYgKCFsZXZlbCkge1xuICBcdFx0XHRsZXZlbCA9IHRoaXMuX2xldmVsc1t6b29tXSA9IHt9O1xuXG4gIFx0XHRcdGxldmVsLmVsID0gY3JlYXRlJDEoJ2RpdicsICdsZWFmbGV0LXRpbGUtY29udGFpbmVyIGxlYWZsZXQtem9vbS1hbmltYXRlZCcsIHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRcdGxldmVsLmVsLnN0eWxlLnpJbmRleCA9IG1heFpvb207XG5cbiAgXHRcdFx0bGV2ZWwub3JpZ2luID0gbWFwLnByb2plY3QobWFwLnVucHJvamVjdChtYXAuZ2V0UGl4ZWxPcmlnaW4oKSksIHpvb20pLnJvdW5kKCk7XG4gIFx0XHRcdGxldmVsLnpvb20gPSB6b29tO1xuXG4gIFx0XHRcdHRoaXMuX3NldFpvb21UcmFuc2Zvcm0obGV2ZWwsIG1hcC5nZXRDZW50ZXIoKSwgbWFwLmdldFpvb20oKSk7XG5cbiAgXHRcdFx0Ly8gZm9yY2UgdGhlIGJyb3dzZXIgdG8gY29uc2lkZXIgdGhlIG5ld2x5IGFkZGVkIGVsZW1lbnQgZm9yIHRyYW5zaXRpb25cbiAgXHRcdFx0ZmFsc2VGbihsZXZlbC5lbC5vZmZzZXRXaWR0aCk7XG5cbiAgXHRcdFx0dGhpcy5fb25DcmVhdGVMZXZlbChsZXZlbCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2xldmVsID0gbGV2ZWw7XG5cbiAgXHRcdHJldHVybiBsZXZlbDtcbiAgXHR9LFxuXG4gIFx0X29uVXBkYXRlTGV2ZWw6IGZhbHNlRm4sXG5cbiAgXHRfb25SZW1vdmVMZXZlbDogZmFsc2VGbixcblxuICBcdF9vbkNyZWF0ZUxldmVsOiBmYWxzZUZuLFxuXG4gIFx0X3BydW5lVGlsZXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fbWFwKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dmFyIGtleSwgdGlsZTtcblxuICBcdFx0dmFyIHpvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpO1xuICBcdFx0aWYgKHpvb20gPiB0aGlzLm9wdGlvbnMubWF4Wm9vbSB8fFxuICBcdFx0XHR6b29tIDwgdGhpcy5vcHRpb25zLm1pblpvb20pIHtcbiAgXHRcdFx0dGhpcy5fcmVtb3ZlQWxsVGlsZXMoKTtcbiAgXHRcdFx0cmV0dXJuO1xuICBcdFx0fVxuXG4gIFx0XHRmb3IgKGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHR0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcbiAgXHRcdFx0dGlsZS5yZXRhaW4gPSB0aWxlLmN1cnJlbnQ7XG4gIFx0XHR9XG5cbiAgXHRcdGZvciAoa2V5IGluIHRoaXMuX3RpbGVzKSB7XG4gIFx0XHRcdHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuICBcdFx0XHRpZiAodGlsZS5jdXJyZW50ICYmICF0aWxlLmFjdGl2ZSkge1xuICBcdFx0XHRcdHZhciBjb29yZHMgPSB0aWxlLmNvb3JkcztcbiAgXHRcdFx0XHRpZiAoIXRoaXMuX3JldGFpblBhcmVudChjb29yZHMueCwgY29vcmRzLnksIGNvb3Jkcy56LCBjb29yZHMueiAtIDUpKSB7XG4gIFx0XHRcdFx0XHR0aGlzLl9yZXRhaW5DaGlsZHJlbihjb29yZHMueCwgY29vcmRzLnksIGNvb3Jkcy56LCBjb29yZHMueiArIDIpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHRmb3IgKGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHRpZiAoIXRoaXMuX3RpbGVzW2tleV0ucmV0YWluKSB7XG4gIFx0XHRcdFx0dGhpcy5fcmVtb3ZlVGlsZShrZXkpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZW1vdmVUaWxlc0F0Wm9vbTogZnVuY3Rpb24gKHpvb20pIHtcbiAgXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHRpZiAodGhpcy5fdGlsZXNba2V5XS5jb29yZHMueiAhPT0gem9vbSkge1xuICBcdFx0XHRcdGNvbnRpbnVlO1xuICBcdFx0XHR9XG4gIFx0XHRcdHRoaXMuX3JlbW92ZVRpbGUoa2V5KTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlbW92ZUFsbFRpbGVzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRmb3IgKHZhciBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dGhpcy5fcmVtb3ZlVGlsZShrZXkpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfaW52YWxpZGF0ZUFsbDogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIgeiBpbiB0aGlzLl9sZXZlbHMpIHtcbiAgXHRcdFx0cmVtb3ZlKHRoaXMuX2xldmVsc1t6XS5lbCk7XG4gIFx0XHRcdHRoaXMuX29uUmVtb3ZlTGV2ZWwoTnVtYmVyKHopKTtcbiAgXHRcdFx0ZGVsZXRlIHRoaXMuX2xldmVsc1t6XTtcbiAgXHRcdH1cbiAgXHRcdHRoaXMuX3JlbW92ZUFsbFRpbGVzKCk7XG5cbiAgXHRcdHRoaXMuX3RpbGVab29tID0gdW5kZWZpbmVkO1xuICBcdH0sXG5cbiAgXHRfcmV0YWluUGFyZW50OiBmdW5jdGlvbiAoeCwgeSwgeiwgbWluWm9vbSkge1xuICBcdFx0dmFyIHgyID0gTWF0aC5mbG9vcih4IC8gMiksXG4gIFx0XHQgICAgeTIgPSBNYXRoLmZsb29yKHkgLyAyKSxcbiAgXHRcdCAgICB6MiA9IHogLSAxLFxuICBcdFx0ICAgIGNvb3JkczIgPSBuZXcgUG9pbnQoK3gyLCAreTIpO1xuICBcdFx0Y29vcmRzMi56ID0gK3oyO1xuXG4gIFx0XHR2YXIga2V5ID0gdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3JkczIpLFxuICBcdFx0ICAgIHRpbGUgPSB0aGlzLl90aWxlc1trZXldO1xuXG4gIFx0XHRpZiAodGlsZSAmJiB0aWxlLmFjdGl2ZSkge1xuICBcdFx0XHR0aWxlLnJldGFpbiA9IHRydWU7XG4gIFx0XHRcdHJldHVybiB0cnVlO1xuXG4gIFx0XHR9IGVsc2UgaWYgKHRpbGUgJiYgdGlsZS5sb2FkZWQpIHtcbiAgXHRcdFx0dGlsZS5yZXRhaW4gPSB0cnVlO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoejIgPiBtaW5ab29tKSB7XG4gIFx0XHRcdHJldHVybiB0aGlzLl9yZXRhaW5QYXJlbnQoeDIsIHkyLCB6MiwgbWluWm9vbSk7XG4gIFx0XHR9XG5cbiAgXHRcdHJldHVybiBmYWxzZTtcbiAgXHR9LFxuXG4gIFx0X3JldGFpbkNoaWxkcmVuOiBmdW5jdGlvbiAoeCwgeSwgeiwgbWF4Wm9vbSkge1xuXG4gIFx0XHRmb3IgKHZhciBpID0gMiAqIHg7IGkgPCAyICogeCArIDI7IGkrKykge1xuICBcdFx0XHRmb3IgKHZhciBqID0gMiAqIHk7IGogPCAyICogeSArIDI7IGorKykge1xuXG4gIFx0XHRcdFx0dmFyIGNvb3JkcyA9IG5ldyBQb2ludChpLCBqKTtcbiAgXHRcdFx0XHRjb29yZHMueiA9IHogKyAxO1xuXG4gIFx0XHRcdFx0dmFyIGtleSA9IHRoaXMuX3RpbGVDb29yZHNUb0tleShjb29yZHMpLFxuICBcdFx0XHRcdCAgICB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcblxuICBcdFx0XHRcdGlmICh0aWxlICYmIHRpbGUuYWN0aXZlKSB7XG4gIFx0XHRcdFx0XHR0aWxlLnJldGFpbiA9IHRydWU7XG4gIFx0XHRcdFx0XHRjb250aW51ZTtcblxuICBcdFx0XHRcdH0gZWxzZSBpZiAodGlsZSAmJiB0aWxlLmxvYWRlZCkge1xuICBcdFx0XHRcdFx0dGlsZS5yZXRhaW4gPSB0cnVlO1xuICBcdFx0XHRcdH1cblxuICBcdFx0XHRcdGlmICh6ICsgMSA8IG1heFpvb20pIHtcbiAgXHRcdFx0XHRcdHRoaXMuX3JldGFpbkNoaWxkcmVuKGksIGosIHogKyAxLCBtYXhab29tKTtcbiAgXHRcdFx0XHR9XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3Jlc2V0VmlldzogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBhbmltYXRpbmcgPSBlICYmIChlLnBpbmNoIHx8IGUuZmx5VG8pO1xuICBcdFx0dGhpcy5fc2V0Vmlldyh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksIHRoaXMuX21hcC5nZXRab29tKCksIGFuaW1hdGluZywgYW5pbWF0aW5nKTtcbiAgXHR9LFxuXG4gIFx0X2FuaW1hdGVab29tOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dGhpcy5fc2V0VmlldyhlLmNlbnRlciwgZS56b29tLCB0cnVlLCBlLm5vVXBkYXRlKTtcbiAgXHR9LFxuXG4gIFx0X2NsYW1wWm9vbTogZnVuY3Rpb24gKHpvb20pIHtcbiAgXHRcdHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuXG4gIFx0XHRpZiAodW5kZWZpbmVkICE9PSBvcHRpb25zLm1pbk5hdGl2ZVpvb20gJiYgem9vbSA8IG9wdGlvbnMubWluTmF0aXZlWm9vbSkge1xuICBcdFx0XHRyZXR1cm4gb3B0aW9ucy5taW5OYXRpdmVab29tO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodW5kZWZpbmVkICE9PSBvcHRpb25zLm1heE5hdGl2ZVpvb20gJiYgb3B0aW9ucy5tYXhOYXRpdmVab29tIDwgem9vbSkge1xuICBcdFx0XHRyZXR1cm4gb3B0aW9ucy5tYXhOYXRpdmVab29tO1xuICBcdFx0fVxuXG4gIFx0XHRyZXR1cm4gem9vbTtcbiAgXHR9LFxuXG4gIFx0X3NldFZpZXc6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20sIG5vUHJ1bmUsIG5vVXBkYXRlKSB7XG4gIFx0XHR2YXIgdGlsZVpvb20gPSBNYXRoLnJvdW5kKHpvb20pO1xuICBcdFx0aWYgKCh0aGlzLm9wdGlvbnMubWF4Wm9vbSAhPT0gdW5kZWZpbmVkICYmIHRpbGVab29tID4gdGhpcy5vcHRpb25zLm1heFpvb20pIHx8XG4gIFx0XHQgICAgKHRoaXMub3B0aW9ucy5taW5ab29tICE9PSB1bmRlZmluZWQgJiYgdGlsZVpvb20gPCB0aGlzLm9wdGlvbnMubWluWm9vbSkpIHtcbiAgXHRcdFx0dGlsZVpvb20gPSB1bmRlZmluZWQ7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aWxlWm9vbSA9IHRoaXMuX2NsYW1wWm9vbSh0aWxlWm9vbSk7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciB0aWxlWm9vbUNoYW5nZWQgPSB0aGlzLm9wdGlvbnMudXBkYXRlV2hlblpvb21pbmcgJiYgKHRpbGVab29tICE9PSB0aGlzLl90aWxlWm9vbSk7XG5cbiAgXHRcdGlmICghbm9VcGRhdGUgfHwgdGlsZVpvb21DaGFuZ2VkKSB7XG5cbiAgXHRcdFx0dGhpcy5fdGlsZVpvb20gPSB0aWxlWm9vbTtcblxuICBcdFx0XHRpZiAodGhpcy5fYWJvcnRMb2FkaW5nKSB7XG4gIFx0XHRcdFx0dGhpcy5fYWJvcnRMb2FkaW5nKCk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl91cGRhdGVMZXZlbHMoKTtcbiAgXHRcdFx0dGhpcy5fcmVzZXRHcmlkKCk7XG5cbiAgXHRcdFx0aWYgKHRpbGVab29tICE9PSB1bmRlZmluZWQpIHtcbiAgXHRcdFx0XHR0aGlzLl91cGRhdGUoY2VudGVyKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdGlmICghbm9QcnVuZSkge1xuICBcdFx0XHRcdHRoaXMuX3BydW5lVGlsZXMoKTtcbiAgXHRcdFx0fVxuXG4gIFx0XHRcdC8vIEZsYWcgdG8gcHJldmVudCBfdXBkYXRlT3BhY2l0eSBmcm9tIHBydW5pbmcgdGlsZXMgZHVyaW5nXG4gIFx0XHRcdC8vIGEgem9vbSBhbmltIG9yIGEgcGluY2ggZ2VzdHVyZVxuICBcdFx0XHR0aGlzLl9ub1BydW5lID0gISFub1BydW5lO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9zZXRab29tVHJhbnNmb3JtcyhjZW50ZXIsIHpvb20pO1xuICBcdH0sXG5cbiAgXHRfc2V0Wm9vbVRyYW5zZm9ybXM6IGZ1bmN0aW9uIChjZW50ZXIsIHpvb20pIHtcbiAgXHRcdGZvciAodmFyIGkgaW4gdGhpcy5fbGV2ZWxzKSB7XG4gIFx0XHRcdHRoaXMuX3NldFpvb21UcmFuc2Zvcm0odGhpcy5fbGV2ZWxzW2ldLCBjZW50ZXIsIHpvb20pO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfc2V0Wm9vbVRyYW5zZm9ybTogZnVuY3Rpb24gKGxldmVsLCBjZW50ZXIsIHpvb20pIHtcbiAgXHRcdHZhciBzY2FsZSA9IHRoaXMuX21hcC5nZXRab29tU2NhbGUoem9vbSwgbGV2ZWwuem9vbSksXG4gIFx0XHQgICAgdHJhbnNsYXRlID0gbGV2ZWwub3JpZ2luLm11bHRpcGx5Qnkoc2NhbGUpXG4gIFx0XHQgICAgICAgIC5zdWJ0cmFjdCh0aGlzLl9tYXAuX2dldE5ld1BpeGVsT3JpZ2luKGNlbnRlciwgem9vbSkpLnJvdW5kKCk7XG5cbiAgXHRcdGlmIChhbnkzZCkge1xuICBcdFx0XHRzZXRUcmFuc2Zvcm0obGV2ZWwuZWwsIHRyYW5zbGF0ZSwgc2NhbGUpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0c2V0UG9zaXRpb24obGV2ZWwuZWwsIHRyYW5zbGF0ZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZXNldEdyaWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXAsXG4gIFx0XHQgICAgY3JzID0gbWFwLm9wdGlvbnMuY3JzLFxuICBcdFx0ICAgIHRpbGVTaXplID0gdGhpcy5fdGlsZVNpemUgPSB0aGlzLmdldFRpbGVTaXplKCksXG4gIFx0XHQgICAgdGlsZVpvb20gPSB0aGlzLl90aWxlWm9vbTtcblxuICBcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX21hcC5nZXRQaXhlbFdvcmxkQm91bmRzKHRoaXMuX3RpbGVab29tKTtcbiAgXHRcdGlmIChib3VuZHMpIHtcbiAgXHRcdFx0dGhpcy5fZ2xvYmFsVGlsZVJhbmdlID0gdGhpcy5fcHhCb3VuZHNUb1RpbGVSYW5nZShib3VuZHMpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl93cmFwWCA9IGNycy53cmFwTG5nICYmICF0aGlzLm9wdGlvbnMubm9XcmFwICYmIFtcbiAgXHRcdFx0TWF0aC5mbG9vcihtYXAucHJvamVjdChbMCwgY3JzLndyYXBMbmdbMF1dLCB0aWxlWm9vbSkueCAvIHRpbGVTaXplLngpLFxuICBcdFx0XHRNYXRoLmNlaWwobWFwLnByb2plY3QoWzAsIGNycy53cmFwTG5nWzFdXSwgdGlsZVpvb20pLnggLyB0aWxlU2l6ZS55KVxuICBcdFx0XTtcbiAgXHRcdHRoaXMuX3dyYXBZID0gY3JzLndyYXBMYXQgJiYgIXRoaXMub3B0aW9ucy5ub1dyYXAgJiYgW1xuICBcdFx0XHRNYXRoLmZsb29yKG1hcC5wcm9qZWN0KFtjcnMud3JhcExhdFswXSwgMF0sIHRpbGVab29tKS55IC8gdGlsZVNpemUueCksXG4gIFx0XHRcdE1hdGguY2VpbChtYXAucHJvamVjdChbY3JzLndyYXBMYXRbMV0sIDBdLCB0aWxlWm9vbSkueSAvIHRpbGVTaXplLnkpXG4gIFx0XHRdO1xuICBcdH0sXG5cbiAgXHRfb25Nb3ZlRW5kOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21hcCB8fCB0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdH0sXG5cbiAgXHRfZ2V0VGlsZWRQaXhlbEJvdW5kczogZnVuY3Rpb24gKGNlbnRlcikge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBtYXBab29tID0gbWFwLl9hbmltYXRpbmdab29tID8gTWF0aC5tYXgobWFwLl9hbmltYXRlVG9ab29tLCBtYXAuZ2V0Wm9vbSgpKSA6IG1hcC5nZXRab29tKCksXG4gIFx0XHQgICAgc2NhbGUgPSBtYXAuZ2V0Wm9vbVNjYWxlKG1hcFpvb20sIHRoaXMuX3RpbGVab29tKSxcbiAgXHRcdCAgICBwaXhlbENlbnRlciA9IG1hcC5wcm9qZWN0KGNlbnRlciwgdGhpcy5fdGlsZVpvb20pLmZsb29yKCksXG4gIFx0XHQgICAgaGFsZlNpemUgPSBtYXAuZ2V0U2l6ZSgpLmRpdmlkZUJ5KHNjYWxlICogMik7XG5cbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKHBpeGVsQ2VudGVyLnN1YnRyYWN0KGhhbGZTaXplKSwgcGl4ZWxDZW50ZXIuYWRkKGhhbGZTaXplKSk7XG4gIFx0fSxcblxuICBcdC8vIFByaXZhdGUgbWV0aG9kIHRvIGxvYWQgdGlsZXMgaW4gdGhlIGdyaWQncyBhY3RpdmUgem9vbSBsZXZlbCBhY2NvcmRpbmcgdG8gbWFwIGJvdW5kc1xuICBcdF91cGRhdGU6IGZ1bmN0aW9uIChjZW50ZXIpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gIFx0XHRpZiAoIW1hcCkgeyByZXR1cm47IH1cbiAgXHRcdHZhciB6b29tID0gdGhpcy5fY2xhbXBab29tKG1hcC5nZXRab29tKCkpO1xuXG4gIFx0XHRpZiAoY2VudGVyID09PSB1bmRlZmluZWQpIHsgY2VudGVyID0gbWFwLmdldENlbnRlcigpOyB9XG4gIFx0XHRpZiAodGhpcy5fdGlsZVpvb20gPT09IHVuZGVmaW5lZCkgeyByZXR1cm47IH1cdC8vIGlmIG91dCBvZiBtaW56b29tL21heHpvb21cblxuICBcdFx0dmFyIHBpeGVsQm91bmRzID0gdGhpcy5fZ2V0VGlsZWRQaXhlbEJvdW5kcyhjZW50ZXIpLFxuICBcdFx0ICAgIHRpbGVSYW5nZSA9IHRoaXMuX3B4Qm91bmRzVG9UaWxlUmFuZ2UocGl4ZWxCb3VuZHMpLFxuICBcdFx0ICAgIHRpbGVDZW50ZXIgPSB0aWxlUmFuZ2UuZ2V0Q2VudGVyKCksXG4gIFx0XHQgICAgcXVldWUgPSBbXSxcbiAgXHRcdCAgICBtYXJnaW4gPSB0aGlzLm9wdGlvbnMua2VlcEJ1ZmZlcixcbiAgXHRcdCAgICBub1BydW5lUmFuZ2UgPSBuZXcgQm91bmRzKHRpbGVSYW5nZS5nZXRCb3R0b21MZWZ0KCkuc3VidHJhY3QoW21hcmdpbiwgLW1hcmdpbl0pLFxuICBcdFx0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlsZVJhbmdlLmdldFRvcFJpZ2h0KCkuYWRkKFttYXJnaW4sIC1tYXJnaW5dKSk7XG5cbiAgXHRcdC8vIFNhbml0eSBjaGVjazogcGFuaWMgaWYgdGhlIHRpbGUgcmFuZ2UgY29udGFpbnMgSW5maW5pdHkgc29tZXdoZXJlLlxuICBcdFx0aWYgKCEoaXNGaW5pdGUodGlsZVJhbmdlLm1pbi54KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1pbi55KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1heC54KSAmJlxuICBcdFx0ICAgICAgaXNGaW5pdGUodGlsZVJhbmdlLm1heC55KSkpIHsgdGhyb3cgbmV3IEVycm9yKCdBdHRlbXB0ZWQgdG8gbG9hZCBhbiBpbmZpbml0ZSBudW1iZXIgb2YgdGlsZXMnKTsgfVxuXG4gIFx0XHRmb3IgKHZhciBrZXkgaW4gdGhpcy5fdGlsZXMpIHtcbiAgXHRcdFx0dmFyIGMgPSB0aGlzLl90aWxlc1trZXldLmNvb3JkcztcbiAgXHRcdFx0aWYgKGMueiAhPT0gdGhpcy5fdGlsZVpvb20gfHwgIW5vUHJ1bmVSYW5nZS5jb250YWlucyhuZXcgUG9pbnQoYy54LCBjLnkpKSkge1xuICBcdFx0XHRcdHRoaXMuX3RpbGVzW2tleV0uY3VycmVudCA9IGZhbHNlO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdC8vIF91cGRhdGUganVzdCBsb2FkcyBtb3JlIHRpbGVzLiBJZiB0aGUgdGlsZSB6b29tIGxldmVsIGRpZmZlcnMgdG9vIG11Y2hcbiAgXHRcdC8vIGZyb20gdGhlIG1hcCdzLCBsZXQgX3NldFZpZXcgcmVzZXQgbGV2ZWxzIGFuZCBwcnVuZSBvbGQgdGlsZXMuXG4gIFx0XHRpZiAoTWF0aC5hYnMoem9vbSAtIHRoaXMuX3RpbGVab29tKSA+IDEpIHsgdGhpcy5fc2V0VmlldyhjZW50ZXIsIHpvb20pOyByZXR1cm47IH1cblxuICBcdFx0Ly8gY3JlYXRlIGEgcXVldWUgb2YgY29vcmRpbmF0ZXMgdG8gbG9hZCB0aWxlcyBmcm9tXG4gIFx0XHRmb3IgKHZhciBqID0gdGlsZVJhbmdlLm1pbi55OyBqIDw9IHRpbGVSYW5nZS5tYXgueTsgaisrKSB7XG4gIFx0XHRcdGZvciAodmFyIGkgPSB0aWxlUmFuZ2UubWluLng7IGkgPD0gdGlsZVJhbmdlLm1heC54OyBpKyspIHtcbiAgXHRcdFx0XHR2YXIgY29vcmRzID0gbmV3IFBvaW50KGksIGopO1xuICBcdFx0XHRcdGNvb3Jkcy56ID0gdGhpcy5fdGlsZVpvb207XG5cbiAgXHRcdFx0XHRpZiAoIXRoaXMuX2lzVmFsaWRUaWxlKGNvb3JkcykpIHsgY29udGludWU7IH1cblxuICBcdFx0XHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNbdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3JkcyldO1xuICBcdFx0XHRcdGlmICh0aWxlKSB7XG4gIFx0XHRcdFx0XHR0aWxlLmN1cnJlbnQgPSB0cnVlO1xuICBcdFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0XHRxdWV1ZS5wdXNoKGNvb3Jkcyk7XG4gIFx0XHRcdFx0fVxuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdC8vIHNvcnQgdGlsZSBxdWV1ZSB0byBsb2FkIHRpbGVzIGluIG9yZGVyIG9mIHRoZWlyIGRpc3RhbmNlIHRvIGNlbnRlclxuICBcdFx0cXVldWUuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICBcdFx0XHRyZXR1cm4gYS5kaXN0YW5jZVRvKHRpbGVDZW50ZXIpIC0gYi5kaXN0YW5jZVRvKHRpbGVDZW50ZXIpO1xuICBcdFx0fSk7XG5cbiAgXHRcdGlmIChxdWV1ZS5sZW5ndGggIT09IDApIHtcbiAgXHRcdFx0Ly8gaWYgaXQncyB0aGUgZmlyc3QgYmF0Y2ggb2YgdGlsZXMgdG8gbG9hZFxuICBcdFx0XHRpZiAoIXRoaXMuX2xvYWRpbmcpIHtcbiAgXHRcdFx0XHR0aGlzLl9sb2FkaW5nID0gdHJ1ZTtcbiAgXHRcdFx0XHQvLyBAZXZlbnQgbG9hZGluZzogRXZlbnRcbiAgXHRcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZSBncmlkIGxheWVyIHN0YXJ0cyBsb2FkaW5nIHRpbGVzLlxuICBcdFx0XHRcdHRoaXMuZmlyZSgnbG9hZGluZycpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0Ly8gY3JlYXRlIERPTSBmcmFnbWVudCB0byBhcHBlbmQgdGlsZXMgaW4gb25lIGJhdGNoXG4gIFx0XHRcdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcblxuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcXVldWUubGVuZ3RoOyBpKyspIHtcbiAgXHRcdFx0XHR0aGlzLl9hZGRUaWxlKHF1ZXVlW2ldLCBmcmFnbWVudCk7XG4gIFx0XHRcdH1cblxuICBcdFx0XHR0aGlzLl9sZXZlbC5lbC5hcHBlbmRDaGlsZChmcmFnbWVudCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pc1ZhbGlkVGlsZTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIGNycyA9IHRoaXMuX21hcC5vcHRpb25zLmNycztcblxuICBcdFx0aWYgKCFjcnMuaW5maW5pdGUpIHtcbiAgXHRcdFx0Ly8gZG9uJ3QgbG9hZCB0aWxlIGlmIGl0J3Mgb3V0IG9mIGJvdW5kcyBhbmQgbm90IHdyYXBwZWRcbiAgXHRcdFx0dmFyIGJvdW5kcyA9IHRoaXMuX2dsb2JhbFRpbGVSYW5nZTtcbiAgXHRcdFx0aWYgKCghY3JzLndyYXBMbmcgJiYgKGNvb3Jkcy54IDwgYm91bmRzLm1pbi54IHx8IGNvb3Jkcy54ID4gYm91bmRzLm1heC54KSkgfHxcbiAgXHRcdFx0ICAgICghY3JzLndyYXBMYXQgJiYgKGNvb3Jkcy55IDwgYm91bmRzLm1pbi55IHx8IGNvb3Jkcy55ID4gYm91bmRzLm1heC55KSkpIHsgcmV0dXJuIGZhbHNlOyB9XG4gIFx0XHR9XG5cbiAgXHRcdGlmICghdGhpcy5vcHRpb25zLmJvdW5kcykgeyByZXR1cm4gdHJ1ZTsgfVxuXG4gIFx0XHQvLyBkb24ndCBsb2FkIHRpbGUgaWYgaXQgZG9lc24ndCBpbnRlcnNlY3QgdGhlIGJvdW5kcyBpbiBvcHRpb25zXG4gIFx0XHR2YXIgdGlsZUJvdW5kcyA9IHRoaXMuX3RpbGVDb29yZHNUb0JvdW5kcyhjb29yZHMpO1xuICBcdFx0cmV0dXJuIHRvTGF0TG5nQm91bmRzKHRoaXMub3B0aW9ucy5ib3VuZHMpLm92ZXJsYXBzKHRpbGVCb3VuZHMpO1xuICBcdH0sXG5cbiAgXHRfa2V5VG9Cb3VuZHM6IGZ1bmN0aW9uIChrZXkpIHtcbiAgXHRcdHJldHVybiB0aGlzLl90aWxlQ29vcmRzVG9Cb3VuZHModGhpcy5fa2V5VG9UaWxlQ29vcmRzKGtleSkpO1xuICBcdH0sXG5cbiAgXHRfdGlsZUNvb3Jkc1RvTndTZTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKSxcbiAgXHRcdCAgICBud1BvaW50ID0gY29vcmRzLnNjYWxlQnkodGlsZVNpemUpLFxuICBcdFx0ICAgIHNlUG9pbnQgPSBud1BvaW50LmFkZCh0aWxlU2l6ZSksXG4gIFx0XHQgICAgbncgPSBtYXAudW5wcm9qZWN0KG53UG9pbnQsIGNvb3Jkcy56KSxcbiAgXHRcdCAgICBzZSA9IG1hcC51bnByb2plY3Qoc2VQb2ludCwgY29vcmRzLnopO1xuICBcdFx0cmV0dXJuIFtudywgc2VdO1xuICBcdH0sXG5cbiAgXHQvLyBjb252ZXJ0cyB0aWxlIGNvb3JkaW5hdGVzIHRvIGl0cyBnZW9ncmFwaGljYWwgYm91bmRzXG4gIFx0X3RpbGVDb29yZHNUb0JvdW5kczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIGJwID0gdGhpcy5fdGlsZUNvb3Jkc1RvTndTZShjb29yZHMpLFxuICBcdFx0ICAgIGJvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoYnBbMF0sIGJwWzFdKTtcblxuICBcdFx0aWYgKCF0aGlzLm9wdGlvbnMubm9XcmFwKSB7XG4gIFx0XHRcdGJvdW5kcyA9IHRoaXMuX21hcC53cmFwTGF0TG5nQm91bmRzKGJvdW5kcyk7XG4gIFx0XHR9XG4gIFx0XHRyZXR1cm4gYm91bmRzO1xuICBcdH0sXG4gIFx0Ly8gY29udmVydHMgdGlsZSBjb29yZGluYXRlcyB0byBrZXkgZm9yIHRoZSB0aWxlIGNhY2hlXG4gIFx0X3RpbGVDb29yZHNUb0tleTogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0cmV0dXJuIGNvb3Jkcy54ICsgJzonICsgY29vcmRzLnkgKyAnOicgKyBjb29yZHMuejtcbiAgXHR9LFxuXG4gIFx0Ly8gY29udmVydHMgdGlsZSBjYWNoZSBrZXkgdG8gY29vcmRpbmF0ZXNcbiAgXHRfa2V5VG9UaWxlQ29vcmRzOiBmdW5jdGlvbiAoa2V5KSB7XG4gIFx0XHR2YXIgayA9IGtleS5zcGxpdCgnOicpLFxuICBcdFx0ICAgIGNvb3JkcyA9IG5ldyBQb2ludCgra1swXSwgK2tbMV0pO1xuICBcdFx0Y29vcmRzLnogPSAra1syXTtcbiAgXHRcdHJldHVybiBjb29yZHM7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVUaWxlOiBmdW5jdGlvbiAoa2V5KSB7XG4gIFx0XHR2YXIgdGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRpZiAoIXRpbGUpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHJlbW92ZSh0aWxlLmVsKTtcblxuICBcdFx0ZGVsZXRlIHRoaXMuX3RpbGVzW2tleV07XG5cbiAgXHRcdC8vIEBldmVudCB0aWxldW5sb2FkOiBUaWxlRXZlbnRcbiAgXHRcdC8vIEZpcmVkIHdoZW4gYSB0aWxlIGlzIHJlbW92ZWQgKGUuZy4gd2hlbiBhIHRpbGUgZ29lcyBvZmYgdGhlIHNjcmVlbikuXG4gIFx0XHR0aGlzLmZpcmUoJ3RpbGV1bmxvYWQnLCB7XG4gIFx0XHRcdHRpbGU6IHRpbGUuZWwsXG4gIFx0XHRcdGNvb3JkczogdGhpcy5fa2V5VG9UaWxlQ29vcmRzKGtleSlcbiAgXHRcdH0pO1xuICBcdH0sXG5cbiAgXHRfaW5pdFRpbGU6IGZ1bmN0aW9uICh0aWxlKSB7XG4gIFx0XHRhZGRDbGFzcyh0aWxlLCAnbGVhZmxldC10aWxlJyk7XG5cbiAgXHRcdHZhciB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgXHRcdHRpbGUuc3R5bGUud2lkdGggPSB0aWxlU2l6ZS54ICsgJ3B4JztcbiAgXHRcdHRpbGUuc3R5bGUuaGVpZ2h0ID0gdGlsZVNpemUueSArICdweCc7XG5cbiAgXHRcdHRpbGUub25zZWxlY3RzdGFydCA9IGZhbHNlRm47XG4gIFx0XHR0aWxlLm9ubW91c2Vtb3ZlID0gZmFsc2VGbjtcblxuICBcdFx0Ly8gdXBkYXRlIG9wYWNpdHkgb24gdGlsZXMgaW4gSUU3LTggYmVjYXVzZSBvZiBmaWx0ZXIgaW5oZXJpdGFuY2UgcHJvYmxlbXNcbiAgXHRcdGlmIChpZWx0OSAmJiB0aGlzLm9wdGlvbnMub3BhY2l0eSA8IDEpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aWxlLCB0aGlzLm9wdGlvbnMub3BhY2l0eSk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIHdpdGhvdXQgdGhpcyBoYWNrLCB0aWxlcyBkaXNhcHBlYXIgYWZ0ZXIgem9vbSBvbiBDaHJvbWUgZm9yIEFuZHJvaWRcbiAgXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9MZWFmbGV0L0xlYWZsZXQvaXNzdWVzLzIwNzhcbiAgXHRcdGlmIChhbmRyb2lkICYmICFhbmRyb2lkMjMpIHtcbiAgXHRcdFx0dGlsZS5zdHlsZS5XZWJraXRCYWNrZmFjZVZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2FkZFRpbGU6IGZ1bmN0aW9uIChjb29yZHMsIGNvbnRhaW5lcikge1xuICBcdFx0dmFyIHRpbGVQb3MgPSB0aGlzLl9nZXRUaWxlUG9zKGNvb3JkcyksXG4gIFx0XHQgICAga2V5ID0gdGhpcy5fdGlsZUNvb3Jkc1RvS2V5KGNvb3Jkcyk7XG5cbiAgXHRcdHZhciB0aWxlID0gdGhpcy5jcmVhdGVUaWxlKHRoaXMuX3dyYXBDb29yZHMoY29vcmRzKSwgYmluZCh0aGlzLl90aWxlUmVhZHksIHRoaXMsIGNvb3JkcykpO1xuXG4gIFx0XHR0aGlzLl9pbml0VGlsZSh0aWxlKTtcblxuICBcdFx0Ly8gaWYgY3JlYXRlVGlsZSBpcyBkZWZpbmVkIHdpdGggYSBzZWNvbmQgYXJndW1lbnQgKFwiZG9uZVwiIGNhbGxiYWNrKSxcbiAgXHRcdC8vIHdlIGtub3cgdGhhdCB0aWxlIGlzIGFzeW5jIGFuZCB3aWxsIGJlIHJlYWR5IGxhdGVyOyBvdGhlcndpc2VcbiAgXHRcdGlmICh0aGlzLmNyZWF0ZVRpbGUubGVuZ3RoIDwgMikge1xuICBcdFx0XHQvLyBtYXJrIHRpbGUgYXMgcmVhZHksIGJ1dCBkZWxheSBvbmUgZnJhbWUgZm9yIG9wYWNpdHkgYW5pbWF0aW9uIHRvIGhhcHBlblxuICBcdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGJpbmQodGhpcy5fdGlsZVJlYWR5LCB0aGlzLCBjb29yZHMsIG51bGwsIHRpbGUpKTtcbiAgXHRcdH1cblxuICBcdFx0c2V0UG9zaXRpb24odGlsZSwgdGlsZVBvcyk7XG5cbiAgXHRcdC8vIHNhdmUgdGlsZSBpbiBjYWNoZVxuICBcdFx0dGhpcy5fdGlsZXNba2V5XSA9IHtcbiAgXHRcdFx0ZWw6IHRpbGUsXG4gIFx0XHRcdGNvb3JkczogY29vcmRzLFxuICBcdFx0XHRjdXJyZW50OiB0cnVlXG4gIFx0XHR9O1xuXG4gIFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQodGlsZSk7XG4gIFx0XHQvLyBAZXZlbnQgdGlsZWxvYWRzdGFydDogVGlsZUV2ZW50XG4gIFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSBpcyByZXF1ZXN0ZWQgYW5kIHN0YXJ0cyBsb2FkaW5nLlxuICBcdFx0dGhpcy5maXJlKCd0aWxlbG9hZHN0YXJ0Jywge1xuICBcdFx0XHR0aWxlOiB0aWxlLFxuICBcdFx0XHRjb29yZHM6IGNvb3Jkc1xuICBcdFx0fSk7XG4gIFx0fSxcblxuICBcdF90aWxlUmVhZHk6IGZ1bmN0aW9uIChjb29yZHMsIGVyciwgdGlsZSkge1xuICBcdFx0aWYgKGVycikge1xuICBcdFx0XHQvLyBAZXZlbnQgdGlsZWVycm9yOiBUaWxlRXJyb3JFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIHRoZXJlIGlzIGFuIGVycm9yIGxvYWRpbmcgYSB0aWxlLlxuICBcdFx0XHR0aGlzLmZpcmUoJ3RpbGVlcnJvcicsIHtcbiAgXHRcdFx0XHRlcnJvcjogZXJyLFxuICBcdFx0XHRcdHRpbGU6IHRpbGUsXG4gIFx0XHRcdFx0Y29vcmRzOiBjb29yZHNcbiAgXHRcdFx0fSk7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBrZXkgPSB0aGlzLl90aWxlQ29vcmRzVG9LZXkoY29vcmRzKTtcblxuICBcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2tleV07XG4gIFx0XHRpZiAoIXRpbGUpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRpbGUubG9hZGVkID0gK25ldyBEYXRlKCk7XG4gIFx0XHRpZiAodGhpcy5fbWFwLl9mYWRlQW5pbWF0ZWQpIHtcbiAgXHRcdFx0c2V0T3BhY2l0eSh0aWxlLmVsLCAwKTtcbiAgXHRcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX2ZhZGVGcmFtZSk7XG4gIFx0XHRcdHRoaXMuX2ZhZGVGcmFtZSA9IHJlcXVlc3RBbmltRnJhbWUodGhpcy5fdXBkYXRlT3BhY2l0eSwgdGhpcyk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aWxlLmFjdGl2ZSA9IHRydWU7XG4gIFx0XHRcdHRoaXMuX3BydW5lVGlsZXMoKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKCFlcnIpIHtcbiAgXHRcdFx0YWRkQ2xhc3ModGlsZS5lbCwgJ2xlYWZsZXQtdGlsZS1sb2FkZWQnKTtcblxuICBcdFx0XHQvLyBAZXZlbnQgdGlsZWxvYWQ6IFRpbGVFdmVudFxuICBcdFx0XHQvLyBGaXJlZCB3aGVuIGEgdGlsZSBsb2Fkcy5cbiAgXHRcdFx0dGhpcy5maXJlKCd0aWxlbG9hZCcsIHtcbiAgXHRcdFx0XHR0aWxlOiB0aWxlLmVsLFxuICBcdFx0XHRcdGNvb3JkczogY29vcmRzXG4gIFx0XHRcdH0pO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAodGhpcy5fbm9UaWxlc1RvTG9hZCgpKSB7XG4gIFx0XHRcdHRoaXMuX2xvYWRpbmcgPSBmYWxzZTtcbiAgXHRcdFx0Ly8gQGV2ZW50IGxvYWQ6IEV2ZW50XG4gIFx0XHRcdC8vIEZpcmVkIHdoZW4gdGhlIGdyaWQgbGF5ZXIgbG9hZGVkIGFsbCB2aXNpYmxlIHRpbGVzLlxuICBcdFx0XHR0aGlzLmZpcmUoJ2xvYWQnKTtcblxuICBcdFx0XHRpZiAoaWVsdDkgfHwgIXRoaXMuX21hcC5fZmFkZUFuaW1hdGVkKSB7XG4gIFx0XHRcdFx0cmVxdWVzdEFuaW1GcmFtZSh0aGlzLl9wcnVuZVRpbGVzLCB0aGlzKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHQvLyBXYWl0IGEgYml0IG1vcmUgdGhhbiAwLjIgc2VjcyAodGhlIGR1cmF0aW9uIG9mIHRoZSB0aWxlIGZhZGUtaW4pXG4gIFx0XHRcdFx0Ly8gdG8gdHJpZ2dlciBhIHBydW5pbmcuXG4gIFx0XHRcdFx0c2V0VGltZW91dChiaW5kKHRoaXMuX3BydW5lVGlsZXMsIHRoaXMpLCAyNTApO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9nZXRUaWxlUG9zOiBmdW5jdGlvbiAoY29vcmRzKSB7XG4gIFx0XHRyZXR1cm4gY29vcmRzLnNjYWxlQnkodGhpcy5nZXRUaWxlU2l6ZSgpKS5zdWJ0cmFjdCh0aGlzLl9sZXZlbC5vcmlnaW4pO1xuICBcdH0sXG5cbiAgXHRfd3JhcENvb3JkczogZnVuY3Rpb24gKGNvb3Jkcykge1xuICBcdFx0dmFyIG5ld0Nvb3JkcyA9IG5ldyBQb2ludChcbiAgXHRcdFx0dGhpcy5fd3JhcFggPyB3cmFwTnVtKGNvb3Jkcy54LCB0aGlzLl93cmFwWCkgOiBjb29yZHMueCxcbiAgXHRcdFx0dGhpcy5fd3JhcFkgPyB3cmFwTnVtKGNvb3Jkcy55LCB0aGlzLl93cmFwWSkgOiBjb29yZHMueSk7XG4gIFx0XHRuZXdDb29yZHMueiA9IGNvb3Jkcy56O1xuICBcdFx0cmV0dXJuIG5ld0Nvb3JkcztcbiAgXHR9LFxuXG4gIFx0X3B4Qm91bmRzVG9UaWxlUmFuZ2U6IGZ1bmN0aW9uIChib3VuZHMpIHtcbiAgXHRcdHZhciB0aWxlU2l6ZSA9IHRoaXMuZ2V0VGlsZVNpemUoKTtcbiAgXHRcdHJldHVybiBuZXcgQm91bmRzKFxuICBcdFx0XHRib3VuZHMubWluLnVuc2NhbGVCeSh0aWxlU2l6ZSkuZmxvb3IoKSxcbiAgXHRcdFx0Ym91bmRzLm1heC51bnNjYWxlQnkodGlsZVNpemUpLmNlaWwoKS5zdWJ0cmFjdChbMSwgMV0pKTtcbiAgXHR9LFxuXG4gIFx0X25vVGlsZXNUb0xvYWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIGtleSBpbiB0aGlzLl90aWxlcykge1xuICBcdFx0XHRpZiAoIXRoaXMuX3RpbGVzW2tleV0ubG9hZGVkKSB7IHJldHVybiBmYWxzZTsgfVxuICBcdFx0fVxuICBcdFx0cmV0dXJuIHRydWU7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAZmFjdG9yeSBMLmdyaWRMYXllcihvcHRpb25zPzogR3JpZExheWVyIG9wdGlvbnMpXG4gIC8vIENyZWF0ZXMgYSBuZXcgaW5zdGFuY2Ugb2YgR3JpZExheWVyIHdpdGggdGhlIHN1cHBsaWVkIG9wdGlvbnMuXG4gIGZ1bmN0aW9uIGdyaWRMYXllcihvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBHcmlkTGF5ZXIob3B0aW9ucyk7XG4gIH1cblxuICAvKlxyXG4gICAqIEBjbGFzcyBUaWxlTGF5ZXJcclxuICAgKiBAaW5oZXJpdHMgR3JpZExheWVyXHJcbiAgICogQGFrYSBMLlRpbGVMYXllclxyXG4gICAqIFVzZWQgdG8gbG9hZCBhbmQgZGlzcGxheSB0aWxlIGxheWVycyBvbiB0aGUgbWFwLiBOb3RlIHRoYXQgbW9zdCB0aWxlIHNlcnZlcnMgcmVxdWlyZSBhdHRyaWJ1dGlvbiwgd2hpY2ggeW91IGNhbiBzZXQgdW5kZXIgYExheWVyYC4gRXh0ZW5kcyBgR3JpZExheWVyYC5cclxuICAgKlxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBgYGBqc1xyXG4gICAqIEwudGlsZUxheWVyKCdodHRwczovL3tzfS50aWxlLm9wZW5zdHJlZXRtYXAub3JnL3t6fS97eH0ve3l9LnBuZz97Zm9vfScsIHtmb286ICdiYXInLCBhdHRyaWJ1dGlvbjogJ01hcCBkYXRhICZjb3B5OyA8YSBocmVmPVwiaHR0cHM6Ly93d3cub3BlbnN0cmVldG1hcC5vcmcvXCI+T3BlblN0cmVldE1hcDwvYT4gY29udHJpYnV0b3JzLCA8YSBocmVmPVwiaHR0cHM6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuMC9cIj5DQy1CWS1TQTwvYT4nfSkuYWRkVG8obWFwKTtcclxuICAgKiBgYGBcclxuICAgKlxyXG4gICAqIEBzZWN0aW9uIFVSTCB0ZW1wbGF0ZVxyXG4gICAqIEBleGFtcGxlXHJcbiAgICpcclxuICAgKiBBIHN0cmluZyBvZiB0aGUgZm9sbG93aW5nIGZvcm06XHJcbiAgICpcclxuICAgKiBgYGBcclxuICAgKiAnaHR0cDovL3tzfS5zb21lZG9tYWluLmNvbS9ibGFibGEve3p9L3t4fS97eX17cn0ucG5nJ1xyXG4gICAqIGBgYFxyXG4gICAqXHJcbiAgICogYHtzfWAgbWVhbnMgb25lIG9mIHRoZSBhdmFpbGFibGUgc3ViZG9tYWlucyAodXNlZCBzZXF1ZW50aWFsbHkgdG8gaGVscCB3aXRoIGJyb3dzZXIgcGFyYWxsZWwgcmVxdWVzdHMgcGVyIGRvbWFpbiBsaW1pdGF0aW9uOyBzdWJkb21haW4gdmFsdWVzIGFyZSBzcGVjaWZpZWQgaW4gb3B0aW9uczsgYGFgLCBgYmAgb3IgYGNgIGJ5IGRlZmF1bHQsIGNhbiBiZSBvbWl0dGVkKSwgYHt6fWAg4oCUIHpvb20gbGV2ZWwsIGB7eH1gIGFuZCBge3l9YCDigJQgdGlsZSBjb29yZGluYXRlcy4gYHtyfWAgY2FuIGJlIHVzZWQgdG8gYWRkIFwiJmNvbW1hdDsyeFwiIHRvIHRoZSBVUkwgdG8gbG9hZCByZXRpbmEgdGlsZXMuXHJcbiAgICpcclxuICAgKiBZb3UgY2FuIHVzZSBjdXN0b20ga2V5cyBpbiB0aGUgdGVtcGxhdGUsIHdoaWNoIHdpbGwgYmUgW2V2YWx1YXRlZF0oI3V0aWwtdGVtcGxhdGUpIGZyb20gVGlsZUxheWVyIG9wdGlvbnMsIGxpa2UgdGhpczpcclxuICAgKlxyXG4gICAqIGBgYFxyXG4gICAqIEwudGlsZUxheWVyKCdodHRwOi8ve3N9LnNvbWVkb21haW4uY29tL3tmb299L3t6fS97eH0ve3l9LnBuZycsIHtmb286ICdiYXInfSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG5cclxuICB2YXIgVGlsZUxheWVyID0gR3JpZExheWVyLmV4dGVuZCh7XHJcblxyXG4gIFx0Ly8gQHNlY3Rpb25cclxuICBcdC8vIEBha2EgVGlsZUxheWVyIG9wdGlvbnNcclxuICBcdG9wdGlvbnM6IHtcclxuICBcdFx0Ly8gQG9wdGlvbiBtaW5ab29tOiBOdW1iZXIgPSAwXHJcbiAgXHRcdC8vIFRoZSBtaW5pbXVtIHpvb20gbGV2ZWwgZG93biB0byB3aGljaCB0aGlzIGxheWVyIHdpbGwgYmUgZGlzcGxheWVkIChpbmNsdXNpdmUpLlxyXG4gIFx0XHRtaW5ab29tOiAwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBtYXhab29tOiBOdW1iZXIgPSAxOFxyXG4gIFx0XHQvLyBUaGUgbWF4aW11bSB6b29tIGxldmVsIHVwIHRvIHdoaWNoIHRoaXMgbGF5ZXIgd2lsbCBiZSBkaXNwbGF5ZWQgKGluY2x1c2l2ZSkuXHJcbiAgXHRcdG1heFpvb206IDE4LFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzdWJkb21haW5zOiBTdHJpbmd8U3RyaW5nW10gPSAnYWJjJ1xyXG4gIFx0XHQvLyBTdWJkb21haW5zIG9mIHRoZSB0aWxlIHNlcnZpY2UuIENhbiBiZSBwYXNzZWQgaW4gdGhlIGZvcm0gb2Ygb25lIHN0cmluZyAod2hlcmUgZWFjaCBsZXR0ZXIgaXMgYSBzdWJkb21haW4gbmFtZSkgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncy5cclxuICBcdFx0c3ViZG9tYWluczogJ2FiYycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGVycm9yVGlsZVVybDogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gVVJMIHRvIHRoZSB0aWxlIGltYWdlIHRvIHNob3cgaW4gcGxhY2Ugb2YgdGhlIHRpbGUgdGhhdCBmYWlsZWQgdG8gbG9hZC5cclxuICBcdFx0ZXJyb3JUaWxlVXJsOiAnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbU9mZnNldDogTnVtYmVyID0gMFxyXG4gIFx0XHQvLyBUaGUgem9vbSBudW1iZXIgdXNlZCBpbiB0aWxlIFVSTHMgd2lsbCBiZSBvZmZzZXQgd2l0aCB0aGlzIHZhbHVlLlxyXG4gIFx0XHR6b29tT2Zmc2V0OiAwLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiB0bXM6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIGludmVyc2VzIFkgYXhpcyBudW1iZXJpbmcgZm9yIHRpbGVzICh0dXJuIHRoaXMgb24gZm9yIFtUTVNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1RpbGVfTWFwX1NlcnZpY2UpIHNlcnZpY2VzKS5cclxuICBcdFx0dG1zOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gem9vbVJldmVyc2U6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBzZXQgdG8gdHJ1ZSwgdGhlIHpvb20gbnVtYmVyIHVzZWQgaW4gdGlsZSBVUkxzIHdpbGwgYmUgcmV2ZXJzZWQgKGBtYXhab29tIC0gem9vbWAgaW5zdGVhZCBvZiBgem9vbWApXHJcbiAgXHRcdHpvb21SZXZlcnNlOiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gZGV0ZWN0UmV0aW5hOiBCb29sZWFuID0gZmFsc2VcclxuICBcdFx0Ly8gSWYgYHRydWVgIGFuZCB1c2VyIGlzIG9uIGEgcmV0aW5hIGRpc3BsYXksIGl0IHdpbGwgcmVxdWVzdCBmb3VyIHRpbGVzIG9mIGhhbGYgdGhlIHNwZWNpZmllZCBzaXplIGFuZCBhIGJpZ2dlciB6b29tIGxldmVsIGluIHBsYWNlIG9mIG9uZSB0byB1dGlsaXplIHRoZSBoaWdoIHJlc29sdXRpb24uXHJcbiAgXHRcdGRldGVjdFJldGluYTogZmFsc2UsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGNyb3NzT3JpZ2luOiBCb29sZWFufFN0cmluZyA9IGZhbHNlXHJcbiAgXHRcdC8vIFdoZXRoZXIgdGhlIGNyb3NzT3JpZ2luIGF0dHJpYnV0ZSB3aWxsIGJlIGFkZGVkIHRvIHRoZSB0aWxlcy5cclxuICBcdFx0Ly8gSWYgYSBTdHJpbmcgaXMgcHJvdmlkZWQsIGFsbCB0aWxlcyB3aWxsIGhhdmUgdGhlaXIgY3Jvc3NPcmlnaW4gYXR0cmlidXRlIHNldCB0byB0aGUgU3RyaW5nIHByb3ZpZGVkLiBUaGlzIGlzIG5lZWRlZCBpZiB5b3Ugd2FudCB0byBhY2Nlc3MgdGlsZSBwaXhlbCBkYXRhLlxyXG4gIFx0XHQvLyBSZWZlciB0byBbQ09SUyBTZXR0aW5nc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9DT1JTX3NldHRpbmdzX2F0dHJpYnV0ZXMpIGZvciB2YWxpZCBTdHJpbmcgdmFsdWVzLlxyXG4gIFx0XHRjcm9zc09yaWdpbjogZmFsc2VcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0b3B0aW9ucyA9IHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XHJcblxyXG4gIFx0XHQvLyBkZXRlY3RpbmcgcmV0aW5hIGRpc3BsYXlzLCBhZGp1c3RpbmcgdGlsZVNpemUgYW5kIHpvb20gbGV2ZWxzXHJcbiAgXHRcdGlmIChvcHRpb25zLmRldGVjdFJldGluYSAmJiByZXRpbmEgJiYgb3B0aW9ucy5tYXhab29tID4gMCkge1xyXG5cclxuICBcdFx0XHRvcHRpb25zLnRpbGVTaXplID0gTWF0aC5mbG9vcihvcHRpb25zLnRpbGVTaXplIC8gMik7XHJcblxyXG4gIFx0XHRcdGlmICghb3B0aW9ucy56b29tUmV2ZXJzZSkge1xyXG4gIFx0XHRcdFx0b3B0aW9ucy56b29tT2Zmc2V0Kys7XHJcbiAgXHRcdFx0XHRvcHRpb25zLm1heFpvb20tLTtcclxuICBcdFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdFx0b3B0aW9ucy56b29tT2Zmc2V0LS07XHJcbiAgXHRcdFx0XHRvcHRpb25zLm1pblpvb20rKztcclxuICBcdFx0XHR9XHJcblxyXG4gIFx0XHRcdG9wdGlvbnMubWluWm9vbSA9IE1hdGgubWF4KDAsIG9wdGlvbnMubWluWm9vbSk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdGlmICh0eXBlb2Ygb3B0aW9ucy5zdWJkb21haW5zID09PSAnc3RyaW5nJykge1xyXG4gIFx0XHRcdG9wdGlvbnMuc3ViZG9tYWlucyA9IG9wdGlvbnMuc3ViZG9tYWlucy5zcGxpdCgnJyk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdC8vIGZvciBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L2lzc3Vlcy8xMzdcclxuICBcdFx0aWYgKCFhbmRyb2lkKSB7XHJcbiAgXHRcdFx0dGhpcy5vbigndGlsZXVubG9hZCcsIHRoaXMuX29uVGlsZVJlbW92ZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRVcmwodXJsOiBTdHJpbmcsIG5vUmVkcmF3PzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIFVwZGF0ZXMgdGhlIGxheWVyJ3MgVVJMIHRlbXBsYXRlIGFuZCByZWRyYXdzIGl0ICh1bmxlc3MgYG5vUmVkcmF3YCBpcyBzZXQgdG8gYHRydWVgKS5cclxuICBcdC8vIElmIHRoZSBVUkwgZG9lcyBub3QgY2hhbmdlLCB0aGUgbGF5ZXIgd2lsbCBub3QgYmUgcmVkcmF3biB1bmxlc3NcclxuICBcdC8vIHRoZSBub1JlZHJhdyBwYXJhbWV0ZXIgaXMgc2V0IHRvIGZhbHNlLlxyXG4gIFx0c2V0VXJsOiBmdW5jdGlvbiAodXJsLCBub1JlZHJhdykge1xyXG4gIFx0XHRpZiAodGhpcy5fdXJsID09PSB1cmwgJiYgbm9SZWRyYXcgPT09IHVuZGVmaW5lZCkge1xyXG4gIFx0XHRcdG5vUmVkcmF3ID0gdHJ1ZTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0aWYgKCFub1JlZHJhdykge1xyXG4gIFx0XHRcdHRoaXMucmVkcmF3KCk7XHJcbiAgXHRcdH1cclxuICBcdFx0cmV0dXJuIHRoaXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBtZXRob2QgY3JlYXRlVGlsZShjb29yZHM6IE9iamVjdCwgZG9uZT86IEZ1bmN0aW9uKTogSFRNTEVsZW1lbnRcclxuICBcdC8vIENhbGxlZCBvbmx5IGludGVybmFsbHksIG92ZXJyaWRlcyBHcmlkTGF5ZXIncyBbYGNyZWF0ZVRpbGUoKWBdKCNncmlkbGF5ZXItY3JlYXRldGlsZSlcclxuICBcdC8vIHRvIHJldHVybiBhbiBgPGltZz5gIEhUTUwgZWxlbWVudCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBpbWFnZSBVUkwgZ2l2ZW4gYGNvb3Jkc2AuIFRoZSBgZG9uZWBcclxuICBcdC8vIGNhbGxiYWNrIGlzIGNhbGxlZCB3aGVuIHRoZSB0aWxlIGhhcyBiZWVuIGxvYWRlZC5cclxuICBcdGNyZWF0ZVRpbGU6IGZ1bmN0aW9uIChjb29yZHMsIGRvbmUpIHtcclxuICBcdFx0dmFyIHRpbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbWcnKTtcclxuXHJcbiAgXHRcdG9uKHRpbGUsICdsb2FkJywgYmluZCh0aGlzLl90aWxlT25Mb2FkLCB0aGlzLCBkb25lLCB0aWxlKSk7XHJcbiAgXHRcdG9uKHRpbGUsICdlcnJvcicsIGJpbmQodGhpcy5fdGlsZU9uRXJyb3IsIHRoaXMsIGRvbmUsIHRpbGUpKTtcclxuXHJcbiAgXHRcdGlmICh0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gfHwgdGhpcy5vcHRpb25zLmNyb3NzT3JpZ2luID09PSAnJykge1xyXG4gIFx0XHRcdHRpbGUuY3Jvc3NPcmlnaW4gPSB0aGlzLm9wdGlvbnMuY3Jvc3NPcmlnaW4gPT09IHRydWUgPyAnJyA6IHRoaXMub3B0aW9ucy5jcm9zc09yaWdpbjtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0LypcclxuICBcdFx0IEFsdCB0YWcgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyB0byBrZWVwIHNjcmVlbiByZWFkZXJzIGZyb20gcmVhZGluZyBVUkwgYW5kIGZvciBjb21wbGlhbmNlIHJlYXNvbnNcclxuICBcdFx0IGh0dHA6Ly93d3cudzMub3JnL1RSL1dDQUcyMC1URUNIUy9INjdcclxuICBcdFx0Ki9cclxuICBcdFx0dGlsZS5hbHQgPSAnJztcclxuXHJcbiAgXHRcdC8qXHJcbiAgXHRcdCBTZXQgcm9sZT1cInByZXNlbnRhdGlvblwiIHRvIGZvcmNlIHNjcmVlbiByZWFkZXJzIHRvIGlnbm9yZSB0aGlzXHJcbiAgXHRcdCBodHRwczovL3d3dy53My5vcmcvVFIvd2FpLWFyaWEvcm9sZXMjdGV4dGFsdGVybmF0aXZlY29tcHV0YXRpb25cclxuICBcdFx0Ki9cclxuICBcdFx0dGlsZS5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XHJcblxyXG4gIFx0XHR0aWxlLnNyYyA9IHRoaXMuZ2V0VGlsZVVybChjb29yZHMpO1xyXG5cclxuICBcdFx0cmV0dXJuIHRpbGU7XHJcbiAgXHR9LFxyXG5cclxuICBcdC8vIEBzZWN0aW9uIEV4dGVuc2lvbiBtZXRob2RzXHJcbiAgXHQvLyBAdW5pbmhlcml0YWJsZVxyXG4gIFx0Ly8gTGF5ZXJzIGV4dGVuZGluZyBgVGlsZUxheWVyYCBtaWdodCByZWltcGxlbWVudCB0aGUgZm9sbG93aW5nIG1ldGhvZC5cclxuICBcdC8vIEBtZXRob2QgZ2V0VGlsZVVybChjb29yZHM6IE9iamVjdCk6IFN0cmluZ1xyXG4gIFx0Ly8gQ2FsbGVkIG9ubHkgaW50ZXJuYWxseSwgcmV0dXJucyB0aGUgVVJMIGZvciBhIHRpbGUgZ2l2ZW4gaXRzIGNvb3JkaW5hdGVzLlxyXG4gIFx0Ly8gQ2xhc3NlcyBleHRlbmRpbmcgYFRpbGVMYXllcmAgY2FuIG92ZXJyaWRlIHRoaXMgZnVuY3Rpb24gdG8gcHJvdmlkZSBjdXN0b20gdGlsZSBVUkwgbmFtaW5nIHNjaGVtZXMuXHJcbiAgXHRnZXRUaWxlVXJsOiBmdW5jdGlvbiAoY29vcmRzKSB7XHJcbiAgXHRcdHZhciBkYXRhID0ge1xyXG4gIFx0XHRcdHI6IHJldGluYSA/ICdAMngnIDogJycsXHJcbiAgXHRcdFx0czogdGhpcy5fZ2V0U3ViZG9tYWluKGNvb3JkcyksXHJcbiAgXHRcdFx0eDogY29vcmRzLngsXHJcbiAgXHRcdFx0eTogY29vcmRzLnksXHJcbiAgXHRcdFx0ejogdGhpcy5fZ2V0Wm9vbUZvclVybCgpXHJcbiAgXHRcdH07XHJcbiAgXHRcdGlmICh0aGlzLl9tYXAgJiYgIXRoaXMuX21hcC5vcHRpb25zLmNycy5pbmZpbml0ZSkge1xyXG4gIFx0XHRcdHZhciBpbnZlcnRlZFkgPSB0aGlzLl9nbG9iYWxUaWxlUmFuZ2UubWF4LnkgLSBjb29yZHMueTtcclxuICBcdFx0XHRpZiAodGhpcy5vcHRpb25zLnRtcykge1xyXG4gIFx0XHRcdFx0ZGF0YVsneSddID0gaW52ZXJ0ZWRZO1xyXG4gIFx0XHRcdH1cclxuICBcdFx0XHRkYXRhWycteSddID0gaW52ZXJ0ZWRZO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGVtcGxhdGUodGhpcy5fdXJsLCBleHRlbmQoZGF0YSwgdGhpcy5vcHRpb25zKSk7XHJcbiAgXHR9LFxyXG5cclxuICBcdF90aWxlT25Mb2FkOiBmdW5jdGlvbiAoZG9uZSwgdGlsZSkge1xyXG4gIFx0XHQvLyBGb3IgaHR0cHM6Ly9naXRodWIuY29tL0xlYWZsZXQvTGVhZmxldC9pc3N1ZXMvMzMzMlxyXG4gIFx0XHRpZiAoaWVsdDkpIHtcclxuICBcdFx0XHRzZXRUaW1lb3V0KGJpbmQoZG9uZSwgdGhpcywgbnVsbCwgdGlsZSksIDApO1xyXG4gIFx0XHR9IGVsc2Uge1xyXG4gIFx0XHRcdGRvbmUobnVsbCwgdGlsZSk7XHJcbiAgXHRcdH1cclxuICBcdH0sXHJcblxyXG4gIFx0X3RpbGVPbkVycm9yOiBmdW5jdGlvbiAoZG9uZSwgdGlsZSwgZSkge1xyXG4gIFx0XHR2YXIgZXJyb3JVcmwgPSB0aGlzLm9wdGlvbnMuZXJyb3JUaWxlVXJsO1xyXG4gIFx0XHRpZiAoZXJyb3JVcmwgJiYgdGlsZS5nZXRBdHRyaWJ1dGUoJ3NyYycpICE9PSBlcnJvclVybCkge1xyXG4gIFx0XHRcdHRpbGUuc3JjID0gZXJyb3JVcmw7XHJcbiAgXHRcdH1cclxuICBcdFx0ZG9uZShlLCB0aWxlKTtcclxuICBcdH0sXHJcblxyXG4gIFx0X29uVGlsZVJlbW92ZTogZnVuY3Rpb24gKGUpIHtcclxuICBcdFx0ZS50aWxlLm9ubG9hZCA9IG51bGw7XHJcbiAgXHR9LFxyXG5cclxuICBcdF9nZXRab29tRm9yVXJsOiBmdW5jdGlvbiAoKSB7XHJcbiAgXHRcdHZhciB6b29tID0gdGhpcy5fdGlsZVpvb20sXHJcbiAgXHRcdG1heFpvb20gPSB0aGlzLm9wdGlvbnMubWF4Wm9vbSxcclxuICBcdFx0em9vbVJldmVyc2UgPSB0aGlzLm9wdGlvbnMuem9vbVJldmVyc2UsXHJcbiAgXHRcdHpvb21PZmZzZXQgPSB0aGlzLm9wdGlvbnMuem9vbU9mZnNldDtcclxuXHJcbiAgXHRcdGlmICh6b29tUmV2ZXJzZSkge1xyXG4gIFx0XHRcdHpvb20gPSBtYXhab29tIC0gem9vbTtcclxuICBcdFx0fVxyXG5cclxuICBcdFx0cmV0dXJuIHpvb20gKyB6b29tT2Zmc2V0O1xyXG4gIFx0fSxcclxuXHJcbiAgXHRfZ2V0U3ViZG9tYWluOiBmdW5jdGlvbiAodGlsZVBvaW50KSB7XHJcbiAgXHRcdHZhciBpbmRleCA9IE1hdGguYWJzKHRpbGVQb2ludC54ICsgdGlsZVBvaW50LnkpICUgdGhpcy5vcHRpb25zLnN1YmRvbWFpbnMubGVuZ3RoO1xyXG4gIFx0XHRyZXR1cm4gdGhpcy5vcHRpb25zLnN1YmRvbWFpbnNbaW5kZXhdO1xyXG4gIFx0fSxcclxuXHJcbiAgXHQvLyBzdG9wcyBsb2FkaW5nIGFsbCB0aWxlcyBpbiB0aGUgYmFja2dyb3VuZCBsYXllclxyXG4gIFx0X2Fib3J0TG9hZGluZzogZnVuY3Rpb24gKCkge1xyXG4gIFx0XHR2YXIgaSwgdGlsZTtcclxuICBcdFx0Zm9yIChpIGluIHRoaXMuX3RpbGVzKSB7XHJcbiAgXHRcdFx0aWYgKHRoaXMuX3RpbGVzW2ldLmNvb3Jkcy56ICE9PSB0aGlzLl90aWxlWm9vbSkge1xyXG4gIFx0XHRcdFx0dGlsZSA9IHRoaXMuX3RpbGVzW2ldLmVsO1xyXG5cclxuICBcdFx0XHRcdHRpbGUub25sb2FkID0gZmFsc2VGbjtcclxuICBcdFx0XHRcdHRpbGUub25lcnJvciA9IGZhbHNlRm47XHJcblxyXG4gIFx0XHRcdFx0aWYgKCF0aWxlLmNvbXBsZXRlKSB7XHJcbiAgXHRcdFx0XHRcdHRpbGUuc3JjID0gZW1wdHlJbWFnZVVybDtcclxuICBcdFx0XHRcdFx0cmVtb3ZlKHRpbGUpO1xyXG4gIFx0XHRcdFx0XHRkZWxldGUgdGhpcy5fdGlsZXNbaV07XHJcbiAgXHRcdFx0XHR9XHJcbiAgXHRcdFx0fVxyXG4gIFx0XHR9XHJcbiAgXHR9LFxyXG5cclxuICBcdF9yZW1vdmVUaWxlOiBmdW5jdGlvbiAoa2V5KSB7XHJcbiAgXHRcdHZhciB0aWxlID0gdGhpcy5fdGlsZXNba2V5XTtcclxuICBcdFx0aWYgKCF0aWxlKSB7IHJldHVybjsgfVxyXG5cclxuICBcdFx0Ly8gQ2FuY2VscyBhbnkgcGVuZGluZyBodHRwIHJlcXVlc3RzIGFzc29jaWF0ZWQgd2l0aCB0aGUgdGlsZVxyXG4gIFx0XHQvLyB1bmxlc3Mgd2UncmUgb24gQW5kcm9pZCdzIHN0b2NrIGJyb3dzZXIsXHJcbiAgXHRcdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vTGVhZmxldC9MZWFmbGV0L2lzc3Vlcy8xMzdcclxuICBcdFx0aWYgKCFhbmRyb2lkU3RvY2spIHtcclxuICBcdFx0XHR0aWxlLmVsLnNldEF0dHJpYnV0ZSgnc3JjJywgZW1wdHlJbWFnZVVybCk7XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBHcmlkTGF5ZXIucHJvdG90eXBlLl9yZW1vdmVUaWxlLmNhbGwodGhpcywga2V5KTtcclxuICBcdH0sXHJcblxyXG4gIFx0X3RpbGVSZWFkeTogZnVuY3Rpb24gKGNvb3JkcywgZXJyLCB0aWxlKSB7XHJcbiAgXHRcdGlmICghdGhpcy5fbWFwIHx8ICh0aWxlICYmIHRpbGUuZ2V0QXR0cmlidXRlKCdzcmMnKSA9PT0gZW1wdHlJbWFnZVVybCkpIHtcclxuICBcdFx0XHRyZXR1cm47XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdHJldHVybiBHcmlkTGF5ZXIucHJvdG90eXBlLl90aWxlUmVhZHkuY2FsbCh0aGlzLCBjb29yZHMsIGVyciwgdGlsZSk7XHJcbiAgXHR9XHJcbiAgfSk7XHJcblxyXG5cclxuICAvLyBAZmFjdG9yeSBMLnRpbGVsYXllcih1cmxUZW1wbGF0ZTogU3RyaW5nLCBvcHRpb25zPzogVGlsZUxheWVyIG9wdGlvbnMpXHJcbiAgLy8gSW5zdGFudGlhdGVzIGEgdGlsZSBsYXllciBvYmplY3QgZ2l2ZW4gYSBgVVJMIHRlbXBsYXRlYCBhbmQgb3B0aW9uYWxseSBhbiBvcHRpb25zIG9iamVjdC5cclxuXHJcbiAgZnVuY3Rpb24gdGlsZUxheWVyKHVybCwgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBUaWxlTGF5ZXIodXJsLCBvcHRpb25zKTtcclxuICB9XG5cbiAgLypcclxuICAgKiBAY2xhc3MgVGlsZUxheWVyLldNU1xyXG4gICAqIEBpbmhlcml0cyBUaWxlTGF5ZXJcclxuICAgKiBAYWthIEwuVGlsZUxheWVyLldNU1xyXG4gICAqIFVzZWQgdG8gZGlzcGxheSBbV01TXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWJfTWFwX1NlcnZpY2UpIHNlcnZpY2VzIGFzIHRpbGUgbGF5ZXJzIG9uIHRoZSBtYXAuIEV4dGVuZHMgYFRpbGVMYXllcmAuXHJcbiAgICpcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqXHJcbiAgICogYGBganNcclxuICAgKiB2YXIgbmV4cmFkID0gTC50aWxlTGF5ZXIud21zKFwiaHR0cDovL21lc29uZXQuYWdyb24uaWFzdGF0ZS5lZHUvY2dpLWJpbi93bXMvbmV4cmFkL24wci5jZ2lcIiwge1xyXG4gICAqIFx0bGF5ZXJzOiAnbmV4cmFkLW4wci05MDA5MTMnLFxyXG4gICAqIFx0Zm9ybWF0OiAnaW1hZ2UvcG5nJyxcclxuICAgKiBcdHRyYW5zcGFyZW50OiB0cnVlLFxyXG4gICAqIFx0YXR0cmlidXRpb246IFwiV2VhdGhlciBkYXRhIMKpIDIwMTIgSUVNIE5leHJhZFwiXHJcbiAgICogfSk7XHJcbiAgICogYGBgXHJcbiAgICovXHJcblxyXG4gIHZhciBUaWxlTGF5ZXJXTVMgPSBUaWxlTGF5ZXIuZXh0ZW5kKHtcclxuXHJcbiAgXHQvLyBAc2VjdGlvblxyXG4gIFx0Ly8gQGFrYSBUaWxlTGF5ZXIuV01TIG9wdGlvbnNcclxuICBcdC8vIElmIGFueSBjdXN0b20gb3B0aW9ucyBub3QgZG9jdW1lbnRlZCBoZXJlIGFyZSB1c2VkLCB0aGV5IHdpbGwgYmUgc2VudCB0byB0aGVcclxuICBcdC8vIFdNUyBzZXJ2ZXIgYXMgZXh0cmEgcGFyYW1ldGVycyBpbiBlYWNoIHJlcXVlc3QgVVJMLiBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yXHJcbiAgXHQvLyBbbm9uLXN0YW5kYXJkIHZlbmRvciBXTVMgcGFyYW1ldGVyc10oaHR0cDovL2RvY3MuZ2Vvc2VydmVyLm9yZy9zdGFibGUvZW4vdXNlci9zZXJ2aWNlcy93bXMvdmVuZG9yLmh0bWwpLlxyXG4gIFx0ZGVmYXVsdFdtc1BhcmFtczoge1xyXG4gIFx0XHRzZXJ2aWNlOiAnV01TJyxcclxuICBcdFx0cmVxdWVzdDogJ0dldE1hcCcsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGxheWVyczogU3RyaW5nID0gJydcclxuICBcdFx0Ly8gKioocmVxdWlyZWQpKiogQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2YgV01TIGxheWVycyB0byBzaG93LlxyXG4gIFx0XHRsYXllcnM6ICcnLFxyXG5cclxuICBcdFx0Ly8gQG9wdGlvbiBzdHlsZXM6IFN0cmluZyA9ICcnXHJcbiAgXHRcdC8vIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIFdNUyBzdHlsZXMuXHJcbiAgXHRcdHN0eWxlczogJycsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIGZvcm1hdDogU3RyaW5nID0gJ2ltYWdlL2pwZWcnXHJcbiAgXHRcdC8vIFdNUyBpbWFnZSBmb3JtYXQgKHVzZSBgJ2ltYWdlL3BuZydgIGZvciBsYXllcnMgd2l0aCB0cmFuc3BhcmVuY3kpLlxyXG4gIFx0XHRmb3JtYXQ6ICdpbWFnZS9qcGVnJyxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdHJhbnNwYXJlbnQ6IEJvb2xlYW4gPSBmYWxzZVxyXG4gIFx0XHQvLyBJZiBgdHJ1ZWAsIHRoZSBXTVMgc2VydmljZSB3aWxsIHJldHVybiBpbWFnZXMgd2l0aCB0cmFuc3BhcmVuY3kuXHJcbiAgXHRcdHRyYW5zcGFyZW50OiBmYWxzZSxcclxuXHJcbiAgXHRcdC8vIEBvcHRpb24gdmVyc2lvbjogU3RyaW5nID0gJzEuMS4xJ1xyXG4gIFx0XHQvLyBWZXJzaW9uIG9mIHRoZSBXTVMgc2VydmljZSB0byB1c2VcclxuICBcdFx0dmVyc2lvbjogJzEuMS4xJ1xyXG4gIFx0fSxcclxuXHJcbiAgXHRvcHRpb25zOiB7XHJcbiAgXHRcdC8vIEBvcHRpb24gY3JzOiBDUlMgPSBudWxsXHJcbiAgXHRcdC8vIENvb3JkaW5hdGUgUmVmZXJlbmNlIFN5c3RlbSB0byB1c2UgZm9yIHRoZSBXTVMgcmVxdWVzdHMsIGRlZmF1bHRzIHRvXHJcbiAgXHRcdC8vIG1hcCBDUlMuIERvbid0IGNoYW5nZSB0aGlzIGlmIHlvdSdyZSBub3Qgc3VyZSB3aGF0IGl0IG1lYW5zLlxyXG4gIFx0XHRjcnM6IG51bGwsXHJcblxyXG4gIFx0XHQvLyBAb3B0aW9uIHVwcGVyY2FzZTogQm9vbGVhbiA9IGZhbHNlXHJcbiAgXHRcdC8vIElmIGB0cnVlYCwgV01TIHJlcXVlc3QgcGFyYW1ldGVyIGtleXMgd2lsbCBiZSB1cHBlcmNhc2UuXHJcbiAgXHRcdHVwcGVyY2FzZTogZmFsc2VcclxuICBcdH0sXHJcblxyXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKHVybCwgb3B0aW9ucykge1xyXG5cclxuICBcdFx0dGhpcy5fdXJsID0gdXJsO1xyXG5cclxuICBcdFx0dmFyIHdtc1BhcmFtcyA9IGV4dGVuZCh7fSwgdGhpcy5kZWZhdWx0V21zUGFyYW1zKTtcclxuXHJcbiAgXHRcdC8vIGFsbCBrZXlzIHRoYXQgYXJlIG5vdCBUaWxlTGF5ZXIgb3B0aW9ucyBnbyB0byBXTVMgcGFyYW1zXHJcbiAgXHRcdGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xyXG4gIFx0XHRcdGlmICghKGkgaW4gdGhpcy5vcHRpb25zKSkge1xyXG4gIFx0XHRcdFx0d21zUGFyYW1zW2ldID0gb3B0aW9uc1tpXTtcclxuICBcdFx0XHR9XHJcbiAgXHRcdH1cclxuXHJcbiAgXHRcdG9wdGlvbnMgPSBzZXRPcHRpb25zKHRoaXMsIG9wdGlvbnMpO1xyXG5cclxuICBcdFx0dmFyIHJlYWxSZXRpbmEgPSBvcHRpb25zLmRldGVjdFJldGluYSAmJiByZXRpbmEgPyAyIDogMTtcclxuICBcdFx0dmFyIHRpbGVTaXplID0gdGhpcy5nZXRUaWxlU2l6ZSgpO1xyXG4gIFx0XHR3bXNQYXJhbXMud2lkdGggPSB0aWxlU2l6ZS54ICogcmVhbFJldGluYTtcclxuICBcdFx0d21zUGFyYW1zLmhlaWdodCA9IHRpbGVTaXplLnkgKiByZWFsUmV0aW5hO1xyXG5cclxuICBcdFx0dGhpcy53bXNQYXJhbXMgPSB3bXNQYXJhbXM7XHJcbiAgXHR9LFxyXG5cclxuICBcdG9uQWRkOiBmdW5jdGlvbiAobWFwKSB7XHJcblxyXG4gIFx0XHR0aGlzLl9jcnMgPSB0aGlzLm9wdGlvbnMuY3JzIHx8IG1hcC5vcHRpb25zLmNycztcclxuICBcdFx0dGhpcy5fd21zVmVyc2lvbiA9IHBhcnNlRmxvYXQodGhpcy53bXNQYXJhbXMudmVyc2lvbik7XHJcblxyXG4gIFx0XHR2YXIgcHJvamVjdGlvbktleSA9IHRoaXMuX3dtc1ZlcnNpb24gPj0gMS4zID8gJ2NycycgOiAnc3JzJztcclxuICBcdFx0dGhpcy53bXNQYXJhbXNbcHJvamVjdGlvbktleV0gPSB0aGlzLl9jcnMuY29kZTtcclxuXHJcbiAgXHRcdFRpbGVMYXllci5wcm90b3R5cGUub25BZGQuY2FsbCh0aGlzLCBtYXApO1xyXG4gIFx0fSxcclxuXHJcbiAgXHRnZXRUaWxlVXJsOiBmdW5jdGlvbiAoY29vcmRzKSB7XHJcblxyXG4gIFx0XHR2YXIgdGlsZUJvdW5kcyA9IHRoaXMuX3RpbGVDb29yZHNUb053U2UoY29vcmRzKSxcclxuICBcdFx0ICAgIGNycyA9IHRoaXMuX2NycyxcclxuICBcdFx0ICAgIGJvdW5kcyA9IHRvQm91bmRzKGNycy5wcm9qZWN0KHRpbGVCb3VuZHNbMF0pLCBjcnMucHJvamVjdCh0aWxlQm91bmRzWzFdKSksXHJcbiAgXHRcdCAgICBtaW4gPSBib3VuZHMubWluLFxyXG4gIFx0XHQgICAgbWF4ID0gYm91bmRzLm1heCxcclxuICBcdFx0ICAgIGJib3ggPSAodGhpcy5fd21zVmVyc2lvbiA+PSAxLjMgJiYgdGhpcy5fY3JzID09PSBFUFNHNDMyNiA/XHJcbiAgXHRcdCAgICBbbWluLnksIG1pbi54LCBtYXgueSwgbWF4LnhdIDpcclxuICBcdFx0ICAgIFttaW4ueCwgbWluLnksIG1heC54LCBtYXgueV0pLmpvaW4oJywnKSxcclxuICBcdFx0ICAgIHVybCA9IFRpbGVMYXllci5wcm90b3R5cGUuZ2V0VGlsZVVybC5jYWxsKHRoaXMsIGNvb3Jkcyk7XHJcbiAgXHRcdHJldHVybiB1cmwgK1xyXG4gIFx0XHRcdGdldFBhcmFtU3RyaW5nKHRoaXMud21zUGFyYW1zLCB1cmwsIHRoaXMub3B0aW9ucy51cHBlcmNhc2UpICtcclxuICBcdFx0XHQodGhpcy5vcHRpb25zLnVwcGVyY2FzZSA/ICcmQkJPWD0nIDogJyZiYm94PScpICsgYmJveDtcclxuICBcdH0sXHJcblxyXG4gIFx0Ly8gQG1ldGhvZCBzZXRQYXJhbXMocGFyYW1zOiBPYmplY3QsIG5vUmVkcmF3PzogQm9vbGVhbik6IHRoaXNcclxuICBcdC8vIE1lcmdlcyBhbiBvYmplY3Qgd2l0aCB0aGUgbmV3IHBhcmFtZXRlcnMgYW5kIHJlLXJlcXVlc3RzIHRpbGVzIG9uIHRoZSBjdXJyZW50IHNjcmVlbiAodW5sZXNzIGBub1JlZHJhd2Agd2FzIHNldCB0byB0cnVlKS5cclxuICBcdHNldFBhcmFtczogZnVuY3Rpb24gKHBhcmFtcywgbm9SZWRyYXcpIHtcclxuXHJcbiAgXHRcdGV4dGVuZCh0aGlzLndtc1BhcmFtcywgcGFyYW1zKTtcclxuXHJcbiAgXHRcdGlmICghbm9SZWRyYXcpIHtcclxuICBcdFx0XHR0aGlzLnJlZHJhdygpO1xyXG4gIFx0XHR9XHJcblxyXG4gIFx0XHRyZXR1cm4gdGhpcztcclxuICBcdH1cclxuICB9KTtcclxuXHJcblxyXG4gIC8vIEBmYWN0b3J5IEwudGlsZUxheWVyLndtcyhiYXNlVXJsOiBTdHJpbmcsIG9wdGlvbnM6IFRpbGVMYXllci5XTVMgb3B0aW9ucylcclxuICAvLyBJbnN0YW50aWF0ZXMgYSBXTVMgdGlsZSBsYXllciBvYmplY3QgZ2l2ZW4gYSBiYXNlIFVSTCBvZiB0aGUgV01TIHNlcnZpY2UgYW5kIGEgV01TIHBhcmFtZXRlcnMvb3B0aW9ucyBvYmplY3QuXHJcbiAgZnVuY3Rpb24gdGlsZUxheWVyV01TKHVybCwgb3B0aW9ucykge1xyXG4gIFx0cmV0dXJuIG5ldyBUaWxlTGF5ZXJXTVModXJsLCBvcHRpb25zKTtcclxuICB9XG5cbiAgVGlsZUxheWVyLldNUyA9IFRpbGVMYXllcldNUztcbiAgdGlsZUxheWVyLndtcyA9IHRpbGVMYXllcldNUztcblxuICAvKlxuICAgKiBAY2xhc3MgUmVuZGVyZXJcbiAgICogQGluaGVyaXRzIExheWVyXG4gICAqIEBha2EgTC5SZW5kZXJlclxuICAgKlxuICAgKiBCYXNlIGNsYXNzIGZvciB2ZWN0b3IgcmVuZGVyZXIgaW1wbGVtZW50YXRpb25zIChgU1ZHYCwgYENhbnZhc2ApLiBIYW5kbGVzIHRoZVxuICAgKiBET00gY29udGFpbmVyIG9mIHRoZSByZW5kZXJlciwgaXRzIGJvdW5kcywgYW5kIGl0cyB6b29tIGFuaW1hdGlvbi5cbiAgICpcbiAgICogQSBgUmVuZGVyZXJgIHdvcmtzIGFzIGFuIGltcGxpY2l0IGxheWVyIGdyb3VwIGZvciBhbGwgYFBhdGhgcyAtIHRoZSByZW5kZXJlclxuICAgKiBpdHNlbGYgY2FuIGJlIGFkZGVkIG9yIHJlbW92ZWQgdG8gdGhlIG1hcC4gQWxsIHBhdGhzIHVzZSBhIHJlbmRlcmVyLCB3aGljaCBjYW5cbiAgICogYmUgaW1wbGljaXQgKHRoZSBtYXAgd2lsbCBkZWNpZGUgdGhlIHR5cGUgb2YgcmVuZGVyZXIgYW5kIHVzZSBpdCBhdXRvbWF0aWNhbGx5KVxuICAgKiBvciBleHBsaWNpdCAodXNpbmcgdGhlIFtgcmVuZGVyZXJgXSgjcGF0aC1yZW5kZXJlcikgb3B0aW9uIG9mIHRoZSBwYXRoKS5cbiAgICpcbiAgICogRG8gbm90IHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LCB1c2UgYFNWR2AgYW5kIGBDYW52YXNgIGluc3RlYWQuXG4gICAqXG4gICAqIEBldmVudCB1cGRhdGU6IEV2ZW50XG4gICAqIEZpcmVkIHdoZW4gdGhlIHJlbmRlcmVyIHVwZGF0ZXMgaXRzIGJvdW5kcywgY2VudGVyIGFuZCB6b29tLCBmb3IgZXhhbXBsZSB3aGVuXG4gICAqIGl0cyBtYXAgaGFzIG1vdmVkXG4gICAqL1xuXG4gIHZhciBSZW5kZXJlciA9IExheWVyLmV4dGVuZCh7XG5cbiAgXHQvLyBAc2VjdGlvblxuICBcdC8vIEBha2EgUmVuZGVyZXIgb3B0aW9uc1xuICBcdG9wdGlvbnM6IHtcbiAgXHRcdC8vIEBvcHRpb24gcGFkZGluZzogTnVtYmVyID0gMC4xXG4gIFx0XHQvLyBIb3cgbXVjaCB0byBleHRlbmQgdGhlIGNsaXAgYXJlYSBhcm91bmQgdGhlIG1hcCB2aWV3IChyZWxhdGl2ZSB0byBpdHMgc2l6ZSlcbiAgXHRcdC8vIGUuZy4gMC4xIHdvdWxkIGJlIDEwJSBvZiBtYXAgdmlldyBpbiBlYWNoIGRpcmVjdGlvblxuICBcdFx0cGFkZGluZzogMC4xLFxuXG4gIFx0XHQvLyBAb3B0aW9uIHRvbGVyYW5jZTogTnVtYmVyID0gMFxuICBcdFx0Ly8gSG93IG11Y2ggdG8gZXh0ZW5kIGNsaWNrIHRvbGVyYW5jZSByb3VuZCBhIHBhdGgvb2JqZWN0IG9uIHRoZSBtYXBcbiAgXHRcdHRvbGVyYW5jZSA6IDBcbiAgXHR9LFxuXG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgXHRcdHNldE9wdGlvbnModGhpcywgb3B0aW9ucyk7XG4gIFx0XHRzdGFtcCh0aGlzKTtcbiAgXHRcdHRoaXMuX2xheWVycyA9IHRoaXMuX2xheWVycyB8fCB7fTtcbiAgXHR9LFxuXG4gIFx0b25BZGQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGlmICghdGhpcy5fY29udGFpbmVyKSB7XG4gIFx0XHRcdHRoaXMuX2luaXRDb250YWluZXIoKTsgLy8gZGVmaW5lZCBieSByZW5kZXJlciBpbXBsZW1lbnRhdGlvbnNcblxuICBcdFx0XHRpZiAodGhpcy5fem9vbUFuaW1hdGVkKSB7XG4gIFx0XHRcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC16b29tLWFuaW1hdGVkJyk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cblxuICBcdFx0dGhpcy5nZXRQYW5lKCkuYXBwZW5kQ2hpbGQodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdHRoaXMuX3VwZGF0ZSgpO1xuICBcdFx0dGhpcy5vbigndXBkYXRlJywgdGhpcy5fdXBkYXRlUGF0aHMsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRvblJlbW92ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5vZmYoJ3VwZGF0ZScsIHRoaXMuX3VwZGF0ZVBhdGhzLCB0aGlzKTtcbiAgXHRcdHRoaXMuX2Rlc3Ryb3lDb250YWluZXIoKTtcbiAgXHR9LFxuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0ge1xuICBcdFx0XHR2aWV3cmVzZXQ6IHRoaXMuX3Jlc2V0LFxuICBcdFx0XHR6b29tOiB0aGlzLl9vblpvb20sXG4gIFx0XHRcdG1vdmVlbmQ6IHRoaXMuX3VwZGF0ZSxcbiAgXHRcdFx0em9vbWVuZDogdGhpcy5fb25ab29tRW5kXG4gIFx0XHR9O1xuICBcdFx0aWYgKHRoaXMuX3pvb21BbmltYXRlZCkge1xuICBcdFx0XHRldmVudHMuem9vbWFuaW0gPSB0aGlzLl9vbkFuaW1ab29tO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X29uQW5pbVpvb206IGZ1bmN0aW9uIChldikge1xuICBcdFx0dGhpcy5fdXBkYXRlVHJhbnNmb3JtKGV2LmNlbnRlciwgZXYuem9vbSk7XG4gIFx0fSxcblxuICBcdF9vblpvb206IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX3VwZGF0ZVRyYW5zZm9ybSh0aGlzLl9tYXAuZ2V0Q2VudGVyKCksIHRoaXMuX21hcC5nZXRab29tKCkpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlVHJhbnNmb3JtOiBmdW5jdGlvbiAoY2VudGVyLCB6b29tKSB7XG4gIFx0XHR2YXIgc2NhbGUgPSB0aGlzLl9tYXAuZ2V0Wm9vbVNjYWxlKHpvb20sIHRoaXMuX3pvb20pLFxuICBcdFx0ICAgIHBvc2l0aW9uID0gZ2V0UG9zaXRpb24odGhpcy5fY29udGFpbmVyKSxcbiAgXHRcdCAgICB2aWV3SGFsZiA9IHRoaXMuX21hcC5nZXRTaXplKCkubXVsdGlwbHlCeSgwLjUgKyB0aGlzLm9wdGlvbnMucGFkZGluZyksXG4gIFx0XHQgICAgY3VycmVudENlbnRlclBvaW50ID0gdGhpcy5fbWFwLnByb2plY3QodGhpcy5fY2VudGVyLCB6b29tKSxcbiAgXHRcdCAgICBkZXN0Q2VudGVyUG9pbnQgPSB0aGlzLl9tYXAucHJvamVjdChjZW50ZXIsIHpvb20pLFxuICBcdFx0ICAgIGNlbnRlck9mZnNldCA9IGRlc3RDZW50ZXJQb2ludC5zdWJ0cmFjdChjdXJyZW50Q2VudGVyUG9pbnQpLFxuXG4gIFx0XHQgICAgdG9wTGVmdE9mZnNldCA9IHZpZXdIYWxmLm11bHRpcGx5QnkoLXNjYWxlKS5hZGQocG9zaXRpb24pLmFkZCh2aWV3SGFsZikuc3VidHJhY3QoY2VudGVyT2Zmc2V0KTtcblxuICBcdFx0aWYgKGFueTNkKSB7XG4gIFx0XHRcdHNldFRyYW5zZm9ybSh0aGlzLl9jb250YWluZXIsIHRvcExlZnRPZmZzZXQsIHNjYWxlKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHNldFBvc2l0aW9uKHRoaXMuX2NvbnRhaW5lciwgdG9wTGVmdE9mZnNldCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fdXBkYXRlKCk7XG4gIFx0XHR0aGlzLl91cGRhdGVUcmFuc2Zvcm0odGhpcy5fY2VudGVyLCB0aGlzLl96b29tKTtcblxuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpZF0uX3Jlc2V0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vblpvb21FbmQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdGZvciAodmFyIGlkIGluIHRoaXMuX2xheWVycykge1xuICBcdFx0XHR0aGlzLl9sYXllcnNbaWRdLl9wcm9qZWN0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoczogZnVuY3Rpb24gKCkge1xuICBcdFx0Zm9yICh2YXIgaWQgaW4gdGhpcy5fbGF5ZXJzKSB7XG4gIFx0XHRcdHRoaXMuX2xheWVyc1tpZF0uX3VwZGF0ZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHQvLyBVcGRhdGUgcGl4ZWwgYm91bmRzIG9mIHJlbmRlcmVyIGNvbnRhaW5lciAoZm9yIHBvc2l0aW9uaW5nL3NpemluZy9jbGlwcGluZyBsYXRlcilcbiAgXHRcdC8vIFN1YmNsYXNzZXMgYXJlIHJlc3BvbnNpYmxlIG9mIGZpcmluZyB0aGUgJ3VwZGF0ZScgZXZlbnQuXG4gIFx0XHR2YXIgcCA9IHRoaXMub3B0aW9ucy5wYWRkaW5nLFxuICBcdFx0ICAgIHNpemUgPSB0aGlzLl9tYXAuZ2V0U2l6ZSgpLFxuICBcdFx0ICAgIG1pbiA9IHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF5ZXJQb2ludChzaXplLm11bHRpcGx5QnkoLXApKS5yb3VuZCgpO1xuXG4gIFx0XHR0aGlzLl9ib3VuZHMgPSBuZXcgQm91bmRzKG1pbiwgbWluLmFkZChzaXplLm11bHRpcGx5QnkoMSArIHAgKiAyKSkucm91bmQoKSk7XG5cbiAgXHRcdHRoaXMuX2NlbnRlciA9IHRoaXMuX21hcC5nZXRDZW50ZXIoKTtcbiAgXHRcdHRoaXMuX3pvb20gPSB0aGlzLl9tYXAuZ2V0Wm9vbSgpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogQGNsYXNzIENhbnZhc1xuICAgKiBAaW5oZXJpdHMgUmVuZGVyZXJcbiAgICogQGFrYSBMLkNhbnZhc1xuICAgKlxuICAgKiBBbGxvd3MgdmVjdG9yIGxheWVycyB0byBiZSBkaXNwbGF5ZWQgd2l0aCBbYDxjYW52YXM+YF0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvQVBJL0NhbnZhc19BUEkpLlxuICAgKiBJbmhlcml0cyBgUmVuZGVyZXJgLlxuICAgKlxuICAgKiBEdWUgdG8gW3RlY2huaWNhbCBsaW1pdGF0aW9uc10oaHR0cDovL2Nhbml1c2UuY29tLyNzZWFyY2g9Y2FudmFzKSwgQ2FudmFzIGlzIG5vdFxuICAgKiBhdmFpbGFibGUgaW4gYWxsIHdlYiBicm93c2Vycywgbm90YWJseSBJRTgsIGFuZCBvdmVybGFwcGluZyBnZW9tZXRyaWVzIG1pZ2h0XG4gICAqIG5vdCBkaXNwbGF5IHByb3Blcmx5IGluIHNvbWUgZWRnZSBjYXNlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVXNlIENhbnZhcyBieSBkZWZhdWx0IGZvciBhbGwgcGF0aHMgaW4gdGhlIG1hcDpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnLCB7XG4gICAqIFx0cmVuZGVyZXI6IEwuY2FudmFzKClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBVc2UgYSBDYW52YXMgcmVuZGVyZXIgd2l0aCBleHRyYSBwYWRkaW5nIGZvciBzcGVjaWZpYyB2ZWN0b3IgZ2VvbWV0cmllczpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnKTtcbiAgICogdmFyIG15UmVuZGVyZXIgPSBMLmNhbnZhcyh7IHBhZGRpbmc6IDAuNSB9KTtcbiAgICogdmFyIGxpbmUgPSBMLnBvbHlsaW5lKCBjb29yZGluYXRlcywgeyByZW5kZXJlcjogbXlSZW5kZXJlciB9ICk7XG4gICAqIHZhciBjaXJjbGUgPSBMLmNpcmNsZSggY2VudGVyLCB7IHJlbmRlcmVyOiBteVJlbmRlcmVyIH0gKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBDYW52YXMgPSBSZW5kZXJlci5leHRlbmQoe1xuICBcdGdldEV2ZW50czogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGV2ZW50cyA9IFJlbmRlcmVyLnByb3RvdHlwZS5nZXRFdmVudHMuY2FsbCh0aGlzKTtcbiAgXHRcdGV2ZW50cy52aWV3cHJlcmVzZXQgPSB0aGlzLl9vblZpZXdQcmVSZXNldDtcbiAgXHRcdHJldHVybiBldmVudHM7XG4gIFx0fSxcblxuICBcdF9vblZpZXdQcmVSZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0Ly8gU2V0IGEgZmxhZyBzbyB0aGF0IGEgdmlld3ByZXJlc2V0K21vdmVlbmQrdmlld3Jlc2V0IG9ubHkgdXBkYXRlcyZyZWRyYXdzIG9uY2VcbiAgXHRcdHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMgPSB0cnVlO1xuICBcdH0sXG5cbiAgXHRvbkFkZDogZnVuY3Rpb24gKCkge1xuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLm9uQWRkLmNhbGwodGhpcyk7XG5cbiAgXHRcdC8vIFJlZHJhdyB2ZWN0b3JzIHNpbmNlIGNhbnZhcyBpcyBjbGVhcmVkIHVwb24gcmVtb3ZhbCxcbiAgXHRcdC8vIGluIGNhc2Ugb2YgcmVtb3ZpbmcgdGhlIHJlbmRlcmVyIGl0c2VsZiBmcm9tIHRoZSBtYXAuXG4gIFx0XHR0aGlzLl9kcmF3KCk7XG4gIFx0fSxcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gdGhpcy5fY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG5cbiAgXHRcdG9uKGNvbnRhaW5lciwgJ21vdXNlbW92ZScsIHRoaXMuX29uTW91c2VNb3ZlLCB0aGlzKTtcbiAgXHRcdG9uKGNvbnRhaW5lciwgJ2NsaWNrIGRibGNsaWNrIG1vdXNlZG93biBtb3VzZXVwIGNvbnRleHRtZW51JywgdGhpcy5fb25DbGljaywgdGhpcyk7XG4gIFx0XHRvbihjb250YWluZXIsICdtb3VzZW91dCcsIHRoaXMuX2hhbmRsZU1vdXNlT3V0LCB0aGlzKTtcblxuICBcdFx0dGhpcy5fY3R4ID0gY29udGFpbmVyLmdldENvbnRleHQoJzJkJyk7XG4gIFx0fSxcblxuICBcdF9kZXN0cm95Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fcmVkcmF3UmVxdWVzdCk7XG4gIFx0XHRkZWxldGUgdGhpcy5fY3R4O1xuICBcdFx0cmVtb3ZlKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRvZmYodGhpcy5fY29udGFpbmVyKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9jb250YWluZXI7XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoczogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX3Bvc3Rwb25lVXBkYXRlUGF0aHMpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBsYXllcjtcbiAgXHRcdHRoaXMuX3JlZHJhd0JvdW5kcyA9IG51bGw7XG4gIFx0XHRmb3IgKHZhciBpZCBpbiB0aGlzLl9sYXllcnMpIHtcbiAgXHRcdFx0bGF5ZXIgPSB0aGlzLl9sYXllcnNbaWRdO1xuICBcdFx0XHRsYXllci5fdXBkYXRlKCk7XG4gIFx0XHR9XG4gIFx0XHR0aGlzLl9yZWRyYXcoKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSAmJiB0aGlzLl9ib3VuZHMpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdFJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgXHRcdHZhciBiID0gdGhpcy5fYm91bmRzLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IHRoaXMuX2NvbnRhaW5lcixcbiAgXHRcdCAgICBzaXplID0gYi5nZXRTaXplKCksXG4gIFx0XHQgICAgbSA9IHJldGluYSA/IDIgOiAxO1xuXG4gIFx0XHRzZXRQb3NpdGlvbihjb250YWluZXIsIGIubWluKTtcblxuICBcdFx0Ly8gc2V0IGNhbnZhcyBzaXplIChhbHNvIGNsZWFyaW5nIGl0KTsgdXNlIGRvdWJsZSBzaXplIG9uIHJldGluYVxuICBcdFx0Y29udGFpbmVyLndpZHRoID0gbSAqIHNpemUueDtcbiAgXHRcdGNvbnRhaW5lci5oZWlnaHQgPSBtICogc2l6ZS55O1xuICBcdFx0Y29udGFpbmVyLnN0eWxlLndpZHRoID0gc2l6ZS54ICsgJ3B4JztcbiAgXHRcdGNvbnRhaW5lci5zdHlsZS5oZWlnaHQgPSBzaXplLnkgKyAncHgnO1xuXG4gIFx0XHRpZiAocmV0aW5hKSB7XG4gIFx0XHRcdHRoaXMuX2N0eC5zY2FsZSgyLCAyKTtcbiAgXHRcdH1cblxuICBcdFx0Ly8gdHJhbnNsYXRlIHNvIHdlIHVzZSB0aGUgc2FtZSBwYXRoIGNvb3JkaW5hdGVzIGFmdGVyIGNhbnZhcyBlbGVtZW50IG1vdmVzXG4gIFx0XHR0aGlzLl9jdHgudHJhbnNsYXRlKC1iLm1pbi54LCAtYi5taW4ueSk7XG5cbiAgXHRcdC8vIFRlbGwgcGF0aHMgdG8gcmVkcmF3IHRoZW1zZWx2ZXNcbiAgXHRcdHRoaXMuZmlyZSgndXBkYXRlJyk7XG4gIFx0fSxcblxuICBcdF9yZXNldDogZnVuY3Rpb24gKCkge1xuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLl9yZXNldC5jYWxsKHRoaXMpO1xuXG4gIFx0XHRpZiAodGhpcy5fcG9zdHBvbmVVcGRhdGVQYXRocykge1xuICBcdFx0XHR0aGlzLl9wb3N0cG9uZVVwZGF0ZVBhdGhzID0gZmFsc2U7XG4gIFx0XHRcdHRoaXMuX3VwZGF0ZVBhdGhzKCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pbml0UGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0aGlzLl91cGRhdGVEYXNoQXJyYXkobGF5ZXIpO1xuICBcdFx0dGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV0gPSBsYXllcjtcblxuICBcdFx0dmFyIG9yZGVyID0gbGF5ZXIuX29yZGVyID0ge1xuICBcdFx0XHRsYXllcjogbGF5ZXIsXG4gIFx0XHRcdHByZXY6IHRoaXMuX2RyYXdMYXN0LFxuICBcdFx0XHRuZXh0OiBudWxsXG4gIFx0XHR9O1xuICBcdFx0aWYgKHRoaXMuX2RyYXdMYXN0KSB7IHRoaXMuX2RyYXdMYXN0Lm5leHQgPSBvcmRlcjsgfVxuICBcdFx0dGhpcy5fZHJhd0xhc3QgPSBvcmRlcjtcbiAgXHRcdHRoaXMuX2RyYXdGaXJzdCA9IHRoaXMuX2RyYXdGaXJzdCB8fCB0aGlzLl9kcmF3TGFzdDtcbiAgXHR9LFxuXG4gIFx0X2FkZFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBvcmRlciA9IGxheWVyLl9vcmRlcjtcbiAgXHRcdHZhciBuZXh0ID0gb3JkZXIubmV4dDtcbiAgXHRcdHZhciBwcmV2ID0gb3JkZXIucHJldjtcblxuICBcdFx0aWYgKG5leHQpIHtcbiAgXHRcdFx0bmV4dC5wcmV2ID0gcHJldjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHRoaXMuX2RyYXdMYXN0ID0gcHJldjtcbiAgXHRcdH1cbiAgXHRcdGlmIChwcmV2KSB7XG4gIFx0XHRcdHByZXYubmV4dCA9IG5leHQ7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHR0aGlzLl9kcmF3Rmlyc3QgPSBuZXh0O1xuICBcdFx0fVxuXG4gIFx0XHRkZWxldGUgbGF5ZXIuX29yZGVyO1xuXG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV07XG5cbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHQvLyBSZWRyYXcgdGhlIHVuaW9uIG9mIHRoZSBsYXllcidzIG9sZCBwaXhlbFxuICBcdFx0Ly8gYm91bmRzIGFuZCB0aGUgbmV3IHBpeGVsIGJvdW5kcy5cbiAgXHRcdHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyhsYXllcik7XG4gIFx0XHRsYXllci5fcHJvamVjdCgpO1xuICBcdFx0bGF5ZXIuX3VwZGF0ZSgpO1xuICBcdFx0Ly8gVGhlIHJlZHJhdyB3aWxsIGV4dGVuZCB0aGUgcmVkcmF3IGJvdW5kc1xuICBcdFx0Ly8gd2l0aCB0aGUgbmV3IHBpeGVsIGJvdW5kcy5cbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dGhpcy5fdXBkYXRlRGFzaEFycmF5KGxheWVyKTtcbiAgXHRcdHRoaXMuX3JlcXVlc3RSZWRyYXcobGF5ZXIpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlRGFzaEFycmF5OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGlmICh0eXBlb2YgbGF5ZXIub3B0aW9ucy5kYXNoQXJyYXkgPT09ICdzdHJpbmcnKSB7XG4gIFx0XHRcdHZhciBwYXJ0cyA9IGxheWVyLm9wdGlvbnMuZGFzaEFycmF5LnNwbGl0KC9bLCBdKy8pLFxuICBcdFx0XHQgICAgZGFzaEFycmF5ID0gW10sXG4gIFx0XHRcdCAgICBkYXNoVmFsdWUsXG4gIFx0XHRcdCAgICBpO1xuICBcdFx0XHRmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgXHRcdFx0XHRkYXNoVmFsdWUgPSBOdW1iZXIocGFydHNbaV0pO1xuICBcdFx0XHRcdC8vIElnbm9yZSBkYXNoIGFycmF5IGNvbnRhaW5pbmcgaW52YWxpZCBsZW5ndGhzXG4gIFx0XHRcdFx0aWYgKGlzTmFOKGRhc2hWYWx1ZSkpIHsgcmV0dXJuOyB9XG4gIFx0XHRcdFx0ZGFzaEFycmF5LnB1c2goZGFzaFZhbHVlKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRsYXllci5vcHRpb25zLl9kYXNoQXJyYXkgPSBkYXNoQXJyYXk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRsYXllci5vcHRpb25zLl9kYXNoQXJyYXkgPSBsYXllci5vcHRpb25zLmRhc2hBcnJheTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlcXVlc3RSZWRyYXc6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKCF0aGlzLl9tYXApIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2V4dGVuZFJlZHJhd0JvdW5kcyhsYXllcik7XG4gIFx0XHR0aGlzLl9yZWRyYXdSZXF1ZXN0ID0gdGhpcy5fcmVkcmF3UmVxdWVzdCB8fCByZXF1ZXN0QW5pbUZyYW1lKHRoaXMuX3JlZHJhdywgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9leHRlbmRSZWRyYXdCb3VuZHM6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0aWYgKGxheWVyLl9weEJvdW5kcykge1xuICBcdFx0XHR2YXIgcGFkZGluZyA9IChsYXllci5vcHRpb25zLndlaWdodCB8fCAwKSArIDE7XG4gIFx0XHRcdHRoaXMuX3JlZHJhd0JvdW5kcyA9IHRoaXMuX3JlZHJhd0JvdW5kcyB8fCBuZXcgQm91bmRzKCk7XG4gIFx0XHRcdHRoaXMuX3JlZHJhd0JvdW5kcy5leHRlbmQobGF5ZXIuX3B4Qm91bmRzLm1pbi5zdWJ0cmFjdChbcGFkZGluZywgcGFkZGluZ10pKTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLmV4dGVuZChsYXllci5fcHhCb3VuZHMubWF4LmFkZChbcGFkZGluZywgcGFkZGluZ10pKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3JlZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVkcmF3UmVxdWVzdCA9IG51bGw7XG5cbiAgXHRcdGlmICh0aGlzLl9yZWRyYXdCb3VuZHMpIHtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLm1pbi5fZmxvb3IoKTtcbiAgXHRcdFx0dGhpcy5fcmVkcmF3Qm91bmRzLm1heC5fY2VpbCgpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9jbGVhcigpOyAvLyBjbGVhciBsYXllcnMgaW4gcmVkcmF3IGJvdW5kc1xuICBcdFx0dGhpcy5fZHJhdygpOyAvLyBkcmF3IGxheWVyc1xuXG4gIFx0XHR0aGlzLl9yZWRyYXdCb3VuZHMgPSBudWxsO1xuICBcdH0sXG5cbiAgXHRfY2xlYXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBib3VuZHMgPSB0aGlzLl9yZWRyYXdCb3VuZHM7XG4gIFx0XHRpZiAoYm91bmRzKSB7XG4gIFx0XHRcdHZhciBzaXplID0gYm91bmRzLmdldFNpemUoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsZWFyUmVjdChib3VuZHMubWluLngsIGJvdW5kcy5taW4ueSwgc2l6ZS54LCBzaXplLnkpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fY3R4LnNhdmUoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLl9jb250YWluZXIud2lkdGgsIHRoaXMuX2NvbnRhaW5lci5oZWlnaHQpO1xuICBcdFx0XHR0aGlzLl9jdHgucmVzdG9yZSgpO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfZHJhdzogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIGxheWVyLCBib3VuZHMgPSB0aGlzLl9yZWRyYXdCb3VuZHM7XG4gIFx0XHR0aGlzLl9jdHguc2F2ZSgpO1xuICBcdFx0aWYgKGJvdW5kcykge1xuICBcdFx0XHR2YXIgc2l6ZSA9IGJvdW5kcy5nZXRTaXplKCk7XG4gIFx0XHRcdHRoaXMuX2N0eC5iZWdpblBhdGgoKTtcbiAgXHRcdFx0dGhpcy5fY3R4LnJlY3QoYm91bmRzLm1pbi54LCBib3VuZHMubWluLnksIHNpemUueCwgc2l6ZS55KTtcbiAgXHRcdFx0dGhpcy5fY3R4LmNsaXAoKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fZHJhd2luZyA9IHRydWU7XG5cbiAgXHRcdGZvciAodmFyIG9yZGVyID0gdGhpcy5fZHJhd0ZpcnN0OyBvcmRlcjsgb3JkZXIgPSBvcmRlci5uZXh0KSB7XG4gIFx0XHRcdGxheWVyID0gb3JkZXIubGF5ZXI7XG4gIFx0XHRcdGlmICghYm91bmRzIHx8IChsYXllci5fcHhCb3VuZHMgJiYgbGF5ZXIuX3B4Qm91bmRzLmludGVyc2VjdHMoYm91bmRzKSkpIHtcbiAgXHRcdFx0XHRsYXllci5fdXBkYXRlUGF0aCgpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2RyYXdpbmcgPSBmYWxzZTtcblxuICBcdFx0dGhpcy5fY3R4LnJlc3RvcmUoKTsgIC8vIFJlc3RvcmUgc3RhdGUgYmVmb3JlIGNsaXBwaW5nLlxuICBcdH0sXG5cbiAgXHRfdXBkYXRlUG9seTogZnVuY3Rpb24gKGxheWVyLCBjbG9zZWQpIHtcbiAgXHRcdGlmICghdGhpcy5fZHJhd2luZykgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIGksIGosIGxlbjIsIHAsXG4gIFx0XHQgICAgcGFydHMgPSBsYXllci5fcGFydHMsXG4gIFx0XHQgICAgbGVuID0gcGFydHMubGVuZ3RoLFxuICBcdFx0ICAgIGN0eCA9IHRoaXMuX2N0eDtcblxuICBcdFx0aWYgKCFsZW4pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdGN0eC5iZWdpblBhdGgoKTtcblxuICBcdFx0Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGZvciAoaiA9IDAsIGxlbjIgPSBwYXJ0c1tpXS5sZW5ndGg7IGogPCBsZW4yOyBqKyspIHtcbiAgXHRcdFx0XHRwID0gcGFydHNbaV1bal07XG4gIFx0XHRcdFx0Y3R4W2ogPyAnbGluZVRvJyA6ICdtb3ZlVG8nXShwLngsIHAueSk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0aWYgKGNsb3NlZCkge1xuICBcdFx0XHRcdGN0eC5jbG9zZVBhdGgoKTtcbiAgXHRcdFx0fVxuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9maWxsU3Ryb2tlKGN0eCwgbGF5ZXIpO1xuXG4gIFx0XHQvLyBUT0RPIG9wdGltaXphdGlvbjogMSBmaWxsL3N0cm9rZSBmb3IgYWxsIGZlYXR1cmVzIHdpdGggZXF1YWwgc3R5bGUgaW5zdGVhZCBvZiAxIGZvciBlYWNoIGZlYXR1cmVcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUNpcmNsZTogZnVuY3Rpb24gKGxheWVyKSB7XG5cbiAgXHRcdGlmICghdGhpcy5fZHJhd2luZyB8fCBsYXllci5fZW1wdHkoKSkgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIHAgPSBsYXllci5fcG9pbnQsXG4gIFx0XHQgICAgY3R4ID0gdGhpcy5fY3R4LFxuICBcdFx0ICAgIHIgPSBNYXRoLm1heChNYXRoLnJvdW5kKGxheWVyLl9yYWRpdXMpLCAxKSxcbiAgXHRcdCAgICBzID0gKE1hdGgubWF4KE1hdGgucm91bmQobGF5ZXIuX3JhZGl1c1kpLCAxKSB8fCByKSAvIHI7XG5cbiAgXHRcdGlmIChzICE9PSAxKSB7XG4gIFx0XHRcdGN0eC5zYXZlKCk7XG4gIFx0XHRcdGN0eC5zY2FsZSgxLCBzKTtcbiAgXHRcdH1cblxuICBcdFx0Y3R4LmJlZ2luUGF0aCgpO1xuICBcdFx0Y3R4LmFyYyhwLngsIHAueSAvIHMsIHIsIDAsIE1hdGguUEkgKiAyLCBmYWxzZSk7XG5cbiAgXHRcdGlmIChzICE9PSAxKSB7XG4gIFx0XHRcdGN0eC5yZXN0b3JlKCk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX2ZpbGxTdHJva2UoY3R4LCBsYXllcik7XG4gIFx0fSxcblxuICBcdF9maWxsU3Ryb2tlOiBmdW5jdGlvbiAoY3R4LCBsYXllcikge1xuICBcdFx0dmFyIG9wdGlvbnMgPSBsYXllci5vcHRpb25zO1xuXG4gIFx0XHRpZiAob3B0aW9ucy5maWxsKSB7XG4gIFx0XHRcdGN0eC5nbG9iYWxBbHBoYSA9IG9wdGlvbnMuZmlsbE9wYWNpdHk7XG4gIFx0XHRcdGN0eC5maWxsU3R5bGUgPSBvcHRpb25zLmZpbGxDb2xvciB8fCBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRjdHguZmlsbChvcHRpb25zLmZpbGxSdWxlIHx8ICdldmVub2RkJyk7XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChvcHRpb25zLnN0cm9rZSAmJiBvcHRpb25zLndlaWdodCAhPT0gMCkge1xuICBcdFx0XHRpZiAoY3R4LnNldExpbmVEYXNoKSB7XG4gIFx0XHRcdFx0Y3R4LnNldExpbmVEYXNoKGxheWVyLm9wdGlvbnMgJiYgbGF5ZXIub3B0aW9ucy5fZGFzaEFycmF5IHx8IFtdKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRjdHguZ2xvYmFsQWxwaGEgPSBvcHRpb25zLm9wYWNpdHk7XG4gIFx0XHRcdGN0eC5saW5lV2lkdGggPSBvcHRpb25zLndlaWdodDtcbiAgXHRcdFx0Y3R4LnN0cm9rZVN0eWxlID0gb3B0aW9ucy5jb2xvcjtcbiAgXHRcdFx0Y3R4LmxpbmVDYXAgPSBvcHRpb25zLmxpbmVDYXA7XG4gIFx0XHRcdGN0eC5saW5lSm9pbiA9IG9wdGlvbnMubGluZUpvaW47XG4gIFx0XHRcdGN0eC5zdHJva2UoKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0Ly8gQ2FudmFzIG9idmlvdXNseSBkb2Vzbid0IGhhdmUgbW91c2UgZXZlbnRzIGZvciBpbmRpdmlkdWFsIGRyYXduIG9iamVjdHMsXG4gIFx0Ly8gc28gd2UgZW11bGF0ZSB0aGF0IGJ5IGNhbGN1bGF0aW5nIHdoYXQncyB1bmRlciB0aGUgbW91c2Ugb24gbW91c2Vtb3ZlL2NsaWNrIG1hbnVhbGx5XG5cbiAgXHRfb25DbGljazogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBwb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KGUpLCBsYXllciwgY2xpY2tlZExheWVyO1xuXG4gIFx0XHRmb3IgKHZhciBvcmRlciA9IHRoaXMuX2RyYXdGaXJzdDsgb3JkZXI7IG9yZGVyID0gb3JkZXIubmV4dCkge1xuICBcdFx0XHRsYXllciA9IG9yZGVyLmxheWVyO1xuICBcdFx0XHRpZiAobGF5ZXIub3B0aW9ucy5pbnRlcmFjdGl2ZSAmJiBsYXllci5fY29udGFpbnNQb2ludChwb2ludCkpIHtcbiAgXHRcdFx0XHRpZiAoIShlLnR5cGUgPT09ICdjbGljaycgfHwgZS50eXBlICE9PSAncHJlY2xpY2snKSB8fCAhdGhpcy5fbWFwLl9kcmFnZ2FibGVNb3ZlZChsYXllcikpIHtcbiAgXHRcdFx0XHRcdGNsaWNrZWRMYXllciA9IGxheWVyO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fVxuICBcdFx0aWYgKGNsaWNrZWRMYXllcikgIHtcbiAgXHRcdFx0ZmFrZVN0b3AoZSk7XG4gIFx0XHRcdHRoaXMuX2ZpcmVFdmVudChbY2xpY2tlZExheWVyXSwgZSk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlTW92ZTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdGlmICghdGhpcy5fbWFwIHx8IHRoaXMuX21hcC5kcmFnZ2luZy5tb3ZpbmcoKSB8fCB0aGlzLl9tYXAuX2FuaW1hdGluZ1pvb20pIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBwb2ludCA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9MYXllclBvaW50KGUpO1xuICBcdFx0dGhpcy5faGFuZGxlTW91c2VIb3ZlcihlLCBwb2ludCk7XG4gIFx0fSxcblxuXG4gIFx0X2hhbmRsZU1vdXNlT3V0OiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIGxheWVyID0gdGhpcy5faG92ZXJlZExheWVyO1xuICBcdFx0aWYgKGxheWVyKSB7XG4gIFx0XHRcdC8vIGlmIHdlJ3JlIGxlYXZpbmcgdGhlIGxheWVyLCBmaXJlIG1vdXNlb3V0XG4gIFx0XHRcdHJlbW92ZUNsYXNzKHRoaXMuX2NvbnRhaW5lciwgJ2xlYWZsZXQtaW50ZXJhY3RpdmUnKTtcbiAgXHRcdFx0dGhpcy5fZmlyZUV2ZW50KFtsYXllcl0sIGUsICdtb3VzZW91dCcpO1xuICBcdFx0XHR0aGlzLl9ob3ZlcmVkTGF5ZXIgPSBudWxsO1xuICBcdFx0XHR0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkID0gZmFsc2U7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9oYW5kbGVNb3VzZUhvdmVyOiBmdW5jdGlvbiAoZSwgcG9pbnQpIHtcbiAgXHRcdGlmICh0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkKSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dmFyIGxheWVyLCBjYW5kaWRhdGVIb3ZlcmVkTGF5ZXI7XG5cbiAgXHRcdGZvciAodmFyIG9yZGVyID0gdGhpcy5fZHJhd0ZpcnN0OyBvcmRlcjsgb3JkZXIgPSBvcmRlci5uZXh0KSB7XG4gIFx0XHRcdGxheWVyID0gb3JkZXIubGF5ZXI7XG4gIFx0XHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlICYmIGxheWVyLl9jb250YWluc1BvaW50KHBvaW50KSkge1xuICBcdFx0XHRcdGNhbmRpZGF0ZUhvdmVyZWRMYXllciA9IGxheWVyO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGlmIChjYW5kaWRhdGVIb3ZlcmVkTGF5ZXIgIT09IHRoaXMuX2hvdmVyZWRMYXllcikge1xuICBcdFx0XHR0aGlzLl9oYW5kbGVNb3VzZU91dChlKTtcblxuICBcdFx0XHRpZiAoY2FuZGlkYXRlSG92ZXJlZExheWVyKSB7XG4gIFx0XHRcdFx0YWRkQ2xhc3ModGhpcy5fY29udGFpbmVyLCAnbGVhZmxldC1pbnRlcmFjdGl2ZScpOyAvLyBjaGFuZ2UgY3Vyc29yXG4gIFx0XHRcdFx0dGhpcy5fZmlyZUV2ZW50KFtjYW5kaWRhdGVIb3ZlcmVkTGF5ZXJdLCBlLCAnbW91c2VvdmVyJyk7XG4gIFx0XHRcdFx0dGhpcy5faG92ZXJlZExheWVyID0gY2FuZGlkYXRlSG92ZXJlZExheWVyO1xuICBcdFx0XHR9XG4gIFx0XHR9XG5cbiAgXHRcdGlmICh0aGlzLl9ob3ZlcmVkTGF5ZXIpIHtcbiAgXHRcdFx0dGhpcy5fZmlyZUV2ZW50KFt0aGlzLl9ob3ZlcmVkTGF5ZXJdLCBlKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fbW91c2VIb3ZlclRocm90dGxlZCA9IHRydWU7XG4gIFx0XHRzZXRUaW1lb3V0KGJpbmQoZnVuY3Rpb24gKCkge1xuICBcdFx0XHR0aGlzLl9tb3VzZUhvdmVyVGhyb3R0bGVkID0gZmFsc2U7XG4gIFx0XHR9LCB0aGlzKSwgMzIpO1xuICBcdH0sXG5cbiAgXHRfZmlyZUV2ZW50OiBmdW5jdGlvbiAobGF5ZXJzLCBlLCB0eXBlKSB7XG4gIFx0XHR0aGlzLl9tYXAuX2ZpcmVET01FdmVudChlLCB0eXBlIHx8IGUudHlwZSwgbGF5ZXJzKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgb3JkZXIgPSBsYXllci5fb3JkZXI7XG5cbiAgXHRcdGlmICghb3JkZXIpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBuZXh0ID0gb3JkZXIubmV4dDtcbiAgXHRcdHZhciBwcmV2ID0gb3JkZXIucHJldjtcblxuICBcdFx0aWYgKG5leHQpIHtcbiAgXHRcdFx0bmV4dC5wcmV2ID0gcHJldjtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdC8vIEFscmVhZHkgbGFzdFxuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG4gIFx0XHRpZiAocHJldikge1xuICBcdFx0XHRwcmV2Lm5leHQgPSBuZXh0O1xuICBcdFx0fSBlbHNlIGlmIChuZXh0KSB7XG4gIFx0XHRcdC8vIFVwZGF0ZSBmaXJzdCBlbnRyeSB1bmxlc3MgdGhpcyBpcyB0aGVcbiAgXHRcdFx0Ly8gc2luZ2xlIGVudHJ5XG4gIFx0XHRcdHRoaXMuX2RyYXdGaXJzdCA9IG5leHQ7XG4gIFx0XHR9XG5cbiAgXHRcdG9yZGVyLnByZXYgPSB0aGlzLl9kcmF3TGFzdDtcbiAgXHRcdHRoaXMuX2RyYXdMYXN0Lm5leHQgPSBvcmRlcjtcblxuICBcdFx0b3JkZXIubmV4dCA9IG51bGw7XG4gIFx0XHR0aGlzLl9kcmF3TGFzdCA9IG9yZGVyO1xuXG4gIFx0XHR0aGlzLl9yZXF1ZXN0UmVkcmF3KGxheWVyKTtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9CYWNrOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBvcmRlciA9IGxheWVyLl9vcmRlcjtcblxuICBcdFx0aWYgKCFvcmRlcikgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIG5leHQgPSBvcmRlci5uZXh0O1xuICBcdFx0dmFyIHByZXYgPSBvcmRlci5wcmV2O1xuXG4gIFx0XHRpZiAocHJldikge1xuICBcdFx0XHRwcmV2Lm5leHQgPSBuZXh0O1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0Ly8gQWxyZWFkeSBmaXJzdFxuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG4gIFx0XHRpZiAobmV4dCkge1xuICBcdFx0XHRuZXh0LnByZXYgPSBwcmV2O1xuICBcdFx0fSBlbHNlIGlmIChwcmV2KSB7XG4gIFx0XHRcdC8vIFVwZGF0ZSBsYXN0IGVudHJ5IHVubGVzcyB0aGlzIGlzIHRoZVxuICBcdFx0XHQvLyBzaW5nbGUgZW50cnlcbiAgXHRcdFx0dGhpcy5fZHJhd0xhc3QgPSBwcmV2O1xuICBcdFx0fVxuXG4gIFx0XHRvcmRlci5wcmV2ID0gbnVsbDtcblxuICBcdFx0b3JkZXIubmV4dCA9IHRoaXMuX2RyYXdGaXJzdDtcbiAgXHRcdHRoaXMuX2RyYXdGaXJzdC5wcmV2ID0gb3JkZXI7XG4gIFx0XHR0aGlzLl9kcmF3Rmlyc3QgPSBvcmRlcjtcblxuICBcdFx0dGhpcy5fcmVxdWVzdFJlZHJhdyhsYXllcik7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAZmFjdG9yeSBMLmNhbnZhcyhvcHRpb25zPzogUmVuZGVyZXIgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIENhbnZhcyByZW5kZXJlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBjYW52YXMkMShvcHRpb25zKSB7XG4gIFx0cmV0dXJuIGNhbnZhcyA/IG5ldyBDYW52YXMob3B0aW9ucykgOiBudWxsO1xuICB9XG5cbiAgLypcbiAgICogVGhhbmtzIHRvIERtaXRyeSBCYXJhbm92c2t5IGFuZCBoaXMgUmFwaGFlbCBsaWJyYXJ5IGZvciBpbnNwaXJhdGlvbiFcbiAgICovXG5cblxuICB2YXIgdm1sQ3JlYXRlID0gKGZ1bmN0aW9uICgpIHtcbiAgXHR0cnkge1xuICBcdFx0ZG9jdW1lbnQubmFtZXNwYWNlcy5hZGQoJ2x2bWwnLCAndXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTp2bWwnKTtcbiAgXHRcdHJldHVybiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0XHRyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnPGx2bWw6JyArIG5hbWUgKyAnIGNsYXNzPVwibHZtbFwiPicpO1xuICBcdFx0fTtcbiAgXHR9IGNhdGNoIChlKSB7XG4gIFx0XHRyZXR1cm4gZnVuY3Rpb24gKG5hbWUpIHtcbiAgXHRcdFx0cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJzwnICsgbmFtZSArICcgeG1sbnM9XCJ1cm46c2NoZW1hcy1taWNyb3NvZnQuY29tOnZtbFwiIGNsYXNzPVwibHZtbFwiPicpO1xuICBcdFx0fTtcbiAgXHR9XG4gIH0pKCk7XG5cblxuICAvKlxuICAgKiBAY2xhc3MgU1ZHXG4gICAqXG4gICAqXG4gICAqIFZNTCB3YXMgZGVwcmVjYXRlZCBpbiAyMDEyLCB3aGljaCBtZWFucyBWTUwgZnVuY3Rpb25hbGl0eSBleGlzdHMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICogd2l0aCBvbGQgdmVyc2lvbnMgb2YgSW50ZXJuZXQgRXhwbG9yZXIuXG4gICAqL1xuXG4gIC8vIG1peGluIHRvIHJlZGVmaW5lIHNvbWUgU1ZHIG1ldGhvZHMgdG8gaGFuZGxlIFZNTCBzeW50YXggd2hpY2ggaXMgc2ltaWxhciBidXQgd2l0aCBzb21lIGRpZmZlcmVuY2VzXG4gIHZhciB2bWxNaXhpbiA9IHtcblxuICBcdF9pbml0Q29udGFpbmVyOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR0aGlzLl9jb250YWluZXIgPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtdm1sLWNvbnRhaW5lcicpO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fbWFwLl9hbmltYXRpbmdab29tKSB7IHJldHVybjsgfVxuICBcdFx0UmVuZGVyZXIucHJvdG90eXBlLl91cGRhdGUuY2FsbCh0aGlzKTtcbiAgXHRcdHRoaXMuZmlyZSgndXBkYXRlJyk7XG4gIFx0fSxcblxuICBcdF9pbml0UGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgY29udGFpbmVyID0gbGF5ZXIuX2NvbnRhaW5lciA9IHZtbENyZWF0ZSgnc2hhcGUnKTtcblxuICBcdFx0YWRkQ2xhc3MoY29udGFpbmVyLCAnbGVhZmxldC12bWwtc2hhcGUgJyArICh0aGlzLm9wdGlvbnMuY2xhc3NOYW1lIHx8ICcnKSk7XG5cbiAgXHRcdGNvbnRhaW5lci5jb29yZHNpemUgPSAnMSAxJztcblxuICBcdFx0bGF5ZXIuX3BhdGggPSB2bWxDcmVhdGUoJ3BhdGgnKTtcbiAgXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZChsYXllci5fcGF0aCk7XG5cbiAgXHRcdHRoaXMuX3VwZGF0ZVN0eWxlKGxheWVyKTtcbiAgXHRcdHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildID0gbGF5ZXI7XG4gIFx0fSxcblxuICBcdF9hZGRQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSBsYXllci5fY29udGFpbmVyO1xuICBcdFx0dGhpcy5fY29udGFpbmVyLmFwcGVuZENoaWxkKGNvbnRhaW5lcik7XG5cbiAgXHRcdGlmIChsYXllci5vcHRpb25zLmludGVyYWN0aXZlKSB7XG4gIFx0XHRcdGxheWVyLmFkZEludGVyYWN0aXZlVGFyZ2V0KGNvbnRhaW5lcik7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSBsYXllci5fY29udGFpbmVyO1xuICBcdFx0cmVtb3ZlKGNvbnRhaW5lcik7XG4gIFx0XHRsYXllci5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChjb250YWluZXIpO1xuICBcdFx0ZGVsZXRlIHRoaXMuX2xheWVyc1tzdGFtcChsYXllcildO1xuICBcdH0sXG5cbiAgXHRfdXBkYXRlU3R5bGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHN0cm9rZSA9IGxheWVyLl9zdHJva2UsXG4gIFx0XHQgICAgZmlsbCA9IGxheWVyLl9maWxsLFxuICBcdFx0ICAgIG9wdGlvbnMgPSBsYXllci5vcHRpb25zLFxuICBcdFx0ICAgIGNvbnRhaW5lciA9IGxheWVyLl9jb250YWluZXI7XG5cbiAgXHRcdGNvbnRhaW5lci5zdHJva2VkID0gISFvcHRpb25zLnN0cm9rZTtcbiAgXHRcdGNvbnRhaW5lci5maWxsZWQgPSAhIW9wdGlvbnMuZmlsbDtcblxuICBcdFx0aWYgKG9wdGlvbnMuc3Ryb2tlKSB7XG4gIFx0XHRcdGlmICghc3Ryb2tlKSB7XG4gIFx0XHRcdFx0c3Ryb2tlID0gbGF5ZXIuX3N0cm9rZSA9IHZtbENyZWF0ZSgnc3Ryb2tlJyk7XG4gIFx0XHRcdH1cbiAgXHRcdFx0Y29udGFpbmVyLmFwcGVuZENoaWxkKHN0cm9rZSk7XG4gIFx0XHRcdHN0cm9rZS53ZWlnaHQgPSBvcHRpb25zLndlaWdodCArICdweCc7XG4gIFx0XHRcdHN0cm9rZS5jb2xvciA9IG9wdGlvbnMuY29sb3I7XG4gIFx0XHRcdHN0cm9rZS5vcGFjaXR5ID0gb3B0aW9ucy5vcGFjaXR5O1xuXG4gIFx0XHRcdGlmIChvcHRpb25zLmRhc2hBcnJheSkge1xuICBcdFx0XHRcdHN0cm9rZS5kYXNoU3R5bGUgPSBpc0FycmF5KG9wdGlvbnMuZGFzaEFycmF5KSA/XG4gIFx0XHRcdFx0ICAgIG9wdGlvbnMuZGFzaEFycmF5LmpvaW4oJyAnKSA6XG4gIFx0XHRcdFx0ICAgIG9wdGlvbnMuZGFzaEFycmF5LnJlcGxhY2UoLyggKiwgKikvZywgJyAnKTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRzdHJva2UuZGFzaFN0eWxlID0gJyc7XG4gIFx0XHRcdH1cbiAgXHRcdFx0c3Ryb2tlLmVuZGNhcCA9IG9wdGlvbnMubGluZUNhcC5yZXBsYWNlKCdidXR0JywgJ2ZsYXQnKTtcbiAgXHRcdFx0c3Ryb2tlLmpvaW5zdHlsZSA9IG9wdGlvbnMubGluZUpvaW47XG5cbiAgXHRcdH0gZWxzZSBpZiAoc3Ryb2tlKSB7XG4gIFx0XHRcdGNvbnRhaW5lci5yZW1vdmVDaGlsZChzdHJva2UpO1xuICBcdFx0XHRsYXllci5fc3Ryb2tlID0gbnVsbDtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG9wdGlvbnMuZmlsbCkge1xuICBcdFx0XHRpZiAoIWZpbGwpIHtcbiAgXHRcdFx0XHRmaWxsID0gbGF5ZXIuX2ZpbGwgPSB2bWxDcmVhdGUoJ2ZpbGwnKTtcbiAgXHRcdFx0fVxuICBcdFx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQoZmlsbCk7XG4gIFx0XHRcdGZpbGwuY29sb3IgPSBvcHRpb25zLmZpbGxDb2xvciB8fCBvcHRpb25zLmNvbG9yO1xuICBcdFx0XHRmaWxsLm9wYWNpdHkgPSBvcHRpb25zLmZpbGxPcGFjaXR5O1xuXG4gIFx0XHR9IGVsc2UgaWYgKGZpbGwpIHtcbiAgXHRcdFx0Y29udGFpbmVyLnJlbW92ZUNoaWxkKGZpbGwpO1xuICBcdFx0XHRsYXllci5fZmlsbCA9IG51bGw7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF91cGRhdGVDaXJjbGU6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHAgPSBsYXllci5fcG9pbnQucm91bmQoKSxcbiAgXHRcdCAgICByID0gTWF0aC5yb3VuZChsYXllci5fcmFkaXVzKSxcbiAgXHRcdCAgICByMiA9IE1hdGgucm91bmQobGF5ZXIuX3JhZGl1c1kgfHwgcik7XG5cbiAgXHRcdHRoaXMuX3NldFBhdGgobGF5ZXIsIGxheWVyLl9lbXB0eSgpID8gJ00wIDAnIDpcbiAgXHRcdFx0J0FMICcgKyBwLnggKyAnLCcgKyBwLnkgKyAnICcgKyByICsgJywnICsgcjIgKyAnIDAsJyArICg2NTUzNSAqIDM2MCkpO1xuICBcdH0sXG5cbiAgXHRfc2V0UGF0aDogZnVuY3Rpb24gKGxheWVyLCBwYXRoKSB7XG4gIFx0XHRsYXllci5fcGF0aC52ID0gcGF0aDtcbiAgXHR9LFxuXG4gIFx0X2JyaW5nVG9Gcm9udDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR0b0Zyb250KGxheWVyLl9jb250YWluZXIpO1xuICBcdH0sXG5cbiAgXHRfYnJpbmdUb0JhY2s6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dG9CYWNrKGxheWVyLl9jb250YWluZXIpO1xuICBcdH1cbiAgfTtcblxuICB2YXIgY3JlYXRlJDIgPSB2bWwgPyB2bWxDcmVhdGUgOiBzdmdDcmVhdGU7XG5cbiAgLypcbiAgICogQGNsYXNzIFNWR1xuICAgKiBAaW5oZXJpdHMgUmVuZGVyZXJcbiAgICogQGFrYSBMLlNWR1xuICAgKlxuICAgKiBBbGxvd3MgdmVjdG9yIGxheWVycyB0byBiZSBkaXNwbGF5ZWQgd2l0aCBbU1ZHXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9TVkcpLlxuICAgKiBJbmhlcml0cyBgUmVuZGVyZXJgLlxuICAgKlxuICAgKiBEdWUgdG8gW3RlY2huaWNhbCBsaW1pdGF0aW9uc10oaHR0cDovL2Nhbml1c2UuY29tLyNzZWFyY2g9c3ZnKSwgU1ZHIGlzIG5vdFxuICAgKiBhdmFpbGFibGUgaW4gYWxsIHdlYiBicm93c2Vycywgbm90YWJseSBBbmRyb2lkIDIueCBhbmQgMy54LlxuICAgKlxuICAgKiBBbHRob3VnaCBTVkcgaXMgbm90IGF2YWlsYWJsZSBvbiBJRTcgYW5kIElFOCwgdGhlc2UgYnJvd3NlcnMgc3VwcG9ydFxuICAgKiBbVk1MXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9WZWN0b3JfTWFya3VwX0xhbmd1YWdlKVxuICAgKiAoYSBub3cgZGVwcmVjYXRlZCB0ZWNobm9sb2d5KSwgYW5kIHRoZSBTVkcgcmVuZGVyZXIgd2lsbCBmYWxsIGJhY2sgdG8gVk1MIGluXG4gICAqIHRoaXMgY2FzZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogVXNlIFNWRyBieSBkZWZhdWx0IGZvciBhbGwgcGF0aHMgaW4gdGhlIG1hcDpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnLCB7XG4gICAqIFx0cmVuZGVyZXI6IEwuc3ZnKClcbiAgICogfSk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBVc2UgYSBTVkcgcmVuZGVyZXIgd2l0aCBleHRyYSBwYWRkaW5nIGZvciBzcGVjaWZpYyB2ZWN0b3IgZ2VvbWV0cmllczpcbiAgICpcbiAgICogYGBganNcbiAgICogdmFyIG1hcCA9IEwubWFwKCdtYXAnKTtcbiAgICogdmFyIG15UmVuZGVyZXIgPSBMLnN2Zyh7IHBhZGRpbmc6IDAuNSB9KTtcbiAgICogdmFyIGxpbmUgPSBMLnBvbHlsaW5lKCBjb29yZGluYXRlcywgeyByZW5kZXJlcjogbXlSZW5kZXJlciB9ICk7XG4gICAqIHZhciBjaXJjbGUgPSBMLmNpcmNsZSggY2VudGVyLCB7IHJlbmRlcmVyOiBteVJlbmRlcmVyIH0gKTtcbiAgICogYGBgXG4gICAqL1xuXG4gIHZhciBTVkcgPSBSZW5kZXJlci5leHRlbmQoe1xuXG4gIFx0Z2V0RXZlbnRzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHR2YXIgZXZlbnRzID0gUmVuZGVyZXIucHJvdG90eXBlLmdldEV2ZW50cy5jYWxsKHRoaXMpO1xuICBcdFx0ZXZlbnRzLnpvb21zdGFydCA9IHRoaXMuX29uWm9vbVN0YXJ0O1xuICBcdFx0cmV0dXJuIGV2ZW50cztcbiAgXHR9LFxuXG4gIFx0X2luaXRDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IGNyZWF0ZSQyKCdzdmcnKTtcblxuICBcdFx0Ly8gbWFrZXMgaXQgcG9zc2libGUgdG8gY2xpY2sgdGhyb3VnaCBzdmcgcm9vdDsgd2UnbGwgcmVzZXQgaXQgYmFjayBpbiBpbmRpdmlkdWFsIHBhdGhzXG4gIFx0XHR0aGlzLl9jb250YWluZXIuc2V0QXR0cmlidXRlKCdwb2ludGVyLWV2ZW50cycsICdub25lJyk7XG5cbiAgXHRcdHRoaXMuX3Jvb3RHcm91cCA9IGNyZWF0ZSQyKCdnJyk7XG4gIFx0XHR0aGlzLl9jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5fcm9vdEdyb3VwKTtcbiAgXHR9LFxuXG4gIFx0X2Rlc3Ryb3lDb250YWluZXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZSh0aGlzLl9jb250YWluZXIpO1xuICBcdFx0b2ZmKHRoaXMuX2NvbnRhaW5lcik7XG4gIFx0XHRkZWxldGUgdGhpcy5fY29udGFpbmVyO1xuICBcdFx0ZGVsZXRlIHRoaXMuX3Jvb3RHcm91cDtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9zdmdTaXplO1xuICBcdH0sXG5cbiAgXHRfb25ab29tU3RhcnQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIERyYWctdGhlbi1waW5jaCBpbnRlcmFjdGlvbnMgbWlnaHQgbWVzcyB1cCB0aGUgY2VudGVyIGFuZCB6b29tLlxuICBcdFx0Ly8gSW4gdGhpcyBjYXNlLCB0aGUgZWFzaWVzdCB3YXkgdG8gcHJldmVudCB0aGlzIGlzIHJlLWRvIHRoZSByZW5kZXJlclxuICBcdFx0Ly8gICBib3VuZHMgYW5kIHBhZGRpbmcgd2hlbiB0aGUgem9vbWluZyBzdGFydHMuXG4gIFx0XHR0aGlzLl91cGRhdGUoKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5fYW5pbWF0aW5nWm9vbSAmJiB0aGlzLl9ib3VuZHMpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdFJlbmRlcmVyLnByb3RvdHlwZS5fdXBkYXRlLmNhbGwodGhpcyk7XG5cbiAgXHRcdHZhciBiID0gdGhpcy5fYm91bmRzLFxuICBcdFx0ICAgIHNpemUgPSBiLmdldFNpemUoKSxcbiAgXHRcdCAgICBjb250YWluZXIgPSB0aGlzLl9jb250YWluZXI7XG5cbiAgXHRcdC8vIHNldCBzaXplIG9mIHN2Zy1jb250YWluZXIgaWYgY2hhbmdlZFxuICBcdFx0aWYgKCF0aGlzLl9zdmdTaXplIHx8ICF0aGlzLl9zdmdTaXplLmVxdWFscyhzaXplKSkge1xuICBcdFx0XHR0aGlzLl9zdmdTaXplID0gc2l6ZTtcbiAgXHRcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgnd2lkdGgnLCBzaXplLngpO1xuICBcdFx0XHRjb250YWluZXIuc2V0QXR0cmlidXRlKCdoZWlnaHQnLCBzaXplLnkpO1xuICBcdFx0fVxuXG4gIFx0XHQvLyBtb3ZlbWVudDogdXBkYXRlIGNvbnRhaW5lciB2aWV3Qm94IHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgY29vcmRpbmF0ZXMgb2YgaW5kaXZpZHVhbCBsYXllcnNcbiAgXHRcdHNldFBvc2l0aW9uKGNvbnRhaW5lciwgYi5taW4pO1xuICBcdFx0Y29udGFpbmVyLnNldEF0dHJpYnV0ZSgndmlld0JveCcsIFtiLm1pbi54LCBiLm1pbi55LCBzaXplLngsIHNpemUueV0uam9pbignICcpKTtcblxuICBcdFx0dGhpcy5maXJlKCd1cGRhdGUnKTtcbiAgXHR9LFxuXG4gIFx0Ly8gbWV0aG9kcyBiZWxvdyBhcmUgY2FsbGVkIGJ5IHZlY3RvciBsYXllcnMgaW1wbGVtZW50YXRpb25zXG5cbiAgXHRfaW5pdFBhdGg6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dmFyIHBhdGggPSBsYXllci5fcGF0aCA9IGNyZWF0ZSQyKCdwYXRoJyk7XG5cbiAgXHRcdC8vIEBuYW1lc3BhY2UgUGF0aFxuICBcdFx0Ly8gQG9wdGlvbiBjbGFzc05hbWU6IFN0cmluZyA9IG51bGxcbiAgXHRcdC8vIEN1c3RvbSBjbGFzcyBuYW1lIHNldCBvbiBhbiBlbGVtZW50LiBPbmx5IGZvciBTVkcgcmVuZGVyZXIuXG4gIFx0XHRpZiAobGF5ZXIub3B0aW9ucy5jbGFzc05hbWUpIHtcbiAgXHRcdFx0YWRkQ2xhc3MocGF0aCwgbGF5ZXIub3B0aW9ucy5jbGFzc05hbWUpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAobGF5ZXIub3B0aW9ucy5pbnRlcmFjdGl2ZSkge1xuICBcdFx0XHRhZGRDbGFzcyhwYXRoLCAnbGVhZmxldC1pbnRlcmFjdGl2ZScpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl91cGRhdGVTdHlsZShsYXllcik7XG4gIFx0XHR0aGlzLl9sYXllcnNbc3RhbXAobGF5ZXIpXSA9IGxheWVyO1xuICBcdH0sXG5cbiAgXHRfYWRkUGF0aDogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHRpZiAoIXRoaXMuX3Jvb3RHcm91cCkgeyB0aGlzLl9pbml0Q29udGFpbmVyKCk7IH1cbiAgXHRcdHRoaXMuX3Jvb3RHcm91cC5hcHBlbmRDaGlsZChsYXllci5fcGF0aCk7XG4gIFx0XHRsYXllci5hZGRJbnRlcmFjdGl2ZVRhcmdldChsYXllci5fcGF0aCk7XG4gIFx0fSxcblxuICBcdF9yZW1vdmVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHJlbW92ZShsYXllci5fcGF0aCk7XG4gIFx0XHRsYXllci5yZW1vdmVJbnRlcmFjdGl2ZVRhcmdldChsYXllci5fcGF0aCk7XG4gIFx0XHRkZWxldGUgdGhpcy5fbGF5ZXJzW3N0YW1wKGxheWVyKV07XG4gIFx0fSxcblxuICBcdF91cGRhdGVQYXRoOiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdGxheWVyLl9wcm9qZWN0KCk7XG4gIFx0XHRsYXllci5fdXBkYXRlKCk7XG4gIFx0fSxcblxuICBcdF91cGRhdGVTdHlsZTogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgcGF0aCA9IGxheWVyLl9wYXRoLFxuICBcdFx0ICAgIG9wdGlvbnMgPSBsYXllci5vcHRpb25zO1xuXG4gIFx0XHRpZiAoIXBhdGgpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdGlmIChvcHRpb25zLnN0cm9rZSkge1xuICBcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywgb3B0aW9ucy5jb2xvcik7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2Utb3BhY2l0eScsIG9wdGlvbnMub3BhY2l0eSk7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2Utd2lkdGgnLCBvcHRpb25zLndlaWdodCk7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWNhcCcsIG9wdGlvbnMubGluZUNhcCk7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtbGluZWpvaW4nLCBvcHRpb25zLmxpbmVKb2luKTtcblxuICBcdFx0XHRpZiAob3B0aW9ucy5kYXNoQXJyYXkpIHtcbiAgXHRcdFx0XHRwYXRoLnNldEF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScsIG9wdGlvbnMuZGFzaEFycmF5KTtcbiAgXHRcdFx0fSBlbHNlIHtcbiAgXHRcdFx0XHRwYXRoLnJlbW92ZUF0dHJpYnV0ZSgnc3Ryb2tlLWRhc2hhcnJheScpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0aWYgKG9wdGlvbnMuZGFzaE9mZnNldCkge1xuICBcdFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UtZGFzaG9mZnNldCcsIG9wdGlvbnMuZGFzaE9mZnNldCk7XG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0cGF0aC5yZW1vdmVBdHRyaWJ1dGUoJ3N0cm9rZS1kYXNob2Zmc2V0Jyk7XG4gIFx0XHRcdH1cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdzdHJva2UnLCAnbm9uZScpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAob3B0aW9ucy5maWxsKSB7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgb3B0aW9ucy5maWxsQ29sb3IgfHwgb3B0aW9ucy5jb2xvcik7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCBvcHRpb25zLmZpbGxPcGFjaXR5KTtcbiAgXHRcdFx0cGF0aC5zZXRBdHRyaWJ1dGUoJ2ZpbGwtcnVsZScsIG9wdGlvbnMuZmlsbFJ1bGUgfHwgJ2V2ZW5vZGQnKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHBhdGguc2V0QXR0cmlidXRlKCdmaWxsJywgJ25vbmUnKTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZVBvbHk6IGZ1bmN0aW9uIChsYXllciwgY2xvc2VkKSB7XG4gIFx0XHR0aGlzLl9zZXRQYXRoKGxheWVyLCBwb2ludHNUb1BhdGgobGF5ZXIuX3BhcnRzLCBjbG9zZWQpKTtcbiAgXHR9LFxuXG4gIFx0X3VwZGF0ZUNpcmNsZTogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHR2YXIgcCA9IGxheWVyLl9wb2ludCxcbiAgXHRcdCAgICByID0gTWF0aC5tYXgoTWF0aC5yb3VuZChsYXllci5fcmFkaXVzKSwgMSksXG4gIFx0XHQgICAgcjIgPSBNYXRoLm1heChNYXRoLnJvdW5kKGxheWVyLl9yYWRpdXNZKSwgMSkgfHwgcixcbiAgXHRcdCAgICBhcmMgPSAnYScgKyByICsgJywnICsgcjIgKyAnIDAgMSwwICc7XG5cbiAgXHRcdC8vIGRyYXdpbmcgYSBjaXJjbGUgd2l0aCB0d28gaGFsZi1hcmNzXG4gIFx0XHR2YXIgZCA9IGxheWVyLl9lbXB0eSgpID8gJ00wIDAnIDpcbiAgXHRcdFx0J00nICsgKHAueCAtIHIpICsgJywnICsgcC55ICtcbiAgXHRcdFx0YXJjICsgKHIgKiAyKSArICcsMCAnICtcbiAgXHRcdFx0YXJjICsgKC1yICogMikgKyAnLDAgJztcblxuICBcdFx0dGhpcy5fc2V0UGF0aChsYXllciwgZCk7XG4gIFx0fSxcblxuICBcdF9zZXRQYXRoOiBmdW5jdGlvbiAobGF5ZXIsIHBhdGgpIHtcbiAgXHRcdGxheWVyLl9wYXRoLnNldEF0dHJpYnV0ZSgnZCcsIHBhdGgpO1xuICBcdH0sXG5cbiAgXHQvLyBTVkcgZG9lcyBub3QgaGF2ZSB0aGUgY29uY2VwdCBvZiB6SW5kZXggc28gd2UgcmVzb3J0IHRvIGNoYW5naW5nIHRoZSBET00gb3JkZXIgb2YgZWxlbWVudHNcbiAgXHRfYnJpbmdUb0Zyb250OiBmdW5jdGlvbiAobGF5ZXIpIHtcbiAgXHRcdHRvRnJvbnQobGF5ZXIuX3BhdGgpO1xuICBcdH0sXG5cbiAgXHRfYnJpbmdUb0JhY2s6IGZ1bmN0aW9uIChsYXllcikge1xuICBcdFx0dG9CYWNrKGxheWVyLl9wYXRoKTtcbiAgXHR9XG4gIH0pO1xuXG4gIGlmICh2bWwpIHtcbiAgXHRTVkcuaW5jbHVkZSh2bWxNaXhpbik7XG4gIH1cblxuICAvLyBAbmFtZXNwYWNlIFNWR1xuICAvLyBAZmFjdG9yeSBMLnN2ZyhvcHRpb25zPzogUmVuZGVyZXIgb3B0aW9ucylcbiAgLy8gQ3JlYXRlcyBhIFNWRyByZW5kZXJlciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLlxuICBmdW5jdGlvbiBzdmckMShvcHRpb25zKSB7XG4gIFx0cmV0dXJuIHN2ZyB8fCB2bWwgPyBuZXcgU1ZHKG9wdGlvbnMpIDogbnVsbDtcbiAgfVxuXG4gIE1hcC5pbmNsdWRlKHtcbiAgXHQvLyBAbmFtZXNwYWNlIE1hcDsgQG1ldGhvZCBnZXRSZW5kZXJlcihsYXllcjogUGF0aCk6IFJlbmRlcmVyXG4gIFx0Ly8gUmV0dXJucyB0aGUgaW5zdGFuY2Ugb2YgYFJlbmRlcmVyYCB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIHJlbmRlciB0aGUgZ2l2ZW5cbiAgXHQvLyBgUGF0aGAuIEl0IHdpbGwgZW5zdXJlIHRoYXQgdGhlIGByZW5kZXJlcmAgb3B0aW9ucyBvZiB0aGUgbWFwIGFuZCBwYXRoc1xuICBcdC8vIGFyZSByZXNwZWN0ZWQsIGFuZCB0aGF0IHRoZSByZW5kZXJlcnMgZG8gZXhpc3Qgb24gdGhlIG1hcC5cbiAgXHRnZXRSZW5kZXJlcjogZnVuY3Rpb24gKGxheWVyKSB7XG4gIFx0XHQvLyBAbmFtZXNwYWNlIFBhdGg7IEBvcHRpb24gcmVuZGVyZXI6IFJlbmRlcmVyXG4gIFx0XHQvLyBVc2UgdGhpcyBzcGVjaWZpYyBpbnN0YW5jZSBvZiBgUmVuZGVyZXJgIGZvciB0aGlzIHBhdGguIFRha2VzXG4gIFx0XHQvLyBwcmVjZWRlbmNlIG92ZXIgdGhlIG1hcCdzIFtkZWZhdWx0IHJlbmRlcmVyXSgjbWFwLXJlbmRlcmVyKS5cbiAgXHRcdHZhciByZW5kZXJlciA9IGxheWVyLm9wdGlvbnMucmVuZGVyZXIgfHwgdGhpcy5fZ2V0UGFuZVJlbmRlcmVyKGxheWVyLm9wdGlvbnMucGFuZSkgfHwgdGhpcy5vcHRpb25zLnJlbmRlcmVyIHx8IHRoaXMuX3JlbmRlcmVyO1xuXG4gIFx0XHRpZiAoIXJlbmRlcmVyKSB7XG4gIFx0XHRcdHJlbmRlcmVyID0gdGhpcy5fcmVuZGVyZXIgPSB0aGlzLl9jcmVhdGVSZW5kZXJlcigpO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoIXRoaXMuaGFzTGF5ZXIocmVuZGVyZXIpKSB7XG4gIFx0XHRcdHRoaXMuYWRkTGF5ZXIocmVuZGVyZXIpO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHJlbmRlcmVyO1xuICBcdH0sXG5cbiAgXHRfZ2V0UGFuZVJlbmRlcmVyOiBmdW5jdGlvbiAobmFtZSkge1xuICBcdFx0aWYgKG5hbWUgPT09ICdvdmVybGF5UGFuZScgfHwgbmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gIFx0XHRcdHJldHVybiBmYWxzZTtcbiAgXHRcdH1cblxuICBcdFx0dmFyIHJlbmRlcmVyID0gdGhpcy5fcGFuZVJlbmRlcmVyc1tuYW1lXTtcbiAgXHRcdGlmIChyZW5kZXJlciA9PT0gdW5kZWZpbmVkKSB7XG4gIFx0XHRcdHJlbmRlcmVyID0gdGhpcy5fY3JlYXRlUmVuZGVyZXIoe3BhbmU6IG5hbWV9KTtcbiAgXHRcdFx0dGhpcy5fcGFuZVJlbmRlcmVyc1tuYW1lXSA9IHJlbmRlcmVyO1xuICBcdFx0fVxuICBcdFx0cmV0dXJuIHJlbmRlcmVyO1xuICBcdH0sXG5cbiAgXHRfY3JlYXRlUmVuZGVyZXI6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIFx0XHQvLyBAbmFtZXNwYWNlIE1hcDsgQG9wdGlvbiBwcmVmZXJDYW52YXM6IEJvb2xlYW4gPSBmYWxzZVxuICBcdFx0Ly8gV2hldGhlciBgUGF0aGBzIHNob3VsZCBiZSByZW5kZXJlZCBvbiBhIGBDYW52YXNgIHJlbmRlcmVyLlxuICBcdFx0Ly8gQnkgZGVmYXVsdCwgYWxsIGBQYXRoYHMgYXJlIHJlbmRlcmVkIGluIGEgYFNWR2AgcmVuZGVyZXIuXG4gIFx0XHRyZXR1cm4gKHRoaXMub3B0aW9ucy5wcmVmZXJDYW52YXMgJiYgY2FudmFzJDEob3B0aW9ucykpIHx8IHN2ZyQxKG9wdGlvbnMpO1xuICBcdH1cbiAgfSk7XG5cbiAgLypcbiAgICogTC5SZWN0YW5nbGUgZXh0ZW5kcyBQb2x5Z29uIGFuZCBjcmVhdGVzIGEgcmVjdGFuZ2xlIHdoZW4gcGFzc2VkIGEgTGF0TG5nQm91bmRzIG9iamVjdC5cbiAgICovXG5cbiAgLypcbiAgICogQGNsYXNzIFJlY3RhbmdsZVxuICAgKiBAYWthIEwuUmVjdGFuZ2xlXG4gICAqIEBpbmhlcml0cyBQb2x5Z29uXG4gICAqXG4gICAqIEEgY2xhc3MgZm9yIGRyYXdpbmcgcmVjdGFuZ2xlIG92ZXJsYXlzIG9uIGEgbWFwLiBFeHRlbmRzIGBQb2x5Z29uYC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICpcbiAgICogYGBganNcbiAgICogLy8gZGVmaW5lIHJlY3RhbmdsZSBnZW9ncmFwaGljYWwgYm91bmRzXG4gICAqIHZhciBib3VuZHMgPSBbWzU0LjU1OTMyMiwgLTUuNzY3ODIyXSwgWzU2LjEyMTA2MDQsIC0zLjAyMTI0MF1dO1xuICAgKlxuICAgKiAvLyBjcmVhdGUgYW4gb3JhbmdlIHJlY3RhbmdsZVxuICAgKiBMLnJlY3RhbmdsZShib3VuZHMsIHtjb2xvcjogXCIjZmY3ODAwXCIsIHdlaWdodDogMX0pLmFkZFRvKG1hcCk7XG4gICAqXG4gICAqIC8vIHpvb20gdGhlIG1hcCB0byB0aGUgcmVjdGFuZ2xlIGJvdW5kc1xuICAgKiBtYXAuZml0Qm91bmRzKGJvdW5kcyk7XG4gICAqIGBgYFxuICAgKlxuICAgKi9cblxuXG4gIHZhciBSZWN0YW5nbGUgPSBQb2x5Z29uLmV4dGVuZCh7XG4gIFx0aW5pdGlhbGl6ZTogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcywgb3B0aW9ucykge1xuICBcdFx0UG9seWdvbi5wcm90b3R5cGUuaW5pdGlhbGl6ZS5jYWxsKHRoaXMsIHRoaXMuX2JvdW5kc1RvTGF0TG5ncyhsYXRMbmdCb3VuZHMpLCBvcHRpb25zKTtcbiAgXHR9LFxuXG4gIFx0Ly8gQG1ldGhvZCBzZXRCb3VuZHMobGF0TG5nQm91bmRzOiBMYXRMbmdCb3VuZHMpOiB0aGlzXG4gIFx0Ly8gUmVkcmF3cyB0aGUgcmVjdGFuZ2xlIHdpdGggdGhlIHBhc3NlZCBib3VuZHMuXG4gIFx0c2V0Qm91bmRzOiBmdW5jdGlvbiAobGF0TG5nQm91bmRzKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5zZXRMYXRMbmdzKHRoaXMuX2JvdW5kc1RvTGF0TG5ncyhsYXRMbmdCb3VuZHMpKTtcbiAgXHR9LFxuXG4gIFx0X2JvdW5kc1RvTGF0TG5nczogZnVuY3Rpb24gKGxhdExuZ0JvdW5kcykge1xuICBcdFx0bGF0TG5nQm91bmRzID0gdG9MYXRMbmdCb3VuZHMobGF0TG5nQm91bmRzKTtcbiAgXHRcdHJldHVybiBbXG4gIFx0XHRcdGxhdExuZ0JvdW5kcy5nZXRTb3V0aFdlc3QoKSxcbiAgXHRcdFx0bGF0TG5nQm91bmRzLmdldE5vcnRoV2VzdCgpLFxuICBcdFx0XHRsYXRMbmdCb3VuZHMuZ2V0Tm9ydGhFYXN0KCksXG4gIFx0XHRcdGxhdExuZ0JvdW5kcy5nZXRTb3V0aEVhc3QoKVxuICBcdFx0XTtcbiAgXHR9XG4gIH0pO1xuXG5cbiAgLy8gQGZhY3RvcnkgTC5yZWN0YW5nbGUobGF0TG5nQm91bmRzOiBMYXRMbmdCb3VuZHMsIG9wdGlvbnM/OiBQb2x5bGluZSBvcHRpb25zKVxuICBmdW5jdGlvbiByZWN0YW5nbGUobGF0TG5nQm91bmRzLCBvcHRpb25zKSB7XG4gIFx0cmV0dXJuIG5ldyBSZWN0YW5nbGUobGF0TG5nQm91bmRzLCBvcHRpb25zKTtcbiAgfVxuXG4gIFNWRy5jcmVhdGUgPSBjcmVhdGUkMjtcbiAgU1ZHLnBvaW50c1RvUGF0aCA9IHBvaW50c1RvUGF0aDtcblxuICBHZW9KU09OLmdlb21ldHJ5VG9MYXllciA9IGdlb21ldHJ5VG9MYXllcjtcbiAgR2VvSlNPTi5jb29yZHNUb0xhdExuZyA9IGNvb3Jkc1RvTGF0TG5nO1xuICBHZW9KU09OLmNvb3Jkc1RvTGF0TG5ncyA9IGNvb3Jkc1RvTGF0TG5ncztcbiAgR2VvSlNPTi5sYXRMbmdUb0Nvb3JkcyA9IGxhdExuZ1RvQ29vcmRzO1xuICBHZW9KU09OLmxhdExuZ3NUb0Nvb3JkcyA9IGxhdExuZ3NUb0Nvb3JkcztcbiAgR2VvSlNPTi5nZXRGZWF0dXJlID0gZ2V0RmVhdHVyZTtcbiAgR2VvSlNPTi5hc0ZlYXR1cmUgPSBhc0ZlYXR1cmU7XG5cbiAgLypcbiAgICogTC5IYW5kbGVyLkJveFpvb20gaXMgdXNlZCB0byBhZGQgc2hpZnQtZHJhZyB6b29tIGludGVyYWN0aW9uIHRvIHRoZSBtYXBcbiAgICogKHpvb20gdG8gYSBzZWxlY3RlZCBib3VuZGluZyBib3gpLCBlbmFibGVkIGJ5IGRlZmF1bHQuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQG9wdGlvbiBib3hab29tOiBCb29sZWFuID0gdHJ1ZVxuICBcdC8vIFdoZXRoZXIgdGhlIG1hcCBjYW4gYmUgem9vbWVkIHRvIGEgcmVjdGFuZ3VsYXIgYXJlYSBzcGVjaWZpZWQgYnlcbiAgXHQvLyBkcmFnZ2luZyB0aGUgbW91c2Ugd2hpbGUgcHJlc3NpbmcgdGhlIHNoaWZ0IGtleS5cbiAgXHRib3hab29tOiB0cnVlXG4gIH0pO1xuXG4gIHZhciBCb3hab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcbiAgXHRcdHRoaXMuX2NvbnRhaW5lciA9IG1hcC5fY29udGFpbmVyO1xuICBcdFx0dGhpcy5fcGFuZSA9IG1hcC5fcGFuZXMub3ZlcmxheVBhbmU7XG4gIFx0XHR0aGlzLl9yZXNldFN0YXRlVGltZW91dCA9IDA7XG4gIFx0XHRtYXAub24oJ3VubG9hZCcsIHRoaXMuX2Rlc3Ryb3ksIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b24odGhpcy5fY29udGFpbmVyLCAnbW91c2Vkb3duJywgdGhpcy5fb25Nb3VzZURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b2ZmKHRoaXMuX2NvbnRhaW5lciwgJ21vdXNlZG93bicsIHRoaXMuX29uTW91c2VEb3duLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0bW92ZWQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9tb3ZlZDtcbiAgXHR9LFxuXG4gIFx0X2Rlc3Ryb3k6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZSh0aGlzLl9wYW5lKTtcbiAgXHRcdGRlbGV0ZSB0aGlzLl9wYW5lO1xuICBcdH0sXG5cbiAgXHRfcmVzZXRTdGF0ZTogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgPSAwO1xuICBcdFx0dGhpcy5fbW92ZWQgPSBmYWxzZTtcbiAgXHR9LFxuXG4gIFx0X2NsZWFyRGVmZXJyZWRSZXNldFN0YXRlOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAodGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgIT09IDApIHtcbiAgXHRcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0KTtcbiAgXHRcdFx0dGhpcy5fcmVzZXRTdGF0ZVRpbWVvdXQgPSAwO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25Nb3VzZURvd246IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIWUuc2hpZnRLZXkgfHwgKChlLndoaWNoICE9PSAxKSAmJiAoZS5idXR0b24gIT09IDEpKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuICBcdFx0Ly8gQ2xlYXIgdGhlIGRlZmVycmVkIHJlc2V0U3RhdGUgaWYgaXQgaGFzbid0IGV4ZWN1dGVkIHlldCwgb3RoZXJ3aXNlIGl0XG4gIFx0XHQvLyB3aWxsIGludGVycnVwdCB0aGUgaW50ZXJhY3Rpb24gYW5kIG9ycGhhbiBhIGJveCBlbGVtZW50IGluIHRoZSBjb250YWluZXIuXG4gIFx0XHR0aGlzLl9jbGVhckRlZmVycmVkUmVzZXRTdGF0ZSgpO1xuICBcdFx0dGhpcy5fcmVzZXRTdGF0ZSgpO1xuXG4gIFx0XHRkaXNhYmxlVGV4dFNlbGVjdGlvbigpO1xuICBcdFx0ZGlzYWJsZUltYWdlRHJhZygpO1xuXG4gIFx0XHR0aGlzLl9zdGFydFBvaW50ID0gdGhpcy5fbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUpO1xuXG4gIFx0XHRvbihkb2N1bWVudCwge1xuICBcdFx0XHRjb250ZXh0bWVudTogc3RvcCxcbiAgXHRcdFx0bW91c2Vtb3ZlOiB0aGlzLl9vbk1vdXNlTW92ZSxcbiAgXHRcdFx0bW91c2V1cDogdGhpcy5fb25Nb3VzZVVwLFxuICBcdFx0XHRrZXlkb3duOiB0aGlzLl9vbktleURvd25cbiAgXHRcdH0sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25Nb3VzZU1vdmU6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdHRoaXMuX21vdmVkID0gdHJ1ZTtcblxuICBcdFx0XHR0aGlzLl9ib3ggPSBjcmVhdGUkMSgnZGl2JywgJ2xlYWZsZXQtem9vbS1ib3gnLCB0aGlzLl9jb250YWluZXIpO1xuICBcdFx0XHRhZGRDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNyb3NzaGFpcicpO1xuXG4gIFx0XHRcdHRoaXMuX21hcC5maXJlKCdib3h6b29tc3RhcnQnKTtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fcG9pbnQgPSB0aGlzLl9tYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZSk7XG5cbiAgXHRcdHZhciBib3VuZHMgPSBuZXcgQm91bmRzKHRoaXMuX3BvaW50LCB0aGlzLl9zdGFydFBvaW50KSxcbiAgXHRcdCAgICBzaXplID0gYm91bmRzLmdldFNpemUoKTtcblxuICBcdFx0c2V0UG9zaXRpb24odGhpcy5fYm94LCBib3VuZHMubWluKTtcblxuICBcdFx0dGhpcy5fYm94LnN0eWxlLndpZHRoICA9IHNpemUueCArICdweCc7XG4gIFx0XHR0aGlzLl9ib3guc3R5bGUuaGVpZ2h0ID0gc2l6ZS55ICsgJ3B4JztcbiAgXHR9LFxuXG4gIFx0X2ZpbmlzaDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdHJlbW92ZSh0aGlzLl9ib3gpO1xuICBcdFx0XHRyZW1vdmVDbGFzcyh0aGlzLl9jb250YWluZXIsICdsZWFmbGV0LWNyb3NzaGFpcicpO1xuICBcdFx0fVxuXG4gIFx0XHRlbmFibGVUZXh0U2VsZWN0aW9uKCk7XG4gIFx0XHRlbmFibGVJbWFnZURyYWcoKTtcblxuICBcdFx0b2ZmKGRvY3VtZW50LCB7XG4gIFx0XHRcdGNvbnRleHRtZW51OiBzdG9wLFxuICBcdFx0XHRtb3VzZW1vdmU6IHRoaXMuX29uTW91c2VNb3ZlLFxuICBcdFx0XHRtb3VzZXVwOiB0aGlzLl9vbk1vdXNlVXAsXG4gIFx0XHRcdGtleWRvd246IHRoaXMuX29uS2V5RG93blxuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlVXA6IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoKGUud2hpY2ggIT09IDEpICYmIChlLmJ1dHRvbiAhPT0gMSkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHRoaXMuX2ZpbmlzaCgpO1xuXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7IHJldHVybjsgfVxuICBcdFx0Ly8gUG9zdHBvbmUgdG8gbmV4dCBKUyB0aWNrIHNvIGludGVybmFsIGNsaWNrIGV2ZW50IGhhbmRsaW5nXG4gIFx0XHQvLyBzdGlsbCBzZWUgaXQgYXMgXCJtb3ZlZFwiLlxuICBcdFx0dGhpcy5fY2xlYXJEZWZlcnJlZFJlc2V0U3RhdGUoKTtcbiAgXHRcdHRoaXMuX3Jlc2V0U3RhdGVUaW1lb3V0ID0gc2V0VGltZW91dChiaW5kKHRoaXMuX3Jlc2V0U3RhdGUsIHRoaXMpLCAwKTtcblxuICBcdFx0dmFyIGJvdW5kcyA9IG5ldyBMYXRMbmdCb3VuZHMoXG4gIFx0XHQgICAgICAgIHRoaXMuX21hcC5jb250YWluZXJQb2ludFRvTGF0TG5nKHRoaXMuX3N0YXJ0UG9pbnQpLFxuICBcdFx0ICAgICAgICB0aGlzLl9tYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9wb2ludCkpO1xuXG4gIFx0XHR0aGlzLl9tYXBcbiAgXHRcdFx0LmZpdEJvdW5kcyhib3VuZHMpXG4gIFx0XHRcdC5maXJlKCdib3h6b29tZW5kJywge2JveFpvb21Cb3VuZHM6IGJvdW5kc30pO1xuICBcdH0sXG5cbiAgXHRfb25LZXlEb3duOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKGUua2V5Q29kZSA9PT0gMjcpIHtcbiAgXHRcdFx0dGhpcy5fZmluaXNoKCk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgYm94Wm9vbTogSGFuZGxlclxuICAvLyBCb3ggKHNoaWZ0LWRyYWcgd2l0aCBtb3VzZSkgem9vbSBoYW5kbGVyLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnYm94Wm9vbScsIEJveFpvb20pO1xuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5Eb3VibGVDbGlja1pvb20gaXMgdXNlZCB0byBoYW5kbGUgZG91YmxlLWNsaWNrIHpvb20gb24gdGhlIG1hcCwgZW5hYmxlZCBieSBkZWZhdWx0LlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG5cbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQG9wdGlvbiBkb3VibGVDbGlja1pvb206IEJvb2xlYW58U3RyaW5nID0gdHJ1ZVxuICBcdC8vIFdoZXRoZXIgdGhlIG1hcCBjYW4gYmUgem9vbWVkIGluIGJ5IGRvdWJsZSBjbGlja2luZyBvbiBpdCBhbmRcbiAgXHQvLyB6b29tZWQgb3V0IGJ5IGRvdWJsZSBjbGlja2luZyB3aGlsZSBob2xkaW5nIHNoaWZ0LiBJZiBwYXNzZWRcbiAgXHQvLyBgJ2NlbnRlcidgLCBkb3VibGUtY2xpY2sgem9vbSB3aWxsIHpvb20gdG8gdGhlIGNlbnRlciBvZiB0aGVcbiAgXHQvLyAgdmlldyByZWdhcmRsZXNzIG9mIHdoZXJlIHRoZSBtb3VzZSB3YXMuXG4gIFx0ZG91YmxlQ2xpY2tab29tOiB0cnVlXG4gIH0pO1xuXG4gIHZhciBEb3VibGVDbGlja1pvb20gPSBIYW5kbGVyLmV4dGVuZCh7XG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX21hcC5vbignZGJsY2xpY2snLCB0aGlzLl9vbkRvdWJsZUNsaWNrLCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX21hcC5vZmYoJ2RibGNsaWNrJywgdGhpcy5fb25Eb3VibGVDbGljaywgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbkRvdWJsZUNsaWNrOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBvbGRab29tID0gbWFwLmdldFpvb20oKSxcbiAgXHRcdCAgICBkZWx0YSA9IG1hcC5vcHRpb25zLnpvb21EZWx0YSxcbiAgXHRcdCAgICB6b29tID0gZS5vcmlnaW5hbEV2ZW50LnNoaWZ0S2V5ID8gb2xkWm9vbSAtIGRlbHRhIDogb2xkWm9vbSArIGRlbHRhO1xuXG4gIFx0XHRpZiAobWFwLm9wdGlvbnMuZG91YmxlQ2xpY2tab29tID09PSAnY2VudGVyJykge1xuICBcdFx0XHRtYXAuc2V0Wm9vbSh6b29tKTtcbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdG1hcC5zZXRab29tQXJvdW5kKGUuY29udGFpbmVyUG9pbnQsIHpvb20pO1xuICBcdFx0fVxuICBcdH1cbiAgfSk7XG5cbiAgLy8gQHNlY3Rpb24gSGFuZGxlcnNcbiAgLy9cbiAgLy8gTWFwIHByb3BlcnRpZXMgaW5jbHVkZSBpbnRlcmFjdGlvbiBoYW5kbGVycyB0aGF0IGFsbG93IHlvdSB0byBjb250cm9sXG4gIC8vIGludGVyYWN0aW9uIGJlaGF2aW9yIGluIHJ1bnRpbWUsIGVuYWJsaW5nIG9yIGRpc2FibGluZyBjZXJ0YWluIGZlYXR1cmVzIHN1Y2hcbiAgLy8gYXMgZHJhZ2dpbmcgb3IgdG91Y2ggem9vbSAoc2VlIGBIYW5kbGVyYCBtZXRob2RzKS4gRm9yIGV4YW1wbGU6XG4gIC8vXG4gIC8vIGBgYGpzXG4gIC8vIG1hcC5kb3VibGVDbGlja1pvb20uZGlzYWJsZSgpO1xuICAvLyBgYGBcbiAgLy9cbiAgLy8gQHByb3BlcnR5IGRvdWJsZUNsaWNrWm9vbTogSGFuZGxlclxuICAvLyBEb3VibGUgY2xpY2sgem9vbSBoYW5kbGVyLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnZG91YmxlQ2xpY2tab29tJywgRG91YmxlQ2xpY2tab29tKTtcblxuICAvKlxuICAgKiBMLkhhbmRsZXIuTWFwRHJhZyBpcyB1c2VkIHRvIG1ha2UgdGhlIG1hcCBkcmFnZ2FibGUgKHdpdGggcGFubmluZyBpbmVydGlhKSwgZW5hYmxlZCBieSBkZWZhdWx0LlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBvcHRpb24gZHJhZ2dpbmc6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGJlIGRyYWdnYWJsZSB3aXRoIG1vdXNlL3RvdWNoIG9yIG5vdC5cbiAgXHRkcmFnZ2luZzogdHJ1ZSxcblxuICBcdC8vIEBzZWN0aW9uIFBhbm5pbmcgSW5lcnRpYSBPcHRpb25zXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhOiBCb29sZWFuID0gKlxuICBcdC8vIElmIGVuYWJsZWQsIHBhbm5pbmcgb2YgdGhlIG1hcCB3aWxsIGhhdmUgYW4gaW5lcnRpYSBlZmZlY3Qgd2hlcmVcbiAgXHQvLyB0aGUgbWFwIGJ1aWxkcyBtb21lbnR1bSB3aGlsZSBkcmFnZ2luZyBhbmQgY29udGludWVzIG1vdmluZyBpblxuICBcdC8vIHRoZSBzYW1lIGRpcmVjdGlvbiBmb3Igc29tZSB0aW1lLiBGZWVscyBlc3BlY2lhbGx5IG5pY2Ugb24gdG91Y2hcbiAgXHQvLyBkZXZpY2VzLiBFbmFibGVkIGJ5IGRlZmF1bHQgdW5sZXNzIHJ1bm5pbmcgb24gb2xkIEFuZHJvaWQgZGV2aWNlcy5cbiAgXHRpbmVydGlhOiAhYW5kcm9pZDIzLFxuXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhRGVjZWxlcmF0aW9uOiBOdW1iZXIgPSAzMDAwXG4gIFx0Ly8gVGhlIHJhdGUgd2l0aCB3aGljaCB0aGUgaW5lcnRpYWwgbW92ZW1lbnQgc2xvd3MgZG93biwgaW4gcGl4ZWxzL3NlY29uZMKyLlxuICBcdGluZXJ0aWFEZWNlbGVyYXRpb246IDM0MDAsIC8vIHB4L3NeMlxuXG4gIFx0Ly8gQG9wdGlvbiBpbmVydGlhTWF4U3BlZWQ6IE51bWJlciA9IEluZmluaXR5XG4gIFx0Ly8gTWF4IHNwZWVkIG9mIHRoZSBpbmVydGlhbCBtb3ZlbWVudCwgaW4gcGl4ZWxzL3NlY29uZC5cbiAgXHRpbmVydGlhTWF4U3BlZWQ6IEluZmluaXR5LCAvLyBweC9zXG5cbiAgXHQvLyBAb3B0aW9uIGVhc2VMaW5lYXJpdHk6IE51bWJlciA9IDAuMlxuICBcdGVhc2VMaW5lYXJpdHk6IDAuMixcblxuICBcdC8vIFRPRE8gcmVmYWN0b3IsIG1vdmUgdG8gQ1JTXG4gIFx0Ly8gQG9wdGlvbiB3b3JsZENvcHlKdW1wOiBCb29sZWFuID0gZmFsc2VcbiAgXHQvLyBXaXRoIHRoaXMgb3B0aW9uIGVuYWJsZWQsIHRoZSBtYXAgdHJhY2tzIHdoZW4geW91IHBhbiB0byBhbm90aGVyIFwiY29weVwiXG4gIFx0Ly8gb2YgdGhlIHdvcmxkIGFuZCBzZWFtbGVzc2x5IGp1bXBzIHRvIHRoZSBvcmlnaW5hbCBvbmUgc28gdGhhdCBhbGwgb3ZlcmxheXNcbiAgXHQvLyBsaWtlIG1hcmtlcnMgYW5kIHZlY3RvciBsYXllcnMgYXJlIHN0aWxsIHZpc2libGUuXG4gIFx0d29ybGRDb3B5SnVtcDogZmFsc2UsXG5cbiAgXHQvLyBAb3B0aW9uIG1heEJvdW5kc1Zpc2Nvc2l0eTogTnVtYmVyID0gMC4wXG4gIFx0Ly8gSWYgYG1heEJvdW5kc2AgaXMgc2V0LCB0aGlzIG9wdGlvbiB3aWxsIGNvbnRyb2wgaG93IHNvbGlkIHRoZSBib3VuZHNcbiAgXHQvLyBhcmUgd2hlbiBkcmFnZ2luZyB0aGUgbWFwIGFyb3VuZC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgYDAuMGAgYWxsb3dzIHRoZVxuICBcdC8vIHVzZXIgdG8gZHJhZyBvdXRzaWRlIHRoZSBib3VuZHMgYXQgbm9ybWFsIHNwZWVkLCBoaWdoZXIgdmFsdWVzIHdpbGxcbiAgXHQvLyBzbG93IGRvd24gbWFwIGRyYWdnaW5nIG91dHNpZGUgYm91bmRzLCBhbmQgYDEuMGAgbWFrZXMgdGhlIGJvdW5kcyBmdWxseVxuICBcdC8vIHNvbGlkLCBwcmV2ZW50aW5nIHRoZSB1c2VyIGZyb20gZHJhZ2dpbmcgb3V0c2lkZSB0aGUgYm91bmRzLlxuICBcdG1heEJvdW5kc1Zpc2Nvc2l0eTogMC4wXG4gIH0pO1xuXG4gIHZhciBEcmFnID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX2RyYWdnYWJsZSkge1xuICBcdFx0XHR2YXIgbWFwID0gdGhpcy5fbWFwO1xuXG4gIFx0XHRcdHRoaXMuX2RyYWdnYWJsZSA9IG5ldyBEcmFnZ2FibGUobWFwLl9tYXBQYW5lLCBtYXAuX2NvbnRhaW5lcik7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLm9uKHtcbiAgXHRcdFx0XHRkcmFnc3RhcnQ6IHRoaXMuX29uRHJhZ1N0YXJ0LFxuICBcdFx0XHRcdGRyYWc6IHRoaXMuX29uRHJhZyxcbiAgXHRcdFx0XHRkcmFnZW5kOiB0aGlzLl9vbkRyYWdFbmRcbiAgXHRcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdFx0dGhpcy5fZHJhZ2dhYmxlLm9uKCdwcmVkcmFnJywgdGhpcy5fb25QcmVEcmFnTGltaXQsIHRoaXMpO1xuICBcdFx0XHRpZiAobWFwLm9wdGlvbnMud29ybGRDb3B5SnVtcCkge1xuICBcdFx0XHRcdHRoaXMuX2RyYWdnYWJsZS5vbigncHJlZHJhZycsIHRoaXMuX29uUHJlRHJhZ1dyYXAsIHRoaXMpO1xuICBcdFx0XHRcdG1hcC5vbignem9vbWVuZCcsIHRoaXMuX29uWm9vbUVuZCwgdGhpcyk7XG5cbiAgXHRcdFx0XHRtYXAud2hlblJlYWR5KHRoaXMuX29uWm9vbUVuZCwgdGhpcyk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHRcdGFkZENsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC1ncmFiIGxlYWZsZXQtdG91Y2gtZHJhZycpO1xuICBcdFx0dGhpcy5fZHJhZ2dhYmxlLmVuYWJsZSgpO1xuICBcdFx0dGhpcy5fcG9zaXRpb25zID0gW107XG4gIFx0XHR0aGlzLl90aW1lcyA9IFtdO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0cmVtb3ZlQ2xhc3ModGhpcy5fbWFwLl9jb250YWluZXIsICdsZWFmbGV0LWdyYWInKTtcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC10b3VjaC1kcmFnJyk7XG4gIFx0XHR0aGlzLl9kcmFnZ2FibGUuZGlzYWJsZSgpO1xuICBcdH0sXG5cbiAgXHRtb3ZlZDogZnVuY3Rpb24gKCkge1xuICBcdFx0cmV0dXJuIHRoaXMuX2RyYWdnYWJsZSAmJiB0aGlzLl9kcmFnZ2FibGUuX21vdmVkO1xuICBcdH0sXG5cbiAgXHRtb3Zpbmc6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJldHVybiB0aGlzLl9kcmFnZ2FibGUgJiYgdGhpcy5fZHJhZ2dhYmxlLl9tb3Zpbmc7XG4gIFx0fSxcblxuICBcdF9vbkRyYWdTdGFydDogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcDtcblxuICBcdFx0bWFwLl9zdG9wKCk7XG4gIFx0XHRpZiAodGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzICYmIHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eSkge1xuICBcdFx0XHR2YXIgYm91bmRzID0gdG9MYXRMbmdCb3VuZHModGhpcy5fbWFwLm9wdGlvbnMubWF4Qm91bmRzKTtcblxuICBcdFx0XHR0aGlzLl9vZmZzZXRMaW1pdCA9IHRvQm91bmRzKFxuICBcdFx0XHRcdHRoaXMuX21hcC5sYXRMbmdUb0NvbnRhaW5lclBvaW50KGJvdW5kcy5nZXROb3J0aFdlc3QoKSkubXVsdGlwbHlCeSgtMSksXG4gIFx0XHRcdFx0dGhpcy5fbWFwLmxhdExuZ1RvQ29udGFpbmVyUG9pbnQoYm91bmRzLmdldFNvdXRoRWFzdCgpKS5tdWx0aXBseUJ5KC0xKVxuICBcdFx0XHRcdFx0LmFkZCh0aGlzLl9tYXAuZ2V0U2l6ZSgpKSk7XG5cbiAgXHRcdFx0dGhpcy5fdmlzY29zaXR5ID0gTWF0aC5taW4oMS4wLCBNYXRoLm1heCgwLjAsIHRoaXMuX21hcC5vcHRpb25zLm1heEJvdW5kc1Zpc2Nvc2l0eSkpO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fb2Zmc2V0TGltaXQgPSBudWxsO1xuICBcdFx0fVxuXG4gIFx0XHRtYXBcbiAgXHRcdCAgICAuZmlyZSgnbW92ZXN0YXJ0JylcbiAgXHRcdCAgICAuZmlyZSgnZHJhZ3N0YXJ0Jyk7XG5cbiAgXHRcdGlmIChtYXAub3B0aW9ucy5pbmVydGlhKSB7XG4gIFx0XHRcdHRoaXMuX3Bvc2l0aW9ucyA9IFtdO1xuICBcdFx0XHR0aGlzLl90aW1lcyA9IFtdO1xuICBcdFx0fVxuICBcdH0sXG5cbiAgXHRfb25EcmFnOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKHRoaXMuX21hcC5vcHRpb25zLmluZXJ0aWEpIHtcbiAgXHRcdFx0dmFyIHRpbWUgPSB0aGlzLl9sYXN0VGltZSA9ICtuZXcgRGF0ZSgpLFxuICBcdFx0XHQgICAgcG9zID0gdGhpcy5fbGFzdFBvcyA9IHRoaXMuX2RyYWdnYWJsZS5fYWJzUG9zIHx8IHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zO1xuXG4gIFx0XHRcdHRoaXMuX3Bvc2l0aW9ucy5wdXNoKHBvcyk7XG4gIFx0XHRcdHRoaXMuX3RpbWVzLnB1c2godGltZSk7XG5cbiAgXHRcdFx0dGhpcy5fcHJ1bmVQb3NpdGlvbnModGltZSk7XG4gIFx0XHR9XG5cbiAgXHRcdHRoaXMuX21hcFxuICBcdFx0ICAgIC5maXJlKCdtb3ZlJywgZSlcbiAgXHRcdCAgICAuZmlyZSgnZHJhZycsIGUpO1xuICBcdH0sXG5cbiAgXHRfcHJ1bmVQb3NpdGlvbnM6IGZ1bmN0aW9uICh0aW1lKSB7XG4gIFx0XHR3aGlsZSAodGhpcy5fcG9zaXRpb25zLmxlbmd0aCA+IDEgJiYgdGltZSAtIHRoaXMuX3RpbWVzWzBdID4gNTApIHtcbiAgXHRcdFx0dGhpcy5fcG9zaXRpb25zLnNoaWZ0KCk7XG4gIFx0XHRcdHRoaXMuX3RpbWVzLnNoaWZ0KCk7XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9vblpvb21FbmQ6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBweENlbnRlciA9IHRoaXMuX21hcC5nZXRTaXplKCkuZGl2aWRlQnkoMiksXG4gIFx0XHQgICAgcHhXb3JsZENlbnRlciA9IHRoaXMuX21hcC5sYXRMbmdUb0xheWVyUG9pbnQoWzAsIDBdKTtcblxuICBcdFx0dGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0ID0gcHhXb3JsZENlbnRlci5zdWJ0cmFjdChweENlbnRlcikueDtcbiAgXHRcdHRoaXMuX3dvcmxkV2lkdGggPSB0aGlzLl9tYXAuZ2V0UGl4ZWxXb3JsZEJvdW5kcygpLmdldFNpemUoKS54O1xuICBcdH0sXG5cbiAgXHRfdmlzY291c0xpbWl0OiBmdW5jdGlvbiAodmFsdWUsIHRocmVzaG9sZCkge1xuICBcdFx0cmV0dXJuIHZhbHVlIC0gKHZhbHVlIC0gdGhyZXNob2xkKSAqIHRoaXMuX3Zpc2Nvc2l0eTtcbiAgXHR9LFxuXG4gIFx0X29uUHJlRHJhZ0xpbWl0OiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRpZiAoIXRoaXMuX3Zpc2Nvc2l0eSB8fCAhdGhpcy5fb2Zmc2V0TGltaXQpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBvZmZzZXQgPSB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy5zdWJ0cmFjdCh0aGlzLl9kcmFnZ2FibGUuX3N0YXJ0UG9zKTtcblxuICBcdFx0dmFyIGxpbWl0ID0gdGhpcy5fb2Zmc2V0TGltaXQ7XG4gIFx0XHRpZiAob2Zmc2V0LnggPCBsaW1pdC5taW4ueCkgeyBvZmZzZXQueCA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueCwgbGltaXQubWluLngpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnkgPCBsaW1pdC5taW4ueSkgeyBvZmZzZXQueSA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueSwgbGltaXQubWluLnkpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnggPiBsaW1pdC5tYXgueCkgeyBvZmZzZXQueCA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueCwgbGltaXQubWF4LngpOyB9XG4gIFx0XHRpZiAob2Zmc2V0LnkgPiBsaW1pdC5tYXgueSkgeyBvZmZzZXQueSA9IHRoaXMuX3Zpc2NvdXNMaW1pdChvZmZzZXQueSwgbGltaXQubWF4LnkpOyB9XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zID0gdGhpcy5fZHJhZ2dhYmxlLl9zdGFydFBvcy5hZGQob2Zmc2V0KTtcbiAgXHR9LFxuXG4gIFx0X29uUHJlRHJhZ1dyYXA6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdC8vIFRPRE8gcmVmYWN0b3IgdG8gYmUgYWJsZSB0byBhZGp1c3QgbWFwIHBhbmUgcG9zaXRpb24gYWZ0ZXIgem9vbVxuICBcdFx0dmFyIHdvcmxkV2lkdGggPSB0aGlzLl93b3JsZFdpZHRoLFxuICBcdFx0ICAgIGhhbGZXaWR0aCA9IE1hdGgucm91bmQod29ybGRXaWR0aCAvIDIpLFxuICBcdFx0ICAgIGR4ID0gdGhpcy5faW5pdGlhbFdvcmxkT2Zmc2V0LFxuICBcdFx0ICAgIHggPSB0aGlzLl9kcmFnZ2FibGUuX25ld1Bvcy54LFxuICBcdFx0ICAgIG5ld1gxID0gKHggLSBoYWxmV2lkdGggKyBkeCkgJSB3b3JsZFdpZHRoICsgaGFsZldpZHRoIC0gZHgsXG4gIFx0XHQgICAgbmV3WDIgPSAoeCArIGhhbGZXaWR0aCArIGR4KSAlIHdvcmxkV2lkdGggLSBoYWxmV2lkdGggLSBkeCxcbiAgXHRcdCAgICBuZXdYID0gTWF0aC5hYnMobmV3WDEgKyBkeCkgPCBNYXRoLmFicyhuZXdYMiArIGR4KSA/IG5ld1gxIDogbmV3WDI7XG5cbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fYWJzUG9zID0gdGhpcy5fZHJhZ2dhYmxlLl9uZXdQb3MuY2xvbmUoKTtcbiAgXHRcdHRoaXMuX2RyYWdnYWJsZS5fbmV3UG9zLnggPSBuZXdYO1xuICBcdH0sXG5cbiAgXHRfb25EcmFnRW5kOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBvcHRpb25zID0gbWFwLm9wdGlvbnMsXG5cbiAgXHRcdCAgICBub0luZXJ0aWEgPSAhb3B0aW9ucy5pbmVydGlhIHx8IHRoaXMuX3RpbWVzLmxlbmd0aCA8IDI7XG5cbiAgXHRcdG1hcC5maXJlKCdkcmFnZW5kJywgZSk7XG5cbiAgXHRcdGlmIChub0luZXJ0aWEpIHtcbiAgXHRcdFx0bWFwLmZpcmUoJ21vdmVlbmQnKTtcblxuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fcHJ1bmVQb3NpdGlvbnMoK25ldyBEYXRlKCkpO1xuXG4gIFx0XHRcdHZhciBkaXJlY3Rpb24gPSB0aGlzLl9sYXN0UG9zLnN1YnRyYWN0KHRoaXMuX3Bvc2l0aW9uc1swXSksXG4gIFx0XHRcdCAgICBkdXJhdGlvbiA9ICh0aGlzLl9sYXN0VGltZSAtIHRoaXMuX3RpbWVzWzBdKSAvIDEwMDAsXG4gIFx0XHRcdCAgICBlYXNlID0gb3B0aW9ucy5lYXNlTGluZWFyaXR5LFxuXG4gIFx0XHRcdCAgICBzcGVlZFZlY3RvciA9IGRpcmVjdGlvbi5tdWx0aXBseUJ5KGVhc2UgLyBkdXJhdGlvbiksXG4gIFx0XHRcdCAgICBzcGVlZCA9IHNwZWVkVmVjdG9yLmRpc3RhbmNlVG8oWzAsIDBdKSxcblxuICBcdFx0XHQgICAgbGltaXRlZFNwZWVkID0gTWF0aC5taW4ob3B0aW9ucy5pbmVydGlhTWF4U3BlZWQsIHNwZWVkKSxcbiAgXHRcdFx0ICAgIGxpbWl0ZWRTcGVlZFZlY3RvciA9IHNwZWVkVmVjdG9yLm11bHRpcGx5QnkobGltaXRlZFNwZWVkIC8gc3BlZWQpLFxuXG4gIFx0XHRcdCAgICBkZWNlbGVyYXRpb25EdXJhdGlvbiA9IGxpbWl0ZWRTcGVlZCAvIChvcHRpb25zLmluZXJ0aWFEZWNlbGVyYXRpb24gKiBlYXNlKSxcbiAgXHRcdFx0ICAgIG9mZnNldCA9IGxpbWl0ZWRTcGVlZFZlY3Rvci5tdWx0aXBseUJ5KC1kZWNlbGVyYXRpb25EdXJhdGlvbiAvIDIpLnJvdW5kKCk7XG5cbiAgXHRcdFx0aWYgKCFvZmZzZXQueCAmJiAhb2Zmc2V0LnkpIHtcbiAgXHRcdFx0XHRtYXAuZmlyZSgnbW92ZWVuZCcpO1xuXG4gIFx0XHRcdH0gZWxzZSB7XG4gIFx0XHRcdFx0b2Zmc2V0ID0gbWFwLl9saW1pdE9mZnNldChvZmZzZXQsIG1hcC5vcHRpb25zLm1heEJvdW5kcyk7XG5cbiAgXHRcdFx0XHRyZXF1ZXN0QW5pbUZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0XHRcdG1hcC5wYW5CeShvZmZzZXQsIHtcbiAgXHRcdFx0XHRcdFx0ZHVyYXRpb246IGRlY2VsZXJhdGlvbkR1cmF0aW9uLFxuICBcdFx0XHRcdFx0XHRlYXNlTGluZWFyaXR5OiBlYXNlLFxuICBcdFx0XHRcdFx0XHRub01vdmVTdGFydDogdHJ1ZSxcbiAgXHRcdFx0XHRcdFx0YW5pbWF0ZTogdHJ1ZVxuICBcdFx0XHRcdFx0fSk7XG4gIFx0XHRcdFx0fSk7XG4gIFx0XHRcdH1cbiAgXHRcdH1cbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSBkcmFnZ2luZzogSGFuZGxlclxuICAvLyBNYXAgZHJhZ2dpbmcgaGFuZGxlciAoYnkgYm90aCBtb3VzZSBhbmQgdG91Y2gpLlxuICBNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAnZHJhZ2dpbmcnLCBEcmFnKTtcblxuICAvKlxuICAgKiBMLk1hcC5LZXlib2FyZCBpcyBoYW5kbGluZyBrZXlib2FyZCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBtYXAsIGVuYWJsZWQgYnkgZGVmYXVsdC5cbiAgICovXG5cbiAgLy8gQG5hbWVzcGFjZSBNYXBcbiAgLy8gQHNlY3Rpb24gS2V5Ym9hcmQgTmF2aWdhdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBvcHRpb24ga2V5Ym9hcmQ6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gTWFrZXMgdGhlIG1hcCBmb2N1c2FibGUgYW5kIGFsbG93cyB1c2VycyB0byBuYXZpZ2F0ZSB0aGUgbWFwIHdpdGgga2V5Ym9hcmRcbiAgXHQvLyBhcnJvd3MgYW5kIGArYC9gLWAga2V5cy5cbiAgXHRrZXlib2FyZDogdHJ1ZSxcblxuICBcdC8vIEBvcHRpb24ga2V5Ym9hcmRQYW5EZWx0YTogTnVtYmVyID0gODBcbiAgXHQvLyBBbW91bnQgb2YgcGl4ZWxzIHRvIHBhbiB3aGVuIHByZXNzaW5nIGFuIGFycm93IGtleS5cbiAgXHRrZXlib2FyZFBhbkRlbHRhOiA4MFxuICB9KTtcblxuICB2YXIgS2V5Ym9hcmQgPSBIYW5kbGVyLmV4dGVuZCh7XG5cbiAgXHRrZXlDb2Rlczoge1xuICBcdFx0bGVmdDogICAgWzM3XSxcbiAgXHRcdHJpZ2h0OiAgIFszOV0sXG4gIFx0XHRkb3duOiAgICBbNDBdLFxuICBcdFx0dXA6ICAgICAgWzM4XSxcbiAgXHRcdHpvb21JbjogIFsxODcsIDEwNywgNjEsIDE3MV0sXG4gIFx0XHR6b29tT3V0OiBbMTg5LCAxMDksIDU0LCAxNzNdXG4gIFx0fSxcblxuICBcdGluaXRpYWxpemU6IGZ1bmN0aW9uIChtYXApIHtcbiAgXHRcdHRoaXMuX21hcCA9IG1hcDtcblxuICBcdFx0dGhpcy5fc2V0UGFuRGVsdGEobWFwLm9wdGlvbnMua2V5Ym9hcmRQYW5EZWx0YSk7XG4gIFx0XHR0aGlzLl9zZXRab29tRGVsdGEobWFwLm9wdGlvbnMuem9vbURlbHRhKTtcbiAgXHR9LFxuXG4gIFx0YWRkSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHZhciBjb250YWluZXIgPSB0aGlzLl9tYXAuX2NvbnRhaW5lcjtcblxuICBcdFx0Ly8gbWFrZSB0aGUgY29udGFpbmVyIGZvY3VzYWJsZSBieSB0YWJiaW5nXG4gIFx0XHRpZiAoY29udGFpbmVyLnRhYkluZGV4IDw9IDApIHtcbiAgXHRcdFx0Y29udGFpbmVyLnRhYkluZGV4ID0gJzAnO1xuICBcdFx0fVxuXG4gIFx0XHRvbihjb250YWluZXIsIHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX29uRm9jdXMsXG4gIFx0XHRcdGJsdXI6IHRoaXMuX29uQmx1cixcbiAgXHRcdFx0bW91c2Vkb3duOiB0aGlzLl9vbk1vdXNlRG93blxuICBcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdHRoaXMuX21hcC5vbih7XG4gIFx0XHRcdGZvY3VzOiB0aGlzLl9hZGRIb29rcyxcbiAgXHRcdFx0Ymx1cjogdGhpcy5fcmVtb3ZlSG9va3NcbiAgXHRcdH0sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0dGhpcy5fcmVtb3ZlSG9va3MoKTtcblxuICBcdFx0b2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCB7XG4gIFx0XHRcdGZvY3VzOiB0aGlzLl9vbkZvY3VzLFxuICBcdFx0XHRibHVyOiB0aGlzLl9vbkJsdXIsXG4gIFx0XHRcdG1vdXNlZG93bjogdGhpcy5fb25Nb3VzZURvd25cbiAgXHRcdH0sIHRoaXMpO1xuXG4gIFx0XHR0aGlzLl9tYXAub2ZmKHtcbiAgXHRcdFx0Zm9jdXM6IHRoaXMuX2FkZEhvb2tzLFxuICBcdFx0XHRibHVyOiB0aGlzLl9yZW1vdmVIb29rc1xuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbk1vdXNlRG93bjogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKHRoaXMuX2ZvY3VzZWQpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBib2R5ID0gZG9jdW1lbnQuYm9keSxcbiAgXHRcdCAgICBkb2NFbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcbiAgXHRcdCAgICB0b3AgPSBib2R5LnNjcm9sbFRvcCB8fCBkb2NFbC5zY3JvbGxUb3AsXG4gIFx0XHQgICAgbGVmdCA9IGJvZHkuc2Nyb2xsTGVmdCB8fCBkb2NFbC5zY3JvbGxMZWZ0O1xuXG4gIFx0XHR0aGlzLl9tYXAuX2NvbnRhaW5lci5mb2N1cygpO1xuXG4gIFx0XHR3aW5kb3cuc2Nyb2xsVG8obGVmdCwgdG9wKTtcbiAgXHR9LFxuXG4gIFx0X29uRm9jdXM6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2ZvY3VzZWQgPSB0cnVlO1xuICBcdFx0dGhpcy5fbWFwLmZpcmUoJ2ZvY3VzJyk7XG4gIFx0fSxcblxuICBcdF9vbkJsdXI6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHRoaXMuX2ZvY3VzZWQgPSBmYWxzZTtcbiAgXHRcdHRoaXMuX21hcC5maXJlKCdibHVyJyk7XG4gIFx0fSxcblxuICBcdF9zZXRQYW5EZWx0YTogZnVuY3Rpb24gKHBhbkRlbHRhKSB7XG4gIFx0XHR2YXIga2V5cyA9IHRoaXMuX3BhbktleXMgPSB7fSxcbiAgXHRcdCAgICBjb2RlcyA9IHRoaXMua2V5Q29kZXMsXG4gIFx0XHQgICAgaSwgbGVuO1xuXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5sZWZ0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMubGVmdFtpXV0gPSBbLTEgKiBwYW5EZWx0YSwgMF07XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5yaWdodC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnJpZ2h0W2ldXSA9IFtwYW5EZWx0YSwgMF07XG4gIFx0XHR9XG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy5kb3duLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gIFx0XHRcdGtleXNbY29kZXMuZG93bltpXV0gPSBbMCwgcGFuRGVsdGFdO1xuICBcdFx0fVxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gY29kZXMudXAubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy51cFtpXV0gPSBbMCwgLTEgKiBwYW5EZWx0YV07XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9zZXRab29tRGVsdGE6IGZ1bmN0aW9uICh6b29tRGVsdGEpIHtcbiAgXHRcdHZhciBrZXlzID0gdGhpcy5fem9vbUtleXMgPSB7fSxcbiAgXHRcdCAgICBjb2RlcyA9IHRoaXMua2V5Q29kZXMsXG4gIFx0XHQgICAgaSwgbGVuO1xuXG4gIFx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjb2Rlcy56b29tSW4ubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgXHRcdFx0a2V5c1tjb2Rlcy56b29tSW5baV1dID0gem9vbURlbHRhO1xuICBcdFx0fVxuICBcdFx0Zm9yIChpID0gMCwgbGVuID0gY29kZXMuem9vbU91dC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICBcdFx0XHRrZXlzW2NvZGVzLnpvb21PdXRbaV1dID0gLXpvb21EZWx0YTtcbiAgXHRcdH1cbiAgXHR9LFxuXG4gIFx0X2FkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvbihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfcmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdG9mZihkb2N1bWVudCwgJ2tleWRvd24nLCB0aGlzLl9vbktleURvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25LZXlEb3duOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdHZhciBrZXkgPSBlLmtleUNvZGUsXG4gIFx0XHQgICAgbWFwID0gdGhpcy5fbWFwLFxuICBcdFx0ICAgIG9mZnNldDtcblxuICBcdFx0aWYgKGtleSBpbiB0aGlzLl9wYW5LZXlzKSB7XG4gIFx0XHRcdGlmICghbWFwLl9wYW5BbmltIHx8ICFtYXAuX3BhbkFuaW0uX2luUHJvZ3Jlc3MpIHtcbiAgXHRcdFx0XHRvZmZzZXQgPSB0aGlzLl9wYW5LZXlzW2tleV07XG4gIFx0XHRcdFx0aWYgKGUuc2hpZnRLZXkpIHtcbiAgXHRcdFx0XHRcdG9mZnNldCA9IHRvUG9pbnQob2Zmc2V0KS5tdWx0aXBseUJ5KDMpO1xuICBcdFx0XHRcdH1cblxuICBcdFx0XHRcdG1hcC5wYW5CeShvZmZzZXQpO1xuXG4gIFx0XHRcdFx0aWYgKG1hcC5vcHRpb25zLm1heEJvdW5kcykge1xuICBcdFx0XHRcdFx0bWFwLnBhbkluc2lkZUJvdW5kcyhtYXAub3B0aW9ucy5tYXhCb3VuZHMpO1xuICBcdFx0XHRcdH1cbiAgXHRcdFx0fVxuICBcdFx0fSBlbHNlIGlmIChrZXkgaW4gdGhpcy5fem9vbUtleXMpIHtcbiAgXHRcdFx0bWFwLnNldFpvb20obWFwLmdldFpvb20oKSArIChlLnNoaWZ0S2V5ID8gMyA6IDEpICogdGhpcy5fem9vbUtleXNba2V5XSk7XG5cbiAgXHRcdH0gZWxzZSBpZiAoa2V5ID09PSAyNyAmJiBtYXAuX3BvcHVwICYmIG1hcC5fcG9wdXAub3B0aW9ucy5jbG9zZU9uRXNjYXBlS2V5KSB7XG4gIFx0XHRcdG1hcC5jbG9zZVBvcHVwKCk7XG5cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0c3RvcChlKTtcbiAgXHR9XG4gIH0pO1xuXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBzZWN0aW9uIEhhbmRsZXJzXG4gIC8vIEBwcm9wZXJ0eSBrZXlib2FyZDogSGFuZGxlclxuICAvLyBLZXlib2FyZCBuYXZpZ2F0aW9uIGhhbmRsZXIuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdrZXlib2FyZCcsIEtleWJvYXJkKTtcblxuICAvKlxuICAgKiBMLkhhbmRsZXIuU2Nyb2xsV2hlZWxab29tIGlzIHVzZWQgYnkgTC5NYXAgdG8gZW5hYmxlIG1vdXNlIHNjcm9sbCB3aGVlbCB6b29tIG9uIHRoZSBtYXAuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQHNlY3Rpb24gTW91c2Ugd2hlZWwgb3B0aW9uc1xuICBcdC8vIEBvcHRpb24gc2Nyb2xsV2hlZWxab29tOiBCb29sZWFufFN0cmluZyA9IHRydWVcbiAgXHQvLyBXaGV0aGVyIHRoZSBtYXAgY2FuIGJlIHpvb21lZCBieSB1c2luZyB0aGUgbW91c2Ugd2hlZWwuIElmIHBhc3NlZCBgJ2NlbnRlcidgLFxuICBcdC8vIGl0IHdpbGwgem9vbSB0byB0aGUgY2VudGVyIG9mIHRoZSB2aWV3IHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgdGhlIG1vdXNlIHdhcy5cbiAgXHRzY3JvbGxXaGVlbFpvb206IHRydWUsXG5cbiAgXHQvLyBAb3B0aW9uIHdoZWVsRGVib3VuY2VUaW1lOiBOdW1iZXIgPSA0MFxuICBcdC8vIExpbWl0cyB0aGUgcmF0ZSBhdCB3aGljaCBhIHdoZWVsIGNhbiBmaXJlIChpbiBtaWxsaXNlY29uZHMpLiBCeSBkZWZhdWx0XG4gIFx0Ly8gdXNlciBjYW4ndCB6b29tIHZpYSB3aGVlbCBtb3JlIG9mdGVuIHRoYW4gb25jZSBwZXIgNDAgbXMuXG4gIFx0d2hlZWxEZWJvdW5jZVRpbWU6IDQwLFxuXG4gIFx0Ly8gQG9wdGlvbiB3aGVlbFB4UGVyWm9vbUxldmVsOiBOdW1iZXIgPSA2MFxuICBcdC8vIEhvdyBtYW55IHNjcm9sbCBwaXhlbHMgKGFzIHJlcG9ydGVkIGJ5IFtMLkRvbUV2ZW50LmdldFdoZWVsRGVsdGFdKCNkb21ldmVudC1nZXR3aGVlbGRlbHRhKSlcbiAgXHQvLyBtZWFuIGEgY2hhbmdlIG9mIG9uZSBmdWxsIHpvb20gbGV2ZWwuIFNtYWxsZXIgdmFsdWVzIHdpbGwgbWFrZSB3aGVlbC16b29taW5nXG4gIFx0Ly8gZmFzdGVyIChhbmQgdmljZSB2ZXJzYSkuXG4gIFx0d2hlZWxQeFBlclpvb21MZXZlbDogNjBcbiAgfSk7XG5cbiAgdmFyIFNjcm9sbFdoZWVsWm9vbSA9IEhhbmRsZXIuZXh0ZW5kKHtcbiAgXHRhZGRIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b24odGhpcy5fbWFwLl9jb250YWluZXIsICd3aGVlbCcsIHRoaXMuX29uV2hlZWxTY3JvbGwsIHRoaXMpO1xuXG4gIFx0XHR0aGlzLl9kZWx0YSA9IDA7XG4gIFx0fSxcblxuICBcdHJlbW92ZUhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvZmYodGhpcy5fbWFwLl9jb250YWluZXIsICd3aGVlbCcsIHRoaXMuX29uV2hlZWxTY3JvbGwsIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRfb25XaGVlbFNjcm9sbDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBkZWx0YSA9IGdldFdoZWVsRGVsdGEoZSk7XG5cbiAgXHRcdHZhciBkZWJvdW5jZSA9IHRoaXMuX21hcC5vcHRpb25zLndoZWVsRGVib3VuY2VUaW1lO1xuXG4gIFx0XHR0aGlzLl9kZWx0YSArPSBkZWx0YTtcbiAgXHRcdHRoaXMuX2xhc3RNb3VzZVBvcyA9IHRoaXMuX21hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlKTtcblxuICBcdFx0aWYgKCF0aGlzLl9zdGFydFRpbWUpIHtcbiAgXHRcdFx0dGhpcy5fc3RhcnRUaW1lID0gK25ldyBEYXRlKCk7XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBsZWZ0ID0gTWF0aC5tYXgoZGVib3VuY2UgLSAoK25ldyBEYXRlKCkgLSB0aGlzLl9zdGFydFRpbWUpLCAwKTtcblxuICBcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKTtcbiAgXHRcdHRoaXMuX3RpbWVyID0gc2V0VGltZW91dChiaW5kKHRoaXMuX3BlcmZvcm1ab29tLCB0aGlzKSwgbGVmdCk7XG5cbiAgXHRcdHN0b3AoZSk7XG4gIFx0fSxcblxuICBcdF9wZXJmb3JtWm9vbTogZnVuY3Rpb24gKCkge1xuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICB6b29tID0gbWFwLmdldFpvb20oKSxcbiAgXHRcdCAgICBzbmFwID0gdGhpcy5fbWFwLm9wdGlvbnMuem9vbVNuYXAgfHwgMDtcblxuICBcdFx0bWFwLl9zdG9wKCk7IC8vIHN0b3AgcGFubmluZyBhbmQgZmx5IGFuaW1hdGlvbnMgaWYgYW55XG5cbiAgXHRcdC8vIG1hcCB0aGUgZGVsdGEgd2l0aCBhIHNpZ21vaWQgZnVuY3Rpb24gdG8gLTQuLjQgcmFuZ2UgbGVhbmluZyBvbiAtMS4uMVxuICBcdFx0dmFyIGQyID0gdGhpcy5fZGVsdGEgLyAodGhpcy5fbWFwLm9wdGlvbnMud2hlZWxQeFBlclpvb21MZXZlbCAqIDQpLFxuICBcdFx0ICAgIGQzID0gNCAqIE1hdGgubG9nKDIgLyAoMSArIE1hdGguZXhwKC1NYXRoLmFicyhkMikpKSkgLyBNYXRoLkxOMixcbiAgXHRcdCAgICBkNCA9IHNuYXAgPyBNYXRoLmNlaWwoZDMgLyBzbmFwKSAqIHNuYXAgOiBkMyxcbiAgXHRcdCAgICBkZWx0YSA9IG1hcC5fbGltaXRab29tKHpvb20gKyAodGhpcy5fZGVsdGEgPiAwID8gZDQgOiAtZDQpKSAtIHpvb207XG5cbiAgXHRcdHRoaXMuX2RlbHRhID0gMDtcbiAgXHRcdHRoaXMuX3N0YXJ0VGltZSA9IG51bGw7XG5cbiAgXHRcdGlmICghZGVsdGEpIHsgcmV0dXJuOyB9XG5cbiAgXHRcdGlmIChtYXAub3B0aW9ucy5zY3JvbGxXaGVlbFpvb20gPT09ICdjZW50ZXInKSB7XG4gIFx0XHRcdG1hcC5zZXRab29tKHpvb20gKyBkZWx0YSk7XG4gIFx0XHR9IGVsc2Uge1xuICBcdFx0XHRtYXAuc2V0Wm9vbUFyb3VuZCh0aGlzLl9sYXN0TW91c2VQb3MsIHpvb20gKyBkZWx0YSk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgc2Nyb2xsV2hlZWxab29tOiBIYW5kbGVyXG4gIC8vIFNjcm9sbCB3aGVlbCB6b29tIGhhbmRsZXIuXG4gIE1hcC5hZGRJbml0SG9vaygnYWRkSGFuZGxlcicsICdzY3JvbGxXaGVlbFpvb20nLCBTY3JvbGxXaGVlbFpvb20pO1xuXG4gIC8qXG4gICAqIEwuTWFwLlRhcCBpcyB1c2VkIHRvIGVuYWJsZSBtb2JpbGUgaGFja3MgbGlrZSBxdWljayB0YXBzIGFuZCBsb25nIGhvbGQuXG4gICAqL1xuXG4gIC8vIEBuYW1lc3BhY2UgTWFwXG4gIC8vIEBzZWN0aW9uIEludGVyYWN0aW9uIE9wdGlvbnNcbiAgTWFwLm1lcmdlT3B0aW9ucyh7XG4gIFx0Ly8gQHNlY3Rpb24gVG91Y2ggaW50ZXJhY3Rpb24gb3B0aW9uc1xuICBcdC8vIEBvcHRpb24gdGFwOiBCb29sZWFuID0gdHJ1ZVxuICBcdC8vIEVuYWJsZXMgbW9iaWxlIGhhY2tzIGZvciBzdXBwb3J0aW5nIGluc3RhbnQgdGFwcyAoZml4aW5nIDIwMG1zIGNsaWNrXG4gIFx0Ly8gZGVsYXkgb24gaU9TL0FuZHJvaWQpIGFuZCB0b3VjaCBob2xkcyAoZmlyZWQgYXMgYGNvbnRleHRtZW51YCBldmVudHMpLlxuICBcdHRhcDogdHJ1ZSxcblxuICBcdC8vIEBvcHRpb24gdGFwVG9sZXJhbmNlOiBOdW1iZXIgPSAxNVxuICBcdC8vIFRoZSBtYXggbnVtYmVyIG9mIHBpeGVscyBhIHVzZXIgY2FuIHNoaWZ0IGhpcyBmaW5nZXIgZHVyaW5nIHRvdWNoXG4gIFx0Ly8gZm9yIGl0IHRvIGJlIGNvbnNpZGVyZWQgYSB2YWxpZCB0YXAuXG4gIFx0dGFwVG9sZXJhbmNlOiAxNVxuICB9KTtcblxuICB2YXIgVGFwID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRvbih0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ3RvdWNoc3RhcnQnLCB0aGlzLl9vbkRvd24sIHRoaXMpO1xuICBcdH0sXG5cbiAgXHRyZW1vdmVIb29rczogZnVuY3Rpb24gKCkge1xuICBcdFx0b2ZmKHRoaXMuX21hcC5fY29udGFpbmVyLCAndG91Y2hzdGFydCcsIHRoaXMuX29uRG93biwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vbkRvd246IGZ1bmN0aW9uIChlKSB7XG4gIFx0XHRpZiAoIWUudG91Y2hlcykgeyByZXR1cm47IH1cblxuICBcdFx0cHJldmVudERlZmF1bHQoZSk7XG5cbiAgXHRcdHRoaXMuX2ZpcmVDbGljayA9IHRydWU7XG5cbiAgXHRcdC8vIGRvbid0IHNpbXVsYXRlIGNsaWNrIG9yIHRyYWNrIGxvbmdwcmVzcyBpZiBtb3JlIHRoYW4gMSB0b3VjaFxuICBcdFx0aWYgKGUudG91Y2hlcy5sZW5ndGggPiAxKSB7XG4gIFx0XHRcdHRoaXMuX2ZpcmVDbGljayA9IGZhbHNlO1xuICBcdFx0XHRjbGVhclRpbWVvdXQodGhpcy5faG9sZFRpbWVvdXQpO1xuICBcdFx0XHRyZXR1cm47XG4gIFx0XHR9XG5cbiAgXHRcdHZhciBmaXJzdCA9IGUudG91Y2hlc1swXSxcbiAgXHRcdCAgICBlbCA9IGZpcnN0LnRhcmdldDtcblxuICBcdFx0dGhpcy5fc3RhcnRQb3MgPSB0aGlzLl9uZXdQb3MgPSBuZXcgUG9pbnQoZmlyc3QuY2xpZW50WCwgZmlyc3QuY2xpZW50WSk7XG5cbiAgXHRcdC8vIGlmIHRvdWNoaW5nIGEgbGluaywgaGlnaGxpZ2h0IGl0XG4gIFx0XHRpZiAoZWwudGFnTmFtZSAmJiBlbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdhJykge1xuICBcdFx0XHRhZGRDbGFzcyhlbCwgJ2xlYWZsZXQtYWN0aXZlJyk7XG4gIFx0XHR9XG5cbiAgXHRcdC8vIHNpbXVsYXRlIGxvbmcgaG9sZCBidXQgc2V0dGluZyBhIHRpbWVvdXRcbiAgXHRcdHRoaXMuX2hvbGRUaW1lb3V0ID0gc2V0VGltZW91dChiaW5kKGZ1bmN0aW9uICgpIHtcbiAgXHRcdFx0aWYgKHRoaXMuX2lzVGFwVmFsaWQoKSkge1xuICBcdFx0XHRcdHRoaXMuX2ZpcmVDbGljayA9IGZhbHNlO1xuICBcdFx0XHRcdHRoaXMuX29uVXAoKTtcbiAgXHRcdFx0XHR0aGlzLl9zaW11bGF0ZUV2ZW50KCdjb250ZXh0bWVudScsIGZpcnN0KTtcbiAgXHRcdFx0fVxuICBcdFx0fSwgdGhpcyksIDEwMDApO1xuXG4gIFx0XHR0aGlzLl9zaW11bGF0ZUV2ZW50KCdtb3VzZWRvd24nLCBmaXJzdCk7XG5cbiAgXHRcdG9uKGRvY3VtZW50LCB7XG4gIFx0XHRcdHRvdWNobW92ZTogdGhpcy5fb25Nb3ZlLFxuICBcdFx0XHR0b3VjaGVuZDogdGhpcy5fb25VcFxuICBcdFx0fSwgdGhpcyk7XG4gIFx0fSxcblxuICBcdF9vblVwOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0Y2xlYXJUaW1lb3V0KHRoaXMuX2hvbGRUaW1lb3V0KTtcblxuICBcdFx0b2ZmKGRvY3VtZW50LCB7XG4gIFx0XHRcdHRvdWNobW92ZTogdGhpcy5fb25Nb3ZlLFxuICBcdFx0XHR0b3VjaGVuZDogdGhpcy5fb25VcFxuICBcdFx0fSwgdGhpcyk7XG5cbiAgXHRcdGlmICh0aGlzLl9maXJlQ2xpY2sgJiYgZSAmJiBlLmNoYW5nZWRUb3VjaGVzKSB7XG5cbiAgXHRcdFx0dmFyIGZpcnN0ID0gZS5jaGFuZ2VkVG91Y2hlc1swXSxcbiAgXHRcdFx0ICAgIGVsID0gZmlyc3QudGFyZ2V0O1xuXG4gIFx0XHRcdGlmIChlbCAmJiBlbC50YWdOYW1lICYmIGVsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ2EnKSB7XG4gIFx0XHRcdFx0cmVtb3ZlQ2xhc3MoZWwsICdsZWFmbGV0LWFjdGl2ZScpO1xuICBcdFx0XHR9XG5cbiAgXHRcdFx0dGhpcy5fc2ltdWxhdGVFdmVudCgnbW91c2V1cCcsIGZpcnN0KTtcblxuICBcdFx0XHQvLyBzaW11bGF0ZSBjbGljayBpZiB0aGUgdG91Y2ggZGlkbid0IG1vdmUgdG9vIG11Y2hcbiAgXHRcdFx0aWYgKHRoaXMuX2lzVGFwVmFsaWQoKSkge1xuICBcdFx0XHRcdHRoaXMuX3NpbXVsYXRlRXZlbnQoJ2NsaWNrJywgZmlyc3QpO1xuICBcdFx0XHR9XG4gIFx0XHR9XG4gIFx0fSxcblxuICBcdF9pc1RhcFZhbGlkOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRyZXR1cm4gdGhpcy5fbmV3UG9zLmRpc3RhbmNlVG8odGhpcy5fc3RhcnRQb3MpIDw9IHRoaXMuX21hcC5vcHRpb25zLnRhcFRvbGVyYW5jZTtcbiAgXHR9LFxuXG4gIFx0X29uTW92ZTogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBmaXJzdCA9IGUudG91Y2hlc1swXTtcbiAgXHRcdHRoaXMuX25ld1BvcyA9IG5ldyBQb2ludChmaXJzdC5jbGllbnRYLCBmaXJzdC5jbGllbnRZKTtcbiAgXHRcdHRoaXMuX3NpbXVsYXRlRXZlbnQoJ21vdXNlbW92ZScsIGZpcnN0KTtcbiAgXHR9LFxuXG4gIFx0X3NpbXVsYXRlRXZlbnQ6IGZ1bmN0aW9uICh0eXBlLCBlKSB7XG4gIFx0XHR2YXIgc2ltdWxhdGVkRXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtcblxuICBcdFx0c2ltdWxhdGVkRXZlbnQuX3NpbXVsYXRlZCA9IHRydWU7XG4gIFx0XHRlLnRhcmdldC5fc2ltdWxhdGVkQ2xpY2sgPSB0cnVlO1xuXG4gIFx0XHRzaW11bGF0ZWRFdmVudC5pbml0TW91c2VFdmVudChcbiAgXHRcdCAgICAgICAgdHlwZSwgdHJ1ZSwgdHJ1ZSwgd2luZG93LCAxLFxuICBcdFx0ICAgICAgICBlLnNjcmVlblgsIGUuc2NyZWVuWSxcbiAgXHRcdCAgICAgICAgZS5jbGllbnRYLCBlLmNsaWVudFksXG4gIFx0XHQgICAgICAgIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAwLCBudWxsKTtcblxuICBcdFx0ZS50YXJnZXQuZGlzcGF0Y2hFdmVudChzaW11bGF0ZWRFdmVudCk7XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgdGFwOiBIYW5kbGVyXG4gIC8vIE1vYmlsZSB0b3VjaCBoYWNrcyAocXVpY2sgdGFwIGFuZCB0b3VjaCBob2xkKSBoYW5kbGVyLlxuICBpZiAodG91Y2ggJiYgKCFwb2ludGVyIHx8IHNhZmFyaSkpIHtcbiAgXHRNYXAuYWRkSW5pdEhvb2soJ2FkZEhhbmRsZXInLCAndGFwJywgVGFwKTtcbiAgfVxuXG4gIC8qXG4gICAqIEwuSGFuZGxlci5Ub3VjaFpvb20gaXMgdXNlZCBieSBMLk1hcCB0byBhZGQgcGluY2ggem9vbSBvbiBzdXBwb3J0ZWQgbW9iaWxlIGJyb3dzZXJzLlxuICAgKi9cblxuICAvLyBAbmFtZXNwYWNlIE1hcFxuICAvLyBAc2VjdGlvbiBJbnRlcmFjdGlvbiBPcHRpb25zXG4gIE1hcC5tZXJnZU9wdGlvbnMoe1xuICBcdC8vIEBzZWN0aW9uIFRvdWNoIGludGVyYWN0aW9uIG9wdGlvbnNcbiAgXHQvLyBAb3B0aW9uIHRvdWNoWm9vbTogQm9vbGVhbnxTdHJpbmcgPSAqXG4gIFx0Ly8gV2hldGhlciB0aGUgbWFwIGNhbiBiZSB6b29tZWQgYnkgdG91Y2gtZHJhZ2dpbmcgd2l0aCB0d28gZmluZ2Vycy4gSWZcbiAgXHQvLyBwYXNzZWQgYCdjZW50ZXInYCwgaXQgd2lsbCB6b29tIHRvIHRoZSBjZW50ZXIgb2YgdGhlIHZpZXcgcmVnYXJkbGVzcyBvZlxuICBcdC8vIHdoZXJlIHRoZSB0b3VjaCBldmVudHMgKGZpbmdlcnMpIHdlcmUuIEVuYWJsZWQgZm9yIHRvdWNoLWNhcGFibGUgd2ViXG4gIFx0Ly8gYnJvd3NlcnMgZXhjZXB0IGZvciBvbGQgQW5kcm9pZHMuXG4gIFx0dG91Y2hab29tOiB0b3VjaCAmJiAhYW5kcm9pZDIzLFxuXG4gIFx0Ly8gQG9wdGlvbiBib3VuY2VBdFpvb21MaW1pdHM6IEJvb2xlYW4gPSB0cnVlXG4gIFx0Ly8gU2V0IGl0IHRvIGZhbHNlIGlmIHlvdSBkb24ndCB3YW50IHRoZSBtYXAgdG8gem9vbSBiZXlvbmQgbWluL21heCB6b29tXG4gIFx0Ly8gYW5kIHRoZW4gYm91bmNlIGJhY2sgd2hlbiBwaW5jaC16b29taW5nLlxuICBcdGJvdW5jZUF0Wm9vbUxpbWl0czogdHJ1ZVxuICB9KTtcblxuICB2YXIgVG91Y2hab29tID0gSGFuZGxlci5leHRlbmQoe1xuICBcdGFkZEhvb2tzOiBmdW5jdGlvbiAoKSB7XG4gIFx0XHRhZGRDbGFzcyh0aGlzLl9tYXAuX2NvbnRhaW5lciwgJ2xlYWZsZXQtdG91Y2gtem9vbScpO1xuICBcdFx0b24odGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Ub3VjaFN0YXJ0LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0cmVtb3ZlSG9va3M6IGZ1bmN0aW9uICgpIHtcbiAgXHRcdHJlbW92ZUNsYXNzKHRoaXMuX21hcC5fY29udGFpbmVyLCAnbGVhZmxldC10b3VjaC16b29tJyk7XG4gIFx0XHRvZmYodGhpcy5fbWFwLl9jb250YWluZXIsICd0b3VjaHN0YXJ0JywgdGhpcy5fb25Ub3VjaFN0YXJ0LCB0aGlzKTtcbiAgXHR9LFxuXG4gIFx0X29uVG91Y2hTdGFydDogZnVuY3Rpb24gKGUpIHtcbiAgXHRcdHZhciBtYXAgPSB0aGlzLl9tYXA7XG4gIFx0XHRpZiAoIWUudG91Y2hlcyB8fCBlLnRvdWNoZXMubGVuZ3RoICE9PSAyIHx8IG1hcC5fYW5pbWF0aW5nWm9vbSB8fCB0aGlzLl96b29taW5nKSB7IHJldHVybjsgfVxuXG4gIFx0XHR2YXIgcDEgPSBtYXAubW91c2VFdmVudFRvQ29udGFpbmVyUG9pbnQoZS50b3VjaGVzWzBdKSxcbiAgXHRcdCAgICBwMiA9IG1hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLnRvdWNoZXNbMV0pO1xuXG4gIFx0XHR0aGlzLl9jZW50ZXJQb2ludCA9IG1hcC5nZXRTaXplKCkuX2RpdmlkZUJ5KDIpO1xuICBcdFx0dGhpcy5fc3RhcnRMYXRMbmcgPSBtYXAuY29udGFpbmVyUG9pbnRUb0xhdExuZyh0aGlzLl9jZW50ZXJQb2ludCk7XG4gIFx0XHRpZiAobWFwLm9wdGlvbnMudG91Y2hab29tICE9PSAnY2VudGVyJykge1xuICBcdFx0XHR0aGlzLl9waW5jaFN0YXJ0TGF0TG5nID0gbWFwLmNvbnRhaW5lclBvaW50VG9MYXRMbmcocDEuYWRkKHAyKS5fZGl2aWRlQnkoMikpO1xuICBcdFx0fVxuXG4gIFx0XHR0aGlzLl9zdGFydERpc3QgPSBwMS5kaXN0YW5jZVRvKHAyKTtcbiAgXHRcdHRoaXMuX3N0YXJ0Wm9vbSA9IG1hcC5nZXRab29tKCk7XG5cbiAgXHRcdHRoaXMuX21vdmVkID0gZmFsc2U7XG4gIFx0XHR0aGlzLl96b29taW5nID0gdHJ1ZTtcblxuICBcdFx0bWFwLl9zdG9wKCk7XG5cbiAgXHRcdG9uKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUsIHRoaXMpO1xuICBcdFx0b24oZG9jdW1lbnQsICd0b3VjaGVuZCcsIHRoaXMuX29uVG91Y2hFbmQsIHRoaXMpO1xuXG4gIFx0XHRwcmV2ZW50RGVmYXVsdChlKTtcbiAgXHR9LFxuXG4gIFx0X29uVG91Y2hNb3ZlOiBmdW5jdGlvbiAoZSkge1xuICBcdFx0aWYgKCFlLnRvdWNoZXMgfHwgZS50b3VjaGVzLmxlbmd0aCAhPT0gMiB8fCAhdGhpcy5fem9vbWluZykgeyByZXR1cm47IH1cblxuICBcdFx0dmFyIG1hcCA9IHRoaXMuX21hcCxcbiAgXHRcdCAgICBwMSA9IG1hcC5tb3VzZUV2ZW50VG9Db250YWluZXJQb2ludChlLnRvdWNoZXNbMF0pLFxuICBcdFx0ICAgIHAyID0gbWFwLm1vdXNlRXZlbnRUb0NvbnRhaW5lclBvaW50KGUudG91Y2hlc1sxXSksXG4gIFx0XHQgICAgc2NhbGUgPSBwMS5kaXN0YW5jZVRvKHAyKSAvIHRoaXMuX3N0YXJ0RGlzdDtcblxuICBcdFx0dGhpcy5fem9vbSA9IG1hcC5nZXRTY2FsZVpvb20oc2NhbGUsIHRoaXMuX3N0YXJ0Wm9vbSk7XG5cbiAgXHRcdGlmICghbWFwLm9wdGlvbnMuYm91bmNlQXRab29tTGltaXRzICYmIChcbiAgXHRcdFx0KHRoaXMuX3pvb20gPCBtYXAuZ2V0TWluWm9vbSgpICYmIHNjYWxlIDwgMSkgfHxcbiAgXHRcdFx0KHRoaXMuX3pvb20gPiBtYXAuZ2V0TWF4Wm9vbSgpICYmIHNjYWxlID4gMSkpKSB7XG4gIFx0XHRcdHRoaXMuX3pvb20gPSBtYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKTtcbiAgXHRcdH1cblxuICBcdFx0aWYgKG1hcC5vcHRpb25zLnRvdWNoWm9vbSA9PT0gJ2NlbnRlcicpIHtcbiAgXHRcdFx0dGhpcy5fY2VudGVyID0gdGhpcy5fc3RhcnRMYXRMbmc7XG4gIFx0XHRcdGlmIChzY2FsZSA9PT0gMSkgeyByZXR1cm47IH1cbiAgXHRcdH0gZWxzZSB7XG4gIFx0XHRcdC8vIEdldCBkZWx0YSBmcm9tIHBpbmNoIHRvIGNlbnRlciwgc28gY2VudGVyTGF0TG5nIGlzIGRlbHRhIGFwcGxpZWQgdG8gaW5pdGlhbCBwaW5jaExhdExuZ1xuICBcdFx0XHR2YXIgZGVsdGEgPSBwMS5fYWRkKHAyKS5fZGl2aWRlQnkoMikuX3N1YnRyYWN0KHRoaXMuX2NlbnRlclBvaW50KTtcbiAgXHRcdFx0aWYgKHNjYWxlID09PSAxICYmIGRlbHRhLnggPT09IDAgJiYgZGVsdGEueSA9PT0gMCkgeyByZXR1cm47IH1cbiAgXHRcdFx0dGhpcy5fY2VudGVyID0gbWFwLnVucHJvamVjdChtYXAucHJvamVjdCh0aGlzLl9waW5jaFN0YXJ0TGF0TG5nLCB0aGlzLl96b29tKS5zdWJ0cmFjdChkZWx0YSksIHRoaXMuX3pvb20pO1xuICBcdFx0fVxuXG4gIFx0XHRpZiAoIXRoaXMuX21vdmVkKSB7XG4gIFx0XHRcdG1hcC5fbW92ZVN0YXJ0KHRydWUsIGZhbHNlKTtcbiAgXHRcdFx0dGhpcy5fbW92ZWQgPSB0cnVlO1xuICBcdFx0fVxuXG4gIFx0XHRjYW5jZWxBbmltRnJhbWUodGhpcy5fYW5pbVJlcXVlc3QpO1xuXG4gIFx0XHR2YXIgbW92ZUZuID0gYmluZChtYXAuX21vdmUsIG1hcCwgdGhpcy5fY2VudGVyLCB0aGlzLl96b29tLCB7cGluY2g6IHRydWUsIHJvdW5kOiBmYWxzZX0pO1xuICBcdFx0dGhpcy5fYW5pbVJlcXVlc3QgPSByZXF1ZXN0QW5pbUZyYW1lKG1vdmVGbiwgdGhpcywgdHJ1ZSk7XG5cbiAgXHRcdHByZXZlbnREZWZhdWx0KGUpO1xuICBcdH0sXG5cbiAgXHRfb25Ub3VjaEVuZDogZnVuY3Rpb24gKCkge1xuICBcdFx0aWYgKCF0aGlzLl9tb3ZlZCB8fCAhdGhpcy5fem9vbWluZykge1xuICBcdFx0XHR0aGlzLl96b29taW5nID0gZmFsc2U7XG4gIFx0XHRcdHJldHVybjtcbiAgXHRcdH1cblxuICBcdFx0dGhpcy5fem9vbWluZyA9IGZhbHNlO1xuICBcdFx0Y2FuY2VsQW5pbUZyYW1lKHRoaXMuX2FuaW1SZXF1ZXN0KTtcblxuICBcdFx0b2ZmKGRvY3VtZW50LCAndG91Y2htb3ZlJywgdGhpcy5fb25Ub3VjaE1vdmUsIHRoaXMpO1xuICBcdFx0b2ZmKGRvY3VtZW50LCAndG91Y2hlbmQnLCB0aGlzLl9vblRvdWNoRW5kLCB0aGlzKTtcblxuICBcdFx0Ly8gUGluY2ggdXBkYXRlcyBHcmlkTGF5ZXJzJyBsZXZlbHMgb25seSB3aGVuIHpvb21TbmFwIGlzIG9mZiwgc28gem9vbVNuYXAgYmVjb21lcyBub1VwZGF0ZS5cbiAgXHRcdGlmICh0aGlzLl9tYXAub3B0aW9ucy56b29tQW5pbWF0aW9uKSB7XG4gIFx0XHRcdHRoaXMuX21hcC5fYW5pbWF0ZVpvb20odGhpcy5fY2VudGVyLCB0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSwgdHJ1ZSwgdGhpcy5fbWFwLm9wdGlvbnMuem9vbVNuYXApO1xuICBcdFx0fSBlbHNlIHtcbiAgXHRcdFx0dGhpcy5fbWFwLl9yZXNldFZpZXcodGhpcy5fY2VudGVyLCB0aGlzLl9tYXAuX2xpbWl0Wm9vbSh0aGlzLl96b29tKSk7XG4gIFx0XHR9XG4gIFx0fVxuICB9KTtcblxuICAvLyBAc2VjdGlvbiBIYW5kbGVyc1xuICAvLyBAcHJvcGVydHkgdG91Y2hab29tOiBIYW5kbGVyXG4gIC8vIFRvdWNoIHpvb20gaGFuZGxlci5cbiAgTWFwLmFkZEluaXRIb29rKCdhZGRIYW5kbGVyJywgJ3RvdWNoWm9vbScsIFRvdWNoWm9vbSk7XG5cbiAgTWFwLkJveFpvb20gPSBCb3hab29tO1xuICBNYXAuRG91YmxlQ2xpY2tab29tID0gRG91YmxlQ2xpY2tab29tO1xuICBNYXAuRHJhZyA9IERyYWc7XG4gIE1hcC5LZXlib2FyZCA9IEtleWJvYXJkO1xuICBNYXAuU2Nyb2xsV2hlZWxab29tID0gU2Nyb2xsV2hlZWxab29tO1xuICBNYXAuVGFwID0gVGFwO1xuICBNYXAuVG91Y2hab29tID0gVG91Y2hab29tO1xuXG4gIGV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247XG4gIGV4cG9ydHMuQ29udHJvbCA9IENvbnRyb2w7XG4gIGV4cG9ydHMuY29udHJvbCA9IGNvbnRyb2w7XG4gIGV4cG9ydHMuQnJvd3NlciA9IEJyb3dzZXI7XG4gIGV4cG9ydHMuRXZlbnRlZCA9IEV2ZW50ZWQ7XG4gIGV4cG9ydHMuTWl4aW4gPSBNaXhpbjtcbiAgZXhwb3J0cy5VdGlsID0gVXRpbDtcbiAgZXhwb3J0cy5DbGFzcyA9IENsYXNzO1xuICBleHBvcnRzLkhhbmRsZXIgPSBIYW5kbGVyO1xuICBleHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbiAgZXhwb3J0cy5iaW5kID0gYmluZDtcbiAgZXhwb3J0cy5zdGFtcCA9IHN0YW1wO1xuICBleHBvcnRzLnNldE9wdGlvbnMgPSBzZXRPcHRpb25zO1xuICBleHBvcnRzLkRvbUV2ZW50ID0gRG9tRXZlbnQ7XG4gIGV4cG9ydHMuRG9tVXRpbCA9IERvbVV0aWw7XG4gIGV4cG9ydHMuUG9zQW5pbWF0aW9uID0gUG9zQW5pbWF0aW9uO1xuICBleHBvcnRzLkRyYWdnYWJsZSA9IERyYWdnYWJsZTtcbiAgZXhwb3J0cy5MaW5lVXRpbCA9IExpbmVVdGlsO1xuICBleHBvcnRzLlBvbHlVdGlsID0gUG9seVV0aWw7XG4gIGV4cG9ydHMuUG9pbnQgPSBQb2ludDtcbiAgZXhwb3J0cy5wb2ludCA9IHRvUG9pbnQ7XG4gIGV4cG9ydHMuQm91bmRzID0gQm91bmRzO1xuICBleHBvcnRzLmJvdW5kcyA9IHRvQm91bmRzO1xuICBleHBvcnRzLlRyYW5zZm9ybWF0aW9uID0gVHJhbnNmb3JtYXRpb247XG4gIGV4cG9ydHMudHJhbnNmb3JtYXRpb24gPSB0b1RyYW5zZm9ybWF0aW9uO1xuICBleHBvcnRzLlByb2plY3Rpb24gPSBpbmRleDtcbiAgZXhwb3J0cy5MYXRMbmcgPSBMYXRMbmc7XG4gIGV4cG9ydHMubGF0TG5nID0gdG9MYXRMbmc7XG4gIGV4cG9ydHMuTGF0TG5nQm91bmRzID0gTGF0TG5nQm91bmRzO1xuICBleHBvcnRzLmxhdExuZ0JvdW5kcyA9IHRvTGF0TG5nQm91bmRzO1xuICBleHBvcnRzLkNSUyA9IENSUztcbiAgZXhwb3J0cy5HZW9KU09OID0gR2VvSlNPTjtcbiAgZXhwb3J0cy5nZW9KU09OID0gZ2VvSlNPTjtcbiAgZXhwb3J0cy5nZW9Kc29uID0gZ2VvSnNvbjtcbiAgZXhwb3J0cy5MYXllciA9IExheWVyO1xuICBleHBvcnRzLkxheWVyR3JvdXAgPSBMYXllckdyb3VwO1xuICBleHBvcnRzLmxheWVyR3JvdXAgPSBsYXllckdyb3VwO1xuICBleHBvcnRzLkZlYXR1cmVHcm91cCA9IEZlYXR1cmVHcm91cDtcbiAgZXhwb3J0cy5mZWF0dXJlR3JvdXAgPSBmZWF0dXJlR3JvdXA7XG4gIGV4cG9ydHMuSW1hZ2VPdmVybGF5ID0gSW1hZ2VPdmVybGF5O1xuICBleHBvcnRzLmltYWdlT3ZlcmxheSA9IGltYWdlT3ZlcmxheTtcbiAgZXhwb3J0cy5WaWRlb092ZXJsYXkgPSBWaWRlb092ZXJsYXk7XG4gIGV4cG9ydHMudmlkZW9PdmVybGF5ID0gdmlkZW9PdmVybGF5O1xuICBleHBvcnRzLlNWR092ZXJsYXkgPSBTVkdPdmVybGF5O1xuICBleHBvcnRzLnN2Z092ZXJsYXkgPSBzdmdPdmVybGF5O1xuICBleHBvcnRzLkRpdk92ZXJsYXkgPSBEaXZPdmVybGF5O1xuICBleHBvcnRzLlBvcHVwID0gUG9wdXA7XG4gIGV4cG9ydHMucG9wdXAgPSBwb3B1cDtcbiAgZXhwb3J0cy5Ub29sdGlwID0gVG9vbHRpcDtcbiAgZXhwb3J0cy50b29sdGlwID0gdG9vbHRpcDtcbiAgZXhwb3J0cy5JY29uID0gSWNvbjtcbiAgZXhwb3J0cy5pY29uID0gaWNvbjtcbiAgZXhwb3J0cy5EaXZJY29uID0gRGl2SWNvbjtcbiAgZXhwb3J0cy5kaXZJY29uID0gZGl2SWNvbjtcbiAgZXhwb3J0cy5NYXJrZXIgPSBNYXJrZXI7XG4gIGV4cG9ydHMubWFya2VyID0gbWFya2VyO1xuICBleHBvcnRzLlRpbGVMYXllciA9IFRpbGVMYXllcjtcbiAgZXhwb3J0cy50aWxlTGF5ZXIgPSB0aWxlTGF5ZXI7XG4gIGV4cG9ydHMuR3JpZExheWVyID0gR3JpZExheWVyO1xuICBleHBvcnRzLmdyaWRMYXllciA9IGdyaWRMYXllcjtcbiAgZXhwb3J0cy5TVkcgPSBTVkc7XG4gIGV4cG9ydHMuc3ZnID0gc3ZnJDE7XG4gIGV4cG9ydHMuUmVuZGVyZXIgPSBSZW5kZXJlcjtcbiAgZXhwb3J0cy5DYW52YXMgPSBDYW52YXM7XG4gIGV4cG9ydHMuY2FudmFzID0gY2FudmFzJDE7XG4gIGV4cG9ydHMuUGF0aCA9IFBhdGg7XG4gIGV4cG9ydHMuQ2lyY2xlTWFya2VyID0gQ2lyY2xlTWFya2VyO1xuICBleHBvcnRzLmNpcmNsZU1hcmtlciA9IGNpcmNsZU1hcmtlcjtcbiAgZXhwb3J0cy5DaXJjbGUgPSBDaXJjbGU7XG4gIGV4cG9ydHMuY2lyY2xlID0gY2lyY2xlO1xuICBleHBvcnRzLlBvbHlsaW5lID0gUG9seWxpbmU7XG4gIGV4cG9ydHMucG9seWxpbmUgPSBwb2x5bGluZTtcbiAgZXhwb3J0cy5Qb2x5Z29uID0gUG9seWdvbjtcbiAgZXhwb3J0cy5wb2x5Z29uID0gcG9seWdvbjtcbiAgZXhwb3J0cy5SZWN0YW5nbGUgPSBSZWN0YW5nbGU7XG4gIGV4cG9ydHMucmVjdGFuZ2xlID0gcmVjdGFuZ2xlO1xuICBleHBvcnRzLk1hcCA9IE1hcDtcbiAgZXhwb3J0cy5tYXAgPSBjcmVhdGVNYXA7XG5cbiAgdmFyIG9sZEwgPSB3aW5kb3cuTDtcbiAgZXhwb3J0cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oKSB7XG4gIFx0d2luZG93LkwgPSBvbGRMO1xuICBcdHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gQWx3YXlzIGV4cG9ydCB1cyB0byB3aW5kb3cgZ2xvYmFsIChzZWUgIzIzNjQpXG4gIHdpbmRvdy5MID0gZXhwb3J0cztcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWxlYWZsZXQtc3JjLmpzLm1hcFxuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9sZWFmbGV0LmNzc1wiKTtcblxuaWYodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSBjb250ZW50ID0gW1ttb2R1bGUuaWQsIGNvbnRlbnQsICcnXV07XG5cbnZhciB0cmFuc2Zvcm07XG52YXIgaW5zZXJ0SW50bztcblxuXG5cbnZhciBvcHRpb25zID0ge1wiaG1yXCI6dHJ1ZX1cblxub3B0aW9ucy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1cbm9wdGlvbnMuaW5zZXJ0SW50byA9IHVuZGVmaW5lZDtcblxudmFyIHVwZGF0ZSA9IHJlcXVpcmUoXCIhLi4vLi4vc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbGVhZmxldC5jc3NcIiwgZnVuY3Rpb24oKSB7XG5cdFx0dmFyIG5ld0NvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vbGVhZmxldC5jc3NcIik7XG5cblx0XHRpZih0eXBlb2YgbmV3Q29udGVudCA9PT0gJ3N0cmluZycpIG5ld0NvbnRlbnQgPSBbW21vZHVsZS5pZCwgbmV3Q29udGVudCwgJyddXTtcblxuXHRcdHZhciBsb2NhbHMgPSAoZnVuY3Rpb24oYSwgYikge1xuXHRcdFx0dmFyIGtleSwgaWR4ID0gMDtcblxuXHRcdFx0Zm9yKGtleSBpbiBhKSB7XG5cdFx0XHRcdGlmKCFiIHx8IGFba2V5XSAhPT0gYltrZXldKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRcdGlkeCsrO1xuXHRcdFx0fVxuXG5cdFx0XHRmb3Ioa2V5IGluIGIpIGlkeC0tO1xuXG5cdFx0XHRyZXR1cm4gaWR4ID09PSAwO1xuXHRcdH0oY29udGVudC5sb2NhbHMsIG5ld0NvbnRlbnQubG9jYWxzKSk7XG5cblx0XHRpZighbG9jYWxzKSB0aHJvdyBuZXcgRXJyb3IoJ0Fib3J0aW5nIENTUyBITVIgZHVlIHRvIGNoYW5nZWQgY3NzLW1vZHVsZXMgbG9jYWxzLicpO1xuXG5cdFx0dXBkYXRlKG5ld0NvbnRlbnQpO1xuXHR9KTtcblxuXHRtb2R1bGUuaG90LmRpc3Bvc2UoZnVuY3Rpb24oKSB7IHVwZGF0ZSgpOyB9KTtcbn0iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvZ2V0VXJsLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18gZnJvbSBcIi4vaW1hZ2VzL2xheWVycy5wbmdcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMV9fXyBmcm9tIFwiLi9pbWFnZXMvbGF5ZXJzLTJ4LnBuZ1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fIGZyb20gXCIuL2ltYWdlcy9tYXJrZXItaWNvbi5wbmdcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbnZhciBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8wX19fID0gX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX1VSTF9JTVBPUlRfMF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMV9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8yX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qIHJlcXVpcmVkIHN0eWxlcyAqL1xcclxcblxcclxcbi5sZWFmbGV0LXBhbmUsXFxyXFxuLmxlYWZsZXQtdGlsZSxcXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93LFxcclxcbi5sZWFmbGV0LXRpbGUtY29udGFpbmVyLFxcclxcbi5sZWFmbGV0LXBhbmUgPiBzdmcsXFxyXFxuLmxlYWZsZXQtcGFuZSA+IGNhbnZhcyxcXHJcXG4ubGVhZmxldC16b29tLWJveCxcXHJcXG4ubGVhZmxldC1pbWFnZS1sYXllcixcXHJcXG4ubGVhZmxldC1sYXllciB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdGxlZnQ6IDA7XFxyXFxuXFx0dG9wOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIge1xcclxcblxcdG92ZXJmbG93OiBoaWRkZW47XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRpbGUsXFxyXFxuLmxlYWZsZXQtbWFya2VyLWljb24sXFxyXFxuLmxlYWZsZXQtbWFya2VyLXNoYWRvdyB7XFxyXFxuXFx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHQgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdCAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0ICAtd2Via2l0LXVzZXItZHJhZzogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLyogUHJldmVudHMgSUUxMSBmcm9tIGhpZ2hsaWdodGluZyB0aWxlcyBpbiBibHVlICovXFxyXFxuLmxlYWZsZXQtdGlsZTo6c2VsZWN0aW9uIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG59XFxyXFxuLyogU2FmYXJpIHJlbmRlcnMgbm9uLXJldGluYSB0aWxlIG9uIHJldGluYSBiZXR0ZXIgd2l0aCB0aGlzLCBidXQgQ2hyb21lIGlzIHdvcnNlICovXFxyXFxuLmxlYWZsZXQtc2FmYXJpIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdGltYWdlLXJlbmRlcmluZzogLXdlYmtpdC1vcHRpbWl6ZS1jb250cmFzdDtcXHJcXG5cXHR9XFxyXFxuLyogaGFjayB0aGF0IHByZXZlbnRzIGh3IGxheWVycyBcXFwic3RyZXRjaGluZ1xcXCIgd2hlbiBsb2FkaW5nIG5ldyB0aWxlcyAqL1xcclxcbi5sZWFmbGV0LXNhZmFyaSAubGVhZmxldC10aWxlLWNvbnRhaW5lciB7XFxyXFxuXFx0d2lkdGg6IDE2MDBweDtcXHJcXG5cXHRoZWlnaHQ6IDE2MDBweDtcXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtbWFya2VyLWljb24sXFxyXFxuLmxlYWZsZXQtbWFya2VyLXNoYWRvdyB7XFxyXFxuXFx0ZGlzcGxheTogYmxvY2s7XFxyXFxuXFx0fVxcclxcbi8qIC5sZWFmbGV0LWNvbnRhaW5lciBzdmc6IHJlc2V0IHN2ZyBtYXgtd2lkdGggZGVjbGVyYXRpb24gc2hpcHBlZCBpbiBKb29tbGEhIChqb29tbGEub3JnKSAzLnggKi9cXHJcXG4vKiAubGVhZmxldC1jb250YWluZXIgaW1nOiBtYXAgaXMgYnJva2VuIGluIEZGIGlmIHlvdSBoYXZlIG1heC13aWR0aDogMTAwJSBvbiB0aWxlcyAqL1xcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1vdmVybGF5LXBhbmUgc3ZnLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1tYXJrZXItcGFuZSBpbWcsXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXNoYWRvdy1wYW5lIGltZyxcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtdGlsZS1wYW5lIGltZyxcXHJcXG4ubGVhZmxldC1jb250YWluZXIgaW1nLmxlYWZsZXQtaW1hZ2UtbGF5ZXIsXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50O1xcclxcblxcdG1heC1oZWlnaHQ6IG5vbmUgIWltcG9ydGFudDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtem9vbSB7XFxyXFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogcGFuLXggcGFuLXk7XFxyXFxuXFx0dG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyLmxlYWZsZXQtdG91Y2gtZHJhZyB7XFxyXFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogcGluY2gtem9vbTtcXHJcXG5cXHQvKiBGYWxsYmFjayBmb3IgRkYgd2hpY2ggZG9lc24ndCBzdXBwb3J0IHBpbmNoLXpvb20gKi9cXHJcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxyXFxuXFx0dG91Y2gtYWN0aW9uOiBwaW5jaC16b29tO1xcclxcbn1cXHJcXG4ubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC1kcmFnLmxlYWZsZXQtdG91Y2gtem9vbSB7XFxyXFxuXFx0LW1zLXRvdWNoLWFjdGlvbjogbm9uZTtcXHJcXG5cXHR0b3VjaC1hY3Rpb246IG5vbmU7XFxyXFxufVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIGEge1xcclxcblxcdC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSg1MSwgMTgxLCAyMjksIDAuNCk7XFxyXFxufVxcclxcbi5sZWFmbGV0LXRpbGUge1xcclxcblxcdGZpbHRlcjogaW5oZXJpdDtcXHJcXG5cXHR2aXNpYmlsaXR5OiBoaWRkZW47XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRpbGUtbG9hZGVkIHtcXHJcXG5cXHR2aXNpYmlsaXR5OiBpbmhlcml0O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWJveCB7XFxyXFxuXFx0d2lkdGg6IDA7XFxyXFxuXFx0aGVpZ2h0OiAwO1xcclxcblxcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG5cXHQgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuXFx0ei1pbmRleDogODAwO1xcclxcblxcdH1cXHJcXG4vKiB3b3JrYXJvdW5kIGZvciBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD04ODgzMTkgKi9cXHJcXG4ubGVhZmxldC1vdmVybGF5LXBhbmUgc3ZnIHtcXHJcXG5cXHQtbW96LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC1wYW5lICAgICAgICAgeyB6LWluZGV4OiA0MDA7IH1cXHJcXG5cXHJcXG4ubGVhZmxldC10aWxlLXBhbmUgICAgeyB6LWluZGV4OiAyMDA7IH1cXHJcXG4ubGVhZmxldC1vdmVybGF5LXBhbmUgeyB6LWluZGV4OiA0MDA7IH1cXHJcXG4ubGVhZmxldC1zaGFkb3ctcGFuZSAgeyB6LWluZGV4OiA1MDA7IH1cXHJcXG4ubGVhZmxldC1tYXJrZXItcGFuZSAgeyB6LWluZGV4OiA2MDA7IH1cXHJcXG4ubGVhZmxldC10b29sdGlwLXBhbmUgICB7IHotaW5kZXg6IDY1MDsgfVxcclxcbi5sZWFmbGV0LXBvcHVwLXBhbmUgICB7IHotaW5kZXg6IDcwMDsgfVxcclxcblxcclxcbi5sZWFmbGV0LW1hcC1wYW5lIGNhbnZhcyB7IHotaW5kZXg6IDEwMDsgfVxcclxcbi5sZWFmbGV0LW1hcC1wYW5lIHN2ZyAgICB7IHotaW5kZXg6IDIwMDsgfVxcclxcblxcclxcbi5sZWFmbGV0LXZtbC1zaGFwZSB7XFxyXFxuXFx0d2lkdGg6IDFweDtcXHJcXG5cXHRoZWlnaHQ6IDFweDtcXHJcXG5cXHR9XFxyXFxuLmx2bWwge1xcclxcblxcdGJlaGF2aW9yOiB1cmwoI2RlZmF1bHQjVk1MKTtcXHJcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBjb250cm9sIHBvc2l0aW9uaW5nICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcclxcblxcdHotaW5kZXg6IDgwMDtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogdmlzaWJsZVBhaW50ZWQ7IC8qIElFIDktMTAgZG9lc24ndCBoYXZlIGF1dG8gKi9cXHJcXG5cXHRwb2ludGVyLWV2ZW50czogYXV0bztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9wLFxcclxcbi5sZWFmbGV0LWJvdHRvbSB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHotaW5kZXg6IDEwMDA7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvcCB7XFxyXFxuXFx0dG9wOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1yaWdodCB7XFxyXFxuXFx0cmlnaHQ6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJvdHRvbSB7XFxyXFxuXFx0Ym90dG9tOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1sZWZ0IHtcXHJcXG5cXHRsZWZ0OiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRmbG9hdDogbGVmdDtcXHJcXG5cXHRjbGVhcjogYm90aDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcmlnaHQgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0ZmxvYXQ6IHJpZ2h0O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3AgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLXRvcDogMTBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYm90dG9tIC5sZWFmbGV0LWNvbnRyb2wge1xcclxcblxcdG1hcmdpbi1ib3R0b206IDEwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWxlZnQgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IDEwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXJpZ2h0IC5sZWFmbGV0LWNvbnRyb2wge1xcclxcblxcdG1hcmdpbi1yaWdodDogMTBweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogem9vbSBhbmQgZmFkZSBhbmltYXRpb25zICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtZmFkZS1hbmltIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdHdpbGwtY2hhbmdlOiBvcGFjaXR5O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1mYWRlLWFuaW0gLmxlYWZsZXQtcG9wdXAge1xcclxcblxcdG9wYWNpdHk6IDA7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyO1xcclxcblxcdCAgIC1tb3otdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjtcXHJcXG5cXHQgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBsaW5lYXI7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWZhZGUtYW5pbSAubGVhZmxldC1tYXAtcGFuZSAubGVhZmxldC1wb3B1cCB7XFxyXFxuXFx0b3BhY2l0eTogMTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtem9vbS1hbmltYXRlZCB7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxyXFxuXFx0ICAgIC1tcy10cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxyXFxuXFx0ICAgICAgICB0cmFuc2Zvcm0tb3JpZ2luOiAwIDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHtcXHJcXG5cXHR3aWxsLWNoYW5nZTogdHJhbnNmb3JtO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWFuaW0gLmxlYWZsZXQtem9vbS1hbmltYXRlZCB7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7XFxyXFxuXFx0ICAgLW1vei10cmFuc2l0aW9uOiAgICAtbW96LXRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7XFxyXFxuXFx0ICAgICAgICB0cmFuc2l0aW9uOiAgICAgICAgIHRyYW5zZm9ybSAwLjI1cyBjdWJpYy1iZXppZXIoMCwwLDAuMjUsMSk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC10aWxlLFxcclxcbi5sZWFmbGV0LXBhbi1hbmltIC5sZWFmbGV0LXRpbGUge1xcclxcblxcdC13ZWJraXQtdHJhbnNpdGlvbjogbm9uZTtcXHJcXG5cXHQgICAtbW96LXRyYW5zaXRpb246IG5vbmU7XFxyXFxuXFx0ICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC16b29tLWFuaW0gLmxlYWZsZXQtem9vbS1oaWRlIHtcXHJcXG5cXHR2aXNpYmlsaXR5OiBoaWRkZW47XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGN1cnNvcnMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1pbnRlcmFjdGl2ZSB7XFxyXFxuXFx0Y3Vyc29yOiBwb2ludGVyO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1ncmFiIHtcXHJcXG5cXHRjdXJzb3I6IC13ZWJraXQtZ3JhYjtcXHJcXG5cXHRjdXJzb3I6ICAgIC1tb3otZ3JhYjtcXHJcXG5cXHRjdXJzb3I6ICAgICAgICAgZ3JhYjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY3Jvc3NoYWlyLFxcclxcbi5sZWFmbGV0LWNyb3NzaGFpciAubGVhZmxldC1pbnRlcmFjdGl2ZSB7XFxyXFxuXFx0Y3Vyc29yOiBjcm9zc2hhaXI7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXBhbmUsXFxyXFxuLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0Y3Vyc29yOiBhdXRvO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1ncmFiLFxcclxcbi5sZWFmbGV0LWRyYWdnaW5nIC5sZWFmbGV0LWdyYWIgLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuLmxlYWZsZXQtZHJhZ2dpbmcgLmxlYWZsZXQtbWFya2VyLWRyYWdnYWJsZSB7XFxyXFxuXFx0Y3Vyc29yOiBtb3ZlO1xcclxcblxcdGN1cnNvcjogLXdlYmtpdC1ncmFiYmluZztcXHJcXG5cXHRjdXJzb3I6ICAgIC1tb3otZ3JhYmJpbmc7XFxyXFxuXFx0Y3Vyc29yOiAgICAgICAgIGdyYWJiaW5nO1xcclxcblxcdH1cXHJcXG5cXHJcXG4vKiBtYXJrZXIgJiBvdmVybGF5cyBpbnRlcmFjdGl2aXR5ICovXFxyXFxuLmxlYWZsZXQtbWFya2VyLWljb24sXFxyXFxuLmxlYWZsZXQtbWFya2VyLXNoYWRvdyxcXHJcXG4ubGVhZmxldC1pbWFnZS1sYXllcixcXHJcXG4ubGVhZmxldC1wYW5lID4gc3ZnIHBhdGgsXFxyXFxuLmxlYWZsZXQtdGlsZS1jb250YWluZXIge1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbi5sZWFmbGV0LWludGVyYWN0aXZlLFxcclxcbi5sZWFmbGV0LWltYWdlLWxheWVyLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuLmxlYWZsZXQtcGFuZSA+IHN2ZyBwYXRoLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuc3ZnLmxlYWZsZXQtaW1hZ2UtbGF5ZXIubGVhZmxldC1pbnRlcmFjdGl2ZSBwYXRoIHtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogdmlzaWJsZVBhaW50ZWQ7IC8qIElFIDktMTAgZG9lc24ndCBoYXZlIGF1dG8gKi9cXHJcXG5cXHRwb2ludGVyLWV2ZW50czogYXV0bztcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLyogdmlzdWFsIHR3ZWFrcyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0YmFja2dyb3VuZDogI2RkZDtcXHJcXG5cXHRvdXRsaW5lOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYSB7XFxyXFxuXFx0Y29sb3I6ICMwMDc4QTg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBhLmxlYWZsZXQtYWN0aXZlIHtcXHJcXG5cXHRvdXRsaW5lOiAycHggc29saWQgb3JhbmdlO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWJveCB7XFxyXFxuXFx0Ym9yZGVyOiAycHggZG90dGVkICMzOGY7XFxyXFxuXFx0YmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjUpO1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBnZW5lcmFsIHR5cG9ncmFwaHkgKi9cXHJcXG4ubGVhZmxldC1jb250YWluZXIge1xcclxcblxcdGZvbnQ6IDEycHgvMS41IFxcXCJIZWx2ZXRpY2EgTmV1ZVxcXCIsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGdlbmVyYWwgdG9vbGJhciBzdHlsZXMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1iYXIge1xcclxcblxcdGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuNjUpO1xcclxcblxcdGJvcmRlci1yYWRpdXM6IDRweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGEsXFxyXFxuLmxlYWZsZXQtYmFyIGE6aG92ZXIge1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNjY2M7XFxyXFxuXFx0d2lkdGg6IDI2cHg7XFxyXFxuXFx0aGVpZ2h0OiAyNnB4O1xcclxcblxcdGxpbmUtaGVpZ2h0OiAyNnB4O1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuXFx0Y29sb3I6IGJsYWNrO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYSxcXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGJhY2tncm91bmQtcG9zaXRpb246IDUwJSA1MCU7XFxyXFxuXFx0YmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGE6aG92ZXIge1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJhciBhOmZpcnN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiA0cHg7XFxyXFxuXFx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDRweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGE6bGFzdC1jaGlsZCB7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogNHB4O1xcclxcblxcdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA0cHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGEubGVhZmxldC1kaXNhYmxlZCB7XFxyXFxuXFx0Y3Vyc29yOiBkZWZhdWx0O1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmNGY0ZjQ7XFxyXFxuXFx0Y29sb3I6ICNiYmI7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciBhIHtcXHJcXG5cXHR3aWR0aDogMzBweDtcXHJcXG5cXHRoZWlnaHQ6IDMwcHg7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDMwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciBhOmZpcnN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAycHg7XFxyXFxuXFx0Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDJweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIGE6bGFzdC1jaGlsZCB7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMnB4O1xcclxcblxcdGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAycHg7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIHpvb20gY29udHJvbCAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRyb2wtem9vbS1pbixcXHJcXG4ubGVhZmxldC1jb250cm9sLXpvb20tb3V0IHtcXHJcXG5cXHRmb250OiBib2xkIDE4cHggJ0x1Y2lkYSBDb25zb2xlJywgTW9uYWNvLCBtb25vc3BhY2U7XFxyXFxuXFx0dGV4dC1pbmRlbnQ6IDFweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC16b29tLWluLCAubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLXpvb20tb3V0ICB7XFxyXFxuXFx0Zm9udC1zaXplOiAyMnB4O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBsYXllcnMgY29udHJvbCAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIHtcXHJcXG5cXHRib3gtc2hhZG93OiAwIDFweCA1cHggcmdiYSgwLDAsMCwwLjQpO1xcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogNXB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzBfX18gKyBcIik7XFxyXFxuXFx0d2lkdGg6IDM2cHg7XFxyXFxuXFx0aGVpZ2h0OiAzNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1yZXRpbmEgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtdG9nZ2xlIHtcXHJcXG5cXHRiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcclxcblxcdGJhY2tncm91bmQtc2l6ZTogMjZweCAyNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdHdpZHRoOiA0NHB4O1xcclxcblxcdGhlaWdodDogNDRweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtbGlzdCxcXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGRpc3BsYXk6IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWxpc3Qge1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQge1xcclxcblxcdHBhZGRpbmc6IDZweCAxMHB4IDZweCA2cHg7XFxyXFxuXFx0Y29sb3I6ICMzMzM7XFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2Nyb2xsYmFyIHtcXHJcXG5cXHRvdmVyZmxvdy15OiBzY3JvbGw7XFxyXFxuXFx0b3ZlcmZsb3cteDogaGlkZGVuO1xcclxcblxcdHBhZGRpbmctcmlnaHQ6IDVweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VsZWN0b3Ige1xcclxcblxcdG1hcmdpbi10b3A6IDJweDtcXHJcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFx0dG9wOiAxcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzIGxhYmVsIHtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtc2VwYXJhdG9yIHtcXHJcXG5cXHRoZWlnaHQ6IDA7XFxyXFxuXFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XFxyXFxuXFx0bWFyZ2luOiA1cHggLTEwcHggNXB4IC02cHg7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIERlZmF1bHQgaWNvbiBVUkxzICovXFxyXFxuLmxlYWZsZXQtZGVmYXVsdC1pY29uLXBhdGgge1xcclxcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChcIiArIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzJfX18gKyBcIik7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGF0dHJpYnV0aW9uIGFuZCBzY2FsZSBjb250cm9scyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43KTtcXHJcXG5cXHRtYXJnaW46IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sXFxyXFxuLmxlYWZsZXQtY29udHJvbC1zY2FsZS1saW5lIHtcXHJcXG5cXHRwYWRkaW5nOiAwIDVweDtcXHJcXG5cXHRjb2xvcjogIzMzMztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiBhIHtcXHJcXG5cXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24gYTpob3ZlciB7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC1jb250cm9sLXNjYWxlIHtcXHJcXG5cXHRmb250LXNpemU6IDExcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWxlZnQgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IDVweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYm90dG9tIC5sZWFmbGV0LWNvbnRyb2wtc2NhbGUge1xcclxcblxcdG1hcmdpbi1ib3R0b206IDVweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1zY2FsZS1saW5lIHtcXHJcXG5cXHRib3JkZXI6IDJweCBzb2xpZCAjNzc3O1xcclxcblxcdGJvcmRlci10b3A6IG5vbmU7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDEuMTtcXHJcXG5cXHRwYWRkaW5nOiAycHggNXB4IDFweDtcXHJcXG5cXHRmb250LXNpemU6IDExcHg7XFxyXFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcclxcblxcdC1tb3otYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG5cXHQgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuXFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZTpub3QoOmZpcnN0LWNoaWxkKSB7XFxyXFxuXFx0Ym9yZGVyLXRvcDogMnB4IHNvbGlkICM3Nzc7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogbm9uZTtcXHJcXG5cXHRtYXJnaW4tdG9wOiAtMnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmU6bm90KDpmaXJzdC1jaGlsZCk6bm90KDpsYXN0LWNoaWxkKSB7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICM3Nzc7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24sXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMsXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIHtcXHJcXG5cXHRib3gtc2hhZG93OiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLWxheWVycyxcXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIge1xcclxcblxcdGJvcmRlcjogMnB4IHNvbGlkIHJnYmEoMCwwLDAsMC4yKTtcXHJcXG5cXHRiYWNrZ3JvdW5kLWNsaXA6IHBhZGRpbmctYm94O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBwb3B1cCAqL1xcclxcblxcclxcbi5sZWFmbGV0LXBvcHVwIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcclxcblxcdG1hcmdpbi1ib3R0b206IDIwcHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciB7XFxyXFxuXFx0cGFkZGluZzogMXB4O1xcclxcblxcdHRleHQtYWxpZ246IGxlZnQ7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogMTJweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtY29udGVudCB7XFxyXFxuXFx0bWFyZ2luOiAxM3B4IDE5cHg7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDEuNDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtY29udGVudCBwIHtcXHJcXG5cXHRtYXJnaW46IDE4cHggMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtdGlwLWNvbnRhaW5lciB7XFxyXFxuXFx0d2lkdGg6IDQwcHg7XFxyXFxuXFx0aGVpZ2h0OiAyMHB4O1xcclxcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXHJcXG5cXHRsZWZ0OiA1MCU7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IC0yMHB4O1xcclxcblxcdG92ZXJmbG93OiBoaWRkZW47XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXRpcCB7XFxyXFxuXFx0d2lkdGg6IDE3cHg7XFxyXFxuXFx0aGVpZ2h0OiAxN3B4O1xcclxcblxcdHBhZGRpbmc6IDFweDtcXHJcXG5cXHJcXG5cXHRtYXJnaW46IC0xMHB4IGF1dG8gMDtcXHJcXG5cXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHQgICAtbW96LXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHQgICAgLW1zLXRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyLFxcclxcbi5sZWFmbGV0LXBvcHVwLXRpcCB7XFxyXFxuXFx0YmFja2dyb3VuZDogd2hpdGU7XFxyXFxuXFx0Y29sb3I6ICMzMzM7XFxyXFxuXFx0Ym94LXNoYWRvdzogMCAzcHggMTRweCByZ2JhKDAsMCwwLDAuNCk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBhLmxlYWZsZXQtcG9wdXAtY2xvc2UtYnV0dG9uIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0dG9wOiAwO1xcclxcblxcdHJpZ2h0OiAwO1xcclxcblxcdHBhZGRpbmc6IDRweCA0cHggMCAwO1xcclxcblxcdGJvcmRlcjogbm9uZTtcXHJcXG5cXHR0ZXh0LWFsaWduOiBjZW50ZXI7XFxyXFxuXFx0d2lkdGg6IDE4cHg7XFxyXFxuXFx0aGVpZ2h0OiAxNHB4O1xcclxcblxcdGZvbnQ6IDE2cHgvMTRweCBUYWhvbWEsIFZlcmRhbmEsIHNhbnMtc2VyaWY7XFxyXFxuXFx0Y29sb3I6ICNjM2MzYzM7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcblxcdGZvbnQtd2VpZ2h0OiBib2xkO1xcclxcblxcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbjpob3ZlciB7XFxyXFxuXFx0Y29sb3I6ICM5OTk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXNjcm9sbGVkIHtcXHJcXG5cXHRvdmVyZmxvdzogYXV0bztcXHJcXG5cXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2RkZDtcXHJcXG5cXHRib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtY29udGVudC13cmFwcGVyIHtcXHJcXG5cXHQtbXMtem9vbTogMTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwIHtcXHJcXG5cXHR3aWR0aDogMjRweDtcXHJcXG5cXHRtYXJnaW46IDAgYXV0bztcXHJcXG5cXHJcXG5cXHQtbXMtZmlsdGVyOiBcXFwicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0Lk1hdHJpeChNMTE9MC43MDcxMDY3OCwgTTEyPTAuNzA3MTA2NzgsIE0yMT0tMC43MDcxMDY3OCwgTTIyPTAuNzA3MTA2NzgpXFxcIjtcXHJcXG5cXHRmaWx0ZXI6IHByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5NYXRyaXgoTTExPTAuNzA3MTA2NzgsIE0xMj0wLjcwNzEwNjc4LCBNMjE9LTAuNzA3MTA2NzgsIE0yMj0wLjcwNzEwNjc4KTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwLWNvbnRhaW5lciB7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTFweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtY29udHJvbC16b29tLFxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLFxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlcixcXHJcXG4ubGVhZmxldC1vbGRpZSAubGVhZmxldC1wb3B1cC10aXAge1xcclxcblxcdGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGRpdiBpY29uICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtZGl2LWljb24ge1xcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyOiAxcHggc29saWQgIzY2NjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogVG9vbHRpcCAqL1xcclxcbi8qIEJhc2Ugc3R5bGVzIGZvciB0aGUgZWxlbWVudCB0aGF0IGhhcyBhIHRvb2x0aXAgKi9cXHJcXG4ubGVhZmxldC10b29sdGlwIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0cGFkZGluZzogNnB4O1xcclxcblxcdGJhY2tncm91bmQtY29sb3I6ICNmZmY7XFxyXFxuXFx0Ym9yZGVyOiAxcHggc29saWQgI2ZmZjtcXHJcXG5cXHRib3JkZXItcmFkaXVzOiAzcHg7XFxyXFxuXFx0Y29sb3I6ICMyMjI7XFxyXFxuXFx0d2hpdGUtc3BhY2U6IG5vd3JhcDtcXHJcXG5cXHQtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0LW1zLXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdHVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsMCwwLDAuNCk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvb2x0aXAubGVhZmxldC1jbGlja2FibGUge1xcclxcblxcdGN1cnNvcjogcG9pbnRlcjtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogYXV0bztcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC10b3A6YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtYm90dG9tOmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0Ym9yZGVyOiA2cHggc29saWQgdHJhbnNwYXJlbnQ7XFxyXFxuXFx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxyXFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIERpcmVjdGlvbnMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC10b29sdGlwLWJvdHRvbSB7XFxyXFxuXFx0bWFyZ2luLXRvcDogNnB4O1xcclxcbn1cXHJcXG4ubGVhZmxldC10b29sdGlwLXRvcCB7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1ib3R0b206YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtdG9wOmJlZm9yZSB7XFxyXFxuXFx0bGVmdDogNTAlO1xcclxcblxcdG1hcmdpbi1sZWZ0OiAtNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLXRvcDpiZWZvcmUge1xcclxcblxcdGJvdHRvbTogMDtcXHJcXG5cXHRtYXJnaW4tYm90dG9tOiAtMTJweDtcXHJcXG5cXHRib3JkZXItdG9wLWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLWJvdHRvbTpiZWZvcmUge1xcclxcblxcdHRvcDogMDtcXHJcXG5cXHRtYXJnaW4tdG9wOiAtMTJweDtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTZweDtcXHJcXG5cXHRib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQge1xcclxcblxcdG1hcmdpbi1sZWZ0OiAtNnB4O1xcclxcbn1cXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0IHtcXHJcXG5cXHRtYXJnaW4tbGVmdDogNnB4O1xcclxcbn1cXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlLFxcclxcbi5sZWFmbGV0LXRvb2x0aXAtcmlnaHQ6YmVmb3JlIHtcXHJcXG5cXHR0b3A6IDUwJTtcXHJcXG5cXHRtYXJnaW4tdG9wOiAtNnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLWxlZnQ6YmVmb3JlIHtcXHJcXG5cXHRyaWdodDogMDtcXHJcXG5cXHRtYXJnaW4tcmlnaHQ6IC0xMnB4O1xcclxcblxcdGJvcmRlci1sZWZ0LWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XFxyXFxuXFx0bGVmdDogMDtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTEycHg7XFxyXFxuXFx0Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjZmZmO1xcclxcblxcdH1cXHJcXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvbGVhZmxldC9kaXN0L2xlYWZsZXQuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBLG9CQUFvQjs7QUFFcEI7Ozs7Ozs7Ozs7Q0FVQyxrQkFBa0I7Q0FDbEIsT0FBTztDQUNQLE1BQU07Q0FDTjtBQUNEO0NBQ0MsZ0JBQWdCO0NBQ2hCO0FBQ0Q7OztDQUdDLHlCQUF5QjtJQUN0QixzQkFBc0I7U0FDakIsaUJBQWlCO0dBQ3ZCLHVCQUF1QjtDQUN6QjtBQUNELGtEQUFrRDtBQUNsRDtDQUNDLHVCQUF1QjtBQUN4QjtBQUNBLG1GQUFtRjtBQUNuRjtDQUNDLDBDQUEwQztDQUMxQztBQUNELHFFQUFxRTtBQUNyRTtDQUNDLGFBQWE7Q0FDYixjQUFjO0NBQ2QsNkJBQTZCO0NBQzdCO0FBQ0Q7O0NBRUMsY0FBYztDQUNkO0FBQ0QsZ0dBQWdHO0FBQ2hHLHFGQUFxRjtBQUNyRjs7Ozs7O0NBTUMsMEJBQTBCO0NBQzFCLDJCQUEyQjtDQUMzQjs7QUFFRDtDQUNDLDZCQUE2QjtDQUM3Qix5QkFBeUI7Q0FDekI7QUFDRDtDQUNDLDRCQUE0QjtDQUM1QixxREFBcUQ7Q0FDckQsa0JBQWtCO0NBQ2xCLHdCQUF3QjtBQUN6QjtBQUNBO0NBQ0Msc0JBQXNCO0NBQ3RCLGtCQUFrQjtBQUNuQjtBQUNBO0NBQ0Msd0NBQXdDO0FBQ3pDO0FBQ0E7Q0FDQyxvREFBb0Q7QUFDckQ7QUFDQTtDQUNDLGVBQWU7Q0FDZixrQkFBa0I7Q0FDbEI7QUFDRDtDQUNDLG1CQUFtQjtDQUNuQjtBQUNEO0NBQ0MsUUFBUTtDQUNSLFNBQVM7Q0FDVCwyQkFBMkI7TUFDdEIsc0JBQXNCO0NBQzNCLFlBQVk7Q0FDWjtBQUNELHVFQUF1RTtBQUN2RTtDQUNDLHNCQUFzQjtD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QUNYLGNBQWM7O0NBRWQsdUhBQXVIO0NBQ3ZILGlIQUFpSDtDQUNqSDtBQUNEO0NBQ0MsZ0JBQWdCO0NBQ2hCOztBQUVEOzs7O0NBSUMsc0JBQXNCO0NBQ3RCOzs7QUFHRCxhQUFhOztBQUViO0NBQ0MsZ0JBQWdCO0NBQ2hCLHNCQUFzQjtDQUN0Qjs7O0FBR0QsWUFBWTtBQUNaLG1EQUFtRDtBQUNuRDtDQUNDLGtCQUFrQjtDQUNsQixZQUFZO0NBQ1osc0JBQXNCO0NBQ3RCLHNCQUFzQjtDQUN0QixrQkFBa0I7Q0FDbEIsV0FBVztDQUNYLG1CQUFtQjtDQUNuQix5QkFBeUI7Q0FDekIsc0JBQXNCO0NBQ3RCLHFCQUFxQjtDQUNyQixpQkFBaUI7Q0FDakIsb0JBQW9CO0NBQ3BCLHFDQUFxQztDQUNyQztBQUNEO0NBQ0MsZUFBZTtDQUNmLG9CQUFvQjtDQUNwQjtBQUNEOzs7O0NBSUMsa0JBQWtCO0NBQ2xCLG9CQUFvQjtDQUNwQiw2QkFBNkI7Q0FDN0IsdUJBQXVCO0NBQ3ZCLFdBQVc7Q0FDWDs7QUFFRCxlQUFlOztBQUVmO0NBQ0MsZUFBZTtBQUNoQjtBQUNBO0NBQ0MsZ0JBQWdCO0FBQ2pCO0FBQ0E7O0NBRUMsU0FBUztDQUNULGlCQUFpQjtDQUNqQjtBQUNEO0NBQ0MsU0FBUztDQUNULG9CQUFvQjtDQUNwQixzQkFBc0I7Q0FDdEI7QUFDRDtDQUNDLE1BQU07Q0FDTixpQkFBaUI7Q0FDakIsaUJBQWlCO0NBQ2pCLHlCQUF5QjtDQUN6QjtBQUNEO0NBQ0MsaUJBQWlCO0FBQ2xCO0FBQ0E7Q0FDQyxnQkFBZ0I7QUFDakI7QUFDQTs7Q0FFQyxRQUFRO0NBQ1IsZ0JBQWdCO0NBQ2hCO0FBQ0Q7Q0FDQyxRQUFRO0NBQ1IsbUJBQW1CO0NBQ25CLHVCQUF1QjtDQUN2QjtBQUNEO0NBQ0MsT0FBTztDQUNQLGtCQUFrQjtDQUNsQix3QkFBd0I7Q0FDeEJcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyogcmVxdWlyZWQgc3R5bGVzICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtcGFuZSxcXHJcXG4ubGVhZmxldC10aWxlLFxcclxcbi5sZWFmbGV0LW1hcmtlci1pY29uLFxcclxcbi5sZWFmbGV0LW1hcmtlci1zaGFkb3csXFxyXFxuLmxlYWZsZXQtdGlsZS1jb250YWluZXIsXFxyXFxuLmxlYWZsZXQtcGFuZSA+IHN2ZyxcXHJcXG4ubGVhZmxldC1wYW5lID4gY2FudmFzLFxcclxcbi5sZWFmbGV0LXpvb20tYm94LFxcclxcbi5sZWFmbGV0LWltYWdlLWxheWVyLFxcclxcbi5sZWFmbGV0LWxheWVyIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0bGVmdDogMDtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdGlsZSxcXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93IHtcXHJcXG5cXHQtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdCAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0ICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHQgIC13ZWJraXQtdXNlci1kcmFnOiBub25lO1xcclxcblxcdH1cXHJcXG4vKiBQcmV2ZW50cyBJRTExIGZyb20gaGlnaGxpZ2h0aW5nIHRpbGVzIGluIGJsdWUgKi9cXHJcXG4ubGVhZmxldC10aWxlOjpzZWxlY3Rpb24ge1xcclxcblxcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcbn1cXHJcXG4vKiBTYWZhcmkgcmVuZGVycyBub24tcmV0aW5hIHRpbGUgb24gcmV0aW5hIGJldHRlciB3aXRoIHRoaXMsIGJ1dCBDaHJvbWUgaXMgd29yc2UgKi9cXHJcXG4ubGVhZmxldC1zYWZhcmkgLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0aW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0O1xcclxcblxcdH1cXHJcXG4vKiBoYWNrIHRoYXQgcHJldmVudHMgaHcgbGF5ZXJzIFxcXCJzdHJldGNoaW5nXFxcIiB3aGVuIGxvYWRpbmcgbmV3IHRpbGVzICovXFxyXFxuLmxlYWZsZXQtc2FmYXJpIC5sZWFmbGV0LXRpbGUtY29udGFpbmVyIHtcXHJcXG5cXHR3aWR0aDogMTYwMHB4O1xcclxcblxcdGhlaWdodDogMTYwMHB4O1xcclxcblxcdC13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjogMCAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93IHtcXHJcXG5cXHRkaXNwbGF5OiBibG9jaztcXHJcXG5cXHR9XFxyXFxuLyogLmxlYWZsZXQtY29udGFpbmVyIHN2ZzogcmVzZXQgc3ZnIG1heC13aWR0aCBkZWNsZXJhdGlvbiBzaGlwcGVkIGluIEpvb21sYSEgKGpvb21sYS5vcmcpIDMueCAqL1xcclxcbi8qIC5sZWFmbGV0LWNvbnRhaW5lciBpbWc6IG1hcCBpcyBicm9rZW4gaW4gRkYgaWYgeW91IGhhdmUgbWF4LXdpZHRoOiAxMDAlIG9uIHRpbGVzICovXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LW92ZXJsYXktcGFuZSBzdmcsXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIC5sZWFmbGV0LW1hcmtlci1wYW5lIGltZyxcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtc2hhZG93LXBhbmUgaW1nLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciAubGVhZmxldC10aWxlLXBhbmUgaW1nLFxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBpbWcubGVhZmxldC1pbWFnZS1sYXllcixcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0bWF4LXdpZHRoOiBub25lICFpbXBvcnRhbnQ7XFxyXFxuXFx0bWF4LWhlaWdodDogbm9uZSAhaW1wb3J0YW50O1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC16b29tIHtcXHJcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBwYW4teCBwYW4teTtcXHJcXG5cXHR0b3VjaC1hY3Rpb246IHBhbi14IHBhbi15O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIubGVhZmxldC10b3VjaC1kcmFnIHtcXHJcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBwaW5jaC16b29tO1xcclxcblxcdC8qIEZhbGxiYWNrIGZvciBGRiB3aGljaCBkb2Vzbid0IHN1cHBvcnQgcGluY2gtem9vbSAqL1xcclxcblxcdHRvdWNoLWFjdGlvbjogbm9uZTtcXHJcXG5cXHR0b3VjaC1hY3Rpb246IHBpbmNoLXpvb207XFxyXFxufVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lci5sZWFmbGV0LXRvdWNoLWRyYWcubGVhZmxldC10b3VjaC16b29tIHtcXHJcXG5cXHQtbXMtdG91Y2gtYWN0aW9uOiBub25lO1xcclxcblxcdHRvdWNoLWFjdGlvbjogbm9uZTtcXHJcXG59XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIHtcXHJcXG5cXHQtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xcclxcbn1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYSB7XFxyXFxuXFx0LXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiByZ2JhKDUxLCAxODEsIDIyOSwgMC40KTtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0ZmlsdGVyOiBpbmhlcml0O1xcclxcblxcdHZpc2liaWxpdHk6IGhpZGRlbjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdGlsZS1sb2FkZWQge1xcclxcblxcdHZpc2liaWxpdHk6IGluaGVyaXQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYm94IHtcXHJcXG5cXHR3aWR0aDogMDtcXHJcXG5cXHRoZWlnaHQ6IDA7XFxyXFxuXFx0LW1vei1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcblxcdCAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXHJcXG5cXHR6LWluZGV4OiA4MDA7XFxyXFxuXFx0fVxcclxcbi8qIHdvcmthcm91bmQgZm9yIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTg4ODMxOSAqL1xcclxcbi5sZWFmbGV0LW92ZXJsYXktcGFuZSBzdmcge1xcclxcblxcdC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXBhbmUgICAgICAgICB7IHotaW5kZXg6IDQwMDsgfVxcclxcblxcclxcbi5sZWFmbGV0LXRpbGUtcGFuZSAgICB7IHotaW5kZXg6IDIwMDsgfVxcclxcbi5sZWFmbGV0LW92ZXJsYXktcGFuZSB7IHotaW5kZXg6IDQwMDsgfVxcclxcbi5sZWFmbGV0LXNoYWRvdy1wYW5lICB7IHotaW5kZXg6IDUwMDsgfVxcclxcbi5sZWFmbGV0LW1hcmtlci1wYW5lICB7IHotaW5kZXg6IDYwMDsgfVxcclxcbi5sZWFmbGV0LXRvb2x0aXAtcGFuZSAgIHsgei1pbmRleDogNjUwOyB9XFxyXFxuLmxlYWZsZXQtcG9wdXAtcGFuZSAgIHsgei1pbmRleDogNzAwOyB9XFxyXFxuXFxyXFxuLmxlYWZsZXQtbWFwLXBhbmUgY2FudmFzIHsgei1pbmRleDogMTAwOyB9XFxyXFxuLmxlYWZsZXQtbWFwLXBhbmUgc3ZnICAgIHsgei1pbmRleDogMjAwOyB9XFxyXFxuXFxyXFxuLmxlYWZsZXQtdm1sLXNoYXBlIHtcXHJcXG5cXHR3aWR0aDogMXB4O1xcclxcblxcdGhlaWdodDogMXB4O1xcclxcblxcdH1cXHJcXG4ubHZtbCB7XFxyXFxuXFx0YmVoYXZpb3I6IHVybCgjZGVmYXVsdCNWTUwpO1xcclxcblxcdGRpc3BsYXk6IGlubGluZS1ibG9jaztcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGNvbnRyb2wgcG9zaXRpb25pbmcgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7XFxyXFxuXFx0ei1pbmRleDogODAwO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiB2aXNpYmxlUGFpbnRlZDsgLyogSUUgOS0xMCBkb2Vzbid0IGhhdmUgYXV0byAqL1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3AsXFxyXFxuLmxlYWZsZXQtYm90dG9tIHtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0ei1pbmRleDogMTAwMDtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9wIHtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXJpZ2h0IHtcXHJcXG5cXHRyaWdodDogMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYm90dG9tIHtcXHJcXG5cXHRib3R0b206IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWxlZnQge1xcclxcblxcdGxlZnQ6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wge1xcclxcblxcdGZsb2F0OiBsZWZ0O1xcclxcblxcdGNsZWFyOiBib3RoO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1yaWdodCAubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRmbG9hdDogcmlnaHQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvcCAubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRtYXJnaW4tdG9wOiAxMHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1ib3R0b20gLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLWJvdHRvbTogMTBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtbGVmdCAubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRtYXJnaW4tbGVmdDogMTBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcmlnaHQgLmxlYWZsZXQtY29udHJvbCB7XFxyXFxuXFx0bWFyZ2luLXJpZ2h0OiAxMHB4O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiB6b29tIGFuZCBmYWRlIGFuaW1hdGlvbnMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1mYWRlLWFuaW0gLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0d2lsbC1jaGFuZ2U6IG9wYWNpdHk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWZhZGUtYW5pbSAubGVhZmxldC1wb3B1cCB7XFxyXFxuXFx0b3BhY2l0eTogMDtcXHJcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBsaW5lYXI7XFxyXFxuXFx0ICAgLW1vei10cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgbGluZWFyO1xcclxcblxcdCAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGxpbmVhcjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtZmFkZS1hbmltIC5sZWFmbGV0LW1hcC1wYW5lIC5sZWFmbGV0LXBvcHVwIHtcXHJcXG5cXHRvcGFjaXR5OiAxO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC16b29tLWFuaW1hdGVkIHtcXHJcXG5cXHQtd2Via2l0LXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHQgICAgLW1zLXRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHQgICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDAgMDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXpvb20tYW5pbWF0ZWQge1xcclxcblxcdHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWFuaW1hdGVkIHtcXHJcXG5cXHQtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTtcXHJcXG5cXHQgICAtbW96LXRyYW5zaXRpb246ICAgIC1tb3otdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTtcXHJcXG5cXHQgICAgICAgIHRyYW5zaXRpb246ICAgICAgICAgdHJhbnNmb3JtIDAuMjVzIGN1YmljLWJlemllcigwLDAsMC4yNSwxKTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtem9vbS1hbmltIC5sZWFmbGV0LXRpbGUsXFxyXFxuLmxlYWZsZXQtcGFuLWFuaW0gLmxlYWZsZXQtdGlsZSB7XFxyXFxuXFx0LXdlYmtpdC10cmFuc2l0aW9uOiBub25lO1xcclxcblxcdCAgIC1tb3otdHJhbnNpdGlvbjogbm9uZTtcXHJcXG5cXHQgICAgICAgIHRyYW5zaXRpb246IG5vbmU7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LXpvb20tYW5pbSAubGVhZmxldC16b29tLWhpZGUge1xcclxcblxcdHZpc2liaWxpdHk6IGhpZGRlbjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogY3Vyc29ycyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWludGVyYWN0aXZlIHtcXHJcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWdyYWIge1xcclxcblxcdGN1cnNvcjogLXdlYmtpdC1ncmFiO1xcclxcblxcdGN1cnNvcjogICAgLW1vei1ncmFiO1xcclxcblxcdGN1cnNvcjogICAgICAgICBncmFiO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jcm9zc2hhaXIsXFxyXFxuLmxlYWZsZXQtY3Jvc3NoYWlyIC5sZWFmbGV0LWludGVyYWN0aXZlIHtcXHJcXG5cXHRjdXJzb3I6IGNyb3NzaGFpcjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtcG9wdXAtcGFuZSxcXHJcXG4ubGVhZmxldC1jb250cm9sIHtcXHJcXG5cXHRjdXJzb3I6IGF1dG87XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWRyYWdnaW5nIC5sZWFmbGV0LWdyYWIsXFxyXFxuLmxlYWZsZXQtZHJhZ2dpbmcgLmxlYWZsZXQtZ3JhYiAubGVhZmxldC1pbnRlcmFjdGl2ZSxcXHJcXG4ubGVhZmxldC1kcmFnZ2luZyAubGVhZmxldC1tYXJrZXItZHJhZ2dhYmxlIHtcXHJcXG5cXHRjdXJzb3I6IG1vdmU7XFxyXFxuXFx0Y3Vyc29yOiAtd2Via2l0LWdyYWJiaW5nO1xcclxcblxcdGN1cnNvcjogICAgLW1vei1ncmFiYmluZztcXHJcXG5cXHRjdXJzb3I6ICAgICAgICAgZ3JhYmJpbmc7XFxyXFxuXFx0fVxcclxcblxcclxcbi8qIG1hcmtlciAmIG92ZXJsYXlzIGludGVyYWN0aXZpdHkgKi9cXHJcXG4ubGVhZmxldC1tYXJrZXItaWNvbixcXHJcXG4ubGVhZmxldC1tYXJrZXItc2hhZG93LFxcclxcbi5sZWFmbGV0LWltYWdlLWxheWVyLFxcclxcbi5sZWFmbGV0LXBhbmUgPiBzdmcgcGF0aCxcXHJcXG4ubGVhZmxldC10aWxlLWNvbnRhaW5lciB7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LW1hcmtlci1pY29uLmxlYWZsZXQtaW50ZXJhY3RpdmUsXFxyXFxuLmxlYWZsZXQtaW1hZ2UtbGF5ZXIubGVhZmxldC1pbnRlcmFjdGl2ZSxcXHJcXG4ubGVhZmxldC1wYW5lID4gc3ZnIHBhdGgubGVhZmxldC1pbnRlcmFjdGl2ZSxcXHJcXG5zdmcubGVhZmxldC1pbWFnZS1sYXllci5sZWFmbGV0LWludGVyYWN0aXZlIHBhdGgge1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiB2aXNpYmxlUGFpbnRlZDsgLyogSUUgOS0xMCBkb2Vzbid0IGhhdmUgYXV0byAqL1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBhdXRvO1xcclxcblxcdH1cXHJcXG5cXHJcXG4vKiB2aXN1YWwgdHdlYWtzICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZGRkO1xcclxcblxcdG91dGxpbmU6IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRhaW5lciBhIHtcXHJcXG5cXHRjb2xvcjogIzAwNzhBODtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIGEubGVhZmxldC1hY3RpdmUge1xcclxcblxcdG91dGxpbmU6IDJweCBzb2xpZCBvcmFuZ2U7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXpvb20tYm94IHtcXHJcXG5cXHRib3JkZXI6IDJweCBkb3R0ZWQgIzM4ZjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuNSk7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGdlbmVyYWwgdHlwb2dyYXBoeSAqL1xcclxcbi5sZWFmbGV0LWNvbnRhaW5lciB7XFxyXFxuXFx0Zm9udDogMTJweC8xLjUgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogZ2VuZXJhbCB0b29sYmFyIHN0eWxlcyAqL1xcclxcblxcclxcbi5sZWFmbGV0LWJhciB7XFxyXFxuXFx0Ym94LXNoYWRvdzogMCAxcHggNXB4IHJnYmEoMCwwLDAsMC42NSk7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogNHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYSxcXHJcXG4ubGVhZmxldC1iYXIgYTpob3ZlciB7XFxyXFxuXFx0YmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcXHJcXG5cXHRib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYztcXHJcXG5cXHR3aWR0aDogMjZweDtcXHJcXG5cXHRoZWlnaHQ6IDI2cHg7XFxyXFxuXFx0bGluZS1oZWlnaHQ6IDI2cHg7XFxyXFxuXFx0ZGlzcGxheTogYmxvY2s7XFxyXFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcclxcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXHJcXG5cXHRjb2xvcjogYmxhY2s7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJhciBhLFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0YmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTtcXHJcXG5cXHRiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYTpob3ZlciB7XFxyXFxuXFx0YmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtYmFyIGE6Zmlyc3QtY2hpbGQge1xcclxcblxcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDRweDtcXHJcXG5cXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogNHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYTpsYXN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiA0cHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDRweDtcXHJcXG5cXHRib3JkZXItYm90dG9tOiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1iYXIgYS5sZWFmbGV0LWRpc2FibGVkIHtcXHJcXG5cXHRjdXJzb3I6IGRlZmF1bHQ7XFxyXFxuXFx0YmFja2dyb3VuZC1jb2xvcjogI2Y0ZjRmNDtcXHJcXG5cXHRjb2xvcjogI2JiYjtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIGEge1xcclxcblxcdHdpZHRoOiAzMHB4O1xcclxcblxcdGhlaWdodDogMzBweDtcXHJcXG5cXHRsaW5lLWhlaWdodDogMzBweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIGE6Zmlyc3QtY2hpbGQge1xcclxcblxcdGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDJweDtcXHJcXG5cXHRib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMnB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1iYXIgYTpsYXN0LWNoaWxkIHtcXHJcXG5cXHRib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAycHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDJweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLyogem9vbSBjb250cm9sICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udHJvbC16b29tLWluLFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtem9vbS1vdXQge1xcclxcblxcdGZvbnQ6IGJvbGQgMThweCAnTHVjaWRhIENvbnNvbGUnLCBNb25hY28sIG1vbm9zcGFjZTtcXHJcXG5cXHR0ZXh0LWluZGVudDogMXB4O1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLXpvb20taW4sIC5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtem9vbS1vdXQgIHtcXHJcXG5cXHRmb250LXNpemU6IDIycHg7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIGxheWVycyBjb250cm9sICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMge1xcclxcblxcdGJveC1zaGFkb3c6IDAgMXB4IDVweCByZ2JhKDAsMCwwLDAuNCk7XFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHRib3JkZXItcmFkaXVzOiA1cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9sYXllcnMucG5nKTtcXHJcXG5cXHR3aWR0aDogMzZweDtcXHJcXG5cXHRoZWlnaHQ6IDM2cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXJldGluYSAubGVhZmxldC1jb250cm9sLWxheWVycy10b2dnbGUge1xcclxcblxcdGJhY2tncm91bmQtaW1hZ2U6IHVybChpbWFnZXMvbGF5ZXJzLTJ4LnBuZyk7XFxyXFxuXFx0YmFja2dyb3VuZC1zaXplOiAyNnB4IDI2cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0d2lkdGg6IDQ0cHg7XFxyXFxuXFx0aGVpZ2h0OiA0NHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycyAubGVhZmxldC1jb250cm9sLWxheWVycy1saXN0LFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLWV4cGFuZGVkIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLXRvZ2dsZSB7XFxyXFxuXFx0ZGlzcGxheTogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMtZXhwYW5kZWQgLmxlYWZsZXQtY29udHJvbC1sYXllcnMtbGlzdCB7XFxyXFxuXFx0ZGlzcGxheTogYmxvY2s7XFxyXFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1leHBhbmRlZCB7XFxyXFxuXFx0cGFkZGluZzogNnB4IDEwcHggNnB4IDZweDtcXHJcXG5cXHRjb2xvcjogIzMzMztcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1zY3JvbGxiYXIge1xcclxcblxcdG92ZXJmbG93LXk6IHNjcm9sbDtcXHJcXG5cXHRvdmVyZmxvdy14OiBoaWRkZW47XFxyXFxuXFx0cGFkZGluZy1yaWdodDogNXB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1zZWxlY3RvciB7XFxyXFxuXFx0bWFyZ2luLXRvcDogMnB4O1xcclxcblxcdHBvc2l0aW9uOiByZWxhdGl2ZTtcXHJcXG5cXHR0b3A6IDFweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1sYXllcnMgbGFiZWwge1xcclxcblxcdGRpc3BsYXk6IGJsb2NrO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWxheWVycy1zZXBhcmF0b3Ige1xcclxcblxcdGhlaWdodDogMDtcXHJcXG5cXHRib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDtcXHJcXG5cXHRtYXJnaW46IDVweCAtMTBweCA1cHggLTZweDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuLyogRGVmYXVsdCBpY29uIFVSTHMgKi9cXHJcXG4ubGVhZmxldC1kZWZhdWx0LWljb24tcGF0aCB7XFxyXFxuXFx0YmFja2dyb3VuZC1pbWFnZTogdXJsKGltYWdlcy9tYXJrZXItaWNvbi5wbmcpO1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBhdHRyaWJ1dGlvbiBhbmQgc2NhbGUgY29udHJvbHMgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbiB7XFxyXFxuXFx0YmFja2dyb3VuZDogI2ZmZjtcXHJcXG5cXHRiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyk7XFxyXFxuXFx0bWFyZ2luOiAwO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLFxcclxcbi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7XFxyXFxuXFx0cGFkZGluZzogMCA1cHg7XFxyXFxuXFx0Y29sb3I6ICMzMzM7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtYXR0cmlidXRpb24gYSB7XFxyXFxuXFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uIGE6aG92ZXIge1xcclxcblxcdHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1hdHRyaWJ1dGlvbixcXHJcXG4ubGVhZmxldC1jb250YWluZXIgLmxlYWZsZXQtY29udHJvbC1zY2FsZSB7XFxyXFxuXFx0Zm9udC1zaXplOiAxMXB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1sZWZ0IC5sZWFmbGV0LWNvbnRyb2wtc2NhbGUge1xcclxcblxcdG1hcmdpbi1sZWZ0OiA1cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWJvdHRvbSAubGVhZmxldC1jb250cm9sLXNjYWxlIHtcXHJcXG5cXHRtYXJnaW4tYm90dG9tOiA1cHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LWNvbnRyb2wtc2NhbGUtbGluZSB7XFxyXFxuXFx0Ym9yZGVyOiAycHggc29saWQgIzc3NztcXHJcXG5cXHRib3JkZXItdG9wOiBub25lO1xcclxcblxcdGxpbmUtaGVpZ2h0OiAxLjE7XFxyXFxuXFx0cGFkZGluZzogMnB4IDVweCAxcHg7XFxyXFxuXFx0Zm9udC1zaXplOiAxMXB4O1xcclxcblxcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuXFx0b3ZlcmZsb3c6IGhpZGRlbjtcXHJcXG5cXHQtbW96LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxyXFxuXFx0ICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcclxcblxcclxcblxcdGJhY2tncm91bmQ6ICNmZmY7XFxyXFxuXFx0YmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250cm9sLXNjYWxlLWxpbmU6bm90KDpmaXJzdC1jaGlsZCkge1xcclxcblxcdGJvcmRlci10b3A6IDJweCBzb2xpZCAjNzc3O1xcclxcblxcdGJvcmRlci1ib3R0b206IG5vbmU7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTJweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udHJvbC1zY2FsZS1saW5lOm5vdCg6Zmlyc3QtY2hpbGQpOm5vdCg6bGFzdC1jaGlsZCkge1xcclxcblxcdGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAjNzc3O1xcclxcblxcdH1cXHJcXG5cXHJcXG4ubGVhZmxldC10b3VjaCAubGVhZmxldC1jb250cm9sLWF0dHJpYnV0aW9uLFxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWNvbnRyb2wtbGF5ZXJzLFxcclxcbi5sZWFmbGV0LXRvdWNoIC5sZWFmbGV0LWJhciB7XFxyXFxuXFx0Ym94LXNoYWRvdzogbm9uZTtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtY29udHJvbC1sYXllcnMsXFxyXFxuLmxlYWZsZXQtdG91Y2ggLmxlYWZsZXQtYmFyIHtcXHJcXG5cXHRib3JkZXI6IDJweCBzb2xpZCByZ2JhKDAsMCwwLDAuMik7XFxyXFxuXFx0YmFja2dyb3VuZC1jbGlwOiBwYWRkaW5nLWJveDtcXHJcXG5cXHR9XFxyXFxuXFxyXFxuXFxyXFxuLyogcG9wdXAgKi9cXHJcXG5cXHJcXG4ubGVhZmxldC1wb3B1cCB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHRleHQtYWxpZ246IGNlbnRlcjtcXHJcXG5cXHRtYXJnaW4tYm90dG9tOiAyMHB4O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXIge1xcclxcblxcdHBhZGRpbmc6IDFweDtcXHJcXG5cXHR0ZXh0LWFsaWduOiBsZWZ0O1xcclxcblxcdGJvcmRlci1yYWRpdXM6IDEycHg7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQge1xcclxcblxcdG1hcmdpbjogMTNweCAxOXB4O1xcclxcblxcdGxpbmUtaGVpZ2h0OiAxLjQ7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgcCB7XFxyXFxuXFx0bWFyZ2luOiAxOHB4IDA7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIge1xcclxcblxcdHdpZHRoOiA0MHB4O1xcclxcblxcdGhlaWdodDogMjBweDtcXHJcXG5cXHRwb3NpdGlvbjogYWJzb2x1dGU7XFxyXFxuXFx0bGVmdDogNTAlO1xcclxcblxcdG1hcmdpbi1sZWZ0OiAtMjBweDtcXHJcXG5cXHRvdmVyZmxvdzogaGlkZGVuO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1wb3B1cC10aXAge1xcclxcblxcdHdpZHRoOiAxN3B4O1xcclxcblxcdGhlaWdodDogMTdweDtcXHJcXG5cXHRwYWRkaW5nOiAxcHg7XFxyXFxuXFxyXFxuXFx0bWFyZ2luOiAtMTBweCBhdXRvIDA7XFxyXFxuXFxyXFxuXFx0LXdlYmtpdC10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0ICAgLW1vei10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0ICAgIC1tcy10cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0ICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlcixcXHJcXG4ubGVhZmxldC1wb3B1cC10aXAge1xcclxcblxcdGJhY2tncm91bmQ6IHdoaXRlO1xcclxcblxcdGNvbG9yOiAjMzMzO1xcclxcblxcdGJveC1zaGFkb3c6IDAgM3B4IDE0cHggcmdiYSgwLDAsMCwwLjQpO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1jb250YWluZXIgYS5sZWFmbGV0LXBvcHVwLWNsb3NlLWJ1dHRvbiB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHRvcDogMDtcXHJcXG5cXHRyaWdodDogMDtcXHJcXG5cXHRwYWRkaW5nOiA0cHggNHB4IDAgMDtcXHJcXG5cXHRib3JkZXI6IG5vbmU7XFxyXFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcclxcblxcdHdpZHRoOiAxOHB4O1xcclxcblxcdGhlaWdodDogMTRweDtcXHJcXG5cXHRmb250OiAxNnB4LzE0cHggVGFob21hLCBWZXJkYW5hLCBzYW5zLXNlcmlmO1xcclxcblxcdGNvbG9yOiAjYzNjM2MzO1xcclxcblxcdHRleHQtZGVjb3JhdGlvbjogbm9uZTtcXHJcXG5cXHRmb250LXdlaWdodDogYm9sZDtcXHJcXG5cXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtY29udGFpbmVyIGEubGVhZmxldC1wb3B1cC1jbG9zZS1idXR0b246aG92ZXIge1xcclxcblxcdGNvbG9yOiAjOTk5O1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC1wb3B1cC1zY3JvbGxlZCB7XFxyXFxuXFx0b3ZlcmZsb3c6IGF1dG87XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNkZGQ7XFxyXFxuXFx0Ym9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGQ7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciB7XFxyXFxuXFx0LW1zLXpvb206IDE7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcCB7XFxyXFxuXFx0d2lkdGg6IDI0cHg7XFxyXFxuXFx0bWFyZ2luOiAwIGF1dG87XFxyXFxuXFxyXFxuXFx0LW1zLWZpbHRlcjogXFxcInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5NYXRyaXgoTTExPTAuNzA3MTA2NzgsIE0xMj0wLjcwNzEwNjc4LCBNMjE9LTAuNzA3MTA2NzgsIE0yMj0wLjcwNzEwNjc4KVxcXCI7XFxyXFxuXFx0ZmlsdGVyOiBwcm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuTWF0cml4KE0xMT0wLjcwNzEwNjc4LCBNMTI9MC43MDcxMDY3OCwgTTIxPS0wLjcwNzEwNjc4LCBNMjI9MC43MDcxMDY3OCk7XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LXBvcHVwLXRpcC1jb250YWluZXIge1xcclxcblxcdG1hcmdpbi10b3A6IC0xcHg7XFxyXFxuXFx0fVxcclxcblxcclxcbi5sZWFmbGV0LW9sZGllIC5sZWFmbGV0LWNvbnRyb2wtem9vbSxcXHJcXG4ubGVhZmxldC1vbGRpZSAubGVhZmxldC1jb250cm9sLWxheWVycyxcXHJcXG4ubGVhZmxldC1vbGRpZSAubGVhZmxldC1wb3B1cC1jb250ZW50LXdyYXBwZXIsXFxyXFxuLmxlYWZsZXQtb2xkaWUgLmxlYWZsZXQtcG9wdXAtdGlwIHtcXHJcXG5cXHRib3JkZXI6IDFweCBzb2xpZCAjOTk5O1xcclxcblxcdH1cXHJcXG5cXHJcXG5cXHJcXG4vKiBkaXYgaWNvbiAqL1xcclxcblxcclxcbi5sZWFmbGV0LWRpdi1pY29uIHtcXHJcXG5cXHRiYWNrZ3JvdW5kOiAjZmZmO1xcclxcblxcdGJvcmRlcjogMXB4IHNvbGlkICM2NjY7XFxyXFxuXFx0fVxcclxcblxcclxcblxcclxcbi8qIFRvb2x0aXAgKi9cXHJcXG4vKiBCYXNlIHN0eWxlcyBmb3IgdGhlIGVsZW1lbnQgdGhhdCBoYXMgYSB0b29sdGlwICovXFxyXFxuLmxlYWZsZXQtdG9vbHRpcCB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHBhZGRpbmc6IDZweDtcXHJcXG5cXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xcclxcblxcdGJvcmRlcjogMXB4IHNvbGlkICNmZmY7XFxyXFxuXFx0Ym9yZGVyLXJhZGl1czogM3B4O1xcclxcblxcdGNvbG9yOiAjMjIyO1xcclxcblxcdHdoaXRlLXNwYWNlOiBub3dyYXA7XFxyXFxuXFx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHQtbW96LXVzZXItc2VsZWN0OiBub25lO1xcclxcblxcdC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHR1c2VyLXNlbGVjdDogbm9uZTtcXHJcXG5cXHRwb2ludGVyLWV2ZW50czogbm9uZTtcXHJcXG5cXHRib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLDAsMCwwLjQpO1xcclxcblxcdH1cXHJcXG4ubGVhZmxldC10b29sdGlwLmxlYWZsZXQtY2xpY2thYmxlIHtcXHJcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxyXFxuXFx0cG9pbnRlci1ldmVudHM6IGF1dG87XFxyXFxuXFx0fVxcclxcbi5sZWFmbGV0LXRvb2x0aXAtdG9wOmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLWJvdHRvbTpiZWZvcmUsXFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0OmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XFxyXFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcclxcblxcdHBvaW50ZXItZXZlbnRzOiBub25lO1xcclxcblxcdGJvcmRlcjogNnB4IHNvbGlkIHRyYW5zcGFyZW50O1xcclxcblxcdGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcclxcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcclxcblxcdH1cXHJcXG5cXHJcXG4vKiBEaXJlY3Rpb25zICovXFxyXFxuXFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1ib3R0b20ge1xcclxcblxcdG1hcmdpbi10b3A6IDZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC10b3Age1xcclxcblxcdG1hcmdpbi10b3A6IC02cHg7XFxyXFxufVxcclxcbi5sZWFmbGV0LXRvb2x0aXAtYm90dG9tOmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLXRvcDpiZWZvcmUge1xcclxcblxcdGxlZnQ6IDUwJTtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTZweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC10b3A6YmVmb3JlIHtcXHJcXG5cXHRib3R0b206IDA7XFxyXFxuXFx0bWFyZ2luLWJvdHRvbTogLTEycHg7XFxyXFxuXFx0Ym9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1ib3R0b206YmVmb3JlIHtcXHJcXG5cXHR0b3A6IDA7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTEycHg7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IC02cHg7XFxyXFxuXFx0Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0IHtcXHJcXG5cXHRtYXJnaW4tbGVmdDogLTZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1yaWdodCB7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IDZweDtcXHJcXG59XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0OmJlZm9yZSxcXHJcXG4ubGVhZmxldC10b29sdGlwLXJpZ2h0OmJlZm9yZSB7XFxyXFxuXFx0dG9wOiA1MCU7XFxyXFxuXFx0bWFyZ2luLXRvcDogLTZweDtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1sZWZ0OmJlZm9yZSB7XFxyXFxuXFx0cmlnaHQ6IDA7XFxyXFxuXFx0bWFyZ2luLXJpZ2h0OiAtMTJweDtcXHJcXG5cXHRib3JkZXItbGVmdC1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuLmxlYWZsZXQtdG9vbHRpcC1yaWdodDpiZWZvcmUge1xcclxcblxcdGxlZnQ6IDA7XFxyXFxuXFx0bWFyZ2luLWxlZnQ6IC0xMnB4O1xcclxcblxcdGJvcmRlci1yaWdodC1jb2xvcjogI2ZmZjtcXHJcXG5cXHR9XFxyXFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlxudmFyIGNvbnRlbnQgPSByZXF1aXJlKFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21haW4uY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL21haW4uY3NzXCIsIGZ1bmN0aW9uKCkge1xuXHRcdHZhciBuZXdDb250ZW50ID0gcmVxdWlyZShcIiEhLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9tYWluLmNzc1wiKTtcblxuXHRcdGlmKHR5cGVvZiBuZXdDb250ZW50ID09PSAnc3RyaW5nJykgbmV3Q29udGVudCA9IFtbbW9kdWxlLmlkLCBuZXdDb250ZW50LCAnJ11dO1xuXG5cdFx0dmFyIGxvY2FscyA9IChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHR2YXIga2V5LCBpZHggPSAwO1xuXG5cdFx0XHRmb3Ioa2V5IGluIGEpIHtcblx0XHRcdFx0aWYoIWIgfHwgYVtrZXldICE9PSBiW2tleV0pIHJldHVybiBmYWxzZTtcblx0XHRcdFx0aWR4Kys7XG5cdFx0XHR9XG5cblx0XHRcdGZvcihrZXkgaW4gYikgaWR4LS07XG5cblx0XHRcdHJldHVybiBpZHggPT09IDA7XG5cdFx0fShjb250ZW50LmxvY2FscywgbmV3Q29udGVudC5sb2NhbHMpKTtcblxuXHRcdGlmKCFsb2NhbHMpIHRocm93IG5ldyBFcnJvcignQWJvcnRpbmcgQ1NTIEhNUiBkdWUgdG8gY2hhbmdlZCBjc3MtbW9kdWxlcyBsb2NhbHMuJyk7XG5cblx0XHR1cGRhdGUobmV3Q29udGVudCk7XG5cdH0pO1xuXG5cdG1vZHVsZS5ob3QuZGlzcG9zZShmdW5jdGlvbigpIHsgdXBkYXRlKCk7IH0pO1xufSIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvY3NzV2l0aE1hcHBpbmdUb1N0cmluZy5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVRfUlVMRV9JTVBPUlRfMF9fXyBmcm9tIFwiLSEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2FwcC5jc3NcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8wX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIi8qISBIVE1MNSBCb2lsZXJwbGF0ZSB2NS4wIHwgTUlUIExpY2Vuc2UgfCBodHRwOi8vaDVicC5jb20vICovXFxuXFxuaHRtbCB7XFxuICAgIGNvbG9yOiAjMjIyO1xcbiAgICBmb250LXNpemU6IDFlbTtcXG4gICAgbGluZS1oZWlnaHQ6IDEuNDtcXG59XFxuXFxuOjotd2Via2l0LXNjcm9sbGJhciB7XFxuICAgIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbjo6LW1vei1zZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuOjpzZWxlY3Rpb24ge1xcbiAgICBiYWNrZ3JvdW5kOiAjYjNkNGZjO1xcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTtcXG59XFxuXFxuYm9keSB7XFxuICBtYXJnaW46IDA7XFxuICB3aWR0aDogMTAwdnc7XFxuICBoZWlnaHQ6IDEwMHZoO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XFxufVxcblxcbmhyIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIGhlaWdodDogMXB4O1xcbiAgICBib3JkZXI6IDA7XFxuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjY2NjO1xcbiAgICBtYXJnaW46IDFlbSAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5hdWRpbyxcXG5jYW52YXMsXFxuaWZyYW1lLFxcbmltZyxcXG5zdmcsXFxudmlkZW8ge1xcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xcbn1cXG5cXG5maWVsZHNldCB7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgbWFyZ2luOiAwO1xcbiAgICBwYWRkaW5nOiAwO1xcbn1cXG5cXG5zZWxlY3QsIHRleHRhcmVhIHtcXG4gICAgYm9yZGVyOiBub25lO1xcbiAgICBib3JkZXItYm90dG9tOiBzb2xpZCAxcHggYmxhY2s7XFxuICAgIG91dGxpbmU6IG5vbmU7XFxuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcXG4gICAgLW1vei1hcHBlYXJhbmNlOiBub25lO1xcbiAgICBhcHBlYXJhbmNlOiBub25lO1xcbiAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDBweDtcXG4gICAgLW1vei1ib3JkZXItcmFkaXVzOiAwcHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDBweDtcXG4gICAgd2lkdGg6IDEwMHB4O1xcbiAgICBwYWRkaW5nOiAxMHB4IDA7XFxuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbn1cXG5cXG50ZXh0YXJlYSB7XFxuICAgIHJlc2l6ZTogdmVydGljYWw7XFxuICAgIHdpZHRoOiAxMDAlO1xcbiAgICBoZWlnaHQ6IDI1cHg7XFxufVxcblxcbmJ1dHRvbiB7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjtcXG4gICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJhY2tncm91bmQtY29sb3I6IGhvdHBpbms7XFxuICAgIHBhZGRpbmc6IDEwcHg7XFxuICAgIHdpZHRoOiAxMDBweDtcXG4gICAgY29sb3I6IHdoaXRlO1xcbn1cXG5cXG4uZm9ybS1ncm91cCB7XFxuICBtYXJnaW46IDIwcHggMDtcXG59XFxuXFxuLmJyb3dzZXJ1cGdyYWRlIHtcXG4gICAgbWFyZ2luOiAwLjJlbSAwO1xcbiAgICBiYWNrZ3JvdW5kOiAjY2NjO1xcbiAgICBjb2xvcjogIzAwMDtcXG4gICAgcGFkZGluZzogMC4yZW0gMDtcXG59XFxuXFxuXFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gICBBdXRob3IncyBjdXN0b20gc3R5bGVzXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiAgIE1lZGlhIFF1ZXJpZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbkBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1pbi13aWR0aDogNjguNzVlbSkge1xcbiAgICAjbGVmdCB7XFxuICAgICAgICB3aWR0aDogNDUlO1xcbiAgICB9XFxuXFxuICAgICNyaWdodCB7XFxuICAgICAgICB3aWR0aDogNDUlO1xcbiAgICB9XFxufVxcblxcbkBtZWRpYSBwcmludCxcXG4gICAgICAgKC1vLW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDUvNCksXFxuICAgICAgICgtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDEuMjUpLFxcbiAgICAgICAobWluLXJlc29sdXRpb246IDEyMGRwaSkge1xcblxcbn1cXG5cXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiAgIEhlbHBlciBjbGFzc2VzXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG4uaGlkZGVuIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcblxcbi52aXN1YWxseWhpZGRlbiB7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgY2xpcDogcmVjdCgwIDAgMCAwKTtcXG4gICAgaGVpZ2h0OiAxcHg7XFxuICAgIG1hcmdpbjogLTFweDtcXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgcGFkZGluZzogMDtcXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICB3aWR0aDogMXB4O1xcbn1cXG5cXG4udmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmFjdGl2ZSxcXG4udmlzdWFsbHloaWRkZW4uZm9jdXNhYmxlOmZvY3VzIHtcXG4gICAgY2xpcDogYXV0bztcXG4gICAgaGVpZ2h0OiBhdXRvO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xcbiAgICBwb3NpdGlvbjogc3RhdGljO1xcbiAgICB3aWR0aDogYXV0bztcXG59XFxuXFxuLmludmlzaWJsZSB7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuLmNsZWFyZml4OmJlZm9yZSxcXG4uY2xlYXJmaXg6YWZ0ZXIge1xcbiAgICBjb250ZW50OiBcXFwiIFxcXCI7XFxuICAgIGRpc3BsYXk6IHRhYmxlO1xcbn1cXG5cXG4uY2xlYXJmaXg6YWZ0ZXIge1xcbiAgICBjbGVhcjogYm90aDtcXG59XFxuXFxuLmNsZWFyZml4IHtcXG4gICAgKnpvb206IDE7XFxufVxcblxcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuICAgUHJpbnQgc3R5bGVzXFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cXG5cXG5AbWVkaWEgcHJpbnQge1xcbiAgICAqLFxcbiAgICAqOmJlZm9yZSxcXG4gICAgKjphZnRlciB7XFxuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xcbiAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDtcXG4gICAgICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgIHRleHQtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIH1cXG5cXG4gICAgYSxcXG4gICAgYTp2aXNpdGVkIHtcXG4gICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xcbiAgICB9XFxuXFxuICAgIGFbaHJlZl06YWZ0ZXIge1xcbiAgICAgICAgY29udGVudDogXFxcIiAoXFxcIiBhdHRyKGhyZWYpIFxcXCIpXFxcIjtcXG4gICAgfVxcblxcbiAgICBhYmJyW3RpdGxlXTphZnRlciB7XFxuICAgICAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIodGl0bGUpIFxcXCIpXFxcIjtcXG4gICAgfVxcblxcbiAgICBhW2hyZWZePVxcXCIjXFxcIl06YWZ0ZXIsXFxuICAgIGFbaHJlZl49XFxcImphdmFzY3JpcHQ6XFxcIl06YWZ0ZXIge1xcbiAgICAgICAgY29udGVudDogXFxcIlxcXCI7XFxuICAgIH1cXG5cXG4gICAgcHJlLFxcbiAgICBibG9ja3F1b3RlIHtcXG4gICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM5OTk7XFxuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICAgIH1cXG5cXG4gICAgdGhlYWQge1xcbiAgICAgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwO1xcbiAgICB9XFxuXFxuICAgIHRyLFxcbiAgICBpbWcge1xcbiAgICAgICAgcGFnZS1icmVhay1pbnNpZGU6IGF2b2lkO1xcbiAgICB9XFxuXFxuICAgIGltZyB7XFxuICAgICAgICBtYXgtd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcXG4gICAgfVxcblxcbiAgICBwLFxcbiAgICBoMixcXG4gICAgaDMge1xcbiAgICAgICAgb3JwaGFuczogMztcXG4gICAgICAgIHdpZG93czogMztcXG4gICAgfVxcblxcbiAgICBoMixcXG4gICAgaDMge1xcbiAgICAgICAgcGFnZS1icmVhay1hZnRlcjogYXZvaWQ7XFxuICAgIH1cXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vZnJhbWV3b3JrL3N0eWxlcy9tYWluLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQSw2REFBNkQ7O0FBRTdEO0lBQ0ksV0FBVztJQUNYLGNBQWM7SUFDZCxnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxhQUFhO0FBQ2pCOztBQUVBO0lBQ0ksbUJBQW1CO0lBQ25CLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQixpQkFBaUI7QUFDckI7O0FBRUE7RUFDRSxTQUFTO0VBQ1QsWUFBWTtFQUNaLGFBQWE7RUFDYixhQUFhO0VBQ2IsbUJBQW1CO0FBQ3JCOztBQUVBO0lBQ0ksY0FBYztJQUNkLFdBQVc7SUFDWCxTQUFTO0lBQ1QsMEJBQTBCO0lBQzFCLGFBQWE7SUFDYixVQUFVO0FBQ2Q7O0FBRUE7Ozs7OztJQU1JLHNCQUFzQjtBQUMxQjs7QUFFQTtJQUNJLFNBQVM7SUFDVCxTQUFTO0lBQ1QsVUFBVTtBQUNkOztBQUVBO0lBQ0ksWUFBWTtJQUNaLDhCQUE4QjtJQUM5QixhQUFhO0lBQ2Isd0JBQXdCO0lBQ3hCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsMEJBQTBCO0lBQzFCLHVCQUF1QjtJQUN2QixrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGVBQWU7SUFDZix1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSxnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLFlBQVk7QUFDaEI7O0FBRUE7RUFDRSwwQkFBMEI7SUFDeEIsZUFBZTtJQUNmLFlBQVk7SUFDWix5QkFBeUI7SUFDekIsYUFBYTtJQUNiLFlBQVk7SUFDWixZQUFZO0FBQ2hCOztBQUVBO0VBQ0UsY0FBYztBQUNoQjs7QUFFQTtJQUNJLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsV0FBVztJQUNYLGdCQUFnQjtBQUNwQjs7O0FBR0E7OytFQUUrRTs7QUFJL0U7OytFQUUrRTs7QUFFL0U7SUFDSTtRQUNJLFVBQVU7SUFDZDs7SUFFQTtRQUNJLFVBQVU7SUFDZDtBQUNKOztBQUVBOzs7OztBQUtBOztBQUVBOzsrRUFFK0U7O0FBRS9FO0lBQ0ksd0JBQXdCO0lBQ3hCLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLFNBQVM7SUFDVCxtQkFBbUI7SUFDbkIsV0FBVztJQUNYLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsVUFBVTtJQUNWLGtCQUFrQjtJQUNsQixVQUFVO0FBQ2Q7O0FBRUE7O0lBRUksVUFBVTtJQUNWLFlBQVk7SUFDWixTQUFTO0lBQ1QsaUJBQWlCO0lBQ2pCLGdCQUFnQjtJQUNoQixXQUFXO0FBQ2Y7O0FBRUE7SUFDSSxrQkFBa0I7QUFDdEI7O0FBRUE7O0lBRUksWUFBWTtJQUNaLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxXQUFXO0FBQ2Y7O0FBRUE7S0FDSSxPQUFRO0FBQ1o7O0FBRUE7OytFQUUrRTs7QUFFL0U7SUFDSTs7O1FBR0ksa0NBQWtDO1FBQ2xDLHNCQUFzQjtRQUN0QiwyQkFBMkI7UUFDM0IsNEJBQTRCO0lBQ2hDOztJQUVBOztRQUVJLDBCQUEwQjtJQUM5Qjs7SUFFQTtRQUNJLDRCQUE0QjtJQUNoQzs7SUFFQTtRQUNJLDZCQUE2QjtJQUNqQzs7SUFFQTs7UUFFSSxXQUFXO0lBQ2Y7O0lBRUE7O1FBRUksc0JBQXNCO1FBQ3RCLHdCQUF3QjtJQUM1Qjs7SUFFQTtRQUNJLDJCQUEyQjtJQUMvQjs7SUFFQTs7UUFFSSx3QkFBd0I7SUFDNUI7O0lBRUE7UUFDSSwwQkFBMEI7SUFDOUI7O0lBRUE7OztRQUdJLFVBQVU7UUFDVixTQUFTO0lBQ2I7O0lBRUE7O1FBRUksdUJBQXVCO0lBQzNCO0FBQ0pcIixcInNvdXJjZXNDb250ZW50XCI6W1wiLyohIEhUTUw1IEJvaWxlcnBsYXRlIHY1LjAgfCBNSVQgTGljZW5zZSB8IGh0dHA6Ly9oNWJwLmNvbS8gKi9cXG5cXG5odG1sIHtcXG4gICAgY29sb3I6ICMyMjI7XFxuICAgIGZvbnQtc2l6ZTogMWVtO1xcbiAgICBsaW5lLWhlaWdodDogMS40O1xcbn1cXG5cXG46Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gICAgZGlzcGxheTogbm9uZTtcXG59XFxuXFxuOjotbW96LXNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQ6ICNiM2Q0ZmM7XFxuICAgIHRleHQtc2hhZG93OiBub25lO1xcbn1cXG5cXG46OnNlbGVjdGlvbiB7XFxuICAgIGJhY2tncm91bmQ6ICNiM2Q0ZmM7XFxuICAgIHRleHQtc2hhZG93OiBub25lO1xcbn1cXG5cXG5ib2R5IHtcXG4gIG1hcmdpbjogMDtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1mbG93OiByb3cgd3JhcDtcXG59XFxuXFxuaHIge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgaGVpZ2h0OiAxcHg7XFxuICAgIGJvcmRlcjogMDtcXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNjY2M7XFxuICAgIG1hcmdpbjogMWVtIDA7XFxuICAgIHBhZGRpbmc6IDA7XFxufVxcblxcbmF1ZGlvLFxcbmNhbnZhcyxcXG5pZnJhbWUsXFxuaW1nLFxcbnN2ZyxcXG52aWRlbyB7XFxuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxufVxcblxcbmZpZWxkc2V0IHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBtYXJnaW46IDA7XFxuICAgIHBhZGRpbmc6IDA7XFxufVxcblxcbnNlbGVjdCwgdGV4dGFyZWEge1xcbiAgICBib3JkZXI6IG5vbmU7XFxuICAgIGJvcmRlci1ib3R0b206IHNvbGlkIDFweCBibGFjaztcXG4gICAgb3V0bGluZTogbm9uZTtcXG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xcbiAgICAtbW96LWFwcGVhcmFuY2U6IG5vbmU7XFxuICAgIGFwcGVhcmFuY2U6IG5vbmU7XFxuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDBweDtcXG4gICAgYm9yZGVyLXJhZGl1czogMHB4O1xcbiAgICB3aWR0aDogMTAwcHg7XFxuICAgIHBhZGRpbmc6IDEwcHggMDtcXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxufVxcblxcbnRleHRhcmVhIHtcXG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcXG4gICAgd2lkdGg6IDEwMCU7XFxuICAgIGhlaWdodDogMjVweDtcXG59XFxuXFxuYnV0dG9uIHtcXG4gIC13ZWJraXQtYXBwZWFyYW5jZTogYnV0dG9uO1xcbiAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgIGJvcmRlcjogbm9uZTtcXG4gICAgYmFja2dyb3VuZC1jb2xvcjogaG90cGluaztcXG4gICAgcGFkZGluZzogMTBweDtcXG4gICAgd2lkdGg6IDEwMHB4O1xcbiAgICBjb2xvcjogd2hpdGU7XFxufVxcblxcbi5mb3JtLWdyb3VwIHtcXG4gIG1hcmdpbjogMjBweCAwO1xcbn1cXG5cXG4uYnJvd3NlcnVwZ3JhZGUge1xcbiAgICBtYXJnaW46IDAuMmVtIDA7XFxuICAgIGJhY2tncm91bmQ6ICNjY2M7XFxuICAgIGNvbG9yOiAjMDAwO1xcbiAgICBwYWRkaW5nOiAwLjJlbSAwO1xcbn1cXG5cXG5cXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiAgIEF1dGhvcidzIGN1c3RvbSBzdHlsZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbkBpbXBvcnQgJ2FwcC5jc3MnO1xcblxcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuICAgTWVkaWEgUXVlcmllc1xcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuXFxuQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWluLXdpZHRoOiA2OC43NWVtKSB7XFxuICAgICNsZWZ0IHtcXG4gICAgICAgIHdpZHRoOiA0NSU7XFxuICAgIH1cXG5cXG4gICAgI3JpZ2h0IHtcXG4gICAgICAgIHdpZHRoOiA0NSU7XFxuICAgIH1cXG59XFxuXFxuQG1lZGlhIHByaW50LFxcbiAgICAgICAoLW8tbWluLWRldmljZS1waXhlbC1yYXRpbzogNS80KSxcXG4gICAgICAgKC13ZWJraXQtbWluLWRldmljZS1waXhlbC1yYXRpbzogMS4yNSksXFxuICAgICAgIChtaW4tcmVzb2x1dGlvbjogMTIwZHBpKSB7XFxuXFxufVxcblxcbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuICAgSGVscGVyIGNsYXNzZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbi5oaWRkZW4ge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcXG59XFxuXFxuLnZpc3VhbGx5aGlkZGVuIHtcXG4gICAgYm9yZGVyOiAwO1xcbiAgICBjbGlwOiByZWN0KDAgMCAwIDApO1xcbiAgICBoZWlnaHQ6IDFweDtcXG4gICAgbWFyZ2luOiAtMXB4O1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBwYWRkaW5nOiAwO1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIHdpZHRoOiAxcHg7XFxufVxcblxcbi52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6YWN0aXZlLFxcbi52aXN1YWxseWhpZGRlbi5mb2N1c2FibGU6Zm9jdXMge1xcbiAgICBjbGlwOiBhdXRvO1xcbiAgICBoZWlnaHQ6IGF1dG87XFxuICAgIG1hcmdpbjogMDtcXG4gICAgb3ZlcmZsb3c6IHZpc2libGU7XFxuICAgIHBvc2l0aW9uOiBzdGF0aWM7XFxuICAgIHdpZHRoOiBhdXRvO1xcbn1cXG5cXG4uaW52aXNpYmxlIHtcXG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xcbn1cXG5cXG4uY2xlYXJmaXg6YmVmb3JlLFxcbi5jbGVhcmZpeDphZnRlciB7XFxuICAgIGNvbnRlbnQ6IFxcXCIgXFxcIjtcXG4gICAgZGlzcGxheTogdGFibGU7XFxufVxcblxcbi5jbGVhcmZpeDphZnRlciB7XFxuICAgIGNsZWFyOiBib3RoO1xcbn1cXG5cXG4uY2xlYXJmaXgge1xcbiAgICAqem9vbTogMTtcXG59XFxuXFxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cXG4gICBQcmludCBzdHlsZXNcXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xcblxcbkBtZWRpYSBwcmludCB7XFxuICAgICosXFxuICAgICo6YmVmb3JlLFxcbiAgICAqOmFmdGVyIHtcXG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XFxuICAgICAgICBjb2xvcjogIzAwMCAhaW1wb3J0YW50O1xcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbiAgICAgICAgdGV4dC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgfVxcblxcbiAgICBhLFxcbiAgICBhOnZpc2l0ZWQge1xcbiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XFxuICAgIH1cXG5cXG4gICAgYVtocmVmXTphZnRlciB7XFxuICAgICAgICBjb250ZW50OiBcXFwiIChcXFwiIGF0dHIoaHJlZikgXFxcIilcXFwiO1xcbiAgICB9XFxuXFxuICAgIGFiYnJbdGl0bGVdOmFmdGVyIHtcXG4gICAgICAgIGNvbnRlbnQ6IFxcXCIgKFxcXCIgYXR0cih0aXRsZSkgXFxcIilcXFwiO1xcbiAgICB9XFxuXFxuICAgIGFbaHJlZl49XFxcIiNcXFwiXTphZnRlcixcXG4gICAgYVtocmVmXj1cXFwiamF2YXNjcmlwdDpcXFwiXTphZnRlciB7XFxuICAgICAgICBjb250ZW50OiBcXFwiXFxcIjtcXG4gICAgfVxcblxcbiAgICBwcmUsXFxuICAgIGJsb2NrcXVvdGUge1xcbiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzk5OTtcXG4gICAgICAgIHBhZ2UtYnJlYWstaW5zaWRlOiBhdm9pZDtcXG4gICAgfVxcblxcbiAgICB0aGVhZCB7XFxuICAgICAgICBkaXNwbGF5OiB0YWJsZS1oZWFkZXItZ3JvdXA7XFxuICAgIH1cXG5cXG4gICAgdHIsXFxuICAgIGltZyB7XFxuICAgICAgICBwYWdlLWJyZWFrLWluc2lkZTogYXZvaWQ7XFxuICAgIH1cXG5cXG4gICAgaW1nIHtcXG4gICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgICB9XFxuXFxuICAgIHAsXFxuICAgIGgyLFxcbiAgICBoMyB7XFxuICAgICAgICBvcnBoYW5zOiAzO1xcbiAgICAgICAgd2lkb3dzOiAzO1xcbiAgICB9XFxuXFxuICAgIGgyLFxcbiAgICBoMyB7XFxuICAgICAgICBwYWdlLWJyZWFrLWFmdGVyOiBhdm9pZDtcXG4gICAgfVxcbn1cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiXG52YXIgY29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZm9udHMuY3NzXCIpO1xuXG5pZih0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIGNvbnRlbnQgPSBbW21vZHVsZS5pZCwgY29udGVudCwgJyddXTtcblxudmFyIHRyYW5zZm9ybTtcbnZhciBpbnNlcnRJbnRvO1xuXG5cblxudmFyIG9wdGlvbnMgPSB7XCJobXJcIjp0cnVlfVxuXG5vcHRpb25zLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVxub3B0aW9ucy5pbnNlcnRJbnRvID0gdW5kZWZpbmVkO1xuXG52YXIgdXBkYXRlID0gcmVxdWlyZShcIiEuLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2xpYi9hZGRTdHlsZXMuanNcIikoY29udGVudCwgb3B0aW9ucyk7XG5cbmlmKGNvbnRlbnQubG9jYWxzKSBtb2R1bGUuZXhwb3J0cyA9IGNvbnRlbnQubG9jYWxzO1xuXG5pZihtb2R1bGUuaG90KSB7XG5cdG1vZHVsZS5ob3QuYWNjZXB0KFwiISEuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL2ZvbnRzLmNzc1wiLCBmdW5jdGlvbigpIHtcblx0XHR2YXIgbmV3Q29udGVudCA9IHJlcXVpcmUoXCIhIS4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vZm9udHMuY3NzXCIpO1xuXG5cdFx0aWYodHlwZW9mIG5ld0NvbnRlbnQgPT09ICdzdHJpbmcnKSBuZXdDb250ZW50ID0gW1ttb2R1bGUuaWQsIG5ld0NvbnRlbnQsICcnXV07XG5cblx0XHR2YXIgbG9jYWxzID0gKGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHZhciBrZXksIGlkeCA9IDA7XG5cblx0XHRcdGZvcihrZXkgaW4gYSkge1xuXHRcdFx0XHRpZighYiB8fCBhW2tleV0gIT09IGJba2V5XSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRpZHgrKztcblx0XHRcdH1cblxuXHRcdFx0Zm9yKGtleSBpbiBiKSBpZHgtLTtcblxuXHRcdFx0cmV0dXJuIGlkeCA9PT0gMDtcblx0XHR9KGNvbnRlbnQubG9jYWxzLCBuZXdDb250ZW50LmxvY2FscykpO1xuXG5cdFx0aWYoIWxvY2FscykgdGhyb3cgbmV3IEVycm9yKCdBYm9ydGluZyBDU1MgSE1SIGR1ZSB0byBjaGFuZ2VkIGNzcy1tb2R1bGVzIGxvY2Fscy4nKTtcblxuXHRcdHVwZGF0ZShuZXdDb250ZW50KTtcblx0fSk7XG5cblx0bW9kdWxlLmhvdC5kaXNwb3NlKGZ1bmN0aW9uKCkgeyB1cGRhdGUoKTsgfSk7XG59IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9jc3NXaXRoTWFwcGluZ1RvU3RyaW5nLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9HRVRfVVJMX0lNUE9SVF9fXyBmcm9tIFwiLi4vLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2dldFVybC5qc1wiO1xuaW1wb3J0IF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8wX19fIGZyb20gXCIuL09wZW5TYW5zLVJlZ3VsYXIudHRmXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzFfX18gZnJvbSBcIi4vT3BlblNhbnMtTGlnaHQudHRmXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG52YXIgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyA9IF9fX0NTU19MT0FERVJfR0VUX1VSTF9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9VUkxfSU1QT1JUXzBfX18pO1xudmFyIF9fX0NTU19MT0FERVJfVVJMX1JFUExBQ0VNRU5UXzFfX18gPSBfX19DU1NfTE9BREVSX0dFVF9VUkxfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfVVJMX0lNUE9SVF8xX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBcIkBmb250LWZhY2Uge1xcbiAgICBmb250LWZhbWlseTogT3BlblNhbnM7XFxuICAgIHNyYzogdXJsKFwiICsgX19fQ1NTX0xPQURFUl9VUkxfUkVQTEFDRU1FTlRfMF9fXyArIFwiKTtcXG59XFxuXFxuQGZvbnQtZmFjZSB7XFxuICAgIGZvbnQtZmFtaWx5OiBPcGVuU2Fucy1MaWdodDtcXG4gICAgc3JjOiB1cmwoXCIgKyBfX19DU1NfTE9BREVSX1VSTF9SRVBMQUNFTUVOVF8xX19fICsgXCIpO1xcbn1cXG5cXG5cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9mcmFtZXdvcmsvZm9udHMvZm9udHMuY3NzXCJdLFwibmFtZXNcIjpbXSxcIm1hcHBpbmdzXCI6XCJBQUFBO0lBQ0kscUJBQXFCO0lBQ3JCLDRDQUE4QjtBQUNsQzs7QUFFQTtJQUNJLDJCQUEyQjtJQUMzQiw0Q0FBNEI7QUFDaENcIixcInNvdXJjZXNDb250ZW50XCI6W1wiQGZvbnQtZmFjZSB7XFxuICAgIGZvbnQtZmFtaWx5OiBPcGVuU2FucztcXG4gICAgc3JjOiB1cmwoT3BlblNhbnMtUmVndWxhci50dGYpO1xcbn1cXG5cXG5AZm9udC1mYWNlIHtcXG4gICAgZm9udC1mYW1pbHk6IE9wZW5TYW5zLUxpZ2h0O1xcbiAgICBzcmM6IHVybChPcGVuU2Fucy1MaWdodC50dGYpO1xcbn1cXG5cXG5cIl0sXCJzb3VyY2VSb290XCI6XCJcIn1dKTtcbi8vIEV4cG9ydHNcbmV4cG9ydCBkZWZhdWx0IF9fX0NTU19MT0FERVJfRVhQT1JUX19fO1xuIiwiY29uc3QgZmluZCA9IHJlcXVpcmUoXCJsb2Rhc2gvZmluZFwiKTtcblxuY29uc3Qgc2V0dXBOb3RpZmljYXRpb25Gb3JtID0gcmVxdWlyZShcIi4vc2V0dXBOb3RpZmljYXRpb25Gb3JtXCIpO1xuY29uc3QgQmFzZU5vdGlmaWNhdGlvbiA9IHJlcXVpcmUoXCIuL0Jhc2VOb3RpZmljYXRpb25cIik7XG5cbmNvbnN0IE5vdGlmaWNhdGlvbkh1YiA9IHJlcXVpcmUoJy4vTm90aWZpY2F0aW9uSHViJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgTm90aWZpY2F0aW9uRm9ybSB7XG4gIGNvbnN0cnVjdG9yKG5vdGlmaWNhdGlvbnMsIHJlbmRlcikge1xuICAgIHRoaXMuc2hvdyA9IHRoaXMuc2hvdy5iaW5kKHRoaXMpO1xuICAgIHRoaXMuaGlkZSA9IHRoaXMuaGlkZS5iaW5kKHRoaXMpO1xuXG4gICAgdGhpcy5ub3RpZmljYXRpb25zID0gbm90aWZpY2F0aW9ucztcbiAgICB0aGlzLnJlbmRlciA9IHJlbmRlcjtcblxuICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJub3RpZmljYXRpb24tY29udGFpbmVyXCIpO1xuXG4gICAgc2V0dXBOb3RpZmljYXRpb25Gb3JtKG5vdGlmaWNhdGlvbnMpO1xuXG4gICAgTm90aWZpY2F0aW9uSHViLm9uSGlkZSh0aGlzLmhpZGUpO1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5vblNob3codGhpcy5zaG93KTtcbiAgfVxuXG4gIHNob3codHlwZSwgcHJvcHMpIHtcbiAgICBjb25zdCBmb3VuZE5vdGlmaWNhdGlvbiA9IGZpbmQodGhpcy5ub3RpZmljYXRpb25zLCB7IHR5cGUgfSkgfHwge307XG4gICAgY29uc3QgTm90aWZpY2F0aW9uID0gZm91bmROb3RpZmljYXRpb24udmlldyA/IGZvdW5kTm90aWZpY2F0aW9uLnZpZXcgOiBCYXNlTm90aWZpY2F0aW9uO1xuICAgIHRoaXMucmVuZGVyKHRoaXMuY29udGFpbmVyLCBOb3RpZmljYXRpb24sIHByb3BzKTtcbiAgICB0aGlzLmNvbnRhaW5lci5oaWRkZW4gPSBmYWxzZTtcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgdGhpcy5jb250YWluZXIuaGlkZGVuID0gdHJ1ZTtcbiAgfVxufTtcbiIsInZhciBiYXNlSXRlcmF0ZWUgPSByZXF1aXJlKCcuL19iYXNlSXRlcmF0ZWUnKSxcbiAgICBpc0FycmF5TGlrZSA9IHJlcXVpcmUoJy4vaXNBcnJheUxpa2UnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGBfLmZpbmRgIG9yIGBfLmZpbmRMYXN0YCBmdW5jdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZmluZEluZGV4RnVuYyBUaGUgZnVuY3Rpb24gdG8gZmluZCB0aGUgY29sbGVjdGlvbiBpbmRleC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGZpbmQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbmQoZmluZEluZGV4RnVuYykge1xuICByZXR1cm4gZnVuY3Rpb24oY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgICB2YXIgaXRlcmFibGUgPSBPYmplY3QoY29sbGVjdGlvbik7XG4gICAgaWYgKCFpc0FycmF5TGlrZShjb2xsZWN0aW9uKSkge1xuICAgICAgdmFyIGl0ZXJhdGVlID0gYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMyk7XG4gICAgICBjb2xsZWN0aW9uID0ga2V5cyhjb2xsZWN0aW9uKTtcbiAgICAgIHByZWRpY2F0ZSA9IGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gaXRlcmF0ZWUoaXRlcmFibGVba2V5XSwga2V5LCBpdGVyYWJsZSk7IH07XG4gICAgfVxuICAgIHZhciBpbmRleCA9IGZpbmRJbmRleEZ1bmMoY29sbGVjdGlvbiwgcHJlZGljYXRlLCBmcm9tSW5kZXgpO1xuICAgIHJldHVybiBpbmRleCA+IC0xID8gaXRlcmFibGVbaXRlcmF0ZWUgPyBjb2xsZWN0aW9uW2luZGV4XSA6IGluZGV4XSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVGaW5kO1xuIiwidmFyIGJhc2VJc01hdGNoID0gcmVxdWlyZSgnLi9fYmFzZUlzTWF0Y2gnKSxcbiAgICBnZXRNYXRjaERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXRjaERhdGEnKSxcbiAgICBtYXRjaGVzU3RyaWN0Q29tcGFyYWJsZSA9IHJlcXVpcmUoJy4vX21hdGNoZXNTdHJpY3RDb21wYXJhYmxlJyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8ubWF0Y2hlc2Agd2hpY2ggZG9lc24ndCBjbG9uZSBgc291cmNlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IHNwZWMgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VNYXRjaGVzKHNvdXJjZSkge1xuICB2YXIgbWF0Y2hEYXRhID0gZ2V0TWF0Y2hEYXRhKHNvdXJjZSk7XG4gIGlmIChtYXRjaERhdGEubGVuZ3RoID09IDEgJiYgbWF0Y2hEYXRhWzBdWzJdKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKG1hdGNoRGF0YVswXVswXSwgbWF0Y2hEYXRhWzBdWzFdKTtcbiAgfVxuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIG9iamVjdCA9PT0gc291cmNlIHx8IGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzO1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMSxcbiAgICBDT01QQVJFX1VOT1JERVJFRF9GTEFHID0gMjtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc01hdGNoYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtPYmplY3R9IHNvdXJjZSBUaGUgb2JqZWN0IG9mIHByb3BlcnR5IHZhbHVlcyB0byBtYXRjaC5cbiAqIEBwYXJhbSB7QXJyYXl9IG1hdGNoRGF0YSBUaGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3MgdG8gbWF0Y2guXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbY3VzdG9taXplcl0gVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgb2JqZWN0YCBpcyBhIG1hdGNoLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGJhc2VJc01hdGNoKG9iamVjdCwgc291cmNlLCBtYXRjaERhdGEsIGN1c3RvbWl6ZXIpIHtcbiAgdmFyIGluZGV4ID0gbWF0Y2hEYXRhLmxlbmd0aCxcbiAgICAgIGxlbmd0aCA9IGluZGV4LFxuICAgICAgbm9DdXN0b21pemVyID0gIWN1c3RvbWl6ZXI7XG5cbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuICFsZW5ndGg7XG4gIH1cbiAgb2JqZWN0ID0gT2JqZWN0KG9iamVjdCk7XG4gIHdoaWxlIChpbmRleC0tKSB7XG4gICAgdmFyIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIGlmICgobm9DdXN0b21pemVyICYmIGRhdGFbMl0pXG4gICAgICAgICAgPyBkYXRhWzFdICE9PSBvYmplY3RbZGF0YVswXV1cbiAgICAgICAgICA6ICEoZGF0YVswXSBpbiBvYmplY3QpXG4gICAgICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIGRhdGEgPSBtYXRjaERhdGFbaW5kZXhdO1xuICAgIHZhciBrZXkgPSBkYXRhWzBdLFxuICAgICAgICBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBzcmNWYWx1ZSA9IGRhdGFbMV07XG5cbiAgICBpZiAobm9DdXN0b21pemVyICYmIGRhdGFbMl0pIHtcbiAgICAgIGlmIChvYmpWYWx1ZSA9PT0gdW5kZWZpbmVkICYmICEoa2V5IGluIG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhY2sgPSBuZXcgU3RhY2s7XG4gICAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgICB2YXIgcmVzdWx0ID0gY3VzdG9taXplcihvYmpWYWx1ZSwgc3JjVmFsdWUsIGtleSwgb2JqZWN0LCBzb3VyY2UsIHN0YWNrKTtcbiAgICAgIH1cbiAgICAgIGlmICghKHJlc3VsdCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGJhc2VJc0VxdWFsKHNyY1ZhbHVlLCBvYmpWYWx1ZSwgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgfCBDT01QQVJFX1VOT1JERVJFRF9GTEFHLCBjdXN0b21pemVyLCBzdGFjaylcbiAgICAgICAgICAgIDogcmVzdWx0XG4gICAgICAgICAgKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VJc01hdGNoO1xuIiwiLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBsaXN0IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IFtdO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUNsZWFyO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgYXJyYXlQcm90byA9IEFycmF5LnByb3RvdHlwZTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3BsaWNlID0gYXJyYXlQcm90by5zcGxpY2U7XG5cbi8qKlxuICogUmVtb3ZlcyBga2V5YCBhbmQgaXRzIHZhbHVlIGZyb20gdGhlIGxpc3QgY2FjaGUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byByZW1vdmUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGVudHJ5IHdhcyByZW1vdmVkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZURlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgaW5kZXggPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5KTtcblxuICBpZiAoaW5kZXggPCAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBsYXN0SW5kZXggPSBkYXRhLmxlbmd0aCAtIDE7XG4gIGlmIChpbmRleCA9PSBsYXN0SW5kZXgpIHtcbiAgICBkYXRhLnBvcCgpO1xuICB9IGVsc2Uge1xuICAgIHNwbGljZS5jYWxsKGRhdGEsIGluZGV4LCAxKTtcbiAgfVxuICAtLXRoaXMuc2l6ZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlRGVsZXRlO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGxpc3RDYWNoZUdldDtcbiIsInZhciBhc3NvY0luZGV4T2YgPSByZXF1aXJlKCcuL19hc3NvY0luZGV4T2YnKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYSBsaXN0IGNhY2hlIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkpID4gLTE7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlSGFzO1xuIiwidmFyIGFzc29jSW5kZXhPZiA9IHJlcXVpcmUoJy4vX2Fzc29jSW5kZXhPZicpO1xuXG4vKipcbiAqIFNldHMgdGhlIGxpc3QgY2FjaGUgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHNldC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHNldC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGxpc3QgY2FjaGUgaW5zdGFuY2UuXG4gKi9cbmZ1bmN0aW9uIGxpc3RDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgaWYgKGluZGV4IDwgMCkge1xuICAgICsrdGhpcy5zaXplO1xuICAgIGRhdGEucHVzaChba2V5LCB2YWx1ZV0pO1xuICB9IGVsc2Uge1xuICAgIGRhdGFbaW5kZXhdWzFdID0gdmFsdWU7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbGlzdENhY2hlU2V0O1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIHN0YWNrLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBjbGVhclxuICogQG1lbWJlck9mIFN0YWNrXG4gKi9cbmZ1bmN0aW9uIHN0YWNrQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlO1xuICB0aGlzLnNpemUgPSAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBzdGFjay5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gcmVtb3ZlLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBlbnRyeSB3YXMgcmVtb3ZlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBzdGFja0RlbGV0ZShrZXkpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLFxuICAgICAgcmVzdWx0ID0gZGF0YVsnZGVsZXRlJ10oa2V5KTtcblxuICB0aGlzLnNpemUgPSBkYXRhLnNpemU7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tEZWxldGU7XG4iLCIvKipcbiAqIEdldHMgdGhlIHN0YWNrIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgU3RhY2tcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBzdGFja0dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uZ2V0KGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tHZXQ7XG4iLCIvKipcbiAqIENoZWNrcyBpZiBhIHN0YWNrIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIFN0YWNrXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc3RhY2tIYXMoa2V5KSB7XG4gIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0YWNrSGFzO1xuIiwidmFyIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpLFxuICAgIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIHNpemUgdG8gZW5hYmxlIGxhcmdlIGFycmF5IG9wdGltaXphdGlvbnMuICovXG52YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDtcblxuLyoqXG4gKiBTZXRzIHRoZSBzdGFjayBga2V5YCB0byBgdmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBzZXRcbiAqIEBtZW1iZXJPZiBTdGFja1xuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBzdGFjayBjYWNoZSBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gc3RhY2tTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIGlmIChkYXRhIGluc3RhbmNlb2YgTGlzdENhY2hlKSB7XG4gICAgdmFyIHBhaXJzID0gZGF0YS5fX2RhdGFfXztcbiAgICBpZiAoIU1hcCB8fCAocGFpcnMubGVuZ3RoIDwgTEFSR0VfQVJSQVlfU0laRSAtIDEpKSB7XG4gICAgICBwYWlycy5wdXNoKFtrZXksIHZhbHVlXSk7XG4gICAgICB0aGlzLnNpemUgPSArK2RhdGEuc2l6ZTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkYXRhID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlycyk7XG4gIH1cbiAgZGF0YS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHRoaXMuc2l6ZSA9IGRhdGEuc2l6ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RhY2tTZXQ7XG4iLCJ2YXIgaXNGdW5jdGlvbiA9IHJlcXVpcmUoJy4vaXNGdW5jdGlvbicpLFxuICAgIGlzTWFza2VkID0gcmVxdWlyZSgnLi9faXNNYXNrZWQnKSxcbiAgICBpc09iamVjdCA9IHJlcXVpcmUoJy4vaXNPYmplY3QnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKlxuICogVXNlZCB0byBtYXRjaCBgUmVnRXhwYFxuICogW3N5bnRheCBjaGFyYWN0ZXJzXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wYXR0ZXJucykuXG4gKi9cbnZhciByZVJlZ0V4cENoYXIgPSAvW1xcXFxeJC4qKz8oKVtcXF17fXxdL2c7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBob3N0IGNvbnN0cnVjdG9ycyAoU2FmYXJpKS4gKi9cbnZhciByZUlzSG9zdEN0b3IgPSAvXlxcW29iamVjdCAuKz9Db25zdHJ1Y3RvclxcXSQvO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1Byb3RvID0gRnVuY3Rpb24ucHJvdG90eXBlLFxuICAgIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGlmIGEgbWV0aG9kIGlzIG5hdGl2ZS4gKi9cbnZhciByZUlzTmF0aXZlID0gUmVnRXhwKCdeJyArXG4gIGZ1bmNUb1N0cmluZy5jYWxsKGhhc093blByb3BlcnR5KS5yZXBsYWNlKHJlUmVnRXhwQ2hhciwgJ1xcXFwkJicpXG4gIC5yZXBsYWNlKC9oYXNPd25Qcm9wZXJ0eXwoZnVuY3Rpb24pLio/KD89XFxcXFxcKCl8IGZvciAuKz8oPz1cXFxcXFxdKS9nLCAnJDEuKj8nKSArICckJ1xuKTtcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbih2YWx1ZSkgPyByZUlzTmF0aXZlIDogcmVJc0hvc3RDdG9yO1xuICByZXR1cm4gcGF0dGVybi50ZXN0KHRvU291cmNlKHZhbHVlKSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzTmF0aXZlO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFVzZWQgdG8gcmVzb2x2ZSB0aGVcbiAqIFtgdG9TdHJpbmdUYWdgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nKVxuICogb2YgdmFsdWVzLlxuICovXG52YXIgbmF0aXZlT2JqZWN0VG9TdHJpbmcgPSBvYmplY3RQcm90by50b1N0cmluZztcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgc3ltVG9TdHJpbmdUYWcgPSBTeW1ib2wgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlR2V0VGFnYCB3aGljaCBpZ25vcmVzIGBTeW1ib2wudG9TdHJpbmdUYWdgIHZhbHVlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSByYXcgYHRvU3RyaW5nVGFnYC5cbiAqL1xuZnVuY3Rpb24gZ2V0UmF3VGFnKHZhbHVlKSB7XG4gIHZhciBpc093biA9IGhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIHN5bVRvU3RyaW5nVGFnKSxcbiAgICAgIHRhZyA9IHZhbHVlW3N5bVRvU3RyaW5nVGFnXTtcblxuICB0cnkge1xuICAgIHZhbHVlW3N5bVRvU3RyaW5nVGFnXSA9IHVuZGVmaW5lZDtcbiAgICB2YXIgdW5tYXNrZWQgPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7fVxuXG4gIHZhciByZXN1bHQgPSBuYXRpdmVPYmplY3RUb1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgaWYgKHVubWFza2VkKSB7XG4gICAgaWYgKGlzT3duKSB7XG4gICAgICB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ10gPSB0YWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSB2YWx1ZVtzeW1Ub1N0cmluZ1RhZ107XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0UmF3VGFnO1xuIiwiLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG5hdGl2ZU9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyB1c2luZyBgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZ2AuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICovXG5mdW5jdGlvbiBvYmplY3RUb1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gbmF0aXZlT2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gb2JqZWN0VG9TdHJpbmc7XG4iLCJ2YXIgY29yZUpzRGF0YSA9IHJlcXVpcmUoJy4vX2NvcmVKc0RhdGEnKTtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IG1ldGhvZHMgbWFzcXVlcmFkaW5nIGFzIG5hdGl2ZS4gKi9cbnZhciBtYXNrU3JjS2V5ID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgdWlkID0gL1teLl0rJC8uZXhlYyhjb3JlSnNEYXRhICYmIGNvcmVKc0RhdGEua2V5cyAmJiBjb3JlSnNEYXRhLmtleXMuSUVfUFJPVE8gfHwgJycpO1xuICByZXR1cm4gdWlkID8gKCdTeW1ib2woc3JjKV8xLicgKyB1aWQpIDogJyc7XG59KCkpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgZnVuY2AgaGFzIGl0cyBzb3VyY2UgbWFza2VkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgZnVuY2AgaXMgbWFza2VkLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHtcbiAgcmV0dXJuICEhbWFza1NyY0tleSAmJiAobWFza1NyY0tleSBpbiBmdW5jKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc01hc2tlZDtcbiIsInZhciByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb3ZlcnJlYWNoaW5nIGNvcmUtanMgc2hpbXMuICovXG52YXIgY29yZUpzRGF0YSA9IHJvb3RbJ19fY29yZS1qc19zaGFyZWRfXyddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvcmVKc0RhdGE7XG4iLCIvKipcbiAqIEdldHMgdGhlIHZhbHVlIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdF0gVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBnZXRWYWx1ZShvYmplY3QsIGtleSkge1xuICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB1bmRlZmluZWQgOiBvYmplY3Rba2V5XTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBnZXRWYWx1ZTtcbiIsInZhciBIYXNoID0gcmVxdWlyZSgnLi9fSGFzaCcpLFxuICAgIExpc3RDYWNoZSA9IHJlcXVpcmUoJy4vX0xpc3RDYWNoZScpLFxuICAgIE1hcCA9IHJlcXVpcmUoJy4vX01hcCcpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIG1hcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUNsZWFyKCkge1xuICB0aGlzLnNpemUgPSAwO1xuICB0aGlzLl9fZGF0YV9fID0ge1xuICAgICdoYXNoJzogbmV3IEhhc2gsXG4gICAgJ21hcCc6IG5ldyAoTWFwIHx8IExpc3RDYWNoZSksXG4gICAgJ3N0cmluZyc6IG5ldyBIYXNoXG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVDbGVhcjtcbiIsInZhciBoYXNoQ2xlYXIgPSByZXF1aXJlKCcuL19oYXNoQ2xlYXInKSxcbiAgICBoYXNoRGVsZXRlID0gcmVxdWlyZSgnLi9faGFzaERlbGV0ZScpLFxuICAgIGhhc2hHZXQgPSByZXF1aXJlKCcuL19oYXNoR2V0JyksXG4gICAgaGFzaEhhcyA9IHJlcXVpcmUoJy4vX2hhc2hIYXMnKSxcbiAgICBoYXNoU2V0ID0gcmVxdWlyZSgnLi9faGFzaFNldCcpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBoYXNoIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gSGFzaChlbnRyaWVzKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgbGVuZ3RoID0gZW50cmllcyA9PSBudWxsID8gMCA6IGVudHJpZXMubGVuZ3RoO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8vIEFkZCBtZXRob2RzIHRvIGBIYXNoYC5cbkhhc2gucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyO1xuSGFzaC5wcm90b3R5cGVbJ2RlbGV0ZSddID0gaGFzaERlbGV0ZTtcbkhhc2gucHJvdG90eXBlLmdldCA9IGhhc2hHZXQ7XG5IYXNoLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzO1xuSGFzaC5wcm90b3R5cGUuc2V0ID0gaGFzaFNldDtcblxubW9kdWxlLmV4cG9ydHMgPSBIYXNoO1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGtleS12YWx1ZSBlbnRyaWVzIGZyb20gdGhlIGhhc2guXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgSGFzaFxuICovXG5mdW5jdGlvbiBoYXNoQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBuYXRpdmVDcmVhdGUgPyBuYXRpdmVDcmVhdGUobnVsbCkgOiB7fTtcbiAgdGhpcy5zaXplID0gMDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoQ2xlYXI7XG4iLCIvKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgdmFyIHJlc3VsdCA9IHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbiAgdGhpcy5zaXplIC09IHJlc3VsdCA/IDEgOiAwO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhhc2hEZWxldGU7XG4iLCJ2YXIgbmF0aXZlQ3JlYXRlID0gcmVxdWlyZSgnLi9fbmF0aXZlQ3JlYXRlJyk7XG5cbi8qKiBVc2VkIHRvIHN0YW5kLWluIGZvciBgdW5kZWZpbmVkYCBoYXNoIHZhbHVlcy4gKi9cbnZhciBIQVNIX1VOREVGSU5FRCA9ICdfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBoYXNoR2V0O1xuIiwidmFyIG5hdGl2ZUNyZWF0ZSA9IHJlcXVpcmUoJy4vX25hdGl2ZUNyZWF0ZScpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIENoZWNrcyBpZiBhIGhhc2ggdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSBlbnRyeSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBhbiBlbnRyeSBmb3IgYGtleWAgZXhpc3RzLCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGhhc2hIYXMoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IChkYXRhW2tleV0gIT09IHVuZGVmaW5lZCkgOiBoYXNPd25Qcm9wZXJ0eS5jYWxsKGRhdGEsIGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaEhhcztcbiIsInZhciBuYXRpdmVDcmVhdGUgPSByZXF1aXJlKCcuL19uYXRpdmVDcmVhdGUnKTtcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKipcbiAqIFNldHMgdGhlIGhhc2ggYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBoYXNoIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBoYXNoU2V0KGtleSwgdmFsdWUpIHtcbiAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fO1xuICB0aGlzLnNpemUgKz0gdGhpcy5oYXMoa2V5KSA/IDAgOiAxO1xuICBkYXRhW2tleV0gPSAobmF0aXZlQ3JlYXRlICYmIHZhbHVlID09PSB1bmRlZmluZWQpID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzaFNldDtcbiIsInZhciBnZXRNYXBEYXRhID0gcmVxdWlyZSgnLi9fZ2V0TWFwRGF0YScpO1xuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHZhciByZXN1bHQgPSBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG4gIHRoaXMuc2l6ZSAtPSByZXN1bHQgPyAxIDogMDtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBDYWNoZURlbGV0ZTtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpc0tleWFibGU7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBtYXAgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBNYXBDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIG1hcENhY2hlR2V0KGtleSkge1xuICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLmdldChrZXkpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlR2V0O1xuIiwidmFyIGdldE1hcERhdGEgPSByZXF1aXJlKCcuL19nZXRNYXBEYXRhJyk7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgbWFwIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVIYXMoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSkuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gbWFwQ2FjaGVIYXM7XG4iLCJ2YXIgZ2V0TWFwRGF0YSA9IHJlcXVpcmUoJy4vX2dldE1hcERhdGEnKTtcblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gZ2V0TWFwRGF0YSh0aGlzLCBrZXkpLFxuICAgICAgc2l6ZSA9IGRhdGEuc2l6ZTtcblxuICBkYXRhLnNldChrZXksIHZhbHVlKTtcbiAgdGhpcy5zaXplICs9IGRhdGEuc2l6ZSA9PSBzaXplID8gMCA6IDE7XG4gIHJldHVybiB0aGlzO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1hcENhY2hlU2V0O1xuIiwidmFyIFN0YWNrID0gcmVxdWlyZSgnLi9fU3RhY2snKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgZXF1YWxCeVRhZyA9IHJlcXVpcmUoJy4vX2VxdWFsQnlUYWcnKSxcbiAgICBlcXVhbE9iamVjdHMgPSByZXF1aXJlKCcuL19lcXVhbE9iamVjdHMnKSxcbiAgICBnZXRUYWcgPSByZXF1aXJlKCcuL19nZXRUYWcnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNCdWZmZXIgPSByZXF1aXJlKCcuL2lzQnVmZmVyJyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgYXJnc1RhZyA9ICdbb2JqZWN0IEFyZ3VtZW50c10nLFxuICAgIGFycmF5VGFnID0gJ1tvYmplY3QgQXJyYXldJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJztcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsYCBmb3IgYXJyYXlzIGFuZCBvYmplY3RzIHdoaWNoIHBlcmZvcm1zXG4gKiBkZWVwIGNvbXBhcmlzb25zIGFuZCB0cmFja3MgdHJhdmVyc2VkIG9iamVjdHMgZW5hYmxpbmcgb2JqZWN0cyB3aXRoIGNpcmN1bGFyXG4gKiByZWZlcmVuY2VzIHRvIGJlIGNvbXBhcmVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbc3RhY2tdIFRyYWNrcyB0cmF2ZXJzZWQgYG9iamVjdGAgYW5kIGBvdGhlcmAgb2JqZWN0cy5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0cyBhcmUgZXF1aXZhbGVudCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNFcXVhbERlZXAob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjaykge1xuICB2YXIgb2JqSXNBcnIgPSBpc0FycmF5KG9iamVjdCksXG4gICAgICBvdGhJc0FyciA9IGlzQXJyYXkob3RoZXIpLFxuICAgICAgb2JqVGFnID0gb2JqSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvYmplY3QpLFxuICAgICAgb3RoVGFnID0gb3RoSXNBcnIgPyBhcnJheVRhZyA6IGdldFRhZyhvdGhlcik7XG5cbiAgb2JqVGFnID0gb2JqVGFnID09IGFyZ3NUYWcgPyBvYmplY3RUYWcgOiBvYmpUYWc7XG4gIG90aFRhZyA9IG90aFRhZyA9PSBhcmdzVGFnID8gb2JqZWN0VGFnIDogb3RoVGFnO1xuXG4gIHZhciBvYmpJc09iaiA9IG9ialRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBvdGhJc09iaiA9IG90aFRhZyA9PSBvYmplY3RUYWcsXG4gICAgICBpc1NhbWVUYWcgPSBvYmpUYWcgPT0gb3RoVGFnO1xuXG4gIGlmIChpc1NhbWVUYWcgJiYgaXNCdWZmZXIob2JqZWN0KSkge1xuICAgIGlmICghaXNCdWZmZXIob3RoZXIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIG9iaklzQXJyID0gdHJ1ZTtcbiAgICBvYmpJc09iaiA9IGZhbHNlO1xuICB9XG4gIGlmIChpc1NhbWVUYWcgJiYgIW9iaklzT2JqKSB7XG4gICAgc3RhY2sgfHwgKHN0YWNrID0gbmV3IFN0YWNrKTtcbiAgICByZXR1cm4gKG9iaklzQXJyIHx8IGlzVHlwZWRBcnJheShvYmplY3QpKVxuICAgICAgPyBlcXVhbEFycmF5cyhvYmplY3QsIG90aGVyLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKVxuICAgICAgOiBlcXVhbEJ5VGFnKG9iamVjdCwgb3RoZXIsIG9ialRhZywgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG4gIH1cbiAgaWYgKCEoYml0bWFzayAmIENPTVBBUkVfUEFSVElBTF9GTEFHKSkge1xuICAgIHZhciBvYmpJc1dyYXBwZWQgPSBvYmpJc09iaiAmJiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ19fd3JhcHBlZF9fJyksXG4gICAgICAgIG90aElzV3JhcHBlZCA9IG90aElzT2JqICYmIGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsICdfX3dyYXBwZWRfXycpO1xuXG4gICAgaWYgKG9iaklzV3JhcHBlZCB8fCBvdGhJc1dyYXBwZWQpIHtcbiAgICAgIHZhciBvYmpVbndyYXBwZWQgPSBvYmpJc1dyYXBwZWQgPyBvYmplY3QudmFsdWUoKSA6IG9iamVjdCxcbiAgICAgICAgICBvdGhVbndyYXBwZWQgPSBvdGhJc1dyYXBwZWQgPyBvdGhlci52YWx1ZSgpIDogb3RoZXI7XG5cbiAgICAgIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gICAgICByZXR1cm4gZXF1YWxGdW5jKG9ialVud3JhcHBlZCwgb3RoVW53cmFwcGVkLCBiaXRtYXNrLCBjdXN0b21pemVyLCBzdGFjayk7XG4gICAgfVxuICB9XG4gIGlmICghaXNTYW1lVGFnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0YWNrIHx8IChzdGFjayA9IG5ldyBTdGFjayk7XG4gIHJldHVybiBlcXVhbE9iamVjdHMob2JqZWN0LCBvdGhlciwgYml0bWFzaywgY3VzdG9taXplciwgZXF1YWxGdW5jLCBzdGFjayk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzRXF1YWxEZWVwO1xuIiwidmFyIE1hcENhY2hlID0gcmVxdWlyZSgnLi9fTWFwQ2FjaGUnKSxcbiAgICBzZXRDYWNoZUFkZCA9IHJlcXVpcmUoJy4vX3NldENhY2hlQWRkJyksXG4gICAgc2V0Q2FjaGVIYXMgPSByZXF1aXJlKCcuL19zZXRDYWNoZUhhcycpO1xuXG4vKipcbiAqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNhY2hlIG9iamVjdCB0byBzdG9yZSB1bmlxdWUgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFt2YWx1ZXNdIFRoZSB2YWx1ZXMgdG8gY2FjaGUuXG4gKi9cbmZ1bmN0aW9uIFNldENhY2hlKHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcyA9PSBudWxsID8gMCA6IHZhbHVlcy5sZW5ndGg7XG5cbiAgdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB0aGlzLmFkZCh2YWx1ZXNbaW5kZXhdKTtcbiAgfVxufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgU2V0Q2FjaGVgLlxuU2V0Q2FjaGUucHJvdG90eXBlLmFkZCA9IFNldENhY2hlLnByb3RvdHlwZS5wdXNoID0gc2V0Q2FjaGVBZGQ7XG5TZXRDYWNoZS5wcm90b3R5cGUuaGFzID0gc2V0Q2FjaGVIYXM7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0Q2FjaGU7XG4iLCIvKiogVXNlZCB0byBzdGFuZC1pbiBmb3IgYHVuZGVmaW5lZGAgaGFzaCB2YWx1ZXMuICovXG52YXIgSEFTSF9VTkRFRklORUQgPSAnX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyc7XG5cbi8qKlxuICogQWRkcyBgdmFsdWVgIHRvIHRoZSBhcnJheSBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgYWRkXG4gKiBAbWVtYmVyT2YgU2V0Q2FjaGVcbiAqIEBhbGlhcyBwdXNoXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjYWNoZS5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBzZXRDYWNoZUFkZCh2YWx1ZSkge1xuICB0aGlzLl9fZGF0YV9fLnNldCh2YWx1ZSwgSEFTSF9VTkRFRklORUQpO1xuICByZXR1cm4gdGhpcztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUFkZDtcbiIsIi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgaW4gdGhlIGFycmF5IGNhY2hlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBoYXNcbiAqIEBtZW1iZXJPZiBTZXRDYWNoZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2VhcmNoIGZvci5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgZm91bmQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gc2V0Q2FjaGVIYXModmFsdWUpIHtcbiAgcmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRDYWNoZUhhcztcbiIsIi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLnNvbWVgIGZvciBhcnJheXMgd2l0aG91dCBzdXBwb3J0IGZvciBpdGVyYXRlZVxuICogc2hvcnRoYW5kcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gW2FycmF5XSBUaGUgYXJyYXkgdG8gaXRlcmF0ZSBvdmVyLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW55IGVsZW1lbnQgcGFzc2VzIHRoZSBwcmVkaWNhdGUgY2hlY2ssXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBhcnJheVNvbWUoYXJyYXksIHByZWRpY2F0ZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgaWYgKHByZWRpY2F0ZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYXJyYXlTb21lO1xuIiwiLyoqXG4gKiBDaGVja3MgaWYgYSBgY2FjaGVgIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBjYWNoZSBUaGUgY2FjaGUgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gY2FjaGVIYXMoY2FjaGUsIGtleSkge1xuICByZXR1cm4gY2FjaGUuaGFzKGtleSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2FjaGVIYXM7XG4iLCJ2YXIgU3ltYm9sID0gcmVxdWlyZSgnLi9fU3ltYm9sJyksXG4gICAgVWludDhBcnJheSA9IHJlcXVpcmUoJy4vX1VpbnQ4QXJyYXknKSxcbiAgICBlcSA9IHJlcXVpcmUoJy4vZXEnKSxcbiAgICBlcXVhbEFycmF5cyA9IHJlcXVpcmUoJy4vX2VxdWFsQXJyYXlzJyksXG4gICAgbWFwVG9BcnJheSA9IHJlcXVpcmUoJy4vX21hcFRvQXJyYXknKSxcbiAgICBzZXRUb0FycmF5ID0gcmVxdWlyZSgnLi9fc2V0VG9BcnJheScpO1xuXG4vKiogVXNlZCB0byBjb21wb3NlIGJpdG1hc2tzIGZvciB2YWx1ZSBjb21wYXJpc29ucy4gKi9cbnZhciBDT01QQVJFX1BBUlRJQUxfRkxBRyA9IDEsXG4gICAgQ09NUEFSRV9VTk9SREVSRURfRkxBRyA9IDI7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBib29sVGFnID0gJ1tvYmplY3QgQm9vbGVhbl0nLFxuICAgIGRhdGVUYWcgPSAnW29iamVjdCBEYXRlXScsXG4gICAgZXJyb3JUYWcgPSAnW29iamVjdCBFcnJvcl0nLFxuICAgIG1hcFRhZyA9ICdbb2JqZWN0IE1hcF0nLFxuICAgIG51bWJlclRhZyA9ICdbb2JqZWN0IE51bWJlcl0nLFxuICAgIHJlZ2V4cFRhZyA9ICdbb2JqZWN0IFJlZ0V4cF0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHN0cmluZ1RhZyA9ICdbb2JqZWN0IFN0cmluZ10nLFxuICAgIHN5bWJvbFRhZyA9ICdbb2JqZWN0IFN5bWJvbF0nO1xuXG52YXIgYXJyYXlCdWZmZXJUYWcgPSAnW29iamVjdCBBcnJheUJ1ZmZlcl0nLFxuICAgIGRhdGFWaWV3VGFnID0gJ1tvYmplY3QgRGF0YVZpZXddJztcblxuLyoqIFVzZWQgdG8gY29udmVydCBzeW1ib2xzIHRvIHByaW1pdGl2ZXMgYW5kIHN0cmluZ3MuICovXG52YXIgc3ltYm9sUHJvdG8gPSBTeW1ib2wgPyBTeW1ib2wucHJvdG90eXBlIDogdW5kZWZpbmVkLFxuICAgIHN5bWJvbFZhbHVlT2YgPSBzeW1ib2xQcm90byA/IHN5bWJvbFByb3RvLnZhbHVlT2YgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBiYXNlSXNFcXVhbERlZXBgIGZvciBjb21wYXJpbmcgb2JqZWN0cyBvZlxuICogdGhlIHNhbWUgYHRvU3RyaW5nVGFnYC5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBmdW5jdGlvbiBvbmx5IHN1cHBvcnRzIGNvbXBhcmluZyB2YWx1ZXMgd2l0aCB0YWdzIG9mXG4gKiBgQm9vbGVhbmAsIGBEYXRlYCwgYEVycm9yYCwgYE51bWJlcmAsIGBSZWdFeHBgLCBvciBgU3RyaW5nYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge09iamVjdH0gb3RoZXIgVGhlIG90aGVyIG9iamVjdCB0byBjb21wYXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhZyBUaGUgYHRvU3RyaW5nVGFnYCBvZiB0aGUgb2JqZWN0cyB0byBjb21wYXJlLlxuICogQHBhcmFtIHtudW1iZXJ9IGJpdG1hc2sgVGhlIGJpdG1hc2sgZmxhZ3MuIFNlZSBgYmFzZUlzRXF1YWxgIGZvciBtb3JlIGRldGFpbHMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjdXN0b21pemVyIFRoZSBmdW5jdGlvbiB0byBjdXN0b21pemUgY29tcGFyaXNvbnMuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBlcXVhbEZ1bmMgVGhlIGZ1bmN0aW9uIHRvIGRldGVybWluZSBlcXVpdmFsZW50cyBvZiB2YWx1ZXMuXG4gKiBAcGFyYW0ge09iamVjdH0gc3RhY2sgVHJhY2tzIHRyYXZlcnNlZCBgb2JqZWN0YCBhbmQgYG90aGVyYCBvYmplY3RzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIHRoZSBvYmplY3RzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGVxdWFsQnlUYWcob2JqZWN0LCBvdGhlciwgdGFnLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKSB7XG4gIHN3aXRjaCAodGFnKSB7XG4gICAgY2FzZSBkYXRhVmlld1RhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAob2JqZWN0LmJ5dGVPZmZzZXQgIT0gb3RoZXIuYnl0ZU9mZnNldCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgb2JqZWN0ID0gb2JqZWN0LmJ1ZmZlcjtcbiAgICAgIG90aGVyID0gb3RoZXIuYnVmZmVyO1xuXG4gICAgY2FzZSBhcnJheUJ1ZmZlclRhZzpcbiAgICAgIGlmICgob2JqZWN0LmJ5dGVMZW5ndGggIT0gb3RoZXIuYnl0ZUxlbmd0aCkgfHxcbiAgICAgICAgICAhZXF1YWxGdW5jKG5ldyBVaW50OEFycmF5KG9iamVjdCksIG5ldyBVaW50OEFycmF5KG90aGVyKSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG5cbiAgICBjYXNlIGJvb2xUYWc6XG4gICAgY2FzZSBkYXRlVGFnOlxuICAgIGNhc2UgbnVtYmVyVGFnOlxuICAgICAgLy8gQ29lcmNlIGJvb2xlYW5zIHRvIGAxYCBvciBgMGAgYW5kIGRhdGVzIHRvIG1pbGxpc2Vjb25kcy5cbiAgICAgIC8vIEludmFsaWQgZGF0ZXMgYXJlIGNvZXJjZWQgdG8gYE5hTmAuXG4gICAgICByZXR1cm4gZXEoK29iamVjdCwgK290aGVyKTtcblxuICAgIGNhc2UgZXJyb3JUYWc6XG4gICAgICByZXR1cm4gb2JqZWN0Lm5hbWUgPT0gb3RoZXIubmFtZSAmJiBvYmplY3QubWVzc2FnZSA9PSBvdGhlci5tZXNzYWdlO1xuXG4gICAgY2FzZSByZWdleHBUYWc6XG4gICAgY2FzZSBzdHJpbmdUYWc6XG4gICAgICAvLyBDb2VyY2UgcmVnZXhlcyB0byBzdHJpbmdzIGFuZCB0cmVhdCBzdHJpbmdzLCBwcmltaXRpdmVzIGFuZCBvYmplY3RzLFxuICAgICAgLy8gYXMgZXF1YWwuIFNlZSBodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50b3N0cmluZ1xuICAgICAgLy8gZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiBvYmplY3QgPT0gKG90aGVyICsgJycpO1xuXG4gICAgY2FzZSBtYXBUYWc6XG4gICAgICB2YXIgY29udmVydCA9IG1hcFRvQXJyYXk7XG5cbiAgICBjYXNlIHNldFRhZzpcbiAgICAgIHZhciBpc1BhcnRpYWwgPSBiaXRtYXNrICYgQ09NUEFSRV9QQVJUSUFMX0ZMQUc7XG4gICAgICBjb252ZXJ0IHx8IChjb252ZXJ0ID0gc2V0VG9BcnJheSk7XG5cbiAgICAgIGlmIChvYmplY3Quc2l6ZSAhPSBvdGhlci5zaXplICYmICFpc1BhcnRpYWwpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQXNzdW1lIGN5Y2xpYyB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgICAgdmFyIHN0YWNrZWQgPSBzdGFjay5nZXQob2JqZWN0KTtcbiAgICAgIGlmIChzdGFja2VkKSB7XG4gICAgICAgIHJldHVybiBzdGFja2VkID09IG90aGVyO1xuICAgICAgfVxuICAgICAgYml0bWFzayB8PSBDT01QQVJFX1VOT1JERVJFRF9GTEFHO1xuXG4gICAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICAgIHN0YWNrLnNldChvYmplY3QsIG90aGVyKTtcbiAgICAgIHZhciByZXN1bHQgPSBlcXVhbEFycmF5cyhjb252ZXJ0KG9iamVjdCksIGNvbnZlcnQob3RoZXIpLCBiaXRtYXNrLCBjdXN0b21pemVyLCBlcXVhbEZ1bmMsIHN0YWNrKTtcbiAgICAgIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcblxuICAgIGNhc2Ugc3ltYm9sVGFnOlxuICAgICAgaWYgKHN5bWJvbFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YuY2FsbChvYmplY3QpID09IHN5bWJvbFZhbHVlT2YuY2FsbChvdGhlcik7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsQnlUYWc7XG4iLCJ2YXIgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyoqIEJ1aWx0LWluIHZhbHVlIHJlZmVyZW5jZXMuICovXG52YXIgVWludDhBcnJheSA9IHJvb3QuVWludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSBVaW50OEFycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgbWFwYCB0byBpdHMga2V5LXZhbHVlIHBhaXJzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga2V5LXZhbHVlIHBhaXJzLlxuICovXG5mdW5jdGlvbiBtYXBUb0FycmF5KG1hcCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KG1hcC5zaXplKTtcblxuICBtYXAuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gICAgcmVzdWx0WysraW5kZXhdID0gW2tleSwgdmFsdWVdO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBtYXBUb0FycmF5O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBgc2V0YCB0byBhbiBhcnJheSBvZiBpdHMgdmFsdWVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gc2V0IFRoZSBzZXQgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgdmFsdWVzLlxuICovXG5mdW5jdGlvbiBzZXRUb0FycmF5KHNldCkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIHJlc3VsdCA9IEFycmF5KHNldC5zaXplKTtcblxuICBzZXQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJlc3VsdFsrK2luZGV4XSA9IHZhbHVlO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXRUb0FycmF5O1xuIiwidmFyIGdldEFsbEtleXMgPSByZXF1aXJlKCcuL19nZXRBbGxLZXlzJyk7XG5cbi8qKiBVc2VkIHRvIGNvbXBvc2UgYml0bWFza3MgZm9yIHZhbHVlIGNvbXBhcmlzb25zLiAqL1xudmFyIENPTVBBUkVfUEFSVElBTF9GTEFHID0gMTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYGJhc2VJc0VxdWFsRGVlcGAgZm9yIG9iamVjdHMgd2l0aCBzdXBwb3J0IGZvclxuICogcGFydGlhbCBkZWVwIGNvbXBhcmlzb25zLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gY29tcGFyZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvdGhlciBUaGUgb3RoZXIgb2JqZWN0IHRvIGNvbXBhcmUuXG4gKiBAcGFyYW0ge251bWJlcn0gYml0bWFzayBUaGUgYml0bWFzayBmbGFncy4gU2VlIGBiYXNlSXNFcXVhbGAgZm9yIG1vcmUgZGV0YWlscy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGN1c3RvbWl6ZXIgVGhlIGZ1bmN0aW9uIHRvIGN1c3RvbWl6ZSBjb21wYXJpc29ucy5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVxdWFsRnVuYyBUaGUgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIGVxdWl2YWxlbnRzIG9mIHZhbHVlcy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBzdGFjayBUcmFja3MgdHJhdmVyc2VkIGBvYmplY3RgIGFuZCBgb3RoZXJgIG9iamVjdHMuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9iamVjdHMgYXJlIGVxdWl2YWxlbnQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gZXF1YWxPYmplY3RzKG9iamVjdCwgb3RoZXIsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIGVxdWFsRnVuYywgc3RhY2spIHtcbiAgdmFyIGlzUGFydGlhbCA9IGJpdG1hc2sgJiBDT01QQVJFX1BBUlRJQUxfRkxBRyxcbiAgICAgIG9ialByb3BzID0gZ2V0QWxsS2V5cyhvYmplY3QpLFxuICAgICAgb2JqTGVuZ3RoID0gb2JqUHJvcHMubGVuZ3RoLFxuICAgICAgb3RoUHJvcHMgPSBnZXRBbGxLZXlzKG90aGVyKSxcbiAgICAgIG90aExlbmd0aCA9IG90aFByb3BzLmxlbmd0aDtcblxuICBpZiAob2JqTGVuZ3RoICE9IG90aExlbmd0aCAmJiAhaXNQYXJ0aWFsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHZhciBpbmRleCA9IG9iakxlbmd0aDtcbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICB2YXIga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIGlmICghKGlzUGFydGlhbCA/IGtleSBpbiBvdGhlciA6IGhhc093blByb3BlcnR5LmNhbGwob3RoZXIsIGtleSkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIENoZWNrIHRoYXQgY3ljbGljIHZhbHVlcyBhcmUgZXF1YWwuXG4gIHZhciBvYmpTdGFja2VkID0gc3RhY2suZ2V0KG9iamVjdCk7XG4gIHZhciBvdGhTdGFja2VkID0gc3RhY2suZ2V0KG90aGVyKTtcbiAgaWYgKG9ialN0YWNrZWQgJiYgb3RoU3RhY2tlZCkge1xuICAgIHJldHVybiBvYmpTdGFja2VkID09IG90aGVyICYmIG90aFN0YWNrZWQgPT0gb2JqZWN0O1xuICB9XG4gIHZhciByZXN1bHQgPSB0cnVlO1xuICBzdGFjay5zZXQob2JqZWN0LCBvdGhlcik7XG4gIHN0YWNrLnNldChvdGhlciwgb2JqZWN0KTtcblxuICB2YXIgc2tpcEN0b3IgPSBpc1BhcnRpYWw7XG4gIHdoaWxlICgrK2luZGV4IDwgb2JqTGVuZ3RoKSB7XG4gICAga2V5ID0gb2JqUHJvcHNbaW5kZXhdO1xuICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXldLFxuICAgICAgICBvdGhWYWx1ZSA9IG90aGVyW2tleV07XG5cbiAgICBpZiAoY3VzdG9taXplcikge1xuICAgICAgdmFyIGNvbXBhcmVkID0gaXNQYXJ0aWFsXG4gICAgICAgID8gY3VzdG9taXplcihvdGhWYWx1ZSwgb2JqVmFsdWUsIGtleSwgb3RoZXIsIG9iamVjdCwgc3RhY2spXG4gICAgICAgIDogY3VzdG9taXplcihvYmpWYWx1ZSwgb3RoVmFsdWUsIGtleSwgb2JqZWN0LCBvdGhlciwgc3RhY2spO1xuICAgIH1cbiAgICAvLyBSZWN1cnNpdmVseSBjb21wYXJlIG9iamVjdHMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICBpZiAoIShjb21wYXJlZCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyAob2JqVmFsdWUgPT09IG90aFZhbHVlIHx8IGVxdWFsRnVuYyhvYmpWYWx1ZSwgb3RoVmFsdWUsIGJpdG1hc2ssIGN1c3RvbWl6ZXIsIHN0YWNrKSlcbiAgICAgICAgICA6IGNvbXBhcmVkXG4gICAgICAgICkpIHtcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNraXBDdG9yIHx8IChza2lwQ3RvciA9IGtleSA9PSAnY29uc3RydWN0b3InKTtcbiAgfVxuICBpZiAocmVzdWx0ICYmICFza2lwQ3Rvcikge1xuICAgIHZhciBvYmpDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yLFxuICAgICAgICBvdGhDdG9yID0gb3RoZXIuY29uc3RydWN0b3I7XG5cbiAgICAvLyBOb24gYE9iamVjdGAgb2JqZWN0IGluc3RhbmNlcyB3aXRoIGRpZmZlcmVudCBjb25zdHJ1Y3RvcnMgYXJlIG5vdCBlcXVhbC5cbiAgICBpZiAob2JqQ3RvciAhPSBvdGhDdG9yICYmXG4gICAgICAgICgnY29uc3RydWN0b3InIGluIG9iamVjdCAmJiAnY29uc3RydWN0b3InIGluIG90aGVyKSAmJlxuICAgICAgICAhKHR5cGVvZiBvYmpDdG9yID09ICdmdW5jdGlvbicgJiYgb2JqQ3RvciBpbnN0YW5jZW9mIG9iakN0b3IgJiZcbiAgICAgICAgICB0eXBlb2Ygb3RoQ3RvciA9PSAnZnVuY3Rpb24nICYmIG90aEN0b3IgaW5zdGFuY2VvZiBvdGhDdG9yKSkge1xuICAgICAgcmVzdWx0ID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIHN0YWNrWydkZWxldGUnXShvYmplY3QpO1xuICBzdGFja1snZGVsZXRlJ10ob3RoZXIpO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiIsInZhciBiYXNlR2V0QWxsS2V5cyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRBbGxLZXlzJyksXG4gICAgZ2V0U3ltYm9scyA9IHJlcXVpcmUoJy4vX2dldFN5bWJvbHMnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBvZiBvd24gZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scyBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gZ2V0QWxsS2V5cyhvYmplY3QpIHtcbiAgcmV0dXJuIGJhc2VHZXRBbGxLZXlzKG9iamVjdCwga2V5cywgZ2V0U3ltYm9scyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QWxsS2V5cztcbiIsInZhciBhcnJheVB1c2ggPSByZXF1aXJlKCcuL19hcnJheVB1c2gnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5Jyk7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYGdldEFsbEtleXNgIGFuZCBgZ2V0QWxsS2V5c0luYCB3aGljaCB1c2VzXG4gKiBga2V5c0Z1bmNgIGFuZCBgc3ltYm9sc0Z1bmNgIHRvIGdldCB0aGUgZW51bWVyYWJsZSBwcm9wZXJ0eSBuYW1lcyBhbmRcbiAqIHN5bWJvbHMgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGtleXNGdW5jIFRoZSBmdW5jdGlvbiB0byBnZXQgdGhlIGtleXMgb2YgYG9iamVjdGAuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBzeW1ib2xzRnVuYyBUaGUgZnVuY3Rpb24gdG8gZ2V0IHRoZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcyBhbmQgc3ltYm9scy5cbiAqL1xuZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHtcbiAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7XG4gIHJldHVybiBpc0FycmF5KG9iamVjdCkgPyByZXN1bHQgOiBhcnJheVB1c2gocmVzdWx0LCBzeW1ib2xzRnVuYyhvYmplY3QpKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlR2V0QWxsS2V5cztcbiIsIi8qKlxuICogQXBwZW5kcyB0aGUgZWxlbWVudHMgb2YgYHZhbHVlc2AgdG8gYGFycmF5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIG1vZGlmeS5cbiAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyBUaGUgdmFsdWVzIHRvIGFwcGVuZC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBgYXJyYXlgLlxuICovXG5mdW5jdGlvbiBhcnJheVB1c2goYXJyYXksIHZhbHVlcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IHZhbHVlcy5sZW5ndGgsXG4gICAgICBvZmZzZXQgPSBhcnJheS5sZW5ndGg7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICBhcnJheVtvZmZzZXQgKyBpbmRleF0gPSB2YWx1ZXNbaW5kZXhdO1xuICB9XG4gIHJldHVybiBhcnJheTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheVB1c2g7XG4iLCJ2YXIgYXJyYXlGaWx0ZXIgPSByZXF1aXJlKCcuL19hcnJheUZpbHRlcicpLFxuICAgIHN0dWJBcnJheSA9IHJlcXVpcmUoJy4vc3R1YkFycmF5Jyk7XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHByb3BlcnR5SXNFbnVtZXJhYmxlID0gb2JqZWN0UHJvdG8ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIGZvciB0aG9zZSB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgb3RoZXIgYGxvZGFzaGAgbWV0aG9kcy4gKi9cbnZhciBuYXRpdmVHZXRTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBvd24gZW51bWVyYWJsZSBzeW1ib2xzIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGFycmF5IG9mIHN5bWJvbHMuXG4gKi9cbnZhciBnZXRTeW1ib2xzID0gIW5hdGl2ZUdldFN5bWJvbHMgPyBzdHViQXJyYXkgOiBmdW5jdGlvbihvYmplY3QpIHtcbiAgaWYgKG9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIG9iamVjdCA9IE9iamVjdChvYmplY3QpO1xuICByZXR1cm4gYXJyYXlGaWx0ZXIobmF0aXZlR2V0U3ltYm9scyhvYmplY3QpLCBmdW5jdGlvbihzeW1ib2wpIHtcbiAgICByZXR1cm4gcHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsIHN5bWJvbCk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBnZXRTeW1ib2xzO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8uZmlsdGVyYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3JcbiAqIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHByZWRpY2F0ZSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZmlsdGVyZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5RmlsdGVyKGFycmF5LCBwcmVkaWNhdGUpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBhcnJheSA9PSBudWxsID8gMCA6IGFycmF5Lmxlbmd0aCxcbiAgICAgIHJlc0luZGV4ID0gMCxcbiAgICAgIHJlc3VsdCA9IFtdO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaW5kZXhdO1xuICAgIGlmIChwcmVkaWNhdGUodmFsdWUsIGluZGV4LCBhcnJheSkpIHtcbiAgICAgIHJlc3VsdFtyZXNJbmRleCsrXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5RmlsdGVyO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGEgbmV3IGVtcHR5IGFycmF5LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMy4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBuZXcgZW1wdHkgYXJyYXkuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBhcnJheXMgPSBfLnRpbWVzKDIsIF8uc3R1YkFycmF5KTtcbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXMpO1xuICogLy8gPT4gW1tdLCBbXV1cbiAqXG4gKiBjb25zb2xlLmxvZyhhcnJheXNbMF0gPT09IGFycmF5c1sxXSk7XG4gKiAvLyA9PiBmYWxzZVxuICovXG5mdW5jdGlvbiBzdHViQXJyYXkoKSB7XG4gIHJldHVybiBbXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHViQXJyYXk7XG4iLCJ2YXIgYmFzZVRpbWVzID0gcmVxdWlyZSgnLi9fYmFzZVRpbWVzJyksXG4gICAgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2lzQXJndW1lbnRzJyksXG4gICAgaXNBcnJheSA9IHJlcXVpcmUoJy4vaXNBcnJheScpLFxuICAgIGlzQnVmZmVyID0gcmVxdWlyZSgnLi9pc0J1ZmZlcicpLFxuICAgIGlzSW5kZXggPSByZXF1aXJlKCcuL19pc0luZGV4JyksXG4gICAgaXNUeXBlZEFycmF5ID0gcmVxdWlyZSgnLi9pc1R5cGVkQXJyYXknKTtcblxuLyoqIFVzZWQgZm9yIGJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzLiAqL1xudmFyIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTtcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIHRoZSBlbnVtZXJhYmxlIHByb3BlcnR5IG5hbWVzIG9mIHRoZSBhcnJheS1saWtlIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtib29sZWFufSBpbmhlcml0ZWQgU3BlY2lmeSByZXR1cm5pbmcgaW5oZXJpdGVkIHByb3BlcnR5IG5hbWVzLlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYXJyYXlMaWtlS2V5cyh2YWx1ZSwgaW5oZXJpdGVkKSB7XG4gIHZhciBpc0FyciA9IGlzQXJyYXkodmFsdWUpLFxuICAgICAgaXNBcmcgPSAhaXNBcnIgJiYgaXNBcmd1bWVudHModmFsdWUpLFxuICAgICAgaXNCdWZmID0gIWlzQXJyICYmICFpc0FyZyAmJiBpc0J1ZmZlcih2YWx1ZSksXG4gICAgICBpc1R5cGUgPSAhaXNBcnIgJiYgIWlzQXJnICYmICFpc0J1ZmYgJiYgaXNUeXBlZEFycmF5KHZhbHVlKSxcbiAgICAgIHNraXBJbmRleGVzID0gaXNBcnIgfHwgaXNBcmcgfHwgaXNCdWZmIHx8IGlzVHlwZSxcbiAgICAgIHJlc3VsdCA9IHNraXBJbmRleGVzID8gYmFzZVRpbWVzKHZhbHVlLmxlbmd0aCwgU3RyaW5nKSA6IFtdLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICBmb3IgKHZhciBrZXkgaW4gdmFsdWUpIHtcbiAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrZXkpKSAmJlxuICAgICAgICAhKHNraXBJbmRleGVzICYmIChcbiAgICAgICAgICAgLy8gU2FmYXJpIDkgaGFzIGVudW1lcmFibGUgYGFyZ3VtZW50cy5sZW5ndGhgIGluIHN0cmljdCBtb2RlLlxuICAgICAgICAgICBrZXkgPT0gJ2xlbmd0aCcgfHxcbiAgICAgICAgICAgLy8gTm9kZS5qcyAwLjEwIGhhcyBlbnVtZXJhYmxlIG5vbi1pbmRleCBwcm9wZXJ0aWVzIG9uIGJ1ZmZlcnMuXG4gICAgICAgICAgIChpc0J1ZmYgJiYgKGtleSA9PSAnb2Zmc2V0JyB8fCBrZXkgPT0gJ3BhcmVudCcpKSB8fFxuICAgICAgICAgICAvLyBQaGFudG9tSlMgMiBoYXMgZW51bWVyYWJsZSBub24taW5kZXggcHJvcGVydGllcyBvbiB0eXBlZCBhcnJheXMuXG4gICAgICAgICAgIChpc1R5cGUgJiYgKGtleSA9PSAnYnVmZmVyJyB8fCBrZXkgPT0gJ2J5dGVMZW5ndGgnIHx8IGtleSA9PSAnYnl0ZU9mZnNldCcpKSB8fFxuICAgICAgICAgICAvLyBTa2lwIGluZGV4IHByb3BlcnRpZXMuXG4gICAgICAgICAgIGlzSW5kZXgoa2V5LCBsZW5ndGgpXG4gICAgICAgICkpKSB7XG4gICAgICByZXN1bHQucHVzaChrZXkpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGFycmF5TGlrZUtleXM7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnRpbWVzYCB3aXRob3V0IHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHNcbiAqIG9yIG1heCBhcnJheSBsZW5ndGggY2hlY2tzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge251bWJlcn0gbiBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIGludm9rZSBgaXRlcmF0ZWVgLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gaXRlcmF0ZWUgVGhlIGZ1bmN0aW9uIGludm9rZWQgcGVyIGl0ZXJhdGlvbi5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgYXJyYXkgb2YgcmVzdWx0cy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRpbWVzKG4sIGl0ZXJhdGVlKSB7XG4gIHZhciBpbmRleCA9IC0xLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobik7XG5cbiAgd2hpbGUgKCsraW5kZXggPCBuKSB7XG4gICAgcmVzdWx0W2luZGV4XSA9IGl0ZXJhdGVlKGluZGV4KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUaW1lcztcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8uaXNBcmd1bWVudHNgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiBgdmFsdWVgIGlzIGFuIGBhcmd1bWVudHNgIG9iamVjdCxcbiAqL1xuZnVuY3Rpb24gYmFzZUlzQXJndW1lbnRzKHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmIGJhc2VHZXRUYWcodmFsdWUpID09IGFyZ3NUYWc7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUlzQXJndW1lbnRzO1xuIiwiLyoqXG4gKiBUaGlzIG1ldGhvZCByZXR1cm5zIGBmYWxzZWAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjEzLjBcbiAqIEBjYXRlZ29yeSBVdGlsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgZmFsc2VgLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRpbWVzKDIsIF8uc3R1YkZhbHNlKTtcbiAqIC8vID0+IFtmYWxzZSwgZmFsc2VdXG4gKi9cbmZ1bmN0aW9uIHN0dWJGYWxzZSgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0dWJGYWxzZTtcbiIsInZhciBiYXNlR2V0VGFnID0gcmVxdWlyZSgnLi9fYmFzZUdldFRhZycpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIGlzT2JqZWN0TGlrZSA9IHJlcXVpcmUoJy4vaXNPYmplY3RMaWtlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBhcmdzVGFnID0gJ1tvYmplY3QgQXJndW1lbnRzXScsXG4gICAgYXJyYXlUYWcgPSAnW29iamVjdCBBcnJheV0nLFxuICAgIGJvb2xUYWcgPSAnW29iamVjdCBCb29sZWFuXScsXG4gICAgZGF0ZVRhZyA9ICdbb2JqZWN0IERhdGVdJyxcbiAgICBlcnJvclRhZyA9ICdbb2JqZWN0IEVycm9yXScsXG4gICAgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgbWFwVGFnID0gJ1tvYmplY3QgTWFwXScsXG4gICAgbnVtYmVyVGFnID0gJ1tvYmplY3QgTnVtYmVyXScsXG4gICAgb2JqZWN0VGFnID0gJ1tvYmplY3QgT2JqZWN0XScsXG4gICAgcmVnZXhwVGFnID0gJ1tvYmplY3QgUmVnRXhwXScsXG4gICAgc2V0VGFnID0gJ1tvYmplY3QgU2V0XScsXG4gICAgc3RyaW5nVGFnID0gJ1tvYmplY3QgU3RyaW5nXScsXG4gICAgd2Vha01hcFRhZyA9ICdbb2JqZWN0IFdlYWtNYXBdJztcblxudmFyIGFycmF5QnVmZmVyVGFnID0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyxcbiAgICBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XScsXG4gICAgZmxvYXQzMlRhZyA9ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgIGZsb2F0NjRUYWcgPSAnW29iamVjdCBGbG9hdDY0QXJyYXldJyxcbiAgICBpbnQ4VGFnID0gJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgaW50MTZUYWcgPSAnW29iamVjdCBJbnQxNkFycmF5XScsXG4gICAgaW50MzJUYWcgPSAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgdWludDhUYWcgPSAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgdWludDhDbGFtcGVkVGFnID0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICB1aW50MTZUYWcgPSAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgIHVpbnQzMlRhZyA9ICdbb2JqZWN0IFVpbnQzMkFycmF5XSc7XG5cbi8qKiBVc2VkIHRvIGlkZW50aWZ5IGB0b1N0cmluZ1RhZ2AgdmFsdWVzIG9mIHR5cGVkIGFycmF5cy4gKi9cbnZhciB0eXBlZEFycmF5VGFncyA9IHt9O1xudHlwZWRBcnJheVRhZ3NbZmxvYXQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1tmbG9hdDY0VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQ4VGFnXSA9IHR5cGVkQXJyYXlUYWdzW2ludDE2VGFnXSA9XG50eXBlZEFycmF5VGFnc1tpbnQzMlRhZ10gPSB0eXBlZEFycmF5VGFnc1t1aW50OFRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDhDbGFtcGVkVGFnXSA9IHR5cGVkQXJyYXlUYWdzW3VpbnQxNlRhZ10gPVxudHlwZWRBcnJheVRhZ3NbdWludDMyVGFnXSA9IHRydWU7XG50eXBlZEFycmF5VGFnc1thcmdzVGFnXSA9IHR5cGVkQXJyYXlUYWdzW2FycmF5VGFnXSA9XG50eXBlZEFycmF5VGFnc1thcnJheUJ1ZmZlclRhZ10gPSB0eXBlZEFycmF5VGFnc1tib29sVGFnXSA9XG50eXBlZEFycmF5VGFnc1tkYXRhVmlld1RhZ10gPSB0eXBlZEFycmF5VGFnc1tkYXRlVGFnXSA9XG50eXBlZEFycmF5VGFnc1tlcnJvclRhZ10gPSB0eXBlZEFycmF5VGFnc1tmdW5jVGFnXSA9XG50eXBlZEFycmF5VGFnc1ttYXBUYWddID0gdHlwZWRBcnJheVRhZ3NbbnVtYmVyVGFnXSA9XG50eXBlZEFycmF5VGFnc1tvYmplY3RUYWddID0gdHlwZWRBcnJheVRhZ3NbcmVnZXhwVGFnXSA9XG50eXBlZEFycmF5VGFnc1tzZXRUYWddID0gdHlwZWRBcnJheVRhZ3Nbc3RyaW5nVGFnXSA9XG50eXBlZEFycmF5VGFnc1t3ZWFrTWFwVGFnXSA9IGZhbHNlO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmlzVHlwZWRBcnJheWAgd2l0aG91dCBOb2RlLmpzIG9wdGltaXphdGlvbnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSB0eXBlZCBhcnJheSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNUeXBlZEFycmF5KHZhbHVlKSB7XG4gIHJldHVybiBpc09iamVjdExpa2UodmFsdWUpICYmXG4gICAgaXNMZW5ndGgodmFsdWUubGVuZ3RoKSAmJiAhIXR5cGVkQXJyYXlUYWdzW2Jhc2VHZXRUYWcodmFsdWUpXTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSXNUeXBlZEFycmF5O1xuIiwiLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy51bmFyeWAgd2l0aG91dCBzdXBwb3J0IGZvciBzdG9yaW5nIG1ldGFkYXRhLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBjYXAgYXJndW1lbnRzIGZvci5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGNhcHBlZCBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYmFzZVVuYXJ5KGZ1bmMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgcmV0dXJuIGZ1bmModmFsdWUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VVbmFyeTtcbiIsInZhciBmcmVlR2xvYmFsID0gcmVxdWlyZSgnLi9fZnJlZUdsb2JhbCcpO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYGV4cG9ydHNgLiAqL1xudmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzO1xuXG4vKiogRGV0ZWN0IGZyZWUgdmFyaWFibGUgYG1vZHVsZWAuICovXG52YXIgZnJlZU1vZHVsZSA9IGZyZWVFeHBvcnRzICYmIHR5cGVvZiBtb2R1bGUgPT0gJ29iamVjdCcgJiYgbW9kdWxlICYmICFtb2R1bGUubm9kZVR5cGUgJiYgbW9kdWxlO1xuXG4vKiogRGV0ZWN0IHRoZSBwb3B1bGFyIENvbW1vbkpTIGV4dGVuc2lvbiBgbW9kdWxlLmV4cG9ydHNgLiAqL1xudmFyIG1vZHVsZUV4cG9ydHMgPSBmcmVlTW9kdWxlICYmIGZyZWVNb2R1bGUuZXhwb3J0cyA9PT0gZnJlZUV4cG9ydHM7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgcHJvY2Vzc2AgZnJvbSBOb2RlLmpzLiAqL1xudmFyIGZyZWVQcm9jZXNzID0gbW9kdWxlRXhwb3J0cyAmJiBmcmVlR2xvYmFsLnByb2Nlc3M7XG5cbi8qKiBVc2VkIHRvIGFjY2VzcyBmYXN0ZXIgTm9kZS5qcyBoZWxwZXJzLiAqL1xudmFyIG5vZGVVdGlsID0gKGZ1bmN0aW9uKCkge1xuICB0cnkge1xuICAgIC8vIFVzZSBgdXRpbC50eXBlc2AgZm9yIE5vZGUuanMgMTArLlxuICAgIHZhciB0eXBlcyA9IGZyZWVNb2R1bGUgJiYgZnJlZU1vZHVsZS5yZXF1aXJlICYmIGZyZWVNb2R1bGUucmVxdWlyZSgndXRpbCcpLnR5cGVzO1xuXG4gICAgaWYgKHR5cGVzKSB7XG4gICAgICByZXR1cm4gdHlwZXM7XG4gICAgfVxuXG4gICAgLy8gTGVnYWN5IGBwcm9jZXNzLmJpbmRpbmcoJ3V0aWwnKWAgZm9yIE5vZGUuanMgPCAxMC5cbiAgICByZXR1cm4gZnJlZVByb2Nlc3MgJiYgZnJlZVByb2Nlc3MuYmluZGluZyAmJiBmcmVlUHJvY2Vzcy5iaW5kaW5nKCd1dGlsJyk7XG4gIH0gY2F0Y2ggKGUpIHt9XG59KCkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5vZGVVdGlsO1xuIiwidmFyIGlzUHJvdG90eXBlID0gcmVxdWlyZSgnLi9faXNQcm90b3R5cGUnKSxcbiAgICBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi9fbmF0aXZlS2V5cycpO1xuXG4vKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKiogVXNlZCB0byBjaGVjayBvYmplY3RzIGZvciBvd24gcHJvcGVydGllcy4gKi9cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IG9iamVjdFByb3RvLmhhc093blByb3BlcnR5O1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmtleXNgIHdoaWNoIGRvZXNuJ3QgdHJlYXQgc3BhcnNlIGFycmF5cyBhcyBkZW5zZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcm9wZXJ0eSBuYW1lcy5cbiAqL1xuZnVuY3Rpb24gYmFzZUtleXMob2JqZWN0KSB7XG4gIGlmICghaXNQcm90b3R5cGUob2JqZWN0KSkge1xuICAgIHJldHVybiBuYXRpdmVLZXlzKG9iamVjdCk7XG4gIH1cbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gT2JqZWN0KG9iamVjdCkpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleSkgJiYga2V5ICE9ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGtleSk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZUtleXM7XG4iLCIvKiogVXNlZCBmb3IgYnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMuICovXG52YXIgb2JqZWN0UHJvdG8gPSBPYmplY3QucHJvdG90eXBlO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGxpa2VseSBhIHByb3RvdHlwZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBwcm90b3R5cGUsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNQcm90b3R5cGUodmFsdWUpIHtcbiAgdmFyIEN0b3IgPSB2YWx1ZSAmJiB2YWx1ZS5jb25zdHJ1Y3RvcixcbiAgICAgIHByb3RvID0gKHR5cGVvZiBDdG9yID09ICdmdW5jdGlvbicgJiYgQ3Rvci5wcm90b3R5cGUpIHx8IG9iamVjdFByb3RvO1xuXG4gIHJldHVybiB2YWx1ZSA9PT0gcHJvdG87XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaXNQcm90b3R5cGU7XG4iLCJ2YXIgb3ZlckFyZyA9IHJlcXVpcmUoJy4vX292ZXJBcmcnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IG5hdGl2ZUtleXM7XG4iLCIvKipcbiAqIENyZWF0ZXMgYSB1bmFyeSBmdW5jdGlvbiB0aGF0IGludm9rZXMgYGZ1bmNgIHdpdGggaXRzIGFyZ3VtZW50IHRyYW5zZm9ybWVkLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byB3cmFwLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gdHJhbnNmb3JtIFRoZSBhcmd1bWVudCB0cmFuc2Zvcm0uXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gb3ZlckFyZyhmdW5jLCB0cmFuc2Zvcm0pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBmdW5jKHRyYW5zZm9ybShhcmcpKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBvdmVyQXJnO1xuIiwidmFyIERhdGFWaWV3ID0gcmVxdWlyZSgnLi9fRGF0YVZpZXcnKSxcbiAgICBNYXAgPSByZXF1aXJlKCcuL19NYXAnKSxcbiAgICBQcm9taXNlID0gcmVxdWlyZSgnLi9fUHJvbWlzZScpLFxuICAgIFNldCA9IHJlcXVpcmUoJy4vX1NldCcpLFxuICAgIFdlYWtNYXAgPSByZXF1aXJlKCcuL19XZWFrTWFwJyksXG4gICAgYmFzZUdldFRhZyA9IHJlcXVpcmUoJy4vX2Jhc2VHZXRUYWcnKSxcbiAgICB0b1NvdXJjZSA9IHJlcXVpcmUoJy4vX3RvU291cmNlJyk7XG5cbi8qKiBgT2JqZWN0I3RvU3RyaW5nYCByZXN1bHQgcmVmZXJlbmNlcy4gKi9cbnZhciBtYXBUYWcgPSAnW29iamVjdCBNYXBdJyxcbiAgICBvYmplY3RUYWcgPSAnW29iamVjdCBPYmplY3RdJyxcbiAgICBwcm9taXNlVGFnID0gJ1tvYmplY3QgUHJvbWlzZV0nLFxuICAgIHNldFRhZyA9ICdbb2JqZWN0IFNldF0nLFxuICAgIHdlYWtNYXBUYWcgPSAnW29iamVjdCBXZWFrTWFwXSc7XG5cbnZhciBkYXRhVmlld1RhZyA9ICdbb2JqZWN0IERhdGFWaWV3XSc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtYXBzLCBzZXRzLCBhbmQgd2Vha21hcHMuICovXG52YXIgZGF0YVZpZXdDdG9yU3RyaW5nID0gdG9Tb3VyY2UoRGF0YVZpZXcpLFxuICAgIG1hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShNYXApLFxuICAgIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZSksXG4gICAgc2V0Q3RvclN0cmluZyA9IHRvU291cmNlKFNldCksXG4gICAgd2Vha01hcEN0b3JTdHJpbmcgPSB0b1NvdXJjZShXZWFrTWFwKTtcblxuLyoqXG4gKiBHZXRzIHRoZSBgdG9TdHJpbmdUYWdgIG9mIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgYHRvU3RyaW5nVGFnYC5cbiAqL1xudmFyIGdldFRhZyA9IGJhc2VHZXRUYWc7XG5cbi8vIEZhbGxiYWNrIGZvciBkYXRhIHZpZXdzLCBtYXBzLCBzZXRzLCBhbmQgd2VhayBtYXBzIGluIElFIDExIGFuZCBwcm9taXNlcyBpbiBOb2RlLmpzIDwgNi5cbmlmICgoRGF0YVZpZXcgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMSkpKSAhPSBkYXRhVmlld1RhZykgfHxcbiAgICAoTWFwICYmIGdldFRhZyhuZXcgTWFwKSAhPSBtYXBUYWcpIHx8XG4gICAgKFByb21pc2UgJiYgZ2V0VGFnKFByb21pc2UucmVzb2x2ZSgpKSAhPSBwcm9taXNlVGFnKSB8fFxuICAgIChTZXQgJiYgZ2V0VGFnKG5ldyBTZXQpICE9IHNldFRhZykgfHxcbiAgICAoV2Vha01hcCAmJiBnZXRUYWcobmV3IFdlYWtNYXApICE9IHdlYWtNYXBUYWcpKSB7XG4gIGdldFRhZyA9IGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgdmFyIHJlc3VsdCA9IGJhc2VHZXRUYWcodmFsdWUpLFxuICAgICAgICBDdG9yID0gcmVzdWx0ID09IG9iamVjdFRhZyA/IHZhbHVlLmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkLFxuICAgICAgICBjdG9yU3RyaW5nID0gQ3RvciA/IHRvU291cmNlKEN0b3IpIDogJyc7XG5cbiAgICBpZiAoY3RvclN0cmluZykge1xuICAgICAgc3dpdGNoIChjdG9yU3RyaW5nKSB7XG4gICAgICAgIGNhc2UgZGF0YVZpZXdDdG9yU3RyaW5nOiByZXR1cm4gZGF0YVZpZXdUYWc7XG4gICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzogcmV0dXJuIG1hcFRhZztcbiAgICAgICAgY2FzZSBwcm9taXNlQ3RvclN0cmluZzogcmV0dXJuIHByb21pc2VUYWc7XG4gICAgICAgIGNhc2Ugc2V0Q3RvclN0cmluZzogcmV0dXJuIHNldFRhZztcbiAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzogcmV0dXJuIHdlYWtNYXBUYWc7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0VGFnO1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBEYXRhVmlldyA9IGdldE5hdGl2ZShyb290LCAnRGF0YVZpZXcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEYXRhVmlldztcbiIsInZhciBnZXROYXRpdmUgPSByZXF1aXJlKCcuL19nZXROYXRpdmUnKSxcbiAgICByb290ID0gcmVxdWlyZSgnLi9fcm9vdCcpO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgUHJvbWlzZSA9IGdldE5hdGl2ZShyb290LCAnUHJvbWlzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFByb21pc2U7XG4iLCJ2YXIgZ2V0TmF0aXZlID0gcmVxdWlyZSgnLi9fZ2V0TmF0aXZlJyksXG4gICAgcm9vdCA9IHJlcXVpcmUoJy4vX3Jvb3QnKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgdGhhdCBhcmUgdmVyaWZpZWQgdG8gYmUgbmF0aXZlLiAqL1xudmFyIFNldCA9IGdldE5hdGl2ZShyb290LCAnU2V0Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gU2V0O1xuIiwidmFyIGdldE5hdGl2ZSA9IHJlcXVpcmUoJy4vX2dldE5hdGl2ZScpLFxuICAgIHJvb3QgPSByZXF1aXJlKCcuL19yb290Jyk7XG5cbi8qIEJ1aWx0LWluIG1ldGhvZCByZWZlcmVuY2VzIHRoYXQgYXJlIHZlcmlmaWVkIHRvIGJlIG5hdGl2ZS4gKi9cbnZhciBXZWFrTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdXZWFrTWFwJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gV2Vha01hcDtcbiIsInZhciBpc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19pc1N0cmljdENvbXBhcmFibGUnKSxcbiAgICBrZXlzID0gcmVxdWlyZSgnLi9rZXlzJyk7XG5cbi8qKlxuICogR2V0cyB0aGUgcHJvcGVydHkgbmFtZXMsIHZhbHVlcywgYW5kIGNvbXBhcmUgZmxhZ3Mgb2YgYG9iamVjdGAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgbWF0Y2ggZGF0YSBvZiBgb2JqZWN0YC5cbiAqL1xuZnVuY3Rpb24gZ2V0TWF0Y2hEYXRhKG9iamVjdCkge1xuICB2YXIgcmVzdWx0ID0ga2V5cyhvYmplY3QpLFxuICAgICAgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aDtcblxuICB3aGlsZSAobGVuZ3RoLS0pIHtcbiAgICB2YXIga2V5ID0gcmVzdWx0W2xlbmd0aF0sXG4gICAgICAgIHZhbHVlID0gb2JqZWN0W2tleV07XG5cbiAgICByZXN1bHRbbGVuZ3RoXSA9IFtrZXksIHZhbHVlLCBpc1N0cmljdENvbXBhcmFibGUodmFsdWUpXTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldE1hdGNoRGF0YTtcbiIsInZhciBiYXNlSXNFcXVhbCA9IHJlcXVpcmUoJy4vX2Jhc2VJc0VxdWFsJyksXG4gICAgZ2V0ID0gcmVxdWlyZSgnLi9nZXQnKSxcbiAgICBoYXNJbiA9IHJlcXVpcmUoJy4vaGFzSW4nKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgaXNTdHJpY3RDb21wYXJhYmxlID0gcmVxdWlyZSgnLi9faXNTdHJpY3RDb21wYXJhYmxlJyksXG4gICAgbWF0Y2hlc1N0cmljdENvbXBhcmFibGUgPSByZXF1aXJlKCcuL19tYXRjaGVzU3RyaWN0Q29tcGFyYWJsZScpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqIFVzZWQgdG8gY29tcG9zZSBiaXRtYXNrcyBmb3IgdmFsdWUgY29tcGFyaXNvbnMuICovXG52YXIgQ09NUEFSRV9QQVJUSUFMX0ZMQUcgPSAxLFxuICAgIENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcgPSAyO1xuXG4vKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLm1hdGNoZXNQcm9wZXJ0eWAgd2hpY2ggZG9lc24ndCBjbG9uZSBgc3JjVmFsdWVgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHBhcmFtIHsqfSBzcmNWYWx1ZSBUaGUgdmFsdWUgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBzcGVjIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBiYXNlTWF0Y2hlc1Byb3BlcnR5KHBhdGgsIHNyY1ZhbHVlKSB7XG4gIGlmIChpc0tleShwYXRoKSAmJiBpc1N0cmljdENvbXBhcmFibGUoc3JjVmFsdWUpKSB7XG4gICAgcmV0dXJuIG1hdGNoZXNTdHJpY3RDb21wYXJhYmxlKHRvS2V5KHBhdGgpLCBzcmNWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHZhciBvYmpWYWx1ZSA9IGdldChvYmplY3QsIHBhdGgpO1xuICAgIHJldHVybiAob2JqVmFsdWUgPT09IHVuZGVmaW5lZCAmJiBvYmpWYWx1ZSA9PT0gc3JjVmFsdWUpXG4gICAgICA/IGhhc0luKG9iamVjdCwgcGF0aClcbiAgICAgIDogYmFzZUlzRXF1YWwoc3JjVmFsdWUsIG9ialZhbHVlLCBDT01QQVJFX1BBUlRJQUxfRkxBRyB8IENPTVBBUkVfVU5PUkRFUkVEX0ZMQUcpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VNYXRjaGVzUHJvcGVydHk7XG4iLCJ2YXIgYmFzZUdldCA9IHJlcXVpcmUoJy4vX2Jhc2VHZXQnKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBgcGF0aGAgb2YgYG9iamVjdGAuIElmIHRoZSByZXNvbHZlZCB2YWx1ZSBpc1xuICogYHVuZGVmaW5lZGAsIHRoZSBgZGVmYXVsdFZhbHVlYCBpcyByZXR1cm5lZCBpbiBpdHMgcGxhY2UuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAzLjcuMFxuICogQGNhdGVnb3J5IE9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gVGhlIHZhbHVlIHJldHVybmVkIGZvciBgdW5kZWZpbmVkYCByZXNvbHZlZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVzb2x2ZWQgdmFsdWUuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogW3sgJ2InOiB7ICdjJzogMyB9IH1dIH07XG4gKlxuICogXy5nZXQob2JqZWN0LCAnYVswXS5iLmMnKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsIFsnYScsICcwJywgJ2InLCAnYyddKTtcbiAqIC8vID0+IDNcbiAqXG4gKiBfLmdldChvYmplY3QsICdhLmIuYycsICdkZWZhdWx0Jyk7XG4gKiAvLyA9PiAnZGVmYXVsdCdcbiAqL1xuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciByZXN1bHQgPSBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgcmV0dXJuIHJlc3VsdCA9PT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGdldDtcbiIsInZhciBtZW1vaXplQ2FwcGVkID0gcmVxdWlyZSgnLi9fbWVtb2l6ZUNhcHBlZCcpO1xuXG4vKiogVXNlZCB0byBtYXRjaCBwcm9wZXJ0eSBuYW1lcyB3aXRoaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVQcm9wTmFtZSA9IC9bXi5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwkKSkvZztcblxuLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7XG5cbi8qKlxuICogQ29udmVydHMgYHN0cmluZ2AgdG8gYSBwcm9wZXJ0eSBwYXRoIGFycmF5LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgcHJvcGVydHkgcGF0aCBhcnJheS5cbiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IG1lbW9pemVDYXBwZWQoZnVuY3Rpb24oc3RyaW5nKSB7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgaWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NiAvKiAuICovKSB7XG4gICAgcmVzdWx0LnB1c2goJycpO1xuICB9XG4gIHN0cmluZy5yZXBsYWNlKHJlUHJvcE5hbWUsIGZ1bmN0aW9uKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcbiAgICByZXN1bHQucHVzaChxdW90ZSA/IHN1YlN0cmluZy5yZXBsYWNlKHJlRXNjYXBlQ2hhciwgJyQxJykgOiAobnVtYmVyIHx8IG1hdGNoKSk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyaW5nVG9QYXRoO1xuIiwidmFyIG1lbW9pemUgPSByZXF1aXJlKCcuL21lbW9pemUnKTtcblxuLyoqIFVzZWQgYXMgdGhlIG1heGltdW0gbWVtb2l6ZSBjYWNoZSBzaXplLiAqL1xudmFyIE1BWF9NRU1PSVpFX1NJWkUgPSA1MDA7XG5cbi8qKlxuICogQSBzcGVjaWFsaXplZCB2ZXJzaW9uIG9mIGBfLm1lbW9pemVgIHdoaWNoIGNsZWFycyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24nc1xuICogY2FjaGUgd2hlbiBpdCBleGNlZWRzIGBNQVhfTUVNT0laRV9TSVpFYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemVDYXBwZWQoZnVuYykge1xuICB2YXIgcmVzdWx0ID0gbWVtb2l6ZShmdW5jLCBmdW5jdGlvbihrZXkpIHtcbiAgICBpZiAoY2FjaGUuc2l6ZSA9PT0gTUFYX01FTU9JWkVfU0laRSkge1xuICAgICAgY2FjaGUuY2xlYXIoKTtcbiAgICB9XG4gICAgcmV0dXJuIGtleTtcbiAgfSk7XG5cbiAgdmFyIGNhY2hlID0gcmVzdWx0LmNhY2hlO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemVDYXBwZWQ7XG4iLCJ2YXIgTWFwQ2FjaGUgPSByZXF1aXJlKCcuL19NYXBDYWNoZScpO1xuXG4vKiogRXJyb3IgbWVzc2FnZSBjb25zdGFudHMuICovXG52YXIgRlVOQ19FUlJPUl9URVhUID0gJ0V4cGVjdGVkIGEgZnVuY3Rpb24nO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IG1lbW9pemVzIHRoZSByZXN1bHQgb2YgYGZ1bmNgLiBJZiBgcmVzb2x2ZXJgIGlzXG4gKiBwcm92aWRlZCwgaXQgZGV0ZXJtaW5lcyB0aGUgY2FjaGUga2V5IGZvciBzdG9yaW5nIHRoZSByZXN1bHQgYmFzZWQgb24gdGhlXG4gKiBhcmd1bWVudHMgcHJvdmlkZWQgdG8gdGhlIG1lbW9pemVkIGZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgZmlyc3QgYXJndW1lbnRcbiAqIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbiBpcyB1c2VkIGFzIHRoZSBtYXAgY2FjaGUga2V5LiBUaGUgYGZ1bmNgXG4gKiBpcyBpbnZva2VkIHdpdGggdGhlIGB0aGlzYCBiaW5kaW5nIG9mIHRoZSBtZW1vaXplZCBmdW5jdGlvbi5cbiAqXG4gKiAqKk5vdGU6KiogVGhlIGNhY2hlIGlzIGV4cG9zZWQgYXMgdGhlIGBjYWNoZWAgcHJvcGVydHkgb24gdGhlIG1lbW9pemVkXG4gKiBmdW5jdGlvbi4gSXRzIGNyZWF0aW9uIG1heSBiZSBjdXN0b21pemVkIGJ5IHJlcGxhY2luZyB0aGUgYF8ubWVtb2l6ZS5DYWNoZWBcbiAqIGNvbnN0cnVjdG9yIHdpdGggb25lIHdob3NlIGluc3RhbmNlcyBpbXBsZW1lbnQgdGhlXG4gKiBbYE1hcGBdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLW1hcC1wcm90b3R5cGUtb2JqZWN0KVxuICogbWV0aG9kIGludGVyZmFjZSBvZiBgY2xlYXJgLCBgZGVsZXRlYCwgYGdldGAsIGBoYXNgLCBhbmQgYHNldGAuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IEZ1bmN0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIFRoZSBmdW5jdGlvbiB0byBoYXZlIGl0cyBvdXRwdXQgbWVtb2l6ZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbcmVzb2x2ZXJdIFRoZSBmdW5jdGlvbiB0byByZXNvbHZlIHRoZSBjYWNoZSBrZXkuXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259IFJldHVybnMgdGhlIG5ldyBtZW1vaXplZCBmdW5jdGlvbi5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxLCAnYic6IDIgfTtcbiAqIHZhciBvdGhlciA9IHsgJ2MnOiAzLCAnZCc6IDQgfTtcbiAqXG4gKiB2YXIgdmFsdWVzID0gXy5tZW1vaXplKF8udmFsdWVzKTtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogdmFsdWVzKG90aGVyKTtcbiAqIC8vID0+IFszLCA0XVxuICpcbiAqIG9iamVjdC5hID0gMjtcbiAqIHZhbHVlcyhvYmplY3QpO1xuICogLy8gPT4gWzEsIDJdXG4gKlxuICogLy8gTW9kaWZ5IHRoZSByZXN1bHQgY2FjaGUuXG4gKiB2YWx1ZXMuY2FjaGUuc2V0KG9iamVjdCwgWydhJywgJ2InXSk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsnYScsICdiJ11cbiAqXG4gKiAvLyBSZXBsYWNlIGBfLm1lbW9pemUuQ2FjaGVgLlxuICogXy5tZW1vaXplLkNhY2hlID0gV2Vha01hcDtcbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmdW5jLCByZXNvbHZlcikge1xuICBpZiAodHlwZW9mIGZ1bmMgIT0gJ2Z1bmN0aW9uJyB8fCAocmVzb2x2ZXIgIT0gbnVsbCAmJiB0eXBlb2YgcmVzb2x2ZXIgIT0gJ2Z1bmN0aW9uJykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEZVTkNfRVJST1JfVEVYVCk7XG4gIH1cbiAgdmFyIG1lbW9pemVkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGFyZ3MgPSBhcmd1bWVudHMsXG4gICAgICAgIGtleSA9IHJlc29sdmVyID8gcmVzb2x2ZXIuYXBwbHkodGhpcywgYXJncykgOiBhcmdzWzBdLFxuICAgICAgICBjYWNoZSA9IG1lbW9pemVkLmNhY2hlO1xuXG4gICAgaWYgKGNhY2hlLmhhcyhrZXkpKSB7XG4gICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSk7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBmdW5jLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIG1lbW9pemVkLmNhY2hlID0gY2FjaGUuc2V0KGtleSwgcmVzdWx0KSB8fCBjYWNoZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICBtZW1vaXplZC5jYWNoZSA9IG5ldyAobWVtb2l6ZS5DYWNoZSB8fCBNYXBDYWNoZSk7XG4gIHJldHVybiBtZW1vaXplZDtcbn1cblxuLy8gRXhwb3NlIGBNYXBDYWNoZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbm1vZHVsZS5leHBvcnRzID0gbWVtb2l6ZTtcbiIsInZhciBiYXNlVG9TdHJpbmcgPSByZXF1aXJlKCcuL19iYXNlVG9TdHJpbmcnKTtcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSBjb252ZXJ0ZWQgc3RyaW5nLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvU3RyaW5nKG51bGwpO1xuICogLy8gPT4gJydcbiAqXG4gKiBfLnRvU3RyaW5nKC0wKTtcbiAqIC8vID0+ICctMCdcbiAqXG4gKiBfLnRvU3RyaW5nKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAnMSwyLDMnXG4gKi9cbmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gJycgOiBiYXNlVG9TdHJpbmcodmFsdWUpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvU3RyaW5nO1xuIiwidmFyIFN5bWJvbCA9IHJlcXVpcmUoJy4vX1N5bWJvbCcpLFxuICAgIGFycmF5TWFwID0gcmVxdWlyZSgnLi9fYXJyYXlNYXAnKSxcbiAgICBpc0FycmF5ID0gcmVxdWlyZSgnLi9pc0FycmF5JyksXG4gICAgaXNTeW1ib2wgPSByZXF1aXJlKCcuL2lzU3ltYm9sJyk7XG5cbi8qKiBVc2VkIGFzIHJlZmVyZW5jZXMgZm9yIHZhcmlvdXMgYE51bWJlcmAgY29uc3RhbnRzLiAqL1xudmFyIElORklOSVRZID0gMSAvIDA7XG5cbi8qKiBVc2VkIHRvIGNvbnZlcnQgc3ltYm9scyB0byBwcmltaXRpdmVzIGFuZCBzdHJpbmdzLiAqL1xudmFyIHN5bWJvbFByb3RvID0gU3ltYm9sID8gU3ltYm9sLnByb3RvdHlwZSA6IHVuZGVmaW5lZCxcbiAgICBzeW1ib2xUb1N0cmluZyA9IHN5bWJvbFByb3RvID8gc3ltYm9sUHJvdG8udG9TdHJpbmcgOiB1bmRlZmluZWQ7XG5cbi8qKlxuICogVGhlIGJhc2UgaW1wbGVtZW50YXRpb24gb2YgYF8udG9TdHJpbmdgIHdoaWNoIGRvZXNuJ3QgY29udmVydCBudWxsaXNoXG4gKiB2YWx1ZXMgdG8gZW1wdHkgc3RyaW5ncy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRvU3RyaW5nKHZhbHVlKSB7XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYXJyYXlNYXAodmFsdWUsIGJhc2VUb1N0cmluZykgKyAnJztcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHN5bWJvbFRvU3RyaW5nID8gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgfVxuICB2YXIgcmVzdWx0ID0gKHZhbHVlICsgJycpO1xuICByZXR1cm4gKHJlc3VsdCA9PSAnMCcgJiYgKDEgLyB2YWx1ZSkgPT0gLUlORklOSVRZKSA/ICctMCcgOiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZVRvU3RyaW5nO1xuIiwiLyoqXG4gKiBBIHNwZWNpYWxpemVkIHZlcnNpb24gb2YgYF8ubWFwYCBmb3IgYXJyYXlzIHdpdGhvdXQgc3VwcG9ydCBmb3IgaXRlcmF0ZWVcbiAqIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IFthcnJheV0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGl0ZXJhdGVlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIG5ldyBtYXBwZWQgYXJyYXkuXG4gKi9cbmZ1bmN0aW9uIGFycmF5TWFwKGFycmF5LCBpdGVyYXRlZSkge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoLFxuICAgICAgcmVzdWx0ID0gQXJyYXkobGVuZ3RoKTtcblxuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHJlc3VsdFtpbmRleF0gPSBpdGVyYXRlZShhcnJheVtpbmRleF0sIGluZGV4LCBhcnJheSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBhcnJheU1hcDtcbiIsInZhciBiYXNlSGFzSW4gPSByZXF1aXJlKCcuL19iYXNlSGFzSW4nKSxcbiAgICBoYXNQYXRoID0gcmVxdWlyZSgnLi9faGFzUGF0aCcpO1xuXG4vKipcbiAqIENoZWNrcyBpZiBgcGF0aGAgaXMgYSBkaXJlY3Qgb3IgaW5oZXJpdGVkIHByb3BlcnR5IG9mIGBvYmplY3RgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBPYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgVGhlIG9iamVjdCB0byBxdWVyeS5cbiAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRoIFRoZSBwYXRoIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IF8uY3JlYXRlKHsgJ2EnOiBfLmNyZWF0ZSh7ICdiJzogMiB9KSB9KTtcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2EuYicpO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaGFzSW4ob2JqZWN0LCBbJ2EnLCAnYiddKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmhhc0luKG9iamVjdCwgJ2InKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGhhc0luKG9iamVjdCwgcGF0aCkge1xuICByZXR1cm4gb2JqZWN0ICE9IG51bGwgJiYgaGFzUGF0aChvYmplY3QsIHBhdGgsIGJhc2VIYXNJbik7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzSW47XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmhhc0luYCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb2JqZWN0XSBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IGtleSBUaGUga2V5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSGFzSW4ob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCAhPSBudWxsICYmIGtleSBpbiBPYmplY3Qob2JqZWN0KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlSGFzSW47XG4iLCJ2YXIgY2FzdFBhdGggPSByZXF1aXJlKCcuL19jYXN0UGF0aCcpLFxuICAgIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9pc0FyZ3VtZW50cycpLFxuICAgIGlzQXJyYXkgPSByZXF1aXJlKCcuL2lzQXJyYXknKSxcbiAgICBpc0luZGV4ID0gcmVxdWlyZSgnLi9faXNJbmRleCcpLFxuICAgIGlzTGVuZ3RoID0gcmVxdWlyZSgnLi9pc0xlbmd0aCcpLFxuICAgIHRvS2V5ID0gcmVxdWlyZSgnLi9fdG9LZXknKTtcblxuLyoqXG4gKiBDaGVja3MgaWYgYHBhdGhgIGV4aXN0cyBvbiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCBUaGUgb2JqZWN0IHRvIHF1ZXJ5LlxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggdG8gY2hlY2suXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYXNGdW5jIFRoZSBmdW5jdGlvbiB0byBjaGVjayBwcm9wZXJ0aWVzLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGBwYXRoYCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzUGF0aChvYmplY3QsIHBhdGgsIGhhc0Z1bmMpIHtcbiAgcGF0aCA9IGNhc3RQYXRoKHBhdGgsIG9iamVjdCk7XG5cbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBwYXRoLmxlbmd0aCxcbiAgICAgIHJlc3VsdCA9IGZhbHNlO1xuXG4gIHdoaWxlICgrK2luZGV4IDwgbGVuZ3RoKSB7XG4gICAgdmFyIGtleSA9IHRvS2V5KHBhdGhbaW5kZXhdKTtcbiAgICBpZiAoIShyZXN1bHQgPSBvYmplY3QgIT0gbnVsbCAmJiBoYXNGdW5jKG9iamVjdCwga2V5KSkpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBvYmplY3QgPSBvYmplY3Rba2V5XTtcbiAgfVxuICBpZiAocmVzdWx0IHx8ICsraW5kZXggIT0gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBsZW5ndGggPSBvYmplY3QgPT0gbnVsbCA/IDAgOiBvYmplY3QubGVuZ3RoO1xuICByZXR1cm4gISFsZW5ndGggJiYgaXNMZW5ndGgobGVuZ3RoKSAmJiBpc0luZGV4KGtleSwgbGVuZ3RoKSAmJlxuICAgIChpc0FycmF5KG9iamVjdCkgfHwgaXNBcmd1bWVudHMob2JqZWN0KSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaGFzUGF0aDtcbiIsIi8qKlxuICogVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgZmlyc3QgYXJndW1lbnQgaXQgcmVjZWl2ZXMuXG4gKlxuICogQHN0YXRpY1xuICogQHNpbmNlIDAuMS4wXG4gKiBAbWVtYmVyT2YgX1xuICogQGNhdGVnb3J5IFV0aWxcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgQW55IHZhbHVlLlxuICogQHJldHVybnMgeyp9IFJldHVybnMgYHZhbHVlYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIG9iamVjdCA9IHsgJ2EnOiAxIH07XG4gKlxuICogY29uc29sZS5sb2coXy5pZGVudGl0eShvYmplY3QpID09PSBvYmplY3QpO1xuICogLy8gPT4gdHJ1ZVxuICovXG5mdW5jdGlvbiBpZGVudGl0eSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWU7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaWRlbnRpdHk7XG4iLCJ2YXIgYmFzZVByb3BlcnR5ID0gcmVxdWlyZSgnLi9fYmFzZVByb3BlcnR5JyksXG4gICAgYmFzZVByb3BlcnR5RGVlcCA9IHJlcXVpcmUoJy4vX2Jhc2VQcm9wZXJ0eURlZXAnKSxcbiAgICBpc0tleSA9IHJlcXVpcmUoJy4vX2lzS2V5JyksXG4gICAgdG9LZXkgPSByZXF1aXJlKCcuL190b0tleScpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgdGhlIHZhbHVlIGF0IGBwYXRoYCBvZiBhIGdpdmVuIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDIuNC4wXG4gKiBAY2F0ZWdvcnkgVXRpbFxuICogQHBhcmFtIHtBcnJheXxzdHJpbmd9IHBhdGggVGhlIHBhdGggb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn0gUmV0dXJucyB0aGUgbmV3IGFjY2Vzc29yIGZ1bmN0aW9uLlxuICogQGV4YW1wbGVcbiAqXG4gKiB2YXIgb2JqZWN0cyA9IFtcbiAqICAgeyAnYSc6IHsgJ2InOiAyIH0gfSxcbiAqICAgeyAnYSc6IHsgJ2InOiAxIH0gfVxuICogXTtcbiAqXG4gKiBfLm1hcChvYmplY3RzLCBfLnByb3BlcnR5KCdhLmInKSk7XG4gKiAvLyA9PiBbMiwgMV1cbiAqXG4gKiBfLm1hcChfLnNvcnRCeShvYmplY3RzLCBfLnByb3BlcnR5KFsnYScsICdiJ10pKSwgJ2EuYicpO1xuICogLy8gPT4gWzEsIDJdXG4gKi9cbmZ1bmN0aW9uIHByb3BlcnR5KHBhdGgpIHtcbiAgcmV0dXJuIGlzS2V5KHBhdGgpID8gYmFzZVByb3BlcnR5KHRvS2V5KHBhdGgpKSA6IGJhc2VQcm9wZXJ0eURlZXAocGF0aCk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcHJvcGVydHk7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLnByb3BlcnR5YCB3aXRob3V0IHN1cHBvcnQgZm9yIGRlZXAgcGF0aHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eShrZXkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IG9iamVjdFtrZXldO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VQcm9wZXJ0eTtcbiIsInZhciBiYXNlR2V0ID0gcmVxdWlyZSgnLi9fYmFzZUdldCcpO1xuXG4vKipcbiAqIEEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiBgYmFzZVByb3BlcnR5YCB3aGljaCBzdXBwb3J0cyBkZWVwIHBhdGhzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge0FycmF5fHN0cmluZ30gcGF0aCBUaGUgcGF0aCBvZiB0aGUgcHJvcGVydHkgdG8gZ2V0LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgYWNjZXNzb3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGJhc2VQcm9wZXJ0eURlZXAocGF0aCkge1xuICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0KSB7XG4gICAgcmV0dXJuIGJhc2VHZXQob2JqZWN0LCBwYXRoKTtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlUHJvcGVydHlEZWVwO1xuIiwidmFyIGJhc2VGaW5kSW5kZXggPSByZXF1aXJlKCcuL19iYXNlRmluZEluZGV4JyksXG4gICAgYmFzZUl0ZXJhdGVlID0gcmVxdWlyZSgnLi9fYmFzZUl0ZXJhdGVlJyksXG4gICAgdG9JbnRlZ2VyID0gcmVxdWlyZSgnLi90b0ludGVnZXInKTtcblxuLyogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgZm9yIHRob3NlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBvdGhlciBgbG9kYXNoYCBtZXRob2RzLiAqL1xudmFyIG5hdGl2ZU1heCA9IE1hdGgubWF4O1xuXG4vKipcbiAqIFRoaXMgbWV0aG9kIGlzIGxpa2UgYF8uZmluZGAgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0XG4gKiBlbGVtZW50IGBwcmVkaWNhdGVgIHJldHVybnMgdHJ1dGh5IGZvciBpbnN0ZWFkIG9mIHRoZSBlbGVtZW50IGl0c2VsZi5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDEuMS4wXG4gKiBAY2F0ZWdvcnkgQXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3ByZWRpY2F0ZT1fLmlkZW50aXR5XSBUaGUgZnVuY3Rpb24gaW52b2tlZCBwZXIgaXRlcmF0aW9uLlxuICogQHBhcmFtIHtudW1iZXJ9IFtmcm9tSW5kZXg9MF0gVGhlIGluZGV4IHRvIHNlYXJjaCBmcm9tLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIGVsZW1lbnQsIGVsc2UgYC0xYC5cbiAqIEBleGFtcGxlXG4gKlxuICogdmFyIHVzZXJzID0gW1xuICogICB7ICd1c2VyJzogJ2Jhcm5leScsICAnYWN0aXZlJzogZmFsc2UgfSxcbiAqICAgeyAndXNlcic6ICdmcmVkJywgICAgJ2FjdGl2ZSc6IGZhbHNlIH0sXG4gKiAgIHsgJ3VzZXInOiAncGViYmxlcycsICdhY3RpdmUnOiB0cnVlIH1cbiAqIF07XG4gKlxuICogXy5maW5kSW5kZXgodXNlcnMsIGZ1bmN0aW9uKG8pIHsgcmV0dXJuIG8udXNlciA9PSAnYmFybmV5JzsgfSk7XG4gKiAvLyA9PiAwXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCB7ICd1c2VyJzogJ2ZyZWQnLCAnYWN0aXZlJzogZmFsc2UgfSk7XG4gKiAvLyA9PiAxXG4gKlxuICogLy8gVGhlIGBfLm1hdGNoZXNQcm9wZXJ0eWAgaXRlcmF0ZWUgc2hvcnRoYW5kLlxuICogXy5maW5kSW5kZXgodXNlcnMsIFsnYWN0aXZlJywgZmFsc2VdKTtcbiAqIC8vID0+IDBcbiAqXG4gKiAvLyBUaGUgYF8ucHJvcGVydHlgIGl0ZXJhdGVlIHNob3J0aGFuZC5cbiAqIF8uZmluZEluZGV4KHVzZXJzLCAnYWN0aXZlJyk7XG4gKiAvLyA9PiAyXG4gKi9cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5ID09IG51bGwgPyAwIDogYXJyYXkubGVuZ3RoO1xuICBpZiAoIWxlbmd0aCkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuICB2YXIgaW5kZXggPSBmcm9tSW5kZXggPT0gbnVsbCA/IDAgOiB0b0ludGVnZXIoZnJvbUluZGV4KTtcbiAgaWYgKGluZGV4IDwgMCkge1xuICAgIGluZGV4ID0gbmF0aXZlTWF4KGxlbmd0aCArIGluZGV4LCAwKTtcbiAgfVxuICByZXR1cm4gYmFzZUZpbmRJbmRleChhcnJheSwgYmFzZUl0ZXJhdGVlKHByZWRpY2F0ZSwgMyksIGluZGV4KTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmaW5kSW5kZXg7XG4iLCIvKipcbiAqIFRoZSBiYXNlIGltcGxlbWVudGF0aW9uIG9mIGBfLmZpbmRJbmRleGAgYW5kIGBfLmZpbmRMYXN0SW5kZXhgIHdpdGhvdXRcbiAqIHN1cHBvcnQgZm9yIGl0ZXJhdGVlIHNob3J0aGFuZHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcHJlZGljYXRlIFRoZSBmdW5jdGlvbiBpbnZva2VkIHBlciBpdGVyYXRpb24uXG4gKiBAcGFyYW0ge251bWJlcn0gZnJvbUluZGV4IFRoZSBpbmRleCB0byBzZWFyY2ggZnJvbS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2Zyb21SaWdodF0gU3BlY2lmeSBpdGVyYXRpbmcgZnJvbSByaWdodCB0byBsZWZ0LlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYmFzZUZpbmRJbmRleChhcnJheSwgcHJlZGljYXRlLCBmcm9tSW5kZXgsIGZyb21SaWdodCkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoLFxuICAgICAgaW5kZXggPSBmcm9tSW5kZXggKyAoZnJvbVJpZ2h0ID8gMSA6IC0xKTtcblxuICB3aGlsZSAoKGZyb21SaWdodCA/IGluZGV4LS0gOiArK2luZGV4IDwgbGVuZ3RoKSkge1xuICAgIGlmIChwcmVkaWNhdGUoYXJyYXlbaW5kZXhdLCBpbmRleCwgYXJyYXkpKSB7XG4gICAgICByZXR1cm4gaW5kZXg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBiYXNlRmluZEluZGV4O1xuIiwidmFyIHRvRmluaXRlID0gcmVxdWlyZSgnLi90b0Zpbml0ZScpO1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYW4gaW50ZWdlci5cbiAqXG4gKiAqKk5vdGU6KiogVGhpcyBtZXRob2QgaXMgbG9vc2VseSBiYXNlZCBvblxuICogW2BUb0ludGVnZXJgXShodHRwOi8vd3d3LmVjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtdG9pbnRlZ2VyKS5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDQuMC4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBpbnRlZ2VyLlxuICogQGV4YW1wbGVcbiAqXG4gKiBfLnRvSW50ZWdlcigzLjIpO1xuICogLy8gPT4gM1xuICpcbiAqIF8udG9JbnRlZ2VyKE51bWJlci5NSU5fVkFMVUUpO1xuICogLy8gPT4gMFxuICpcbiAqIF8udG9JbnRlZ2VyKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0ludGVnZXIoJzMuMicpO1xuICogLy8gPT4gM1xuICovXG5mdW5jdGlvbiB0b0ludGVnZXIodmFsdWUpIHtcbiAgdmFyIHJlc3VsdCA9IHRvRmluaXRlKHZhbHVlKSxcbiAgICAgIHJlbWFpbmRlciA9IHJlc3VsdCAlIDE7XG5cbiAgcmV0dXJuIHJlc3VsdCA9PT0gcmVzdWx0ID8gKHJlbWFpbmRlciA/IHJlc3VsdCAtIHJlbWFpbmRlciA6IHJlc3VsdCkgOiAwO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRvSW50ZWdlcjtcbiIsInZhciB0b051bWJlciA9IHJlcXVpcmUoJy4vdG9OdW1iZXInKTtcblxuLyoqIFVzZWQgYXMgcmVmZXJlbmNlcyBmb3IgdmFyaW91cyBgTnVtYmVyYCBjb25zdGFudHMuICovXG52YXIgSU5GSU5JVFkgPSAxIC8gMCxcbiAgICBNQVhfSU5URUdFUiA9IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBmaW5pdGUgbnVtYmVyLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4xMi4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9GaW5pdGUoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9GaW5pdGUoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvRmluaXRlKEluZmluaXR5KTtcbiAqIC8vID0+IDEuNzk3NjkzMTM0ODYyMzE1N2UrMzA4XG4gKlxuICogXy50b0Zpbml0ZSgnMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9GaW5pdGUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogMDtcbiAgfVxuICB2YWx1ZSA9IHRvTnVtYmVyKHZhbHVlKTtcbiAgaWYgKHZhbHVlID09PSBJTkZJTklUWSB8fCB2YWx1ZSA9PT0gLUlORklOSVRZKSB7XG4gICAgdmFyIHNpZ24gPSAodmFsdWUgPCAwID8gLTEgOiAxKTtcbiAgICByZXR1cm4gc2lnbiAqIE1BWF9JTlRFR0VSO1xuICB9XG4gIHJldHVybiB2YWx1ZSA9PT0gdmFsdWUgPyB2YWx1ZSA6IDA7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9GaW5pdGU7XG4iLCJ2YXIgYmFzZVRyaW0gPSByZXF1aXJlKCcuL19iYXNlVHJpbScpLFxuICAgIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9pc09iamVjdCcpLFxuICAgIGlzU3ltYm9sID0gcmVxdWlyZSgnLi9pc1N5bWJvbCcpO1xuXG4vKiogVXNlZCBhcyByZWZlcmVuY2VzIGZvciB2YXJpb3VzIGBOdW1iZXJgIGNvbnN0YW50cy4gKi9cbnZhciBOQU4gPSAwIC8gMDtcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGJhZCBzaWduZWQgaGV4YWRlY2ltYWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmFkSGV4ID0gL15bLStdMHhbMC05YS1mXSskL2k7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBiaW5hcnkgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzQmluYXJ5ID0gL14wYlswMV0rJC9pO1xuXG4vKiogVXNlZCB0byBkZXRlY3Qgb2N0YWwgc3RyaW5nIHZhbHVlcy4gKi9cbnZhciByZUlzT2N0YWwgPSAvXjBvWzAtN10rJC9pO1xuXG4vKiogQnVpbHQtaW4gbWV0aG9kIHJlZmVyZW5jZXMgd2l0aG91dCBhIGRlcGVuZGVuY3kgb24gYHJvb3RgLiAqL1xudmFyIGZyZWVQYXJzZUludCA9IHBhcnNlSW50O1xuXG4vKipcbiAqIENvbnZlcnRzIGB2YWx1ZWAgdG8gYSBudW1iZXIuXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSA0LjAuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIHByb2Nlc3MuXG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBudW1iZXIuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8udG9OdW1iZXIoMy4yKTtcbiAqIC8vID0+IDMuMlxuICpcbiAqIF8udG9OdW1iZXIoTnVtYmVyLk1JTl9WQUxVRSk7XG4gKiAvLyA9PiA1ZS0zMjRcbiAqXG4gKiBfLnRvTnVtYmVyKEluZmluaXR5KTtcbiAqIC8vID0+IEluZmluaXR5XG4gKlxuICogXy50b051bWJlcignMy4yJyk7XG4gKiAvLyA9PiAzLjJcbiAqL1xuZnVuY3Rpb24gdG9OdW1iZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAoaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIE5BTjtcbiAgfVxuICBpZiAoaXNPYmplY3QodmFsdWUpKSB7XG4gICAgdmFyIG90aGVyID0gdHlwZW9mIHZhbHVlLnZhbHVlT2YgPT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xuICAgIHZhbHVlID0gaXNPYmplY3Qob3RoZXIpID8gKG90aGVyICsgJycpIDogb3RoZXI7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZSA9PT0gMCA/IHZhbHVlIDogK3ZhbHVlO1xuICB9XG4gIHZhbHVlID0gYmFzZVRyaW0odmFsdWUpO1xuICB2YXIgaXNCaW5hcnkgPSByZUlzQmluYXJ5LnRlc3QodmFsdWUpO1xuICByZXR1cm4gKGlzQmluYXJ5IHx8IHJlSXNPY3RhbC50ZXN0KHZhbHVlKSlcbiAgICA/IGZyZWVQYXJzZUludCh2YWx1ZS5zbGljZSgyKSwgaXNCaW5hcnkgPyAyIDogOClcbiAgICA6IChyZUlzQmFkSGV4LnRlc3QodmFsdWUpID8gTkFOIDogK3ZhbHVlKTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b051bWJlcjtcbiIsInZhciB0cmltbWVkRW5kSW5kZXggPSByZXF1aXJlKCcuL190cmltbWVkRW5kSW5kZXgnKTtcblxuLyoqIFVzZWQgdG8gbWF0Y2ggbGVhZGluZyB3aGl0ZXNwYWNlLiAqL1xudmFyIHJlVHJpbVN0YXJ0ID0gL15cXHMrLztcblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy50cmltYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0cmltbWVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gYmFzZVRyaW0oc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmdcbiAgICA/IHN0cmluZy5zbGljZSgwLCB0cmltbWVkRW5kSW5kZXgoc3RyaW5nKSArIDEpLnJlcGxhY2UocmVUcmltU3RhcnQsICcnKVxuICAgIDogc3RyaW5nO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2VUcmltO1xuIiwiLyoqIFVzZWQgdG8gbWF0Y2ggYSBzaW5nbGUgd2hpdGVzcGFjZSBjaGFyYWN0ZXIuICovXG52YXIgcmVXaGl0ZXNwYWNlID0gL1xccy87XG5cbi8qKlxuICogVXNlZCBieSBgXy50cmltYCBhbmQgYF8udHJpbUVuZGAgdG8gZ2V0IHRoZSBpbmRleCBvZiB0aGUgbGFzdCBub24td2hpdGVzcGFjZVxuICogY2hhcmFjdGVyIG9mIGBzdHJpbmdgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyaW5nIFRoZSBzdHJpbmcgdG8gaW5zcGVjdC5cbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsYXN0IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAqL1xuZnVuY3Rpb24gdHJpbW1lZEVuZEluZGV4KHN0cmluZykge1xuICB2YXIgaW5kZXggPSBzdHJpbmcubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleC0tICYmIHJlV2hpdGVzcGFjZS50ZXN0KHN0cmluZy5jaGFyQXQoaW5kZXgpKSkge31cbiAgcmV0dXJuIGluZGV4O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHRyaW1tZWRFbmRJbmRleDtcbiIsImNvbnN0IGZpbmQgPSByZXF1aXJlKFwibG9kYXNoL2ZpbmRcIik7XG5jb25zdCBmaXJzdCA9IHJlcXVpcmUoXCJsb2Rhc2gvZmlyc3RcIik7XG5jb25zdCBOb3RpZmljYXRpb25IdWIgPSByZXF1aXJlKFwiLi9Ob3RpZmljYXRpb25IdWJcIik7XG5cbmNvbnN0IHNldHVwU2VsZWN0RHJvcGRvd24gPSAobm90aWZpY2F0aW9ucywgZm9ybVR5cGVTZWxlY3QpID0+IHtcbiAgbm90aWZpY2F0aW9ucy5mb3JFYWNoKG5vdGlmaWNhdGlvbiA9PiB7XG4gICAgY29uc3QgeyB0eXBlLCBsYWJlbCB9ID0gbm90aWZpY2F0aW9uO1xuICAgIGZvcm1UeXBlU2VsZWN0LmFwcGVuZENoaWxkKG5ldyBPcHRpb24obGFiZWwsIHR5cGUpKTtcbiAgfSk7XG59O1xuXG5jb25zdCBzZXR1cERlZmF1bHRNZXNzYWdlID0gKG5vdGlmaWNhdGlvbnMsIGZvcm1NZXNzYWdlLCBmb3JtVHlwZVNlbGVjdCkgPT4ge1xuICBmb3JtTWVzc2FnZS52YWx1ZSA9IGZpcnN0KG5vdGlmaWNhdGlvbnMpLmRlZmF1bHRWYWx1ZTtcbiAgZm9ybVR5cGVTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBldmVudCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICBjb25zdCBzZWxlY3RlZE5vdGlmaWNhdGlvbiA9IGZpbmQobm90aWZpY2F0aW9ucywgeyB0eXBlIH0pO1xuICAgIGZvcm1NZXNzYWdlLnZhbHVlID0gc2VsZWN0ZWROb3RpZmljYXRpb24uZGVmYXVsdFZhbHVlO1xuICB9KTtcbn07XG5cbmNvbnN0IHNldHVwU3VibWl0QnV0dG9uID0gY29udGV4dCA9PiB7XG4gIGNvbnN0IHsgZm9ybVNlbmQsIGZvcm1NZXNzYWdlLCBmb3JtVHlwZVNlbGVjdCB9ID0gY29udGV4dDtcblxuICBmb3JtU2VuZC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgKCkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSBmb3JtVHlwZVNlbGVjdC52YWx1ZTtcbiAgICBjb25zdCBwYXlsb2FkID0geyBtZXNzYWdlOiBmb3JtTWVzc2FnZS52YWx1ZSB9O1xuICAgIE5vdGlmaWNhdGlvbkh1Yi5zaG93KHR5cGUsIHBheWxvYWQpXG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSAobm90aWZpY2F0aW9ucykgPT4ge1xuICBjb25zdCBmb3JtU2VuZCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibm90aWZpY2F0aW9uLWZvcm0tc2VuZFwiKTtcbiAgY29uc3QgZm9ybU1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5vdGlmaWNhdGlvbi1mb3JtLW1lc3NhZ2VcIik7XG4gIGNvbnN0IGZvcm1UeXBlU2VsZWN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJub3RpZmljYXRpb24tZm9ybS10eXBlLXNlbGVjdFwiKTtcblxuICBjb25zdCBjb250ZXh0ID0ge1xuICAgIG5vdGlmaWNhdGlvbnMsXG4gICAgZm9ybVNlbmQsXG4gICAgZm9ybU1lc3NhZ2UsXG4gICAgZm9ybVR5cGVTZWxlY3QsXG4gIH07XG5cbiAgc2V0dXBTZWxlY3REcm9wZG93bihub3RpZmljYXRpb25zLCBmb3JtVHlwZVNlbGVjdCk7XG4gIHNldHVwRGVmYXVsdE1lc3NhZ2Uobm90aWZpY2F0aW9ucywgZm9ybU1lc3NhZ2UsIGZvcm1UeXBlU2VsZWN0KTtcbiAgc2V0dXBTdWJtaXRCdXR0b24oY29udGV4dCk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtU2VuZCxcbiAgICBmb3JtTWVzc2FnZSxcbiAgICBmb3JtVHlwZVNlbGVjdCxcbiAgfVxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9oZWFkJyk7XG4iLCIvKipcbiAqIEdldHMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAYWxpYXMgZmlyc3RcbiAqIEBjYXRlZ29yeSBBcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIHF1ZXJ5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYGFycmF5YC5cbiAqIEBleGFtcGxlXG4gKlxuICogXy5oZWFkKFsxLCAyLCAzXSk7XG4gKiAvLyA9PiAxXG4gKlxuICogXy5oZWFkKFtdKTtcbiAqIC8vID0+IHVuZGVmaW5lZFxuICovXG5mdW5jdGlvbiBoZWFkKGFycmF5KSB7XG4gIHJldHVybiAoYXJyYXkgJiYgYXJyYXkubGVuZ3RoKSA/IGFycmF5WzBdIDogdW5kZWZpbmVkO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGhlYWQ7XG4iLCJjb25zdCB7IHBpcGUgfSA9IHJlcXVpcmUoJ3J4anMnKTtcbmNvbnN0IHsgbWFwLCBmaWx0ZXIsIHRhcCB9ID0gcmVxdWlyZSgncnhqcy9vcGVyYXRvcnMnKTtcblxuY29uc3QgTEVGVF9BUlJPV19LRVkgPSAzNztcbmNvbnN0IFVQX0FSUk9XX0tFWSA9IDM4O1xuY29uc3QgUklHSFRfQVJST1dfS0VZID0gMzk7XG5jb25zdCBET1dOX0FSUk9XX0tFWSA9IDQwO1xuY29uc3QgU1BBQ0VfQkFSX0tFWSA9IDMyO1xuXG5jb25zdCBLRVlfTUFQUElOR1MgPSB7XG4gIFtMRUZUX0FSUk9XX0tFWV06ICdsZWZ0JyxcbiAgW1JJR0hUX0FSUk9XX0tFWV06ICdyaWdodCcsXG4gIFtVUF9BUlJPV19LRVldOiAndG9wJyxcbiAgW0RPV05fQVJST1dfS0VZXTogJ2JvdHRvbScsXG4gIFtTUEFDRV9CQVJfS0VZXTogJ2ZhY2UnLFxufVxuXG5jb25zdCBnZXRSeGpzVGFyZ2V0ID0gKCkgPT4gcGlwZShcbiAgbWFwKChldmVudCkgPT4gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLXJ4anMtdGFyZ2V0XScpKSxcbiAgZmlsdGVyKChlbGVtZW50KSA9PiAhIWVsZW1lbnQpLFxuICBtYXAoKGVsZW1lbnQpID0+IGVsZW1lbnQuZGF0YXNldC5yeGpzVGFyZ2V0KSxcbilcblxuY29uc3QgZ2V0Unhqc1RhcmdldEZyb21LZXkgPSAoKSA9PiBwaXBlKFxuICBmaWx0ZXIoKGV2ZW50KSA9PiAhIShLRVlfTUFQUElOR1NbZXZlbnQud2hpY2hdKSAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50LmlkICE9ICdub3RpZmljYXRpb24tZm9ybS1tZXNzYWdlJyksXG4gIHRhcCgoZXZlbnQpID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpLFxuICBmaWx0ZXIoKGV2ZW50KSA9PiAhZXZlbnQucmVwZWF0KSxcbiAgbWFwKChldmVudCkgPT4gS0VZX01BUFBJTkdTW2V2ZW50LndoaWNoXSksXG4pXG5cbmNvbnN0IGdldFRpbWVkRXZlbnQgPSAoKSA9PiBwaXBlKFxuICBtYXAoKHRhcmdldCkgPT4gKHtcbiAgICB0YXJnZXQsXG4gICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICB9KSksXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSeGpzVGFyZ2V0LFxuICBnZXRSeGpzVGFyZ2V0RnJvbUtleSxcbiAgZ2V0VGltZWRFdmVudCxcbn1cbiIsImNvbnN0IFN0b3JhZ2VIdWIgPSByZXF1aXJlKCcuL3NyYy9TdG9yYWdlSHViJyk7XG5cbmNvbnN0IFN0b3JhZ2VIdWJJbnN0YW5jZSA9IG5ldyBTdG9yYWdlSHViKCk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXREYXRhOiBTdG9yYWdlSHViSW5zdGFuY2UuZ2V0RGF0YSxcbiAgc2V0RGF0YTogU3RvcmFnZUh1Ykluc3RhbmNlLnNldERhdGEsXG4gIHJlc2V0OiBTdG9yYWdlSHViSW5zdGFuY2UucmVzZXQsXG4gIHNldERlYnVnOiBTdG9yYWdlSHViSW5zdGFuY2Uuc2V0RGVidWcsXG4gIGZpbmQ6IFN0b3JhZ2VIdWJJbnN0YW5jZS5maW5kLFxuICBzZXRKU09OOiBTdG9yYWdlSHViSW5zdGFuY2Uuc2V0SlNPTlxufVxuIiwiY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XG5jbGFzcyBTdG9yYWdlSHViIHtcbiAgY29uc3RydWN0b3IoZmlsZVBhdGg9bnVsbCkge1xuICAgIHRoaXMuc3RvcmUgPSB7fTtcbiAgICB0aGlzLnNob3VsZERlYnVnID0gZmFsc2U7XG4gIH1cblxuICBzZXRKU09OKGpzb24pIHtcbiAgICB0aGlzLnN0b3JlID0ganNvblxuICB9XG5cbiAgc2V0RGVidWcoc2hvdWxkRGVidWcpIHtcbiAgICB0aGlzLnNob3VsZERlYnVnID0gc2hvdWxkRGVidWc7XG4gIH1cblxuICBzZXREYXRhKGZpZWxkLCB2YWx1ZSkge1xuXG4gICAgaWYgKHR5cGVvZiBmaWVsZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmlyc3QgcGFyYW1ldGVyIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnNob3VsZERlYnVnKSB7XG4gICAgICBjb25zb2xlLmRlYnVnKCdbU3RvcmFnZUh1Yl0gQmVmb3JlOicsIHRoaXMuc3RvcmUpXG4gICAgfVxuICAgIHRoaXMuc3RvcmUgPSB7XG4gICAgICAuLi50aGlzLnN0b3JlLFxuICAgICAgW2ZpZWxkXTogdmFsdWUsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2hvdWxkRGVidWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1tTdG9yYWdlSHViXSBBZnRlcjonLCB0aGlzLnN0b3JlKVxuICAgIH1cbiAgfVxuXG4gIGdldERhdGEoZmllbGQpIHtcbiAgICByZXR1cm4gdGhpcy5zdG9yZVtmaWVsZF07XG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLnN0b3JlID0ge307XG4gIH1cblxuICBmaW5kKGZpZWxkLCBhcHBseUZuKSB7XG4gICAgY29uc3QgZGF0YVJldHJpZXZlZCA9IHRoaXMuZ2V0RGF0YShmaWVsZCk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRhdGFSZXRyaWV2ZWQpIHx8IHR5cGVvZihhcHBseUZuKSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIHJldHVybiAoZGF0YVJldHJpZXZlZCB8fCBbXSkucmVkdWNlKChhY2MsIGRhdGEpID0+IHtcbiAgICAgIGlmKGFwcGx5Rm4oZGF0YSkpIHtcbiAgICAgICAgYWNjLnB1c2goZGF0YSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIFtdKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFN0b3JhZ2VIdWI7XG4iLCJjb25zdCBBdWRpb0h1YiA9IHJlcXVpcmUoJy4vc3JjL0F1ZGlvSHViJyk7XG5cbmNvbnN0IEF1ZGlvSHViSW5zdGFuY2UgPSBuZXcgQXVkaW9IdWIoKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBsYXlTb3VuZDogQXVkaW9IdWJJbnN0YW5jZS5wbGF5U291bmQsXG59IiwiY2xhc3MgQXVkaW9IdWIge1xuXG4gIHBsYXlTb3VuZChmaWxlcGF0aCwgdm9sdW1lPTEpIHtcbiAgICBsZXQgc291bmQgPSBuZXcgQXVkaW8oZmlsZXBhdGgpXG4gICAgaWYgKHZvbHVtZSA8PSAxICYmIHZvbHVtZSA+PSAwKSB7ICBcbiAgICAgIHNvdW5kLnZvbHVtZSA9IHZvbHVtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW50ZXIgdm9sdW1lIGJldHdlZW4gMCBhbmQgMVwiKVxuICAgIH1cbiAgICBzb3VuZC5wbGF5KCk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBdWRpb0h1YjtcbiIsImNvbnN0IEhvbWVQYWdlID0gcmVxdWlyZSgnLi9wYWdlcy9ob21lUGFnZS9ob21lUGFnZScpO1xuY29uc3QgQ29udGFjdHNQYWdlID0gcmVxdWlyZSgnLi9wYWdlcy9jb250YWN0c1BhZ2UvY29udGFjdHNQYWdlJyk7XG5jb25zdCBUZWFtUGFnZSA9IHJlcXVpcmUoJy4vcGFnZXMvdGVhbVBhZ2UvdGVhbVBhZ2UnKTtcbmNvbnN0IEZvdXJPaEZvdXIgPSByZXF1aXJlKCcuL3BhZ2VzLzQwNFBhZ2UvNDA0UGFnZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJy8nOiBIb21lUGFnZSxcbiAgJ2NvbnRhY3RzJzogQ29udGFjdHNQYWdlLFxuICAndGVhbSc6IFRlYW1QYWdlLFxuICAnNDA0JzogRm91ck9oRm91cixcbn07XG4iLCJjb25zdCBCYXNlUGFnZSA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLkJhc2VQYWdlO1xuY29uc3QgU3RvcmFnZUh1YiA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLlN0b3JhZ2VIdWI7XG5jb25zdCBBdWRpb0h1YiA9IHJlcXVpcmUoJ3dhdGNoLWZyYW1ld29yaycpLkF1ZGlvSHViO1xuY29uc3QgbG9nbyA9IHJlcXVpcmUoJy4uLy4uLy4uL2ltYWdlcy9sb2dvLnBuZycpO1xuY29uc3QgcGxvcCA9ICcuL3NvdW5kcy9wbG9wLm1wMyc7XG5cbi8vdGVzdCBmb3IgcmFzcGJlcnJ5cGlcbmNsYXNzIEhvbWVQYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vaG9tZVBhZ2UuaGJzJyk7XG5cbiAgcGFnZVdpbGxMb2FkKCkge1xuICAgIFN0b3JhZ2VIdWIuc2V0RGF0YSgnY29udGFjdHMnLCBbXG4gICAgICB7IG5hbWU6ICdSYXknLCBwaG9uZU51bWJlcjogJzA0MzEgMTExIDExMScgfSxcbiAgICAgIHsgbmFtZTogJ1NpbmFuJywgcGhvbmVOdW1iZXI6ICcwNDMxIDIyMiAyMjInIH0sXG4gICAgICB7IG5hbWU6ICdKYWZhcmknLCBwaG9uZU51bWJlcjogJzA0MzEgMzMzIDMzMycgfSxcbiAgICBdKVxuXG4gICAgdGhpcy51cGRhdGVUaW1lRXZlcnlTZWNvbmQoKTtcbiAgICBjb25zdCBkYXRlVGltZSA9IHRoaXMuZ2V0RGF0ZVRpbWUoKTtcbiAgICB0aGlzLmRhdGUgPSBkYXRlVGltZS5kYXRlO1xuICAgIHRoaXMudGltZSA9IGRhdGVUaW1lLnRpbWU7XG4gICAgdGhpcy5sb2dvID0gbG9nbztcbiAgfVxuXG4gIGdldERhdGVUaW1lKCkge1xuICAgIGNvbnN0IGRhdGVUaW1lID0gbmV3IERhdGUoRGF0ZS5ub3coKSkudG9Mb2NhbGVTdHJpbmcoJ2VuLUFVJykuc3BsaXQoXCIsXCIpO1xuICAgIHJldHVybiB7IFxuICAgICAgZGF0ZTogZGF0ZVRpbWVbMF0sIFxuICAgICAgdGltZTogZGF0ZVRpbWVbMV0sXG4gICAgfTtcbiAgfVxuXG4gIHVwZGF0ZVRpbWVFdmVyeVNlY29uZCgpIHtcbiAgICBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLnVwZGF0ZVRpbWVEaXNwbGF5KHRoaXMuZ2V0RGF0ZVRpbWUpLCAxMDAwKTtcbiAgfVxuXG4gIHVwZGF0ZVRpbWVEaXNwbGF5KGdldFRpbWUpIHtcbiAgICBjb25zdCBjbG9ja1RpbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNsb2NrLXRpbWVcIik7XG4gICAgaWYgKGNsb2NrVGltZSkge1xuICAgICAgY2xvY2tUaW1lLnRleHRDb250ZW50ID0gZ2V0VGltZSgpLnRpbWU7XG4gICAgfVxuICB9XG5cbiAgcmlnaHRCdXR0b25FdmVudCgpIHtcbiAgICB0aGlzLm5hdmlnYXRlKCdjb250YWN0cycpO1xuICB9XG5cbiAgbGVmdEJ1dHRvbkV2ZW50KCkge1xuICAgIEF1ZGlvSHViLnBsYXlTb3VuZChwbG9wKTtcbiAgfVxuXG4gIHRvcEJ1dHRvbkV2ZW50KCkge1xuICAgIHRoaXMud2F0Y2hGYWNlLnNjcm9sbFRvcCAtPSA0MDtcbiAgfVxuXG4gIGJvdHRvbUJ1dHRvbkV2ZW50KCkge1xuICAgIHRoaXMud2F0Y2hGYWNlLnNjcm9sbFRvcCArPSA0MDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhvbWVQYWdlO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiZTBlNjliNDY0MzAwOTIwMzQ0N2NjMTdhZDdlMWM1OTAucG5nXCI7IiwidmFyIEhhbmRsZWJhcnMgPSByZXF1aXJlKCcvaG9tZS9jaXJjbGVjaS9wcm9qZWN0L25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL3J1bnRpbWUuanMnKTtcbm1vZHVsZS5leHBvcnRzID0gKEhhbmRsZWJhcnNbJ2RlZmF1bHQnXSB8fCBIYW5kbGViYXJzKS50ZW1wbGF0ZSh7XCJjb21waWxlclwiOls4LFwiPj0gNC4zLjBcIl0sXCJtYWluXCI6ZnVuY3Rpb24oY29udGFpbmVyLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgICB2YXIgaGVscGVyLCBhbGlhczE9ZGVwdGgwICE9IG51bGwgPyBkZXB0aDAgOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KSwgYWxpYXMyPWNvbnRhaW5lci5ob29rcy5oZWxwZXJNaXNzaW5nLCBhbGlhczM9XCJmdW5jdGlvblwiLCBhbGlhczQ9Y29udGFpbmVyLmVzY2FwZUV4cHJlc3Npb24sIGxvb2t1cFByb3BlcnR5ID0gY29udGFpbmVyLmxvb2t1cFByb3BlcnR5IHx8IGZ1bmN0aW9uKHBhcmVudCwgcHJvcGVydHlOYW1lKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50LCBwcm9wZXJ0eU5hbWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcmVudFtwcm9wZXJ0eU5hbWVdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9O1xuXG4gIHJldHVybiBcIjxkaXYgaWQ9XFxcImhvbWVcXFwiPlxcbiAgPHA+RGF0ZTogPHNwYW4gaWQ9XFxcImNsb2NrLWRhdGVcXFwiPlwiXG4gICAgKyBhbGlhczQoKChoZWxwZXIgPSAoaGVscGVyID0gbG9va3VwUHJvcGVydHkoaGVscGVycyxcImRhdGVcIikgfHwgKGRlcHRoMCAhPSBudWxsID8gbG9va3VwUHJvcGVydHkoZGVwdGgwLFwiZGF0ZVwiKSA6IGRlcHRoMCkpICE9IG51bGwgPyBoZWxwZXIgOiBhbGlhczIpLCh0eXBlb2YgaGVscGVyID09PSBhbGlhczMgPyBoZWxwZXIuY2FsbChhbGlhczEse1wibmFtZVwiOlwiZGF0ZVwiLFwiaGFzaFwiOnt9LFwiZGF0YVwiOmRhdGEsXCJsb2NcIjp7XCJzdGFydFwiOntcImxpbmVcIjoyLFwiY29sdW1uXCI6MzN9LFwiZW5kXCI6e1wibGluZVwiOjIsXCJjb2x1bW5cIjo0MX19fSkgOiBoZWxwZXIpKSlcbiAgICArIFwiPC9zcGFuPjwvcD5cXG4gIDxwPlRpbWU6IDxzcGFuIGlkPVxcXCJjbG9jay10aW1lXFxcIj5cIlxuICAgICsgYWxpYXM0KCgoaGVscGVyID0gKGhlbHBlciA9IGxvb2t1cFByb3BlcnR5KGhlbHBlcnMsXCJ0aW1lXCIpIHx8IChkZXB0aDAgIT0gbnVsbCA/IGxvb2t1cFByb3BlcnR5KGRlcHRoMCxcInRpbWVcIikgOiBkZXB0aDApKSAhPSBudWxsID8gaGVscGVyIDogYWxpYXMyKSwodHlwZW9mIGhlbHBlciA9PT0gYWxpYXMzID8gaGVscGVyLmNhbGwoYWxpYXMxLHtcIm5hbWVcIjpcInRpbWVcIixcImhhc2hcIjp7fSxcImRhdGFcIjpkYXRhLFwibG9jXCI6e1wic3RhcnRcIjp7XCJsaW5lXCI6MyxcImNvbHVtblwiOjMzfSxcImVuZFwiOntcImxpbmVcIjozLFwiY29sdW1uXCI6NDF9fX0pIDogaGVscGVyKSkpXG4gICAgKyBcIjwvc3Bhbj48L3A+XFxuICA8aW1nIHNyYz1cXFwiXCJcbiAgICArIGFsaWFzNCgoKGhlbHBlciA9IChoZWxwZXIgPSBsb29rdXBQcm9wZXJ0eShoZWxwZXJzLFwibG9nb1wiKSB8fCAoZGVwdGgwICE9IG51bGwgPyBsb29rdXBQcm9wZXJ0eShkZXB0aDAsXCJsb2dvXCIpIDogZGVwdGgwKSkgIT0gbnVsbCA/IGhlbHBlciA6IGFsaWFzMiksKHR5cGVvZiBoZWxwZXIgPT09IGFsaWFzMyA/IGhlbHBlci5jYWxsKGFsaWFzMSx7XCJuYW1lXCI6XCJsb2dvXCIsXCJoYXNoXCI6e30sXCJkYXRhXCI6ZGF0YSxcImxvY1wiOntcInN0YXJ0XCI6e1wibGluZVwiOjQsXCJjb2x1bW5cIjoxMn0sXCJlbmRcIjp7XCJsaW5lXCI6NCxcImNvbHVtblwiOjIwfX19KSA6IGhlbHBlcikpKVxuICAgICsgXCJcXFwiIGFsdD1cXFwiXFxcIiAvPlxcbiAgPGRpdj5IZWxsbywgV29ybGQhPC9kaXY+XFxuICA8cD5Mb3JlbSBJcHN1bSBpcyBzaW1wbHkgZHVtbXkgdGV4dCBvZiB0aGUgcHJpbnRpbmcgYW5kIHR5cGVzZXR0aW5nIGluZHVzdHJ5LiBMb3JlbSBJcHN1bSBoYXMgYmVlbiB0aGUgaW5kdXN0cnkncyBzdGFuZGFyZCBkdW1teSB0ZXh0IGV2ZXIgc2luY2UgdGhlIDE1MDBzLCB3aGVuIGFuIHVua25vd24gcHJpbnRlciB0b29rIGEgZ2FsbGV5IG9mIHR5cGUgYW5kIHNjcmFtYmxlZCBpdCB0byBtYWtlIGEgdHlwZSBzcGVjaW1lbiBib29rLiBJdCBoYXMgc3Vydml2ZWQgbm90IG9ubHkgZml2ZSBjZW50dXJpZXMsIGJ1dCBhbHNvIHRoZSBsZWFwIGludG8gZWxlY3Ryb25pYyB0eXBlc2V0dGluZywgcmVtYWluaW5nIGVzc2VudGlhbGx5IHVuY2hhbmdlZC4gSXQgd2FzIHBvcHVsYXJpc2VkIGluIHRoZSAxOTYwcyB3aXRoIHRoZSByZWxlYXNlIG9mIExldHJhc2V0IHNoZWV0cyBjb250YWluaW5nIExvcmVtIElwc3VtIHBhc3NhZ2VzLCBhbmQgbW9yZSByZWNlbnRseSB3aXRoIGRlc2t0b3AgcHVibGlzaGluZyBzb2Z0d2FyZSBsaWtlIEFsZHVzIFBhZ2VNYWtlciBpbmNsdWRpbmcgdmVyc2lvbnMgb2YgTG9yZW0gSXBzdW0uPC9wPlxcbiAgPHA+SXQgaXMgYSBsb25nIGVzdGFibGlzaGVkIGZhY3QgdGhhdCBhIHJlYWRlciB3aWxsIGJlIGRpc3RyYWN0ZWQgYnkgdGhlIHJlYWRhYmxlIGNvbnRlbnQgb2YgYSBwYWdlIHdoZW4gbG9va2luZyBhdCBpdHMgbGF5b3V0LiBUaGUgcG9pbnQgb2YgdXNpbmcgTG9yZW0gSXBzdW0gaXMgdGhhdCBpdCBoYXMgYSBtb3JlLW9yLWxlc3Mgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiBsZXR0ZXJzLCBhcyBvcHBvc2VkIHRvIHVzaW5nICdDb250ZW50IGhlcmUsIGNvbnRlbnQgaGVyZScsIG1ha2luZyBpdCBsb29rIGxpa2UgcmVhZGFibGUgRW5nbGlzaC4gTWFueSBkZXNrdG9wIHB1Ymxpc2hpbmcgcGFja2FnZXMgYW5kIHdlYiBwYWdlIGVkaXRvcnMgbm93IHVzZSBMb3JlbSBJcHN1bSBhcyB0aGVpciBkZWZhdWx0IG1vZGVsIHRleHQsIGFuZCBhIHNlYXJjaCBmb3IgJ2xvcmVtIGlwc3VtJyB3aWxsIHVuY292ZXIgbWFueSB3ZWIgc2l0ZXMgc3RpbGwgaW4gdGhlaXIgaW5mYW5jeS4gVmFyaW91cyB2ZXJzaW9ucyBoYXZlIGV2b2x2ZWQgb3ZlciB0aGUgeWVhcnMsIHNvbWV0aW1lcyBieSBhY2NpZGVudCwgc29tZXRpbWVzIG9uIHB1cnBvc2UgKGluamVjdGVkIGh1bW91ciBhbmQgdGhlIGxpa2UpLjwvcD5cXG48L2Rpdj5cXG5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsImNvbnN0IEJhc2VQYWdlID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuQmFzZVBhZ2U7XG5jb25zdCBTdG9yYWdlSHViID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuU3RvcmFnZUh1YjtcblxuY2xhc3MgQ29udGFjdHNQYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vY29udGFjdHNQYWdlLmhicycpO1xuXG4gIHBhZ2VXaWxsTG9hZCgpIHtcbiAgICB0aGlzLmNvbnRhY3RzID0gU3RvcmFnZUh1Yi5nZXREYXRhKCdjb250YWN0cycpXG4gIH1cblxuICBsZWZ0QnV0dG9uRXZlbnQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZSgnLycpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ29udGFjdHNQYWdlO1xuIiwidmFyIEhhbmRsZWJhcnMgPSByZXF1aXJlKCcvaG9tZS9jaXJjbGVjaS9wcm9qZWN0L25vZGVfbW9kdWxlcy9oYW5kbGViYXJzL3J1bnRpbWUuanMnKTtcbm1vZHVsZS5leHBvcnRzID0gKEhhbmRsZWJhcnNbJ2RlZmF1bHQnXSB8fCBIYW5kbGViYXJzKS50ZW1wbGF0ZSh7XCIxXCI6ZnVuY3Rpb24oY29udGFpbmVyLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgICB2YXIgYWxpYXMxPWNvbnRhaW5lci5sYW1iZGEsIGFsaWFzMj1jb250YWluZXIuZXNjYXBlRXhwcmVzc2lvbiwgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH07XG5cbiAgcmV0dXJuIFwiICAgICAgPGxpPlxcbiAgICAgICAgPHNwYW4+TmFtZTogXCJcbiAgICArIGFsaWFzMihhbGlhczEoKGRlcHRoMCAhPSBudWxsID8gbG9va3VwUHJvcGVydHkoZGVwdGgwLFwibmFtZVwiKSA6IGRlcHRoMCksIGRlcHRoMCkpXG4gICAgKyBcIjwvc3Bhbj5cXG4gICAgICAgIDxici8+XFxuICAgICAgICA8c3Bhbj5QaG9uZTogXCJcbiAgICArIGFsaWFzMihhbGlhczEoKGRlcHRoMCAhPSBudWxsID8gbG9va3VwUHJvcGVydHkoZGVwdGgwLFwicGhvbmVOdW1iZXJcIikgOiBkZXB0aDApLCBkZXB0aDApKVxuICAgICsgXCI8L3NwYW4+XFxuICAgICAgPC9saT5cXG5cIjtcbn0sXCJjb21waWxlclwiOls4LFwiPj0gNC4zLjBcIl0sXCJtYWluXCI6ZnVuY3Rpb24oY29udGFpbmVyLGRlcHRoMCxoZWxwZXJzLHBhcnRpYWxzLGRhdGEpIHtcbiAgICB2YXIgc3RhY2sxLCBsb29rdXBQcm9wZXJ0eSA9IGNvbnRhaW5lci5sb29rdXBQcm9wZXJ0eSB8fCBmdW5jdGlvbihwYXJlbnQsIHByb3BlcnR5TmFtZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhcmVudCwgcHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgIHJldHVybiBwYXJlbnRbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfTtcblxuICByZXR1cm4gXCI8ZGl2IGlkPVxcXCJjb250YWN0c1xcXCI+XFxuICA8aDE+Q29udGFjdHM8L2gxPlxcbiAgPHVsPlxcblwiXG4gICAgKyAoKHN0YWNrMSA9IGxvb2t1cFByb3BlcnR5KGhlbHBlcnMsXCJlYWNoXCIpLmNhbGwoZGVwdGgwICE9IG51bGwgPyBkZXB0aDAgOiAoY29udGFpbmVyLm51bGxDb250ZXh0IHx8IHt9KSwoZGVwdGgwICE9IG51bGwgPyBsb29rdXBQcm9wZXJ0eShkZXB0aDAsXCJjb250YWN0c1wiKSA6IGRlcHRoMCkse1wibmFtZVwiOlwiZWFjaFwiLFwiaGFzaFwiOnt9LFwiZm5cIjpjb250YWluZXIucHJvZ3JhbSgxLCBkYXRhLCAwKSxcImludmVyc2VcIjpjb250YWluZXIubm9vcCxcImRhdGFcIjpkYXRhLFwibG9jXCI6e1wic3RhcnRcIjp7XCJsaW5lXCI6NCxcImNvbHVtblwiOjR9LFwiZW5kXCI6e1wibGluZVwiOjEwLFwiY29sdW1uXCI6MTN9fX0pKSAhPSBudWxsID8gc3RhY2sxIDogXCJcIilcbiAgICArIFwiICA8L3VsPlxcbjwvZGl2PlwiO1xufSxcInVzZURhdGFcIjp0cnVlfSk7IiwiY29uc3QgQmFzZVBhZ2UgPSByZXF1aXJlKCd3YXRjaC1mcmFtZXdvcmsnKS5CYXNlUGFnZTtcbmNsYXNzIFRlYW1QYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vdGVhbVBhZ2UuaGJzJyk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVGVhbVBhZ2U7XG4iLCJ2YXIgSGFuZGxlYmFycyA9IHJlcXVpcmUoJy9ob21lL2NpcmNsZWNpL3Byb2plY3Qvbm9kZV9tb2R1bGVzL2hhbmRsZWJhcnMvcnVudGltZS5qcycpO1xubW9kdWxlLmV4cG9ydHMgPSAoSGFuZGxlYmFyc1snZGVmYXVsdCddIHx8IEhhbmRsZWJhcnMpLnRlbXBsYXRlKHtcImNvbXBpbGVyXCI6WzgsXCI+PSA0LjMuMFwiXSxcIm1haW5cIjpmdW5jdGlvbihjb250YWluZXIsZGVwdGgwLGhlbHBlcnMscGFydGlhbHMsZGF0YSkge1xuICAgIHJldHVybiBcIjxkaXYgaWQ9XFxcInRlYW1cXFwiPlxcbiAgICA8aDE+TWFkZSBieTo8L2gxPlxcbiAgICA8dWw+XFxuICAgICAgICA8IS0tIFRPRE86IEFkZCB5b3VyIG5hbWUgYXMgYSBsaXN0IGVsZW1lbnQgLS0+XFxuICAgICAgICA8bGk+UmF5PC9saT5cXG4gICAgPC91bD5cXG48L2Rpdj5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsImNvbnN0IEJhc2VQYWdlID0gcmVxdWlyZSgnd2F0Y2gtZnJhbWV3b3JrJykuQmFzZVBhZ2U7XG5cbmNsYXNzIEZvdXJPaEZvdXJQYWdlIGV4dGVuZHMgQmFzZVBhZ2Uge1xuICB0ZW1wbGF0ZSA9IHJlcXVpcmUoJy4vNDA0UGFnZS5oYnMnKTtcblxuICBsZWZ0QnV0dG9uRXZlbnQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZSgnLycpO1xuICB9XG4gIHJpZ2h0QnV0dG9uRXZlbnQoKSB7XG4gICAgdGhpcy5uYXZpZ2F0ZSgnLycpO1xuICB9XG4gIHRvcEJ1dHRvbkV2ZW50KCkge1xuICAgIHRoaXMubmF2aWdhdGUoJy8nKTtcbiAgfVxuICBib3R0b21CdXR0b25FdmVudCgpIHtcbiAgICB0aGlzLm5hdmlnYXRlKCcvJyk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBGb3VyT2hGb3VyUGFnZTtcbiIsInZhciBIYW5kbGViYXJzID0gcmVxdWlyZSgnL2hvbWUvY2lyY2xlY2kvcHJvamVjdC9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9ydW50aW1lLmpzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IChIYW5kbGViYXJzWydkZWZhdWx0J10gfHwgSGFuZGxlYmFycykudGVtcGxhdGUoe1wiY29tcGlsZXJcIjpbOCxcIj49IDQuMy4wXCJdLFwibWFpblwiOmZ1bmN0aW9uKGNvbnRhaW5lcixkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gICAgcmV0dXJuIFwiPGgxPk9vcHMhPC9oMT5cXG48cD5UaGUgcGFnZSB5b3UncmUgbG9va2luZyBmb3IgY291bGQgbm90IGJlIGZvdW5kLjwvcD5cXG5cIjtcbn0sXCJ1c2VEYXRhXCI6dHJ1ZX0pOyIsImNvbnN0IEFsZXJ0Tm90aWZpY2F0aW9uID0gcmVxdWlyZSgnLi9ub3RpZmljYXRpb25zL0FsZXJ0Tm90aWZpY2F0aW9uL0FsZXJ0Tm90aWZpY2F0aW9uJyk7XG5cbmNvbnN0IG5vdGlmaWNhdGlvbnMgPSBbXG4gIHtcbiAgICB0eXBlOiBcImFsZXJ0XCIsXG4gICAgbGFiZWw6IFwiQWxlcnRcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiVGhpcyBpcyBhIHRlc3QgYWxlcnRcIixcbiAgICB2aWV3OiBBbGVydE5vdGlmaWNhdGlvbixcbiAgfSxcbiAge1xuICAgIHR5cGU6IFwiYmFzZVwiLFxuICAgIGxhYmVsOiBcIkJhc2VcIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiVGhpcyBpcyBhIHRlc3QgYmFzZSBub3RpZmljYXRpb25cIixcbiAgfVxuXTtcblxuXG5tb2R1bGUuZXhwb3J0cyA9IG5vdGlmaWNhdGlvbnM7XG4iLCJjb25zdCBCYXNlTm90aWZpY2F0aW9uID0gcmVxdWlyZShcIndhdGNoLWZyYW1ld29ya1wiKS5CYXNlTm90aWZpY2F0aW9uO1xuY29uc3QgTm90aWZpY2F0aW9uSHViID0gcmVxdWlyZShcIndhdGNoLWZyYW1ld29ya1wiKS5Ob3RpZmljYXRpb25IdWI7XG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEFsZXJ0Tm90aWZpY2F0aW9uIGV4dGVuZHMgQmFzZU5vdGlmaWNhdGlvbiB7XG4gIHRlbXBsYXRlID0gcmVxdWlyZShcIi4vQWxlcnROb3RpZmljYXRpb24uaGJzXCIpO1xuXG4gIGxlZnRCdXR0b25FdmVudCgpIHtcbiAgICBjb25zb2xlLmxvZyhcIkxFRlRcIik7XG4gICAgTm90aWZpY2F0aW9uSHViLmhpZGUoKTtcbiAgfVxufTtcbiIsInZhciBIYW5kbGViYXJzID0gcmVxdWlyZSgnL2hvbWUvY2lyY2xlY2kvcHJvamVjdC9ub2RlX21vZHVsZXMvaGFuZGxlYmFycy9ydW50aW1lLmpzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IChIYW5kbGViYXJzWydkZWZhdWx0J10gfHwgSGFuZGxlYmFycykudGVtcGxhdGUoe1wiY29tcGlsZXJcIjpbOCxcIj49IDQuMy4wXCJdLFwibWFpblwiOmZ1bmN0aW9uKGNvbnRhaW5lcixkZXB0aDAsaGVscGVycyxwYXJ0aWFscyxkYXRhKSB7XG4gICAgdmFyIGhlbHBlciwgbG9va3VwUHJvcGVydHkgPSBjb250YWluZXIubG9va3VwUHJvcGVydHkgfHwgZnVuY3Rpb24ocGFyZW50LCBwcm9wZXJ0eU5hbWUpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnQsIHByb3BlcnR5TmFtZSkpIHtcbiAgICAgICAgICByZXR1cm4gcGFyZW50W3Byb3BlcnR5TmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH07XG5cbiAgcmV0dXJuIFwiQWxlcnRcXG48ZGl2PlxcbiAgXCJcbiAgICArIGNvbnRhaW5lci5lc2NhcGVFeHByZXNzaW9uKCgoaGVscGVyID0gKGhlbHBlciA9IGxvb2t1cFByb3BlcnR5KGhlbHBlcnMsXCJtZXNzYWdlXCIpIHx8IChkZXB0aDAgIT0gbnVsbCA/IGxvb2t1cFByb3BlcnR5KGRlcHRoMCxcIm1lc3NhZ2VcIikgOiBkZXB0aDApKSAhPSBudWxsID8gaGVscGVyIDogY29udGFpbmVyLmhvb2tzLmhlbHBlck1pc3NpbmcpLCh0eXBlb2YgaGVscGVyID09PSBcImZ1bmN0aW9uXCIgPyBoZWxwZXIuY2FsbChkZXB0aDAgIT0gbnVsbCA/IGRlcHRoMCA6IChjb250YWluZXIubnVsbENvbnRleHQgfHwge30pLHtcIm5hbWVcIjpcIm1lc3NhZ2VcIixcImhhc2hcIjp7fSxcImRhdGFcIjpkYXRhLFwibG9jXCI6e1wic3RhcnRcIjp7XCJsaW5lXCI6MyxcImNvbHVtblwiOjJ9LFwiZW5kXCI6e1wibGluZVwiOjMsXCJjb2x1bW5cIjoxM319fSkgOiBoZWxwZXIpKSlcbiAgICArIFwiXFxuPC9kaXY+XFxuXCI7XG59LFwidXNlRGF0YVwiOnRydWV9KTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file