From 5a99b705d2d9aacd73b4ffb9d0f425f961a08c65 Mon Sep 17 00:00:00 2001 From: Luke Vella Date: Sun, 1 Feb 2015 23:37:15 +0100 Subject: [PATCH] Update poll template for new data structure --- public/build/app.js | 6 +++--- public/js/templates.js | 2 +- public/templates/directives/poll.html | 8 ++++---- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/public/build/app.js b/public/build/app.js index 26f2637c9..6a0a9bc1a 100644 --- a/public/build/app.js +++ b/public/build/app.js @@ -1,3 +1,3 @@ -angular.module("rallly",["ui.router","ngResource","btford.modal","ngTagsInput","ngAnimate"]).config(["$stateProvider","$urlRouterProvider","$locationProvider",function(e,t,n){n.html5Mode(!0),t.otherwise("/notfound"),e.state("index",{url:"/",templateUrl:"templates/home.html",controller:"HomeCtrl"}).state("newevent",{url:"/new",templateUrl:"templates/newEvent/layout.html",controller:"NewEventCtrl"}).state("newevent.general",{templateUrl:"templates/newEvent/general.html"}).state("newevent.datetime",{templateUrl:"templates/newEvent/datetime.html"}).state("newevent.invite",{templateUrl:"templates/newEvent/invite.html"}).state("newevent.success",{templateUrl:"templates/newEvent/success.html"}).state("about",{url:"/about",templateUrl:"templates/about.html",controller:"AboutCtrl"}).state("notfound",{url:"/notfound",templateUrl:"templates/notfound.html"}).state("event",{url:"/:id",templateUrl:"templates/event.html",controller:"EventCtrl"}).state("editevent",{url:"/:id/edit",templateUrl:"templates/editevent.html",controller:"EditEventCtrl"}).state("verifyevent",{url:"/verify/:id/code/:code",controller:"VerificationCtrl"}).state("deleteevent",{url:"/delete/:id/code/:code",controller:"DeletionCtrl"})}]).factory("Event",["$resource",function(e){return e("/api/event/:id",{id:"@_id"},{update:{method:"PUT"},verify:{method:"GET",url:"/api/event/:id/code/:code"},destroy:{method:"DELETE",url:"/api/event/:id/code/:code"}})}]).factory("Participant",["$resource",function(e){return e("/api/event/:id/participant/:pid",{id:"@_id"},{update:{method:"PUT"}})}]).factory("Comment",["$resource",function(e){return e("/api/event/:id/comment/:cid",{id:"@_id"},{update:{method:"PUT"}})}]).factory("Title",function(){return{set:function(e){document.title=e}}}),angular.module("rallly").run(["$templateCache",function(e){e.put("templates/about.html",'
\n

What is Rallly?

\n
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\n
\n\n
\n\n
\n\n
\n\n
\n
\n\n
\n\n
\n\n
\n\n
\n \n \n Done\n
\n\n
\n\n
\n\n
\n'),e.put("templates/event.html",'
\n
\n
\n
\n \n
\n
\n
\n {{event.title}}\n Poll Closed\n Poll Open\n
\n
\n Created by {{event.creator.name}} • {{event.created | elapsed}}\n
\n
\n
\n \n
\n
\n
{{event.description}}
\n \n\n
\n
\n
\n
\n
\n\n
\n
\n Discussion\n
\n
\n You can discuss the event with your friends by leaving a comment below.\n
\n
\n\n
\n
\n
\n'),e.put("templates/home.html",'
\n
\n \n
\n
\n Schedule an Event\n
\n
\n Want to host an event but can’t decide on a date? Click on the button below to start!\n
\n \n
\n'),e.put("templates/newevent.html",'
\n
\n\n
Schedule a New Event
\n
\n Fill in the form below to create your event and share it with your friends and colleagues.\n
\n\n
\n
\n\n
\n\n
\n\n
\n\n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n
\n\n
\n\n
\n\n
\n\n
\n\n\n
\n \n \n \n
\n\n
\n
\n\n
\n
\n
\n
\n \n
\n
Event Created
\n
\n Your event has been created successfully! You should receive an email shortly with instructions to verify your email address.\n
\n
\n
\n
\n \n GO\n
\n
\n
\n'),e.put("templates/notfound.html","

Error 404

\n

Not Found

\n"),e.put("templates/notification.html",'
\n
\n {{notification.title}}\n
\n
\n {{notification.message}}\n
\n
\n'),e.put("templates/directives/discussion.html",'\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n \n Make sure you fill in all the fields.\n \n
\n
\n
\n
\n'),e.put("templates/directives/poll.html",'
\n
\n {{event.participants.length}} participants\n
\n
\n
\n
\n {{date | date: \'EEE\'}}\n
\n
\n {{date | date: \'d\'}}\n
\n
\n {{date | date : \'MMM\'}}\n
\n {{selectedDate($index)}}\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n \n \n \n \n {{participant.name}}\n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n {{example.name}}\n
\n
\n \n \n
\n
\n\n
\n
\n
\n
\n Fill in the form below to get started\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n'),e.put("templates/directives/timePicker.html",'
\n
\n
\n
\n {{date | date: \'EEE\'}}\n
\n
\n {{date | date: \'d\'}}\n
\n
\n {{date | date : \'MMM\'}}\n
\n \n
\n
\n
\n \n
\n
\n'),e.put("templates/form/dateForm.html",'
\n
Choose Dates
\n \n
\n
\n
\n
\n \n \n You need to select a few dates\n \n
\n\n
\n
\n
\n
\n'),e.put("templates/form/eventForm.html",'
\n
Event Details
\n
\n
\n
\n
\n
\n \n \n {{errors.title}}\n \n \n
\n
\n
\n
\n \n \n {{errors.location}}\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n'),e.put("templates/form/participantsForm.html",'
\n
Invite Participants
\n
\n
\n
\n
\n \n \n \n\n
\n
\n
\n\n'),e.put("templates/form/settingsForm.html",'
\n
Settings
\n
\n
\n
\n
\n
\n Poll Status\n
\n
\n Let people vote on the poll.\n
\n
\n
\n
\n {{event.isClosed ? \'Closed\' : \'Open\' }}\n
\n
\n
\n
\n
\n
\n
\n
\n Notifications\n
\n
\n Send email notifications to the creator of this event.\n
\n
\n
\n
\n {{event.creator.allowNotifications ? \'Enabled\' : \'Disabled\' }}\n
\n
\n
\n
\n
\n
\n
\n
\n Delete Event\n
\n
\n Once you delete an event it will no longer be accessible.\n
\n
\n
\n \n
\n
\n
\n\n'),e.put("templates/form/timeForm.html",'
\n
Choose Times
\n
\n
\n \n \n \n \n \n
\n
\n
\n {{d.date | date: \'EEE\'}}\n
\n
\n {{d.date | date: \'d\'}}\n
\n
\n {{d.date | date : \'MMM\'}}\n
\n \n
\n
\n \n
\n
\n'),e.put("templates/form/userForm.html",'
\n
Your Details
\n
\n
\n
\n
\n
\n \n \n {{errors.name}}\n \n \n
\n
\n
\n
\n \n \n {{errors.email}}\n \n \n
\n
\n
\n
\n'),e.put("templates/newEvent/datetime.html",'
\n\n
\n\n
\n\n
\n\n
\n \n \n
\n'),e.put("templates/newEvent/general.html",'
\n\n
\n\n
\n\n
\n\n
\n \n
\n'),e.put("templates/newEvent/invite.html",'
\n\n
\n\n
\n \n \n
\n'),e.put("templates/newEvent/layout.html",'
\n\n
Schedule a New Event
\n
\n Fill in the form below to create your event and share it with your friends and colleagues.\n
\n
    \n
  1. \n General Details\n
  2. \n
  3. \n Dates & Times\n
  4. \n
  5. \n Invites\n
  6. \n
  7. \n Done\n
  8. \n
\n
\n
\n\n
\n
\n
\n'),e.put("templates/newEvent/success.html",'
\n
\n \n
\n
Event Created
\n
\n Your event has been created successfully! You should receive an email shortly with instructions to verify your email address.\n
\n
\n
\n
\n \n GO\n
\n
\n')}]),angular.module("rallly").controller("AboutCtrl",["Title",function(e){e.set("About Rallly")}]),angular.module("rallly").controller("AccountCtrl",["$scope","ConfirmModal",function(e){e.showNotice=function(){}}]),angular.module("rallly").controller("DeletionCtrl",["$state","Notification","Event",function(e,t,n){n.destroy({id:e.params.id,code:e.params.code},function(){new t({title:"Event deleted",message:"This event has been deleted",type:"success",timeout:5e3})},function(){new t({title:"Deletion Failed",message:"The event could not be deleted. Make sure that it exists and that the url is correct",type:"error"})}),e.go("event",{id:e.params.id})}]),angular.module("rallly").controller("EditEventCtrl",["$scope","$http","$state","$timeout","Event","ConfirmModal","Notification","Title",function(e,t,n,i,a,o,s,l){var r=n.params.id;e.event=a.get({id:r},function(){l.set("Edit: "+e.event.title),e.master=angular.copy(e.event)},function(){n.go("notfound")}),e.undoChanges=function(){e.event=angular.copy(e.master)},e.didChange=function(){return JSON.stringify(e.master)!=JSON.stringify(e.event)},e.didChangeDates=function(){return JSON.stringify(e.master.dates)!=JSON.stringify(e.event.dates)},e.submit=function(){if(e.form.$valid)if(e.didChangeDates()){new o({title:"Hold up!",message:"Changing the dates will reset all entries by the participants. Are you sure you want to do that?",confirmText:"Yes, I'm sure",isDestructive:!0,confirm:function(){e.event.participants=[],c()}})}else c();else{new s({title:"Not so fast",message:"Make sure you fill in all the required fields and try again.",type:"error"})}};var c=function(){a.update({id:r},e.event,function(){new s({title:"Changes Saved",message:"Your changes have been saved successfully.",type:"success"});e.master=angular.copy(e.event)})}}]),angular.module("rallly").controller("EventCtrl",["$scope","$http","$state","Title","Event","ConfirmModal",function(e,t,n,i,a,o){var s=n.params.id;e.event=a.get({id:s},function(){i.set(e.event.title),e.eventUrl=n.href("event",{id:e.event._id},{absolute:!0})},function(){n.go("notfound")}),e.openEvent=function(){e.event.isClosed=!1,a.update({id:s},e.event,function(){new o({title:"Event Open",message:"People can vote and comment on this event.",cancelText:"OK"})})},e.closeEvent=function(){e.event.isClosed=!0,a.update({id:s},e.event,function(){new o({title:"Event Closed",message:"People can no longer vote or comment on this event.",cancelText:"OK"})})},e.editEvent=function(){n.go("editevent",{id:e.event._id})}}]),angular.module("rallly").controller("HomeCtrl",["$scope","$state","Title",function(e,t,n){n.set("Rallly - Collaborative Scheduling"),e.newEvent=function(){t.go("newevent")}}]),angular.module("rallly").controller("NavigationCtrl",["$scope","$location",function(e,t){e.isActive=function(e){return t.path()==e?!0:!1}}]),angular.module("rallly").controller("NewEventCtrl",["$scope","$http","$state","Event","ConfirmModal","Notification",function(e,t,n,i,a,o){e.title="Schedule a New Event",e.description="Fill in the form below to create your event and share it with your friends and colleagues.",e.event={};var s=["newevent.general","newevent.datetime","newevent.invite"];e.page=1;var l=function(t){e.page=t,n.go(s[t-1])};l(e.page),e.submit=function(){if(e.form.$valid&&e.page==s.length)t.post("/api/event",e.event).success(function(t){e.event=t,e.eventUrl=n.href("event",{id:e.event._id},{absolute:!0}),e.page++,n.go("newevent.success")}).error(function(){new a({title:"Uh oh!",message:"There was an error creating your event. Please try again later.",cancelText:"OK"})});else if(e.form.$valid)e.form.$setPristine(),e.nextPage();else{new o({title:"Not so fast",message:"Make sure you fill in all the required fields and try again.",type:"error"})}},e.nextPage=function(){l(e.page+1)},e.prevPage=function(){l(e.page-1)}}]),angular.module("rallly").controller("VerificationCtrl",["Event","Notification","$state",function(e,t,n){e.verify({id:n.params.id,code:n.params.code},function(){new t({title:"Email Verified",message:"Your email has been verified. You will now be able to receive email notifications for this event",type:"success",timeout:5e3})},function(){new t({title:"Verification Failed",message:"Your verification code has expired.",type:"error"})}),n.go("event",{id:n.params.id})}]),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",["DatePickerService",function(e){return{restrict:"A",require:"ngModel",scope:{model:"=ngModel",control:"="},link:function(t,n,i,a){var o=new e(t.model),s=o.getDatesArray();angular.element(n).datepicker({multidate:!0,todayHighlight:!0}).on("changeDate",function(e){var t=e.dates;if(t.length>s.length){var n=t[t.length-1];o.addDate(n)}else{var i=o.diffDates(s,t);i&&o.removeDate(i)}a.$setViewValue(o.getDates()),s=t}),t.control=t.control||{},t.$watchCollection("model",function(){var e=angular.element(n).datepicker("getDates"),t=o.getDatesArray();e.length!=t.length&&angular.element(n).datepicker("setDates",t)}),t.control.unsetDate=function(e){o.removeDate(e)},a.$validators.required=function(e){return e&&0!=e.length?!0:!1}}}}]).service("DatePickerService",function(){return function(e){var t=e||[];this.addDate=function(e){t.push({date:e}),t.sort(function(e,t){return Date.compare(e.date,t.date)>0?!0:!1})},this.removeDate=function(e){for(var n=0;n0?t:null},this.getDatesArray=function(){for(var e=[],n=0;n0;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/form/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/form/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/form/dateForm.html"}}).directive("participantsForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/participantsForm.html",link:function(t){t.emailRegex=e.emailRegexString}}}]).directive("settingsForm",["Event","ConfirmModal",function(e,t){return{scope:{event:"=",form:"="},templateUrl:"templates/form/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)})}}}).directive("timeForm",["DatePickerService",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/timeForm.html",link:function(t){var n,i=!1,a=t.$watch("event.dates",function(o){o&&!i&&a(),i=!0,n=new e(t.event.dates),t.unsetDate=function(e){n.removeDate(e)}})}}}]).directive("timePicker",function(){return{scope:{model:"=ngModel"},require:"ngModel",link:function(e,t,n,i){i.$viewChangeListeners.push(function(){e.model=Date.parse(i.$modelValue),i.$setViewValue(e.model.toString("hh:mm tt")),i.$render()}),i.$validators.time=function(e){if(i.$isEmpty(e))return!0;var t=Date.parse(e);return t?(i.$setViewValue(t.toString("hh:mm tt")),i.$render(),!0):!1}}}}),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":l>1?l+" hours ago":1==l?"an hour ago":s>1?s+" minutes ago":1==s?"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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1haW4uanMiLCJ0ZW1wbGF0ZXMuanMiLCJjb250cm9sbGVycy9hYm91dC5jb250cm9sbGVyLmpzIiwiY29udHJvbGxlcnMvYWNjb3VudC5jb250cm9sbGVyLmpzIiwiY29udHJvbGxlcnMvZGVsZXRpb24uY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL2VkaXRldmVudC5jb250cm9sbGVyLmpzIiwiY29udHJvbGxlcnMvZXZlbnQuY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL2hvbWUuY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL25hdmlnYXRpb24uY29udHJvbGxlci5qcyIsImNvbnRyb2xsZXJzL25ld2V2ZW50LmNvbnRyb2xsZXIuanMiLCJjb250cm9sbGVycy92ZXJpZmljYXRpb24uY29udHJvbGxlci5qcyIsImRpcmVjdGl2ZXMvYmFja0ltZy5kaXJlY3RpdmUuanMiLCJkaXJlY3RpdmVzL2RhdGVwaWNrZXIuZGlyZWN0aXZlLmpzIiwiZGlyZWN0aXZlcy9kaXNjdXNzaW9uLmRpcmVjdGl2ZS5qcyIsImRpcmVjdGl2ZXMvZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwiZGlyZWN0aXZlcy9mb3JtLmRpcmVjdGl2ZS5qcyIsImRpcmVjdGl2ZXMvcG9sbC5kaXJlY3RpdmUuanMiLCJmaWx0ZXJzL2VsYXBzZWQuZmlsdGVyLmpzIiwic2VydmljZXMvbW9kYWwuc2VydmljZS5qcyIsInNlcnZpY2VzL25vdGlmaWNhdGlvbi5zZXJ2aWNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFFBQUEsT0FBQSxVQUFBLFlBQUEsYUFBQSxlQUFBLGNBQUEsY0FDQSxRQUFBLGlCQUFBLHFCQUFBLG9CQUFBLFNBQUEsRUFBQSxFQUFBLEdBQ0EsRUFBQSxXQUFBLEdBQ0EsRUFBQSxVQUFBLGFBQ0EsRUFDQSxNQUFBLFNBQ0EsSUFBQSxJQUNBLFlBQUEsc0JBQ0EsV0FBQSxhQUVBLE1BQUEsWUFDQSxJQUFBLE9BQ0EsWUFBQSxpQ0FDQSxXQUFBLGlCQUVBLE1BQUEsb0JBQ0EsWUFBQSxvQ0FFQSxNQUFBLHFCQUNBLFlBQUEscUNBRUEsTUFBQSxtQkFDQSxZQUFBLG1DQUVBLE1BQUEsb0JBQ0EsWUFBQSxvQ0FFQSxNQUFBLFNBQ0EsSUFBQSxTQUNBLFlBQUEsdUJBQ0EsV0FBQSxjQUVBLE1BQUEsWUFDQSxJQUFBLFlBQ0EsWUFBQSw0QkFFQSxNQUFBLFNBQ0EsSUFBQSxPQUNBLFlBQUEsdUJBQ0EsV0FBQSxjQUVBLE1BQUEsYUFDQSxJQUFBLFlBQ0EsWUFBQSwyQkFDQSxXQUFBLGtCQUVBLE1BQUEsZUFDQSxJQUFBLHlCQUNBLFdBQUEscUJBRUEsTUFBQSxlQUNBLElBQUEseUJBQ0EsV0FBQSxvQkFHQSxRQUFBLFNBQUEsWUFBQSxTQUFBLEdBQ0EsTUFBQSxHQUFBLGtCQUFBLEdBQUEsU0FDQSxRQUFBLE9BQUEsT0FDQSxRQUFBLE9BQUEsTUFBQSxJQUFBLDZCQUNBLFNBQUEsT0FBQSxTQUFBLElBQUEsa0NBR0EsUUFBQSxlQUFBLFlBQUEsU0FBQSxHQUNBLE1BQUEsR0FBQSxtQ0FBQSxHQUFBLFNBQ0EsUUFBQSxPQUFBLFlBR0EsUUFBQSxXQUFBLFlBQUEsU0FBQSxHQUNBLE1BQUEsR0FBQSwrQkFBQSxHQUFBLFNBQ0EsUUFBQSxPQUFBLFlBR0EsUUFBQSxRQUFBLFdBQ0EsT0FDQSxJQUFBLFNBQUEsR0FDQSxTQUFBLE1BQUEsTUMzRUEsUUFBQSxPQUFBLFVBQUEsS0FBQSxpQkFBQSxTQUFBLEdBQUEsRUFBQSxJQUFBLHVCQUFBLDhnQkFDQSxFQUFBLElBQUEsOEJBQUEsbWlCQUNBLEVBQUEsSUFBQSwyQkFBQSxpdkNBQ0EsRUFBQSxJQUFBLHVCQUFBLHV2REFDQSxFQUFBLElBQUEsc0JBQUEsMlpBQ0EsRUFBQSxJQUFBLDBCQUFBLHF2RUFDQSxFQUFBLElBQUEsMEJBQUEsNENBQ0EsRUFBQSxJQUFBLDhCQUFBLDRPQUNBLEVBQUEsSUFBQSx1Q0FBQSxra0RBQ0EsRUFBQSxJQUFBLGlDQUFBLDRpSkFDQSxFQUFBLElBQUEsdUNBQUEsbXRCQUNBLEVBQUEsSUFBQSwrQkFBQSwrb0NBQ0EsRUFBQSxJQUFBLGdDQUFBLGtrREFDQSxFQUFBLElBQUEsdUNBQUEsMmpCQUNBLEVBQUEsSUFBQSxtQ0FBQSxvekRBQ0EsRUFBQSxJQUFBLCtCQUFBLGsvQkFDQSxFQUFBLElBQUEsK0JBQUEsdXZDQUNBLEVBQUEsSUFBQSxtQ0FBQSxpWUFDQSxFQUFBLElBQUEsa0NBQUEsMlJBQ0EsRUFBQSxJQUFBLGlDQUFBLDJSQUNBLEVBQUEsSUFBQSxpQ0FBQSwyMEJBQ0EsRUFBQSxJQUFBLGtDQUFBLHNsQkNyQkEsUUFBQSxPQUFBLFVBQ0EsV0FBQSxhQUFBLFFBQUEsU0FBQSxHQUNBLEVBQUEsSUFBQSxtQkNGQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGVBQUEsU0FBQSxlQUFBLFNBQUEsR0FDQSxFQUFBLFdBQUEsZ0JDRkEsUUFBQSxPQUFBLFVBQ0EsV0FBQSxnQkFBQSxTQUFBLGVBQUEsUUFBQSxTQUFBLEVBQUEsRUFBQSxHQUNBLEVBQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLE1BQUEsV0FDQSxHQUFBLElBQ0EsTUFBQSxnQkFDQSxRQUFBLDhCQUNBLEtBQUEsVUFDQSxRQUFBLE9BRUEsV0FDQSxHQUFBLElBQ0EsTUFBQSxrQkFDQSxRQUFBLHVGQUNBLEtBQUEsWUFHQSxFQUFBLEdBQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxRQ2hCQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGlCQUFBLFNBQUEsUUFBQSxTQUFBLFdBQUEsUUFBQSxlQUFBLGVBQUEsUUFBQSxTQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxPQUFBLEVBQ0EsR0FBQSxNQUFBLEVBQUEsS0FBQSxHQUFBLEdBQUEsV0FDQSxFQUFBLElBQUEsU0FBQSxFQUFBLE1BQUEsT0FDQSxFQUFBLE9BQUEsUUFBQSxLQUFBLEVBQUEsUUFDQSxXQUNBLEVBQUEsR0FBQSxjQUVBLEVBQUEsWUFBQSxXQUNBLEVBQUEsTUFBQSxRQUFBLEtBQUEsRUFBQSxTQUVBLEVBQUEsVUFBQSxXQUNBLE1BQUEsTUFBQSxVQUFBLEVBQUEsU0FBQSxLQUFBLFVBQUEsRUFBQSxRQUVBLEVBQUEsZUFBQSxXQUNBLE1BQUEsTUFBQSxVQUFBLEVBQUEsT0FBQSxRQUFBLEtBQUEsVUFBQSxFQUFBLE1BQUEsUUFFQSxFQUFBLE9BQUEsV0FDQSxHQUFBLEVBQUEsS0FBQSxPQUNBLEdBQUEsRUFBQSxpQkFDQSxDQUFBLEdBQUEsSUFDQSxNQUFBLFdBQ0EsUUFBQSxtR0FDQSxZQUFBLGdCQUNBLGVBQUEsRUFDQSxRQUFBLFdBQ0EsRUFBQSxNQUFBLGdCQUNBLFdBS0EsU0FHQSxDQUFBLEdBQUEsSUFDQSxNQUFBLGNBQ0EsUUFBQSwrREFDQSxLQUFBLFdBSUEsSUFBQSxHQUFBLFdBQ0EsRUFBQSxRQUNBLEdBQUEsR0FDQSxFQUFBLE1BQ0EsV0FDQSxHQUFBLElBQ0EsTUFBQSxnQkFDQSxRQUFBLDZDQUNBLEtBQUEsV0FFQSxHQUFBLE9BQUEsUUFBQSxLQUFBLEVBQUEsYUNyREEsUUFBQSxPQUFBLFVBQ0EsV0FBQSxhQUFBLFNBQUEsUUFBQSxTQUFBLFFBQUEsUUFBQSxlQUFBLFNBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLEVBQUEsT0FBQSxFQUVBLEdBQUEsTUFBQSxFQUFBLEtBQUEsR0FBQSxHQUFBLFdBRUEsRUFBQSxJQUFBLEVBQUEsTUFBQSxPQUVBLEVBQUEsU0FBQSxFQUFBLEtBQUEsU0FDQSxHQUFBLEVBQUEsTUFBQSxNQUVBLFVBQUEsS0FFQSxXQUNBLEVBQUEsR0FBQSxjQUdBLEVBQUEsVUFBQSxXQUNBLEVBQUEsTUFBQSxVQUFBLEVBQ0EsRUFBQSxRQUNBLEdBQUEsR0FDQSxFQUFBLE1BQ0EsV0FDQSxHQUFBLElBQ0EsTUFBQSxhQUNBLFFBQUEsNkNBQ0EsV0FBQSxVQUtBLEVBQUEsV0FBQSxXQUNBLEVBQUEsTUFBQSxVQUFBLEVBQ0EsRUFBQSxRQUNBLEdBQUEsR0FDQSxFQUFBLE1BQ0EsV0FDQSxHQUFBLElBQ0EsTUFBQSxlQUNBLFFBQUEsc0RBQ0EsV0FBQSxVQUtBLEVBQUEsVUFBQSxXQUNBLEVBQUEsR0FBQSxhQUFBLEdBQUEsRUFBQSxNQUFBLFVDOUNBLFFBQUEsT0FBQSxVQUNBLFdBQUEsWUFBQSxTQUFBLFNBQUEsUUFBQSxTQUFBLEVBQUEsRUFBQSxHQUNBLEVBQUEsSUFBQSxxQ0FFQSxFQUFBLFNBQUEsV0FDQSxFQUFBLEdBQUEsZ0JDTEEsUUFBQSxPQUFBLFVBQ0EsV0FBQSxrQkFBQSxTQUFBLFlBQUEsU0FBQSxFQUFBLEdBQ0EsRUFBQSxTQUFBLFNBQUEsR0FDQSxNQUFBLEdBQUEsUUFBQSxHQUNBLEdBRUEsTUNOQSxRQUFBLE9BQUEsVUFDQSxXQUFBLGdCQUFBLFNBQUEsUUFBQSxTQUFBLFFBQUEsZUFBQSxlQUFBLFNBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBRUEsRUFBQSxNQUFBLHVCQUNBLEVBQUEsWUFBQSw2RkFDQSxFQUFBLFFBRUEsSUFBQSxJQUNBLG1CQUNBLG9CQUNBLGtCQUdBLEdBQUEsS0FBQSxDQUVBLElBQUEsR0FBQSxTQUFBLEdBQ0EsRUFBQSxLQUFBLEVBQ0EsRUFBQSxHQUFBLEVBQUEsRUFBQSxJQUdBLEdBQUEsRUFBQSxNQUdBLEVBQUEsT0FBQSxXQUNBLEdBQUEsRUFBQSxLQUFBLFFBQUEsRUFBQSxNQUFBLEVBQUEsT0FDQSxFQUFBLEtBQUEsYUFBQSxFQUFBLE9BQ0EsUUFBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLEVBQ0EsRUFBQSxTQUFBLEVBQUEsS0FBQSxTQUNBLEdBQUEsRUFBQSxNQUFBLE1BRUEsVUFBQSxJQUVBLEVBQUEsT0FDQSxFQUFBLEdBQUEsc0JBRUEsTUFBQSxXQUNBLEdBQUEsSUFDQSxNQUFBLFNBQ0EsUUFBQSxrRUFDQSxXQUFBLGFBR0EsSUFBQSxFQUFBLEtBQUEsT0FDQSxFQUFBLEtBQUEsZUFDQSxFQUFBLGVBRUEsQ0FBQSxHQUFBLElBQ0EsTUFBQSxjQUNBLFFBQUEsK0RBQ0EsS0FBQSxZQUtBLEVBQUEsU0FBQSxXQUNBLEVBQUEsRUFBQSxLQUFBLElBR0EsRUFBQSxTQUFBLFdBQ0EsRUFBQSxFQUFBLEtBQUEsT0M1REEsUUFBQSxPQUFBLFVBQ0EsV0FBQSxvQkFBQSxRQUFBLGVBQUEsU0FBQSxTQUFBLEVBQUEsRUFBQSxHQUNBLEVBQUEsUUFBQSxHQUFBLEVBQUEsT0FBQSxHQUFBLEtBQUEsRUFBQSxPQUFBLE1BQUEsV0FDQSxHQUFBLElBQ0EsTUFBQSxpQkFDQSxRQUFBLG1HQUNBLEtBQUEsVUFDQSxRQUFBLE9BRUEsV0FDQSxHQUFBLElBQ0EsTUFBQSxzQkFDQSxRQUFBLHNDQUNBLEtBQUEsWUFHQSxFQUFBLEdBQUEsU0FBQSxHQUFBLEVBQUEsT0FBQSxRQ2hCQSxRQUFBLE9BQUEsVUFDQSxVQUFBLFVBQUEsV0FDQSxNQUFBLFVBQUEsRUFBQSxFQUFBLEdBQ0EsR0FBQSxHQUFBLEVBQUEsT0FDQSxHQUFBLEtBQ0EsbUJBQUEsZUFBQSxFQUFBLGFDTEEsUUFBQSxPQUFBLFVBQ0EsVUFBQSxjQUFBLG9CQUFBLFNBQUEsR0FDQSxPQUNBLFNBQUEsSUFDQSxRQUFBLFVBQ0EsT0FDQSxNQUFBLFdBQ0EsUUFBQSxLQUVBLEtBQUEsU0FBQSxFQUFBLEVBQUEsRUFBQSxHQUNBLEdBQUEsR0FBQSxHQUFBLEdBQUEsRUFBQSxPQUNBLEVBQUEsRUFBQSxlQUVBLFNBQUEsUUFBQSxHQUFBLFlBQ0EsV0FBQSxFQUNBLGdCQUFBLElBRUEsR0FBQSxhQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxLQUNBLElBQUEsRUFBQSxPQUFBLEVBQUEsT0FBQSxDQUNBLEdBQUEsR0FBQSxFQUFBLEVBQUEsT0FBQSxFQUNBLEdBQUEsUUFBQSxPQUNBLENBQ0EsR0FBQSxHQUFBLEVBQUEsVUFBQSxFQUFBLEVBQ0EsSUFDQSxFQUFBLFdBQUEsR0FFQSxFQUFBLGNBQUEsRUFBQSxZQUNBLEVBQUEsSUFFQSxFQUFBLFFBQUEsRUFBQSxZQUNBLEVBQUEsaUJBQUEsUUFBQSxXQUNBLEdBQUEsR0FBQSxRQUFBLFFBQUEsR0FBQSxXQUFBLFlBQ0EsRUFBQSxFQUFBLGVBQ0EsR0FBQSxRQUFBLEVBQUEsUUFDQSxRQUFBLFFBQUEsR0FBQSxXQUFBLFdBQUEsS0FHQSxFQUFBLFFBQUEsVUFBQSxTQUFBLEdBQ0EsRUFBQSxXQUFBLElBR0EsRUFBQSxZQUFBLFNBQUEsU0FBQSxHQUNBLE1BQUEsSUFBQSxHQUFBLEVBQUEsUUFHQSxHQUZBLFFBUUEsUUFBQSxvQkFBQSxXQUNBLE1BQUEsVUFBQSxHQUVBLEdBQUEsR0FBQSxLQUVBLE1BQUEsUUFBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLEtBQUEsSUFDQSxFQUFBLEtBQUEsU0FBQSxFQUFBLEdBQ0EsTUFBQSxNQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUEsTUFBQSxHQUFBLEdBQ0EsS0FHQSxLQUFBLFdBQUEsU0FBQSxHQUNBLElBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLE9BQUEsSUFDQSxLQUFBLE9BQUEsRUFBQSxHQUFBLEtBQUEsSUFDQSxFQUFBLE9BQUEsRUFBQTtFQUlBLEtBQUEsU0FBQSxXQUNBLE1BQUEsR0FBQSxPQUFBLEVBQUEsRUFBQSxNQUVBLEtBQUEsY0FBQSxXQUVBLElBQUEsR0FEQSxNQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUNBLEVBQUEsS0FBQSxFQUFBLEdBQUEsS0FFQSxPQUFBLElBRUEsS0FBQSxVQUFBLFNBQUEsRUFBQSxHQUVBLElBQUEsR0FEQSxJQUFBLEVBQ0EsRUFBQSxFQUFBLEVBQUEsRUFBQSxPQUFBLElBQUEsQ0FDQSxHQUFBLENBQ0EsS0FBQSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUNBLEtBQUEsT0FBQSxFQUFBLEdBQUEsRUFBQSxNQUNBLEdBQUEsRUFHQSxJQUFBLEVBQUEsTUFBQSxHQUFBLFFDMUZBLFFBQUEsT0FBQSxVQUNBLFVBQUEsY0FBQSxXQUFBLFVBQUEsZUFBQSxTQUFBLEVBQUEsRUFBQSxHQUNBLE9BQ0EsU0FBQSxJQUNBLFlBQUEsdUNBQ0EsT0FDQSxNQUFBLEtBRUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxVQUNBLElBQUEsR0FBQSxRQUFBLFFBQUEsa0JBQ0EsR0FBQSxXQUNBLEVBQUEsVUFBQSxFQUFBLEtBQUEsbUJBRUEsRUFBQSxjQUFBLFNBQUEsR0FDQSxHQUFBLElBQ0EsTUFBQSxnQkFDQSxRQUFBLGdEQUNBLFlBQUEsZUFDQSxXQUFBLGlCQUNBLGVBQUEsRUFDQSxRQUFBLFdBQ0EsRUFBQSxRQUFBLEdBQUEsRUFBQSxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsU0FBQSxHQUNBLEVBQUEsTUFBQSxRQUtBLEVBQUEsWUFBQSxXQUNBLEdBQUEsRUFBQSxZQUFBLE9BQUEsQ0FDQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEVBQUEsUUFDQSxHQUFBLE9BQUEsR0FBQSxFQUFBLE1BQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLEVBQ0EsRUFBQSxhQUVBLEVBQUEsWUFBQSxzQkNuQ0EsUUFBQSxPQUFBLFVBQ0EsVUFBQSxZQUFBLFlBQUEsU0FBQSxHQUNBLE9BQ0EsU0FBQSxJQUNBLEtBQUEsU0FBQSxFQUFBLEdBQ0EsRUFBQSxTQUFBLFlBQ0EsRUFBQSxNQUFBLENBRUEsSUFBQSxHQUFBLFNBQUEsR0FDQSxHQUFBLEdBQUEsRUFBQSxLQUFBLEVBQUEsUUFBQSxPQUFBLENBQ0EsSUFDQSxFQUFBLFNBR0EsR0FBQSxPQUFBLFdBQ0EsRUFBQSxNQUFBLEVBQUEsS0FDQSxFQUFBLE1BQ0EsRUFBQSxTQUFBLFFBQ0EsRUFBQSxLQUFBLFFBQUEsS0FFQSxFQUFBLFlBQUEsUUFDQSxFQUFBLE9BQUEsUUFBQSxVQ3JCQSxRQUFBLE9BQUEsVUFDQSxRQUFBLGFBQUEsV0FDQSxLQUFBLGlCQUFBLDJDQUNBLEtBQUEsV0FBQSxHQUFBLFFBQUEsS0FBQSxrQkFDQSxLQUFBLFlBQUEsU0FBQSxFQUFBLEdBQ0EsTUFBQSxHQUFBLFNBQUEsRUFBQSxlQUNBLEVBQUEsUUFBQSxFQUFBLGNBQ0EsRUFBQSxVQUFBLEVBQUEsZ0JBQ0EsS0FHQSxVQUFBLFlBQUEsYUFBQSxTQUFBLEdBQ0EsT0FDQSxPQUNBLE1BQUEsSUFDQSxLQUFBLEtBRUEsWUFBQSwrQkFDQSxLQUFBLFNBQUEsR0FDQSxFQUFBLFVBRUEsRUFBQSxXQUFBLEVBQUEsV0FFQSxFQUFBLGlCQUFBLG1CQUFBLFNBQUEsR0FDQSxFQUFBLE9BQUEsS0FBQSxFQUFBLFlBQUEsRUFBQSxVQUdBLEVBQUEsaUJBQUEsb0JBQUEsU0FBQSxHQUNBLEVBQUEsT0FBQSxNQUFBLEVBQUEsWUFBQSxFQUFBLGdCQUtBLFVBQUEsYUFBQSxhQUFBLFNBQUEsR0FDQSxPQUNBLE9BQ0EsTUFBQSxJQUNBLEtBQUEsS0FFQSxZQUFBLGdDQUNBLEtBQUEsU0FBQSxHQUNBLEVBQUEsVUFFQSxFQUFBLGlCQUFBLG9CQUFBLFNBQUEsR0FDQSxFQUFBLE9BQUEsTUFBQSxFQUFBLFlBQUEsRUFBQSxXQUdBLEVBQUEsaUJBQUEsdUJBQUEsU0FBQSxHQUNBLEVBQUEsT0FBQSxTQUFBLEVBQUEsWUFBQSxFQUFBLG1CQU1BLFVBQUEsV0FBQSxXQUNBLE9BQ0EsT0FDQSxNQUFBLElBQ0EsS0FBQSxLQUVBLFlBQUEsa0NBR0EsVUFBQSxvQkFBQSxhQUFBLFNBQUEsR0FDQSxPQUNBLE9BQ0EsTUFBQSxJQUNBLEtBQUEsS0FFQSxZQUFBLHVDQUNBLEtBQUEsU0FBQSxHQUNBLEVBQUEsV0FBQSxFQUFBLHNCQUlBLFVBQUEsZ0JBQUEsUUFBQSxlQUFBLFNBQUEsRUFBQSxHQUNBLE9BQ0EsT0FDQSxNQUFBLElBQ0EsS0FBQSxLQUVBLFlBQUEsbUNBQ0EsS0FBQSxTQUFBLEdBQ0EsRUFBQSxZQUFBLFdBQ0EsRUFBQSxtQkFDQSxFQUFBLFFBQUEsR0FBQSxFQUFBLE1BQUEsS0FBQSxXQUNBLEVBQUEsbUJBQUEsQ0FDQSxJQUFBLElBQ0EsTUFBQSxzQkFDQSxRQUFBLHNGQUNBLFdBQUEsZUFPQSxVQUFBLGVBQUEsV0FDQSxPQUNBLE9BQ0EsTUFBQSxZQUVBLFFBQUEsVUFDQSxLQUFBLFNBQUEsRUFBQSxFQUFBLEVBQUEsR0FDQSxFQUFBLFNBQUEsZ0JBQ0EsSUFBQSxHQUFBLFdBQ0EsRUFBQSxNQUFBLG1CQUFBLEdBQUEsT0FDQSxFQUFBLFNBQUEsVUFFQSxFQUFBLFlBQUEsVUFHQSxHQUFBLE9BQUEsUUFBQSxHQUNBLEVBQUEsS0FBQSxRQUFBLFNBQUEsR0FDQSxFQUFBLE9BQUEsRUFBQSxNQUNBLEVBQUEsY0FBQSxFQUFBLE1BQUEsU0FLQSxVQUFBLFlBQUEsb0JBQUEsU0FBQSxHQUNBLE9BQ0EsT0FDQSxNQUFBLElBQ0EsS0FBQSxLQUVBLFlBQUEsK0JBQ0EsS0FBQSxTQUFBLEdBQ0EsR0FDQSxHQURBLEdBQUEsRUFFQSxFQUFBLEVBQUEsT0FBQSxjQUFBLFNBQUEsR0FDQSxJQUFBLEdBQ0EsSUFFQSxHQUFBLEVBQ0EsRUFBQSxHQUFBLEdBQUEsRUFBQSxNQUFBLE9BQ0EsRUFBQSxVQUFBLFNBQUEsR0FDQSxFQUFBLFdBQUEsV0FNQSxVQUFBLGFBQUEsV0FDQSxPQUNBLE9BQ0EsTUFBQSxZQUVBLFFBQUEsVUFDQSxLQUFBLFNBQUEsRUFBQSxFQUFBLEVBQUEsR0FDQSxFQUFBLHFCQUFBLEtBQUEsV0FDQSxFQUFBLE1BQUEsS0FBQSxNQUFBLEVBQUEsYUFDQSxFQUFBLGNBQUEsRUFBQSxNQUFBLFNBQUEsYUFDQSxFQUFBLFlBR0EsRUFBQSxZQUFBLEtBQUEsU0FBQSxHQUNBLEdBQUEsRUFBQSxTQUFBLEdBQUEsT0FBQSxDQUNBLElBQUEsR0FBQSxLQUFBLE1BQUEsRUFDQSxPQUFBLElBQ0EsRUFBQSxjQUFBLEVBQUEsU0FBQSxhQUNBLEVBQUEsV0FDQSxJQUVBLE9DcEtBLFFBQUEsT0FBQSxVQUNBLFVBQUEsUUFBQSxXQUFBLGNBQUEsZUFBQSxTQUFBLEVBQUEsRUFBQSxHQUNBLE9BQ0EsU0FBQSxJQUNBLFlBQUEsaUNBQ0EsT0FDQSxNQUFBLEtBRUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxZQUNBLEVBQUEsY0FDQSxJQUFBLEtBRUEsR0FBQSxNQUFBLFNBQUEsS0FBQSxTQUFBLEdBR0EsSUFBQSxHQUZBLElBQUEsZUFBQSxnQkFBQSxnQkFBQSxhQUNBLEtBQ0EsRUFBQSxFQUFBLEVBQUEsRUFBQSxPQUFBLElBQUEsQ0FDQSxHQUFBLElBQUEsS0FBQSxFQUFBLEdBQ0EsR0FBQSxRQUNBLEtBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLE1BQUEsT0FBQSxJQUFBLENBQ0EsR0FBQSxHQUFBLEtBQUEsU0FBQSxFQUNBLEdBQUEsTUFBQSxHQUFBLEVBRUEsRUFBQSxLQUFBLEdBRUEsRUFBQSxTQUFBLElBRUEsRUFBQSxPQUFBLFNBQUEsR0FDQSxHQUFBLElBQ0EsTUFBQSxVQUFBLEVBQUEsS0FBQSxJQUNBLFFBQUEsbUNBQUEsRUFBQSxLQUFBLGtCQUNBLFlBQUEsZUFDQSxXQUFBLGlCQUNBLGVBQUEsRUFDQSxRQUFBLFdBQ0EsRUFBQSxRQUFBLEdBQUEsRUFBQSxNQUFBLElBQUEsSUFBQSxFQUFBLEtBQUEsU0FBQSxHQUNBLEVBQUEsTUFBQSxRQUtBLEVBQUEsVUFBQSxTQUFBLEdBRUEsSUFBQSxHQURBLEdBQUEsRUFBQSxHQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsT0FBQSxJQUNBLEdBQUEsRUFBQSxHQUFBLEVBQUEsT0FBQSxDQUVBLFFBQUEsR0FFQSxFQUFBLGFBQUEsU0FBQSxHQUNBLEVBQUEsR0FBQSxDQUNBLEtBQUEsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLE1BQUEsYUFBQSxPQUFBLElBQ0EsRUFBQSxNQUFBLGFBQUEsR0FBQSxNQUFBLElBQUEsRUFBQSxJQUVBLE9BQUEsR0FBQSxJQUVBLEVBQUEsT0FBQSxTQUFBLEdBQ0EsRUFBQSxRQUNBLEdBQUEsRUFBQSxNQUFBLElBQ0EsSUFBQSxFQUFBLEtBQ0EsSUFFQSxFQUFBLEtBQUEsU0FBQSxHQUNBLEVBQUEsU0FBQSxFQUFBLE1BQUEsYUFBQSxRQUFBLElBQUEsUUFBQSxLQUFBLElBRUEsRUFBQSxPQUFBLFNBQUEsR0FDQSxFQUFBLE1BQUEsYUFBQSxHQUFBLEVBQUEsU0FBQSxJQUVBLEVBQUEsS0FBQSxXQUNBLEdBQUEsRUFBQSxRQUFBLE9BQUEsQ0FDQSxHQUFBLEdBQUEsR0FBQSxHQUFBLEVBQUEsWUFDQSxHQUFBLE9BQUEsR0FBQSxFQUFBLE1BQUEsS0FBQSxTQUFBLEdBQ0EsRUFBQSxNQUFBLEVBQ0EsRUFBQSxpQkFFQSxFQUFBLFFBQUEsc0JDMUVBLFFBQUEsT0FBQSxVQUNBLE9BQUEsV0FBQSxVQUFBLFNBQUEsR0FDQSxNQUFBLFVBQUEsR0FDQSxHQUFBLEVBQUEsQ0FDQSxHQUFBLEdBQUEsS0FBQSxNQUFBLEdBQ0EsR0FBQSxHQUFBLE9BQUEsVUFDQSxFQUFBLEVBQUEsRUFDQSxFQUFBLEtBQUEsTUFBQSxFQUFBLEtBQ0EsRUFBQSxLQUFBLE1BQUEsRUFBQSxJQUNBLEVBQUEsS0FBQSxNQUFBLEVBQUEsSUFDQSxFQUFBLEtBQUEsTUFBQSxFQUFBLEdBQ0EsT0FBQSxHQUFBLEdBQ0EsTUFBQSxFQUFBLFFBQUEsRUFBQSxVQUNBLEVBQUEsRUFDQSxFQUFBLFlBQ0EsR0FBQSxFQUNBLFlBQ0EsRUFBQSxFQUNBLEVBQUEsYUFDQSxHQUFBLEVBQ0EsY0FDQSxFQUFBLEVBQ0EsRUFBQSxlQUNBLEdBQUEsRUFDQSxlQUVBLHlCQzFCQSxRQUFBLE9BQUEsVUFDQSxRQUFBLGdCQUFBLFdBQUEsU0FBQSxHQUVBLE1BQUEsVUFBQSxHQUNBLEdBQUEsRUFDQSxHQUFBLEdBQ0EsWUFBQSw4QkFDQSxhQUFBLFFBQ0EsV0FBQSxXQUNBLEtBQUEsTUFBQSxFQUFBLE1BQ0EsS0FBQSxRQUFBLEVBQUEsUUFDQSxLQUFBLFFBQUEsRUFBQSxRQUFBLFdBQUEsRUFBQSxVQUFBLEVBQUEsZUFBQSxFQUNBLEtBQUEsT0FBQSxFQUFBLFdBQ0EsS0FBQSxZQUFBLEVBQUEsYUFBQSxVQUNBLEtBQUEsV0FBQSxFQUFBLFlBQUEsU0FDQSxLQUFBLGNBQUEsRUFBQSxpQkFHQSxFQUFBLFdBRUEsS0FBQSxRQUFBLFdBQ0EsRUFBQSxrQkNyQkEsUUFBQSxPQUFBLFVBQ0EsUUFBQSxnQkFBQSxXQUFBLFdBQUEsU0FBQSxFQUFBLEdBQ0EsTUFBQSxVQUFBLEdBQ0EsR0FBQSxFQUNBLEdBQUEsR0FDQSxZQUFBLDhCQUNBLGFBQUEsZUFDQSxXQUFBLFdBQ0EsS0FBQSxNQUFBLEVBQUEsTUFDQSxLQUFBLFFBQUEsRUFBQSxRQUNBLEtBQUEsTUFBQSxFQUFBLFdBQ0EsS0FBQSxLQUFBLEVBQUEsSUFDQSxJQUFBLEdBQUEsRUFBQSxTQUFBLEdBQ0EsR0FBQSxFQUFBLFdBQUEsTUFHQSxFQUFBLFdBRUEsS0FBQSxRQUFBLFdBQ0EsRUFBQSIsImZpbGUiOiJwdWJsaWMvYnVpbGQvYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScsIFsndWkucm91dGVyJywnbmdSZXNvdXJjZScsJ2J0Zm9yZC5tb2RhbCcsJ25nVGFnc0lucHV0JywnbmdBbmltYXRlJ10pXG4gICAgLmNvbmZpZyhmdW5jdGlvbigkc3RhdGVQcm92aWRlciwgJHVybFJvdXRlclByb3ZpZGVyLCAkbG9jYXRpb25Qcm92aWRlcil7XG4gICAgICAgICRsb2NhdGlvblByb3ZpZGVyLmh0bWw1TW9kZSh0cnVlKTtcbiAgICAgICAgJHVybFJvdXRlclByb3ZpZGVyLm90aGVyd2lzZShcIi9ub3Rmb3VuZFwiKVxuICAgICAgICAkc3RhdGVQcm92aWRlclxuICAgICAgICAuc3RhdGUoJ2luZGV4Jyx7XG4gICAgICAgICAgICB1cmwgOiAnLycsXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvaG9tZS5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiAnSG9tZUN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnbmV3ZXZlbnQnLHtcbiAgICAgICAgICAgIHVybCA6ICcvbmV3JyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9uZXdFdmVudC9sYXlvdXQuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ05ld0V2ZW50Q3RybCcsXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnbmV3ZXZlbnQuZ2VuZXJhbCcsIHtcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9uZXdFdmVudC9nZW5lcmFsLmh0bWwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnbmV3ZXZlbnQuZGF0ZXRpbWUnLCB7XG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvbmV3RXZlbnQvZGF0ZXRpbWUuaHRtbCdcbiAgICAgICAgfSlcbiAgICAgICAgLnN0YXRlKCduZXdldmVudC5pbnZpdGUnLCB7XG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvbmV3RXZlbnQvaW52aXRlLmh0bWwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnbmV3ZXZlbnQuc3VjY2VzcycsIHtcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9uZXdFdmVudC9zdWNjZXNzLmh0bWwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnYWJvdXQnLCB7XG4gICAgICAgICAgICB1cmwgOiAnL2Fib3V0JyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9hYm91dC5odG1sJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiAnQWJvdXRDdHJsJ1xuICAgICAgICB9KVxuICAgICAgICAuc3RhdGUoJ25vdGZvdW5kJywge1xuICAgICAgICAgICAgdXJsIDogJy9ub3Rmb3VuZCcsXG4gICAgICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvbm90Zm91bmQuaHRtbCdcbiAgICAgICAgfSlcbiAgICAgICAgLnN0YXRlKCdldmVudCcse1xuICAgICAgICAgICAgdXJsIDogJy86aWQnLFxuICAgICAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2V2ZW50Lmh0bWwnLFxuICAgICAgICAgICAgY29udHJvbGxlciA6ICdFdmVudEN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZWRpdGV2ZW50Jywge1xuICAgICAgICAgICAgdXJsOiAnLzppZC9lZGl0JyxcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9lZGl0ZXZlbnQuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0VkaXRFdmVudEN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgndmVyaWZ5ZXZlbnQnLCB7XG4gICAgICAgICAgICB1cmwgOiAnL3ZlcmlmeS86aWQvY29kZS86Y29kZScsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ1ZlcmlmaWNhdGlvbkN0cmwnXG4gICAgICAgIH0pXG4gICAgICAgIC5zdGF0ZSgnZGVsZXRlZXZlbnQnLCB7XG4gICAgICAgICAgICB1cmwgOiAnL2RlbGV0ZS86aWQvY29kZS86Y29kZScsXG4gICAgICAgICAgICBjb250cm9sbGVyIDogJ0RlbGV0aW9uQ3RybCdcbiAgICAgICAgfSlcbiAgICB9KVxuICAgIC5mYWN0b3J5KCdFdmVudCcsIGZ1bmN0aW9uKCRyZXNvdXJjZSl7XG4gICAgICAgIHJldHVybiAkcmVzb3VyY2UoJy9hcGkvZXZlbnQvOmlkJywgeyBpZCA6ICdAX2lkJyB9LCB7XG4gICAgICAgICAgICAndXBkYXRlJyA6IHsgbWV0aG9kIDogJ1BVVCcgfSxcbiAgICAgICAgICAgICd2ZXJpZnknIDogeyBtZXRob2QgOiAnR0VUJywgdXJsIDogJy9hcGkvZXZlbnQvOmlkL2NvZGUvOmNvZGUnIH0sXG4gICAgICAgICAgICAnZGVzdHJveSc6IHsgbWV0aG9kIDogJ0RFTEVURScsIHVybDogJy9hcGkvZXZlbnQvOmlkL2NvZGUvOmNvZGUnIH1cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICAuZmFjdG9yeSgnUGFydGljaXBhbnQnLCBmdW5jdGlvbigkcmVzb3VyY2Upe1xuICAgICAgICByZXR1cm4gJHJlc291cmNlKCcvYXBpL2V2ZW50LzppZC9wYXJ0aWNpcGFudC86cGlkJywgeyBpZDogJ0BfaWQnfSwge1xuICAgICAgICAgICAgJ3VwZGF0ZScgOiB7IG1ldGhvZCA6ICdQVVQnIH1cbiAgICAgICAgfSk7XG4gICAgfSlcbiAgICAuZmFjdG9yeSgnQ29tbWVudCcsIGZ1bmN0aW9uKCRyZXNvdXJjZSl7XG4gICAgICAgIHJldHVybiAkcmVzb3VyY2UoJy9hcGkvZXZlbnQvOmlkL2NvbW1lbnQvOmNpZCcsIHsgaWQgOiAnQF9pZCcgfSwge1xuICAgICAgICAgICAgJ3VwZGF0ZScgOiB7IG1ldGhvZCA6ICdQVVQnIH1cbiAgICAgICAgfSlcbiAgICB9KVxuICAgIC5mYWN0b3J5KCdUaXRsZScsIGZ1bmN0aW9uKCl7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzZXQgOiBmdW5jdGlvbih0aXRsZSl7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuIiwiYW5ndWxhci5tb2R1bGUoXCJyYWxsbHlcIikucnVuKFtcIiR0ZW1wbGF0ZUNhY2hlXCIsIGZ1bmN0aW9uKCR0ZW1wbGF0ZUNhY2hlKSB7JHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2Fib3V0Lmh0bWxcIixcIjxkaXYgc3R5bGU9XFxcIm1heC13aWR0aDo2MDBweFxcXCI+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/IENsaWNrIG9uIHRoZSBidXR0b24gYmVsb3cgdG8gc3RhcnQhXFxuICAgIDwvZGl2PlxcbiAgICA8YnV0dG9uIG5nLWNsaWNrPVxcXCJuZXdFdmVudCgpXFxcIiBjbGFzcz1cXFwiYnRuXFxcIj5TY2hlZHVsZSBOZXcgRXZlbnQ8L2J1dHRvbj5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvbmV3ZXZlbnQuaHRtbFwiLFwiPGRpdiBuZy1pZj1cXFwiIWV2ZW50VXJsXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYm94XFxcIiBuZy1jbGFzcz1cXFwie1xcJ2FuaW1hdGVkIHNoYWtlXFwnOiBmb3JtLiRzdWJtaXR0ZWQgJiYgZm9ybS4kaW52YWxpZCB9XFxcIj5cXG5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImJveC10aXRsZVxcXCI+U2NoZWR1bGUgYSBOZXcgRXZlbnQ8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImJveC1kZXNjcmlwdGlvblxcXCI+XFxuICAgICAgICAgICAgRmlsbCBpbiB0aGUgZm9ybSBiZWxvdyB0byBjcmVhdGUgeW91ciBldmVudCBhbmQgc2hhcmUgaXQgd2l0aCB5b3VyIGZyaWVuZHMgYW5kIGNvbGxlYWd1ZXMuXFxuICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgIDxmb3JtIG5vdmFsaWRhdGUgYXV0b2NvbXBsZXRlPVxcXCJvZmZcXFwiIG5hbWU9XFxcImZvcm1cXFwiIG5nLXN1Ym1pdD1cXFwic3VibWl0KClcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgbmctaWY9XFxcInBhZ2UgPT0gMVxcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPVxcXCJib3gtc2VjdGlvblxcXCIgdXNlci1mb3JtIGZvcm09XFxcImZvcm1cXFwiIGV2ZW50PVxcXCJldmVudFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cXG5cXG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XFxcImJveC1zZWN0aW9uXFxcIiBldmVudC1mb3JtIGZvcm09XFxcImZvcm1cXFwiIGV2ZW50PVxcXCJldmVudFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IG5nLWlmPVxcXCJwYWdlPT0yXFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9XFxcImJveC1zZWN0aW9uXFxcIiBkYXRlLWZvcm0gZm9ybT1cXFwiZm9ybVxcXCIgZXZlbnQ9XFxcImV2ZW50XFxcIj5cXG5cXG4gICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxcblxcbiAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIG5nLXNob3c9XFxcImV2ZW50LmRhdGVzLmxlbmd0aFxcXCIgdGltZS1mb3JtIGZvcm09XFxcImZvcm1cXFwiIGV2ZW50PVxcXCJldmVudFxcXCI+XFxuXFxuICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG5cXG4gICAgICAgICAgICA8ZGl2IG5nLWlmPVxcXCJwYWdlPT0zXFxcIj5cXG5cXG4gICAgICAgICAgICA8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIHBhcnRpY2lwYW50cy1mb3JtIGZvcm09XFxcImZvcm1cXFwiIGV2ZW50PVxcXCJldmVudFxcXCI+XFxuXFxuICAgICAgICAgICAgPC9zZWN0aW9uPlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcblxcblxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImJveC1jb250cm9scyBib3gtYm90dG9tLXN0aWNreVxcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBuZy1pZj1cXFwicGFnZSE9MVxcXCIgY2xhc3M9XFxcImJ0blxcXCIgbmctY2xpY2s9XFxcInByZXZQYWdlKClcXFwiPkJhY2s8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIG5nLWlmPVxcXCJwYWdlIT0zXFxcIiBjbGFzcz1cXFwiYnRuXFxcIiBuZy1jbGljaz1cXFwibmV4dFBhZ2UoKVxcXCI+TmV4dDwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcInN1Ym1pdFxcXCIgbmctaWY9XFxcInBhZ2U9PTNcXFwiIGNsYXNzPVxcXCJidG4gYnRuLXByaW1hcnlcXFwiPkNyZWF0ZSBFdmVudDwvYnV0dG9uPlxcbiAgICAgICAgICAgIDwvZGl2PlxcblxcbiAgICAgICAgPC9mb3JtPlxcbiAgICA8L2Rpdj5cXG5cXG48L2Rpdj5cXG48ZGl2IG5nLWlmPVxcXCJldmVudFVybFxcXCIgY2xhc3M9XFxcImJveFxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcImJveC1tZXNzYWdlXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtYWluLWltYWdlXFxcIj5cXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvc3VjY2Vzc19sYXJnZS5wbmdcXFwiIHdpZHRoPVxcXCIxMDBcXFwiIC8+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInRpdGxlXFxcIj5FdmVudCBDcmVhdGVkPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbnRlbnRcXFwiPlxcbiAgICAgICAgWW91ciBldmVudCBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseSEgWW91IHNob3VsZCByZWNlaXZlIGFuIGVtYWlsIHNob3J0bHkgd2l0aCBpbnN0cnVjdGlvbnMgdG8gdmVyaWZ5IHlvdXIgZW1haWwgYWRkcmVzcy5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pbmktZGl2aWRlclxcXCI+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgIDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkaXNhYmxlZD1cXFwidHJ1ZVxcXCIgdmFsdWU9XFxcInt7ZXZlbnRVcmx9fVxcXCIgLz5cXG4gICAgICAgIDxhIGhyZWY9XFxcInt7ZXZlbnRVcmx9fVxcXCIgY2xhc3M9XFxcImJ0biBmb3JtLWJ0blxcXCI+R088L2E+XFxuICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvbm90Zm91bmQuaHRtbFwiLFwiPGgxPkVycm9yIDQwNDwvaDE+XFxuPGgyPk5vdCBGb3VuZDwvaDI+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL25vdGlmaWNhdGlvbi5odG1sXCIsXCI8ZGl2IGNsYXNzPVxcXCJub3RpZmljYXRpb24ge3tub3RpZmljYXRpb24udHlwZX19XFxcIiBuZy1jbGljaz1cXFwibm90aWZpY2F0aW9uLmNsb3NlKClcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJ0aXRsZVxcXCI+XFxuICAgICAgICB7e25vdGlmaWNhdGlvbi50aXRsZX19XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJtZXNzYWdlXFxcIj5cXG4gICAgICAgIHt7bm90aWZpY2F0aW9uLm1lc3NhZ2V9fVxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvZGlyZWN0aXZlcy9kaXNjdXNzaW9uLmh0bWxcIixcIjx1bCBjbGFzcz1cXFwiY29tbWVudC10aHJlYWRcXFwiIG5nLXNob3c9XFxcImV2ZW50LmNvbW1lbnRzLmxlbmd0aFxcXCI+XFxuICAgIDxsaSBuZy1yZXBlYXQ9XFxcImNvbW1lbnQgaW4gZXZlbnQuY29tbWVudHNcXFwiIGNsYXNzPVxcXCJjb21tZW50XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImF2YXRhci1zZWN0aW9uXFxcIj5cXG4gICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9hdmF0YXIucG5nXFxcIiAvPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb21tZW50LXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxhIGhyZWY9XFxcIiNcXFwiIGNsYXNzPVxcXCJjb21tZW50LWRlbGV0ZVxcXCIgbmctY2xpY2s9XFxcImRlbGV0ZUNvbW1lbnQoY29tbWVudClcXFwiPiZ0aW1lczs8L2E+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibWV0YVxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJuYW1lXFxcIj57e2NvbW1lbnQuYXV0aG9yLm5hbWV9fTwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcInRpbWVcXFwiPnt7Y29tbWVudC5jcmVhdGVkIHwgZWxhcHNlZH19PC9zcGFuPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNvbnRlbnRcXFwiPnt7Y29tbWVudC5jb250ZW50fX08L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2xpPlxcbjwvdWw+XFxuPGZvcm0gbm92YWxpZGF0ZSBuZy1zdWJtaXQ9XFxcInBvc3RDb21tZW50KClcXFwiIG5hbWU9XFxcImNvbW1lbnRGb3JtXFxcIiBjbGFzcz1cXFwiY29tbWVudC1mb3JtXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYXZhdGFyLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvYXZhdGFyLnBuZ1xcXCIgLz5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImlucHV0LXNlY3Rpb24gZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjb250ZW50LXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiByZXF1aXJlZCBuZy1tb2RlbD1cXFwiY29tbWVudC5jb250ZW50XFxcIiBwbGFjZWhvbGRlcj1cXFwiV3JpdGUgYSBjb21tZW50Li4uXFxcIj48L3RleHRhcmVhPlxcbiAgICAgICAgPC9kaXY+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJuYW1lLXNlY3Rpb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm5hbWUtY29udGFpbmVyXFxcIj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIHJlcXVpcmVkIHBsYWNlaG9sZGVyPVxcXCJZb3VyIE5hbWVcXFwiIG5nLW1vZGVsPVxcXCJjb21tZW50LmF1dGhvci5uYW1lXFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcInN1Ym1pdFxcXCIgY2xhc3M9XFxcImJ0blxcXCI+UG9zdCBDb21tZW50PC9idXR0b24+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJmb3JtLWVycm9yXFxcIiBuZy1zaG93PVxcXCJjb21tZW50Rm9ybS4kc3VibWl0dGVkICYmIGNvbW1lbnRGb3JtLiRlcnJvclxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9lcnJvci5wbmdcXFwiIHdpZHRoPVxcXCIxNFxcXCIgLz4gTWFrZSBzdXJlIHlvdSBmaWxsIGluIGFsbCB0aGUgZmllbGRzLlxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9mb3JtPlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9kaXJlY3RpdmVzL3BvbGwuaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwicG9sbC1oZWFkZXJcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJoZWFkZXIgcGFydGljaXBhbnRzLWhlYWRlclxcXCI+XFxuICAgICAgICB7e2V2ZW50LnBhcnRpY2lwYW50cy5sZW5ndGh9fSBwYXJ0aWNpcGFudHNcXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImhlYWRlciBkYXRlLWhlYWRlclxcXCIgbmctcmVwZWF0PVxcXCJkYXRlIGluIGV2ZW50LmRhdGVzXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImRhdGljb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImRvd1xcXCI+XFxuICAgICAgICAgICAgICAgIHt7ZGF0ZSB8IGRhdGU6IFxcJ0VFRVxcJ319XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGF5XFxcIj5cXG4gICAgICAgICAgICAgICAge3tkYXRlIHwgZGF0ZTogXFwnZFxcJ319XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9udGhcXFwiPlxcbiAgICAgICAgICAgICAgICB7e2RhdGUgfCBkYXRlIDogXFwnTU1NXFwnfX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiY291bnRcXFwiIG5nLXNob3c9XFxcInNlbGVjdGVkRGF0ZSgkaW5kZXgpXFxcIiBuZy1jbGFzcz17dG9wOmlzVG9wRGF0ZSgkaW5kZXgpfT57e3NlbGVjdGVkRGF0ZSgkaW5kZXgpfX08L3NwYW4+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImhlYWRlciBhY3Rpb25zLWhlYWRlclxcXCI+XFxuXFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcbjxkaXYgY2xhc3M9XFxcInBvbGwtYm9keVxcXCI+XFxuICAgIDxkaXYgY2xhc3M9XFxcInBvbGwtZW50cnlcXFwiIG5nLXJlcGVhdD1cXFwicGFydGljaXBhbnQgaW4gZXZlbnQucGFydGljaXBhbnRzXFxcIj5cXG4gICAgICAgIDxmb3JtIG5vdmFsaWRhdGUgbmctc3VibWl0PVxcXCJ1cGRhdGUocGFydGljaXBhbnQpOyBlZGl0TW9kZSA9IGZhbHNlXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIG5hbWUtY2VsbFxcXCI+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJhdmF0YXIgc3R5bGUte3skaW5kZXggKyAxfX1cXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvdXNlci5wbmdcXFwiIHdpZHRoPVxcXCIxMVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgcmVxdWlyZWQgYXV0b2NvbXBsZXRlPVxcXCJvZmZcXFwiIHR5cGU9XFxcInRleHRcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIG5nLW1vZGVsPVxcXCJwYXJ0aWNpcGFudC5uYW1lXFxcIiBuZy1zaG93PVxcXCJlZGl0TW9kZVxcXCIgdmFsdWU9XFxcInBhcnRpY2lwYW50Lm5hbWVcXFwiLz5cXG4gICAgICAgICAgICAgICAgPHNwYW4gbmctaGlkZT1cXFwiZWRpdE1vZGVcXFwiIGNsYXNzPVxcXCJuYW1lIGVkaXRhYmxlXFxcIiBuZy1jbGljaz1cXFwiZWRpdE1vZGUgPSB0cnVlICYmICFldmVudC5pc0Nsb3NlZDsgZWRpdChwYXJ0aWNpcGFudClcXFwiPnt7cGFydGljaXBhbnQubmFtZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNlbGwgdm90ZS1jZWxsXFxcIiBuZy1yZXBlYXQ9XFxcImRhdGUgaW4gZXZlbnQuZGF0ZXNcXFwiPlxcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy90aWNrQDJ4LnBuZ1xcXCIgIHdpZHRoPVxcXCIxNlxcXCIgbmctaGlkZT1cXFwiZWRpdE1vZGVcXFwiIG5nLWlmPVxcXCJwYXJ0aWNpcGFudC5kYXRlc1skaW5kZXhdXFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9ub3BlQDJ4LnBuZ1xcXCIgd2lkdGg9XFxcIjhcXFwiIG5nLWhpZGU9XFxcImVkaXRNb2RlXFxcIiBuZy1pZj1cXFwiIXBhcnRpY2lwYW50LmRhdGVzWyRpbmRleF1cXFwiIC8+XFxuICAgICAgICAgICAgICAgIDxpbnB1dCBuZy1tb2RlbD1cXFwicGFydGljaXBhbnQuZGF0ZXNbJGluZGV4XVxcXCIgbmctc2hvdz1cXFwiZWRpdE1vZGVcXFwiIG5nLWZhbHNlLXZhbHVlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiY2hlY2tib3hcXFwiIC8+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm92ZXJsYXlcXFwiIG5nLXNob3c9XFxcImVkaXRNb2RlXFxcIiBuZy1jbGljaz1cXFwicGFydGljaXBhbnQuZGF0ZXNbJGluZGV4XSA9ICFwYXJ0aWNpcGFudC5kYXRlc1skaW5kZXhdXFxcIj48L2Rpdj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIGFjdGlvbi1jZWxsXFxcIiBuZy1oaWRlPVxcXCJldmVudC5pc0Nsb3NlZFxcXCI+XFxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBuZy1oaWRlPVxcXCJlZGl0TW9kZVxcXCIgbmctY2xpY2s9XFxcImVkaXRNb2RlID0gdHJ1ZTsgZWRpdChwYXJ0aWNpcGFudClcXFwiIGNsYXNzPVxcXCJidG4gaG92ZXJcXFwiPkVkaXQ8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIG5nLWhpZGU9XFxcImVkaXRNb2RlXFxcIiBuZy1jbGljaz1cXFwiZGVsZXRlKHBhcnRpY2lwYW50KVxcXCIgY2xhc3M9XFxcImJ0biBkYW5nZXIgaG92ZXJcXFwiPkRlbGV0ZTwvYnV0dG9uPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcInN1Ym1pdFxcXCIgbmctc2hvdz1cXFwiZWRpdE1vZGVcXFwiIGNsYXNzPVxcXCJidG5cXFwiPlNhdmU8L2J1dHRvbj5cXG4gICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIG5nLXNob3c9XFxcImVkaXRNb2RlXFxcIiBuZy1jbGljaz1cXFwiZWRpdE1vZGUgPSBmYWxzZTsgY2FuY2VsKCRpbmRleClcXFwiIGNsYXNzPVxcXCJidG5cXFwiPkNhbmNlbDwvYnV0dG9uPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9mb3JtPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwicG9sbC1leGFtcGxlXFxcIiBuZy1jbGFzcz1cXFwie2hpZGRlbiA6IGV2ZW50LnBhcnRpY2lwYW50cy5sZW5ndGggPiAwfVxcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJwb2xsLWVudHJ5XFxcIiBuZy1yZXBlYXQ9XFxcImV4YW1wbGUgaW4gZXhhbXBsZXNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNlbGwgbmFtZS1jZWxsXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImF2YXRhciBzdHlsZS17eyRpbmRleCArIDF9fVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy91c2VyLnBuZ1xcXCIgd2lkdGg9XFxcIjExXFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVxcXCJuYW1lXFxcIj57e2V4YW1wbGUubmFtZX19PC9zcGFuPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNlbGwgdm90ZS1jZWxsXFxcIiBuZy1yZXBlYXQ9XFxcImRhdGUgaW4gZXZlbnQuZGF0ZXNcXFwiPlxcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy90aWNrQDJ4LnBuZ1xcXCIgIHdpZHRoPVxcXCIxNlxcXCIgbmctaWY9XFxcImV4YW1wbGUuZGF0ZXNbJGluZGV4XVxcXCIgLz5cXG4gICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvbm9wZUAyeC5wbmdcXFwiIHdpZHRoPVxcXCI4XFxcIiBuZy1pZj1cXFwiIWV4YW1wbGUuZGF0ZXNbJGluZGV4XVxcXCIgLz5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJjZWxsIGFjdGlvbi1jZWxsXFxcIj5cXG5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwib3ZlcmxheVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwib3ZlcmxheS10ZXh0XFxcIj5cXG4gICAgICAgICAgICAgICAgRmlsbCBpbiB0aGUgZm9ybSBiZWxvdyB0byBnZXQgc3RhcnRlZFxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IG5nLWhpZGU9XFxcImV2ZW50LmlzQ2xvc2VkXFxcIiBjbGFzcz1cXFwicG9sbC1lbnRyeSBoaWdobGlnaHRcXFwiPlxcbiAgICAgICAgPGZvcm0gbm92YWxpZGF0ZSBuYW1lPVxcXCJmb3JtbmV3XFxcIiBuZy1zdWJtaXQ9XFxcInNhdmUoKVxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiY2VsbCBuYW1lLWNlbGxcXFwiPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiYXZhdGFyIHN0eWxlLXt7cGFydGljaXBhbnQuc3R5bGV9fVxcXCI+XFxuICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy91c2VyLnBuZ1xcXCIgd2lkdGg9XFxcIjExXFxcIiAvPlxcbiAgICAgICAgICAgICAgICA8L3NwYW4+XFxuICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XFxcIm9mZlxcXCIgbmFtZT1cXFwidXNlcm5hbWVcXFwiIHR5cGU9XFxcInRleHRcXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2xcXFwiIHBsYWNlaG9sZGVyPVxcXCJZb3VyIG5hbWUuLi5cXFwiIG5nLW1vZGVsPVxcXCJwYXJ0aWNpcGFudC5uYW1lXFxcIiByZXF1aXJlZCB2YWx1ZT1cXFwicGFydGljaXBhbnQubmFtZVxcXCIvPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNlbGwgdm90ZS1jZWxsXFxcIiBuZy1yZXBlYXQ9XFxcImRhdGUgaW4gZXZlbnQuZGF0ZXNcXFwiPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgbmctbW9kZWw9XFxcInBhcnRpY2lwYW50LmRhdGVzWyRpbmRleF1cXFwiIG5nLWZhbHNlLXZhbHVlPVxcXCJmYWxzZVxcXCIgdHlwZT1cXFwiY2hlY2tib3hcXFwiIC8+XFxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm92ZXJsYXlcXFwiIG5nLWNsaWNrPVxcXCJwYXJ0aWNpcGFudC5kYXRlc1skaW5kZXhdID0gIXBhcnRpY2lwYW50LmRhdGVzWyRpbmRleF1cXFwiPjwvZGl2PlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImNlbGwgYWN0aW9uLWNlbGxcXFwiPlxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XFxcInN1Ym1pdFxcXCIgbmctY2xhc3M9XFxcInsgXFwnYW5pbWF0ZWQgc2hha2VcXCcgOiBmb3JtbmV3LiRzdWJtaXR0ZWQgJiYgZm9ybW5ldy4kaW52YWxpZCAgfVxcXCIgY2xhc3M9XFxcImJ0blxcXCI+U2F2ZTwvYnV0dG9uPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9mb3JtPlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvZGlyZWN0aXZlcy90aW1lUGlja2VyLmh0bWxcIixcIjxkaXYgY2xhc3M9XFxcInRpbWUtcGlja2VyXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwidGltZS1waWNrZXItY29sXFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImRhdGljb25cXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImRvd1xcXCI+XFxuICAgICAgICAgICAgICAgIHt7ZGF0ZSB8IGRhdGU6IFxcJ0VFRVxcJ319XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGF5XFxcIj5cXG4gICAgICAgICAgICAgICAge3tkYXRlIHwgZGF0ZTogXFwnZFxcJ319XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibW9udGhcXFwiPlxcbiAgICAgICAgICAgICAgICB7e2RhdGUgfCBkYXRlIDogXFwnTU1NXFwnfX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVxcXCJkZWxldGVcXFwiIG5nLWNsaWNrPVxcXCJkYXRlcGlja2VyLnVuc2V0RGF0ZShkYXRlKVxcXCI+PC9zcGFuPiAtLT5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwidGltZS1waWNrZXItY29sXFxcIiBuZy1yZXBlYXQ9XFxcInRpbWUgaW4gZGF0ZS50aW1lcyB0cmFjayBieSAkaW5kZXhcXFwiPlxcbiAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIGNsYXNzPVxcXCJ0aW1lLXBpY2tlci1pbnB1dFxcXCIgdGltZS1waWNrZXIgbmctbW9kZWw9XFxcInRpbWVcXFwiIG5nLW1vZGVsLW9wdGlvbnM9XFxcInsgdXBkYXRlT246IFxcJ2JsdXJcXCcgfVxcXCIgLz5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2Zvcm0vZGF0ZUZvcm0uaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1kZXRhaWxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+Q2hvb3NlIERhdGVzPC9kaXY+XFxuICAgIDx1bCBjbGFzcz1cXFwiZGF0aWNvbi1saXN0XFxcIj5cXG4gICAgICAgIDxsaSBuZy1yZXBlYXQ9XFxcImQgaW4gZXZlbnQuZGF0ZXNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImRhdGljb25cXFwiPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkb3dcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAge3tkLmRhdGUgfCBkYXRlOiBcXCdFRUVcXCd9fVxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGF5XFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIHt7ZC5kYXRlIHwgZGF0ZTogXFwnZFxcJ319XFxuICAgICAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJtb250aFxcXCI+XFxuICAgICAgICAgICAgICAgICAgICB7e2QuZGF0ZSB8IGRhdGUgOiBcXCdNTU1cXCd9fVxcbiAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImRlbGV0ZVxcXCIgbmctY2xpY2s9XFxcImRhdGVwaWNrZXIudW5zZXREYXRlKGQuZGF0ZSlcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvbGk+XFxuICAgIDwvdWw+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1tYWluXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1yb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cXFwiZW1haWxcXFwiPkNhbGVuZGFyPC9sYWJlbD5cXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZm9ybS1lcnJvclxcXCIgbmctc2hvdz1cXFwiZm9ybS4kc3VibWl0dGVkICYmIGZvcm0uZGF0ZXBpY2tlci4kZXJyb3IucmVxdWlyZWRcXFwiPlxcbiAgICAgICAgICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9lcnJvci5wbmdcXFwiIHdpZHRoPVxcXCIxNFxcXCIgLz4gWW91IG5lZWQgdG8gc2VsZWN0IGEgZmV3IGRhdGVzXFxuICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgIDxkaXYgZGF0ZXBpY2tlciByZXF1aXJlZCBuYW1lPVxcXCJkYXRlcGlja2VyXFxcIiBjb250cm9sPVxcXCJkYXRlcGlja2VyXFxcIiBuZy1tb2RlbD1cXFwiZXZlbnQuZGF0ZXNcXFwiPlxcblxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9mb3JtL2V2ZW50Rm9ybS5odG1sXCIsXCI8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLWRldGFpbHNcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5FdmVudCBEZXRhaWxzPC9kaXY+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1tYWluXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1yb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb2xcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJ0aXRsZVxcXCI+VGl0bGU8L2xhYmVsPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZm9ybS1lcnJvclxcXCIgbmctc2hvdz1cXFwiKGZvcm0udGl0bGUuJHRvdWNoZWQgfHwgZm9ybS4kc3VibWl0dGVkKSAmJiBlcnJvcnMudGl0bGVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvZXJyb3IucG5nXFxcIiB3aWR0aD1cXFwiMTRcXFwiIC8+IHt7ZXJyb3JzLnRpdGxlfX1cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XFxcInRpdGxlXFxcIiBuYW1lPVxcXCJ0aXRsZVxcXCIgbmctbWF4bGVuZ3RoPVxcXCIzMFxcXCIgcmVxdWlyZWQgbmctbW9kZWw9XFxcImV2ZW50LnRpdGxlXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBwbGFjZWhvbGRlcj1cXFwiTW9udGhseSBNZWV0dXAuLi5cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgZXh0ZW5kXFxcIi8+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tY29sXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwIG9wdGlvbmFsXFxcIj5cXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cXFwibG9jYXRpb25cXFwiPkxvY2F0aW9uPC9sYWJlbD5cXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XFxcImZvcm0tZXJyb3JcXFwiIG5nLXNob3c9XFxcIihmb3JtLmxvY2F0aW9uLiR0b3VjaGVkIHx8IGZvcm0uJHN1Ym1pdHRlZCkgJiYgZXJyb3JzLmxvY2F0aW9uXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL2Vycm9yLnBuZ1xcXCIgd2lkdGg9XFxcIjE0XFxcIiAvPiB7e2Vycm9ycy5sb2NhdGlvbn19XFxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IGlkPVxcXCJsb2NhdGlvblxcXCIgbmFtZT1cXFwibG9jYXRpb25cXFwiIG5nLW1vZGVsPVxcXCJldmVudC5sb2NhdGlvblxcXCIgbmctbWF4bGVuZ3RoPVxcXCI1MFxcXCIgdHlwZT1cXFwidGV4dFxcXCIgcGxhY2Vob2xkZXI9XFxcIlJpY2tcXCdzIENhZmUuLi5cXFwiIGNsYXNzPVxcXCJmb3JtLWNvbnRyb2wgZXh0ZW5kXFxcIi8+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tcm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXAgb3B0aW9uYWxcXFwiPlxcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XFxcImRlc2NyaXB0aW9uXFxcIiA+RGVzY3JpcHRpb248L2xhYmVsPlxcbiAgICAgICAgICAgIDx0ZXh0YXJlYSBpZD1cXFwiZGVzY3JpcHRpb25cXFwiIG5hbWU9XFxcImRlc2NyaXB0aW9uXFxcIiBuZy1tb2RlbD1cXFwiZXZlbnQuZGVzY3JpcHRpb25cXFwiIHBsYWNlaG9sZGVyPVxcXCJFbnRlciBEZXNjcmlwdGlvbi4uLlxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbCBleHRlbmRcXFwiPjwvdGV4dGFyZWE+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2Zvcm0vcGFydGljaXBhbnRzRm9ybS5odG1sXCIsXCI8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLWRldGFpbHNcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5JbnZpdGUgUGFydGljaXBhbnRzPC9kaXY+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1tYWluXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1yb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cCBvcHRpb25hbFxcXCI+XFxuICAgICAgICAgICAgPGxhYmVsPlBhcnRpY2lwYW50XFwncyBFbWFpbHM8L2xhYmVsPlxcbiAgICAgICAgICAgIDx0YWdzLWlucHV0IG1heC1sZW5ndGg9XFxcIjUwXFxcIiBhbGxvd2VkLXRhZ3MtcGF0dGVybj1cXFwie3tlbWFpbFJlZ2V4fX1cXFwiIGRpc3BsYXktcHJvcGVydHk9XFxcImVtYWlsXFxcIiBuZy1tb2RlbD1cXFwiZXZlbnQuZW1haWxzXFxcIiBwbGFjZWhvbGRlcj1cXFwiQWRkIGFuIEVtYWlsXFxcIiB0eXBlPVxcXCJlbWFpbFxcXCIgYXV0b2NvbXBsZXRlPVxcXCJvZmZcXFwiPjwvdGFncy1pbnB1dD5cXG4gICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiaGlkZGVuXFxcIiBuYW1lPVxcXCJzaG91bGRDcmVhdGVcXFwiIHZhbHVlPVxcXCJ0cnVlXFxcIiAvPlxcblxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2Plxcbjwvc2VjdGlvbj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvZm9ybS9zZXR0aW5nc0Zvcm0uaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1kZXRhaWxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+U2V0dGluZ3M8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLW1haW5cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzd2l0Y2gtcm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaC1kZXRhaWxzXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJ0aXRsZVxcXCI+XFxuICAgICAgICAgICAgICAgIFBvbGwgU3RhdHVzXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZGVzY3JpcHRpb25cXFwiPlxcbiAgICAgICAgICAgICAgICBMZXQgcGVvcGxlIHZvdGUgb24gdGhlIHBvbGwuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAge3tldmVudC5pc0Nsb3NlZCA/IFxcJ0Nsb3NlZFxcJyA6IFxcJ09wZW5cXCcgfX1cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICA8ZGl2IHN3aXRjaC10b2dnbGUgbmctbW9kZWw9XFxcImV2ZW50LmlzQ2xvc2VkXFxcIiBpbnZlcnQ+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaC1yb3dcXFwiPlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoLWRldGFpbHNcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcInRpdGxlXFxcIj5cXG4gICAgICAgICAgICAgICAgTm90aWZpY2F0aW9uc1xcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImRlc2NyaXB0aW9uXFxcIj5cXG4gICAgICAgICAgICAgICAgU2VuZCBlbWFpbCBub3RpZmljYXRpb25zIHRvIHRoZSBjcmVhdG9yIG9mIHRoaXMgZXZlbnQuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwic3dpdGNoLXZhbHVlXFxcIj5cXG4gICAgICAgICAgICAgICAge3tldmVudC5jcmVhdG9yLmFsbG93Tm90aWZpY2F0aW9ucyA/IFxcJ0VuYWJsZWRcXCcgOiBcXCdEaXNhYmxlZFxcJyB9fVxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgc3dpdGNoLXRvZ2dsZSBuZy1tb2RlbD1cXFwiZXZlbnQuY3JlYXRvci5hbGxvd05vdGlmaWNhdGlvbnNcXFwiPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzd2l0Y2gtcm93XFxcIj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaC1kZXRhaWxzXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJ0aXRsZVxcXCI+XFxuICAgICAgICAgICAgICAgIERlbGV0ZSBFdmVudFxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImRlc2NyaXB0aW9uXFxcIj5cXG4gICAgICAgICAgICAgICAgT25jZSB5b3UgZGVsZXRlIGFuIGV2ZW50IGl0IHdpbGwgbm8gbG9uZ2VyIGJlIGFjY2Vzc2libGUuXFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDxkaXYgY2xhc3M9XFxcInN3aXRjaFxcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVxcXCJidXR0b25cXFwiIG5nLWNsaWNrPVxcXCJkZWxldGVFdmVudCgpXFxcIiBjbGFzcz1cXFwiYnRuXFxcIiBuZy1jbGFzcz1cXFwie2RhbmdlciA6ICFkZWxldGVSZXF1ZXN0U2VudCwgZGlzYWJsZWQgOiBkZWxldGVSZXF1ZXN0U2VudH1cXFwiPnt7ZGVsZXRlUmVxdWVzdFNlbnQgPyBcXCdSZXF1ZXN0IFNlbnRcXCcgOiBcXCdEZWxldGUgRXZlbnRcXCcgfX08L2J1dHRvbj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICA8L2Rpdj5cXG48L2Rpdj5cXG48L3NlY3Rpb24+XFxuXCIpO1xuJHRlbXBsYXRlQ2FjaGUucHV0KFwidGVtcGxhdGVzL2Zvcm0vdGltZUZvcm0uaHRtbFwiLFwiPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1kZXRhaWxzXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwic2VjdGlvbi10aXRsZVxcXCI+Q2hvb3NlIFRpbWVzPC9kaXY+XFxuPC9kaXY+XFxuPGRpdiBjbGFzcz1cXFwic2VjdGlvbi1tYWluXFxcIj5cXG4gICAgPHRhYmxlIGNsYXNzPVxcXCJ0aW1lLWZvcm1cXFwiPlxcbiAgICAgICAgPHRyIG5nLXJlcGVhdD1cXFwiZCBpbiBldmVudC5kYXRlc1xcXCI+XFxuICAgICAgICAgICAgPHRkPlxcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkYXRpY29uXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImRvd1xcXCI+XFxuICAgICAgICAgICAgICAgICAgICAgICAge3tkLmRhdGUgfCBkYXRlOiBcXCdFRUVcXCd9fVxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJkYXlcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ZC5kYXRlIHwgZGF0ZTogXFwnZFxcJ319XFxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcIm1vbnRoXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgICAgICB7e2QuZGF0ZSB8IGRhdGUgOiBcXCdNTU1cXCd9fVxcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZGVsZXRlXFxcIiBuZy1jbGljaz1cXFwidW5zZXREYXRlKGQuZGF0ZSlcXFwiPjwvc3Bhbj5cXG4gICAgICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICAgICAgPC90ZD5cXG4gICAgICAgICAgICA8dGQgbmctcmVwZWF0PVxcXCJ0aW1lIGluIFsxLDIsM10gdHJhY2sgYnkgJGluZGV4XFxcIj5cXG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XFxcInRleHRcXFwiIHRpbWUtcGlja2VyIG5nLW1vZGVsLW9wdGlvbnM9XFxcInsgdXBkYXRlT246IFxcJ2JsdXJcXCcgfVxcXCIgbmctbW9kZWw9XFxcImQudGltZXNbJGluZGV4XVxcXCIgY2xhc3M9XFxcInRpbWUtcGlja2VyLWlucHV0IGZvcm0tY29udHJvbFxcXCIgLz5cXG4gICAgICAgICAgICA8L3RkPlxcbiAgICAgICAgPC90cj5cXG4gICAgPC90YWJsZT5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvZm9ybS91c2VyRm9ybS5odG1sXCIsXCI8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLWRldGFpbHNcXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLXRpdGxlXFxcIj5Zb3VyIERldGFpbHM8L2Rpdj5cXG48L2Rpdj5cXG48ZGl2IGNsYXNzPVxcXCJzZWN0aW9uLW1haW5cXFwiPlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLXJvd1xcXCI+XFxuICAgICAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWNvbFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1ncm91cFxcXCI+XFxuICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XFxcIm5hbWVcXFwiPk5hbWU8L2xhYmVsPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZm9ybS1lcnJvclxcXCIgbmctc2hvdz1cXFwiKGZvcm0ubmFtZS4kdG91Y2hlZCB8fCBmb3JtLiRzdWJtaXR0ZWQpICYmIGVycm9ycy5uYW1lXFxcIj5cXG4gICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPVxcXCIvaW1hZ2VzL2Vycm9yLnBuZ1xcXCIgd2lkdGg9XFxcIjE0XFxcIiAvPiB7e2Vycm9ycy5uYW1lfX1cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgaWQ9XFxcIm5hbWVcXFwiIG5hbWU9XFxcIm5hbWVcXFwiIG5nLW1heGxlbmd0aD1cXFwiMzBcXFwiIHJlcXVpcmVkIG5nLW1vZGVsPVxcXCJldmVudC5jcmVhdG9yLm5hbWVcXFwiIHR5cGU9XFxcInRleHRcXFwiIHBsYWNlaG9sZGVyPVxcXCJKb2huIERvZS4uLlxcXCIgY2xhc3M9XFxcImZvcm0tY29udHJvbCBleHRlbmRcXFwiLz5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZGl2PlxcbiAgICAgICAgPGRpdiBjbGFzcz1cXFwiZm9ybS1jb2xcXFwiPlxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcImZvcm0tZ3JvdXBcXFwiPlxcbiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVxcXCJlbWFpbFxcXCI+RW1haWw8L2xhYmVsPlxcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cXFwiZm9ybS1lcnJvclxcXCIgbmctc2hvdz1cXFwiKGZvcm0uZW1haWwuJHRvdWNoZWQgfHwgZm9ybS4kc3VibWl0dGVkKSAmJiBlcnJvcnMuZW1haWxcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9XFxcIi9pbWFnZXMvZXJyb3IucG5nXFxcIiB3aWR0aD1cXFwiMTRcXFwiIC8+IHt7ZXJyb3JzLmVtYWlsfX1cXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxcbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cXFwiZW1haWxcXFwiIGlkPVxcXCJlbWFpbFxcXCIgbmFtZT1cXFwiZW1haWxcXFwiIG5nLXBhdHRlcm49XFxcImVtYWlsUmVnZXhcXFwiIHJlcXVpcmVkIG5nLW1vZGVsPVxcXCJldmVudC5jcmVhdG9yLmVtYWlsXFxcIiBwbGFjZWhvbGRlcj1cXFwiam9obi5kb2VAZW1haWwuY29tLi4uXFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sIGV4dGVuZFxcXCIvPlxcbiAgICAgICAgICAgIDwvZGl2PlxcbiAgICAgICAgPC9kaXY+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9uZXdFdmVudC9kYXRldGltZS5odG1sXCIsXCI8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIGRhdGUtZm9ybSBmb3JtPVxcXCJmb3JtXFxcIiBldmVudD1cXFwiZXZlbnRcXFwiPlxcblxcbjwvc2VjdGlvbj5cXG5cXG48c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIG5nLXNob3c9XFxcImV2ZW50LmRhdGVzLmxlbmd0aFxcXCIgdGltZS1mb3JtIGZvcm09XFxcImZvcm1cXFwiIGV2ZW50PVxcXCJldmVudFxcXCI+XFxuXFxuPC9zZWN0aW9uPlxcblxcbjxkaXYgY2xhc3M9XFxcImJveC1jb250cm9scyBib3gtYm90dG9tLXN0aWNreVxcXCI+XFxuICAgIDxidXR0b24gdHlwZT1cXFwiYnV0dG9uXFxcIiBjbGFzcz1cXFwiYnRuXFxcIiBuZy1jbGljaz1cXFwicHJldlBhZ2UoKVxcXCI+UHJldmlvdXM8L2J1dHRvbj5cXG4gICAgPGJ1dHRvbiB0eXBlPVxcXCJzdWJtaXRcXFwiIGNsYXNzPVxcXCJidG5cXFwiPk5leHQ8L2J1dHRvbj5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvbmV3RXZlbnQvZ2VuZXJhbC5odG1sXCIsXCI8c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIHVzZXItZm9ybSBmb3JtPVxcXCJmb3JtXFxcIiBldmVudD1cXFwiZXZlbnRcXFwiPlxcblxcbjwvc2VjdGlvbj5cXG5cXG48c2VjdGlvbiBjbGFzcz1cXFwiYm94LXNlY3Rpb25cXFwiIGV2ZW50LWZvcm0gZm9ybT1cXFwiZm9ybVxcXCIgZXZlbnQ9XFxcImV2ZW50XFxcIj5cXG5cXG48L3NlY3Rpb24+XFxuXFxuPGRpdiBjbGFzcz1cXFwiYm94LWNvbnRyb2xzIGJveC1ib3R0b20tc3RpY2t5XFxcIj5cXG4gICAgPGJ1dHRvbiB0eXBlPVxcXCJzdWJtaXRcXFwiIGNsYXNzPVxcXCJidG5cXFwiPk5leHQgU3RlcDwvYnV0dG9uPlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9uZXdFdmVudC9pbnZpdGUuaHRtbFwiLFwiPHNlY3Rpb24gY2xhc3M9XFxcImJveC1zZWN0aW9uXFxcIiBwYXJ0aWNpcGFudHMtZm9ybSBmb3JtPVxcXCJmb3JtXFxcIiBldmVudD1cXFwiZXZlbnRcXFwiPlxcblxcbjwvc2VjdGlvbj5cXG5cXG48ZGl2IGNsYXNzPVxcXCJib3gtY29udHJvbHMgYm94LWJvdHRvbS1zdGlja3lcXFwiPlxcbiAgICA8YnV0dG9uIHR5cGU9XFxcImJ1dHRvblxcXCIgY2xhc3M9XFxcImJ0blxcXCIgbmctY2xpY2s9XFxcInByZXZQYWdlKClcXFwiPlByZXZpb3VzPC9idXR0b24+XFxuICAgIDxidXR0b24gdHlwZT1cXFwic3VibWl0XFxcIiBjbGFzcz1cXFwiYnRuXFxcIj5DcmVhdGU8L2J1dHRvbj5cXG48L2Rpdj5cXG5cIik7XG4kdGVtcGxhdGVDYWNoZS5wdXQoXCJ0ZW1wbGF0ZXMvbmV3RXZlbnQvbGF5b3V0Lmh0bWxcIixcIjxkaXYgY2xhc3M9XFxcImJveFxcXCIgbmctY2xhc3M9XFxcIntcXCdhbmltYXRlZCBzaGFrZVxcJzogZm9ybS4kc3VibWl0dGVkICYmIGZvcm0uJGludmFsaWQgfVxcXCI+XFxuXFxuICAgIDxkaXYgY2xhc3M9XFxcImJveC10aXRsZVxcXCI+U2NoZWR1bGUgYSBOZXcgRXZlbnQ8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYm94LWRlc2NyaXB0aW9uXFxcIj5cXG4gICAgICAgIEZpbGwgaW4gdGhlIGZvcm0gYmVsb3cgdG8gY3JlYXRlIHlvdXIgZXZlbnQgYW5kIHNoYXJlIGl0IHdpdGggeW91ciBmcmllbmRzIGFuZCBjb2xsZWFndWVzLlxcbiAgICA8L2Rpdj5cXG4gICAgPG9sIGNsYXNzPVxcXCJib3gtc3RlcHNcXFwiPlxcbiAgICAgICAgPGxpIGNsYXNzPVxcXCJzdGVwIGFjdGl2ZVxcXCI+XFxuICAgICAgICAgICAgR2VuZXJhbCBEZXRhaWxzXFxuICAgICAgICA8L2xpPlxcbiAgICAgICAgPGxpIGNsYXNzPVxcXCJzdGVwXFxcIiBuZy1jbGFzcz1cXFwieyBhY3RpdmUgOiBwYWdlID4gMSB9XFxcIj5cXG4gICAgICAgICAgICBEYXRlcyAmYW1wOyBUaW1lc1xcbiAgICAgICAgPC9saT5cXG4gICAgICAgIDxsaSBjbGFzcz1cXFwic3RlcFxcXCIgbmctY2xhc3M9XFxcInsgYWN0aXZlIDogcGFnZSA+IDIgfVxcXCI+XFxuICAgICAgICAgICAgSW52aXRlc1xcbiAgICAgICAgPC9saT5cXG4gICAgICAgIDxsaSBjbGFzcz1cXFwic3RlcFxcXCIgbmctY2xhc3M9XFxcInsgYWN0aXZlIDogcGFnZSA+IDMgfVxcXCI+XFxuICAgICAgICAgICAgRG9uZVxcbiAgICAgICAgPC9saT5cXG4gICAgPC9vbD5cXG4gICAgPGZvcm0gbm92YWxpZGF0ZSBhdXRvY29tcGxldGU9XFxcIm9mZlxcXCIgbmFtZT1cXFwiZm9ybVxcXCIgbmctc3VibWl0PVxcXCJzdWJtaXQoKVxcXCI+XFxuICAgICAgICA8ZGl2IHVpLXZpZXc+XFxuXFxuICAgICAgICA8L2Rpdj5cXG4gICAgPC9mb3JtPlxcbjwvZGl2PlxcblwiKTtcbiR0ZW1wbGF0ZUNhY2hlLnB1dChcInRlbXBsYXRlcy9uZXdFdmVudC9zdWNjZXNzLmh0bWxcIixcIjxkaXYgY2xhc3M9XFxcImJveC1tZXNzYWdlXFxcIj5cXG4gICAgPGRpdiBjbGFzcz1cXFwibWFpbi1pbWFnZVxcXCI+XFxuICAgICAgICA8aW1nIHNyYz1cXFwiL2ltYWdlcy9zdWNjZXNzX2xhcmdlLnBuZ1xcXCIgd2lkdGg9XFxcIjEwMFxcXCIgLz5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcInRpdGxlXFxcIj5FdmVudCBDcmVhdGVkPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcImNvbnRlbnRcXFwiPlxcbiAgICAgICAgWW91ciBldmVudCBoYXMgYmVlbiBjcmVhdGVkIHN1Y2Nlc3NmdWxseSEgWW91IHNob3VsZCByZWNlaXZlIGFuIGVtYWlsIHNob3J0bHkgd2l0aCBpbnN0cnVjdGlvbnMgdG8gdmVyaWZ5IHlvdXIgZW1haWwgYWRkcmVzcy5cXG4gICAgPC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XFxcIm1pbmktZGl2aWRlclxcXCI+XFxuICAgIDwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmb3JtLWdyb3VwXFxcIj5cXG4gICAgICAgIDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBjbGFzcz1cXFwiZm9ybS1jb250cm9sXFxcIiBkaXNhYmxlZD1cXFwidHJ1ZVxcXCIgdmFsdWU9XFxcInt7ZXZlbnRVcmx9fVxcXCIgLz5cXG4gICAgICAgIDxhIGhyZWY9XFxcInt7ZXZlbnRVcmx9fVxcXCIgY2xhc3M9XFxcImJ0biBmb3JtLWJ0blxcXCI+R088L2E+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcblwiKTt9XSk7IiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uY29udHJvbGxlcignQWJvdXRDdHJsJywgZnVuY3Rpb24oVGl0bGUpe1xuICAgIFRpdGxlLnNldCgnQWJvdXQgUmFsbGx5Jylcbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uY29udHJvbGxlcignQWNjb3VudEN0cmwnLCBmdW5jdGlvbigkc2NvcGUsIENvbmZpcm1Nb2RhbCl7XG4gICAgJHNjb3BlLnNob3dOb3RpY2UgPSBmdW5jdGlvbigpe1xuICAgICAgICBcbiAgICB9XG59KVxuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uY29udHJvbGxlcignRGVsZXRpb25DdHJsJywgZnVuY3Rpb24oJHN0YXRlLCBOb3RpZmljYXRpb24sIEV2ZW50KXtcbiAgICBFdmVudC5kZXN0cm95KHtpZCA6ICRzdGF0ZS5wYXJhbXMuaWQsIGNvZGUgOiRzdGF0ZS5wYXJhbXMuY29kZX0sIGZ1bmN0aW9uKCl7XG4gICAgICAgIHZhciBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgIHRpdGxlIDogJ0V2ZW50IGRlbGV0ZWQnLFxuICAgICAgICAgICAgbWVzc2FnZSA6ICdUaGlzIGV2ZW50IGhhcyBiZWVuIGRlbGV0ZWQnLFxuICAgICAgICAgICAgdHlwZSA6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHRpbWVvdXQgOiA1MDAwXG4gICAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uKGUpe1xuICAgICAgICB2YXIgbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICB0aXRsZSA6ICdEZWxldGlvbiBGYWlsZWQnLFxuICAgICAgICAgICAgbWVzc2FnZSA6ICdUaGUgZXZlbnQgY291bGQgbm90IGJlIGRlbGV0ZWQuIE1ha2Ugc3VyZSB0aGF0IGl0IGV4aXN0cyBhbmQgdGhhdCB0aGUgdXJsIGlzIGNvcnJlY3QnLFxuICAgICAgICAgICAgdHlwZSA6ICdlcnJvcidcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgJHN0YXRlLmdvKCdldmVudCcsIHsgaWQgOiAkc3RhdGUucGFyYW1zLmlkIH0pO1xufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdFZGl0RXZlbnRDdHJsJywgZnVuY3Rpb24oJHNjb3BlLCAkaHR0cCwgJHN0YXRlLCAkdGltZW91dCwgRXZlbnQsIENvbmZpcm1Nb2RhbCwgTm90aWZpY2F0aW9uLCBUaXRsZSl7XG4gICAgdmFyIGlkID0gJHN0YXRlLnBhcmFtcy5pZFxuICAgICRzY29wZS5ldmVudCA9IEV2ZW50LmdldCh7aWQ6aWR9LCBmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgVGl0bGUuc2V0KFwiRWRpdDogXCIgKyAkc2NvcGUuZXZlbnQudGl0bGUpO1xuICAgICAgICAkc2NvcGUubWFzdGVyID0gYW5ndWxhci5jb3B5KCRzY29wZS5ldmVudCk7XG4gICAgfSwgZnVuY3Rpb24oZSl7XG4gICAgICAgICRzdGF0ZS5nbygnbm90Zm91bmQnKTtcbiAgICB9KTtcbiAgICAkc2NvcGUudW5kb0NoYW5nZXMgPSBmdW5jdGlvbigpe1xuICAgICAgICAkc2NvcGUuZXZlbnQgPSBhbmd1bGFyLmNvcHkoJHNjb3BlLm1hc3Rlcik7XG4gICAgfVxuICAgICRzY29wZS5kaWRDaGFuZ2UgPSBmdW5jdGlvbigpe1xuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLm1hc3RlcikgIT0gSlNPTi5zdHJpbmdpZnkoJHNjb3BlLmV2ZW50KTtcbiAgICB9XG4gICAgJHNjb3BlLmRpZENoYW5nZURhdGVzID0gZnVuY3Rpb24oKXtcbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCRzY29wZS5tYXN0ZXIuZGF0ZXMpICE9IEpTT04uc3RyaW5naWZ5KCRzY29wZS5ldmVudC5kYXRlcyk7XG4gICAgfVxuICAgICRzY29wZS5zdWJtaXQgPSBmdW5jdGlvbigpe1xuICAgICAgICBpZiAoJHNjb3BlLmZvcm0uJHZhbGlkKXtcbiAgICAgICAgICAgIGlmICgkc2NvcGUuZGlkQ2hhbmdlRGF0ZXMoKSApe1xuICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZSA6ICdIb2xkIHVwIScsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiAnQ2hhbmdpbmcgdGhlIGRhdGVzIHdpbGwgcmVzZXQgYWxsIGVudHJpZXMgYnkgdGhlIHBhcnRpY2lwYW50cy4gQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRvIHRoYXQ/JyxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybVRleHQgOiAnWWVzLCBJXFwnbSBzdXJlJyxcbiAgICAgICAgICAgICAgICAgICAgaXNEZXN0cnVjdGl2ZSA6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm0gOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICAgICAgJHNjb3BlLmV2ZW50LnBhcnRpY2lwYW50cyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB1cGRhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBub3RpZmljYXRpb24gPSBuZXcgTm90aWZpY2F0aW9uKHtcbiAgICAgICAgICAgICAgICB0aXRsZSA6ICdOb3Qgc28gZmFzdCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdNYWtlIHN1cmUgeW91IGZpbGwgaW4gYWxsIHRoZSByZXF1aXJlZCBmaWVsZHMgYW5kIHRyeSBhZ2Fpbi4nLFxuICAgICAgICAgICAgICAgIHR5cGUgOiAnZXJyb3InXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgdXBkYXRlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgRXZlbnQudXBkYXRlKHtcbiAgICAgICAgICAgIGlkIDogaWRcbiAgICAgICAgfSwgJHNjb3BlLmV2ZW50LFxuICAgICAgICBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICAgIHRpdGxlIDogJ0NoYW5nZXMgU2F2ZWQnLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiAnWW91ciBjaGFuZ2VzIGhhdmUgYmVlbiBzYXZlZCBzdWNjZXNzZnVsbHkuJyxcbiAgICAgICAgICAgICAgICB0eXBlIDogJ3N1Y2Nlc3MnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICRzY29wZS5tYXN0ZXIgPSBhbmd1bGFyLmNvcHkoJHNjb3BlLmV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdFdmVudEN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRodHRwLCAkc3RhdGUsIFRpdGxlLCBFdmVudCwgQ29uZmlybU1vZGFsKXtcbiAgICB2YXIgaWQgPSAkc3RhdGUucGFyYW1zLmlkO1xuICAgIC8vIEdldCBFdmVudFxuICAgICRzY29wZS5ldmVudCA9IEV2ZW50LmdldCh7aWQ6aWR9LCBmdW5jdGlvbihkYXRhKXtcbiAgICAgICAgLy8gU2V0IHRoZSBwYWdlIHRpdGxlIHRvIHRoZSBldmVudCB0aXRsZVxuICAgICAgICBUaXRsZS5zZXQoJHNjb3BlLmV2ZW50LnRpdGxlKTtcbiAgICAgICAgLy8gR2VuZXJhdGUgZXZlbnQgdXJsIC0gaS5lLiBodHRwOi8vcmFsbGx5LmNvL2pGOUZfRmRcbiAgICAgICAgJHNjb3BlLmV2ZW50VXJsID0gJHN0YXRlLmhyZWYoJ2V2ZW50Jywge1xuICAgICAgICAgICAgaWQ6ICRzY29wZS5ldmVudC5faWRcbiAgICAgICAgfSwge1xuICAgICAgICAgICAgYWJzb2x1dGUgOiB0cnVlXG4gICAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uKGUpe1xuICAgICAgICAkc3RhdGUuZ28oJ25vdGZvdW5kJyk7XG4gICAgfSk7XG5cbiAgICAkc2NvcGUub3BlbkV2ZW50ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgJHNjb3BlLmV2ZW50LmlzQ2xvc2VkID0gZmFsc2U7XG4gICAgICAgIEV2ZW50LnVwZGF0ZSh7XG4gICAgICAgICAgICBpZCA6IGlkXG4gICAgICAgIH0sICRzY29wZS5ldmVudCxcbiAgICAgICAgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgICAgICAgICAgIHRpdGxlIDogJ0V2ZW50IE9wZW4nLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiAnUGVvcGxlIGNhbiB2b3RlIGFuZCBjb21tZW50IG9uIHRoaXMgZXZlbnQuJyxcbiAgICAgICAgICAgICAgICBjYW5jZWxUZXh0IDogJ09LJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAkc2NvcGUuY2xvc2VFdmVudCA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICRzY29wZS5ldmVudC5pc0Nsb3NlZCA9IHRydWU7XG4gICAgICAgIEV2ZW50LnVwZGF0ZSh7XG4gICAgICAgICAgICBpZCA6IGlkXG4gICAgICAgIH0sICRzY29wZS5ldmVudCxcbiAgICAgICAgZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgICAgICAgICAgIHRpdGxlIDogJ0V2ZW50IENsb3NlZCcsXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdQZW9wbGUgY2FuIG5vIGxvbmdlciB2b3RlIG9yIGNvbW1lbnQgb24gdGhpcyBldmVudC4nLFxuICAgICAgICAgICAgICAgIGNhbmNlbFRleHQgOiAnT0snLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgICRzY29wZS5lZGl0RXZlbnQgPSBmdW5jdGlvbigpe1xuICAgICAgICAkc3RhdGUuZ28oJ2VkaXRldmVudCcsIHsgaWQgOiAkc2NvcGUuZXZlbnQuX2lkIH0pO1xuICAgIH1cblxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdIb21lQ3RybCcsIGZ1bmN0aW9uKCRzY29wZSwgJHN0YXRlLCBUaXRsZSl7XG4gICAgVGl0bGUuc2V0KCdSYWxsbHkgLSBDb2xsYWJvcmF0aXZlIFNjaGVkdWxpbmcnKVxuXG4gICAgJHNjb3BlLm5ld0V2ZW50ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgJHN0YXRlLmdvKCduZXdldmVudCcpO1xuICAgIH1cbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uY29udHJvbGxlcignTmF2aWdhdGlvbkN0cmwnLCBmdW5jdGlvbigkc2NvcGUsICRsb2NhdGlvbil7XG4gICAgJHNjb3BlLmlzQWN0aXZlID0gZnVuY3Rpb24ocGF0aCkge1xuICAgICAgICBpZiAoJGxvY2F0aW9uLnBhdGgoKSA9PSBwYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgfVxufSlcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmNvbnRyb2xsZXIoJ05ld0V2ZW50Q3RybCcsIGZ1bmN0aW9uKCRzY29wZSwgJGh0dHAsICRzdGF0ZSwgRXZlbnQsIENvbmZpcm1Nb2RhbCwgTm90aWZpY2F0aW9uKXtcblxuICAgICRzY29wZS50aXRsZSA9IFwiU2NoZWR1bGUgYSBOZXcgRXZlbnRcIjtcbiAgICAkc2NvcGUuZGVzY3JpcHRpb24gPSBcIkZpbGwgaW4gdGhlIGZvcm0gYmVsb3cgdG8gY3JlYXRlIHlvdXIgZXZlbnQgYW5kIHNoYXJlIGl0IHdpdGggeW91ciBmcmllbmRzIGFuZCBjb2xsZWFndWVzLlwiO1xuICAgICRzY29wZS5ldmVudCA9IHt9O1xuXG4gICAgdmFyIHN0YXRlcyA9IFtcbiAgICAgICAgJ25ld2V2ZW50LmdlbmVyYWwnLFxuICAgICAgICAnbmV3ZXZlbnQuZGF0ZXRpbWUnLFxuICAgICAgICAnbmV3ZXZlbnQuaW52aXRlJ1xuICAgIF07XG5cbiAgICAkc2NvcGUucGFnZSA9IDE7XG5cbiAgICB2YXIgZ29UbyA9IGZ1bmN0aW9uKHBhZ2Upe1xuICAgICAgICAkc2NvcGUucGFnZSA9IHBhZ2U7XG4gICAgICAgICRzdGF0ZS5nbyhzdGF0ZXNbcGFnZS0xXSk7XG4gICAgfVxuXG4gICAgZ29Ubygkc2NvcGUucGFnZSk7XG5cblxuICAgICRzY29wZS5zdWJtaXQgPSBmdW5jdGlvbigpe1xuICAgICAgICBpZiAoJHNjb3BlLmZvcm0uJHZhbGlkICYmICRzY29wZS5wYWdlID09IHN0YXRlcy5sZW5ndGgpe1xuICAgICAgICAgICAgJGh0dHAucG9zdCgnL2FwaS9ldmVudCcsICRzY29wZS5ldmVudClcbiAgICAgICAgICAgIC5zdWNjZXNzKGZ1bmN0aW9uKGV2ZW50LCBzdGF0dXMsIGhlYWRlcnMsIGNvbmZpZyl7XG4gICAgICAgICAgICAgICAgJHNjb3BlLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgJHNjb3BlLmV2ZW50VXJsID0gJHN0YXRlLmhyZWYoJ2V2ZW50Jywge1xuICAgICAgICAgICAgICAgICAgICBpZDogJHNjb3BlLmV2ZW50Ll9pZFxuICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgYWJzb2x1dGUgOiB0cnVlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgJHNjb3BlLnBhZ2UrKztcbiAgICAgICAgICAgICAgICAkc3RhdGUuZ28oJ25ld2V2ZW50LnN1Y2Nlc3MnKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuZXJyb3IoZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBuZXcgQ29uZmlybU1vZGFsKHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGUgOiAnVWggb2ghJyxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA6ICdUaGVyZSB3YXMgYW4gZXJyb3IgY3JlYXRpbmcgeW91ciBldmVudC4gUGxlYXNlIHRyeSBhZ2FpbiBsYXRlci4nLFxuICAgICAgICAgICAgICAgICAgICBjYW5jZWxUZXh0IDogJ09LJ1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoJHNjb3BlLmZvcm0uJHZhbGlkKSB7XG4gICAgICAgICAgICAkc2NvcGUuZm9ybS4kc2V0UHJpc3RpbmUoKTtcbiAgICAgICAgICAgICRzY29wZS5uZXh0UGFnZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgICAgIHRpdGxlIDogJ05vdCBzbyBmYXN0JyxcbiAgICAgICAgICAgICAgICBtZXNzYWdlIDogJ01ha2Ugc3VyZSB5b3UgZmlsbCBpbiBhbGwgdGhlIHJlcXVpcmVkIGZpZWxkcyBhbmQgdHJ5IGFnYWluLicsXG4gICAgICAgICAgICAgICAgdHlwZSA6ICdlcnJvcidcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgJHNjb3BlLm5leHRQYWdlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgZ29Ubygkc2NvcGUucGFnZSsxKTtcbiAgICB9XG5cbiAgICAkc2NvcGUucHJldlBhZ2UgPSBmdW5jdGlvbigpe1xuICAgICAgICBnb1RvKCRzY29wZS5wYWdlLTEpO1xuICAgIH1cblxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5jb250cm9sbGVyKCdWZXJpZmljYXRpb25DdHJsJywgZnVuY3Rpb24oRXZlbnQsIE5vdGlmaWNhdGlvbiwgJHN0YXRlKXtcbiAgICBFdmVudC52ZXJpZnkoe2lkIDogJHN0YXRlLnBhcmFtcy5pZCwgY29kZSA6JHN0YXRlLnBhcmFtcy5jb2RlfSwgZnVuY3Rpb24oKXtcbiAgICAgICAgdmFyIG5vdGlmaWNhdGlvbiA9IG5ldyBOb3RpZmljYXRpb24oe1xuICAgICAgICAgICAgdGl0bGUgOiAnRW1haWwgVmVyaWZpZWQnLFxuICAgICAgICAgICAgbWVzc2FnZSA6ICdZb3VyIGVtYWlsIGhhcyBiZWVuIHZlcmlmaWVkLiBZb3Ugd2lsbCBub3cgYmUgYWJsZSB0byByZWNlaXZlIGVtYWlsIG5vdGlmaWNhdGlvbnMgZm9yIHRoaXMgZXZlbnQnLFxuICAgICAgICAgICAgdHlwZSA6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgIHRpbWVvdXQgOiA1MDAwXG4gICAgICAgIH0pO1xuICAgIH0sIGZ1bmN0aW9uKGUpe1xuICAgICAgICB2YXIgbm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbih7XG4gICAgICAgICAgICB0aXRsZSA6ICdWZXJpZmljYXRpb24gRmFpbGVkJyxcbiAgICAgICAgICAgIG1lc3NhZ2UgOiAnWW91ciB2ZXJpZmljYXRpb24gY29kZSBoYXMgZXhwaXJlZC4nLFxuICAgICAgICAgICAgdHlwZSA6ICdlcnJvcidcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gICAgJHN0YXRlLmdvKCdldmVudCcsIHsgaWQgOiAkc3RhdGUucGFyYW1zLmlkIH0pO1xuXG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmRpcmVjdGl2ZSgnYmFja0ltZycsIGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHNjb3BlLCBlbGVtZW50LCBhdHRycyl7XG4gICAgICAgIHZhciB1cmwgPSBhdHRycy5iYWNrSW1nO1xuICAgICAgICBlbGVtZW50LmNzcyh7XG4gICAgICAgICAgICAnYmFja2dyb3VuZC1pbWFnZSc6ICd1cmwoL2ltYWdlcy8nICsgdXJsICsnLnBuZyknXG4gICAgICAgIH0pO1xuICAgIH07XG59KVxuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uZGlyZWN0aXZlKCdkYXRlcGlja2VyJywgZnVuY3Rpb24oRGF0ZVBpY2tlclNlcnZpY2Upe1xuICAgIHJldHVybiB7XG4gICAgICAgIHJlc3RyaWN0IDogJ0EnLFxuICAgICAgICByZXF1aXJlIDogJ25nTW9kZWwnLFxuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIG1vZGVsIDogJz1uZ01vZGVsJyxcbiAgICAgICAgICAgIGNvbnRyb2wgOiAnPSdcbiAgICAgICAgfSxcbiAgICAgICAgbGluayA6IGZ1bmN0aW9uKHNjb3BlLCBlbCwgYXR0cnMsIG5nTW9kZWwpe1xuICAgICAgICAgICAgdmFyIGRhdGVTZXJ2aWNlICA9IG5ldyBEYXRlUGlja2VyU2VydmljZShzY29wZS5tb2RlbCksXG4gICAgICAgICAgICAgICAgZGF0ZUJ1ZmZlciA9IGRhdGVTZXJ2aWNlLmdldERhdGVzQXJyYXkoKTtcblxuICAgICAgICAgICAgYW5ndWxhci5lbGVtZW50KGVsKS5kYXRlcGlja2VyKHtcbiAgICAgICAgICAgICAgICBtdWx0aWRhdGUgOiB0cnVlLFxuICAgICAgICAgICAgICAgIHRvZGF5SGlnaGxpZ2h0OiB0cnVlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm9uKCdjaGFuZ2VEYXRlJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGVQaWNrZXJEYXRlcyA9IGUuZGF0ZXM7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVQaWNrZXJEYXRlcy5sZW5ndGggPiBkYXRlQnVmZmVyLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZUFkZGVkID0gZGF0ZVBpY2tlckRhdGVzW2RhdGVQaWNrZXJEYXRlcy5sZW5ndGgtMV07XG4gICAgICAgICAgICAgICAgICAgIGRhdGVTZXJ2aWNlLmFkZERhdGUoZGF0ZUFkZGVkKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0ZVJlbW92ZWQgPSBkYXRlU2VydmljZS5kaWZmRGF0ZXMoZGF0ZUJ1ZmZlciwgZGF0ZVBpY2tlckRhdGVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVSZW1vdmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZVNlcnZpY2UucmVtb3ZlRGF0ZShkYXRlUmVtb3ZlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5nTW9kZWwuJHNldFZpZXdWYWx1ZShkYXRlU2VydmljZS5nZXREYXRlcygpKVxuICAgICAgICAgICAgICAgIGRhdGVCdWZmZXIgPSBkYXRlUGlja2VyRGF0ZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHNjb3BlLmNvbnRyb2wgPSBzY29wZS5jb250cm9sIHx8IHt9O1xuICAgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignbW9kZWwnLCBmdW5jdGlvbihuZXdWYWx1ZSwgb2xkVmFsdWUpe1xuICAgICAgICAgICAgICAgIHZhciBkYXRlUGlja2VyRGF0ZXMgPSBhbmd1bGFyLmVsZW1lbnQoZWwpLmRhdGVwaWNrZXIoJ2dldERhdGVzJyk7XG4gICAgICAgICAgICAgICAgdmFyIG1vZGVsRGF0ZXMgPSBkYXRlU2VydmljZS5nZXREYXRlc0FycmF5KCk7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGVQaWNrZXJEYXRlcy5sZW5ndGggIT0gbW9kZWxEYXRlcy5sZW5ndGgpe1xuICAgICAgICAgICAgICAgICAgICBhbmd1bGFyLmVsZW1lbnQoZWwpLmRhdGVwaWNrZXIoJ3NldERhdGVzJywgbW9kZWxEYXRlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzY29wZS5jb250cm9sLnVuc2V0RGF0ZSA9IGZ1bmN0aW9uKGRhdGUpe1xuICAgICAgICAgICAgICAgIGRhdGVTZXJ2aWNlLnJlbW92ZURhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5nTW9kZWwuJHZhbGlkYXRvcnMucmVxdWlyZWQgPSBmdW5jdGlvbihtb2RlbFZhbHVlLCB2aWV3VmFsdWUpe1xuICAgICAgICAgICAgICAgIGlmICghbW9kZWxWYWx1ZSB8fCBtb2RlbFZhbHVlLmxlbmd0aCA9PSAwKXtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICB9XG4gICAgfVxufSlcbi5zZXJ2aWNlKCdEYXRlUGlja2VyU2VydmljZScsIGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRlZmF1bHRTdG9yZSl7XG5cbiAgICAgICAgdmFyIHN0b3JlID0gZGVmYXVsdFN0b3JlIHx8IFtdO1xuXG4gICAgICAgIHRoaXMuYWRkRGF0ZSA9IGZ1bmN0aW9uKGRhdGUpe1xuICAgICAgICAgICAgc3RvcmUucHVzaCh7IGRhdGUgOiBkYXRlIH0pO1xuICAgICAgICAgICAgc3RvcmUuc29ydChmdW5jdGlvbihhLCBiKXtcbiAgICAgICAgICAgICAgICBpZiAoRGF0ZS5jb21wYXJlKGEuZGF0ZSwgYi5kYXRlKSA+IDApIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVtb3ZlRGF0ZSA9IGZ1bmN0aW9uKGRhdGUpe1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdG9yZS5sZW5ndGg7IGkrKyl7XG4gICAgICAgICAgICAgICAgaWYgKERhdGUuZXF1YWxzKHN0b3JlW2ldLmRhdGUsIGRhdGUpKXtcbiAgICAgICAgICAgICAgICAgICAgc3RvcmUuc3BsaWNlKGksMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2V0RGF0ZXMgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgcmV0dXJuIChzdG9yZS5sZW5ndGggPiAwKSA/IHN0b3JlIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldERhdGVzQXJyYXkgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgdmFyIGRhdGVzID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0b3JlLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBkYXRlcy5wdXNoKHN0b3JlW2ldLmRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGVzO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGlmZkRhdGVzID0gZnVuY3Rpb24oYmlnQXJyLCBzbWFsbEFycil7XG4gICAgICAgICAgICB2YXIgc2hvdWxkUmV0dXJuID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmlnQXJyLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICBzaG91bGRSZXR1cm4gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgc21hbGxBcnIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERhdGUuZXF1YWxzKGJpZ0FycltpXSwgc21hbGxBcnJbal0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXR1cm4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0dXJuKSByZXR1cm4gYmlnQXJyW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uZGlyZWN0aXZlKCdkaXNjdXNzaW9uJywgZnVuY3Rpb24oJHRpbWVvdXQsIENvbW1lbnQsIENvbmZpcm1Nb2RhbCl7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVzdHJpY3QgOiAnQScsXG4gICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9kaXJlY3RpdmVzL2Rpc2N1c3Npb24uaHRtbCcsXG4gICAgICAgIHNjb3BlIDoge1xuICAgICAgICAgICAgJ2V2ZW50JyA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycyl7XG4gICAgICAgICAgICBzY29wZS5jb21tZW50ID0ge307XG4gICAgICAgICAgICB2YXIgdGhyZWFkID0gYW5ndWxhci5lbGVtZW50KCcuY29tbWVudC10aHJlYWQnKTtcbiAgICAgICAgICAgICR0aW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgdGhyZWFkLnNjcm9sbFRvcCh0aHJlYWQucHJvcCgnc2Nyb2xsSGVpZ2h0JykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzY29wZS5kZWxldGVDb21tZW50ID0gZnVuY3Rpb24oY29tbWVudCl7XG4gICAgICAgICAgICAgICAgdmFyIG1vZGFsID0gbmV3IENvbmZpcm1Nb2RhbCh7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlIDogJ0FyZSB5b3Ugc3VyZT8nLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byByZW1vdmUgdGhpcyBjb21tZW50PycsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0IDogJ1llcyAtIGRlbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQgOiAnTm8gLSBuZXZlcm1pbmQnLFxuICAgICAgICAgICAgICAgICAgICBpc0Rlc3RydWN0aXZlIDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBDb21tZW50LnJlbW92ZSh7IGlkIDogc2NvcGUuZXZlbnQuX2lkICwgY2lkIDogY29tbWVudC5faWQgfSwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLmV2ZW50ID0gZXZlbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUucG9zdENvbW1lbnQgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5jb21tZW50Rm9ybS4kdmFsaWQpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgY29tbWVudCA9IG5ldyBDb21tZW50KHNjb3BlLmNvbW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBjb21tZW50LiRzYXZlKHtpZDpzY29wZS5ldmVudC5faWR9LCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBzY29wZS5ldmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuY29tbWVudCA9IHt9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc2NvcGUuY29tbWVudEZvcm0uJHNldFByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSk7XG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5kaXJlY3RpdmUoJ2Ryb3Bkb3duJywgZnVuY3Rpb24oJGRvY3VtZW50KXtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdCA6ICdBJyxcbiAgICAgICAgbGluayA6IGZ1bmN0aW9uKHNjb3BlLCBlbCwgYXR0cnMpe1xuICAgICAgICAgICAgZWwuYWRkQ2xhc3MoJ2Ryb3Bkb3duJyk7XG4gICAgICAgICAgICBzY29wZS5vcGVuID0gZmFsc2U7XG5cbiAgICAgICAgICAgIHZhciBjbGlja0hhbmRsZXIgPSBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ2xpY2tlZEVsZW1lbnRDaGlsZE9mUG9wdXAgPSBlbC5maW5kKGV2ZW50LnRhcmdldCkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgICAgICBpZiAoaXNDbGlja2VkRWxlbWVudENoaWxkT2ZQb3B1cCkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHNjb3BlLnRvZ2dsZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzY29wZS50b2dnbGUgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHNjb3BlLm9wZW4gPSAhc2NvcGUub3BlbjtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUub3Blbil7XG4gICAgICAgICAgICAgICAgICAgIGVsLmFkZENsYXNzKCdvcGVuJyk7XG4gICAgICAgICAgICAgICAgICAgICRkb2N1bWVudC5iaW5kKCdjbGljaycsIGNsaWNrSGFuZGxlcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWwucmVtb3ZlQ2xhc3MoJ29wZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgJGRvY3VtZW50LnVuYmluZCgnY2xpY2snLCBjbGlja0hhbmRsZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uc2VydmljZSgnRm9ybUhlbHBlcicsIGZ1bmN0aW9uKCl7XG4gICAgdGhpcy5lbWFpbFJlZ2V4U3RyaW5nID0gJ14oW1xcXFx3LVxcXFwuXStAKFtcXFxcdy1dK1xcXFwuKStbXFxcXHctXXsyLDR9KT8kJztcbiAgICB0aGlzLmVtYWlsUmVnZXggPSBuZXcgUmVnRXhwKHRoaXMuZW1haWxSZWdleFN0cmluZyk7XG4gICAgdGhpcy5wcmV0dHlFcnJvciA9IGZ1bmN0aW9uKGVycm9ycywgZmllbGQpe1xuICAgICAgICBpZiAoZXJyb3JzLnJlcXVpcmVkKSByZXR1cm4gZmllbGQgKyBcIiBpcyByZXF1aXJlZFwiO1xuICAgICAgICBpZiAoZXJyb3JzLnBhdHRlcm4pIHJldHVybiBmaWVsZCArIFwiIGlzIGludmFsaWRcIiA7XG4gICAgICAgIGlmIChlcnJvcnMubWF4bGVuZ3RoKSByZXR1cm4gZmllbGQgKyBcIiBpcyB0b28gbG9uZ1wiO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufSlcbi5kaXJlY3RpdmUoJ3VzZXJGb3JtJywgZnVuY3Rpb24oRm9ybUhlbHBlcil7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NvcGUgOiB7XG4gICAgICAgICAgICBldmVudCA6ICc9JyxcbiAgICAgICAgICAgIGZvcm0gOiAnPSdcbiAgICAgICAgfSxcbiAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2Zvcm0vdXNlckZvcm0uaHRtbCcsXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzKSB7XG4gICAgICAgICAgICBzY29wZS5lcnJvcnMgPSB7fTtcblxuICAgICAgICAgICAgc2NvcGUuZW1haWxSZWdleCA9IEZvcm1IZWxwZXIuZW1haWxSZWdleDtcblxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignZm9ybS5uYW1lLiRlcnJvcicsZnVuY3Rpb24oZXJyb3JzKXtcbiAgICAgICAgICAgICAgICBzY29wZS5lcnJvcnMubmFtZSA9IEZvcm1IZWxwZXIucHJldHR5RXJyb3IoZXJyb3JzLCBcIk5hbWVcIik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignZm9ybS5lbWFpbC4kZXJyb3InLGZ1bmN0aW9uKGVycm9ycyl7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyb3JzLmVtYWlsID0gRm9ybUhlbHBlci5wcmV0dHlFcnJvcihlcnJvcnMsIFwiRW1haWxcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCdldmVudEZvcm0nLCBmdW5jdGlvbihGb3JtSGVscGVyKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIGV2ZW50IDogJz0nLFxuICAgICAgICAgICAgZm9ybSA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZm9ybS9ldmVudEZvcm0uaHRtbCcsXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzKSB7XG4gICAgICAgICAgICBzY29wZS5lcnJvcnMgPSB7fTtcblxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignZm9ybS50aXRsZS4kZXJyb3InLGZ1bmN0aW9uKGVycm9ycyl7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyb3JzLnRpdGxlID0gRm9ybUhlbHBlci5wcmV0dHlFcnJvcihlcnJvcnMsIFwiVGl0bGVcIik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoQ29sbGVjdGlvbignZm9ybS5sb2NhdGlvbi4kZXJyb3InLGZ1bmN0aW9uKGVycm9ycyl7XG4gICAgICAgICAgICAgICAgc2NvcGUuZXJyb3JzLmxvY2F0aW9uID0gRm9ybUhlbHBlci5wcmV0dHlFcnJvcihlcnJvcnMsIFwiTG9jYXRpb25cIik7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICB9XG4gICAgfVxufSlcbi5kaXJlY3RpdmUoJ2RhdGVGb3JtJywgZnVuY3Rpb24oKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIGV2ZW50IDogJz0nLFxuICAgICAgICAgICAgZm9ybSA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZm9ybS9kYXRlRm9ybS5odG1sJ1xuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCdwYXJ0aWNpcGFudHNGb3JtJywgZnVuY3Rpb24oRm9ybUhlbHBlcil7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NvcGUgOiB7XG4gICAgICAgICAgICBldmVudCA6ICc9JyxcbiAgICAgICAgICAgIGZvcm0gOiAnPSdcbiAgICAgICAgfSxcbiAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2Zvcm0vcGFydGljaXBhbnRzRm9ybS5odG1sJyxcbiAgICAgICAgbGluayA6IGZ1bmN0aW9uKHNjb3BlLCBlbCwgYXR0cnMpe1xuICAgICAgICAgICAgc2NvcGUuZW1haWxSZWdleCA9IEZvcm1IZWxwZXIuZW1haWxSZWdleFN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCdzZXR0aW5nc0Zvcm0nLCBmdW5jdGlvbihFdmVudCwgQ29uZmlybU1vZGFsKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIGV2ZW50IDogJz0nLFxuICAgICAgICAgICAgZm9ybSA6ICc9J1xuICAgICAgICB9LFxuICAgICAgICB0ZW1wbGF0ZVVybCA6ICd0ZW1wbGF0ZXMvZm9ybS9zZXR0aW5nc0Zvcm0uaHRtbCcsXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzKXtcbiAgICAgICAgICAgIHNjb3BlLmRlbGV0ZUV2ZW50ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZGVsZXRlUmVxdWVzdFNlbnQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBFdmVudC5kZWxldGUoeydpZCcgOiBzY29wZS5ldmVudC5faWR9LCBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5kZWxldGVSZXF1ZXN0U2VudCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgOiAnRGVsZXRlIFJlcXVlc3QgU2VudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlIDogJ0FuIGVtYWlsIGhhcyBiZWVuIHNlbnQgdG8gdGhlIGNyZWF0b3Igb2YgdGhpcyBldmVudCB3aXRoIGluc3RydWN0aW9ucyB0byBkZWxldGUgaXQuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQgOiAnT0snXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSlcbi5kaXJlY3RpdmUoJ3N3aXRjaFRvZ2dsZScsIGZ1bmN0aW9uKCl7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc2NvcGUgOiB7XG4gICAgICAgICAgICBtb2RlbCA6ICc9bmdNb2RlbCdcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWlyZSA6ICduZ01vZGVsJyxcbiAgICAgICAgbGluayA6IGZ1bmN0aW9uKHNjb3BlLCBlbCwgYXR0cnMsIG5nTW9kZWwpIHtcbiAgICAgICAgICAgIGVsLmFkZENsYXNzKCdzd2l0Y2gtdG9nZ2xlJyk7XG4gICAgICAgICAgICB2YXIgc2V0Q2xhc3MgPSBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIGlmIChzY29wZS5tb2RlbCBeIHR5cGVvZihhdHRycy5pbnZlcnQpICE9PSAndW5kZWZpbmVkJyl7XG4gICAgICAgICAgICAgICAgICAgIGVsLmFkZENsYXNzKCdhY3RpdmUnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbC5yZW1vdmVDbGFzcygnYWN0aXZlJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuJHdhdGNoKCdtb2RlbCcsIHNldENsYXNzKTtcbiAgICAgICAgICAgIGVsLmJpbmQoJ2NsaWNrJywgZnVuY3Rpb24oZSl7XG4gICAgICAgICAgICAgICAgc2NvcGUubW9kZWwgPSAhc2NvcGUubW9kZWw7XG4gICAgICAgICAgICAgICAgbmdNb2RlbC4kc2V0Vmlld1ZhbHVlKHNjb3BlLm1vZGVsLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxufSlcbi5kaXJlY3RpdmUoJ3RpbWVGb3JtJywgZnVuY3Rpb24oRGF0ZVBpY2tlclNlcnZpY2Upe1xuICAgIHJldHVybiB7XG4gICAgICAgIHNjb3BlIDoge1xuICAgICAgICAgICAgZXZlbnQgOiAnPScsXG4gICAgICAgICAgICBmb3JtIDogJz0nXG4gICAgICAgIH0sXG4gICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9mb3JtL3RpbWVGb3JtLmh0bWwnLFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycyl7XG4gICAgICAgICAgICB2YXIgaW5pdCA9IGZhbHNlO1xuICAgICAgICAgICAgdmFyIGRhdGVTZXJ2aWNlO1xuICAgICAgICAgICAgdmFyIGRlcmVnaXN0ZXIgPSBzY29wZS4kd2F0Y2goJ2V2ZW50LmRhdGVzJywgZnVuY3Rpb24odmFsdWUpe1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhaW5pdCkge1xuICAgICAgICAgICAgICAgICAgICBkZXJlZ2lzdGVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGVTZXJ2aWNlID0gbmV3IERhdGVQaWNrZXJTZXJ2aWNlKHNjb3BlLmV2ZW50LmRhdGVzKTtcbiAgICAgICAgICAgICAgICBzY29wZS51bnNldERhdGUgPSBmdW5jdGlvbihkYXRlKXtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZVNlcnZpY2UucmVtb3ZlRGF0ZShkYXRlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbn0pXG4uZGlyZWN0aXZlKCd0aW1lUGlja2VyJywgZnVuY3Rpb24oKXtcbiAgICByZXR1cm4ge1xuICAgICAgICBzY29wZSA6IHtcbiAgICAgICAgICAgIG1vZGVsIDogJz1uZ01vZGVsJ1xuICAgICAgICB9LFxuICAgICAgICByZXF1aXJlIDogJ25nTW9kZWwnLFxuICAgICAgICBsaW5rIDogZnVuY3Rpb24oc2NvcGUsIGVsLCBhdHRycywgbmdNb2RlbCl7XG4gICAgICAgICAgICBuZ01vZGVsLiR2aWV3Q2hhbmdlTGlzdGVuZXJzLnB1c2goZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBzY29wZS5tb2RlbCA9IERhdGUucGFyc2UobmdNb2RlbC4kbW9kZWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgbmdNb2RlbC4kc2V0Vmlld1ZhbHVlKHNjb3BlLm1vZGVsLnRvU3RyaW5nKFwiaGg6bW0gdHRcIikpO1xuICAgICAgICAgICAgICAgIG5nTW9kZWwuJHJlbmRlcigpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIG5nTW9kZWwuJHZhbGlkYXRvcnMudGltZSA9IGZ1bmN0aW9uKG1vZGVsVmFsdWUsIHZpZXdWYWx1ZSl7XG4gICAgICAgICAgICAgICAgaWYgKG5nTW9kZWwuJGlzRW1wdHkobW9kZWxWYWx1ZSkpIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIHZhciB0aW1lID0gRGF0ZS5wYXJzZShtb2RlbFZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgICAgICAgICAgICBuZ01vZGVsLiRzZXRWaWV3VmFsdWUodGltZS50b1N0cmluZyhcImhoOm1tIHR0XCIpKTtcbiAgICAgICAgICAgICAgICAgICAgbmdNb2RlbC4kcmVuZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiIsImFuZ3VsYXIubW9kdWxlKCdyYWxsbHknKVxuLmRpcmVjdGl2ZSgncG9sbCcsIGZ1bmN0aW9uKCR0aW1lb3V0LCBQYXJ0aWNpcGFudCwgQ29uZmlybU1vZGFsKXtcbiAgICByZXR1cm4ge1xuICAgICAgICByZXN0cmljdCA6ICdBJyxcbiAgICAgICAgdGVtcGxhdGVVcmwgOiAndGVtcGxhdGVzL2RpcmVjdGl2ZXMvcG9sbC5odG1sJyxcbiAgICAgICAgc2NvcGUgOiB7XG4gICAgICAgICAgICAnZXZlbnQnIDogJz0nXG4gICAgICAgIH0sXG4gICAgICAgIGxpbmsgOiBmdW5jdGlvbihzY29wZSwgZWwsIGF0dHJzKXtcbiAgICAgICAgICAgIHNjb3BlLmRlZmF1bHRzID0gW107XG4gICAgICAgICAgICBzY29wZS5wYXJ0aWNpcGFudCA9IHt9O1xuICAgICAgICAgICAgdmFyIGRhdGVzQ291bnQgPSBbXTtcbiAgICAgICAgICAgIHZhciB1bmJpbmRMaXN0ZW5lcjtcbiAgICAgICAgICAgIHNjb3BlLmV2ZW50LiRwcm9taXNlLnRoZW4oZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgICAgIHZhciBleGFtcGxlc05hbWVzID0gWydKb2huIEV4YW1wbGUnLCAnSmFuZSBTcGVjaW1lbicsJ01hcmsgSW5zdGFuY2UnLCAnTWFyeSBDYXNlJ107XG4gICAgICAgICAgICAgICAgdmFyIGV4YW1wbGVzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBleGFtcGxlc05hbWVzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGV4YW1wbGUgPSB7IG5hbWUgOiBleGFtcGxlc05hbWVzW2ldIH07XG4gICAgICAgICAgICAgICAgICAgIGV4YW1wbGUuZGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCAgZXZlbnQuZGF0ZXMubGVuZ3RoOyBqKyspe1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFuc3dlciA9IE1hdGgucmFuZG9tKCk8LjU7XG4gICAgICAgICAgICAgICAgICAgICAgICBleGFtcGxlLmRhdGVzW2pdID0gYW5zd2VyO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGV4YW1wbGVzLnB1c2goZXhhbXBsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNjb3BlLmV4YW1wbGVzID0gZXhhbXBsZXM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgc2NvcGUuZGVsZXRlID0gZnVuY3Rpb24ocGFydGljaXBhbnQpe1xuICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBDb25maXJtTW9kYWwoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZSA6ICdEZWxldGUgJyArIHBhcnRpY2lwYW50Lm5hbWUgKyAnPycsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgOiAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHJlbW92ZSAnK3BhcnRpY2lwYW50Lm5hbWUrJyBmcm9tIHRoZSBwb2xsPycsXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpcm1UZXh0IDogJ1llcyAtIGRlbGV0ZScsXG4gICAgICAgICAgICAgICAgICAgIGNhbmNlbFRleHQgOiAnTm8gLSBuZXZlcm1pbmQnLFxuICAgICAgICAgICAgICAgICAgICBpc0Rlc3RydWN0aXZlIDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY29uZmlybSA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgICAgICAgICBQYXJ0aWNpcGFudC5yZW1vdmUoeyBpZCA6IHNjb3BlLmV2ZW50Ll9pZCAsIHBpZCA6IHBhcnRpY2lwYW50Ll9pZCB9LCBmdW5jdGlvbihldmVudCl7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5pc1RvcERhdGUgPSBmdW5jdGlvbihpbmRleCl7XG4gICAgICAgICAgICAgICAgdmFyIGNvdW50ID0gZGF0ZXNDb3VudFtpbmRleF07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRlc0NvdW50Lmxlbmd0aDsgaSsrKXtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVzQ291bnRbaV0gPiBjb3VudCkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNjb3BlLnNlbGVjdGVkRGF0ZSA9IGZ1bmN0aW9uKGluZGV4KXtcbiAgICAgICAgICAgICAgICBkYXRlc0NvdW50W2luZGV4XSA9IDA7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY29wZS5ldmVudC5wYXJ0aWNpcGFudHMubGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZXZlbnQucGFydGljaXBhbnRzW2ldLmRhdGVzW2luZGV4XSkgZGF0ZXNDb3VudFtpbmRleF0rKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVzQ291bnRbaW5kZXhdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUudXBkYXRlID0gZnVuY3Rpb24ocGFydGljaXBhbnQpe1xuICAgICAgICAgICAgICAgIFBhcnRpY2lwYW50LnVwZGF0ZSh7XG4gICAgICAgICAgICAgICAgICAgIGlkIDogc2NvcGUuZXZlbnQuX2lkLFxuICAgICAgICAgICAgICAgICAgICBwaWQgOiBwYXJ0aWNpcGFudC5faWRcbiAgICAgICAgICAgICAgICB9LCBwYXJ0aWNpcGFudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5lZGl0ID0gZnVuY3Rpb24ocGFydGljaXBhbnQpe1xuICAgICAgICAgICAgICAgIHNjb3BlLmRlZmF1bHRzW3Njb3BlLmV2ZW50LnBhcnRpY2lwYW50cy5pbmRleE9mKHBhcnRpY2lwYW50KV0gPSBhbmd1bGFyLmNvcHkocGFydGljaXBhbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2NvcGUuY2FuY2VsID0gZnVuY3Rpb24oaW5kZXgpe1xuICAgICAgICAgICAgICAgIHNjb3BlLmV2ZW50LnBhcnRpY2lwYW50c1tpbmRleF0gPSBzY29wZS5kZWZhdWx0c1tpbmRleF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzY29wZS5zYXZlID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgICAgICBpZiAoc2NvcGUuZm9ybW5ldy4kdmFsaWQpe1xuICAgICAgICAgICAgICAgICAgICB2YXIgcGFydGljaXBhbnQgPSBuZXcgUGFydGljaXBhbnQoc2NvcGUucGFydGljaXBhbnQpO1xuICAgICAgICAgICAgICAgICAgICBwYXJ0aWNpcGFudC4kc2F2ZSh7aWQ6c2NvcGUuZXZlbnQuX2lkfSwgZnVuY3Rpb24oZXZlbnQpe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGUuZXZlbnQgPSBldmVudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjb3BlLnBhcnRpY2lwYW50ID0ge307XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzY29wZS5mb3JtbmV3LiRzZXRQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uZmlsdGVyKCdlbGFwc2VkJywgZnVuY3Rpb24oJGZpbHRlcil7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpe1xuICAgICAgICBpZiAoIWRhdGUpIHJldHVybjtcbiAgICAgICAgdmFyIHRpbWUgPSBEYXRlLnBhcnNlKGRhdGUpLFxuICAgICAgICAgICAgdGltZU5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuICAgICAgICAgICAgZGlmZmVyZW5jZSA9IHRpbWVOb3cgLSB0aW1lLFxuICAgICAgICAgICAgc2Vjb25kcyA9IE1hdGguZmxvb3IoZGlmZmVyZW5jZSAvIDEwMDApLFxuICAgICAgICAgICAgbWludXRlcyA9IE1hdGguZmxvb3Ioc2Vjb25kcyAvIDYwKSxcbiAgICAgICAgICAgIGhvdXJzID0gTWF0aC5mbG9vcihtaW51dGVzIC8gNjApLFxuICAgICAgICAgICAgZGF5cyA9IE1hdGguZmxvb3IoaG91cnMgLyAyNCk7XG4gICAgICAgIGlmIChkYXlzID4gMzApIHtcbiAgICAgICAgICAgIHJldHVybiAnb24gJyArICRmaWx0ZXIoJ2RhdGUnKShkYXRlLCAnTU1NTSBkJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA+IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXlzICsgXCIgZGF5cyBhZ29cIjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzID09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBcIjEgZGF5IGFnb1wiXG4gICAgICAgIH0gZWxzZSBpZiAoaG91cnMgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gaG91cnMgKyBcIiBob3VycyBhZ29cIjtcbiAgICAgICAgfSBlbHNlIGlmIChob3VycyA9PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJhbiBob3VyIGFnb1wiO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbnV0ZXMgPiAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbWludXRlcyArIFwiIG1pbnV0ZXMgYWdvXCI7XG4gICAgICAgIH0gZWxzZSBpZiAobWludXRlcyA9PSAxKXtcbiAgICAgICAgICAgIHJldHVybiBcImEgbWludXRlIGFnb1wiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFwiYSBmZXcgc2Vjb25kcyBhZ29cIjtcbiAgICAgICAgfVxuICAgIH1cbn0pXG4iLCJhbmd1bGFyLm1vZHVsZSgncmFsbGx5Jylcbi5mYWN0b3J5KCdDb25maXJtTW9kYWwnLCBmdW5jdGlvbihidGZNb2RhbCl7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24oY29uZmlnKXtcbiAgICAgICAgdmFyIG1vZGFsO1xuICAgICAgICBtb2RhbCA9IGJ0Zk1vZGFsKHtcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9jb25maXJtbW9kYWwuaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyQXMgOiAnbW9kYWwnLFxuICAgICAgICAgICAgY29udHJvbGxlciA6IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICAgICAgdGhpcy50aXRsZSA9IGNvbmZpZy50aXRsZVxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9IGNvbmZpZy5tZXNzYWdlO1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlybSA9IChjb25maWcuY29uZmlybSkgPyBmdW5jdGlvbigpe2NvbmZpZy5jb25maXJtKCk7IG1vZGFsLmRlYWN0aXZhdGUoKX0gOiBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNhbmNlbCA9IG1vZGFsLmRlYWN0aXZhdGU7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25maXJtVGV4dCA9IGNvbmZpZy5jb25maXJtVGV4dCB8fCAnQ29uZmlybSc7XG4gICAgICAgICAgICAgICAgdGhpcy5jYW5jZWxUZXh0ID0gY29uZmlnLmNhbmNlbFRleHQgfHwgJ0NhbmNlbCc7XG4gICAgICAgICAgICAgICAgdGhpcy5pc0Rlc3RydWN0aXZlID0gY29uZmlnLmlzRGVzdHJ1Y3RpdmU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5hY3RpdmF0ZSgpO1xuICAgICAgICBcbiAgICAgICAgdGhpcy5kZXN0cm95ID0gZnVuY3Rpb24oKXtcbiAgICAgICAgICAgIG1vZGFsLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cbn0pO1xuIiwiYW5ndWxhci5tb2R1bGUoJ3JhbGxseScpXG4uZmFjdG9yeSgnTm90aWZpY2F0aW9uJywgZnVuY3Rpb24oJHRpbWVvdXQsIGJ0Zk1vZGFsKXtcbiAgICByZXR1cm4gZnVuY3Rpb24oY29uZmlnKXtcbiAgICAgICAgdmFyIG1vZGFsO1xuICAgICAgICBtb2RhbCA9IGJ0Zk1vZGFsKHtcbiAgICAgICAgICAgIHRlbXBsYXRlVXJsIDogJ3RlbXBsYXRlcy9ub3RpZmljYXRpb24uaHRtbCcsXG4gICAgICAgICAgICBjb250cm9sbGVyQXMgOiAnbm90aWZpY2F0aW9uJyxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIgOiBmdW5jdGlvbigpe1xuICAgICAgICAgICAgICAgIHRoaXMudGl0bGUgPSBjb25maWcudGl0bGVcbiAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSBjb25maWcubWVzc2FnZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlID0gbW9kYWwuZGVhY3RpdmF0ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcbiAgICAgICAgICAgICAgICB2YXIgdGltZW91dCA9IGNvbmZpZy50aW1lb3V0IHx8IDUwMDA7XG4gICAgICAgICAgICAgICAgJHRpbWVvdXQobW9kYWwuZGVhY3RpdmF0ZSwgdGltZW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBtb2RhbC5hY3RpdmF0ZSgpO1xuXG4gICAgICAgIHRoaXMuZGVzdHJveSA9IGZ1bmN0aW9uKCl7XG4gICAgICAgICAgICBtb2RhbC5kZWFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== \ No newline at end of file +angular.module("rallly",["ui.router","ngResource","btford.modal","ngTagsInput","ngAnimate"]).config(["$stateProvider","$urlRouterProvider","$locationProvider",function(e,t,n){n.html5Mode(!0),t.otherwise("/notfound"),e.state("index",{url:"/",templateUrl:"templates/home.html",controller:"HomeCtrl"}).state("newevent",{url:"/new",templateUrl:"templates/newEvent/layout.html",controller:"NewEventCtrl"}).state("newevent.general",{templateUrl:"templates/newEvent/general.html"}).state("newevent.datetime",{templateUrl:"templates/newEvent/datetime.html"}).state("newevent.invite",{templateUrl:"templates/newEvent/invite.html"}).state("newevent.success",{templateUrl:"templates/newEvent/success.html"}).state("about",{url:"/about",templateUrl:"templates/about.html",controller:"AboutCtrl"}).state("notfound",{url:"/notfound",templateUrl:"templates/notfound.html"}).state("event",{url:"/:id",templateUrl:"templates/event.html",controller:"EventCtrl"}).state("editevent",{url:"/:id/edit",templateUrl:"templates/editevent.html",controller:"EditEventCtrl"}).state("verifyevent",{url:"/verify/:id/code/:code",controller:"VerificationCtrl"}).state("deleteevent",{url:"/delete/:id/code/:code",controller:"DeletionCtrl"})}]).factory("Event",["$resource",function(e){return e("/api/event/:id",{id:"@_id"},{update:{method:"PUT"},verify:{method:"GET",url:"/api/event/:id/code/:code"},destroy:{method:"DELETE",url:"/api/event/:id/code/:code"}})}]).factory("Participant",["$resource",function(e){return e("/api/event/:id/participant/:pid",{id:"@_id"},{update:{method:"PUT"}})}]).factory("Comment",["$resource",function(e){return e("/api/event/:id/comment/:cid",{id:"@_id"},{update:{method:"PUT"}})}]).factory("Title",function(){return{set:function(e){document.title=e}}}),angular.module("rallly").run(["$templateCache",function(e){e.put("templates/about.html",'
\n

What is Rallly?

\n
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\n
\n\n
\n\n
\n\n
\n\n
\n
\n\n
\n\n
\n\n
\n\n
\n \n \n Done\n
\n\n
\n\n
\n\n
\n'),e.put("templates/event.html",'
\n
\n
\n
\n \n
\n
\n
\n {{event.title}}\n Poll Closed\n Poll Open\n
\n
\n Created by {{event.creator.name}} • {{event.created | elapsed}}\n
\n
\n
\n \n
\n
\n
{{event.description}}
\n \n\n
\n
\n
\n
\n
\n\n
\n
\n Discussion\n
\n
\n You can discuss the event with your friends by leaving a comment below.\n
\n
\n\n
\n
\n
\n'),e.put("templates/home.html",'
\n
\n \n
\n
\n Schedule an Event\n
\n
\n Want to host an event but can’t decide on a date? Click on the button below to start!\n
\n \n
\n'),e.put("templates/newevent.html",'
\n
\n\n
Schedule a New Event
\n
\n Fill in the form below to create your event and share it with your friends and colleagues.\n
\n\n
\n
\n\n
\n\n
\n\n
\n\n
\n
\n
\n\n
\n\n
\n\n
\n\n
\n
\n\n
\n\n
\n\n
\n\n
\n\n\n
\n \n \n \n
\n\n
\n
\n\n
\n
\n
\n
\n \n
\n
Event Created
\n
\n Your event has been created successfully! You should receive an email shortly with instructions to verify your email address.\n
\n
\n
\n
\n \n GO\n
\n
\n
\n'),e.put("templates/notfound.html","

Error 404

\n

Not Found

\n"),e.put("templates/notification.html",'
\n
\n {{notification.title}}\n
\n
\n {{notification.message}}\n
\n
\n'),e.put("templates/directives/discussion.html",'
    \n
  • \n
    \n \n
    \n
    \n ×\n
    \n {{comment.author.name}}\n {{comment.created | elapsed}}\n
    \n
    {{comment.content}}
    \n
    \n
  • \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n \n Make sure you fill in all the fields.\n \n
\n
\n
\n
\n'),e.put("templates/directives/poll.html",'
\n
\n {{event.participants.length}} participants\n
\n
\n
\n
\n {{d.date | date: \'EEE\'}}\n
\n
\n {{d.date | date: \'d\'}}\n
\n
\n {{d.date | date : \'MMM\'}}\n
\n {{selectedDate($index)}}\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n \n \n \n \n {{participant.name}}\n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n
\n
\n \n \n \n {{example.name}}\n
\n
\n \n \n
\n
\n\n
\n
\n
\n
\n Fill in the form below to get started\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n'),e.put("templates/directives/timePicker.html",'
\n
\n
\n
\n {{date | date: \'EEE\'}}\n
\n
\n {{date | date: \'d\'}}\n
\n
\n {{date | date : \'MMM\'}}\n
\n \n
\n
\n
\n \n
\n
\n'),e.put("templates/form/dateForm.html",'
\n
Choose Dates
\n
    \n
  • \n
    \n
    \n {{d.date | date: \'EEE\'}}\n
    \n
    \n {{d.date | date: \'d\'}}\n
    \n
    \n {{d.date | date : \'MMM\'}}\n
    \n \n
    \n
  • \n
\n
\n
\n
\n
\n \n \n You need to select a few dates\n \n
\n\n
\n
\n
\n
\n'),e.put("templates/form/eventForm.html",'
\n
Event Details
\n
\n
\n
\n
\n
\n \n \n {{errors.title}}\n \n \n
\n
\n
\n
\n \n \n {{errors.location}}\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n'),e.put("templates/form/participantsForm.html",'
\n
Invite Participants
\n
\n
\n
\n
\n \n \n \n\n
\n
\n
\n\n'),e.put("templates/form/settingsForm.html",'
\n
Settings
\n
\n
\n
\n
\n
\n Poll Status\n
\n
\n Let people vote on the poll.\n
\n
\n
\n
\n {{event.isClosed ? \'Closed\' : \'Open\' }}\n
\n
\n
\n
\n
\n
\n
\n
\n Notifications\n
\n
\n Send email notifications to the creator of this event.\n
\n
\n
\n
\n {{event.creator.allowNotifications ? \'Enabled\' : \'Disabled\' }}\n
\n
\n
\n
\n
\n
\n
\n
\n Delete Event\n
\n
\n Once you delete an event it will no longer be accessible.\n
\n
\n
\n \n
\n
\n
\n\n'),e.put("templates/form/timeForm.html",'
\n
Choose Times
\n
\n
\n \n \n \n \n \n
\n
\n
\n {{d.date | date: \'EEE\'}}\n
\n
\n {{d.date | date: \'d\'}}\n
\n
\n {{d.date | date : \'MMM\'}}\n
\n \n
\n
\n \n
\n
\n'),e.put("templates/form/userForm.html",'
\n
Your Details
\n
\n
\n
\n
\n
\n \n \n {{errors.name}}\n \n \n
\n
\n
\n
\n \n \n {{errors.email}}\n \n \n
\n
\n
\n
\n'),e.put("templates/newEvent/datetime.html",'
\n\n
\n\n
\n\n
\n\n
\n \n \n
\n'),e.put("templates/newEvent/general.html",'
\n\n
\n\n
\n\n
\n\n
\n \n
\n'),e.put("templates/newEvent/invite.html",'
\n\n
\n\n
\n \n \n
\n'),e.put("templates/newEvent/layout.html",'
\n\n
Schedule a New Event
\n
\n Fill in the form below to create your event and share it with your friends and colleagues.\n
\n
    \n
  1. \n General Details\n
  2. \n
  3. \n Dates & Times\n
  4. \n
  5. \n Invites\n
  6. \n
  7. \n Done\n
  8. \n
\n
\n
\n\n
\n
\n
\n'),e.put("templates/newEvent/success.html",'
\n
\n \n
\n
Event Created
\n
\n Your event has been created successfully! You should receive an email shortly with instructions to verify your email address.\n
\n
\n
\n
\n \n GO\n
\n
\n')}]),angular.module("rallly").controller("AboutCtrl",["Title",function(e){e.set("About Rallly")}]),angular.module("rallly").controller("AccountCtrl",["$scope","ConfirmModal",function(e){e.showNotice=function(){}}]),angular.module("rallly").controller("DeletionCtrl",["$state","Notification","Event",function(e,t,n){n.destroy({id:e.params.id,code:e.params.code},function(){new t({title:"Event deleted",message:"This event has been deleted",type:"success",timeout:5e3})},function(){new t({title:"Deletion Failed",message:"The event could not be deleted. Make sure that it exists and that the url is correct",type:"error"})}),e.go("event",{id:e.params.id})}]),angular.module("rallly").controller("EditEventCtrl",["$scope","$http","$state","$timeout","Event","ConfirmModal","Notification","Title",function(e,t,n,i,a,o,s,l){var r=n.params.id;e.event=a.get({id:r},function(){l.set("Edit: "+e.event.title),e.master=angular.copy(e.event)},function(){n.go("notfound")}),e.undoChanges=function(){e.event=angular.copy(e.master)},e.didChange=function(){return JSON.stringify(e.master)!=JSON.stringify(e.event)},e.didChangeDates=function(){return JSON.stringify(e.master.dates)!=JSON.stringify(e.event.dates)},e.submit=function(){if(e.form.$valid)if(e.didChangeDates()){new o({title:"Hold up!",message:"Changing the dates will reset all entries by the participants. Are you sure you want to do that?",confirmText:"Yes, I'm sure",isDestructive:!0,confirm:function(){e.event.participants=[],c()}})}else c();else{new s({title:"Not so fast",message:"Make sure you fill in all the required fields and try again.",type:"error"})}};var c=function(){a.update({id:r},e.event,function(){new s({title:"Changes Saved",message:"Your changes have been saved successfully.",type:"success"});e.master=angular.copy(e.event)})}}]),angular.module("rallly").controller("EventCtrl",["$scope","$http","$state","Title","Event","ConfirmModal",function(e,t,n,i,a,o){var s=n.params.id;e.event=a.get({id:s},function(){i.set(e.event.title),e.eventUrl=n.href("event",{id:e.event._id},{absolute:!0})},function(){n.go("notfound")}),e.openEvent=function(){e.event.isClosed=!1,a.update({id:s},e.event,function(){new o({title:"Event Open",message:"People can vote and comment on this event.",cancelText:"OK"})})},e.closeEvent=function(){e.event.isClosed=!0,a.update({id:s},e.event,function(){new o({title:"Event Closed",message:"People can no longer vote or comment on this event.",cancelText:"OK"})})},e.editEvent=function(){n.go("editevent",{id:e.event._id})}}]),angular.module("rallly").controller("HomeCtrl",["$scope","$state","Title",function(e,t,n){n.set("Rallly - Collaborative Scheduling"),e.newEvent=function(){t.go("newevent")}}]),angular.module("rallly").controller("NavigationCtrl",["$scope","$location",function(e,t){e.isActive=function(e){return t.path()==e?!0:!1}}]),angular.module("rallly").controller("NewEventCtrl",["$scope","$http","$state","Event","ConfirmModal","Notification",function(e,t,n,i,a,o){e.title="Schedule a New Event",e.description="Fill in the form below to create your event and share it with your friends and colleagues.",e.event={};var s=["newevent.general","newevent.datetime","newevent.invite"];e.page=1;var l=function(t){e.page=t,n.go(s[t-1])};l(e.page),e.submit=function(){if(e.form.$valid&&e.page==s.length)t.post("/api/event",e.event).success(function(t){e.event=t,e.eventUrl=n.href("event",{id:e.event._id},{absolute:!0}),e.page++,n.go("newevent.success")}).error(function(){new a({title:"Uh oh!",message:"There was an error creating your event. Please try again later.",cancelText:"OK"})});else if(e.form.$valid)e.form.$setPristine(),e.nextPage();else{new o({title:"Not so fast",message:"Make sure you fill in all the required fields and try again.",type:"error"})}},e.nextPage=function(){l(e.page+1)},e.prevPage=function(){l(e.page-1)}}]),angular.module("rallly").controller("VerificationCtrl",["Event","Notification","$state",function(e,t,n){e.verify({id:n.params.id,code:n.params.code},function(){new t({title:"Email Verified",message:"Your email has been verified. You will now be able to receive email notifications for this event",type:"success",timeout:5e3})},function(){new t({title:"Verification Failed",message:"Your verification code has expired.",type:"error"})}),n.go("event",{id:n.params.id})}]),angular.module("rallly").filter("elapsed",["$filter",function(e){return function(t){if(t){var n=Date.parse(t),i=(new Date).getTime(),a=i-n,o=Math.floor(a/1e3),s=Math.floor(o/60),l=Math.floor(s/60),r=Math.floor(l/24);return r>30?"on "+e("date")(t,"MMMM d"):r>1?r+" days ago":1==r?"1 day ago":l>1?l+" hours ago":1==l?"an hour ago":s>1?s+" minutes ago":1==s?"a minute ago":"a few seconds ago"}}}]),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",["DatePickerService",function(e){return{restrict:"A",require:"ngModel",scope:{model:"=ngModel",control:"="},link:function(t,n,i,a){var o=new e(t.model),s=o.getDatesArray();angular.element(n).datepicker({multidate:!0,todayHighlight:!0}).on("changeDate",function(e){var t=e.dates;if(t.length>s.length){var n=t[t.length-1];o.addDate(n)}else{var i=o.diffDates(s,t);i&&o.removeDate(i)}a.$setViewValue(o.getDates()),s=t}),t.control=t.control||{},t.$watchCollection("model",function(){var e=angular.element(n).datepicker("getDates"),t=o.getDatesArray(); +e.length!=t.length&&angular.element(n).datepicker("setDates",t)}),t.control.unsetDate=function(e){o.removeDate(e)},a.$validators.required=function(e){return e&&0!=e.length?!0:!1}}}}]).service("DatePickerService",function(){return function(e){var t=e||[];this.addDate=function(e){t.push({date:e}),t.sort(function(e,t){return Date.compare(e.date,t.date)>0?!0:!1})},this.removeDate=function(e){for(var n=0;n0?t:null},this.getDatesArray=function(){for(var e=[],n=0;n0;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/form/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/form/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/form/dateForm.html"}}).directive("participantsForm",["FormHelper",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/participantsForm.html",link:function(t){t.emailRegex=e.emailRegexString}}}]).directive("settingsForm",["Event","ConfirmModal",function(e,t){return{scope:{event:"=",form:"="},templateUrl:"templates/form/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)})}}}).directive("timeForm",["DatePickerService",function(e){return{scope:{event:"=",form:"="},templateUrl:"templates/form/timeForm.html",link:function(t){var n,i=!1,a=t.$watch("event.dates",function(o){o&&!i&&a(),i=!0,n=new e(t.event.dates),t.unsetDate=function(e){n.removeDate(e)}})}}}]).directive("timePicker",function(){return{scope:{model:"=ngModel"},require:"ngModel",link:function(e,t,n,i){i.$viewChangeListeners.push(function(){e.model=Date.parse(i.$modelValue),i.$setViewValue(e.model.toString("hh:mm tt")),i.$render()}),i.$validators.time=function(e){if(i.$isEmpty(e))return!0;var t=Date.parse(e);return t?(i.$setViewValue(t.toString("hh:mm tt")),i.$render(),!0):!1}}}}),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;n\n Error 404\n

Not Found

\n"); $templateCache.put("templates/notification.html","
\n
\n {{notification.title}}\n
\n
\n {{notification.message}}\n
\n
\n"); $templateCache.put("templates/directives/discussion.html","
    \n
  • \n
    \n \n
    \n
    \n ×\n
    \n {{comment.author.name}}\n {{comment.created | elapsed}}\n
    \n
    {{comment.content}}
    \n
    \n
  • \n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n \n Make sure you fill in all the fields.\n \n
\n
\n
\n
\n"); -$templateCache.put("templates/directives/poll.html","
\n
\n {{event.participants.length}} participants\n
\n
\n
\n
\n {{date | date: \'EEE\'}}\n
\n
\n {{date | date: \'d\'}}\n
\n
\n {{date | date : \'MMM\'}}\n
\n {{selectedDate($index)}}\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n \n \n \n \n {{participant.name}}\n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
0}\">\n
\n
\n \n \n \n {{example.name}}\n
\n
\n \n \n
\n
\n\n
\n
\n
\n
\n Fill in the form below to get started\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n"); +$templateCache.put("templates/directives/poll.html","
\n
\n {{event.participants.length}} participants\n
\n
\n
\n
\n {{d.date | date: \'EEE\'}}\n
\n
\n {{d.date | date: \'d\'}}\n
\n
\n {{d.date | date : \'MMM\'}}\n
\n {{selectedDate($index)}}\n
\n
\n
\n\n
\n
\n
\n
\n
\n
\n \n \n \n \n {{participant.name}}\n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
0}\">\n
\n
\n \n \n \n {{example.name}}\n
\n
\n \n \n
\n
\n\n
\n
\n
\n
\n Fill in the form below to get started\n
\n
\n
\n
\n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n"); $templateCache.put("templates/directives/timePicker.html","
\n
\n
\n
\n {{date | date: \'EEE\'}}\n
\n
\n {{date | date: \'d\'}}\n
\n
\n {{date | date : \'MMM\'}}\n
\n \n
\n
\n
\n \n
\n
\n"); $templateCache.put("templates/form/dateForm.html","
\n
Choose Dates
\n
    \n
  • \n
    \n
    \n {{d.date | date: \'EEE\'}}\n
    \n
    \n {{d.date | date: \'d\'}}\n
    \n
    \n {{d.date | date : \'MMM\'}}\n
    \n \n
    \n
  • \n
\n
\n
\n
\n
\n \n \n You need to select a few dates\n \n
\n\n
\n
\n
\n
\n"); $templateCache.put("templates/form/eventForm.html","
\n
Event Details
\n
\n
\n
\n
\n
\n \n \n {{errors.title}}\n \n \n
\n
\n
\n
\n \n \n {{errors.location}}\n \n \n
\n
\n
\n
\n
\n \n \n
\n
\n
\n"); diff --git a/public/templates/directives/poll.html b/public/templates/directives/poll.html index 9fd1c2a84..6f18d9ccc 100644 --- a/public/templates/directives/poll.html +++ b/public/templates/directives/poll.html @@ -2,16 +2,16 @@
{{event.participants.length}} participants
-
+
- {{date | date: 'EEE'}} + {{d.date | date: 'EEE'}}
- {{date | date: 'd'}} + {{d.date | date: 'd'}}
- {{date | date : 'MMM'}} + {{d.date | date : 'MMM'}}
{{selectedDate($index)}}