e,ht._jQueryInterface};var gt=\"NavbarSearch\",pt=\"lte.navbar-search\",mt=n.default.fn[gt],vt='[data-widget=\"navbar-search\"]',_t=\".form-control\",bt=\"navbar-search-open\",yt={resetOnClose:!0,target:\".navbar-search-block\"},Ct=function(){function e(e,t){this._element=e,this._config=n.default.extend({},yt,t)}var t=e.prototype;return t.open=function(){n.default(this._config.target).css(\"display\",\"flex\").hide().fadeIn().addClass(bt),n.default(this._config.target+\" \"+_t).focus()},t.close=function(){n.default(this._config.target).fadeOut().removeClass(bt),this._config.resetOnClose&&n.default(this._config.target+\" \"+_t).val(\"\")},t.toggle=function(){n.default(this._config.target).hasClass(bt)?this.close():this.open()},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(pt),i=n.default.extend({},yt,n.default(this).data());if(a||(a=new e(this,i),n.default(this).data(pt,a)),!/toggle|close|open/.test(t))throw new Error(\"Undefined method \"+t);a[t]()}))},e}();n.default(document).on(\"click\",vt,(function(e){e.preventDefault();var t=n.default(e.currentTarget);\"navbar-search\"!==t.data(\"widget\")&&(t=t.closest(vt)),Ct._jQueryInterface.call(t,\"toggle\")})),n.default.fn[gt]=Ct._jQueryInterface,n.default.fn[gt].Constructor=Ct,n.default.fn[gt].noConflict=function(){return n.default.fn[gt]=mt,Ct._jQueryInterface};var wt=n.default.fn.Toasts,xt=\"topRight\",It=\"topLeft\",Tt=\"bottomRight\",St=\"bottomLeft\",jt={position:xt,fixed:!0,autohide:!1,autoremove:!0,delay:1e3,fade:!0,icon:null,image:null,imageAlt:null,imageHeight:\"25px\",title:null,subtitle:null,close:!0,body:null,class:null},kt=function(){function e(e,t){this._config=t,this._prepareContainer(),n.default(\"body\").trigger(n.default.Event(\"init.lte.toasts\"))}var t=e.prototype;return t.create=function(){var e=n.default('<div class=\"toast\" role=\"alert\" aria-live=\"assertive\" aria-atomic=\"true\"/>');e.data(\"autohide\",this._config.autohide),e.data(\"animation\",this._config.fade),this._config.class&&e.addClass(this._config.class),this._config.delay&&500!=this._config.delay&&e.data(\"delay\",this._config.delay);var t=n.default('<div class=\"toast-header\">');if(null!=this._config.image){var a=n.default(\"<img />\").addClass(\"rounded mr-2\").attr(\"src\",this._config.image).attr(\"alt\",this._config.imageAlt);null!=this._config.imageHeight&&a.height(this._config.imageHeight).width(\"auto\"),t.append(a)}if(null!=this._config.icon&&t.append(n.default(\"<i />\").addClass(\"mr-2\").addClass(this._config.icon)),null!=this._config.title&&t.append(n.default(\"<strong />\").addClass(\"mr-auto\").html(this._config.title)),null!=this._config.subtitle&&t.append(n.default(\"<small />\").html(this._config.subtitle)),1==this._config.close){var i=n.default('<button data-dismiss=\"toast\" />').attr(\"type\",\"button\").addClass(\"ml-2 mb-1 close\").attr(\"aria-label\",\"Close\").append('<span aria-hidden=\"true\">&times;</span>');null==this._config.title&&i.toggleClass(\"ml-2 ml-auto\"),t.append(i)}e.append(t),null!=this._config.body&&e.append(n.default('<div class=\"toast-body\" />').html(this._config.body)),n.default(this._getContainerId()).prepend(e);var o=n.default(\"body\");o.trigger(n.default.Event(\"created.lte.toasts\")),e.toast(\"show\"),this._config.autoremove&&e.on(\"hidden.bs.toast\",(function(){n.default(this).delay(200).remove(),o.trigger(n.default.Event(\"removed.lte.toasts\"))}))},t._getContainerId=function(){return this._config.position==xt?\"#toastsContainerTopRight\":this._config.position==It?\"#toastsContainerTopLeft\":this._config.position==Tt?\"#toastsContainerBottomRight\":this._config.position==St?\"#toastsContainerBottomLeft\":void 0},t._prepareContainer=function(){if(0===n.default(this._getContainerId()).length){var e=n.default(\"<div />\").attr(\"id\",this._getContainerId().replace(\"#\",\"\"));this._config.position==xt?e.addClass(\"toasts-top-right\"):this._config.position==It?e.addClass(\"toasts-top-left\"):this._config.position==Tt?e.addClass(\"toasts-bottom-right\"):this._config.position==St&&e.addClass(\"toasts-bottom-left\"),n.default(\"body\").append(e)}this._config.fixed?n.default(this._getContainerId()).addClass(\"fixed\"):n.default(this._getContainerId()).removeClass(\"fixed\")},e._jQueryInterface=function(t,a){return this.each((function(){var i=n.default.extend({},jt,a),o=new e(n.default(this),i);\"create\"===t&&o[t]()}))},e}();n.default.fn.Toasts=kt._jQueryInterface,n.default.fn.Toasts.Constructor=kt,n.default.fn.Toasts.noConflict=function(){return n.default.fn.Toasts=wt,kt._jQueryInterface};var Qt=\"TodoList\",Ht=\"lte.todolist\",zt=n.default.fn[Qt],Ft=\"done\",Et={onCheck:function(e){return e},onUnCheck:function(e){return e}},Lt=function(){function e(e,t){this._config=t,this._element=e,this._init()}var t=e.prototype;return t.toggle=function(e){e.parents(\"li\").toggleClass(Ft),n.default(e).prop(\"checked\")?this.check(e):this.unCheck(n.default(e))},t.check=function(e){this._config.onCheck.call(e)},t.unCheck=function(e){this._config.onUnCheck.call(e)},t._init=function(){var e=this,t=this._element;t.find(\"input:checkbox:checked\").parents(\"li\").toggleClass(Ft),t.on(\"change\",\"input:checkbox\",(function(t){e.toggle(n.default(t.target))}))},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(Ht);a||(a=n.default(this).data());var i=n.default.extend({},Et,\"object\"==typeof t?t:a),o=new e(n.default(this),i);n.default(this).data(Ht,\"object\"==typeof t?t:a),\"init\"===t&&o[t]()}))},e}();n.default(window).on(\"load\",(function(){Lt._jQueryInterface.call(n.default('[data-widget=\"todo-list\"]'))})),n.default.fn[Qt]=Lt._jQueryInterface,n.default.fn[Qt].Constructor=Lt,n.default.fn[Qt].noConflict=function(){return n.default.fn[Qt]=zt,Lt._jQueryInterface};var Dt=\"Treeview\",Rt=\"lte.treeview\",At=n.default.fn[Dt],Mt=\".nav-item\",qt=\".nav-treeview\",Ot=\".menu-open\",Nt='[data-widget=\"treeview\"]',Pt=\"menu-open\",Ut=\"menu-is-opening\",Bt={trigger:Nt+\" .nav-link\",animationSpeed:300,accordion:!0,expandSidebar:!1,sidebarButtonSelector:'[data-widget=\"pushmenu\"]'},$t=function(){function e(e,t){this._config=t,this._element=e}var t=e.prototype;return t.init=function(){n.default(\".nav-item.menu-open .nav-treeview.menu-open\").css(\"display\",\"block\"),this._setupListeners()},t.expand=function(e,t){var a=this,i=n.default.Event(\"expanded.lte.treeview\");if(this._config.accordion){var o=t.siblings(Ot).first(),l=o.find(qt).first();this.collapse(l,o)}t.addClass(Ut),e.stop().slideDown(this._config.animationSpeed,(function(){t.addClass(Pt),n.default(a._element).trigger(i)})),this._config.expandSidebar&&this._expandSidebar()},t.collapse=function(e,t){var a=this,i=n.default.Event(\"collapsed.lte.treeview\");t.removeClass(\"menu-is-opening menu-open\"),e.stop().slideUp(this._config.animationSpeed,(function(){n.default(a._element).trigger(i),e.find(\".menu-open > .nav-treeview\").slideUp(),e.find(Ot).removeClass(\"menu-is-opening menu-open\")}))},t.toggle=function(e){var t=n.default(e.currentTarget),a=t.parent(),i=a.find(\"> .nav-treeview\");if(i.is(qt)||(a.is(Mt)||(i=a.parent().find(\"> .nav-treeview\")),i.is(qt))){e.preventDefault();var o=t.parents(Mt).first();o.hasClass(Pt)?this.collapse(n.default(i),o):this.expand(n.default(i),o)}},t._setupListeners=function(){var e=this,t=void 0!==this._element.attr(\"id\")?\"#\"+this._element.attr(\"id\"):\"\";n.default(document).on(\"click\",\"\"+t+this._config.trigger,(function(t){e.toggle(t)}))},t._expandSidebar=function(){n.default(\"body\").hasClass(\"sidebar-collapse\")&&n.default(this._config.sidebarButtonSelector).PushMenu(\"expand\")},e._jQueryInterface=function(t){return this.each((function(){var a=n.default(this).data(Rt),i=n.default.extend({},Bt,n.default(this).data());a||(a=new e(n.default(this),i),n.default(this).data(Rt,a)),\"init\"===t&&a[t]()}))},e}();n.default(window).on(\"load.lte.treeview\",(function(){n.default(Nt).each((function(){$t._jQueryInterface.call(n.default(this),\"init\")}))})),n.default.fn[Dt]=$t._jQueryInterface,n.default.fn[Dt].Constructor=$t,n.default.fn[Dt].noConflict=function(){return n.default.fn[Dt]=At,$t._jQueryInterface},e.CardRefresh=f,e.CardWidget=I,e.ControlSidebar=M,e.DirectChat=P,e.Dropdown=V,e.ExpandableTable=te,e.Fullscreen=re,e.IFrame=Qe,e.Layout=Me,e.NavbarSearch=Ct,e.PushMenu=Ke,e.SidebarSearch=ht,e.Toasts=kt,e.TodoList=Lt,e.Treeview=$t,Object.defineProperty(e,\"__esModule\",{value:!0})}));\n//# sourceMappingURL=adminlte.min.js.map//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvYWRtaW4tbHRlL2Rpc3QvanMvYWRtaW5sdGUubWluLmpzP2E4NmYiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsS0FBb0QsV0FBVyxtQkFBTyxDQUFDLG9EQUFRLEdBQUcsU0FBa0osQ0FBQyxxQkFBcUIsYUFBYSxjQUFjLCtDQUErQyxXQUFXLG1IQUFtSCxxQ0FBcUMseVFBQXlRLHdCQUF3QixTQUFTLDhCQUE4QixjQUFjLGdCQUFnQiw2RkFBNkYsZ09BQWdPLGtCQUFrQix5QkFBeUIsV0FBVywySUFBMkksa09BQWtPLHVGQUF1RixxREFBcUQsbURBQW1ELHNEQUFzRCxnREFBZ0QsK0VBQStFLDBCQUEwQixzSEFBc0gsNkJBQTZCLCtIQUErSCxvQkFBb0IsV0FBVyxvRUFBb0UsU0FBUywwQ0FBMEMsZ0NBQWdDLG1EQUFtRCwyQkFBMkIsa0pBQWtKLEdBQUcsR0FBRyw4Q0FBOEMsc0VBQXNFLHlCQUF5Qiw4QkFBOEIseUNBQXlDLEdBQUcsMEdBQTBHLDZDQUE2Qyx1UUFBdVEsNktBQTZLLGNBQWMsZ0JBQWdCLDBIQUEwSCxNQUFNLGtCQUFrQiw2QkFBNkIsV0FBVyxnSEFBZ0gscUNBQXFDLHFRQUFxUSxxQkFBcUIsV0FBVyxrSEFBa0gsd0NBQXdDLGtRQUFrUSxxQkFBcUIscUdBQXFHLHFCQUFxQix1REFBdUQsdUJBQXVCLG9MQUFvTCw4RUFBOEUsK0JBQStCLHNCQUFzQixxRkFBcUYsbUZBQW1GLHVCQUF1QixrUEFBa1AsbURBQW1ELHNCQUFzQiwrQkFBK0Isc0JBQXNCLHlEQUF5RCxpQ0FBaUMsOENBQThDLG1GQUFtRiw2QkFBNkIseURBQXlELHFCQUFxQixXQUFXLHNGQUFzRixXQUFXLDBFQUEwRSxtQkFBbUIsd0VBQXdFLFdBQVcsR0FBRyxnQ0FBZ0MsbURBQW1ELDJCQUEyQixnT0FBZ08sR0FBRyxHQUFHLDhDQUE4Qyx3RUFBd0UsaURBQWlE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RCxnTEFBZ0wsMEhBQTBILGVBQWUsZ0JBQWdCLCtCQUErQixrQkFBa0IseUJBQXlCLHVHQUF1Ryx3QkFBd0Isc0RBQXNELDJCQUEyQixrREFBa0QsbUJBQW1CLDBFQUEwRSxnREFBZ0QscURBQXFELDBCQUEwQix1REFBdUQsb0dBQW9HLG9JQUFvSSxHQUFHLHNCQUFzQiwwRUFBMEUsMEVBQTBFLG1CQUFtQiw0QkFBNEIsMEVBQTBFLDhCQUE4QiwrRUFBK0Usc0VBQXNFLFlBQVksR0FBRyw2QkFBNkIsaUhBQWlILGdDQUFnQyw2QkFBNkIsb0RBQW9ELDRCQUE0Qiw4RUFBOEUsR0FBRyxHQUFHLEdBQUcscURBQXFELCtCQUErQixpREFBaUQsR0FBRywrR0FBK0csK0NBQStDLDZRQUE2USxTQUFTLEVBQUU7QUFDMWo2QyIsImZpbGUiOiIuL25vZGVfbW9kdWxlcy9hZG1pbi1sdGUvZGlzdC9qcy9hZG1pbmx0ZS5taW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIEFkbWluTFRFIHYzLjIuMCAoaHR0cHM6Ly9hZG1pbmx0ZS5pbylcbiAqIENvcHlyaWdodCAyMDE0LTIwMjIgQ29sb3JsaWIgPGh0dHBzOi8vY29sb3JsaWIuY29tPlxuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vQ29sb3JsaWJIUS9BZG1pbkxURS9ibG9iL21hc3Rlci9MSUNFTlNFKVxuICovXG4hZnVuY3Rpb24oZSx0KXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJ1bmRlZmluZWRcIiE9dHlwZW9mIG1vZHVsZT90KGV4cG9ydHMscmVxdWlyZShcImpxdWVyeVwiKSk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShbXCJleHBvcnRzXCIsXCJqcXVlcnlcIl0sdCk6dCgoZT1cInVuZGVmaW5lZFwiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOmV8fHNlbGYpLmFkbWlubHRlPXt9LGUualF1ZXJ5KX0odGhpcywoZnVuY3Rpb24oZSx0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBhKGUpe3JldHVybiBlJiZcIm9iamVjdFwiPT10eXBlb2YgZSYmXCJkZWZhdWx0XCJpbiBlP2U6e2RlZmF1bHQ6ZX19dmFyIG49YSh0KSxpPVwiQ2FyZFJlZnJlc2hcIixvPVwibHRlLmNhcmRyZWZyZXNoXCIsbD1uLmRlZmF1bHQuZm5baV0scz1cImNhcmRcIixyPSdbZGF0YS1jYXJkLXdpZGdldD1cImNhcmQtcmVmcmVzaFwiXScsZD17c291cmNlOlwiXCIsc291cmNlU2VsZWN0b3I6XCJcIixwYXJhbXM6e30sdHJpZ2dlcjpyLGNvbnRlbnQ6XCIuY2FyZC1ib2R5XCIsbG9hZEluQ29udGVudDohMCxsb2FkT25Jbml0OiEwLGxvYWRFcnJvclRlbXBsYXRlOiEwLHJlc3BvbnNlVHlwZTpcIlwiLG92ZXJsYXlUZW1wbGF0ZTonPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj48aSBjbGFzcz1cImZhcyBmYS0yeCBmYS1zeW5jLWFsdCBmYS1zcGluXCI+PC9pPjwvZGl2PicsZXJyb3JUZW1wbGF0ZTonPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPjwvc3Bhbj4nLG9uTG9hZFN0YXJ0OmZ1bmN0aW9uKCl7fSxvbkxvYWREb25lOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvbkxvYWRGYWlsOmZ1bmN0aW9uKGUsdCxhKXt9fSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2lmKHRoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9wYXJlbnQ9ZS5wYXJlbnRzKFwiLmNhcmRcIikuZmlyc3QoKSx0aGlzLl9zZXR0aW5ncz1uLmRlZmF1bHQuZXh0ZW5kKHt9LGQsdCksdGhpcy5fb3ZlcmxheT1uLmRlZmF1bHQodGhpcy5fc2V0dGluZ3Mub3ZlcmxheVRlbXBsYXRlKSxlLmhhc0NsYXNzKHMpJiYodGhpcy5fcGFyZW50PWUpLFwiXCI9PT10aGlzLl9zZXR0aW5ncy5zb3VyY2UpdGhyb3cgbmV3IEVycm9yKFwiU291cmNlIHVybCB3YXMgbm90IGRlZmluZWQuIFBsZWFzZSBzcGVjaWZ5IGEgdXJsIGluIHlvdXIgQ2FyZFJlZnJlc2ggc291cmNlIG9wdGlvbi5cIil9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQubG9hZD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5fYWRkT3ZlcmxheSgpLHRoaXMuX3NldHRpbmdzLm9uTG9hZFN0YXJ0LmNhbGwobi5kZWZhdWx0KHRoaXMpKSxuLmRlZmF1bHQuZ2V0KHRoaXMuX3NldHRpbmdzLnNvdXJjZSx0aGlzLl9zZXR0aW5ncy5wYXJhbXMsKGZ1bmN0aW9uKHQpe2UuX3NldHRpbmdzLmxvYWRJbkNvbnRlbnQmJihcIlwiIT09ZS5fc2V0dGluZ3Muc291cmNlU2VsZWN0b3ImJih0PW4uZGVmYXVsdCh0KS5maW5kKGUuX3NldHRpbmdzLnNvdXJjZVNlbGVjdG9yKS5odG1sKCkpLGUuX3BhcmVudC5maW5kKGUuX3NldHRpbmdzLmNvbnRlbnQpLmh0bWwodCkpLGUuX3NldHRpbmdzLm9uTG9hZERvbmUuY2FsbChuLmRlZmF1bHQoZSksdCksZS5fcmVtb3ZlT3ZlcmxheSgpfSksXCJcIiE9PXRoaXMuX3NldHRpbmdzLnJlc3BvbnNlVHlwZSYmdGhpcy5fc2V0dGluZ3MucmVzcG9uc2VUeXBlKS5mYWlsKChmdW5jdGlvbih0LGEsaSl7aWYoZS5fcmVtb3ZlT3ZlcmxheSgpLGUuX3NldHRpbmdzLmxvYWRFcnJvclRlbXBsYXRlKXt2YXIgbz1uLmRlZmF1bHQoZS5fc2V0dGluZ3MuZXJyb3JUZW1wbGF0ZSkudGV4dChpKTtlLl9wYXJlbnQuZmluZChlLl9zZXR0aW5ncy5jb250ZW50KS5lbXB0eSgpLmFwcGVuZChvKX1lLl9zZXR0aW5ncy5vbkxvYWRGYWlsLmNhbGwobi5kZWZhdWx0KGUpLHQsYSxpKX0pKSxuLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJsb2FkZWQubHRlLmNhcmRyZWZyZXNoXCIpKX0sdC5fYWRkT3ZlcmxheT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudC5hcHBlbmQodGhpcy5fb3ZlcmxheSksbi5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwib3ZlcmxheS5hZGRlZC5sdGUuY2FyZHJlZnJlc2hcIikpfSx0Ll9yZW1vdmVPdmVybGF5PWZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50LmZpbmQodGhpcy5fb3ZlcmxheSkucmVtb3ZlKCksbi5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwib3ZlcmxheS5yZW1vdmVkLmx0ZS5jYXJkcmVmcmVzaFwiKSl9LHQuX2luaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO24uZGVmYXVsdCh0aGlzKS5maW5kKHRoaXMuX3NldHRpbmdzLnRyaWdnZXIpLm9uKFwiY2xpY2tcIiwoZnVuY3Rpb24oKXtlLmxvYWQoKX0pKSx0aGlzLl9zZXR0aW5ncy5sb2FkT25Jbml0JiZ0aGlzLmxvYWQoKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKG8pLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxkLG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShvLFwic3RyaW5nXCI9PXR5cGVvZiB0P2E6dCkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYvbG9hZC8udGVzdCh0KT9hW3RdKCk6YS5faW5pdChuLmRlZmF1bHQodGhpcykpfSxlfSgpO24uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLHIsKGZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxmLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJsb2FkXCIpfSkpLG4uZGVmYXVsdCgoZnVuY3Rpb24oKXtuLmRlZmF1bHQocikuZWFjaCgoZnVuY3Rpb24oKXtmLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcykpfSkpfSkpLG4uZGVmYXVsdC5mbltpXT1mLl9qUXVlcnlJbnRlcmZhY2Usbi5kZWZhdWx0LmZuW2ldLkNvbnN0cnVjdG9yPWYsbi5kZWZhdWx0LmZuW2ldLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW2ldPWwsZi5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgdT1cIkNhcmRXaWRnZXRcIixjPVwibHRlLmNhcmR3aWRnZXRcIixoPW4uZGVmYXVsdC5mblt1XSxnPVwiY2FyZFwiLHA9XCJjb2xsYXBzZWQtY2FyZFwiLG09XCJjb2xsYXBzaW5nLWNhcmRcIix2PVwiZXhwYW5kaW5nLWNhcmRcIixfPVwid2FzLWNvbGxhcHNlZFwiLGI9XCJtYXhpbWl6ZWQtY2FyZFwiLHk9J1tkYXRhLWNhcmQtd2lkZ2V0PVwicmVtb3ZlXCJdJyxDPSdbZGF0YS1jYXJkLXdpZGdldD1cImNvbGxhcHNlXCJdJyx3PSdbZGF0YS1jYXJkLXdpZGdldD1cIm1heGltaXplXCJdJyx4PXthbmltYXRpb25TcGVlZDpcIm5vcm1hbFwiLGNvbGxhcHNlVHJpZ2dlcjpDLHJlbW92ZVRyaWdnZXI6eSxtYXhpbWl6ZVRyaWdnZXI6dyxjb2xsYXBzZUljb246XCJmYS1taW51c1wiLGV4cGFuZEljb246XCJmYS1wbHVzXCIsbWF4aW1pemVJY29uOlwiZmEtZXhwYW5kXCIsbWluaW1pemVJY29uOlwiZmEtY29tcHJlc3NcIn0sST1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fcGFyZW50PWUucGFyZW50cyhcIi5jYXJkXCIpLmZpcnN0KCksZS5oYXNDbGFzcyhnKSYmKHRoaXMuX3BhcmVudD1lKSx0aGlzLl9zZXR0aW5ncz1uLmRlZmF1bHQuZXh0ZW5kKHt9LHgsdCl9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY29sbGFwc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3BhcmVudC5hZGRDbGFzcyhtKS5jaGlsZHJlbihcIi5jYXJkLWJvZHksIC5jYXJkLWZvb3RlclwiKS5zbGlkZVVwKHRoaXMuX3NldHRpbmdzLmFuaW1hdGlvblNwZWVkLChmdW5jdGlvbigpe2UuX3BhcmVudC5hZGRDbGFzcyhwKS5yZW1vdmVDbGFzcyhtKX0pKSx0aGlzLl9wYXJlbnQuZmluZChcIj4gLmNhcmQtaGVhZGVyIFwiK3RoaXMuX3NldHRpbmdzLmNvbGxhcHNlVHJpZ2dlcitcIiAuXCIrdGhpcy5fc2V0dGluZ3MuY29sbGFwc2VJY29uKS5hZGRDbGFzcyh0aGlzLl9zZXR0aW5ncy5leHBhbmRJY29uKS5yZW1vdmVDbGFzcyh0aGlzLl9zZXR0aW5ncy5jb2xsYXBzZUljb24pLHRoaXMuX2VsZW1lbnQudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJjb2xsYXBzZWQubHRlLmNhcmR3aWRnZXRcIiksdGhpcy5fcGFyZW50KX0sdC5leHBhbmQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3BhcmVudC5hZGRDbGFzcyh2KS5jaGlsZHJlbihcIi5jYXJkLWJvZHksIC5jYXJkLWZvb3RlclwiKS5zbGlkZURvd24odGhpcy5fc2V0dGluZ3MuYW5pbWF0aW9uU3BlZWQsKGZ1bmN0aW9uKCl7ZS5fcGFyZW50LnJlbW92ZUNsYXNzKHApLnJlbW92ZUNsYXNzKHYpfSkpLHRoaXMuX3BhcmVudC5maW5kKFwiPiAuY2FyZC1oZWFkZXIgXCIrdGhpcy5fc2V0dGluZ3MuY29sbGFwc2VUcmlnZ2VyK1wiIC5cIit0aGlzLl9zZXR0aW5ncy5leHBhbmRJY29uKS5hZGRDbGFzcyh0aGlzLl9zZXR0aW5ncy5jb2xsYXBzZUljb24pLnJlbW92ZUNsYXNzKHRoaXMuX3NldHRpbmdzLmV4cGFuZEljb24pLHRoaXMuX2VsZW1lbnQudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJleHBhbmRlZC5sdGUuY2FyZHdpZGdldFwiKSx0aGlzLl9wYXJlbnQpfSx0LnJlbW92ZT1mdW5jdGlvbigpe3RoaXMuX3BhcmVudC5zbGlkZVVwKCksdGhpcy5fZWxlbWVudC50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcInJlbW92ZWQubHRlLmNhcmR3aWRnZXRcIiksdGhpcy5fcGFyZW50KX0sdC50b2dnbGU9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnQuaGFzQ2xhc3MocCk/dGhpcy5leHBhbmQoKTp0aGlzLmNvbGxhcHNlKCl9LHQubWF4aW1pemU9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnQuZmluZCh0aGlzLl9zZXR0aW5ncy5tYXhpbWl6ZVRyaWdnZXIrXCIgLlwiK3RoaXMuX3NldHRpbmdzLm1heGltaXplSWNvbikuYWRkQ2xhc3ModGhpcy5fc2V0dGluZ3MubWluaW1pemVJY29uKS5yZW1vdmVDbGFzcyh0aGlzLl9zZXR0aW5ncy5tYXhpbWl6ZUljb24pLHRoaXMuX3BhcmVudC5jc3Moe2hlaWdodDp0aGlzLl9wYXJlbnQuaGVpZ2h0KCksd2lkdGg6dGhpcy5fcGFyZW50LndpZHRoKCksdHJhbnNpdGlvbjpcImFsbCAuMTVzXCJ9KS5kZWxheSgxNTApLnF1ZXVlKChmdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdCh0aGlzKTtlLmFkZENsYXNzKGIpLG4uZGVmYXVsdChcImh0bWxcIikuYWRkQ2xhc3MoYiksZS5oYXNDbGFzcyhwKSYmZS5hZGRDbGFzcyhfKSxlLmRlcXVldWUoKX0pKSx0aGlzLl9lbGVtZW50LnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwibWF4aW1pemVkLmx0ZS5jYXJkd2lkZ2V0XCIpLHRoaXMuX3BhcmVudCl9LHQubWluaW1pemU9ZnVuY3Rpb24oKXt0aGlzLl9wYXJlbnQuZmluZCh0aGlzLl9zZXR0aW5ncy5tYXhpbWl6ZVRyaWdnZXIrXCIgLlwiK3RoaXMuX3NldHRpbmdzLm1pbmltaXplSWNvbikuYWRkQ2xhc3ModGhpcy5fc2V0dGluZ3MubWF4aW1pemVJY29uKS5yZW1vdmVDbGFzcyh0aGlzLl9zZXR0aW5ncy5taW5pbWl6ZUljb24pLHRoaXMuX3BhcmVudC5jc3MoXCJjc3NUZXh0XCIsXCJoZWlnaHQ6IFwiK3RoaXMuX3BhcmVudFswXS5zdHlsZS5oZWlnaHQrXCIgIWltcG9ydGFudDsgd2lkdGg6IFwiK3RoaXMuX3BhcmVudFswXS5zdHlsZS53aWR0aCtcIiAhaW1wb3J0YW50OyB0cmFuc2l0aW9uOiBhbGwgLjE1cztcIikuZGVsYXkoMTApLnF1ZXVlKChmdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdCh0aGlzKTtlLnJlbW92ZUNsYXNzKGIpLG4uZGVmYXVsdChcImh0bWxcIikucmVtb3ZlQ2xhc3MoYiksZS5jc3Moe2hlaWdodDpcImluaGVyaXRcIix3aWR0aDpcImluaGVyaXRcIn0pLGUuaGFzQ2xhc3MoXykmJmUucmVtb3ZlQ2xhc3MoXyksZS5kZXF1ZXVlKCl9KSksdGhpcy5fZWxlbWVudC50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcIm1pbmltaXplZC5sdGUuY2FyZHdpZGdldFwiKSx0aGlzLl9wYXJlbnQpfSx0LnRvZ2dsZU1heGltaXplPWZ1bmN0aW9uKCl7dGhpcy5fcGFyZW50Lmhhc0NsYXNzKGIpP3RoaXMubWluaW1pemUoKTp0aGlzLm1heGltaXplKCl9LHQuX2luaXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9wYXJlbnQ9ZSxuLmRlZmF1bHQodGhpcykuZmluZCh0aGlzLl9zZXR0aW5ncy5jb2xsYXBzZVRyaWdnZXIpLmNsaWNrKChmdW5jdGlvbigpe3QudG9nZ2xlKCl9KSksbi5kZWZhdWx0KHRoaXMpLmZpbmQodGhpcy5fc2V0dGluZ3MubWF4aW1pemVUcmlnZ2VyKS5jbGljaygoZnVuY3Rpb24oKXt0LnRvZ2dsZU1heGltaXplKCl9KSksbi5kZWZhdWx0KHRoaXMpLmZpbmQodGhpcy5fc2V0dGluZ3MucmVtb3ZlVHJpZ2dlcikuY2xpY2soKGZ1bmN0aW9uKCl7dC5yZW1vdmUoKX0pKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKGMpLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSx4LG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShjLFwic3RyaW5nXCI9PXR5cGVvZiB0P2E6dCkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYvY29sbGFwc2V8ZXhwYW5kfHJlbW92ZXx0b2dnbGV8bWF4aW1pemV8bWluaW1pemV8dG9nZ2xlTWF4aW1pemUvLnRlc3QodCk/YVt0XSgpOlwib2JqZWN0XCI9PXR5cGVvZiB0JiZhLl9pbml0KG4uZGVmYXVsdCh0aGlzKSl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsQywoZnVuY3Rpb24oZSl7ZSYmZS5wcmV2ZW50RGVmYXVsdCgpLEkuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIix5LChmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksSS5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KHRoaXMpLFwicmVtb3ZlXCIpfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLHcsKGZ1bmN0aW9uKGUpe2UmJmUucHJldmVudERlZmF1bHQoKSxJLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJ0b2dnbGVNYXhpbWl6ZVwiKX0pKSxuLmRlZmF1bHQuZm5bdV09SS5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mblt1XS5Db25zdHJ1Y3Rvcj1JLG4uZGVmYXVsdC5mblt1XS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mblt1XT1oLEkuX2pRdWVyeUludGVyZmFjZX07dmFyIFQ9XCJDb250cm9sU2lkZWJhclwiLFM9XCJsdGUuY29udHJvbHNpZGViYXJcIixqPW4uZGVmYXVsdC5mbltUXSxrPVwiLmNvbnRyb2wtc2lkZWJhclwiLFE9XCIuY29udHJvbC1zaWRlYmFyLWNvbnRlbnRcIixIPSdbZGF0YS13aWRnZXQ9XCJjb250cm9sLXNpZGViYXJcIl0nLHo9XCIubWFpbi1oZWFkZXJcIixGPVwiLm1haW4tZm9vdGVyXCIsRT1cImNvbnRyb2wtc2lkZWJhci1hbmltYXRlXCIsTD1cImNvbnRyb2wtc2lkZWJhci1vcGVuXCIsRD1cImNvbnRyb2wtc2lkZWJhci1zbGlkZS1vcGVuXCIsUj1cImxheW91dC1maXhlZFwiLEE9e2NvbnRyb2xzaWRlYmFyU2xpZGU6ITAsc2Nyb2xsYmFyVGhlbWU6XCJvcy10aGVtZS1saWdodFwiLHNjcm9sbGJhckF1dG9IaWRlOlwibFwiLHRhcmdldDprLGFuaW1hdGlvblNwZWVkOjMwMH0sTT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9lbGVtZW50PWUsdGhpcy5fY29uZmlnPXR9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuY29sbGFwc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9bi5kZWZhdWx0KFwiYm9keVwiKSxhPW4uZGVmYXVsdChcImh0bWxcIik7dGhpcy5fY29uZmlnLmNvbnRyb2xzaWRlYmFyU2xpZGU/KGEuYWRkQ2xhc3MoRSksdC5yZW1vdmVDbGFzcyhEKS5kZWxheSgzMDApLnF1ZXVlKChmdW5jdGlvbigpe24uZGVmYXVsdChrKS5oaWRlKCksYS5yZW1vdmVDbGFzcyhFKSxuLmRlZmF1bHQodGhpcykuZGVxdWV1ZSgpfSkpKTp0LnJlbW92ZUNsYXNzKEwpLG4uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcImNvbGxhcHNlZC5sdGUuY29udHJvbHNpZGViYXJcIikpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KGUuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwiY29sbGFwc2VkLWRvbmUubHRlLmNvbnRyb2xzaWRlYmFyXCIpKX0pLHRoaXMuX2NvbmZpZy5hbmltYXRpb25TcGVlZCl9LHQuc2hvdz1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT0hMSk7dmFyIHQ9bi5kZWZhdWx0KFwiYm9keVwiKSxhPW4uZGVmYXVsdChcImh0bWxcIik7ZSYmbi5kZWZhdWx0KGspLmhpZGUoKSx0aGlzLl9jb25maWcuY29udHJvbHNpZGViYXJTbGlkZT8oYS5hZGRDbGFzcyhFKSxuLmRlZmF1bHQodGhpcy5fY29uZmlnLnRhcmdldCkuc2hvdygpLmRlbGF5KDEwKS5xdWV1ZSgoZnVuY3Rpb24oKXt0LmFkZENsYXNzKEQpLmRlbGF5KDMwMCkucXVldWUoKGZ1bmN0aW9uKCl7YS5yZW1vdmVDbGFzcyhFKSxuLmRlZmF1bHQodGhpcykuZGVxdWV1ZSgpfSkpLG4uZGVmYXVsdCh0aGlzKS5kZXF1ZXVlKCl9KSkpOnQuYWRkQ2xhc3MoTCksdGhpcy5fZml4SGVpZ2h0KCksdGhpcy5fZml4U2Nyb2xsSGVpZ2h0KCksbi5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwiZXhwYW5kZWQubHRlLmNvbnRyb2xzaWRlYmFyXCIpKX0sdC50b2dnbGU9ZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoXCJib2R5XCIpLHQ9dGhpcy5fY29uZmlnLnRhcmdldCxhPSFuLmRlZmF1bHQodCkuaXMoXCI6dmlzaWJsZVwiKSxpPWUuaGFzQ2xhc3MoTCl8fGUuaGFzQ2xhc3MoRCksbz1hJiYoZS5oYXNDbGFzcyhMKXx8ZS5oYXNDbGFzcyhEKSk7YXx8bz90aGlzLnNob3coYSk6aSYmdGhpcy5jb2xsYXBzZSgpfSx0Ll9pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW4uZGVmYXVsdChcImJvZHlcIik7dC5oYXNDbGFzcyhMKXx8dC5oYXNDbGFzcyhEKT8obi5kZWZhdWx0KGspLm5vdCh0aGlzLl9jb25maWcudGFyZ2V0KS5oaWRlKCksbi5kZWZhdWx0KHRoaXMuX2NvbmZpZy50YXJnZXQpLmNzcyhcImRpc3BsYXlcIixcImJsb2NrXCIpKTpuLmRlZmF1bHQoaykuaGlkZSgpLHRoaXMuX2ZpeEhlaWdodCgpLHRoaXMuX2ZpeFNjcm9sbEhlaWdodCgpLG4uZGVmYXVsdCh3aW5kb3cpLnJlc2l6ZSgoZnVuY3Rpb24oKXtlLl9maXhIZWlnaHQoKSxlLl9maXhTY3JvbGxIZWlnaHQoKX0pKSxuLmRlZmF1bHQod2luZG93KS5zY3JvbGwoKGZ1bmN0aW9uKCl7dmFyIHQ9bi5kZWZhdWx0KFwiYm9keVwiKTsodC5oYXNDbGFzcyhMKXx8dC5oYXNDbGFzcyhEKSkmJmUuX2ZpeFNjcm9sbEhlaWdodCgpfSkpfSx0Ll9pc05hdmJhckZpeGVkPWZ1bmN0aW9uKCl7dmFyIGU9bi5kZWZhdWx0KFwiYm9keVwiKTtyZXR1cm4gZS5oYXNDbGFzcyhcImxheW91dC1uYXZiYXItZml4ZWRcIil8fGUuaGFzQ2xhc3MoXCJsYXlvdXQtc20tbmF2YmFyLWZpeGVkXCIpfHxlLmhhc0NsYXNzKFwibGF5b3V0LW1kLW5hdmJhci1maXhlZFwiKXx8ZS5oYXNDbGFzcyhcImxheW91dC1sZy1uYXZiYXItZml4ZWRcIil8fGUuaGFzQ2xhc3MoXCJsYXlvdXQteGwtbmF2YmFyLWZpeGVkXCIpfSx0Ll9pc0Zvb3RlckZpeGVkPWZ1bmN0aW9uKCl7dmFyIGU9bi5kZWZhdWx0KFwiYm9keVwiKTtyZXR1cm4gZS5oYXNDbGFzcyhcImxheW91dC1mb290ZXItZml4ZWRcIil8fGUuaGFzQ2xhc3MoXCJsYXlvdXQtc20tZm9vdGVyLWZpeGVkXCIpfHxlLmhhc0NsYXNzKFwibGF5b3V0LW1kLWZvb3Rlci1maXhlZFwiKXx8ZS5oYXNDbGFzcyhcImxheW91dC1sZy1mb290ZXItZml4ZWRcIil8fGUuaGFzQ2xhc3MoXCJsYXlvdXQteGwtZm9vdGVyLWZpeGVkXCIpfSx0Ll9maXhTY3JvbGxIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoXCJib2R5XCIpLHQ9bi5kZWZhdWx0KHRoaXMuX2NvbmZpZy50YXJnZXQpO2lmKGUuaGFzQ2xhc3MoUikpe3ZhciBhPXtzY3JvbGw6bi5kZWZhdWx0KGRvY3VtZW50KS5oZWlnaHQoKSx3aW5kb3c6bi5kZWZhdWx0KHdpbmRvdykuaGVpZ2h0KCksaGVhZGVyOm4uZGVmYXVsdCh6KS5vdXRlckhlaWdodCgpLGZvb3RlcjpuLmRlZmF1bHQoRikub3V0ZXJIZWlnaHQoKX0saT1NYXRoLmFicyhhLndpbmRvdytuLmRlZmF1bHQod2luZG93KS5zY3JvbGxUb3AoKS1hLnNjcm9sbCksbz1uLmRlZmF1bHQod2luZG93KS5zY3JvbGxUb3AoKSxsPXRoaXMuX2lzTmF2YmFyRml4ZWQoKSYmXCJmaXhlZFwiPT09bi5kZWZhdWx0KHopLmNzcyhcInBvc2l0aW9uXCIpLHM9dGhpcy5faXNGb290ZXJGaXhlZCgpJiZcImZpeGVkXCI9PT1uLmRlZmF1bHQoRikuY3NzKFwicG9zaXRpb25cIikscj1uLmRlZmF1bHQodGhpcy5fY29uZmlnLnRhcmdldCtcIiwgXCIrdGhpcy5fY29uZmlnLnRhcmdldCtcIiBcIitRKTtpZigwPT09byYmMD09PWkpdC5jc3Moe2JvdHRvbTphLmZvb3Rlcix0b3A6YS5oZWFkZXJ9KSxyLmNzcyhcImhlaWdodFwiLGEud2luZG93LShhLmhlYWRlcithLmZvb3RlcikpO2Vsc2UgaWYoaTw9YS5mb290ZXIpaWYoITE9PT1zKXt2YXIgZD1hLmhlYWRlci1vO3QuY3NzKFwiYm90dG9tXCIsYS5mb290ZXItaSkuY3NzKFwidG9wXCIsZD49MD9kOjApLHIuY3NzKFwiaGVpZ2h0XCIsYS53aW5kb3ctKGEuZm9vdGVyLWkpKX1lbHNlIHQuY3NzKFwiYm90dG9tXCIsYS5mb290ZXIpO2Vsc2Ugbzw9YS5oZWFkZXI/ITE9PT1sPyh0LmNzcyhcInRvcFwiLGEuaGVhZGVyLW8pLHIuY3NzKFwiaGVpZ2h0XCIsYS53aW5kb3ctKGEuaGVhZGVyLW8pKSk6dC5jc3MoXCJ0b3BcIixhLmhlYWRlcik6ITE9PT1sPyh0LmNzcyhcInRvcFwiLDApLHIuY3NzKFwiaGVpZ2h0XCIsYS53aW5kb3cpKTp0LmNzcyhcInRvcFwiLGEuaGVhZGVyKTtzJiZsPyhyLmNzcyhcImhlaWdodFwiLFwiMTAwJVwiKSx0LmNzcyhcImhlaWdodFwiLFwiXCIpKTooc3x8bCkmJihyLmNzcyhcImhlaWdodFwiLFwiMTAwJVwiKSxyLmNzcyhcImhlaWdodFwiLFwiXCIpKX19LHQuX2ZpeEhlaWdodD1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIiksdD1uLmRlZmF1bHQodGhpcy5fY29uZmlnLnRhcmdldCtcIiBcIitRKTtpZihlLmhhc0NsYXNzKFIpKXt2YXIgYT1uLmRlZmF1bHQod2luZG93KS5oZWlnaHQoKSxpPW4uZGVmYXVsdCh6KS5vdXRlckhlaWdodCgpLG89bi5kZWZhdWx0KEYpLm91dGVySGVpZ2h0KCksbD1hLWk7dGhpcy5faXNGb290ZXJGaXhlZCgpJiZcImZpeGVkXCI9PT1uLmRlZmF1bHQoRikuY3NzKFwicG9zaXRpb25cIikmJihsPWEtaS1vKSx0LmNzcyhcImhlaWdodFwiLGwpLFwidW5kZWZpbmVkXCIhPXR5cGVvZiBuLmRlZmF1bHQuZm4ub3ZlcmxheVNjcm9sbGJhcnMmJnQub3ZlcmxheVNjcm9sbGJhcnMoe2NsYXNzTmFtZTp0aGlzLl9jb25maWcuc2Nyb2xsYmFyVGhlbWUsc2l6ZUF1dG9DYXBhYmxlOiEwLHNjcm9sbGJhcnM6e2F1dG9IaWRlOnRoaXMuX2NvbmZpZy5zY3JvbGxiYXJBdXRvSGlkZSxjbGlja1Njcm9sbGluZzohMH19KX1lbHNlIHQuYXR0cihcInN0eWxlXCIsXCJcIil9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKFMpLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxBLG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2lmKGF8fChhPW5ldyBlKHRoaXMsaSksbi5kZWZhdWx0KHRoaXMpLmRhdGEoUyxhKSksXCJ1bmRlZmluZWRcIj09PWFbdF0pdGhyb3cgbmV3IEVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb25cIik7YVt0XSgpfSkpfSxlfSgpO24uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLEgsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxNLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJ0b2dnbGVcIil9KSksbi5kZWZhdWx0KGRvY3VtZW50KS5yZWFkeSgoZnVuY3Rpb24oKXtNLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQoSCksXCJfaW5pdFwiKX0pKSxuLmRlZmF1bHQuZm5bVF09TS5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mbltUXS5Db25zdHJ1Y3Rvcj1NLG4uZGVmYXVsdC5mbltUXS5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mbltUXT1qLE0uX2pRdWVyeUludGVyZmFjZX07dmFyIHE9XCJEaXJlY3RDaGF0XCIsTz1cImx0ZS5kaXJlY3RjaGF0XCIsTj1uLmRlZmF1bHQuZm5bcV0sUD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fZWxlbWVudD1lfXJldHVybiBlLnByb3RvdHlwZS50b2dnbGU9ZnVuY3Rpb24oKXtuLmRlZmF1bHQodGhpcy5fZWxlbWVudCkucGFyZW50cyhcIi5kaXJlY3QtY2hhdFwiKS5maXJzdCgpLnRvZ2dsZUNsYXNzKFwiZGlyZWN0LWNoYXQtY29udGFjdHMtb3BlblwiKSxuLmRlZmF1bHQodGhpcy5fZWxlbWVudCkudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJ0b2dnbGVkLmx0ZS5kaXJlY3RjaGF0XCIpKX0sZS5falF1ZXJ5SW50ZXJmYWNlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVhY2goKGZ1bmN0aW9uKCl7dmFyIGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoTyk7YXx8KGE9bmV3IGUobi5kZWZhdWx0KHRoaXMpKSxuLmRlZmF1bHQodGhpcykuZGF0YShPLGEpKSxhW3RdKCl9KSl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsJ1tkYXRhLXdpZGdldD1cImNoYXQtcGFuZS10b2dnbGVcIl0nLChmdW5jdGlvbihlKXtlJiZlLnByZXZlbnREZWZhdWx0KCksUC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KHRoaXMpLFwidG9nZ2xlXCIpfSkpLG4uZGVmYXVsdC5mbltxXT1QLl9qUXVlcnlJbnRlcmZhY2Usbi5kZWZhdWx0LmZuW3FdLkNvbnN0cnVjdG9yPVAsbi5kZWZhdWx0LmZuW3FdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW3FdPU4sUC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgVT1cIkRyb3Bkb3duXCIsQj1cImx0ZS5kcm9wZG93blwiLCQ9bi5kZWZhdWx0LmZuW1VdLEo9XCIuZHJvcGRvd24tbWVudVwiLFc9e30sVj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLl9jb25maWc9dCx0aGlzLl9lbGVtZW50PWV9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQudG9nZ2xlU3VibWVudT1mdW5jdGlvbigpe3RoaXMuX2VsZW1lbnQuc2libGluZ3MoKS5zaG93KCkudG9nZ2xlQ2xhc3MoXCJzaG93XCIpLHRoaXMuX2VsZW1lbnQubmV4dCgpLmhhc0NsYXNzKFwic2hvd1wiKXx8dGhpcy5fZWxlbWVudC5wYXJlbnRzKEopLmZpcnN0KCkuZmluZChcIi5zaG93XCIpLnJlbW92ZUNsYXNzKFwic2hvd1wiKS5oaWRlKCksdGhpcy5fZWxlbWVudC5wYXJlbnRzKFwibGkubmF2LWl0ZW0uZHJvcGRvd24uc2hvd1wiKS5vbihcImhpZGRlbi5icy5kcm9wZG93blwiLChmdW5jdGlvbigpe24uZGVmYXVsdChcIi5kcm9wZG93bi1zdWJtZW51IC5zaG93XCIpLnJlbW92ZUNsYXNzKFwic2hvd1wiKS5oaWRlKCl9KSl9LHQuZml4UG9zaXRpb249ZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoXCIuZHJvcGRvd24tbWVudS5zaG93XCIpO2lmKDAhPT1lLmxlbmd0aCl7ZS5oYXNDbGFzcyhcImRyb3Bkb3duLW1lbnUtcmlnaHRcIik/ZS5jc3Moe2xlZnQ6XCJpbmhlcml0XCIscmlnaHQ6MH0pOmUuY3NzKHtsZWZ0OjAscmlnaHQ6XCJpbmhlcml0XCJ9KTt2YXIgdD1lLm9mZnNldCgpLGE9ZS53aWR0aCgpLGk9bi5kZWZhdWx0KHdpbmRvdykud2lkdGgoKS10LmxlZnQ7dC5sZWZ0PDA/ZS5jc3Moe2xlZnQ6XCJpbmhlcml0XCIscmlnaHQ6dC5sZWZ0LTV9KTppPGEmJmUuY3NzKHtsZWZ0OlwiaW5oZXJpdFwiLHJpZ2h0OjB9KX19LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKEIpLGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxXLG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShCLGEpKSxcInRvZ2dsZVN1Ym1lbnVcIiE9PXQmJlwiZml4UG9zaXRpb25cIiE9PXR8fGFbdF0oKX0pKX0sZX0oKTtuLmRlZmF1bHQoJy5kcm9wZG93bi1tZW51IFtkYXRhLXRvZ2dsZT1cImRyb3Bkb3duXCJdJykub24oXCJjbGlja1wiLChmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCksZS5zdG9wUHJvcGFnYXRpb24oKSxWLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJ0b2dnbGVTdWJtZW51XCIpfSkpLG4uZGVmYXVsdCgnLm5hdmJhciBbZGF0YS10b2dnbGU9XCJkcm9wZG93blwiXScpLm9uKFwiY2xpY2tcIiwoZnVuY3Rpb24oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpLG4uZGVmYXVsdChlLnRhcmdldCkucGFyZW50KCkuaGFzQ2xhc3MoXCJkcm9wZG93bi1zdWJtZW51XCIpfHxzZXRUaW1lb3V0KChmdW5jdGlvbigpe1YuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcImZpeFBvc2l0aW9uXCIpfSksMSl9KSksbi5kZWZhdWx0LmZuW1VdPVYuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bVV0uQ29uc3RydWN0b3I9VixuLmRlZmF1bHQuZm5bVV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm5bVV09JCxWLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBHPVwiRXhwYW5kYWJsZVRhYmxlXCIsSz1cImx0ZS5leHBhbmRhYmxlVGFibGVcIixYPW4uZGVmYXVsdC5mbltHXSxZPVwiLmV4cGFuZGFibGUtYm9keVwiLFo9J1tkYXRhLXdpZGdldD1cImV4cGFuZGFibGUtdGFibGVcIl0nLGVlPVwiYXJpYS1leHBhbmRlZFwiLHRlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX29wdGlvbnM9dCx0aGlzLl9lbGVtZW50PWV9dmFyIHQ9ZS5wcm90b3R5cGU7cmV0dXJuIHQuaW5pdD1mdW5jdGlvbigpe24uZGVmYXVsdChaKS5lYWNoKChmdW5jdGlvbihlLHQpe3ZhciBhPW4uZGVmYXVsdCh0KS5hdHRyKGVlKSxpPW4uZGVmYXVsdCh0KS5uZXh0KFkpLmNoaWxkcmVuKCkuZmlyc3QoKS5jaGlsZHJlbigpO1widHJ1ZVwiPT09YT9pLnNob3coKTpcImZhbHNlXCI9PT1hJiYoaS5oaWRlKCksaS5wYXJlbnQoKS5wYXJlbnQoKS5hZGRDbGFzcyhcImQtbm9uZVwiKSl9KSl9LHQudG9nZ2xlUm93PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZWxlbWVudDtcIlRSXCIhPT1lWzBdLm5vZGVOYW1lJiZcIlRSXCIhPT0oZT1lLnBhcmVudCgpKVswXS5ub2RlTmFtZSYmKGU9ZS5wYXJlbnQoKSk7dmFyIHQ9ZS5hdHRyKGVlKSxhPWUubmV4dChZKS5jaGlsZHJlbigpLmZpcnN0KCkuY2hpbGRyZW4oKTthLnN0b3AoKSxcInRydWVcIj09PXQ/KGEuc2xpZGVVcCg1MDAsKGZ1bmN0aW9uKCl7ZS5uZXh0KFkpLmFkZENsYXNzKFwiZC1ub25lXCIpfSkpLGUuYXR0cihlZSxcImZhbHNlXCIpLGUudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJjb2xsYXBzZWQubHRlLmV4cGFuZGFibGVUYWJsZVwiKSkpOlwiZmFsc2VcIj09PXQmJihlLm5leHQoWSkucmVtb3ZlQ2xhc3MoXCJkLW5vbmVcIiksYS5zbGlkZURvd24oNTAwKSxlLmF0dHIoZWUsXCJ0cnVlXCIpLGUudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJleHBhbmRlZC5sdGUuZXhwYW5kYWJsZVRhYmxlXCIpKSl9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKEspO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSksbi5kZWZhdWx0KHRoaXMpLmRhdGEoSyxhKSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJi9pbml0fHRvZ2dsZVJvdy8udGVzdCh0KSYmYVt0XSgpfSkpfSxlfSgpO24uZGVmYXVsdChcIi5leHBhbmRhYmxlLXRhYmxlXCIpLnJlYWR5KChmdW5jdGlvbigpe3RlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodGhpcyksXCJpbml0XCIpfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLFosKGZ1bmN0aW9uKCl7dGUuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVJvd1wiKX0pKSxuLmRlZmF1bHQuZm5bR109dGUuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bR10uQ29uc3RydWN0b3I9dGUsbi5kZWZhdWx0LmZuW0ddLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW0ddPVgsdGUuX2pRdWVyeUludGVyZmFjZX07dmFyIGFlPVwiRnVsbHNjcmVlblwiLG5lPVwibHRlLmZ1bGxzY3JlZW5cIixpZT1uLmRlZmF1bHQuZm5bYWVdLG9lPSdbZGF0YS13aWRnZXQ9XCJmdWxsc2NyZWVuXCJdJyxsZT1vZStcIiBpXCIsc2U9e21pbmltaXplSWNvbjpcImZhLWNvbXByZXNzLWFycm93cy1hbHRcIixtYXhpbWl6ZUljb246XCJmYS1leHBhbmQtYXJyb3dzLWFsdFwifSxyZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmVsZW1lbnQ9ZSx0aGlzLm9wdGlvbnM9bi5kZWZhdWx0LmV4dGVuZCh7fSxzZSx0KX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC50b2dnbGU9ZnVuY3Rpb24oKXtkb2N1bWVudC5mdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubW96RnVsbFNjcmVlbkVsZW1lbnR8fGRvY3VtZW50LndlYmtpdEZ1bGxzY3JlZW5FbGVtZW50fHxkb2N1bWVudC5tc0Z1bGxzY3JlZW5FbGVtZW50P3RoaXMud2luZG93ZWQoKTp0aGlzLmZ1bGxzY3JlZW4oKX0sdC50b2dnbGVJY29uPWZ1bmN0aW9uKCl7ZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnR8fGRvY3VtZW50Lm1vekZ1bGxTY3JlZW5FbGVtZW50fHxkb2N1bWVudC53ZWJraXRGdWxsc2NyZWVuRWxlbWVudHx8ZG9jdW1lbnQubXNGdWxsc2NyZWVuRWxlbWVudD9uLmRlZmF1bHQobGUpLnJlbW92ZUNsYXNzKHRoaXMub3B0aW9ucy5tYXhpbWl6ZUljb24pLmFkZENsYXNzKHRoaXMub3B0aW9ucy5taW5pbWl6ZUljb24pOm4uZGVmYXVsdChsZSkucmVtb3ZlQ2xhc3ModGhpcy5vcHRpb25zLm1pbmltaXplSWNvbikuYWRkQ2xhc3ModGhpcy5vcHRpb25zLm1heGltaXplSWNvbil9LHQuZnVsbHNjcmVlbj1mdW5jdGlvbigpe2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5yZXF1ZXN0RnVsbHNjcmVlbj9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQucmVxdWVzdEZ1bGxzY3JlZW4oKTpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQud2Via2l0UmVxdWVzdEZ1bGxzY3JlZW4/ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuKCk6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm1zUmVxdWVzdEZ1bGxzY3JlZW4mJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5tc1JlcXVlc3RGdWxsc2NyZWVuKCl9LHQud2luZG93ZWQ9ZnVuY3Rpb24oKXtkb2N1bWVudC5leGl0RnVsbHNjcmVlbj9kb2N1bWVudC5leGl0RnVsbHNjcmVlbigpOmRvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuP2RvY3VtZW50LndlYmtpdEV4aXRGdWxsc2NyZWVuKCk6ZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbiYmZG9jdW1lbnQubXNFeGl0RnVsbHNjcmVlbigpfSxlLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7dmFyIGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEobmUpO2F8fChhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO3ZhciBpPW4uZGVmYXVsdC5leHRlbmQoe30sc2UsXCJvYmplY3RcIj09dHlwZW9mIHQ/dDphKSxvPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKTtuLmRlZmF1bHQodGhpcykuZGF0YShuZSxcIm9iamVjdFwiPT10eXBlb2YgdD90OmEpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYvdG9nZ2xlfHRvZ2dsZUljb258ZnVsbHNjcmVlbnx3aW5kb3dlZC8udGVzdCh0KT9vW3RdKCk6by5pbml0KCl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsb2UsKGZ1bmN0aW9uKCl7cmUuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh0aGlzKSxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwid2Via2l0ZnVsbHNjcmVlbmNoYW5nZSBtb3pmdWxsc2NyZWVuY2hhbmdlIGZ1bGxzY3JlZW5jaGFuZ2UgTVNGdWxsc2NyZWVuQ2hhbmdlXCIsKGZ1bmN0aW9uKCl7cmUuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdChvZSksXCJ0b2dnbGVJY29uXCIpfSkpLG4uZGVmYXVsdC5mblthZV09cmUuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bYWVdLkNvbnN0cnVjdG9yPXJlLG4uZGVmYXVsdC5mblthZV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm5bYWVdPWllLHJlLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBkZT1cImx0ZS5pZnJhbWVcIixmZT1uLmRlZmF1bHQuZm4uSUZyYW1lLHVlPSdbZGF0YS13aWRnZXQ9XCJpZnJhbWVcIl0nLGNlPSdbZGF0YS13aWRnZXQ9XCJpZnJhbWUtZnVsbHNjcmVlblwiXScsaGU9XCIuY29udGVudC13cmFwcGVyXCIsZ2U9XCIuY29udGVudC13cmFwcGVyIGlmcmFtZVwiLHBlPVwiLmNvbnRlbnQtd3JhcHBlci5pZnJhbWUtbW9kZSAubmF2XCIsbWU9XCIuY29udGVudC13cmFwcGVyLmlmcmFtZS1tb2RlIC5uYXZiYXItbmF2XCIsdmU9bWUrXCIgLm5hdi1pdGVtXCIsX2U9bWUrXCIgLm5hdi1saW5rXCIsYmU9XCIuY29udGVudC13cmFwcGVyLmlmcmFtZS1tb2RlIC50YWItY29udGVudFwiLHllPWJlK1wiIC50YWItZW1wdHlcIixDZT1iZStcIiAudGFiLWxvYWRpbmdcIix3ZT1iZStcIiAudGFiLXBhbmVcIix4ZT1cIi5tYWluLXNpZGViYXIgLm5hdi1pdGVtID4gYS5uYXYtbGlua1wiLEllPVwiLm1haW4taGVhZGVyIC5uYXYtaXRlbSBhLm5hdi1saW5rXCIsVGU9XCIubWFpbi1oZWFkZXIgYS5kcm9wZG93bi1pdGVtXCIsU2U9XCJpZnJhbWUtbW9kZVwiLGplPVwiaWZyYW1lLW1vZGUtZnVsbHNjcmVlblwiLGtlPXtvblRhYkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiBlfSxvblRhYkNoYW5nZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LG9uVGFiQ3JlYXRlZDpmdW5jdGlvbihlKXtyZXR1cm4gZX0sYXV0b0lmcmFtZU1vZGU6ITAsYXV0b0l0ZW1BY3RpdmU6ITAsYXV0b1Nob3dOZXdUYWI6ITAsYXV0b0RhcmtNb2RlOiExLGFsbG93RHVwbGljYXRlczohMSxhbGxvd1JlbG9hZDohMCxsb2FkaW5nU2NyZWVuOiEwLHVzZU5hdmJhckl0ZW1zOiEwLHNjcm9sbE9mZnNldDo0MCxzY3JvbGxCZWhhdmlvclN3YXA6ITEsaWNvbk1heGltaXplOlwiZmEtZXhwYW5kXCIsaWNvbk1pbmltaXplOlwiZmEtY29tcHJlc3NcIn0sUWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5fY29uZmlnPXQsdGhpcy5fZWxlbWVudD1lLHRoaXMuX2luaXQoKX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5vblRhYkNsaWNrPWZ1bmN0aW9uKGUpe3RoaXMuX2NvbmZpZy5vblRhYkNsaWNrKGUpfSx0Lm9uVGFiQ2hhbmdlZD1mdW5jdGlvbihlKXt0aGlzLl9jb25maWcub25UYWJDaGFuZ2VkKGUpfSx0Lm9uVGFiQ3JlYXRlZD1mdW5jdGlvbihlKXt0aGlzLl9jb25maWcub25UYWJDcmVhdGVkKGUpfSx0LmNyZWF0ZVRhYj1mdW5jdGlvbihlLHQsYSxpKXt2YXIgbz10aGlzLGw9XCJwYW5lbC1cIithLHM9XCJ0YWItXCIrYTt0aGlzLl9jb25maWcuYWxsb3dEdXBsaWNhdGVzJiYobCs9XCItXCIrTWF0aC5mbG9vcigxZTMqTWF0aC5yYW5kb20oKSkscys9XCItXCIrTWF0aC5mbG9vcigxZTMqTWF0aC5yYW5kb20oKSkpO3ZhciByPSc8bGkgY2xhc3M9XCJuYXYtaXRlbVwiIHJvbGU9XCJwcmVzZW50YXRpb25cIj48YSBocmVmPVwiI1wiIGNsYXNzPVwiYnRuLWlmcmFtZS1jbG9zZVwiIGRhdGEtd2lkZ2V0PVwiaWZyYW1lLWNsb3NlXCIgZGF0YS10eXBlPVwib25seS10aGlzXCI+PGkgY2xhc3M9XCJmYXMgZmEtdGltZXNcIj48L2k+PC9hPjxhIGNsYXNzPVwibmF2LWxpbmtcIiBkYXRhLXRvZ2dsZT1cInJvd1wiIGlkPVwiJytzKydcIiBocmVmPVwiIycrbCsnXCIgcm9sZT1cInRhYlwiIGFyaWEtY29udHJvbHM9XCInK2wrJ1wiIGFyaWEtc2VsZWN0ZWQ9XCJmYWxzZVwiPicrZStcIjwvYT48L2xpPlwiO24uZGVmYXVsdChtZSkuYXBwZW5kKHVuZXNjYXBlKGVzY2FwZShyKSkpO3ZhciBkPSc8ZGl2IGNsYXNzPVwidGFiLXBhbmUgZmFkZVwiIGlkPVwiJytsKydcIiByb2xlPVwidGFicGFuZWxcIiBhcmlhLWxhYmVsbGVkYnk9XCInK3MrJ1wiPjxpZnJhbWUgc3JjPVwiJyt0KydcIj48L2lmcmFtZT48L2Rpdj4nO2lmKG4uZGVmYXVsdChiZSkuYXBwZW5kKHVuZXNjYXBlKGVzY2FwZShkKSkpLGkpaWYodGhpcy5fY29uZmlnLmxvYWRpbmdTY3JlZW4pe3ZhciBmPW4uZGVmYXVsdChDZSk7Zi5mYWRlSW4oKSxuLmRlZmF1bHQobCtcIiBpZnJhbWVcIikucmVhZHkoKGZ1bmN0aW9uKCl7XCJudW1iZXJcIj09dHlwZW9mIG8uX2NvbmZpZy5sb2FkaW5nU2NyZWVuPyhvLnN3aXRjaFRhYihcIiNcIitzKSxzZXRUaW1lb3V0KChmdW5jdGlvbigpe2YuZmFkZU91dCgpfSksby5fY29uZmlnLmxvYWRpbmdTY3JlZW4pKTooby5zd2l0Y2hUYWIoXCIjXCIrcyksZi5mYWRlT3V0KCkpfSkpfWVsc2UgdGhpcy5zd2l0Y2hUYWIoXCIjXCIrcyk7dGhpcy5vblRhYkNyZWF0ZWQobi5kZWZhdWx0KFwiI1wiK3MpKX0sdC5vcGVuVGFiU2lkZWJhcj1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PXRoaXMuX2NvbmZpZy5hdXRvU2hvd05ld1RhYik7dmFyIGE9bi5kZWZhdWx0KGUpLmNsb25lKCk7dm9pZCAwPT09YS5hdHRyKFwiaHJlZlwiKSYmKGE9bi5kZWZhdWx0KGUpLnBhcmVudChcImFcIikuY2xvbmUoKSksYS5maW5kKFwiLnJpZ2h0LCAuc2VhcmNoLXBhdGhcIikucmVtb3ZlKCk7dmFyIGk9YS5maW5kKFwicFwiKS50ZXh0KCk7XCJcIj09PWkmJihpPWEudGV4dCgpKTt2YXIgbz1hLmF0dHIoXCJocmVmXCIpO2lmKFwiI1wiIT09byYmXCJcIiE9PW8mJnZvaWQgMCE9PW8pe3ZhciBsPXVuZXNjYXBlKG8pLnJlcGxhY2UoXCIuL1wiLFwiXCIpLnJlcGxhY2UoL1tcIiMmJy4vOj0/W1xcXV0vZ2ksXCItXCIpLnJlcGxhY2UoLygtLSkvZ2ksXCJcIikscz1cInRhYi1cIitsO2lmKCF0aGlzLl9jb25maWcuYWxsb3dEdXBsaWNhdGVzJiZuLmRlZmF1bHQoXCIjXCIrcykubGVuZ3RoPjApcmV0dXJuIHRoaXMuc3dpdGNoVGFiKFwiI1wiK3MsdGhpcy5fY29uZmlnLmFsbG93UmVsb2FkKTsoIXRoaXMuX2NvbmZpZy5hbGxvd0R1cGxpY2F0ZXMmJjA9PT1uLmRlZmF1bHQoXCIjXCIrcykubGVuZ3RofHx0aGlzLl9jb25maWcuYWxsb3dEdXBsaWNhdGVzKSYmdGhpcy5jcmVhdGVUYWIoaSxvLGwsdCl9fSx0LnN3aXRjaFRhYj1mdW5jdGlvbihlLHQpe3ZhciBhPXRoaXM7dm9pZCAwPT09dCYmKHQ9ITEpO3ZhciBpPW4uZGVmYXVsdChlKSxvPWkuYXR0cihcImhyZWZcIik7aWYobi5kZWZhdWx0KHllKS5oaWRlKCksdCl7dmFyIGw9bi5kZWZhdWx0KENlKTt0aGlzLl9jb25maWcubG9hZGluZ1NjcmVlbj9sLnNob3coMCwoZnVuY3Rpb24oKXtuLmRlZmF1bHQobytcIiBpZnJhbWVcIikuYXR0cihcInNyY1wiLG4uZGVmYXVsdChvK1wiIGlmcmFtZVwiKS5hdHRyKFwic3JjXCIpKS5yZWFkeSgoZnVuY3Rpb24oKXthLl9jb25maWcubG9hZGluZ1NjcmVlbiYmKFwibnVtYmVyXCI9PXR5cGVvZiBhLl9jb25maWcubG9hZGluZ1NjcmVlbj9zZXRUaW1lb3V0KChmdW5jdGlvbigpe2wuZmFkZU91dCgpfSksYS5fY29uZmlnLmxvYWRpbmdTY3JlZW4pOmwuZmFkZU91dCgpKX0pKX0pKTpuLmRlZmF1bHQobytcIiBpZnJhbWVcIikuYXR0cihcInNyY1wiLG4uZGVmYXVsdChvK1wiIGlmcmFtZVwiKS5hdHRyKFwic3JjXCIpKX1uLmRlZmF1bHQobWUrXCIgLmFjdGl2ZVwiKS50YWIoXCJkaXNwb3NlXCIpLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpLHRoaXMuX2ZpeEhlaWdodCgpLGkudGFiKFwic2hvd1wiKSxpLnBhcmVudHMoXCJsaVwiKS5hZGRDbGFzcyhcImFjdGl2ZVwiKSx0aGlzLm9uVGFiQ2hhbmdlZChpKSx0aGlzLl9jb25maWcuYXV0b0l0ZW1BY3RpdmUmJnRoaXMuX3NldEl0ZW1BY3RpdmUobi5kZWZhdWx0KG8rXCIgaWZyYW1lXCIpLmF0dHIoXCJzcmNcIikpfSx0LnJlbW92ZUFjdGl2ZVRhYj1mdW5jdGlvbihlLHQpe2lmKFwiYWxsXCI9PWUpbi5kZWZhdWx0KHZlKS5yZW1vdmUoKSxuLmRlZmF1bHQod2UpLnJlbW92ZSgpLG4uZGVmYXVsdCh5ZSkuc2hvdygpO2Vsc2UgaWYoXCJhbGwtb3RoZXJcIj09ZSluLmRlZmF1bHQodmUrXCI6bm90KC5hY3RpdmUpXCIpLnJlbW92ZSgpLG4uZGVmYXVsdCh3ZStcIjpub3QoLmFjdGl2ZSlcIikucmVtb3ZlKCk7ZWxzZSBpZihcIm9ubHktdGhpc1wiPT1lKXt2YXIgYT1uLmRlZmF1bHQodCksaT1hLnBhcmVudChcIi5uYXYtaXRlbVwiKSxvPWkucGFyZW50KCksbD1pLmluZGV4KCkscz1hLnNpYmxpbmdzKFwiLm5hdi1saW5rXCIpLmF0dHIoXCJhcmlhLWNvbnRyb2xzXCIpO2lmKGkucmVtb3ZlKCksbi5kZWZhdWx0KFwiI1wiK3MpLnJlbW92ZSgpLG4uZGVmYXVsdChiZSkuY2hpbGRyZW4oKS5sZW5ndGg9PW4uZGVmYXVsdCh5ZStcIiwgXCIrQ2UpLmxlbmd0aCluLmRlZmF1bHQoeWUpLnNob3coKTtlbHNle3ZhciByPWwtMTt0aGlzLnN3aXRjaFRhYihvLmNoaWxkcmVuKCkuZXEocikuZmluZChcImEubmF2LWxpbmtcIikpfX1lbHNle3ZhciBkPW4uZGVmYXVsdCh2ZStcIi5hY3RpdmVcIiksZj1kLnBhcmVudCgpLHU9ZC5pbmRleCgpO2lmKGQucmVtb3ZlKCksbi5kZWZhdWx0KHdlK1wiLmFjdGl2ZVwiKS5yZW1vdmUoKSxuLmRlZmF1bHQoYmUpLmNoaWxkcmVuKCkubGVuZ3RoPT1uLmRlZmF1bHQoeWUrXCIsIFwiK0NlKS5sZW5ndGgpbi5kZWZhdWx0KHllKS5zaG93KCk7ZWxzZXt2YXIgYz11LTE7dGhpcy5zd2l0Y2hUYWIoZi5jaGlsZHJlbigpLmVxKGMpLmZpbmQoXCJhLm5hdi1saW5rXCIpKX19fSx0LnRvZ2dsZUZ1bGxzY3JlZW49ZnVuY3Rpb24oKXtuLmRlZmF1bHQoXCJib2R5XCIpLmhhc0NsYXNzKGplKT8obi5kZWZhdWx0KGNlK1wiIGlcIikucmVtb3ZlQ2xhc3ModGhpcy5fY29uZmlnLmljb25NaW5pbWl6ZSkuYWRkQ2xhc3ModGhpcy5fY29uZmlnLmljb25NYXhpbWl6ZSksbi5kZWZhdWx0KFwiYm9keVwiKS5yZW1vdmVDbGFzcyhqZSksbi5kZWZhdWx0KHllK1wiLCBcIitDZSkuaGVpZ2h0KFwiMTAwJVwiKSxuLmRlZmF1bHQoaGUpLmhlaWdodChcIjEwMCVcIiksbi5kZWZhdWx0KGdlKS5oZWlnaHQoXCIxMDAlXCIpKToobi5kZWZhdWx0KGNlK1wiIGlcIikucmVtb3ZlQ2xhc3ModGhpcy5fY29uZmlnLmljb25NYXhpbWl6ZSkuYWRkQ2xhc3ModGhpcy5fY29uZmlnLmljb25NaW5pbWl6ZSksbi5kZWZhdWx0KFwiYm9keVwiKS5hZGRDbGFzcyhqZSkpLG4uZGVmYXVsdCh3aW5kb3cpLnRyaWdnZXIoXCJyZXNpemVcIiksdGhpcy5fZml4SGVpZ2h0KCEwKX0sdC5faW5pdD1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChiZSkuY2hpbGRyZW4oKS5sZW5ndGg+MjtpZih0aGlzLl9zZXR1cExpc3RlbmVycygpLHRoaXMuX2ZpeEhlaWdodCghMCksZSl7dmFyIHQ9bi5kZWZhdWx0KFwiXCIrd2UpLmZpcnN0KCk7Y29uc29sZS5sb2codCk7dmFyIGE9XCIjdGFiLVwiK3QuYXR0cihcImlkXCIpLnJlcGxhY2UoXCJwYW5lbC1cIixcIlwiKTt0aGlzLnN3aXRjaFRhYihhLCEwKX19LHQuX2luaXRGcmFtZUVsZW1lbnQ9ZnVuY3Rpb24oKXtpZih3aW5kb3cuZnJhbWVFbGVtZW50JiZ0aGlzLl9jb25maWcuYXV0b0lmcmFtZU1vZGUpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIik7ZS5hZGRDbGFzcyhTZSksdGhpcy5fY29uZmlnLmF1dG9EYXJrTW9kZSYmZS5hZGRDbGFzcyhcImRhcmstbW9kZVwiKX19LHQuX25hdlNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD1uLmRlZmF1bHQobWUpLnNjcm9sbExlZnQoKTtuLmRlZmF1bHQobWUpLmFuaW1hdGUoe3Njcm9sbExlZnQ6dCtlfSwyNTAsXCJsaW5lYXJcIil9LHQuX3NldHVwTGlzdGVuZXJzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztuLmRlZmF1bHQod2luZG93KS5vbihcInJlc2l6ZVwiLChmdW5jdGlvbigpe3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5fZml4SGVpZ2h0KCl9KSwxKX0pKSxuLmRlZmF1bHQoaGUpLmhhc0NsYXNzKFNlKSYmKG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLHhlK1wiLCAuc2lkZWJhci1zZWFyY2gtcmVzdWx0cyAubGlzdC1ncm91cC1pdGVtXCIsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKSxlLm9wZW5UYWJTaWRlYmFyKHQudGFyZ2V0KX0pKSx0aGlzLl9jb25maWcudXNlTmF2YmFySXRlbXMmJm4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLEllK1wiLCBcIitUZSwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUub3BlblRhYlNpZGViYXIodC50YXJnZXQpfSkpKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwiY2xpY2tcIixfZSwoZnVuY3Rpb24odCl7dC5wcmV2ZW50RGVmYXVsdCgpLGUub25UYWJDbGljayh0LnRhcmdldCksZS5zd2l0Y2hUYWIodC50YXJnZXQpfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLF9lLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZS5vblRhYkNsaWNrKHQudGFyZ2V0KSxlLnN3aXRjaFRhYih0LnRhcmdldCl9KSksbi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsJ1tkYXRhLXdpZGdldD1cImlmcmFtZS1jbG9zZVwiXScsKGZ1bmN0aW9uKHQpe3QucHJldmVudERlZmF1bHQoKTt2YXIgYT10LnRhcmdldDtcIklcIj09YS5ub2RlTmFtZSYmKGE9dC50YXJnZXQub2Zmc2V0UGFyZW50KSxlLnJlbW92ZUFjdGl2ZVRhYihhLmF0dHJpYnV0ZXNbXCJkYXRhLXR5cGVcIl0/YS5hdHRyaWJ1dGVzW1wiZGF0YS10eXBlXCJdLm5vZGVWYWx1ZTpudWxsLGEpfSkpLG4uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLGNlLChmdW5jdGlvbih0KXt0LnByZXZlbnREZWZhdWx0KCksZS50b2dnbGVGdWxsc2NyZWVuKCl9KSk7dmFyIHQ9ITEsYT1udWxsO24uZGVmYXVsdChkb2N1bWVudCkub24oXCJtb3VzZWRvd25cIiwnW2RhdGEtd2lkZ2V0PVwiaWZyYW1lLXNjcm9sbGxlZnRcIl0nLChmdW5jdGlvbihuKXtuLnByZXZlbnREZWZhdWx0KCksY2xlYXJJbnRlcnZhbChhKTt2YXIgaT1lLl9jb25maWcuc2Nyb2xsT2Zmc2V0O2UuX2NvbmZpZy5zY3JvbGxCZWhhdmlvclN3YXB8fChpPS1pKSx0PSEwLGUuX25hdlNjcm9sbChpKSxhPXNldEludGVydmFsKChmdW5jdGlvbigpe2UuX25hdlNjcm9sbChpKX0pLDI1MCl9KSksbi5kZWZhdWx0KGRvY3VtZW50KS5vbihcIm1vdXNlZG93blwiLCdbZGF0YS13aWRnZXQ9XCJpZnJhbWUtc2Nyb2xscmlnaHRcIl0nLChmdW5jdGlvbihuKXtuLnByZXZlbnREZWZhdWx0KCksY2xlYXJJbnRlcnZhbChhKTt2YXIgaT1lLl9jb25maWcuc2Nyb2xsT2Zmc2V0O2UuX2NvbmZpZy5zY3JvbGxCZWhhdmlvclN3YXAmJihpPS1pKSx0PSEwLGUuX25hdlNjcm9sbChpKSxhPXNldEludGVydmFsKChmdW5jdGlvbigpe2UuX25hdlNjcm9sbChpKX0pLDI1MCl9KSksbi5kZWZhdWx0KGRvY3VtZW50KS5vbihcIm1vdXNldXBcIiwoZnVuY3Rpb24oKXt0JiYodD0hMSxjbGVhckludGVydmFsKGEpLGE9bnVsbCl9KSl9LHQuX3NldEl0ZW1BY3RpdmU9ZnVuY3Rpb24oZSl7bi5kZWZhdWx0KHhlK1wiLCBcIitUZSkucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIiksbi5kZWZhdWx0KEllKS5wYXJlbnQoKS5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTt2YXIgdD1uLmRlZmF1bHQoSWUrJ1tocmVmJD1cIicrZSsnXCJdJyksYT1uLmRlZmF1bHQoJy5tYWluLWhlYWRlciBhLmRyb3Bkb3duLWl0ZW1baHJlZiQ9XCInK2UrJ1wiXScpLGk9bi5kZWZhdWx0KHhlKydbaHJlZiQ9XCInK2UrJ1wiXScpO3QuZWFjaCgoZnVuY3Rpb24oZSx0KXtuLmRlZmF1bHQodCkucGFyZW50KCkuYWRkQ2xhc3MoXCJhY3RpdmVcIil9KSksYS5lYWNoKChmdW5jdGlvbihlLHQpe24uZGVmYXVsdCh0KS5hZGRDbGFzcyhcImFjdGl2ZVwiKX0pKSxpLmVhY2goKGZ1bmN0aW9uKGUsdCl7bi5kZWZhdWx0KHQpLmFkZENsYXNzKFwiYWN0aXZlXCIpLG4uZGVmYXVsdCh0KS5wYXJlbnRzKFwiLm5hdi10cmVldmlld1wiKS5wcmV2QWxsKFwiLm5hdi1saW5rXCIpLmFkZENsYXNzKFwiYWN0aXZlXCIpfSkpfSx0Ll9maXhIZWlnaHQ9ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSYmKGU9ITEpLG4uZGVmYXVsdChcImJvZHlcIikuaGFzQ2xhc3MoamUpKXt2YXIgdD1uLmRlZmF1bHQod2luZG93KS5oZWlnaHQoKSxhPW4uZGVmYXVsdChwZSkub3V0ZXJIZWlnaHQoKTtuLmRlZmF1bHQoeWUrXCIsIFwiK0NlK1wiLCBcIitnZSkuaGVpZ2h0KHQtYSksbi5kZWZhdWx0KGhlKS5oZWlnaHQodCl9ZWxzZXt2YXIgaT1wYXJzZUZsb2F0KG4uZGVmYXVsdChoZSkuY3NzKFwiaGVpZ2h0XCIpKSxvPW4uZGVmYXVsdChwZSkub3V0ZXJIZWlnaHQoKTsxPT1lP3NldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KHllK1wiLCBcIitDZSkuaGVpZ2h0KGktbyl9KSw1MCk6bi5kZWZhdWx0KGdlKS5oZWlnaHQoaS1vKX19LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtpZihuLmRlZmF1bHQodWUpLmxlbmd0aD4wKXt2YXIgYT1uLmRlZmF1bHQodGhpcykuZGF0YShkZSk7YXx8KGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7dmFyIGk9bi5kZWZhdWx0LmV4dGVuZCh7fSxrZSxcIm9iamVjdFwiPT10eXBlb2YgdD90OmEpO2xvY2FsU3RvcmFnZS5zZXRJdGVtKFwiQWRtaW5MVEU6SUZyYW1lOk9wdGlvbnNcIixKU09OLnN0cmluZ2lmeShpKSk7dmFyIG89bmV3IGUobi5kZWZhdWx0KHRoaXMpLGkpO24uZGVmYXVsdCh0aGlzKS5kYXRhKGRlLFwib2JqZWN0XCI9PXR5cGVvZiB0P3Q6YSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJi9jcmVhdGVUYWJ8b3BlblRhYlNpZGViYXJ8c3dpdGNoVGFifHJlbW92ZUFjdGl2ZVRhYi8udGVzdCh0KSYmb1t0XSgpfWVsc2UgbmV3IGUobi5kZWZhdWx0KHRoaXMpLEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJBZG1pbkxURTpJRnJhbWU6T3B0aW9uc1wiKSkpLl9pbml0RnJhbWVFbGVtZW50KCl9LGV9KCk7bi5kZWZhdWx0KHdpbmRvdykub24oXCJsb2FkXCIsKGZ1bmN0aW9uKCl7UWUuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdCh1ZSkpfSkpLG4uZGVmYXVsdC5mbi5JRnJhbWU9UWUuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm4uSUZyYW1lLkNvbnN0cnVjdG9yPVFlLG4uZGVmYXVsdC5mbi5JRnJhbWUubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm4uSUZyYW1lPWZlLFFlLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBIZT1cImx0ZS5sYXlvdXRcIix6ZT1uLmRlZmF1bHQuZm4uTGF5b3V0LEZlPVwiLm1haW4taGVhZGVyXCIsRWU9XCIubWFpbi1zaWRlYmFyXCIsTGU9XCIubWFpbi1zaWRlYmFyIC5zaWRlYmFyXCIsRGU9XCIubWFpbi1mb290ZXJcIixSZT1cInNpZGViYXItZm9jdXNlZFwiLEFlPXtzY3JvbGxiYXJUaGVtZTpcIm9zLXRoZW1lLWxpZ2h0XCIsc2Nyb2xsYmFyQXV0b0hpZGU6XCJsXCIscGFuZWxBdXRvSGVpZ2h0OiEwLHBhbmVsQXV0b0hlaWdodE1vZGU6XCJtaW4taGVpZ2h0XCIscHJlbG9hZER1cmF0aW9uOjIwMCxsb2dpblJlZ2lzdGVyQXV0b0hlaWdodDohMH0sTWU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5fY29uZmlnPXQsdGhpcy5fZWxlbWVudD1lfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmZpeExheW91dEhlaWdodD1mdW5jdGlvbihlKXt2b2lkIDA9PT1lJiYoZT1udWxsKTt2YXIgdD1uLmRlZmF1bHQoXCJib2R5XCIpLGE9MDsodC5oYXNDbGFzcyhcImNvbnRyb2wtc2lkZWJhci1zbGlkZS1vcGVuXCIpfHx0Lmhhc0NsYXNzKFwiY29udHJvbC1zaWRlYmFyLW9wZW5cIil8fFwiY29udHJvbF9zaWRlYmFyXCI9PT1lKSYmKGE9bi5kZWZhdWx0KFwiLmNvbnRyb2wtc2lkZWJhci1jb250ZW50XCIpLm91dGVySGVpZ2h0KCkpO3ZhciBpPXt3aW5kb3c6bi5kZWZhdWx0KHdpbmRvdykuaGVpZ2h0KCksaGVhZGVyOm4uZGVmYXVsdChGZSkubGVuZ3RoPjA/bi5kZWZhdWx0KEZlKS5vdXRlckhlaWdodCgpOjAsZm9vdGVyOm4uZGVmYXVsdChEZSkubGVuZ3RoPjA/bi5kZWZhdWx0KERlKS5vdXRlckhlaWdodCgpOjAsc2lkZWJhcjpuLmRlZmF1bHQoTGUpLmxlbmd0aD4wP24uZGVmYXVsdChMZSkuaGVpZ2h0KCk6MCxjb250cm9sU2lkZWJhcjphfSxvPXRoaXMuX21heChpKSxsPXRoaXMuX2NvbmZpZy5wYW5lbEF1dG9IZWlnaHQ7ITA9PT1sJiYobD0wKTt2YXIgcz1uLmRlZmF1bHQoXCIuY29udGVudC13cmFwcGVyXCIpOyExIT09bCYmKG89PT1pLmNvbnRyb2xTaWRlYmFyP3MuY3NzKHRoaXMuX2NvbmZpZy5wYW5lbEF1dG9IZWlnaHRNb2RlLG8rbCk6bz09PWkud2luZG93P3MuY3NzKHRoaXMuX2NvbmZpZy5wYW5lbEF1dG9IZWlnaHRNb2RlLG8rbC1pLmhlYWRlci1pLmZvb3Rlcik6cy5jc3ModGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodE1vZGUsbytsLWkuaGVhZGVyKSx0aGlzLl9pc0Zvb3RlckZpeGVkKCkmJnMuY3NzKHRoaXMuX2NvbmZpZy5wYW5lbEF1dG9IZWlnaHRNb2RlLHBhcnNlRmxvYXQocy5jc3ModGhpcy5fY29uZmlnLnBhbmVsQXV0b0hlaWdodE1vZGUpKStpLmZvb3RlcikpLHQuaGFzQ2xhc3MoXCJsYXlvdXQtZml4ZWRcIikmJihcInVuZGVmaW5lZFwiIT10eXBlb2Ygbi5kZWZhdWx0LmZuLm92ZXJsYXlTY3JvbGxiYXJzP24uZGVmYXVsdChMZSkub3ZlcmxheVNjcm9sbGJhcnMoe2NsYXNzTmFtZTp0aGlzLl9jb25maWcuc2Nyb2xsYmFyVGhlbWUsc2l6ZUF1dG9DYXBhYmxlOiEwLHNjcm9sbGJhcnM6e2F1dG9IaWRlOnRoaXMuX2NvbmZpZy5zY3JvbGxiYXJBdXRvSGlkZSxjbGlja1Njcm9sbGluZzohMH19KTpuLmRlZmF1bHQoTGUpLmNzcyhcIm92ZXJmbG93LXlcIixcImF1dG9cIikpfSx0LmZpeExvZ2luUmVnaXN0ZXJIZWlnaHQ9ZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoXCJib2R5XCIpLHQ9bi5kZWZhdWx0KFwiLmxvZ2luLWJveCwgLnJlZ2lzdGVyLWJveFwiKTtpZihlLmhhc0NsYXNzKFwiaWZyYW1lLW1vZGVcIikpZS5jc3MoXCJoZWlnaHRcIixcIjEwMCVcIiksbi5kZWZhdWx0KFwiLndyYXBwZXJcIikuY3NzKFwiaGVpZ2h0XCIsXCIxMDAlXCIpLG4uZGVmYXVsdChcImh0bWxcIikuY3NzKFwiaGVpZ2h0XCIsXCIxMDAlXCIpO2Vsc2UgaWYoMD09PXQubGVuZ3RoKWUuY3NzKFwiaGVpZ2h0XCIsXCJhdXRvXCIpLG4uZGVmYXVsdChcImh0bWxcIikuY3NzKFwiaGVpZ2h0XCIsXCJhdXRvXCIpO2Vsc2V7dmFyIGE9dC5oZWlnaHQoKTtlLmNzcyh0aGlzLl9jb25maWcucGFuZWxBdXRvSGVpZ2h0TW9kZSkhPT1hJiZlLmNzcyh0aGlzLl9jb25maWcucGFuZWxBdXRvSGVpZ2h0TW9kZSxhKX19LHQuX2luaXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuZml4TGF5b3V0SGVpZ2h0KCksITA9PT10aGlzLl9jb25maWcubG9naW5SZWdpc3RlckF1dG9IZWlnaHQ/dGhpcy5maXhMb2dpblJlZ2lzdGVySGVpZ2h0KCk6dGhpcy5fY29uZmlnLmxvZ2luUmVnaXN0ZXJBdXRvSGVpZ2h0PT09cGFyc2VJbnQodGhpcy5fY29uZmlnLmxvZ2luUmVnaXN0ZXJBdXRvSGVpZ2h0LDEwKSYmc2V0SW50ZXJ2YWwodGhpcy5maXhMb2dpblJlZ2lzdGVySGVpZ2h0LHRoaXMuX2NvbmZpZy5sb2dpblJlZ2lzdGVyQXV0b0hlaWdodCksbi5kZWZhdWx0KExlKS5vbihcImNvbGxhcHNlZC5sdGUudHJlZXZpZXcgZXhwYW5kZWQubHRlLnRyZWV2aWV3XCIsKGZ1bmN0aW9uKCl7ZS5maXhMYXlvdXRIZWlnaHQoKX0pKSxuLmRlZmF1bHQoRWUpLm9uKFwibW91c2VlbnRlciBtb3VzZWxlYXZlXCIsKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KFwiYm9keVwiKS5oYXNDbGFzcyhcInNpZGViYXItY29sbGFwc2VcIikmJmUuZml4TGF5b3V0SGVpZ2h0KCl9KSksbi5kZWZhdWx0KCdbZGF0YS13aWRnZXQ9XCJwdXNobWVudVwiXScpLm9uKFwiY29sbGFwc2VkLmx0ZS5wdXNobWVudSBzaG93bi5sdGUucHVzaG1lbnVcIiwoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe2UuZml4TGF5b3V0SGVpZ2h0KCl9KSwzMDApfSkpLG4uZGVmYXVsdCgnW2RhdGEtd2lkZ2V0PVwiY29udHJvbC1zaWRlYmFyXCJdJykub24oXCJjb2xsYXBzZWQubHRlLmNvbnRyb2xzaWRlYmFyXCIsKGZ1bmN0aW9uKCl7ZS5maXhMYXlvdXRIZWlnaHQoKX0pKS5vbihcImV4cGFuZGVkLmx0ZS5jb250cm9sc2lkZWJhclwiLChmdW5jdGlvbigpe2UuZml4TGF5b3V0SGVpZ2h0KFwiY29udHJvbF9zaWRlYmFyXCIpfSkpLG4uZGVmYXVsdCh3aW5kb3cpLnJlc2l6ZSgoZnVuY3Rpb24oKXtlLmZpeExheW91dEhlaWdodCgpfSkpLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KFwiYm9keS5ob2xkLXRyYW5zaXRpb25cIikucmVtb3ZlQ2xhc3MoXCJob2xkLXRyYW5zaXRpb25cIil9KSw1MCksc2V0VGltZW91dCgoZnVuY3Rpb24oKXt2YXIgZT1uLmRlZmF1bHQoXCIucHJlbG9hZGVyXCIpO2UmJihlLmNzcyhcImhlaWdodFwiLDApLHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7ZS5jaGlsZHJlbigpLmhpZGUoKX0pLDIwMCkpfSksdGhpcy5fY29uZmlnLnByZWxvYWREdXJhdGlvbil9LHQuX21heD1mdW5jdGlvbihlKXt2YXIgdD0wO3JldHVybiBPYmplY3Qua2V5cyhlKS5mb3JFYWNoKChmdW5jdGlvbihhKXtlW2FdPnQmJih0PWVbYV0pfSkpLHR9LHQuX2lzRm9vdGVyRml4ZWQ9ZnVuY3Rpb24oKXtyZXR1cm5cImZpeGVkXCI9PT1uLmRlZmF1bHQoRGUpLmNzcyhcInBvc2l0aW9uXCIpfSxlLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQmJih0PVwiXCIpLHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgYT1uLmRlZmF1bHQodGhpcykuZGF0YShIZSksaT1uLmRlZmF1bHQuZXh0ZW5kKHt9LEFlLG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2F8fChhPW5ldyBlKG4uZGVmYXVsdCh0aGlzKSxpKSxuLmRlZmF1bHQodGhpcykuZGF0YShIZSxhKSksXCJpbml0XCI9PT10fHxcIlwiPT09dD9hLl9pbml0KCk6XCJmaXhMYXlvdXRIZWlnaHRcIiE9PXQmJlwiZml4TG9naW5SZWdpc3RlckhlaWdodFwiIT09dHx8YVt0XSgpfSkpfSxlfSgpO24uZGVmYXVsdCh3aW5kb3cpLm9uKFwibG9hZFwiLChmdW5jdGlvbigpe01lLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQoXCJib2R5XCIpKX0pKSxuLmRlZmF1bHQoTGUrXCIgYVwiKS5vbihcImZvY3VzaW5cIiwoZnVuY3Rpb24oKXtuLmRlZmF1bHQoRWUpLmFkZENsYXNzKFJlKX0pKS5vbihcImZvY3Vzb3V0XCIsKGZ1bmN0aW9uKCl7bi5kZWZhdWx0KEVlKS5yZW1vdmVDbGFzcyhSZSl9KSksbi5kZWZhdWx0LmZuLkxheW91dD1NZS5falF1ZXJ5SW50ZXJmYWNlLG4uZGVmYXVsdC5mbi5MYXlvdXQuQ29uc3RydWN0b3I9TWUsbi5kZWZhdWx0LmZuLkxheW91dC5ub0NvbmZsaWN0PWZ1bmN0aW9uKCl7cmV0dXJuIG4uZGVmYXVsdC5mbi5MYXlvdXQ9emUsTWUuX2pRdWVyeUludGVyZmFjZX07dmFyIHFlPVwiUHVzaE1lbnVcIixPZT1cImx0ZS5wdXNobWVudVwiLE5lPVwiLlwiK09lLFBlPW4uZGVmYXVsdC5mbltxZV0sVWU9J1tkYXRhLXdpZGdldD1cInB1c2htZW51XCJdJyxCZT1cImJvZHlcIiwkZT1cInNpZGViYXItY29sbGFwc2VcIixKZT1cInNpZGViYXItb3BlblwiLFdlPVwic2lkZWJhci1pcy1vcGVuaW5nXCIsVmU9XCJzaWRlYmFyLWNsb3NlZFwiLEdlPXthdXRvQ29sbGFwc2VTaXplOjk5MixlbmFibGVSZW1lbWJlcjohMSxub1RyYW5zaXRpb25BZnRlclJlbG9hZDohMCxhbmltYXRpb25TcGVlZDozMDB9LEtlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9vcHRpb25zPW4uZGVmYXVsdC5leHRlbmQoe30sR2UsdCksMD09PW4uZGVmYXVsdChcIiNzaWRlYmFyLW92ZXJsYXlcIikubGVuZ3RoJiZ0aGlzLl9hZGRPdmVybGF5KCksdGhpcy5faW5pdCgpfXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmV4cGFuZD1mdW5jdGlvbigpe3ZhciBlPW4uZGVmYXVsdChCZSk7dGhpcy5fb3B0aW9ucy5hdXRvQ29sbGFwc2VTaXplJiZuLmRlZmF1bHQod2luZG93KS53aWR0aCgpPD10aGlzLl9vcHRpb25zLmF1dG9Db2xsYXBzZVNpemUmJmUuYWRkQ2xhc3MoSmUpLGUuYWRkQ2xhc3MoV2UpLnJlbW92ZUNsYXNzKFwic2lkZWJhci1jb2xsYXBzZSBzaWRlYmFyLWNsb3NlZFwiKS5kZWxheSg1MCkucXVldWUoKGZ1bmN0aW9uKCl7ZS5yZW1vdmVDbGFzcyhXZSksbi5kZWZhdWx0KHRoaXMpLmRlcXVldWUoKX0pKSx0aGlzLl9vcHRpb25zLmVuYWJsZVJlbWVtYmVyJiZsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcInJlbWVtYmVyXCIrTmUsSmUpLG4uZGVmYXVsdCh0aGlzLl9lbGVtZW50KS50cmlnZ2VyKG4uZGVmYXVsdC5FdmVudChcInNob3duLmx0ZS5wdXNobWVudVwiKSl9LHQuY29sbGFwc2U9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9bi5kZWZhdWx0KEJlKTt0aGlzLl9vcHRpb25zLmF1dG9Db2xsYXBzZVNpemUmJm4uZGVmYXVsdCh3aW5kb3cpLndpZHRoKCk8PXRoaXMuX29wdGlvbnMuYXV0b0NvbGxhcHNlU2l6ZSYmdC5yZW1vdmVDbGFzcyhKZSkuYWRkQ2xhc3MoVmUpLHQuYWRkQ2xhc3MoJGUpLHRoaXMuX29wdGlvbnMuZW5hYmxlUmVtZW1iZXImJmxvY2FsU3RvcmFnZS5zZXRJdGVtKFwicmVtZW1iZXJcIitOZSwkZSksbi5kZWZhdWx0KHRoaXMuX2VsZW1lbnQpLnRyaWdnZXIobi5kZWZhdWx0LkV2ZW50KFwiY29sbGFwc2VkLmx0ZS5wdXNobWVudVwiKSksc2V0VGltZW91dCgoZnVuY3Rpb24oKXtuLmRlZmF1bHQoZS5fZWxlbWVudCkudHJpZ2dlcihuLmRlZmF1bHQuRXZlbnQoXCJjb2xsYXBzZWQtZG9uZS5sdGUucHVzaG1lbnVcIikpfSksdGhpcy5fb3B0aW9ucy5hbmltYXRpb25TcGVlZCl9LHQudG9nZ2xlPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KEJlKS5oYXNDbGFzcygkZSk/dGhpcy5leHBhbmQoKTp0aGlzLmNvbGxhcHNlKCl9LHQuYXV0b0NvbGxhcHNlPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUmJihlPSExKSx0aGlzLl9vcHRpb25zLmF1dG9Db2xsYXBzZVNpemUpe3ZhciB0PW4uZGVmYXVsdChCZSk7bi5kZWZhdWx0KHdpbmRvdykud2lkdGgoKTw9dGhpcy5fb3B0aW9ucy5hdXRvQ29sbGFwc2VTaXplP3QuaGFzQ2xhc3MoSmUpfHx0aGlzLmNvbGxhcHNlKCk6ITA9PT1lJiYodC5oYXNDbGFzcyhKZSk/dC5yZW1vdmVDbGFzcyhKZSk6dC5oYXNDbGFzcyhWZSkmJnRoaXMuZXhwYW5kKCkpfX0sdC5yZW1lbWJlcj1mdW5jdGlvbigpe2lmKHRoaXMuX29wdGlvbnMuZW5hYmxlUmVtZW1iZXIpe3ZhciBlPW4uZGVmYXVsdChcImJvZHlcIik7bG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJyZW1lbWJlclwiK05lKT09PSRlP3RoaXMuX29wdGlvbnMubm9UcmFuc2l0aW9uQWZ0ZXJSZWxvYWQ/ZS5hZGRDbGFzcyhcImhvbGQtdHJhbnNpdGlvblwiKS5hZGRDbGFzcygkZSkuZGVsYXkoNTApLnF1ZXVlKChmdW5jdGlvbigpe24uZGVmYXVsdCh0aGlzKS5yZW1vdmVDbGFzcyhcImhvbGQtdHJhbnNpdGlvblwiKSxuLmRlZmF1bHQodGhpcykuZGVxdWV1ZSgpfSkpOmUuYWRkQ2xhc3MoJGUpOnRoaXMuX29wdGlvbnMubm9UcmFuc2l0aW9uQWZ0ZXJSZWxvYWQ/ZS5hZGRDbGFzcyhcImhvbGQtdHJhbnNpdGlvblwiKS5yZW1vdmVDbGFzcygkZSkuZGVsYXkoNTApLnF1ZXVlKChmdW5jdGlvbigpe24uZGVmYXVsdCh0aGlzKS5yZW1vdmVDbGFzcyhcImhvbGQtdHJhbnNpdGlvblwiKSxuLmRlZmF1bHQodGhpcykuZGVxdWV1ZSgpfSkpOmUucmVtb3ZlQ2xhc3MoJGUpfX0sdC5faW5pdD1mdW5jdGlvbigpe3ZhciBlPXRoaXM7dGhpcy5yZW1lbWJlcigpLHRoaXMuYXV0b0NvbGxhcHNlKCksbi5kZWZhdWx0KHdpbmRvdykucmVzaXplKChmdW5jdGlvbigpe2UuYXV0b0NvbGxhcHNlKCEwKX0pKX0sdC5fYWRkT3ZlcmxheT1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1uLmRlZmF1bHQoXCI8ZGl2IC8+XCIse2lkOlwic2lkZWJhci1vdmVybGF5XCJ9KTt0Lm9uKFwiY2xpY2tcIiwoZnVuY3Rpb24oKXtlLmNvbGxhcHNlKCl9KSksbi5kZWZhdWx0KFwiLndyYXBwZXJcIikuYXBwZW5kKHQpfSxlLl9qUXVlcnlJbnRlcmZhY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWFjaCgoZnVuY3Rpb24oKXt2YXIgYT1uLmRlZmF1bHQodGhpcykuZGF0YShPZSksaT1uLmRlZmF1bHQuZXh0ZW5kKHt9LEdlLG4uZGVmYXVsdCh0aGlzKS5kYXRhKCkpO2F8fChhPW5ldyBlKHRoaXMsaSksbi5kZWZhdWx0KHRoaXMpLmRhdGEoT2UsYSkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYvY29sbGFwc2V8ZXhwYW5kfHRvZ2dsZS8udGVzdCh0KSYmYVt0XSgpfSkpfSxlfSgpO24uZGVmYXVsdChkb2N1bWVudCkub24oXCJjbGlja1wiLFVlLChmdW5jdGlvbihlKXtlLnByZXZlbnREZWZhdWx0KCk7dmFyIHQ9ZS5jdXJyZW50VGFyZ2V0O1wicHVzaG1lbnVcIiE9PW4uZGVmYXVsdCh0KS5kYXRhKFwid2lkZ2V0XCIpJiYodD1uLmRlZmF1bHQodCkuY2xvc2VzdChVZSkpLEtlLl9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQodCksXCJ0b2dnbGVcIil9KSksbi5kZWZhdWx0KHdpbmRvdykub24oXCJsb2FkXCIsKGZ1bmN0aW9uKCl7S2UuX2pRdWVyeUludGVyZmFjZS5jYWxsKG4uZGVmYXVsdChVZSkpfSkpLG4uZGVmYXVsdC5mbltxZV09S2UuX2pRdWVyeUludGVyZmFjZSxuLmRlZmF1bHQuZm5bcWVdLkNvbnN0cnVjdG9yPUtlLG4uZGVmYXVsdC5mbltxZV0ubm9Db25mbGljdD1mdW5jdGlvbigpe3JldHVybiBuLmRlZmF1bHQuZm5bcWVdPVBlLEtlLl9qUXVlcnlJbnRlcmZhY2V9O3ZhciBYZT1cIlNpZGViYXJTZWFyY2hcIixZZT1cImx0ZS5zaWRlYmFyLXNlYXJjaFwiLFplPW4uZGVmYXVsdC5mbltYZV0sZXQ9XCJzaWRlYmFyLXNlYXJjaC1vcGVuXCIsdHQ9XCJmYS1zZWFyY2hcIixhdD1cImZhLXRpbWVzXCIsbnQ9XCJzaWRlYmFyLXNlYXJjaC1yZXN1bHRzXCIsaXQ9XCJsaXN0LWdyb3VwXCIsb3Q9J1tkYXRhLXdpZGdldD1cInNpZGViYXItc2VhcmNoXCJdJyxsdD1vdCtcIiAuZm9ybS1jb250cm9sXCIsc3Q9b3QrXCIgLmJ0blwiLHJ0PXN0K1wiIGlcIixkdD1cIi5zaWRlYmFyLXNlYXJjaC1yZXN1bHRzXCIsZnQ9XCIuc2lkZWJhci1zZWFyY2gtcmVzdWx0cyAubGlzdC1ncm91cFwiLHV0PXthcnJvd1NpZ246XCItPlwiLG1pbkxlbmd0aDozLG1heFJlc3VsdHM6NyxoaWdobGlnaHROYW1lOiEwLGhpZ2hsaWdodFBhdGg6ITEsaGlnaGxpZ2h0Q2xhc3M6XCJ0ZXh0LWxpZ2h0XCIsbm90Rm91bmRUZXh0OlwiTm8gZWxlbWVudCBmb3VuZCFcIn0sY3Q9W10saHQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5lbGVtZW50PWUsdGhpcy5vcHRpb25zPW4uZGVmYXVsdC5leHRlbmQoe30sdXQsdCksdGhpcy5pdGVtcz1bXX12YXIgYT1lLnByb3RvdHlwZTtyZXR1cm4gYS5pbml0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpczswIT09bi5kZWZhdWx0KG90KS5sZW5ndGgmJigwPT09bi5kZWZhdWx0KG90KS5uZXh0KGR0KS5sZW5ndGgmJm4uZGVmYXVsdChvdCkuYWZ0ZXIobi5kZWZhdWx0KFwiPGRpdiAvPlwiLHtjbGFzczpudH0pKSwwPT09bi5kZWZhdWx0KGR0KS5jaGlsZHJlbihcIi5saXN0LWdyb3VwXCIpLmxlbmd0aCYmbi5kZWZhdWx0KGR0KS5hcHBlbmQobi5kZWZhdWx0KFwiPGRpdiAvPlwiLHtjbGFzczppdH0pKSx0aGlzLl9hZGROb3RGb3VuZCgpLG4uZGVmYXVsdChcIi5tYWluLXNpZGViYXIgLm5hdi1zaWRlYmFyXCIpLmNoaWxkcmVuKCkuZWFjaCgoZnVuY3Rpb24odCxhKXtlLl9wYXJzZUl0ZW0oYSl9KSkpfSxhLnNlYXJjaD1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD1uLmRlZmF1bHQobHQpLnZhbCgpLnRvTG93ZXJDYXNlKCk7aWYodC5sZW5ndGg8dGhpcy5vcHRpb25zLm1pbkxlbmd0aClyZXR1cm4gbi5kZWZhdWx0KGZ0KS5lbXB0eSgpLHRoaXMuX2FkZE5vdEZvdW5kKCksdm9pZCB0aGlzLmNsb3NlKCk7dmFyIGE9Y3QuZmlsdGVyKChmdW5jdGlvbihlKXtyZXR1cm4gZS5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModCl9KSksaT1uLmRlZmF1bHQoYS5zbGljZSgwLHRoaXMub3B0aW9ucy5tYXhSZXN1bHRzKSk7bi5kZWZhdWx0KGZ0KS5lbXB0eSgpLDA9PT1pLmxlbmd0aD90aGlzLl9hZGROb3RGb3VuZCgpOmkuZWFjaCgoZnVuY3Rpb24odCxhKXtuLmRlZmF1bHQoZnQpLmFwcGVuZChlLl9yZW5kZXJJdGVtKGVzY2FwZShhLm5hbWUpLGVuY29kZVVSSShhLmxpbmspLGEucGF0aCkpfSkpLHRoaXMub3BlbigpfSxhLm9wZW49ZnVuY3Rpb24oKXtuLmRlZmF1bHQob3QpLnBhcmVudCgpLmFkZENsYXNzKGV0KSxuLmRlZmF1bHQocnQpLnJlbW92ZUNsYXNzKHR0KS5hZGRDbGFzcyhhdCl9LGEuY2xvc2U9ZnVuY3Rpb24oKXtuLmRlZmF1bHQob3QpLnBhcmVudCgpLnJlbW92ZUNsYXNzKGV0KSxuLmRlZmF1bHQocnQpLnJlbW92ZUNsYXNzKGF0KS5hZGRDbGFzcyh0dCl9LGEudG9nZ2xlPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KG90KS5wYXJlbnQoKS5oYXNDbGFzcyhldCk/dGhpcy5jbG9zZSgpOnRoaXMub3BlbigpfSxhLl9wYXJzZUl0ZW09ZnVuY3Rpb24oZSx0KXt2YXIgYT10aGlzO2lmKHZvaWQgMD09PXQmJih0PVtdKSwhbi5kZWZhdWx0KGUpLmhhc0NsYXNzKFwibmF2LWhlYWRlclwiKSl7dmFyIGk9e30sbz1uLmRlZmF1bHQoZSkuY2xvbmUoKS5maW5kKFwiPiAubmF2LWxpbmtcIiksbD1uLmRlZmF1bHQoZSkuY2xvbmUoKS5maW5kKFwiPiAubmF2LXRyZWV2aWV3XCIpLHM9by5hdHRyKFwiaHJlZlwiKSxyPW8uZmluZChcInBcIikuY2hpbGRyZW4oKS5yZW1vdmUoKS5lbmQoKS50ZXh0KCk7aWYoaS5uYW1lPXRoaXMuX3RyaW1UZXh0KHIpLGkubGluaz1zLGkucGF0aD10LDA9PT1sLmxlbmd0aCljdC5wdXNoKGkpO2Vsc2V7dmFyIGQ9aS5wYXRoLmNvbmNhdChbaS5uYW1lXSk7bC5jaGlsZHJlbigpLmVhY2goKGZ1bmN0aW9uKGUsdCl7YS5fcGFyc2VJdGVtKHQsZCl9KSl9fX0sYS5fdHJpbVRleHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHQudHJpbShlLnJlcGxhY2UoLyhcXHJcXG58XFxufFxccikvZ20sXCIgXCIpKX0sYS5fcmVuZGVySXRlbT1mdW5jdGlvbihlLHQsYSl7dmFyIGk9dGhpcztpZihhPWEuam9pbihcIiBcIit0aGlzLm9wdGlvbnMuYXJyb3dTaWduK1wiIFwiKSxlPXVuZXNjYXBlKGUpLHQ9ZGVjb2RlVVJJKHQpLHRoaXMub3B0aW9ucy5oaWdobGlnaHROYW1lfHx0aGlzLm9wdGlvbnMuaGlnaGxpZ2h0UGF0aCl7dmFyIG89bi5kZWZhdWx0KGx0KS52YWwoKS50b0xvd2VyQ2FzZSgpLGw9bmV3IFJlZ0V4cChvLFwiZ2lcIik7dGhpcy5vcHRpb25zLmhpZ2hsaWdodE5hbWUmJihlPWUucmVwbGFjZShsLChmdW5jdGlvbihlKXtyZXR1cm4nPHN0cm9uZyBjbGFzcz1cIicraS5vcHRpb25zLmhpZ2hsaWdodENsYXNzKydcIj4nK2UrXCI8L3N0cm9uZz5cIn0pKSksdGhpcy5vcHRpb25zLmhpZ2hsaWdodFBhdGgmJihhPWEucmVwbGFjZShsLChmdW5jdGlvbihlKXtyZXR1cm4nPHN0cm9uZyBjbGFzcz1cIicraS5vcHRpb25zLmhpZ2hsaWdodENsYXNzKydcIj4nK2UrXCI8L3N0cm9uZz5cIn0pKSl9dmFyIHM9bi5kZWZhdWx0KFwiPGEvPlwiLHtocmVmOmRlY29kZVVSSUNvbXBvbmVudCh0KSxjbGFzczpcImxpc3QtZ3JvdXAtaXRlbVwifSkscj1uLmRlZmF1bHQoXCI8ZGl2Lz5cIix7Y2xhc3M6XCJzZWFyY2gtdGl0bGVcIn0pLmh0bWwoZSksZD1uLmRlZmF1bHQoXCI8ZGl2Lz5cIix7Y2xhc3M6XCJzZWFyY2gtcGF0aFwifSkuaHRtbChhKTtyZXR1cm4gcy5hcHBlbmQocikuYXBwZW5kKGQpLHN9LGEuX2FkZE5vdEZvdW5kPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KGZ0KS5hcHBlbmQodGhpcy5fcmVuZGVySXRlbSh0aGlzLm9wdGlvbnMubm90Rm91bmRUZXh0LFwiI1wiLFtdKSl9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXt2YXIgYT1uLmRlZmF1bHQodGhpcykuZGF0YShZZSk7YXx8KGE9bi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7dmFyIGk9bi5kZWZhdWx0LmV4dGVuZCh7fSx1dCxcIm9iamVjdFwiPT10eXBlb2YgdD90OmEpLG89bmV3IGUobi5kZWZhdWx0KHRoaXMpLGkpO24uZGVmYXVsdCh0aGlzKS5kYXRhKFllLFwib2JqZWN0XCI9PXR5cGVvZiB0P3Q6YSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJi9pbml0fHRvZ2dsZXxjbG9zZXxvcGVufHNlYXJjaC8udGVzdCh0KT9vW3RdKCk6by5pbml0KCl9LGV9KCk7bi5kZWZhdWx0KGRvY3VtZW50KS5vbihcImNsaWNrXCIsc3QsKGZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSxodC5falF1ZXJ5SW50ZXJmYWNlLmNhbGwobi5kZWZhdWx0KG90KSxcInRvZ2dsZVwiKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwia2V5dXBcIixsdCwoZnVuY3Rpb24oZSl7cmV0dXJuIDM4PT1lLmtleUNvZGU/KGUucHJldmVudERlZmF1bHQoKSx2b2lkIG4uZGVmYXVsdChmdCkuY2hpbGRyZW4oKS5sYXN0KCkuZm9jdXMoKSk6NDA9PWUua2V5Q29kZT8oZS5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgbi5kZWZhdWx0KGZ0KS5jaGlsZHJlbigpLmZpcnN0KCkuZm9jdXMoKSk6dm9pZCBzZXRUaW1lb3V0KChmdW5jdGlvbigpe2h0Ll9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQob3QpLFwic2VhcmNoXCIpfSksMTAwKX0pKSxuLmRlZmF1bHQoZG9jdW1lbnQpLm9uKFwia2V5ZG93blwiLGZ0LChmdW5jdGlvbihlKXt2YXIgdD1uLmRlZmF1bHQoXCI6Zm9jdXNcIik7Mzg9PWUua2V5Q29kZSYmKGUucHJldmVudERlZmF1bHQoKSx0LmlzKFwiOmZpcnN0LWNoaWxkXCIpP3Quc2libGluZ3MoKS5sYXN0KCkuZm9jdXMoKTp0LnByZXYoKS5mb2N1cygpKSw0MD09ZS5rZXlDb2RlJiYoZS5wcmV2ZW50RGVmYXVsdCgpLHQuaXMoXCI6bGFzdC1jaGlsZFwiKT90LnNpYmxpbmdzKCkuZmlyc3QoKS5mb2N1cygpOnQubmV4dCgpLmZvY3VzKCkpfSkpLG4uZGVmYXVsdCh3aW5kb3cpLm9uKFwibG9hZFwiLChmdW5jdGlvbigpe2h0Ll9qUXVlcnlJbnRlcmZhY2UuY2FsbChuLmRlZmF1bHQob3QpLFwiaW5pdFwiKX0pKSxuLmRlZmF1bHQuZm5bWGVdPWh0Ll9qUXVlcnlJbnRlcmZhY2Usbi5kZWZhdWx0LmZuW1hlXS5Db25zdHJ1Y3Rvcj1odCxuLmRlZmF1bHQuZm5bWGVdLm5vQ29uZmxpY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gbi5kZWZhdWx0LmZuW1hlXT1aZSxodC5falF1ZXJ5SW50ZXJmYWNlfTt2YXIgZ3Q9XCJOYXZiYXJTZWFyY2hcIixwdD1cImx0ZS5uYXZiYXItc2VhcmNoXCIsbXQ9bi5kZWZhdWx0LmZuW2d0XSx2dD0nW2RhdGEtd2lkZ2V0PVwibmF2YmFyLXNlYXJjaFwiXScsX3Q9XCIuZm9ybS1jb250cm9sXCIsYnQ9XCJuYXZiYXItc2VhcmNoLW9wZW5cIix5dD17cmVzZXRPbkNsb3NlOiEwLHRhcmdldDpcIi5uYXZiYXItc2VhcmNoLWJsb2NrXCJ9LEN0PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuX2VsZW1lbnQ9ZSx0aGlzLl9jb25maWc9bi5kZWZhdWx0LmV4dGVuZCh7fSx5dCx0KX12YXIgdD1lLnByb3RvdHlwZTtyZXR1cm4gdC5vcGVuPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KHRoaXMuX2NvbmZpZy50YXJnZXQpLmNzcyhcImRpc3BsYXlcIixcImZsZXhcIikuaGlkZSgpLmZhZGVJbigpLmFkZENsYXNzKGJ0KSxuLmRlZmF1bHQodGhpcy5fY29uZmlnLnRhcmdldCtcIiBcIitfdCkuZm9jdXMoKX0sdC5jbG9zZT1mdW5jdGlvbigpe24uZGVmYXVsdCh0aGlzLl9jb25maWcudGFyZ2V0KS5mYWRlT3V0KCkucmVtb3ZlQ2xhc3MoYnQpLHRoaXMuX2NvbmZpZy5yZXNldE9uQ2xvc2UmJm4uZGVmYXVsdCh0aGlzLl9jb25maWcudGFyZ2V0K1wiIFwiK190KS52YWwoXCJcIil9LHQudG9nZ2xlPWZ1bmN0aW9uKCl7bi5kZWZhdWx0KHRoaXMuX2NvbmZpZy50YXJnZXQpLmhhc0NsYXNzKGJ0KT90aGlzLmNsb3NlKCk6dGhpcy5vcGVuKCl9LGUuX2pRdWVyeUludGVyZmFjZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lYWNoKChmdW5jdGlvbigpe3ZhciBhPW4uZGVmYXVsdCh0aGlzKS5kYXRhKHB0KSxpPW4uZGVmYXVsdC5leHRlbmQoe30seXQsbi5kZWZhdWx0KHRoaXMpLmRhdGEoKSk7aWYoYXx8KGE9bmV