Rallly is a collaborative scheduling service that makes deciding on a date fast and easy.
\n
Hi, I\'m Luke!
\n
\n I created Rallly as side project to help me learn some new technologies. I decided to publish it because I thought other people might find it useful. Rallly is a completely free service. In fact it is even open source. You can look at the latest source code on Github.\n
\n
\n'),e.put("templates/confirmmodal.html",'\n\n
\n
{{modal.title}}
\n
\n {{modal.message}}\n
\n
\n \n \n
\n
\n'),e.put("templates/editevent.html",'
\n
\n\n
Edit Event
\n
\n You can makes changes to your existing event by changing the fields in the form below.\n
\n')}]),angular.module("rallly").directive("backImg",function(){return function(e,t,n){var i=n.backImg;t.css({"background-image":"url(/images/"+i+".png)"})}}),angular.module("rallly").directive("datepicker",function(){return{restrict:"A",require:"ngModel",scope:{model:"=ngModel",control:"="},link:function(e,t,n,i){e.model=e.model||[],angular.element(t).datepicker({multidate:!0,todayHighlight:!0}).on("changeDate",function(e){var t=e.dates;t.sort(function(e,t){return e.getTime()>t.getTime()?!0:!1}),i.$setViewValue(t,e)});var a=function(e,n){if(e&&n&&e.length!=n.length){for(var i=[],a=0;a0;i||t.toggle()};t.toggle=function(){t.open=!t.open,t.open?(n.addClass("open"),e.bind("click",i)):(n.removeClass("open"),e.unbind("click",i))}}}}]),angular.module("rallly").service("FormHelper",function(){this.emailRegexString="^([\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4})?$",this.emailRegex=new RegExp(this.emailRegexString),this.prettyError=function(e,t){return e.required?t+" is required":e.pattern?t+" is invalid":e.maxlength?t+" is too long":!1}}).directive("userForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/directives/eventForm/userForm.html",link:function(t){t.errors={},t.emailRegex=e.emailRegex,t.$watchCollection("form.name.$error",function(n){t.errors.name=e.prettyError(n,"Name")}),t.$watchCollection("form.email.$error",function(n){t.errors.email=e.prettyError(n,"Email")})}}}]).directive("eventForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/directives/eventForm/eventForm.html",link:function(t){t.errors={},t.$watchCollection("form.title.$error",function(n){t.errors.title=e.prettyError(n,"Title")}),t.$watchCollection("form.location.$error",function(n){t.errors.location=e.prettyError(n,"Location")})}}}]).directive("dateForm",function(){return{scope:{event:"=",form:"="},templateUrl:"templates/directives/eventForm/dateForm.html"}}).directive("participantsForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/directives/eventForm/participantsForm.html",link:function(t){t.emailRegex=e.emailRegexString}}}]).directive("settingsForm",["Event","ConfirmModal",function(e,t){return{scope:{event:"=",form:"="},templateUrl:"templates/directives/eventForm/settingsForm.html",link:function(n){n.deleteEvent=function(){n.deleteRequestSent||e.delete({id:n.event._id},function(){n.deleteRequestSent=!0;new t({title:"Delete Request Sent",message:"An email has been sent to the creator of this event with instructions to delete it.",cancelText:"OK"})})}}}}]).directive("switchToggle",function(){return{scope:{model:"=ngModel"},require:"ngModel",link:function(e,t,n,i){t.addClass("switch-toggle");var a=function(){e.model^"undefined"!=typeof n.invert?t.addClass("active"):t.removeClass("active")};e.$watch("model",a),t.bind("click",function(t){e.model=!e.model,i.$setViewValue(e.model,t)})}}}),angular.module("rallly").directive("poll",["$timeout","Participant","ConfirmModal",function(e,t,n){return{restrict:"A",templateUrl:"templates/directives/poll.html",scope:{event:"="},link:function(e){e.defaults=[],e.participant={};var i=[];e.event.$promise.then(function(t){for(var n=["John Example","Jane Specimen","Mark Instance","Mary Case"],i=[],a=0;at)return!1;return!0},e.selectedDate=function(t){i[t]=0;for(var n=0;n30?"on "+e("date")(t,"MMMM d"):r>1?r+" days ago":1==r?"1 day ago":s>1?s+" hours ago":1==s?"an hour ago":l>1?l+" minutes ago":1==l?"a minute ago":"a few seconds ago"}}}]),angular.module("rallly").factory("ConfirmModal",["btfModal",function(e){return function(t){var n;n=e({templateUrl:"templates/confirmmodal.html",controllerAs:"modal",controller:function(){this.title=t.title,this.message=t.message,this.confirm=t.confirm?function(){t.confirm(),n.deactivate()}:!1,this.cancel=n.deactivate,this.confirmText=t.confirmText||"Confirm",this.cancelText=t.cancelText||"Cancel",this.isDestructive=t.isDestructive}}),n.activate(),this.destroy=function(){n.deactivate()}}}]),angular.module("rallly").factory("Notification",["$timeout","btfModal",function(e,t){return function(n){var i;i=t({templateUrl:"templates/notification.html",controllerAs:"notification",controller:function(){this.title=n.title,this.message=n.message,this.close=i.deactivate,this.type=n.type;var t=n.timeout||5e3;
e(i.deactivate,t)}}),i.activate(),this.destroy=function(){i.deactivate()}}}]);
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiLCJ0ZW1wbGF0ZXMuanMiLCJkaXJlY3RpdmVzL2JhY2tJbWcuZGlyZWN0aXZlLmpzIiwiZGlyZWN0aXZlcy9kYXRlcGlja2VyLmRpcmVjdGl2ZS5qcyIsImRpcmVjdGl2ZXMvZGlzY3Vzc2lvbi5kaXJlY3RpdmUuanMiLCJkaXJlY3RpdmVzL2Ryb3Bkb3duLmRpcmVjdGl2ZS5qcyIsImRpcmVjdGl2ZXMvZm9ybS5kaXJlY3RpdmUuanMiLCJkaXJlY3RpdmVzL3BvbGwuZGlyZWN0aXZlLmpzIiwiY29udHJvbGxlcnMvYWJvdXQuY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL2FjY291bnQuY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL2RlbGV0aW9uLmNvbnRyb2xsZXIuanMiLCJjb250cm9sbGVycy9lZGl0ZXZlbnQuY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL2V2ZW50LmNvbnRyb2xsZXIuanMiLCJjb250cm9sbGVycy9ob21lLmNvbnRyb2xsZXIuanMiLCJjb250cm9sbGVycy9uYXZpZ2F0aW9uLmNvbnRyb2xsZXIuanMiLCJjb250cm9sbGVycy9uZXdldmVudC5jb250cm9sbGVyLmpzIiwiY29udHJvbGxlcnMvdmVyaWZpY2F0aW9uLmNvbnRyb2xsZXIuanMiLCJmaWx0ZXJzL2VsYXBzZWQuZmlsdGVyLmpzIiwic2VydmljZXMvbW9kYWwuc2VydmljZS5qcyIsInNlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFFBQUEsT0FBQSxVQUFBLFlBQUEsYUFBQSxlQUFBLGNBQUEsY0FDQSxRQUFBLGlCQUFBLHFCQUFBLG9CQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsRUFBQSxXQUFBLEdBQ0EsRUFBQSxVQUFBLGFBQ0EsRUFDQSxNQUFBLFNBQ0EsSUFBQSxJQUNBLFlBQUEsc0JBQ0EsV0FBQSxhQUVBLE1BQUEsWUFDQSxJQUFBLE9BQ0EsWUFBQSwwQkFDQSxXQUFBLGlCQUVBLE1BQUEsU0FDQSxJQUFBLFNBQ0EsWUFBQSx1QkFDQSxXQUFBLGNBRUEsTUFBQSxZQUNBLElBQUEsWUFDQSxZQUFBLDRCQUVBLE1BQUEsU0FDQSxJQUFBLE9BQ0EsWUFBQSx1QkFDQSxXQUFBLGNBRUEsTUFBQSxhQUNBLElBQUEsWUFDQSxZQUFBLDJCQUNBLFdBQUEsa0JBRUEsTUFBQSxlQUNBLElBQUEseUJBQ0EsV0FBQSxxQkFFQSxNQUFBLGVBQ0EsSUFBQSx5QkFDQSxXQUFBLG9CQUdBLFFBQUEsU0FBQSxZQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsa0JBQUEsR0FBQSxTQUNBLFFBQUEsT0FBQSxPQUNBLFFBQUEsT0FBQSxNQUFBLElBQUEsNkJBQ0EsU0FBQSxPQUFBLFNBQUEsSUFBQSxrQ0FHQSxRQUFBLGVBQUEsWUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLG1DQUFBLEdBQUEsU0FDQSxRQUFBLE9BQUEsWUFHQSxRQUFBLFdBQUEsWUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLCtCQUFBLEdBQUEsU0FDQSxRQUFBLE9BQUEsWUFHQSxRQUFBLFFBQUEsV0FDQSxPQUNBLElBQUEsU0FBQSxHQUNBLFNBQUEsTUFBQSxNQy9EQSxRQUFBLE9BQUEsVUFBQSxLQUFBLGlCQUFBLFNBQUEsR0FBQSxFQUFBLElBQUEsdUJBQUEsOGdCQUNBLEVBQUEsSUFBQSw4QkFBQSxtaUJBQ0EsRUFBQSxJQUFBLDJCQUFBLGl2Q0FDQSxFQUFBLElBQUEsdUJBQUEsdXZEQUNBLEVBQUEsSUFBQSxzQkFBQSwyWkFDQSxFQUFBLElBQUEsMEJBQUEsaXNEQUNBLEVBQUEsSUFBQSwwQkFBQSw0Q0FDQSxFQUFBLElBQUEsOEJBQUEsNE9BQ0EsRUFBQSxJQUFBLHVDQUFBLGtrREFDQSxFQUFBLElBQUEsaUNBQUEsNGlKQUNBLEVBQUEsSUFBQSwrQ0FBQSxzcUNBQ0EsRUFBQSxJQUFBLGdEQUFBLGtrREFDQSxFQUFBLElBQUEsdURBQUEsdWZBQ0EsRUFBQSxJQUFBLG1EQUFBLG96REFDQSxFQUFBLElBQUEsK0NBQUEsMHZDQ2RBLFFBQUEsT0FBQSxVQUNBLFVBQUEsVUFBQSxXQUNBLE1BQUEsVUFBQSxFQUFBLEVBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxPQUNBLEdBQUEsS0FDQSxtQkFBQSxlQUFBLEVBQUEsYUNMQSxRQUFBLE9BQUEsVUFDQSxVQUFBLGFBQUEsV0FDQSxPQUNBLFNBQUEsSUFDQSxRQUFBLFVBQ0EsT0FDQSxNQUFBLFdBQ0EsUUFBQSxLQUVBLEtBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxHQUNBLEVBQUEsTUFBQSxFQUFBLFVBQ0EsUUFBQSxRQUFBLEdBQUEsWUFDQSxXQUFBLEVBQ0EsZ0JBQUEsSUFFQSxHQUFBLGFBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLEtBQ0EsR0FBQSxLQUFBLFNBQUEsRUFBQSxHQUNBLE1BQUEsR0FBQSxVQUFBLEVBQUEsV0FBQSxHQUNBLElBRUEsRUFBQSxjQUFBLEVBQUEsSUFHQSxJQUFBLEdBQUEsU0FBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLEdBQUEsRUFBQSxRQUFBLEVBQUEsT0FBQSxDQUVBLElBQUEsR0FEQSxNQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUNBLEVBQUEsS0FBQSxHQUFBLE1BQUEsRUFBQSxJQUVBLFNBQUEsUUFBQSxHQUFBLFdBQUEsV0FBQSxJQUVBLEdBQUEsaUJBQUEsUUFBQSxHQUVBLEVBQUEsUUFBQSxFQUFBLFlBQ0EsRUFBQSxRQUFBLFVBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLE1BQUEsUUFBQSxFQUNBLEdBQUEsTUFBQSxPQUFBLEVBQUEsSUFHQSxFQUFBLFlBQUEsU0FBQSxTQUFBLEdBQ0EsTUFBQSxJQUFBLEdBQUEsRUFBQSxRQUdBLEdBRkEsT0MxQ0EsUUFBQSxPQUFBLFVBQ0EsVUFBQSxjQUFBLFdBQUEsVUFBQSxlQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsT0FDQSxTQUFBLElBQ0EsWUFBQSx1Q0FDQSxPQUNBLE1BQUEsS0FFQSxLQUFBLFNBQUEsR0FDQSxFQUFBLFVBQ0EsSUFBQSxHQUFBLFFBQUEsUUFBQSxrQkFDQSxHQUFBLFdBQ0EsRUFBQSxVQUFBLEVBQUEsS0FBQSxtQkFFQSxFQUFBLGNBQUEsU0FBQSxHQUNBLEdBQUEsSUFDQSxNQUFBLGdCQUNBLFFBQUEsZ0RBQ0EsWUFBQSxlQUNBLFdBQUEsaUJBQ0EsZUFBQSxFQUNBLFFBQUEsV0FDQSxFQUFBLFFBQUEsR0FBQSxFQUFBLE1BQUEsSUFBQSxJQUFBLEVBQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLFFBS0EsRUFBQSxZQUFBLFdBQ0EsR0FBQSxFQUFBLFlBQUEsT0FBQSxDQUNBLEdBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxRQUNBLEdBQUEsT0FBQSxHQUFBLEVBQUEsTUFBQSxLQUFBLFNBQUEsR0FDQSxFQUFBLE1BQUEsRUFDQSxFQUFBLGFBRUEsRUFBQSxZQUFBLHNCQ25DQSxRQUFBLE9BQUEsVUFDQSxVQUFBLFlBQUEsWUFBQSxTQUFBLEdBQ0EsT0FDQSxTQUFBLElBQ0EsS0FBQSxTQUFBLEVBQUEsR0FDQSxFQUFBLFNBQUEsWUFDQSxFQUFBLE1BQUEsQ0FFQSxJQUFBLEdBQUEsU0FBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLEtBQUEsRUFBQSxRQUFBLE9BQUEsQ0FDQSxJQUNBLEVBQUEsU0FHQSxHQUFBLE9BQUEsV0FDQSxFQUFBLE1BQUEsRUFBQSxLQUNBLEVBQUEsTUFDQSxFQUFBLFNBQUEsUUFDQSxFQUFBLEtBQUEsUUFBQSxLQUVBLEVBQUEsWUFBQSxRQUNBLEVBQUEsT0FBQSxRQUFBLFVDckJBLFFBQUEsT0FBQSxVQUNBLFFBQUEsYUFBQSxXQUNBLEtBQUEsaUJBQUEsMkNBQ0EsS0FBQSxXQUFBLEdBQUEsUUFBQSxLQUFBLGtCQUNBLEtBQUEsWUFBQSxTQUFBLEVBQUEsR0FDQSxNQUFBLEdBQUEsU0FBQSxFQUFBLGVBQ0EsRUFBQSxRQUFBLEVBQUEsY0FDQSxFQUFBLFVBQUEsRUFBQSxnQkFDQSxLQUdBLFVBQUEsWUFBQSxhQUFBLFNBQUEsR0FDQSxPQUNBLE9BQ0EsTUFBQSxJQUNBLEtBQUEsS0FFQSxZQUFBLCtDQUNBLEtBQUEsU0FBQSxHQUNBLEVBQUEsVUFFQSxFQUFBLFdBQUEsRUFBQSxXQUVBLEVBQUEsaUJBQUEsbUJBQUEsU0FBQSxHQUNBLEVBQUEsT0FBQSxLQUFBLEVBQUEsWUFBQSxFQUFBLFVBR0EsRUFBQSxpQkFBQSxvQkFBQSxTQUFBLEdBQ0EsRUFBQSxPQUFBLE1BQUEsRUFBQSxZQUFBLEVBQUEsZ0JBS0EsVUFBQSxhQUFBLGFBQUEsU0FBQSxHQUNBLE9BQ0EsT0FDQSxNQUFBLElBQ0EsS0FBQSxLQUVBLFlBQUEsZ0RBQ0EsS0FBQSxTQUFBLEdBQ0EsRUFBQSxVQUVBLEVBQUEsaUJBQUEsb0JBQUEsU0FBQSxHQUNBLEVBQUEsT0FBQSxNQUFBLEVBQUEsWUFBQSxFQUFBLFdBR0EsRUFBQSxpQkFBQSx1QkFBQSxTQUFBLEdBQ0EsRUFBQSxPQUFBLFNBQUEsRUFBQSxZQUFBLEVBQUEsbUJBTUEsVUFBQSxXQUFBLFdBQ0EsT0FDQSxPQUNBLE1BQUEsSUFDQSxLQUFBLEtBRUEsWUFBQSxrREFHQSxVQUFBLG9CQUFBLGFBQUEsU0FBQSxHQUNBLE9BQ0EsT0FDQSxNQUFBLElBQ0EsS0FBQSxLQUVBLFlBQUEsdURBQ0EsS0FBQSxTQUFBLEdBQ0EsRUFBQSxXQUFBLEVBQUEsc0JBSUEsVUFBQSxnQkFBQSxRQUFBLGVBQUEsU0FBQSxFQUFBLEdBQ0EsT0FDQSxPQUNBLE1BQUEsSUFDQSxLQUFBLEtBRUEsWUFBQSxtREFDQSxLQUFBLFNBQUEsR0FDQSxFQUFBLFlBQUEsV0FDQSxFQUFBLG1CQUNBLEVBQUEsUUFBQSxHQUFBLEVBQUEsTUFBQSxLQUFBLFdBQ0EsRUFBQSxtQkFBQSxDQUNBLElBQUEsSUFDQSxNQUFBLHNCQUNBLFFBQUEsc0ZBQ0EsV0FBQSxlQU9BLFVBQUEsZUFBQSxXQUNBLE9BQ0EsT0FDQSxNQUFBLFlBRUEsUUFBQSxVQUNBLEtBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxHQUNBLEVBQUEsU0FBQSxnQkFDQSxJQUFBLEdBQUEsV0FDQSxFQUFBLE1BQUEsbUJBQUEsR0FBQSxPQUNBLEVBQUEsU0FBQSxVQUVBLEVBQUEsWUFBQSxVQUdBLEdBQUEsT0FBQSxRQUFBLEdBQ0EsRUFBQSxLQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsT0FBQSxFQUFBLE1BQ0EsRUFBQSxjQUFBLEVBQUEsTUFBQSxTQ25IQSxRQUFBLE9BQUEsVUFDQSxVQUFBLFFBQUEsV0FBQSxjQUFBLGVBQUEsU0FBQSxFQUFBLEVBQUEsR0FDQSxPQUNBLFNBQUEsSUFDQSxZQUFBLGlDQUNBLE9BQ0EsTUFBQSxLQUVBLEtBQUEsU0FBQSxHQUNBLEVBQUEsWUFDQSxFQUFBLGNBQ0EsSUFBQSxLQUVBLEdBQUEsTUFBQSxTQUFBLEtBQUEsU0FBQSxHQUdBLElBQUEsR0FGQSxJQUFBLGVBQUEsZ0JBQUEsZ0JBQUEsYUFDQSxLQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUFBLENBQ0EsR0FBQSxJQUFBLEtBQUEsRUFBQSxHQUNBLEdBQUEsUUFDQSxLQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxNQUFBLE9BQUEsSUFBQSxDQUNBLEdBQUEsR0FBQSxLQUFBLFNBQUEsRUFDQSxHQUFBLE1BQUEsR0FBQSxFQUVBLEVBQUEsS0FBQSxHQUVBLEVBQUEsU0FBQSxJQUVBLEVBQUEsT0FBQSxTQUFBLEdBQ0EsR0FBQSxJQUNBLE1BQUEsVUFBQSxFQUFBLEtBQUEsSUFDQSxRQUFBLG1DQUFBLEVBQUEsS0FBQSxrQkFDQSxZQUFBLGVBQ0EsV0FBQSxpQkFDQSxlQUFBLEVBQ0EsUUFBQSxXQUNBLEVBQUEsUUFBQSxHQUFBLEVBQUEsTUFBQSxJQUFBLElBQUEsRUFBQSxLQUFBLFNBQUEsR0FDQSxFQUFBLE1BQUEsUUFLQSxFQUFBLFVBQUEsU0FBQSxHQUVBLElBQUEsR0FEQSxHQUFBLEVBQUEsR0FDQSxFQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFDQSxHQUFBLEVBQUEsR0FBQSxFQUFBLE9BQUEsQ0FFQSxRQUFBLEdBRUEsRUFBQSxhQUFBLFNBQUEsR0FDQSxFQUFBLEdBQUEsQ0FDQSxLQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxNQUFBLGFBQUEsT0FBQSxJQUNBLEVBQUEsTUFBQSxhQUFBLEdBQUEsTUFBQSxJQUFBLEVBQUEsSUFFQSxPQUFBLEdBQUEsSUFFQSxFQUFBLE9BQUEsU0FBQSxHQUNBLEVBQUEsUUFDQSxHQUFBLEVBQUEsTUFBQSxJQUNBLElBQUEsRUFBQSxLQUNBLElBRUEsRUFBQSxLQUFBLFNBQUEsR0FDQSxFQUFBLFNBQUEsRUFBQSxNQUFBLGFBQUEsUUFBQSxJQUFBLFFBQUEsS0FBQSxJQUVBLEVBQUEsT0FBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLGFBQUEsR0FBQSxFQUFBLFNBQUEsSUFFQSxFQUFBLEtBQUEsV0FDQSxHQUFBLEVBQUEsUUFBQSxPQUFBLENBQ0EsR0FBQSxHQUFBLEdBQUEsR0FBQSxFQUFBLFlBQ0EsR0FBQSxPQUFBLEdBQUEsRUFBQSxNQUFBLEtBQUEsU0FBQSxHQUNBLEVBQUEsTUFBQSxFQUNBLEVBQUEsaUJBRUEsRUFBQSxRQUFBLHNCQzFFQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGFBQUEsUUFBQSxTQUFBLEdBQ0EsRUFBQSxJQUFBLG1CQ0ZBLFFBQUEsT0FBQSxVQUNBLFdBQUEsZUFBQSxTQUFBLGVBQUEsU0FBQSxHQUNBLEVBQUEsV0FBQSxnQkNGQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGdCQUFBLFNBQUEsZUFBQSxRQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsRUFBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUEsTUFBQSxXQUNBLEdBQUEsSUFDQSxNQUFBLGdCQUNBLFFBQUEsOEJBQ0EsS0FBQSxVQUNBLFFBQUEsT0FFQSxXQUNBLEdBQUEsSUFDQSxNQUFBLGtCQUNBLFFBQUEsdUZBQ0EsS0FBQSxZQUdBLEVBQUEsR0FBQSxTQUFBLEdBQUEsRUFBQSxPQUFBLFFDaEJBLFFBQUEsT0FBQSxVQUNBLFdBQUEsaUJBQUEsU0FBQSxRQUFBLFNBQUEsV0FBQSxRQUFBLGVBQUEsZUFBQSxRQUFBLFNBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxHQUNBLEdBQUEsR0FBQSxFQUFBLE9BQUEsRUFDQSxHQUFBLE1BQUEsRUFBQSxLQUFBLEdBQUEsR0FBQSxXQUNBLEVBQUEsSUFBQSxTQUFBLEVBQUEsTUFBQSxPQUNBLEVBQUEsT0FBQSxRQUFBLEtBQUEsRUFBQSxRQUNBLFdBQ0EsRUFBQSxHQUFBLGNBRUEsRUFBQSxZQUFBLFdBQ0EsRUFBQSxNQUFBLFFBQUEsS0FBQSxFQUFBLFNBRUEsRUFBQSxVQUFBLFdBQ0EsTUFBQSxNQUFBLFVBQUEsRUFBQSxTQUFBLEtBQUEsVUFBQSxFQUFBLFFBRUEsRUFBQSxlQUFBLFdBQ0EsTUFBQSxNQUFBLFVBQUEsRUFBQSxPQUFBLFFBQUEsS0FBQSxVQUFBLEVBQUEsTUFBQSxRQUVBLEVBQUEsT0FBQSxXQUNBLEdBQUEsRUFBQSxLQUFBLE9BQ0EsR0FBQSxFQUFBLGlCQUNBLENBQUEsR0FBQSxJQUNBLE1BQUEsV0FDQSxRQUFBLG1HQUNBLFlBQUEsZ0JBQ0EsZUFBQSxFQUNBLFFBQUEsV0FDQSxFQUFBLE1BQUEsZ0JBQ0EsV0FLQSxTQUdBLENBQUEsR0FBQSxJQUNBLE1BQUEsY0FDQSxRQUFBLCtEQUNBLEtBQUEsV0FJQSxJQUFBLEdBQUEsV0FDQSxFQUFBLFFBQ0EsR0FBQSxHQUNBLEVBQUEsTUFDQSxXQUNBLEdBQUEsSUFDQSxNQUFBLGdCQUNBLFFBQUEsNkNBQ0EsS0FBQSxXQUVBLEdBQUEsT0FBQSxRQUFBLEtBQUEsRUFBQSxhQ3JEQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGFBQUEsU0FBQSxRQUFBLFNBQUEsUUFBQSxRQUFBLGVBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxPQUFBLEVBRUEsR0FBQSxNQUFBLEVBQUEsS0FBQSxHQUFBLEdBQUEsV0FFQSxFQUFBLElBQUEsRUFBQSxNQUFBLE9BRUEsRUFBQSxTQUFBLEVBQUEsS0FBQSxTQUNBLEdBQUEsRUFBQSxNQUFBLE1BRUEsVUFBQSxLQUVBLFdBQ0EsRUFBQSxHQUFBLGNBR0EsRUFBQSxVQUFBLFdBQ0EsRUFBQSxNQUFBLFVBQUEsRUFDQSxFQUFBLFFBQ0EsR0FBQSxHQUNBLEVBQUEsTUFDQSxXQUNBLEdBQUEsSUFDQSxNQUFBLGFBQ0EsUUFBQSw2Q0FDQSxXQUFBLFVBS0EsRUFBQSxXQUFBLFdBQ0EsRUFBQSxNQUFBLFVBQUEsRUFDQSxFQUFBLFFBQ0EsR0FBQSxHQUNBLEVBQUEsTUFDQSxXQUNBLEdBQUEsSUFDQSxNQUFBLGVBQ0EsUUFBQSxzREFDQSxXQUFBLFVBS0EsRUFBQSxVQUFBLFdBQ0EsRUFBQSxHQUFBLGFBQUEsR0FBQSxFQUFBLE1BQUEsVUM5Q0EsUUFBQSxPQUFBLFVBQ0EsV0FBQSxZQUFBLFNBQUEsU0FBQSxRQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsRUFBQSxJQUFBLHFDQUVBLEVBQUEsU0FBQSxXQUNBLEVBQUEsR0FBQSxnQkNMQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGtCQUFBLFNBQUEsWUFBQSxTQUFBLEVBQUEsR0FDQSxFQUFBLFNBQUEsU0FBQSxHQUNBLE1BQUEsR0FBQSxRQUFBLEdBQ0EsR0FFQSxNQ05BLFFBQUEsT0FBQSxVQUNBLFdBQUEsZ0JBQUEsU0FBQSxRQUFBLFNBQUEsUUFBQSxlQUFBLGVBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FFQSxFQUFBLE1BQUEsdUJBQ0EsRUFBQSxZQUFBLDZGQUVBLEVBQUEsT0FBQSxXQUNBLEdBQUEsRUFBQSxLQUFBLE9BQ0EsRUFBQSxLQUFBLGFBQUEsRUFBQSxPQUNBLFFBQUEsU0FBQSxHQUNBLEVBQUEsTUFBQSxFQUNBLEVBQUEsU0FBQSxFQUFBLEtBQUEsU0FDQSxHQUFBLEVBQUEsTUFBQSxNQUVBLFVBQUEsTUFHQSxNQUFBLFdBQ0EsR0FBQSxJQUNBLE1BQUEsU0FDQSxRQUFBLGtFQUNBLFdBQUEsYUFJQSxDQUFBLEdBQUEsSUFDQSxNQUFBLGNBQ0EsUUFBQSwrREFDQSxLQUFBLFlBS0EsRUFBQSxXQUFBLFFDakNBLFFBQUEsT0FBQSxVQUNBLFdBQUEsb0JBQUEsUUFBQSxlQUFBLFNBQUEsU0FBQSxFQUFBLEVBQUEsR0FDQSxFQUFBLFFBQUEsR0FBQSxFQUFBLE9BQUEsR0FBQSxLQUFBLEVBQUEsT0FBQSxNQUFBLFdBQ0EsR0FBQSxJQUNBLE1BQUEsaUJBQ0EsUUFBQSxtR0FDQSxLQUFBLFVBQ0EsUUFBQSxPQUVBLFdBQ0EsR0FBQSxJQUNBLE1BQUEsc0JBQ0EsUUFBQSxzQ0FDQSxLQUFBLFlBR0EsRUFBQSxHQUFBLFNBQUEsR0FBQSxFQUFBLE9BQUEsUUNoQkEsUUFBQSxPQUFBLFVBQ0EsT0FBQSxXQUFBLFVBQUEsU0FBQSxHQUNBLE1BQUEsVUFBQSxHQUNBLEdBQUEsRUFBQSxDQUNBLEdBQUEsR0FBQSxLQUFBLE1BQUEsR0FDQSxHQUFBLEdBQUEsT0FBQSxVQUNBLEVBQUEsRUFBQSxFQUNBLEVBQUEsS0FBQSxNQUFBLEVBQUEsS0FDQSxFQUFBLEtBQUEsTUFBQSxFQUFBLElBQ0EsRUFBQSxLQUFBLE1BQUEsRUFBQSxJQUNBLEVBQUEsS0FBQSxNQUFBLEVBQUEsR0FDQSxPQUFBLEdBQUEsR0FDQSxNQUFBLEVBQUEsUUFBQSxFQUFBLFVBQ0EsRUFBQSxFQUNBLEVBQUEsWUFDQSxHQUFBLEVBQ0EsWUFDQSxFQUFBLEVBQ0EsRUFBQSxhQUNBLEdBQUEsRUFDQSxjQUNBLEVBQUEsRUFDQSxFQUFBLGVBQ0EsR0FBQSxFQUNBLGVBRUEseUJDMUJBLFFBQUEsT0FBQSxVQUNBLFFBQUEsZ0JBQUEsV0FBQSxTQUFBLEdBRUEsTUFBQSxVQUFBLEdBQ0EsR0FBQSxFQUNBLEdBQUEsR0FDQSxZQUFBLDhCQUNBLGFBQUEsUUFDQSxXQUFBLFdBQ0EsS0FBQSxNQUFBLEVBQUEsTUFDQSxLQUFBLFFBQUEsRUFBQSxRQUNBLEtBQUEsUUFBQSxFQUFBLFFBQUEsV0FBQSxFQUFBLFVBQUEsRUFBQSxlQUFBLEVBQ0EsS0FBQSxPQUFBLEVBQUEsV0FDQSxLQUFBLFlBQUEsRUFBQSxhQUFBLFVBQ0EsS0FBQSxXQUFBLEVBQUEsWUFBQSxTQUNBLEtBQUEsY0FBQSxFQUFBLGlCQUdBLEVBQUEsV0FFQSxLQUFBLFFBQUEsV0FDQSxFQUFBLGtCQ3JCQSxRQUFBLE9BQUEsVUFDQSxRQUFBLGdCQUFBLFdBQUEsV0FBQSxTQUFBLEVBQUEsR0FDQSxNQUFBLFVBQUEsR0FDQSxHQUFBLEVBQ0EsR0FBQSxHQUNBLFlBQUEsOEJBQ0EsYUFBQSxlQUNBLFdBQUEsV0FDQSxLQUFBLE1BQUEsRUFBQSxNQUNBLEtBQUEsUUFBQSxFQUFBLFFBQ0EsS0FBQSxNQUFBLEVBQUEsV0FDQSxLQUFBLEtBQUEsRUFBQSxJQUNBLElBQUEsR0FBQSxFQUFBLFNBQUEsR0FDQTtFQUFBLEVBQUEsV0FBQSxNQUdBLEVBQUEsV0FFQSxLQUFBLFFBQUEsV0FDQSxFQUFBIiwiZmlsZSI6InB1YmxpYy9idWlsZC9hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyJhbmd1bGFyLm1vZHVsZSgncmFsbGx5JywgWyd1aS5yb3V0ZXInLCduZ1Jlc291cmNlJywnYnRmb3JkLm1vZGFsJywnbmdUYWdzSW5wdXQnLCduZ0FuaW1hdGUnXSlcbiAgICAuY29uZmlnKGZ1bmN0aW9uKCRzdGF0ZVByb3ZpZGVyLCAkdXJsUm91dGVyUHJvdmlkZXIsICRsb2NhdGlvblByb3ZpZGVyKXtcbiAgICAgICAgJGxvY2F0aW9uUHJvdmlkZXIuaHRtbDVNb2RlKHRydWUpO1xuICAgICAgICAkdXJsUm91dGVyUHJvdmlkZXIub3RoZXJ3aXNlKFwiL25vdGZvdW5kXCIpXG4gICAgICAgICRzdGF0ZVByb3ZpZGVyXG4gICAgICAgIC5zdGF0ZSgnaW5kZXgnLHtcbiAgICAgICAgICAgIHVybCA6ICcvJyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9ob21lLmh0bWwnLFxuICAgICAgICAgICAgY29udHJvbGxlciA6ICdIb21lQ3RybCdcbiAgICAgICAgfSlcbiAgICAgICAgLnN0YXRlKCduZXdldmVudCcse1xuICAgICAgICAgICAgdXJsIDogJy9uZXcnLFxuICAgICAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL25ld2V2ZW50Lmh0bWwnLFxuICAgICAgICAgICAgY29udHJvbGxlciA6ICdOZXdFdmVudEN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnYWJvdXQnLCB7XG4gICAgICAgICAgICB1cmwgOiAnL2Fib3V0JyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9hYm91dC5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiAnQWJvdXRDdHJsJ1xuICAgICAgICB9KVxuICAgICAgICAuc3RhdGUoJ25vdGZvdW5kJywge1xuICAgICAgICAgICAgdXJsIDogJy9ub3Rmb3VuZCcsXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvbm90Zm91bmQuaHRtbCdcbiAgICAgICAgfSlcbiAgICAgICAgLnN0YXRlKCdldmVudCcse1xuICAgICAgICAgICAgdXJsIDogJy86aWQnLFxuICAgICAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2V2ZW50Lmh0bWwnLFxuICAgICAgICAgICAgY29udHJvbGxlciA6ICdFdmVudEN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZWRpdGV2ZW50Jywge1xuICAgICAgICAgICAgdXJsOiAnLzppZC9lZGl0JyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9lZGl0ZXZlbnQuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0VkaXRFdmVudEN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgndmVyaWZ5ZXZlbnQnLCB7XG4gICAgICAgICAgICB1cmwgOiAnL3ZlcmlmeS86aWQvY29kZS86Y29kZScsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ1ZlcmlmaWNhdGlvbkN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZGVsZXRlZXZlbnQnLCB7XG4gICAgICAgICAgICB1cmwgOiAnL2RlbGV0ZS86aWQvY29kZS86Y29kZScsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0RlbGV0aW9uQ3RybCdcbiAgICAgICAgfSlcbiAgICB9KVxuICAgIC5mYWN0b3J5KCdFdmVudCcsIGZ1bmN0aW9uKCRyZXNvdXJjZSl7XG4gICAgICAgIHJldHVybiAkcmVzb3VyY2UoJy9hcGkvZXZlbnQvOmlkJywgeyBpZCA6ICdAX2lkJyB9LCB7XG4gICAgICAgICAgICAndXBkYXRlJyA6IHsgbWV0aG9kIDogJ1BVVCcgfSxcbiAgICAgICAgICAgICd2ZXJpZnknIDogeyBtZXRob2QgOiAnR0VUJywgdXJsIDogJy9hcGkvZXZlbnQvOmlkL2NvZGUvOmNvZGUnIH0sXG4gICAgICAgICAgICAnZGVzdHJveSc6IHsgbWV0aG9kIDogJ0RFTEVURScsIHVybDogJy9hcGkvZXZlbnQvOmlkL2NvZGUvOmNvZGUnIH1cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICAuZmFjdG9yeSgnUGFydGljaXBhbnQnLCBmdW5jdGlvbigkcmVzb3VyY2Upe1xuICAgICAgICByZXR1cm4gJHJlc291cmNlKCcvYXBpL2V2ZW50LzppZC9wYXJ0aWNpcGFudC86cGlkJywgeyBpZDogJ0BfaWQnfSwge1xuICAgICAgICAgICAgJ3VwZGF0ZScgOiB7IG1ldGhvZCA6ICdQVVQnIH1cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICAuZmFjdG9yeSgnQ29tbWVudCcsIGZ1bmN0aW9uKCRyZXNvdXJjZSl7XG4gICAgICAgIHJldHVybiAkcmVzb3VyY2UoJy9hcGkvZXZlbnQvOmlkL2NvbW1lbnQvOmNpZCcsIHsgaWQgOiAnQF9pZCcgfSwge1xuICAgICAgICAgICAgJ3VwZGF0ZScgOiB7IG1ldGhvZCA6ICdQVVQnIH1cbiAgICAgICAgfSlcbiAgICB9KVxuICAgIC5mYWN0b3J5KCdUaXRsZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZXQgOiBmdW5jdGlvbih0aXRsZSl7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuIiwiYW5ndWxhci5tb2R1bGUoXCJyYWxsbHlcIikucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7JHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2Fib3V0Lmh0bWxcIixcIjxkaXYgc3R5bGU9XFxcIm1heC13aWR0aDo2MDBweFxcXCI+XFxuICAgIDxoMT5XaGF0IGlzIFJhbGxseT88L2gxPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJybC1wYWdlLWRlc2NcXFwiPlJhbGxseSBpcyBhIGNvbGxhYm9yYXRpdmUgc2NoZWR1bGluZyBzZXJ2aWNlIHRoYXQgbWFrZXMgZGVjaWRpbmcgb24gYSBkYXRlIGZhc3QgYW5kIGVhc3kuPC9kaXY+XFxuICAgIDxoMj5IaSwgSVxcJ20gTHVrZSE8L2gyPlxcbiAgICA8cD5cXG4gICAgICAgIEkgY3JlYXRlZCBSYWxsbHkgYXMgc2lkZSBwcm9qZWN0IHRvIGhlbHAgbWUgbGVhcm4gc29tZSBuZXcgdGVjaG5vbG9naWVzLiBJIGRlY2lkZWQgdG8gcHVibGlzaCBpdCBiZWNhdXNlIEkgdGhvdWdodCBvdGhlciBwZW9wbGUgbWlnaHQgZmluZCBpdCB1c2VmdWwuIFJhbGxseSBpcyBhIGNvbXBsZXRlbHkgZnJlZSBzZXJ2aWNlLiBJbiBmYWN0IGl0IGlzIGV2ZW4gb3BlbiBzb3VyY2UuIFlvdSBjYW4gbG9vayBhdCB0aGUgbGF0ZXN0IHNvdXJjZSBjb2RlIG9uIEdpdGh1Yi5cXG4gICAgPC9wPlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9jb25maXJtbW9kYWwuaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwicmwtbW9kYWwtb3ZlcmxheVxcXCIgbmctY2xpY2s9XFxcIm1vZGFsLmNhbmNlbCgpXFxcIj48L2Rpdj5cXG5cXG48ZGl2IGNsYXNzPVxcXCJybC1tb2RhbFxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInJsLW1vZGFsLXRpdGxlXFxcIj57e21vZGFsLnRpdGxlfX08L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicmwtbW9kYWwtbWVzc2FnZVxcXCI+XFxuICAgICAgICB7e21vZGFsLm1lc3NhZ2V9fVxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicmwtbW9kYWwtYWN0aW9uc1xcXCI+XFxuICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgbmctY2xpY2s9XFxcIm1vZGFsLmNvbmZpcm0oKVxcXCIgbmctc2hvdz1cXFwibW9kYWwuY29uZmlybVxcXCIgY2xhc3M9XFxcImJ0blxcXCIgbmctY2xhc3M9XFxcIntkYW5nZXIgOiBtb2RhbC5pc0Rlc3RydWN0aXZlfVxcXCI+e3ttb2RhbC5jb25maXJtVGV4dH19PC9idXR0b24+XFxuICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgbmctY2xpY2s9XFxcIm1vZGFsLmNhbmNlbCgpXFxcIiAgY2xhc3M9XFxcImJ0blxcXCI+e3ttb2RhbC5jYW5jZWxUZXh0fX08L2J1dHRvbj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2VkaXRldmVudC5odG1sXCIsXCI8ZGl2IG5nLXNob3c9XFxcImV2ZW50Ll9pZFxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImJveFxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJib3gtdGl0bGVcXFwiPkVkaXQgRXZlbnQ8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImJveC1kZXNjcmlwdGlvblxcXCI+XFxuICAgICAgICAgICAgWW91IGNhbiBtYWtlcyBjaGFuZ2VzIHRvIHlvdXIgZXhpc3RpbmcgZXZlbnQgYnkgY2hhbmdpbmcgdGhlIGZpZWxkcyBpbiB0aGUgZm9ybSBiZWxvdy5cXG4gICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPGZvcm0gbm92YWxpZGF0ZSBuYW1lPVxcXCJmb3JtXFxcIiBuZy1zdWJtaXQ9XFxcInN1Ym1pdCgpXFxcIj5cXG5cXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIHVzZXItZm9ybSBmb3JtPVxcXCJmb3JtXFxcIiBldmVudD1cXFwiZXZlbnRcXFwiPlxcblxcbiAgICAgICAgICAgIDwvc2VjdGlvbj5cXG5cXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIGV2ZW50LWZvcm0gZm9ybT1cXFwiZm9ybVxcXCIgZXZlbnQ9XFxcImV2ZW50XFxcIj5cXG5cXG4gICAgICAgICAgICA8L3NlY3Rpb24+XFxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XFxcImJveC1zZWN0aW9uXFxcIiBkYXRlLWZvcm0gZm9ybT1cXFwiZm9ybVxcXCIgZXZlbnQ9XFxcImV2ZW50XFxcIj5cXG5cXG4gICAgICAgICAgICA8L3NlY3Rpb24+XFxuXFxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XFxcImJveC1zZWN0aW9uXFxcIiBzZXR0aW5ncy1mb3JtIGZvcm09XFxcImZvcm1cXFwiIGV2ZW50PVxcXCJldmVudFxcXCI+XFxuXFxuICAgICAgICAgICAgPC9zZWN0aW9uPlxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImJveC1jb250cm9scyBib3gtYm90dG9tLXN0aWNreVxcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwic3VibWl0XFxcIiBuZy1zaG93PVxcXCJkaWRDaGFuZ2UoKVxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCIgbmctY2xhc3M9XFxcIntkaXNhYmxlZCA6ICFkaWRDaGFuZ2UoKX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgU2F2ZSBDaGFuZ2VzXFxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgbmctY2xpY2s9XFxcInVuZG9DaGFuZ2VzKClcXFwiIGNsYXNzPVxcXCJidG5cXFwiIG5nLXNob3c9XFxcImRpZENoYW5nZSgpXFxcIj5VbmRvIENoYW5nZXM8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgPGEgaHJlZj1cXFwiL3t7ZXZlbnQuX2lkfX1cXFwiIGNsYXNzPVxcXCJidG5cXFwiIG5nLWhpZGU9XFxcImRpZENoYW5nZSgpXFxcIj5Eb25lPC9hPlxcbiAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPC9mb3JtPlxcblxcbiAgICA8L2Rpdj5cXG5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvZXZlbnQuaHRtbFwiLFwiPGRpdiBuZy1zaG93PVxcXCJldmVudC5faWQgJiYgIWV2ZW50LmlzRGVsZXRlZFxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImJveCBcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZXZlbnQtaGVhZGVyXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhdmF0YXJcXFwiPlxcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9ldmVudGljb24ucG5nXFxcIiB3aWR0aD1cXFwiMzJcXFwiIC8+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGV0YWlsc1xcXCI+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInRpdGxlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7ZXZlbnQudGl0bGV9fVxcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInRpdGxlLWxhYmVsIGRhbmdlclxcXCIgbmctc2hvdz1cXFwiZXZlbnQuaXNDbG9zZWRcXFwiPlBvbGwgQ2xvc2VkPC9zcGFuPlxcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInRpdGxlLWxhYmVsIHN1Y2Nlc3NcXFwiIG5nLWhpZGU9XFxcImV2ZW50LmlzQ2xvc2VkXFxcIj5Qb2xsIE9wZW48L3NwYW4+XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzdWJ0aXRsZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICBDcmVhdGVkIGJ5IDxhIGhyZWY9XFxcIm1haWx0bzp7e2V2ZW50LmNyZWF0b3IuZW1haWx9fVxcXCI+e3tldmVudC5jcmVhdG9yLm5hbWV9fTwvYT4gJmJ1bGw7IHt7ZXZlbnQuY3JlYXRlZCB8IGVsYXBzZWR9fVxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhY3Rpb25zXFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cXFwiYnRuXFxcIiBuZy1jbGljaz1cXFwiZWRpdEV2ZW50KClcXFwiPkVkaXQgRXZlbnQ8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiYm94LXNpZGUtc3RpY2t5IGV2ZW50LWRlc2NyaXB0aW9uXFxcIiBuZy1zaG93PVxcXCJldmVudC5kZXNjcmlwdGlvblxcXCI+e3tldmVudC5kZXNjcmlwdGlvbn19PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJib3gtYm90dG9tLXN0aWNreSBldmVudC1sb2NhdGlvblxcXCIgbmctc2hvdz1cXFwiZXZlbnQubG9jYXRpb25cXFwiPlxcbiAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL2xvY2F0aW9uLnBuZ1xcXCIgd2lkdGg9XFxcIjE4XFxcIiAvPjxhIGhyZWY9XFxcImh0dHA6Ly9nb29nbGUuY29tL21hcHM/cT17e2V2ZW50LmxvY2F0aW9ufX1cXFwiIHRhcmdldD1cXFwiX2JsYW5rXFxcIj57e2V2ZW50LmxvY2F0aW9ufX08L2E+XFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImJveCBib3gteC1zY3JvbGxcXFwiPlxcbiAgICAgICAgPGRpdiBwb2xsIGV2ZW50PVxcXCJldmVudFxcXCIgY2xhc3M9XFxcInBvbGxcXFwiPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcblxcbiAgICA8ZGl2IGNsYXNzPVxcXCJib3hcXFwiIG5nLWhpZGU9XFxcImV2ZW50LmNvbW1lbnRzLmxlbmd0aCA9PSAwICYmIGV2ZW50LmlzQ2xvc2VkXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImJveC10aXRsZVxcXCI+XFxuICAgICAgICAgICAgRGlzY3Vzc2lvblxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJib3gtZGVzY3JpcHRpb25cXFwiPlxcbiAgICAgICAgICAgIFlvdSBjYW4gZGlzY3VzcyB0aGUgZXZlbnQgd2l0aCB5b3VyIGZyaWVuZHMgYnkgbGVhdmluZyBhIGNvbW1lbnQgYmVsb3cuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgZGlzY3Vzc2lvbiBldmVudD1cXFwiZXZlbnRcXFwiPlxcblxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9ob21lLmh0bWxcIixcIjxkaXYgY2xhc3M9XFxcInBhZ2UtcGxhY2Vob2xkZXJcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbWFnZVxcXCI+XFxuICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9tYXJrX2xhcmdlLnBuZ1xcXCIgd2lkdGg9XFxcIjY3XFxcIiAvPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwidGl0bGVcXFwiPlxcbiAgICAgICAgU2NoZWR1bGUgYW4gRXZlbnRcXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbnRlbnRcXFwiPlxcbiAgICAgICAgV2FudCB0byBob3N0IGFuIGV2ZW50IGJ1dCBjYW7igJl0IGRlY2lkZSBvbiBhIGRhdGU/IENsaWNrIG9uIHRoZSBidXR0b24gYmVsb3cgdG8gc3RhcnQhXFxuICAgIDwvZGl2PlxcbiAgICA8YnV0dG9uIG5nLWNsaWNrPVxcXCJuZXdFdmVudCgpXFxcIiBjbGFzcz1cXFwiYnRuXFxcIj5TY2hlZHVsZSBOZXcgRXZlbnQ8L2J1dHRvbj5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvbmV3ZXZlbnQuaHRtbFwiLFwiPGRpdiBuZy1oaWRlPVxcXCJldmVudFVybFxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImJveFxcXCIgbmctY2xhc3M9XFxcIntcXCdhbmltYXRlZCBzaGFrZVxcJzogZm9ybS4kc3VibWl0dGVkICYmIGZvcm0uJGludmFsaWQgfVxcXCI+XFxuXFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJib3gtdGl0bGVcXFwiPlNjaGVkdWxlIGEgTmV3IEV2ZW50PC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJib3gtZGVzY3JpcHRpb25cXFwiPlxcbiAgICAgICAgICAgIEZpbGwgaW4gdGhlIGZvcm0gYmVsb3cgdG8gY3JlYXRlIHlvdXIgZXZlbnQgYW5kIHNoYXJlIGl0IHdpdGggeW91ciBmcmllbmRzIGFuZCBjb2xsZWFndWVzLlxcbiAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8Zm9ybSBub3ZhbGlkYXRlIGF1dG9jb21wbGV0ZT1cXFwib2ZmXFxcIiBuYW1lPVxcXCJmb3JtXFxcIiBuZy1zdWJtaXQ9XFxcInN1Ym1pdCgpXFxcIj5cXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIHVzZXItZm9ybSBmb3JtPVxcXCJmb3JtXFxcIiBldmVudD1cXFwiZXZlbnRcXFwiPlxcblxcbiAgICAgICAgICAgIDwvc2VjdGlvbj5cXG5cXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIGV2ZW50LWZvcm0gZm9ybT1cXFwiZm9ybVxcXCIgZXZlbnQ9XFxcImV2ZW50XFxcIj5cXG5cXG4gICAgICAgICAgICA8L3NlY3Rpb24+XFxuXFxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XFxcImJveC1zZWN0aW9uXFxcIiBkYXRlLWZvcm0gZm9ybT1cXFwiZm9ybVxcXCIgZXZlbnQ9XFxcImV2ZW50XFxcIj5cXG5cXG4gICAgICAgICAgICA8L3NlY3Rpb24+XFxuXFxuICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XFxcImJveC1zZWN0aW9uXFxcIiBwYXJ0aWNpcGFudHMtZm9ybSBmb3JtPVxcXCJmb3JtXFxcIiBldmVudD1cXFwiZXZlbnRcXFwiPlxcblxcbiAgICAgICAgICAgIDwvc2VjdGlvbj5cXG5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJib3gtY29udHJvbHMgYm94LWJvdHRvbS1zdGlja3lcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcInN1Ym1pdFxcXCIgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCI+Q3JlYXRlIEV2ZW50PC9idXR0b24+XFxuICAgICAgICAgICAgPC9kaXY+XFxuXFxuICAgICAgICA8L2Zvcm0+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcbjxkaXYgbmctc2hvdz1cXFwiZXZlbnRVcmxcXFwiIGNsYXNzPVxcXCJib3hcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJib3gtbWVzc2FnZVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWFpbi1pbWFnZVxcXCI+XFxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL3N1Y2Nlc3NfbGFyZ2UucG5nXFxcIiB3aWR0aD1cXFwiMTAwXFxcIiAvPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJ0aXRsZVxcXCI+RXZlbnQgQ3JlYXRlZDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJjb250ZW50XFxcIj5cXG4gICAgICAgIFlvdXIgZXZlbnQgaGFzIGJlZW4gY3JlYXRlZCBzdWNjZXNzZnVsbHkhIFlvdSBzaG91bGQgcmVjZWl2ZSBhbiBlbWFpbCBzaG9ydGx5IHdpdGggaW5zdHJ1Y3Rpb25zIHRvIHZlcmlmeSB5b3VyIGVtYWlsIGFkZHJlc3MuXFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtaW5pLWRpdmlkZXJcXFwiPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICA8aW5wdXQgdHlwZT1cXFwidGV4dFxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgZGlzYWJsZWQ9XFxcInRydWVcXFwiIHZhbHVlPVxcXCJ7e2V2ZW50VXJsfX1cXFwiIC8+XFxuICAgICAgICA8YSBocmVmPVxcXCJ7e2V2ZW50VXJsfX1cXFwiIGNsYXNzPVxcXCJidG4gZm9ybS1idG5cXFwiPkdPPC9hPlxcbiAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL25vdGZvdW5kLmh0bWxcIixcIjxoMT5FcnJvciA0MDQ8L2gxPlxcbjxoMj5Ob3QgRm91bmQ8L2gyPlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9ub3RpZmljYXRpb24uaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwibm90aWZpY2F0aW9uIHt7bm90aWZpY2F0aW9uLnR5cGV9fVxcXCIgbmctY2xpY2s9XFxcIm5vdGlmaWNhdGlvbi5jbG9zZSgpXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwidGl0bGVcXFwiPlxcbiAgICAgICAge3tub3RpZmljYXRpb24udGl0bGV9fVxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWVzc2FnZVxcXCI+XFxuICAgICAgICB7e25vdGlmaWNhdGlvbi5tZXNzYWdlfX1cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2RpcmVjdGl2ZXMvZGlzY3Vzc2lvbi5odG1sXCIsXCI8dWwgY2xhc3M9XFxcImNvbW1lbnQtdGhyZWFkXFxcIiBuZy1zaG93PVxcXCJldmVudC5jb21tZW50cy5sZW5ndGhcXFwiPlxcbiAgICA8bGkgbmctcmVwZWF0PVxcXCJjb21tZW50IGluIGV2ZW50LmNvbW1lbnRzXFxcIiBjbGFzcz1cXFwiY29tbWVudFxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJhdmF0YXItc2VjdGlvblxcXCI+XFxuICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvYXZhdGFyLnBuZ1xcXCIgLz5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29tbWVudC1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8YSBocmVmPVxcXCIjXFxcIiBjbGFzcz1cXFwiY29tbWVudC1kZWxldGVcXFwiIG5nLWNsaWNrPVxcXCJkZWxldGVDb21tZW50KGNvbW1lbnQpXFxcIj4mdGltZXM7PC9hPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1ldGFcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibmFtZVxcXCI+e3tjb21tZW50LmF1dGhvci5uYW1lfX08L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJ0aW1lXFxcIj57e2NvbW1lbnQuY3JlYXRlZCB8IGVsYXBzZWR9fTwvc3Bhbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb250ZW50XFxcIj57e2NvbW1lbnQuY29udGVudH19PC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9saT5cXG48L3VsPlxcbjxmb3JtIG5vdmFsaWRhdGUgbmctc3VibWl0PVxcXCJwb3N0Q29tbWVudCgpXFxcIiBuYW1lPVxcXCJjb21tZW50Rm9ybVxcXCIgY2xhc3M9XFxcImNvbW1lbnQtZm9ybVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImF2YXRhci1zZWN0aW9uXFxcIj5cXG4gICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL2F2YXRhci5wbmdcXFwiIC8+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJpbnB1dC1zZWN0aW9uIGZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiY29udGVudC1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9XFxcImZvcm0tY29udHJvbFxcXCIgcmVxdWlyZWQgbmctbW9kZWw9XFxcImNvbW1lbnQuY29udGVudFxcXCIgcGxhY2Vob2xkZXI9XFxcIldyaXRlIGEgY29tbWVudC4uLlxcXCI+PC90ZXh0YXJlYT5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwibmFtZS1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJuYW1lLWNvbnRhaW5lclxcXCI+XFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiByZXF1aXJlZCBwbGFjZWhvbGRlcj1cXFwiWW91ciBOYW1lXFxcIiBuZy1tb2RlbD1cXFwiY29tbWVudC5hdXRob3IubmFtZVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJzdWJtaXRcXFwiIGNsYXNzPVxcXCJidG5cXFwiPlBvc3QgQ29tbWVudDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZm9ybS1lcnJvclxcXCIgbmctc2hvdz1cXFwiY29tbWVudEZvcm0uJHN1Ym1pdHRlZCAmJiBjb21tZW50Rm9ybS4kZXJyb3JcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvZXJyb3IucG5nXFxcIiB3aWR0aD1cXFwiMTRcXFwiIC8+IE1ha2Ugc3VyZSB5b3UgZmlsbCBpbiBhbGwgdGhlIGZpZWxkcy5cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZm9ybT5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9wb2xsLmh0bWxcIixcIjxkaXYgY2xhc3M9XFxcInBvbGwtaGVhZGVyXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiaGVhZGVyIHBhcnRpY2lwYW50cy1oZWFkZXJcXFwiPlxcbiAgICAgICAge3tldmVudC5wYXJ0aWNpcGFudHMubGVuZ3RofX0gcGFydGljaXBhbnRzXFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJoZWFkZXIgZGF0ZS1oZWFkZXJcXFwiIG5nLXJlcGVhdD1cXFwiZGF0ZSBpbiBldmVudC5kYXRlc1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkYXRpY29uXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkb3dcXFwiPlxcbiAgICAgICAgICAgICAgICB7e2RhdGUgfCBkYXRlOiBcXCdFRUVcXCd9fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImRheVxcXCI+XFxuICAgICAgICAgICAgICAgIHt7ZGF0ZSB8IGRhdGU6IFxcJ2RcXCd9fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vbnRoXFxcIj5cXG4gICAgICAgICAgICAgICAge3tkYXRlIHwgZGF0ZSA6IFxcJ01NTVxcJ319XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImNvdW50XFxcIiBuZy1zaG93PVxcXCJzZWxlY3RlZERhdGUoJGluZGV4KVxcXCIgbmctY2xhc3M9e3RvcDppc1RvcERhdGUoJGluZGV4KX0+e3tzZWxlY3RlZERhdGUoJGluZGV4KX19PC9zcGFuPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJoZWFkZXIgYWN0aW9ucy1oZWFkZXJcXFwiPlxcblxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2IGNsYXNzPVxcXCJwb2xsLWJvZHlcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJwb2xsLWVudHJ5XFxcIiBuZy1yZXBlYXQ9XFxcInBhcnRpY2lwYW50IGluIGV2ZW50LnBhcnRpY2lwYW50c1xcXCI+XFxuICAgICAgICA8Zm9ybSBub3ZhbGlkYXRlIG5nLXN1Ym1pdD1cXFwidXBkYXRlKHBhcnRpY2lwYW50KTsgZWRpdE1vZGUgPSBmYWxzZVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY2VsbCBuYW1lLWNlbGxcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiYXZhdGFyIHN0eWxlLXt7JGluZGV4ICsgMX19XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL3VzZXIucG5nXFxcIiB3aWR0aD1cXFwiMTFcXFwiIC8+XFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IHJlcXVpcmVkIGF1dG9jb21wbGV0ZT1cXFwib2ZmXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBuZy1tb2RlbD1cXFwicGFydGljaXBhbnQubmFtZVxcXCIgbmctc2hvdz1cXFwiZWRpdE1vZGVcXFwiIHZhbHVlPVxcXCJwYXJ0aWNpcGFudC5uYW1lXFxcIi8+XFxuICAgICAgICAgICAgICAgIDxzcGFuIG5nLWhpZGU9XFxcImVkaXRNb2RlXFxcIiBjbGFzcz1cXFwibmFtZSBlZGl0YWJsZVxcXCIgbmctY2xpY2s9XFxcImVkaXRNb2RlID0gdHJ1ZSAmJiAhZXZlbnQuaXNDbG9zZWQ7IGVkaXQocGFydGljaXBhbnQpXFxcIj57e3BhcnRpY2lwYW50Lm5hbWV9fTwvc3Bhbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIHZvdGUtY2VsbFxcXCIgbmctcmVwZWF0PVxcXCJkYXRlIGluIGV2ZW50LmRhdGVzXFxcIj5cXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvdGlja0AyeC5wbmdcXFwiICB3aWR0aD1cXFwiMTZcXFwiIG5nLWhpZGU9XFxcImVkaXRNb2RlXFxcIiBuZy1pZj1cXFwicGFydGljaXBhbnQuZGF0ZXNbJGluZGV4XVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvbm9wZUAyeC5wbmdcXFwiIHdpZHRoPVxcXCI4XFxcIiBuZy1oaWRlPVxcXCJlZGl0TW9kZVxcXCIgbmctaWY9XFxcIiFwYXJ0aWNpcGFudC5kYXRlc1skaW5kZXhdXFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgbmctbW9kZWw9XFxcInBhcnRpY2lwYW50LmRhdGVzWyRpbmRleF1cXFwiIG5nLXNob3c9XFxcImVkaXRNb2RlXFxcIiBuZy1mYWxzZS12YWx1ZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJvdmVybGF5XFxcIiBuZy1zaG93PVxcXCJlZGl0TW9kZVxcXCIgbmctY2xpY2s9XFxcInBhcnRpY2lwYW50LmRhdGVzWyRpbmRleF0gPSAhcGFydGljaXBhbnQuZGF0ZXNbJGluZGV4XVxcXCI+PC9kaXY+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY2VsbCBhY3Rpb24tY2VsbFxcXCIgbmctaGlkZT1cXFwiZXZlbnQuaXNDbG9zZWRcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgbmctaGlkZT1cXFwiZWRpdE1vZGVcXFwiIG5nLWNsaWNrPVxcXCJlZGl0TW9kZSA9IHRydWU7IGVkaXQocGFydGljaXBhbnQpXFxcIiBjbGFzcz1cXFwiYnRuIGhvdmVyXFxcIj5FZGl0PC9idXR0b24+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBuZy1oaWRlPVxcXCJlZGl0TW9kZVxcXCIgbmctY2xpY2s9XFxcImRlbGV0ZShwYXJ0aWNpcGFudClcXFwiIGNsYXNzPVxcXCJidG4gZGFuZ2VyIGhvdmVyXFxcIj5EZWxldGU8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJzdWJtaXRcXFwiIG5nLXNob3c9XFxcImVkaXRNb2RlXFxcIiBjbGFzcz1cXFwiYnRuXFxcIj5TYXZlPC9idXR0b24+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBuZy1zaG93PVxcXCJlZGl0TW9kZVxcXCIgbmctY2xpY2s9XFxcImVkaXRNb2RlID0gZmFsc2U7IGNhbmNlbCgkaW5kZXgpXFxcIiBjbGFzcz1cXFwiYnRuXFxcIj5DYW5jZWw8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZm9ybT5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBvbGwtZXhhbXBsZVxcXCIgbmctY2xhc3M9XFxcIntoaWRkZW4gOiBldmVudC5wYXJ0aWNpcGFudHMubGVuZ3RoID4gMH1cXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwicG9sbC1lbnRyeVxcXCIgbmctcmVwZWF0PVxcXCJleGFtcGxlIGluIGV4YW1wbGVzXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIG5hbWUtY2VsbFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJhdmF0YXIgc3R5bGUte3skaW5kZXggKyAxfX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvdXNlci5wbmdcXFwiIHdpZHRoPVxcXCIxMVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwibmFtZVxcXCI+e3tleGFtcGxlLm5hbWV9fTwvc3Bhbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIHZvdGUtY2VsbFxcXCIgbmctcmVwZWF0PVxcXCJkYXRlIGluIGV2ZW50LmRhdGVzXFxcIj5cXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvdGlja0AyeC5wbmdcXFwiICB3aWR0aD1cXFwiMTZcXFwiIG5nLWlmPVxcXCJleGFtcGxlLmRhdGVzWyRpbmRleF1cXFwiIC8+XFxuICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL25vcGVAMngucG5nXFxcIiB3aWR0aD1cXFwiOFxcXCIgbmctaWY9XFxcIiFleGFtcGxlLmRhdGVzWyRpbmRleF1cXFwiIC8+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY2VsbCBhY3Rpb24tY2VsbFxcXCI+XFxuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcIm92ZXJsYXlcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm92ZXJsYXktdGV4dFxcXCI+XFxuICAgICAgICAgICAgICAgIEZpbGwgaW4gdGhlIGZvcm0gYmVsb3cgdG8gZ2V0IHN0YXJ0ZWRcXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBuZy1oaWRlPVxcXCJldmVudC5pc0Nsb3NlZFxcXCIgY2xhc3M9XFxcInBvbGwtZW50cnkgaGlnaGxpZ2h0XFxcIj5cXG4gICAgICAgIDxmb3JtIG5vdmFsaWRhdGUgbmFtZT1cXFwiZm9ybW5ld1xcXCIgbmctc3VibWl0PVxcXCJzYXZlKClcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNlbGwgbmFtZS1jZWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImF2YXRhciBzdHlsZS17e3BhcnRpY2lwYW50LnN0eWxlfX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvdXNlci5wbmdcXFwiIHdpZHRoPVxcXCIxMVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVxcXCJvZmZcXFwiIG5hbWU9XFxcInVzZXJuYW1lXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBwbGFjZWhvbGRlcj1cXFwiWW91ciBuYW1lLi4uXFxcIiBuZy1tb2RlbD1cXFwicGFydGljaXBhbnQubmFtZVxcXCIgcmVxdWlyZWQgdmFsdWU9XFxcInBhcnRpY2lwYW50Lm5hbWVcXFwiLz5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIHZvdGUtY2VsbFxcXCIgbmctcmVwZWF0PVxcXCJkYXRlIGluIGV2ZW50LmRhdGVzXFxcIj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IG5nLW1vZGVsPVxcXCJwYXJ0aWNpcGFudC5kYXRlc1skaW5kZXhdXFxcIiBuZy1mYWxzZS12YWx1ZT1cXFwiZmFsc2VcXFwiIHR5cGU9XFxcImNoZWNrYm94XFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJvdmVybGF5XFxcIiBuZy1jbGljaz1cXFwicGFydGljaXBhbnQuZGF0ZXNbJGluZGV4XSA9ICFwYXJ0aWNpcGFudC5kYXRlc1skaW5kZXhdXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIGFjdGlvbi1jZWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJzdWJtaXRcXFwiIG5nLWNsYXNzPVxcXCJ7IFxcJ2FuaW1hdGVkIHNoYWtlXFwnIDogZm9ybW5ldy4kc3VibWl0dGVkICYmIGZvcm1uZXcuJGludmFsaWQgIH1cXFwiIGNsYXNzPVxcXCJidG5cXFwiPlNhdmU8L2J1dHRvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZm9ybT5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2RpcmVjdGl2ZXMvZXZlbnRGb3JtL2RhdGVGb3JtLmh0bWxcIixcIjxkaXYgY2xhc3M9XFxcInNlY3Rpb24tZGV0YWlsc1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPkNob29zZSBEYXRlczwvZGl2PlxcbiAgICA8dWwgY2xhc3M9XFxcImRhdGljb24tbGlzdFxcXCI+XFxuICAgICAgICA8bGkgbmctcmVwZWF0PVxcXCJkYXRlIGluIGV2ZW50LmRhdGVzXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkYXRpY29uXFxcIj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZG93XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7ZGF0ZSB8IGRhdGU6IFxcJ0VFRVxcJ319XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkYXlcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAge3tkYXRlIHwgZGF0ZTogXFwnZFxcJ319XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb250aFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICB7e2RhdGUgfCBkYXRlIDogXFwnTU1NXFwnfX1cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJkZWxldGVcXFwiIG5nLWNsaWNrPVxcXCJkYXRlcGlja2VyLnVuc2V0RGF0ZShkYXRlKVxcXCI+PC9zcGFuPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9saT5cXG4gICAgPC91bD5cXG48L2Rpdj5cXG48ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLW1haW5cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLXJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJlbWFpbFxcXCI+Q2FsZW5kYXI8L2xhYmVsPlxcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJmb3JtLWVycm9yXFxcIiBuZy1zaG93PVxcXCIoZm9ybS5kYXRlcGlja2VyLiRkaXJ0eSB8fCBmb3JtLiRzdWJtaXR0ZWQpICYmIGZvcm0uZGF0ZXBpY2tlci4kZXJyb3IucmVxdWlyZWRcXFwiPlxcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9lcnJvci5wbmdcXFwiIHdpZHRoPVxcXCIxNFxcXCIgLz4gWW91IG5lZWQgdG8gc2VsZWN0IGEgZmV3IGRhdGVzXFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIDxkaXYgZGF0ZXBpY2tlciByZXF1aXJlZCBuYW1lPVxcXCJkYXRlcGlja2VyXFxcIiBjb250cm9sPVxcXCJkYXRlcGlja2VyXFxcIiBuZy1tb2RlbD1cXFwiZXZlbnQuZGF0ZXNcXFwiPlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9kaXJlY3RpdmVzL2V2ZW50Rm9ybS9ldmVudEZvcm0uaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1kZXRhaWxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+RXZlbnQgRGV0YWlsczwvZGl2PlxcbjwvZGl2PlxcbjxkaXYgY2xhc3M9XFxcInNlY3Rpb24tbWFpblxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tcm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29sXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cXFwidGl0bGVcXFwiPlRpdGxlPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImZvcm0tZXJyb3JcXFwiIG5nLXNob3c9XFxcIihmb3JtLnRpdGxlLiR0b3VjaGVkIHx8IGZvcm0uJHN1Ym1pdHRlZCkgJiYgZXJyb3JzLnRpdGxlXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL2Vycm9yLnBuZ1xcXCIgd2lkdGg9XFxcIjE0XFxcIiAvPiB7e2Vycm9ycy50aXRsZX19XFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVxcXCJ0aXRsZVxcXCIgbmFtZT1cXFwidGl0bGVcXFwiIG5nLW1heGxlbmd0aD1cXFwiMzBcXFwiIHJlcXVpcmVkIG5nLW1vZGVsPVxcXCJldmVudC50aXRsZVxcXCIgdHlwZT1cXFwidGV4dFxcXCIgcGxhY2Vob2xkZXI9XFxcIk1vbnRobHkgTWVldHVwLi4uXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIGV4dGVuZFxcXCIvPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cCBvcHRpb25hbFxcXCI+XFxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XFxcImxvY2F0aW9uXFxcIj5Mb2NhdGlvbjwvbGFiZWw+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJmb3JtLWVycm9yXFxcIiBuZy1zaG93PVxcXCIoZm9ybS5sb2NhdGlvbi4kdG91Y2hlZCB8fCBmb3JtLiRzdWJtaXR0ZWQpICYmIGVycm9ycy5sb2NhdGlvblxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9lcnJvci5wbmdcXFwiIHdpZHRoPVxcXCIxNFxcXCIgLz4ge3tlcnJvcnMubG9jYXRpb259fVxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxpbnB1dCBpZD1cXFwibG9jYXRpb25cXFwiIG5hbWU9XFxcImxvY2F0aW9uXFxcIiBuZy1tb2RlbD1cXFwiZXZlbnQubG9jYXRpb25cXFwiIG5nLW1heGxlbmd0aD1cXFwiNTBcXFwiIHR5cGU9XFxcInRleHRcXFwiIHBsYWNlaG9sZGVyPVxcXCJSaWNrXFwncyBDYWZlLi4uXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIGV4dGVuZFxcXCIvPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLXJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwIG9wdGlvbmFsXFxcIj5cXG4gICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJkZXNjcmlwdGlvblxcXCIgPkRlc2NyaXB0aW9uPC9sYWJlbD5cXG4gICAgICAgICAgICA8dGV4dGFyZWEgaWQ9XFxcImRlc2NyaXB0aW9uXFxcIiBuYW1lPVxcXCJkZXNjcmlwdGlvblxcXCIgbmctbW9kZWw9XFxcImV2ZW50LmRlc2NyaXB0aW9uXFxcIiBwbGFjZWhvbGRlcj1cXFwiRW50ZXIgRGVzY3JpcHRpb24uLi5cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgZXh0ZW5kXFxcIj48L3RleHRhcmVhPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9kaXJlY3RpdmVzL2V2ZW50Rm9ybS9wYXJ0aWNpcGFudHNGb3JtLmh0bWxcIixcIjxkaXYgY2xhc3M9XFxcInNlY3Rpb24tZGV0YWlsc1xcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInNlY3Rpb24tdGl0bGVcXFwiPkludml0ZSBQYXJ0aWNpcGFudHM8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLW1haW5cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLXJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwIG9wdGlvbmFsXFxcIj5cXG4gICAgICAgICAgICA8bGFiZWw+UGFydGljaXBhbnRcXCdzIEVtYWlsczwvbGFiZWw+XFxuICAgICAgICAgICAgICAgIDx0YWdzLWlucHV0IG1heC1sZW5ndGg9XFxcIjUwXFxcIiBhbGxvd2VkLXRhZ3MtcGF0dGVybj1cXFwie3tlbWFpbFJlZ2V4fX1cXFwiIGRpc3BsYXktcHJvcGVydHk9XFxcImVtYWlsXFxcIiBuZy1tb2RlbD1cXFwiZXZlbnQuZW1haWxzXFxcIiBwbGFjZWhvbGRlcj1cXFwiQWRkIGFuIEVtYWlsXFxcIiB0eXBlPVxcXCJlbWFpbFxcXCIgYXV0b2NvbXBsZXRlPVxcXCJvZmZcXFwiPjwvdGFncy1pbnB1dD5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG48L3NlY3Rpb24+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2RpcmVjdGl2ZXMvZXZlbnRGb3JtL3NldHRpbmdzRm9ybS5odG1sXCIsXCI8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLWRldGFpbHNcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5TZXR0aW5nczwvZGl2PlxcbjwvZGl2PlxcbjxkaXYgY2xhc3M9XFxcInNlY3Rpb24tbWFpblxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaC1yb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoLWRldGFpbHNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInRpdGxlXFxcIj5cXG4gICAgICAgICAgICAgICAgUG9sbCBTdGF0dXNcXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkZXNjcmlwdGlvblxcXCI+XFxuICAgICAgICAgICAgICAgIExldCBwZW9wbGUgdm90ZSBvbiB0aGUgcG9sbC5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzd2l0Y2gtdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICB7e2V2ZW50LmlzQ2xvc2VkID8gXFwnQ2xvc2VkXFwnIDogXFwnT3BlblxcJyB9fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgc3dpdGNoLXRvZ2dsZSBuZy1tb2RlbD1cXFwiZXZlbnQuaXNDbG9zZWRcXFwiIGludmVydD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoLXJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzd2l0Y2gtZGV0YWlsc1xcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwidGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICBOb3RpZmljYXRpb25zXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGVzY3JpcHRpb25cXFwiPlxcbiAgICAgICAgICAgICAgICBTZW5kIGVtYWlsIG5vdGlmaWNhdGlvbnMgdG8gdGhlIGNyZWF0b3Igb2YgdGhpcyBldmVudC5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJzd2l0Y2gtdmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICB7e2V2ZW50LmNyZWF0b3IuYWxsb3dOb3RpZmljYXRpb25zID8gXFwnRW5hYmxlZFxcJyA6IFxcJ0Rpc2FibGVkXFwnIH19XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBzd2l0Y2gtdG9nZ2xlIG5nLW1vZGVsPVxcXCJldmVudC5jcmVhdG9yLmFsbG93Tm90aWZpY2F0aW9uc1xcXCI+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaC1yb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoLWRldGFpbHNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInRpdGxlXFxcIj5cXG4gICAgICAgICAgICAgICAgRGVsZXRlIEV2ZW50XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGVzY3JpcHRpb25cXFwiPlxcbiAgICAgICAgICAgICAgICBPbmNlIHlvdSBkZWxldGUgYW4gZXZlbnQgaXQgd2lsbCBubyBsb25nZXIgYmUgYWNjZXNzaWJsZS5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoXFxcIj5cXG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgbmctY2xpY2s9XFxcImRlbGV0ZUV2ZW50KClcXFwiIGNsYXNzPVxcXCJidG5cXFwiIG5nLWNsYXNzPVxcXCJ7ZGFuZ2VyIDogIWRlbGV0ZVJlcXVlc3RTZW50LCBkaXNhYmxlZCA6IGRlbGV0ZVJlcXVlc3RTZW50fVxcXCI+e3tkZWxldGVSZXF1ZXN0U2VudCA/IFxcJ1JlcXVlc3QgU2VudFxcJyA6IFxcJ0RlbGV0ZSBFdmVudFxcJyB9fTwvYnV0dG9uPlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2Plxcbjwvc2VjdGlvbj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9ldmVudEZvcm0vdXNlckZvcm0uaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1kZXRhaWxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+WW91ciBEZXRhaWxzPC9kaXY+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1tYWluXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1yb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb2xcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJuYW1lXFxcIj5OYW1lPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImZvcm0tZXJyb3JcXFwiIG5nLXNob3c9XFxcIihmb3JtLm5hbWUuJHRvdWNoZWQgfHwgZm9ybS4kc3VibWl0dGVkKSAmJiBlcnJvcnMubmFtZVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9lcnJvci5wbmdcXFwiIHdpZHRoPVxcXCIxNFxcXCIgLz4ge3tlcnJvcnMubmFtZX19XFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVxcXCJuYW1lXFxcIiBuYW1lPVxcXCJuYW1lXFxcIiBuZy1tYXhsZW5ndGg9XFxcIjMwXFxcIiByZXF1aXJlZCBuZy1tb2RlbD1cXFwiZXZlbnQuY3JlYXRvci5uYW1lXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBwbGFjZWhvbGRlcj1cXFwiSm9obiBEb2UuLi5cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgZXh0ZW5kXFxcIi8+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29sXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cXFwiZW1haWxcXFwiPkVtYWlsPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImZvcm0tZXJyb3JcXFwiIG5nLXNob3c9XFxcIihmb3JtLmVtYWlsLiR0b3VjaGVkIHx8IGZvcm0uJHN1Ym1pdHRlZCkgJiYgZXJyb3JzLmVtYWlsXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL2Vycm9yLnBuZ1xcXCIgd2lkdGg9XFxcIjE0XFxcIiAvPiB7e2Vycm9ycy5lbWFpbH19XFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcImVtYWlsXFxcIiBpZD1cXFwiZW1haWxcXFwiIG5hbWU9XFxcImVtYWlsXFxcIiBuZy1wYXR0ZXJuPVxcXCJlbWFpbFJlZ2V4XFxcIiByZXF1aXJlZCBuZy1tb2RlbD1cXFwiZXZlbnQuY3JlYXRvci5lbWFpbFxcXCIgcGxhY2Vob2xkZXI9XFxcImpvaG4uZG9lQGVtYWlsLmNvbS4uLlxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbCBleHRlbmRcXFwiLz5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG5cIik7fV0pOyIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmRpcmVjdGl2ZSgnYmFja0ltZycsIGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycyl7XG4gICAgICAgIHZhciB1cmwgPSBhdHRycy5iYWNrSW1nO1xuICAgICAgICBlbGVtZW50LmNzcyh7XG4gICAgICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoL2ltYWdlcy8nICsgdXJsICsnLnBuZyknXG4gICAgICAgIH0pO1xuICAgIH07XG59KVxuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uZGlyZWN0aXZlKCdkYXRlcGlja2VyJywgZnVuY3Rpb24oKXtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdCA6ICdBJyxcbiAgICAgICAgcmVxdWlyZSA6ICduZ01vZGVsJyxcbiAgICAgICAgc2NvcGUgOiB7XG4gICAgICAgICAgICBtb2RlbCA6ICc9bmdNb2RlbCcsXG4gICAgICAgICAgICBjb250cm9sIDogJz0nXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzLCBuZ01vZGVsKXtcbiAgICAgICAgICAgIHNjb3BlLm1vZGVsID0gc2NvcGUubW9kZWwgfHwgW107XG4gICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZWwpLmRhdGVwaWNrZXIoe1xuICAgICAgICAgICAgICAgIG11bHRpZGF0ZSA6IHRydWUsXG4gICAgICAgICAgICAgICAgdG9kYXlIaWdobGlnaHQ6IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAub24oJ2NoYW5nZURhdGUnLCBmdW5jdGlvbihlKXtcbiAgICAgICAgICAgICAgICB2YXIgZGF0ZXMgPSBlLmRhdGVzO1xuICAgICAgICAgICAgICAgIGRhdGVzLnNvcnQoZnVuY3Rpb24oYSwgYil7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmdldFRpbWUoKSA+IGIuZ2V0VGltZSgpKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIG5nTW9kZWwuJHNldFZpZXdWYWx1ZShkYXRlcywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgdmFyIHVwZGF0ZSA9IGZ1bmN0aW9uKG1vZGVsVmFsdWUsIG9sZFZhbHVlKXtcbiAgICAgICAgICAgICAgICBpZiAoIW1vZGVsVmFsdWUgfHwgIW9sZFZhbHVlIHx8IChtb2RlbFZhbHVlLmxlbmd0aCA9PSBvbGRWYWx1ZS5sZW5ndGgpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RlbFZhbHVlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZXMucHVzaChuZXcgRGF0ZShtb2RlbFZhbHVlW2ldKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFuZ3VsYXIuZWxlbWVudChlbCkuZGF0ZXBpY2tlcignc2V0RGF0ZXMnLCBkYXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS4kd2F0Y2hDb2xsZWN0aW9uKCdtb2RlbCcsIHVwZGF0ZSk7XG5cbiAgICAgICAgICAgIHNjb3BlLmNvbnRyb2wgPSBzY29wZS5jb250cm9sIHx8IHt9O1xuICAgICAgICAgICAgc2NvcGUuY29udHJvbC51bnNldERhdGUgPSBmdW5jdGlvbihkYXRlKXtcbiAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzY29wZS5tb2RlbC5pbmRleE9mKGRhdGUpO1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGVsLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5nTW9kZWwuJHZhbGlkYXRvcnMucmVxdWlyZWQgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpe1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWxWYWx1ZSB8fCBtb2RlbFZhbHVlLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5kaXJlY3RpdmUoJ2Rpc2N1c3Npb24nLCBmdW5jdGlvbigkdGltZW91dCwgQ29tbWVudCwgQ29uZmlybU1vZGFsKXtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdCA6ICdBJyxcbiAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2RpcmVjdGl2ZXMvZGlzY3Vzc2lvbi5odG1sJyxcbiAgICAgICAgc2NvcGUgOiB7XG4gICAgICAgICAgICAnZXZlbnQnIDogJz0nXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzKXtcbiAgICAgICAgICAgIHNjb3BlLmNvbW1lbnQgPSB7fTtcbiAgICAgICAgICAgIHZhciB0aHJlYWQgPSBhbmd1bGFyLmVsZW1lbnQoJy5jb21tZW50LXRocmVhZCcpO1xuICAgICAgICAgICAgJHRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB0aHJlYWQuc2Nyb2xsVG9wKHRocmVhZC5wcm9wKCdzY3JvbGxIZWlnaHQnKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLmRlbGV0ZUNvbW1lbnQgPSBmdW5jdGlvbihjb21tZW50KXtcbiAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgOiAnQXJlIHlvdSBzdXJlPycsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSB0aGlzIGNvbW1lbnQ/JyxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQgOiAnWWVzIC0gZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dCA6ICdObyAtIG5ldmVybWluZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzRGVzdHJ1Y3RpdmUgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtIDogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIENvbW1lbnQucmVtb3ZlKHsgaWQgOiBzY29wZS5ldmVudC5faWQgLCBjaWQgOiBjb21tZW50Ll9pZCB9LCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5wb3N0Q29tbWVudCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmNvbW1lbnRGb3JtLiR2YWxpZCl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb21tZW50ID0gbmV3IENvbW1lbnQoc2NvcGUuY29tbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbW1lbnQuJHNhdmUoe2lkOnNjb3BlLmV2ZW50Ll9pZH0sIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5jb21tZW50ID0ge307XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5jb21tZW50Rm9ybS4kc2V0UHJpc3RpbmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmRpcmVjdGl2ZSgnZHJvcGRvd24nLCBmdW5jdGlvbigkZG9jdW1lbnQpe1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0IDogJ0EnLFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycyl7XG4gICAgICAgICAgICBlbC5hZGRDbGFzcygnZHJvcGRvd24nKTtcbiAgICAgICAgICAgIHNjb3BlLm9wZW4gPSBmYWxzZTtcblxuICAgICAgICAgICAgdmFyIGNsaWNrSGFuZGxlciA9IGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgICAgICB2YXIgaXNDbGlja2VkRWxlbWVudENoaWxkT2ZQb3B1cCA9IGVsLmZpbmQoZXZlbnQudGFyZ2V0KS5sZW5ndGggPiAwO1xuICAgICAgICAgICAgICAgIGlmIChpc0NsaWNrZWRFbGVtZW50Q2hpbGRPZlBvcHVwKSByZXR1cm47XG4gICAgICAgICAgICAgICAgc2NvcGUudG9nZ2xlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHNjb3BlLnRvZ2dsZSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgc2NvcGUub3BlbiA9ICFzY29wZS5vcGVuO1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5vcGVuKXtcbiAgICAgICAgICAgICAgICAgICAgZWwuYWRkQ2xhc3MoJ29wZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgJGRvY3VtZW50LmJpbmQoJ2NsaWNrJywgY2xpY2tIYW5kbGVyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbC5yZW1vdmVDbGFzcygnb3BlbicpO1xuICAgICAgICAgICAgICAgICAgICAkZG9jdW1lbnQudW5iaW5kKCdjbGljaycsIGNsaWNrSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5zZXJ2aWNlKCdGb3JtSGVscGVyJywgZnVuY3Rpb24oKXtcbiAgICB0aGlzLmVtYWlsUmVnZXhTdHJpbmcgPSAnXihbXFxcXHctXFxcXC5dK0AoW1xcXFx3LV0rXFxcXC4pK1tcXFxcdy1dezIsNH0pPyQnO1xuICAgIHRoaXMuZW1haWxSZWdleCA9IG5ldyBSZWdFeHAodGhpcy5lbWFpbFJlZ2V4U3RyaW5nKTtcbiAgICB0aGlzLnByZXR0eUVycm9yID0gZnVuY3Rpb24oZXJyb3JzLCBmaWVsZCl7XG4gICAgICAgIGlmIChlcnJvcnMucmVxdWlyZWQpIHJldHVybiBmaWVsZCArIFwiIGlzIHJlcXVpcmVkXCI7XG4gICAgICAgIGlmIChlcnJvcnMucGF0dGVybikgcmV0dXJuIGZpZWxkICsgXCIgaXMgaW52YWxpZFwiIDtcbiAgICAgICAgaWYgKGVycm9ycy5tYXhsZW5ndGgpIHJldHVybiBmaWVsZCArIFwiIGlzIHRvbyBsb25nXCI7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59KVxuLmRpcmVjdGl2ZSgndXNlckZvcm0nLCBmdW5jdGlvbihGb3JtSGVscGVyKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIGV2ZW50IDogJz0nLFxuICAgICAgICAgICAgZm9ybSA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9ldmVudEZvcm0vdXNlckZvcm0uaHRtbCcsXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzKSB7XG4gICAgICAgICAgICBzY29wZS5lcnJvcnMgPSB7fTtcblxuICAgICAgICAgICAgc2NvcGUuZW1haWxSZWdleCA9IEZvcm1IZWxwZXIuZW1haWxSZWdleDtcblxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignZm9ybS5uYW1lLiRlcnJvcicsZnVuY3Rpb24oZXJyb3JzKXtcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJvcnMubmFtZSA9IEZvcm1IZWxwZXIucHJldHR5RXJyb3IoZXJyb3JzLCBcIk5hbWVcIik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignZm9ybS5lbWFpbC4kZXJyb3InLGZ1bmN0aW9uKGVycm9ycyl7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyb3JzLmVtYWlsID0gRm9ybUhlbHBlci5wcmV0dHlFcnJvcihlcnJvcnMsIFwiRW1haWxcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCdldmVudEZvcm0nLCBmdW5jdGlvbihGb3JtSGVscGVyKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIGV2ZW50IDogJz0nLFxuICAgICAgICAgICAgZm9ybSA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9ldmVudEZvcm0vZXZlbnRGb3JtLmh0bWwnLFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycykge1xuICAgICAgICAgICAgc2NvcGUuZXJyb3JzID0ge307XG5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ2Zvcm0udGl0bGUuJGVycm9yJyxmdW5jdGlvbihlcnJvcnMpe1xuICAgICAgICAgICAgICAgIHNjb3BlLmVycm9ycy50aXRsZSA9IEZvcm1IZWxwZXIucHJldHR5RXJyb3IoZXJyb3JzLCBcIlRpdGxlXCIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaENvbGxlY3Rpb24oJ2Zvcm0ubG9jYXRpb24uJGVycm9yJyxmdW5jdGlvbihlcnJvcnMpe1xuICAgICAgICAgICAgICAgIHNjb3BlLmVycm9ycy5sb2NhdGlvbiA9IEZvcm1IZWxwZXIucHJldHR5RXJyb3IoZXJyb3JzLCBcIkxvY2F0aW9uXCIpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCdkYXRlRm9ybScsIGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NvcGUgOiB7XG4gICAgICAgICAgICBldmVudCA6ICc9JyxcbiAgICAgICAgICAgIGZvcm0gOiAnPSdcbiAgICAgICAgfSxcbiAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2RpcmVjdGl2ZXMvZXZlbnRGb3JtL2RhdGVGb3JtLmh0bWwnXG4gICAgfVxufSlcbi5kaXJlY3RpdmUoJ3BhcnRpY2lwYW50c0Zvcm0nLCBmdW5jdGlvbihGb3JtSGVscGVyKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIGV2ZW50IDogJz0nLFxuICAgICAgICAgICAgZm9ybSA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9ldmVudEZvcm0vcGFydGljaXBhbnRzRm9ybS5odG1sJyxcbiAgICAgICAgbGluayA6IGZ1bmN0aW9uKHNjb3BlLCBlbCwgYXR0cnMpe1xuICAgICAgICAgICAgc2NvcGUuZW1haWxSZWdleCA9IEZvcm1IZWxwZXIuZW1haWxSZWdleFN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCdzZXR0aW5nc0Zvcm0nLCBmdW5jdGlvbihFdmVudCwgQ29uZmlybU1vZGFsKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIGV2ZW50IDogJz0nLFxuICAgICAgICAgICAgZm9ybSA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9ldmVudEZvcm0vc2V0dGluZ3NGb3JtLmh0bWwnLFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycyl7XG4gICAgICAgICAgICBzY29wZS5kZWxldGVFdmVudCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgaWYgKHNjb3BlLmRlbGV0ZVJlcXVlc3RTZW50KSByZXR1cm47XG4gICAgICAgICAgICAgICAgRXZlbnQuZGVsZXRlKHsnaWQnIDogc2NvcGUuZXZlbnQuX2lkfSwgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuZGVsZXRlUmVxdWVzdFNlbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlIDogJ0RlbGV0ZSBSZXF1ZXN0IFNlbnQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdBbiBlbWFpbCBoYXMgYmVlbiBzZW50IHRvIHRoZSBjcmVhdG9yIG9mIHRoaXMgZXZlbnQgd2l0aCBpbnN0cnVjdGlvbnMgdG8gZGVsZXRlIGl0LicsXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0IDogJ09LJ1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCdzd2l0Y2hUb2dnbGUnLCBmdW5jdGlvbigpe1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjb3BlIDoge1xuICAgICAgICAgICAgbW9kZWwgOiAnPW5nTW9kZWwnXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVpcmUgOiAnbmdNb2RlbCcsXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzLCBuZ01vZGVsKSB7XG4gICAgICAgICAgICBlbC5hZGRDbGFzcygnc3dpdGNoLXRvZ2dsZScpO1xuICAgICAgICAgICAgdmFyIHNldENsYXNzID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUubW9kZWwgXiB0eXBlb2YoYXR0cnMuaW52ZXJ0KSAhPT0gJ3VuZGVmaW5lZCcpe1xuICAgICAgICAgICAgICAgICAgICBlbC5hZGRDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlQ2xhc3MoJ2FjdGl2ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLiR3YXRjaCgnbW9kZWwnLCBzZXRDbGFzcyk7XG4gICAgICAgICAgICBlbC5iaW5kKCdjbGljaycsIGZ1bmN0aW9uKGUpe1xuICAgICAgICAgICAgICAgIHNjb3BlLm1vZGVsID0gIXNjb3BlLm1vZGVsO1xuICAgICAgICAgICAgICAgIG5nTW9kZWwuJHNldFZpZXdWYWx1ZShzY29wZS5tb2RlbCwgZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uZGlyZWN0aXZlKCdwb2xsJywgZnVuY3Rpb24oJHRpbWVvdXQsIFBhcnRpY2lwYW50LCBDb25maXJtTW9kYWwpe1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0IDogJ0EnLFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9wb2xsLmh0bWwnLFxuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgICdldmVudCcgOiAnPSdcbiAgICAgICAgfSxcbiAgICAgICAgbGluayA6IGZ1bmN0aW9uKHNjb3BlLCBlbCwgYXR0cnMpe1xuICAgICAgICAgICAgc2NvcGUuZGVmYXVsdHMgPSBbXTtcbiAgICAgICAgICAgIHNjb3BlLnBhcnRpY2lwYW50ID0ge307XG4gICAgICAgICAgICB2YXIgZGF0ZXNDb3VudCA9IFtdO1xuICAgICAgICAgICAgdmFyIHVuYmluZExpc3RlbmVyO1xuICAgICAgICAgICAgc2NvcGUuZXZlbnQuJHByb21pc2UudGhlbihmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgdmFyIGV4YW1wbGVzTmFtZXMgPSBbJ0pvaG4gRXhhbXBsZScsICdKYW5lIFNwZWNpbWVuJywnTWFyayBJbnN0YW5jZScsICdNYXJ5IENhc2UnXTtcbiAgICAgICAgICAgICAgICB2YXIgZXhhbXBsZXMgPSBbXTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGV4YW1wbGVzTmFtZXMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICB2YXIgZXhhbXBsZSA9IHsgbmFtZSA6IGV4YW1wbGVzTmFtZXNbaV0gfTtcbiAgICAgICAgICAgICAgICAgICAgZXhhbXBsZS5kYXRlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8ICBldmVudC5kYXRlcy5sZW5ndGg7IGorKyl7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5zd2VyID0gTWF0aC5yYW5kb20oKTwuNTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YW1wbGUuZGF0ZXNbal0gPSBhbnN3ZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZXhhbXBsZXMucHVzaChleGFtcGxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2NvcGUuZXhhbXBsZXMgPSBleGFtcGxlcztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBzY29wZS5kZWxldGUgPSBmdW5jdGlvbihwYXJ0aWNpcGFudCl7XG4gICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlIDogJ0RlbGV0ZSAnICsgcGFydGljaXBhbnQubmFtZSArICc/JyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcmVtb3ZlICcrcGFydGljaXBhbnQubmFtZSsnIGZyb20gdGhlIHBvbGw/JyxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQgOiAnWWVzIC0gZGVsZXRlJyxcbiAgICAgICAgICAgICAgICAgICAgY2FuY2VsVGV4dCA6ICdObyAtIG5ldmVybWluZCcsXG4gICAgICAgICAgICAgICAgICAgIGlzRGVzdHJ1Y3RpdmUgOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtIDogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICAgICAgICAgIFBhcnRpY2lwYW50LnJlbW92ZSh7IGlkIDogc2NvcGUuZXZlbnQuX2lkICwgcGlkIDogcGFydGljaXBhbnQuX2lkIH0sIGZ1bmN0aW9uKGV2ZW50KXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLmlzVG9wRGF0ZSA9IGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBkYXRlc0NvdW50W2luZGV4XTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGVzQ291bnQubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZXNDb3VudFtpXSA+IGNvdW50KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuc2VsZWN0ZWREYXRlID0gZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgIGRhdGVzQ291bnRbaW5kZXhdID0gMDtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjb3BlLmV2ZW50LnBhcnRpY2lwYW50cy5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzY29wZS5ldmVudC5wYXJ0aWNpcGFudHNbaV0uZGF0ZXNbaW5kZXhdKSBkYXRlc0NvdW50W2luZGV4XSsrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZXNDb3VudFtpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS51cGRhdGUgPSBmdW5jdGlvbihwYXJ0aWNpcGFudCl7XG4gICAgICAgICAgICAgICAgUGFydGljaXBhbnQudXBkYXRlKHtcbiAgICAgICAgICAgICAgICAgICAgaWQgOiBzY29wZS5ldmVudC5faWQsXG4gICAgICAgICAgICAgICAgICAgIHBpZCA6IHBhcnRpY2lwYW50Ll9pZFxuICAgICAgICAgICAgICAgIH0sIHBhcnRpY2lwYW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLmVkaXQgPSBmdW5jdGlvbihwYXJ0aWNpcGFudCl7XG4gICAgICAgICAgICAgICAgc2NvcGUuZGVmYXVsdHNbc2NvcGUuZXZlbnQucGFydGljaXBhbnRzLmluZGV4T2YocGFydGljaXBhbnQpXSA9IGFuZ3VsYXIuY29weShwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5jYW5jZWwgPSBmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXZlbnQucGFydGljaXBhbnRzW2luZGV4XSA9IHNjb3BlLmRlZmF1bHRzW2luZGV4XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLnNhdmUgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5mb3JtbmV3LiR2YWxpZCl7XG4gICAgICAgICAgICAgICAgICAgIHZhciBwYXJ0aWNpcGFudCA9IG5ldyBQYXJ0aWNpcGFudChzY29wZS5wYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICAgICAgICAgIHBhcnRpY2lwYW50LiRzYXZlKHtpZDpzY29wZS5ldmVudC5faWR9LCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUucGFydGljaXBhbnQgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHNjb3BlLmZvcm1uZXcuJHNldFByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdBYm91dEN0cmwnLCBmdW5jdGlvbihUaXRsZSl7XG4gICAgVGl0bGUuc2V0KCdBYm91dCBSYWxsbHknKVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdBY2NvdW50Q3RybCcsIGZ1bmN0aW9uKCRzY29wZSwgQ29uZmlybU1vZGFsKXtcbiAgICAkc2NvcGUuc2hvd05vdGljZSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIFxuICAgIH1cbn0pXG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdEZWxldGlvbkN0cmwnLCBmdW5jdGlvbigkc3RhdGUsIE5vdGlmaWNhdGlvbiwgRXZlbnQpe1xuICAgIEV2ZW50LmRlc3Ryb3koe2lkIDogJHN0YXRlLnBhcmFtcy5pZCwgY29kZSA6JHN0YXRlLnBhcmFtcy5jb2RlfSwgZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgdGl0bGUgOiAnRXZlbnQgZGVsZXRlZCcsXG4gICAgICAgICAgICBtZXNzYWdlIDogJ1RoaXMgZXZlbnQgaGFzIGJlZW4gZGVsZXRlZCcsXG4gICAgICAgICAgICB0eXBlIDogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgdGltZW91dCA6IDUwMDBcbiAgICAgICAgfSk7XG4gICAgfSwgZnVuY3Rpb24oZSl7XG4gICAgICAgIHZhciBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHRpdGxlIDogJ0RlbGV0aW9uIEZhaWxlZCcsXG4gICAgICAgICAgICBtZXNzYWdlIDogJ1RoZSBldmVudCBjb3VsZCBub3QgYmUgZGVsZXRlZC4gTWFrZSBzdXJlIHRoYXQgaXQgZXhpc3RzIGFuZCB0aGF0IHRoZSB1cmwgaXMgY29ycmVjdCcsXG4gICAgICAgICAgICB0eXBlIDogJ2Vycm9yJ1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgICAkc3RhdGUuZ28oJ2V2ZW50JywgeyBpZCA6ICRzdGF0ZS5wYXJhbXMuaWQgfSk7XG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmNvbnRyb2xsZXIoJ0VkaXRFdmVudEN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRodHRwLCAkc3RhdGUsICR0aW1lb3V0LCBFdmVudCwgQ29uZmlybU1vZGFsLCBOb3RpZmljYXRpb24sIFRpdGxlKXtcbiAgICB2YXIgaWQgPSAkc3RhdGUucGFyYW1zLmlkXG4gICAgJHNjb3BlLmV2ZW50ID0gRXZlbnQuZ2V0KHtpZDppZH0sIGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICBUaXRsZS5zZXQoXCJFZGl0OiBcIiArICRzY29wZS5ldmVudC50aXRsZSk7XG4gICAgICAgICRzY29wZS5tYXN0ZXIgPSBhbmd1bGFyLmNvcHkoJHNjb3BlLmV2ZW50KTtcbiAgICB9LCBmdW5jdGlvbihlKXtcbiAgICAgICAgJHN0YXRlLmdvKCdub3Rmb3VuZCcpO1xuICAgIH0pO1xuICAgICRzY29wZS51bmRvQ2hhbmdlcyA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICRzY29wZS5ldmVudCA9IGFuZ3VsYXIuY29weSgkc2NvcGUubWFzdGVyKTtcbiAgICB9XG4gICAgJHNjb3BlLmRpZENoYW5nZSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSgkc2NvcGUubWFzdGVyKSAhPSBKU09OLnN0cmluZ2lmeSgkc2NvcGUuZXZlbnQpO1xuICAgIH1cbiAgICAkc2NvcGUuZGlkQ2hhbmdlRGF0ZXMgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLm1hc3Rlci5kYXRlcykgIT0gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLmV2ZW50LmRhdGVzKTtcbiAgICB9XG4gICAgJHNjb3BlLnN1Ym1pdCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgIGlmICgkc2NvcGUuZm9ybS4kdmFsaWQpe1xuICAgICAgICAgICAgaWYgKCRzY29wZS5kaWRDaGFuZ2VEYXRlcygpICl7XG4gICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlIDogJ0hvbGQgdXAhJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdDaGFuZ2luZyB0aGUgZGF0ZXMgd2lsbCByZXNldCBhbGwgZW50cmllcyBieSB0aGUgcGFydGljaXBhbnRzLiBBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZG8gdGhhdD8nLFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtVGV4dCA6ICdZZXMsIElcXCdtIHN1cmUnLFxuICAgICAgICAgICAgICAgICAgICBpc0Rlc3RydWN0aXZlIDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAkc2NvcGUuZXZlbnQucGFydGljaXBhbnRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHVwZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICAgIHRpdGxlIDogJ05vdCBzbyBmYXN0JyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlIDogJ01ha2Ugc3VyZSB5b3UgZmlsbCBpbiBhbGwgdGhlIHJlcXVpcmVkIGZpZWxkcyBhbmQgdHJ5IGFnYWluLicsXG4gICAgICAgICAgICAgICAgdHlwZSA6ICdlcnJvcidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciB1cGRhdGUgPSBmdW5jdGlvbigpe1xuICAgICAgICBFdmVudC51cGRhdGUoe1xuICAgICAgICAgICAgaWQgOiBpZFxuICAgICAgICB9LCAkc2NvcGUuZXZlbnQsXG4gICAgICAgIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICAgICAgdGl0bGUgOiAnQ2hhbmdlcyBTYXZlZCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdZb3VyIGNoYW5nZXMgaGF2ZSBiZWVuIHNhdmVkIHN1Y2Nlc3NmdWxseS4nLFxuICAgICAgICAgICAgICAgIHR5cGUgOiAnc3VjY2VzcydcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgJHNjb3BlLm1hc3RlciA9IGFuZ3VsYXIuY29weSgkc2NvcGUuZXZlbnQpO1xuICAgICAgICB9KTtcbiAgICB9XG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmNvbnRyb2xsZXIoJ0V2ZW50Q3RybCcsIGZ1bmN0aW9uKCRzY29wZSwgJGh0dHAsICRzdGF0ZSwgVGl0bGUsIEV2ZW50LCBDb25maXJtTW9kYWwpe1xuICAgIHZhciBpZCA9ICRzdGF0ZS5wYXJhbXMuaWQ7XG4gICAgLy8gR2V0IEV2ZW50XG4gICAgJHNjb3BlLmV2ZW50ID0gRXZlbnQuZ2V0KHtpZDppZH0sIGZ1bmN0aW9uKGRhdGEpe1xuICAgICAgICAvLyBTZXQgdGhlIHBhZ2UgdGl0bGUgdG8gdGhlIGV2ZW50IHRpdGxlICAgICAgICBcbiAgICAgICAgVGl0bGUuc2V0KCRzY29wZS5ldmVudC50aXRsZSk7XG4gICAgICAgIC8vIEdlbmVyYXRlIGV2ZW50IHVybCAtIGkuZS4gaHR0cDovL3JhbGxseS5jby9qRjlGX0ZkXG4gICAgICAgICRzY29wZS5ldmVudFVybCA9ICRzdGF0ZS5ocmVmKCdldmVudCcsIHtcbiAgICAgICAgICAgIGlkOiAkc2NvcGUuZXZlbnQuX2lkXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIGFic29sdXRlIDogdHJ1ZVxuICAgICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbihlKXtcbiAgICAgICAgJHN0YXRlLmdvKCdub3Rmb3VuZCcpO1xuICAgIH0pO1xuXG4gICAgJHNjb3BlLm9wZW5FdmVudCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICRzY29wZS5ldmVudC5pc0Nsb3NlZCA9IGZhbHNlO1xuICAgICAgICBFdmVudC51cGRhdGUoe1xuICAgICAgICAgICAgaWQgOiBpZFxuICAgICAgICB9LCAkc2NvcGUuZXZlbnQsXG4gICAgICAgIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKHtcbiAgICAgICAgICAgICAgICB0aXRsZSA6ICdFdmVudCBPcGVuJyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlIDogJ1Blb3BsZSBjYW4gdm90ZSBhbmQgY29tbWVudCBvbiB0aGlzIGV2ZW50LicsXG4gICAgICAgICAgICAgICAgY2FuY2VsVGV4dCA6ICdPSycsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgJHNjb3BlLmNsb3NlRXZlbnQgPSBmdW5jdGlvbigpe1xuICAgICAgICAkc2NvcGUuZXZlbnQuaXNDbG9zZWQgPSB0cnVlO1xuICAgICAgICBFdmVudC51cGRhdGUoe1xuICAgICAgICAgICAgaWQgOiBpZFxuICAgICAgICB9LCAkc2NvcGUuZXZlbnQsXG4gICAgICAgIGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKHtcbiAgICAgICAgICAgICAgICB0aXRsZSA6ICdFdmVudCBDbG9zZWQnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiAnUGVvcGxlIGNhbiBubyBsb25nZXIgdm90ZSBvciBjb21tZW50IG9uIHRoaXMgZXZlbnQuJyxcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0IDogJ09LJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAkc2NvcGUuZWRpdEV2ZW50ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgJHN0YXRlLmdvKCdlZGl0ZXZlbnQnLCB7IGlkIDogJHNjb3BlLmV2ZW50Ll9pZCB9KTtcbiAgICB9XG5cbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uY29udHJvbGxlcignSG9tZUN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRzdGF0ZSwgVGl0bGUpe1xuICAgIFRpdGxlLnNldCgnUmFsbGx5IC0gQ29sbGFib3JhdGl2ZSBTY2hlZHVsaW5nJylcblxuICAgICRzY29wZS5uZXdFdmVudCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICRzdGF0ZS5nbygnbmV3ZXZlbnQnKTtcbiAgICB9XG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmNvbnRyb2xsZXIoJ05hdmlnYXRpb25DdHJsJywgZnVuY3Rpb24oJHNjb3BlLCAkbG9jYXRpb24pe1xuICAgICRzY29wZS5pc0FjdGl2ZSA9IGZ1bmN0aW9uKHBhdGgpIHtcbiAgICAgICAgaWYgKCRsb2NhdGlvbi5wYXRoKCkgPT0gcGF0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgIH1cbn0pXG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdOZXdFdmVudEN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRodHRwLCAkc3RhdGUsIEV2ZW50LCBDb25maXJtTW9kYWwsIE5vdGlmaWNhdGlvbil7XG5cbiAgICAkc2NvcGUudGl0bGUgPSBcIlNjaGVkdWxlIGEgTmV3IEV2ZW50XCI7XG4gICAgJHNjb3BlLmRlc2NyaXB0aW9uID0gXCJGaWxsIGluIHRoZSBmb3JtIGJlbG93IHRvIGNyZWF0ZSB5b3VyIGV2ZW50IGFuZCBzaGFyZSBpdCB3aXRoIHlvdXIgZnJpZW5kcyBhbmQgY29sbGVhZ3Vlcy5cIjtcblxuICAgICRzY29wZS5zdWJtaXQgPSBmdW5jdGlvbigpe1xuICAgICAgICBpZiAoJHNjb3BlLmZvcm0uJHZhbGlkKXtcbiAgICAgICAgICAgICRodHRwLnBvc3QoJy9hcGkvZXZlbnQnLCAkc2NvcGUuZXZlbnQpXG4gICAgICAgICAgICAuc3VjY2VzcyhmdW5jdGlvbihldmVudCwgc3RhdHVzLCBoZWFkZXJzLCBjb25maWcpe1xuICAgICAgICAgICAgICAgICRzY29wZS5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICRzY29wZS5ldmVudFVybCA9ICRzdGF0ZS5ocmVmKCdldmVudCcsIHtcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICRzY29wZS5ldmVudC5faWRcbiAgICAgICAgICAgICAgICB9LCB7XG4gICAgICAgICAgICAgICAgICAgIGFic29sdXRlIDogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5lcnJvcihmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZSA6ICdVaCBvaCEnLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogJ1RoZXJlIHdhcyBhbiBlcnJvciBjcmVhdGluZyB5b3VyIGV2ZW50LiBQbGVhc2UgdHJ5IGFnYWluIGxhdGVyLicsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQgOiAnT0snXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICB0aXRsZSA6ICdOb3Qgc28gZmFzdCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdNYWtlIHN1cmUgeW91IGZpbGwgaW4gYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMgYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAgICAgICAgIHR5cGUgOiAnZXJyb3InXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICRzY29wZS5jbGVhckRhdGVzID0gbnVsbFxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdWZXJpZmljYXRpb25DdHJsJywgZnVuY3Rpb24oRXZlbnQsIE5vdGlmaWNhdGlvbiwgJHN0YXRlKXtcbiAgICBFdmVudC52ZXJpZnkoe2lkIDogJHN0YXRlLnBhcmFtcy5pZCwgY29kZSA6JHN0YXRlLnBhcmFtcy5jb2RlfSwgZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgdGl0bGUgOiAnRW1haWwgVmVyaWZpZWQnLFxuICAgICAgICAgICAgbWVzc2FnZSA6ICdZb3VyIGVtYWlsIGhhcyBiZWVuIHZlcmlmaWVkLiBZb3Ugd2lsbCBub3cgYmUgYWJsZSB0byByZWNlaXZlIGVtYWlsIG5vdGlmaWNhdGlvbnMgZm9yIHRoaXMgZXZlbnQnLFxuICAgICAgICAgICAgdHlwZSA6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHRpbWVvdXQgOiA1MDAwXG4gICAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uKGUpe1xuICAgICAgICB2YXIgbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICB0aXRsZSA6ICdWZXJpZmljYXRpb24gRmFpbGVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2UgOiAnWW91ciB2ZXJpZmljYXRpb24gY29kZSBoYXMgZXhwaXJlZC4nLFxuICAgICAgICAgICAgdHlwZSA6ICdlcnJvcidcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgJHN0YXRlLmdvKCdldmVudCcsIHsgaWQgOiAkc3RhdGUucGFyYW1zLmlkIH0pO1xuXG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmZpbHRlcignZWxhcHNlZCcsIGZ1bmN0aW9uKCRmaWx0ZXIpe1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRlKXtcbiAgICAgICAgaWYgKCFkYXRlKSByZXR1cm47XG4gICAgICAgIHZhciB0aW1lID0gRGF0ZS5wYXJzZShkYXRlKSxcbiAgICAgICAgICAgIHRpbWVOb3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKSxcbiAgICAgICAgICAgIGRpZmZlcmVuY2UgPSB0aW1lTm93IC0gdGltZSxcbiAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLmZsb29yKGRpZmZlcmVuY2UgLyAxMDAwKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLmZsb29yKHNlY29uZHMgLyA2MCksXG4gICAgICAgICAgICBob3VycyA9IE1hdGguZmxvb3IobWludXRlcyAvIDYwKSxcbiAgICAgICAgICAgIGRheXMgPSBNYXRoLmZsb29yKGhvdXJzIC8gMjQpO1xuICAgICAgICBpZiAoZGF5cyA+IDMwKSB7XG4gICAgICAgICAgICByZXR1cm4gJ29uICcgKyAkZmlsdGVyKCdkYXRlJykoZGF0ZSwgJ01NTU0gZCcpO1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5cyArIFwiIGRheXMgYWdvXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIxIGRheSBhZ29cIlxuICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGhvdXJzICsgXCIgaG91cnMgYWdvXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiYW4gaG91ciBhZ29cIjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW51dGVzID4gMSkge1xuICAgICAgICAgICAgcmV0dXJuIG1pbnV0ZXMgKyBcIiBtaW51dGVzIGFnb1wiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZXMgPT0gMSl7XG4gICAgICAgICAgICByZXR1cm4gXCJhIG1pbnV0ZSBhZ29cIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBcImEgZmV3IHNlY29uZHMgYWdvXCI7XG4gICAgICAgIH1cbiAgICB9XG59KVxuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uZmFjdG9yeSgnQ29uZmlybU1vZGFsJywgZnVuY3Rpb24oYnRmTW9kYWwpe1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNvbmZpZyl7XG4gICAgICAgIHZhciBtb2RhbDtcbiAgICAgICAgbW9kYWwgPSBidGZNb2RhbCh7XG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvY29uZmlybW1vZGFsLmh0bWwnLFxuICAgICAgICAgICAgY29udHJvbGxlckFzIDogJ21vZGFsJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGVcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBjb25maWcubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpcm0gPSAoY29uZmlnLmNvbmZpcm0pID8gZnVuY3Rpb24oKXtjb25maWcuY29uZmlybSgpOyBtb2RhbC5kZWFjdGl2YXRlKCl9IDogZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWwgPSBtb2RhbC5kZWFjdGl2YXRlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybVRleHQgPSBjb25maWcuY29uZmlybVRleHQgfHwgJ0NvbmZpcm0nO1xuICAgICAgICAgICAgICAgIHRoaXMuY2FuY2VsVGV4dCA9IGNvbmZpZy5jYW5jZWxUZXh0IHx8ICdDYW5jZWwnO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNEZXN0cnVjdGl2ZSA9IGNvbmZpZy5pc0Rlc3RydWN0aXZlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwuYWN0aXZhdGUoKTtcbiAgICAgICAgXG4gICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBtb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmZhY3RvcnkoJ05vdGlmaWNhdGlvbicsIGZ1bmN0aW9uKCR0aW1lb3V0LCBidGZNb2RhbCl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGNvbmZpZyl7XG4gICAgICAgIHZhciBtb2RhbDtcbiAgICAgICAgbW9kYWwgPSBidGZNb2RhbCh7XG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvbm90aWZpY2F0aW9uLmh0bWwnLFxuICAgICAgICAgICAgY29udHJvbGxlckFzIDogJ25vdGlmaWNhdGlvbicsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB0aGlzLnRpdGxlID0gY29uZmlnLnRpdGxlXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlID0gY29uZmlnLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZSA9IG1vZGFsLmRlYWN0aXZhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gICAgICAgICAgICAgICAgdmFyIHRpbWVvdXQgPSBjb25maWcudGltZW91dCB8fCA1MDAwO1xuICAgICAgICAgICAgICAgICR0aW1lb3V0KG1vZGFsLmRlYWN0aXZhdGUsIHRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgbW9kYWwuYWN0aXZhdGUoKTtcblxuICAgICAgICB0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgbW9kYWwuZGVhY3RpdmF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxufSk7XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=