@digitransit-component/digitransit-component-autosuggest 1.9.10 → 1.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- !function(M,z){"object"==typeof exports&&"undefined"!=typeof module?z(exports,require("prop-types"),require("react"),require("i18next"),require("classnames"),require("react-autosuggest"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("lodash/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","lodash/get","@digitransit-component/digitransit-component-suggestion-item","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],z):z((M="undefined"!=typeof globalThis?globalThis:M||self).DTAutosuggest={},M.PropTypes,M.React,M.i18next,M.cx,M.Autosuggest,M.debounce,M.flatten,M.take,M.isString,M.orderBy,M.uniqWith,M.isEqual,M.memoize,M.escapeRegExp,M.cloneDeep,M.get,M.SuggestionItem,M.Icon,M.isEmpty,M.ReactModal,M.DialogModal)}(this,(function(M,z,b,p,O,o,c,A,q,e,n,W,a,t,d,i,r,s,u,R,f,l){"use strict";function L(M){return M&&"object"==typeof M&&"default"in M?M:{default:M}}var N=L(z),B=L(b),X=L(p),h=L(O),m=L(o),g=L(c),T=L(A),_=L(q),y=L(e),S=L(n),v=L(W),k=L(a),E=L(t),w=L(d),C=L(i),D=L(r),P=L(s),x=L(u),I=L(R),F=L(f),H=L(l);function Y(){return Y=Object.assign?Object.assign.bind():function(M){for(var z=1;z<arguments.length;z++){var b=arguments[z];for(var p in b)Object.prototype.hasOwnProperty.call(b,p)&&(M[p]=b[p])}return M},Y.apply(this,arguments)}function U(M,z){return M&&z&&M===z}function j(M,z){const b=M.properties,p=z.properties;if("FutureRoute"===M.type&&"FutureRoute"===z.type){const M=b.origin,z=b.destination,O=p.origin,o=p.destination;return`${M.name}//${M.locality}//${z.name}//${z.locality}`===`${O.name}//${O.locality}//${o.name}//${o.locality}`}if("FutureRoute"===M.type||"FutureRoute"===z.type)return!1;if(("bikeRentalStation"===b.layer||"favouriteBikeRentalStation"===b.layer)&&("bikeRentalStation"===p.layer||"favouriteBikeRentalStation"===p.layer)||"bikestation"===b.layer&&"bikestation"===p.layer)return b.labelId===p.labelId;if(b.gtfsId&&p.gtfsId)return b.gtfsId===p.gtfsId;if(b.gtfsId&&p.gid&&p.gid.includes(b.gtfsId))return!0;if(p.gtfsId&&b.gid&&b.gid.includes(p.gtfsId))return!0;if(("stop"===b.layer||"station"===b.layer)&&("stop"===p.layer||"station"===p.layer)&&b.gid&&p.gid)return b.gid===p.gid;const O=M&&M.geometry?M.geometry.coordinates:void 0,o=z&&z.geometry?z.geometry.coordinates:void 0;return!!(O&&o&&Math.abs(O[0]-o[0])<1e-6&&Math.abs(O[1]-o[1])<1e-6&&(U(b.name,p.name)||U(b.label,p.label)||U(b.address,p.address)||U(b.address,p.label)||U(b.label,p.address)))}const G=M=>y.default(M)?M.toLowerCase():"",V={Address:"address",Back:"back",CurrentPosition:"currentPosition",FavouriteStop:"favouriteStop",FavouriteStation:"favouriteStation",FavouritePlace:"favouritePlace",FavouriteRoute:"favouriteRoute",FutureRoute:"futureRoute",Station:"station",SelectFromMap:"selectFromMap",SelectFromOwnLocations:"ownLocations",Stop:"stop",Street:"street",Venue:"venue",BikeRentalStation:"bikestation",CarPark:"carpark",BikePark:"bikepark"},K=({layer:M,type:z})=>"stop"===M||"favouriteStop"===M||"stop"===z||"favouriteStop"===z,Q=(M,z)=>{switch(M){case V.CurrentPosition:return 1;case V.Back:return.9;case V.SelectFromMap:return.8;case V.SelectFromOwnLocations:return.79;case V.FavouriteStation:case V.FavouritePlace:case V.FavouriteStop:case V.FavouriteRoute:case V.FavouriteBikeRentalStation:return.45;case V.FutureRoute:return.44;case V.Station:return y.default(z)&&0===z.indexOf("gtfs")?.43:.42;default:return.41;case V.CarPark:case V.BikePark:case V.BikeRentalStation:return.38;case V.Stop:return.36}},J=(M,z,b="")=>{if(!Array.isArray(z))return z;const p=z=>y.default(z)&&M&&M.test(z),O=G(b),o=p(O),c=S.default(z,[M=>o&&p(G(M.properties.shortName))&&0===G(M.properties.shortName).indexOf(O)?1:0,M=>{const{confidence:z,layer:b,source:p}=M.properties;if(0===O.length)return Q(b,p);if(!z)return Q(b,p)+((M,z)=>y.default(M)&&0!==M.length?["name","label","address","shortName"].map((M=>z[M])).filter((M=>y.default(M)&&M.length>0)).map((z=>{const b=G(z);return 0===b.indexOf(M)?.5+M.length/b.length:.5*M.length/(M.length+1)})).reduce(((M,z)=>z>M?z:M),0):0)(O,M.properties);switch(b){case V.Station:return z+(0===p.indexOf("gtfs")?.02:.01);case V.Stop:case V.CarPark:case V.BikePark:return z-.05;case V.BikeRentalStation:return z-.04;default:return z}}],["desc","desc"]);return v.default(c,j)},Z=(M,z)=>null!=z&&-1!==M.lastIndexOf(z)?M.substring(0,M.lastIndexOf(z)-1):M,$=M=>M.localadmin||M.locality||M.address&&M.address.lastIndexOf(",")<M.address.length-2&&M.address.substring(M.address.lastIndexOf(",")+2)||"",MM=({id:M,code:z})=>z||(void 0!==M&&void 0!==M.indexOf&&-1!==M.indexOf("#")?M.substring(M.indexOf("#")+1):void 0),zM=E.default(((M,z=!1)=>{switch(M.layer){case"currentPosition":return[M.labelId,M.address];case"selectFromMap":case"ownLocations":case"back":return[M.labelId];case"favouritePlace":return b=M.name,p=M.address,[b||p&&p.split(",")[0],"string"==typeof p?p.replace(new RegExp(`${w.default(b)}([ ,]|$)+`),""):""];case"favouriteBikeRentalStation":case"bikeRentalStation":return[M.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!z&&M.shortName?[M.gtfsId,M.mode.toLowerCase(),M.longName]:[M.shortName,M.longName,M.agency?M.agency.name:void 0];case"venue":case"address":case"street":return[M.name,M.label.replace(new RegExp(`${w.default(M.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return z?[M.name||M.label||M.address&&M.address.split(",")[0],$(M)]:[M.name,M.id,MM(M),$(M)];default:return[M.name||M.label||M.address&&M.address.split(",")[0],$(M)]}var b,p}),((M,z)=>{const b=C.default(M);return b.plain=z,b}));function bM(M){return v.default(M,((M,z)=>{const b=k.default(zM(M.properties),zM(z.properties))&&M.properties.layer===z.properties.layer;return(!b||"FutureRoute"!==M.type&&"FutureRoute"!==z.type)&&b}))}function pM(M,z,b){if("string"==typeof z&&z.length>0){const p=z.toLowerCase().trim(),O=p.includes(" ")||p.includes(",");return M.filter((M=>{let z=[];b.forEach((b=>{let p=D.default(M,b);O||"properties.label"!==b&&"address"!==b||!p||(p=p.split(","),p.length>2?p.splice(p.length-2,2):p.length>1&&p.splice(p.length-1,1),p=p.join(",")),p&&(z=O?z.concat(p.toLowerCase()):z.concat(p.toLowerCase().replace(/,/g," ").split(" ")))}));for(let M=0;M<z.length;M++)if(0===z[M].indexOf(p))return!0;return!1}))}return M}function OM(M,z){return M?Object.keys(M).map((b=>{const p=z||b,O=M[b];return"object"==typeof O?OM(O,p):`${encodeURIComponent(p)}=${encodeURIComponent(O)}`})).join("&"):""}const oM=require("axios").default;function cM(M,z){return oM.get(encodeURI(M)+(z?(-1===M.search(/\?/)?"?":"&")+OM(z):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((M=>M.data))}const AM="https://api.digitransit.fi/geocoding/v1/search";function qM(M,z,b,p,O,o,c,A){const q=M?M.trim():null;if(null==q||q.length<1||c&&!c.test(q))return Promise.resolve([]);const e=o||AM;let n=Y({text:q},z,p,{lang:b});if(O&&(n=Y({},n,{sources:O})),A){n=Y({},n,{layers:A.toString()})}return cM(e,n).then((M=>M.features))}function eM(M,z){if(!M||M.length<1)return Promise.resolve([]);let b="";const p=M.map((M=>{const z="stop"===M.type?"stop":"station";let p=`gtfs${M.gtfsId.split(":")[0].toLowerCase()}:${z}:GTFS:${M.gtfsId}`;return M.code&&(p+=`#${M.code}`),b+=`${p},`,Y({},M,{gid:p})})).reduce((function(M,z){return M[z.gid]=z,M}),{});return cM(z,{ids:b.slice(0,-1)}).then((M=>M.features.map((M=>({type:"FavouriteStop",properties:{addendum:M.properties.addendum,gid:p[M.properties.gid].gid,code:p[M.properties.gid].code,gtfsId:p[M.properties.gid].gtfsId,lastUpdated:p[M.properties.gid].lastUpdated,favouriteId:p[M.properties.gid].favouriteId,address:M.properties.label,layer:K(M.properties)?"favouriteStop":"favouriteStation"},geometry:M.geometry})))))}function nM(M,z,b){let p=pM(M,z,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return b&&(p=p.filter((M=>!b.includes(M.properties.layer)))),Promise.resolve(_.default(p,10).map((M=>{const z=Y({},M,{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete z.properties.confidence,z})))}const WM=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE"],aM=["favouritePlace","venue","address","street"],tM=["carpark","bikepark"];const dM=g.default((function(M,z,b,p,O,o,{input:c},A,q,e){const{getPositions:n,getFavouriteLocations:W,getOldSearches:a,getFavouriteStops:t,parkingAreaSources:d,getLanguage:i,getStopAndStationsQuery:r,getFavouriteBikeRentalStationsQuery:s,getFavouriteBikeRentalStations:u,getFavouriteRoutesQuery:R,getFavouriteRoutes:f,getRoutesQuery:l,context:L,isPeliasLocationAware:N,minimalRegexp:B,lineRegexp:X,URL_PELIAS:h,URL_PELIAS_PLACE:m,feedIDs:g,geocodingSearchParams:y,geocodingSources:S,getFutureRoutes:v,cityBikeNetworks:k}=p,E=!M||0===M.length,w=!z||0===z.length,C=n(L),D=[],P={type:"all",term:c,results:[]},x=i(L),I=N&&null!=e&&e.lat&&null!=e&&e.lon?{"focus.point.lat":e.lat.toFixed(3),"focus.point.lon":e.lon.toFixed(3)}:{},F=b?b.split("-")[1]:void 0;if(M.includes("CurrentPosition")&&"geolocation-not-supported"!==C.status&&D.push(function(M,z){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"CurrentLocation",address:z.address,lat:z.lat,lon:z.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:z.address,lat:z.lat,lon:z.lon},geometry:{type:"Point",coordinates:[z.lon,z.lat]}}]):Promise.resolve([])}(c,C)),(E||M.includes("MapPosition"))&&D.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(c)),M.includes("FutureRoutes")){const M=v(L);D.push(_.default(M,3))}if(M.includes("SelectFromOwnLocations")&&function(M,z,b){const p=z(M);if(p&&p.length>0)return!0;const O=b(M);return O&&O.length>0}(L,W,t)&&D.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(c)),E||M.includes("Locations")){const M=y;if(z.includes("Favourite")){const M=W(L);D.push(function(M,z){return Promise.resolve(pM(M,z,["address","name"]).map((M=>({type:"FavouritePlace",properties:Y({},M,{label:M.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[M.lon,M.lat]}}))))}(M,c)),z.includes("Back")&&D.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(w||z.includes("Datasource")){const z=["station","venue","address","street"],b=g.map((M=>`gtfs${M}`)),p=S.concat(b).join(",");D.push(qM(c,M,x,I,p,h,B,z))}if(w||z.includes("History")){const M=a(L,"endpoint"),z=["currentPosition","selectFromMap","futureRoute","ownLocations","bikeRentalStation","bikepark","carpark","stop","back"];z.push(...WM),D.push(nM(M,c,z))}}if(E||M.includes("ParkingAreas")){if(w||z.includes("Datasource")){const M=y;o&&10!==o&&(M.size=o);const z=["carpark","bikepark"],b=d?d.join(","):null;D.push(qM(c,M,x,I,b,h,B,z).then((M=>O?O(M,F):M)))}if(w||z.includes("History")){const M=a(L),z=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikestation","bikeRentalStation","back"];z.push(...WM),z.push(...aM),D.push(nM(M,c,z))}}if(E||M.includes("Stops")){if(z.includes("Favourite")){const M=t(L);let z;z=M.every((M=>"station"===M.type))?eM(M,m).then((M=>O?O(M,F):M)):r(M).then((M=>eM(M,m))).then((M=>O?O(M,F):M)),D.push(function(M,z){return M.then((M=>pM(M,z,["properties.name","properties.name","properties.address"])))}(z,c))}if(w||z.includes("Datasource")){const z=["stop","station"],b=o&&10!==o?{size:o}:{};y&&y["boundary.country"]&&(b["boundary.country"]=y["boundary.country"]),(E||M.includes("Locations"))&&(b.dedupestops=1);const p=g.map((M=>`gtfs${M}`)).join(",");D.push(qM(c,b,x,I,p,h,B,z).then((M=>O?O(M,F):M)))}if(w||z.includes("History")){const M=a(L).filter((M=>!M.properties.gid||M.properties.gid.includes("GTFS:"))),z=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikeRentalStation","back"];z.push(...WM),z.push(...aM),z.push(...tM),b?("route-CITYBIKE"!==b&&(z.push("bikeRentalStation"),z.push("bikestation")),D.push(nM(M,c,z).then((M=>O?O(M,F):M)))):D.push(nM(M,c,z))}}if(E||M.includes("Routes")){if(z.includes("Favourite")){const M=f(L);D.push(R(M,c,F,q).then((M=>O?O(M,F,"Routes"):M)))}if(D.push(l(c,g,b,q).then((M=>O?O(M,F,"Routes"):M))),w||z.includes("History")){const M=a(L),z=["currentPosition","selectFromMap","futureRoute","favouritePlace","stop","station","bikepark","carpark","ownLocations","back"];b&&("route-CITYBIKE"!==b&&(z.push("bikeRentalStation"),z.push("bikestation")),z.push(...WM.filter((M=>!(M===b))))),z.push(...aM),D.push(nM(M,c,z).then((M=>O?O(M,F,"Routes"):M)))}}if(E||M.includes("BikeRentalStations")){if(z.includes("Favourite")){const M=u(L);D.push(s(M,c))}if(w||z.includes("Datasource")){const M=["bikestation"],z=o&&10!==o?{size:o}:{};D.push(qM(c,z,x,I,k.join(","),h,B,M).then((M=>O?O(M,F,"BikeRentalStations"):M)))}}Promise.all(D).then(T.default).then(bM).then((M=>{P.results=M})).catch((M=>{P.error=M})).then((()=>{A(Y({},P,{results:J(X,P.results,c)}))}))}),300,{leading:!0});function iM(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function rM(M,z){return M(z={exports:{}},z.exports),z.exports}var sM,uM=rM((function(M,z){M.exports=function(){var z,b;function p(){return z.apply(null,arguments)}function O(M){z=M}function o(M){return M instanceof Array||"[object Array]"===Object.prototype.toString.call(M)}function c(M){return null!=M&&"[object Object]"===Object.prototype.toString.call(M)}function A(M,z){return Object.prototype.hasOwnProperty.call(M,z)}function q(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var z;for(z in M)if(A(M,z))return!1;return!0}function e(M){return void 0===M}function n(M){return"number"==typeof M||"[object Number]"===Object.prototype.toString.call(M)}function W(M){return M instanceof Date||"[object Date]"===Object.prototype.toString.call(M)}function a(M,z){var b,p=[],O=M.length;for(b=0;b<O;++b)p.push(z(M[b],b));return p}function t(M,z){for(var b in z)A(z,b)&&(M[b]=z[b]);return A(z,"toString")&&(M.toString=z.toString),A(z,"valueOf")&&(M.valueOf=z.valueOf),M}function d(M,z,b,p){return Vb(M,z,b,p,!0).utc()}function i(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function r(M){return null==M._pf&&(M._pf=i()),M._pf}function s(M){if(null==M._isValid){var z=r(M),p=b.call(z.parsedDateParts,(function(M){return null!=M})),O=!isNaN(M._d.getTime())&&z.overflow<0&&!z.empty&&!z.invalidEra&&!z.invalidMonth&&!z.invalidWeekday&&!z.weekdayMismatch&&!z.nullInput&&!z.invalidFormat&&!z.userInvalidated&&(!z.meridiem||z.meridiem&&p);if(M._strict&&(O=O&&0===z.charsLeftOver&&0===z.unusedTokens.length&&void 0===z.bigHour),null!=Object.isFrozen&&Object.isFrozen(M))return O;M._isValid=O}return M._isValid}function u(M){var z=d(NaN);return null!=M?t(r(z),M):r(z).userInvalidated=!0,z}b=Array.prototype.some?Array.prototype.some:function(M){var z,b=Object(this),p=b.length>>>0;for(z=0;z<p;z++)if(z in b&&M.call(this,b[z],z,b))return!0;return!1};var R=p.momentProperties=[],f=!1;function l(M,z){var b,p,O,o=R.length;if(e(z._isAMomentObject)||(M._isAMomentObject=z._isAMomentObject),e(z._i)||(M._i=z._i),e(z._f)||(M._f=z._f),e(z._l)||(M._l=z._l),e(z._strict)||(M._strict=z._strict),e(z._tzm)||(M._tzm=z._tzm),e(z._isUTC)||(M._isUTC=z._isUTC),e(z._offset)||(M._offset=z._offset),e(z._pf)||(M._pf=r(z)),e(z._locale)||(M._locale=z._locale),o>0)for(b=0;b<o;b++)e(O=z[p=R[b]])||(M[p]=O);return M}function L(M){l(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===f&&(f=!0,p.updateOffset(this),f=!1)}function N(M){return M instanceof L||null!=M&&null!=M._isAMomentObject}function B(M){!1===p.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+M)}function X(M,z){var b=!0;return t((function(){if(null!=p.deprecationHandler&&p.deprecationHandler(null,M),b){var O,o,c,q=[],e=arguments.length;for(o=0;o<e;o++){if(O="","object"==typeof arguments[o]){for(c in O+="\n["+o+"] ",arguments[0])A(arguments[0],c)&&(O+=c+": "+arguments[0][c]+", ");O=O.slice(0,-2)}else O=arguments[o];q.push(O)}B(M+"\nArguments: "+Array.prototype.slice.call(q).join("")+"\n"+(new Error).stack),b=!1}return z.apply(this,arguments)}),z)}var h,m={};function g(M,z){null!=p.deprecationHandler&&p.deprecationHandler(M,z),m[M]||(B(z),m[M]=!0)}function T(M){return"undefined"!=typeof Function&&M instanceof Function||"[object Function]"===Object.prototype.toString.call(M)}function _(M){var z,b;for(b in M)A(M,b)&&(T(z=M[b])?this[b]=z:this["_"+b]=z);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function y(M,z){var b,p=t({},M);for(b in z)A(z,b)&&(c(M[b])&&c(z[b])?(p[b]={},t(p[b],M[b]),t(p[b],z[b])):null!=z[b]?p[b]=z[b]:delete p[b]);for(b in M)A(M,b)&&!A(z,b)&&c(M[b])&&(p[b]=t({},p[b]));return p}function S(M){null!=M&&this.set(M)}p.suppressDeprecationWarnings=!1,p.deprecationHandler=null,h=Object.keys?Object.keys:function(M){var z,b=[];for(z in M)A(M,z)&&b.push(z);return b};var v={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function k(M,z,b){var p=this._calendar[M]||this._calendar.sameElse;return T(p)?p.call(z,b):p}function E(M,z,b){var p=""+Math.abs(M),O=z-p.length;return(M>=0?b?"+":"":"-")+Math.pow(10,Math.max(0,O)).toString().substr(1)+p}var w=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,C=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,D={},P={};function x(M,z,b,p){var O=p;"string"==typeof p&&(O=function(){return this[p]()}),M&&(P[M]=O),z&&(P[z[0]]=function(){return E(O.apply(this,arguments),z[1],z[2])}),b&&(P[b]=function(){return this.localeData().ordinal(O.apply(this,arguments),M)})}function I(M){return M.match(/\[[\s\S]/)?M.replace(/^\[|\]$/g,""):M.replace(/\\/g,"")}function F(M){var z,b,p=M.match(w);for(z=0,b=p.length;z<b;z++)P[p[z]]?p[z]=P[p[z]]:p[z]=I(p[z]);return function(z){var O,o="";for(O=0;O<b;O++)o+=T(p[O])?p[O].call(z,M):p[O];return o}}function H(M,z){return M.isValid()?(z=Y(z,M.localeData()),D[z]=D[z]||F(z),D[z](M)):M.localeData().invalidDate()}function Y(M,z){var b=5;function p(M){return z.longDateFormat(M)||M}for(C.lastIndex=0;b>=0&&C.test(M);)M=M.replace(C,p),C.lastIndex=0,b-=1;return M}var U={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function j(M){var z=this._longDateFormat[M],b=this._longDateFormat[M.toUpperCase()];return z||!b?z:(this._longDateFormat[M]=b.match(w).map((function(M){return"MMMM"===M||"MM"===M||"DD"===M||"dddd"===M?M.slice(1):M})).join(""),this._longDateFormat[M])}var G="Invalid date";function V(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function J(M){return this._ordinal.replace("%d",M)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function $(M,z,b,p){var O=this._relativeTime[b];return T(O)?O(M,z,b,p):O.replace(/%d/i,M)}function MM(M,z){var b=this._relativeTime[M>0?"future":"past"];return T(b)?b(z):b.replace(/%s/i,z)}var zM={};function bM(M,z){var b=M.toLowerCase();zM[b]=zM[b+"s"]=zM[z]=M}function pM(M){return"string"==typeof M?zM[M]||zM[M.toLowerCase()]:void 0}function OM(M){var z,b,p={};for(b in M)A(M,b)&&(z=pM(b))&&(p[z]=M[b]);return p}var oM={};function cM(M,z){oM[M]=z}function AM(M){var z,b=[];for(z in M)A(M,z)&&b.push({unit:z,priority:oM[z]});return b.sort((function(M,z){return M.priority-z.priority})),b}function qM(M){return M%4==0&&M%100!=0||M%400==0}function eM(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function nM(M){var z=+M,b=0;return 0!==z&&isFinite(z)&&(b=eM(z)),b}function WM(M,z){return function(b){return null!=b?(tM(this,M,b),p.updateOffset(this,z),this):aM(this,M)}}function aM(M,z){return M.isValid()?M._d["get"+(M._isUTC?"UTC":"")+z]():NaN}function tM(M,z,b){M.isValid()&&!isNaN(b)&&("FullYear"===z&&qM(M.year())&&1===M.month()&&29===M.date()?(b=nM(b),M._d["set"+(M._isUTC?"UTC":"")+z](b,M.month(),Mz(b,M.month()))):M._d["set"+(M._isUTC?"UTC":"")+z](b))}function dM(M){return T(this[M=pM(M)])?this[M]():this}function rM(M,z){if("object"==typeof M){var b,p=AM(M=OM(M)),O=p.length;for(b=0;b<O;b++)this[p[b].unit](M[p[b].unit])}else if(T(this[M=pM(M)]))return this[M](z);return this}var sM,uM=/\d/,RM=/\d\d/,fM=/\d{3}/,lM=/\d{4}/,LM=/[+-]?\d{6}/,NM=/\d\d?/,BM=/\d\d\d\d?/,XM=/\d\d\d\d\d\d?/,hM=/\d{1,3}/,mM=/\d{1,4}/,gM=/[+-]?\d{1,6}/,TM=/\d+/,_M=/[+-]?\d+/,yM=/Z|[+-]\d\d:?\d\d/gi,SM=/Z|[+-]\d\d(?::?\d\d)?/gi,vM=/[+-]?\d+(\.\d{1,3})?/,kM=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function EM(M,z,b){sM[M]=T(z)?z:function(M,p){return M&&b?b:z}}function wM(M,z){return A(sM,M)?sM[M](z._strict,z._locale):new RegExp(CM(M))}function CM(M){return DM(M.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(M,z,b,p,O){return z||b||p||O})))}function DM(M){return M.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}sM={};var PM={};function xM(M,z){var b,p,O=z;for("string"==typeof M&&(M=[M]),n(z)&&(O=function(M,b){b[z]=nM(M)}),p=M.length,b=0;b<p;b++)PM[M[b]]=O}function IM(M,z){xM(M,(function(M,b,p,O){p._w=p._w||{},z(M,p._w,p,O)}))}function FM(M,z,b){null!=z&&A(PM,M)&&PM[M](z,b._a,b,M)}var HM,YM=0,UM=1,jM=2,GM=3,VM=4,KM=5,QM=6,JM=7,ZM=8;function $M(M,z){return(M%z+z)%z}function Mz(M,z){if(isNaN(M)||isNaN(z))return NaN;var b=$M(z,12);return M+=(z-b)/12,1===b?qM(M)?29:28:31-b%7%2}HM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var z;for(z=0;z<this.length;++z)if(this[z]===M)return z;return-1},x("M",["MM",2],"Mo",(function(){return this.month()+1})),x("MMM",0,0,(function(M){return this.localeData().monthsShort(this,M)})),x("MMMM",0,0,(function(M){return this.localeData().months(this,M)})),bM("month","M"),cM("month",8),EM("M",NM),EM("MM",NM,RM),EM("MMM",(function(M,z){return z.monthsShortRegex(M)})),EM("MMMM",(function(M,z){return z.monthsRegex(M)})),xM(["M","MM"],(function(M,z){z[UM]=nM(M)-1})),xM(["MMM","MMMM"],(function(M,z,b,p){var O=b._locale.monthsParse(M,p,b._strict);null!=O?z[UM]=O:r(b).invalidMonth=M}));var zz="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),bz="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),pz=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Oz=kM,oz=kM;function cz(M,z){return M?o(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||pz).test(z)?"format":"standalone"][M.month()]:o(this._months)?this._months:this._months.standalone}function Az(M,z){return M?o(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[pz.test(z)?"format":"standalone"][M.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function qz(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],p=0;p<12;++p)o=d([2e3,p]),this._shortMonthsParse[p]=this.monthsShort(o,"").toLocaleLowerCase(),this._longMonthsParse[p]=this.months(o,"").toLocaleLowerCase();return b?"MMM"===z?-1!==(O=HM.call(this._shortMonthsParse,c))?O:null:-1!==(O=HM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=HM.call(this._shortMonthsParse,c))||-1!==(O=HM.call(this._longMonthsParse,c))?O:null:-1!==(O=HM.call(this._longMonthsParse,c))||-1!==(O=HM.call(this._shortMonthsParse,c))?O:null}function ez(M,z,b){var p,O,o;if(this._monthsParseExact)return qz.call(this,M,z,b);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),p=0;p<12;p++){if(O=d([2e3,p]),b&&!this._longMonthsParse[p]&&(this._longMonthsParse[p]=new RegExp("^"+this.months(O,"").replace(".","")+"$","i"),this._shortMonthsParse[p]=new RegExp("^"+this.monthsShort(O,"").replace(".","")+"$","i")),b||this._monthsParse[p]||(o="^"+this.months(O,"")+"|^"+this.monthsShort(O,""),this._monthsParse[p]=new RegExp(o.replace(".",""),"i")),b&&"MMMM"===z&&this._longMonthsParse[p].test(M))return p;if(b&&"MMM"===z&&this._shortMonthsParse[p].test(M))return p;if(!b&&this._monthsParse[p].test(M))return p}}function nz(M,z){var b;if(!M.isValid())return M;if("string"==typeof z)if(/^\d+$/.test(z))z=nM(z);else if(!n(z=M.localeData().monthsParse(z)))return M;return b=Math.min(M.date(),Mz(M.year(),z)),M._d["set"+(M._isUTC?"UTC":"")+"Month"](z,b),M}function Wz(M){return null!=M?(nz(this,M),p.updateOffset(this,!0),this):aM(this,"Month")}function az(){return Mz(this.year(),this.month())}function tz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||iz.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(A(this,"_monthsShortRegex")||(this._monthsShortRegex=Oz),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)}function dz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||iz.call(this),M?this._monthsStrictRegex:this._monthsRegex):(A(this,"_monthsRegex")||(this._monthsRegex=oz),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)}function iz(){function M(M,z){return z.length-M.length}var z,b,p=[],O=[],o=[];for(z=0;z<12;z++)b=d([2e3,z]),p.push(this.monthsShort(b,"")),O.push(this.months(b,"")),o.push(this.months(b,"")),o.push(this.monthsShort(b,""));for(p.sort(M),O.sort(M),o.sort(M),z=0;z<12;z++)p[z]=DM(p[z]),O[z]=DM(O[z]);for(z=0;z<24;z++)o[z]=DM(o[z]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+O.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+p.join("|")+")","i")}function rz(M){return qM(M)?366:365}x("Y",0,0,(function(){var M=this.year();return M<=9999?E(M,4):"+"+M})),x(0,["YY",2],0,(function(){return this.year()%100})),x(0,["YYYY",4],0,"year"),x(0,["YYYYY",5],0,"year"),x(0,["YYYYYY",6,!0],0,"year"),bM("year","y"),cM("year",1),EM("Y",_M),EM("YY",NM,RM),EM("YYYY",mM,lM),EM("YYYYY",gM,LM),EM("YYYYYY",gM,LM),xM(["YYYYY","YYYYYY"],YM),xM("YYYY",(function(M,z){z[YM]=2===M.length?p.parseTwoDigitYear(M):nM(M)})),xM("YY",(function(M,z){z[YM]=p.parseTwoDigitYear(M)})),xM("Y",(function(M,z){z[YM]=parseInt(M,10)})),p.parseTwoDigitYear=function(M){return nM(M)+(nM(M)>68?1900:2e3)};var sz=WM("FullYear",!0);function uz(){return qM(this.year())}function Rz(M,z,b,p,O,o,c){var A;return M<100&&M>=0?(A=new Date(M+400,z,b,p,O,o,c),isFinite(A.getFullYear())&&A.setFullYear(M)):A=new Date(M,z,b,p,O,o,c),A}function fz(M){var z,b;return M<100&&M>=0?((b=Array.prototype.slice.call(arguments))[0]=M+400,z=new Date(Date.UTC.apply(null,b)),isFinite(z.getUTCFullYear())&&z.setUTCFullYear(M)):z=new Date(Date.UTC.apply(null,arguments)),z}function lz(M,z,b){var p=7+z-b;return-(7+fz(M,0,p).getUTCDay()-z)%7+p-1}function Lz(M,z,b,p,O){var o,c,A=1+7*(z-1)+(7+b-p)%7+lz(M,p,O);return A<=0?c=rz(o=M-1)+A:A>rz(M)?(o=M+1,c=A-rz(M)):(o=M,c=A),{year:o,dayOfYear:c}}function Nz(M,z,b){var p,O,o=lz(M.year(),z,b),c=Math.floor((M.dayOfYear()-o-1)/7)+1;return c<1?p=c+Bz(O=M.year()-1,z,b):c>Bz(M.year(),z,b)?(p=c-Bz(M.year(),z,b),O=M.year()+1):(O=M.year(),p=c),{week:p,year:O}}function Bz(M,z,b){var p=lz(M,z,b),O=lz(M+1,z,b);return(rz(M)-p+O)/7}function Xz(M){return Nz(M,this._week.dow,this._week.doy).week}x("w",["ww",2],"wo","week"),x("W",["WW",2],"Wo","isoWeek"),bM("week","w"),bM("isoWeek","W"),cM("week",5),cM("isoWeek",5),EM("w",NM),EM("ww",NM,RM),EM("W",NM),EM("WW",NM,RM),IM(["w","ww","W","WW"],(function(M,z,b,p){z[p.substr(0,1)]=nM(M)}));var hz={dow:0,doy:6};function mz(){return this._week.dow}function gz(){return this._week.doy}function Tz(M){var z=this.localeData().week(this);return null==M?z:this.add(7*(M-z),"d")}function _z(M){var z=Nz(this,1,4).week;return null==M?z:this.add(7*(M-z),"d")}function yz(M,z){return"string"!=typeof M?M:isNaN(M)?"number"==typeof(M=z.weekdaysParse(M))?M:null:parseInt(M,10)}function Sz(M,z){return"string"==typeof M?z.weekdaysParse(M)%7||7:isNaN(M)?null:M}function vz(M,z){return M.slice(z,7).concat(M.slice(0,z))}x("d",0,"do","day"),x("dd",0,0,(function(M){return this.localeData().weekdaysMin(this,M)})),x("ddd",0,0,(function(M){return this.localeData().weekdaysShort(this,M)})),x("dddd",0,0,(function(M){return this.localeData().weekdays(this,M)})),x("e",0,0,"weekday"),x("E",0,0,"isoWeekday"),bM("day","d"),bM("weekday","e"),bM("isoWeekday","E"),cM("day",11),cM("weekday",11),cM("isoWeekday",11),EM("d",NM),EM("e",NM),EM("E",NM),EM("dd",(function(M,z){return z.weekdaysMinRegex(M)})),EM("ddd",(function(M,z){return z.weekdaysShortRegex(M)})),EM("dddd",(function(M,z){return z.weekdaysRegex(M)})),IM(["dd","ddd","dddd"],(function(M,z,b,p){var O=b._locale.weekdaysParse(M,p,b._strict);null!=O?z.d=O:r(b).invalidWeekday=M})),IM(["d","e","E"],(function(M,z,b,p){z[p]=nM(M)}));var kz="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ez="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),wz="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Cz=kM,Dz=kM,Pz=kM;function xz(M,z){var b=o(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(z)?"format":"standalone"];return!0===M?vz(b,this._week.dow):M?b[M.day()]:b}function Iz(M){return!0===M?vz(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort}function Fz(M){return!0===M?vz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Hz(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)o=d([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(o,"").toLocaleLowerCase();return b?"dddd"===z?-1!==(O=HM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=HM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=HM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=HM.call(this._weekdaysParse,c))||-1!==(O=HM.call(this._shortWeekdaysParse,c))||-1!==(O=HM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=HM.call(this._shortWeekdaysParse,c))||-1!==(O=HM.call(this._weekdaysParse,c))||-1!==(O=HM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=HM.call(this._minWeekdaysParse,c))||-1!==(O=HM.call(this._weekdaysParse,c))||-1!==(O=HM.call(this._shortWeekdaysParse,c))?O:null}function Yz(M,z,b){var p,O,o;if(this._weekdaysParseExact)return Hz.call(this,M,z,b);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(O=d([2e3,1]).day(p),b&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(O,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(O,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(O,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(o="^"+this.weekdays(O,"")+"|^"+this.weekdaysShort(O,"")+"|^"+this.weekdaysMin(O,""),this._weekdaysParse[p]=new RegExp(o.replace(".",""),"i")),b&&"dddd"===z&&this._fullWeekdaysParse[p].test(M))return p;if(b&&"ddd"===z&&this._shortWeekdaysParse[p].test(M))return p;if(b&&"dd"===z&&this._minWeekdaysParse[p].test(M))return p;if(!b&&this._weekdaysParse[p].test(M))return p}}function Uz(M){if(!this.isValid())return null!=M?this:NaN;var z=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=M?(M=yz(M,this.localeData()),this.add(M-z,"d")):z}function jz(M){if(!this.isValid())return null!=M?this:NaN;var z=(this.day()+7-this.localeData()._week.dow)%7;return null==M?z:this.add(M-z,"d")}function Gz(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var z=Sz(M,this.localeData());return this.day(this.day()%7?z:z-7)}return this.day()||7}function Vz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(A(this,"_weekdaysRegex")||(this._weekdaysRegex=Cz),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)}function Kz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(A(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dz),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(A(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pz),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jz(){function M(M,z){return z.length-M.length}var z,b,p,O,o,c=[],A=[],q=[],e=[];for(z=0;z<7;z++)b=d([2e3,1]).day(z),p=DM(this.weekdaysMin(b,"")),O=DM(this.weekdaysShort(b,"")),o=DM(this.weekdays(b,"")),c.push(p),A.push(O),q.push(o),e.push(p),e.push(O),e.push(o);c.sort(M),A.sort(M),q.sort(M),e.sort(M),this._weekdaysRegex=new RegExp("^("+e.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+A.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+c.join("|")+")","i")}function Zz(){return this.hours()%12||12}function $z(){return this.hours()||24}function Mb(M,z){x(M,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),z)}))}function zb(M,z){return z._meridiemParse}function bb(M){return"p"===(M+"").toLowerCase().charAt(0)}x("H",["HH",2],0,"hour"),x("h",["hh",2],0,Zz),x("k",["kk",2],0,$z),x("hmm",0,0,(function(){return""+Zz.apply(this)+E(this.minutes(),2)})),x("hmmss",0,0,(function(){return""+Zz.apply(this)+E(this.minutes(),2)+E(this.seconds(),2)})),x("Hmm",0,0,(function(){return""+this.hours()+E(this.minutes(),2)})),x("Hmmss",0,0,(function(){return""+this.hours()+E(this.minutes(),2)+E(this.seconds(),2)})),Mb("a",!0),Mb("A",!1),bM("hour","h"),cM("hour",13),EM("a",zb),EM("A",zb),EM("H",NM),EM("h",NM),EM("k",NM),EM("HH",NM,RM),EM("hh",NM,RM),EM("kk",NM,RM),EM("hmm",BM),EM("hmmss",XM),EM("Hmm",BM),EM("Hmmss",XM),xM(["H","HH"],GM),xM(["k","kk"],(function(M,z,b){var p=nM(M);z[GM]=24===p?0:p})),xM(["a","A"],(function(M,z,b){b._isPm=b._locale.isPM(M),b._meridiem=M})),xM(["h","hh"],(function(M,z,b){z[GM]=nM(M),r(b).bigHour=!0})),xM("hmm",(function(M,z,b){var p=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p)),r(b).bigHour=!0})),xM("hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p,2)),z[KM]=nM(M.substr(O)),r(b).bigHour=!0})),xM("Hmm",(function(M,z,b){var p=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p))})),xM("Hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p,2)),z[KM]=nM(M.substr(O))}));var pb=/[ap]\.?m?\.?/i,Ob=WM("Hours",!0);function ob(M,z,b){return M>11?b?"pm":"PM":b?"am":"AM"}var cb,Ab={calendar:v,longDateFormat:U,invalidDate:G,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:Z,months:zz,monthsShort:bz,week:hz,weekdays:kz,weekdaysMin:wz,weekdaysShort:Ez,meridiemParse:pb},qb={},eb={};function nb(M,z){var b,p=Math.min(M.length,z.length);for(b=0;b<p;b+=1)if(M[b]!==z[b])return b;return p}function Wb(M){return M?M.toLowerCase().replace("_","-"):M}function ab(M){for(var z,b,p,O,o=0;o<M.length;){for(z=(O=Wb(M[o]).split("-")).length,b=(b=Wb(M[o+1]))?b.split("-"):null;z>0;){if(p=db(O.slice(0,z).join("-")))return p;if(b&&b.length>=z&&nb(O,b)>=z-1)break;z--}o++}return cb}function tb(M){return null!=M.match("^[^/\\\\]*$")}function db(z){var b=null;if(void 0===qb[z]&&M&&M.exports&&tb(z))try{b=cb._abbr,iM(),ib(b)}catch(M){qb[z]=null}return qb[z]}function ib(M,z){var b;return M&&((b=e(z)?ub(M):rb(M,z))?cb=b:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+M+" not found. Did you forget to load it?")),cb._abbr}function rb(M,z){if(null!==z){var b,p=Ab;if(z.abbr=M,null!=qb[M])g("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=qb[M]._config;else if(null!=z.parentLocale)if(null!=qb[z.parentLocale])p=qb[z.parentLocale]._config;else{if(null==(b=db(z.parentLocale)))return eb[z.parentLocale]||(eb[z.parentLocale]=[]),eb[z.parentLocale].push({name:M,config:z}),null;p=b._config}return qb[M]=new S(y(p,z)),eb[M]&&eb[M].forEach((function(M){rb(M.name,M.config)})),ib(M),qb[M]}return delete qb[M],null}function sb(M,z){if(null!=z){var b,p,O=Ab;null!=qb[M]&&null!=qb[M].parentLocale?qb[M].set(y(qb[M]._config,z)):(null!=(p=db(M))&&(O=p._config),z=y(O,z),null==p&&(z.abbr=M),(b=new S(z)).parentLocale=qb[M],qb[M]=b),ib(M)}else null!=qb[M]&&(null!=qb[M].parentLocale?(qb[M]=qb[M].parentLocale,M===ib()&&ib(M)):null!=qb[M]&&delete qb[M]);return qb[M]}function ub(M){var z;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!o(M)){if(z=db(M))return z;M=[M]}return ab(M)}function Rb(){return h(qb)}function fb(M){var z,b=M._a;return b&&-2===r(M).overflow&&(z=b[UM]<0||b[UM]>11?UM:b[jM]<1||b[jM]>Mz(b[YM],b[UM])?jM:b[GM]<0||b[GM]>24||24===b[GM]&&(0!==b[VM]||0!==b[KM]||0!==b[QM])?GM:b[VM]<0||b[VM]>59?VM:b[KM]<0||b[KM]>59?KM:b[QM]<0||b[QM]>999?QM:-1,r(M)._overflowDayOfYear&&(z<YM||z>jM)&&(z=jM),r(M)._overflowWeeks&&-1===z&&(z=JM),r(M)._overflowWeekday&&-1===z&&(z=ZM),r(M).overflow=z),M}var lb=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Lb=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nb=/Z|[+-]\d\d(?::?\d\d)?/,Bb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Xb=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],hb=/^\/?Date\((-?\d+)/i,mb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,gb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Tb(M){var z,b,p,O,o,c,A=M._i,q=lb.exec(A)||Lb.exec(A),e=Bb.length,n=Xb.length;if(q){for(r(M).iso=!0,z=0,b=e;z<b;z++)if(Bb[z][1].exec(q[1])){O=Bb[z][0],p=!1!==Bb[z][2];break}if(null==O)return void(M._isValid=!1);if(q[3]){for(z=0,b=n;z<b;z++)if(Xb[z][1].exec(q[3])){o=(q[2]||" ")+Xb[z][0];break}if(null==o)return void(M._isValid=!1)}if(!p&&null!=o)return void(M._isValid=!1);if(q[4]){if(!Nb.exec(q[4]))return void(M._isValid=!1);c="Z"}M._f=O+(o||"")+(c||""),Ib(M)}else M._isValid=!1}function _b(M,z,b,p,O,o){var c=[yb(M),bz.indexOf(z),parseInt(b,10),parseInt(p,10),parseInt(O,10)];return o&&c.push(parseInt(o,10)),c}function yb(M){var z=parseInt(M,10);return z<=49?2e3+z:z<=999?1900+z:z}function Sb(M){return M.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function vb(M,z,b){return!M||Ez.indexOf(M)===new Date(z[0],z[1],z[2]).getDay()||(r(b).weekdayMismatch=!0,b._isValid=!1,!1)}function kb(M,z,b){if(M)return gb[M];if(z)return 0;var p=parseInt(b,10),O=p%100;return(p-O)/100*60+O}function Eb(M){var z,b=mb.exec(Sb(M._i));if(b){if(z=_b(b[4],b[3],b[2],b[5],b[6],b[7]),!vb(b[1],z,M))return;M._a=z,M._tzm=kb(b[8],b[9],b[10]),M._d=fz.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),r(M).rfc2822=!0}else M._isValid=!1}function wb(M){var z=hb.exec(M._i);null===z?(Tb(M),!1===M._isValid&&(delete M._isValid,Eb(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:p.createFromInputFallback(M)))):M._d=new Date(+z[1])}function Cb(M,z,b){return null!=M?M:null!=z?z:b}function Db(M){var z=new Date(p.now());return M._useUTC?[z.getUTCFullYear(),z.getUTCMonth(),z.getUTCDate()]:[z.getFullYear(),z.getMonth(),z.getDate()]}function Pb(M){var z,b,p,O,o,c=[];if(!M._d){for(p=Db(M),M._w&&null==M._a[jM]&&null==M._a[UM]&&xb(M),null!=M._dayOfYear&&(o=Cb(M._a[YM],p[YM]),(M._dayOfYear>rz(o)||0===M._dayOfYear)&&(r(M)._overflowDayOfYear=!0),b=fz(o,0,M._dayOfYear),M._a[UM]=b.getUTCMonth(),M._a[jM]=b.getUTCDate()),z=0;z<3&&null==M._a[z];++z)M._a[z]=c[z]=p[z];for(;z<7;z++)M._a[z]=c[z]=null==M._a[z]?2===z?1:0:M._a[z];24===M._a[GM]&&0===M._a[VM]&&0===M._a[KM]&&0===M._a[QM]&&(M._nextDay=!0,M._a[GM]=0),M._d=(M._useUTC?fz:Rz).apply(null,c),O=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[GM]=24),M._w&&void 0!==M._w.d&&M._w.d!==O&&(r(M).weekdayMismatch=!0)}}function xb(M){var z,b,p,O,o,c,A,q,e;null!=(z=M._w).GG||null!=z.W||null!=z.E?(o=1,c=4,b=Cb(z.GG,M._a[YM],Nz(Kb(),1,4).year),p=Cb(z.W,1),((O=Cb(z.E,1))<1||O>7)&&(q=!0)):(o=M._locale._week.dow,c=M._locale._week.doy,e=Nz(Kb(),o,c),b=Cb(z.gg,M._a[YM],e.year),p=Cb(z.w,e.week),null!=z.d?((O=z.d)<0||O>6)&&(q=!0):null!=z.e?(O=z.e+o,(z.e<0||z.e>6)&&(q=!0)):O=o),p<1||p>Bz(b,o,c)?r(M)._overflowWeeks=!0:null!=q?r(M)._overflowWeekday=!0:(A=Lz(b,p,O,o,c),M._a[YM]=A.year,M._dayOfYear=A.dayOfYear)}function Ib(M){if(M._f!==p.ISO_8601)if(M._f!==p.RFC_2822){M._a=[],r(M).empty=!0;var z,b,O,o,c,A,q,e=""+M._i,n=e.length,W=0;for(q=(O=Y(M._f,M._locale).match(w)||[]).length,z=0;z<q;z++)o=O[z],(b=(e.match(wM(o,M))||[])[0])&&((c=e.substr(0,e.indexOf(b))).length>0&&r(M).unusedInput.push(c),e=e.slice(e.indexOf(b)+b.length),W+=b.length),P[o]?(b?r(M).empty=!1:r(M).unusedTokens.push(o),FM(o,b,M)):M._strict&&!b&&r(M).unusedTokens.push(o);r(M).charsLeftOver=n-W,e.length>0&&r(M).unusedInput.push(e),M._a[GM]<=12&&!0===r(M).bigHour&&M._a[GM]>0&&(r(M).bigHour=void 0),r(M).parsedDateParts=M._a.slice(0),r(M).meridiem=M._meridiem,M._a[GM]=Fb(M._locale,M._a[GM],M._meridiem),null!==(A=r(M).era)&&(M._a[YM]=M._locale.erasConvertYear(A,M._a[YM])),Pb(M),fb(M)}else Eb(M);else Tb(M)}function Fb(M,z,b){var p;return null==b?z:null!=M.meridiemHour?M.meridiemHour(z,b):null!=M.isPM?((p=M.isPM(b))&&z<12&&(z+=12),p||12!==z||(z=0),z):z}function Hb(M){var z,b,p,O,o,c,A=!1,q=M._f.length;if(0===q)return r(M).invalidFormat=!0,void(M._d=new Date(NaN));for(O=0;O<q;O++)o=0,c=!1,z=l({},M),null!=M._useUTC&&(z._useUTC=M._useUTC),z._f=M._f[O],Ib(z),s(z)&&(c=!0),o+=r(z).charsLeftOver,o+=10*r(z).unusedTokens.length,r(z).score=o,A?o<p&&(p=o,b=z):(null==p||o<p||c)&&(p=o,b=z,c&&(A=!0));t(M,b||z)}function Yb(M){if(!M._d){var z=OM(M._i),b=void 0===z.day?z.date:z.day;M._a=a([z.year,z.month,b,z.hour,z.minute,z.second,z.millisecond],(function(M){return M&&parseInt(M,10)})),Pb(M)}}function Ub(M){var z=new L(fb(jb(M)));return z._nextDay&&(z.add(1,"d"),z._nextDay=void 0),z}function jb(M){var z=M._i,b=M._f;return M._locale=M._locale||ub(M._l),null===z||void 0===b&&""===z?u({nullInput:!0}):("string"==typeof z&&(M._i=z=M._locale.preparse(z)),N(z)?new L(fb(z)):(W(z)?M._d=z:o(b)?Hb(M):b?Ib(M):Gb(M),s(M)||(M._d=null),M))}function Gb(M){var z=M._i;e(z)?M._d=new Date(p.now()):W(z)?M._d=new Date(z.valueOf()):"string"==typeof z?wb(M):o(z)?(M._a=a(z.slice(0),(function(M){return parseInt(M,10)})),Pb(M)):c(z)?Yb(M):n(z)?M._d=new Date(z):p.createFromInputFallback(M)}function Vb(M,z,b,p,O){var A={};return!0!==z&&!1!==z||(p=z,z=void 0),!0!==b&&!1!==b||(p=b,b=void 0),(c(M)&&q(M)||o(M)&&0===M.length)&&(M=void 0),A._isAMomentObject=!0,A._useUTC=A._isUTC=O,A._l=b,A._i=M,A._f=z,A._strict=p,Ub(A)}function Kb(M,z,b,p){return Vb(M,z,b,p,!1)}p.createFromInputFallback=X("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(M){M._d=new Date(M._i+(M._useUTC?" UTC":""))})),p.ISO_8601=function(){},p.RFC_2822=function(){};var Qb=X("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:u()})),Jb=X("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:u()}));function Zb(M,z){var b,p;if(1===z.length&&o(z[0])&&(z=z[0]),!z.length)return Kb();for(b=z[0],p=1;p<z.length;++p)z[p].isValid()&&!z[p][M](b)||(b=z[p]);return b}function $b(){return Zb("isBefore",[].slice.call(arguments,0))}function Mp(){return Zb("isAfter",[].slice.call(arguments,0))}var zp=function(){return Date.now?Date.now():+new Date},bp=["year","quarter","month","week","day","hour","minute","second","millisecond"];function pp(M){var z,b,p=!1,O=bp.length;for(z in M)if(A(M,z)&&(-1===HM.call(bp,z)||null!=M[z]&&isNaN(M[z])))return!1;for(b=0;b<O;++b)if(M[bp[b]]){if(p)return!1;parseFloat(M[bp[b]])!==nM(M[bp[b]])&&(p=!0)}return!0}function Op(){return this._isValid}function op(){return gp(NaN)}function cp(M){var z=OM(M),b=z.year||0,p=z.quarter||0,O=z.month||0,o=z.week||z.isoWeek||0,c=z.day||0,A=z.hour||0,q=z.minute||0,e=z.second||0,n=z.millisecond||0;this._isValid=pp(z),this._milliseconds=+n+1e3*e+6e4*q+1e3*A*60*60,this._days=+c+7*o,this._months=+O+3*p+12*b,this._data={},this._locale=ub(),this._bubble()}function Ap(M){return M instanceof cp}function qp(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function ep(M,z,b){var p,O=Math.min(M.length,z.length),o=Math.abs(M.length-z.length),c=0;for(p=0;p<O;p++)(b&&M[p]!==z[p]||!b&&nM(M[p])!==nM(z[p]))&&c++;return c+o}function np(M,z){x(M,0,0,(function(){var M=this.utcOffset(),b="+";return M<0&&(M=-M,b="-"),b+E(~~(M/60),2)+z+E(~~M%60,2)}))}np("Z",":"),np("ZZ",""),EM("Z",SM),EM("ZZ",SM),xM(["Z","ZZ"],(function(M,z,b){b._useUTC=!0,b._tzm=ap(SM,M)}));var Wp=/([\+\-]|\d\d)/gi;function ap(M,z){var b,p,O=(z||"").match(M);return null===O?null:0===(p=60*(b=((O[O.length-1]||[])+"").match(Wp)||["-",0,0])[1]+nM(b[2]))?0:"+"===b[0]?p:-p}function tp(M,z){var b,O;return z._isUTC?(b=z.clone(),O=(N(M)||W(M)?M.valueOf():Kb(M).valueOf())-b.valueOf(),b._d.setTime(b._d.valueOf()+O),p.updateOffset(b,!1),b):Kb(M).local()}function dp(M){return-Math.round(M._d.getTimezoneOffset())}function ip(M,z,b){var O,o=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if("string"==typeof M){if(null===(M=ap(SM,M)))return this}else Math.abs(M)<16&&!b&&(M*=60);return!this._isUTC&&z&&(O=dp(this)),this._offset=M,this._isUTC=!0,null!=O&&this.add(O,"m"),o!==M&&(!z||this._changeInProgress?vp(this,gp(M-o,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,p.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?o:dp(this)}function rp(M,z){return null!=M?("string"!=typeof M&&(M=-M),this.utcOffset(M,z),this):-this.utcOffset()}function sp(M){return this.utcOffset(0,M)}function up(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(dp(this),"m")),this}function Rp(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var M=ap(yM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this}function fp(M){return!!this.isValid()&&(M=M?Kb(M).utcOffset():0,(this.utcOffset()-M)%60==0)}function lp(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Lp(){if(!e(this._isDSTShifted))return this._isDSTShifted;var M,z={};return l(z,this),(z=jb(z))._a?(M=z._isUTC?d(z._a):Kb(z._a),this._isDSTShifted=this.isValid()&&ep(z._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Np(){return!!this.isValid()&&!this._isUTC}function Bp(){return!!this.isValid()&&this._isUTC}function Xp(){return!!this.isValid()&&this._isUTC&&0===this._offset}p.updateOffset=function(){};var hp=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,mp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function gp(M,z){var b,p,O,o=M,c=null;return Ap(M)?o={ms:M._milliseconds,d:M._days,M:M._months}:n(M)||!isNaN(+M)?(o={},z?o[z]=+M:o.milliseconds=+M):(c=hp.exec(M))?(b="-"===c[1]?-1:1,o={y:0,d:nM(c[jM])*b,h:nM(c[GM])*b,m:nM(c[VM])*b,s:nM(c[KM])*b,ms:nM(qp(1e3*c[QM]))*b}):(c=mp.exec(M))?(b="-"===c[1]?-1:1,o={y:Tp(c[2],b),M:Tp(c[3],b),w:Tp(c[4],b),d:Tp(c[5],b),h:Tp(c[6],b),m:Tp(c[7],b),s:Tp(c[8],b)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(O=yp(Kb(o.from),Kb(o.to)),(o={}).ms=O.milliseconds,o.M=O.months),p=new cp(o),Ap(M)&&A(M,"_locale")&&(p._locale=M._locale),Ap(M)&&A(M,"_isValid")&&(p._isValid=M._isValid),p}function Tp(M,z){var b=M&&parseFloat(M.replace(",","."));return(isNaN(b)?0:b)*z}function _p(M,z){var b={};return b.months=z.month()-M.month()+12*(z.year()-M.year()),M.clone().add(b.months,"M").isAfter(z)&&--b.months,b.milliseconds=+z-+M.clone().add(b.months,"M"),b}function yp(M,z){var b;return M.isValid()&&z.isValid()?(z=tp(z,M),M.isBefore(z)?b=_p(M,z):((b=_p(z,M)).milliseconds=-b.milliseconds,b.months=-b.months),b):{milliseconds:0,months:0}}function Sp(M,z){return function(b,p){var O;return null===p||isNaN(+p)||(g(z,"moment()."+z+"(period, number) is deprecated. Please use moment()."+z+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),O=b,b=p,p=O),vp(this,gp(b,p),M),this}}function vp(M,z,b,O){var o=z._milliseconds,c=qp(z._days),A=qp(z._months);M.isValid()&&(O=null==O||O,A&&nz(M,aM(M,"Month")+A*b),c&&tM(M,"Date",aM(M,"Date")+c*b),o&&M._d.setTime(M._d.valueOf()+o*b),O&&p.updateOffset(M,c||A))}gp.fn=cp.prototype,gp.invalid=op;var kp=Sp(1,"add"),Ep=Sp(-1,"subtract");function wp(M){return"string"==typeof M||M instanceof String}function Cp(M){return N(M)||W(M)||wp(M)||n(M)||Pp(M)||Dp(M)||null==M}function Dp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],e=o.length;for(z=0;z<e;z+=1)b=o[z],O=O||A(M,b);return p&&O}function Pp(M){var z=o(M),b=!1;return z&&(b=0===M.filter((function(z){return!n(z)&&wp(M)})).length),z&&b}function xp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(z=0;z<o.length;z+=1)b=o[z],O=O||A(M,b);return p&&O}function Ip(M,z){var b=M.diff(z,"days",!0);return b<-6?"sameElse":b<-1?"lastWeek":b<0?"lastDay":b<1?"sameDay":b<2?"nextDay":b<7?"nextWeek":"sameElse"}function Fp(M,z){1===arguments.length&&(arguments[0]?Cp(arguments[0])?(M=arguments[0],z=void 0):xp(arguments[0])&&(z=arguments[0],M=void 0):(M=void 0,z=void 0));var b=M||Kb(),O=tp(b,this).startOf("day"),o=p.calendarFormat(this,O)||"sameElse",c=z&&(T(z[o])?z[o].call(this,b):z[o]);return this.format(c||this.localeData().calendar(o,this,Kb(b)))}function Hp(){return new L(this)}function Yp(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()>b.valueOf():b.valueOf()<this.clone().startOf(z).valueOf())}function Up(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()<b.valueOf():this.clone().endOf(z).valueOf()<b.valueOf())}function jp(M,z,b,p){var O=N(M)?M:Kb(M),o=N(z)?z:Kb(z);return!!(this.isValid()&&O.isValid()&&o.isValid())&&("("===(p=p||"()")[0]?this.isAfter(O,b):!this.isBefore(O,b))&&(")"===p[1]?this.isBefore(o,b):!this.isAfter(o,b))}function Gp(M,z){var b,p=N(M)?M:Kb(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()===p.valueOf():(b=p.valueOf(),this.clone().startOf(z).valueOf()<=b&&b<=this.clone().endOf(z).valueOf()))}function Vp(M,z){return this.isSame(M,z)||this.isAfter(M,z)}function Kp(M,z){return this.isSame(M,z)||this.isBefore(M,z)}function Qp(M,z,b){var p,O,o;if(!this.isValid())return NaN;if(!(p=tp(M,this)).isValid())return NaN;switch(O=6e4*(p.utcOffset()-this.utcOffset()),z=pM(z)){case"year":o=Jp(this,p)/12;break;case"month":o=Jp(this,p);break;case"quarter":o=Jp(this,p)/3;break;case"second":o=(this-p)/1e3;break;case"minute":o=(this-p)/6e4;break;case"hour":o=(this-p)/36e5;break;case"day":o=(this-p-O)/864e5;break;case"week":o=(this-p-O)/6048e5;break;default:o=this-p}return b?o:eM(o)}function Jp(M,z){if(M.date()<z.date())return-Jp(z,M);var b=12*(z.year()-M.year())+(z.month()-M.month()),p=M.clone().add(b,"months");return-(b+(z-p<0?(z-p)/(p-M.clone().add(b-1,"months")):(z-p)/(M.clone().add(b+1,"months")-p)))||0}function Zp(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function $p(M){if(!this.isValid())return null;var z=!0!==M,b=z?this.clone().utc():this;return b.year()<0||b.year()>9999?H(b,z?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?z?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(b,"Z")):H(b,z?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function MO(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var M,z,b,p,O="moment",o="";return this.isLocal()||(O=0===this.utcOffset()?"moment.utc":"moment.parseZone",o="Z"),M="["+O+'("]',z=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",b="-MM-DD[T]HH:mm:ss.SSS",p=o+'[")]',this.format(M+z+b+p)}function zO(M){M||(M=this.isUtc()?p.defaultFormatUtc:p.defaultFormat);var z=H(this,M);return this.localeData().postformat(z)}function bO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({to:this,from:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function pO(M){return this.from(Kb(),M)}function OO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({from:this,to:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function oO(M){return this.to(Kb(),M)}function cO(M){var z;return void 0===M?this._locale._abbr:(null!=(z=ub(M))&&(this._locale=z),this)}p.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",p.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var AO=X("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(M){return void 0===M?this.localeData():this.locale(M)}));function qO(){return this._locale}var eO=1e3,nO=60*eO,WO=60*nO,aO=3506328*WO;function tO(M,z){return(M%z+z)%z}function dO(M,z,b){return M<100&&M>=0?new Date(M+400,z,b)-aO:new Date(M,z,b).valueOf()}function iO(M,z,b){return M<100&&M>=0?Date.UTC(M+400,z,b)-aO:Date.UTC(M,z,b)}function rO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year(),0,1);break;case"quarter":z=b(this.year(),this.month()-this.month()%3,1);break;case"month":z=b(this.year(),this.month(),1);break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":z=b(this.year(),this.month(),this.date());break;case"hour":z=this._d.valueOf(),z-=tO(z+(this._isUTC?0:this.utcOffset()*nO),WO);break;case"minute":z=this._d.valueOf(),z-=tO(z,nO);break;case"second":z=this._d.valueOf(),z-=tO(z,eO)}return this._d.setTime(z),p.updateOffset(this,!0),this}function sO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year()+1,0,1)-1;break;case"quarter":z=b(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":z=b(this.year(),this.month()+1,1)-1;break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":z=b(this.year(),this.month(),this.date()+1)-1;break;case"hour":z=this._d.valueOf(),z+=WO-tO(z+(this._isUTC?0:this.utcOffset()*nO),WO)-1;break;case"minute":z=this._d.valueOf(),z+=nO-tO(z,nO)-1;break;case"second":z=this._d.valueOf(),z+=eO-tO(z,eO)-1}return this._d.setTime(z),p.updateOffset(this,!0),this}function uO(){return this._d.valueOf()-6e4*(this._offset||0)}function RO(){return Math.floor(this.valueOf()/1e3)}function fO(){return new Date(this.valueOf())}function lO(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]}function LO(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}}function NO(){return this.isValid()?this.toISOString():null}function BO(){return s(this)}function XO(){return t({},r(this))}function hO(){return r(this).overflow}function mO(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function gO(M,z){var b,O,o,c=this._eras||ub("en")._eras;for(b=0,O=c.length;b<O;++b)switch("string"==typeof c[b].since&&(o=p(c[b].since).startOf("day"),c[b].since=o.valueOf()),typeof c[b].until){case"undefined":c[b].until=1/0;break;case"string":o=p(c[b].until).startOf("day").valueOf(),c[b].until=o.valueOf()}return c}function TO(M,z,b){var p,O,o,c,A,q=this.eras();for(M=M.toUpperCase(),p=0,O=q.length;p<O;++p)if(o=q[p].name.toUpperCase(),c=q[p].abbr.toUpperCase(),A=q[p].narrow.toUpperCase(),b)switch(z){case"N":case"NN":case"NNN":if(c===M)return q[p];break;case"NNNN":if(o===M)return q[p];break;case"NNNNN":if(A===M)return q[p]}else if([o,c,A].indexOf(M)>=0)return q[p]}function _O(M,z){var b=M.since<=M.until?1:-1;return void 0===z?p(M.since).year():p(M.since).year()+(z-M.offset)*b}function yO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].name;if(p[M].until<=b&&b<=p[M].since)return p[M].name}return""}function SO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].narrow;if(p[M].until<=b&&b<=p[M].since)return p[M].narrow}return""}function vO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].abbr;if(p[M].until<=b&&b<=p[M].since)return p[M].abbr}return""}function kO(){var M,z,b,O,o=this.localeData().eras();for(M=0,z=o.length;M<z;++M)if(b=o[M].since<=o[M].until?1:-1,O=this.clone().startOf("day").valueOf(),o[M].since<=O&&O<=o[M].until||o[M].until<=O&&O<=o[M].since)return(this.year()-p(o[M].since).year())*b+o[M].offset;return this.year()}function EO(M){return A(this,"_erasNameRegex")||FO.call(this),M?this._erasNameRegex:this._erasRegex}function wO(M){return A(this,"_erasAbbrRegex")||FO.call(this),M?this._erasAbbrRegex:this._erasRegex}function CO(M){return A(this,"_erasNarrowRegex")||FO.call(this),M?this._erasNarrowRegex:this._erasRegex}function DO(M,z){return z.erasAbbrRegex(M)}function PO(M,z){return z.erasNameRegex(M)}function xO(M,z){return z.erasNarrowRegex(M)}function IO(M,z){return z._eraYearOrdinalRegex||TM}function FO(){var M,z,b=[],p=[],O=[],o=[],c=this.eras();for(M=0,z=c.length;M<z;++M)p.push(DM(c[M].name)),b.push(DM(c[M].abbr)),O.push(DM(c[M].narrow)),o.push(DM(c[M].name)),o.push(DM(c[M].abbr)),o.push(DM(c[M].narrow));this._erasRegex=new RegExp("^("+o.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+p.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+b.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+O.join("|")+")","i")}function HO(M,z){x(0,[M,M.length],0,z)}function YO(M){return QO.call(this,M,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function UO(M){return QO.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)}function jO(){return Bz(this.year(),1,4)}function GO(){return Bz(this.isoWeekYear(),1,4)}function VO(){var M=this.localeData()._week;return Bz(this.year(),M.dow,M.doy)}function KO(){var M=this.localeData()._week;return Bz(this.weekYear(),M.dow,M.doy)}function QO(M,z,b,p,O){var o;return null==M?Nz(this,p,O).year:(z>(o=Bz(M,p,O))&&(z=o),JO.call(this,M,z,b,p,O))}function JO(M,z,b,p,O){var o=Lz(M,z,b,p,O),c=fz(o.year,0,o.dayOfYear);return this.year(c.getUTCFullYear()),this.month(c.getUTCMonth()),this.date(c.getUTCDate()),this}function ZO(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)}x("N",0,0,"eraAbbr"),x("NN",0,0,"eraAbbr"),x("NNN",0,0,"eraAbbr"),x("NNNN",0,0,"eraName"),x("NNNNN",0,0,"eraNarrow"),x("y",["y",1],"yo","eraYear"),x("y",["yy",2],0,"eraYear"),x("y",["yyy",3],0,"eraYear"),x("y",["yyyy",4],0,"eraYear"),EM("N",DO),EM("NN",DO),EM("NNN",DO),EM("NNNN",PO),EM("NNNNN",xO),xM(["N","NN","NNN","NNNN","NNNNN"],(function(M,z,b,p){var O=b._locale.erasParse(M,p,b._strict);O?r(b).era=O:r(b).invalidEra=M})),EM("y",TM),EM("yy",TM),EM("yyy",TM),EM("yyyy",TM),EM("yo",IO),xM(["y","yy","yyy","yyyy"],YM),xM(["yo"],(function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[YM]=b._locale.eraYearOrdinalParse(M,O):z[YM]=parseInt(M,10)})),x(0,["gg",2],0,(function(){return this.weekYear()%100})),x(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),HO("gggg","weekYear"),HO("ggggg","weekYear"),HO("GGGG","isoWeekYear"),HO("GGGGG","isoWeekYear"),bM("weekYear","gg"),bM("isoWeekYear","GG"),cM("weekYear",1),cM("isoWeekYear",1),EM("G",_M),EM("g",_M),EM("GG",NM,RM),EM("gg",NM,RM),EM("GGGG",mM,lM),EM("gggg",mM,lM),EM("GGGGG",gM,LM),EM("ggggg",gM,LM),IM(["gggg","ggggg","GGGG","GGGGG"],(function(M,z,b,p){z[p.substr(0,2)]=nM(M)})),IM(["gg","GG"],(function(M,z,b,O){z[O]=p.parseTwoDigitYear(M)})),x("Q",0,"Qo","quarter"),bM("quarter","Q"),cM("quarter",7),EM("Q",uM),xM("Q",(function(M,z){z[UM]=3*(nM(M)-1)})),x("D",["DD",2],"Do","date"),bM("date","D"),cM("date",9),EM("D",NM),EM("DD",NM,RM),EM("Do",(function(M,z){return M?z._dayOfMonthOrdinalParse||z._ordinalParse:z._dayOfMonthOrdinalParseLenient})),xM(["D","DD"],jM),xM("Do",(function(M,z){z[jM]=nM(M.match(NM)[0])}));var $O=WM("Date",!0);function Mo(M){var z=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==M?z:this.add(M-z,"d")}x("DDD",["DDDD",3],"DDDo","dayOfYear"),bM("dayOfYear","DDD"),cM("dayOfYear",4),EM("DDD",hM),EM("DDDD",fM),xM(["DDD","DDDD"],(function(M,z,b){b._dayOfYear=nM(M)})),x("m",["mm",2],0,"minute"),bM("minute","m"),cM("minute",14),EM("m",NM),EM("mm",NM,RM),xM(["m","mm"],VM);var zo=WM("Minutes",!1);x("s",["ss",2],0,"second"),bM("second","s"),cM("second",15),EM("s",NM),EM("ss",NM,RM),xM(["s","ss"],KM);var bo,po,Oo=WM("Seconds",!1);for(x("S",0,0,(function(){return~~(this.millisecond()/100)})),x(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),x(0,["SSS",3],0,"millisecond"),x(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),x(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),x(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),x(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),x(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),x(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),bM("millisecond","ms"),cM("millisecond",16),EM("S",hM,uM),EM("SS",hM,RM),EM("SSS",hM,fM),bo="SSSS";bo.length<=9;bo+="S")EM(bo,TM);function oo(M,z){z[QM]=nM(1e3*("0."+M))}for(bo="S";bo.length<=9;bo+="S")xM(bo,oo);function co(){return this._isUTC?"UTC":""}function Ao(){return this._isUTC?"Coordinated Universal Time":""}po=WM("Milliseconds",!1),x("z",0,0,"zoneAbbr"),x("zz",0,0,"zoneName");var qo=L.prototype;function eo(M){return Kb(1e3*M)}function no(){return Kb.apply(null,arguments).parseZone()}function Wo(M){return M}qo.add=kp,qo.calendar=Fp,qo.clone=Hp,qo.diff=Qp,qo.endOf=sO,qo.format=zO,qo.from=bO,qo.fromNow=pO,qo.to=OO,qo.toNow=oO,qo.get=dM,qo.invalidAt=hO,qo.isAfter=Yp,qo.isBefore=Up,qo.isBetween=jp,qo.isSame=Gp,qo.isSameOrAfter=Vp,qo.isSameOrBefore=Kp,qo.isValid=BO,qo.lang=AO,qo.locale=cO,qo.localeData=qO,qo.max=Jb,qo.min=Qb,qo.parsingFlags=XO,qo.set=rM,qo.startOf=rO,qo.subtract=Ep,qo.toArray=lO,qo.toObject=LO,qo.toDate=fO,qo.toISOString=$p,qo.inspect=MO,"undefined"!=typeof Symbol&&null!=Symbol.for&&(qo[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),qo.toJSON=NO,qo.toString=Zp,qo.unix=RO,qo.valueOf=uO,qo.creationData=mO,qo.eraName=yO,qo.eraNarrow=SO,qo.eraAbbr=vO,qo.eraYear=kO,qo.year=sz,qo.isLeapYear=uz,qo.weekYear=YO,qo.isoWeekYear=UO,qo.quarter=qo.quarters=ZO,qo.month=Wz,qo.daysInMonth=az,qo.week=qo.weeks=Tz,qo.isoWeek=qo.isoWeeks=_z,qo.weeksInYear=VO,qo.weeksInWeekYear=KO,qo.isoWeeksInYear=jO,qo.isoWeeksInISOWeekYear=GO,qo.date=$O,qo.day=qo.days=Uz,qo.weekday=jz,qo.isoWeekday=Gz,qo.dayOfYear=Mo,qo.hour=qo.hours=Ob,qo.minute=qo.minutes=zo,qo.second=qo.seconds=Oo,qo.millisecond=qo.milliseconds=po,qo.utcOffset=ip,qo.utc=sp,qo.local=up,qo.parseZone=Rp,qo.hasAlignedHourOffset=fp,qo.isDST=lp,qo.isLocal=Np,qo.isUtcOffset=Bp,qo.isUtc=Xp,qo.isUTC=Xp,qo.zoneAbbr=co,qo.zoneName=Ao,qo.dates=X("dates accessor is deprecated. Use date instead.",$O),qo.months=X("months accessor is deprecated. Use month instead",Wz),qo.years=X("years accessor is deprecated. Use year instead",sz),qo.zone=X("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",rp),qo.isDSTShifted=X("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Lp);var ao=S.prototype;function to(M,z,b,p){var O=ub(),o=d().set(p,z);return O[b](o,M)}function io(M,z,b){if(n(M)&&(z=M,M=void 0),M=M||"",null!=z)return to(M,z,b,"month");var p,O=[];for(p=0;p<12;p++)O[p]=to(M,p,b,"month");return O}function ro(M,z,b,p){"boolean"==typeof M?(n(z)&&(b=z,z=void 0),z=z||""):(b=z=M,M=!1,n(z)&&(b=z,z=void 0),z=z||"");var O,o=ub(),c=M?o._week.dow:0,A=[];if(null!=b)return to(z,(b+c)%7,p,"day");for(O=0;O<7;O++)A[O]=to(z,(O+c)%7,p,"day");return A}function so(M,z){return io(M,z,"months")}function uo(M,z){return io(M,z,"monthsShort")}function Ro(M,z,b){return ro(M,z,b,"weekdays")}function fo(M,z,b){return ro(M,z,b,"weekdaysShort")}function lo(M,z,b){return ro(M,z,b,"weekdaysMin")}ao.calendar=k,ao.longDateFormat=j,ao.invalidDate=V,ao.ordinal=J,ao.preparse=Wo,ao.postformat=Wo,ao.relativeTime=$,ao.pastFuture=MM,ao.set=_,ao.eras=gO,ao.erasParse=TO,ao.erasConvertYear=_O,ao.erasAbbrRegex=wO,ao.erasNameRegex=EO,ao.erasNarrowRegex=CO,ao.months=cz,ao.monthsShort=Az,ao.monthsParse=ez,ao.monthsRegex=dz,ao.monthsShortRegex=tz,ao.week=Xz,ao.firstDayOfYear=gz,ao.firstDayOfWeek=mz,ao.weekdays=xz,ao.weekdaysMin=Fz,ao.weekdaysShort=Iz,ao.weekdaysParse=Yz,ao.weekdaysRegex=Vz,ao.weekdaysShortRegex=Kz,ao.weekdaysMinRegex=Qz,ao.isPM=bb,ao.meridiem=ob,ib("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var z=M%10;return M+(1===nM(M%100/10)?"th":1===z?"st":2===z?"nd":3===z?"rd":"th")}}),p.lang=X("moment.lang is deprecated. Use moment.locale instead.",ib),p.langData=X("moment.langData is deprecated. Use moment.localeData instead.",ub);var Lo=Math.abs;function No(){var M=this._data;return this._milliseconds=Lo(this._milliseconds),this._days=Lo(this._days),this._months=Lo(this._months),M.milliseconds=Lo(M.milliseconds),M.seconds=Lo(M.seconds),M.minutes=Lo(M.minutes),M.hours=Lo(M.hours),M.months=Lo(M.months),M.years=Lo(M.years),this}function Bo(M,z,b,p){var O=gp(z,b);return M._milliseconds+=p*O._milliseconds,M._days+=p*O._days,M._months+=p*O._months,M._bubble()}function Xo(M,z){return Bo(this,M,z,1)}function ho(M,z){return Bo(this,M,z,-1)}function mo(M){return M<0?Math.floor(M):Math.ceil(M)}function go(){var M,z,b,p,O,o=this._milliseconds,c=this._days,A=this._months,q=this._data;return o>=0&&c>=0&&A>=0||o<=0&&c<=0&&A<=0||(o+=864e5*mo(_o(A)+c),c=0,A=0),q.milliseconds=o%1e3,M=eM(o/1e3),q.seconds=M%60,z=eM(M/60),q.minutes=z%60,b=eM(z/60),q.hours=b%24,c+=eM(b/24),A+=O=eM(To(c)),c-=mo(_o(O)),p=eM(A/12),A%=12,q.days=c,q.months=A,q.years=p,this}function To(M){return 4800*M/146097}function _o(M){return 146097*M/4800}function yo(M){if(!this.isValid())return NaN;var z,b,p=this._milliseconds;if("month"===(M=pM(M))||"quarter"===M||"year"===M)switch(z=this._days+p/864e5,b=this._months+To(z),M){case"month":return b;case"quarter":return b/3;case"year":return b/12}else switch(z=this._days+Math.round(_o(this._months)),M){case"week":return z/7+p/6048e5;case"day":return z+p/864e5;case"hour":return 24*z+p/36e5;case"minute":return 1440*z+p/6e4;case"second":return 86400*z+p/1e3;case"millisecond":return Math.floor(864e5*z)+p;default:throw new Error("Unknown unit "+M)}}function So(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*nM(this._months/12):NaN}function vo(M){return function(){return this.as(M)}}var ko=vo("ms"),Eo=vo("s"),wo=vo("m"),Co=vo("h"),Do=vo("d"),Po=vo("w"),xo=vo("M"),Io=vo("Q"),Fo=vo("y");function Ho(){return gp(this)}function Yo(M){return M=pM(M),this.isValid()?this[M+"s"]():NaN}function Uo(M){return function(){return this.isValid()?this._data[M]:NaN}}var jo=Uo("milliseconds"),Go=Uo("seconds"),Vo=Uo("minutes"),Ko=Uo("hours"),Qo=Uo("days"),Jo=Uo("months"),Zo=Uo("years");function $o(){return eM(this.days()/7)}var Mc=Math.round,zc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function bc(M,z,b,p,O){return O.relativeTime(z||1,!!b,M,p)}function pc(M,z,b,p){var O=gp(M).abs(),o=Mc(O.as("s")),c=Mc(O.as("m")),A=Mc(O.as("h")),q=Mc(O.as("d")),e=Mc(O.as("M")),n=Mc(O.as("w")),W=Mc(O.as("y")),a=o<=b.ss&&["s",o]||o<b.s&&["ss",o]||c<=1&&["m"]||c<b.m&&["mm",c]||A<=1&&["h"]||A<b.h&&["hh",A]||q<=1&&["d"]||q<b.d&&["dd",q];return null!=b.w&&(a=a||n<=1&&["w"]||n<b.w&&["ww",n]),(a=a||e<=1&&["M"]||e<b.M&&["MM",e]||W<=1&&["y"]||["yy",W])[2]=z,a[3]=+M>0,a[4]=p,bc.apply(null,a)}function Oc(M){return void 0===M?Mc:"function"==typeof M&&(Mc=M,!0)}function oc(M,z){return void 0!==zc[M]&&(void 0===z?zc[M]:(zc[M]=z,"s"===M&&(zc.ss=z-1),!0))}function cc(M,z){if(!this.isValid())return this.localeData().invalidDate();var b,p,O=!1,o=zc;return"object"==typeof M&&(z=M,M=!1),"boolean"==typeof M&&(O=M),"object"==typeof z&&(o=Object.assign({},zc,z),null!=z.s&&null==z.ss&&(o.ss=z.s-1)),p=pc(this,!O,o,b=this.localeData()),O&&(p=b.pastFuture(+this,p)),b.postformat(p)}var Ac=Math.abs;function qc(M){return(M>0)-(M<0)||+M}function ec(){if(!this.isValid())return this.localeData().invalidDate();var M,z,b,p,O,o,c,A,q=Ac(this._milliseconds)/1e3,e=Ac(this._days),n=Ac(this._months),W=this.asSeconds();return W?(M=eM(q/60),z=eM(M/60),q%=60,M%=60,b=eM(n/12),n%=12,p=q?q.toFixed(3).replace(/\.?0+$/,""):"",O=W<0?"-":"",o=qc(this._months)!==qc(W)?"-":"",c=qc(this._days)!==qc(W)?"-":"",A=qc(this._milliseconds)!==qc(W)?"-":"",O+"P"+(b?o+b+"Y":"")+(n?o+n+"M":"")+(e?c+e+"D":"")+(z||M||q?"T":"")+(z?A+z+"H":"")+(M?A+M+"M":"")+(q?A+p+"S":"")):"P0D"}var nc=cp.prototype;return nc.isValid=Op,nc.abs=No,nc.add=Xo,nc.subtract=ho,nc.as=yo,nc.asMilliseconds=ko,nc.asSeconds=Eo,nc.asMinutes=wo,nc.asHours=Co,nc.asDays=Do,nc.asWeeks=Po,nc.asMonths=xo,nc.asQuarters=Io,nc.asYears=Fo,nc.valueOf=So,nc._bubble=go,nc.clone=Ho,nc.get=Yo,nc.milliseconds=jo,nc.seconds=Go,nc.minutes=Vo,nc.hours=Ko,nc.days=Qo,nc.weeks=$o,nc.months=Jo,nc.years=Zo,nc.humanize=cc,nc.toISOString=ec,nc.toString=ec,nc.toJSON=ec,nc.locale=cO,nc.localeData=qO,nc.toIsoString=X("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ec),nc.lang=AO,x("X",0,0,"unix"),x("x",0,0,"valueOf"),EM("x",_M),EM("X",vM),xM("X",(function(M,z,b){b._d=new Date(1e3*parseFloat(M))})),xM("x",(function(M,z,b){b._d=new Date(nM(M))})),
1
+ !function(M,z){"object"==typeof exports&&"undefined"!=typeof module?z(exports,require("prop-types"),require("react"),require("i18next"),require("classnames"),require("react-autosuggest"),require("lodash/debounce"),require("lodash/flatten"),require("lodash/take"),require("lodash/isString"),require("lodash/orderBy"),require("lodash/uniqWith"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),require("lodash/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","prop-types","react","i18next","classnames","react-autosuggest","lodash/debounce","lodash/flatten","lodash/take","lodash/isString","lodash/orderBy","lodash/uniqWith","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","lodash/get","@digitransit-component/digitransit-component-suggestion-item","@digitransit-component/digitransit-component-icon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],z):z((M="undefined"!=typeof globalThis?globalThis:M||self).DTAutosuggest={},M.PropTypes,M.React,M.i18next,M.cx,M.Autosuggest,M.debounce,M.flatten,M.take,M.isString,M.orderBy,M.uniqWith,M.isEqual,M.memoize,M.escapeRegExp,M.cloneDeep,M.get,M.SuggestionItem,M.Icon,M.isEmpty,M.ReactModal,M.DialogModal)}(this,(function(M,z,b,p,O,o,c,A,q,e,n,W,a,t,d,i,r,s,u,R,f,l){"use strict";function L(M){return M&&"object"==typeof M&&"default"in M?M:{default:M}}var N=L(z),B=L(b),X=L(p),h=L(O),m=L(o),g=L(c),T=L(A),_=L(q),y=L(e),S=L(n),v=L(W),k=L(a),E=L(t),w=L(d),C=L(i),D=L(r),P=L(s),x=L(u),I=L(R),F=L(f),H=L(l);function Y(){return Y=Object.assign?Object.assign.bind():function(M){for(var z=1;z<arguments.length;z++){var b=arguments[z];for(var p in b)Object.prototype.hasOwnProperty.call(b,p)&&(M[p]=b[p])}return M},Y.apply(this,arguments)}function U(M,z){return M&&z&&M===z}function j(M,z){const b=M.properties,p=z.properties;if("FutureRoute"===M.type&&"FutureRoute"===z.type){const M=b.origin,z=b.destination,O=p.origin,o=p.destination;return`${M.name}//${M.locality}//${z.name}//${z.locality}`===`${O.name}//${O.locality}//${o.name}//${o.locality}`}if("FutureRoute"===M.type||"FutureRoute"===z.type)return!1;if(("bikeRentalStation"===b.layer||"favouriteBikeRentalStation"===b.layer)&&("bikeRentalStation"===p.layer||"favouriteBikeRentalStation"===p.layer)||"bikestation"===b.layer&&"bikestation"===p.layer)return b.labelId===p.labelId;if(b.gtfsId&&p.gtfsId)return b.gtfsId===p.gtfsId;if(b.gtfsId&&p.gid&&p.gid.includes(b.gtfsId))return!0;if(p.gtfsId&&b.gid&&b.gid.includes(p.gtfsId))return!0;if(("stop"===b.layer||"station"===b.layer)&&("stop"===p.layer||"station"===p.layer)&&b.gid&&p.gid)return b.gid===p.gid;const O=M&&M.geometry?M.geometry.coordinates:void 0,o=z&&z.geometry?z.geometry.coordinates:void 0;return!!(O&&o&&Math.abs(O[0]-o[0])<1e-6&&Math.abs(O[1]-o[1])<1e-6&&(U(b.name,p.name)||U(b.label,p.label)||U(b.address,p.address)||U(b.address,p.label)||U(b.label,p.address)))}const G=M=>y.default(M)?M.toLowerCase():"",V={Address:"address",Back:"back",CurrentPosition:"currentPosition",FavouriteStop:"favouriteStop",FavouriteStation:"favouriteStation",FavouritePlace:"favouritePlace",FavouriteRoute:"favouriteRoute",FutureRoute:"futureRoute",Station:"station",SelectFromMap:"selectFromMap",SelectFromOwnLocations:"ownLocations",Stop:"stop",Street:"street",Venue:"venue",BikeRentalStation:"bikestation",CarPark:"carpark",BikePark:"bikepark"},K=({layer:M,type:z})=>"stop"===M||"favouriteStop"===M||"stop"===z||"favouriteStop"===z,Q=(M,z)=>{switch(M){case V.CurrentPosition:return 1;case V.Back:return.9;case V.SelectFromMap:return.8;case V.SelectFromOwnLocations:return.79;case V.FavouriteStation:case V.FavouritePlace:case V.FavouriteStop:case V.FavouriteRoute:case V.FavouriteBikeRentalStation:return.45;case V.FutureRoute:return.44;case V.Station:return y.default(z)&&0===z.indexOf("gtfs")?.43:.42;default:return.41;case V.CarPark:case V.BikePark:case V.BikeRentalStation:return.38;case V.Stop:return.36}},J=(M,z,b="")=>{if(!Array.isArray(z))return z;const p=z=>y.default(z)&&M&&M.test(z),O=G(b),o=p(O),c=S.default(z,[M=>o&&p(G(M.properties.shortName))&&0===G(M.properties.shortName).indexOf(O)?1:0,M=>{const{confidence:z,layer:b,source:p}=M.properties;if(0===O.length)return Q(b,p);if(!z)return Q(b,p)+((M,z)=>y.default(M)&&0!==M.length?["name","label","address","shortName"].map((M=>z[M])).filter((M=>y.default(M)&&M.length>0)).map((z=>{const b=G(z);return 0===b.indexOf(M)?.5+M.length/b.length:.5*M.length/(M.length+1)})).reduce(((M,z)=>z>M?z:M),0):0)(O,M.properties);switch(b){case V.Station:return z+(0===p.indexOf("gtfs")?.02:.01);case V.Stop:case V.CarPark:case V.BikePark:return z-.05;case V.BikeRentalStation:return z-.04;default:return z}}],["desc","desc"]);return v.default(c,j)},Z=(M,z)=>null!=z&&-1!==M.lastIndexOf(z)?M.substring(0,M.lastIndexOf(z)-1):M,$=M=>M.localadmin||M.locality||M.address&&M.address.lastIndexOf(",")<M.address.length-2&&M.address.substring(M.address.lastIndexOf(",")+2)||"",MM=({id:M,code:z})=>z||(void 0!==M&&void 0!==M.indexOf&&-1!==M.indexOf("#")?M.substring(M.indexOf("#")+1):void 0),zM=E.default(((M,z=!1)=>{switch(M.layer){case"currentPosition":return[M.labelId,M.address];case"selectFromMap":case"ownLocations":case"back":return[M.labelId];case"favouritePlace":return b=M.name,p=M.address,[b||p&&p.split(",")[0],"string"==typeof p?p.replace(new RegExp(`${w.default(b)}([ ,]|$)+`),""):""];case"favouriteBikeRentalStation":case"bikeRentalStation":return[M.name];case"favouriteRoute":case"route-BUS":case"route-TRAM":case"route-RAIL":case"route-SUBWAY":case"route-FERRY":case"route-FUNICULAR":case"route-AIRPLANE":return!z&&M.shortName?[M.gtfsId,M.mode.toLowerCase(),M.longName]:[M.shortName,M.longName,M.agency?M.agency.name:void 0];case"venue":case"address":case"street":return[M.name,M.label.replace(new RegExp(`${w.default(M.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return z?[M.name||M.label||M.address&&M.address.split(",")[0],$(M)]:[M.name,M.id,MM(M),$(M)];default:return[M.name||M.label||M.address&&M.address.split(",")[0],$(M)]}var b,p}),((M,z)=>{const b=C.default(M);return b.plain=z,b}));function bM(M){return v.default(M,((M,z)=>{const b=k.default(zM(M.properties),zM(z.properties))&&M.properties.layer===z.properties.layer;return(!b||"FutureRoute"!==M.type&&"FutureRoute"!==z.type)&&b}))}function pM(M,z,b){if("string"==typeof z&&z.length>0){const p=z.toLowerCase().trim(),O=p.includes(" ")||p.includes(",");return M.filter((M=>{let z=[];b.forEach((b=>{let p=D.default(M,b);O||"properties.label"!==b&&"address"!==b||!p||(p=p.split(","),p.length>2?p.splice(p.length-2,2):p.length>1&&p.splice(p.length-1,1),p=p.join(",")),p&&(z=O?z.concat(p.toLowerCase()):z.concat(p.toLowerCase().replace(/,/g," ").split(" ")))}));for(let M=0;M<z.length;M++)if(0===z[M].indexOf(p))return!0;return!1}))}return M}function OM(M,z){return M?Object.keys(M).map((b=>{const p=z||b,O=M[b];return"object"==typeof O?OM(O,p):`${encodeURIComponent(p)}=${encodeURIComponent(O)}`})).join("&"):""}const oM=require("axios").default;function cM(M,z){return oM.get(encodeURI(M)+(z?(-1===M.search(/\?/)?"?":"&")+OM(z):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((M=>M.data))}const AM="https://api.digitransit.fi/geocoding/v1/search";function qM(M,z,b,p,O,o,c,A){const q=M?M.trim():null;if(null==q||q.length<1||c&&!c.test(q))return Promise.resolve([]);const e=o||AM;let n=Y({text:q},z,p,{lang:b});if(O&&(n=Y({},n,{sources:O})),A){n=Y({},n,{layers:A.toString()})}return cM(e,n).then((M=>M.features))}function eM(M,z){if(!M||M.length<1)return Promise.resolve([]);let b="";const p=M.map((M=>{const z="stop"===M.type?"stop":"station";let p=`gtfs${M.gtfsId.split(":")[0].toLowerCase()}:${z}:GTFS:${M.gtfsId}`;return M.code&&(p+=`#${M.code}`),b+=`${p},`,Y({},M,{gid:p})})).reduce((function(M,z){return M[z.gid]=z,M}),{});return cM(z,{ids:b.slice(0,-1)}).then((M=>M.features.map((M=>({type:"FavouriteStop",properties:{addendum:M.properties.addendum,gid:p[M.properties.gid].gid,code:p[M.properties.gid].code,gtfsId:p[M.properties.gid].gtfsId,lastUpdated:p[M.properties.gid].lastUpdated,favouriteId:p[M.properties.gid].favouriteId,address:M.properties.label,layer:K(M.properties)?"favouriteStop":"favouriteStation"},geometry:M.geometry})))))}function nM(M,z,b){let p=pM(M,z,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return b&&(p=p.filter((M=>!b.includes(M.properties.layer)))),Promise.resolve(_.default(p,10).map((M=>{const z=Y({},M,{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete z.properties.confidence,z})))}const WM=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE"],aM=["favouritePlace","venue","address","street"],tM=["carpark","bikepark"];const dM=g.default((function(M,z,b,p,O,o,{input:c},A,q,e){const{getPositions:n,getFavouriteLocations:W,getOldSearches:a,getFavouriteStops:t,parkingAreaSources:d,getLanguage:i,getStopAndStationsQuery:r,getFavouriteBikeRentalStationsQuery:s,getFavouriteBikeRentalStations:u,getFavouriteRoutesQuery:R,getFavouriteRoutes:f,getRoutesQuery:l,context:L,isPeliasLocationAware:N,minimalRegexp:B,lineRegexp:X,URL_PELIAS:h,URL_PELIAS_PLACE:m,feedIDs:g,geocodingSearchParams:y,geocodingSources:S,getFutureRoutes:v,cityBikeNetworks:k}=p,E=!M||0===M.length,w=!z||0===z.length,C=n(L),D=[],P={type:"all",term:c,results:[]},x=i(L),I=N&&null!=e&&e.lat&&null!=e&&e.lon?{"focus.point.lat":e.lat.toFixed(3),"focus.point.lon":e.lon.toFixed(3)}:{},F=b?b.split("-")[1]:void 0;if(M.includes("CurrentPosition")&&"geolocation-not-supported"!==C.status&&D.push(function(M,z){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"CurrentLocation",address:z.address,lat:z.lat,lon:z.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:z.address,lat:z.lat,lon:z.lon},geometry:{type:"Point",coordinates:[z.lon,z.lat]}}]):Promise.resolve([])}(c,C)),(E||M.includes("MapPosition"))&&D.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromMap",address:"SelectFromMap",lat:null,lon:null,properties:{labelId:"select-from-map",layer:"selectFromMap",address:"SelectFromMap",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(c)),M.includes("FutureRoutes")){const M=v(L);D.push(_.default(M,3))}if(M.includes("SelectFromOwnLocations")&&function(M){const z=M.getFavouriteLocations(M.context);if((null==z?void 0:z.length)>0)return!0;const b=M.getFavouriteStops(M.context);return(null==b?void 0:b.length)>0}(p)&&D.push(function(M){return"string"!=typeof M||0===M.length?Promise.resolve([{type:"SelectFromOwnLocations",address:"SelectFromOwnLocations",lat:null,lon:null,properties:{labelId:"select-from-own-locations",layer:"ownLocations",address:"selectFromOwnLocations",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]):Promise.resolve([])}(c)),E||M.includes("Locations")){const M=y;if(z.includes("Favourite")){const M=W(L);D.push(function(M,z){return Promise.resolve(pM(M,z,["address","name"]).map((M=>({type:"FavouritePlace",properties:Y({},M,{label:M.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[M.lon,M.lat]}}))))}(M,c)),z.includes("Back")&&D.push(Promise.resolve([{type:"back",address:"back",lat:null,lon:null,properties:{labelId:"back",layer:"back",address:"back",lat:null,lon:null},geometry:{type:"Point",coordinates:[]}}]))}if(w||z.includes("Datasource")){const z=["station","venue","address","street"],b=g.map((M=>`gtfs${M}`)),p=S.concat(b).join(",");D.push(qM(c,M,x,I,p,h,B,z))}if(w||z.includes("History")){const M=a(L,"endpoint"),z=["currentPosition","selectFromMap","futureRoute","ownLocations","bikeRentalStation","bikepark","carpark","stop","back"];z.push(...WM),D.push(nM(M,c,z))}}if(E||M.includes("ParkingAreas")){if(w||z.includes("Datasource")){const M=y;o&&10!==o&&(M.size=o);const z=["carpark","bikepark"],b=d?d.join(","):null;D.push(qM(c,M,x,I,b,h,B,z).then((M=>O?O(M,F):M)))}if(w||z.includes("History")){const M=a(L),z=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikestation","bikeRentalStation","back","stop","station"];z.push(...WM),z.push(...aM),D.push(nM(M,c,z))}}if(E||M.includes("Stops")){if(z.includes("Favourite")){const M=t(L);let z;z=M.every((M=>"station"===M.type))?eM(M,m).then((M=>O?O(M,F):M)):r(M).then((M=>eM(M,m))).then((M=>O?O(M,F):M)),D.push(function(M,z){return M.then((M=>pM(M,z,["properties.name","properties.name","properties.address"])))}(z,c))}if(w||z.includes("Datasource")){const z=["stop","station"],b=o&&10!==o?{size:o}:{};y&&y["boundary.country"]&&(b["boundary.country"]=y["boundary.country"]),(E||M.includes("Locations"))&&(b.dedupestops=1);const p=g.map((M=>`gtfs${M}`)).join(",");D.push(qM(c,b,x,I,p,h,B,z).then((M=>O?O(M,F):M)))}if(w||z.includes("History")){const M=a(L).filter((M=>!M.properties.gid||M.properties.gid.includes("GTFS:"))),z=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikeRentalStation","back"];z.push(...WM),z.push(...aM),z.push(...tM),b?("route-CITYBIKE"!==b&&(z.push("bikeRentalStation"),z.push("bikestation")),D.push(nM(M,c,z).then((M=>O?O(M,F):M)))):D.push(nM(M,c,z))}}if(E||M.includes("Routes")){if(z.includes("Favourite")){const M=f(L);D.push(R(M,c,F,q).then((M=>O?O(M,F,"Routes"):M)))}if(D.push(l(c,g,b,q).then((M=>O?O(M,F,"Routes"):M))),w||z.includes("History")){const M=a(L),z=["currentPosition","selectFromMap","futureRoute","favouritePlace","stop","station","bikepark","carpark","ownLocations","back"];b&&("route-CITYBIKE"!==b&&(z.push("bikeRentalStation"),z.push("bikestation")),z.push(...WM.filter((M=>!(M===b))))),z.push(...aM),D.push(nM(M,c,z).then((M=>O?O(M,F,"Routes"):M)))}}if(E||M.includes("BikeRentalStations")){if(z.includes("Favourite")){const M=u(L);D.push(s(M,c))}if(w||z.includes("Datasource")){const M=["bikestation"],z=o&&10!==o?{size:o}:{};D.push(qM(c,z,x,I,k.join(","),h,B,M).then((M=>O?O(M,F,"BikeRentalStations"):M)))}}Promise.all(D).then(T.default).then(bM).then((M=>{P.results=M})).catch((M=>{P.error=M})).then((()=>{A(Y({},P,{results:J(X,P.results,c)}))}))}),300,{leading:!0});function iM(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function rM(M,z){return M(z={exports:{}},z.exports),z.exports}var sM,uM=rM((function(M,z){M.exports=function(){var z,b;function p(){return z.apply(null,arguments)}function O(M){z=M}function o(M){return M instanceof Array||"[object Array]"===Object.prototype.toString.call(M)}function c(M){return null!=M&&"[object Object]"===Object.prototype.toString.call(M)}function A(M,z){return Object.prototype.hasOwnProperty.call(M,z)}function q(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var z;for(z in M)if(A(M,z))return!1;return!0}function e(M){return void 0===M}function n(M){return"number"==typeof M||"[object Number]"===Object.prototype.toString.call(M)}function W(M){return M instanceof Date||"[object Date]"===Object.prototype.toString.call(M)}function a(M,z){var b,p=[],O=M.length;for(b=0;b<O;++b)p.push(z(M[b],b));return p}function t(M,z){for(var b in z)A(z,b)&&(M[b]=z[b]);return A(z,"toString")&&(M.toString=z.toString),A(z,"valueOf")&&(M.valueOf=z.valueOf),M}function d(M,z,b,p){return Vb(M,z,b,p,!0).utc()}function i(){return{empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}}function r(M){return null==M._pf&&(M._pf=i()),M._pf}function s(M){if(null==M._isValid){var z=r(M),p=b.call(z.parsedDateParts,(function(M){return null!=M})),O=!isNaN(M._d.getTime())&&z.overflow<0&&!z.empty&&!z.invalidEra&&!z.invalidMonth&&!z.invalidWeekday&&!z.weekdayMismatch&&!z.nullInput&&!z.invalidFormat&&!z.userInvalidated&&(!z.meridiem||z.meridiem&&p);if(M._strict&&(O=O&&0===z.charsLeftOver&&0===z.unusedTokens.length&&void 0===z.bigHour),null!=Object.isFrozen&&Object.isFrozen(M))return O;M._isValid=O}return M._isValid}function u(M){var z=d(NaN);return null!=M?t(r(z),M):r(z).userInvalidated=!0,z}b=Array.prototype.some?Array.prototype.some:function(M){var z,b=Object(this),p=b.length>>>0;for(z=0;z<p;z++)if(z in b&&M.call(this,b[z],z,b))return!0;return!1};var R=p.momentProperties=[],f=!1;function l(M,z){var b,p,O,o=R.length;if(e(z._isAMomentObject)||(M._isAMomentObject=z._isAMomentObject),e(z._i)||(M._i=z._i),e(z._f)||(M._f=z._f),e(z._l)||(M._l=z._l),e(z._strict)||(M._strict=z._strict),e(z._tzm)||(M._tzm=z._tzm),e(z._isUTC)||(M._isUTC=z._isUTC),e(z._offset)||(M._offset=z._offset),e(z._pf)||(M._pf=r(z)),e(z._locale)||(M._locale=z._locale),o>0)for(b=0;b<o;b++)e(O=z[p=R[b]])||(M[p]=O);return M}function L(M){l(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===f&&(f=!0,p.updateOffset(this),f=!1)}function N(M){return M instanceof L||null!=M&&null!=M._isAMomentObject}function B(M){!1===p.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+M)}function X(M,z){var b=!0;return t((function(){if(null!=p.deprecationHandler&&p.deprecationHandler(null,M),b){var O,o,c,q=[],e=arguments.length;for(o=0;o<e;o++){if(O="","object"==typeof arguments[o]){for(c in O+="\n["+o+"] ",arguments[0])A(arguments[0],c)&&(O+=c+": "+arguments[0][c]+", ");O=O.slice(0,-2)}else O=arguments[o];q.push(O)}B(M+"\nArguments: "+Array.prototype.slice.call(q).join("")+"\n"+(new Error).stack),b=!1}return z.apply(this,arguments)}),z)}var h,m={};function g(M,z){null!=p.deprecationHandler&&p.deprecationHandler(M,z),m[M]||(B(z),m[M]=!0)}function T(M){return"undefined"!=typeof Function&&M instanceof Function||"[object Function]"===Object.prototype.toString.call(M)}function _(M){var z,b;for(b in M)A(M,b)&&(T(z=M[b])?this[b]=z:this["_"+b]=z);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)}function y(M,z){var b,p=t({},M);for(b in z)A(z,b)&&(c(M[b])&&c(z[b])?(p[b]={},t(p[b],M[b]),t(p[b],z[b])):null!=z[b]?p[b]=z[b]:delete p[b]);for(b in M)A(M,b)&&!A(z,b)&&c(M[b])&&(p[b]=t({},p[b]));return p}function S(M){null!=M&&this.set(M)}p.suppressDeprecationWarnings=!1,p.deprecationHandler=null,h=Object.keys?Object.keys:function(M){var z,b=[];for(z in M)A(M,z)&&b.push(z);return b};var v={sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"};function k(M,z,b){var p=this._calendar[M]||this._calendar.sameElse;return T(p)?p.call(z,b):p}function E(M,z,b){var p=""+Math.abs(M),O=z-p.length;return(M>=0?b?"+":"":"-")+Math.pow(10,Math.max(0,O)).toString().substr(1)+p}var w=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,C=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,D={},P={};function x(M,z,b,p){var O=p;"string"==typeof p&&(O=function(){return this[p]()}),M&&(P[M]=O),z&&(P[z[0]]=function(){return E(O.apply(this,arguments),z[1],z[2])}),b&&(P[b]=function(){return this.localeData().ordinal(O.apply(this,arguments),M)})}function I(M){return M.match(/\[[\s\S]/)?M.replace(/^\[|\]$/g,""):M.replace(/\\/g,"")}function F(M){var z,b,p=M.match(w);for(z=0,b=p.length;z<b;z++)P[p[z]]?p[z]=P[p[z]]:p[z]=I(p[z]);return function(z){var O,o="";for(O=0;O<b;O++)o+=T(p[O])?p[O].call(z,M):p[O];return o}}function H(M,z){return M.isValid()?(z=Y(z,M.localeData()),D[z]=D[z]||F(z),D[z](M)):M.localeData().invalidDate()}function Y(M,z){var b=5;function p(M){return z.longDateFormat(M)||M}for(C.lastIndex=0;b>=0&&C.test(M);)M=M.replace(C,p),C.lastIndex=0,b-=1;return M}var U={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"};function j(M){var z=this._longDateFormat[M],b=this._longDateFormat[M.toUpperCase()];return z||!b?z:(this._longDateFormat[M]=b.match(w).map((function(M){return"MMMM"===M||"MM"===M||"DD"===M||"dddd"===M?M.slice(1):M})).join(""),this._longDateFormat[M])}var G="Invalid date";function V(){return this._invalidDate}var K="%d",Q=/\d{1,2}/;function J(M){return this._ordinal.replace("%d",M)}var Z={future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"};function $(M,z,b,p){var O=this._relativeTime[b];return T(O)?O(M,z,b,p):O.replace(/%d/i,M)}function MM(M,z){var b=this._relativeTime[M>0?"future":"past"];return T(b)?b(z):b.replace(/%s/i,z)}var zM={};function bM(M,z){var b=M.toLowerCase();zM[b]=zM[b+"s"]=zM[z]=M}function pM(M){return"string"==typeof M?zM[M]||zM[M.toLowerCase()]:void 0}function OM(M){var z,b,p={};for(b in M)A(M,b)&&(z=pM(b))&&(p[z]=M[b]);return p}var oM={};function cM(M,z){oM[M]=z}function AM(M){var z,b=[];for(z in M)A(M,z)&&b.push({unit:z,priority:oM[z]});return b.sort((function(M,z){return M.priority-z.priority})),b}function qM(M){return M%4==0&&M%100!=0||M%400==0}function eM(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function nM(M){var z=+M,b=0;return 0!==z&&isFinite(z)&&(b=eM(z)),b}function WM(M,z){return function(b){return null!=b?(tM(this,M,b),p.updateOffset(this,z),this):aM(this,M)}}function aM(M,z){return M.isValid()?M._d["get"+(M._isUTC?"UTC":"")+z]():NaN}function tM(M,z,b){M.isValid()&&!isNaN(b)&&("FullYear"===z&&qM(M.year())&&1===M.month()&&29===M.date()?(b=nM(b),M._d["set"+(M._isUTC?"UTC":"")+z](b,M.month(),Mz(b,M.month()))):M._d["set"+(M._isUTC?"UTC":"")+z](b))}function dM(M){return T(this[M=pM(M)])?this[M]():this}function rM(M,z){if("object"==typeof M){var b,p=AM(M=OM(M)),O=p.length;for(b=0;b<O;b++)this[p[b].unit](M[p[b].unit])}else if(T(this[M=pM(M)]))return this[M](z);return this}var sM,uM=/\d/,RM=/\d\d/,fM=/\d{3}/,lM=/\d{4}/,LM=/[+-]?\d{6}/,NM=/\d\d?/,BM=/\d\d\d\d?/,XM=/\d\d\d\d\d\d?/,hM=/\d{1,3}/,mM=/\d{1,4}/,gM=/[+-]?\d{1,6}/,TM=/\d+/,_M=/[+-]?\d+/,yM=/Z|[+-]\d\d:?\d\d/gi,SM=/Z|[+-]\d\d(?::?\d\d)?/gi,vM=/[+-]?\d+(\.\d{1,3})?/,kM=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i;function EM(M,z,b){sM[M]=T(z)?z:function(M,p){return M&&b?b:z}}function wM(M,z){return A(sM,M)?sM[M](z._strict,z._locale):new RegExp(CM(M))}function CM(M){return DM(M.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,(function(M,z,b,p,O){return z||b||p||O})))}function DM(M){return M.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}sM={};var PM={};function xM(M,z){var b,p,O=z;for("string"==typeof M&&(M=[M]),n(z)&&(O=function(M,b){b[z]=nM(M)}),p=M.length,b=0;b<p;b++)PM[M[b]]=O}function IM(M,z){xM(M,(function(M,b,p,O){p._w=p._w||{},z(M,p._w,p,O)}))}function FM(M,z,b){null!=z&&A(PM,M)&&PM[M](z,b._a,b,M)}var HM,YM=0,UM=1,jM=2,GM=3,VM=4,KM=5,QM=6,JM=7,ZM=8;function $M(M,z){return(M%z+z)%z}function Mz(M,z){if(isNaN(M)||isNaN(z))return NaN;var b=$M(z,12);return M+=(z-b)/12,1===b?qM(M)?29:28:31-b%7%2}HM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var z;for(z=0;z<this.length;++z)if(this[z]===M)return z;return-1},x("M",["MM",2],"Mo",(function(){return this.month()+1})),x("MMM",0,0,(function(M){return this.localeData().monthsShort(this,M)})),x("MMMM",0,0,(function(M){return this.localeData().months(this,M)})),bM("month","M"),cM("month",8),EM("M",NM),EM("MM",NM,RM),EM("MMM",(function(M,z){return z.monthsShortRegex(M)})),EM("MMMM",(function(M,z){return z.monthsRegex(M)})),xM(["M","MM"],(function(M,z){z[UM]=nM(M)-1})),xM(["MMM","MMMM"],(function(M,z,b,p){var O=b._locale.monthsParse(M,p,b._strict);null!=O?z[UM]=O:r(b).invalidMonth=M}));var zz="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),bz="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),pz=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,Oz=kM,oz=kM;function cz(M,z){return M?o(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||pz).test(z)?"format":"standalone"][M.month()]:o(this._months)?this._months:this._months.standalone}function Az(M,z){return M?o(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[pz.test(z)?"format":"standalone"][M.month()]:o(this._monthsShort)?this._monthsShort:this._monthsShort.standalone}function qz(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],p=0;p<12;++p)o=d([2e3,p]),this._shortMonthsParse[p]=this.monthsShort(o,"").toLocaleLowerCase(),this._longMonthsParse[p]=this.months(o,"").toLocaleLowerCase();return b?"MMM"===z?-1!==(O=HM.call(this._shortMonthsParse,c))?O:null:-1!==(O=HM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=HM.call(this._shortMonthsParse,c))||-1!==(O=HM.call(this._longMonthsParse,c))?O:null:-1!==(O=HM.call(this._longMonthsParse,c))||-1!==(O=HM.call(this._shortMonthsParse,c))?O:null}function ez(M,z,b){var p,O,o;if(this._monthsParseExact)return qz.call(this,M,z,b);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),p=0;p<12;p++){if(O=d([2e3,p]),b&&!this._longMonthsParse[p]&&(this._longMonthsParse[p]=new RegExp("^"+this.months(O,"").replace(".","")+"$","i"),this._shortMonthsParse[p]=new RegExp("^"+this.monthsShort(O,"").replace(".","")+"$","i")),b||this._monthsParse[p]||(o="^"+this.months(O,"")+"|^"+this.monthsShort(O,""),this._monthsParse[p]=new RegExp(o.replace(".",""),"i")),b&&"MMMM"===z&&this._longMonthsParse[p].test(M))return p;if(b&&"MMM"===z&&this._shortMonthsParse[p].test(M))return p;if(!b&&this._monthsParse[p].test(M))return p}}function nz(M,z){var b;if(!M.isValid())return M;if("string"==typeof z)if(/^\d+$/.test(z))z=nM(z);else if(!n(z=M.localeData().monthsParse(z)))return M;return b=Math.min(M.date(),Mz(M.year(),z)),M._d["set"+(M._isUTC?"UTC":"")+"Month"](z,b),M}function Wz(M){return null!=M?(nz(this,M),p.updateOffset(this,!0),this):aM(this,"Month")}function az(){return Mz(this.year(),this.month())}function tz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||iz.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(A(this,"_monthsShortRegex")||(this._monthsShortRegex=Oz),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)}function dz(M){return this._monthsParseExact?(A(this,"_monthsRegex")||iz.call(this),M?this._monthsStrictRegex:this._monthsRegex):(A(this,"_monthsRegex")||(this._monthsRegex=oz),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)}function iz(){function M(M,z){return z.length-M.length}var z,b,p=[],O=[],o=[];for(z=0;z<12;z++)b=d([2e3,z]),p.push(this.monthsShort(b,"")),O.push(this.months(b,"")),o.push(this.months(b,"")),o.push(this.monthsShort(b,""));for(p.sort(M),O.sort(M),o.sort(M),z=0;z<12;z++)p[z]=DM(p[z]),O[z]=DM(O[z]);for(z=0;z<24;z++)o[z]=DM(o[z]);this._monthsRegex=new RegExp("^("+o.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+O.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+p.join("|")+")","i")}function rz(M){return qM(M)?366:365}x("Y",0,0,(function(){var M=this.year();return M<=9999?E(M,4):"+"+M})),x(0,["YY",2],0,(function(){return this.year()%100})),x(0,["YYYY",4],0,"year"),x(0,["YYYYY",5],0,"year"),x(0,["YYYYYY",6,!0],0,"year"),bM("year","y"),cM("year",1),EM("Y",_M),EM("YY",NM,RM),EM("YYYY",mM,lM),EM("YYYYY",gM,LM),EM("YYYYYY",gM,LM),xM(["YYYYY","YYYYYY"],YM),xM("YYYY",(function(M,z){z[YM]=2===M.length?p.parseTwoDigitYear(M):nM(M)})),xM("YY",(function(M,z){z[YM]=p.parseTwoDigitYear(M)})),xM("Y",(function(M,z){z[YM]=parseInt(M,10)})),p.parseTwoDigitYear=function(M){return nM(M)+(nM(M)>68?1900:2e3)};var sz=WM("FullYear",!0);function uz(){return qM(this.year())}function Rz(M,z,b,p,O,o,c){var A;return M<100&&M>=0?(A=new Date(M+400,z,b,p,O,o,c),isFinite(A.getFullYear())&&A.setFullYear(M)):A=new Date(M,z,b,p,O,o,c),A}function fz(M){var z,b;return M<100&&M>=0?((b=Array.prototype.slice.call(arguments))[0]=M+400,z=new Date(Date.UTC.apply(null,b)),isFinite(z.getUTCFullYear())&&z.setUTCFullYear(M)):z=new Date(Date.UTC.apply(null,arguments)),z}function lz(M,z,b){var p=7+z-b;return-(7+fz(M,0,p).getUTCDay()-z)%7+p-1}function Lz(M,z,b,p,O){var o,c,A=1+7*(z-1)+(7+b-p)%7+lz(M,p,O);return A<=0?c=rz(o=M-1)+A:A>rz(M)?(o=M+1,c=A-rz(M)):(o=M,c=A),{year:o,dayOfYear:c}}function Nz(M,z,b){var p,O,o=lz(M.year(),z,b),c=Math.floor((M.dayOfYear()-o-1)/7)+1;return c<1?p=c+Bz(O=M.year()-1,z,b):c>Bz(M.year(),z,b)?(p=c-Bz(M.year(),z,b),O=M.year()+1):(O=M.year(),p=c),{week:p,year:O}}function Bz(M,z,b){var p=lz(M,z,b),O=lz(M+1,z,b);return(rz(M)-p+O)/7}function Xz(M){return Nz(M,this._week.dow,this._week.doy).week}x("w",["ww",2],"wo","week"),x("W",["WW",2],"Wo","isoWeek"),bM("week","w"),bM("isoWeek","W"),cM("week",5),cM("isoWeek",5),EM("w",NM),EM("ww",NM,RM),EM("W",NM),EM("WW",NM,RM),IM(["w","ww","W","WW"],(function(M,z,b,p){z[p.substr(0,1)]=nM(M)}));var hz={dow:0,doy:6};function mz(){return this._week.dow}function gz(){return this._week.doy}function Tz(M){var z=this.localeData().week(this);return null==M?z:this.add(7*(M-z),"d")}function _z(M){var z=Nz(this,1,4).week;return null==M?z:this.add(7*(M-z),"d")}function yz(M,z){return"string"!=typeof M?M:isNaN(M)?"number"==typeof(M=z.weekdaysParse(M))?M:null:parseInt(M,10)}function Sz(M,z){return"string"==typeof M?z.weekdaysParse(M)%7||7:isNaN(M)?null:M}function vz(M,z){return M.slice(z,7).concat(M.slice(0,z))}x("d",0,"do","day"),x("dd",0,0,(function(M){return this.localeData().weekdaysMin(this,M)})),x("ddd",0,0,(function(M){return this.localeData().weekdaysShort(this,M)})),x("dddd",0,0,(function(M){return this.localeData().weekdays(this,M)})),x("e",0,0,"weekday"),x("E",0,0,"isoWeekday"),bM("day","d"),bM("weekday","e"),bM("isoWeekday","E"),cM("day",11),cM("weekday",11),cM("isoWeekday",11),EM("d",NM),EM("e",NM),EM("E",NM),EM("dd",(function(M,z){return z.weekdaysMinRegex(M)})),EM("ddd",(function(M,z){return z.weekdaysShortRegex(M)})),EM("dddd",(function(M,z){return z.weekdaysRegex(M)})),IM(["dd","ddd","dddd"],(function(M,z,b,p){var O=b._locale.weekdaysParse(M,p,b._strict);null!=O?z.d=O:r(b).invalidWeekday=M})),IM(["d","e","E"],(function(M,z,b,p){z[p]=nM(M)}));var kz="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),Ez="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),wz="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),Cz=kM,Dz=kM,Pz=kM;function xz(M,z){var b=o(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(z)?"format":"standalone"];return!0===M?vz(b,this._week.dow):M?b[M.day()]:b}function Iz(M){return!0===M?vz(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort}function Fz(M){return!0===M?vz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Hz(M,z,b){var p,O,o,c=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],p=0;p<7;++p)o=d([2e3,1]).day(p),this._minWeekdaysParse[p]=this.weekdaysMin(o,"").toLocaleLowerCase(),this._shortWeekdaysParse[p]=this.weekdaysShort(o,"").toLocaleLowerCase(),this._weekdaysParse[p]=this.weekdays(o,"").toLocaleLowerCase();return b?"dddd"===z?-1!==(O=HM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=HM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=HM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=HM.call(this._weekdaysParse,c))||-1!==(O=HM.call(this._shortWeekdaysParse,c))||-1!==(O=HM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=HM.call(this._shortWeekdaysParse,c))||-1!==(O=HM.call(this._weekdaysParse,c))||-1!==(O=HM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=HM.call(this._minWeekdaysParse,c))||-1!==(O=HM.call(this._weekdaysParse,c))||-1!==(O=HM.call(this._shortWeekdaysParse,c))?O:null}function Yz(M,z,b){var p,O,o;if(this._weekdaysParseExact)return Hz.call(this,M,z,b);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),p=0;p<7;p++){if(O=d([2e3,1]).day(p),b&&!this._fullWeekdaysParse[p]&&(this._fullWeekdaysParse[p]=new RegExp("^"+this.weekdays(O,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[p]=new RegExp("^"+this.weekdaysShort(O,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[p]=new RegExp("^"+this.weekdaysMin(O,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[p]||(o="^"+this.weekdays(O,"")+"|^"+this.weekdaysShort(O,"")+"|^"+this.weekdaysMin(O,""),this._weekdaysParse[p]=new RegExp(o.replace(".",""),"i")),b&&"dddd"===z&&this._fullWeekdaysParse[p].test(M))return p;if(b&&"ddd"===z&&this._shortWeekdaysParse[p].test(M))return p;if(b&&"dd"===z&&this._minWeekdaysParse[p].test(M))return p;if(!b&&this._weekdaysParse[p].test(M))return p}}function Uz(M){if(!this.isValid())return null!=M?this:NaN;var z=this._isUTC?this._d.getUTCDay():this._d.getDay();return null!=M?(M=yz(M,this.localeData()),this.add(M-z,"d")):z}function jz(M){if(!this.isValid())return null!=M?this:NaN;var z=(this.day()+7-this.localeData()._week.dow)%7;return null==M?z:this.add(M-z,"d")}function Gz(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var z=Sz(M,this.localeData());return this.day(this.day()%7?z:z-7)}return this.day()||7}function Vz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(A(this,"_weekdaysRegex")||(this._weekdaysRegex=Cz),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)}function Kz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(A(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=Dz),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)}function Qz(M){return this._weekdaysParseExact?(A(this,"_weekdaysRegex")||Jz.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(A(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Pz),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)}function Jz(){function M(M,z){return z.length-M.length}var z,b,p,O,o,c=[],A=[],q=[],e=[];for(z=0;z<7;z++)b=d([2e3,1]).day(z),p=DM(this.weekdaysMin(b,"")),O=DM(this.weekdaysShort(b,"")),o=DM(this.weekdays(b,"")),c.push(p),A.push(O),q.push(o),e.push(p),e.push(O),e.push(o);c.sort(M),A.sort(M),q.sort(M),e.sort(M),this._weekdaysRegex=new RegExp("^("+e.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+q.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+A.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+c.join("|")+")","i")}function Zz(){return this.hours()%12||12}function $z(){return this.hours()||24}function Mb(M,z){x(M,0,0,(function(){return this.localeData().meridiem(this.hours(),this.minutes(),z)}))}function zb(M,z){return z._meridiemParse}function bb(M){return"p"===(M+"").toLowerCase().charAt(0)}x("H",["HH",2],0,"hour"),x("h",["hh",2],0,Zz),x("k",["kk",2],0,$z),x("hmm",0,0,(function(){return""+Zz.apply(this)+E(this.minutes(),2)})),x("hmmss",0,0,(function(){return""+Zz.apply(this)+E(this.minutes(),2)+E(this.seconds(),2)})),x("Hmm",0,0,(function(){return""+this.hours()+E(this.minutes(),2)})),x("Hmmss",0,0,(function(){return""+this.hours()+E(this.minutes(),2)+E(this.seconds(),2)})),Mb("a",!0),Mb("A",!1),bM("hour","h"),cM("hour",13),EM("a",zb),EM("A",zb),EM("H",NM),EM("h",NM),EM("k",NM),EM("HH",NM,RM),EM("hh",NM,RM),EM("kk",NM,RM),EM("hmm",BM),EM("hmmss",XM),EM("Hmm",BM),EM("Hmmss",XM),xM(["H","HH"],GM),xM(["k","kk"],(function(M,z,b){var p=nM(M);z[GM]=24===p?0:p})),xM(["a","A"],(function(M,z,b){b._isPm=b._locale.isPM(M),b._meridiem=M})),xM(["h","hh"],(function(M,z,b){z[GM]=nM(M),r(b).bigHour=!0})),xM("hmm",(function(M,z,b){var p=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p)),r(b).bigHour=!0})),xM("hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p,2)),z[KM]=nM(M.substr(O)),r(b).bigHour=!0})),xM("Hmm",(function(M,z,b){var p=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p))})),xM("Hmmss",(function(M,z,b){var p=M.length-4,O=M.length-2;z[GM]=nM(M.substr(0,p)),z[VM]=nM(M.substr(p,2)),z[KM]=nM(M.substr(O))}));var pb=/[ap]\.?m?\.?/i,Ob=WM("Hours",!0);function ob(M,z,b){return M>11?b?"pm":"PM":b?"am":"AM"}var cb,Ab={calendar:v,longDateFormat:U,invalidDate:G,ordinal:K,dayOfMonthOrdinalParse:Q,relativeTime:Z,months:zz,monthsShort:bz,week:hz,weekdays:kz,weekdaysMin:wz,weekdaysShort:Ez,meridiemParse:pb},qb={},eb={};function nb(M,z){var b,p=Math.min(M.length,z.length);for(b=0;b<p;b+=1)if(M[b]!==z[b])return b;return p}function Wb(M){return M?M.toLowerCase().replace("_","-"):M}function ab(M){for(var z,b,p,O,o=0;o<M.length;){for(z=(O=Wb(M[o]).split("-")).length,b=(b=Wb(M[o+1]))?b.split("-"):null;z>0;){if(p=db(O.slice(0,z).join("-")))return p;if(b&&b.length>=z&&nb(O,b)>=z-1)break;z--}o++}return cb}function tb(M){return null!=M.match("^[^/\\\\]*$")}function db(z){var b=null;if(void 0===qb[z]&&M&&M.exports&&tb(z))try{b=cb._abbr,iM(),ib(b)}catch(M){qb[z]=null}return qb[z]}function ib(M,z){var b;return M&&((b=e(z)?ub(M):rb(M,z))?cb=b:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+M+" not found. Did you forget to load it?")),cb._abbr}function rb(M,z){if(null!==z){var b,p=Ab;if(z.abbr=M,null!=qb[M])g("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),p=qb[M]._config;else if(null!=z.parentLocale)if(null!=qb[z.parentLocale])p=qb[z.parentLocale]._config;else{if(null==(b=db(z.parentLocale)))return eb[z.parentLocale]||(eb[z.parentLocale]=[]),eb[z.parentLocale].push({name:M,config:z}),null;p=b._config}return qb[M]=new S(y(p,z)),eb[M]&&eb[M].forEach((function(M){rb(M.name,M.config)})),ib(M),qb[M]}return delete qb[M],null}function sb(M,z){if(null!=z){var b,p,O=Ab;null!=qb[M]&&null!=qb[M].parentLocale?qb[M].set(y(qb[M]._config,z)):(null!=(p=db(M))&&(O=p._config),z=y(O,z),null==p&&(z.abbr=M),(b=new S(z)).parentLocale=qb[M],qb[M]=b),ib(M)}else null!=qb[M]&&(null!=qb[M].parentLocale?(qb[M]=qb[M].parentLocale,M===ib()&&ib(M)):null!=qb[M]&&delete qb[M]);return qb[M]}function ub(M){var z;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!o(M)){if(z=db(M))return z;M=[M]}return ab(M)}function Rb(){return h(qb)}function fb(M){var z,b=M._a;return b&&-2===r(M).overflow&&(z=b[UM]<0||b[UM]>11?UM:b[jM]<1||b[jM]>Mz(b[YM],b[UM])?jM:b[GM]<0||b[GM]>24||24===b[GM]&&(0!==b[VM]||0!==b[KM]||0!==b[QM])?GM:b[VM]<0||b[VM]>59?VM:b[KM]<0||b[KM]>59?KM:b[QM]<0||b[QM]>999?QM:-1,r(M)._overflowDayOfYear&&(z<YM||z>jM)&&(z=jM),r(M)._overflowWeeks&&-1===z&&(z=JM),r(M)._overflowWeekday&&-1===z&&(z=ZM),r(M).overflow=z),M}var lb=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Lb=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Nb=/Z|[+-]\d\d(?::?\d\d)?/,Bb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Xb=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],hb=/^\/?Date\((-?\d+)/i,mb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,gb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function Tb(M){var z,b,p,O,o,c,A=M._i,q=lb.exec(A)||Lb.exec(A),e=Bb.length,n=Xb.length;if(q){for(r(M).iso=!0,z=0,b=e;z<b;z++)if(Bb[z][1].exec(q[1])){O=Bb[z][0],p=!1!==Bb[z][2];break}if(null==O)return void(M._isValid=!1);if(q[3]){for(z=0,b=n;z<b;z++)if(Xb[z][1].exec(q[3])){o=(q[2]||" ")+Xb[z][0];break}if(null==o)return void(M._isValid=!1)}if(!p&&null!=o)return void(M._isValid=!1);if(q[4]){if(!Nb.exec(q[4]))return void(M._isValid=!1);c="Z"}M._f=O+(o||"")+(c||""),Ib(M)}else M._isValid=!1}function _b(M,z,b,p,O,o){var c=[yb(M),bz.indexOf(z),parseInt(b,10),parseInt(p,10),parseInt(O,10)];return o&&c.push(parseInt(o,10)),c}function yb(M){var z=parseInt(M,10);return z<=49?2e3+z:z<=999?1900+z:z}function Sb(M){return M.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function vb(M,z,b){return!M||Ez.indexOf(M)===new Date(z[0],z[1],z[2]).getDay()||(r(b).weekdayMismatch=!0,b._isValid=!1,!1)}function kb(M,z,b){if(M)return gb[M];if(z)return 0;var p=parseInt(b,10),O=p%100;return(p-O)/100*60+O}function Eb(M){var z,b=mb.exec(Sb(M._i));if(b){if(z=_b(b[4],b[3],b[2],b[5],b[6],b[7]),!vb(b[1],z,M))return;M._a=z,M._tzm=kb(b[8],b[9],b[10]),M._d=fz.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),r(M).rfc2822=!0}else M._isValid=!1}function wb(M){var z=hb.exec(M._i);null===z?(Tb(M),!1===M._isValid&&(delete M._isValid,Eb(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:p.createFromInputFallback(M)))):M._d=new Date(+z[1])}function Cb(M,z,b){return null!=M?M:null!=z?z:b}function Db(M){var z=new Date(p.now());return M._useUTC?[z.getUTCFullYear(),z.getUTCMonth(),z.getUTCDate()]:[z.getFullYear(),z.getMonth(),z.getDate()]}function Pb(M){var z,b,p,O,o,c=[];if(!M._d){for(p=Db(M),M._w&&null==M._a[jM]&&null==M._a[UM]&&xb(M),null!=M._dayOfYear&&(o=Cb(M._a[YM],p[YM]),(M._dayOfYear>rz(o)||0===M._dayOfYear)&&(r(M)._overflowDayOfYear=!0),b=fz(o,0,M._dayOfYear),M._a[UM]=b.getUTCMonth(),M._a[jM]=b.getUTCDate()),z=0;z<3&&null==M._a[z];++z)M._a[z]=c[z]=p[z];for(;z<7;z++)M._a[z]=c[z]=null==M._a[z]?2===z?1:0:M._a[z];24===M._a[GM]&&0===M._a[VM]&&0===M._a[KM]&&0===M._a[QM]&&(M._nextDay=!0,M._a[GM]=0),M._d=(M._useUTC?fz:Rz).apply(null,c),O=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[GM]=24),M._w&&void 0!==M._w.d&&M._w.d!==O&&(r(M).weekdayMismatch=!0)}}function xb(M){var z,b,p,O,o,c,A,q,e;null!=(z=M._w).GG||null!=z.W||null!=z.E?(o=1,c=4,b=Cb(z.GG,M._a[YM],Nz(Kb(),1,4).year),p=Cb(z.W,1),((O=Cb(z.E,1))<1||O>7)&&(q=!0)):(o=M._locale._week.dow,c=M._locale._week.doy,e=Nz(Kb(),o,c),b=Cb(z.gg,M._a[YM],e.year),p=Cb(z.w,e.week),null!=z.d?((O=z.d)<0||O>6)&&(q=!0):null!=z.e?(O=z.e+o,(z.e<0||z.e>6)&&(q=!0)):O=o),p<1||p>Bz(b,o,c)?r(M)._overflowWeeks=!0:null!=q?r(M)._overflowWeekday=!0:(A=Lz(b,p,O,o,c),M._a[YM]=A.year,M._dayOfYear=A.dayOfYear)}function Ib(M){if(M._f!==p.ISO_8601)if(M._f!==p.RFC_2822){M._a=[],r(M).empty=!0;var z,b,O,o,c,A,q,e=""+M._i,n=e.length,W=0;for(q=(O=Y(M._f,M._locale).match(w)||[]).length,z=0;z<q;z++)o=O[z],(b=(e.match(wM(o,M))||[])[0])&&((c=e.substr(0,e.indexOf(b))).length>0&&r(M).unusedInput.push(c),e=e.slice(e.indexOf(b)+b.length),W+=b.length),P[o]?(b?r(M).empty=!1:r(M).unusedTokens.push(o),FM(o,b,M)):M._strict&&!b&&r(M).unusedTokens.push(o);r(M).charsLeftOver=n-W,e.length>0&&r(M).unusedInput.push(e),M._a[GM]<=12&&!0===r(M).bigHour&&M._a[GM]>0&&(r(M).bigHour=void 0),r(M).parsedDateParts=M._a.slice(0),r(M).meridiem=M._meridiem,M._a[GM]=Fb(M._locale,M._a[GM],M._meridiem),null!==(A=r(M).era)&&(M._a[YM]=M._locale.erasConvertYear(A,M._a[YM])),Pb(M),fb(M)}else Eb(M);else Tb(M)}function Fb(M,z,b){var p;return null==b?z:null!=M.meridiemHour?M.meridiemHour(z,b):null!=M.isPM?((p=M.isPM(b))&&z<12&&(z+=12),p||12!==z||(z=0),z):z}function Hb(M){var z,b,p,O,o,c,A=!1,q=M._f.length;if(0===q)return r(M).invalidFormat=!0,void(M._d=new Date(NaN));for(O=0;O<q;O++)o=0,c=!1,z=l({},M),null!=M._useUTC&&(z._useUTC=M._useUTC),z._f=M._f[O],Ib(z),s(z)&&(c=!0),o+=r(z).charsLeftOver,o+=10*r(z).unusedTokens.length,r(z).score=o,A?o<p&&(p=o,b=z):(null==p||o<p||c)&&(p=o,b=z,c&&(A=!0));t(M,b||z)}function Yb(M){if(!M._d){var z=OM(M._i),b=void 0===z.day?z.date:z.day;M._a=a([z.year,z.month,b,z.hour,z.minute,z.second,z.millisecond],(function(M){return M&&parseInt(M,10)})),Pb(M)}}function Ub(M){var z=new L(fb(jb(M)));return z._nextDay&&(z.add(1,"d"),z._nextDay=void 0),z}function jb(M){var z=M._i,b=M._f;return M._locale=M._locale||ub(M._l),null===z||void 0===b&&""===z?u({nullInput:!0}):("string"==typeof z&&(M._i=z=M._locale.preparse(z)),N(z)?new L(fb(z)):(W(z)?M._d=z:o(b)?Hb(M):b?Ib(M):Gb(M),s(M)||(M._d=null),M))}function Gb(M){var z=M._i;e(z)?M._d=new Date(p.now()):W(z)?M._d=new Date(z.valueOf()):"string"==typeof z?wb(M):o(z)?(M._a=a(z.slice(0),(function(M){return parseInt(M,10)})),Pb(M)):c(z)?Yb(M):n(z)?M._d=new Date(z):p.createFromInputFallback(M)}function Vb(M,z,b,p,O){var A={};return!0!==z&&!1!==z||(p=z,z=void 0),!0!==b&&!1!==b||(p=b,b=void 0),(c(M)&&q(M)||o(M)&&0===M.length)&&(M=void 0),A._isAMomentObject=!0,A._useUTC=A._isUTC=O,A._l=b,A._i=M,A._f=z,A._strict=p,Ub(A)}function Kb(M,z,b,p){return Vb(M,z,b,p,!1)}p.createFromInputFallback=X("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",(function(M){M._d=new Date(M._i+(M._useUTC?" UTC":""))})),p.ISO_8601=function(){},p.RFC_2822=function(){};var Qb=X("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:u()})),Jb=X("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",(function(){var M=Kb.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:u()}));function Zb(M,z){var b,p;if(1===z.length&&o(z[0])&&(z=z[0]),!z.length)return Kb();for(b=z[0],p=1;p<z.length;++p)z[p].isValid()&&!z[p][M](b)||(b=z[p]);return b}function $b(){return Zb("isBefore",[].slice.call(arguments,0))}function Mp(){return Zb("isAfter",[].slice.call(arguments,0))}var zp=function(){return Date.now?Date.now():+new Date},bp=["year","quarter","month","week","day","hour","minute","second","millisecond"];function pp(M){var z,b,p=!1,O=bp.length;for(z in M)if(A(M,z)&&(-1===HM.call(bp,z)||null!=M[z]&&isNaN(M[z])))return!1;for(b=0;b<O;++b)if(M[bp[b]]){if(p)return!1;parseFloat(M[bp[b]])!==nM(M[bp[b]])&&(p=!0)}return!0}function Op(){return this._isValid}function op(){return gp(NaN)}function cp(M){var z=OM(M),b=z.year||0,p=z.quarter||0,O=z.month||0,o=z.week||z.isoWeek||0,c=z.day||0,A=z.hour||0,q=z.minute||0,e=z.second||0,n=z.millisecond||0;this._isValid=pp(z),this._milliseconds=+n+1e3*e+6e4*q+1e3*A*60*60,this._days=+c+7*o,this._months=+O+3*p+12*b,this._data={},this._locale=ub(),this._bubble()}function Ap(M){return M instanceof cp}function qp(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function ep(M,z,b){var p,O=Math.min(M.length,z.length),o=Math.abs(M.length-z.length),c=0;for(p=0;p<O;p++)(b&&M[p]!==z[p]||!b&&nM(M[p])!==nM(z[p]))&&c++;return c+o}function np(M,z){x(M,0,0,(function(){var M=this.utcOffset(),b="+";return M<0&&(M=-M,b="-"),b+E(~~(M/60),2)+z+E(~~M%60,2)}))}np("Z",":"),np("ZZ",""),EM("Z",SM),EM("ZZ",SM),xM(["Z","ZZ"],(function(M,z,b){b._useUTC=!0,b._tzm=ap(SM,M)}));var Wp=/([\+\-]|\d\d)/gi;function ap(M,z){var b,p,O=(z||"").match(M);return null===O?null:0===(p=60*(b=((O[O.length-1]||[])+"").match(Wp)||["-",0,0])[1]+nM(b[2]))?0:"+"===b[0]?p:-p}function tp(M,z){var b,O;return z._isUTC?(b=z.clone(),O=(N(M)||W(M)?M.valueOf():Kb(M).valueOf())-b.valueOf(),b._d.setTime(b._d.valueOf()+O),p.updateOffset(b,!1),b):Kb(M).local()}function dp(M){return-Math.round(M._d.getTimezoneOffset())}function ip(M,z,b){var O,o=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if("string"==typeof M){if(null===(M=ap(SM,M)))return this}else Math.abs(M)<16&&!b&&(M*=60);return!this._isUTC&&z&&(O=dp(this)),this._offset=M,this._isUTC=!0,null!=O&&this.add(O,"m"),o!==M&&(!z||this._changeInProgress?vp(this,gp(M-o,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,p.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?o:dp(this)}function rp(M,z){return null!=M?("string"!=typeof M&&(M=-M),this.utcOffset(M,z),this):-this.utcOffset()}function sp(M){return this.utcOffset(0,M)}function up(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(dp(this),"m")),this}function Rp(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var M=ap(yM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this}function fp(M){return!!this.isValid()&&(M=M?Kb(M).utcOffset():0,(this.utcOffset()-M)%60==0)}function lp(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()}function Lp(){if(!e(this._isDSTShifted))return this._isDSTShifted;var M,z={};return l(z,this),(z=jb(z))._a?(M=z._isUTC?d(z._a):Kb(z._a),this._isDSTShifted=this.isValid()&&ep(z._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted}function Np(){return!!this.isValid()&&!this._isUTC}function Bp(){return!!this.isValid()&&this._isUTC}function Xp(){return!!this.isValid()&&this._isUTC&&0===this._offset}p.updateOffset=function(){};var hp=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,mp=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function gp(M,z){var b,p,O,o=M,c=null;return Ap(M)?o={ms:M._milliseconds,d:M._days,M:M._months}:n(M)||!isNaN(+M)?(o={},z?o[z]=+M:o.milliseconds=+M):(c=hp.exec(M))?(b="-"===c[1]?-1:1,o={y:0,d:nM(c[jM])*b,h:nM(c[GM])*b,m:nM(c[VM])*b,s:nM(c[KM])*b,ms:nM(qp(1e3*c[QM]))*b}):(c=mp.exec(M))?(b="-"===c[1]?-1:1,o={y:Tp(c[2],b),M:Tp(c[3],b),w:Tp(c[4],b),d:Tp(c[5],b),h:Tp(c[6],b),m:Tp(c[7],b),s:Tp(c[8],b)}):null==o?o={}:"object"==typeof o&&("from"in o||"to"in o)&&(O=yp(Kb(o.from),Kb(o.to)),(o={}).ms=O.milliseconds,o.M=O.months),p=new cp(o),Ap(M)&&A(M,"_locale")&&(p._locale=M._locale),Ap(M)&&A(M,"_isValid")&&(p._isValid=M._isValid),p}function Tp(M,z){var b=M&&parseFloat(M.replace(",","."));return(isNaN(b)?0:b)*z}function _p(M,z){var b={};return b.months=z.month()-M.month()+12*(z.year()-M.year()),M.clone().add(b.months,"M").isAfter(z)&&--b.months,b.milliseconds=+z-+M.clone().add(b.months,"M"),b}function yp(M,z){var b;return M.isValid()&&z.isValid()?(z=tp(z,M),M.isBefore(z)?b=_p(M,z):((b=_p(z,M)).milliseconds=-b.milliseconds,b.months=-b.months),b):{milliseconds:0,months:0}}function Sp(M,z){return function(b,p){var O;return null===p||isNaN(+p)||(g(z,"moment()."+z+"(period, number) is deprecated. Please use moment()."+z+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),O=b,b=p,p=O),vp(this,gp(b,p),M),this}}function vp(M,z,b,O){var o=z._milliseconds,c=qp(z._days),A=qp(z._months);M.isValid()&&(O=null==O||O,A&&nz(M,aM(M,"Month")+A*b),c&&tM(M,"Date",aM(M,"Date")+c*b),o&&M._d.setTime(M._d.valueOf()+o*b),O&&p.updateOffset(M,c||A))}gp.fn=cp.prototype,gp.invalid=op;var kp=Sp(1,"add"),Ep=Sp(-1,"subtract");function wp(M){return"string"==typeof M||M instanceof String}function Cp(M){return N(M)||W(M)||wp(M)||n(M)||Pp(M)||Dp(M)||null==M}function Dp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],e=o.length;for(z=0;z<e;z+=1)b=o[z],O=O||A(M,b);return p&&O}function Pp(M){var z=o(M),b=!1;return z&&(b=0===M.filter((function(z){return!n(z)&&wp(M)})).length),z&&b}function xp(M){var z,b,p=c(M)&&!q(M),O=!1,o=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(z=0;z<o.length;z+=1)b=o[z],O=O||A(M,b);return p&&O}function Ip(M,z){var b=M.diff(z,"days",!0);return b<-6?"sameElse":b<-1?"lastWeek":b<0?"lastDay":b<1?"sameDay":b<2?"nextDay":b<7?"nextWeek":"sameElse"}function Fp(M,z){1===arguments.length&&(arguments[0]?Cp(arguments[0])?(M=arguments[0],z=void 0):xp(arguments[0])&&(z=arguments[0],M=void 0):(M=void 0,z=void 0));var b=M||Kb(),O=tp(b,this).startOf("day"),o=p.calendarFormat(this,O)||"sameElse",c=z&&(T(z[o])?z[o].call(this,b):z[o]);return this.format(c||this.localeData().calendar(o,this,Kb(b)))}function Hp(){return new L(this)}function Yp(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()>b.valueOf():b.valueOf()<this.clone().startOf(z).valueOf())}function Up(M,z){var b=N(M)?M:Kb(M);return!(!this.isValid()||!b.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()<b.valueOf():this.clone().endOf(z).valueOf()<b.valueOf())}function jp(M,z,b,p){var O=N(M)?M:Kb(M),o=N(z)?z:Kb(z);return!!(this.isValid()&&O.isValid()&&o.isValid())&&("("===(p=p||"()")[0]?this.isAfter(O,b):!this.isBefore(O,b))&&(")"===p[1]?this.isBefore(o,b):!this.isAfter(o,b))}function Gp(M,z){var b,p=N(M)?M:Kb(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(z=pM(z)||"millisecond")?this.valueOf()===p.valueOf():(b=p.valueOf(),this.clone().startOf(z).valueOf()<=b&&b<=this.clone().endOf(z).valueOf()))}function Vp(M,z){return this.isSame(M,z)||this.isAfter(M,z)}function Kp(M,z){return this.isSame(M,z)||this.isBefore(M,z)}function Qp(M,z,b){var p,O,o;if(!this.isValid())return NaN;if(!(p=tp(M,this)).isValid())return NaN;switch(O=6e4*(p.utcOffset()-this.utcOffset()),z=pM(z)){case"year":o=Jp(this,p)/12;break;case"month":o=Jp(this,p);break;case"quarter":o=Jp(this,p)/3;break;case"second":o=(this-p)/1e3;break;case"minute":o=(this-p)/6e4;break;case"hour":o=(this-p)/36e5;break;case"day":o=(this-p-O)/864e5;break;case"week":o=(this-p-O)/6048e5;break;default:o=this-p}return b?o:eM(o)}function Jp(M,z){if(M.date()<z.date())return-Jp(z,M);var b=12*(z.year()-M.year())+(z.month()-M.month()),p=M.clone().add(b,"months");return-(b+(z-p<0?(z-p)/(p-M.clone().add(b-1,"months")):(z-p)/(M.clone().add(b+1,"months")-p)))||0}function Zp(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")}function $p(M){if(!this.isValid())return null;var z=!0!==M,b=z?this.clone().utc():this;return b.year()<0||b.year()>9999?H(b,z?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):T(Date.prototype.toISOString)?z?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",H(b,"Z")):H(b,z?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")}function MO(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var M,z,b,p,O="moment",o="";return this.isLocal()||(O=0===this.utcOffset()?"moment.utc":"moment.parseZone",o="Z"),M="["+O+'("]',z=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",b="-MM-DD[T]HH:mm:ss.SSS",p=o+'[")]',this.format(M+z+b+p)}function zO(M){M||(M=this.isUtc()?p.defaultFormatUtc:p.defaultFormat);var z=H(this,M);return this.localeData().postformat(z)}function bO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({to:this,from:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function pO(M){return this.from(Kb(),M)}function OO(M,z){return this.isValid()&&(N(M)&&M.isValid()||Kb(M).isValid())?gp({from:this,to:M}).locale(this.locale()).humanize(!z):this.localeData().invalidDate()}function oO(M){return this.to(Kb(),M)}function cO(M){var z;return void 0===M?this._locale._abbr:(null!=(z=ub(M))&&(this._locale=z),this)}p.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",p.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var AO=X("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",(function(M){return void 0===M?this.localeData():this.locale(M)}));function qO(){return this._locale}var eO=1e3,nO=60*eO,WO=60*nO,aO=3506328*WO;function tO(M,z){return(M%z+z)%z}function dO(M,z,b){return M<100&&M>=0?new Date(M+400,z,b)-aO:new Date(M,z,b).valueOf()}function iO(M,z,b){return M<100&&M>=0?Date.UTC(M+400,z,b)-aO:Date.UTC(M,z,b)}function rO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year(),0,1);break;case"quarter":z=b(this.year(),this.month()-this.month()%3,1);break;case"month":z=b(this.year(),this.month(),1);break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":z=b(this.year(),this.month(),this.date());break;case"hour":z=this._d.valueOf(),z-=tO(z+(this._isUTC?0:this.utcOffset()*nO),WO);break;case"minute":z=this._d.valueOf(),z-=tO(z,nO);break;case"second":z=this._d.valueOf(),z-=tO(z,eO)}return this._d.setTime(z),p.updateOffset(this,!0),this}function sO(M){var z,b;if(void 0===(M=pM(M))||"millisecond"===M||!this.isValid())return this;switch(b=this._isUTC?iO:dO,M){case"year":z=b(this.year()+1,0,1)-1;break;case"quarter":z=b(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":z=b(this.year(),this.month()+1,1)-1;break;case"week":z=b(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":z=b(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":z=b(this.year(),this.month(),this.date()+1)-1;break;case"hour":z=this._d.valueOf(),z+=WO-tO(z+(this._isUTC?0:this.utcOffset()*nO),WO)-1;break;case"minute":z=this._d.valueOf(),z+=nO-tO(z,nO)-1;break;case"second":z=this._d.valueOf(),z+=eO-tO(z,eO)-1}return this._d.setTime(z),p.updateOffset(this,!0),this}function uO(){return this._d.valueOf()-6e4*(this._offset||0)}function RO(){return Math.floor(this.valueOf()/1e3)}function fO(){return new Date(this.valueOf())}function lO(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]}function LO(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}}function NO(){return this.isValid()?this.toISOString():null}function BO(){return s(this)}function XO(){return t({},r(this))}function hO(){return r(this).overflow}function mO(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}}function gO(M,z){var b,O,o,c=this._eras||ub("en")._eras;for(b=0,O=c.length;b<O;++b)switch("string"==typeof c[b].since&&(o=p(c[b].since).startOf("day"),c[b].since=o.valueOf()),typeof c[b].until){case"undefined":c[b].until=1/0;break;case"string":o=p(c[b].until).startOf("day").valueOf(),c[b].until=o.valueOf()}return c}function TO(M,z,b){var p,O,o,c,A,q=this.eras();for(M=M.toUpperCase(),p=0,O=q.length;p<O;++p)if(o=q[p].name.toUpperCase(),c=q[p].abbr.toUpperCase(),A=q[p].narrow.toUpperCase(),b)switch(z){case"N":case"NN":case"NNN":if(c===M)return q[p];break;case"NNNN":if(o===M)return q[p];break;case"NNNNN":if(A===M)return q[p]}else if([o,c,A].indexOf(M)>=0)return q[p]}function _O(M,z){var b=M.since<=M.until?1:-1;return void 0===z?p(M.since).year():p(M.since).year()+(z-M.offset)*b}function yO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].name;if(p[M].until<=b&&b<=p[M].since)return p[M].name}return""}function SO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].narrow;if(p[M].until<=b&&b<=p[M].since)return p[M].narrow}return""}function vO(){var M,z,b,p=this.localeData().eras();for(M=0,z=p.length;M<z;++M){if(b=this.clone().startOf("day").valueOf(),p[M].since<=b&&b<=p[M].until)return p[M].abbr;if(p[M].until<=b&&b<=p[M].since)return p[M].abbr}return""}function kO(){var M,z,b,O,o=this.localeData().eras();for(M=0,z=o.length;M<z;++M)if(b=o[M].since<=o[M].until?1:-1,O=this.clone().startOf("day").valueOf(),o[M].since<=O&&O<=o[M].until||o[M].until<=O&&O<=o[M].since)return(this.year()-p(o[M].since).year())*b+o[M].offset;return this.year()}function EO(M){return A(this,"_erasNameRegex")||FO.call(this),M?this._erasNameRegex:this._erasRegex}function wO(M){return A(this,"_erasAbbrRegex")||FO.call(this),M?this._erasAbbrRegex:this._erasRegex}function CO(M){return A(this,"_erasNarrowRegex")||FO.call(this),M?this._erasNarrowRegex:this._erasRegex}function DO(M,z){return z.erasAbbrRegex(M)}function PO(M,z){return z.erasNameRegex(M)}function xO(M,z){return z.erasNarrowRegex(M)}function IO(M,z){return z._eraYearOrdinalRegex||TM}function FO(){var M,z,b=[],p=[],O=[],o=[],c=this.eras();for(M=0,z=c.length;M<z;++M)p.push(DM(c[M].name)),b.push(DM(c[M].abbr)),O.push(DM(c[M].narrow)),o.push(DM(c[M].name)),o.push(DM(c[M].abbr)),o.push(DM(c[M].narrow));this._erasRegex=new RegExp("^("+o.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+p.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+b.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+O.join("|")+")","i")}function HO(M,z){x(0,[M,M.length],0,z)}function YO(M){return QO.call(this,M,this.week(),this.weekday(),this.localeData()._week.dow,this.localeData()._week.doy)}function UO(M){return QO.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)}function jO(){return Bz(this.year(),1,4)}function GO(){return Bz(this.isoWeekYear(),1,4)}function VO(){var M=this.localeData()._week;return Bz(this.year(),M.dow,M.doy)}function KO(){var M=this.localeData()._week;return Bz(this.weekYear(),M.dow,M.doy)}function QO(M,z,b,p,O){var o;return null==M?Nz(this,p,O).year:(z>(o=Bz(M,p,O))&&(z=o),JO.call(this,M,z,b,p,O))}function JO(M,z,b,p,O){var o=Lz(M,z,b,p,O),c=fz(o.year,0,o.dayOfYear);return this.year(c.getUTCFullYear()),this.month(c.getUTCMonth()),this.date(c.getUTCDate()),this}function ZO(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)}x("N",0,0,"eraAbbr"),x("NN",0,0,"eraAbbr"),x("NNN",0,0,"eraAbbr"),x("NNNN",0,0,"eraName"),x("NNNNN",0,0,"eraNarrow"),x("y",["y",1],"yo","eraYear"),x("y",["yy",2],0,"eraYear"),x("y",["yyy",3],0,"eraYear"),x("y",["yyyy",4],0,"eraYear"),EM("N",DO),EM("NN",DO),EM("NNN",DO),EM("NNNN",PO),EM("NNNNN",xO),xM(["N","NN","NNN","NNNN","NNNNN"],(function(M,z,b,p){var O=b._locale.erasParse(M,p,b._strict);O?r(b).era=O:r(b).invalidEra=M})),EM("y",TM),EM("yy",TM),EM("yyy",TM),EM("yyyy",TM),EM("yo",IO),xM(["y","yy","yyy","yyyy"],YM),xM(["yo"],(function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[YM]=b._locale.eraYearOrdinalParse(M,O):z[YM]=parseInt(M,10)})),x(0,["gg",2],0,(function(){return this.weekYear()%100})),x(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),HO("gggg","weekYear"),HO("ggggg","weekYear"),HO("GGGG","isoWeekYear"),HO("GGGGG","isoWeekYear"),bM("weekYear","gg"),bM("isoWeekYear","GG"),cM("weekYear",1),cM("isoWeekYear",1),EM("G",_M),EM("g",_M),EM("GG",NM,RM),EM("gg",NM,RM),EM("GGGG",mM,lM),EM("gggg",mM,lM),EM("GGGGG",gM,LM),EM("ggggg",gM,LM),IM(["gggg","ggggg","GGGG","GGGGG"],(function(M,z,b,p){z[p.substr(0,2)]=nM(M)})),IM(["gg","GG"],(function(M,z,b,O){z[O]=p.parseTwoDigitYear(M)})),x("Q",0,"Qo","quarter"),bM("quarter","Q"),cM("quarter",7),EM("Q",uM),xM("Q",(function(M,z){z[UM]=3*(nM(M)-1)})),x("D",["DD",2],"Do","date"),bM("date","D"),cM("date",9),EM("D",NM),EM("DD",NM,RM),EM("Do",(function(M,z){return M?z._dayOfMonthOrdinalParse||z._ordinalParse:z._dayOfMonthOrdinalParseLenient})),xM(["D","DD"],jM),xM("Do",(function(M,z){z[jM]=nM(M.match(NM)[0])}));var $O=WM("Date",!0);function Mo(M){var z=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==M?z:this.add(M-z,"d")}x("DDD",["DDDD",3],"DDDo","dayOfYear"),bM("dayOfYear","DDD"),cM("dayOfYear",4),EM("DDD",hM),EM("DDDD",fM),xM(["DDD","DDDD"],(function(M,z,b){b._dayOfYear=nM(M)})),x("m",["mm",2],0,"minute"),bM("minute","m"),cM("minute",14),EM("m",NM),EM("mm",NM,RM),xM(["m","mm"],VM);var zo=WM("Minutes",!1);x("s",["ss",2],0,"second"),bM("second","s"),cM("second",15),EM("s",NM),EM("ss",NM,RM),xM(["s","ss"],KM);var bo,po,Oo=WM("Seconds",!1);for(x("S",0,0,(function(){return~~(this.millisecond()/100)})),x(0,["SS",2],0,(function(){return~~(this.millisecond()/10)})),x(0,["SSS",3],0,"millisecond"),x(0,["SSSS",4],0,(function(){return 10*this.millisecond()})),x(0,["SSSSS",5],0,(function(){return 100*this.millisecond()})),x(0,["SSSSSS",6],0,(function(){return 1e3*this.millisecond()})),x(0,["SSSSSSS",7],0,(function(){return 1e4*this.millisecond()})),x(0,["SSSSSSSS",8],0,(function(){return 1e5*this.millisecond()})),x(0,["SSSSSSSSS",9],0,(function(){return 1e6*this.millisecond()})),bM("millisecond","ms"),cM("millisecond",16),EM("S",hM,uM),EM("SS",hM,RM),EM("SSS",hM,fM),bo="SSSS";bo.length<=9;bo+="S")EM(bo,TM);function oo(M,z){z[QM]=nM(1e3*("0."+M))}for(bo="S";bo.length<=9;bo+="S")xM(bo,oo);function co(){return this._isUTC?"UTC":""}function Ao(){return this._isUTC?"Coordinated Universal Time":""}po=WM("Milliseconds",!1),x("z",0,0,"zoneAbbr"),x("zz",0,0,"zoneName");var qo=L.prototype;function eo(M){return Kb(1e3*M)}function no(){return Kb.apply(null,arguments).parseZone()}function Wo(M){return M}qo.add=kp,qo.calendar=Fp,qo.clone=Hp,qo.diff=Qp,qo.endOf=sO,qo.format=zO,qo.from=bO,qo.fromNow=pO,qo.to=OO,qo.toNow=oO,qo.get=dM,qo.invalidAt=hO,qo.isAfter=Yp,qo.isBefore=Up,qo.isBetween=jp,qo.isSame=Gp,qo.isSameOrAfter=Vp,qo.isSameOrBefore=Kp,qo.isValid=BO,qo.lang=AO,qo.locale=cO,qo.localeData=qO,qo.max=Jb,qo.min=Qb,qo.parsingFlags=XO,qo.set=rM,qo.startOf=rO,qo.subtract=Ep,qo.toArray=lO,qo.toObject=LO,qo.toDate=fO,qo.toISOString=$p,qo.inspect=MO,"undefined"!=typeof Symbol&&null!=Symbol.for&&(qo[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),qo.toJSON=NO,qo.toString=Zp,qo.unix=RO,qo.valueOf=uO,qo.creationData=mO,qo.eraName=yO,qo.eraNarrow=SO,qo.eraAbbr=vO,qo.eraYear=kO,qo.year=sz,qo.isLeapYear=uz,qo.weekYear=YO,qo.isoWeekYear=UO,qo.quarter=qo.quarters=ZO,qo.month=Wz,qo.daysInMonth=az,qo.week=qo.weeks=Tz,qo.isoWeek=qo.isoWeeks=_z,qo.weeksInYear=VO,qo.weeksInWeekYear=KO,qo.isoWeeksInYear=jO,qo.isoWeeksInISOWeekYear=GO,qo.date=$O,qo.day=qo.days=Uz,qo.weekday=jz,qo.isoWeekday=Gz,qo.dayOfYear=Mo,qo.hour=qo.hours=Ob,qo.minute=qo.minutes=zo,qo.second=qo.seconds=Oo,qo.millisecond=qo.milliseconds=po,qo.utcOffset=ip,qo.utc=sp,qo.local=up,qo.parseZone=Rp,qo.hasAlignedHourOffset=fp,qo.isDST=lp,qo.isLocal=Np,qo.isUtcOffset=Bp,qo.isUtc=Xp,qo.isUTC=Xp,qo.zoneAbbr=co,qo.zoneName=Ao,qo.dates=X("dates accessor is deprecated. Use date instead.",$O),qo.months=X("months accessor is deprecated. Use month instead",Wz),qo.years=X("years accessor is deprecated. Use year instead",sz),qo.zone=X("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",rp),qo.isDSTShifted=X("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",Lp);var ao=S.prototype;function to(M,z,b,p){var O=ub(),o=d().set(p,z);return O[b](o,M)}function io(M,z,b){if(n(M)&&(z=M,M=void 0),M=M||"",null!=z)return to(M,z,b,"month");var p,O=[];for(p=0;p<12;p++)O[p]=to(M,p,b,"month");return O}function ro(M,z,b,p){"boolean"==typeof M?(n(z)&&(b=z,z=void 0),z=z||""):(b=z=M,M=!1,n(z)&&(b=z,z=void 0),z=z||"");var O,o=ub(),c=M?o._week.dow:0,A=[];if(null!=b)return to(z,(b+c)%7,p,"day");for(O=0;O<7;O++)A[O]=to(z,(O+c)%7,p,"day");return A}function so(M,z){return io(M,z,"months")}function uo(M,z){return io(M,z,"monthsShort")}function Ro(M,z,b){return ro(M,z,b,"weekdays")}function fo(M,z,b){return ro(M,z,b,"weekdaysShort")}function lo(M,z,b){return ro(M,z,b,"weekdaysMin")}ao.calendar=k,ao.longDateFormat=j,ao.invalidDate=V,ao.ordinal=J,ao.preparse=Wo,ao.postformat=Wo,ao.relativeTime=$,ao.pastFuture=MM,ao.set=_,ao.eras=gO,ao.erasParse=TO,ao.erasConvertYear=_O,ao.erasAbbrRegex=wO,ao.erasNameRegex=EO,ao.erasNarrowRegex=CO,ao.months=cz,ao.monthsShort=Az,ao.monthsParse=ez,ao.monthsRegex=dz,ao.monthsShortRegex=tz,ao.week=Xz,ao.firstDayOfYear=gz,ao.firstDayOfWeek=mz,ao.weekdays=xz,ao.weekdaysMin=Fz,ao.weekdaysShort=Iz,ao.weekdaysParse=Yz,ao.weekdaysRegex=Vz,ao.weekdaysShortRegex=Kz,ao.weekdaysMinRegex=Qz,ao.isPM=bb,ao.meridiem=ob,ib("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var z=M%10;return M+(1===nM(M%100/10)?"th":1===z?"st":2===z?"nd":3===z?"rd":"th")}}),p.lang=X("moment.lang is deprecated. Use moment.locale instead.",ib),p.langData=X("moment.langData is deprecated. Use moment.localeData instead.",ub);var Lo=Math.abs;function No(){var M=this._data;return this._milliseconds=Lo(this._milliseconds),this._days=Lo(this._days),this._months=Lo(this._months),M.milliseconds=Lo(M.milliseconds),M.seconds=Lo(M.seconds),M.minutes=Lo(M.minutes),M.hours=Lo(M.hours),M.months=Lo(M.months),M.years=Lo(M.years),this}function Bo(M,z,b,p){var O=gp(z,b);return M._milliseconds+=p*O._milliseconds,M._days+=p*O._days,M._months+=p*O._months,M._bubble()}function Xo(M,z){return Bo(this,M,z,1)}function ho(M,z){return Bo(this,M,z,-1)}function mo(M){return M<0?Math.floor(M):Math.ceil(M)}function go(){var M,z,b,p,O,o=this._milliseconds,c=this._days,A=this._months,q=this._data;return o>=0&&c>=0&&A>=0||o<=0&&c<=0&&A<=0||(o+=864e5*mo(_o(A)+c),c=0,A=0),q.milliseconds=o%1e3,M=eM(o/1e3),q.seconds=M%60,z=eM(M/60),q.minutes=z%60,b=eM(z/60),q.hours=b%24,c+=eM(b/24),A+=O=eM(To(c)),c-=mo(_o(O)),p=eM(A/12),A%=12,q.days=c,q.months=A,q.years=p,this}function To(M){return 4800*M/146097}function _o(M){return 146097*M/4800}function yo(M){if(!this.isValid())return NaN;var z,b,p=this._milliseconds;if("month"===(M=pM(M))||"quarter"===M||"year"===M)switch(z=this._days+p/864e5,b=this._months+To(z),M){case"month":return b;case"quarter":return b/3;case"year":return b/12}else switch(z=this._days+Math.round(_o(this._months)),M){case"week":return z/7+p/6048e5;case"day":return z+p/864e5;case"hour":return 24*z+p/36e5;case"minute":return 1440*z+p/6e4;case"second":return 86400*z+p/1e3;case"millisecond":return Math.floor(864e5*z)+p;default:throw new Error("Unknown unit "+M)}}function So(){return this.isValid()?this._milliseconds+864e5*this._days+this._months%12*2592e6+31536e6*nM(this._months/12):NaN}function vo(M){return function(){return this.as(M)}}var ko=vo("ms"),Eo=vo("s"),wo=vo("m"),Co=vo("h"),Do=vo("d"),Po=vo("w"),xo=vo("M"),Io=vo("Q"),Fo=vo("y");function Ho(){return gp(this)}function Yo(M){return M=pM(M),this.isValid()?this[M+"s"]():NaN}function Uo(M){return function(){return this.isValid()?this._data[M]:NaN}}var jo=Uo("milliseconds"),Go=Uo("seconds"),Vo=Uo("minutes"),Ko=Uo("hours"),Qo=Uo("days"),Jo=Uo("months"),Zo=Uo("years");function $o(){return eM(this.days()/7)}var Mc=Math.round,zc={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function bc(M,z,b,p,O){return O.relativeTime(z||1,!!b,M,p)}function pc(M,z,b,p){var O=gp(M).abs(),o=Mc(O.as("s")),c=Mc(O.as("m")),A=Mc(O.as("h")),q=Mc(O.as("d")),e=Mc(O.as("M")),n=Mc(O.as("w")),W=Mc(O.as("y")),a=o<=b.ss&&["s",o]||o<b.s&&["ss",o]||c<=1&&["m"]||c<b.m&&["mm",c]||A<=1&&["h"]||A<b.h&&["hh",A]||q<=1&&["d"]||q<b.d&&["dd",q];return null!=b.w&&(a=a||n<=1&&["w"]||n<b.w&&["ww",n]),(a=a||e<=1&&["M"]||e<b.M&&["MM",e]||W<=1&&["y"]||["yy",W])[2]=z,a[3]=+M>0,a[4]=p,bc.apply(null,a)}function Oc(M){return void 0===M?Mc:"function"==typeof M&&(Mc=M,!0)}function oc(M,z){return void 0!==zc[M]&&(void 0===z?zc[M]:(zc[M]=z,"s"===M&&(zc.ss=z-1),!0))}function cc(M,z){if(!this.isValid())return this.localeData().invalidDate();var b,p,O=!1,o=zc;return"object"==typeof M&&(z=M,M=!1),"boolean"==typeof M&&(O=M),"object"==typeof z&&(o=Object.assign({},zc,z),null!=z.s&&null==z.ss&&(o.ss=z.s-1)),p=pc(this,!O,o,b=this.localeData()),O&&(p=b.pastFuture(+this,p)),b.postformat(p)}var Ac=Math.abs;function qc(M){return(M>0)-(M<0)||+M}function ec(){if(!this.isValid())return this.localeData().invalidDate();var M,z,b,p,O,o,c,A,q=Ac(this._milliseconds)/1e3,e=Ac(this._days),n=Ac(this._months),W=this.asSeconds();return W?(M=eM(q/60),z=eM(M/60),q%=60,M%=60,b=eM(n/12),n%=12,p=q?q.toFixed(3).replace(/\.?0+$/,""):"",O=W<0?"-":"",o=qc(this._months)!==qc(W)?"-":"",c=qc(this._days)!==qc(W)?"-":"",A=qc(this._milliseconds)!==qc(W)?"-":"",O+"P"+(b?o+b+"Y":"")+(n?o+n+"M":"")+(e?c+e+"D":"")+(z||M||q?"T":"")+(z?A+z+"H":"")+(M?A+M+"M":"")+(q?A+p+"S":"")):"P0D"}var nc=cp.prototype;return nc.isValid=Op,nc.abs=No,nc.add=Xo,nc.subtract=ho,nc.as=yo,nc.asMilliseconds=ko,nc.asSeconds=Eo,nc.asMinutes=wo,nc.asHours=Co,nc.asDays=Do,nc.asWeeks=Po,nc.asMonths=xo,nc.asQuarters=Io,nc.asYears=Fo,nc.valueOf=So,nc._bubble=go,nc.clone=Ho,nc.get=Yo,nc.milliseconds=jo,nc.seconds=Go,nc.minutes=Vo,nc.hours=Ko,nc.days=Qo,nc.weeks=$o,nc.months=Jo,nc.years=Zo,nc.humanize=cc,nc.toISOString=ec,nc.toString=ec,nc.toJSON=ec,nc.locale=cO,nc.localeData=qO,nc.toIsoString=X("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ec),nc.lang=AO,x("X",0,0,"unix"),x("x",0,0,"valueOf"),EM("x",_M),EM("X",vM),xM("X",(function(M,z,b){b._d=new Date(1e3*parseFloat(M))})),xM("x",(function(M,z,b){b._d=new Date(nM(M))})),
2
2
  //! moment.js
3
3
  p.version="2.29.4",O(Kb),p.fn=qo,p.min=$b,p.max=Mp,p.now=zp,p.utc=d,p.unix=eo,p.months=so,p.isDate=W,p.locale=ib,p.invalid=u,p.duration=gp,p.isMoment=N,p.weekdays=Ro,p.parseZone=no,p.localeData=ub,p.isDuration=Ap,p.monthsShort=uo,p.weekdaysMin=lo,p.defineLocale=rb,p.updateLocale=sb,p.locales=Rb,p.weekdaysShort=fo,p.normalizeUnits=pM,p.relativeTimeRounding=Oc,p.relativeTimeThreshold=oc,p.calendarFormat=Ip,p.prototype=qo,p.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},p}()})),RM=rM((function(M){
4
4
  //! moment-timezone.js
@@ -11,4 +11,4 @@ var z,b;z=this,b=function(M){void 0===M.version&&M.default&&(M=M.default);var z,
11
11
  var z="nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän".split(" "),b=["nolla","yhden","kahden","kolmen","neljän","viiden","kuuden",z[7],z[8],z[9]];function p(M,p,O,o){var c="";switch(O){case"s":return o?"muutaman sekunnin":"muutama sekunti";case"ss":c=o?"sekunnin":"sekuntia";break;case"m":return o?"minuutin":"minuutti";case"mm":c=o?"minuutin":"minuuttia";break;case"h":return o?"tunnin":"tunti";case"hh":c=o?"tunnin":"tuntia";break;case"d":return o?"päivän":"päivä";case"dd":c=o?"päivän":"päivää";break;case"M":return o?"kuukauden":"kuukausi";case"MM":c=o?"kuukauden":"kuukautta";break;case"y":return o?"vuoden":"vuosi";case"yy":c=o?"vuoden":"vuotta"}return c=function(M,p){return M<10?p?b[M]:z[M]:M}(M,o)+" "+c,c}return M.defineLocale("fi",{months:"tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu".split("_"),monthsShort:"tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu".split("_"),weekdays:"sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai".split("_"),weekdaysShort:"su_ma_ti_ke_to_pe_la".split("_"),weekdaysMin:"su_ma_ti_ke_to_pe_la".split("_"),longDateFormat:{LT:"HH.mm",LTS:"HH.mm.ss",L:"DD.MM.YYYY",LL:"Do MMMM[ta] YYYY",LLL:"Do MMMM[ta] YYYY, [klo] HH.mm",LLLL:"dddd, Do MMMM[ta] YYYY, [klo] HH.mm",l:"D.M.YYYY",ll:"Do MMM YYYY",lll:"Do MMM YYYY, [klo] HH.mm",llll:"ddd, Do MMM YYYY, [klo] HH.mm"},calendar:{sameDay:"[tänään] [klo] LT",nextDay:"[huomenna] [klo] LT",nextWeek:"dddd [klo] LT",lastDay:"[eilen] [klo] LT",lastWeek:"[viime] dddd[na] [klo] LT",sameElse:"L"},relativeTime:{future:"%s päästä",past:"%s sitten",s:p,ss:p,m:p,mm:p,h:p,hh:p,d:p,dd:p,M:p,MM:p,y:p,yy:p},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})},b(uM)})),rM((function(M,z){var b;b=function(M){return M.defineLocale("sv",{months:"januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december".split("_"),monthsShort:"jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec".split("_"),weekdays:"söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag".split("_"),weekdaysShort:"sön_mån_tis_ons_tor_fre_lör".split("_"),weekdaysMin:"sö_må_ti_on_to_fr_lö".split("_"),longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY-MM-DD",LL:"D MMMM YYYY",LLL:"D MMMM YYYY [kl.] HH:mm",LLLL:"dddd D MMMM YYYY [kl.] HH:mm",lll:"D MMM YYYY HH:mm",llll:"ddd D MMM YYYY HH:mm"},calendar:{sameDay:"[Idag] LT",nextDay:"[Imorgon] LT",lastDay:"[Igår] LT",nextWeek:"[På] dddd LT",lastWeek:"[I] dddd[s] LT",sameElse:"L"},relativeTime:{future:"om %s",past:"för %s sedan",s:"några sekunder",ss:"%d sekunder",m:"en minut",mm:"%d minuter",h:"en timme",hh:"%d timmar",d:"en dag",dd:"%d dagar",M:"en månad",MM:"%d månader",y:"ett år",yy:"%d år"},dayOfMonthOrdinalParse:/\d{1,2}(\:e|\:a)/,ordinal:function(M){var z=M%10;return M+(1==~~(M%100/10)?":e":1===z||2===z?":a":":e")},week:{dow:1,doy:4}})},b(uM)})),rM((function(M,z){var b;b=function(M){
12
12
  //! moment.js locale configuration
13
13
  function z(M,z,b,p){var O={m:["eine Minute","einer Minute"],h:["eine Stunde","einer Stunde"],d:["ein Tag","einem Tag"],dd:[M+" Tage",M+" Tagen"],w:["eine Woche","einer Woche"],M:["ein Monat","einem Monat"],MM:[M+" Monate",M+" Monaten"],y:["ein Jahr","einem Jahr"],yy:[M+" Jahre",M+" Jahren"]};return z?O[b][0]:O[b][1]}return M.defineLocale("de",{months:"Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember".split("_"),monthsShort:"Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.".split("_"),monthsParseExact:!0,weekdays:"Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag".split("_"),weekdaysShort:"So._Mo._Di._Mi._Do._Fr._Sa.".split("_"),weekdaysMin:"So_Mo_Di_Mi_Do_Fr_Sa".split("_"),weekdaysParseExact:!0,longDateFormat:{LT:"HH:mm",LTS:"HH:mm:ss",L:"DD.MM.YYYY",LL:"D. MMMM YYYY",LLL:"D. MMMM YYYY HH:mm",LLLL:"dddd, D. MMMM YYYY HH:mm"},calendar:{sameDay:"[heute um] LT [Uhr]",sameElse:"L",nextDay:"[morgen um] LT [Uhr]",nextWeek:"dddd [um] LT [Uhr]",lastDay:"[gestern um] LT [Uhr]",lastWeek:"[letzten] dddd [um] LT [Uhr]"},relativeTime:{future:"in %s",past:"vor %s",s:"ein paar Sekunden",ss:"%d Sekunden",m:z,mm:"%d Minuten",h:z,hh:"%d Stunden",d:z,dd:z,w:z,ww:"%d Wochen",M:z,MM:z,y:z,yy:z},dayOfMonthOrdinalParse:/\d{1,2}\./,ordinal:"%d.",week:{dow:1,doy:4}})},b(uM)}));const mM={de:{address:"Adresse","address-place-or-business":"Adress, Ort or Geschäft","add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flug",arrival:"Ankunft",back:"Zurück",bikerentalstation:"Leihrad-Station",bus:"Bus",cancel:"Abbrechen","clear-button-label":"Löschen","clear-search-history":"Suchhistorie löschen",currentposition:"Aktuelle Position",delete:"Löschen","delete-old-searches-header":"Wollen Sie die Such-Historie löschen?",departure:"Abfahrt",destination:"Ziel","give-origin":"Start eingeben.","give-destination":"Ziel eingeben.",favourite:"Favoriten",ferry:"Fähre","future-route":"Zukünftige Verbindung",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Eigene Favoriten",loading:"Laden...","minute-short":"min",rail:"Zug",search:"Suche","search-address-or-place":"Suche anhand von Adresse oder Ortsangabe","search-button-label":"Suche","search-destination":"Suche Zielort, Linie or Haltestelle","search-destination-index":"Zielort eingeben","search-destination-results-but-no-search":"Ergebnisse in “Zielort”-Reiter anzeigen","search-no-results":"Kein Ort gefunden.","search-origin":"Suche Startort, Linie oder Haltestelle","search-origin-index":"Startort eingeben","search-position":"Standort ermitteln","search-autosuggest-label-desktop":"Venue, place and stopsearch. Navigate list with arrow keys and select with enter key","search-autosuggest-label-mobile":"Venue, place and stopsearch.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Aktuelle Auswahl: {{selection}}",street:"Straße",subway:"U-Bahn",station:"Station",stop:"Haltestelle","stop-near-you":"Suche Haltestellen und Linien in der Nähe","stop-near-you-bus":"Suche Buslinien or Haltestellen","stop-near-you-citybike":"Suche Leihrad-Stationen","stop-near-you-rail":"Suche Zugverbindungen oder Bahnhöfe","stop-near-you-subway":"Suche U-Bahn-Linien oder Haltestellen","stop-near-you-tram":"Suche Stadtbahn-Haltestellen-Suche","today-at":"Heute um","tomorrow-at":"Morgen um",tram:"Straßenbahn","use-own-position":"Benutze aktuellen Standort","select-from-map":"Wähle Position anhand Karte","select-from-own-locations":"Aus eigenen Favoriten auswählen",venue:"Venue","via-point":"Zwischenziel",where:"Wohin?",place:"Ort"},en:{address:"Address","address-place-or-business":"Address, place or business","add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}",airplane:"Flight",arrival:"Arrival",back:"Back",bikepark:"Park & Ride for bikes",bikerentalstation:"Bike station",bus:"bus",cancel:"Cancel",carpark:"Park & Ride","clear-button-label":"Clear","clear-search-history":"Clear search history",currentposition:"Current position",delete:"Delete","delete-old-searches-header":"Do you want to clear the search history?",departure:"Departure",destination:"Destination","give-origin":"Enter your origin.","give-destination":"Enter your destination",favourite:"Favourite",ferry:"Ferry","future-route":"Future route",origin:"Start","origin-stop-near-you":"Start",ownlocations:"Own locations",loading:"Loading...","minute-short":"m",platform:"Platform",rail:"Train",required:"required field",search:"Search","search-address-or-place":"Search by address or place name","search-button-label":"Search","search-destination":"Search destination, route or stop","search-destination-index":"Enter destination","search-destination-results-but-no-search":"View results in the adjacent “Destination” tab","search-no-results":"No location","search-origin":"Search origin, route or stop","search-origin-index":"Enter origin","search-position":"Detect location","search-autosuggest-label-desktop":"Venue, place and stopsearch. Navigate list with arrow keys and select with enter key","search-autosuggest-label-mobile":"Venue, place and stopsearch. Enter the location and navigate in the list by swiping.","search-autosuggest-len":"There is {{count}} suggestion available","search-autosuggest-len_plural":"There are {{count}} suggestions available","search-current-suggestion":"Current selection: {{selection}}",street:"Street",subway:"Metro",station:"Station",stop:"Stop","stop-near-you":"Search stops and routes","stop-near-you-airplane":"Search flights or airports","stop-near-you-bus":"Search bus routes or stops","stop-near-you-citybike":"Search city bike stations","stop-near-you-rail":"Search train routes or stations","stop-near-you-subway":"Search metro routes or stations ","stop-near-you-tram":"Search tram routes or stops","stop-route-station":"Bus and stop search","today-at":"today at","tomorrow-at":"tomorrow at",tram:"Tram",track:"Track","use-own-position":"Use current location","select-from-map":"Select position from map","select-from-own-locations":"Select from own locations",venue:"Venue","via-point":"Via point",where:"Where to?",place:"Location"},fi:{address:"Osoite","address-place-or-business":"Osoite, paikka tai yritys","add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin",airplane:"Lentokone",arrival:"Perillä",back:"Takaisin",bikerentalstation:"Pyöräasema",bikepark:"Liityntäpyöräparkki",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäkointi","clear-button-label":"Tyhjennä","clear-search-history":"Tyhjennä hakuhistoria",currentposition:"Tämänhetkinen sijainti",delete:"Poista","delete-old-searches-header":"Haluatko tyhjentää hakuhistorian?",departure:"Lähtöaika",destination:"Määränpää",favourite:"Suosikki",ferry:"Lautta","future-route":"Tuleva reitti","give-origin":"Lähtöpaikka","give-destination":"Määränpää",origin:"Lähtöpaikka","origin-stop-near-you":"Lähtöpaikka",ownlocations:"Omat paikat",loading:"Ladataan...","minute-short":"min",platform:"Laituri",rail:"Juna",required:"pakollinen kenttä",search:"Etsi","search-address-or-place":"Hae osoitteella tai paikan nimellä","search-button-label":"Hae","search-destination":"Hae määränpäätä, linjaa tai pysäkkiä","search-destination-index":"Syötä määränpää","search-destination-results-but-no-search":"Katso tulokset viereiseltä Määränpää-välilehdeltä","search-no-results":"Ei tuloksia","search-origin":"Hae lähtöpaikkaa, linjaa tai pysäkkiä","search-origin-index":"Syötä lähtöpaikka","search-autosuggest-label-desktop":"Paikka, linja ja pysäkkihaku. Navigoi listassa nuolinäppäimillä ja valitse enterillä","search-autosuggest-label-mobile":"Paikka, linja ja pysäkkihaku. Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-len":" Löydettiin {{count}} ehdotus","search-autosuggest-len_plural":" Löydettiin {{count}} ehdotusta","search-current-suggestion":"Tämänhetkinen valinta: {{selection}}","search-position":"Paikanna",street:"Katu",subway:"Metro",station:"Asema",stop:"Pysäkki","stop-near-you":"Linja, pysäkki tai asema","stop-near-you-airplane":"Hae lentoja tai lentoasemaa","stop-near-you-bus":"Hae bussilinjaa tai pysäkkiä","stop-near-you-citybike":"Hae kaupunkipyöräasemaa","stop-near-you-rail":"Hae lähijunaa tai asemaa","stop-near-you-subway":"Hae metrolinjaa tai asemaa","stop-near-you-tram":"Hae raitiolinjaa tai pysäkkiä","stop-route-station":"Linja- ja pysäkkihaku","today-at":"tänään klo","tomorrow-at":"huomenna klo",tram:"Raitiovaunu",track:"Raide","use-own-position":"Käytä nykyistä sijaintia","select-from-map":"Valitse sijainti kartalta","select-from-own-locations":"Valitse omista paikoista",venue:"Paikka","via-point":"Välipiste",where:"Minne mennään?",place:"Paikka"},sv:{address:"Adress","address-place-or-business":"Adress, plats eller företag","add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}",airplane:"Flyg",arrival:"Anländer",back:"Tillbaka",bikerentalstation:"Stadscykelstation",bikepark:"Anslutningsparkering för cyklar",bus:"Bussi",cancel:"Avbryt",carpark:"Infartsparkering","clear-button-label":"Töm","clear-search-history":"Töm sökhistoriken",currentposition:"Nuvarande position",delete:"Ta bort","delete-old-searches-header":"Vill du tömma sökhistoriken?",departure:"Avgångstid",destination:"Destination",favourite:"Favorit",ferry:"Färja","future-route":"Framtida rutt","give-destination":"Skriv in din destination","give-origin":"Skriv in din avfärdsplats",origin:"Avfärdsplats","origin-stop-near-you":"Avfärdsplats",ownlocations:"Egna platser",loading:"Laddar...","minute-short":"min",platform:"Plattform",rail:"Tåg",required:"obligatoriskt fält",search:"Sök","search-address-or-place":"Sök med adressen eller platsens namn","search-button-label":"Sök","search-destination":"Sök destination, linje eller hållplats","search-destination-index":"Skriv destination","search-destination-results-but-no-search":"Se resultaten under fliken Destination","search-no-results":"Inga sökresultat","search-origin":"Sök avfärdsplats, linje eller hållplats","search-origin-index":"Skriv avfärdsplats","search-position":"Sök position","search-autosuggest-label-desktop":"Plats, linje och hållplatssökning. Navigera listan med piltangenterna och välj med Enter-tangeten","search-autosuggest-label-mobile":"Plats, linje och hållplatssökning. Ange platsen och navigera i listan genom att svepa.","search-autosuggest-len":"Hittade {{count}} förslag","search-current-suggestion":"Nuvarande val: {{selection}}",street:"Gata",subway:"Metro",station:"Station",stop:"Hållplats","stop-near-you":"Sök hållplatser eller linjer","stop-near-you-airplane":"Sök flyg eller flygplatser","stop-near-you-bus":"Sök busslinjer eller hållplatser","stop-near-you-citybike":"Sök stadscykelstationer","stop-near-you-rail":"Sök närtåger eller stationer","stop-near-you-subway":"Sök metrolinjer eller stationer","stop-near-you-tram":"Sök spårvagnlinjer eller hållplatser","stop-route-station":"Buss och stopp sökningen","today-at":"i dag kl","tomorrow-at":"i morgon",tram:"Spårvagn",track:"Spår","use-own-position":"Använd min position","select-from-map":"Välj position från kartan","select-from-own-locations":"Välj från egna platser",venue:"Mötesplats","via-point":"Via punkt",where:"Vart vill du åka?",place:"Plats"}};function gM(M,z){void 0===z&&(z={});var b=z.insertAt;if(M&&"undefined"!=typeof document){var p=document.head||document.getElementsByTagName("head")[0],O=document.createElement("style");O.type="text/css","top"===b&&p.firstChild?p.insertBefore(O,p.firstChild):p.appendChild(O),O.styleSheet?O.styleSheet.cssText=M:O.appendChild(document.createTextNode(M))}}var TM={container:"styles_container__KXfyb",input:"styles_input__XmNBn",favourite:"styles_favourite__sjGcX",thin:"styles_thin__y3lnY",hasValue:"styles_hasValue__tzCTr",suggestionsContainerOpen:"styles_suggestionsContainerOpen__4AZDX",suggestionsContainer:"styles_suggestionsContainer__3dsEd",suggestionsList:"styles_suggestionsList__esTtR",suggestion:"styles_suggestion__7itfO",suggestionHighlighted:"styles_suggestionHighlighted__XUxvC","autosuggest-input-container":"styles_autosuggest-input-container__ZkKGO",origin:"styles_origin__ivlHi",destination:"styles_destination__y39VH","stop-route-station":"styles_stop-route-station__FneXd","autosuggest-input-icon":"styles_autosuggest-input-icon__uhYGQ","origin-stop-near-you":"styles_origin-stop-near-you__Ekwp-","clear-input":"styles_clear-input__Vx7B4","sr-only":"styles_sr-only__ZOrQT"};gM("/* stylelint-disable */\ninput[type='text'] {\n margin: 0; }\n\n.styles_container__KXfyb {\n display: flex;\n width: 100%; }\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 16px;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n display: flex;\n width: 100%;\n height: 44px;\n border-radius: 5px;\n border: solid 1px #888888;\n background-color: #ffffff;\n padding-left: 50px;\n padding-right: 44px;\n line-height: 1.2;\n letter-spacing: -0.5px;\n color: #333;\n box-sizing: border-box;\n -webkit-appearance: none;\n appearance: none; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_favourite__sjGcX {\n padding-left: 47px; }\n .styles_container__KXfyb .styles_input__XmNBn.styles_thin__y3lnY {\n height: 34px; }\n .styles_container__KXfyb .styles_input__XmNBn:focus {\n background: #fff;\n outline: none;\n border: solid 1px var(--color);\n box-shadow: none;\n box-shadow: 0px 0px 2px 1px var(--hover-color); }\n @media screen and (min-width: 768px) {\n .styles_container__KXfyb .styles_input__XmNBn {\n font-size: 15px;\n height: 44px;\n padding-left: 49px; } }\n .styles_container__KXfyb .styles_input__XmNBn::placeholder {\n color: #666666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333333; }\n\n.styles_suggestionsContainerOpen__4AZDX {\n width: 100%;\n max-height: 44vh;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: solid 1px rgba(0, 0, 0, 0.1);\n overflow-x: hidden;\n overflow-y: scroll;\n position: absolute;\n background-color: white;\n top: calc(3 * 0.875rem + 9px);\n z-index: 20; }\n\n.styles_suggestionsContainer__3dsEd {\n background-color: white;\n z-index: 20; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n background: white; }\n .styles_suggestionsContainer__3dsEd .styles_suggestionsList__esTtR li:hover {\n background: #F4F4F5; }\n\n.styles_suggestion__7itfO {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n cursor: pointer;\n list-style: none;\n display: block;\n overflow-x: hidden;\n overflow-y: hidden;\n white-space: nowrap; }\n\n.styles_suggestionHighlighted__XUxvC {\n background-color: #F4F4F5; }\n\n.styles_autosuggest-input-container__ZkKGO {\n position: relative;\n width: 100%; }\n .styles_autosuggest-input-container__ZkKGO.styles_origin__ivlHi {\n z-index: 16; }\n .styles_autosuggest-input-container__ZkKGO.styles_destination__y39VH {\n z-index: 10; }\n .styles_autosuggest-input-container__ZkKGO.styles_stop-route-station__FneXd {\n z-index: 9; }\n\n.styles_autosuggest-input-icon__uhYGQ {\n display: flex;\n position: absolute;\n align-items: center;\n width: 16px;\n height: 100%;\n margin-top: 0;\n margin-left: 19px; }\n .styles_autosuggest-input-icon__uhYGQ svg {\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin__ivlHi svg {\n fill: #4ea700;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_destination__y39VH svg {\n fill: #ec5188;\n width: 16px;\n height: 24px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_stop-route-station__FneXd svg, .styles_autosuggest-input-icon__uhYGQ.styles_favourite__sjGcX svg {\n fill: #888888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0px;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.styles_clear-input__Vx7B4 svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.styles_clear-input__Vx7B4:focus {\n background-color: transparent;\n color: inherit;\n /* First apply outline that is used in Edge and Firefox */\n outline: 1px dotted #212121;\n /* Then override outline for webkit browsers like Chrome, this has no effect on other browsers */\n outline: 5px auto -webkit-focus-ring-color; }\n button.styles_clear-input__Vx7B4:active {\n background-color: transparent;\n color: inherit; }\n button.styles_clear-input__Vx7B4:hover {\n background-color: transparent;\n color: inherit; }\n\n.styles_sr-only__ZOrQT:not(:focus):not(:active) {\n clip: rect(0 0 0 0);\n -webkit-clip-path: inset(50%);\n clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var _M={"fullscreen-root":"MobileSearch_fullscreen-root__WkMna","combobox-container":"MobileSearch_combobox-container__sRkYS","right-column":"MobileSearch_right-column__erBFe","combobox-icon":"MobileSearch_combobox-icon__xd0iZ","combobox-label":"MobileSearch_combobox-label__OqGpe",container:"MobileSearch_container__k-UVq",input:"MobileSearch_input__HbTUj","clear-input":"MobileSearch_clear-input__ILVwN",hasValue:"MobileSearch_hasValue__NYhZy",suggestion:"MobileSearch_suggestion__UBz5O",suggestionHighlighted:"MobileSearch_suggestionHighlighted__7ef5G",suggestionsContainerOpen:"MobileSearch_suggestionsContainerOpen__g7zkI",suggestionsList:"MobileSearch_suggestionsList__3pEzf","clear-search-history":"MobileSearch_clear-search-history__wblhz","mobile-modal-overlay":"MobileSearch_mobile-modal-overlay__f6Rl7","mobile-modal":"MobileSearch_mobile-modal__hNdM6","mobile-modal-content":"MobileSearch_mobile-modal-content__Yzz-V"};gM("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileSearch_fullscreen-root__WkMna {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileSearch_combobox-container__sRkYS {\n margin: 15px 10px 0;\n border: solid #888888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileSearch_combobox-container__sRkYS .MobileSearch_right-column__erBFe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileSearch_combobox-icon__xd0iZ {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileSearch_combobox-icon__xd0iZ svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileSearch_combobox-label__OqGpe {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333333; }\n\n.MobileSearch_container__k-UVq {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666666;\n -webkit-appearance: none;\n appearance: none; }\n .MobileSearch_container__k-UVq .MobileSearch_input__HbTUj:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileSearch_clear-input__ILVwN {\n display: flex;\n align-items: center;\n right: 0px;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileSearch_clear-input__ILVwN svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileSearch_clear-input__ILVwN:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:active {\n background-color: transparent;\n color: inherit; }\n button.MobileSearch_clear-input__ILVwN:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileSearch_hasValue__NYhZy {\n color: #333333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileSearch_suggestionHighlighted__7ef5G {\n background-color: #F4F4F5; }\n\n.MobileSearch_suggestionsContainerOpen__g7zkI {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileSearch_suggestionsContainerOpen__g7zkI .MobileSearch_suggestionsList__3pEzf {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileSearch_clear-search-history__wblhz {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n\n.MobileSearch_mobile-modal-overlay__f6Rl7 {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileSearch_mobile-modal__hNdM6 {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* stylelint-disable-next-line */\n /* stylelint-disable-next-line */ }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileSearch_mobile-modal__hNdM6.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileSearch_mobile-modal-content__Yzz-V {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #ffffff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var yM={"fullscreen-root":"MobileNoScroll_fullscreen-root__zQN50","combobox-container":"MobileNoScroll_combobox-container__RDEiT","right-column":"MobileNoScroll_right-column__0P3qe","combobox-icon":"MobileNoScroll_combobox-icon__LA0rD","combobox-label":"MobileNoScroll_combobox-label__-rYsj",container:"MobileNoScroll_container__CaIIv",input:"MobileNoScroll_input__Opft5","clear-input":"MobileNoScroll_clear-input__-4SQO",hasValue:"MobileNoScroll_hasValue__jR1iW",suggestion:"MobileNoScroll_suggestion__NAWcY",suggestionHighlighted:"MobileNoScroll_suggestionHighlighted__V0GuG",suggestionsContainerOpen:"MobileNoScroll_suggestionsContainerOpen__MRa5Y",suggestionsList:"MobileNoScroll_suggestionsList__NUpJE","clear-search-history":"MobileNoScroll_clear-search-history__Cjj-1","mobile-modal-overlay":"MobileNoScroll_mobile-modal-overlay__LbLie","mobile-modal":"MobileNoScroll_mobile-modal__-Rx-A","mobile-modal-content":"MobileNoScroll_mobile-modal-content__nfrCI"};gM("input[type='text'] {\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_fullscreen-root__zQN50 {\n display: flex;\n flex-direction: column;\n position: fixed;\n width: 100%;\n height: 100%;\n top: 0;\n left: 0;\n background: #fff;\n z-index: 1000; }\n\n.MobileNoScroll_combobox-container__RDEiT {\n margin: 15px 10px 0;\n border: solid #888888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 60px;\n justify-content: space-between; }\n .MobileNoScroll_combobox-container__RDEiT .MobileNoScroll_right-column__0P3qe {\n display: flex;\n flex-direction: column;\n width: 100%;\n height: 100%;\n padding-top: 9px; }\n\n.MobileNoScroll_combobox-icon__LA0rD {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 52px;\n border: 0;\n background: none; }\n .MobileNoScroll_combobox-icon__LA0rD svg {\n fill: #007ac9;\n width: 14px;\n height: 21px;\n transform: rotate(-180deg); }\n\n.MobileNoScroll_combobox-label__-rYsj {\n position: relative;\n top: -2px;\n font-size: 12px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.2px;\n color: #333333; }\n\n.MobileNoScroll_container__CaIIv {\n display: flex;\n align-items: center;\n width: 100%; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5 {\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n width: 100%;\n position: relative;\n padding-bottom: 7px;\n top: 2px;\n border: none;\n height: 26px;\n font-weight: normal;\n box-shadow: none;\n font-size: 16px;\n letter-spacing: -0.5px;\n color: #666666;\n -webkit-appearance: none;\n appearance: none; }\n .MobileNoScroll_container__CaIIv .MobileNoScroll_input__Opft5:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff; }\n\nbutton.MobileNoScroll_clear-input__-4SQO {\n display: flex;\n align-items: center;\n right: 0px;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0px;\n margin: 0px;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0px;\n cursor: pointer;\n font-family: inherit;\n background-color: transparent;\n transition: none; }\n button.MobileNoScroll_clear-input__-4SQO svg {\n fill: var(--color);\n width: 16px;\n height: 16px; }\n button.MobileNoScroll_clear-input__-4SQO:focus {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:active {\n background-color: transparent;\n color: inherit; }\n button.MobileNoScroll_clear-input__-4SQO:hover {\n background-color: transparent;\n color: inherit; }\n\n.MobileNoScroll_hasValue__jR1iW {\n color: #333333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333333;\n font-weight: 500;\n background: #fff;\n margin: 0;\n padding: 0; }\n\n.MobileNoScroll_suggestionHighlighted__V0GuG {\n background-color: #F4F4F5; }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n display: flex;\n position: absolute;\n margin-bottom: auto;\n z-index: 20;\n width: 100vw;\n max-height: calc(100% - 75px);\n height: 100%;\n top: 75px;\n left: 0;\n overflow-x: hidden;\n overflow-y: scroll; }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y .MobileNoScroll_suggestionsList__NUpJE {\n width: 100vw;\n list-style: none;\n padding-left: 0;\n margin: 0;\n background: #f4f4f5; }\n\n.MobileNoScroll_clear-search-history__Cjj-1 {\n display: flex;\n font-family: 'Gotham Rounded A', 'Gotham Rounded B', 'Roboto', Arial, Georgia, Serif;\n margin-top: auto;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 62px;\n background: #f4f4f5;\n color: var(--accessible-primary-color);\n font-size: 15px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.42px;\n border: none;\n border-top: 1px solid #ddd; }\n\n.MobileNoScroll_mobile-modal-overlay__LbLie {\n z-index: 9999;\n top: 0;\n left: 0;\n right: unset;\n bottom: unset;\n margin: 0;\n padding: 0;\n width: 100%;\n height: 100%;\n background-color: white;\n position: fixed; }\n\n.MobileNoScroll_mobile-modal__-Rx-A {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n /* stylelint-disable-next-line */\n /* stylelint-disable-next-line */ }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--after-open > div {\n transform: translateY(0); }\n .MobileNoScroll_mobile-modal__-Rx-A.ReactModal__Content--before-close > div {\n transform: translateY(10%); }\n\n.MobileNoScroll_mobile-modal-content__nfrCI {\n position: fixed;\n width: 100%;\n height: 100%;\n outline: none;\n background-color: #ffffff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n\n.MobileNoScroll_suggestionsContainerOpen__MRa5Y {\n -ms-overflow-style: none;\n /* Internet Explorer 10+ */\n scrollbar-width: none;\n /* Firefox */ }\n .MobileNoScroll_suggestionsContainerOpen__MRa5Y::-webkit-scrollbar {\n display: none;\n /* Safari and Chrome */ }\n");class SM extends m.default{constructor(M){super(M);const z=this;z.onSuggestionTouchMove=()=>{z.justSelectedSuggestion=!1,z.pressedSuggestion=null}}}const vM=({appElement:M,id:z,closeHandle:p,clearInput:O,value:o,suggestions:c,inputProps:A,fetchFunction:q,renderSuggestion:e,getSuggestionValue:n,ariaLabel:W,label:a,onSuggestionSelected:t,clearOldSearches:d,dialogHeaderText:i,dialogPrimaryButtonText:r,dialogSecondaryButtonText:s,clearInputButtonText:u,focusInput:R,color:f,hoverColor:l,accessiblePrimaryColor:L,searchOpen:N,fontWeights:X,showScroll:h})=>{var m;const g=h?_M:yM,T=`${z}-input`,_=`${z}-label`,[y,S]=b.useState(!1),v=B.default.useRef();b.useEffect((()=>{F.default.setAppElement(M)}),[]);const k=b.useCallback((()=>{p()})),E=(M,z)=>{"clear-search-history"===z.suggestion.type?S(!0):z.suggestion.properties.arrowClicked||t(M,z)},w=M=>{const z=M&&(M.key||M.which||M.keyCode)||"";return!(!z||![13," ","Spacebar"].concat([32,"Enter"]).includes(z))&&(M.preventDefault(),!0)},C=M=>"clear-search-history"===M.type?"":n(M),D=M=>"clear-search-history"===M.type?B.default.createElement("button",{type:"button",className:g["clear-search-history"]},M.labelId):e(M);return R&&null!==(m=v.current)&&void 0!==m&&m.input&&v.current.input.focus(),B.default.createElement(F.default,{isOpen:N,className:g["mobile-modal"],overlayClassName:g["mobile-modal-overlay"],onAfterClose:k,shouldCloseOnEsc:!0},B.default.createElement("div",{className:g["mobile-modal-content"],style:{"--color":`${f}`,"--accessible-primary-color":L,"--hover-color":`${l}`,"--font-weight-medium":X.medium}},B.default.createElement("div",{className:g["combobox-container"],htmlFor:T},B.default.createElement("button",{type:"button",className:g["combobox-icon"],onClick:()=>k(),onKeyDown:M=>w(M)&&k(),"aria-label":s,tabIndex:0},B.default.createElement(x.default,{img:"arrow"})),B.default.createElement("span",{className:g["right-column"]},B.default.createElement("span",{className:g["combobox-label"],id:_},a),B.default.createElement(SM,{alwaysRenderSuggestions:!0,id:z,suggestions:c,onSuggestionsFetchRequested:q,getSuggestionValue:C,renderSuggestion:D,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:Y({},A,{className:`${g.input} ${g[z]||""} ${A.value?g.hasValue:""}`,autoFocus:!0}),renderInputComponent:M=>B.default.createElement(B.default.Fragment,null,B.default.createElement("input",Object.assign({"aria-label":W,id:z},M)),o&&B.default.createElement("button",{type:"button",className:g["clear-input"],onClick:O,onKeyDown:M=>w(M)&&O(),"aria-label":u},B.default.createElement(x.default,{img:"close",color:f}))),theme:g,onSuggestionSelected:E,ref:v}))),B.default.createElement(H.default,{appElement:M,isModalOpen:y,handleClose:()=>S(!1),headerText:i,primaryButtonText:r,secondaryButtonText:s,primaryButtonOnClick:()=>{d(),S(!1)},secondaryButtonOnClick:()=>S(!1),color:f,hoverColor:l,fontWeights:X})))};"production"!==process.env.NODE_ENV&&(vM.propTypes={appElement:N.default.string.isRequired,id:N.default.string.isRequired,closeHandle:N.default.func.isRequired,clearInput:N.default.func.isRequired,value:N.default.string,clearInputButtonText:N.default.string.isRequired,suggestions:N.default.array.isRequired,inputProps:N.default.shape({onChange:N.default.func.isRequired,onBlur:N.default.func.isRequired,value:N.default.string.isRequired,placeholder:N.default.string.isRequired,className:N.default.string.isRequired}).isRequired,fetchFunction:N.default.func.isRequired,getSuggestionValue:N.default.func.isRequired,renderSuggestion:N.default.func.isRequired,onSuggestionSelected:N.default.func.isRequired,label:N.default.string.isRequired,clearOldSearches:N.default.func.isRequired,ariaLabel:N.default.string,dialogHeaderText:N.default.string,dialogPrimaryButtonText:N.default.string,dialogSecondaryButtonText:N.default.string,focusInput:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string.isRequired,searchOpen:N.default.bool.isRequired,fontWeights:N.default.shape({medium:N.default.number.isRequired}).isRequired,showScroll:N.default.bool});var kM,EM=rM((function(M,z){var b;"undefined"!=typeof self&&self,M.exports=(b=B.default,function(){var M={888:function(M,z,b){var p,O;O=void 0!==b.g?b.g:"undefined"!=typeof window?window:this,p=function(){return function(M){var z={ignore:"[data-scroll-ignore]",header:null,topOnEmptyHash:!0,speed:500,speedAsDuration:!1,durationMax:null,durationMin:null,clip:!0,offset:0,easing:"easeInOutCubic",customEasing:null,updateURL:!0,popstate:!0,emitEvents:!0},b=function(){var M={};return Array.prototype.forEach.call(arguments,(function(z){for(var b in z){if(!z.hasOwnProperty(b))return;M[b]=z[b]}})),M},p=function(M){"#"===M.charAt(0)&&(M=M.substr(1));for(var z,b=String(M),p=b.length,O=-1,o="",c=b.charCodeAt(0);++O<p;){if(0===(z=b.charCodeAt(O)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");o+=z>=1&&z<=31||127==z||0===O&&z>=48&&z<=57||1===O&&z>=48&&z<=57&&45===c?"\\"+z.toString(16)+" ":z>=128||45===z||95===z||z>=48&&z<=57||z>=65&&z<=90||z>=97&&z<=122?b.charAt(O):"\\"+b.charAt(O)}return"#"+o},O=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},o=function(z){return z?(b=z,parseInt(M.getComputedStyle(b).height,10)+z.offsetTop):0;var b},c=function(z,b,p){0===z&&document.body.focus(),p||(z.focus(),document.activeElement!==z&&(z.setAttribute("tabindex","-1"),z.focus(),z.style.outline="none"),M.scrollTo(0,b))},A=function(z,b,p,O){if(b.emitEvents&&"function"==typeof M.CustomEvent){var o=new CustomEvent(z,{bubbles:!0,detail:{anchor:p,toggle:O}});document.dispatchEvent(o)}};return function(q,e){var n,W,a,t,d={cancelScroll:function(M){cancelAnimationFrame(t),t=null,M||A("scrollCancel",n)},animateScroll:function(p,q,e){d.cancelScroll();var W=b(n||z,e||{}),i="[object Number]"===Object.prototype.toString.call(p),r=i||!p.tagName?null:p;if(i||r){var s=M.pageYOffset;W.header&&!a&&(a=document.querySelector(W.header));var u,R,f,l=o(a),L=i?p:function(z,b,p,o){var c=0;if(z.offsetParent)do{c+=z.offsetTop,z=z.offsetParent}while(z);return c=Math.max(c-b-p,0),o&&(c=Math.min(c,O()-M.innerHeight)),c}(r,l,parseInt("function"==typeof W.offset?W.offset(p,q):W.offset,10),W.clip),N=L-s,B=O(),X=0,h=function(M,z){var b=z.speedAsDuration?z.speed:Math.abs(M/1e3*z.speed);return z.durationMax&&b>z.durationMax?z.durationMax:z.durationMin&&b<z.durationMin?z.durationMin:parseInt(b,10)}(N,W),m=function(z){u||(u=z),X+=z-u,f=s+N*function(M,z){var b;return"easeInQuad"===M.easing&&(b=z*z),"easeOutQuad"===M.easing&&(b=z*(2-z)),"easeInOutQuad"===M.easing&&(b=z<.5?2*z*z:(4-2*z)*z-1),"easeInCubic"===M.easing&&(b=z*z*z),"easeOutCubic"===M.easing&&(b=--z*z*z+1),"easeInOutCubic"===M.easing&&(b=z<.5?4*z*z*z:(z-1)*(2*z-2)*(2*z-2)+1),"easeInQuart"===M.easing&&(b=z*z*z*z),"easeOutQuart"===M.easing&&(b=1- --z*z*z*z),"easeInOutQuart"===M.easing&&(b=z<.5?8*z*z*z*z:1-8*--z*z*z*z),"easeInQuint"===M.easing&&(b=z*z*z*z*z),"easeOutQuint"===M.easing&&(b=1+--z*z*z*z*z),"easeInOutQuint"===M.easing&&(b=z<.5?16*z*z*z*z*z:1+16*--z*z*z*z*z),M.customEasing&&(b=M.customEasing(z)),b||z}(W,R=(R=0===h?0:X/h)>1?1:R),M.scrollTo(0,Math.floor(f)),function(z,b){var O=M.pageYOffset;if(z==b||O==b||(s<b&&M.innerHeight+O)>=B)return d.cancelScroll(!0),c(p,b,i),A("scrollStop",W,p,q),u=null,t=null,!0}(f,L)||(t=M.requestAnimationFrame(m),u=z)};0===M.pageYOffset&&M.scrollTo(0,0),function(M,z,b){z||history.pushState&&b.updateURL&&history.pushState({smoothScroll:JSON.stringify(b),anchor:M.id},document.title,M===document.documentElement?"#top":"#"+M.id)}(p,i,W),"matchMedia"in M&&M.matchMedia("(prefers-reduced-motion)").matches?c(p,Math.floor(L),!1):(A("scrollStart",W,p,q),d.cancelScroll(!0),M.requestAnimationFrame(m))}}},i=function(z){if(!z.defaultPrevented&&!(0!==z.button||z.metaKey||z.ctrlKey||z.shiftKey)&&"closest"in z.target&&(W=z.target.closest(q))&&"a"===W.tagName.toLowerCase()&&!z.target.closest(n.ignore)&&W.hostname===M.location.hostname&&W.pathname===M.location.pathname&&/#/.test(W.href)){var b,O;try{b=p(decodeURIComponent(W.hash))}catch(M){b=p(W.hash)}if("#"===b){if(!n.topOnEmptyHash)return;O=document.documentElement}else O=document.querySelector(b);(O=O||"#top"!==b?O:document.documentElement)&&(z.preventDefault(),function(z){if(history.replaceState&&z.updateURL&&!history.state){var b=M.location.hash;b=b||"",history.replaceState({smoothScroll:JSON.stringify(z),anchor:b||M.pageYOffset},document.title,b||M.location.href)}}(n),d.animateScroll(O,W))}},r=function(M){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(n)){var z=history.state.anchor;"string"==typeof z&&z&&!(z=document.querySelector(p(history.state.anchor)))||d.animateScroll(z,null,{updateURL:!1})}};return d.destroy=function(){n&&(document.removeEventListener("click",i,!1),M.removeEventListener("popstate",r,!1),d.cancelScroll(),n=null,W=null,a=null,t=null)},function(){if(!("querySelector"in document&&"addEventListener"in M&&"requestAnimationFrame"in M&&"closest"in M.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";d.destroy(),n=b(z,e||{}),a=n.header?document.querySelector(n.header):null,document.addEventListener("click",i,!1),n.updateURL&&n.popstate&&M.addEventListener("popstate",r,!1)}(),d}}(O)}.apply(z,[]),void 0===p||(M.exports=p)},253:function(M,z,b){var p=this&&this.__createBinding||(Object.create?function(M,z,b,p){void 0===p&&(p=b),Object.defineProperty(M,p,{enumerable:!0,get:function(){return z[b]}})}:function(M,z,b,p){void 0===p&&(p=b),M[p]=z[b]}),O=this&&this.__exportStar||function(M,z){for(var b in M)"default"===b||Object.prototype.hasOwnProperty.call(z,b)||p(z,M,b)};Object.defineProperty(z,"__esModule",{value:!0}),O(b(720),z),O(b(646),z),O(b(87),z),O(b(641),z),O(b(91),z),O(b(183),z),O(b(376),z),O(b(45),z),O(b(840),z),O(b(586),z),O(b(219),z),O(b(510),z),O(b(333),z),O(b(23),z),O(b(348),z),O(b(197),z)},87:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useArrowNavigation=void 0;var p=b(156);z.useArrowNavigation=function(M){var z=M.listItems,b=M.onArrowUpOrDown,O=(0,p.useState)(0),o=O[0],c=O[1],A=(0,p.useCallback)((function(M){c(M)}),[z]),q=function(M){var p=M.key;if(null==z?void 0:z.length)if("ArrowUp"===p)b&&b(),M.preventDefault(),A(o>0?o-1:z.length-1);else{if("ArrowDown"!==p)return;b&&b(),M.preventDefault(),o<z.length-1?A(o+1):A(0)}};return(0,p.useEffect)((function(){return window.addEventListener("keydown",q),function(){return window.removeEventListener("keydown",q)}})),(0,p.useEffect)((function(){A(0)}),[z]),{selectedIndex:o}}},333:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useDebounce=void 0;var p=b(156);z.useDebounce=function(M,z){void 0===z&&(z=300);var b=(0,p.useState)(M),O=b[0],o=b[1];return(0,p.useEffect)((function(){var b=setTimeout((function(){o(M)}),z);return function(){clearTimeout(b)}}),[M,z]),O}},23:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useElementSize=void 0;var p=b(156);z.useElementSize=function(){var M,z,b=(0,p.useRef)(null);return[b,{width:null===(M=null==b?void 0:b.current)||void 0===M?void 0:M.clientWidth,height:null===(z=null==b?void 0:b.current)||void 0===z?void 0:z.clientHeight}]},z.default=z.useElementSize},641:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIntersectionObserver=void 0;var p=b(156);z.useIntersectionObserver=function(M){var z=(0,p.useRef)(null),b=(0,p.useState)(!1),O=b[0],o=b[1],c=function(M){var z=M[0];o(z.isIntersecting)};return(0,p.useEffect)((function(){if(window&&window.IntersectionObserver){var b=new IntersectionObserver(c,M),p=z.current;return z.current&&b.observe(z.current),function(){p&&b.unobserve(p)}}o(!1)}),[z,M]),{containerRef:z,isVisible:O}},z.default=z.useIntersectionObserver},91:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsBreakpoint=void 0;var p=b(156),O=b(253),o={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};z.useIsBreakpoint=function(M){var z="string"==typeof M?o[M]:M,b=(0,p.useState)(null),c=b[0],A=b[1],q=(0,p.useCallback)((function(){A(window.innerWidth)}),[]);return(0,p.useEffect)((function(){q()}),[]),(0,O.useOnResize)(q),c>=z},z.default=z.useIsBreakpoint},45:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0});var p=b(156),O={"crazy-egg":"crazyegg.com",youtube:"youtube.com"},o={PrivacyManagerAPI:{action:"getConsentDecision",timestamp:(new Date).getTime(),self:"hsl.fi"}};z.default=function(M){var z=(0,p.useState)(!1),b=z[0],c=z[1],A=function(){var z,b=null===(z=window.truste)||void 0===z?void 0:z.cma;if(b){var p=b.callApi("getConsent","hsl.fi",O[M],"hsl.fi");c("approved"===(null==p?void 0:p.consent))}else console.error("TrustArc api not found, returning isCookieEnabled as false")},q=function(M){if("string"==typeof(null==M?void 0:M.origin)&&M.origin.includes("trustarc")&&"string"==typeof(null==M?void 0:M.data))try{var z=JSON.parse(null==M?void 0:M.data);"submit_preferences"===(null==z?void 0:z.message)&&A()}catch(M){return}};return(0,p.useEffect)((function(){A()}),[M]),(0,p.useEffect)((function(){setTimeout(A,0),setTimeout(A,100),setTimeout(A,1e3)}),[]),(0,p.useEffect)((function(){return window.top.postMessage(JSON.stringify(o),"*"),window.addEventListener("message",q,!1),function(){return window.removeEventListener("message",q)}}),[]),b}},376:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsLoadingAfterError=void 0;var p=b(156);z.useIsLoadingAfterError=function(M,z){var b=(0,p.useState)(z),O=b[0],o=b[1];return(0,p.useEffect)((function(){M||o(z)}),[M,z]),M&&O}},348:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsMobile=void 0;var p=b(91);z.useIsMobile=function(){return!(0,p.useIsBreakpoint)("tablet")},z.default=z.useIsMobile},183:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useIsomorphicLayoutEffect=void 0;var p=b(156);z.useIsomorphicLayoutEffect="undefined"!=typeof window?p.useLayoutEffect:p.useEffect,z.default=z.useIsomorphicLayoutEffect},586:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOnLoseFocusWithin=void 0;var p=b(156);z.useOnLoseFocusWithin=function(M){var z=M.ref,b=M.callback,O=M.watch;(0,p.useEffect)((function(){var M=function(){var M;if(O)return(null===(M=z.current)||void 0===M?void 0:M.matches(":focus-within"))?void 0:b()};return document.addEventListener("keyup",M),function(){return document.removeEventListener("keyup",M)}}),[b,z,O])},z.default=z.useOnLoseFocusWithin},197:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOnResize=void 0;var p=b(156);z.useOnResize=function(M){(0,p.useEffect)((function(){var z=function(){M(window.innerWidth)};return window.addEventListener("resize",z,{passive:!0}),function(){return window.removeEventListener("resize",z)}}),[])},z.default=z.useOnResize},510:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOnWindowFocus=void 0;var p=b(156);z.useOnWindowFocus=function(M){(0,p.useEffect)((function(){var z=function(){M&&"visible"===document.visibilityState&&M()};return window.addEventListener("visibilitychange",z,!1),function(){return window.removeEventListener("visibilitychange",z)}}),[M])}},720:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useOutsideReacter=void 0;var p=b(156);z.useOutsideReacter=function(M,z){function b(b){M.current&&!M.current.contains(b.target)&&z()}(0,p.useEffect)((function(){return document.addEventListener("mousedown",b),function(){document.removeEventListener("mousedown",b)}}))}},219:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0});var p=b(156);z.default=function(){var M=(0,p.useRef)(null);return(0,p.useEffect)((function(){M.current&&(M.current(),M.current=null)})),function(z){M.current=z}}},646:function(M,z,b){Object.defineProperty(z,"__esModule",{value:!0}),z.useScrollLock=void 0;var p=b(156);z.useScrollLock=function(){return{lock:(0,p.useCallback)((function(){var M=window.scrollY+"px",z=document.body;z.style.position="fixed",z.style.top="-"+M}),[]),unlock:(0,p.useCallback)((function(){var M=document.body,z=M.style.top,b=-1*parseInt(z||"0");M.style.position="",M.style.top="",b&&window.scrollTo(0,-1*parseInt(z||"0"))}),[])}}},840:function(M,z,b){var p=this&&this.__importDefault||function(M){return M&&M.__esModule?M:{default:M}};Object.defineProperty(z,"__esModule",{value:!0}),z.useSmoothScroll=void 0;var O=b(156),o=p(b(888));z.useSmoothScroll=function(M){var z=(0,O.useRef)(null),b=M.ref,p=M.offset,c=void 0===p?0:p,A=M.speed,q=void 0===A?500:A;return(0,O.useEffect)((function(){z.current=new o.default(null,{speed:q,speedAsDuration:!0})}),[]),(0,O.useCallback)((function(){b&&z.current&&z.current.animateScroll(b.current,null,{offset:function(){return c},updateURL:!1})}),[c,b])}},156:function(M){M.exports=b}},z={};function p(b){var O=z[b];if(void 0!==O)return O.exports;var o=z[b]={exports:{}};return M[b].call(o.exports,o,o.exports,p),o.exports}return p.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(M){if("object"==typeof window)return window}}(),p(253)}())})),wM=(kM=EM)&&kM.__esModule&&Object.prototype.hasOwnProperty.call(kM,"default")?kM.default:kM;hM.locale("en"),X.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});"production"!==process.env.NODE_ENV&&N.default.node;const CM=M=>{if(!M||!M.GTFS.platform)return;const{modes:z,platform:b}=M.GTFS;return[z&&"RAIL"===z[0]?X.default.t("track"):X.default.t("platform"),b]};function DM(M){if("FutureRoute"!==M.type){if("SelectFromMap"===M.type)return["",X.default.t("select-from-map")];if("CurrentLocation"===M.type)return["",X.default.t("use-own-position")];if("SelectFromOwnLocations"===M.type)return["",X.default.t("select-from-own-locations")];let b,[p,O]=zM(M.properties,!0);if(M.properties.layer.toLowerCase().includes("bikerental")||M.properties.layer.toLowerCase().includes("bikestation")){b=X.default.t("bikerentalstation");return[b,p,void 0,M.properties.labelId]}if("bikepark"===M.properties.layer)return b=X.default.t("bikepark"),[b,p,void 0,void 0];if("carpark"===M.properties.layer)return b=X.default.t("carpark"),[b,p,void 0,void 0];if(M.properties.mode)b=X.default.t(M.properties.mode.toLowerCase().replace("favourite",""));else{const z=M.properties.layer.replace("route-","").toLowerCase().replace("favourite","");b=X.default.t(z)}if(M.properties.id&&("stop"===M.properties.layer||"station"===M.properties.layer)){var z;const o=MM(M.properties),c=null===(z=M.properties.addendum)||void 0===z?void 0:z.GTFS.modes,A=CM(M.properties.addendum);return[b,Z(p,o),O,o,c,A]}if("favouriteStop"===M.properties.layer||"favouriteStation"===M.properties.layer){const{address:z,code:o}=M.properties;return[b,z?Z(z.split(",")[0],o):p,O,o,void 0,CM(M.properties.addendum)]}return[b,p,O]}const{origin:b,destination:p}=M.properties,O=b.locality?`, ${b.locality} foobar`:"",o=p.locality?`, ${p.locality}`:"",c=b.name,A=p.name;return[X.default.t("future-route"),`${X.default.t("origin")} ${c}${O} ${X.default.t("destination")} ${A}${o}`,M.translatedText]}function PM(M){const z=hM.unix(M.properties.time);let b=M.properties.arriveBy?X.default.t("arrival"):X.default.t("departure");return b=z.isSame(hM(),"day")?`${b} ${X.default.t("today-at")}`:z.isSame(hM().add(1,"day"),"day")?`${b} ${X.default.t("tomorrow-at")}`:`${b} ${z.format("dd D.M.")}`,b=`${b} ${hM(z).format("HH:mm")}`,b}class xM extends B.default.Component{constructor(M){super(M),this.componentDidUpdate=()=>{X.default.language!==this.props.lang&&X.default.changeLanguage(this.props.lang)},this.UNSAFE_componentWillReceiveProps=M=>{M.value===this.state.value||this.state.editing||this.setState({value:M.value})},this.onChange=(M,{newValue:z,method:b})=>{const p={value:this.fInput||z||"",renderMobileSearch:this.props.isMobile};if(this.fInput=null,this.state.editing){if("enter"!==b||this.state.valid){if(this.state.typingTimer&&clearTimeout(this.state.typingTimer),"type"===b){const M=setTimeout((()=>{this.setState({typing:!1})}),1e3);p.typingTimer=M,p.typing=!0}this.setState(p)}}else p.editing=!0,this.setState(p,(()=>this.fetchFunction({value:z||""})))},this.onBlur=()=>{this.state.renderMobileSearch||(this.state.editing&&this.input.focus(),this.setState({editing:!1,renderMobileSearch:!1,value:this.props.value}))},this.onSelected=(M,z)=>{if(this.state.valid){if("SelectFromOwnLocations"===z.suggestion.type)return void this.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:z.suggestion.type,value:""},(()=>{this.fetchFunction({value:""})}));if("back"===z.suggestion.type||"FutureRoute"===z.suggestion.type)return void this.setState({sources:this.props.sources,ownPlaces:!1,pendingSelection:z.suggestion.type,suggestionIndex:z.suggestionIndex},(()=>{this.fetchFunction({value:""})}));this.selectionDone=!0,this.setState({editing:!1,value:z.suggestionValue},(()=>{this.input.blur(),this.props.handleViaPoints?this.props.handleViaPoints(z.suggestion,z.suggestionIndex):this.props.onSelect(z.suggestion,this.props.id),this.setState({renderMobileSearch:!1,sources:this.props.sources,ownPlaces:!1,suggestions:[]},(()=>{this.selectionDone=!1})),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange(),this.props.isMobile&&this.closeMobileSearch()}))}else this.setState((M=>({pendingSelection:M.value})),(()=>this.checkPendingSelection()))},this.onSuggestionsClearRequested=()=>{this.setState({suggestions:[],sources:this.props.sources,ownPlaces:!1,editing:!1})},this.getSuggestionValue=M=>"SelectFromOwnLocations"===M.type||"back"===M.type?"":function(M){const z=zM(M,!0);switch(M.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return z[1]||z[0];case"favouriteBikeRentalStation":case"favouritePlace":return z[0];default:return z.length>1&&""!==z[1]?z.join(", "):z[1]||z[0]}}(M.properties),this.checkPendingSelection=()=>{"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection||!this.state.valid?this.state.pendingSelection&&this.state.valid&&this.setState({pendingSelection:null,editing:!1},(()=>{this.state.suggestions.length&&(this.input.blur(),this.props.onSelect(this.state.suggestions[this.state.suggestionIndex],this.props.id),this.props.isMobile&&this.closeMobileSearch(),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange())})):this.setState({pendingSelection:null,editing:!0},(()=>{this.input.focus()}))},this.clearButton=()=>B.default.createElement("button",{type:"button",className:TM["clear-input"],onClick:this.clearInput,"aria-label":X.default.t("clear-button-label")},B.default.createElement(x.default,{img:"close",color:this.props.color})),this.fetchFunction=({value:M,cleanExecuted:z})=>this.setState({valid:!1,cleanExecuted:z||!1},(()=>{if(this.selectionDone)return;const z=I.default(this.props.targets)||this.props.targets.includes("Locations");let b;this.state.ownPlaces?(b=["Locations"],(I.default(this.props.targets)||this.props.targets.includes("Stops"))&&b.push("Stops"),(I.default(this.props.targets)||this.props.targets.includes("BikeRentalStations"))&&b.push("BikeRentalStations")):I.default(this.props.targets)||(b=[...this.props.targets],z&&!this.props.isMobile&&(I.default(this.props.sources)||this.props.sources.includes("Favourite"))&&b.push("SelectFromOwnLocations"));((M,z,b,p,O,o,c,A,q,e)=>{A(null),dM(M,z,b,p,O,o,c,A,q,e)})(b,this.state.sources&&this.state.sources.filter((M=>!(z&&"Favourite"===M&&!this.state.ownPlaces&&!this.props.isMobile))),this.props.transportMode,this.props.searchContext,this.props.filterResults,this.props.geocodingSize,{input:M||""},(z=>{if(null==z)return;const b=(z.results||[]).filter((M=>"FutureRoute"!==M.type||"FutureRoute"===M.type&&M.properties.time>hM().unix())).map((M=>{if("CurrentLocation"===M.type||"SelectFromMap"===M.type||"SelectFromOwnLocations"===M.type||"back"===M.type){const z=Y({},M);return z.properties.labelId=X.default.t(M.properties.labelId),z}return M}));M!==this.state.value&&M!==this.state.pendingSelection&&"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection&&"FutureRoute"!==this.state.pendingSelection||this.setState({valid:!0,suggestions:b},(()=>this.checkPendingSelection()))}),this.props.pathOpts,this.props.refPoint)})),this.clearInput=()=>{const M={editing:!0,value:"",sources:this.props.sources,ownPlaces:!1,renderMobileSearch:this.props.isMobile};this.setState(M,(()=>this.fetchFunction({value:"",cleanExecuted:!0}))),this.props.onClear&&this.props.onClear(this.props.id),this.input.focus()},this.inputClicked=M=>{if(this.input.focus(),this.clearLocationText(),this.props.isMobile&&this.props.lock(),this.state.editing)this.props.isMobile&&!this.state.renderMobileSearch&&this.setState({renderMobileSearch:!0});else{const z={editing:!0,pendingSelection:null,renderMobileSearch:this.props.isMobile},b={editing:!0,pendingSelection:null,value:M};this.state.suggestions.length?(this.fetchFunction({value:this.state.value}),this.setState(z)):"object"!=typeof M&&M?this.setState(b,(()=>this.fetchFunction({value:M}))):this.setState(z,(()=>this.fetchFunction({value:this.state.value})))}},this.storeInputReference=M=>{null!==M&&(this.input=M.input,this.props.storeRef&&this.props.storeRef(M.input))},this.fillInput=M=>{this.fInput=M.properties.name;const z={editing:!0,value:M.properties.name,checkPendingSelection:M,valid:!0};this.setState(z),this.fetchFunction({value:M.properties.name}),this.input.focus()},this.renderItem=M=>{const z="FutureRoute"===M.type?Y({},M,{translatedText:PM(M)}):M,b=DM(M);return B.default.createElement(P.default,{item:z,content:b,loading:!this.state.valid,isMobile:this.props.isMobile,ariaFavouriteString:X.default.t("favourite"),color:this.props.color,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fillInput:this.fillInput,fontWeights:this.props.fontWeights,getAutoSuggestIcons:this.props.getAutoSuggestIcons,modeIconColors:this.props.modeIconColors,modeSet:this.props.modeSet})},this.closeMobileSearch=()=>{this.props.unlock(),this.setState({renderMobileSearch:!1,value:this.props.value},(()=>{window.scrollTo(0,this.state.scrollY),this.onSuggestionsClearRequested()}))},this.keyDown=M=>{if(this.selectionDone)return;const z=M.key;if("Escape"===z&&this.setState({editing:!1}),this.state.editing)return"Enter"===z&&""!==this.state.value&&this.setState({pendingSelection:!0},(()=>{this.fetchFunction({value:this.state.value})})),void this.inputClicked();if("Enter"!==z&&"ArrowDown"!==z||""!==this.state.value){if("ArrowDown"===z&&""!==this.state.value){const M={editing:!0,value:this.state.value};this.setState(M,(()=>this.fetchFunction({value:this.state.value})))}this.state.editing||this.setState({editing:!0}),"Tab"===z&&this.onBlur()}else this.clearInput()},this.suggestionAsAriaContent=()=>{let M=[];const z=this.state.suggestions[0];return z&&(z.type&&z.type.includes("Favourite")&&M.push(X.default.t("favourite")),M=M.concat(DM(this.state.suggestions[0]))),[...new Set(M)].join(" - ")},this.clearOldSearches=()=>{const{context:M,clearOldSearches:z,clearFutureRoutes:b}=this.props.searchContext;M&&z&&(z(M),b&&b(M),this.fetchFunction({value:this.state.value}))},this.isOriginDestinationOrViapoint=()=>"origin"===this.props.id||"destination"===this.props.id||"via-point"===this.props.id||"origin-stop-near-you"===this.props.id,this.clearLocationText=()=>{["Valittu sijainti","Nykyinen sijaintisi","Current position","Selected location","Vald position","Använd min position","Min position","Käytä nykyistä sijaintia","Use current location","Your current location"].includes(this.state.value)&&this.clearInput()},this.onFocus=()=>{this.clearLocationText();const M=window.pageYOffset;return this.setState({scrollY:M})},hM.tz.setDefault(M.timeZone),hM.locale(M.lang),this.state={value:M.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:M.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(mM).forEach((M=>{X.default.addResourceBundle(M,"translation",mM[M])}))}shouldComponentUpdate(M,z){return!k.default(z,this.state)||!k.default(M,this.props)}render(){X.default.language!==this.props.lang&&X.default.changeLanguage(this.props.lang);const{value:M,suggestions:z,renderMobileSearch:b,cleanExecuted:p}=this.state,O={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:X.default.t(this.props.placeholder),value:M,onChange:this.onChange,onBlur:this.onBlur,className:`${TM.input} ${this.props.isMobile&&this.props.transportMode?TM.thin:""} ${TM[this.props.id]||""} ${this.state.value?TM.hasValue:""} ${this.props.inputClassName}`,onKeyDown:this.keyDown,required:this.props.required},o=this.props.id.replace("searchfield-","");let c=this.props.ariaLabel||X.default.t(o);c=c.replace("searchfield-","");const A=this.props.required?`${X.default.t("required")}.`:"",q=this.props.isMobile?X.default.t("search-autosuggest-label-mobile"):X.default.t("search-autosuggest-label-desktop"),e=X.default.t("search-autosuggest-len",{count:z.length}),n=()=>this.suggestionAsAriaContent()||this.props.value?X.default.t("search-current-suggestion",{selection:this.suggestionAsAriaContent()||this.props.value}):"";return B.default.createElement(B.default.Fragment,null,B.default.createElement("span",{className:TM["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${e} ${n()}`),this.props.isMobile&&B.default.createElement(vM,{searchOpen:b,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[...z,{type:"clear-search-history",labelId:X.default.t("clear-search-history")}],inputProps:Y({},O,{placeholder:this.isOriginDestinationOrViapoint()?X.default.t("address-place-or-business"):O.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:A.concat(" ").concat(c).concat(" ").concat(n()),label:this.props.mobileLabel?this.props.mobileLabel:X.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:X.default.t("delete-old-searches-header"),dialogPrimaryButtonText:X.default.t("delete"),dialogSecondaryButtonText:X.default.t("cancel"),clearInputButtonText:X.default.t("clear-button-label"),focusInput:p,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!b&&B.default.createElement("div",{className:h.default(TM["autosuggest-input-container"],TM[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&B.default.createElement("div",{className:h.default(TM["autosuggest-input-icon"],TM[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`)},B.default.createElement(x.default,{img:`${this.props.icon}`})),B.default.createElement(m.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:z,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:this.getSuggestionValue,renderSuggestion:this.renderItem,inputProps:Y({},O,{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:TM,renderInputComponent:M=>B.default.createElement(B.default.Fragment,null,B.default.createElement("label",{className:TM["sr-only"],htmlFor:this.props.id},n().concat(" ").concat(A).concat(" ").concat(c).concat(" ").concat(q)),B.default.createElement("input",Object.assign({"aria-label":n().concat(" ").concat(A).concat(" ").concat(c).concat(" ").concat(q),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},M)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}xM.defaultProps={autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,lang:"fi",sources:[],isMobile:!1,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},mobileLabel:void 0,inputClassName:"",translatedPlaceholder:void 0,fontWeights:{medium:500},modeIconColors:{"mode-bus":"#007ac9","mode-rail":"#8c4799","mode-tram":"#008151","mode-metro":"#ed8c00","mode-ferry":"#007A97","mode-citybike":"#f2b62d","mode-funicular":"#ff00ff"},required:!1,modeSet:void 0,showScroll:!1,refPoint:{}},"production"!==process.env.NODE_ENV&&(xM.propTypes={appElement:N.default.string.isRequired,autoFocus:N.default.bool,className:N.default.string,icon:N.default.string,id:N.default.string.isRequired,placeholder:N.default.string.isRequired,translatedPlaceholder:N.default.string,value:N.default.string,searchContext:N.default.any.isRequired,ariaLabel:N.default.string,onSelect:N.default.func,transportMode:N.default.string,filterResults:N.default.func,geocodingSize:N.default.number,onClear:N.default.func,storeRef:N.default.func,handleViaPoints:N.default.func,focusChange:N.default.func,lang:N.default.string,sources:N.default.arrayOf(N.default.string),targets:N.default.arrayOf(N.default.string),isMobile:N.default.bool,color:N.default.string,hoverColor:N.default.string,accessiblePrimaryColor:N.default.string,timeZone:N.default.string,pathOpts:N.default.shape({routesPrefix:N.default.string,stopsPrefix:N.default.string}),mobileLabel:N.default.string,lock:N.default.func.isRequired,unlock:N.default.func.isRequired,refPoint:N.default.shape({address:N.default.string,lat:N.default.number,lon:N.default.number}),inputClassName:N.default.string,fontWeights:N.default.shape({medium:N.default.number}),modeIconColors:N.default.object,getAutoSuggestIcons:N.default.object,required:N.default.bool,modeSet:N.default.string,showScroll:N.default.bool,isEmbedded:N.default.bool});const IM=(FM=xM,M=>{const{lock:z,unlock:b}=wM.useScrollLock();return B.default.createElement(FM,Object.assign({lock:z,unlock:b},M))});var FM;M.default=IM,Object.defineProperty(M,"__esModule",{value:!0})}));
14
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50LXRpbWV6b25lL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vYmlsZVNlYXJjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsIi8qKlxuICogIGFjY2VwdCBlcXVhbGl0eSBvZiBub24gbnVsbGlzaCB2YWx1ZXNcbiAqXG4gKiBAbmFtZSB0cnVFcVxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHZhbDEgRmlyc3QgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSBwYXJhbTIgU2Vjb25kIHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwudHJ1RXEoJzInLCAnMicpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cnVFcSh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiB2YWwxICYmIHZhbDIgJiYgdmFsMSA9PT0gdmFsMjtcbn1cbiIsImltcG9ydCB0cnVFcSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxJztcbi8qKlxuICogQ2hlY2tzIHRoYXQgaXMgaXRlbXMgZHVwbGljYXRlXG4gKlxuICogQG5hbWUgaXNEdXBsaWNhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMSBPYmplY3QgY29udGFpbmluZyBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIHtcbiAqICBwcm9wZXJ0aWVzIHtcbiAqICAgICAgZ3Rmc0lkOiBTdHJpbmdcbiAqICAgICAgZ2lkOiBTdHJpbmcgZnJvbSBnZW9jb2RlclxuICogICAgICBuYW1lOiBTdHJpbmdcbiAqICAgICAgbGFiZWw6IFN0cmluZ1xuICogICAgICAgYWRkcmVzczogU3RyaW5nXG4gKiAgICAgIGdlb21ldHJ5IHtcbiAqICAgICAgICAgY29vcmRpbmF0ZXMgW051bWJlciBsYXQsIE51bWJlciBsb25dXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTIgT2JqZWN0IHdpdGggc2FtZSBhdHRyaWJ1dGVzIGFzIGl0ZW0xXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuaXNEdXBsaWNhdGUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxpdHl9Ly8ke2QxLm5hbWV9Ly8ke2QxLmxvY2FsaXR5fWA7XG4gICAgY29uc3QgbmFtZTIgPSBgJHtvMi5uYW1lfS8vJHtvMi5sb2NhbGl0eX0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxpdHl9YDtcblxuICAgIHJldHVybiBuYW1lMSA9PT0gbmFtZTI7XG4gIH1cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgKChwcm9wczEubGF5ZXIgPT09ICdiaWtlUmVudGFsU3RhdGlvbicgfHxcbiAgICAgIHByb3BzMS5sYXllciA9PT0gJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJykgJiZcbiAgICAgIChwcm9wczIubGF5ZXIgPT09ICdiaWtlUmVudGFsU3RhdGlvbicgfHxcbiAgICAgICAgcHJvcHMyLmxheWVyID09PSAnZmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb24nKSkgfHxcbiAgICAocHJvcHMxLmxheWVyID09PSAnYmlrZXN0YXRpb24nICYmIHByb3BzMi5sYXllciA9PT0gJ2Jpa2VzdGF0aW9uJylcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5sYWJlbElkID09PSBwcm9wczIubGFiZWxJZDtcbiAgfVxuICBpZiAocHJvcHMxLmd0ZnNJZCAmJiBwcm9wczIuZ3Rmc0lkKSB7XG4gICAgcmV0dXJuIHByb3BzMS5ndGZzSWQgPT09IHByb3BzMi5ndGZzSWQ7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmdpZCAmJiBwcm9wczIuZ2lkLmluY2x1ZGVzKHByb3BzMS5ndGZzSWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHByb3BzMi5ndGZzSWQgJiYgcHJvcHMxLmdpZCAmJiBwcm9wczEuZ2lkLmluY2x1ZGVzKHByb3BzMi5ndGZzSWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKFxuICAgIChwcm9wczEubGF5ZXIgPT09ICdzdG9wJyB8fCBwcm9wczEubGF5ZXIgPT09ICdzdGF0aW9uJykgJiZcbiAgICAocHJvcHMyLmxheWVyID09PSAnc3RvcCcgfHwgcHJvcHMyLmxheWVyID09PSAnc3RhdGlvbicpICYmXG4gICAgcHJvcHMxLmdpZCAmJlxuICAgIHByb3BzMi5naWRcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5naWQgPT09IHByb3BzMi5naWQ7XG4gIH1cblxuICBjb25zdCBwMSA9IGl0ZW0xICYmIGl0ZW0xLmdlb21ldHJ5ID8gaXRlbTEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHAyID0gaXRlbTIgJiYgaXRlbTIuZ2VvbWV0cnkgPyBpdGVtMi5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICAvLyBib3RoIGhhdmUgZ2VvbWV0cnlcbiAgICBpZiAoTWF0aC5hYnMocDFbMF0gLSBwMlswXSkgPCAxZS02ICYmIE1hdGguYWJzKHAxWzFdIC0gcDJbMV0pIDwgMWUtNikge1xuICAgICAgLy8gbG9jYXRpb24gbWF0Y2ggaXMgbm90IGVub3VnaC4gUmVxdWlyZSBhIGNvbW1vbiBwcm9wZXJ0eVxuICAgICAgaWYgKFxuICAgICAgICB0cnVFcShwcm9wczEubmFtZSwgcHJvcHMyLm5hbWUpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmFkZHJlc3MpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmFkZHJlc3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNEdXBsaWNhdGUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZSc7XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHN0ciA9PiB7XG4gIGlmICghaXNTdHJpbmcoc3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRnV0dXJlUm91dGU6ICdmdXR1cmVSb3V0ZScsXG4gIFN0YXRpb246ICdzdGF0aW9uJyxcbiAgU2VsZWN0RnJvbU1hcDogJ3NlbGVjdEZyb21NYXAnLFxuICBTZWxlY3RGcm9tT3duTG9jYXRpb25zOiAnb3duTG9jYXRpb25zJyxcbiAgU3RvcDogJ3N0b3AnLFxuICBTdHJlZXQ6ICdzdHJlZXQnLFxuICBWZW51ZTogJ3ZlbnVlJyxcbiAgQmlrZVJlbnRhbFN0YXRpb246ICdiaWtlc3RhdGlvbicsXG4gIENhclBhcms6ICdjYXJwYXJrJyxcbiAgQmlrZVBhcms6ICdiaWtlcGFyaycsXG59O1xuZXhwb3J0IGNvbnN0IGlzU3RvcCA9ICh7IGxheWVyLCB0eXBlIH0pID0+XG4gIGxheWVyID09PSAnc3RvcCcgfHxcbiAgbGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICB0eXBlID09PSAnc3RvcCcgfHxcbiAgdHlwZSA9PT0gJ2Zhdm91cml0ZVN0b3AnO1xuXG5jb25zdCBERUZBVUxUX1JPVVRFU19QUkVGSVggPSAnbGluamF0JztcbmNvbnN0IERFRkFVTFRfU1RPUFNfUFJFRklYID0gJ3B5c2FraXQnO1xuXG5leHBvcnQgY29uc3QgbWFwUm91dGUgPSAoaXRlbSwgcGF0aE9wdHMpID0+IHtcbiAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRzID0gcGF0aE9wdHMgfHwge307XG5cbiAgY29uc3Qgcm91dGVzUHJlZml4ID0gb3B0cy5yb3V0ZXNQcmVmaXggfHwgREVGQVVMVF9ST1VURVNfUFJFRklYO1xuICBjb25zdCBzdG9wc1ByZWZpeCA9IG9wdHMuc3RvcHNQcmVmaXggfHwgREVGQVVMVF9TVE9QU19QUkVGSVg7XG5cbiAgY29uc3QgbGluayA9IGAvJHtyb3V0ZXNQcmVmaXh9LyR7aXRlbS5ndGZzSWR9LyR7c3RvcHNQcmVmaXh9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUm91dGUnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBsYXllcjogYHJvdXRlLSR7aXRlbS5tb2RlfWAsXG4gICAgICBsaW5rLFxuICAgIH0sXG4gICAgZ2VvbWV0cnk6IHtcbiAgICAgIGNvb3JkaW5hdGVzOiBudWxsLFxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggdGVybSBhZ2FpbnMgdGhlIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllc1xuICogZm9yIGEgZ2VvY29kaW5nIHJlc3VsdC4gVGhlIGJlc3QgbWF0Y2ggd2lsbCBiZSByZXR1cm5lZCAobWluOiAwLCBtYXg6IDEuNSkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6ZWRUZXJtIHRoZSBub3JtYWxpemVkIHNlYXJjaCB0ZXJtLlxuICogQHBhcmFtIHsqfSByZXN1bHRQcm9wZXJ0aWVzIHRoZSBnZW9jb2RpbmcgcmVzdWx0J3MgcHJvcGVydHkgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHRQcm9wZXJ0aWVzKSA9PiB7XG4gIGlmICghaXNTdHJpbmcobm9ybWFsaXplZFRlcm0pIHx8IG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hQcm9wcyA9IFsnbmFtZScsICdsYWJlbCcsICdhZGRyZXNzJywgJ3Nob3J0TmFtZSddO1xuICByZXR1cm4gbWF0Y2hQcm9wc1xuICAgIC5tYXAobmFtZSA9PiByZXN1bHRQcm9wZXJ0aWVzW25hbWVdKVxuICAgIC5maWx0ZXIodmFsdWUgPT4gaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApXG4gICAgLm1hcCh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemUodmFsdWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMCkge1xuICAgICAgICAvLyBmdWxsIG1hdGNoIGF0IHN0YXJ0LiBSZXR1cm4gbWF4IHJlc3VsdCB3aGVuIG1hdGNoIGlzIGZ1bGwsIG5vdCBvbmx5IHBhcnRpYWxcbiAgICAgICAgcmV0dXJuIDAuNSArIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCAvIG5vcm1hbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBiZWNhdXNlIG9mIGZpbHRlcm1hdGNoaW5ndG9pbnB1dCwgd2Uga25vdyB0aGF0IG1hdGNoIG9jY3VycmVkIHNvbWV3aGVyZVxuICAgICAgLy8gZG9uJ3QgcnVuIGZpbHRlcm1hdGNoaW5nIGFnYWluIGJ1dCBlc3RpbWF0ZSByb3VnaGx5OlxuICAgICAgLy8gdGhlIGxvbmdlciB0aGUgbWF0Y2hpbmcgc3RyaW5nLCB0aGUgYmV0dGVyIGNvbmZpZGVuY2UsIG1heCBiZWluZyAwLjVcbiAgICAgIHJldHVybiAoMC41ICogbm9ybWFsaXplZFRlcm0ubGVuZ3RoKSAvIChub3JtYWxpemVkVGVybS5sZW5ndGggKyAxKTtcbiAgICB9KVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChjdXJyZW50ID4gcHJldmlvdXMgPyBjdXJyZW50IDogcHJldmlvdXMpLFxuICAgICAgMCxcbiAgICApO1xufTtcblxuLyoqXG4gKiBSYW5rcyB0aGUgcmVzdWx0IGJhc2VkIG9uIGl0cyBsYXllciBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSB0aGUgc291cmNlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJSYW5rID0gKGxheWVyLCBzb3VyY2UpID0+IHtcbiAgc3dpdGNoIChsYXllcikge1xuICAgIGNhc2UgTGF5ZXJUeXBlLkN1cnJlbnRQb3NpdGlvbjpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJhY2s6XG4gICAgICByZXR1cm4gMC45O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21NYXA6XG4gICAgICByZXR1cm4gMC44O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6XG4gICAgICByZXR1cm4gMC43OTtcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdGF0aW9uOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVBsYWNlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0b3A6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUm91dGU6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC40NTtcbiAgICBjYXNlIExheWVyVHlwZS5GdXR1cmVSb3V0ZTpcbiAgICAgIHJldHVybiAwLjQ0O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgIGlmIChpc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDAuNDM7XG4gICAgICB9XG4gICAgICByZXR1cm4gMC40MjtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHZlbnVlLCBhZGRyZXNzLCBzdHJlZXQsIHJvdXRlLXh4eFxuICAgICAgcmV0dXJuIDAuNDE7XG4gICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgcmV0dXJuIDAuMzY7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNvcnQgdGhlIHJlc3VsdHMuIE9yZGVycyBhcyBmb2xsb3dzOlxuICogIC0gY3VycmVudCBwb3NpdGlvbiBmaXJzdCBmb3IgYW4gZW1wdHkgc2VhcmNoXG4gKiAgLSBtYXRjaGluZyByb3V0ZXMgZmlyc3RcbiAqICAtIG90aGVyd2lzZSBieSBjb25maWRlbmNlLCBleGNlcHQgdGhhdDpcbiAqICAgIC0gYm9vc3Qgd2VsbCBtYXRjaGluZyBzdGF0aW9ucyAoZXNwZWNpYWxseSBmcm9tIEdURlMpXG4gKiAgICAtIHJhbmsgc3RvcHMgbG93ZXIgYXMgdGhleSB0ZW5kIHRvIG9jY3VweSBtb3N0IG9mIHRoZSBzZWFyY2ggcmVzdWx0c1xuICogIC0gaXRlbXMgd2l0aCBubyBjb25maWRlbmNlIChvbGQgc2VhcmNoZXMgYW5kIGZhdm9yaXRlcyk6XG4gKiAgICAtIHJhbmsgZmF2b3VyaXRlcyBiZXR0ZXIgdGhhbiBvcmRpbmFyeSBvbGQgc2VhcmNoZXNcbiAqICAgIC0gcmFuayBmdWxsIG1hdGNoIGJldHRlciB0aGFuIHBhcnRpYWwgbWF0Y2hcbiAqICAgIC0gcmFuayBtYXRjaCBhdCBtaWRkbGUgd29yZCBsb3dlciB0aGFuIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqICAgIC0gcmFuayBiaWtlIHJlbnRhbCBzdGF0aW9ucyBsb3dlclxuICogQHBhcmFtIHsqW119IHJlc3VsdHMgVGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2VyZSByZWNlaXZlZFxuICogQHBhcmFtIHtTdHJpbmd9IHRlcm0gVGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRTZWFyY2hSZXN1bHRzID0gKGxpbmVSZWdleHAsIHJlc3VsdHMsIHRlcm0gPSAnJykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cyxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldExheWVyUmFuayhsYXllciwgc291cmNlKSArXG4gICAgICAgICAgICBtYXRjaChub3JtYWxpemVkVGVybSwgcmVzdWx0LnByb3BlcnRpZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUmVudGFsU3RhdGlvbjpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxpdHkgKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxpdHkgPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsaXR5IHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsaXR5KHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGNvbnN0IGJvb2wgPVxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXI7XG4gICAgaWYgKFxuICAgICAgYm9vbCAmJlxuICAgICAgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2w7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIi8qKlxuICogU2VyaWFsaXplcyBvYmplY3RzXG4gKlxuICogQG5hbWUgc2VyaWFsaXplXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gKiBAcGFyYW0ge0FueX0gcHJlZml4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBTZXJpYWxpemVkIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnNlcmlhbGl6ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmosIHByZWZpeCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIC5tYXAocCA9PiB7XG4gICAgICBjb25zdCBrID0gcHJlZml4IHx8IHA7XG4gICAgICBjb25zdCB2ID0gb2JqW3BdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VyaWFsaXplKHYsIGspXG4gICAgICAgIDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn1cbiIsImltcG9ydCBzZXJpYWxpemUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZSc7XG4vKipcbiAqICBSZXR1cm4gUHJvbWlzZSBmb3IgYSB1cmwganNvbiBnZXQgcmVxdWVzdFxuICpcbiAqIEBuYW1lIGdldEpzb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtc1xuICogQHJldHVybnMge09iamVjdH0gcmVzcG9uc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRKc29uKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXJlc3BvbnNlXG4gKi9cbmNvbnN0IGF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKS5kZWZhdWx0O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKc29uKHVybCwgcGFyYW1zKSB7XG4gIHJldHVybiBheGlvc1xuICAgIC5nZXQoXG4gICAgICBlbmNvZGVVUkkodXJsKSArXG4gICAgICAgIChwYXJhbXNcbiAgICAgICAgICA/ICh1cmwuc2VhcmNoKC9cXD8vKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplKHBhcmFtcylcbiAgICAgICAgICA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG5cbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApXG4gICAgLnRoZW4ocmVzID0+IHtcbiAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmNvbnN0IERFRkFVTFRfUEVMSUFTX1VSTCA9ICdodHRwczovL2FwaS5kaWdpdHJhbnNpdC5maS9nZW9jb2RpbmcvdjEvc2VhcmNoJztcbi8qKlxuICogPERFU0NSSVBUSU9OPlxuICpcbiAqIEBuYW1lIGdldEdlb2NvZGluZ1Jlc3VsdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hQYXJhbXMgKE9wdGlvbmFsKSBQYXJhbWV0ZXJzIGFwcGVuZGVkIHRvIHVybCwgYmFzaWNhbGx5IGJveCAvIHBvbHlnb24gdG8gcmVzdHJpY3Qgc2VhcmNoIGFyZWFcbiAqIEBwYXJhbSB7U3RyaW5nfSBsYW5nIChPcHRpb25hbCkgc2VhcmNoIGxhbmd1YWdlXG4gKiBAcGFyYW0ge09iamVjdH0gZm9jdXNQb2ludCAoT3B0aW9uYWwpIE93biBQb3NpdGlvbiAoUEVMSUFTIEFQSSlcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VzIChPcHRpb25hbCkgc2VhcmNoIHNvdXJjZXMgKGUuZyBPU00sIEdURlMuLilcbiAqIEBwYXJhbSB7T2JqZWN0fSBtaW5pbWFsUmVnZXhwIChPcHRpb25hbCkgUmVnZXhwIGZvciB0ZXN0aW5nXG4gKiBAcGFyYW0geyp9IGdlb2NvZGluZ0xheWVycyAoT3B0aW9uYWwpIEFycmF5IG9mIHN0cmluZ3MgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBsYXllcnMgaXMgc2VhcmNoZWQsIGUuZy4gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0b3AnXVxuICogQHJldHVybnMge1N0cmluZ30gUmVzdWx0cyBpbiBKU09OIGZvcm1cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRHZW9jb2RpbmdSZXN1bHRzKFwicmVzdWx0XCIpO1xuICogLy89IGUuZy4ge3RleHQ6XCJyZXN1bHRcIn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgc2VhcmNoU3RyaW5nLFxuICBzZWFyY2hQYXJhbXMsXG4gIGxhbmcsXG4gIGZvY3VzUG9pbnQsXG4gIHNvdXJjZXMsXG4gIHBlbGlhc1VybCxcbiAgbWluaW1hbFJlZ2V4cCxcbiAgZ2VvY29kaW5nTGF5ZXJzLFxuKSB7XG4gIGNvbnN0IHRleHQgPSBzZWFyY2hTdHJpbmcgPyBzZWFyY2hTdHJpbmcudHJpbSgpIDogbnVsbDtcbiAgaWYgKFxuICAgIHRleHQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRleHQgPT09IG51bGwgfHxcbiAgICB0ZXh0Lmxlbmd0aCA8IDEgfHxcbiAgICAobWluaW1hbFJlZ2V4cCAmJiAhbWluaW1hbFJlZ2V4cC50ZXN0KHRleHQpKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBjb25zdCBQRUxJQVNfVVJMID0gcGVsaWFzVXJsIHx8IERFRkFVTFRfUEVMSUFTX1VSTDtcbiAgbGV0IG9wdHMgPSB7IHRleHQsIC4uLnNlYXJjaFBhcmFtcywgLi4uZm9jdXNQb2ludCwgbGFuZyB9O1xuICBpZiAoc291cmNlcykge1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIHNvdXJjZXMgfTtcbiAgfVxuICBpZiAoZ2VvY29kaW5nTGF5ZXJzKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gZ2VvY29kaW5nTGF5ZXJzLnRvU3RyaW5nKCk7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgbGF5ZXJzIH07XG4gIH1cbiAgcmV0dXJuIGdldEpzb24oUEVMSUFTX1VSTCwgb3B0cykudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXM7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdGFrZSBmcm9tICdsb2Rhc2gvdGFrZSc7XG5pbXBvcnQge1xuICBzb3J0U2VhcmNoUmVzdWx0cyxcbiAgaXNTdG9wLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgdW5pcUJ5TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIChtYXAsIHN0b3BPclN0YXRpb24pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0U3RvcmUoJ1ByZWZlcmVuY2VzU3RvcmUnKS5nZXRMYW5ndWFnZSgpLCBUT0RPIGVuYWJsZSB0aGlzIHdoZW4gT1RQIHN1cHBvcnRzIHRyYW5zbGF0aW9uc1xuICB9KS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcy5tYXAoc3RvcCA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSB7XG4gICAgICAgIHR5cGU6ICdGYXZvdXJpdGVTdG9wJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFkZGVuZHVtOiBzdG9wLnByb3BlcnRpZXMuYWRkZW5kdW0sXG4gICAgICAgICAgZ2lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5naWQsXG4gICAgICAgICAgY29kZTogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uY29kZSxcbiAgICAgICAgICBndGZzSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmd0ZnNJZCxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0ubGFzdFVwZGF0ZWQsXG4gICAgICAgICAgZmF2b3VyaXRlSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmZhdm91cml0ZUlkLFxuICAgICAgICAgIGFkZHJlc3M6IHN0b3AucHJvcGVydGllcy5sYWJlbCxcbiAgICAgICAgICBsYXllcjogaXNTdG9wKHN0b3AucHJvcGVydGllcykgPyAnZmF2b3VyaXRlU3RvcCcgOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiBzdG9wLmdlb21ldHJ5LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmYXZvdXJpdGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2V0RmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZXMsIGlucHV0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGZhdm91cml0ZXMsIGlucHV0LCBbJ2FkZHJlc3MnLCAnbmFtZSddKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgdHlwZTogJ0Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgbGF5ZXI6ICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFtpdGVtLmxvbiwgaXRlbS5sYXRdIH0sXG4gICAgfSkpLFxuICApO1xufVxuZnVuY3Rpb24gc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1tYXAnLFxuICAgICAgICAgIGxheWVyOiAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0N1cnJlbnRMb2NhdGlvbicsXG4gICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICd1c2Utb3duLXBvc2l0aW9uJyxcbiAgICAgICAgICBsYXllcjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbcG9zaXRpb24ubG9uLCBwb3NpdGlvbi5sYXRdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsXG4gICAgICAgICAgbGF5ZXI6ICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdzZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFja1N1Z2dlc3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYWNrJyxcbiAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgIGxhdDogbnVsbCxcbiAgICAgIGxvbjogbnVsbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWxJZDogJ2JhY2snLFxuICAgICAgICBsYXllcjogJ2JhY2snLFxuICAgICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldEZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0KSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHMgPT4ge1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoc3RvcHMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoY29udGV4dCwgbG9jYXRpb25zLCBzdG9wcykge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBsb2NhdGlvbnMoY29udGV4dCk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnMgJiYgZmF2b3VyaXRlTG9jYXRpb25zLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHN0b3BzKGNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHMgJiYgZmF2b3VyaXRlU3RvcHMubGVuZ3RoID4gMDtcbn1cblxuY29uc3Qgcm91dGVMYXllcnMgPSBbXG4gICdyb3V0ZS1UUkFNJyxcbiAgJ3JvdXRlLUJVUycsXG4gICdyb3V0ZS1SQUlMJyxcbiAgJ3JvdXRlLUZFUlJZJyxcbiAgJ3JvdXRlLVNVQldBWScsXG4gICdyb3V0ZS1BSVJQTEFORScsXG5dO1xuY29uc3QgbG9jYXRpb25MYXllcnMgPSBbJ2Zhdm91cml0ZVBsYWNlJywgJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG5jb25zdCBwYXJraW5nTGF5ZXJzID0gWydjYXJwYXJrJywgJ2Jpa2VwYXJrJ107XG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6IGxvY2F0aW9ucyxcbiAgICBnZXRPbGRTZWFyY2hlczogcHJldlNlYXJjaGVzLFxuICAgIGdldEZhdm91cml0ZVN0b3BzOiBzdG9wcyxcbiAgICBwYXJraW5nQXJlYVNvdXJjZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zLFxuICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVJvdXRlcyxcbiAgICBnZXRSb3V0ZXNRdWVyeSxcbiAgICBjb250ZXh0LFxuICAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogbG9jYXRpb25Bd2FyZSxcbiAgICBtaW5pbWFsUmVnZXhwLFxuICAgIGxpbmVSZWdleHAsXG4gICAgVVJMX1BFTElBUyxcbiAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgIGZlZWRJRHMsXG4gICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zLFxuICAgIGdlb2NvZGluZ1NvdXJjZXMsXG4gICAgZ2V0RnV0dXJlUm91dGVzLFxuICAgIGNpdHlCaWtlTmV0d29ya3MsXG4gIH0gPSBzZWFyY2hDb250ZXh0O1xuICAvLyBpZiBubyB0YXJnZXRzIGFyZSBwcm92aWRlZCwgc2VhcmNoIHRoZW0gYWxsLlxuICBjb25zdCBhbGxUYXJnZXRzID0gIXRhcmdldHMgfHwgdGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gIC8vIGlmIG5vIHNvdXJjZXMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFNvdXJjZXMgPSAhc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbnMoY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaENvbXBvbmVudHMgPSBbXTtcbiAgY29uc3Qgc2VhcmNoZXMgPSB7IHR5cGU6ICdhbGwnLCB0ZXJtOiBpbnB1dCwgcmVzdWx0czogW10gfTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShjb250ZXh0KTtcbiAgY29uc3QgZm9jdXNQb2ludCA9XG4gICAgbG9jYXRpb25Bd2FyZSAmJiByZWZQb2ludD8ubGF0ICYmIHJlZlBvaW50Py5sb25cbiAgICAgID8ge1xuICAgICAgICAgIC8vIFJvdW5kIGNvb3JkaW5hdGVzIHRvIGFwcHJveCAxIGttLCBpbiBvcmRlciB0byBpbXByb3ZlIGNhY2hpbmdcbiAgICAgICAgICAnZm9jdXMucG9pbnQubGF0JzogcmVmUG9pbnQubGF0LnRvRml4ZWQoMyksXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50Lmxvbic6IHJlZlBvaW50Lmxvbi50b0ZpeGVkKDMpLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICBjb25zdCBtb2RlID0gdHJhbnNwb3J0TW9kZSA/IHRyYW5zcG9ydE1vZGUuc3BsaXQoJy0nKVsxXSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ0N1cnJlbnRQb3NpdGlvbicpICYmXG4gICAgcG9zaXRpb24uc3RhdHVzICE9PSAnZ2VvbG9jYXRpb24tbm90LXN1cHBvcnRlZCdcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTWFwUG9zaXRpb24nKSkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkpO1xuICB9XG4gIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdGdXR1cmVSb3V0ZXMnKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0RnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaCh0YWtlKGl0ZW1zLCAzKSk7XG4gIH1cbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSAmJlxuICAgIGhhc0Zhdm91cml0ZXMoY29udGV4dCwgbG9jYXRpb25zLCBzdG9wcylcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGxvY2F0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlTG9jYXRpb25zLCBpbnB1dCkpO1xuICAgICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0JhY2snKSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0QmFja1N1Z2dlc3Rpb24oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3N0YXRpb24nLCAndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGNvbnN0IGZlZWRpcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCk7XG4gICAgICBjb25zdCBnZW9zb3VyY2VzID0gZ2VvY29kaW5nU291cmNlcy5jb25jYXQoZmVlZGlzKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZ2Vvc291cmNlcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbkhpc3RvcnkgPSBwcmV2U2VhcmNoZXMoY29udGV4dCwgJ2VuZHBvaW50Jyk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Jpa2VSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2Jpa2VwYXJrJyxcbiAgICAgICAgJ2NhcnBhcmsnLFxuICAgICAgICAnc3RvcCcsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldE9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gcHJldlNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdiaWtlc3RhdGlvbicsXG4gICAgICAgICdiaWtlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc3RvcHMoY29udGV4dCk7XG4gICAgICBsZXQgc3RvcHNBbmRTdGF0aW9ucztcbiAgICAgIGlmIChmYXZvdXJpdGVTdG9wcy5ldmVyeShzdG9wID0+IHN0b3AudHlwZSA9PT0gJ3N0YXRpb24nKSkge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKFxuICAgICAgICAgIGZhdm91cml0ZVN0b3BzLFxuICAgICAgICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeShmYXZvdXJpdGVTdG9wcylcbiAgICAgICAgICAudGhlbihmYXZvdXJpdGVzID0+XG4gICAgICAgICAgICBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoZmF2b3VyaXRlcywgVVJMX1BFTElBU19QTEFDRSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCkpO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIGlmIChnZW9jb2RpbmdTZWFyY2hQYXJhbXMgJiYgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10pIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10gPVxuICAgICAgICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddO1xuICAgICAgfVxuICAgICAgLy8gYSBsaXR0bGUgaGFjazogd2hlbiBzZWFyY2hpbmcgbG9jYXRpb24gZGF0YSwgYXV0b21hdGljYWxseSBkZWR1cGUgc3RvcHNcbiAgICAgIC8vIHRoaXMgY291bGQgYmUgYSBuZXcgZXhwbGljaXQgcHJvcFxuICAgICAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmRlZHVwZXN0b3BzID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlZWRpcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRpcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHN0b3BIaXN0b3J5ID0gcHJldlNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdiaWtlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnRNb2RlICE9PSAncm91dGUtQ0lUWUJJS0UnKSB7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlUmVudGFsU3RhdGlvbicpO1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZXN0YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZ2V0T2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldE9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1JvdXRlcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVSb3V0ZXMgPSBnZXRGYXZvdXJpdGVSb3V0ZXMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVJvdXRlcyxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBtb2RlLFxuICAgICAgICAgIHBhdGhPcHRzLFxuICAgICAgICApLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICBnZXRSb3V0ZXNRdWVyeShpbnB1dCwgZmVlZElEcywgdHJhbnNwb3J0TW9kZSwgcGF0aE9wdHMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgKSxcbiAgICApO1xuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgcm91dGVIaXN0b3J5ID0gcHJldlNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ3N0b3AnLFxuICAgICAgICAnc3RhdGlvbicsXG4gICAgICAgICdiaWtlcGFyaycsXG4gICAgICAgICdjYXJwYXJrJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBpZiAodHJhbnNwb3J0TW9kZSAhPT0gJ3JvdXRlLUNJVFlCSUtFJykge1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZVJlbnRhbFN0YXRpb24nKTtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ2Jpa2VzdGF0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzLmZpbHRlcihpID0+ICEoaSA9PT0gdHJhbnNwb3J0TW9kZSkpKTtcbiAgICAgIH1cbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldE9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdCaWtlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlQmlrZVN0YXRpb25zID0gZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeShmYXZvdXJpdGVCaWtlU3RhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgY2l0eUJpa2VOZXR3b3Jrcy5qb2luKCcsJyksXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnQmlrZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2VhcmNoUmVzdWx0c1Byb21pc2UgPSBQcm9taXNlLmFsbChzZWFyY2hDb21wb25lbnRzKVxuICAgIC50aGVuKGZsYXR0ZW4pXG4gICAgLnRoZW4odW5pcUJ5TGFiZWwpXG4gICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICBzZWFyY2hlcy5yZXN1bHRzID0gcmVzdWx0cztcbiAgICB9KVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgc2VhcmNoZXMuZXJyb3IgPSBlcnI7XG4gICAgfSk7XG4gIHNlYXJjaFJlc3VsdHNQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgIGNhbGxiYWNrKHtcbiAgICAgIC4uLnNlYXJjaGVzLFxuICAgICAgcmVzdWx0czogc29ydFNlYXJjaFJlc3VsdHMobGluZVJlZ2V4cCwgc2VhcmNoZXMucmVzdWx0cywgaW5wdXQpLFxuICAgIH0pO1xuICB9KTtcbn1cblxuY29uc3QgZGVib3VuY2VkU2VhcmNoID0gZGVib3VuY2UoZ2V0U2VhcmNoUmVzdWx0cywgMzAwLCB7XG4gIGxlYWRpbmc6IHRydWUsXG59KTtcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVTZWFyY2ggPSAoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIGRhdGEsXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pID0+IHtcbiAgY2FsbGJhY2sobnVsbCk7IC8vIFRoaXMgbWVhbnMgJ3dlIGFyZSBzZWFyY2hpbmcnXG4gIGRlYm91bmNlZFNlYXJjaChcbiAgICB0YXJnZXRzLFxuICAgIHNvdXJjZXMsXG4gICAgdHJhbnNwb3J0TW9kZSxcbiAgICBzZWFyY2hDb250ZXh0LFxuICAgIGZpbHRlclJlc3VsdHMsXG4gICAgZ2VvY29kaW5nU2l6ZSxcbiAgICBkYXRhLFxuICAgIGNhbGxiYWNrLFxuICAgIHBhdGhPcHRzLFxuICAgIHJlZlBvaW50LFxuICApO1xufTtcbiIsIi8vISBtb21lbnQuanNcbi8vISB2ZXJzaW9uIDogMi4yOS40XG4vLyEgYXV0aG9ycyA6IFRpbSBXb29kLCBJc2tyZW4gQ2hlcm5ldiwgTW9tZW50LmpzIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBtb21lbnRqcy5jb21cblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gICAgZ2xvYmFsLm1vbWVudCA9IGZhY3RvcnkoKVxufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICB2YXIgaG9va0NhbGxiYWNrO1xuXG4gICAgZnVuY3Rpb24gaG9va3MoKSB7XG4gICAgICAgIHJldHVybiBob29rQ2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGRvbmUgdG8gcmVnaXN0ZXIgdGhlIG1ldGhvZCBjYWxsZWQgd2l0aCBtb21lbnQoKVxuICAgIC8vIHdpdGhvdXQgY3JlYXRpbmcgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLlxuICAgIGZ1bmN0aW9uIHNldEhvb2tDYWxsYmFjayhjYWxsYmFjaykge1xuICAgICAgICBob29rQ2FsbGJhY2sgPSBjYWxsYmFjaztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FycmF5KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIEFycmF5IHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBBcnJheV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IHdpbGwgdHJlYXQgdW5kZWZpbmVkIGFuZCBudWxsIGFzIG9iamVjdCBpZiBpdCB3YXNuJ3QgZm9yXG4gICAgICAgIC8vIGlucHV0ICE9IG51bGxcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0ICE9IG51bGwgJiZcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE9iamVjdF0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzT3duUHJvcChhLCBiKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSwgYik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNPYmplY3RFbXB0eShvYmopIHtcbiAgICAgICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqKS5sZW5ndGggPT09IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaztcbiAgICAgICAgICAgIGZvciAoayBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PT0gdm9pZCAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBOdW1iZXJdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF0ZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBEYXRlIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBEYXRlXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXAoYXJyLCBmbikge1xuICAgICAgICB2YXIgcmVzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgYXJyTGVuID0gYXJyLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgKytpKSB7XG4gICAgICAgICAgICByZXMucHVzaChmbihhcnJbaV0sIGkpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVuZChhLCBiKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gYikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoYiwgaSkpIHtcbiAgICAgICAgICAgICAgICBhW2ldID0gYltpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd0b1N0cmluZycpKSB7XG4gICAgICAgICAgICBhLnRvU3RyaW5nID0gYi50b1N0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChoYXNPd25Qcm9wKGIsICd2YWx1ZU9mJykpIHtcbiAgICAgICAgICAgIGEudmFsdWVPZiA9IGIudmFsdWVPZjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgdHJ1ZSkudXRjKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmYXVsdFBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgLy8gV2UgbmVlZCB0byBkZWVwIGNsb25lIHRoaXMgb2JqZWN0LlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZW1wdHk6IGZhbHNlLFxuICAgICAgICAgICAgdW51c2VkVG9rZW5zOiBbXSxcbiAgICAgICAgICAgIHVudXNlZElucHV0OiBbXSxcbiAgICAgICAgICAgIG92ZXJmbG93OiAtMixcbiAgICAgICAgICAgIGNoYXJzTGVmdE92ZXI6IDAsXG4gICAgICAgICAgICBudWxsSW5wdXQ6IGZhbHNlLFxuICAgICAgICAgICAgaW52YWxpZEVyYTogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRNb250aDogbnVsbCxcbiAgICAgICAgICAgIGludmFsaWRGb3JtYXQ6IGZhbHNlLFxuICAgICAgICAgICAgdXNlckludmFsaWRhdGVkOiBmYWxzZSxcbiAgICAgICAgICAgIGlzbzogZmFsc2UsXG4gICAgICAgICAgICBwYXJzZWREYXRlUGFydHM6IFtdLFxuICAgICAgICAgICAgZXJhOiBudWxsLFxuICAgICAgICAgICAgbWVyaWRpZW06IG51bGwsXG4gICAgICAgICAgICByZmMyODIyOiBmYWxzZSxcbiAgICAgICAgICAgIHdlZWtkYXlNaXNtYXRjaDogZmFsc2UsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2luZ0ZsYWdzKG0pIHtcbiAgICAgICAgaWYgKG0uX3BmID09IG51bGwpIHtcbiAgICAgICAgICAgIG0uX3BmID0gZGVmYXVsdFBhcnNpbmdGbGFncygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9wZjtcbiAgICB9XG5cbiAgICB2YXIgc29tZTtcbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLnNvbWUpIHtcbiAgICAgICAgc29tZSA9IEFycmF5LnByb3RvdHlwZS5zb21lO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHNvbWUgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgICAgICAgICB2YXIgdCA9IE9iamVjdCh0aGlzKSxcbiAgICAgICAgICAgICAgICBsZW4gPSB0Lmxlbmd0aCA+Pj4gMCxcbiAgICAgICAgICAgICAgICBpO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSBpbiB0ICYmIGZ1bi5jYWxsKHRoaXMsIHRbaV0sIGksIHQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQobSkge1xuICAgICAgICBpZiAobS5faXNWYWxpZCA9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgZmxhZ3MgPSBnZXRQYXJzaW5nRmxhZ3MobSksXG4gICAgICAgICAgICAgICAgcGFyc2VkUGFydHMgPSBzb21lLmNhbGwoZmxhZ3MucGFyc2VkRGF0ZVBhcnRzLCBmdW5jdGlvbiAoaSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaSAhPSBudWxsO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICAhaXNOYU4obS5fZC5nZXRUaW1lKCkpICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLm92ZXJmbG93IDwgMCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuZW1wdHkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRFcmEgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRNb250aCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZFdlZWtkYXkgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLndlZWtkYXlNaXNtYXRjaCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MubnVsbElucHV0ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRm9ybWF0ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy51c2VySW52YWxpZGF0ZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgKCFmbGFncy5tZXJpZGllbSB8fCAoZmxhZ3MubWVyaWRpZW0gJiYgcGFyc2VkUGFydHMpKTtcblxuICAgICAgICAgICAgaWYgKG0uX3N0cmljdCkge1xuICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgPVxuICAgICAgICAgICAgICAgICAgICBpc05vd1ZhbGlkICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNoYXJzTGVmdE92ZXIgPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MudW51c2VkVG9rZW5zLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5iaWdIb3VyID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChPYmplY3QuaXNGcm96ZW4gPT0gbnVsbCB8fCAhT2JqZWN0LmlzRnJvemVuKG0pKSB7XG4gICAgICAgICAgICAgICAgbS5faXNWYWxpZCA9IGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQoZmxhZ3MpIHtcbiAgICAgICAgdmFyIG0gPSBjcmVhdGVVVEMoTmFOKTtcbiAgICAgICAgaWYgKGZsYWdzICE9IG51bGwpIHtcbiAgICAgICAgICAgIGV4dGVuZChnZXRQYXJzaW5nRmxhZ3MobSksIGZsYWdzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS51c2VySW52YWxpZGF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gUGx1Z2lucyB0aGF0IGFkZCBwcm9wZXJ0aWVzIHNob3VsZCBhbHNvIGFkZCB0aGUga2V5IGhlcmUgKG51bGwgdmFsdWUpLFxuICAgIC8vIHNvIHdlIGNhbiBwcm9wZXJseSBjbG9uZSBvdXJzZWx2ZXMuXG4gICAgdmFyIG1vbWVudFByb3BlcnRpZXMgPSAoaG9va3MubW9tZW50UHJvcGVydGllcyA9IFtdKSxcbiAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG4gICAgZnVuY3Rpb24gY29weUNvbmZpZyh0bywgZnJvbSkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIHByb3AsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBtb21lbnRQcm9wZXJ0aWVzTGVuID0gbW9tZW50UHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc0FNb21lbnRPYmplY3QpKSB7XG4gICAgICAgICAgICB0by5faXNBTW9tZW50T2JqZWN0ID0gZnJvbS5faXNBTW9tZW50T2JqZWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faSkpIHtcbiAgICAgICAgICAgIHRvLl9pID0gZnJvbS5faTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2YpKSB7XG4gICAgICAgICAgICB0by5fZiA9IGZyb20uX2Y7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sKSkge1xuICAgICAgICAgICAgdG8uX2wgPSBmcm9tLl9sO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fc3RyaWN0KSkge1xuICAgICAgICAgICAgdG8uX3N0cmljdCA9IGZyb20uX3N0cmljdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3R6bSkpIHtcbiAgICAgICAgICAgIHRvLl90em0gPSBmcm9tLl90em07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pc1VUQykpIHtcbiAgICAgICAgICAgIHRvLl9pc1VUQyA9IGZyb20uX2lzVVRDO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fb2Zmc2V0KSkge1xuICAgICAgICAgICAgdG8uX29mZnNldCA9IGZyb20uX29mZnNldDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3BmKSkge1xuICAgICAgICAgICAgdG8uX3BmID0gZ2V0UGFyc2luZ0ZsYWdzKGZyb20pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbG9jYWxlKSkge1xuICAgICAgICAgICAgdG8uX2xvY2FsZSA9IGZyb20uX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb21lbnRQcm9wZXJ0aWVzTGVuID4gMCkge1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG1vbWVudFByb3BlcnRpZXNMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHByb3AgPSBtb21lbnRQcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgICAgIHZhbCA9IGZyb21bcHJvcF07XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRvW3Byb3BdID0gdmFsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0bztcbiAgICB9XG5cbiAgICAvLyBNb21lbnQgcHJvdG90eXBlIG9iamVjdFxuICAgIGZ1bmN0aW9uIE1vbWVudChjb25maWcpIHtcbiAgICAgICAgY29weUNvbmZpZyh0aGlzLCBjb25maWcpO1xuICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoY29uZmlnLl9kICE9IG51bGwgPyBjb25maWcuX2QuZ2V0VGltZSgpIDogTmFOKTtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgLy8gUHJldmVudCBpbmZpbml0ZSBsb29wIGluIGNhc2UgdXBkYXRlT2Zmc2V0IGNyZWF0ZXMgbmV3IG1vbWVudFxuICAgICAgICAvLyBvYmplY3RzLlxuICAgICAgICBpZiAodXBkYXRlSW5Qcm9ncmVzcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnQob2JqKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBvYmogaW5zdGFuY2VvZiBNb21lbnQgfHwgKG9iaiAhPSBudWxsICYmIG9iai5faXNBTW9tZW50T2JqZWN0ICE9IG51bGwpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Fybihtc2cpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25zb2xlLndhcm5cbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6ICcgKyBtc2cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlKG1zZywgZm4pIHtcbiAgICAgICAgdmFyIGZpcnN0VGltZSA9IHRydWU7XG5cbiAgICAgICAgcmV0dXJuIGV4dGVuZChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobnVsbCwgbXNnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmaXJzdFRpbWUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdLFxuICAgICAgICAgICAgICAgICAgICBhcmcsXG4gICAgICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgYXJnTGVuID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJnTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9ICdcXG5bJyArIGkgKyAnXSAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChrZXkgaW4gYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc093blByb3AoYXJndW1lbnRzWzBdLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSBrZXkgKyAnOiAnICsgYXJndW1lbnRzWzBdW2tleV0gKyAnLCAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy5zbGljZSgwLCAtMik7IC8vIFJlbW92ZSB0cmFpbGluZyBjb21tYSBhbmQgc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhcmdzLnB1c2goYXJnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgd2FybihcbiAgICAgICAgICAgICAgICAgICAgbXNnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG5Bcmd1bWVudHM6ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJncykuam9pbignJykgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEVycm9yKCkuc3RhY2tcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGZpcnN0VGltZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICAgIH0sIGZuKTtcbiAgICB9XG5cbiAgICB2YXIgZGVwcmVjYXRpb25zID0ge307XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGVTaW1wbGUobmFtZSwgbXNnKSB7XG4gICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG5hbWUsIG1zZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFkZXByZWNhdGlvbnNbbmFtZV0pIHtcbiAgICAgICAgICAgIHdhcm4obXNnKTtcbiAgICAgICAgICAgIGRlcHJlY2F0aW9uc1tuYW1lXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPSBmYWxzZTtcbiAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gaXNGdW5jdGlvbihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHR5cGVvZiBGdW5jdGlvbiAhPT0gJ3VuZGVmaW5lZCcgJiYgaW5wdXQgaW5zdGFuY2VvZiBGdW5jdGlvbikgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBwcm9wLCBpO1xuICAgICAgICBmb3IgKGkgaW4gY29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjb25maWcsIGkpKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IGNvbmZpZ1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwcm9wKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzW2ldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzWydfJyArIGldID0gcHJvcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY29uZmlnID0gY29uZmlnO1xuICAgICAgICAvLyBMZW5pZW50IG9yZGluYWwgcGFyc2luZyBhY2NlcHRzIGp1c3QgYSBudW1iZXIgaW4gYWRkaXRpb24gdG9cbiAgICAgICAgLy8gbnVtYmVyICsgKHBvc3NpYmx5KSBzdHVmZiBjb21pbmcgZnJvbSBfZGF5T2ZNb250aE9yZGluYWxQYXJzZS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICB0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAodGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZS5zb3VyY2UgfHwgdGhpcy5fb3JkaW5hbFBhcnNlLnNvdXJjZSkgK1xuICAgICAgICAgICAgICAgICd8JyArXG4gICAgICAgICAgICAgICAgL1xcZHsxLDJ9Ly5zb3VyY2VcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjaGlsZENvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gZXh0ZW5kKHt9LCBwYXJlbnRDb25maWcpLFxuICAgICAgICAgICAgcHJvcDtcbiAgICAgICAgZm9yIChwcm9wIGluIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKSAmJiBpc09iamVjdChjaGlsZENvbmZpZ1twcm9wXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0ge307XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIHBhcmVudENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgICAgIGV4dGVuZChyZXNbcHJvcF0sIGNoaWxkQ29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkQ29uZmlnW3Byb3BdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gY2hpbGRDb25maWdbcHJvcF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc1twcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChwcm9wIGluIHBhcmVudENvbmZpZykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AocGFyZW50Q29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgICFoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSAmJlxuICAgICAgICAgICAgICAgIGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSBjaGFuZ2VzIHRvIHByb3BlcnRpZXMgZG9uJ3QgbW9kaWZ5IHBhcmVudCBjb25maWdcbiAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBleHRlbmQoe30sIHJlc1twcm9wXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBMb2NhbGUoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5zZXQoY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBrZXlzO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKSB7XG4gICAgICAgIGtleXMgPSBPYmplY3Qua2V5cztcbiAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzID0gZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgdmFyIGksXG4gICAgICAgICAgICAgICAgcmVzID0gW107XG4gICAgICAgICAgICBmb3IgKGkgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBpKSkge1xuICAgICAgICAgICAgICAgICAgICByZXMucHVzaChpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0Q2FsZW5kYXIgPSB7XG4gICAgICAgIHNhbWVEYXk6ICdbVG9kYXkgYXRdIExUJyxcbiAgICAgICAgbmV4dERheTogJ1tUb21vcnJvdyBhdF0gTFQnLFxuICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2F0XSBMVCcsXG4gICAgICAgIGxhc3REYXk6ICdbWWVzdGVyZGF5IGF0XSBMVCcsXG4gICAgICAgIGxhc3RXZWVrOiAnW0xhc3RdIGRkZGQgW2F0XSBMVCcsXG4gICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyKGtleSwgbW9tLCBub3cpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX2NhbGVuZGFyW2tleV0gfHwgdGhpcy5fY2FsZW5kYXJbJ3NhbWVFbHNlJ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dCkgPyBvdXRwdXQuY2FsbChtb20sIG5vdykgOiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gemVyb0ZpbGwobnVtYmVyLCB0YXJnZXRMZW5ndGgsIGZvcmNlU2lnbikge1xuICAgICAgICB2YXIgYWJzTnVtYmVyID0gJycgKyBNYXRoLmFicyhudW1iZXIpLFxuICAgICAgICAgICAgemVyb3NUb0ZpbGwgPSB0YXJnZXRMZW5ndGggLSBhYnNOdW1iZXIubGVuZ3RoLFxuICAgICAgICAgICAgc2lnbiA9IG51bWJlciA+PSAwO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKHNpZ24gPyAoZm9yY2VTaWduID8gJysnIDogJycpIDogJy0nKSArXG4gICAgICAgICAgICBNYXRoLnBvdygxMCwgTWF0aC5tYXgoMCwgemVyb3NUb0ZpbGwpKS50b1N0cmluZygpLnN1YnN0cigxKSArXG4gICAgICAgICAgICBhYnNOdW1iZXJcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGluZ1Rva2VucyA9XG4gICAgICAgICAgICAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oW0hoXW1tKHNzKT98TW98TU0/TT9NP3xEb3xERERvfEREP0Q/RD98ZGRkP2Q/fGRvP3x3W298d10/fFdbb3xXXT98UW8/fE57MSw1fXxZWVlZWVl8WVlZWVl8WVlZWXxZWXx5ezIsNH18eW8/fGdnKGdnZz8pP3xHRyhHR0c/KT98ZXxFfGF8QXxoaD98SEg/fGtrP3xtbT98c3M/fFN7MSw5fXx4fFh8eno/fFpaP3wuKS9nLFxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMgPSAvKFxcW1teXFxbXSpcXF0pfChcXFxcKT8oTFRTfExUfExMP0w/TD98bHsxLDR9KS9nLFxuICAgICAgICBmb3JtYXRGdW5jdGlvbnMgPSB7fSxcbiAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnMgPSB7fTtcblxuICAgIC8vIHRva2VuOiAgICAnTSdcbiAgICAvLyBwYWRkZWQ6ICAgWydNTScsIDJdXG4gICAgLy8gb3JkaW5hbDogICdNbydcbiAgICAvLyBjYWxsYmFjazogZnVuY3Rpb24gKCkgeyB0aGlzLm1vbnRoKCkgKyAxIH1cbiAgICBmdW5jdGlvbiBhZGRGb3JtYXRUb2tlbih0b2tlbiwgcGFkZGVkLCBvcmRpbmFsLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZnVuYyA9IGNhbGxiYWNrO1xuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tjYWxsYmFja10oKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRva2VuKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYWRkZWQpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3BhZGRlZFswXV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHplcm9GaWxsKGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgcGFkZGVkWzFdLCBwYWRkZWRbMl0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3JkaW5hbCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbb3JkaW5hbF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm9yZGluYWwoXG4gICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgaWYgKGlucHV0Lm1hdGNoKC9cXFtbXFxzXFxTXS8pKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXlxcW3xcXF0kL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5wdXQucmVwbGFjZSgvXFxcXC9nLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCkge1xuICAgICAgICB2YXIgYXJyYXkgPSBmb3JtYXQubWF0Y2goZm9ybWF0dGluZ1Rva2VucyksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV07XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhhcnJheVtpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG1vbSkge1xuICAgICAgICAgICAgdmFyIG91dHB1dCA9ICcnLFxuICAgICAgICAgICAgICAgIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gaXNGdW5jdGlvbihhcnJheVtpXSlcbiAgICAgICAgICAgICAgICAgICAgPyBhcnJheVtpXS5jYWxsKG1vbSwgZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICA6IGFycmF5W2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBmb3JtYXQgZGF0ZSB1c2luZyBuYXRpdmUgZGF0ZSBvYmplY3RcbiAgICBmdW5jdGlvbiBmb3JtYXRNb21lbnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBtLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbS5sb2NhbGVEYXRhKCkpO1xuICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSA9XG4gICAgICAgICAgICBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XSB8fCBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KTtcblxuICAgICAgICByZXR1cm4gZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0obSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXhwYW5kRm9ybWF0KGZvcm1hdCwgbG9jYWxlKSB7XG4gICAgICAgIHZhciBpID0gNTtcblxuICAgICAgICBmdW5jdGlvbiByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMoaW5wdXQpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubG9uZ0RhdGVGb3JtYXQoaW5wdXQpIHx8IGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgIHdoaWxlIChpID49IDAgJiYgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLnRlc3QoZm9ybWF0KSkge1xuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLFxuICAgICAgICAgICAgICAgIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2Vuc1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICAgICAgaSAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvbmdEYXRlRm9ybWF0ID0ge1xuICAgICAgICBMVFM6ICdoOm1tOnNzIEEnLFxuICAgICAgICBMVDogJ2g6bW0gQScsXG4gICAgICAgIEw6ICdNTS9ERC9ZWVlZJyxcbiAgICAgICAgTEw6ICdNTU1NIEQsIFlZWVknLFxuICAgICAgICBMTEw6ICdNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICAgICAgTExMTDogJ2RkZGQsIE1NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb25nRGF0ZUZvcm1hdChrZXkpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0sXG4gICAgICAgICAgICBmb3JtYXRVcHBlciA9IHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleS50b1VwcGVyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoZm9ybWF0IHx8ICFmb3JtYXRVcHBlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV0gPSBmb3JtYXRVcHBlclxuICAgICAgICAgICAgLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uICh0b2spIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ01NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdERCcgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnZGRkZCdcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvaztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuam9pbignJyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvbmdEYXRlRm9ybWF0W2tleV07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRJbnZhbGlkRGF0ZSA9ICdJbnZhbGlkIGRhdGUnO1xuXG4gICAgZnVuY3Rpb24gaW52YWxpZERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pbnZhbGlkRGF0ZTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdE9yZGluYWwgPSAnJWQnLFxuICAgICAgICBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSA9IC9cXGR7MSwyfS87XG5cbiAgICBmdW5jdGlvbiBvcmRpbmFsKG51bWJlcikge1xuICAgICAgICByZXR1cm4gdGhpcy5fb3JkaW5hbC5yZXBsYWNlKCclZCcsIG51bWJlcik7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRSZWxhdGl2ZVRpbWUgPSB7XG4gICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgcGFzdDogJyVzIGFnbycsXG4gICAgICAgIHM6ICdhIGZldyBzZWNvbmRzJyxcbiAgICAgICAgc3M6ICclZCBzZWNvbmRzJyxcbiAgICAgICAgbTogJ2EgbWludXRlJyxcbiAgICAgICAgbW06ICclZCBtaW51dGVzJyxcbiAgICAgICAgaDogJ2FuIGhvdXInLFxuICAgICAgICBoaDogJyVkIGhvdXJzJyxcbiAgICAgICAgZDogJ2EgZGF5JyxcbiAgICAgICAgZGQ6ICclZCBkYXlzJyxcbiAgICAgICAgdzogJ2Egd2VlaycsXG4gICAgICAgIHd3OiAnJWQgd2Vla3MnLFxuICAgICAgICBNOiAnYSBtb250aCcsXG4gICAgICAgIE1NOiAnJWQgbW9udGhzJyxcbiAgICAgICAgeTogJ2EgeWVhcicsXG4gICAgICAgIHl5OiAnJWQgeWVhcnMnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbc3RyaW5nXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KVxuICAgICAgICAgICAgPyBvdXRwdXQobnVtYmVyLCB3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKVxuICAgICAgICAgICAgOiBvdXRwdXQucmVwbGFjZSgvJWQvaSwgbnVtYmVyKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXN0RnV0dXJlKGRpZmYsIG91dHB1dCkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW2RpZmYgPiAwID8gJ2Z1dHVyZScgOiAncGFzdCddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihmb3JtYXQpID8gZm9ybWF0KG91dHB1dCkgOiBmb3JtYXQucmVwbGFjZSgvJXMvaSwgb3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWxpYXNlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdEFsaWFzKHVuaXQsIHNob3J0aGFuZCkge1xuICAgICAgICB2YXIgbG93ZXJDYXNlID0gdW5pdC50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBhbGlhc2VzW2xvd2VyQ2FzZV0gPSBhbGlhc2VzW2xvd2VyQ2FzZSArICdzJ10gPSBhbGlhc2VzW3Nob3J0aGFuZF0gPSB1bml0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdW5pdHMgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IGFsaWFzZXNbdW5pdHNdIHx8IGFsaWFzZXNbdW5pdHMudG9Mb3dlckNhc2UoKV1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU9iamVjdFVuaXRzKGlucHV0T2JqZWN0KSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSB7fSxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wLFxuICAgICAgICAgICAgcHJvcDtcblxuICAgICAgICBmb3IgKHByb3AgaW4gaW5wdXRPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGlucHV0T2JqZWN0LCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRQcm9wID0gbm9ybWFsaXplVW5pdHMocHJvcCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vcm1hbGl6ZWRQcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRJbnB1dFtub3JtYWxpemVkUHJvcF0gPSBpbnB1dE9iamVjdFtwcm9wXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbm9ybWFsaXplZElucHV0O1xuICAgIH1cblxuICAgIHZhciBwcmlvcml0aWVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0UHJpb3JpdHkodW5pdCwgcHJpb3JpdHkpIHtcbiAgICAgICAgcHJpb3JpdGllc1t1bml0XSA9IHByaW9yaXR5O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFByaW9yaXRpemVkVW5pdHModW5pdHNPYmopIHtcbiAgICAgICAgdmFyIHVuaXRzID0gW10sXG4gICAgICAgICAgICB1O1xuICAgICAgICBmb3IgKHUgaW4gdW5pdHNPYmopIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKHVuaXRzT2JqLCB1KSkge1xuICAgICAgICAgICAgICAgIHVuaXRzLnB1c2goeyB1bml0OiB1LCBwcmlvcml0eTogcHJpb3JpdGllc1t1XSB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB1bml0cy5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdW5pdHM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMZWFwWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiAoeWVhciAlIDQgPT09IDAgJiYgeWVhciAlIDEwMCAhPT0gMCkgfHwgeWVhciAlIDQwMCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNGbG9vcihudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIC8vIC0wIC0+IDBcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKSB8fCAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSW50KGFyZ3VtZW50Rm9yQ29lcmNpb24pIHtcbiAgICAgICAgdmFyIGNvZXJjZWROdW1iZXIgPSArYXJndW1lbnRGb3JDb2VyY2lvbixcbiAgICAgICAgICAgIHZhbHVlID0gMDtcblxuICAgICAgICBpZiAoY29lcmNlZE51bWJlciAhPT0gMCAmJiBpc0Zpbml0ZShjb2VyY2VkTnVtYmVyKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBhYnNGbG9vcihjb2VyY2VkTnVtYmVyKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0U2V0KHVuaXQsIGtlZXBUaW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2V0JDEodGhpcywgdW5pdCwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgdW5pdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0KG1vbSwgdW5pdCkge1xuICAgICAgICByZXR1cm4gbW9tLmlzVmFsaWQoKVxuICAgICAgICAgICAgPyBtb20uX2RbJ2dldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oKVxuICAgICAgICAgICAgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0JDEobW9tLCB1bml0LCB2YWx1ZSkge1xuICAgICAgICBpZiAobW9tLmlzVmFsaWQoKSAmJiAhaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdW5pdCA9PT0gJ0Z1bGxZZWFyJyAmJlxuICAgICAgICAgICAgICAgIGlzTGVhcFllYXIobW9tLnllYXIoKSkgJiZcbiAgICAgICAgICAgICAgICBtb20ubW9udGgoKSA9PT0gMSAmJlxuICAgICAgICAgICAgICAgIG1vbS5kYXRlKCkgPT09IDI5XG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0oXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBtb20ubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgZGF5c0luTW9udGgodmFsdWUsIG1vbS5tb250aCgpKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzdHJpbmdHZXQodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RyaW5nU2V0KHVuaXRzLCB2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHVuaXRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVPYmplY3RVbml0cyh1bml0cyk7XG4gICAgICAgICAgICB2YXIgcHJpb3JpdGl6ZWQgPSBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzKSxcbiAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgIHByaW9yaXRpemVkTGVuID0gcHJpb3JpdGl6ZWQubGVuZ3RoO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHByaW9yaXRpemVkTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICB0aGlzW3ByaW9yaXRpemVkW2ldLnVuaXRdKHVuaXRzW3ByaW9yaXRpemVkW2ldLnVuaXRdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbdW5pdHNdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB2YXIgbWF0Y2gxID0gL1xcZC8sIC8vICAgICAgIDAgLSA5XG4gICAgICAgIG1hdGNoMiA9IC9cXGRcXGQvLCAvLyAgICAgIDAwIC0gOTlcbiAgICAgICAgbWF0Y2gzID0gL1xcZHszfS8sIC8vICAgICAwMDAgLSA5OTlcbiAgICAgICAgbWF0Y2g0ID0gL1xcZHs0fS8sIC8vICAgIDAwMDAgLSA5OTk5XG4gICAgICAgIG1hdGNoNiA9IC9bKy1dP1xcZHs2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8yID0gL1xcZFxcZD8vLCAvLyAgICAgICAwIC0gOTlcbiAgICAgICAgbWF0Y2gzdG80ID0gL1xcZFxcZFxcZFxcZD8vLCAvLyAgICAgOTk5IC0gOTk5OVxuICAgICAgICBtYXRjaDV0bzYgPSAvXFxkXFxkXFxkXFxkXFxkXFxkPy8sIC8vICAgOTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2gxdG8zID0gL1xcZHsxLDN9LywgLy8gICAgICAgMCAtIDk5OVxuICAgICAgICBtYXRjaDF0bzQgPSAvXFxkezEsNH0vLCAvLyAgICAgICAwIC0gOTk5OVxuICAgICAgICBtYXRjaDF0bzYgPSAvWystXT9cXGR7MSw2fS8sIC8vIC05OTk5OTkgLSA5OTk5OTlcbiAgICAgICAgbWF0Y2hVbnNpZ25lZCA9IC9cXGQrLywgLy8gICAgICAgMCAtIGluZlxuICAgICAgICBtYXRjaFNpZ25lZCA9IC9bKy1dP1xcZCsvLCAvLyAgICAtaW5mIC0gaW5mXG4gICAgICAgIG1hdGNoT2Zmc2V0ID0gL1p8WystXVxcZFxcZDo/XFxkXFxkL2dpLCAvLyArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hTaG9ydE9mZnNldCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/L2dpLCAvLyArMDAgLTAwICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFRpbWVzdGFtcCA9IC9bKy1dP1xcZCsoXFwuXFxkezEsM30pPy8sIC8vIDEyMzQ1Njc4OSAxMjM0NTY3ODkuMTIzXG4gICAgICAgIC8vIGFueSB3b3JkIChvciB0d28pIGNoYXJhY3RlcnMgb3IgbnVtYmVycyBpbmNsdWRpbmcgdHdvL3RocmVlIHdvcmQgbW9udGggaW4gYXJhYmljLlxuICAgICAgICAvLyBpbmNsdWRlcyBzY290dGlzaCBnYWVsaWMgdHdvIHdvcmQgYW5kIGh5cGhlbmF0ZWQgbW9udGhzXG4gICAgICAgIG1hdGNoV29yZCA9XG4gICAgICAgICAgICAvWzAtOV17MCwyNTZ9WydhLXpcXHUwMEEwLVxcdTA1RkZcXHUwNzAwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGMDdcXHVGRjEwLVxcdUZGRUZdezEsMjU2fXxbXFx1MDYwMC1cXHUwNkZGXFwvXXsxLDI1Nn0oXFxzKj9bXFx1MDYwMC1cXHUwNkZGXXsxLDI1Nn0pezEsMn0vaSxcbiAgICAgICAgcmVnZXhlcztcblxuICAgIHJlZ2V4ZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFJlZ2V4VG9rZW4odG9rZW4sIHJlZ2V4LCBzdHJpY3RSZWdleCkge1xuICAgICAgICByZWdleGVzW3Rva2VuXSA9IGlzRnVuY3Rpb24ocmVnZXgpXG4gICAgICAgICAgICA/IHJlZ2V4XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlRGF0YSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzU3RyaWN0ICYmIHN0cmljdFJlZ2V4ID8gc3RyaWN0UmVnZXggOiByZWdleDtcbiAgICAgICAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykge1xuICAgICAgICBpZiAoIWhhc093blByb3AocmVnZXhlcywgdG9rZW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cCh1bmVzY2FwZUZvcm1hdCh0b2tlbikpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlZ2V4ZXNbdG9rZW5dKGNvbmZpZy5fc3RyaWN0LCBjb25maWcuX2xvY2FsZSk7XG4gICAgfVxuXG4gICAgLy8gQ29kZSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMzU2MTQ5My9pcy10aGVyZS1hLXJlZ2V4cC1lc2NhcGUtZnVuY3Rpb24taW4tamF2YXNjcmlwdFxuICAgIGZ1bmN0aW9uIHVuZXNjYXBlRm9ybWF0KHMpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2V4RXNjYXBlKFxuICAgICAgICAgICAgc1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdcXFxcJywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgIC9cXFxcKFxcWyl8XFxcXChcXF0pfFxcWyhbXlxcXVxcW10qKVxcXXxcXFxcKC4pL2csXG4gICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtYXRjaGVkLCBwMSwgcDIsIHAzLCBwNCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAxIHx8IHAyIHx8IHAzIHx8IHA0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlZ2V4RXNjYXBlKHMpIHtcbiAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XG4gICAgfVxuXG4gICAgdmFyIHRva2VucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBmdW5jID0gY2FsbGJhY2ssXG4gICAgICAgICAgICB0b2tlbkxlbjtcbiAgICAgICAgaWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHRva2VuID0gW3Rva2VuXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOdW1iZXIoY2FsbGJhY2spKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2NhbGxiYWNrXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbi5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5baV1dID0gZnVuYztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICBjb25maWcuX3cgPSBjb25maWcuX3cgfHwge307XG4gICAgICAgICAgICBjYWxsYmFjayhpbnB1dCwgY29uZmlnLl93LCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIGlucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwgJiYgaGFzT3duUHJvcCh0b2tlbnMsIHRva2VuKSkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuXShpbnB1dCwgY29uZmlnLl9hLCBjb25maWcsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBZRUFSID0gMCxcbiAgICAgICAgTU9OVEggPSAxLFxuICAgICAgICBEQVRFID0gMixcbiAgICAgICAgSE9VUiA9IDMsXG4gICAgICAgIE1JTlVURSA9IDQsXG4gICAgICAgIFNFQ09ORCA9IDUsXG4gICAgICAgIE1JTExJU0VDT05EID0gNixcbiAgICAgICAgV0VFSyA9IDcsXG4gICAgICAgIFdFRUtEQVkgPSA4O1xuXG4gICAgZnVuY3Rpb24gbW9kKG4sIHgpIHtcbiAgICAgICAgcmV0dXJuICgobiAlIHgpICsgeCkgJSB4O1xuICAgIH1cblxuICAgIHZhciBpbmRleE9mO1xuXG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5pbmRleE9mKSB7XG4gICAgICAgIGluZGV4T2YgPSBBcnJheS5wcm90b3R5cGUuaW5kZXhPZjtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpbmRleE9mID0gZnVuY3Rpb24gKG8pIHtcbiAgICAgICAgICAgIC8vIEkga25vd1xuICAgICAgICAgICAgdmFyIGk7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzW2ldID09PSBvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgICBpZiAoaXNOYU4oeWVhcikgfHwgaXNOYU4obW9udGgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtb2RNb250aCA9IG1vZChtb250aCwgMTIpO1xuICAgICAgICB5ZWFyICs9IChtb250aCAtIG1vZE1vbnRoKSAvIDEyO1xuICAgICAgICByZXR1cm4gbW9kTW9udGggPT09IDFcbiAgICAgICAgICAgID8gaXNMZWFwWWVhcih5ZWFyKVxuICAgICAgICAgICAgICAgID8gMjlcbiAgICAgICAgICAgICAgICA6IDI4XG4gICAgICAgICAgICA6IDMxIC0gKChtb2RNb250aCAlIDcpICUgMik7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ00nLCBbJ01NJywgMl0sICdNbycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGgoKSArIDE7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU1NJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubW9udGhzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21vbnRoJywgJ00nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21vbnRoJywgOCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdNJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTU0nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLm1vbnRoc1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNJywgJ01NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gdG9JbnQoaW5wdXQpIC0gMTtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydNTU0nLCAnTU1NTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtb250aCA9IGNvbmZpZy5fbG9jYWxlLm1vbnRoc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZmluZCBhIG1vbnRoIG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZC5cbiAgICAgICAgaWYgKG1vbnRoICE9IG51bGwpIHtcbiAgICAgICAgICAgIGFycmF5W01PTlRIXSA9IG1vbnRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZE1vbnRoID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTW9udGhzID1cbiAgICAgICAgICAgICdKYW51YXJ5X0ZlYnJ1YXJ5X01hcmNoX0FwcmlsX01heV9KdW5lX0p1bHlfQXVndXN0X1NlcHRlbWJlcl9PY3RvYmVyX05vdmVtYmVyX0RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCA9XG4gICAgICAgICAgICAnSmFuX0ZlYl9NYXJfQXByX01heV9KdW5fSnVsX0F1Z19TZXBfT2N0X05vdl9EZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIE1PTlRIU19JTl9GT1JNQVQgPSAvRFtvRF0/KFxcW1teXFxbXFxdXSpcXF18XFxzKStNTU1NPy8sXG4gICAgICAgIGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0TW9udGhzUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHMobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzXG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1ttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1tcbiAgICAgICAgICAgICAgICAgICh0aGlzLl9tb250aHMuaXNGb3JtYXQgfHwgTU9OVEhTX0lOX0ZPUk1BVCkudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNTaG9ydChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFsnc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFttLm1vbnRoKCldXG4gICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0W1xuICAgICAgICAgICAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVC50ZXN0KGZvcm1hdCkgPyAnZm9ybWF0JyA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gbW9udGhOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHVzZWRcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdNTU0nKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzUGFyc2UobW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlLmNhbGwodGhpcywgbW9udGhOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiBhZGQgc29ydGluZ1xuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyXG4gICAgICAgIC8vIHNlZSBzb3J0aW5nIGluIGNvbXB1dGVNb250aHNQYXJzZVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc3RyaWN0ICYmICF0aGlzLl9tb250aHNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykgKyAnfF4nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl9tb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHNldE1vbnRoKG1vbSwgdmFsdWUpIHtcbiAgICAgICAgdmFyIGRheU9mTW9udGg7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBpZiAoL15cXGQrJC8udGVzdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSW50KHZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBtb20ubG9jYWxlRGF0YSgpLm1vbnRoc1BhcnNlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAvLyBUT0RPOiBBbm90aGVyIHNpbGVudCBmYWlsdXJlP1xuICAgICAgICAgICAgICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGF5T2ZNb250aCA9IE1hdGgubWluKG1vbS5kYXRlKCksIGRheXNJbk1vbnRoKG1vbS55ZWFyKCksIHZhbHVlKSk7XG4gICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyAnTW9udGgnXSh2YWx1ZSwgZGF5T2ZNb250aCk7XG4gICAgICAgIHJldHVybiBtb207XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TW9udGgodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKHRoaXMsIHZhbHVlKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCAnTW9udGgnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKCkge1xuICAgICAgICByZXR1cm4gZGF5c0luTW9udGgodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IGRlZmF1bHRNb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fbW9udGhzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVNb250aHNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBkZWZhdWx0TW9udGhzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVNb250aHNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIG1vbnRoIChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgc2hvcnRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShzaG9ydFBpZWNlc1tpXSk7XG4gICAgICAgICAgICBsb25nUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobG9uZ1BpZWNlc1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICAgICAgICAgIG1peGVkUGllY2VzW2ldID0gcmVnZXhFc2NhcGUobWl4ZWRQaWVjZXNbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbW9udGhzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgdGhpcy5fbW9udGhzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX21vbnRoc1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdZJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgeSA9IHRoaXMueWVhcigpO1xuICAgICAgICByZXR1cm4geSA8PSA5OTk5ID8gemVyb0ZpbGwoeSwgNCkgOiAnKycgKyB5O1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWScsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWScsIDRdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVknLCA1XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZWScsIDYsIHRydWVdLCAwLCAneWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd5ZWFyJywgJ3knKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgneWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWScsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydZWVlZWScsICdZWVlZWVknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbignWVlZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPVxuICAgICAgICAgICAgaW5wdXQubGVuZ3RoID09PSAyID8gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpIDogdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBkYXlzSW5ZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIoeWVhcikgPyAzNjYgOiAzNjU7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyID0gZnVuY3Rpb24gKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0b0ludChpbnB1dCkgKyAodG9JbnQoaW5wdXQpID4gNjggPyAxOTAwIDogMjAwMCk7XG4gICAgfTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRZZWFyID0gbWFrZUdldFNldCgnRnVsbFllYXInLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGdldElzTGVhcFllYXIoKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKSB7XG4gICAgICAgIC8vIGNhbid0IGp1c3QgYXBwbHkoKSB0byBjcmVhdGUgYSBkYXRlOlxuICAgICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3EvMTgxMzQ4XG4gICAgICAgIHZhciBkYXRlO1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldEZ1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVENEYXRlKHkpIHtcbiAgICAgICAgdmFyIGRhdGUsIGFyZ3M7XG4gICAgICAgIC8vIHRoZSBEYXRlLlVUQyBmdW5jdGlvbiByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBhcmdzWzBdID0geSArIDQwMDtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmdzKSk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9XG5cbiAgICAvLyBzdGFydC1vZi1maXJzdC13ZWVrIC0gc3RhcnQtb2YteWVhclxuICAgIGZ1bmN0aW9uIGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgLy8gZmlyc3Qtd2VlayBkYXkgLS0gd2hpY2ggamFudWFyeSBpcyBhbHdheXMgaW4gdGhlIGZpcnN0IHdlZWsgKDQgZm9yIGlzbywgMSBmb3Igb3RoZXIpXG4gICAgICAgICAgICBmd2QgPSA3ICsgZG93IC0gZG95LFxuICAgICAgICAgICAgLy8gZmlyc3Qtd2VlayBkYXkgbG9jYWwgd2Vla2RheSAtLSB3aGljaCBsb2NhbCB3ZWVrZGF5IGlzIGZ3ZFxuICAgICAgICAgICAgZndkbHcgPSAoNyArIGNyZWF0ZVVUQ0RhdGUoeWVhciwgMCwgZndkKS5nZXRVVENEYXkoKSAtIGRvdykgJSA3O1xuXG4gICAgICAgIHJldHVybiAtZndkbHcgKyBmd2QgLSAxO1xuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGUjQ2FsY3VsYXRpbmdfYV9kYXRlX2dpdmVuX3RoZV95ZWFyLjJDX3dlZWtfbnVtYmVyX2FuZF93ZWVrZGF5XG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtzKHllYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBsb2NhbFdlZWtkYXkgPSAoNyArIHdlZWtkYXkgLSBkb3cpICUgNyxcbiAgICAgICAgICAgIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF5T2ZZZWFyID0gMSArIDcgKiAod2VlayAtIDEpICsgbG9jYWxXZWVrZGF5ICsgd2Vla09mZnNldCxcbiAgICAgICAgICAgIHJlc1llYXIsXG4gICAgICAgICAgICByZXNEYXlPZlllYXI7XG5cbiAgICAgICAgaWYgKGRheU9mWWVhciA8PSAwKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciAtIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlzSW5ZZWFyKHJlc1llYXIpICsgZGF5T2ZZZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKGRheU9mWWVhciA+IGRheXNJblllYXIoeWVhcikpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyICsgMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhciAtIGRheXNJblllYXIoeWVhcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhcjtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheU9mWWVhcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICAgICAgZGF5T2ZZZWFyOiByZXNEYXlPZlllYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla09mWWVhcihtb20sIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KG1vbS55ZWFyKCksIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWsgPSBNYXRoLmZsb29yKChtb20uZGF5T2ZZZWFyKCkgLSB3ZWVrT2Zmc2V0IC0gMSkgLyA3KSArIDEsXG4gICAgICAgICAgICByZXNXZWVrLFxuICAgICAgICAgICAgcmVzWWVhcjtcblxuICAgICAgICBpZiAod2VlayA8IDEpIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpIC0gMTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrICsgd2Vla3NJblllYXIocmVzWWVhciwgZG93LCBkb3kpO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWsgPiB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrIC0gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgKyAxO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCk7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlaztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB3ZWVrOiByZXNXZWVrLFxuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrc0luWWVhcih5ZWFyLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0TmV4dCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyICsgMSwgZG93LCBkb3kpO1xuICAgICAgICByZXR1cm4gKGRheXNJblllYXIoeWVhcikgLSB3ZWVrT2Zmc2V0ICsgd2Vla09mZnNldE5leHQpIC8gNztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigndycsIFsnd3cnLCAyXSwgJ3dvJywgJ3dlZWsnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignVycsIFsnV1cnLCAyXSwgJ1dvJywgJ2lzb1dlZWsnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2VlaycsICd3Jyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrJywgJ1cnKTtcblxuICAgIC8vIFBSSU9SSVRJRVNcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2VlaycsIDUpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2VlaycsIDUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigndycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignd3cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignVycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignV1cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihcbiAgICAgICAgWyd3JywgJ3d3JywgJ1cnLCAnV1cnXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAxKV0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vlayhtb20pIHtcbiAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIobW9tLCB0aGlzLl93ZWVrLmRvdywgdGhpcy5fd2Vlay5kb3kpLndlZWs7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrID0ge1xuICAgICAgICBkb3c6IDAsIC8vIFN1bmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICBkb3k6IDYsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDZ0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZldlZWsoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG95O1xuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB0aGlzLmxvY2FsZURhdGEoKS53ZWVrKHRoaXMpO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHdlZWtPZlllYXIodGhpcywgMSwgNCkud2VlaztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkJywgMCwgJ2RvJywgJ2RheScpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNNaW4odGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZScsIDAsIDAsICd3ZWVrZGF5Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ0UnLCAwLCAwLCAnaXNvV2Vla2RheScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXknLCAnZCcpO1xuICAgIGFkZFVuaXRBbGlhcygnd2Vla2RheScsICdlJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrZGF5JywgJ0UnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla2RheScsIDExKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0UnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2RkJywgJ2RkZCcsICdkZGRkJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgd2Vla2RheSA9IGNvbmZpZy5fbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBnZXQgYSB3ZWVrZGF5IG5hbWUsIG1hcmsgdGhlIGRhdGUgYXMgaW52YWxpZFxuICAgICAgICBpZiAod2Vla2RheSAhPSBudWxsKSB7XG4gICAgICAgICAgICB3ZWVrLmQgPSB3ZWVrZGF5O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZFdlZWtkYXkgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkJywgJ2UnLCAnRSddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc05hTihpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaW5wdXQgPSBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCk7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIGxvY2FsZSkge1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KSAlIDcgfHwgNztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNOYU4oaW5wdXQpID8gbnVsbCA6IGlucHV0O1xuICAgIH1cblxuICAgIC8vIExPQ0FMRVNcbiAgICBmdW5jdGlvbiBzaGlmdFdlZWtkYXlzKHdzLCBuKSB7XG4gICAgICAgIHJldHVybiB3cy5zbGljZShuLCA3KS5jb25jYXQod3Muc2xpY2UoMCwgbikpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2Vla2RheXMgPVxuICAgICAgICAgICAgJ1N1bmRheV9Nb25kYXlfVHVlc2RheV9XZWRuZXNkYXlfVGh1cnNkYXlfRnJpZGF5X1NhdHVyZGF5Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCA9ICdTdW5fTW9uX1R1ZV9XZWRfVGh1X0ZyaV9TYXQnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiA9ICdTdV9Nb19UdV9XZV9UaF9Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzUmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciB3ZWVrZGF5cyA9IGlzQXJyYXkodGhpcy5fd2Vla2RheXMpXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzW1xuICAgICAgICAgICAgICAgICAgbSAmJiBtICE9PSB0cnVlICYmIHRoaXMuX3dlZWtkYXlzLmlzRm9ybWF0LnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdO1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHdlZWtkYXlzLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgPyB3ZWVrZGF5c1ttLmRheSgpXVxuICAgICAgICAgICAgOiB3ZWVrZGF5cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1Nob3J0KG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c1Nob3J0LCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0W20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNNaW4obSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzTWluLCB0aGlzLl93ZWVrLmRvdylcbiAgICAgICAgICAgIDogbVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblttLmRheSgpXVxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZSQxKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGlpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbGxjID0gd2Vla2RheU5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c01pbihcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzU2hvcnQoXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXMobW9tLCAnJykudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSAnZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzUGFyc2Uod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZSQxLmNhbGwodGhpcywgd2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG5cbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIGlmIChzdHJpY3QgJiYgIXRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHJlZ2V4ID1cbiAgICAgICAgICAgICAgICAgICAgJ14nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5cyhtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheSA9IHRoaXMuX2lzVVRDID8gdGhpcy5fZC5nZXRVVENEYXkoKSA6IHRoaXMuX2QuZ2V0RGF5KCk7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHBhcnNlV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGlucHV0IC0gZGF5LCAnZCcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGRheTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldExvY2FsZURheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdlZWtkYXkgPSAodGhpcy5kYXkoKSArIDcgLSB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3cpICUgNztcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrZGF5IDogdGhpcy5hZGQoaW5wdXQgLSB3ZWVrZGF5LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT0RheU9mV2VlayhpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBiZWhhdmVzIHRoZSBzYW1lIGFzIG1vbWVudCNkYXkgZXhjZXB0XG4gICAgICAgIC8vIGFzIGEgZ2V0dGVyLCByZXR1cm5zIDcgaW5zdGVhZCBvZiAwICgxLTcgcmFuZ2UgaW5zdGVhZCBvZiAwLTYpXG4gICAgICAgIC8vIGFzIGEgc2V0dGVyLCBzdW5kYXkgc2hvdWxkIGJlbG9uZyB0byB0aGUgcHJldmlvdXMgd2Vlay5cblxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIHdlZWtkYXkgPSBwYXJzZUlzb1dlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSh0aGlzLmRheSgpICUgNyA/IHdlZWtkYXkgOiB3ZWVrZGF5IC0gNyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkoKSB8fCA3O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IGRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzTWluUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSBkZWZhdWx0V2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZVdlZWtkYXlzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtaW5QaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIHNob3J0UGllY2VzID0gW10sXG4gICAgICAgICAgICBsb25nUGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIG1pbnAsXG4gICAgICAgICAgICBzaG9ydHAsXG4gICAgICAgICAgICBsb25ncDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBtaW5wID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c01pbihtb20sICcnKSk7XG4gICAgICAgICAgICBzaG9ydHAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICAgICAgbG9uZ3AgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1pblBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbG9uZ1BpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKGxvbmdwKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBTb3J0aW5nIG1ha2VzIHN1cmUgaWYgb25lIHdlZWtkYXkgKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBtaW5QaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG5cbiAgICAgICAgdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbWluUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIGhGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgJSAxMiB8fCAxMjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBrRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpIHx8IDI0O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdIJywgWydISCcsIDJdLCAwLCAnaG91cicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdoJywgWydoaCcsIDJdLCAwLCBoRm9ybWF0KTtcbiAgICBhZGRGb3JtYXRUb2tlbignaycsIFsna2snLCAyXSwgMCwga0Zvcm1hdCk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyBoRm9ybWF0LmFwcGx5KHRoaXMpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgaEZvcm1hdC5hcHBseSh0aGlzKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gJycgKyB0aGlzLmhvdXJzKCkgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICB0aGlzLmhvdXJzKCkgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW0odG9rZW4sIGxvd2VyY2FzZSkge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1lcmlkaWVtKFxuICAgICAgICAgICAgICAgIHRoaXMuaG91cnMoKSxcbiAgICAgICAgICAgICAgICB0aGlzLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgICAgICBsb3dlcmNhc2VcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG1lcmlkaWVtKCdhJywgdHJ1ZSk7XG4gICAgbWVyaWRpZW0oJ0EnLCBmYWxzZSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2hvdXInLCAnaCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2hvdXInLCAxMyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBmdW5jdGlvbiBtYXRjaE1lcmlkaWVtKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fbWVyaWRpZW1QYXJzZTtcbiAgICB9XG5cbiAgICBhZGRSZWdleFRva2VuKCdhJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignQScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0gnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2gnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2snLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0hIJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2hoJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2trJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignaG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdobW1zcycsIG1hdGNoNXRvNik7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tJywgbWF0Y2gzdG80KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW1zcycsIG1hdGNoNXRvNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnSCcsICdISCddLCBIT1VSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaycsICdrayddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIGtJbnB1dCA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSBrSW5wdXQgPT09IDI0ID8gMCA6IGtJbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnYScsICdBJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2lzUG0gPSBjb25maWcuX2xvY2FsZS5pc1BNKGlucHV0KTtcbiAgICAgICAgY29uZmlnLl9tZXJpZGllbSA9IGlucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydoJywgJ2hoJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignaG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICB9KTtcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUlzUE0oaW5wdXQpIHtcbiAgICAgICAgLy8gSUU4IFF1aXJrcyBNb2RlICYgSUU3IFN0YW5kYXJkcyBNb2RlIGRvIG5vdCBhbGxvdyBhY2Nlc3Npbmcgc3RyaW5ncyBsaWtlIGFycmF5c1xuICAgICAgICAvLyBVc2luZyBjaGFyQXQgc2hvdWxkIGJlIG1vcmUgY29tcGF0aWJsZS5cbiAgICAgICAgcmV0dXJuIChpbnB1dCArICcnKS50b0xvd2VyQ2FzZSgpLmNoYXJBdCgwKSA9PT0gJ3AnO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSA9IC9bYXBdXFwuP20/XFwuPy9pLFxuICAgICAgICAvLyBTZXR0aW5nIHRoZSBob3VyIHNob3VsZCBrZWVwIHRoZSB0aW1lLCBiZWNhdXNlIHRoZSB1c2VyIGV4cGxpY2l0bHlcbiAgICAgICAgLy8gc3BlY2lmaWVkIHdoaWNoIGhvdXIgdGhleSB3YW50LiBTbyB0cnlpbmcgdG8gbWFpbnRhaW4gdGhlIHNhbWUgaG91ciAoaW5cbiAgICAgICAgLy8gYSBuZXcgdGltZXpvbmUpIG1ha2VzIHNlbnNlLiBBZGRpbmcvc3VidHJhY3RpbmcgaG91cnMgZG9lcyBub3QgZm9sbG93XG4gICAgICAgIC8vIHRoaXMgcnVsZS5cbiAgICAgICAgZ2V0U2V0SG91ciA9IG1ha2VHZXRTZXQoJ0hvdXJzJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNZXJpZGllbShob3VycywgbWludXRlcywgaXNMb3dlcikge1xuICAgICAgICBpZiAoaG91cnMgPiAxMSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAncG0nIDogJ1BNJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ2FtJyA6ICdBTSc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYmFzZUNvbmZpZyA9IHtcbiAgICAgICAgY2FsZW5kYXI6IGRlZmF1bHRDYWxlbmRhcixcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IGRlZmF1bHRMb25nRGF0ZUZvcm1hdCxcbiAgICAgICAgaW52YWxpZERhdGU6IGRlZmF1bHRJbnZhbGlkRGF0ZSxcbiAgICAgICAgb3JkaW5hbDogZGVmYXVsdE9yZGluYWwsXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlLFxuICAgICAgICByZWxhdGl2ZVRpbWU6IGRlZmF1bHRSZWxhdGl2ZVRpbWUsXG5cbiAgICAgICAgbW9udGhzOiBkZWZhdWx0TG9jYWxlTW9udGhzLFxuICAgICAgICBtb250aHNTaG9ydDogZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LFxuXG4gICAgICAgIHdlZWs6IGRlZmF1bHRMb2NhbGVXZWVrLFxuXG4gICAgICAgIHdlZWtkYXlzOiBkZWZhdWx0TG9jYWxlV2Vla2RheXMsXG4gICAgICAgIHdlZWtkYXlzTWluOiBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4sXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LFxuXG4gICAgICAgIG1lcmlkaWVtUGFyc2U6IGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlLFxuICAgIH07XG5cbiAgICAvLyBpbnRlcm5hbCBzdG9yYWdlIGZvciBsb2NhbGUgY29uZmlnIGZpbGVzXG4gICAgdmFyIGxvY2FsZXMgPSB7fSxcbiAgICAgICAgbG9jYWxlRmFtaWxpZXMgPSB7fSxcbiAgICAgICAgZ2xvYmFsTG9jYWxlO1xuXG4gICAgZnVuY3Rpb24gY29tbW9uUHJlZml4KGFycjEsIGFycjIpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBtaW5sID0gTWF0aC5taW4oYXJyMS5sZW5ndGgsIGFycjIubGVuZ3RoKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG1pbmw7IGkgKz0gMSkge1xuICAgICAgICAgICAgaWYgKGFycjFbaV0gIT09IGFycjJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWlubDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVMb2NhbGUoa2V5KSB7XG4gICAgICAgIHJldHVybiBrZXkgPyBrZXkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdfJywgJy0nKSA6IGtleTtcbiAgICB9XG5cbiAgICAvLyBwaWNrIHRoZSBsb2NhbGUgZnJvbSB0aGUgYXJyYXlcbiAgICAvLyB0cnkgWydlbi1hdScsICdlbi1nYiddIGFzICdlbi1hdScsICdlbi1nYicsICdlbicsIGFzIGluIG1vdmUgdGhyb3VnaCB0aGUgbGlzdCB0cnlpbmcgZWFjaFxuICAgIC8vIHN1YnN0cmluZyBmcm9tIG1vc3Qgc3BlY2lmaWMgdG8gbGVhc3QsIGJ1dCBtb3ZlIHRvIHRoZSBuZXh0IGFycmF5IGl0ZW0gaWYgaXQncyBhIG1vcmUgc3BlY2lmaWMgdmFyaWFudCB0aGFuIHRoZSBjdXJyZW50IHJvb3RcbiAgICBmdW5jdGlvbiBjaG9vc2VMb2NhbGUobmFtZXMpIHtcbiAgICAgICAgdmFyIGkgPSAwLFxuICAgICAgICAgICAgaixcbiAgICAgICAgICAgIG5leHQsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBzcGxpdDtcblxuICAgICAgICB3aGlsZSAoaSA8IG5hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgc3BsaXQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaV0pLnNwbGl0KCctJyk7XG4gICAgICAgICAgICBqID0gc3BsaXQubGVuZ3RoO1xuICAgICAgICAgICAgbmV4dCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpICsgMV0pO1xuICAgICAgICAgICAgbmV4dCA9IG5leHQgPyBuZXh0LnNwbGl0KCctJykgOiBudWxsO1xuICAgICAgICAgICAgd2hpbGUgKGogPiAwKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShzcGxpdC5zbGljZSgwLCBqKS5qb2luKCctJykpO1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBuZXh0ICYmXG4gICAgICAgICAgICAgICAgICAgIG5leHQubGVuZ3RoID49IGogJiZcbiAgICAgICAgICAgICAgICAgICAgY29tbW9uUHJlZml4KHNwbGl0LCBuZXh0KSA+PSBqIC0gMVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAvL3RoZSBuZXh0IGFycmF5IGl0ZW0gaXMgYmV0dGVyIHRoYW4gYSBzaGFsbG93ZXIgc3Vic3RyaW5nIG9mIHRoaXMgb25lXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBqLS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpIHtcbiAgICAgICAgLy8gUHJldmVudCBuYW1lcyB0aGF0IGxvb2sgbGlrZSBmaWxlc3lzdGVtIHBhdGhzLCBpLmUgY29udGFpbiAnLycgb3IgJ1xcJ1xuICAgICAgICByZXR1cm4gbmFtZS5tYXRjaCgnXlteL1xcXFxcXFxcXSokJykgIT0gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2FkTG9jYWxlKG5hbWUpIHtcbiAgICAgICAgdmFyIG9sZExvY2FsZSA9IG51bGwsXG4gICAgICAgICAgICBhbGlhc2VkUmVxdWlyZTtcbiAgICAgICAgLy8gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gcmVnaXN0ZXIgYW5kIGxvYWQgYWxsIHRoZSBsb2NhbGVzIGluIE5vZGVcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgbW9kdWxlICYmXG4gICAgICAgICAgICBtb2R1bGUuZXhwb3J0cyAmJlxuICAgICAgICAgICAgaXNMb2NhbGVOYW1lU2FuZShuYW1lKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgb2xkTG9jYWxlID0gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlID0gcmVxdWlyZTtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSgnLi9sb2NhbGUvJyArIG5hbWUpO1xuICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShvbGRMb2NhbGUpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIG1hcmsgYXMgbm90IGZvdW5kIHRvIGF2b2lkIHJlcGVhdGluZyBleHBlbnNpdmUgZmlsZSByZXF1aXJlIGNhbGwgY2F1c2luZyBoaWdoIENQVVxuICAgICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGZpbmQgZW4tVVMsIGVuX1VTLCBlbi11cyBmb3IgZXZlcnkgZm9ybWF0IGNhbGxcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbnVsbDsgLy8gbnVsbCBtZWFucyBub3QgZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgbG9hZCBsb2NhbGUgYW5kIHRoZW4gc2V0IHRoZSBnbG9iYWwgbG9jYWxlLiAgSWZcbiAgICAvLyBubyBhcmd1bWVudHMgYXJlIHBhc3NlZCBpbiwgaXQgd2lsbCBzaW1wbHkgcmV0dXJuIHRoZSBjdXJyZW50IGdsb2JhbFxuICAgIC8vIGxvY2FsZSBrZXkuXG4gICAgZnVuY3Rpb24gZ2V0U2V0R2xvYmFsTG9jYWxlKGtleSwgdmFsdWVzKSB7XG4gICAgICAgIHZhciBkYXRhO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRlZmluZUxvY2FsZShrZXksIHZhbHVlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgLy8gbW9tZW50LmR1cmF0aW9uLl9sb2NhbGUgPSBtb21lbnQuX2xvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgZ2xvYmFsTG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiBjb25zb2xlLndhcm4pIHtcbiAgICAgICAgICAgICAgICAgICAgLy93YXJuIHVzZXIgaWYgYXJndW1lbnRzIGFyZSBwYXNzZWQgYnV0IHRoZSBsb2NhbGUgY291bGQgbm90IGJlIHNldFxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgICAnTG9jYWxlICcgKyBrZXkgKyAnIG5vdCBmb3VuZC4gRGlkIHlvdSBmb3JnZXQgdG8gbG9hZCBpdD8nXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZpbmVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcbiAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgICdkZWZpbmVMb2NhbGVPdmVycmlkZScsXG4gICAgICAgICAgICAgICAgICAgICd1c2UgbW9tZW50LnVwZGF0ZUxvY2FsZShsb2NhbGVOYW1lLCBjb25maWcpIHRvIGNoYW5nZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdhbiBleGlzdGluZyBsb2NhbGUuIG1vbWVudC5kZWZpbmVMb2NhbGUobG9jYWxlTmFtZSwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29uZmlnKSBzaG91bGQgb25seSBiZSB1c2VkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGUgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZGVmaW5lLWxvY2FsZS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW25hbWVdLl9jb25maWc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoY29uZmlnLnBhcmVudExvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG5ldyBMb2NhbGUobWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSk7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVGYW1pbGllc1tuYW1lXSkge1xuICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVmaW5lTG9jYWxlKHgubmFtZSwgeC5jb25maWcpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIC8vIG1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGxvY2FsZSBBRlRFUiBhbGwgY2hpbGQgbG9jYWxlcyBoYXZlIGJlZW5cbiAgICAgICAgICAgIC8vIGNyZWF0ZWQsIHNvIHdlIHdvbid0IGVuZCB1cCB3aXRoIHRoZSBjaGlsZCBsb2NhbGUgc2V0LlxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVzZWZ1bCBmb3IgdGVzdGluZ1xuICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVwZGF0ZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsICYmIGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgY2hpbGQgbG9jYWxlIGluLXBsYWNlIHRvIGF2b2lkIG1lbW9yeS1sZWFrc1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0uc2V0KG1lcmdlQ29uZmlncyhsb2NhbGVzW25hbWVdLl9jb25maWcsIGNvbmZpZykpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBNRVJHRVxuICAgICAgICAgICAgICAgIHRtcExvY2FsZSA9IGxvYWRMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IHRtcExvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWcgPSBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAvLyB1cGRhdGVMb2NhbGUgaXMgY2FsbGVkIGZvciBjcmVhdGluZyBhIG5ldyBsb2NhbGVcbiAgICAgICAgICAgICAgICAgICAgLy8gU2V0IGFiYnIgc28gaXQgd2lsbCBoYXZlIGEgbmFtZSAoZ2V0dGVycyByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5kZWZpbmVkIG90aGVyd2lzZSkuXG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5hYmJyID0gbmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9jYWxlID0gbmV3IExvY2FsZShjb25maWcpO1xuICAgICAgICAgICAgICAgIGxvY2FsZS5wYXJlbnRMb2NhbGUgPSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcGFzcyBudWxsIGZvciBjb25maWcgdG8gdW51cGRhdGUsIHVzZWZ1bCBmb3IgdGVzdHNcbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBnZXRTZXRHbG9iYWxMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIHJldHVybnMgbG9jYWxlIGRhdGFcbiAgICBmdW5jdGlvbiBnZXRMb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBsb2NhbGU7XG5cbiAgICAgICAgaWYgKGtleSAmJiBrZXkuX2xvY2FsZSAmJiBrZXkuX2xvY2FsZS5fYWJicikge1xuICAgICAgICAgICAga2V5ID0ga2V5Ll9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWtleSkge1xuICAgICAgICAgICAgcmV0dXJuIGdsb2JhbExvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICAvL3Nob3J0LWNpcmN1aXQgZXZlcnl0aGluZyBlbHNlXG4gICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxvY2FsZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGtleSA9IFtrZXldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNob29zZUxvY2FsZShrZXkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RMb2NhbGVzKCkge1xuICAgICAgICByZXR1cm4ga2V5cyhsb2NhbGVzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja092ZXJmbG93KG0pIHtcbiAgICAgICAgdmFyIG92ZXJmbG93LFxuICAgICAgICAgICAgYSA9IG0uX2E7XG5cbiAgICAgICAgaWYgKGEgJiYgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID09PSAtMikge1xuICAgICAgICAgICAgb3ZlcmZsb3cgPVxuICAgICAgICAgICAgICAgIGFbTU9OVEhdIDwgMCB8fCBhW01PTlRIXSA+IDExXG4gICAgICAgICAgICAgICAgICAgID8gTU9OVEhcbiAgICAgICAgICAgICAgICAgICAgOiBhW0RBVEVdIDwgMSB8fCBhW0RBVEVdID4gZGF5c0luTW9udGgoYVtZRUFSXSwgYVtNT05USF0pXG4gICAgICAgICAgICAgICAgICAgID8gREFURVxuICAgICAgICAgICAgICAgICAgICA6IGFbSE9VUl0gPCAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgYVtIT1VSXSA+IDI0IHx8XG4gICAgICAgICAgICAgICAgICAgICAgKGFbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChhW01JTlVURV0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbU0VDT05EXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtNSUxMSVNFQ09ORF0gIT09IDApKVxuICAgICAgICAgICAgICAgICAgICA/IEhPVVJcbiAgICAgICAgICAgICAgICAgICAgOiBhW01JTlVURV0gPCAwIHx8IGFbTUlOVVRFXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gTUlOVVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtTRUNPTkRdIDwgMCB8fCBhW1NFQ09ORF0gPiA1OVxuICAgICAgICAgICAgICAgICAgICA/IFNFQ09ORFxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlMTElTRUNPTkRdIDwgMCB8fCBhW01JTExJU0VDT05EXSA+IDk5OVxuICAgICAgICAgICAgICAgICAgICA/IE1JTExJU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogLTE7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93RGF5T2ZZZWFyICYmXG4gICAgICAgICAgICAgICAgKG92ZXJmbG93IDwgWUVBUiB8fCBvdmVyZmxvdyA+IERBVEUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IERBVEU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtzICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFSztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla2RheSAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUtEQVk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9IG92ZXJmbG93O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuXG4gICAgLy8gaXNvIDg2MDEgcmVnZXhcbiAgICAvLyAwMDAwLTAwLTAwIDAwMDAtVzAwIG9yIDAwMDAtVzAwLTAgKyBUICsgMDAgb3IgMDA6MDAgb3IgMDA6MDA6MDAgb3IgMDA6MDA6MDAuMDAwICsgKzAwOjAwIG9yICswMDAwIG9yICswMClcbiAgICB2YXIgZXh0ZW5kZWRJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pLSg/OlxcZFxcZC1cXGRcXGR8V1xcZFxcZC1cXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkKSkoPzooVHwgKShcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgYmFzaWNJc29SZWdleCA9XG4gICAgICAgICAgICAvXlxccyooKD86WystXVxcZHs2fXxcXGR7NH0pKD86XFxkXFxkXFxkXFxkfFdcXGRcXGRcXGR8V1xcZFxcZHxcXGRcXGRcXGR8XFxkXFxkfCkpKD86KFR8ICkoXFxkXFxkKD86XFxkXFxkKD86XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICB0elJlZ2V4ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vLFxuICAgICAgICBpc29EYXRlcyA9IFtcbiAgICAgICAgICAgIFsnWVlZWVlZLU1NLUREJywgL1srLV1cXGR7Nn0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydZWVlZLU1NLUREJywgL1xcZHs0fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1ctRScsIC9cXGR7NH0tV1xcZFxcZC1cXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVycsIC9cXGR7NH0tV1xcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWS1EREQnLCAvXFxkezR9LVxcZHszfS9dLFxuICAgICAgICAgICAgWydZWVlZLU1NJywgL1xcZHs0fS1cXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlZWU1NREQnLCAvWystXVxcZHsxMH0vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NREQnLCAvXFxkezh9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XV0UnLCAvXFxkezR9V1xcZHszfS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1cnLCAvXFxkezR9V1xcZHsyfS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWURERCcsIC9cXGR7N30vXSxcbiAgICAgICAgICAgIFsnWVlZWU1NJywgL1xcZHs2fS8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWScsIC9cXGR7NH0vLCBmYWxzZV0sXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGlzbyB0aW1lIGZvcm1hdHMgYW5kIHJlZ2V4ZXNcbiAgICAgICAgaXNvVGltZXMgPSBbXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLlNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzLFNTU1MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISDptbScsIC9cXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW1zcy5TU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLFNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzJywgL1xcZFxcZFxcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tJywgL1xcZFxcZFxcZFxcZC9dLFxuICAgICAgICAgICAgWydISCcsIC9cXGRcXGQvXSxcbiAgICAgICAgXSxcbiAgICAgICAgYXNwTmV0SnNvblJlZ2V4ID0gL15cXC8/RGF0ZVxcKCgtP1xcZCspL2ksXG4gICAgICAgIC8vIFJGQyAyODIyIHJlZ2V4OiBGb3IgZGV0YWlscyBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI4MjIjc2VjdGlvbi0zLjNcbiAgICAgICAgcmZjMjgyMiA9XG4gICAgICAgICAgICAvXig/OihNb258VHVlfFdlZHxUaHV8RnJpfFNhdHxTdW4pLD9cXHMpPyhcXGR7MSwyfSlcXHMoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpXFxzKFxcZHsyLDR9KVxccyhcXGRcXGQpOihcXGRcXGQpKD86OihcXGRcXGQpKT9cXHMoPzooVVR8R01UfFtFQ01QXVtTRF1UKXwoW1p6XSl8KFsrLV1cXGR7NH0pKSQvLFxuICAgICAgICBvYnNPZmZzZXRzID0ge1xuICAgICAgICAgICAgVVQ6IDAsXG4gICAgICAgICAgICBHTVQ6IDAsXG4gICAgICAgICAgICBFRFQ6IC00ICogNjAsXG4gICAgICAgICAgICBFU1Q6IC01ICogNjAsXG4gICAgICAgICAgICBDRFQ6IC01ICogNjAsXG4gICAgICAgICAgICBDU1Q6IC02ICogNjAsXG4gICAgICAgICAgICBNRFQ6IC02ICogNjAsXG4gICAgICAgICAgICBNU1Q6IC03ICogNjAsXG4gICAgICAgICAgICBQRFQ6IC03ICogNjAsXG4gICAgICAgICAgICBQU1Q6IC04ICogNjAsXG4gICAgICAgIH07XG5cbiAgICAvLyBkYXRlIGZyb20gaXNvIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JU08oY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHN0cmluZyA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIG1hdGNoID0gZXh0ZW5kZWRJc29SZWdleC5leGVjKHN0cmluZykgfHwgYmFzaWNJc29SZWdleC5leGVjKHN0cmluZyksXG4gICAgICAgICAgICBhbGxvd1RpbWUsXG4gICAgICAgICAgICBkYXRlRm9ybWF0LFxuICAgICAgICAgICAgdGltZUZvcm1hdCxcbiAgICAgICAgICAgIHR6Rm9ybWF0LFxuICAgICAgICAgICAgaXNvRGF0ZXNMZW4gPSBpc29EYXRlcy5sZW5ndGgsXG4gICAgICAgICAgICBpc29UaW1lc0xlbiA9IGlzb1RpbWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmlzbyA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvRGF0ZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaXNvRGF0ZXNbaV1bMV0uZXhlYyhtYXRjaFsxXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCA9IGlzb0RhdGVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICBhbGxvd1RpbWUgPSBpc29EYXRlc1tpXVsyXSAhPT0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChkYXRlRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbM10pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwLCBsID0gaXNvVGltZXNMZW47IGkgPCBsOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzb1RpbWVzW2ldWzFdLmV4ZWMobWF0Y2hbM10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaFsyXSBzaG91bGQgYmUgJ1QnIG9yIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lRm9ybWF0ID0gKG1hdGNoWzJdIHx8ICcgJykgKyBpc29UaW1lc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aW1lRm9ybWF0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWFsbG93VGltZSAmJiB0aW1lRm9ybWF0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobWF0Y2hbNF0pIHtcbiAgICAgICAgICAgICAgICBpZiAodHpSZWdleC5leGVjKG1hdGNoWzRdKSkge1xuICAgICAgICAgICAgICAgICAgICB0ekZvcm1hdCA9ICdaJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy5fZiA9IGRhdGVGb3JtYXQgKyAodGltZUZvcm1hdCB8fCAnJykgKyAodHpGb3JtYXQgfHwgJycpO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICB5ZWFyU3RyLFxuICAgICAgICBtb250aFN0cixcbiAgICAgICAgZGF5U3RyLFxuICAgICAgICBob3VyU3RyLFxuICAgICAgICBtaW51dGVTdHIsXG4gICAgICAgIHNlY29uZFN0clxuICAgICkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gW1xuICAgICAgICAgICAgdW50cnVuY2F0ZVllYXIoeWVhclN0ciksXG4gICAgICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQuaW5kZXhPZihtb250aFN0ciksXG4gICAgICAgICAgICBwYXJzZUludChkYXlTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGhvdXJTdHIsIDEwKSxcbiAgICAgICAgICAgIHBhcnNlSW50KG1pbnV0ZVN0ciwgMTApLFxuICAgICAgICBdO1xuXG4gICAgICAgIGlmIChzZWNvbmRTdHIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlSW50KHNlY29uZFN0ciwgMTApKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhclN0cikge1xuICAgICAgICB2YXIgeWVhciA9IHBhcnNlSW50KHllYXJTdHIsIDEwKTtcbiAgICAgICAgaWYgKHllYXIgPD0gNDkpIHtcbiAgICAgICAgICAgIHJldHVybiAyMDAwICsgeWVhcjtcbiAgICAgICAgfSBlbHNlIGlmICh5ZWFyIDw9IDk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIDE5MDAgKyB5ZWFyO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB5ZWFyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXByb2Nlc3NSRkMyODIyKHMpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGNvbW1lbnRzIGFuZCBmb2xkaW5nIHdoaXRlc3BhY2UgYW5kIHJlcGxhY2UgbXVsdGlwbGUtc3BhY2VzIHdpdGggYSBzaW5nbGUgc3BhY2VcbiAgICAgICAgcmV0dXJuIHNcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvXlxcc1xccyovLCAnJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9cXHNcXHMqJC8sICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjaGVja1dlZWtkYXkod2Vla2RheVN0ciwgcGFyc2VkSW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAod2Vla2RheVN0cikge1xuICAgICAgICAgICAgLy8gVE9ETzogUmVwbGFjZSB0aGUgdmFuaWxsYSBKUyBEYXRlIG9iamVjdCB3aXRoIGFuIGluZGVwZW5kZW50IGRheS1vZi13ZWVrIGNoZWNrLlxuICAgICAgICAgICAgdmFyIHdlZWtkYXlQcm92aWRlZCA9IGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0LmluZGV4T2Yod2Vla2RheVN0ciksXG4gICAgICAgICAgICAgICAgd2Vla2RheUFjdHVhbCA9IG5ldyBEYXRlKFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFswXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMV0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzJdXG4gICAgICAgICAgICAgICAgKS5nZXREYXkoKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5UHJvdmlkZWQgIT09IHdlZWtkYXlBY3R1YWwpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxjdWxhdGVPZmZzZXQob2JzT2Zmc2V0LCBtaWxpdGFyeU9mZnNldCwgbnVtT2Zmc2V0KSB7XG4gICAgICAgIGlmIChvYnNPZmZzZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBvYnNPZmZzZXRzW29ic09mZnNldF07XG4gICAgICAgIH0gZWxzZSBpZiAobWlsaXRhcnlPZmZzZXQpIHtcbiAgICAgICAgICAgIC8vIHRoZSBvbmx5IGFsbG93ZWQgbWlsaXRhcnkgdHogaXMgWlxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgaG0gPSBwYXJzZUludChudW1PZmZzZXQsIDEwKSxcbiAgICAgICAgICAgICAgICBtID0gaG0gJSAxMDAsXG4gICAgICAgICAgICAgICAgaCA9IChobSAtIG0pIC8gMTAwO1xuICAgICAgICAgICAgcmV0dXJuIGggKiA2MCArIG07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGFuZCB0aW1lIGZyb20gcmVmIDI4MjIgZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaCA9IHJmYzI4MjIuZXhlYyhwcmVwcm9jZXNzUkZDMjgyMihjb25maWcuX2kpKSxcbiAgICAgICAgICAgIHBhcnNlZEFycmF5O1xuICAgICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgICAgIHBhcnNlZEFycmF5ID0gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgICAgICAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICBtYXRjaFs3XVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghY2hlY2tXZWVrZGF5KG1hdGNoWzFdLCBwYXJzZWRBcnJheSwgY29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uZmlnLl9hID0gcGFyc2VkQXJyYXk7XG4gICAgICAgICAgICBjb25maWcuX3R6bSA9IGNhbGN1bGF0ZU9mZnNldChtYXRjaFs4XSwgbWF0Y2hbOV0sIG1hdGNoWzEwXSk7XG5cbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGNyZWF0ZVVUQ0RhdGUuYXBwbHkobnVsbCwgY29uZmlnLl9hKTtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnJmYzI4MjIgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gMSkgQVNQLk5FVCwgMikgSVNPLCAzKSBSRkMgMjgyMiBmb3JtYXRzLCBvciA0KSBvcHRpb25hbCBmYWxsYmFjayBpZiBwYXJzaW5nIGlzbid0IHN0cmljdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKSB7XG4gICAgICAgIHZhciBtYXRjaGVkID0gYXNwTmV0SnNvblJlZ2V4LmV4ZWMoY29uZmlnLl9pKTtcbiAgICAgICAgaWYgKG1hdGNoZWQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKCttYXRjaGVkWzFdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX3N0cmljdCkge1xuICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBGaW5hbCBhdHRlbXB0LCB1c2UgSW5wdXQgRmFsbGJhY2tcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3ZhbHVlIHByb3ZpZGVkIGlzIG5vdCBpbiBhIHJlY29nbml6ZWQgUkZDMjgyMiBvciBJU08gZm9ybWF0LiBtb21lbnQgY29uc3RydWN0aW9uIGZhbGxzIGJhY2sgdG8ganMgRGF0ZSgpLCAnICtcbiAgICAgICAgICAgICd3aGljaCBpcyBub3QgcmVsaWFibGUgYWNyb3NzIGFsbCBicm93c2VycyBhbmQgdmVyc2lvbnMuIE5vbiBSRkMyODIyL0lTTyBkYXRlIGZvcm1hdHMgYXJlICcgK1xuICAgICAgICAgICAgJ2Rpc2NvdXJhZ2VkLiBQbGVhc2UgcmVmZXIgdG8gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9qcy1kYXRlLyBmb3IgbW9yZSBpbmZvLicsXG4gICAgICAgIGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5faSArIChjb25maWcuX3VzZVVUQyA/ICcgVVRDJyA6ICcnKSk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgLy8gUGljayB0aGUgZmlyc3QgZGVmaW5lZCBvZiB0d28gb3IgdGhyZWUgYXJndW1lbnRzLlxuICAgIGZ1bmN0aW9uIGRlZmF1bHRzKGEsIGIsIGMpIHtcbiAgICAgICAgaWYgKGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3VycmVudERhdGVBcnJheShjb25maWcpIHtcbiAgICAgICAgLy8gaG9va3MgaXMgYWN0dWFsbHkgdGhlIGV4cG9ydGVkIG1vbWVudCBvYmplY3RcbiAgICAgICAgdmFyIG5vd1ZhbHVlID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRnVsbFllYXIoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENNb250aCgpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0RhdGUoKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtub3dWYWx1ZS5nZXRGdWxsWWVhcigpLCBub3dWYWx1ZS5nZXRNb250aCgpLCBub3dWYWx1ZS5nZXREYXRlKCldO1xuICAgIH1cblxuICAgIC8vIGNvbnZlcnQgYW4gYXJyYXkgdG8gYSBkYXRlLlxuICAgIC8vIHRoZSBhcnJheSBzaG91bGQgbWlycm9yIHRoZSBwYXJhbWV0ZXJzIGJlbG93XG4gICAgLy8gbm90ZTogYWxsIHZhbHVlcyBwYXN0IHRoZSB5ZWFyIGFyZSBvcHRpb25hbCBhbmQgd2lsbCBkZWZhdWx0IHRvIHRoZSBsb3dlc3QgcG9zc2libGUgdmFsdWUuXG4gICAgLy8gW3llYXIsIG1vbnRoLCBkYXkgLCBob3VyLCBtaW51dGUsIHNlY29uZCwgbWlsbGlzZWNvbmRdXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBpbnB1dCA9IFtdLFxuICAgICAgICAgICAgY3VycmVudERhdGUsXG4gICAgICAgICAgICBleHBlY3RlZFdlZWtkYXksXG4gICAgICAgICAgICB5ZWFyVG9Vc2U7XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudERhdGUgPSBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZyk7XG5cbiAgICAgICAgLy9jb21wdXRlIGRheSBvZiB0aGUgeWVhciBmcm9tIHdlZWtzIGFuZCB3ZWVrZGF5c1xuICAgICAgICBpZiAoY29uZmlnLl93ICYmIGNvbmZpZy5fYVtEQVRFXSA9PSBudWxsICYmIGNvbmZpZy5fYVtNT05USF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvL2lmIHRoZSBkYXkgb2YgdGhlIHllYXIgaXMgc2V0LCBmaWd1cmUgb3V0IHdoYXQgaXQgaXNcbiAgICAgICAgaWYgKGNvbmZpZy5fZGF5T2ZZZWFyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHllYXJUb1VzZSA9IGRlZmF1bHRzKGNvbmZpZy5fYVtZRUFSXSwgY3VycmVudERhdGVbWUVBUl0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXJUb1VzZSkgfHxcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93RGF5T2ZZZWFyID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoeWVhclRvVXNlLCAwLCBjb25maWcuX2RheU9mWWVhcik7XG4gICAgICAgICAgICBjb25maWcuX2FbTU9OVEhdID0gZGF0ZS5nZXRVVENNb250aCgpO1xuICAgICAgICAgICAgY29uZmlnLl9hW0RBVEVdID0gZGF0ZS5nZXRVVENEYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgZGF0ZS5cbiAgICAgICAgLy8gKiBpZiBubyB5ZWFyLCBtb250aCwgZGF5IG9mIG1vbnRoIGFyZSBnaXZlbiwgZGVmYXVsdCB0byB0b2RheVxuICAgICAgICAvLyAqIGlmIGRheSBvZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBtb250aCBhbmQgeWVhclxuICAgICAgICAvLyAqIGlmIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG9ubHkgeWVhclxuICAgICAgICAvLyAqIGlmIHllYXIgaXMgZ2l2ZW4sIGRvbid0IGRlZmF1bHQgYW55dGhpbmdcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDMgJiYgY29uZmlnLl9hW2ldID09IG51bGw7ICsraSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPSBjdXJyZW50RGF0ZVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFplcm8gb3V0IHdoYXRldmVyIHdhcyBub3QgZGVmYXVsdGVkLCBpbmNsdWRpbmcgdGltZVxuICAgICAgICBmb3IgKDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgY29uZmlnLl9hW2ldID0gaW5wdXRbaV0gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9PSBudWxsID8gKGkgPT09IDIgPyAxIDogMCkgOiBjb25maWcuX2FbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGVjayBmb3IgMjQ6MDA6MDAuMDAwXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSU5VVEVdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbU0VDT05EXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTExJU0VDT05EXSA9PT0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbmZpZy5fbmV4dERheSA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnLl9kID0gKGNvbmZpZy5fdXNlVVRDID8gY3JlYXRlVVRDRGF0ZSA6IGNyZWF0ZURhdGUpLmFwcGx5KFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgICk7XG4gICAgICAgIGV4cGVjdGVkV2Vla2RheSA9IGNvbmZpZy5fdXNlVVRDXG4gICAgICAgICAgICA/IGNvbmZpZy5fZC5nZXRVVENEYXkoKVxuICAgICAgICAgICAgOiBjb25maWcuX2QuZ2V0RGF5KCk7XG5cbiAgICAgICAgLy8gQXBwbHkgdGltZXpvbmUgb2Zmc2V0IGZyb20gaW5wdXQuIFRoZSBhY3R1YWwgdXRjT2Zmc2V0IGNhbiBiZSBjaGFuZ2VkXG4gICAgICAgIC8vIHdpdGggcGFyc2Vab25lLlxuICAgICAgICBpZiAoY29uZmlnLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX25leHREYXkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDI0O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2hlY2sgZm9yIG1pc21hdGNoaW5nIGRheSBvZiB3ZWVrXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fdyAmJlxuICAgICAgICAgICAgdHlwZW9mIGNvbmZpZy5fdy5kICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uZmlnLl93LmQgIT09IGV4cGVjdGVkV2Vla2RheVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKSB7XG4gICAgICAgIHZhciB3LCB3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3ksIHRlbXAsIHdlZWtkYXlPdmVyZmxvdywgY3VyV2VlaztcblxuICAgICAgICB3ID0gY29uZmlnLl93O1xuICAgICAgICBpZiAody5HRyAhPSBudWxsIHx8IHcuVyAhPSBudWxsIHx8IHcuRSAhPSBudWxsKSB7XG4gICAgICAgICAgICBkb3cgPSAxO1xuICAgICAgICAgICAgZG95ID0gNDtcblxuICAgICAgICAgICAgLy8gVE9ETzogV2UgbmVlZCB0byB0YWtlIHRoZSBjdXJyZW50IGlzb1dlZWtZZWFyLCBidXQgdGhhdCBkZXBlbmRzIG9uXG4gICAgICAgICAgICAvLyBob3cgd2UgaW50ZXJwcmV0IG5vdyAobG9jYWwsIHV0YywgZml4ZWQgb2Zmc2V0KS4gU28gY3JlYXRlXG4gICAgICAgICAgICAvLyBhIG5vdyB2ZXJzaW9uIG9mIGN1cnJlbnQgY29uZmlnICh0YWtlIGxvY2FsL3V0Yy9vZmZzZXQgZmxhZ3MsIGFuZFxuICAgICAgICAgICAgLy8gY3JlYXRlIG5vdykuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKFxuICAgICAgICAgICAgICAgIHcuR0csXG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdLFxuICAgICAgICAgICAgICAgIHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgMSwgNCkueWVhclxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LlcsIDEpO1xuICAgICAgICAgICAgd2Vla2RheSA9IGRlZmF1bHRzKHcuRSwgMSk7XG4gICAgICAgICAgICBpZiAod2Vla2RheSA8IDEgfHwgd2Vla2RheSA+IDcpIHtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZG93ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG93O1xuICAgICAgICAgICAgZG95ID0gY29uZmlnLl9sb2NhbGUuX3dlZWsuZG95O1xuXG4gICAgICAgICAgICBjdXJXZWVrID0gd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCBkb3csIGRveSk7XG5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMody5nZywgY29uZmlnLl9hW1lFQVJdLCBjdXJXZWVrLnllYXIpO1xuXG4gICAgICAgICAgICAvLyBEZWZhdWx0IHRvIGN1cnJlbnQgd2Vlay5cbiAgICAgICAgICAgIHdlZWsgPSBkZWZhdWx0cyh3LncsIGN1cldlZWsud2Vlayk7XG5cbiAgICAgICAgICAgIGlmICh3LmQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIHdlZWtkYXkgLS0gbG93IGRheSBudW1iZXJzIGFyZSBjb25zaWRlcmVkIG5leHQgd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmQ7XG4gICAgICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAwIHx8IHdlZWtkYXkgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh3LmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIGxvY2FsIHdlZWtkYXkgLS0gY291bnRpbmcgc3RhcnRzIGZyb20gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5lICsgZG93O1xuICAgICAgICAgICAgICAgIGlmICh3LmUgPCAwIHx8IHcuZSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGRlZmF1bHQgdG8gYmVnaW5uaW5nIG9mIHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gZG93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3ZWVrIDwgMSB8fCB3ZWVrID4gd2Vla3NJblllYXIod2Vla1llYXIsIGRvdywgZG95KSkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla3MgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHdlZWtkYXlPdmVyZmxvdyAhPSBudWxsKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrZGF5ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRlbXAgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IHRlbXAueWVhcjtcbiAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdGVtcC5kYXlPZlllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgSVNPIHN0YW5kYXJkXG4gICAgaG9va3MuSVNPXzg2MDEgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBSRkMgMjgyMiBmb3JtXG4gICAgaG9va3MuUkZDXzI4MjIgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGZvcm1hdCBzdHJpbmdcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZykge1xuICAgICAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gYW5vdGhlciBwYXJ0IG9mIHRoZSBjcmVhdGlvbiBmbG93IHRvIHByZXZlbnQgY2lyY3VsYXIgZGVwc1xuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5JU09fODYwMSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLlJGQ18yODIyKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tUkZDMjgyMihjb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbmZpZy5fYSA9IFtdO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IHRydWU7XG5cbiAgICAgICAgLy8gVGhpcyBhcnJheSBpcyB1c2VkIHRvIG1ha2UgYSBEYXRlLCBlaXRoZXIgd2l0aCBgbmV3IERhdGVgIG9yIGBEYXRlLlVUQ2BcbiAgICAgICAgdmFyIHN0cmluZyA9ICcnICsgY29uZmlnLl9pLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHBhcnNlZElucHV0LFxuICAgICAgICAgICAgdG9rZW5zLFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgICAgICBza2lwcGVkLFxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggPSAwLFxuICAgICAgICAgICAgZXJhLFxuICAgICAgICAgICAgdG9rZW5MZW47XG5cbiAgICAgICAgdG9rZW5zID1cbiAgICAgICAgICAgIGV4cGFuZEZvcm1hdChjb25maWcuX2YsIGNvbmZpZy5fbG9jYWxlKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSB8fCBbXTtcbiAgICAgICAgdG9rZW5MZW4gPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICBwYXJzZWRJbnB1dCA9IChzdHJpbmcubWF0Y2goZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpKSB8fFxuICAgICAgICAgICAgICAgIFtdKVswXTtcbiAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNraXBwZWQgPSBzdHJpbmcuc3Vic3RyKDAsIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSk7XG4gICAgICAgICAgICAgICAgaWYgKHNraXBwZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHNraXBwZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmcuc2xpY2UoXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZy5pbmRleE9mKHBhcnNlZElucHV0KSArIHBhcnNlZElucHV0Lmxlbmd0aFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCArPSBwYXJzZWRJbnB1dC5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBkb24ndCBwYXJzZSBpZiBpdCdzIG5vdCBhIGtub3duIHRva2VuXG4gICAgICAgICAgICBpZiAoZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgcGFyc2VkSW5wdXQsIGNvbmZpZyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZy5fc3RyaWN0ICYmICFwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGFkZCByZW1haW5pbmcgdW5wYXJzZWQgaW5wdXQgbGVuZ3RoIHRvIHRoZSBzdHJpbmdcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuY2hhcnNMZWZ0T3ZlciA9XG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggLSB0b3RhbFBhcnNlZElucHV0TGVuZ3RoO1xuICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc3RyaW5nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNsZWFyIF8xMmggZmxhZyBpZiBob3VyIGlzIDw9IDEyXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA8PSAxMiAmJlxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9PT0gdHJ1ZSAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID4gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5wYXJzZWREYXRlUGFydHMgPSBjb25maWcuX2Euc2xpY2UoMCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLm1lcmlkaWVtID0gY29uZmlnLl9tZXJpZGllbTtcbiAgICAgICAgLy8gaGFuZGxlIG1lcmlkaWVtXG4gICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IG1lcmlkaWVtRml4V3JhcChcbiAgICAgICAgICAgIGNvbmZpZy5fbG9jYWxlLFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdLFxuICAgICAgICAgICAgY29uZmlnLl9tZXJpZGllbVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGhhbmRsZSBlcmFcbiAgICAgICAgZXJhID0gZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhO1xuICAgICAgICBpZiAoZXJhICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFzQ29udmVydFllYXIoZXJhLCBjb25maWcuX2FbWUVBUl0pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIGNoZWNrT3ZlcmZsb3coY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbUZpeFdyYXAobG9jYWxlLCBob3VyLCBtZXJpZGllbSkge1xuICAgICAgICB2YXIgaXNQbTtcblxuICAgICAgICBpZiAobWVyaWRpZW0gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvY2FsZS5tZXJpZGllbUhvdXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5tZXJpZGllbUhvdXIoaG91ciwgbWVyaWRpZW0pO1xuICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZS5pc1BNICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIEZhbGxiYWNrXG4gICAgICAgICAgICBpc1BtID0gbG9jYWxlLmlzUE0obWVyaWRpZW0pO1xuICAgICAgICAgICAgaWYgKGlzUG0gJiYgaG91ciA8IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciArPSAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNQbSAmJiBob3VyID09PSAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCBzdXBwb3NlZCB0byBoYXBwZW5cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgYXJyYXkgb2YgZm9ybWF0IHN0cmluZ3NcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciB0ZW1wQ29uZmlnLFxuICAgICAgICAgICAgYmVzdE1vbWVudCxcbiAgICAgICAgICAgIHNjb3JlVG9CZWF0LFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSxcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQsXG4gICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IGZhbHNlLFxuICAgICAgICAgICAgY29uZmlnZkxlbiA9IGNvbmZpZy5fZi5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGNvbmZpZ2ZMZW4gPT09IDApIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRGb3JtYXQgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb25maWdmTGVuOyBpKyspIHtcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSA9IDA7XG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gZmFsc2U7XG4gICAgICAgICAgICB0ZW1wQ29uZmlnID0gY29weUNvbmZpZyh7fSwgY29uZmlnKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuX3VzZVVUQyAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGVtcENvbmZpZy5fdXNlVVRDID0gY29uZmlnLl91c2VVVEM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZW1wQ29uZmlnLl9mID0gY29uZmlnLl9mW2ldO1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCh0ZW1wQ29uZmlnKTtcblxuICAgICAgICAgICAgaWYgKGlzVmFsaWQodGVtcENvbmZpZykpIHtcbiAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgaXMgYW55IGlucHV0IHRoYXQgd2FzIG5vdCBwYXJzZWQgYWRkIGEgcGVuYWx0eSBmb3IgdGhhdCBmb3JtYXRcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuY2hhcnNMZWZ0T3ZlcjtcblxuICAgICAgICAgICAgLy9vciB0b2tlbnNcbiAgICAgICAgICAgIGN1cnJlbnRTY29yZSArPSBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykudW51c2VkVG9rZW5zLmxlbmd0aCAqIDEwO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3ModGVtcENvbmZpZykuc2NvcmUgPSBjdXJyZW50U2NvcmU7XG5cbiAgICAgICAgICAgIGlmICghYmVzdEZvcm1hdElzVmFsaWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID09IG51bGwgfHxcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQgfHxcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZFxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZEZvcm1hdEZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBiZXN0Rm9ybWF0SXNWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCkge1xuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9IGN1cnJlbnRTY29yZTtcbiAgICAgICAgICAgICAgICAgICAgYmVzdE1vbWVudCA9IHRlbXBDb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZXh0ZW5kKGNvbmZpZywgYmVzdE1vbWVudCB8fCB0ZW1wQ29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tT2JqZWN0KGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGNvbmZpZy5faSksXG4gICAgICAgICAgICBkYXlPckRhdGUgPSBpLmRheSA9PT0gdW5kZWZpbmVkID8gaS5kYXRlIDogaS5kYXk7XG4gICAgICAgIGNvbmZpZy5fYSA9IG1hcChcbiAgICAgICAgICAgIFtpLnllYXIsIGkubW9udGgsIGRheU9yRGF0ZSwgaS5ob3VyLCBpLm1pbnV0ZSwgaS5zZWNvbmQsIGkubWlsbGlzZWNvbmRdLFxuICAgICAgICAgICAgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBvYmogJiYgcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRnJvbUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhwcmVwYXJlQ29uZmlnKGNvbmZpZykpKTtcbiAgICAgICAgaWYgKHJlcy5fbmV4dERheSkge1xuICAgICAgICAgICAgLy8gQWRkaW5nIGlzIHNtYXJ0IGVub3VnaCBhcm91bmQgRFNUXG4gICAgICAgICAgICByZXMuYWRkKDEsICdkJyk7XG4gICAgICAgICAgICByZXMuX25leHREYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZXBhcmVDb25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGNvbmZpZy5fZjtcblxuICAgICAgICBjb25maWcuX2xvY2FsZSA9IGNvbmZpZy5fbG9jYWxlIHx8IGdldExvY2FsZShjb25maWcuX2wpO1xuXG4gICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCB8fCAoZm9ybWF0ID09PSB1bmRlZmluZWQgJiYgaW5wdXQgPT09ICcnKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoeyBudWxsSW5wdXQ6IHRydWUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnLl9pID0gaW5wdXQgPSBjb25maWcuX2xvY2FsZS5wcmVwYXJzZShpbnB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNNb21lbnQoaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE1vbWVudChjaGVja092ZXJmbG93KGlucHV0KSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gaW5wdXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShmb3JtYXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc1ZhbGlkKGNvbmZpZykpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21JbnB1dChjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pO1xuICAgICAgICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNEYXRlKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQudmFsdWVPZigpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nKGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IG1hcChpbnB1dC5zbGljZSgwKSwgZnVuY3Rpb24gKG9iaikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnRnJvbUFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgICAgICAgICAvLyBmcm9tIG1pbGxpc2Vjb25kc1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaW5wdXQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGlzVVRDKSB7XG4gICAgICAgIHZhciBjID0ge307XG5cbiAgICAgICAgaWYgKGZvcm1hdCA9PT0gdHJ1ZSB8fCBmb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobG9jYWxlID09PSB0cnVlIHx8IGxvY2FsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGxvY2FsZTtcbiAgICAgICAgICAgIGxvY2FsZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIChpc09iamVjdChpbnB1dCkgJiYgaXNPYmplY3RFbXB0eShpbnB1dCkpIHx8XG4gICAgICAgICAgICAoaXNBcnJheShpbnB1dCkgJiYgaW5wdXQubGVuZ3RoID09PSAwKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlucHV0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIG9iamVjdCBjb25zdHJ1Y3Rpb24gbXVzdCBiZSBkb25lIHRoaXMgd2F5LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMTQyM1xuICAgICAgICBjLl9pc0FNb21lbnRPYmplY3QgPSB0cnVlO1xuICAgICAgICBjLl91c2VVVEMgPSBjLl9pc1VUQyA9IGlzVVRDO1xuICAgICAgICBjLl9sID0gbG9jYWxlO1xuICAgICAgICBjLl9pID0gaW5wdXQ7XG4gICAgICAgIGMuX2YgPSBmb3JtYXQ7XG4gICAgICAgIGMuX3N0cmljdCA9IHN0cmljdDtcblxuICAgICAgICByZXR1cm4gY3JlYXRlRnJvbUNvbmZpZyhjKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbChpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgZmFsc2UpO1xuICAgIH1cblxuICAgIHZhciBwcm90b3R5cGVNaW4gPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWluIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWF4IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPCB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApLFxuICAgICAgICBwcm90b3R5cGVNYXggPSBkZXByZWNhdGUoXG4gICAgICAgICAgICAnbW9tZW50KCkubWF4IGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQubWluIGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvbWluLW1heC8nLFxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3RoZXIgPiB0aGlzID8gdGhpcyA6IG90aGVyO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgLy8gUGljayBhIG1vbWVudCBtIGZyb20gbW9tZW50cyBzbyB0aGF0IG1bZm5dKG90aGVyKSBpcyB0cnVlIGZvciBhbGxcbiAgICAvLyBvdGhlci4gVGhpcyByZWxpZXMgb24gdGhlIGZ1bmN0aW9uIGZuIHRvIGJlIHRyYW5zaXRpdmUuXG4gICAgLy9cbiAgICAvLyBtb21lbnRzIHNob3VsZCBlaXRoZXIgYmUgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMgb3IgYW4gYXJyYXksIHdob3NlXG4gICAgLy8gZmlyc3QgZWxlbWVudCBpcyBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cy5cbiAgICBmdW5jdGlvbiBwaWNrQnkoZm4sIG1vbWVudHMpIHtcbiAgICAgICAgdmFyIHJlcywgaTtcbiAgICAgICAgaWYgKG1vbWVudHMubGVuZ3RoID09PSAxICYmIGlzQXJyYXkobW9tZW50c1swXSkpIHtcbiAgICAgICAgICAgIG1vbWVudHMgPSBtb21lbnRzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghbW9tZW50cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlcyA9IG1vbWVudHNbMF07XG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBtb21lbnRzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICBpZiAoIW1vbWVudHNbaV0uaXNWYWxpZCgpIHx8IG1vbWVudHNbaV1bZm5dKHJlcykpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBtb21lbnRzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIFtdLnNvcnQgaW5zdGVhZD9cbiAgICBmdW5jdGlvbiBtaW4oKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQmVmb3JlJywgYXJncyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF4KCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0FmdGVyJywgYXJncyk7XG4gICAgfVxuXG4gICAgdmFyIG5vdyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIERhdGUubm93ID8gRGF0ZS5ub3coKSA6ICtuZXcgRGF0ZSgpO1xuICAgIH07XG5cbiAgICB2YXIgb3JkZXJpbmcgPSBbXG4gICAgICAgICd5ZWFyJyxcbiAgICAgICAgJ3F1YXJ0ZXInLFxuICAgICAgICAnbW9udGgnLFxuICAgICAgICAnd2VlaycsXG4gICAgICAgICdkYXknLFxuICAgICAgICAnaG91cicsXG4gICAgICAgICdtaW51dGUnLFxuICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICBdO1xuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvblZhbGlkKG0pIHtcbiAgICAgICAgdmFyIGtleSxcbiAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gZmFsc2UsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3JkZXJMZW4gPSBvcmRlcmluZy5sZW5ndGg7XG4gICAgICAgIGZvciAoa2V5IGluIG0pIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKG0sIGtleSkgJiZcbiAgICAgICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgICAgICBpbmRleE9mLmNhbGwob3JkZXJpbmcsIGtleSkgIT09IC0xICYmXG4gICAgICAgICAgICAgICAgICAgIChtW2tleV0gPT0gbnVsbCB8fCAhaXNOYU4obVtrZXldKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgb3JkZXJMZW47ICsraSkge1xuICAgICAgICAgICAgaWYgKG1bb3JkZXJpbmdbaV1dKSB7XG4gICAgICAgICAgICAgICAgaWYgKHVuaXRIYXNEZWNpbWFsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gb25seSBhbGxvdyBub24taW50ZWdlcnMgZm9yIHNtYWxsZXN0IHVuaXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBhcnNlRmxvYXQobVtvcmRlcmluZ1tpXV0pICE9PSB0b0ludChtW29yZGVyaW5nW2ldXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oTmFOKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBEdXJhdGlvbihkdXJhdGlvbikge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoZHVyYXRpb24pLFxuICAgICAgICAgICAgeWVhcnMgPSBub3JtYWxpemVkSW5wdXQueWVhciB8fCAwLFxuICAgICAgICAgICAgcXVhcnRlcnMgPSBub3JtYWxpemVkSW5wdXQucXVhcnRlciB8fCAwLFxuICAgICAgICAgICAgbW9udGhzID0gbm9ybWFsaXplZElucHV0Lm1vbnRoIHx8IDAsXG4gICAgICAgICAgICB3ZWVrcyA9IG5vcm1hbGl6ZWRJbnB1dC53ZWVrIHx8IG5vcm1hbGl6ZWRJbnB1dC5pc29XZWVrIHx8IDAsXG4gICAgICAgICAgICBkYXlzID0gbm9ybWFsaXplZElucHV0LmRheSB8fCAwLFxuICAgICAgICAgICAgaG91cnMgPSBub3JtYWxpemVkSW5wdXQuaG91ciB8fCAwLFxuICAgICAgICAgICAgbWludXRlcyA9IG5vcm1hbGl6ZWRJbnB1dC5taW51dGUgfHwgMCxcbiAgICAgICAgICAgIHNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQuc2Vjb25kIHx8IDAsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSBub3JtYWxpemVkSW5wdXQubWlsbGlzZWNvbmQgfHwgMDtcblxuICAgICAgICB0aGlzLl9pc1ZhbGlkID0gaXNEdXJhdGlvblZhbGlkKG5vcm1hbGl6ZWRJbnB1dCk7XG5cbiAgICAgICAgLy8gcmVwcmVzZW50YXRpb24gZm9yIGRhdGVBZGRSZW1vdmVcbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID1cbiAgICAgICAgICAgICttaWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgc2Vjb25kcyAqIDFlMyArIC8vIDEwMDBcbiAgICAgICAgICAgIG1pbnV0ZXMgKiA2ZTQgKyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGhvdXJzICogMTAwMCAqIDYwICogNjA7IC8vdXNpbmcgMTAwMCAqIDYwICogNjAgaW5zdGVhZCBvZiAzNmU1IHRvIGF2b2lkIGZsb2F0aW5nIHBvaW50IHJvdW5kaW5nIGVycm9ycyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjk3OFxuICAgICAgICAvLyBCZWNhdXNlIG9mIGRhdGVBZGRSZW1vdmUgdHJlYXRzIDI0IGhvdXJzIGFzIGRpZmZlcmVudCBmcm9tIGFcbiAgICAgICAgLy8gZGF5IHdoZW4gd29ya2luZyBhcm91bmQgRFNULCB3ZSBuZWVkIHRvIHN0b3JlIHRoZW0gc2VwYXJhdGVseVxuICAgICAgICB0aGlzLl9kYXlzID0gK2RheXMgKyB3ZWVrcyAqIDc7XG4gICAgICAgIC8vIEl0IGlzIGltcG9zc2libGUgdG8gdHJhbnNsYXRlIG1vbnRocyBpbnRvIGRheXMgd2l0aG91dCBrbm93aW5nXG4gICAgICAgIC8vIHdoaWNoIG1vbnRocyB5b3UgYXJlIGFyZSB0YWxraW5nIGFib3V0LCBzbyB3ZSBoYXZlIHRvIHN0b3JlXG4gICAgICAgIC8vIGl0IHNlcGFyYXRlbHkuXG4gICAgICAgIHRoaXMuX21vbnRocyA9ICttb250aHMgKyBxdWFydGVycyAqIDMgKyB5ZWFycyAqIDEyO1xuXG4gICAgICAgIHRoaXMuX2RhdGEgPSB7fTtcblxuICAgICAgICB0aGlzLl9sb2NhbGUgPSBnZXRMb2NhbGUoKTtcblxuICAgICAgICB0aGlzLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uKG9iaikge1xuICAgICAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRHVyYXRpb247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzUm91bmQobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZCgtMSAqIG51bWJlcikgKiAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBjb21wYXJlIHR3byBhcnJheXMsIHJldHVybiB0aGUgbnVtYmVyIG9mIGRpZmZlcmVuY2VzXG4gICAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyhhcnJheTEsIGFycmF5MiwgZG9udENvbnZlcnQpIHtcbiAgICAgICAgdmFyIGxlbiA9IE1hdGgubWluKGFycmF5MS5sZW5ndGgsIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgbGVuZ3RoRGlmZiA9IE1hdGguYWJzKGFycmF5MS5sZW5ndGggLSBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGRpZmZzID0gMCxcbiAgICAgICAgICAgIGk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChkb250Q29udmVydCAmJiBhcnJheTFbaV0gIT09IGFycmF5MltpXSkgfHxcbiAgICAgICAgICAgICAgICAoIWRvbnRDb252ZXJ0ICYmIHRvSW50KGFycmF5MVtpXSkgIT09IHRvSW50KGFycmF5MltpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkaWZmcysrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWZmcyArIGxlbmd0aERpZmY7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0KHRva2VuLCBzZXBhcmF0b3IpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLnV0Y09mZnNldCgpLFxuICAgICAgICAgICAgICAgIHNpZ24gPSAnKyc7XG4gICAgICAgICAgICBpZiAob2Zmc2V0IDwgMCkge1xuICAgICAgICAgICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7XG4gICAgICAgICAgICAgICAgc2lnbiA9ICctJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgc2lnbiArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn4ob2Zmc2V0IC8gNjApLCAyKSArXG4gICAgICAgICAgICAgICAgc2VwYXJhdG9yICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fm9mZnNldCAlIDYwLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgb2Zmc2V0KCdaJywgJzonKTtcbiAgICBvZmZzZXQoJ1paJywgJycpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1paJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ1onLCAnWlonXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fdXNlVVRDID0gdHJ1ZTtcbiAgICAgICAgY29uZmlnLl90em0gPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIHRpbWV6b25lIGNodW5rZXJcbiAgICAvLyAnKzEwOjAwJyA+IFsnMTAnLCAgJzAwJ11cbiAgICAvLyAnLTE1MzAnICA+IFsnLTE1JywgJzMwJ11cbiAgICB2YXIgY2h1bmtPZmZzZXQgPSAvKFtcXCtcXC1dfFxcZFxcZCkvZ2k7XG5cbiAgICBmdW5jdGlvbiBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoZXIsIHN0cmluZykge1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IChzdHJpbmcgfHwgJycpLm1hdGNoKG1hdGNoZXIpLFxuICAgICAgICAgICAgY2h1bmssXG4gICAgICAgICAgICBwYXJ0cyxcbiAgICAgICAgICAgIG1pbnV0ZXM7XG5cbiAgICAgICAgaWYgKG1hdGNoZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY2h1bmsgPSBtYXRjaGVzW21hdGNoZXMubGVuZ3RoIC0gMV0gfHwgW107XG4gICAgICAgIHBhcnRzID0gKGNodW5rICsgJycpLm1hdGNoKGNodW5rT2Zmc2V0KSB8fCBbJy0nLCAwLCAwXTtcbiAgICAgICAgbWludXRlcyA9ICsocGFydHNbMV0gKiA2MCkgKyB0b0ludChwYXJ0c1syXSk7XG5cbiAgICAgICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgPyAwIDogcGFydHNbMF0gPT09ICcrJyA/IG1pbnV0ZXMgOiAtbWludXRlcztcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gYSBtb21lbnQgZnJvbSBpbnB1dCwgdGhhdCBpcyBsb2NhbC91dGMvem9uZSBlcXVpdmFsZW50IHRvIG1vZGVsLlxuICAgIGZ1bmN0aW9uIGNsb25lV2l0aE9mZnNldChpbnB1dCwgbW9kZWwpIHtcbiAgICAgICAgdmFyIHJlcywgZGlmZjtcbiAgICAgICAgaWYgKG1vZGVsLl9pc1VUQykge1xuICAgICAgICAgICAgcmVzID0gbW9kZWwuY2xvbmUoKTtcbiAgICAgICAgICAgIGRpZmYgPVxuICAgICAgICAgICAgICAgIChpc01vbWVudChpbnB1dCkgfHwgaXNEYXRlKGlucHV0KVxuICAgICAgICAgICAgICAgICAgICA/IGlucHV0LnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICA6IGNyZWF0ZUxvY2FsKGlucHV0KS52YWx1ZU9mKCkpIC0gcmVzLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIC8vIFVzZSBsb3ctbGV2ZWwgYXBpLCBiZWNhdXNlIHRoaXMgZm4gaXMgbG93LWxldmVsIGFwaS5cbiAgICAgICAgICAgIHJlcy5fZC5zZXRUaW1lKHJlcy5fZC52YWx1ZU9mKCkgKyBkaWZmKTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChyZXMsIGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQpLmxvY2FsKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXRlT2Zmc2V0KG0pIHtcbiAgICAgICAgLy8gT24gRmlyZWZveC4yNCBEYXRlI2dldFRpbWV6b25lT2Zmc2V0IHJldHVybnMgYSBmbG9hdGluZyBwb2ludC5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvcHVsbC8xODcxXG4gICAgICAgIHJldHVybiAtTWF0aC5yb3VuZChtLl9kLmdldFRpbWV6b25lT2Zmc2V0KCkpO1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW5ldmVyIGEgbW9tZW50IGlzIG11dGF0ZWQuXG4gICAgLy8gSXQgaXMgaW50ZW5kZWQgdG8ga2VlcCB0aGUgb2Zmc2V0IGluIHN5bmMgd2l0aCB0aGUgdGltZXpvbmUuXG4gICAgaG9va3MudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICAvLyBrZWVwTG9jYWxUaW1lID0gdHJ1ZSBtZWFucyBvbmx5IGNoYW5nZSB0aGUgdGltZXpvbmUsIHdpdGhvdXRcbiAgICAvLyBhZmZlY3RpbmcgdGhlIGxvY2FsIGhvdXIuIFNvIDU6MzE6MjYgKzAzMDAgLS1bdXRjT2Zmc2V0KDIsIHRydWUpXS0tPlxuICAgIC8vIDU6MzE6MjYgKzAyMDAgSXQgaXMgcG9zc2libGUgdGhhdCA1OjMxOjI2IGRvZXNuJ3QgZXhpc3Qgd2l0aCBvZmZzZXRcbiAgICAvLyArMDIwMCwgc28gd2UgYWRqdXN0IHRoZSB0aW1lIGFzIG5lZWRlZCwgdG8gYmUgdmFsaWQuXG4gICAgLy9cbiAgICAvLyBLZWVwaW5nIHRoZSB0aW1lIGFjdHVhbGx5IGFkZHMvc3VidHJhY3RzIChvbmUgaG91cilcbiAgICAvLyBmcm9tIHRoZSBhY3R1YWwgcmVwcmVzZW50ZWQgdGltZS4gVGhhdCBpcyB3aHkgd2UgY2FsbCB1cGRhdGVPZmZzZXRcbiAgICAvLyBhIHNlY29uZCB0aW1lLiBJbiBjYXNlIGl0IHdhbnRzIHVzIHRvIGNoYW5nZSB0aGUgb2Zmc2V0IGFnYWluXG4gICAgLy8gX2NoYW5nZUluUHJvZ3Jlc3MgPT0gdHJ1ZSBjYXNlLCB0aGVuIHdlIGhhdmUgdG8gYWRqdXN0LCBiZWNhdXNlXG4gICAgLy8gdGhlcmUgaXMgbm8gc3VjaCB0aW1lIGluIHRoZSBnaXZlbiB0aW1lem9uZS5cbiAgICBmdW5jdGlvbiBnZXRTZXRPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUsIGtlZXBNaW51dGVzKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0aGlzLl9vZmZzZXQgfHwgMCxcbiAgICAgICAgICAgIGxvY2FsQWRqdXN0O1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQgIT0gbnVsbCA/IHRoaXMgOiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoU2hvcnRPZmZzZXQsIGlucHV0KTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhpbnB1dCkgPCAxNiAmJiAha2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0ICogNjA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX2lzVVRDICYmIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICBsb2NhbEFkanVzdCA9IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9vZmZzZXQgPSBpbnB1dDtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChsb2NhbEFkanVzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGQobG9jYWxBZGp1c3QsICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlmICgha2VlcExvY2FsVGltZSB8fCB0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIGFkZFN1YnRyYWN0KFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUR1cmF0aW9uKGlucHV0IC0gb2Zmc2V0LCAnbScpLFxuICAgICAgICAgICAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICghdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFuZ2VJblByb2dyZXNzID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/IG9mZnNldCA6IGdldERhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRab25lKGlucHV0LCBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gLWlucHV0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSk7XG5cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIC10aGlzLnV0Y09mZnNldCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9VVEMoa2VlcExvY2FsVGltZSkge1xuICAgICAgICByZXR1cm4gdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9Mb2NhbChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIGlmICh0aGlzLl9pc1VUQykge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwga2VlcExvY2FsVGltZSk7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoa2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3VidHJhY3QoZ2V0RGF0ZU9mZnNldCh0aGlzKSwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0aGlzLl90em0sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5faSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhciB0Wm9uZSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hPZmZzZXQsIHRoaXMuX2kpO1xuICAgICAgICAgICAgaWYgKHRab25lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCh0Wm9uZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc0FsaWduZWRIb3VyT2Zmc2V0KGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbnB1dCA9IGlucHV0ID8gY3JlYXRlTG9jYWwoaW5wdXQpLnV0Y09mZnNldCgpIDogMDtcblxuICAgICAgICByZXR1cm4gKHRoaXMudXRjT2Zmc2V0KCkgLSBpbnB1dCkgJSA2MCA9PT0gMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoMCkudXRjT2Zmc2V0KCkgfHxcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KCkgPiB0aGlzLmNsb25lKCkubW9udGgoNSkudXRjT2Zmc2V0KClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQoKSB7XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQodGhpcy5faXNEU1RTaGlmdGVkKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBjID0ge30sXG4gICAgICAgICAgICBvdGhlcjtcblxuICAgICAgICBjb3B5Q29uZmlnKGMsIHRoaXMpO1xuICAgICAgICBjID0gcHJlcGFyZUNvbmZpZyhjKTtcblxuICAgICAgICBpZiAoYy5fYSkge1xuICAgICAgICAgICAgb3RoZXIgPSBjLl9pc1VUQyA/IGNyZWF0ZVVUQyhjLl9hKSA6IGNyZWF0ZUxvY2FsKGMuX2EpO1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID1cbiAgICAgICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJiBjb21wYXJlQXJyYXlzKGMuX2EsIG90aGVyLnRvQXJyYXkoKSkgPiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5faXNEU1RTaGlmdGVkID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/ICF0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjT2Zmc2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyA6IGZhbHNlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVXRjKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9pc1VUQyAmJiB0aGlzLl9vZmZzZXQgPT09IDAgOiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBBU1AuTkVUIGpzb24gZGF0ZSBmb3JtYXQgcmVnZXhcbiAgICB2YXIgYXNwTmV0UmVnZXggPSAvXigtfFxcKyk/KD86KFxcZCopWy4gXSk/KFxcZCspOihcXGQrKSg/OjooXFxkKykoXFwuXFxkKik/KT8kLyxcbiAgICAgICAgLy8gZnJvbSBodHRwOi8vZG9jcy5jbG9zdXJlLWxpYnJhcnkuZ29vZ2xlY29kZS5jb20vZ2l0L2Nsb3N1cmVfZ29vZ19kYXRlX2RhdGUuanMuc291cmNlLmh0bWxcbiAgICAgICAgLy8gc29tZXdoYXQgbW9yZSBpbiBsaW5lIHdpdGggNC40LjMuMiAyMDA0IHNwZWMsIGJ1dCBhbGxvd3MgZGVjaW1hbCBhbnl3aGVyZVxuICAgICAgICAvLyBhbmQgZnVydGhlciBtb2RpZmllZCB0byBhbGxvdyBmb3Igc3RyaW5ncyBjb250YWluaW5nIGJvdGggd2VlayBhbmQgZGF5XG4gICAgICAgIGlzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eKC18XFwrKT9QKD86KFstK10/WzAtOSwuXSopWSk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopVyk/KD86KFstK10/WzAtOSwuXSopRCk/KD86VCg/OihbLStdP1swLTksLl0qKUgpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVMpPyk/JC87XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEdXJhdGlvbihpbnB1dCwga2V5KSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGlucHV0LFxuICAgICAgICAgICAgLy8gbWF0Y2hpbmcgYWdhaW5zdCByZWdleHAgaXMgZXhwZW5zaXZlLCBkbyBpdCBvbiBkZW1hbmRcbiAgICAgICAgICAgIG1hdGNoID0gbnVsbCxcbiAgICAgICAgICAgIHNpZ24sXG4gICAgICAgICAgICByZXQsXG4gICAgICAgICAgICBkaWZmUmVzO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgbXM6IGlucHV0Ll9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICAgICAgZDogaW5wdXQuX2RheXMsXG4gICAgICAgICAgICAgICAgTTogaW5wdXQuX21vbnRocyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpIHx8ICFpc05hTigraW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uW2tleV0gPSAraW5wdXQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGR1cmF0aW9uLm1pbGxpc2Vjb25kcyA9ICtpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBhc3BOZXRSZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICBkOiB0b0ludChtYXRjaFtEQVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIGg6IHRvSW50KG1hdGNoW0hPVVJdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbTogdG9JbnQobWF0Y2hbTUlOVVRFXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIHM6IHRvSW50KG1hdGNoW1NFQ09ORF0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtczogdG9JbnQoYWJzUm91bmQobWF0Y2hbTUlMTElTRUNPTkRdICogMTAwMCkpICogc2lnbiwgLy8gdGhlIG1pbGxpc2Vjb25kIGRlY2ltYWwgcG9pbnQgaXMgaW5jbHVkZWQgaW4gdGhlIG1hdGNoXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGlzb1JlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiBwYXJzZUlzbyhtYXRjaFsyXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgTTogcGFyc2VJc28obWF0Y2hbM10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHc6IHBhcnNlSXNvKG1hdGNoWzRdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBkOiBwYXJzZUlzbyhtYXRjaFs1XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgaDogcGFyc2VJc28obWF0Y2hbNl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIG06IHBhcnNlSXNvKG1hdGNoWzddLCBzaWduKSxcbiAgICAgICAgICAgICAgICBzOiBwYXJzZUlzbyhtYXRjaFs4XSwgc2lnbiksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGR1cmF0aW9uID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrcyBmb3IgbnVsbCBvciB1bmRlZmluZWRcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICB0eXBlb2YgZHVyYXRpb24gPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAoJ2Zyb20nIGluIGR1cmF0aW9uIHx8ICd0bycgaW4gZHVyYXRpb24pXG4gICAgICAgICkge1xuICAgICAgICAgICAgZGlmZlJlcyA9IG1vbWVudHNEaWZmZXJlbmNlKFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLmZyb20pLFxuICAgICAgICAgICAgICAgIGNyZWF0ZUxvY2FsKGR1cmF0aW9uLnRvKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGR1cmF0aW9uLm1zID0gZGlmZlJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICBkdXJhdGlvbi5NID0gZGlmZlJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXQgPSBuZXcgRHVyYXRpb24oZHVyYXRpb24pO1xuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2xvY2FsZScpKSB7XG4gICAgICAgICAgICByZXQuX2xvY2FsZSA9IGlucHV0Ll9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19pc1ZhbGlkJykpIHtcbiAgICAgICAgICAgIHJldC5faXNWYWxpZCA9IGlucHV0Ll9pc1ZhbGlkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG5cbiAgICBjcmVhdGVEdXJhdGlvbi5mbiA9IER1cmF0aW9uLnByb3RvdHlwZTtcbiAgICBjcmVhdGVEdXJhdGlvbi5pbnZhbGlkID0gY3JlYXRlSW52YWxpZCQxO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VJc28oaW5wLCBzaWduKSB7XG4gICAgICAgIC8vIFdlJ2Qgbm9ybWFsbHkgdXNlIH5+aW5wIGZvciB0aGlzLCBidXQgdW5mb3J0dW5hdGVseSBpdCBhbHNvXG4gICAgICAgIC8vIGNvbnZlcnRzIGZsb2F0cyB0byBpbnRzLlxuICAgICAgICAvLyBpbnAgbWF5IGJlIHVuZGVmaW5lZCwgc28gY2FyZWZ1bCBjYWxsaW5nIHJlcGxhY2Ugb24gaXQuXG4gICAgICAgIHZhciByZXMgPSBpbnAgJiYgcGFyc2VGbG9hdChpbnAucmVwbGFjZSgnLCcsICcuJykpO1xuICAgICAgICAvLyBhcHBseSBzaWduIHdoaWxlIHdlJ3JlIGF0IGl0XG4gICAgICAgIHJldHVybiAoaXNOYU4ocmVzKSA/IDAgOiByZXMpICogc2lnbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXMgPSB7fTtcblxuICAgICAgICByZXMubW9udGhzID1cbiAgICAgICAgICAgIG90aGVyLm1vbnRoKCkgLSBiYXNlLm1vbnRoKCkgKyAob3RoZXIueWVhcigpIC0gYmFzZS55ZWFyKCkpICogMTI7XG4gICAgICAgIGlmIChiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJykuaXNBZnRlcihvdGhlcikpIHtcbiAgICAgICAgICAgIC0tcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSArb3RoZXIgLSArYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpO1xuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcztcbiAgICAgICAgaWYgKCEoYmFzZS5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIHsgbWlsbGlzZWNvbmRzOiAwLCBtb250aHM6IDAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIG90aGVyID0gY2xvbmVXaXRoT2Zmc2V0KG90aGVyLCBiYXNlKTtcbiAgICAgICAgaWYgKGJhc2UuaXNCZWZvcmUob3RoZXIpKSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2Uob3RoZXIsIGJhc2UpO1xuICAgICAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9IC1yZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgcmVzLm1vbnRocyA9IC1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgJ25hbWUnIGFyZyBhZnRlciBkZXByZWNhdGlvbiBpcyByZW1vdmVkXG4gICAgZnVuY3Rpb24gY3JlYXRlQWRkZXIoZGlyZWN0aW9uLCBuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAodmFsLCBwZXJpb2QpIHtcbiAgICAgICAgICAgIHZhciBkdXIsIHRtcDtcbiAgICAgICAgICAgIC8vaW52ZXJ0IHRoZSBhcmd1bWVudHMsIGJ1dCBjb21wbGFpbiBhYm91dCBpdFxuICAgICAgICAgICAgaWYgKHBlcmlvZCAhPT0gbnVsbCAmJiAhaXNOYU4oK3BlcmlvZCkpIHtcbiAgICAgICAgICAgICAgICBkZXByZWNhdGVTaW1wbGUoXG4gICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICdtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhwZXJpb2QsIG51bWJlcikgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSBtb21lbnQoKS4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJyhudW1iZXIsIHBlcmlvZCkuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2FkZC1pbnZlcnRlZC1wYXJhbS8gZm9yIG1vcmUgaW5mby4nXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0bXAgPSB2YWw7XG4gICAgICAgICAgICAgICAgdmFsID0gcGVyaW9kO1xuICAgICAgICAgICAgICAgIHBlcmlvZCA9IHRtcDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZHVyID0gY3JlYXRlRHVyYXRpb24odmFsLCBwZXJpb2QpO1xuICAgICAgICAgICAgYWRkU3VidHJhY3QodGhpcywgZHVyLCBkaXJlY3Rpb24pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QobW9tLCBkdXJhdGlvbiwgaXNBZGRpbmcsIHVwZGF0ZU9mZnNldCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gZHVyYXRpb24uX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSBhYnNSb3VuZChkdXJhdGlvbi5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnNSb3VuZChkdXJhdGlvbi5fbW9udGhzKTtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB1cGRhdGVPZmZzZXQgPSB1cGRhdGVPZmZzZXQgPT0gbnVsbCA/IHRydWUgOiB1cGRhdGVPZmZzZXQ7XG5cbiAgICAgICAgaWYgKG1vbnRocykge1xuICAgICAgICAgICAgc2V0TW9udGgobW9tLCBnZXQobW9tLCAnTW9udGgnKSArIG1vbnRocyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGF5cykge1xuICAgICAgICAgICAgc2V0JDEobW9tLCAnRGF0ZScsIGdldChtb20sICdEYXRlJykgKyBkYXlzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgICAgIG1vbS5fZC5zZXRUaW1lKG1vbS5fZC52YWx1ZU9mKCkgKyBtaWxsaXNlY29uZHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHVwZGF0ZU9mZnNldCkge1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KG1vbSwgZGF5cyB8fCBtb250aHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFkZCA9IGNyZWF0ZUFkZGVyKDEsICdhZGQnKSxcbiAgICAgICAgc3VidHJhY3QgPSBjcmVhdGVBZGRlcigtMSwgJ3N1YnRyYWN0Jyk7XG5cbiAgICBmdW5jdGlvbiBpc1N0cmluZyhpbnB1dCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJyB8fCBpbnB1dCBpbnN0YW5jZW9mIFN0cmluZztcbiAgICB9XG5cbiAgICAvLyB0eXBlIE1vbWVudElucHV0ID0gTW9tZW50IHwgRGF0ZSB8IHN0cmluZyB8IG51bWJlciB8IChudW1iZXIgfCBzdHJpbmcpW10gfCBNb21lbnRJbnB1dE9iamVjdCB8IHZvaWQ7IC8vIG51bGwgfCB1bmRlZmluZWRcbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0KGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpc01vbWVudChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzRGF0ZShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzU3RyaW5nKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXIoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IG51bGwgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSB1bmRlZmluZWRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudElucHV0T2JqZWN0KGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAneWVhcnMnLFxuICAgICAgICAgICAgICAgICd5ZWFyJyxcbiAgICAgICAgICAgICAgICAneScsXG4gICAgICAgICAgICAgICAgJ21vbnRocycsXG4gICAgICAgICAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgICAgICAgICAnTScsXG4gICAgICAgICAgICAgICAgJ2RheXMnLFxuICAgICAgICAgICAgICAgICdkYXknLFxuICAgICAgICAgICAgICAgICdkJyxcbiAgICAgICAgICAgICAgICAnZGF0ZXMnLFxuICAgICAgICAgICAgICAgICdkYXRlJyxcbiAgICAgICAgICAgICAgICAnRCcsXG4gICAgICAgICAgICAgICAgJ2hvdXJzJyxcbiAgICAgICAgICAgICAgICAnaG91cicsXG4gICAgICAgICAgICAgICAgJ2gnLFxuICAgICAgICAgICAgICAgICdtaW51dGVzJyxcbiAgICAgICAgICAgICAgICAnbWludXRlJyxcbiAgICAgICAgICAgICAgICAnbScsXG4gICAgICAgICAgICAgICAgJ3NlY29uZHMnLFxuICAgICAgICAgICAgICAgICdzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgICAgICAgICAgICAgICdtcycsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5LFxuICAgICAgICAgICAgcHJvcGVydHlMZW4gPSBwcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydHlMZW47IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlck9yU3RyaW5nQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgdmFyIGFycmF5VGVzdCA9IGlzQXJyYXkoaW5wdXQpLFxuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID0gZmFsc2U7XG4gICAgICAgIGlmIChhcnJheVRlc3QpIHtcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9XG4gICAgICAgICAgICAgICAgaW5wdXQuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAhaXNOdW1iZXIoaXRlbSkgJiYgaXNTdHJpbmcoaW5wdXQpO1xuICAgICAgICAgICAgICAgIH0pLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJyYXlUZXN0ICYmIGRhdGFUeXBlVGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyU3BlYyhpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3NhbWVEYXknLFxuICAgICAgICAgICAgICAgICduZXh0RGF5JyxcbiAgICAgICAgICAgICAgICAnbGFzdERheScsXG4gICAgICAgICAgICAgICAgJ25leHRXZWVrJyxcbiAgICAgICAgICAgICAgICAnbGFzdFdlZWsnLFxuICAgICAgICAgICAgICAgICdzYW1lRWxzZScsXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIHByb3BlcnR5O1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldENhbGVuZGFyRm9ybWF0KG15TW9tZW50LCBub3cpIHtcbiAgICAgICAgdmFyIGRpZmYgPSBteU1vbWVudC5kaWZmKG5vdywgJ2RheXMnLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIGRpZmYgPCAtNlxuICAgICAgICAgICAgPyAnc2FtZUVsc2UnXG4gICAgICAgICAgICA6IGRpZmYgPCAtMVxuICAgICAgICAgICAgPyAnbGFzdFdlZWsnXG4gICAgICAgICAgICA6IGRpZmYgPCAwXG4gICAgICAgICAgICA/ICdsYXN0RGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMVxuICAgICAgICAgICAgPyAnc2FtZURheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDJcbiAgICAgICAgICAgID8gJ25leHREYXknXG4gICAgICAgICAgICA6IGRpZmYgPCA3XG4gICAgICAgICAgICA/ICduZXh0V2VlaydcbiAgICAgICAgICAgIDogJ3NhbWVFbHNlJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhciQxKHRpbWUsIGZvcm1hdHMpIHtcbiAgICAgICAgLy8gU3VwcG9ydCBmb3Igc2luZ2xlIHBhcmFtZXRlciwgZm9ybWF0cyBvbmx5IG92ZXJsb2FkIHRvIHRoZSBjYWxlbmRhciBmdW5jdGlvblxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCFhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzTW9tZW50SW5wdXQoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNDYWxlbmRhclNwZWMoYXJndW1lbnRzWzBdKSkge1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBXZSB3YW50IHRvIGNvbXBhcmUgdGhlIHN0YXJ0IG9mIHRvZGF5LCB2cyB0aGlzLlxuICAgICAgICAvLyBHZXR0aW5nIHN0YXJ0LW9mLXRvZGF5IGRlcGVuZHMgb24gd2hldGhlciB3ZSdyZSBsb2NhbC91dGMvb2Zmc2V0IG9yIG5vdC5cbiAgICAgICAgdmFyIG5vdyA9IHRpbWUgfHwgY3JlYXRlTG9jYWwoKSxcbiAgICAgICAgICAgIHNvZCA9IGNsb25lV2l0aE9mZnNldChub3csIHRoaXMpLnN0YXJ0T2YoJ2RheScpLFxuICAgICAgICAgICAgZm9ybWF0ID0gaG9va3MuY2FsZW5kYXJGb3JtYXQodGhpcywgc29kKSB8fCAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICBmb3JtYXRzICYmXG4gICAgICAgICAgICAgICAgKGlzRnVuY3Rpb24oZm9ybWF0c1tmb3JtYXRdKVxuICAgICAgICAgICAgICAgICAgICA/IGZvcm1hdHNbZm9ybWF0XS5jYWxsKHRoaXMsIG5vdylcbiAgICAgICAgICAgICAgICAgICAgOiBmb3JtYXRzW2Zvcm1hdF0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChcbiAgICAgICAgICAgIG91dHB1dCB8fCB0aGlzLmxvY2FsZURhdGEoKS5jYWxlbmRhcihmb3JtYXQsIHRoaXMsIGNyZWF0ZUxvY2FsKG5vdykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2xvbmUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgTW9tZW50KHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID4gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxJbnB1dC52YWx1ZU9mKCkgPCB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmV0d2Vlbihmcm9tLCB0bywgdW5pdHMsIGluY2x1c2l2aXR5KSB7XG4gICAgICAgIHZhciBsb2NhbEZyb20gPSBpc01vbWVudChmcm9tKSA/IGZyb20gOiBjcmVhdGVMb2NhbChmcm9tKSxcbiAgICAgICAgICAgIGxvY2FsVG8gPSBpc01vbWVudCh0bykgPyB0byA6IGNyZWF0ZUxvY2FsKHRvKTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxGcm9tLmlzVmFsaWQoKSAmJiBsb2NhbFRvLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpbmNsdXNpdml0eSA9IGluY2x1c2l2aXR5IHx8ICcoKSc7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMF0gPT09ICcoJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0FmdGVyKGxvY2FsRnJvbSwgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0JlZm9yZShsb2NhbEZyb20sIHVuaXRzKSkgJiZcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVsxXSA9PT0gJyknXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQmVmb3JlKGxvY2FsVG8sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNBZnRlcihsb2NhbFRvLCB1bml0cykpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpLFxuICAgICAgICAgICAgaW5wdXRNcztcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPT09IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXRNcyA9IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICB0aGlzLmNsb25lKCkuc3RhcnRPZih1bml0cykudmFsdWVPZigpIDw9IGlucHV0TXMgJiZcbiAgICAgICAgICAgICAgICBpbnB1dE1zIDw9IHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0FmdGVyKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNTYW1lT3JCZWZvcmUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNCZWZvcmUoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaWZmKGlucHV0LCB1bml0cywgYXNGbG9hdCkge1xuICAgICAgICB2YXIgdGhhdCwgem9uZURlbHRhLCBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoYXQgPSBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIHRoaXMpO1xuXG4gICAgICAgIGlmICghdGhhdC5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB6b25lRGVsdGEgPSAodGhhdC51dGNPZmZzZXQoKSAtIHRoaXMudXRjT2Zmc2V0KCkpICogNmU0O1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDEyO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IG1vbnRoRGlmZih0aGlzLCB0aGF0KSAvIDM7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAxZTM7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDBcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDZlNDtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MCAqIDI0ICogNywgbmVnYXRlIGRzdFxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSB0aGlzIC0gdGhhdDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhc0Zsb2F0ID8gb3V0cHV0IDogYWJzRmxvb3Iob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aERpZmYoYSwgYikge1xuICAgICAgICBpZiAoYS5kYXRlKCkgPCBiLmRhdGUoKSkge1xuICAgICAgICAgICAgLy8gZW5kLW9mLW1vbnRoIGNhbGN1bGF0aW9ucyB3b3JrIGNvcnJlY3Qgd2hlbiB0aGUgc3RhcnQgbW9udGggaGFzIG1vcmVcbiAgICAgICAgICAgIC8vIGRheXMgdGhhbiB0aGUgZW5kIG1vbnRoLlxuICAgICAgICAgICAgcmV0dXJuIC1tb250aERpZmYoYiwgYSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZGlmZmVyZW5jZSBpbiBtb250aHNcbiAgICAgICAgdmFyIHdob2xlTW9udGhEaWZmID0gKGIueWVhcigpIC0gYS55ZWFyKCkpICogMTIgKyAoYi5tb250aCgpIC0gYS5tb250aCgpKSxcbiAgICAgICAgICAgIC8vIGIgaXMgaW4gKGFuY2hvciAtIDEgbW9udGgsIGFuY2hvciArIDEgbW9udGgpXG4gICAgICAgICAgICBhbmNob3IgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmLCAnbW9udGhzJyksXG4gICAgICAgICAgICBhbmNob3IyLFxuICAgICAgICAgICAgYWRqdXN0O1xuXG4gICAgICAgIGlmIChiIC0gYW5jaG9yIDwgMCkge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgLSAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvciAtIGFuY2hvcjIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYW5jaG9yMiA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYgKyAxLCAnbW9udGhzJyk7XG4gICAgICAgICAgICAvLyBsaW5lYXIgYWNyb3NzIHRoZSBtb250aFxuICAgICAgICAgICAgYWRqdXN0ID0gKGIgLSBhbmNob3IpIC8gKGFuY2hvcjIgLSBhbmNob3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9jaGVjayBmb3IgbmVnYXRpdmUgemVybywgcmV0dXJuIHplcm8gaWYgbmVnYXRpdmUgemVyb1xuICAgICAgICByZXR1cm4gLSh3aG9sZU1vbnRoRGlmZiArIGFkanVzdCkgfHwgMDtcbiAgICB9XG5cbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0ID0gJ1lZWVktTU0tRERUSEg6bW06c3NaJztcbiAgICBob29rcy5kZWZhdWx0Rm9ybWF0VXRjID0gJ1lZWVktTU0tRERUSEg6bW06c3NbWl0nO1xuXG4gICAgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkubG9jYWxlKCdlbicpLmZvcm1hdCgnZGRkIE1NTSBERCBZWVlZIEhIOm1tOnNzIFtHTVRdWlonKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyhrZWVwT2Zmc2V0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1dGMgPSBrZWVwT2Zmc2V0ICE9PSB0cnVlLFxuICAgICAgICAgICAgbSA9IHV0YyA/IHRoaXMuY2xvbmUoKS51dGMoKSA6IHRoaXM7XG4gICAgICAgIGlmIChtLnllYXIoKSA8IDAgfHwgbS55ZWFyKCkgPiA5OTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgICAgIG0sXG4gICAgICAgICAgICAgICAgdXRjXG4gICAgICAgICAgICAgICAgICAgID8gJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXSdcbiAgICAgICAgICAgICAgICAgICAgOiAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcpKSB7XG4gICAgICAgICAgICAvLyBuYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgfjUweCBmYXN0ZXIsIHVzZSBpdCB3aGVuIHdlIGNhblxuICAgICAgICAgICAgaWYgKHV0Yykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRvRGF0ZSgpLnRvSVNPU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSArIHRoaXMudXRjT2Zmc2V0KCkgKiA2MCAqIDEwMDApXG4gICAgICAgICAgICAgICAgICAgIC50b0lTT1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdaJywgZm9ybWF0TW9tZW50KG0sICdaJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICBtLFxuICAgICAgICAgICAgdXRjID8gJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nIDogJ1lZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhIGh1bWFuIHJlYWRhYmxlIHJlcHJlc2VudGF0aW9uIG9mIGEgbW9tZW50IHRoYXQgY2FuXG4gICAgICogYWxzbyBiZSBldmFsdWF0ZWQgdG8gZ2V0IGEgbmV3IG1vbWVudCB3aGljaCBpcyB0aGUgc2FtZVxuICAgICAqXG4gICAgICogQGxpbmsgaHR0cHM6Ly9ub2RlanMub3JnL2Rpc3QvbGF0ZXN0L2RvY3MvYXBpL3V0aWwuaHRtbCN1dGlsX2N1c3RvbV9pbnNwZWN0X2Z1bmN0aW9uX29uX29iamVjdHNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbnNwZWN0KCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gJ21vbWVudC5pbnZhbGlkKC8qICcgKyB0aGlzLl9pICsgJyAqLyknO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmdW5jID0gJ21vbWVudCcsXG4gICAgICAgICAgICB6b25lID0gJycsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICB5ZWFyLFxuICAgICAgICAgICAgZGF0ZXRpbWUsXG4gICAgICAgICAgICBzdWZmaXg7XG4gICAgICAgIGlmICghdGhpcy5pc0xvY2FsKCkpIHtcbiAgICAgICAgICAgIGZ1bmMgPSB0aGlzLnV0Y09mZnNldCgpID09PSAwID8gJ21vbWVudC51dGMnIDogJ21vbWVudC5wYXJzZVpvbmUnO1xuICAgICAgICAgICAgem9uZSA9ICdaJztcbiAgICAgICAgfVxuICAgICAgICBwcmVmaXggPSAnWycgKyBmdW5jICsgJyhcIl0nO1xuICAgICAgICB5ZWFyID0gMCA8PSB0aGlzLnllYXIoKSAmJiB0aGlzLnllYXIoKSA8PSA5OTk5ID8gJ1lZWVknIDogJ1lZWVlZWSc7XG4gICAgICAgIGRhdGV0aW1lID0gJy1NTS1ERFtUXUhIOm1tOnNzLlNTUyc7XG4gICAgICAgIHN1ZmZpeCA9IHpvbmUgKyAnW1wiKV0nO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChwcmVmaXggKyB5ZWFyICsgZGF0ZXRpbWUgKyBzdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcm1hdChpbnB1dFN0cmluZykge1xuICAgICAgICBpZiAoIWlucHV0U3RyaW5nKSB7XG4gICAgICAgICAgICBpbnB1dFN0cmluZyA9IHRoaXMuaXNVdGMoKVxuICAgICAgICAgICAgICAgID8gaG9va3MuZGVmYXVsdEZvcm1hdFV0Y1xuICAgICAgICAgICAgICAgIDogaG9va3MuZGVmYXVsdEZvcm1hdDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb3V0cHV0ID0gZm9ybWF0TW9tZW50KHRoaXMsIGlucHV0U3RyaW5nKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyB0bzogdGhpcywgZnJvbTogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmcm9tTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnJvbShjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0byh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgZnJvbTogdGhpcywgdG86IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy50byhjcmVhdGVMb2NhbCgpLCB3aXRob3V0U3VmZml4KTtcbiAgICB9XG5cbiAgICAvLyBJZiBwYXNzZWQgYSBsb2NhbGUga2V5LCBpdCB3aWxsIHNldCB0aGUgbG9jYWxlIGZvciB0aGlzXG4gICAgLy8gaW5zdGFuY2UuICBPdGhlcndpc2UsIGl0IHdpbGwgcmV0dXJuIHRoZSBsb2NhbGUgY29uZmlndXJhdGlvblxuICAgIC8vIHZhcmlhYmxlcyBmb3IgdGhpcyBpbnN0YW5jZS5cbiAgICBmdW5jdGlvbiBsb2NhbGUoa2V5KSB7XG4gICAgICAgIHZhciBuZXdMb2NhbGVEYXRhO1xuXG4gICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0xvY2FsZURhdGEgPSBnZXRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChuZXdMb2NhbGVEYXRhICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb2NhbGUgPSBuZXdMb2NhbGVEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLmxhbmcoKSBpcyBkZXByZWNhdGVkLiBJbnN0ZWFkLCB1c2UgbW9tZW50KCkubG9jYWxlRGF0YSgpIHRvIGdldCB0aGUgbGFuZ3VhZ2UgY29uZmlndXJhdGlvbi4gVXNlIG1vbWVudCgpLmxvY2FsZSgpIHRvIGNoYW5nZSBsYW5ndWFnZXMuJyxcbiAgICAgICAgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVEYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlO1xuICAgIH1cblxuICAgIHZhciBNU19QRVJfU0VDT05EID0gMTAwMCxcbiAgICAgICAgTVNfUEVSX01JTlVURSA9IDYwICogTVNfUEVSX1NFQ09ORCxcbiAgICAgICAgTVNfUEVSX0hPVVIgPSA2MCAqIE1TX1BFUl9NSU5VVEUsXG4gICAgICAgIE1TX1BFUl80MDBfWUVBUlMgPSAoMzY1ICogNDAwICsgOTcpICogMjQgKiBNU19QRVJfSE9VUjtcblxuICAgIC8vIGFjdHVhbCBtb2R1bG8gLSBoYW5kbGVzIG5lZ2F0aXZlIG51bWJlcnMgKGZvciBkYXRlcyBiZWZvcmUgMTk3MCk6XG4gICAgZnVuY3Rpb24gbW9kJDEoZGl2aWRlbmQsIGRpdmlzb3IpIHtcbiAgICAgICAgcmV0dXJuICgoZGl2aWRlbmQgJSBkaXZpc29yKSArIGRpdmlzb3IpICUgZGl2aXNvcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbFN0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSwgbSwgZCkudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXRjU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyBEYXRlLlVUQyByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5LCBtLCBkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0YXJ0T2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCAwLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSxcbiAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZW5kT2YodW5pdHMpIHtcbiAgICAgICAgdmFyIHRpbWUsIHN0YXJ0T2ZEYXRlO1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKHVuaXRzID09PSB1bmRlZmluZWQgfHwgdW5pdHMgPT09ICdtaWxsaXNlY29uZCcgfHwgIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXJ0T2ZEYXRlID0gdGhpcy5faXNVVEMgPyB1dGNTdGFydE9mRGF0ZSA6IGxvY2FsU3RhcnRPZkRhdGU7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpICsgMSwgMCwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMykgKyAzLFxuICAgICAgICAgICAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSArIDEsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSArIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9XG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSIC1cbiAgICAgICAgICAgICAgICAgICAgbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lICsgKHRoaXMuX2lzVVRDID8gMCA6IHRoaXMudXRjT2Zmc2V0KCkgKiBNU19QRVJfTUlOVVRFKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgICAgICkgLVxuICAgICAgICAgICAgICAgICAgICAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfTUlOVVRFIC0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPSBNU19QRVJfU0VDT05EIC0gbW9kJDEodGltZSwgTVNfUEVSX1NFQ09ORCkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZhbHVlT2YoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kLnZhbHVlT2YoKSAtICh0aGlzLl9vZmZzZXQgfHwgMCkgKiA2MDAwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bml4KCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcih0aGlzLnZhbHVlT2YoKSAvIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0FycmF5KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBtLnllYXIoKSxcbiAgICAgICAgICAgIG0ubW9udGgoKSxcbiAgICAgICAgICAgIG0uZGF0ZSgpLFxuICAgICAgICAgICAgbS5ob3VyKCksXG4gICAgICAgICAgICBtLm1pbnV0ZSgpLFxuICAgICAgICAgICAgbS5zZWNvbmQoKSxcbiAgICAgICAgICAgIG0ubWlsbGlzZWNvbmQoKSxcbiAgICAgICAgXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b09iamVjdCgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcnM6IG0ueWVhcigpLFxuICAgICAgICAgICAgbW9udGhzOiBtLm1vbnRoKCksXG4gICAgICAgICAgICBkYXRlOiBtLmRhdGUoKSxcbiAgICAgICAgICAgIGhvdXJzOiBtLmhvdXJzKCksXG4gICAgICAgICAgICBtaW51dGVzOiBtLm1pbnV0ZXMoKSxcbiAgICAgICAgICAgIHNlY29uZHM6IG0uc2Vjb25kcygpLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzOiBtLm1pbGxpc2Vjb25kcygpLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICAgICAgLy8gbmV3IERhdGUoTmFOKS50b0pTT04oKSA9PT0gbnVsbFxuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLnRvSVNPU3RyaW5nKCkgOiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzVmFsaWQkMigpIHtcbiAgICAgICAgcmV0dXJuIGlzVmFsaWQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICByZXR1cm4gZXh0ZW5kKHt9LCBnZXRQYXJzaW5nRmxhZ3ModGhpcykpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGludmFsaWRBdCgpIHtcbiAgICAgICAgcmV0dXJuIGdldFBhcnNpbmdGbGFncyh0aGlzKS5vdmVyZmxvdztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGlvbkRhdGEoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbnB1dDogdGhpcy5faSxcbiAgICAgICAgICAgIGZvcm1hdDogdGhpcy5fZixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5fbG9jYWxlLFxuICAgICAgICAgICAgaXNVVEM6IHRoaXMuX2lzVVRDLFxuICAgICAgICAgICAgc3RyaWN0OiB0aGlzLl9zdHJpY3QsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ04nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk4nLCAwLCAwLCAnZXJhTmFtZScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OTicsIDAsIDAsICdlcmFOYXJyb3cnKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5JywgMV0sICd5bycsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5JywgMl0sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eScsIDNdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXl5JywgNF0sIDAsICdlcmFZZWFyJyk7XG5cbiAgICBhZGRSZWdleFRva2VuKCdOJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OJywgbWF0Y2hFcmFOYW1lKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk5OTicsIG1hdGNoRXJhTmFycm93KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oXG4gICAgICAgIFsnTicsICdOTicsICdOTk4nLCAnTk5OTicsICdOTk5OTiddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB2YXIgZXJhID0gY29uZmlnLl9sb2NhbGUuZXJhc1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAgICAgaWYgKGVyYSkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYSA9IGVyYTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEVyYSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3knLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5bycsIG1hdGNoRXJhWWVhck9yZGluYWwpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ3knLCAneXknLCAneXl5JywgJ3l5eXknXSwgWUVBUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3lvJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1hdGNoO1xuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpIHtcbiAgICAgICAgICAgIG1hdGNoID0gaW5wdXQubWF0Y2goY29uZmlnLl9sb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UpIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZShpbnB1dCwgbWF0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuX2VyYXMgfHwgZ2V0TG9jYWxlKCdlbicpLl9lcmFzO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnNpbmNlKS5zdGFydE9mKCdkYXknKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5zaW5jZSA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSArSW5maW5pdHk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0udW50aWwpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9IGRhdGUudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJhcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzUGFyc2UoZXJhTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGFiYnIsXG4gICAgICAgICAgICBuYXJyb3c7XG4gICAgICAgIGVyYU5hbWUgPSBlcmFOYW1lLnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lID0gZXJhc1tpXS5uYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBhYmJyID0gZXJhc1tpXS5hYmJyLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICBuYXJyb3cgPSBlcmFzW2ldLm5hcnJvdy50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhYmJyID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYW1lID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFycm93ID09PSBlcmFOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFtuYW1lLCBhYmJyLCBuYXJyb3ddLmluZGV4T2YoZXJhTmFtZSkgPj0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc0NvbnZlcnRZZWFyKGVyYSwgeWVhcikge1xuICAgICAgICB2YXIgZGlyID0gZXJhLnNpbmNlIDw9IGVyYS51bnRpbCA/ICsxIDogLTE7XG4gICAgICAgIGlmICh5ZWFyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBob29rcyhlcmEuc2luY2UpLnllYXIoKSArICh5ZWFyIC0gZXJhLm9mZnNldCkgKiBkaXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYW1lKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hcnJvdygpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYXJyb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhQWJicigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFZZWFyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBkaXIsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIGRpciA9IGVyYXNbaV0uc2luY2UgPD0gZXJhc1tpXS51bnRpbCA/ICsxIDogLTE7XG5cbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHx8XG4gICAgICAgICAgICAgICAgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMueWVhcigpIC0gaG9va3MoZXJhc1tpXS5zaW5jZSkueWVhcigpKSAqIGRpciArXG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0ub2Zmc2V0XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLnllYXIoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYW1lUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYW1lUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc0FiYnJSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzQWJiclJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzQWJiclJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYXJyb3dSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFycm93UmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNOYXJyb3dSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYUFiYnIoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFtZShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hbWVSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYXJyb3coaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYXJyb3dSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFZZWFyT3JkaW5hbChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX2VyYVllYXJPcmRpbmFsUmVnZXggfHwgbWF0Y2hVbnNpZ25lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlRXJhc1BhcnNlKCkge1xuICAgICAgICB2YXIgYWJiclBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFtZVBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbmFycm93UGllY2VzID0gW10sXG4gICAgICAgICAgICBtaXhlZFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCk7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBuYW1lUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSk7XG4gICAgICAgICAgICBhYmJyUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuXG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2VyYXNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG5hbWVQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzQWJiclJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgYWJiclBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYXJyb3dSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbmFycm93UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnZ2cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy53ZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydHRycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzb1dlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrWWVhckZvcm1hdFRva2VuKHRva2VuLCBnZXR0ZXIpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4oMCwgW3Rva2VuLCB0b2tlbi5sZW5ndGhdLCAwLCBnZXR0ZXIpO1xuICAgIH1cblxuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0cnLCAnaXNvV2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHRycsICdpc29XZWVrWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrWWVhcicsICdnZycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla1llYXInLCAnR0cnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtZZWFyJywgMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrWWVhcicsIDEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdnJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHRycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnZycsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ2dnZ2cnLCAnZ2dnZ2cnLCAnR0dHRycsICdHR0dHRyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDIpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2dnJywgJ0dHJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy53ZWVrKCksXG4gICAgICAgICAgICB0aGlzLndlZWtkYXkoKSxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdyxcbiAgICAgICAgICAgIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRveVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWtZZWFyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBnZXRTZXRXZWVrWWVhckhlbHBlci5jYWxsKFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrKCksXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWtkYXkoKSxcbiAgICAgICAgICAgIDEsXG4gICAgICAgICAgICA0XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy5pc29XZWVrWWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLnllYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5XZWVrWWVhcigpIHtcbiAgICAgICAgdmFyIHdlZWtJbmZvID0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWs7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLndlZWtZZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhckhlbHBlcihpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtzVGFyZ2V0O1xuICAgICAgICBpZiAoaW5wdXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHdlZWtPZlllYXIodGhpcywgZG93LCBkb3kpLnllYXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB3ZWVrc1RhcmdldCA9IHdlZWtzSW5ZZWFyKGlucHV0LCBkb3csIGRveSk7XG4gICAgICAgICAgICBpZiAod2VlayA+IHdlZWtzVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgd2VlayA9IHdlZWtzVGFyZ2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHNldFdlZWtBbGwuY2FsbCh0aGlzLCBpbnB1dCwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0V2Vla0FsbCh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhckRhdGEgPSBkYXlPZlllYXJGcm9tV2Vla3Mod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKGRheU9mWWVhckRhdGEueWVhciwgMCwgZGF5T2ZZZWFyRGF0YS5kYXlPZlllYXIpO1xuXG4gICAgICAgIHRoaXMueWVhcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpO1xuICAgICAgICB0aGlzLm1vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSk7XG4gICAgICAgIHRoaXMuZGF0ZShkYXRlLmdldFVUQ0RhdGUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdRJywgMCwgJ1FvJywgJ3F1YXJ0ZXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygncXVhcnRlcicsICdRJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdxdWFydGVyJywgNyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdRJywgbWF0Y2gxKTtcbiAgICBhZGRQYXJzZVRva2VuKCdRJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSAodG9JbnQoaW5wdXQpIC0gMSkgKiAzO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0UXVhcnRlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbFxuICAgICAgICAgICAgPyBNYXRoLmNlaWwoKHRoaXMubW9udGgoKSArIDEpIC8gMylcbiAgICAgICAgICAgIDogdGhpcy5tb250aCgoaW5wdXQgLSAxKSAqIDMgKyAodGhpcy5tb250aCgpICUgMykpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEJywgWydERCcsIDJdLCAnRG8nLCAnZGF0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXRlJywgJ0QnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXRlJywgOSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdERCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdEbycsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0XG4gICAgICAgICAgICA/IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZSB8fCBsb2NhbGUuX29yZGluYWxQYXJzZVxuICAgICAgICAgICAgOiBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50O1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0QnLCAnREQnXSwgREFURSk7XG4gICAgYWRkUGFyc2VUb2tlbignRG8nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W0RBVEVdID0gdG9JbnQoaW5wdXQubWF0Y2gobWF0Y2gxdG8yKVswXSk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0RGF5T2ZNb250aCA9IG1ha2VHZXRTZXQoJ0RhdGUnLCB0cnVlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdEREQnLCBbJ0REREQnLCAzXSwgJ0RERG8nLCAnZGF5T2ZZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheU9mWWVhcicsICdEREQnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdkYXlPZlllYXInLCA0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0RERCcsIG1hdGNoMXRvMyk7XG4gICAgYWRkUmVnZXhUb2tlbignRERERCcsIG1hdGNoMyk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ0RERCcsICdEREREJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldERheU9mWWVhcihpbnB1dCkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyID1cbiAgICAgICAgICAgIE1hdGgucm91bmQoXG4gICAgICAgICAgICAgICAgKHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKSAtIHRoaXMuY2xvbmUoKS5zdGFydE9mKCd5ZWFyJykpIC8gODY0ZTVcbiAgICAgICAgICAgICkgKyAxO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IGRheU9mWWVhciA6IHRoaXMuYWRkKGlucHV0IC0gZGF5T2ZZZWFyLCAnZCcpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdtJywgWydtbScsIDJdLCAwLCAnbWludXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbnV0ZScsICdtJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaW51dGUnLCAxNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdtJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdtbScsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnbScsICdtbSddLCBNSU5VVEUpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldE1pbnV0ZSA9IG1ha2VHZXRTZXQoJ01pbnV0ZXMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigncycsIFsnc3MnLCAyXSwgMCwgJ3NlY29uZCcpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdzZWNvbmQnLCAncycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnc2Vjb25kJywgMTUpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigncycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignc3MnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ3MnLCAnc3MnXSwgU0VDT05EKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRTZWNvbmQgPSBtYWtlR2V0U2V0KCdTZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMDApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTUycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB+fih0aGlzLm1pbGxpc2Vjb25kKCkgLyAxMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTUycsIDNdLCAwLCAnbWlsbGlzZWNvbmQnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1MnLCA0XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTUycsIDVdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1MnLCA2XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1MnLCA3XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTUycsIDhdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTU1MnLCA5XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwMDtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWlsbGlzZWNvbmQnLCAnbXMnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbGxpc2Vjb25kJywgMTYpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUycsIG1hdGNoMXRvMywgbWF0Y2gxKTtcbiAgICBhZGRSZWdleFRva2VuKCdTUycsIG1hdGNoMXRvMywgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdTU1MnLCBtYXRjaDF0bzMsIG1hdGNoMyk7XG5cbiAgICB2YXIgdG9rZW4sIGdldFNldE1pbGxpc2Vjb25kO1xuICAgIGZvciAodG9rZW4gPSAnU1NTUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUmVnZXhUb2tlbih0b2tlbiwgbWF0Y2hVbnNpZ25lZCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VNcyhpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTUlMTElTRUNPTkRdID0gdG9JbnQoKCcwLicgKyBpbnB1dCkgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmb3IgKHRva2VuID0gJ1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIHBhcnNlTXMpO1xuICAgIH1cblxuICAgIGdldFNldE1pbGxpc2Vjb25kID0gbWFrZUdldFNldCgnTWlsbGlzZWNvbmRzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3onLCAwLCAwLCAnem9uZUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignenonLCAwLCAwLCAnem9uZU5hbWUnKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFpvbmVBYmJyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnVVRDJyA6ICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFpvbmVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyAnQ29vcmRpbmF0ZWQgVW5pdmVyc2FsIFRpbWUnIDogJyc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvID0gTW9tZW50LnByb3RvdHlwZTtcblxuICAgIHByb3RvLmFkZCA9IGFkZDtcbiAgICBwcm90by5jYWxlbmRhciA9IGNhbGVuZGFyJDE7XG4gICAgcHJvdG8uY2xvbmUgPSBjbG9uZTtcbiAgICBwcm90by5kaWZmID0gZGlmZjtcbiAgICBwcm90by5lbmRPZiA9IGVuZE9mO1xuICAgIHByb3RvLmZvcm1hdCA9IGZvcm1hdDtcbiAgICBwcm90by5mcm9tID0gZnJvbTtcbiAgICBwcm90by5mcm9tTm93ID0gZnJvbU5vdztcbiAgICBwcm90by50byA9IHRvO1xuICAgIHByb3RvLnRvTm93ID0gdG9Ob3c7XG4gICAgcHJvdG8uZ2V0ID0gc3RyaW5nR2V0O1xuICAgIHByb3RvLmludmFsaWRBdCA9IGludmFsaWRBdDtcbiAgICBwcm90by5pc0FmdGVyID0gaXNBZnRlcjtcbiAgICBwcm90by5pc0JlZm9yZSA9IGlzQmVmb3JlO1xuICAgIHByb3RvLmlzQmV0d2VlbiA9IGlzQmV0d2VlbjtcbiAgICBwcm90by5pc1NhbWUgPSBpc1NhbWU7XG4gICAgcHJvdG8uaXNTYW1lT3JBZnRlciA9IGlzU2FtZU9yQWZ0ZXI7XG4gICAgcHJvdG8uaXNTYW1lT3JCZWZvcmUgPSBpc1NhbWVPckJlZm9yZTtcbiAgICBwcm90by5pc1ZhbGlkID0gaXNWYWxpZCQyO1xuICAgIHByb3RvLmxhbmcgPSBsYW5nO1xuICAgIHByb3RvLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90by5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcbiAgICBwcm90by5tYXggPSBwcm90b3R5cGVNYXg7XG4gICAgcHJvdG8ubWluID0gcHJvdG90eXBlTWluO1xuICAgIHByb3RvLnBhcnNpbmdGbGFncyA9IHBhcnNpbmdGbGFncztcbiAgICBwcm90by5zZXQgPSBzdHJpbmdTZXQ7XG4gICAgcHJvdG8uc3RhcnRPZiA9IHN0YXJ0T2Y7XG4gICAgcHJvdG8uc3VidHJhY3QgPSBzdWJ0cmFjdDtcbiAgICBwcm90by50b0FycmF5ID0gdG9BcnJheTtcbiAgICBwcm90by50b09iamVjdCA9IHRvT2JqZWN0O1xuICAgIHByb3RvLnRvRGF0ZSA9IHRvRGF0ZTtcbiAgICBwcm90by50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nO1xuICAgIHByb3RvLmluc3BlY3QgPSBpbnNwZWN0O1xuICAgIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuZm9yICE9IG51bGwpIHtcbiAgICAgICAgcHJvdG9bU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ01vbWVudDwnICsgdGhpcy5mb3JtYXQoKSArICc+JztcbiAgICAgICAgfTtcbiAgICB9XG4gICAgcHJvdG8udG9KU09OID0gdG9KU09OO1xuICAgIHByb3RvLnRvU3RyaW5nID0gdG9TdHJpbmc7XG4gICAgcHJvdG8udW5peCA9IHVuaXg7XG4gICAgcHJvdG8udmFsdWVPZiA9IHZhbHVlT2Y7XG4gICAgcHJvdG8uY3JlYXRpb25EYXRhID0gY3JlYXRpb25EYXRhO1xuICAgIHByb3RvLmVyYU5hbWUgPSBnZXRFcmFOYW1lO1xuICAgIHByb3RvLmVyYU5hcnJvdyA9IGdldEVyYU5hcnJvdztcbiAgICBwcm90by5lcmFBYmJyID0gZ2V0RXJhQWJicjtcbiAgICBwcm90by5lcmFZZWFyID0gZ2V0RXJhWWVhcjtcbiAgICBwcm90by55ZWFyID0gZ2V0U2V0WWVhcjtcbiAgICBwcm90by5pc0xlYXBZZWFyID0gZ2V0SXNMZWFwWWVhcjtcbiAgICBwcm90by53ZWVrWWVhciA9IGdldFNldFdlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtZZWFyID0gZ2V0U2V0SVNPV2Vla1llYXI7XG4gICAgcHJvdG8ucXVhcnRlciA9IHByb3RvLnF1YXJ0ZXJzID0gZ2V0U2V0UXVhcnRlcjtcbiAgICBwcm90by5tb250aCA9IGdldFNldE1vbnRoO1xuICAgIHByb3RvLmRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGg7XG4gICAgcHJvdG8ud2VlayA9IHByb3RvLndlZWtzID0gZ2V0U2V0V2VlaztcbiAgICBwcm90by5pc29XZWVrID0gcHJvdG8uaXNvV2Vla3MgPSBnZXRTZXRJU09XZWVrO1xuICAgIHByb3RvLndlZWtzSW5ZZWFyID0gZ2V0V2Vla3NJblllYXI7XG4gICAgcHJvdG8ud2Vla3NJbldlZWtZZWFyID0gZ2V0V2Vla3NJbldlZWtZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5ZZWFyID0gZ2V0SVNPV2Vla3NJblllYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJbklTT1dlZWtZZWFyID0gZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyO1xuICAgIHByb3RvLmRhdGUgPSBnZXRTZXREYXlPZk1vbnRoO1xuICAgIHByb3RvLmRheSA9IHByb3RvLmRheXMgPSBnZXRTZXREYXlPZldlZWs7XG4gICAgcHJvdG8ud2Vla2RheSA9IGdldFNldExvY2FsZURheU9mV2VlaztcbiAgICBwcm90by5pc29XZWVrZGF5ID0gZ2V0U2V0SVNPRGF5T2ZXZWVrO1xuICAgIHByb3RvLmRheU9mWWVhciA9IGdldFNldERheU9mWWVhcjtcbiAgICBwcm90by5ob3VyID0gcHJvdG8uaG91cnMgPSBnZXRTZXRIb3VyO1xuICAgIHByb3RvLm1pbnV0ZSA9IHByb3RvLm1pbnV0ZXMgPSBnZXRTZXRNaW51dGU7XG4gICAgcHJvdG8uc2Vjb25kID0gcHJvdG8uc2Vjb25kcyA9IGdldFNldFNlY29uZDtcbiAgICBwcm90by5taWxsaXNlY29uZCA9IHByb3RvLm1pbGxpc2Vjb25kcyA9IGdldFNldE1pbGxpc2Vjb25kO1xuICAgIHByb3RvLnV0Y09mZnNldCA9IGdldFNldE9mZnNldDtcbiAgICBwcm90by51dGMgPSBzZXRPZmZzZXRUb1VUQztcbiAgICBwcm90by5sb2NhbCA9IHNldE9mZnNldFRvTG9jYWw7XG4gICAgcHJvdG8ucGFyc2Vab25lID0gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQ7XG4gICAgcHJvdG8uaGFzQWxpZ25lZEhvdXJPZmZzZXQgPSBoYXNBbGlnbmVkSG91ck9mZnNldDtcbiAgICBwcm90by5pc0RTVCA9IGlzRGF5bGlnaHRTYXZpbmdUaW1lO1xuICAgIHByb3RvLmlzTG9jYWwgPSBpc0xvY2FsO1xuICAgIHByb3RvLmlzVXRjT2Zmc2V0ID0gaXNVdGNPZmZzZXQ7XG4gICAgcHJvdG8uaXNVdGMgPSBpc1V0YztcbiAgICBwcm90by5pc1VUQyA9IGlzVXRjO1xuICAgIHByb3RvLnpvbmVBYmJyID0gZ2V0Wm9uZUFiYnI7XG4gICAgcHJvdG8uem9uZU5hbWUgPSBnZXRab25lTmFtZTtcbiAgICBwcm90by5kYXRlcyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2RhdGVzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBkYXRlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0RGF5T2ZNb250aFxuICAgICk7XG4gICAgcHJvdG8ubW9udGhzID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9udGhzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb250aCBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0TW9udGhcbiAgICApO1xuICAgIHByb3RvLnllYXJzID0gZGVwcmVjYXRlKFxuICAgICAgICAneWVhcnMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIHllYXIgaW5zdGVhZCcsXG4gICAgICAgIGdldFNldFllYXJcbiAgICApO1xuICAgIHByb3RvLnpvbmUgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS56b25lIGlzIGRlcHJlY2F0ZWQsIHVzZSBtb21lbnQoKS51dGNPZmZzZXQgaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy96b25lLycsXG4gICAgICAgIGdldFNldFpvbmVcbiAgICApO1xuICAgIHByb3RvLmlzRFNUU2hpZnRlZCA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ2lzRFNUU2hpZnRlZCBpcyBkZXByZWNhdGVkLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kc3Qtc2hpZnRlZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24nLFxuICAgICAgICBpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWRcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlVW5peChpbnB1dCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoaW5wdXQgKiAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJblpvbmUoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpLnBhcnNlWm9uZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHByZVBhcnNlUG9zdEZvcm1hdChzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMSA9IExvY2FsZS5wcm90b3R5cGU7XG5cbiAgICBwcm90byQxLmNhbGVuZGFyID0gY2FsZW5kYXI7XG4gICAgcHJvdG8kMS5sb25nRGF0ZUZvcm1hdCA9IGxvbmdEYXRlRm9ybWF0O1xuICAgIHByb3RvJDEuaW52YWxpZERhdGUgPSBpbnZhbGlkRGF0ZTtcbiAgICBwcm90byQxLm9yZGluYWwgPSBvcmRpbmFsO1xuICAgIHByb3RvJDEucHJlcGFyc2UgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5wb3N0Zm9ybWF0ID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucmVsYXRpdmVUaW1lID0gcmVsYXRpdmVUaW1lO1xuICAgIHByb3RvJDEucGFzdEZ1dHVyZSA9IHBhc3RGdXR1cmU7XG4gICAgcHJvdG8kMS5zZXQgPSBzZXQ7XG4gICAgcHJvdG8kMS5lcmFzID0gbG9jYWxlRXJhcztcbiAgICBwcm90byQxLmVyYXNQYXJzZSA9IGxvY2FsZUVyYXNQYXJzZTtcbiAgICBwcm90byQxLmVyYXNDb252ZXJ0WWVhciA9IGxvY2FsZUVyYXNDb252ZXJ0WWVhcjtcbiAgICBwcm90byQxLmVyYXNBYmJyUmVnZXggPSBlcmFzQWJiclJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hbWVSZWdleCA9IGVyYXNOYW1lUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFycm93UmVnZXggPSBlcmFzTmFycm93UmVnZXg7XG5cbiAgICBwcm90byQxLm1vbnRocyA9IGxvY2FsZU1vbnRocztcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0ID0gbG9jYWxlTW9udGhzU2hvcnQ7XG4gICAgcHJvdG8kMS5tb250aHNQYXJzZSA9IGxvY2FsZU1vbnRoc1BhcnNlO1xuICAgIHByb3RvJDEubW9udGhzUmVnZXggPSBtb250aHNSZWdleDtcbiAgICBwcm90byQxLm1vbnRoc1Nob3J0UmVnZXggPSBtb250aHNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2VlayA9IGxvY2FsZVdlZWs7XG4gICAgcHJvdG8kMS5maXJzdERheU9mWWVhciA9IGxvY2FsZUZpcnN0RGF5T2ZZZWFyO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZldlZWsgPSBsb2NhbGVGaXJzdERheU9mV2VlaztcblxuICAgIHByb3RvJDEud2Vla2RheXMgPSBsb2NhbGVXZWVrZGF5cztcbiAgICBwcm90byQxLndlZWtkYXlzTWluID0gbG9jYWxlV2Vla2RheXNNaW47XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0ID0gbG9jYWxlV2Vla2RheXNTaG9ydDtcbiAgICBwcm90byQxLndlZWtkYXlzUGFyc2UgPSBsb2NhbGVXZWVrZGF5c1BhcnNlO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5c1JlZ2V4ID0gd2Vla2RheXNSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnRSZWdleCA9IHdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWtkYXlzTWluUmVnZXggPSB3ZWVrZGF5c01pblJlZ2V4O1xuXG4gICAgcHJvdG8kMS5pc1BNID0gbG9jYWxlSXNQTTtcbiAgICBwcm90byQxLm1lcmlkaWVtID0gbG9jYWxlTWVyaWRpZW07XG5cbiAgICBmdW5jdGlvbiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgc2V0dGVyKSB7XG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHV0YyA9IGNyZWF0ZVVUQygpLnNldChzZXR0ZXIsIGluZGV4KTtcbiAgICAgICAgcmV0dXJuIGxvY2FsZVtmaWVsZF0odXRjLCBmb3JtYXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIGksIGZpZWxkLCAnbW9udGgnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIC8vICgpXG4gICAgLy8gKDUpXG4gICAgLy8gKGZtdCwgNSlcbiAgICAvLyAoZm10KVxuICAgIC8vICh0cnVlKVxuICAgIC8vICh0cnVlLCA1KVxuICAgIC8vICh0cnVlLCBmbXQsIDUpXG4gICAgLy8gKHRydWUsIGZtdClcbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBsb2NhbGVTb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGxvY2FsZVNvcnRlZDtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgbG9jYWxlU29ydGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICBzaGlmdCA9IGxvY2FsZVNvcnRlZCA/IGxvY2FsZS5fd2Vlay5kb3cgOiAwLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCAoaW5kZXggKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCAoaSArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzKGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzU2hvcnQoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRoc1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5cycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c1Nob3J0KGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c1Nob3J0Jyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzTWluKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsICd3ZWVrZGF5c01pbicpO1xuICAgIH1cblxuICAgIGdldFNldEdsb2JhbExvY2FsZSgnZW4nLCB7XG4gICAgICAgIGVyYXM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDEtMDEtMDEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiArSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdBbm5vIERvbWluaScsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQUQnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdBRCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMC0xMi0zMScsXG4gICAgICAgICAgICAgICAgdW50aWw6IC1JbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0JlZm9yZSBDaHJpc3QnLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0JDJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQkMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KHRofHN0fG5kfHJkKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgdG9JbnQoKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3RoJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdzdCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnbmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3JkJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAndGgnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIFNpZGUgZWZmZWN0IGltcG9ydHNcblxuICAgIGhvb2tzLmxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZyBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldEdsb2JhbExvY2FsZVxuICAgICk7XG4gICAgaG9va3MubGFuZ0RhdGEgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQubGFuZ0RhdGEgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGVEYXRhIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0TG9jYWxlXG4gICAgKTtcblxuICAgIHZhciBtYXRoQWJzID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBhYnMoKSB7XG4gICAgICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPSBtYXRoQWJzKHRoaXMuX21pbGxpc2Vjb25kcyk7XG4gICAgICAgIHRoaXMuX2RheXMgPSBtYXRoQWJzKHRoaXMuX2RheXMpO1xuICAgICAgICB0aGlzLl9tb250aHMgPSBtYXRoQWJzKHRoaXMuX21vbnRocyk7XG5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtYXRoQWJzKGRhdGEubWlsbGlzZWNvbmRzKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gbWF0aEFicyhkYXRhLnNlY29uZHMpO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtYXRoQWJzKGRhdGEubWludXRlcyk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBtYXRoQWJzKGRhdGEuaG91cnMpO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1hdGhBYnMoZGF0YS5tb250aHMpO1xuICAgICAgICBkYXRhLnllYXJzID0gbWF0aEFicyhkYXRhLnllYXJzKTtcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdCQxKGR1cmF0aW9uLCBpbnB1dCwgdmFsdWUsIGRpcmVjdGlvbikge1xuICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVEdXJhdGlvbihpbnB1dCwgdmFsdWUpO1xuXG4gICAgICAgIGR1cmF0aW9uLl9taWxsaXNlY29uZHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21pbGxpc2Vjb25kcztcbiAgICAgICAgZHVyYXRpb24uX2RheXMgKz0gZGlyZWN0aW9uICogb3RoZXIuX2RheXM7XG4gICAgICAgIGR1cmF0aW9uLl9tb250aHMgKz0gZGlyZWN0aW9uICogb3RoZXIuX21vbnRocztcblxuICAgICAgICByZXR1cm4gZHVyYXRpb24uX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIGFkZCgxLCAncycpIG9yIGFkZChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBhZGQkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAxKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBzdWJ0cmFjdCgxLCAncycpIG9yIHN1YnRyYWN0KGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0JDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgLTEpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0NlaWwobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYnViYmxlKCkge1xuICAgICAgICB2YXIgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMsXG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMsXG4gICAgICAgICAgICBkYXRhID0gdGhpcy5fZGF0YSxcbiAgICAgICAgICAgIHNlY29uZHMsXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIG1vbnRoc0Zyb21EYXlzO1xuXG4gICAgICAgIC8vIGlmIHdlIGhhdmUgYSBtaXggb2YgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIHZhbHVlcywgYnViYmxlIGRvd24gZmlyc3RcbiAgICAgICAgLy8gY2hlY2s6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yMTY2XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA+PSAwICYmIGRheXMgPj0gMCAmJiBtb250aHMgPj0gMCkgfHxcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzIDw9IDAgJiYgZGF5cyA8PSAwICYmIG1vbnRocyA8PSAwKVxuICAgICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyArPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHMpICsgZGF5cykgKiA4NjRlNTtcbiAgICAgICAgICAgIGRheXMgPSAwO1xuICAgICAgICAgICAgbW9udGhzID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBidWJibGVzIHVwIHZhbHVlcywgc2VlIHRoZSB0ZXN0cyBmb3JcbiAgICAgICAgLy8gZXhhbXBsZXMgb2Ygd2hhdCB0aGF0IG1lYW5zLlxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcyAlIDEwMDA7XG5cbiAgICAgICAgc2Vjb25kcyA9IGFic0Zsb29yKG1pbGxpc2Vjb25kcyAvIDEwMDApO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBzZWNvbmRzICUgNjA7XG5cbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1pbnV0ZXMgJSA2MDtcblxuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIGRhdGEuaG91cnMgPSBob3VycyAlIDI0O1xuXG4gICAgICAgIGRheXMgKz0gYWJzRmxvb3IoaG91cnMgLyAyNCk7XG5cbiAgICAgICAgLy8gY29udmVydCBkYXlzIHRvIG1vbnRoc1xuICAgICAgICBtb250aHNGcm9tRGF5cyA9IGFic0Zsb29yKGRheXNUb01vbnRocyhkYXlzKSk7XG4gICAgICAgIG1vbnRocyArPSBtb250aHNGcm9tRGF5cztcbiAgICAgICAgZGF5cyAtPSBhYnNDZWlsKG1vbnRoc1RvRGF5cyhtb250aHNGcm9tRGF5cykpO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICBkYXRhLmRheXMgPSBkYXlzO1xuICAgICAgICBkYXRhLm1vbnRocyA9IG1vbnRocztcbiAgICAgICAgZGF0YS55ZWFycyA9IHllYXJzO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNUb01vbnRocyhkYXlzKSB7XG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDE0NjA5NyBkYXlzICh0YWtpbmcgaW50byBhY2NvdW50IGxlYXAgeWVhciBydWxlcylcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTIgbW9udGhzID09PSA0ODAwXG4gICAgICAgIHJldHVybiAoZGF5cyAqIDQ4MDApIC8gMTQ2MDk3O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1RvRGF5cyhtb250aHMpIHtcbiAgICAgICAgLy8gdGhlIHJldmVyc2Ugb2YgZGF5c1RvTW9udGhzXG4gICAgICAgIHJldHVybiAobW9udGhzICogMTQ2MDk3KSAvIDQ4MDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXModW5pdHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcztcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBpZiAodW5pdHMgPT09ICdtb250aCcgfHwgdW5pdHMgPT09ICdxdWFydGVyJyB8fCB1bml0cyA9PT0gJ3llYXInKSB7XG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzICsgZGF5c1RvTW9udGhzKGRheXMpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocztcbiAgICAgICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDM7XG4gICAgICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAxMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtaWxsaXNlY29uZHMgc2VwYXJhdGVseSBiZWNhdXNlIG9mIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIChpc3N1ZSAjMTg2NylcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgTWF0aC5yb3VuZChtb250aHNUb0RheXModGhpcy5fbW9udGhzKSk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzIC8gNyArIG1pbGxpc2Vjb25kcyAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyArIG1pbGxpc2Vjb25kcyAvIDg2NGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDI0ICsgbWlsbGlzZWNvbmRzIC8gMzZlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDE0NDAgKyBtaWxsaXNlY29uZHMgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiA4NjQwMCArIG1pbGxpc2Vjb25kcyAvIDEwMDA7XG4gICAgICAgICAgICAgICAgLy8gTWF0aC5mbG9vciBwcmV2ZW50cyBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyBoZXJlXG4gICAgICAgICAgICAgICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihkYXlzICogODY0ZTUpICsgbWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biB1bml0ICcgKyB1bml0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgdGhpcy5hcygnbXMnKT9cbiAgICBmdW5jdGlvbiB2YWx1ZU9mJDEoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICB0aGlzLl9kYXlzICogODY0ZTUgK1xuICAgICAgICAgICAgKHRoaXMuX21vbnRocyAlIDEyKSAqIDI1OTJlNiArXG4gICAgICAgICAgICB0b0ludCh0aGlzLl9tb250aHMgLyAxMikgKiAzMTUzNmU2XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUFzKGFsaWFzKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hcyhhbGlhcyk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGFzTWlsbGlzZWNvbmRzID0gbWFrZUFzKCdtcycpLFxuICAgICAgICBhc1NlY29uZHMgPSBtYWtlQXMoJ3MnKSxcbiAgICAgICAgYXNNaW51dGVzID0gbWFrZUFzKCdtJyksXG4gICAgICAgIGFzSG91cnMgPSBtYWtlQXMoJ2gnKSxcbiAgICAgICAgYXNEYXlzID0gbWFrZUFzKCdkJyksXG4gICAgICAgIGFzV2Vla3MgPSBtYWtlQXMoJ3cnKSxcbiAgICAgICAgYXNNb250aHMgPSBtYWtlQXMoJ00nKSxcbiAgICAgICAgYXNRdWFydGVycyA9IG1ha2VBcygnUScpLFxuICAgICAgICBhc1llYXJzID0gbWFrZUFzKCd5Jyk7XG5cbiAgICBmdW5jdGlvbiBjbG9uZSQxKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24odGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0JDIodW5pdHMpIHtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXNbdW5pdHMgKyAncyddKCkgOiBOYU47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldHRlcihuYW1lKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzLl9kYXRhW25hbWVdIDogTmFOO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBtaWxsaXNlY29uZHMgPSBtYWtlR2V0dGVyKCdtaWxsaXNlY29uZHMnKSxcbiAgICAgICAgc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ3NlY29uZHMnKSxcbiAgICAgICAgbWludXRlcyA9IG1ha2VHZXR0ZXIoJ21pbnV0ZXMnKSxcbiAgICAgICAgaG91cnMgPSBtYWtlR2V0dGVyKCdob3VycycpLFxuICAgICAgICBkYXlzID0gbWFrZUdldHRlcignZGF5cycpLFxuICAgICAgICBtb250aHMgPSBtYWtlR2V0dGVyKCdtb250aHMnKSxcbiAgICAgICAgeWVhcnMgPSBtYWtlR2V0dGVyKCd5ZWFycycpO1xuXG4gICAgZnVuY3Rpb24gd2Vla3MoKSB7XG4gICAgICAgIHJldHVybiBhYnNGbG9vcih0aGlzLmRheXMoKSAvIDcpO1xuICAgIH1cblxuICAgIHZhciByb3VuZCA9IE1hdGgucm91bmQsXG4gICAgICAgIHRocmVzaG9sZHMgPSB7XG4gICAgICAgICAgICBzczogNDQsIC8vIGEgZmV3IHNlY29uZHMgdG8gc2Vjb25kc1xuICAgICAgICAgICAgczogNDUsIC8vIHNlY29uZHMgdG8gbWludXRlXG4gICAgICAgICAgICBtOiA0NSwgLy8gbWludXRlcyB0byBob3VyXG4gICAgICAgICAgICBoOiAyMiwgLy8gaG91cnMgdG8gZGF5XG4gICAgICAgICAgICBkOiAyNiwgLy8gZGF5cyB0byBtb250aC93ZWVrXG4gICAgICAgICAgICB3OiBudWxsLCAvLyB3ZWVrcyB0byBtb250aFxuICAgICAgICAgICAgTTogMTEsIC8vIG1vbnRocyB0byB5ZWFyXG4gICAgICAgIH07XG5cbiAgICAvLyBoZWxwZXIgZnVuY3Rpb24gZm9yIG1vbWVudC5mbi5mcm9tLCBtb21lbnQuZm4uZnJvbU5vdywgYW5kIG1vbWVudC5kdXJhdGlvbi5mbi5odW1hbml6ZVxuICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVUaW1lQWdvKHN0cmluZywgbnVtYmVyLCB3aXRob3V0U3VmZml4LCBpc0Z1dHVyZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUucmVsYXRpdmVUaW1lKG51bWJlciB8fCAxLCAhIXdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZSQxKHBvc05lZ0R1cmF0aW9uLCB3aXRob3V0U3VmZml4LCB0aHJlc2hvbGRzLCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb24ocG9zTmVnRHVyYXRpb24pLmFicygpLFxuICAgICAgICAgICAgc2Vjb25kcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdzJykpLFxuICAgICAgICAgICAgbWludXRlcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdtJykpLFxuICAgICAgICAgICAgaG91cnMgPSByb3VuZChkdXJhdGlvbi5hcygnaCcpKSxcbiAgICAgICAgICAgIGRheXMgPSByb3VuZChkdXJhdGlvbi5hcygnZCcpKSxcbiAgICAgICAgICAgIG1vbnRocyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdNJykpLFxuICAgICAgICAgICAgd2Vla3MgPSByb3VuZChkdXJhdGlvbi5hcygndycpKSxcbiAgICAgICAgICAgIHllYXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ3knKSksXG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8PSB0aHJlc2hvbGRzLnNzICYmIFsncycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDwgdGhyZXNob2xkcy5zICYmIFsnc3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8PSAxICYmIFsnbSddKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDwgdGhyZXNob2xkcy5tICYmIFsnbW0nLCBtaW51dGVzXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPD0gMSAmJiBbJ2gnXSkgfHxcbiAgICAgICAgICAgICAgICAoaG91cnMgPCB0aHJlc2hvbGRzLmggJiYgWydoaCcsIGhvdXJzXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8PSAxICYmIFsnZCddKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDwgdGhyZXNob2xkcy5kICYmIFsnZGQnLCBkYXlzXSk7XG5cbiAgICAgICAgaWYgKHRocmVzaG9sZHMudyAhPSBudWxsKSB7XG4gICAgICAgICAgICBhID1cbiAgICAgICAgICAgICAgICBhIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDw9IDEgJiYgWyd3J10pIHx8XG4gICAgICAgICAgICAgICAgKHdlZWtzIDwgdGhyZXNob2xkcy53ICYmIFsnd3cnLCB3ZWVrc10pO1xuICAgICAgICB9XG4gICAgICAgIGEgPSBhIHx8XG4gICAgICAgICAgICAobW9udGhzIDw9IDEgJiYgWydNJ10pIHx8XG4gICAgICAgICAgICAobW9udGhzIDwgdGhyZXNob2xkcy5NICYmIFsnTU0nLCBtb250aHNdKSB8fFxuICAgICAgICAgICAgKHllYXJzIDw9IDEgJiYgWyd5J10pIHx8IFsneXknLCB5ZWFyc107XG5cbiAgICAgICAgYVsyXSA9IHdpdGhvdXRTdWZmaXg7XG4gICAgICAgIGFbM10gPSArcG9zTmVnRHVyYXRpb24gPiAwO1xuICAgICAgICBhWzRdID0gbG9jYWxlO1xuICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZVRpbWVBZ28uYXBwbHkobnVsbCwgYSk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCB0aGUgcm91bmRpbmcgZnVuY3Rpb24gZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nKHJvdW5kaW5nRnVuY3Rpb24pIHtcbiAgICAgICAgaWYgKHJvdW5kaW5nRnVuY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHJvdW5kO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygcm91bmRpbmdGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcm91bmQgPSByb3VuZGluZ0Z1bmN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgYSB0aHJlc2hvbGQgZm9yIHJlbGF0aXZlIHRpbWUgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCh0aHJlc2hvbGQsIGxpbWl0KSB7XG4gICAgICAgIGlmICh0aHJlc2hvbGRzW3RocmVzaG9sZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsaW1pdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhyZXNob2xkc1t0aHJlc2hvbGRdO1xuICAgICAgICB9XG4gICAgICAgIHRocmVzaG9sZHNbdGhyZXNob2xkXSA9IGxpbWl0O1xuICAgICAgICBpZiAodGhyZXNob2xkID09PSAncycpIHtcbiAgICAgICAgICAgIHRocmVzaG9sZHMuc3MgPSBsaW1pdCAtIDE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaHVtYW5pemUoYXJnV2l0aFN1ZmZpeCwgYXJnVGhyZXNob2xkcykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciB3aXRoU3VmZml4ID0gZmFsc2UsXG4gICAgICAgICAgICB0aCA9IHRocmVzaG9sZHMsXG4gICAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgICBvdXRwdXQ7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgYXJnVGhyZXNob2xkcyA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgICAgICBhcmdXaXRoU3VmZml4ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdXaXRoU3VmZml4ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIHdpdGhTdWZmaXggPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnVGhyZXNob2xkcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHRoID0gT2JqZWN0LmFzc2lnbih7fSwgdGhyZXNob2xkcywgYXJnVGhyZXNob2xkcyk7XG4gICAgICAgICAgICBpZiAoYXJnVGhyZXNob2xkcy5zICE9IG51bGwgJiYgYXJnVGhyZXNob2xkcy5zcyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGguc3MgPSBhcmdUaHJlc2hvbGRzLnMgLSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxlID0gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgIG91dHB1dCA9IHJlbGF0aXZlVGltZSQxKHRoaXMsICF3aXRoU3VmZml4LCB0aCwgbG9jYWxlKTtcblxuICAgICAgICBpZiAod2l0aFN1ZmZpeCkge1xuICAgICAgICAgICAgb3V0cHV0ID0gbG9jYWxlLnBhc3RGdXR1cmUoK3RoaXMsIG91dHB1dCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbG9jYWxlLnBvc3Rmb3JtYXQob3V0cHV0KTtcbiAgICB9XG5cbiAgICB2YXIgYWJzJDEgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIHNpZ24oeCkge1xuICAgICAgICByZXR1cm4gKHggPiAwKSAtICh4IDwgMCkgfHwgK3g7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmckMSgpIHtcbiAgICAgICAgLy8gZm9yIElTTyBzdHJpbmdzIHdlIGRvIG5vdCB1c2UgdGhlIG5vcm1hbCBidWJibGluZyBydWxlczpcbiAgICAgICAgLy8gICogbWlsbGlzZWNvbmRzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSBob3Vyc1xuICAgICAgICAvLyAgKiBkYXlzIGRvIG5vdCBidWJibGUgYXQgYWxsXG4gICAgICAgIC8vICAqIG1vbnRocyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgeWVhcnNcbiAgICAgICAgLy8gVGhpcyBpcyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNvbnRleHQtZnJlZSBjb252ZXJzaW9uIGJldHdlZW4gaG91cnMgYW5kIGRheXNcbiAgICAgICAgLy8gKHRoaW5rIG9mIGNsb2NrIGNoYW5nZXMpXG4gICAgICAgIC8vIGFuZCBhbHNvIG5vdCBiZXR3ZWVuIGRheXMgYW5kIG1vbnRocyAoMjgtMzEgZGF5cyBwZXIgbW9udGgpXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHNlY29uZHMgPSBhYnMkMSh0aGlzLl9taWxsaXNlY29uZHMpIC8gMTAwMCxcbiAgICAgICAgICAgIGRheXMgPSBhYnMkMSh0aGlzLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFicyQxKHRoaXMuX21vbnRocyksXG4gICAgICAgICAgICBtaW51dGVzLFxuICAgICAgICAgICAgaG91cnMsXG4gICAgICAgICAgICB5ZWFycyxcbiAgICAgICAgICAgIHMsXG4gICAgICAgICAgICB0b3RhbCA9IHRoaXMuYXNTZWNvbmRzKCksXG4gICAgICAgICAgICB0b3RhbFNpZ24sXG4gICAgICAgICAgICB5bVNpZ24sXG4gICAgICAgICAgICBkYXlzU2lnbixcbiAgICAgICAgICAgIGhtc1NpZ247XG5cbiAgICAgICAgaWYgKCF0b3RhbCkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyB0aGUgc2FtZSBhcyBDIydzIChOb2RhKSBhbmQgcHl0aG9uIChpc29kYXRlKS4uLlxuICAgICAgICAgICAgLy8gYnV0IG5vdCBvdGhlciBKUyAoZ29vZy5kYXRlKVxuICAgICAgICAgICAgcmV0dXJuICdQMEQnO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gMzYwMCBzZWNvbmRzIC0+IDYwIG1pbnV0ZXMgLT4gMSBob3VyXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBob3VycyA9IGFic0Zsb29yKG1pbnV0ZXMgLyA2MCk7XG4gICAgICAgIHNlY29uZHMgJT0gNjA7XG4gICAgICAgIG1pbnV0ZXMgJT0gNjA7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIC8vIGluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9kb3JkaWxsZS9tb21lbnQtaXNvZHVyYXRpb24vYmxvYi9tYXN0ZXIvbW9tZW50Lmlzb2R1cmF0aW9uLmpzXG4gICAgICAgIHMgPSBzZWNvbmRzID8gc2Vjb25kcy50b0ZpeGVkKDMpLnJlcGxhY2UoL1xcLj8wKyQvLCAnJykgOiAnJztcblxuICAgICAgICB0b3RhbFNpZ24gPSB0b3RhbCA8IDAgPyAnLScgOiAnJztcbiAgICAgICAgeW1TaWduID0gc2lnbih0aGlzLl9tb250aHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBkYXlzU2lnbiA9IHNpZ24odGhpcy5fZGF5cykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGhtc1NpZ24gPSBzaWduKHRoaXMuX21pbGxpc2Vjb25kcykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRvdGFsU2lnbiArXG4gICAgICAgICAgICAnUCcgK1xuICAgICAgICAgICAgKHllYXJzID8geW1TaWduICsgeWVhcnMgKyAnWScgOiAnJykgK1xuICAgICAgICAgICAgKG1vbnRocyA/IHltU2lnbiArIG1vbnRocyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoZGF5cyA/IGRheXNTaWduICsgZGF5cyArICdEJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgfHwgbWludXRlcyB8fCBzZWNvbmRzID8gJ1QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyA/IGhtc1NpZ24gKyBob3VycyArICdIJyA6ICcnKSArXG4gICAgICAgICAgICAobWludXRlcyA/IGhtc1NpZ24gKyBtaW51dGVzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChzZWNvbmRzID8gaG1zU2lnbiArIHMgKyAnUycgOiAnJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8kMiA9IER1cmF0aW9uLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDIuaXNWYWxpZCA9IGlzVmFsaWQkMTtcbiAgICBwcm90byQyLmFicyA9IGFicztcbiAgICBwcm90byQyLmFkZCA9IGFkZCQxO1xuICAgIHByb3RvJDIuc3VidHJhY3QgPSBzdWJ0cmFjdCQxO1xuICAgIHByb3RvJDIuYXMgPSBhcztcbiAgICBwcm90byQyLmFzTWlsbGlzZWNvbmRzID0gYXNNaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5hc1NlY29uZHMgPSBhc1NlY29uZHM7XG4gICAgcHJvdG8kMi5hc01pbnV0ZXMgPSBhc01pbnV0ZXM7XG4gICAgcHJvdG8kMi5hc0hvdXJzID0gYXNIb3VycztcbiAgICBwcm90byQyLmFzRGF5cyA9IGFzRGF5cztcbiAgICBwcm90byQyLmFzV2Vla3MgPSBhc1dlZWtzO1xuICAgIHByb3RvJDIuYXNNb250aHMgPSBhc01vbnRocztcbiAgICBwcm90byQyLmFzUXVhcnRlcnMgPSBhc1F1YXJ0ZXJzO1xuICAgIHByb3RvJDIuYXNZZWFycyA9IGFzWWVhcnM7XG4gICAgcHJvdG8kMi52YWx1ZU9mID0gdmFsdWVPZiQxO1xuICAgIHByb3RvJDIuX2J1YmJsZSA9IGJ1YmJsZTtcbiAgICBwcm90byQyLmNsb25lID0gY2xvbmUkMTtcbiAgICBwcm90byQyLmdldCA9IGdldCQyO1xuICAgIHByb3RvJDIubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuc2Vjb25kcyA9IHNlY29uZHM7XG4gICAgcHJvdG8kMi5taW51dGVzID0gbWludXRlcztcbiAgICBwcm90byQyLmhvdXJzID0gaG91cnM7XG4gICAgcHJvdG8kMi5kYXlzID0gZGF5cztcbiAgICBwcm90byQyLndlZWtzID0gd2Vla3M7XG4gICAgcHJvdG8kMi5tb250aHMgPSBtb250aHM7XG4gICAgcHJvdG8kMi55ZWFycyA9IHllYXJzO1xuICAgIHByb3RvJDIuaHVtYW5pemUgPSBodW1hbml6ZTtcbiAgICBwcm90byQyLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvU3RyaW5nID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLnRvSlNPTiA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8kMi5sb2NhbGVEYXRhID0gbG9jYWxlRGF0YTtcblxuICAgIHByb3RvJDIudG9Jc29TdHJpbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICd0b0lzb1N0cmluZygpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdG9JU09TdHJpbmcoKSBpbnN0ZWFkIChub3RpY2UgdGhlIGNhcGl0YWxzKScsXG4gICAgICAgIHRvSVNPU3RyaW5nJDFcbiAgICApO1xuICAgIHByb3RvJDIubGFuZyA9IGxhbmc7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWCcsIDAsIDAsICd1bml4Jyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3gnLCAwLCAwLCAndmFsdWVPZicpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbigneCcsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdYJywgbWF0Y2hUaW1lc3RhbXApO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUocGFyc2VGbG9hdChpbnB1dCkgKiAxMDAwKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCd4JywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHRvSW50KGlucHV0KSk7XG4gICAgfSk7XG5cbiAgICAvLyEgbW9tZW50LmpzXG5cbiAgICBob29rcy52ZXJzaW9uID0gJzIuMjkuNCc7XG5cbiAgICBzZXRIb29rQ2FsbGJhY2soY3JlYXRlTG9jYWwpO1xuXG4gICAgaG9va3MuZm4gPSBwcm90bztcbiAgICBob29rcy5taW4gPSBtaW47XG4gICAgaG9va3MubWF4ID0gbWF4O1xuICAgIGhvb2tzLm5vdyA9IG5vdztcbiAgICBob29rcy51dGMgPSBjcmVhdGVVVEM7XG4gICAgaG9va3MudW5peCA9IGNyZWF0ZVVuaXg7XG4gICAgaG9va3MubW9udGhzID0gbGlzdE1vbnRocztcbiAgICBob29rcy5pc0RhdGUgPSBpc0RhdGU7XG4gICAgaG9va3MubG9jYWxlID0gZ2V0U2V0R2xvYmFsTG9jYWxlO1xuICAgIGhvb2tzLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkO1xuICAgIGhvb2tzLmR1cmF0aW9uID0gY3JlYXRlRHVyYXRpb247XG4gICAgaG9va3MuaXNNb21lbnQgPSBpc01vbWVudDtcbiAgICBob29rcy53ZWVrZGF5cyA9IGxpc3RXZWVrZGF5cztcbiAgICBob29rcy5wYXJzZVpvbmUgPSBjcmVhdGVJblpvbmU7XG4gICAgaG9va3MubG9jYWxlRGF0YSA9IGdldExvY2FsZTtcbiAgICBob29rcy5pc0R1cmF0aW9uID0gaXNEdXJhdGlvbjtcbiAgICBob29rcy5tb250aHNTaG9ydCA9IGxpc3RNb250aHNTaG9ydDtcbiAgICBob29rcy53ZWVrZGF5c01pbiA9IGxpc3RXZWVrZGF5c01pbjtcbiAgICBob29rcy5kZWZpbmVMb2NhbGUgPSBkZWZpbmVMb2NhbGU7XG4gICAgaG9va3MudXBkYXRlTG9jYWxlID0gdXBkYXRlTG9jYWxlO1xuICAgIGhvb2tzLmxvY2FsZXMgPSBsaXN0TG9jYWxlcztcbiAgICBob29rcy53ZWVrZGF5c1Nob3J0ID0gbGlzdFdlZWtkYXlzU2hvcnQ7XG4gICAgaG9va3Mubm9ybWFsaXplVW5pdHMgPSBub3JtYWxpemVVbml0cztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVSb3VuZGluZyA9IGdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVRocmVzaG9sZCA9IGdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZDtcbiAgICBob29rcy5jYWxlbmRhckZvcm1hdCA9IGdldENhbGVuZGFyRm9ybWF0O1xuICAgIGhvb2tzLnByb3RvdHlwZSA9IHByb3RvO1xuXG4gICAgLy8gY3VycmVudGx5IEhUTUw1IGlucHV0IHR5cGUgb25seSBzdXBwb3J0cyAyNC1ob3VyIGZvcm1hdHNcbiAgICBob29rcy5IVE1MNV9GTVQgPSB7XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMOiAnWVlZWS1NTS1ERFRISDptbScsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9TRUNPTkRTOiAnWVlZWS1NTS1ERFRISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX01TOiAnWVlZWS1NTS1ERFRISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgREFURTogJ1lZWVktTU0tREQnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGVcIiAvPlxuICAgICAgICBUSU1FOiAnSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiAvPlxuICAgICAgICBUSU1FX1NFQ09ORFM6ICdISDptbTpzcycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgVElNRV9NUzogJ0hIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIFdFRUs6ICdHR0dHLVtXXVdXJywgLy8gPGlucHV0IHR5cGU9XCJ3ZWVrXCIgLz5cbiAgICAgICAgTU9OVEg6ICdZWVlZLU1NJywgLy8gPGlucHV0IHR5cGU9XCJtb250aFwiIC8+XG4gICAgfTtcblxuICAgIHJldHVybiBob29rcztcblxufSkpKTtcbiIsIi8vISBtb21lbnQtdGltZXpvbmUuanNcbi8vISB2ZXJzaW9uIDogMC41LjQzXG4vLyEgQ29weXJpZ2h0IChjKSBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50LXRpbWV6b25lXG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvKmdsb2JhbCBkZWZpbmUqL1xuXHRpZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnbW9tZW50JykpOyAvLyBOb2RlXG5cdH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG5cdFx0ZGVmaW5lKFsnbW9tZW50J10sIGZhY3RvcnkpOyAgICAgICAgICAgICAgICAgLy8gQU1EXG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeShyb290Lm1vbWVudCk7ICAgICAgICAgICAgICAgICAgICAgICAgLy8gQnJvd3NlclxuXHR9XG59KHRoaXMsIGZ1bmN0aW9uIChtb21lbnQpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0Ly8gUmVzb2x2ZXMgZXM2IG1vZHVsZSBsb2FkaW5nIGlzc3VlXG5cdGlmIChtb21lbnQudmVyc2lvbiA9PT0gdW5kZWZpbmVkICYmIG1vbWVudC5kZWZhdWx0KSB7XG5cdFx0bW9tZW50ID0gbW9tZW50LmRlZmF1bHQ7XG5cdH1cblxuXHQvLyBEbyBub3QgbG9hZCBtb21lbnQtdGltZXpvbmUgYSBzZWNvbmQgdGltZS5cblx0Ly8gaWYgKG1vbWVudC50eiAhPT0gdW5kZWZpbmVkKSB7XG5cdC8vIFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSAnICsgbW9tZW50LnR6LnZlcnNpb24gKyAnIHdhcyBhbHJlYWR5IGxvYWRlZCAnICsgKG1vbWVudC50ei5kYXRhVmVyc2lvbiA/ICd3aXRoIGRhdGEgZnJvbSAnIDogJ3dpdGhvdXQgYW55IGRhdGEnKSArIG1vbWVudC50ei5kYXRhVmVyc2lvbik7XG5cdC8vIFx0cmV0dXJuIG1vbWVudDtcblx0Ly8gfVxuXG5cdHZhciBWRVJTSU9OID0gXCIwLjUuNDNcIixcblx0XHR6b25lcyA9IHt9LFxuXHRcdGxpbmtzID0ge30sXG5cdFx0Y291bnRyaWVzID0ge30sXG5cdFx0bmFtZXMgPSB7fSxcblx0XHRndWVzc2VzID0ge30sXG5cdFx0Y2FjaGVkR3Vlc3M7XG5cblx0aWYgKCFtb21lbnQgfHwgdHlwZW9mIG1vbWVudC52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuXHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgcmVxdWlyZXMgTW9tZW50LmpzLiBTZWUgaHR0cHM6Ly9tb21lbnRqcy5jb20vdGltZXpvbmUvZG9jcy8jL3VzZS1pdC9icm93c2VyLycpO1xuXHR9XG5cblx0dmFyIG1vbWVudFZlcnNpb24gPSBtb21lbnQudmVyc2lvbi5zcGxpdCgnLicpLFxuXHRcdG1ham9yID0gK21vbWVudFZlcnNpb25bMF0sXG5cdFx0bWlub3IgPSArbW9tZW50VmVyc2lvblsxXTtcblxuXHQvLyBNb21lbnQuanMgdmVyc2lvbiBjaGVja1xuXHRpZiAobWFqb3IgPCAyIHx8IChtYWpvciA9PT0gMiAmJiBtaW5vciA8IDYpKSB7XG5cdFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi42LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzICcgKyBtb21lbnQudmVyc2lvbiArICcuIFNlZSBtb21lbnRqcy5jb20nKTtcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRVbnBhY2tpbmdcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIGNoYXJDb2RlVG9JbnQoY2hhckNvZGUpIHtcblx0XHRpZiAoY2hhckNvZGUgPiA5Nikge1xuXHRcdFx0cmV0dXJuIGNoYXJDb2RlIC0gODc7XG5cdFx0fSBlbHNlIGlmIChjaGFyQ29kZSA+IDY0KSB7XG5cdFx0XHRyZXR1cm4gY2hhckNvZGUgLSAyOTtcblx0XHR9XG5cdFx0cmV0dXJuIGNoYXJDb2RlIC0gNDg7XG5cdH1cblxuXHRmdW5jdGlvbiB1bnBhY2tCYXNlNjAoc3RyaW5nKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0cGFydHMgPSBzdHJpbmcuc3BsaXQoJy4nKSxcblx0XHRcdHdob2xlID0gcGFydHNbMF0sXG5cdFx0XHRmcmFjdGlvbmFsID0gcGFydHNbMV0gfHwgJycsXG5cdFx0XHRtdWx0aXBsaWVyID0gMSxcblx0XHRcdG51bSxcblx0XHRcdG91dCA9IDAsXG5cdFx0XHRzaWduID0gMTtcblxuXHRcdC8vIGhhbmRsZSBuZWdhdGl2ZSBudW1iZXJzXG5cdFx0aWYgKHN0cmluZy5jaGFyQ29kZUF0KDApID09PSA0NSkge1xuXHRcdFx0aSA9IDE7XG5cdFx0XHRzaWduID0gLTE7XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIGRpZ2l0cyBiZWZvcmUgdGhlIGRlY2ltYWxcblx0XHRmb3IgKGk7IGkgPCB3aG9sZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0bnVtID0gY2hhckNvZGVUb0ludCh3aG9sZS5jaGFyQ29kZUF0KGkpKTtcblx0XHRcdG91dCA9IDYwICogb3V0ICsgbnVtO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWxcblx0XHRmb3IgKGkgPSAwOyBpIDwgZnJhY3Rpb25hbC5sZW5ndGg7IGkrKykge1xuXHRcdFx0bXVsdGlwbGllciA9IG11bHRpcGxpZXIgLyA2MDtcblx0XHRcdG51bSA9IGNoYXJDb2RlVG9JbnQoZnJhY3Rpb25hbC5jaGFyQ29kZUF0KGkpKTtcblx0XHRcdG91dCArPSBudW0gKiBtdWx0aXBsaWVyO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXQgKiBzaWduO1xuXHR9XG5cblx0ZnVuY3Rpb24gYXJyYXlUb0ludCAoYXJyYXkpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhcnJheVtpXSA9IHVucGFja0Jhc2U2MChhcnJheVtpXSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaW50VG9VbnRpbCAoYXJyYXksIGxlbmd0aCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcblx0XHRcdGFycmF5W2ldID0gTWF0aC5yb3VuZCgoYXJyYXlbaSAtIDFdIHx8IDApICsgKGFycmF5W2ldICogNjAwMDApKTsgLy8gbWludXRlcyB0byBtaWxsaXNlY29uZHNcblx0XHR9XG5cblx0XHRhcnJheVtsZW5ndGggLSAxXSA9IEluZmluaXR5O1xuXHR9XG5cblx0ZnVuY3Rpb24gbWFwSW5kaWNlcyAoc291cmNlLCBpbmRpY2VzKSB7XG5cdFx0dmFyIG91dCA9IFtdLCBpO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGluZGljZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG91dFtpXSA9IHNvdXJjZVtpbmRpY2VzW2ldXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gdW5wYWNrIChzdHJpbmcpIHtcblx0XHR2YXIgZGF0YSA9IHN0cmluZy5zcGxpdCgnfCcpLFxuXHRcdFx0b2Zmc2V0cyA9IGRhdGFbMl0uc3BsaXQoJyAnKSxcblx0XHRcdGluZGljZXMgPSBkYXRhWzNdLnNwbGl0KCcnKSxcblx0XHRcdHVudGlscyAgPSBkYXRhWzRdLnNwbGl0KCcgJyk7XG5cblx0XHRhcnJheVRvSW50KG9mZnNldHMpO1xuXHRcdGFycmF5VG9JbnQoaW5kaWNlcyk7XG5cdFx0YXJyYXlUb0ludCh1bnRpbHMpO1xuXG5cdFx0aW50VG9VbnRpbCh1bnRpbHMsIGluZGljZXMubGVuZ3RoKTtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRuYW1lICAgICAgIDogZGF0YVswXSxcblx0XHRcdGFiYnJzICAgICAgOiBtYXBJbmRpY2VzKGRhdGFbMV0uc3BsaXQoJyAnKSwgaW5kaWNlcyksXG5cdFx0XHRvZmZzZXRzICAgIDogbWFwSW5kaWNlcyhvZmZzZXRzLCBpbmRpY2VzKSxcblx0XHRcdHVudGlscyAgICAgOiB1bnRpbHMsXG5cdFx0XHRwb3B1bGF0aW9uIDogZGF0YVs1XSB8IDBcblx0XHR9O1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdFpvbmUgb2JqZWN0XG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBab25lIChwYWNrZWRTdHJpbmcpIHtcblx0XHRpZiAocGFja2VkU3RyaW5nKSB7XG5cdFx0XHR0aGlzLl9zZXQodW5wYWNrKHBhY2tlZFN0cmluZykpO1xuXHRcdH1cblx0fVxuXG5cdFpvbmUucHJvdG90eXBlID0ge1xuXHRcdF9zZXQgOiBmdW5jdGlvbiAodW5wYWNrZWQpIHtcblx0XHRcdHRoaXMubmFtZSAgICAgICA9IHVucGFja2VkLm5hbWU7XG5cdFx0XHR0aGlzLmFiYnJzICAgICAgPSB1bnBhY2tlZC5hYmJycztcblx0XHRcdHRoaXMudW50aWxzICAgICA9IHVucGFja2VkLnVudGlscztcblx0XHRcdHRoaXMub2Zmc2V0cyAgICA9IHVucGFja2VkLm9mZnNldHM7XG5cdFx0XHR0aGlzLnBvcHVsYXRpb24gPSB1bnBhY2tlZC5wb3B1bGF0aW9uO1xuXHRcdH0sXG5cblx0XHRfaW5kZXggOiBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ID0gK3RpbWVzdGFtcCxcblx0XHRcdFx0dW50aWxzID0gdGhpcy51bnRpbHMsXG5cdFx0XHRcdGk7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCB1bnRpbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHRhcmdldCA8IHVudGlsc1tpXSkge1xuXHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNvdW50cmllcyA6IGZ1bmN0aW9uICgpIHtcblx0XHRcdHZhciB6b25lX25hbWUgPSB0aGlzLm5hbWU7XG5cdFx0XHRyZXR1cm4gT2JqZWN0LmtleXMoY291bnRyaWVzKS5maWx0ZXIoZnVuY3Rpb24gKGNvdW50cnlfY29kZSkge1xuXHRcdFx0XHRyZXR1cm4gY291bnRyaWVzW2NvdW50cnlfY29kZV0uem9uZXMuaW5kZXhPZih6b25lX25hbWUpICE9PSAtMTtcblx0XHRcdH0pO1xuXHRcdH0sXG5cblx0XHRwYXJzZSA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgID0gK3RpbWVzdGFtcCxcblx0XHRcdFx0b2Zmc2V0cyA9IHRoaXMub2Zmc2V0cyxcblx0XHRcdFx0dW50aWxzICA9IHRoaXMudW50aWxzLFxuXHRcdFx0XHRtYXggICAgID0gdW50aWxzLmxlbmd0aCAtIDEsXG5cdFx0XHRcdG9mZnNldCwgb2Zmc2V0TmV4dCwgb2Zmc2V0UHJldiwgaTtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IG1heDsgaSsrKSB7XG5cdFx0XHRcdG9mZnNldCAgICAgPSBvZmZzZXRzW2ldO1xuXHRcdFx0XHRvZmZzZXROZXh0ID0gb2Zmc2V0c1tpICsgMV07XG5cdFx0XHRcdG9mZnNldFByZXYgPSBvZmZzZXRzW2kgPyBpIC0gMSA6IGldO1xuXG5cdFx0XHRcdGlmIChvZmZzZXQgPCBvZmZzZXROZXh0ICYmIHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0TmV4dDtcblx0XHRcdFx0fSBlbHNlIGlmIChvZmZzZXQgPiBvZmZzZXRQcmV2ICYmIHR6Lm1vdmVJbnZhbGlkRm9yd2FyZCkge1xuXHRcdFx0XHRcdG9mZnNldCA9IG9mZnNldFByZXY7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGFyZ2V0IDwgdW50aWxzW2ldIC0gKG9mZnNldCAqIDYwMDAwKSkge1xuXHRcdFx0XHRcdHJldHVybiBvZmZzZXRzW2ldO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRzW21heF07XG5cdFx0fSxcblxuXHRcdGFiYnIgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hYmJyc1t0aGlzLl9pbmRleChtb20pXTtcblx0XHR9LFxuXG5cdFx0b2Zmc2V0IDogZnVuY3Rpb24gKG1vbSkge1xuXHRcdFx0bG9nRXJyb3IoXCJ6b25lLm9mZnNldCBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHpvbmUudXRjT2Zmc2V0XCIpO1xuXHRcdFx0cmV0dXJuIHRoaXMub2Zmc2V0c1t0aGlzLl9pbmRleChtb20pXTtcblx0XHR9LFxuXG5cdFx0dXRjT2Zmc2V0IDogZnVuY3Rpb24gKG1vbSkge1xuXHRcdFx0cmV0dXJuIHRoaXMub2Zmc2V0c1t0aGlzLl9pbmRleChtb20pXTtcblx0XHR9XG5cdH07XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdENvdW50cnkgb2JqZWN0XG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBDb3VudHJ5IChjb3VudHJ5X25hbWUsIHpvbmVfbmFtZXMpIHtcblx0XHR0aGlzLm5hbWUgPSBjb3VudHJ5X25hbWU7XG5cdFx0dGhpcy56b25lcyA9IHpvbmVfbmFtZXM7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Q3VycmVudCBUaW1lem9uZVxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gT2Zmc2V0QXQoYXQpIHtcblx0XHR2YXIgdGltZVN0cmluZyA9IGF0LnRvVGltZVN0cmluZygpO1xuXHRcdHZhciBhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvXFwoW2EteiBdK1xcKS9pKTtcblx0XHRpZiAoYWJiciAmJiBhYmJyWzBdKSB7XG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ1NUKVxuXHRcdFx0Ly8gMTc6NTY6MzEgR01ULTA2MDAgKENlbnRyYWwgU3RhbmRhcmQgVGltZSlcblx0XHRcdGFiYnIgPSBhYmJyWzBdLm1hdGNoKC9bQS1aXS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJici5qb2luKCcnKSA6IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gMTc6NTY6MzEgQ1NUXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQrMDgwMCAo5Y+w5YyX5qiZ5rqW5pmC6ZaTKVxuXHRcdFx0YWJiciA9IHRpbWVTdHJpbmcubWF0Y2goL1tBLVpdezMsNX0vZyk7XG5cdFx0XHRhYmJyID0gYWJiciA/IGFiYnJbMF0gOiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKGFiYnIgPT09ICdHTVQnKSB7XG5cdFx0XHRhYmJyID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHRoaXMuYXQgPSArYXQ7XG5cdFx0dGhpcy5hYmJyID0gYWJicjtcblx0XHR0aGlzLm9mZnNldCA9IGF0LmdldFRpbWV6b25lT2Zmc2V0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBab25lU2NvcmUoem9uZSkge1xuXHRcdHRoaXMuem9uZSA9IHpvbmU7XG5cdFx0dGhpcy5vZmZzZXRTY29yZSA9IDA7XG5cdFx0dGhpcy5hYmJyU2NvcmUgPSAwO1xuXHR9XG5cblx0Wm9uZVNjb3JlLnByb3RvdHlwZS5zY29yZU9mZnNldEF0ID0gZnVuY3Rpb24gKG9mZnNldEF0KSB7XG5cdFx0dGhpcy5vZmZzZXRTY29yZSArPSBNYXRoLmFicyh0aGlzLnpvbmUudXRjT2Zmc2V0KG9mZnNldEF0LmF0KSAtIG9mZnNldEF0Lm9mZnNldCk7XG5cdFx0aWYgKHRoaXMuem9uZS5hYmJyKG9mZnNldEF0LmF0KS5yZXBsYWNlKC9bXkEtWl0vZywgJycpICE9PSBvZmZzZXRBdC5hYmJyKSB7XG5cdFx0XHR0aGlzLmFiYnJTY29yZSsrO1xuXHRcdH1cblx0fTtcblxuXHRmdW5jdGlvbiBmaW5kQ2hhbmdlKGxvdywgaGlnaCkge1xuXHRcdHZhciBtaWQsIGRpZmY7XG5cblx0XHR3aGlsZSAoKGRpZmYgPSAoKGhpZ2guYXQgLSBsb3cuYXQpIC8gMTJlNCB8IDApICogNmU0KSkge1xuXHRcdFx0bWlkID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKGxvdy5hdCArIGRpZmYpKTtcblx0XHRcdGlmIChtaWQub2Zmc2V0ID09PSBsb3cub2Zmc2V0KSB7XG5cdFx0XHRcdGxvdyA9IG1pZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhpZ2ggPSBtaWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxvdztcblx0fVxuXG5cdGZ1bmN0aW9uIHVzZXJPZmZzZXRzKCkge1xuXHRcdHZhciBzdGFydFllYXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkgLSAyLFxuXHRcdFx0bGFzdCA9IG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIsIDAsIDEpKSxcblx0XHRcdG9mZnNldHMgPSBbbGFzdF0sXG5cdFx0XHRjaGFuZ2UsIG5leHQsIGk7XG5cblx0XHRmb3IgKGkgPSAxOyBpIDwgNDg7IGkrKykge1xuXHRcdFx0bmV4dCA9IG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIsIGksIDEpKTtcblx0XHRcdGlmIChuZXh0Lm9mZnNldCAhPT0gbGFzdC5vZmZzZXQpIHtcblx0XHRcdFx0Y2hhbmdlID0gZmluZENoYW5nZShsYXN0LCBuZXh0KTtcblx0XHRcdFx0b2Zmc2V0cy5wdXNoKGNoYW5nZSk7XG5cdFx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoY2hhbmdlLmF0ICsgNmU0KSkpO1xuXHRcdFx0fVxuXHRcdFx0bGFzdCA9IG5leHQ7XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykge1xuXHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIgKyBpLCAwLCAxKSkpO1xuXHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShzdGFydFllYXIgKyBpLCA2LCAxKSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvZmZzZXRzO1xuXHR9XG5cblx0ZnVuY3Rpb24gc29ydFpvbmVTY29yZXMgKGEsIGIpIHtcblx0XHRpZiAoYS5vZmZzZXRTY29yZSAhPT0gYi5vZmZzZXRTY29yZSkge1xuXHRcdFx0cmV0dXJuIGEub2Zmc2V0U2NvcmUgLSBiLm9mZnNldFNjb3JlO1xuXHRcdH1cblx0XHRpZiAoYS5hYmJyU2NvcmUgIT09IGIuYWJiclNjb3JlKSB7XG5cdFx0XHRyZXR1cm4gYS5hYmJyU2NvcmUgLSBiLmFiYnJTY29yZTtcblx0XHR9XG5cdFx0aWYgKGEuem9uZS5wb3B1bGF0aW9uICE9PSBiLnpvbmUucG9wdWxhdGlvbikge1xuXHRcdFx0cmV0dXJuIGIuem9uZS5wb3B1bGF0aW9uIC0gYS56b25lLnBvcHVsYXRpb247XG5cdFx0fVxuXHRcdHJldHVybiBiLnpvbmUubmFtZS5sb2NhbGVDb21wYXJlKGEuem9uZS5uYW1lKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFRvR3Vlc3NlcyAobmFtZSwgb2Zmc2V0cykge1xuXHRcdHZhciBpLCBvZmZzZXQ7XG5cdFx0YXJyYXlUb0ludChvZmZzZXRzKTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b2Zmc2V0ID0gb2Zmc2V0c1tpXTtcblx0XHRcdGd1ZXNzZXNbb2Zmc2V0XSA9IGd1ZXNzZXNbb2Zmc2V0XSB8fCB7fTtcblx0XHRcdGd1ZXNzZXNbb2Zmc2V0XVtuYW1lXSA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIChvZmZzZXRzKSB7XG5cdFx0dmFyIG9mZnNldHNMZW5ndGggPSBvZmZzZXRzLmxlbmd0aCxcblx0XHRcdGZpbHRlcmVkR3Vlc3NlcyA9IHt9LFxuXHRcdFx0b3V0ID0gW10sXG5cdFx0XHRpLCBqLCBndWVzc2VzT2Zmc2V0O1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IG9mZnNldHNMZW5ndGg7IGkrKykge1xuXHRcdFx0Z3Vlc3Nlc09mZnNldCA9IGd1ZXNzZXNbb2Zmc2V0c1tpXS5vZmZzZXRdIHx8IHt9O1xuXHRcdFx0Zm9yIChqIGluIGd1ZXNzZXNPZmZzZXQpIHtcblx0XHRcdFx0aWYgKGd1ZXNzZXNPZmZzZXQuaGFzT3duUHJvcGVydHkoaikpIHtcblx0XHRcdFx0XHRmaWx0ZXJlZEd1ZXNzZXNbal0gPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChpIGluIGZpbHRlcmVkR3Vlc3Nlcykge1xuXHRcdFx0aWYgKGZpbHRlcmVkR3Vlc3Nlcy5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlYnVpbGRHdWVzcyAoKSB7XG5cblx0XHQvLyB1c2UgSW50bCBBUEkgd2hlbiBhdmFpbGFibGUgYW5kIHJldHVybmluZyB2YWxpZCB0aW1lIHpvbmVcblx0XHR0cnkge1xuXHRcdFx0dmFyIGludGxOYW1lID0gSW50bC5EYXRlVGltZUZvcm1hdCgpLnJlc29sdmVkT3B0aW9ucygpLnRpbWVab25lO1xuXHRcdFx0aWYgKGludGxOYW1lICYmIGludGxOYW1lLmxlbmd0aCA+IDMpIHtcblx0XHRcdFx0dmFyIG5hbWUgPSBuYW1lc1tub3JtYWxpemVOYW1lKGludGxOYW1lKV07XG5cdFx0XHRcdGlmIChuYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0bG9nRXJyb3IoXCJNb21lbnQgVGltZXpvbmUgZm91bmQgXCIgKyBpbnRsTmFtZSArIFwiIGZyb20gdGhlIEludGwgYXBpLCBidXQgZGlkIG5vdCBoYXZlIHRoYXQgZGF0YSBsb2FkZWQuXCIpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdC8vIEludGwgdW5hdmFpbGFibGUsIGZhbGwgYmFjayB0byBtYW51YWwgZ3Vlc3NpbmcuXG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldHMgPSB1c2VyT2Zmc2V0cygpLFxuXHRcdFx0b2Zmc2V0c0xlbmd0aCA9IG9mZnNldHMubGVuZ3RoLFxuXHRcdFx0Z3Vlc3NlcyA9IGd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyhvZmZzZXRzKSxcblx0XHRcdHpvbmVTY29yZXMgPSBbXSxcblx0XHRcdHpvbmVTY29yZSwgaSwgajtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBndWVzc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR6b25lU2NvcmUgPSBuZXcgWm9uZVNjb3JlKGdldFpvbmUoZ3Vlc3Nlc1tpXSksIG9mZnNldHNMZW5ndGgpO1xuXHRcdFx0Zm9yIChqID0gMDsgaiA8IG9mZnNldHNMZW5ndGg7IGorKykge1xuXHRcdFx0XHR6b25lU2NvcmUuc2NvcmVPZmZzZXRBdChvZmZzZXRzW2pdKTtcblx0XHRcdH1cblx0XHRcdHpvbmVTY29yZXMucHVzaCh6b25lU2NvcmUpO1xuXHRcdH1cblxuXHRcdHpvbmVTY29yZXMuc29ydChzb3J0Wm9uZVNjb3Jlcyk7XG5cblx0XHRyZXR1cm4gem9uZVNjb3Jlcy5sZW5ndGggPiAwID8gem9uZVNjb3Jlc1swXS56b25lLm5hbWUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHRmdW5jdGlvbiBndWVzcyAoaWdub3JlQ2FjaGUpIHtcblx0XHRpZiAoIWNhY2hlZEd1ZXNzIHx8IGlnbm9yZUNhY2hlKSB7XG5cdFx0XHRjYWNoZWRHdWVzcyA9IHJlYnVpbGRHdWVzcygpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGVkR3Vlc3M7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0R2xvYmFsIE1ldGhvZHNcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUgKG5hbWUpIHtcblx0XHRyZXR1cm4gKG5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFwvL2csICdfJyk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRab25lIChwYWNrZWQpIHtcblx0XHR2YXIgaSwgbmFtZSwgc3BsaXQsIG5vcm1hbGl6ZWQ7XG5cblx0XHRpZiAodHlwZW9mIHBhY2tlZCA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0cGFja2VkID0gW3BhY2tlZF07XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IHBhY2tlZC5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3BsaXQgPSBwYWNrZWRbaV0uc3BsaXQoJ3wnKTtcblx0XHRcdG5hbWUgPSBzcGxpdFswXTtcblx0XHRcdG5vcm1hbGl6ZWQgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXHRcdFx0em9uZXNbbm9ybWFsaXplZF0gPSBwYWNrZWRbaV07XG5cdFx0XHRuYW1lc1tub3JtYWxpemVkXSA9IG5hbWU7XG5cdFx0XHRhZGRUb0d1ZXNzZXMobm9ybWFsaXplZCwgc3BsaXRbMl0uc3BsaXQoJyAnKSk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Wm9uZSAobmFtZSwgY2FsbGVyKSB7XG5cblx0XHRuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKTtcblxuXHRcdHZhciB6b25lID0gem9uZXNbbmFtZV07XG5cdFx0dmFyIGxpbms7XG5cblx0XHRpZiAoem9uZSBpbnN0YW5jZW9mIFpvbmUpIHtcblx0XHRcdHJldHVybiB6b25lO1xuXHRcdH1cblxuXHRcdGlmICh0eXBlb2Ygem9uZSA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHpvbmUgPSBuZXcgWm9uZSh6b25lKTtcblx0XHRcdHpvbmVzW25hbWVdID0gem9uZTtcblx0XHRcdHJldHVybiB6b25lO1xuXHRcdH1cblxuXHRcdC8vIFBhc3MgZ2V0Wm9uZSB0byBwcmV2ZW50IHJlY3Vyc2lvbiBtb3JlIHRoYW4gMSBsZXZlbCBkZWVwXG5cdFx0aWYgKGxpbmtzW25hbWVdICYmIGNhbGxlciAhPT0gZ2V0Wm9uZSAmJiAobGluayA9IGdldFpvbmUobGlua3NbbmFtZV0sIGdldFpvbmUpKSkge1xuXHRcdFx0em9uZSA9IHpvbmVzW25hbWVdID0gbmV3IFpvbmUoKTtcblx0XHRcdHpvbmUuX3NldChsaW5rKTtcblx0XHRcdHpvbmUubmFtZSA9IG5hbWVzW25hbWVdO1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROYW1lcyAoKSB7XG5cdFx0dmFyIGksIG91dCA9IFtdO1xuXG5cdFx0Zm9yIChpIGluIG5hbWVzKSB7XG5cdFx0XHRpZiAobmFtZXMuaGFzT3duUHJvcGVydHkoaSkgJiYgKHpvbmVzW2ldIHx8IHpvbmVzW2xpbmtzW2ldXSkgJiYgbmFtZXNbaV0pIHtcblx0XHRcdFx0b3V0LnB1c2gobmFtZXNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvdXQuc29ydCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Q291bnRyeU5hbWVzICgpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmtleXMoY291bnRyaWVzKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZExpbmsgKGFsaWFzZXMpIHtcblx0XHR2YXIgaSwgYWxpYXMsIG5vcm1hbDAsIG5vcm1hbDE7XG5cblx0XHRpZiAodHlwZW9mIGFsaWFzZXMgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdGFsaWFzZXMgPSBbYWxpYXNlc107XG5cdFx0fVxuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGFsaWFzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFsaWFzID0gYWxpYXNlc1tpXS5zcGxpdCgnfCcpO1xuXG5cdFx0XHRub3JtYWwwID0gbm9ybWFsaXplTmFtZShhbGlhc1swXSk7XG5cdFx0XHRub3JtYWwxID0gbm9ybWFsaXplTmFtZShhbGlhc1sxXSk7XG5cblx0XHRcdGxpbmtzW25vcm1hbDBdID0gbm9ybWFsMTtcblx0XHRcdG5hbWVzW25vcm1hbDBdID0gYWxpYXNbMF07XG5cblx0XHRcdGxpbmtzW25vcm1hbDFdID0gbm9ybWFsMDtcblx0XHRcdG5hbWVzW25vcm1hbDFdID0gYWxpYXNbMV07XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gYWRkQ291bnRyaWVzIChkYXRhKSB7XG5cdFx0dmFyIGksIGNvdW50cnlfY29kZSwgY291bnRyeV96b25lcywgc3BsaXQ7XG5cdFx0aWYgKCFkYXRhIHx8ICFkYXRhLmxlbmd0aCkgcmV0dXJuO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzcGxpdCA9IGRhdGFbaV0uc3BsaXQoJ3wnKTtcblx0XHRcdGNvdW50cnlfY29kZSA9IHNwbGl0WzBdLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRjb3VudHJ5X3pvbmVzID0gc3BsaXRbMV0uc3BsaXQoJyAnKTtcblx0XHRcdGNvdW50cmllc1tjb3VudHJ5X2NvZGVdID0gbmV3IENvdW50cnkoXG5cdFx0XHRcdGNvdW50cnlfY29kZSxcblx0XHRcdFx0Y291bnRyeV96b25lc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDb3VudHJ5IChuYW1lKSB7XG5cdFx0bmFtZSA9IG5hbWUudG9VcHBlckNhc2UoKTtcblx0XHRyZXR1cm4gY291bnRyaWVzW25hbWVdIHx8IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lc0ZvckNvdW50cnkoY291bnRyeSwgd2l0aF9vZmZzZXQpIHtcblx0XHRjb3VudHJ5ID0gZ2V0Q291bnRyeShjb3VudHJ5KTtcblxuXHRcdGlmICghY291bnRyeSkgcmV0dXJuIG51bGw7XG5cblx0XHR2YXIgem9uZXMgPSBjb3VudHJ5LnpvbmVzLnNvcnQoKTtcblxuXHRcdGlmICh3aXRoX29mZnNldCkge1xuXHRcdFx0cmV0dXJuIHpvbmVzLm1hcChmdW5jdGlvbiAoem9uZV9uYW1lKSB7XG5cdFx0XHRcdHZhciB6b25lID0gZ2V0Wm9uZSh6b25lX25hbWUpO1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG5hbWU6IHpvbmVfbmFtZSxcblx0XHRcdFx0XHRvZmZzZXQ6IHpvbmUudXRjT2Zmc2V0KG5ldyBEYXRlKCkpXG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gem9uZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2FkRGF0YSAoZGF0YSkge1xuXHRcdGFkZFpvbmUoZGF0YS56b25lcyk7XG5cdFx0YWRkTGluayhkYXRhLmxpbmtzKTtcblx0XHRhZGRDb3VudHJpZXMoZGF0YS5jb3VudHJpZXMpO1xuXHRcdHR6LmRhdGFWZXJzaW9uID0gZGF0YS52ZXJzaW9uO1xuXHR9XG5cblx0ZnVuY3Rpb24gem9uZUV4aXN0cyAobmFtZSkge1xuXHRcdGlmICghem9uZUV4aXN0cy5kaWRTaG93RXJyb3IpIHtcblx0XHRcdHpvbmVFeGlzdHMuZGlkU2hvd0Vycm9yID0gdHJ1ZTtcblx0XHRcdFx0bG9nRXJyb3IoXCJtb21lbnQudHouem9uZUV4aXN0cygnXCIgKyBuYW1lICsgXCInKSBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mICFtb21lbnQudHouem9uZSgnXCIgKyBuYW1lICsgXCInKVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuICEhZ2V0Wm9uZShuYW1lKTtcblx0fVxuXG5cdGZ1bmN0aW9uIG5lZWRzT2Zmc2V0IChtKSB7XG5cdFx0dmFyIGlzVW5peFRpbWVzdGFtcCA9IChtLl9mID09PSAnWCcgfHwgbS5fZiA9PT0gJ3gnKTtcblx0XHRyZXR1cm4gISEobS5fYSAmJiAobS5fdHptID09PSB1bmRlZmluZWQpICYmICFpc1VuaXhUaW1lc3RhbXApO1xuXHR9XG5cblx0ZnVuY3Rpb24gbG9nRXJyb3IgKG1lc3NhZ2UpIHtcblx0XHRpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb25zb2xlLmVycm9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuXHRcdH1cblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRtb21lbnQudHogbmFtZXNwYWNlXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiB0eiAoaW5wdXQpIHtcblx0XHR2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCwgLTEpLFxuXHRcdFx0bmFtZSA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0sXG5cdFx0XHR6b25lID0gZ2V0Wm9uZShuYW1lKSxcblx0XHRcdG91dCAgPSBtb21lbnQudXRjLmFwcGx5KG51bGwsIGFyZ3MpO1xuXG5cdFx0aWYgKHpvbmUgJiYgIW1vbWVudC5pc01vbWVudChpbnB1dCkgJiYgbmVlZHNPZmZzZXQob3V0KSkge1xuXHRcdFx0b3V0LmFkZCh6b25lLnBhcnNlKG91dCksICdtaW51dGVzJyk7XG5cdFx0fVxuXG5cdFx0b3V0LnR6KG5hbWUpO1xuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdHR6LnZlcnNpb24gICAgICA9IFZFUlNJT047XG5cdHR6LmRhdGFWZXJzaW9uICA9ICcnO1xuXHR0ei5fem9uZXMgICAgICAgPSB6b25lcztcblx0dHouX2xpbmtzICAgICAgID0gbGlua3M7XG5cdHR6Ll9uYW1lcyAgICAgICA9IG5hbWVzO1xuXHR0ei5fY291bnRyaWVzXHQ9IGNvdW50cmllcztcblx0dHouYWRkICAgICAgICAgID0gYWRkWm9uZTtcblx0dHoubGluayAgICAgICAgID0gYWRkTGluaztcblx0dHoubG9hZCAgICAgICAgID0gbG9hZERhdGE7XG5cdHR6LnpvbmUgICAgICAgICA9IGdldFpvbmU7XG5cdHR6LnpvbmVFeGlzdHMgICA9IHpvbmVFeGlzdHM7IC8vIGRlcHJlY2F0ZWQgaW4gMC4xLjBcblx0dHouZ3Vlc3MgICAgICAgID0gZ3Vlc3M7XG5cdHR6Lm5hbWVzICAgICAgICA9IGdldE5hbWVzO1xuXHR0ei5ab25lICAgICAgICAgPSBab25lO1xuXHR0ei51bnBhY2sgICAgICAgPSB1bnBhY2s7XG5cdHR6LnVucGFja0Jhc2U2MCA9IHVucGFja0Jhc2U2MDtcblx0dHoubmVlZHNPZmZzZXQgID0gbmVlZHNPZmZzZXQ7XG5cdHR6Lm1vdmVJbnZhbGlkRm9yd2FyZCAgID0gdHJ1ZTtcblx0dHoubW92ZUFtYmlndW91c0ZvcndhcmQgPSBmYWxzZTtcblx0dHouY291bnRyaWVzICAgID0gZ2V0Q291bnRyeU5hbWVzO1xuXHR0ei56b25lc0ZvckNvdW50cnkgPSB6b25lc0ZvckNvdW50cnk7XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdEludGVyZmFjZSB3aXRoIE1vbWVudC5qc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0dmFyIGZuID0gbW9tZW50LmZuO1xuXG5cdG1vbWVudC50eiA9IHR6O1xuXG5cdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG51bGw7XG5cblx0bW9tZW50LnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uIChtb20sIGtlZXBUaW1lKSB7XG5cdFx0dmFyIHpvbmUgPSBtb21lbnQuZGVmYXVsdFpvbmUsXG5cdFx0XHRvZmZzZXQ7XG5cblx0XHRpZiAobW9tLl96ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICh6b25lICYmIG5lZWRzT2Zmc2V0KG1vbSkgJiYgIW1vbS5faXNVVEMpIHtcblx0XHRcdFx0bW9tLl9kID0gbW9tZW50LnV0Yyhtb20uX2EpLl9kO1xuXHRcdFx0XHRtb20udXRjKCkuYWRkKHpvbmUucGFyc2UobW9tKSwgJ21pbnV0ZXMnKTtcblx0XHRcdH1cblx0XHRcdG1vbS5feiA9IHpvbmU7XG5cdFx0fVxuXHRcdGlmIChtb20uX3opIHtcblx0XHRcdG9mZnNldCA9IG1vbS5fei51dGNPZmZzZXQobW9tKTtcblx0XHRcdGlmIChNYXRoLmFicyhvZmZzZXQpIDwgMTYpIHtcblx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0IC8gNjA7XG5cdFx0XHR9XG5cdFx0XHRpZiAobW9tLnV0Y09mZnNldCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHZhciB6ID0gbW9tLl96O1xuXHRcdFx0XHRtb20udXRjT2Zmc2V0KC1vZmZzZXQsIGtlZXBUaW1lKTtcblx0XHRcdFx0bW9tLl96ID0gejtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1vbS56b25lKG9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRmbi50eiA9IGZ1bmN0aW9uIChuYW1lLCBrZWVwVGltZSkge1xuXHRcdGlmIChuYW1lKSB7XG5cdFx0XHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcignVGltZSB6b25lIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgZ290ICcgKyBuYW1lICsgJyBbJyArIHR5cGVvZiBuYW1lICsgJ10nKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuX3ogPSBnZXRab25lKG5hbWUpO1xuXHRcdFx0aWYgKHRoaXMuX3opIHtcblx0XHRcdFx0bW9tZW50LnVwZGF0ZU9mZnNldCh0aGlzLCBrZWVwVGltZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBoYXMgbm8gZGF0YSBmb3IgXCIgKyBuYW1lICsgXCIuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy9kYXRhLWxvYWRpbmcvLlwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5uYW1lOyB9XG5cdH07XG5cblx0ZnVuY3Rpb24gYWJicldyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAodGhpcy5feikgeyByZXR1cm4gdGhpcy5fei5hYmJyKHRoaXMpOyB9XG5cdFx0XHRyZXR1cm4gb2xkLmNhbGwodGhpcyk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0Wm9uZVdyYXAgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR0aGlzLl96ID0gbnVsbDtcblx0XHRcdHJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRab25lV3JhcDIgKG9sZCkge1xuXHRcdHJldHVybiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDApIHRoaXMuX3ogPSBudWxsO1xuXHRcdFx0cmV0dXJuIG9sZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH1cblxuXHRmbi56b25lTmFtZSAgPSBhYmJyV3JhcChmbi56b25lTmFtZSk7XG5cdGZuLnpvbmVBYmJyICA9IGFiYnJXcmFwKGZuLnpvbmVBYmJyKTtcblx0Zm4udXRjICAgICAgID0gcmVzZXRab25lV3JhcChmbi51dGMpO1xuXHRmbi5sb2NhbCAgICAgPSByZXNldFpvbmVXcmFwKGZuLmxvY2FsKTtcblx0Zm4udXRjT2Zmc2V0ID0gcmVzZXRab25lV3JhcDIoZm4udXRjT2Zmc2V0KTtcblxuXHRtb21lbnQudHouc2V0RGVmYXVsdCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHRpZiAobWFqb3IgPCAyIHx8IChtYWpvciA9PT0gMiAmJiBtaW5vciA8IDkpKSB7XG5cdFx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHNldERlZmF1bHQoKSByZXF1aXJlcyBNb21lbnQuanMgPj0gMi45LjAuIFlvdSBhcmUgdXNpbmcgTW9tZW50LmpzICcgKyBtb21lbnQudmVyc2lvbiArICcuJyk7XG5cdFx0fVxuXHRcdG1vbWVudC5kZWZhdWx0Wm9uZSA9IG5hbWUgPyBnZXRab25lKG5hbWUpIDogbnVsbDtcblx0XHRyZXR1cm4gbW9tZW50O1xuXHR9O1xuXG5cdC8vIENsb25pbmcgYSBtb21lbnQgc2hvdWxkIGluY2x1ZGUgdGhlIF96IHByb3BlcnR5LlxuXHR2YXIgbW9tZW50UHJvcGVydGllcyA9IG1vbWVudC5tb21lbnRQcm9wZXJ0aWVzO1xuXHRpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG1vbWVudFByb3BlcnRpZXMpID09PSAnW29iamVjdCBBcnJheV0nKSB7XG5cdFx0Ly8gbW9tZW50IDIuOC4xK1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX3onKTtcblx0XHRtb21lbnRQcm9wZXJ0aWVzLnB1c2goJ19hJyk7XG5cdH0gZWxzZSBpZiAobW9tZW50UHJvcGVydGllcykge1xuXHRcdC8vIG1vbWVudCAyLjcuMFxuXHRcdG1vbWVudFByb3BlcnRpZXMuX3ogPSBudWxsO1xuXHR9XG5cblx0Ly8gSU5KRUNUIERBVEFcblxuXHRyZXR1cm4gbW9tZW50O1xufSkpO1xuIiwidmFyIG1vbWVudCA9IG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcIi4vbW9tZW50LXRpbWV6b25lXCIpO1xubW9tZW50LnR6LmxvYWQocmVxdWlyZSgnLi9kYXRhL3BhY2tlZC9sYXRlc3QuanNvbicpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBGaW5uaXNoIFtmaV1cbi8vISBhdXRob3IgOiBUYXJtbyBBaWRhbnRhdXN0YSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9ibGVhZG9mXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgbnVtYmVyc1Bhc3QgPVxuICAgICAgICAgICAgJ25vbGxhIHlrc2kga2Frc2kga29sbWUgbmVsasOkIHZpaXNpIGt1dXNpIHNlaXRzZW3DpG4ga2FoZGVrc2FuIHloZGVrc8Okbicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJyAnXG4gICAgICAgICAgICApLFxuICAgICAgICBudW1iZXJzRnV0dXJlID0gW1xuICAgICAgICAgICAgJ25vbGxhJyxcbiAgICAgICAgICAgICd5aGRlbicsXG4gICAgICAgICAgICAna2FoZGVuJyxcbiAgICAgICAgICAgICdrb2xtZW4nLFxuICAgICAgICAgICAgJ25lbGrDpG4nLFxuICAgICAgICAgICAgJ3ZpaWRlbicsXG4gICAgICAgICAgICAna3V1ZGVuJyxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzddLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOF0sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs5XSxcbiAgICAgICAgXTtcbiAgICBmdW5jdGlvbiB0cmFuc2xhdGUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSAnJztcbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtdXV0YW1hbiBzZWt1bm5pbicgOiAnbXV1dGFtYSBzZWt1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ3NzJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdzZWt1bm5pbicgOiAnc2VrdW50aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aSc7XG4gICAgICAgICAgICBjYXNlICdtbSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdoJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAndHVubmluJyA6ICd0dW50aSc7XG4gICAgICAgICAgICBjYXNlICdoaCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAndHVubmluJyA6ICd0dW50aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkJztcbiAgICAgICAgICAgIGNhc2UgJ2RkJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpMOkJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ00nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdrdXVrYXVkZW4nIDogJ2t1dWthdXNpJztcbiAgICAgICAgICAgIGNhc2UgJ01NJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdrdXVrYXVkZW4nIDogJ2t1dWthdXR0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd5JzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAndnVvZGVuJyA6ICd2dW9zaSc7XG4gICAgICAgICAgICBjYXNlICd5eSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAndnVvZGVuJyA6ICd2dW90dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJlc3VsdCA9IHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSArICcgJyArIHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlciA8IDEwXG4gICAgICAgICAgICA/IGlzRnV0dXJlXG4gICAgICAgICAgICAgICAgPyBudW1iZXJzRnV0dXJlW251bWJlcl1cbiAgICAgICAgICAgICAgICA6IG51bWJlcnNQYXN0W251bWJlcl1cbiAgICAgICAgICAgIDogbnVtYmVyO1xuICAgIH1cblxuICAgIHZhciBmaSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2ZpJywge1xuICAgICAgICBtb250aHM6ICd0YW1taWt1dV9oZWxtaWt1dV9tYWFsaXNrdXVfaHVodGlrdXVfdG91a29rdXVfa2Vzw6RrdXVfaGVpbsOka3V1X2Vsb2t1dV9zeXlza3V1X2xva2FrdXVfbWFycmFza3V1X2pvdWx1a3V1Jy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICd0YW1taV9oZWxtaV9tYWFsaXNfaHVodGlfdG91a29fa2Vzw6RfaGVpbsOkX2Vsb19zeXlzX2xva2FfbWFycmFzX2pvdWx1Jy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ3N1bm51bnRhaV9tYWFuYW50YWlfdGlpc3RhaV9rZXNraXZpaWtrb190b3JzdGFpX3BlcmphbnRhaV9sYXVhbnRhaScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc3VfbWFfdGlfa2VfdG9fcGVfbGEnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hILm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hILm1tLnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRG8gTU1NTVt0YV0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbDogJ0QuTS5ZWVlZJyxcbiAgICAgICAgICAgIGxsOiAnRG8gTU1NIFlZWVknLFxuICAgICAgICAgICAgbGxsOiAnRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQsIERvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW3TDpG7DpMOkbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1todW9tZW5uYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFtrbG9dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZWlsZW5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW3ZpaW1lXSBkZGRkW25hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJyVzIHDDpMOkc3TDpCcsXG4gICAgICAgICAgICBwYXN0OiAnJXMgc2l0dGVuJyxcbiAgICAgICAgICAgIHM6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHNzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBtbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgaGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGRkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBNTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgeXk6IHRyYW5zbGF0ZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBmaTtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBTd2VkaXNoIFtzdl1cbi8vISBhdXRob3IgOiBKZW5zIEFsbSA6IGh0dHBzOi8vZ2l0aHViLmNvbS91bG11c1xuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIHN2ID0gbW9tZW50LmRlZmluZUxvY2FsZSgnc3YnLCB7XG4gICAgICAgIG1vbnRoczogJ2phbnVhcmlfZmVicnVhcmlfbWFyc19hcHJpbF9tYWpfanVuaV9qdWxpX2F1Z3VzdGlfc2VwdGVtYmVyX29rdG9iZXJfbm92ZW1iZXJfZGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OiAnamFuX2ZlYl9tYXJfYXByX21hal9qdW5fanVsX2F1Z19zZXBfb2t0X25vdl9kZWMnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzOiAnc8O2bmRhZ19tw6VuZGFnX3Rpc2RhZ19vbnNkYWdfdG9yc2RhZ19mcmVkYWdfbMO2cmRhZycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3PDtm5fbcOlbl90aXNfb25zX3Rvcl9mcmVfbMO2cicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzw7ZfbcOlX3RpX29uX3RvX2ZyX2zDticuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ1lZWVktTU0tREQnLFxuICAgICAgICAgICAgTEw6ICdEIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCBEIE1NTU0gWVlZWSBba2wuXSBISDptbScsXG4gICAgICAgICAgICBsbGw6ICdEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbGw6ICdkZGQgRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW0lkYWddIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbSW1vcmdvbl0gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tJZ8Olcl0gTFQnLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdbUMOlXSBkZGRkIExUJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW0ldIGRkZGRbc10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdvbSAlcycsXG4gICAgICAgICAgICBwYXN0OiAnZsO2ciAlcyBzZWRhbicsXG4gICAgICAgICAgICBzOiAnbsOlZ3JhIHNla3VuZGVyJyxcbiAgICAgICAgICAgIHNzOiAnJWQgc2VrdW5kZXInLFxuICAgICAgICAgICAgbTogJ2VuIG1pbnV0JyxcbiAgICAgICAgICAgIG1tOiAnJWQgbWludXRlcicsXG4gICAgICAgICAgICBoOiAnZW4gdGltbWUnLFxuICAgICAgICAgICAgaGg6ICclZCB0aW1tYXInLFxuICAgICAgICAgICAgZDogJ2VuIGRhZycsXG4gICAgICAgICAgICBkZDogJyVkIGRhZ2FyJyxcbiAgICAgICAgICAgIE06ICdlbiBtw6VuYWQnLFxuICAgICAgICAgICAgTU06ICclZCBtw6VuYWRlcicsXG4gICAgICAgICAgICB5OiAnZXR0IMOlcicsXG4gICAgICAgICAgICB5eTogJyVkIMOlcicsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfShcXDplfFxcOmEpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB+figobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmUnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICc6ZSc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3Y7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogR2VybWFuIFtkZV1cbi8vISBhdXRob3IgOiBsbHVjaHMgOiBodHRwczovL2dpdGh1Yi5jb20vbGx1Y2hzXG4vLyEgYXV0aG9yOiBNZW5lbGlvbiBFbGVuc8O6bGU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PaXJlXG4vLyEgYXV0aG9yIDogTWlrb2xhaiBEYWRlbGEgOiBodHRwczovL2dpdGh1Yi5jb20vbWlrMDFhalxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgZnVuY3Rpb24gcHJvY2Vzc1JlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHtcbiAgICAgICAgICAgIG06IFsnZWluZSBNaW51dGUnLCAnZWluZXIgTWludXRlJ10sXG4gICAgICAgICAgICBoOiBbJ2VpbmUgU3R1bmRlJywgJ2VpbmVyIFN0dW5kZSddLFxuICAgICAgICAgICAgZDogWydlaW4gVGFnJywgJ2VpbmVtIFRhZyddLFxuICAgICAgICAgICAgZGQ6IFtudW1iZXIgKyAnIFRhZ2UnLCBudW1iZXIgKyAnIFRhZ2VuJ10sXG4gICAgICAgICAgICB3OiBbJ2VpbmUgV29jaGUnLCAnZWluZXIgV29jaGUnXSxcbiAgICAgICAgICAgIE06IFsnZWluIE1vbmF0JywgJ2VpbmVtIE1vbmF0J10sXG4gICAgICAgICAgICBNTTogW251bWJlciArICcgTW9uYXRlJywgbnVtYmVyICsgJyBNb25hdGVuJ10sXG4gICAgICAgICAgICB5OiBbJ2VpbiBKYWhyJywgJ2VpbmVtIEphaHInXSxcbiAgICAgICAgICAgIHl5OiBbbnVtYmVyICsgJyBKYWhyZScsIG51bWJlciArICcgSmFocmVuJ10sXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB3aXRob3V0U3VmZml4ID8gZm9ybWF0W2tleV1bMF0gOiBmb3JtYXRba2V5XVsxXTtcbiAgICB9XG5cbiAgICB2YXIgZGUgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdkZScsIHtcbiAgICAgICAgbW9udGhzOiAnSmFudWFyX0ZlYnJ1YXJfTcOkcnpfQXByaWxfTWFpX0p1bmlfSnVsaV9BdWd1c3RfU2VwdGVtYmVyX09rdG9iZXJfTm92ZW1iZXJfRGV6ZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ0phbi5fRmViLl9Nw6Ryel9BcHIuX01haV9KdW5pX0p1bGlfQXVnLl9TZXAuX09rdC5fTm92Ll9EZXouJy5zcGxpdCgnXycpLFxuICAgICAgICBtb250aHNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdTb25udGFnX01vbnRhZ19EaWVuc3RhZ19NaXR0d29jaF9Eb25uZXJzdGFnX0ZyZWl0YWdfU2Ftc3RhZycuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnU28uX01vLl9EaS5fTWkuX0RvLl9Gci5fU2EuJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ1NvX01vX0RpX01pX0RvX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdERC5NTS5ZWVlZJyxcbiAgICAgICAgICAgIExMOiAnRC4gTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBMTExMOiAnZGRkZCwgRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbaGV1dGUgdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW21vcmdlbiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdERheTogJ1tnZXN0ZXJuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tsZXR6dGVuXSBkZGRkIFt1bV0gTFQgW1Vocl0nLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ2luICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICd2b3IgJXMnLFxuICAgICAgICAgICAgczogJ2VpbiBwYWFyIFNla3VuZGVuJyxcbiAgICAgICAgICAgIHNzOiAnJWQgU2VrdW5kZW4nLFxuICAgICAgICAgICAgbTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIG1tOiAnJWQgTWludXRlbicsXG4gICAgICAgICAgICBoOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgaGg6ICclZCBTdHVuZGVuJyxcbiAgICAgICAgICAgIGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBkZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHc6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3dzogJyVkIFdvY2hlbicsXG4gICAgICAgICAgICBNOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgTU06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeXk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGU7XG5cbn0pKSk7XG4iLCJjb25zdCB0cmFuc2xhdGlvbnMgPSB7XG4gIGRlOiB7XG4gICAgYWRkcmVzczogJ0FkcmVzc2UnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgT3J0IG9yIEdlc2Now6RmdCcsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmx1ZycsXG4gICAgYXJyaXZhbDogJ0Fua3VuZnQnLFxuICAgIGJhY2s6ICdadXLDvGNrJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0xlaWhyYWQtU3RhdGlvbicsXG4gICAgYnVzOiAnQnVzJyxcbiAgICBjYW5jZWw6ICdBYmJyZWNoZW4nLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnTMO2c2NoZW4nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdTdWNoaGlzdG9yaWUgbMO2c2NoZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ0FrdHVlbGxlIFBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdMw7ZzY2hlbicsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1dvbGxlbiBTaWUgZGllIFN1Y2gtSGlzdG9yaWUgbMO2c2NoZW4/JyxcbiAgICBkZXBhcnR1cmU6ICdBYmZhaHJ0JyxcbiAgICBkZXN0aW5hdGlvbjogJ1ppZWwnLFxuICAgICdnaXZlLW9yaWdpbic6ICdTdGFydCBlaW5nZWJlbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1ppZWwgZWluZ2ViZW4uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0ZW4nLFxuICAgIGZlcnJ5OiAnRsOkaHJlJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1p1a8O8bmZ0aWdlIFZlcmJpbmR1bmcnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ0VpZ2VuZSBGYXZvcml0ZW4nLFxuICAgIGxvYWRpbmc6ICdMYWRlbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHJhaWw6ICdadWcnLFxuICAgIHNlYXJjaDogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU3VjaGUgYW5oYW5kIHZvbiBBZHJlc3NlIG9kZXIgT3J0c2FuZ2FiZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU3VjaGUgWmllbG9ydCwgTGluaWUgb3IgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnWmllbG9ydCBlaW5nZWJlbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0VyZ2Vibmlzc2UgaW4g4oCcWmllbG9ydOKAnS1SZWl0ZXIgYW56ZWlnZW4nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdLZWluIE9ydCBnZWZ1bmRlbi4nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1N1Y2hlIFN0YXJ0b3J0LCBMaW5pZSBvZGVyIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTdGFydG9ydCBlaW5nZWJlbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTdGFuZG9ydCBlcm1pdHRlbG4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5JyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0FrdHVlbGxlIEF1c3dhaGw6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ1N0cmHDn2UnLFxuICAgIHN1YndheTogJ1UtQmFobicsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdIYWx0ZXN0ZWxsZScsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU3VjaGUgSGFsdGVzdGVsbGVuIHVuZCBMaW5pZW4gaW4gZGVyIE7DpGhlJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3VjaGUgQnVzbGluaWVuIG9yIEhhbHRlc3RlbGxlbicsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU3VjaGUgTGVpaHJhZC1TdGF0aW9uZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU3VjaGUgWnVndmVyYmluZHVuZ2VuIG9kZXIgQmFobmjDtmZlJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3VjaGUgVS1CYWhuLUxpbmllbiBvZGVyIEhhbHRlc3RlbGxlbicsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTdWNoZSBTdGFkdGJhaG4tSGFsdGVzdGVsbGVuLVN1Y2hlJyxcbiAgICAndG9kYXktYXQnOiAnSGV1dGUgdW0nLFxuICAgICd0b21vcnJvdy1hdCc6ICdNb3JnZW4gdW0nLFxuICAgIHRyYW06ICdTdHJhw59lbmJhaG4nLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0JlbnV0emUgYWt0dWVsbGVuIFN0YW5kb3J0JyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1fDpGhsZSBQb3NpdGlvbiBhbmhhbmQgS2FydGUnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ0F1cyBlaWdlbmVuIEZhdm9yaXRlbiBhdXN3w6RobGVuJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1p3aXNjaGVuemllbCcsXG4gICAgd2hlcmU6ICdXb2hpbj8nLFxuICAgIHBsYWNlOiAnT3J0JyxcbiAgfSxcbiAgZW46IHtcbiAgICBhZGRyZXNzOiAnQWRkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRkcmVzcywgcGxhY2Ugb3IgYnVzaW5lc3MnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdBZGQgdmlhIHBvaW50JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbGlnaHQnLFxuICAgIGFycml2YWw6ICdBcnJpdmFsJyxcbiAgICBiYWNrOiAnQmFjaycsXG4gICAgYmlrZXBhcms6ICdQYXJrICYgUmlkZSBmb3IgYmlrZXMnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnQmlrZSBzdGF0aW9uJyxcbiAgICBidXM6ICdidXMnLFxuICAgIGNhbmNlbDogJ0NhbmNlbCcsXG4gICAgY2FycGFyazogJ1BhcmsgJiBSaWRlJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0NsZWFyJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnQ2xlYXIgc2VhcmNoIGhpc3RvcnknLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0RlbGV0ZScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0RvIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZWFyY2ggaGlzdG9yeT8nLFxuICAgIGRlcGFydHVyZTogJ0RlcGFydHVyZScsXG4gICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0VudGVyIHlvdXIgb3JpZ2luLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnRW50ZXIgeW91ciBkZXN0aW5hdGlvbicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3VyaXRlJyxcbiAgICBmZXJyeTogJ0ZlcnJ5JyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0Z1dHVyZSByb3V0ZScsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnT3duIGxvY2F0aW9ucycsXG4gICAgbG9hZGluZzogJ0xvYWRpbmcuLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbScsXG4gICAgcGxhdGZvcm06ICdQbGF0Zm9ybScsXG4gICAgcmFpbDogJ1RyYWluJyxcbiAgICByZXF1aXJlZDogJ3JlcXVpcmVkIGZpZWxkJyxcbiAgICBzZWFyY2g6ICdTZWFyY2gnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTZWFyY2ggYnkgYWRkcmVzcyBvciBwbGFjZSBuYW1lJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTZWFyY2gnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU2VhcmNoIGRlc3RpbmF0aW9uLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ0VudGVyIGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnVmlldyByZXN1bHRzIGluIHRoZSBhZGphY2VudCDigJxEZXN0aW5hdGlvbuKAnSB0YWInLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdObyBsb2NhdGlvbicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU2VhcmNoIG9yaWdpbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnRW50ZXIgb3JpZ2luJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ0RldGVjdCBsb2NhdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guIE5hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXknLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzpcbiAgICAgICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guIEVudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQ3VycmVudCBzZWxlY3Rpb246IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ1N0cmVldCcsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnU3RvcCcsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU2VhcmNoIHN0b3BzIGFuZCByb3V0ZXMnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1NlYXJjaCBmbGlnaHRzIG9yIGFpcnBvcnRzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU2VhcmNoIGJ1cyByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1NlYXJjaCBjaXR5IGJpa2Ugc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU2VhcmNoIHRyYWluIHJvdXRlcyBvciBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1NlYXJjaCBtZXRybyByb3V0ZXMgb3Igc3RhdGlvbnMgJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1NlYXJjaCB0cmFtIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXMgYW5kIHN0b3Agc2VhcmNoJyxcbiAgICAndG9kYXktYXQnOiAndG9kYXkgYXQnLFxuICAgICd0b21vcnJvdy1hdCc6ICd0b21vcnJvdyBhdCcsXG4gICAgdHJhbTogJ1RyYW0nLFxuICAgIHRyYWNrOiAnVHJhY2snLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1NlbGVjdCBwb3NpdGlvbiBmcm9tIG1hcCcsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnU2VsZWN0IGZyb20gb3duIGxvY2F0aW9ucycsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWaWEgcG9pbnQnLFxuICAgIHdoZXJlOiAnV2hlcmUgdG8/JyxcbiAgICBwbGFjZTogJ0xvY2F0aW9uJyxcbiAgfSxcbiAgZmk6IHtcbiAgICBhZGRyZXNzOiAnT3NvaXRlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdPc29pdGUsIHBhaWtrYSB0YWkgeXJpdHlzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQXZhYSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICBhaXJwbGFuZTogJ0xlbnRva29uZScsXG4gICAgYXJyaXZhbDogJ1BlcmlsbMOkJyxcbiAgICBiYWNrOiAnVGFrYWlzaW4nLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnUHnDtnLDpGFzZW1hJyxcbiAgICBiaWtlcGFyazogJ0xpaXR5bnTDpHB5w7Zyw6RwYXJra2knLFxuICAgIGJ1czogJ2J1c3NpJyxcbiAgICBjYW5jZWw6ICdQZXJ1dXRhJyxcbiAgICBjYXJwYXJrOiAnTGlpdHludMOkcHlzw6Rrb2ludGknLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVHloamVubsOkJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVHloamVubsOkIGhha3VoaXN0b3JpYScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnVMOkbcOkbmhldGtpbmVuIHNpamFpbnRpJyxcbiAgICBkZWxldGU6ICdQb2lzdGEnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdIYWx1YXRrbyB0eWhqZW50w6TDpCBoYWt1aGlzdG9yaWFuPycsXG4gICAgZGVwYXJ0dXJlOiAnTMOkaHTDtmFpa2EnLFxuICAgIGRlc3RpbmF0aW9uOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgIGZhdm91cml0ZTogJ1N1b3Npa2tpJyxcbiAgICBmZXJyeTogJ0xhdXR0YScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdUdWxldmEgcmVpdHRpJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnTcOkw6Ryw6RucMOkw6QnLFxuICAgIG9yaWdpbjogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdMw6RodMO2cGFpa2thJyxcbiAgICBvd25sb2NhdGlvbnM6ICdPbWF0IHBhaWthdCcsXG4gICAgbG9hZGluZzogJ0xhZGF0YWFuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdMYWl0dXJpJyxcbiAgICByYWlsOiAnSnVuYScsXG4gICAgcmVxdWlyZWQ6ICdwYWtvbGxpbmVuIGtlbnR0w6QnLFxuICAgIHNlYXJjaDogJ0V0c2knLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdIYWUgb3NvaXR0ZWVsbGEgdGFpIHBhaWthbiBuaW1lbGzDpCcsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnSGFlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ0hhZSBtw6TDpHLDpG5ww6TDpHTDpCwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1N5w7Z0w6QgbcOkw6Ryw6RucMOkw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdLYXRzbyB0dWxva3NldCB2aWVyZWlzZWx0w6QgTcOkw6Ryw6RucMOkw6QtdsOkbGlsZWhkZWx0w6QnLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdFaSB0dWxva3NpYScsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnSGFlIGzDpGh0w7ZwYWlra2FhLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N5w7Z0w6QgbMOkaHTDtnBhaWtrYScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4gTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpCcsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnOlxuICAgICAgJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LiBTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXMnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6ICcgTMO2eWRldHRpaW4ge3tjb3VudH19IGVoZG90dXN0YScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnVMOkbcOkbmhldGtpbmVuIHZhbGludGE6IHt7c2VsZWN0aW9ufX0nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnUGFpa2FubmEnLFxuICAgIHN0cmVldDogJ0thdHUnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnQXNlbWEnLFxuICAgIHN0b3A6ICdQeXPDpGtraScsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnTGluamEsIHB5c8Oka2tpIHRhaSBhc2VtYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnSGFlIGxlbnRvamEgdGFpIGxlbnRvYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnSGFlIGJ1c3NpbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdIYWUga2F1cHVua2lwecO2csOkYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ0hhZSBsw6RoaWp1bmFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdIYWUgbWV0cm9saW5qYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdIYWUgcmFpdGlvbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0xpbmphLSBqYSBweXPDpGtraWhha3UnLFxuICAgICd0b2RheS1hdCc6ICd0w6Ruw6TDpG4ga2xvJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnaHVvbWVubmEga2xvJyxcbiAgICB0cmFtOiAnUmFpdGlvdmF1bnUnLFxuICAgIHRyYWNrOiAnUmFpZGUnLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWYWxpdHNlIHNpamFpbnRpIGthcnRhbHRhJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWYWxpdHNlIG9taXN0YSBwYWlrb2lzdGEnLFxuICAgIHZlbnVlOiAnUGFpa2thJyxcbiAgICAndmlhLXBvaW50JzogJ1bDpGxpcGlzdGUnLFxuICAgIHdoZXJlOiAnTWlubmUgbWVubsOkw6RuPycsXG4gICAgcGxhY2U6ICdQYWlra2EnLFxuICB9LFxuICBzdjoge1xuICAgIGFkZHJlc3M6ICdBZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkcmVzcywgcGxhdHMgZWxsZXIgZsO2cmV0YWcnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgJ1N0w6RsbCBpbiB2YXJha3RpZ2hldCBmw7ZyIHZpYXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmx5ZycsXG4gICAgYXJyaXZhbDogJ0FubMOkbmRlcicsXG4gICAgYmFjazogJ1RpbGxiYWthJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1N0YWRzY3lrZWxzdGF0aW9uJyxcbiAgICBiaWtlcGFyazogJ0Fuc2x1dG5pbmdzcGFya2VyaW5nIGbDtnIgY3lrbGFyJyxcbiAgICBidXM6ICdCdXNzaScsXG4gICAgY2FuY2VsOiAnQXZicnl0JyxcbiAgICBjYXJwYXJrOiAnSW5mYXJ0c3BhcmtlcmluZycsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUw7ZtJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnVMO2bSBzw7ZraGlzdG9yaWtlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnTnV2YXJhbmRlIHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdUYSBib3J0JyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnVmlsbCBkdSB0w7ZtbWEgc8O2a2hpc3RvcmlrZW4/JyxcbiAgICBkZXBhcnR1cmU6ICdBdmfDpW5nc3RpZCcsXG4gICAgZGVzdGluYXRpb246ICdEZXN0aW5hdGlvbicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdCcsXG4gICAgZmVycnk6ICdGw6RyamEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnJhbXRpZGEgcnV0dCcsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnU2tyaXYgaW4gZGluIGRlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU2tyaXYgaW4gZGluIGF2ZsOkcmRzcGxhdHMnLFxuICAgIG9yaWdpbjogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdBdmbDpHJkc3BsYXRzJyxcbiAgICBvd25sb2NhdGlvbnM6ICdFZ25hIHBsYXRzZXInLFxuICAgIGxvYWRpbmc6ICdMYWRkYXIuLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXR0Zm9ybScsXG4gICAgcmFpbDogJ1TDpWcnLFxuICAgIHJlcXVpcmVkOiAnb2JsaWdhdG9yaXNrdCBmw6RsdCcsXG4gICAgc2VhcmNoOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1PDtmsgbWVkIGFkcmVzc2VuIGVsbGVyIHBsYXRzZW5zIG5hbW4nLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1PDtmsnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnU8O2ayBkZXN0aW5hdGlvbiwgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTa3JpdiBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1NlIHJlc3VsdGF0ZW4gdW5kZXIgZmxpa2VuIERlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnSW5nYSBzw7ZrcmVzdWx0YXQnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1PDtmsgYXZmw6RyZHNwbGF0cywgbGluamUgZWxsZXIgaMOlbGxwbGF0cycsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU2tyaXYgYXZmw6RyZHNwbGF0cycsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdTw7ZrIHBvc2l0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnOlxuICAgICAgJ1BsYXRzLCBsaW5qZSBvY2ggaMOlbGxwbGF0c3PDtmtuaW5nLiBOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzpcbiAgICAgICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4gQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnR2F0YScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgdHJhY2s6ICdTcMOlcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgcGxhY2U6ICdQbGF0cycsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IG1vYmlsZVN0eWxlcyBmcm9tICcuL01vYmlsZVNlYXJjaC5zY3NzJztcbmltcG9ydCBtb2JpbGVOb1Njcm9sbFN0eWxlcyBmcm9tICcuL01vYmlsZU5vU2Nyb2xsLnNjc3MnO1xuXG5jbGFzcyBBdXRvc3VnZ2VzdFBhdGNoIGV4dGVuZHMgQXV0b3N1Z2dlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLm9uU3VnZ2VzdGlvblRvdWNoTW92ZSA9ICgpID0+IHtcbiAgICAgIHNlbGYuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgc2VsZi5wcmVzc2VkU3VnZ2VzdGlvbiA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBNb2JpbGVTZWFyY2ggPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgY2xvc2VIYW5kbGUsXG4gIGNsZWFySW5wdXQsXG4gIHZhbHVlLFxuICBzdWdnZXN0aW9ucyxcbiAgaW5wdXRQcm9wcyxcbiAgZmV0Y2hGdW5jdGlvbixcbiAgcmVuZGVyU3VnZ2VzdGlvbixcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlLFxuICBhcmlhTGFiZWwsXG4gIGxhYmVsLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgZGlhbG9nSGVhZGVyVGV4dCxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQsXG4gIGNsZWFySW5wdXRCdXR0b25UZXh0LFxuICBmb2N1c0lucHV0LFxuICBjb2xvcixcbiAgaG92ZXJDb2xvcixcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcixcbiAgc2VhcmNoT3BlbixcbiAgZm9udFdlaWdodHMsXG4gIHNob3dTY3JvbGwsXG59KSA9PiB7XG4gIGNvbnN0IHN0eWxlcyA9IHNob3dTY3JvbGwgPyBtb2JpbGVTdHlsZXMgOiBtb2JpbGVOb1Njcm9sbFN0eWxlcztcblxuICBjb25zdCBpbnB1dElkID0gYCR7aWR9LWlucHV0YDtcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lkfS1sYWJlbGA7XG5cbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlSGFuZGxlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGUsIHJlZikgPT4ge1xuICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICBzZXREaWFsb2dPcGVuKHRydWUpO1xuICAgIH0gZWxzZSBpZiAoIXJlZi5zdWdnZXN0aW9uLnByb3BlcnRpZXMuYXJyb3dDbGlja2VkKSB7XG4gICAgICAvLyBTZWxlY3QgaXRlbSBpZiBmaWxsIGlucHV0IGJ1dHRvbiBpcyBub3QgcHJlc3NlZCAoZGlhZ29uYWwgYXJyb3cgaW4gc3VnZ2VzdGlvbiBpdGVtcylcbiAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkKGUsIHJlZik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gICAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gICAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGdldFZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gICAgaWYgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckl0ZW0gPSBpdGVtID0+IHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItc2VhcmNoLWhpc3RvcnknXX0+XG4gICAgICAgICAge2l0ZW0ubGFiZWxJZH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyU3VnZ2VzdGlvbihpdGVtKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJEaWFsb2dNb2RhbCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc0RpYWxvZ09wZW59XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgaGVhZGVyVGV4dD17ZGlhbG9nSGVhZGVyVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e2RpYWxvZ1ByaW1hcnlCdXR0b25UZXh0fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXMoKTtcbiAgICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgaG92ZXJDb2xvcj17aG92ZXJDb2xvcn1cbiAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17Y2xlYXJJbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBjbGVhcklucHV0KCl9XG4gICAgICAgIGFyaWEtbGFiZWw9e2NsZWFySW5wdXRCdXR0b25UZXh0fVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNsb3NlKCl9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBvbkNsb3NlKCl9XG4gICAgICAgICAgYXJpYS1sYWJlbD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIGltZz1cImFycm93XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydyaWdodC1jb2x1bW4nXX0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWxhYmVsJ119IGlkPXtsYWJlbElkfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPEF1dG9zdWdnZXN0UGF0Y2hcbiAgICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e2ZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFZhbHVlfVxuICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17cmVuZGVySXRlbX1cbiAgICAgICAgICAgIC8vIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayBtdXN0IGJlIHNldCB0byB0cnVlLlxuICAgICAgICAgICAgLy8gSWYgc2V0IHRvIGZhbHNlLCBpbnB1dCB3b24ndCBiZSBmb2N1c2VkIHdoZW4gdXNlciBjbGlja3Mgb25cbiAgICAgICAgICAgIC8vIEZpbGwgaW5wdXQgYnV0dG9uIGluIHN1Z2dlc3Rpb24gbGlzdC4gKGRpYWdvbmFsIGFycm93IGluIHN0cmVldCBuYW1lIGl0ZW1zKVxuICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7c3R5bGVzW2lkXSB8fCAnJ30gJHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHMudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsPXthcmlhTGFiZWx9IGlkPXtpZH0gey4uLnB9IC8+XG4gICAgICAgICAgICAgICAge3ZhbHVlICYmIGNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17b25TZWxlY3R9XG4gICAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG4gIGlmIChmb2N1c0lucHV0ICYmIGlucHV0UmVmLmN1cnJlbnQ/LmlucHV0KSB7XG4gICAgaW5wdXRSZWYuY3VycmVudC5pbnB1dC5mb2N1cygpO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8UmVhY3RNb2RhbFxuICAgICAgaXNPcGVuPXtzZWFyY2hPcGVufVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbCddfVxuICAgICAgb3ZlcmxheUNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtb3ZlcmxheSddfVxuICAgICAgb25BZnRlckNsb3NlPXtvbkNsb3NlfVxuICAgICAgc2hvdWxkQ2xvc2VPbkVzY1xuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1jb250ZW50J119XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBgJHtjb2xvcn1gLFxuICAgICAgICAgICctLWFjY2Vzc2libGUtcHJpbWFyeS1jb2xvcic6IGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHtob3ZlckNvbG9yfWAsXG4gICAgICAgICAgJy0tZm9udC13ZWlnaHQtbWVkaXVtJzogZm9udFdlaWdodHMubWVkaXVtLFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7cmVuZGVyQ29udGVudCgpfVxuICAgICAgICB7cmVuZGVyRGlhbG9nTW9kYWwoKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvUmVhY3RNb2RhbD5cbiAgKTtcbn07XG5cbk1vYmlsZVNlYXJjaC5wcm9wVHlwZXMgPSB7XG4gIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xvc2VIYW5kbGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGNsZWFySW5wdXQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBjbGVhcklucHV0QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzdWdnZXN0aW9uczogUHJvcFR5cGVzLmFycmF5LmlzUmVxdWlyZWQsXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgZmV0Y2hGdW5jdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICByZW5kZXJTdWdnZXN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgY2xlYXJPbGRTZWFyY2hlczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dIZWFkZXJUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZm9jdXNJbnB1dDogUHJvcFR5cGVzLmJvb2wsXG4gIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHNlYXJjaE9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1vYmlsZVNlYXJjaDtcbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsaT1cIlwiLHU9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTtpKz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PXU/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIraX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LGk9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0sdT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciBpPW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChpKX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksbT1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLGg9bXx8IW8udGFnTmFtZT9udWxsOm87aWYobXx8aCl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgZyxiLHcsRT1pKGQpLE89bT9vOmZ1bmN0aW9uKHQsbixvLGkpe3ZhciB1PTA7aWYodC5vZmZzZXRQYXJlbnQpZG97dSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gdT1NYXRoLm1heCh1LW4tbywwKSxpJiYodT1NYXRoLm1pbih1LHIoKS1lLmlubmVySGVpZ2h0KSksdX0oaCxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2d8fChnPXQpLEkrPXQtZyx3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixiPShiPTA9PT1NPzA6SS9NKT4xPzE6YiksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksdShvLG4sbSkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksZz1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksZz10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLG0sZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz91KG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LG09ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0saD1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsbSwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixoLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixtLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixoLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDI1MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig3MjApLHQpLHIobig2NDYpLHQpLHIobig4NyksdCkscihuKDY0MSksdCkscihuKDkxKSx0KSxyKG4oMTgzKSx0KSxyKG4oMzc2KSx0KSxyKG4oNDUpLHQpLHIobig4NDApLHQpLHIobig1ODYpLHQpLHIobigyMTkpLHQpLHIobig1MTApLHQpLHIobigzMzMpLHQpLHIobigyMyksdCkscihuKDM0OCksdCkscihuKDE5NyksdCl9LDg3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUFycm93TmF2aWdhdGlvbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlQXJyb3dOYXZpZ2F0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0PWUubGlzdEl0ZW1zLG49ZS5vbkFycm93VXBPckRvd24scj0oMCxvLnVzZVN0YXRlKSgwKSxpPXJbMF0sdT1yWzFdLHM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKGUpe3UoZSl9KSxbdF0pLGM9ZnVuY3Rpb24oZSl7dmFyIG89ZS5rZXk7aWYobnVsbD09dD92b2lkIDA6dC5sZW5ndGgpaWYoXCJBcnJvd1VwXCI9PT1vKW4mJm4oKSxlLnByZXZlbnREZWZhdWx0KCkscyhpPjA/aS0xOnQubGVuZ3RoLTEpO2Vsc2V7aWYoXCJBcnJvd0Rvd25cIiE9PW8pcmV0dXJuO24mJm4oKSxlLnByZXZlbnREZWZhdWx0KCksaTx0Lmxlbmd0aC0xP3MoaSsxKTpzKDApfX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIixjKX19KSksKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3MoMCl9KSxbdF0pLHtzZWxlY3RlZEluZGV4Oml9fX0sMzMzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZURlYm91bmNlPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VEZWJvdW5jZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PTMwMCk7dmFyIG49KDAsby51c2VTdGF0ZSkoZSkscj1uWzBdLGk9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIG49c2V0VGltZW91dCgoZnVuY3Rpb24oKXtpKGUpfSksdCk7cmV0dXJuIGZ1bmN0aW9uKCl7Y2xlYXJUaW1lb3V0KG4pfX0pLFtlLHRdKSxyfX0sMjM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRWxlbWVudFNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUVsZW1lbnRTaXplPWZ1bmN0aW9uKCl7dmFyIGUsdCxuPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm5bbix7d2lkdGg6bnVsbD09PShlPW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUuY2xpZW50V2lkdGgsaGVpZ2h0Om51bGw9PT0odD1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNsaWVudEhlaWdodH1dfSx0LmRlZmF1bHQ9dC51c2VFbGVtZW50U2l6ZX0sNjQxOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj1mdW5jdGlvbihlKXt2YXIgdD0oMCxvLnVzZVJlZikobnVsbCksbj0oMCxvLnVzZVN0YXRlKSghMSkscj1uWzBdLGk9blsxXSx1PWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07aSh0LmlzSW50ZXJzZWN0aW5nKX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2lmKHdpbmRvdyYmd2luZG93LkludGVyc2VjdGlvbk9ic2VydmVyKXt2YXIgbj1uZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIodSxlKSxvPXQuY3VycmVudDtyZXR1cm4gdC5jdXJyZW50JiZuLm9ic2VydmUodC5jdXJyZW50KSxmdW5jdGlvbigpe28mJm4udW5vYnNlcnZlKG8pfX1pKCExKX0pLFt0LGVdKSx7Y29udGFpbmVyUmVmOnQsaXNWaXNpYmxlOnJ9fSx0LmRlZmF1bHQ9dC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcn0sOTE6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDI1MyksaT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP2lbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLHU9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLHU+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMTU2KSxyPXtcImNyYXp5LWVnZ1wiOlwiY3JhenllZ2cuY29tXCIseW91dHViZTpcInlvdXR1YmUuY29tXCJ9LGk9e1ByaXZhY3lNYW5hZ2VyQVBJOnthY3Rpb246XCJnZXRDb25zZW50RGVjaXNpb25cIix0aW1lc3RhbXA6KG5ldyBEYXRlKS5nZXRUaW1lKCksc2VsZjpcImhzbC5maVwifX07dC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlU3RhdGUpKCExKSxuPXRbMF0sdT10WzFdLHM9ZnVuY3Rpb24oKXt2YXIgdCxuPW51bGw9PT0odD13aW5kb3cudHJ1c3RlKXx8dm9pZCAwPT09dD92b2lkIDA6dC5jbWE7aWYobil7dmFyIG89bi5jYWxsQXBpKFwiZ2V0Q29uc2VudFwiLFwiaHNsLmZpXCIscltlXSxcImhzbC5maVwiKTt1KFwiYXBwcm92ZWRcIj09PShudWxsPT1vP3ZvaWQgMDpvLmNvbnNlbnQpKX1lbHNlIGNvbnNvbGUuZXJyb3IoXCJUcnVzdEFyYyBhcGkgbm90IGZvdW5kLCByZXR1cm5pbmcgaXNDb29raWVFbmFibGVkIGFzIGZhbHNlXCIpfSxjPWZ1bmN0aW9uKGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZihudWxsPT1lP3ZvaWQgMDplLm9yaWdpbikmJmUub3JpZ2luLmluY2x1ZGVzKFwidHJ1c3RhcmNcIikmJlwic3RyaW5nXCI9PXR5cGVvZihudWxsPT1lP3ZvaWQgMDplLmRhdGEpKXRyeXt2YXIgdD1KU09OLnBhcnNlKG51bGw9PWU/dm9pZCAwOmUuZGF0YSk7XCJzdWJtaXRfcHJlZmVyZW5jZXNcIj09PShudWxsPT10P3ZvaWQgMDp0Lm1lc3NhZ2UpJiZzKCl9Y2F0Y2goZSl7cmV0dXJufX07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3MoKX0pLFtlXSksKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3NldFRpbWVvdXQocywwKSxzZXRUaW1lb3V0KHMsMTAwKSxzZXRUaW1lb3V0KHMsMWUzKX0pLFtdKSwoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy50b3AucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoaSksXCIqXCIpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGMsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGMpfX0pLFtdKSxufX0sMzc2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0saT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHxpKHQpfSksW2UsdF0pLGUmJnJ9fSwzNDg6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oOTEpO3QudXNlSXNNb2JpbGU9ZnVuY3Rpb24oKXtyZXR1cm4hKDAsby51c2VJc0JyZWFrcG9pbnQpKFwidGFibGV0XCIpfSx0LmRlZmF1bHQ9dC51c2VJc01vYmlsZX0sMTgzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3Q9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz9vLnVzZUxheW91dEVmZmVjdDpvLnVzZUVmZmVjdCx0LmRlZmF1bHQ9dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0fSw1ODY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25Mb3NlRm9jdXNXaXRoaW49dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uTG9zZUZvY3VzV2l0aGluPWZ1bmN0aW9uKGUpe3ZhciB0PWUucmVmLG49ZS5jYWxsYmFjayxyPWUud2F0Y2g7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKCl7dmFyIGU7aWYocilyZXR1cm4obnVsbD09PShlPXQuY3VycmVudCl8fHZvaWQgMD09PWU/dm9pZCAwOmUubWF0Y2hlcyhcIjpmb2N1cy13aXRoaW5cIikpP3ZvaWQgMDpuKCl9O3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKSxmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIixlKX19KSxbbix0LHJdKX0sdC5kZWZhdWx0PXQudXNlT25Mb3NlRm9jdXNXaXRoaW59LDE5NzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPblJlc2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25SZXNpemU9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSh3aW5kb3cuaW5uZXJXaWR0aCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQse3Bhc3NpdmU6ITB9KSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQpfX0pLFtdKX0sdC5kZWZhdWx0PXQudXNlT25SZXNpemV9LDUxMDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbldpbmRvd0ZvY3VzPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbldpbmRvd0ZvY3VzPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2UmJlwidmlzaWJsZVwiPT09ZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlJiZlKCl9O3JldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0LCExKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0KX19KSxbZV0pfX0sNzIwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDIxOTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG89bigxNTYpO3QuZGVmYXVsdD1mdW5jdGlvbigpe3ZhciBlPSgwLG8udXNlUmVmKShudWxsKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZS5jdXJyZW50JiYoZS5jdXJyZW50KCksZS5jdXJyZW50PW51bGwpfSkpLGZ1bmN0aW9uKHQpe2UuY3VycmVudD10fX19LDY0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTY3JvbGxMb2NrPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VTY3JvbGxMb2NrPWZ1bmN0aW9uKCl7cmV0dXJue2xvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LnNjcm9sbFkrXCJweFwiLHQ9ZG9jdW1lbnQuYm9keTt0LnN0eWxlLnBvc2l0aW9uPVwiZml4ZWRcIix0LnN0eWxlLnRvcD1cIi1cIitlfSksW10pLHVubG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5ib2R5LHQ9ZS5zdHlsZS50b3Asbj0tMSpwYXJzZUludCh0fHxcIjBcIik7ZS5zdHlsZS5wb3NpdGlvbj1cIlwiLGUuc3R5bGUudG9wPVwiXCIsbiYmd2luZG93LnNjcm9sbFRvKDAsLTEqcGFyc2VJbnQodHx8XCIwXCIpKX0pLFtdKX19fSw4NDA6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19pbXBvcnREZWZhdWx0fHxmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU21vb3RoU2Nyb2xsPXZvaWQgMDt2YXIgcj1uKDE1NiksaT1vKG4oODg4KSk7dC51c2VTbW9vdGhTY3JvbGw9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsci51c2VSZWYpKG51bGwpLG49ZS5yZWYsbz1lLm9mZnNldCx1PXZvaWQgMD09PW8/MDpvLHM9ZS5zcGVlZCxjPXZvaWQgMD09PXM/NTAwOnM7cmV0dXJuKDAsci51c2VFZmZlY3QpKChmdW5jdGlvbigpe3QuY3VycmVudD1uZXcgaS5kZWZhdWx0KG51bGwse3NwZWVkOmMsc3BlZWRBc0R1cmF0aW9uOiEwfSl9KSxbXSksKDAsci51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7biYmdC5jdXJyZW50JiZ0LmN1cnJlbnQuYW5pbWF0ZVNjcm9sbChuLmN1cnJlbnQsbnVsbCx7b2Zmc2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9LHVwZGF0ZVVSTDohMX0pfSksW3Usbl0pfX0sMTU2OmZ1bmN0aW9uKHQpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1lfX0sbj17fTtmdW5jdGlvbiBvKGUpe3ZhciByPW5bZV07aWYodm9pZCAwIT09cilyZXR1cm4gci5leHBvcnRzO3ZhciBpPW5bZV09e2V4cG9ydHM6e319O3JldHVybiB0W2VdLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLG8pLGkuZXhwb3J0c31yZXR1cm4gby5nPWZ1bmN0aW9uKCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGdsb2JhbFRoaXMpcmV0dXJuIGdsb2JhbFRoaXM7dHJ5e3JldHVybiB0aGlzfHxuZXcgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpfWNhdGNoKGUpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvd319KCksbygyNTMpfSgpfSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBpMThuZXh0IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCB7IGV4ZWN1dGVTZWFyY2ggfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlJztcbmltcG9ydCBTdWdnZXN0aW9uSXRlbSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1zdWdnZXN0aW9uLWl0ZW0nO1xuaW1wb3J0IHtcbiAgZ2V0TmFtZUxhYmVsLFxuICBnZXRTdG9wQ29kZSxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IHsgZ2V0U3RvcE5hbWUgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgZ2V0TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbCc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9maSc7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvc3YnO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL2RlJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCB0cmFuc2xhdGlvbnMgZnJvbSAnLi9oZWxwZXJzL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5pbXBvcnQgTW9iaWxlU2VhcmNoIGZyb20gJy4vaGVscGVycy9Nb2JpbGVTZWFyY2gnO1xuaW1wb3J0IHdpdGhTY3JvbGxMb2NrIGZyb20gJy4vaGVscGVycy93aXRoU2Nyb2xsTG9jayc7XG5cbm1vbWVudC5sb2NhbGUoJ2VuJyk7XG5cbmkxOG5leHQuaW5pdCh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICBkZWZhdWx0TlM6ICd0cmFuc2xhdGlvbicsXG4gIGludGVycG9sYXRpb246IHtcbiAgICBlc2NhcGVWYWx1ZTogZmFsc2UsIC8vIG5vdCBuZWVkZWQgZm9yIHJlYWN0IGFzIGl0IGVzY2FwZXMgYnkgZGVmYXVsdFxuICB9LFxufSk7XG5cbmNvbnN0IExvYWRpbmcgPSBwcm9wcyA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3NwaW5uZXItbG9hZGVyJ119PlxuICAgIHsocHJvcHMgJiYgcHJvcHMuY2hpbGRyZW4pIHx8IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119PntpMThuZXh0LnQoJ2xvYWRpbmcnKX08L3NwYW4+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5Mb2FkaW5nLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxufTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSBhZGRlbmR1bSA9PiB7XG4gIGlmICghYWRkZW5kdW0gfHwgIWFkZGVuZHVtLkdURlMucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHsgbW9kZXMsIHBsYXRmb3JtIH0gPSBhZGRlbmR1bS5HVEZTO1xuICBjb25zdCB0eXBlID1cbiAgICBtb2RlcyAmJiBtb2Rlc1swXSA9PT0gJ1JBSUwnID8gaTE4bmV4dC50KCd0cmFjaycpIDogaTE4bmV4dC50KCdwbGF0Zm9ybScpO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1tYXAnKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3VzZS1vd24tcG9zaXRpb24nKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcmVudGFsc3RhdGlvbicpO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2NhcnBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KGxheWVyKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICBpMThuZXh0LnQoJ2Z1dHVyZS1yb3V0ZScpLFxuICAgIGAke2kxOG5leHQudCgnb3JpZ2luJyl9ICR7bmFtZTF9JHt0YWlsMX0gJHtpMThuZXh0LnQoXG4gICAgICAnZGVzdGluYXRpb24nLFxuICAgICl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSkge1xuICBjb25zdCB0aW1lID0gbW9tZW50LnVuaXgoaXRlbS5wcm9wZXJ0aWVzLnRpbWUpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyBpMThuZXh0LnQoJ2Fycml2YWwnKVxuICAgIDogaTE4bmV4dC50KCdkZXBhcnR1cmUnKTtcbiAgaWYgKHRpbWUuaXNTYW1lKG1vbWVudCgpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5pc1NhbWUobW9tZW50KCkuYWRkKDEsICdkYXknKSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9tb3Jyb3ctYXQnKX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLmZvcm1hdCgnZGQgRC5NLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke21vbWVudCh0aW1lKS5mb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cbi8qKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNlYXJjaENvbnRleHQgPSB7XG4gKiAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogZmFsc2UgLy8gdHJ1ZSAvIGZhbHNlIGRvZXMgTGV0IFBlbGlhcyBzdWdnZXN0IGJhc2VkIG9uIGN1cnJlbnQgdXNlciBsb2NhdGlvblxuICogICBtaW5pbWFsUmVnZXhwOiB1bmRlZmluZWQgLy8gdXNlZCBmb3IgdGVzdGluZyBtaW4uIHJlZ2V4cC4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoJy57Mix9JyksXG4gKiAgIGxpbmVSZWdleHA6IHVuZGVmaW5lZCAvLyAgaWRlbnRpZnkgc2VhcmNoZXMgZm9yIHJvdXRlIG51bWJlcnMvbGFiZWxzOiBidXMgfCB0cmFpbiB8IG1ldHJvLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cChcbiAqICAgIC8vICAgJyheWzAtOV0rW2Etel0/JHxeW3l1bGVhcGlua3J0ZHpdJHwoXm1bMTJdP2I/JCkpJyxcbiAqICAgIC8vICAnaScsXG4gKiAgICAvLyAgKSxcbiAqICAgVVJMX1BFTElBUzogJycgLy8gdXJsIGZvciBwZWxpYXMgc2VhcmNoZXNcbiAqICAgZmVlZElEczogWydIU0wnLCAnSFNMTGF1dHRhJ10gLy8gRmVlZElkJ3MgbGlrZSAgW0hTTCwgSFNMTGF1dHRhXVxuICogICBnZW9jb2RpbmdTb3VyY2VzOiBbJ29hJywnb3NtJywnbmxzZmknXSAgLy8gc291cmNlcyBmb3IgZ2VvY29kaW5nXG4gKiAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtczsge30gIC8vIFNlYXJjaHBhcm1hcyBmcm8gZ2VvY29kaW5nXG4gKiAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogKCkgPT4gKHt9KSwgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBsb2NhdGlvbnMuXG4gKiAgIGdldEZhdm91cml0ZVN0b3BzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBzdG9wcy5cbiAqICAgZ2V0TGFuZ3VhZ2U6ICgpID0+ICh7fSksICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgY3VycmVudCBsYW5ndWFnZS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0UG9zaXRpb25zOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdXNlcidzIGdlb2xvY2F0aW9uLlxuICogICBnZXRSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgcm91dGVzLlxuICogICBnZXRBbGxCaWtlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbGwgYmlrZSByZW50YWwgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFJvdXRlcywgQmlrZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogcmV0dXJuIChcbiAqICA8RFRBdXRvc3VnZ2VzdFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBpY29uPVwib3JpZ2luXCIgLy8gT3B0aW9uYWwgU3RyaW5nIGZvciBpY29uIHRoYXQgaXMgc2hvd24gbGVmdCBvZiBzZWFyY2hmaWVsZC4gdXNlZCB3aXRoIEljb24gbGlicmFyeVxuICogICAgaWQ9XCJvcmlnaW5cIiAvLyB1c2VkIGZvciBzdHlsZSBwcm9wcyBhbmQgaW5mbyBmb3IgY29tcG9uZW50LlxuICogICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfSAvLyBTdHJpbmcgdGhhdCBpcyBzaG93bnMgaW5pdGFsbHkgaW4gc2VhcmNoIGZpZWxkXG4gKiAgICB2YWx1ZT1cIlwiIC8vIGUuZy4gdXNlciB0eXBlZCBzdHJpbmcgdGhhdCBpcyBzaG93biBpbiBzZWFyY2ggZmllbGRcbiAqICAgIG9uU2VsZWN0PXtvblNlbGVjdH1cbiAqICAgIG9uQ2xlYXI9e29uQ2xlYXJ9XG4gKiAgICBhdXRvRm9jdXM9e2ZhbHNlfSAvLyBkZWZpbmVzIHRoYXQgc2hvdWxkIHRoaXMgZmllbGQgYmUgYXV0b21hdGljYWxseSBmb2N1c2VkIHdoZW4gcGFnZSBpcyBsb2FkZWQuXG4gKiAgICBsYW5nPXtsYW5nfVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIHRyYW5zcG9ydE1vZGU9e3RyYW5zcG9ydE1vZGV9IC8vIHRyYW5zcG9ydG1vZGUgd2l0aCB3aGljaCB3ZSBmaWx0ZXIgdGhlIHJvdXRlcywgZS5nLiByb3V0ZS1CVVNcbiAqICAgIGdlb2NvZGluZ1NpemU9ezEwfSAvLyBkZWZpbmVzIGhvdyBtYW55IHN0b3BzIGFuZCBzdGF0aW9ucyB0byBmZXRjaCBmcm9tIGdlb2NvZGluZy4gVXNlZnVsIGlmIHlvdSB3YW50IHRvIGZpbHRlciB0aGUgcmVzdWx0cyBhbmQgc3RpbGwgZ2V0IGEgcmVhc29uYWJsZSBhbW91bnQgb2Ygc3VnZ2VzdGlvbnMuXG4gKiAgICBmaWx0ZXJSZXN1bHRzPXtyZXN1bHRzID0+IHJldHVybiByZXN1bHRzfSAvLyBPcHRpb25hbCBmaWx0ZXJpbmcgZnVuY3Rpb24gZm9yIHJvdXRlcyBhbmQgc3RvcHNcbiAqICAgIGhhbmRlbFZpYVBvaW50cz17KCkgPT4gcmV0dXJuIG51bGwgfSAvLyBPcHRpb25hbCBWaWEgcG9pbnQgaGFuZGxpbmcgbG9naWMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIGZvY3VzQ2hhbmdlPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gV2hlbiBzdWdnZXN0aW9uIGlzIHNlbGVjdGVkLCBoYW5kbGUgY2hhbmdpbmcgZm9jdXMuIFRoaXMgaXMgY3VycmVudGx5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHN0b3JlUmVmPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gRnVuY3Rpb25hbGl0eSB0byBzdG9yZSByZWZzLiBDdXJyZW5sdHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgbW9iaWxlTGFiZWw9XCJDdXN0b20gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGlucHV0Q2xhc3NOYW1lPVwiXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBjbGFzc25hbWUgYXBwbGllZCB0byB0aGUgaW5wdXQgZWxlbWVudCBvZiB0aGUgY29tcG9uZW50IGZvciBwcm92aWRpbmcgQ1NTIHN0eWxlcy5cbiAqICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcj0gLy8gT3B0aW9uYWwuIEN1c3RvbiB0cmFuc2xhdGVkIHBsYWNlaG9sZGVyIHRleHQgZm9yIGF1dG9zdWdnZXN0IGZpZWxkLlxuICovXG5jbGFzcyBEVEF1dG9zdWdnZXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZhbHVlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5hbnkuaXNSZXF1aXJlZCxcbiAgICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLFxuICAgIHRyYW5zcG9ydE1vZGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZ2VvY29kaW5nU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBvbkNsZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzdG9yZVJlZjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmb2N1c0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbGFuZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHRpbWVab25lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHBhdGhPcHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgcm91dGVzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgc3RvcHNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgfSksXG4gICAgbW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgbG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB1bmxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcmVmUG9pbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgICAgbGF0OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgICAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIGlucHV0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIG1vZGVJY29uQ29sb3JzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaWNvbjogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiAnJyxcbiAgICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gICAgbGFuZzogJ2ZpJyxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogJyMwMDc0YmUnLFxuICAgIHRpbWVab25lOiAnRXVyb3BlL0hlbHNpbmtpJyxcbiAgICBwYXRoT3B0czoge1xuICAgICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gICAgfSxcbiAgICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICAgIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBtb2RlSWNvbkNvbG9yczoge1xuICAgICAgJ21vZGUtYnVzJzogJyMwMDdhYzknLFxuICAgICAgJ21vZGUtcmFpbCc6ICcjOGM0Nzk5JyxcbiAgICAgICdtb2RlLXRyYW0nOiAnIzAwODE1MScsXG4gICAgICAnbW9kZS1tZXRybyc6ICcjZWQ4YzAwJyxcbiAgICAgICdtb2RlLWZlcnJ5JzogJyMwMDdBOTcnLFxuICAgICAgJ21vZGUtY2l0eWJpa2UnOiAnI2YyYjYyZCcsXG4gICAgICAnbW9kZS1mdW5pY3VsYXInOiAnI2ZmMDBmZicsXG4gICAgfSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIHJlZlBvaW50OiB7fSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBtb21lbnQudHouc2V0RGVmYXVsdChwcm9wcy50aW1lWm9uZSk7XG4gICAgbW9tZW50LmxvY2FsZShwcm9wcy5sYW5nKTtcblxuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHNvdXJjZXM6IHByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgdHlwaW5nVGltZXI6IG51bGwsXG4gICAgICB0eXBpbmc6IGZhbHNlLFxuICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25JbmRleDogMCxcbiAgICAgIGNsZWFuRXhlY3V0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsWTogMCxcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgIGkxOG5leHQuYWRkUmVzb3VyY2VCdW5kbGUobGFuZywgJ3RyYW5zbGF0aW9uJywgdHJhbnNsYXRpb25zW2xhbmddKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERULTQwNzQ6IFdoZW4gYSB1c2VyJ3MgbG9jYXRpb24gaXMgdXBkYXRlZCBEVEF1dG9zdWdnZXN0IHdvdWxkIHJlLXJlbmRlciBjYXVzaW5nIHN1Z2dlc3Rpb24gbGlzdCB0byByZXNldC5cbiAgLy8gVGhpcyB3aWxsIHByZXZlbnQgaXQuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAhaXNFcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8ICFpc0VxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUgPSAoKSA9PiB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2FtZWxjYXNlXG4gIFVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzID0gbmV4dFByb3BzID0+IHtcbiAgICAvLyB3YWl0IHVudGlsIGFkZHJlc3MgaXMgc2V0IG9yIGdlb2xvY2F0aW9uaW5nIGZhaWxzXG4gICAgaWYgKG5leHRQcm9wcy52YWx1ZSAhPT0gdGhpcy5zdGF0ZS52YWx1ZSAmJiAhdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IG5leHRQcm9wcy52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBvbkNoYW5nZSA9IChldmVudCwgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLmZJbnB1dCB8fCBuZXdWYWx1ZSB8fCAnJyxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIFJlbW92ZSBmaWxsZWQgaW5wdXQgdmFsdWUgc28gaXQgd29udCBiZSByZXVzZWQgdW5uZWNlc3NhcnlcbiAgICB0aGlzLmZJbnB1dCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlIHx8ICcnIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCAhPT0gJ2VudGVyJyB8fCB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyB0ZXN0IGFib3ZlIGRyb3BzIHVubmVjZXNzYXJ5IHVwZGF0ZVxuICAgICAgLy8gd2hlbiB1c2VyIGhpdHMgZW50ZXIgYnV0IHNlYXJjaCBpcyB1bmZpbmlzaGVkXG4gICAgICBpZiAodGhpcy5zdGF0ZS50eXBpbmdUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS50eXBpbmdUaW1lcik7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSAndHlwZScpIHtcbiAgICAgICAgLy8gYWZ0ZXIgdGltZW91dCBydW5zLCBhcmlhIGFsZXJ0IHdpbGwgYW5ub3VuY2UgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHlwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZ1RpbWVyID0gdGltZXI7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgfSk7XG4gIH07XG5cbiAgb25TZWxlY3RlZCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IFsnRmF2b3VyaXRlJywgJ0JhY2snXSxcbiAgICAgICAgICAgIG93blBsYWNlczogdHJ1ZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICB2YWx1ZTogJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaycgfHxcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHJlZi5zdWdnZXN0aW9uLnR5cGUsXG4gICAgICAgICAgICBzdWdnZXN0aW9uSW5kZXg6IHJlZi5zdWdnZXN0aW9uSW5kZXgsXG4gICAgICAgICAgfSxcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gdHJ1ZTsgLy8gc2VsZWN0aW9uIGRvbmUsIGRvIG5vdCBsZXQgdXBjb21pbmcga2V5Ym9hcmQgZXZlbnRzIGNvbmZ1c2UgdGhlIGZsb3dcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogcmVmLnN1Z2dlc3Rpb25WYWx1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMocmVmLnN1Z2dlc3Rpb24sIHJlZi5zdWdnZXN0aW9uSW5kZXgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KHJlZi5zdWdnZXN0aW9uLCB0aGlzLnByb3BzLmlkKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlICYmXG4gICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHByZXZTdGF0ZSA9PiAoe1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IHByZXZTdGF0ZS52YWx1ZSxcbiAgICAgICAgfSksXG4gICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksIC8vIHNlYXJjaCBtYXkgZmluaXNoIGR1cmluZyBzdGF0ZSBjaGFuZ2VcbiAgICAgICk7XG4gICAgfVxuICB9O1xuXG4gIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCA9ICgpID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICB9KTtcbiAgfTtcblxuICBnZXRTdWdnZXN0aW9uVmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgICBpZiAoXG4gICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICApIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldExhYmVsKHN1Z2dlc3Rpb24ucHJvcGVydGllcyk7XG4gIH07XG5cbiAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uID0gKCkgPT4ge1xuICAgIGlmIChcbiAgICAgICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsaWRcbiAgICApIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgIHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgLy8gYWNjZXB0IGFmdGVyIGFsbCBvbmdvaW5nIHNlYXJjaGVzIGhhdmUgZmluaXNoZWRcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiAmJiB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyBmaW5pc2ggdGhlIHNlbGVjdGlvbiBieSBwaWNraW5nIGZpcnN0ID0gYmVzdCBtYXRjaCBvciB3aXRoICdGdXR1cmVSb3V0ZScgYnkgc3VnZ2VzdGlvbkluZGV4XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgICB0aGlzLnByb3BzLm9uU2VsZWN0KFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zW3RoaXMuc3RhdGUuc3VnZ2VzdGlvbkluZGV4XSxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgZmV0Y2hGdW5jdGlvbiA9ICh7IHZhbHVlLCBjbGVhbkV4ZWN1dGVkIH0pID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZShcbiAgICAgIHsgdmFsaWQ6IGZhbHNlLCBjbGVhbkV4ZWN1dGVkOiAhY2xlYW5FeGVjdXRlZCA/IGZhbHNlIDogY2xlYW5FeGVjdXRlZCB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICAgICAgLy8gZG8gbm90IGxldCBjb21wb25lbnQgY2FzdCB1bm5lY2Vzc2FyeSByZXF1ZXN0c1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpc0xvY2F0aW9uU2VhcmNoID1cbiAgICAgICAgICBpc0VtcHR5KHRoaXMucHJvcHMudGFyZ2V0cykgfHxcbiAgICAgICAgICB0aGlzLnByb3BzLnRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpO1xuICAgICAgICBsZXQgdGFyZ2V0cztcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUub3duUGxhY2VzKSB7XG4gICAgICAgICAgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJ107XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJylcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRhcmdldHMuaW5jbHVkZXMoJ0Jpa2VSZW50YWxTdGF0aW9ucycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ0Jpa2VSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICghaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpKSB7XG4gICAgICAgICAgdGFyZ2V0cyA9IFsuLi50aGlzLnByb3BzLnRhcmdldHNdO1xuICAgICAgICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJlxuICAgICAgICAgICAgKGlzRW1wdHkodGhpcy5wcm9wcy5zb3VyY2VzKSB8fFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLnNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICAgICAgY29uc3Qgc291cmNlcyA9XG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAgICAgcyA9PT0gJ0Zhdm91cml0ZScgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5zdGF0ZS5vd25QbGFjZXMgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgICAgICB0YXJnZXRzLFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlLFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dCxcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlclJlc3VsdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5nZW9jb2RpbmdTaXplLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlucHV0OiB2YWx1ZSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gWFhYIHRyYW5zbGF0ZXMgY3VycmVudCBsb2NhdGlvblxuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSAoc2VhcmNoUmVzdWx0LnJlc3VsdHMgfHwgW10pXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlICE9PSAnRnV0dXJlUm91dGUnIHx8XG4gICAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID4gbW9tZW50KCkudW5peCgpKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAubWFwKHN1Z2dlc3Rpb24gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnYmFjaydcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHRyYW5zbGF0ZWQgPSB7IC4uLnN1Z2dlc3Rpb24gfTtcbiAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZWQucHJvcGVydGllcy5sYWJlbElkID0gaTE4bmV4dC50KFxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMubGFiZWxJZCxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdHJhbnNsYXRlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1Z2dlc3Rpb247XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdGhpcy5zdGF0ZS52YWx1ZSB8fFxuICAgICAgICAgICAgICB2YWx1ZSA9PT0gdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ2JhY2snIHx8XG4gICAgICAgICAgICAgIHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICgpID0+IHRoaXMuY2hlY2tQZW5kaW5nU2VsZWN0aW9uKCksXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnByb3BzLnBhdGhPcHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMucmVmUG9pbnQsXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICk7XG4gIH07XG5cbiAgY2xlYXJJbnB1dCA9ICgpID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogJycsXG4gICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnLCBjbGVhbkV4ZWN1dGVkOiB0cnVlIH0pLFxuICAgICk7XG4gICAgaWYgKHRoaXMucHJvcHMub25DbGVhcikge1xuICAgICAgdGhpcy5wcm9wcy5vbkNsZWFyKHRoaXMucHJvcHMuaWQpO1xuICAgIH1cbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgaW5wdXRDbGlja2VkID0gaW5wdXRWYWx1ZSA9PiB7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIHRoaXMuY2xlYXJMb2NhdGlvblRleHQoKTtcbiAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgdGhpcy5wcm9wcy5sb2NrKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgLy8gcmVzZXQgYXQgc3RhcnQsIGp1c3QgaW4gY2FzZSB3ZSBtaXNzZWQgc29tZXRoaW5nXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICAgIH07XG5cbiAgICAgIC8vIERULTMyNjM6IGFkZGVkIHN0YXRlS2V5RG93blxuICAgICAgY29uc3Qgc3RhdGVLZXlEb3duID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICB2YWx1ZTogaW5wdXRWYWx1ZSxcbiAgICAgIH07XG5cbiAgICAgIGlmICghdGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgLy8gRFQtMzI2MzogYWRkZWQgaWYtZWxzZSBzdGF0ZW1lbnRcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dFZhbHVlID09PSAnb2JqZWN0JyB8fCAhaW5wdXRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoc3RhdGVLZXlEb3duLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IGlucHV0VmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiAhdGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyByZW5kZXJNb2JpbGVTZWFyY2g6IHRydWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIHN0b3JlSW5wdXRSZWZlcmVuY2UgPSBhdXRvc3VnZ2VzdCA9PiB7XG4gICAgaWYgKGF1dG9zdWdnZXN0ICE9PSBudWxsKSB7XG4gICAgICB0aGlzLmlucHV0ID0gYXV0b3N1Z2dlc3QuaW5wdXQ7XG4gICAgICBpZiAodGhpcy5wcm9wcy5zdG9yZVJlZikge1xuICAgICAgICB0aGlzLnByb3BzLnN0b3JlUmVmKGF1dG9zdWdnZXN0LmlucHV0KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLy8gRmlsbCBpbnB1dCB3aGVuIHVzZXIgY2xpY2tzIGZpbGwgaW5wdXQgYnV0dG9uIGluIHN0cmVldCBzdWdnZXN0aW9uIGl0ZW1cbiAgZmlsbElucHV0ID0gbmV3VmFsdWUgPT4ge1xuICAgIHRoaXMuZklucHV0ID0gbmV3VmFsdWUucHJvcGVydGllcy5uYW1lO1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWUsXG4gICAgICBjaGVja1BlbmRpbmdTZWxlY3Rpb246IG5ld1ZhbHVlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWUgfSk7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIHJlbmRlckl0ZW0gPSBpdGVtID0+IHtcbiAgICBjb25zdCBuZXdJdGVtID1cbiAgICAgIGl0ZW0udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJ1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICB0cmFuc2xhdGVkVGV4dDogdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtKSxcbiAgICAgICAgICB9XG4gICAgICAgIDogaXRlbTtcbiAgICBjb25zdCBjb250ZW50ID0gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxTdWdnZXN0aW9uSXRlbVxuICAgICAgICBpdGVtPXtuZXdJdGVtfVxuICAgICAgICBjb250ZW50PXtjb250ZW50fVxuICAgICAgICBsb2FkaW5nPXshdGhpcy5zdGF0ZS52YWxpZH1cbiAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgIGFyaWFGYXZvdXJpdGVTdHJpbmc9e2kxOG5leHQudCgnZmF2b3VyaXRlJyl9XG4gICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yPXt0aGlzLnByb3BzLmFjY2Vzc2libGVQcmltYXJ5Q29sb3J9XG4gICAgICAgIGZpbGxJbnB1dD17dGhpcy5maWxsSW5wdXR9XG4gICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgIG1vZGVJY29uQ29sb3JzPXt0aGlzLnByb3BzLm1vZGVJY29uQ29sb3JzfVxuICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY2xvc2VNb2JpbGVTZWFyY2ggPSAoKSA9PiB7XG4gICAgdGhpcy5wcm9wcy51bmxvY2soKTtcbiAgICB0aGlzLnNldFN0YXRlKFxuICAgICAge1xuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB0aGlzLnN0YXRlLnNjcm9sbFkpO1xuICAgICAgICB0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCgpO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5O1xuICAgIGlmIChrZXlDb2RlID09PSAnRXNjYXBlJykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IGZhbHNlIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gJ0VudGVyJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGVuZGluZ1NlbGVjdGlvbjogdHJ1ZSB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dENsaWNrZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoa2V5Q29kZSA9PT0gJ0VudGVyJyB8fCBrZXlDb2RlID09PSAnQXJyb3dEb3duJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsdWUgPT09ICcnXG4gICAgKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgIH07XG4gICAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCA9ICgpID0+IHtcbiAgICBsZXQgbGFiZWwgPSBbXTtcbiAgICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdO1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24pIHtcbiAgICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgICAgbGFiZWwucHVzaChpMThuZXh0LnQoJ2Zhdm91cml0ZScpKTtcbiAgICAgIH1cbiAgICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KGdldFN1Z2dlc3Rpb25Db250ZW50KHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG4gIH07XG5cbiAgY2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBjb250ZXh0LFxuICAgICAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgICAgIGNsZWFyRnV0dXJlUm91dGVzLFxuICAgIH0gPSB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQ7XG4gICAgaWYgKGNvbnRleHQgJiYgY2xlYXJPbGRTZWFyY2hlcykge1xuICAgICAgY2xlYXJPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGlmIChjbGVhckZ1dHVyZVJvdXRlcykge1xuICAgICAgICBjbGVhckZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCA9ICgpID0+XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnZGVzdGluYXRpb24nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ3ZpYS1wb2ludCcgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luLXN0b3AtbmVhci15b3UnO1xuXG4gIGNsZWFyTG9jYXRpb25UZXh0ID0gKCkgPT4ge1xuICAgIGNvbnN0IHBvc2l0aW9ucyA9IFtcbiAgICAgICdWYWxpdHR1IHNpamFpbnRpJyxcbiAgICAgICdOeWt5aW5lbiBzaWphaW50aXNpJyxcbiAgICAgICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICAgICdTZWxlY3RlZCBsb2NhdGlvbicsXG4gICAgICAnVmFsZCBwb3NpdGlvbicsXG4gICAgICAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICAgJ01pbiBwb3NpdGlvbicsXG4gICAgICAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAgICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnWW91ciBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICBdO1xuICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXModGhpcy5zdGF0ZS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgIH1cbiAgfTtcblxuICBvbkZvY3VzID0gKCkgPT4ge1xuICAgIHRoaXMuY2xlYXJMb2NhdGlvblRleHQoKTtcblxuICAgIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoeyBzY3JvbGxZIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICAgIGNvbnN0IHtcbiAgICAgIHZhbHVlLFxuICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2gsXG4gICAgICBjbGVhbkV4ZWN1dGVkLFxuICAgIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgPyB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLnBsYWNlaG9sZGVyKSxcbiAgICAgIHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke1xuICAgICAgICAgIHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJ1xuICAgICAgICB9ICR7c3R5bGVzW3RoaXMucHJvcHMuaWRdIHx8ICcnfSAke1xuICAgICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICB9ICR7dGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZX1gLFxuICAgICAgKSxcbiAgICAgIG9uS2V5RG93bjogdGhpcy5rZXlEb3duLCAvLyBEVC0zMjYzXG4gICAgICByZXF1aXJlZDogdGhpcy5wcm9wcy5yZXF1aXJlZCxcbiAgICB9O1xuICAgIGNvbnN0IGFyaWFCYXJJZCA9IHRoaXMucHJvcHMuaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICAgIGxldCBTZWFyY2hCYXJJZCA9IHRoaXMucHJvcHMuYXJpYUxhYmVsIHx8IGkxOG5leHQudChhcmlhQmFySWQpO1xuICAgIFNlYXJjaEJhcklkID0gU2VhcmNoQmFySWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICAgIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSB0aGlzLnByb3BzLnJlcXVpcmVkXG4gICAgICA/IGAke2kxOG5leHQudCgncmVxdWlyZWQnKX0uYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnKVxuICAgICAgOiBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJyk7XG4gICAgY29uc3QgYXJpYVN1Z2dlc3Rpb25MZW4gPSBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nLCB7XG4gICAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKSB8fCB0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpMThuZXh0LnQoJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nLCB7XG4gICAgICAgICAgc2VsZWN0aW9uOiB0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkgfHwgdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgIHshdGhpcy5zdGF0ZS50eXBpbmcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZWRpdGluZyAmJlxuICAgICAgICAgICAgYCR7YXJpYVN1Z2dlc3Rpb25MZW59ICR7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKCl9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5wcm9wcy5pc01vYmlsZSAmJiAoXG4gICAgICAgICAgPE1vYmlsZVNlYXJjaFxuICAgICAgICAgICAgc2VhcmNoT3Blbj17cmVuZGVyTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcz17dGhpcy5jbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICBjbGVhcklucHV0PXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtbXG4gICAgICAgICAgICAgIC4uLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICBsYWJlbElkOiBpMThuZXh0LnQoJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5pc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCgpXG4gICAgICAgICAgICAgICAgPyBpMThuZXh0LnQoJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnKVxuICAgICAgICAgICAgICAgIDogaW5wdXRQcm9wcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBmZXRjaEZ1bmN0aW9uPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9e3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkfVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXt0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgIGNsb3NlSGFuZGxlPXt0aGlzLmNsb3NlTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChhcmlhQ3VycmVudFN1Z2dlc3Rpb24oKSl9XG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgIGRpYWxvZ0hlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInKX1cbiAgICAgICAgICAgIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjYW5jZWwnKX1cbiAgICAgICAgICAgIGNsZWFySW5wdXRCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgICAgICAgZm9jdXNJbnB1dD17Y2xlYW5FeGVjdXRlZH1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFyZW5kZXJNb2JpbGVTZWFyY2ggJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke3RoaXMucHJvcHMuaG92ZXJDb2xvcn1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICAgICAgc3R5bGVzW2BhdXRvc3VnZ2VzdC1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gLFxuICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gaW1nPXtgJHt0aGlzLnByb3BzLmljb259YH0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPEF1dG9zdWdnZXN0XG4gICAgICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zPXt0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9e3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkfVxuICAgICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e3RoaXMuZ2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbj17IXRoaXMuc3RhdGUub3duUGxhY2VzfVxuICAgICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSBodG1sRm9yPXt0aGlzLnByb3BzLmlkfT5cbiAgICAgICAgICAgICAgICAgICAge2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5pbnB1dENsaWNrZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5rZXlEb3dufVxuICAgICAgICAgICAgICAgICAgICB7Li4ucH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS52YWx1ZSAmJiB0aGlzLmNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy5zdG9yZUlucHV0UmVmZXJlbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2sgPSB3aXRoU2Nyb2xsTG9jayhEVEF1dG9zdWdnZXN0KTtcblxuZXhwb3J0IGRlZmF1bHQgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrO1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3QgdGhhdCBjb250YWlucyBcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKiBAZXhhbXBsZVxuICogY29uc3QgcHJvcGVydGllczoge1xuICAgIFwiaWRcIjogXCJHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwiZ2lkXCI6IFwiZ3Rmc21hdGthOnN0YXRpb246R1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcImxheWVyXCI6IFwic3RhdGlvblwiLFxuICAgIFwic291cmNlXCI6IFwiZ3Rmc21hdGthXCIsXG4gICAgXCJzb3VyY2VfaWRcIjogXCJHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwibmFtZVwiOiBcIlJhdXRhdGllbnRvcmlcIixcbiAgICBcInBvc3RhbGNvZGVcIjogXCIwMDEwMFwiLFxuICAgIFwicG9zdGFsY29kZV9naWRcIjogXCJ3aG9zb25maXJzdDpwb3N0YWxjb2RlOjQyMTQ3OTU2OVwiLFxuICAgIFwiY29uZmlkZW5jZVwiOiAxLFxuICAgIFwiYWNjdXJhY3lcIjogXCJjZW50cm9pZFwiLFxuICAgIFwiY291bnRyeVwiOiBcIlN1b21pXCIsXG4gICAgXCJjb3VudHJ5X2dpZFwiOiBcIndob3NvbmZpcnN0OmNvdW50cnk6MFwiLFxuICAgIFwiY291bnRyeV9hXCI6IFwiRklOXCIsXG4gICAgXCJyZWdpb25cIjogXCJVdXNpbWFhXCIsXG4gICAgXCJyZWdpb25fZ2lkXCI6IFwid2hvc29uZmlyc3Q6cmVnaW9uOjg1NjgzMDY3XCIsXG4gICAgXCJsb2NhbGFkbWluXCI6IFwiSGVsc2lua2lcIixcbiAgICBcImxvY2FsYWRtaW5fZ2lkXCI6IFwid2hvc29uZmlyc3Q6bG9jYWxhZG1pbjo5MDcxOTk3MTVcIixcbiAgICBcImxvY2FsaXR5XCI6IFwiSGVsc2lua2lcIixcbiAgICBcImxvY2FsaXR5X2dpZFwiOiBcIndob3NvbmZpcnN0OmxvY2FsaXR5OjEwMTc0ODQxN1wiLFxuICAgIFwibmVpZ2hib3VyaG9vZFwiOiBcIktsdXV2aVwiLFxuICAgIFwibmVpZ2hib3VyaG9vZF9naWRcIjogXCJ3aG9zb25maXJzdDpuZWlnaGJvdXJob29kOjg1ODk4ODQ3XCIsXG4gICAgXCJsYWJlbFwiOiBcIlJhdXRhdGllbnRvcmksIGtvaWxsaW5lbiwgS2x1dXZpLCBIZWxzaW5raVwiXG4gICAgfVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0TGFiZWwocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYWJlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0TmFtZUxhYmVsKHByb3BlcnRpZXMsIHRydWUpO1xuICBzd2l0Y2ggKHByb3BlcnRpZXMubGF5ZXIpIHtcbiAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgY2FzZSAnYmFjayc6XG4gICAgICByZXR1cm4gcGFydHNbMV0gfHwgcGFydHNbMF07XG4gICAgY2FzZSAnZmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb24nOlxuICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgIHJldHVybiBwYXJ0c1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgJiYgcGFydHNbMV0gIT09ICcnXG4gICAgICAgID8gcGFydHMuam9pbignLCAnKVxuICAgICAgICA6IHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuXG5jb25zdCB3aXRoU2Nyb2xsTG9jayA9IENvbXBvbmVudCA9PiB7XG4gIHJldHVybiBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBsb2NrLCB1bmxvY2sgfSA9IGhvb2tzLnVzZVNjcm9sbExvY2soKTtcblxuICAgIHJldHVybiA8Q29tcG9uZW50IGxvY2s9e2xvY2t9IHVubG9jaz17dW5sb2NrfSB7Li4ucHJvcHN9IC8+O1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNjcm9sbExvY2s7XG4iXSwibmFtZXMiOlsiX2V4dGVuZHMiLCJPYmplY3QiLCJhc3NpZ24iLCJiaW5kIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFwcGx5IiwidGhpcyIsInRydUVxIiwidmFsMSIsInZhbDIiLCJpc0R1cGxpY2F0ZSIsIml0ZW0xIiwiaXRlbTIiLCJwcm9wczEiLCJwcm9wZXJ0aWVzIiwicHJvcHMyIiwidHlwZSIsIm8xIiwib3JpZ2luIiwiZDEiLCJkZXN0aW5hdGlvbiIsIm8yIiwiZDIiLCJuYW1lIiwibG9jYWxpdHkiLCJsYXllciIsImxhYmVsSWQiLCJndGZzSWQiLCJnaWQiLCJpbmNsdWRlcyIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInVuZGVmaW5lZCIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJMYXllclR5cGUiLCJBZGRyZXNzIiwiQmFjayIsIkN1cnJlbnRQb3NpdGlvbiIsIkZhdm91cml0ZVN0b3AiLCJGYXZvdXJpdGVTdGF0aW9uIiwiRmF2b3VyaXRlUGxhY2UiLCJGYXZvdXJpdGVSb3V0ZSIsIkZ1dHVyZVJvdXRlIiwiU3RhdGlvbiIsIlNlbGVjdEZyb21NYXAiLCJTZWxlY3RGcm9tT3duTG9jYXRpb25zIiwiU3RvcCIsIlN0cmVldCIsIlZlbnVlIiwiQmlrZVJlbnRhbFN0YXRpb24iLCJDYXJQYXJrIiwiQmlrZVBhcmsiLCJpc1N0b3AiLCJnZXRMYXllclJhbmsiLCJGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbiIsImluZGV4T2YiLCJzb3J0U2VhcmNoUmVzdWx0cyIsImxpbmVSZWdleHAiLCJyZXN1bHRzIiwidGVybSIsIkFycmF5IiwiaXNBcnJheSIsImlzTGluZUlkZW50aWZpZXIiLCJ2YWx1ZSIsInRlc3QiLCJub3JtYWxpemVkVGVybSIsImlzTGluZVNlYXJjaCIsIm9yZGVyZWRSZXN1bHRzIiwib3JkZXJCeSIsInJlc3VsdCIsInNob3J0TmFtZSIsImNvbmZpZGVuY2UiLCJtYXRjaCIsInJlc3VsdFByb3BlcnRpZXMiLCJtYXAiLCJmaWx0ZXIiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImdldExvY2FsaXR5Iiwic3VnZ2VzdGlvbiIsImxvY2FsYWRtaW4iLCJnZXRTdG9wQ29kZSIsImlkIiwiY29kZSIsImdldE5hbWVMYWJlbCIsIm1lbW9pemUiLCJwbGFpbiIsInNwbGl0IiwicmVwbGFjZSIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsIm1vZGUiLCJsb25nTmFtZSIsImFnZW5jeSIsImZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwiLCJpdGVtIiwiY2xvbmVEZWVwIiwidW5pcUJ5TGFiZWwiLCJmZWF0dXJlcyIsImZlYXQxIiwiZmVhdDIiLCJib29sIiwiaXNFcXVhbCIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsInBhcnRzIiwiZm9yRWFjaCIsInBOYW1lIiwiZ2V0Iiwic3BsaWNlIiwiam9pbiIsImNvbmNhdCIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJERUZBVUxUX1BFTElBU19VUkwiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwibGF5ZXJzIiwidG9TdHJpbmciLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwic3RvcE9yU3RhdGlvbiIsImlkcyIsInNsaWNlIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZ2V0T2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwibG9jYXRpb25zIiwicHJldlNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiY29udGV4dCIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsImxvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJwb3NpdGlvbiIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsInN0YXR1cyIsInB1c2giLCJnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5Iiwic2VsZWN0UG9zaXRpb25Gb21NYXAiLCJpdGVtcyIsImZhdm91cml0ZUxvY2F0aW9ucyIsImZhdm91cml0ZVN0b3BzIiwiaGFzRmF2b3VyaXRlcyIsInNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJmYXZvdXJpdGVzIiwiZmVlZGlzIiwiZ2Vvc291cmNlcyIsImxvY2F0aW9uSGlzdG9yeSIsInNpemUiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsImRlZHVwZXN0b3BzIiwic3RvcEhpc3RvcnkiLCJmYXZvdXJpdGVSb3V0ZXMiLCJyb3V0ZUhpc3RvcnkiLCJmYXZvdXJpdGVCaWtlU3RhdGlvbnMiLCJhbGwiLCJmbGF0dGVuIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsImxlYWRpbmciLCJtb2R1bGUiLCJob29rQ2FsbGJhY2siLCJzb21lIiwiaG9va3MiLCJzZXRIb29rQ2FsbGJhY2siLCJpc09iamVjdCIsImhhc093blByb3AiLCJhIiwiYiIsImlzT2JqZWN0RW1wdHkiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwiaXNVbmRlZmluZWQiLCJpc051bWJlciIsImlzRGF0ZSIsIkRhdGUiLCJhcnIiLCJmbiIsImFyckxlbiIsImV4dGVuZCIsInZhbHVlT2YiLCJjcmVhdGVVVEMiLCJmb3JtYXQiLCJsb2NhbGUiLCJzdHJpY3QiLCJjcmVhdGVMb2NhbE9yVVRDIiwidXRjIiwiZGVmYXVsdFBhcnNpbmdGbGFncyIsImVtcHR5IiwidW51c2VkVG9rZW5zIiwidW51c2VkSW5wdXQiLCJvdmVyZmxvdyIsImNoYXJzTGVmdE92ZXIiLCJudWxsSW5wdXQiLCJpbnZhbGlkRXJhIiwiaW52YWxpZE1vbnRoIiwiaW52YWxpZEZvcm1hdCIsInVzZXJJbnZhbGlkYXRlZCIsImlzbyIsInBhcnNlZERhdGVQYXJ0cyIsImVyYSIsIm1lcmlkaWVtIiwicmZjMjgyMiIsIndlZWtkYXlNaXNtYXRjaCIsImdldFBhcnNpbmdGbGFncyIsIm0iLCJfcGYiLCJpc1ZhbGlkIiwiX2lzVmFsaWQiLCJmbGFncyIsInBhcnNlZFBhcnRzIiwiaXNOb3dWYWxpZCIsImlzTmFOIiwiX2QiLCJnZXRUaW1lIiwiaW52YWxpZFdlZWtkYXkiLCJfc3RyaWN0IiwiYmlnSG91ciIsImlzRnJvemVuIiwiY3JlYXRlSW52YWxpZCIsIk5hTiIsImZ1biIsInQiLCJsZW4iLCJtb21lbnRQcm9wZXJ0aWVzIiwidXBkYXRlSW5Qcm9ncmVzcyIsImNvcHlDb25maWciLCJ0byIsImZyb20iLCJwcm9wIiwidmFsIiwibW9tZW50UHJvcGVydGllc0xlbiIsIl9pc0FNb21lbnRPYmplY3QiLCJfaSIsIl9mIiwiX2wiLCJfdHptIiwiX2lzVVRDIiwiX29mZnNldCIsIl9sb2NhbGUiLCJNb21lbnQiLCJjb25maWciLCJ1cGRhdGVPZmZzZXQiLCJpc01vbWVudCIsIndhcm4iLCJtc2ciLCJzdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MiLCJjb25zb2xlIiwiZGVwcmVjYXRlIiwiZmlyc3RUaW1lIiwiZGVwcmVjYXRpb25IYW5kbGVyIiwiYXJnIiwiYXJncyIsImFyZ0xlbiIsIkVycm9yIiwic3RhY2siLCJkZXByZWNhdGlvbnMiLCJkZXByZWNhdGVTaW1wbGUiLCJpc0Z1bmN0aW9uIiwiRnVuY3Rpb24iLCJzZXQiLCJfY29uZmlnIiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50IiwiX2RheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbFBhcnNlIiwibWVyZ2VDb25maWdzIiwicGFyZW50Q29uZmlnIiwiY2hpbGRDb25maWciLCJMb2NhbGUiLCJkZWZhdWx0Q2FsZW5kYXIiLCJzYW1lRGF5IiwibmV4dERheSIsIm5leHRXZWVrIiwibGFzdERheSIsImxhc3RXZWVrIiwic2FtZUVsc2UiLCJjYWxlbmRhciIsIm1vbSIsIm5vdyIsIm91dHB1dCIsIl9jYWxlbmRhciIsInplcm9GaWxsIiwibnVtYmVyIiwidGFyZ2V0TGVuZ3RoIiwiZm9yY2VTaWduIiwiYWJzTnVtYmVyIiwiemVyb3NUb0ZpbGwiLCJwb3ciLCJtYXgiLCJzdWJzdHIiLCJmb3JtYXR0aW5nVG9rZW5zIiwibG9jYWxGb3JtYXR0aW5nVG9rZW5zIiwiZm9ybWF0RnVuY3Rpb25zIiwiZm9ybWF0VG9rZW5GdW5jdGlvbnMiLCJhZGRGb3JtYXRUb2tlbiIsInRva2VuIiwicGFkZGVkIiwib3JkaW5hbCIsImZ1bmMiLCJsb2NhbGVEYXRhIiwicmVtb3ZlRm9ybWF0dGluZ1Rva2VucyIsIm1ha2VGb3JtYXRGdW5jdGlvbiIsImFycmF5IiwiZm9ybWF0TW9tZW50IiwiZXhwYW5kRm9ybWF0IiwiaW52YWxpZERhdGUiLCJyZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnMiLCJsb25nRGF0ZUZvcm1hdCIsImxhc3RJbmRleCIsImRlZmF1bHRMb25nRGF0ZUZvcm1hdCIsIkxUUyIsIkxUIiwiTCIsIkxMIiwiTExMIiwiTExMTCIsIl9sb25nRGF0ZUZvcm1hdCIsImZvcm1hdFVwcGVyIiwidG9VcHBlckNhc2UiLCJ0b2siLCJkZWZhdWx0SW52YWxpZERhdGUiLCJfaW52YWxpZERhdGUiLCJkZWZhdWx0T3JkaW5hbCIsImRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWwiLCJkZWZhdWx0UmVsYXRpdmVUaW1lIiwiZnV0dXJlIiwicGFzdCIsInMiLCJzcyIsIm1tIiwiaCIsImhoIiwiZCIsImRkIiwidyIsInd3IiwiTSIsIk1NIiwieSIsInl5IiwicmVsYXRpdmVUaW1lIiwid2l0aG91dFN1ZmZpeCIsInN0cmluZyIsImlzRnV0dXJlIiwiX3JlbGF0aXZlVGltZSIsInBhc3RGdXR1cmUiLCJkaWZmIiwiYWxpYXNlcyIsImFkZFVuaXRBbGlhcyIsInVuaXQiLCJzaG9ydGhhbmQiLCJsb3dlckNhc2UiLCJub3JtYWxpemVVbml0cyIsInVuaXRzIiwibm9ybWFsaXplT2JqZWN0VW5pdHMiLCJpbnB1dE9iamVjdCIsIm5vcm1hbGl6ZWRQcm9wIiwibm9ybWFsaXplZElucHV0IiwicHJpb3JpdGllcyIsImFkZFVuaXRQcmlvcml0eSIsInByaW9yaXR5IiwiZ2V0UHJpb3JpdGl6ZWRVbml0cyIsInVuaXRzT2JqIiwidSIsInNvcnQiLCJpc0xlYXBZZWFyIiwieWVhciIsImFic0Zsb29yIiwiY2VpbCIsImZsb29yIiwidG9JbnQiLCJhcmd1bWVudEZvckNvZXJjaW9uIiwiY29lcmNlZE51bWJlciIsImlzRmluaXRlIiwibWFrZUdldFNldCIsImtlZXBUaW1lIiwic2V0JDEiLCJtb250aCIsImRhdGUiLCJkYXlzSW5Nb250aCIsInN0cmluZ0dldCIsInN0cmluZ1NldCIsInByaW9yaXRpemVkIiwicHJpb3JpdGl6ZWRMZW4iLCJyZWdleGVzIiwibWF0Y2gxIiwibWF0Y2gyIiwibWF0Y2gzIiwibWF0Y2g0IiwibWF0Y2g2IiwibWF0Y2gxdG8yIiwibWF0Y2gzdG80IiwibWF0Y2g1dG82IiwibWF0Y2gxdG8zIiwibWF0Y2gxdG80IiwibWF0Y2gxdG82IiwibWF0Y2hVbnNpZ25lZCIsIm1hdGNoU2lnbmVkIiwibWF0Y2hPZmZzZXQiLCJtYXRjaFNob3J0T2Zmc2V0IiwibWF0Y2hUaW1lc3RhbXAiLCJtYXRjaFdvcmQiLCJhZGRSZWdleFRva2VuIiwicmVnZXgiLCJzdHJpY3RSZWdleCIsImlzU3RyaWN0IiwiZ2V0UGFyc2VSZWdleEZvclRva2VuIiwidW5lc2NhcGVGb3JtYXQiLCJyZWdleEVzY2FwZSIsIm1hdGNoZWQiLCJwMyIsInA0IiwidG9rZW5zIiwiYWRkUGFyc2VUb2tlbiIsInRva2VuTGVuIiwiYWRkV2Vla1BhcnNlVG9rZW4iLCJfdyIsImFkZFRpbWVUb0FycmF5RnJvbVRva2VuIiwiX2EiLCJZRUFSIiwiTU9OVEgiLCJEQVRFIiwiSE9VUiIsIk1JTlVURSIsIlNFQ09ORCIsIk1JTExJU0VDT05EIiwiV0VFSyIsIldFRUtEQVkiLCJtb2QiLCJuIiwieCIsIm1vZE1vbnRoIiwibyIsIm1vbnRoc1Nob3J0IiwibW9udGhzIiwibW9udGhzU2hvcnRSZWdleCIsIm1vbnRoc1JlZ2V4IiwibW9udGhzUGFyc2UiLCJkZWZhdWx0TG9jYWxlTW9udGhzIiwiZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0IiwiTU9OVEhTX0lOX0ZPUk1BVCIsImRlZmF1bHRNb250aHNTaG9ydFJlZ2V4IiwiZGVmYXVsdE1vbnRoc1JlZ2V4IiwibG9jYWxlTW9udGhzIiwiX21vbnRocyIsImlzRm9ybWF0IiwibG9jYWxlTW9udGhzU2hvcnQiLCJfbW9udGhzU2hvcnQiLCJoYW5kbGVTdHJpY3RQYXJzZSIsIm1vbnRoTmFtZSIsImlpIiwibGxjIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJfbW9udGhzUGFyc2UiLCJfbG9uZ01vbnRoc1BhcnNlIiwiX3Nob3J0TW9udGhzUGFyc2UiLCJsb2NhbGVNb250aHNQYXJzZSIsIl9tb250aHNQYXJzZUV4YWN0Iiwic2V0TW9udGgiLCJkYXlPZk1vbnRoIiwibWluIiwiZ2V0U2V0TW9udGgiLCJnZXREYXlzSW5Nb250aCIsImNvbXB1dGVNb250aHNQYXJzZSIsIl9tb250aHNTaG9ydFN0cmljdFJlZ2V4IiwiX21vbnRoc1Nob3J0UmVnZXgiLCJfbW9udGhzU3RyaWN0UmVnZXgiLCJfbW9udGhzUmVnZXgiLCJjbXBMZW5SZXYiLCJzaG9ydFBpZWNlcyIsImxvbmdQaWVjZXMiLCJtaXhlZFBpZWNlcyIsImRheXNJblllYXIiLCJwYXJzZVR3b0RpZ2l0WWVhciIsInBhcnNlSW50IiwiZ2V0U2V0WWVhciIsImdldElzTGVhcFllYXIiLCJjcmVhdGVEYXRlIiwibXMiLCJnZXRGdWxsWWVhciIsInNldEZ1bGxZZWFyIiwiY3JlYXRlVVRDRGF0ZSIsIlVUQyIsImdldFVUQ0Z1bGxZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJmaXJzdFdlZWtPZmZzZXQiLCJkb3ciLCJkb3kiLCJmd2QiLCJnZXRVVENEYXkiLCJkYXlPZlllYXJGcm9tV2Vla3MiLCJ3ZWVrIiwid2Vla2RheSIsInJlc1llYXIiLCJyZXNEYXlPZlllYXIiLCJkYXlPZlllYXIiLCJ3ZWVrT2ZZZWFyIiwicmVzV2VlayIsIndlZWtPZmZzZXQiLCJ3ZWVrc0luWWVhciIsIndlZWtPZmZzZXROZXh0IiwibG9jYWxlV2VlayIsIl93ZWVrIiwiZGVmYXVsdExvY2FsZVdlZWsiLCJsb2NhbGVGaXJzdERheU9mV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZZZWFyIiwiZ2V0U2V0V2VlayIsImFkZCIsImdldFNldElTT1dlZWsiLCJwYXJzZVdlZWtkYXkiLCJ3ZWVrZGF5c1BhcnNlIiwicGFyc2VJc29XZWVrZGF5Iiwic2hpZnRXZWVrZGF5cyIsIndzIiwid2Vla2RheXNNaW4iLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXMiLCJ3ZWVrZGF5c01pblJlZ2V4Iiwid2Vla2RheXNTaG9ydFJlZ2V4Iiwid2Vla2RheXNSZWdleCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5cyIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluIiwiZGVmYXVsdFdlZWtkYXlzUmVnZXgiLCJkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzTWluUmVnZXgiLCJsb2NhbGVXZWVrZGF5cyIsIl93ZWVrZGF5cyIsImRheSIsImxvY2FsZVdlZWtkYXlzU2hvcnQiLCJfd2Vla2RheXNTaG9ydCIsImxvY2FsZVdlZWtkYXlzTWluIiwiX3dlZWtkYXlzTWluIiwiaGFuZGxlU3RyaWN0UGFyc2UkMSIsIndlZWtkYXlOYW1lIiwiX3dlZWtkYXlzUGFyc2UiLCJfc2hvcnRXZWVrZGF5c1BhcnNlIiwiX21pbldlZWtkYXlzUGFyc2UiLCJsb2NhbGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzUGFyc2VFeGFjdCIsIl9mdWxsV2Vla2RheXNQYXJzZSIsImdldFNldERheU9mV2VlayIsImdldERheSIsImdldFNldExvY2FsZURheU9mV2VlayIsImdldFNldElTT0RheU9mV2VlayIsImNvbXB1dGVXZWVrZGF5c1BhcnNlIiwiX3dlZWtkYXlzU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNSZWdleCIsIl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXgiLCJfd2Vla2RheXNTaG9ydFJlZ2V4IiwiX3dlZWtkYXlzTWluU3RyaWN0UmVnZXgiLCJfd2Vla2RheXNNaW5SZWdleCIsIm1pbnAiLCJzaG9ydHAiLCJsb25ncCIsIm1pblBpZWNlcyIsImhGb3JtYXQiLCJob3VycyIsImtGb3JtYXQiLCJsb3dlcmNhc2UiLCJtaW51dGVzIiwibWF0Y2hNZXJpZGllbSIsIl9tZXJpZGllbVBhcnNlIiwibG9jYWxlSXNQTSIsImNoYXJBdCIsInNlY29uZHMiLCJrSW5wdXQiLCJfaXNQbSIsImlzUE0iLCJfbWVyaWRpZW0iLCJwb3MiLCJwb3MxIiwicG9zMiIsImRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlIiwiZ2V0U2V0SG91ciIsImxvY2FsZU1lcmlkaWVtIiwiaXNMb3dlciIsImdsb2JhbExvY2FsZSIsImJhc2VDb25maWciLCJkYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwibWVyaWRpZW1QYXJzZSIsImxvY2FsZXMiLCJsb2NhbGVGYW1pbGllcyIsImNvbW1vblByZWZpeCIsImFycjEiLCJhcnIyIiwibWlubCIsIm5vcm1hbGl6ZUxvY2FsZSIsImNob29zZUxvY2FsZSIsIm5hbWVzIiwiaiIsIm5leHQiLCJsb2FkTG9jYWxlIiwiaXNMb2NhbGVOYW1lU2FuZSIsIm9sZExvY2FsZSIsImV4cG9ydHMiLCJfYWJiciIsImdldFNldEdsb2JhbExvY2FsZSIsImUiLCJ2YWx1ZXMiLCJnZXRMb2NhbGUiLCJkZWZpbmVMb2NhbGUiLCJhYmJyIiwicGFyZW50TG9jYWxlIiwidXBkYXRlTG9jYWxlIiwidG1wTG9jYWxlIiwibGlzdExvY2FsZXMiLCJjaGVja092ZXJmbG93IiwiX292ZXJmbG93RGF5T2ZZZWFyIiwiX292ZXJmbG93V2Vla3MiLCJfb3ZlcmZsb3dXZWVrZGF5IiwiZXh0ZW5kZWRJc29SZWdleCIsImJhc2ljSXNvUmVnZXgiLCJ0elJlZ2V4IiwiaXNvRGF0ZXMiLCJpc29UaW1lcyIsImFzcE5ldEpzb25SZWdleCIsIm9ic09mZnNldHMiLCJVVCIsIkdNVCIsIkVEVCIsIkVTVCIsIkNEVCIsIkNTVCIsIk1EVCIsIk1TVCIsIlBEVCIsIlBTVCIsImNvbmZpZ0Zyb21JU08iLCJsIiwiYWxsb3dUaW1lIiwiZGF0ZUZvcm1hdCIsInRpbWVGb3JtYXQiLCJ0ekZvcm1hdCIsImV4ZWMiLCJpc29EYXRlc0xlbiIsImlzb1RpbWVzTGVuIiwiY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdCIsImV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MiLCJ5ZWFyU3RyIiwibW9udGhTdHIiLCJkYXlTdHIiLCJob3VyU3RyIiwibWludXRlU3RyIiwic2Vjb25kU3RyIiwidW50cnVuY2F0ZVllYXIiLCJwcmVwcm9jZXNzUkZDMjgyMiIsImNoZWNrV2Vla2RheSIsIndlZWtkYXlTdHIiLCJwYXJzZWRJbnB1dCIsImNhbGN1bGF0ZU9mZnNldCIsIm9ic09mZnNldCIsIm1pbGl0YXJ5T2Zmc2V0IiwibnVtT2Zmc2V0IiwiaG0iLCJjb25maWdGcm9tUkZDMjgyMiIsInBhcnNlZEFycmF5Iiwic2V0VVRDTWludXRlcyIsImdldFVUQ01pbnV0ZXMiLCJjb25maWdGcm9tU3RyaW5nIiwiY3JlYXRlRnJvbUlucHV0RmFsbGJhY2siLCJkZWZhdWx0cyIsImMiLCJjdXJyZW50RGF0ZUFycmF5Iiwibm93VmFsdWUiLCJfdXNlVVRDIiwiZ2V0VVRDTW9udGgiLCJnZXRVVENEYXRlIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiY29uZmlnRnJvbUFycmF5IiwiY3VycmVudERhdGUiLCJleHBlY3RlZFdlZWtkYXkiLCJ5ZWFyVG9Vc2UiLCJkYXlPZlllYXJGcm9tV2Vla0luZm8iLCJfZGF5T2ZZZWFyIiwiX25leHREYXkiLCJ3ZWVrWWVhciIsInRlbXAiLCJ3ZWVrZGF5T3ZlcmZsb3ciLCJjdXJXZWVrIiwiR0ciLCJXIiwiRSIsImNyZWF0ZUxvY2FsIiwiZ2ciLCJJU09fODYwMSIsIlJGQ18yODIyIiwic2tpcHBlZCIsInN0cmluZ0xlbmd0aCIsInRvdGFsUGFyc2VkSW5wdXRMZW5ndGgiLCJtZXJpZGllbUZpeFdyYXAiLCJlcmFzQ29udmVydFllYXIiLCJob3VyIiwiaXNQbSIsIm1lcmlkaWVtSG91ciIsImNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheSIsInRlbXBDb25maWciLCJiZXN0TW9tZW50Iiwic2NvcmVUb0JlYXQiLCJjdXJyZW50U2NvcmUiLCJ2YWxpZEZvcm1hdEZvdW5kIiwiYmVzdEZvcm1hdElzVmFsaWQiLCJjb25maWdmTGVuIiwic2NvcmUiLCJjb25maWdGcm9tT2JqZWN0IiwiZGF5T3JEYXRlIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJjcmVhdGVGcm9tQ29uZmlnIiwicHJlcGFyZUNvbmZpZyIsInByZXBhcnNlIiwiY29uZmlnRnJvbUlucHV0IiwiaXNVVEMiLCJwcm90b3R5cGVNaW4iLCJvdGhlciIsInByb3RvdHlwZU1heCIsInBpY2tCeSIsIm1vbWVudHMiLCJvcmRlcmluZyIsImlzRHVyYXRpb25WYWxpZCIsInVuaXRIYXNEZWNpbWFsIiwib3JkZXJMZW4iLCJwYXJzZUZsb2F0IiwiaXNWYWxpZCQxIiwiY3JlYXRlSW52YWxpZCQxIiwiY3JlYXRlRHVyYXRpb24iLCJEdXJhdGlvbiIsImR1cmF0aW9uIiwieWVhcnMiLCJxdWFydGVycyIsInF1YXJ0ZXIiLCJ3ZWVrcyIsImlzb1dlZWsiLCJkYXlzIiwibWlsbGlzZWNvbmRzIiwiX21pbGxpc2Vjb25kcyIsIl9kYXlzIiwiX2RhdGEiLCJfYnViYmxlIiwiaXNEdXJhdGlvbiIsImFic1JvdW5kIiwicm91bmQiLCJjb21wYXJlQXJyYXlzIiwiYXJyYXkxIiwiYXJyYXkyIiwiZG9udENvbnZlcnQiLCJsZW5ndGhEaWZmIiwiZGlmZnMiLCJvZmZzZXQiLCJzZXBhcmF0b3IiLCJ1dGNPZmZzZXQiLCJzaWduIiwib2Zmc2V0RnJvbVN0cmluZyIsImNodW5rT2Zmc2V0IiwibWF0Y2hlciIsIm1hdGNoZXMiLCJjbG9uZVdpdGhPZmZzZXQiLCJtb2RlbCIsImNsb25lIiwic2V0VGltZSIsImxvY2FsIiwiZ2V0RGF0ZU9mZnNldCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0U2V0T2Zmc2V0Iiwia2VlcExvY2FsVGltZSIsImtlZXBNaW51dGVzIiwibG9jYWxBZGp1c3QiLCJfY2hhbmdlSW5Qcm9ncmVzcyIsImFkZFN1YnRyYWN0IiwiZ2V0U2V0Wm9uZSIsInNldE9mZnNldFRvVVRDIiwic2V0T2Zmc2V0VG9Mb2NhbCIsInN1YnRyYWN0Iiwic2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQiLCJ0Wm9uZSIsImhhc0FsaWduZWRIb3VyT2Zmc2V0IiwiaXNEYXlsaWdodFNhdmluZ1RpbWUiLCJpc0RheWxpZ2h0U2F2aW5nVGltZVNoaWZ0ZWQiLCJfaXNEU1RTaGlmdGVkIiwidG9BcnJheSIsImlzTG9jYWwiLCJpc1V0Y09mZnNldCIsImlzVXRjIiwiYXNwTmV0UmVnZXgiLCJpc29SZWdleCIsInJldCIsImRpZmZSZXMiLCJwYXJzZUlzbyIsIm1vbWVudHNEaWZmZXJlbmNlIiwiaW5wIiwicG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZSIsImJhc2UiLCJpc0FmdGVyIiwiaXNCZWZvcmUiLCJjcmVhdGVBZGRlciIsImRpcmVjdGlvbiIsInBlcmlvZCIsInRtcCIsImlzQWRkaW5nIiwiaW52YWxpZCIsIlN0cmluZyIsImlzTW9tZW50SW5wdXQiLCJpc051bWJlck9yU3RyaW5nQXJyYXkiLCJpc01vbWVudElucHV0T2JqZWN0IiwicHJvcGVydHkiLCJvYmplY3RUZXN0IiwicHJvcGVydHlUZXN0IiwicHJvcGVydHlMZW4iLCJhcnJheVRlc3QiLCJkYXRhVHlwZVRlc3QiLCJpc0NhbGVuZGFyU3BlYyIsImdldENhbGVuZGFyRm9ybWF0IiwibXlNb21lbnQiLCJjYWxlbmRhciQxIiwidGltZSIsImZvcm1hdHMiLCJzb2QiLCJzdGFydE9mIiwiY2FsZW5kYXJGb3JtYXQiLCJsb2NhbElucHV0IiwiZW5kT2YiLCJpc0JldHdlZW4iLCJpbmNsdXNpdml0eSIsImxvY2FsRnJvbSIsImxvY2FsVG8iLCJpc1NhbWUiLCJpbnB1dE1zIiwiaXNTYW1lT3JBZnRlciIsImlzU2FtZU9yQmVmb3JlIiwiYXNGbG9hdCIsInRoYXQiLCJ6b25lRGVsdGEiLCJtb250aERpZmYiLCJ3aG9sZU1vbnRoRGlmZiIsImFuY2hvciIsInRvSVNPU3RyaW5nIiwia2VlcE9mZnNldCIsInRvRGF0ZSIsImluc3BlY3QiLCJkYXRldGltZSIsInN1ZmZpeCIsInpvbmUiLCJpbnB1dFN0cmluZyIsImRlZmF1bHRGb3JtYXRVdGMiLCJkZWZhdWx0Rm9ybWF0IiwicG9zdGZvcm1hdCIsImh1bWFuaXplIiwiZnJvbU5vdyIsInRvTm93IiwibmV3TG9jYWxlRGF0YSIsIk1TX1BFUl9TRUNPTkQiLCJNU19QRVJfTUlOVVRFIiwiTVNfUEVSX0hPVVIiLCJNU19QRVJfNDAwX1lFQVJTIiwibW9kJDEiLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJsb2NhbFN0YXJ0T2ZEYXRlIiwidXRjU3RhcnRPZkRhdGUiLCJzdGFydE9mRGF0ZSIsImlzb1dlZWtkYXkiLCJ1bml4IiwidG9PYmplY3QiLCJ0b0pTT04iLCJpc1ZhbGlkJDIiLCJwYXJzaW5nRmxhZ3MiLCJpbnZhbGlkQXQiLCJjcmVhdGlvbkRhdGEiLCJsb2NhbGVFcmFzIiwiZXJhcyIsIl9lcmFzIiwic2luY2UiLCJ1bnRpbCIsImxvY2FsZUVyYXNQYXJzZSIsImVyYU5hbWUiLCJuYXJyb3ciLCJsb2NhbGVFcmFzQ29udmVydFllYXIiLCJkaXIiLCJnZXRFcmFOYW1lIiwiZ2V0RXJhTmFycm93IiwiZ2V0RXJhQWJiciIsImdldEVyYVllYXIiLCJlcmFzTmFtZVJlZ2V4IiwiY29tcHV0ZUVyYXNQYXJzZSIsIl9lcmFzTmFtZVJlZ2V4IiwiX2VyYXNSZWdleCIsImVyYXNBYmJyUmVnZXgiLCJfZXJhc0FiYnJSZWdleCIsImVyYXNOYXJyb3dSZWdleCIsIl9lcmFzTmFycm93UmVnZXgiLCJtYXRjaEVyYUFiYnIiLCJtYXRjaEVyYU5hbWUiLCJtYXRjaEVyYU5hcnJvdyIsIm1hdGNoRXJhWWVhck9yZGluYWwiLCJfZXJhWWVhck9yZGluYWxSZWdleCIsImFiYnJQaWVjZXMiLCJuYW1lUGllY2VzIiwibmFycm93UGllY2VzIiwiYWRkV2Vla1llYXJGb3JtYXRUb2tlbiIsImdldHRlciIsImdldFNldFdlZWtZZWFyIiwiZ2V0U2V0V2Vla1llYXJIZWxwZXIiLCJnZXRTZXRJU09XZWVrWWVhciIsImdldElTT1dlZWtzSW5ZZWFyIiwiZ2V0SVNPV2Vla3NJbklTT1dlZWtZZWFyIiwiaXNvV2Vla1llYXIiLCJnZXRXZWVrc0luWWVhciIsIndlZWtJbmZvIiwiZ2V0V2Vla3NJbldlZWtZZWFyIiwid2Vla3NUYXJnZXQiLCJzZXRXZWVrQWxsIiwiZGF5T2ZZZWFyRGF0YSIsImdldFNldFF1YXJ0ZXIiLCJlcmFzUGFyc2UiLCJlcmFZZWFyT3JkaW5hbFBhcnNlIiwiZ2V0U2V0RGF5T2ZNb250aCIsImdldFNldERheU9mWWVhciIsImdldFNldE1pbnV0ZSIsImdldFNldE1pbGxpc2Vjb25kIiwiZ2V0U2V0U2Vjb25kIiwicGFyc2VNcyIsImdldFpvbmVBYmJyIiwiZ2V0Wm9uZU5hbWUiLCJwcm90byIsImNyZWF0ZVVuaXgiLCJjcmVhdGVJblpvbmUiLCJwYXJzZVpvbmUiLCJwcmVQYXJzZVBvc3RGb3JtYXQiLCJTeW1ib2wiLCJmb3IiLCJlcmFOYXJyb3ciLCJlcmFBYmJyIiwiZXJhWWVhciIsImlzb1dlZWtzIiwid2Vla3NJbldlZWtZZWFyIiwiaXNvV2Vla3NJblllYXIiLCJpc29XZWVrc0luSVNPV2Vla1llYXIiLCJpc0RTVCIsInpvbmVBYmJyIiwiem9uZU5hbWUiLCJkYXRlcyIsImlzRFNUU2hpZnRlZCIsInByb3RvJDEiLCJnZXQkMSIsImluZGV4IiwiZmllbGQiLCJzZXR0ZXIiLCJsaXN0TW9udGhzSW1wbCIsIm91dCIsImxpc3RXZWVrZGF5c0ltcGwiLCJsb2NhbGVTb3J0ZWQiLCJzaGlmdCIsImxpc3RNb250aHMiLCJsaXN0TW9udGhzU2hvcnQiLCJsaXN0V2Vla2RheXMiLCJsaXN0V2Vla2RheXNTaG9ydCIsImxpc3RXZWVrZGF5c01pbiIsImZpcnN0RGF5T2ZZZWFyIiwiZmlyc3REYXlPZldlZWsiLCJsYW5nRGF0YSIsIm1hdGhBYnMiLCJhZGRTdWJ0cmFjdCQxIiwiYWRkJDEiLCJzdWJ0cmFjdCQxIiwiYWJzQ2VpbCIsImJ1YmJsZSIsIm1vbnRoc0Zyb21EYXlzIiwibW9udGhzVG9EYXlzIiwiZGF5c1RvTW9udGhzIiwiYXMiLCJ2YWx1ZU9mJDEiLCJtYWtlQXMiLCJhbGlhcyIsImFzTWlsbGlzZWNvbmRzIiwiYXNTZWNvbmRzIiwiYXNNaW51dGVzIiwiYXNIb3VycyIsImFzRGF5cyIsImFzV2Vla3MiLCJhc01vbnRocyIsImFzUXVhcnRlcnMiLCJhc1llYXJzIiwiY2xvbmUkMSIsImdldCQyIiwibWFrZUdldHRlciIsInRocmVzaG9sZHMiLCJzdWJzdGl0dXRlVGltZUFnbyIsInJlbGF0aXZlVGltZSQxIiwicG9zTmVnRHVyYXRpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJvdW5kaW5nRnVuY3Rpb24iLCJnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJsaW1pdCIsImFyZ1dpdGhTdWZmaXgiLCJhcmdUaHJlc2hvbGRzIiwid2l0aFN1ZmZpeCIsInRoIiwiYWJzJDEiLCJ0b0lTT1N0cmluZyQxIiwidG90YWxTaWduIiwieW1TaWduIiwiZGF5c1NpZ24iLCJobXNTaWduIiwidG90YWwiLCJwcm90byQyIiwidG9Jc29TdHJpbmciLCJ2ZXJzaW9uIiwicmVsYXRpdmVUaW1lUm91bmRpbmciLCJyZWxhdGl2ZVRpbWVUaHJlc2hvbGQiLCJIVE1MNV9GTVQiLCJEQVRFVElNRV9MT0NBTCIsIkRBVEVUSU1FX0xPQ0FMX1NFQ09ORFMiLCJEQVRFVElNRV9MT0NBTF9NUyIsIlRJTUUiLCJUSU1FX1NFQ09ORFMiLCJUSU1FX01TIiwiZmFjdG9yeSIsInJvb3QiLCJtb21lbnQiLCJjYWNoZWRHdWVzcyIsInpvbmVzIiwibGlua3MiLCJjb3VudHJpZXMiLCJndWVzc2VzIiwibG9nRXJyb3IiLCJtb21lbnRWZXJzaW9uIiwibWFqb3IiLCJtaW5vciIsImNoYXJDb2RlVG9JbnQiLCJjaGFyQ29kZSIsInVucGFja0Jhc2U2MCIsIndob2xlIiwiZnJhY3Rpb25hbCIsIm11bHRpcGxpZXIiLCJjaGFyQ29kZUF0IiwiYXJyYXlUb0ludCIsIm1hcEluZGljZXMiLCJpbmRpY2VzIiwidW5wYWNrIiwib2Zmc2V0cyIsInVudGlscyIsIkluZmluaXR5IiwiaW50VG9VbnRpbCIsImFiYnJzIiwicG9wdWxhdGlvbiIsIlpvbmUiLCJwYWNrZWRTdHJpbmciLCJfc2V0IiwiQ291bnRyeSIsImNvdW50cnlfbmFtZSIsInpvbmVfbmFtZXMiLCJPZmZzZXRBdCIsImF0IiwidGltZVN0cmluZyIsInRvVGltZVN0cmluZyIsIlpvbmVTY29yZSIsIm9mZnNldFNjb3JlIiwiYWJiclNjb3JlIiwiZmluZENoYW5nZSIsImxvdyIsImhpZ2giLCJtaWQiLCJzb3J0Wm9uZVNjb3JlcyIsImxvY2FsZUNvbXBhcmUiLCJhZGRUb0d1ZXNzZXMiLCJndWVzc2VzRm9yVXNlck9mZnNldHMiLCJndWVzc2VzT2Zmc2V0Iiwib2Zmc2V0c0xlbmd0aCIsImZpbHRlcmVkR3Vlc3NlcyIsInJlYnVpbGRHdWVzcyIsImludGxOYW1lIiwiSW50bCIsIkRhdGVUaW1lRm9ybWF0IiwicmVzb2x2ZWRPcHRpb25zIiwidGltZVpvbmUiLCJub3JtYWxpemVOYW1lIiwiem9uZVNjb3JlIiwiY2hhbmdlIiwic3RhcnRZZWFyIiwibGFzdCIsInVzZXJPZmZzZXRzIiwiem9uZVNjb3JlcyIsImdldFpvbmUiLCJzY29yZU9mZnNldEF0IiwiYWRkWm9uZSIsInBhY2tlZCIsIm5vcm1hbGl6ZWQiLCJjYWxsZXIiLCJsaW5rIiwiYWRkTGluayIsIm5vcm1hbDAiLCJub3JtYWwxIiwibmVlZHNPZmZzZXQiLCJpc1VuaXhUaW1lc3RhbXAiLCJtZXNzYWdlIiwidHoiLCJwYXJzZSIsInVucGFja2VkIiwiX2luZGV4IiwidGltZXN0YW1wIiwiem9uZV9uYW1lIiwiY291bnRyeV9jb2RlIiwib2Zmc2V0TmV4dCIsIm9mZnNldFByZXYiLCJtb3ZlQW1iaWd1b3VzRm9yd2FyZCIsIm1vdmVJbnZhbGlkRm9yd2FyZCIsIm9mZnNldEF0IiwiZGF0YVZlcnNpb24iLCJfem9uZXMiLCJfbGlua3MiLCJfbmFtZXMiLCJfY291bnRyaWVzIiwibG9hZCIsImNvdW50cnlfem9uZXMiLCJhZGRDb3VudHJpZXMiLCJ6b25lRXhpc3RzIiwiZGlkU2hvd0Vycm9yIiwiZ3Vlc3MiLCJpZ25vcmVDYWNoZSIsInpvbmVzRm9yQ291bnRyeSIsImNvdW50cnkiLCJ3aXRoX29mZnNldCIsIm9sZCIsImFiYnJXcmFwIiwiX3oiLCJyZXNldFpvbmVXcmFwIiwiZGVmYXVsdFpvbmUiLCJ6Iiwic2V0RGVmYXVsdCIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwibnVtYmVyc1Bhc3QiLCJudW1iZXJzRnV0dXJlIiwidHJhbnNsYXRlIiwidmVyYmFsTnVtYmVyIiwibGwiLCJsbGwiLCJsbGxsIiwicHJvY2Vzc1JlbGF0aXZlVGltZSIsIm1vbnRoc1BhcnNlRXhhY3QiLCJ3ZWVrZGF5c1BhcnNlRXhhY3QiLCJ0cmFuc2xhdGlvbnMiLCJkZSIsImFpcnBsYW5lIiwiYXJyaXZhbCIsImJhY2siLCJiaWtlcmVudGFsc3RhdGlvbiIsImJ1cyIsImNhbmNlbCIsImN1cnJlbnRwb3NpdGlvbiIsImRlbGV0ZSIsImRlcGFydHVyZSIsImZhdm91cml0ZSIsImZlcnJ5Iiwib3dubG9jYXRpb25zIiwibG9hZGluZyIsInJhaWwiLCJzdHJlZXQiLCJzdWJ3YXkiLCJzdGF0aW9uIiwidHJhbSIsInZlbnVlIiwid2hlcmUiLCJwbGFjZSIsImVuIiwiYmlrZXBhcmsiLCJjYXJwYXJrIiwicGxhdGZvcm0iLCJyZXF1aXJlZCIsInRyYWNrIiwiZmkiLCJzdiIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJBdXRvc3VnZ2VzdFBhdGNoIiwiQXV0b3N1Z2dlc3QiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3VwZXIiLCJzZWxmIiwib25TdWdnZXN0aW9uVG91Y2hNb3ZlIiwianVzdFNlbGVjdGVkU3VnZ2VzdGlvbiIsInByZXNzZWRTdWdnZXN0aW9uIiwiTW9iaWxlU2VhcmNoIiwiYXBwRWxlbWVudCIsImNsb3NlSGFuZGxlIiwiY2xlYXJJbnB1dCIsInN1Z2dlc3Rpb25zIiwiaW5wdXRQcm9wcyIsImZldGNoRnVuY3Rpb24iLCJyZW5kZXJTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiYXJpYUxhYmVsIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJjbGVhck9sZFNlYXJjaGVzIiwiZGlhbG9nSGVhZGVyVGV4dCIsImRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0IiwiZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCIsImNsZWFySW5wdXRCdXR0b25UZXh0IiwiZm9jdXNJbnB1dCIsImNvbG9yIiwiaG92ZXJDb2xvciIsImFjY2Vzc2libGVQcmltYXJ5Q29sb3IiLCJzZWFyY2hPcGVuIiwiZm9udFdlaWdodHMiLCJzaG93U2Nyb2xsIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJzdHlsZXMiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwidXNlU3RhdGUiLCJpbnB1dFJlZiIsIlJlYWN0IiwidXNlUmVmIiwidXNlRWZmZWN0IiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJvbkNsb3NlIiwidXNlQ2FsbGJhY2siLCJvblNlbGVjdCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJnZXRWYWx1ZSIsInJlbmRlckl0ZW0iLCJjbGFzc05hbWUiLCJmb2N1cyIsImlzT3BlbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJvbkFmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwibWVkaXVtIiwiaHRtbEZvciIsIm9uQ2xpY2siLCJvbktleURvd24iLCJ0YWJJbmRleCIsIkljb24iLCJpbWciLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGFzVmFsdWUiLCJhdXRvRm9jdXMiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsIkZyYWdtZW50IiwidGhlbWUiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsInNoYXBlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJwbGFjZWhvbGRlciIsInIiLCJnIiwid2luZG93IiwiaWdub3JlIiwiaGVhZGVyIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiSW52YWxpZENoYXJhY3RlckVycm9yIiwiYm9keSIsInNjcm9sbEhlaWdodCIsImRvY3VtZW50RWxlbWVudCIsIm9mZnNldEhlaWdodCIsImNsaWVudEhlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwib3V0bGluZSIsInNjcm9sbFRvIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZGV0YWlsIiwidG9nZ2xlIiwiZGlzcGF0Y2hFdmVudCIsImYiLCJjYW5jZWxTY3JvbGwiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImFuaW1hdGVTY3JvbGwiLCJ0YWdOYW1lIiwicGFnZVlPZmZzZXQiLCJxdWVyeVNlbGVjdG9yIiwiTyIsIm9mZnNldFBhcmVudCIsImlubmVySGVpZ2h0IiwiUyIsIl8iLCJJIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpdGxlIiwibWF0Y2hNZWRpYSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJidXR0b24iLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwiY2xvc2VzdCIsImhvc3RuYW1lIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImhyZWYiLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYXNoIiwicmVwbGFjZVN0YXRlIiwic3RhdGUiLCJkZXN0cm95IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiX19jcmVhdGVCaW5kaW5nIiwiY3JlYXRlIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiX19leHBvcnRTdGFyIiwidXNlQXJyb3dOYXZpZ2F0aW9uIiwibGlzdEl0ZW1zIiwib25BcnJvd1VwT3JEb3duIiwic2VsZWN0ZWRJbmRleCIsInVzZURlYm91bmNlIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInVzZUVsZW1lbnRTaXplIiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJ1c2VJc0JyZWFrcG9pbnQiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiaW5uZXJXaWR0aCIsInVzZU9uUmVzaXplIiwieW91dHViZSIsIlByaXZhY3lNYW5hZ2VyQVBJIiwiYWN0aW9uIiwidHJ1c3RlIiwiY21hIiwiY2FsbEFwaSIsImNvbnNlbnQiLCJ0b3AiLCJwb3N0TWVzc2FnZSIsInVzZUlzTG9hZGluZ0FmdGVyRXJyb3IiLCJ1c2VJc01vYmlsZSIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJ1c2VPbkxvc2VGb2N1c1dpdGhpbiIsIndhdGNoIiwicGFzc2l2ZSIsInVzZU9uV2luZG93Rm9jdXMiLCJ2aXNpYmlsaXR5U3RhdGUiLCJ1c2VPdXRzaWRlUmVhY3RlciIsImNvbnRhaW5zIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsImdsb2JhbFRoaXMiLCJpbml0IiwiZmFsbGJhY2tMbmciLCJkZWZhdWx0TlMiLCJpbnRlcnBvbGF0aW9uIiwiZXNjYXBlVmFsdWUiLCJub2RlIiwiZ2V0UGxhdGZvcm0iLCJHVEZTIiwibW9kZXMiLCJpMThuZXh0IiwiZ2V0U3VnZ2VzdGlvbkNvbnRlbnQiLCJzdWdnZXN0aW9uVHlwZSIsIl9pdGVtJHByb3BlcnRpZXMkYWRkZSIsInRhaWwxIiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwiYXJyaXZlQnkiLCJEVEF1dG9zdWdnZXN0IiwiQ29tcG9uZW50IiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsIm5leHRQcm9wcyIsImVkaXRpbmciLCJzZXRTdGF0ZSIsIm5ld1ZhbHVlIiwibmV3U3RhdGUiLCJmSW5wdXQiLCJyZW5kZXJNb2JpbGVTZWFyY2giLCJpc01vYmlsZSIsInZhbGlkIiwidHlwaW5nVGltZXIiLCJ0aW1lciIsInR5cGluZyIsIm9uU2VsZWN0ZWQiLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJjbG9zZU1vYmlsZVNlYXJjaCIsInByZXZTdGF0ZSIsImNoZWNrUGVuZGluZ1NlbGVjdGlvbiIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImdldExhYmVsIiwiY2xlYXJCdXR0b24iLCJjbGVhbkV4ZWN1dGVkIiwiaXNMb2NhdGlvblNlYXJjaCIsImlzRW1wdHkiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidHJhbnNsYXRlZCIsIm9uQ2xlYXIiLCJpbnB1dENsaWNrZWQiLCJpbnB1dFZhbHVlIiwiY2xlYXJMb2NhdGlvblRleHQiLCJzdGF0ZUtleURvd24iLCJzdG9yZUlucHV0UmVmZXJlbmNlIiwiYXV0b3N1Z2dlc3QiLCJzdG9yZVJlZiIsImZpbGxJbnB1dCIsImNvbnRlbnQiLCJTdWdnZXN0aW9uSXRlbSIsImFyaWFGYXZvdXJpdGVTdHJpbmciLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwibW9kZUljb25Db2xvcnMiLCJtb2RlU2V0Iiwia2V5RG93biIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50IiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0IiwiY2xlYXJGdXR1cmVSb3V0ZXMiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm9uRm9jdXMiLCJhZGRSZXNvdXJjZUJ1bmRsZSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRTdGF0ZSIsInJlbmRlciIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsInRoaW4iLCJpbnB1dENsYXNzTmFtZSIsImFyaWFCYXJJZCIsIlNlYXJjaEJhcklkIiwiYXJpYVJlcXVpcmVkVGV4dCIsImFyaWFMYWJlbFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50IiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwic2VsZWN0aW9uIiwicm9sZSIsIm1vYmlsZUxhYmVsIiwiY3giLCJpY29uIiwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIiwiZGVmYXVsdFByb3BzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJhbnkiLCJhcnJheU9mIiwib2JqZWN0IiwiRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrIl0sIm1hcHBpbmdzIjoia3pEQUFlLFNBQVNBLElBWXRCLE9BWEFBLEVBQVdDLE9BQU9DLE9BQVNELE9BQU9D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
14
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50LXRpbWV6b25lL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vYmlsZVNlYXJjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsIi8qKlxuICogIGFjY2VwdCBlcXVhbGl0eSBvZiBub24gbnVsbGlzaCB2YWx1ZXNcbiAqXG4gKiBAbmFtZSB0cnVFcVxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHZhbDEgRmlyc3QgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSBwYXJhbTIgU2Vjb25kIHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwudHJ1RXEoJzInLCAnMicpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cnVFcSh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiB2YWwxICYmIHZhbDIgJiYgdmFsMSA9PT0gdmFsMjtcbn1cbiIsImltcG9ydCB0cnVFcSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxJztcbi8qKlxuICogQ2hlY2tzIHRoYXQgaXMgaXRlbXMgZHVwbGljYXRlXG4gKlxuICogQG5hbWUgaXNEdXBsaWNhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMSBPYmplY3QgY29udGFpbmluZyBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIHtcbiAqICBwcm9wZXJ0aWVzIHtcbiAqICAgICAgZ3Rmc0lkOiBTdHJpbmdcbiAqICAgICAgZ2lkOiBTdHJpbmcgZnJvbSBnZW9jb2RlclxuICogICAgICBuYW1lOiBTdHJpbmdcbiAqICAgICAgbGFiZWw6IFN0cmluZ1xuICogICAgICAgYWRkcmVzczogU3RyaW5nXG4gKiAgICAgIGdlb21ldHJ5IHtcbiAqICAgICAgICAgY29vcmRpbmF0ZXMgW051bWJlciBsYXQsIE51bWJlciBsb25dXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTIgT2JqZWN0IHdpdGggc2FtZSBhdHRyaWJ1dGVzIGFzIGl0ZW0xXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuaXNEdXBsaWNhdGUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxpdHl9Ly8ke2QxLm5hbWV9Ly8ke2QxLmxvY2FsaXR5fWA7XG4gICAgY29uc3QgbmFtZTIgPSBgJHtvMi5uYW1lfS8vJHtvMi5sb2NhbGl0eX0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxpdHl9YDtcblxuICAgIHJldHVybiBuYW1lMSA9PT0gbmFtZTI7XG4gIH1cbiAgaWYgKGl0ZW0xLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgaXRlbTIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoXG4gICAgKChwcm9wczEubGF5ZXIgPT09ICdiaWtlUmVudGFsU3RhdGlvbicgfHxcbiAgICAgIHByb3BzMS5sYXllciA9PT0gJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJykgJiZcbiAgICAgIChwcm9wczIubGF5ZXIgPT09ICdiaWtlUmVudGFsU3RhdGlvbicgfHxcbiAgICAgICAgcHJvcHMyLmxheWVyID09PSAnZmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb24nKSkgfHxcbiAgICAocHJvcHMxLmxheWVyID09PSAnYmlrZXN0YXRpb24nICYmIHByb3BzMi5sYXllciA9PT0gJ2Jpa2VzdGF0aW9uJylcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5sYWJlbElkID09PSBwcm9wczIubGFiZWxJZDtcbiAgfVxuICBpZiAocHJvcHMxLmd0ZnNJZCAmJiBwcm9wczIuZ3Rmc0lkKSB7XG4gICAgcmV0dXJuIHByb3BzMS5ndGZzSWQgPT09IHByb3BzMi5ndGZzSWQ7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmdpZCAmJiBwcm9wczIuZ2lkLmluY2x1ZGVzKHByb3BzMS5ndGZzSWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHByb3BzMi5ndGZzSWQgJiYgcHJvcHMxLmdpZCAmJiBwcm9wczEuZ2lkLmluY2x1ZGVzKHByb3BzMi5ndGZzSWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKFxuICAgIChwcm9wczEubGF5ZXIgPT09ICdzdG9wJyB8fCBwcm9wczEubGF5ZXIgPT09ICdzdGF0aW9uJykgJiZcbiAgICAocHJvcHMyLmxheWVyID09PSAnc3RvcCcgfHwgcHJvcHMyLmxheWVyID09PSAnc3RhdGlvbicpICYmXG4gICAgcHJvcHMxLmdpZCAmJlxuICAgIHByb3BzMi5naWRcbiAgKSB7XG4gICAgcmV0dXJuIHByb3BzMS5naWQgPT09IHByb3BzMi5naWQ7XG4gIH1cblxuICBjb25zdCBwMSA9IGl0ZW0xICYmIGl0ZW0xLmdlb21ldHJ5ID8gaXRlbTEuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IHAyID0gaXRlbTIgJiYgaXRlbTIuZ2VvbWV0cnkgPyBpdGVtMi5nZW9tZXRyeS5jb29yZGluYXRlcyA6IHVuZGVmaW5lZDtcblxuICBpZiAocDEgJiYgcDIpIHtcbiAgICAvLyBib3RoIGhhdmUgZ2VvbWV0cnlcbiAgICBpZiAoTWF0aC5hYnMocDFbMF0gLSBwMlswXSkgPCAxZS02ICYmIE1hdGguYWJzKHAxWzFdIC0gcDJbMV0pIDwgMWUtNikge1xuICAgICAgLy8gbG9jYXRpb24gbWF0Y2ggaXMgbm90IGVub3VnaC4gUmVxdWlyZSBhIGNvbW1vbiBwcm9wZXJ0eVxuICAgICAgaWYgKFxuICAgICAgICB0cnVFcShwcm9wczEubmFtZSwgcHJvcHMyLm5hbWUpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmFkZHJlc3MpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5hZGRyZXNzLCBwcm9wczIubGFiZWwpIHx8XG4gICAgICAgIHRydUVxKHByb3BzMS5sYWJlbCwgcHJvcHMyLmFkZHJlc3MpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cbiIsImltcG9ydCBpc1N0cmluZyBmcm9tICdsb2Rhc2gvaXNTdHJpbmcnO1xuaW1wb3J0IG9yZGVyQnkgZnJvbSAnbG9kYXNoL29yZGVyQnknO1xuaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNEdXBsaWNhdGUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZSc7XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IHN0ciA9PiB7XG4gIGlmICghaXNTdHJpbmcoc3RyKSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7XG59O1xuXG4vKipcbiAqIExheWVyVHlwZSBkZXBpY3RzIHRoZSB0eXBlIG9mIHRoZSBwb2ludC1vZi1pbnRlcmVzdC5cbiAqL1xuY29uc3QgTGF5ZXJUeXBlID0ge1xuICBBZGRyZXNzOiAnYWRkcmVzcycsXG4gIEJhY2s6ICdiYWNrJyxcbiAgQ3VycmVudFBvc2l0aW9uOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgRmF2b3VyaXRlU3RvcDogJ2Zhdm91cml0ZVN0b3AnLFxuICBGYXZvdXJpdGVTdGF0aW9uOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gIEZhdm91cml0ZVBsYWNlOiAnZmF2b3VyaXRlUGxhY2UnLFxuICBGYXZvdXJpdGVSb3V0ZTogJ2Zhdm91cml0ZVJvdXRlJyxcbiAgRnV0dXJlUm91dGU6ICdmdXR1cmVSb3V0ZScsXG4gIFN0YXRpb246ICdzdGF0aW9uJyxcbiAgU2VsZWN0RnJvbU1hcDogJ3NlbGVjdEZyb21NYXAnLFxuICBTZWxlY3RGcm9tT3duTG9jYXRpb25zOiAnb3duTG9jYXRpb25zJyxcbiAgU3RvcDogJ3N0b3AnLFxuICBTdHJlZXQ6ICdzdHJlZXQnLFxuICBWZW51ZTogJ3ZlbnVlJyxcbiAgQmlrZVJlbnRhbFN0YXRpb246ICdiaWtlc3RhdGlvbicsXG4gIENhclBhcms6ICdjYXJwYXJrJyxcbiAgQmlrZVBhcms6ICdiaWtlcGFyaycsXG59O1xuZXhwb3J0IGNvbnN0IGlzU3RvcCA9ICh7IGxheWVyLCB0eXBlIH0pID0+XG4gIGxheWVyID09PSAnc3RvcCcgfHxcbiAgbGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICB0eXBlID09PSAnc3RvcCcgfHxcbiAgdHlwZSA9PT0gJ2Zhdm91cml0ZVN0b3AnO1xuXG5jb25zdCBERUZBVUxUX1JPVVRFU19QUkVGSVggPSAnbGluamF0JztcbmNvbnN0IERFRkFVTFRfU1RPUFNfUFJFRklYID0gJ3B5c2FraXQnO1xuXG5leHBvcnQgY29uc3QgbWFwUm91dGUgPSAoaXRlbSwgcGF0aE9wdHMpID0+IHtcbiAgaWYgKGl0ZW0gPT09IG51bGwgfHwgaXRlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBvcHRzID0gcGF0aE9wdHMgfHwge307XG5cbiAgY29uc3Qgcm91dGVzUHJlZml4ID0gb3B0cy5yb3V0ZXNQcmVmaXggfHwgREVGQVVMVF9ST1VURVNfUFJFRklYO1xuICBjb25zdCBzdG9wc1ByZWZpeCA9IG9wdHMuc3RvcHNQcmVmaXggfHwgREVGQVVMVF9TVE9QU19QUkVGSVg7XG5cbiAgY29uc3QgbGluayA9IGAvJHtyb3V0ZXNQcmVmaXh9LyR7aXRlbS5ndGZzSWR9LyR7c3RvcHNQcmVmaXh9YDtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnUm91dGUnLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIC4uLml0ZW0sXG4gICAgICBsYXllcjogYHJvdXRlLSR7aXRlbS5tb2RlfWAsXG4gICAgICBsaW5rLFxuICAgIH0sXG4gICAgZ2VvbWV0cnk6IHtcbiAgICAgIGNvb3JkaW5hdGVzOiBudWxsLFxuICAgIH0sXG4gIH07XG59O1xuXG4vKipcbiAqIFRyaWVzIHRvIG1hdGNoIHRoZSBnaXZlbiBzZWFyY2ggdGVybSBhZ2FpbnMgdGhlIGNvbGxlY3Rpb24gb2YgcHJvcGVydGllc1xuICogZm9yIGEgZ2VvY29kaW5nIHJlc3VsdC4gVGhlIGJlc3QgbWF0Y2ggd2lsbCBiZSByZXR1cm5lZCAobWluOiAwLCBtYXg6IDEuNSkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6ZWRUZXJtIHRoZSBub3JtYWxpemVkIHNlYXJjaCB0ZXJtLlxuICogQHBhcmFtIHsqfSByZXN1bHRQcm9wZXJ0aWVzIHRoZSBnZW9jb2RpbmcgcmVzdWx0J3MgcHJvcGVydHkgY29sbGVjdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IG1hdGNoID0gKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHRQcm9wZXJ0aWVzKSA9PiB7XG4gIGlmICghaXNTdHJpbmcobm9ybWFsaXplZFRlcm0pIHx8IG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgY29uc3QgbWF0Y2hQcm9wcyA9IFsnbmFtZScsICdsYWJlbCcsICdhZGRyZXNzJywgJ3Nob3J0TmFtZSddO1xuICByZXR1cm4gbWF0Y2hQcm9wc1xuICAgIC5tYXAobmFtZSA9PiByZXN1bHRQcm9wZXJ0aWVzW25hbWVdKVxuICAgIC5maWx0ZXIodmFsdWUgPT4gaXNTdHJpbmcodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA+IDApXG4gICAgLm1hcCh2YWx1ZSA9PiB7XG4gICAgICBjb25zdCBub3JtYWxpemVkVmFsdWUgPSBub3JtYWxpemUodmFsdWUpO1xuICAgICAgaWYgKG5vcm1hbGl6ZWRWYWx1ZS5pbmRleE9mKG5vcm1hbGl6ZWRUZXJtKSA9PT0gMCkge1xuICAgICAgICAvLyBmdWxsIG1hdGNoIGF0IHN0YXJ0LiBSZXR1cm4gbWF4IHJlc3VsdCB3aGVuIG1hdGNoIGlzIGZ1bGwsIG5vdCBvbmx5IHBhcnRpYWxcbiAgICAgICAgcmV0dXJuIDAuNSArIG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCAvIG5vcm1hbGl6ZWRWYWx1ZS5sZW5ndGg7XG4gICAgICB9XG4gICAgICAvLyBiZWNhdXNlIG9mIGZpbHRlcm1hdGNoaW5ndG9pbnB1dCwgd2Uga25vdyB0aGF0IG1hdGNoIG9jY3VycmVkIHNvbWV3aGVyZVxuICAgICAgLy8gZG9uJ3QgcnVuIGZpbHRlcm1hdGNoaW5nIGFnYWluIGJ1dCBlc3RpbWF0ZSByb3VnaGx5OlxuICAgICAgLy8gdGhlIGxvbmdlciB0aGUgbWF0Y2hpbmcgc3RyaW5nLCB0aGUgYmV0dGVyIGNvbmZpZGVuY2UsIG1heCBiZWluZyAwLjVcbiAgICAgIHJldHVybiAoMC41ICogbm9ybWFsaXplZFRlcm0ubGVuZ3RoKSAvIChub3JtYWxpemVkVGVybS5sZW5ndGggKyAxKTtcbiAgICB9KVxuICAgIC5yZWR1Y2UoXG4gICAgICAocHJldmlvdXMsIGN1cnJlbnQpID0+IChjdXJyZW50ID4gcHJldmlvdXMgPyBjdXJyZW50IDogcHJldmlvdXMpLFxuICAgICAgMCxcbiAgICApO1xufTtcblxuLyoqXG4gKiBSYW5rcyB0aGUgcmVzdWx0IGJhc2VkIG9uIGl0cyBsYXllciBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGF5ZXIgdGhlIGxheWVyIHByb3BlcnR5LlxuICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZSB0aGUgc291cmNlIHByb3BlcnR5LlxuICovXG5leHBvcnQgY29uc3QgZ2V0TGF5ZXJSYW5rID0gKGxheWVyLCBzb3VyY2UpID0+IHtcbiAgc3dpdGNoIChsYXllcikge1xuICAgIGNhc2UgTGF5ZXJUeXBlLkN1cnJlbnRQb3NpdGlvbjpcbiAgICAgIHJldHVybiAxO1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJhY2s6XG4gICAgICByZXR1cm4gMC45O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21NYXA6XG4gICAgICByZXR1cm4gMC44O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6XG4gICAgICByZXR1cm4gMC43OTtcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVTdGF0aW9uOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVBsYWNlOlxuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0b3A6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUm91dGU6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC40NTtcbiAgICBjYXNlIExheWVyVHlwZS5GdXR1cmVSb3V0ZTpcbiAgICAgIHJldHVybiAwLjQ0O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgIGlmIChpc1N0cmluZyhzb3VyY2UpICYmIHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIDAuNDM7XG4gICAgICB9XG4gICAgICByZXR1cm4gMC40MjtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIHZlbnVlLCBhZGRyZXNzLCBzdHJlZXQsIHJvdXRlLXh4eFxuICAgICAgcmV0dXJuIDAuNDE7XG4gICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVJlbnRhbFN0YXRpb246XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5TdG9wOlxuICAgICAgcmV0dXJuIDAuMzY7XG4gIH1cbn07XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHNvcnQgdGhlIHJlc3VsdHMuIE9yZGVycyBhcyBmb2xsb3dzOlxuICogIC0gY3VycmVudCBwb3NpdGlvbiBmaXJzdCBmb3IgYW4gZW1wdHkgc2VhcmNoXG4gKiAgLSBtYXRjaGluZyByb3V0ZXMgZmlyc3RcbiAqICAtIG90aGVyd2lzZSBieSBjb25maWRlbmNlLCBleGNlcHQgdGhhdDpcbiAqICAgIC0gYm9vc3Qgd2VsbCBtYXRjaGluZyBzdGF0aW9ucyAoZXNwZWNpYWxseSBmcm9tIEdURlMpXG4gKiAgICAtIHJhbmsgc3RvcHMgbG93ZXIgYXMgdGhleSB0ZW5kIHRvIG9jY3VweSBtb3N0IG9mIHRoZSBzZWFyY2ggcmVzdWx0c1xuICogIC0gaXRlbXMgd2l0aCBubyBjb25maWRlbmNlIChvbGQgc2VhcmNoZXMgYW5kIGZhdm9yaXRlcyk6XG4gKiAgICAtIHJhbmsgZmF2b3VyaXRlcyBiZXR0ZXIgdGhhbiBvcmRpbmFyeSBvbGQgc2VhcmNoZXNcbiAqICAgIC0gcmFuayBmdWxsIG1hdGNoIGJldHRlciB0aGFuIHBhcnRpYWwgbWF0Y2hcbiAqICAgIC0gcmFuayBtYXRjaCBhdCBtaWRkbGUgd29yZCBsb3dlciB0aGFuIG1hdGNoIGF0IHRoZSBiZWdpbm5pbmdcbiAqICAgIC0gcmFuayBiaWtlIHJlbnRhbCBzdGF0aW9ucyBsb3dlclxuICogQHBhcmFtIHsqW119IHJlc3VsdHMgVGhlIHNlYXJjaCByZXN1bHRzIHRoYXQgd2VyZSByZWNlaXZlZFxuICogQHBhcmFtIHtTdHJpbmd9IHRlcm0gVGhlIHNlYXJjaCB0ZXJtIHRoYXQgd2FzIHVzZWRcbiAqL1xuZXhwb3J0IGNvbnN0IHNvcnRTZWFyY2hSZXN1bHRzID0gKGxpbmVSZWdleHAsIHJlc3VsdHMsIHRlcm0gPSAnJykgPT4ge1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0cykpIHtcbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICBjb25zdCBpc0xpbmVJZGVudGlmaWVyID0gdmFsdWUgPT5cbiAgICBpc1N0cmluZyh2YWx1ZSkgJiYgbGluZVJlZ2V4cCAmJiBsaW5lUmVnZXhwLnRlc3QodmFsdWUpO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUZXJtID0gbm9ybWFsaXplKHRlcm0pO1xuICBjb25zdCBpc0xpbmVTZWFyY2ggPSBpc0xpbmVJZGVudGlmaWVyKG5vcm1hbGl6ZWRUZXJtKTtcblxuICBjb25zdCBvcmRlcmVkUmVzdWx0cyA9IG9yZGVyQnkoXG4gICAgcmVzdWx0cyxcbiAgICBbXG4gICAgICAvLyByYW5rIG1hdGNoaW5nIHJvdXRlcyBiZXN0XG4gICAgICByZXN1bHQgPT5cbiAgICAgICAgaXNMaW5lU2VhcmNoICYmXG4gICAgICAgIGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkpICYmXG4gICAgICAgIG5vcm1hbGl6ZShyZXN1bHQucHJvcGVydGllcy5zaG9ydE5hbWUpLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwXG4gICAgICAgICAgPyAxXG4gICAgICAgICAgOiAwLFxuXG4gICAgICByZXN1bHQgPT4ge1xuICAgICAgICBjb25zdCB7IGNvbmZpZGVuY2UsIGxheWVyLCBzb3VyY2UgfSA9IHJlc3VsdC5wcm9wZXJ0aWVzO1xuICAgICAgICBpZiAobm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gRG9pbmcgc2VhcmNoIHdpdGggZW1wdHkgc3RyaW5nLlxuICAgICAgICAgIC8vIE5vIGNvbmZpZGVuY2UgdG8gbWF0Y2gsIHNvIHVzZSByYW5rZWQgb2xkIHNlYXJjaGVzIGFuZCBmYXZvdXJpdGVzXG4gICAgICAgICAgcmV0dXJuIGdldExheWVyUmFuayhsYXllciwgc291cmNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIG11c3QgaGFuZGxlIGEgbWl4dXAgb2YgZ2VvY29kZXIgc2VhcmNoZXMgYW5kIGl0ZW1zIGFib3ZlXG4gICAgICAgIC8vIE5vcm1hbCBjb25maWRlbmNlIHJhbmdlIGZyb20gZ2VvY29kZXIgaXMgYWJvdXQgMC4zIC4uIDFcbiAgICAgICAgaWYgKCFjb25maWRlbmNlKSB7XG4gICAgICAgICAgLy8gbm90IGZyb20gZ2VvY29kZXIsIGVzdGltYXRlIGNvbmZpZGVuY2Ugb3Vyc2VsdmVzXG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGdldExheWVyUmFuayhsYXllciwgc291cmNlKSArXG4gICAgICAgICAgICBtYXRjaChub3JtYWxpemVkVGVybSwgcmVzdWx0LnByb3BlcnRpZXMpXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZW9jb2RlZCBpdGVtcyB3aXRoIGNvbmZpZGVuY2UsIGp1c3QgYWRqdXN0IGEgbGl0dGxlXG4gICAgICAgIHN3aXRjaCAobGF5ZXIpIHtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5TdGF0aW9uOiB7XG4gICAgICAgICAgICBjb25zdCBib29zdCA9IHNvdXJjZS5pbmRleE9mKCdndGZzJykgPT09IDAgPyAwLjAyIDogMC4wMTtcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlICsgYm9vc3Q7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZSAtIDAuMDU7XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuQ2FyUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUGFyazpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5CaWtlUmVudGFsU3RhdGlvbjpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNDtcbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2U7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgXSxcbiAgICBbJ2Rlc2MnLCAnZGVzYyddLFxuICApO1xuXG4gIHJldHVybiB1bmlxV2l0aChvcmRlcmVkUmVzdWx0cywgaXNEdXBsaWNhdGUpO1xufTtcblxuLyoqXG4gKiBQYXJzZXMgc3RvcCdzIG5hbWUgd2l0aG91dCBzdG9wIGNvZGUgZnJvbSBhIHN0b3AgbmFtZSBmcm9tIGdlb2NvZGluZyByZXN1bHRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIHN0b3AncyBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RvcENvZGUgc3RvcCBjb2RlLlxuICovXG5leHBvcnQgY29uc3QgZ2V0U3RvcE5hbWUgPSAobmFtZSwgc3RvcENvZGUpID0+IHtcbiAgaWYgKFxuICAgIHN0b3BDb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICBzdG9wQ29kZSAhPT0gbnVsbCAmJlxuICAgIG5hbWUubGFzdEluZGV4T2Yoc3RvcENvZGUpICE9PSAtMVxuICApIHtcbiAgICByZXR1cm4gbmFtZS5zdWJzdHJpbmcoMCwgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgLSAxKTtcbiAgfVxuICByZXR1cm4gbmFtZTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxpdHkgKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxpdHkgPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsaXR5IHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VSZW50YWxTdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsaXR5KHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGNvbnN0IGJvb2wgPVxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXI7XG4gICAgaWYgKFxuICAgICAgYm9vbCAmJlxuICAgICAgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIGJvb2w7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGdldCBmcm9tICdsb2Rhc2gvZ2V0JztcblxuLyoqXG4gKiBGdW5jdGlvbiB0aGF0IGZpbHRlcnMgbGlzdCBtYXRjaGluZyB0byBpbnB1dC5cbiAqXG4gKiBAbmFtZSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXRcbiAqIEBwYXJhbSB7QXJyYXl9IGxpc3QgTGlzdCBjb250YWluaW4gb2JqZWN0cyBlLmcoICB7XG4gKiAgICAgICAgIHR5cGU6ICdGZWF0dXJlJ1xuICogICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gKiAgICAgICAgICAgbGFiZWw6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICAgIGxheWVyOiAnYWRkcmVzcycsXG4gKiAgICAgICAgICAgbmFtZTogJ3Rlc3RhZGRyZXNzNCcsXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICAgIGdlb21ldHJ5OiB7IGNvb3JkaW5hdGVzOiBbbG9uLCBsYXRdIH0sXG4gKiAgICAgICB9LClcbiAqIEBwYXJhbSB7U3RyaW5nfSBJbnB1dCBJbnB1dCBnaXZlbiBmb3IgZmlsdGVyaW5nIHRoZSBsaXN0XG4gKiBAcGFyYW0ge0FycmF5fSBmaWVsZHMgTGlzdCBvZiBmaWVsZHMgdGhhdCBsaXN0IGlzIGZpbHRlcmVkIGJ5IGUuZyAoW3Byb3BlcnRpZXMubGFiZWwsIHByb3BlcnRpZXMubmFtZV0pXG4gKiBAcmV0dXJucyB7QXJyYXl9IEZpbHRlcmVkIEFycmF5LlxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuZmlsdGVyTWF0Y2hpbmdUb0lucHV0KFt7dHlwZTogZmVhdHVyZSwgcHJvcGVydGllcyB7IC4uLiBuYW1lOiB0ZXN0YWRkcmVzczQgfSAuLi4gfV0sICd0ZXN0YWRkcmVzczQnLCAncHJvcGVydGllcy5uYW1lJyk7XG4gKiAvLz0gTGlzdCBjb250YWluaW5nIG9iamVjdCB3aXRoIGdpdmVuIG5hbWUuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZpbHRlck1hdGNoaW5nVG9JbnB1dChsaXN0LCBJbnB1dCwgZmllbGRzKSB7XG4gIGlmICh0eXBlb2YgSW5wdXQgPT09ICdzdHJpbmcnICYmIElucHV0Lmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBpbnB1dCA9IElucHV0LnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIGNvbnN0IG11bHRpV29yZCA9IGlucHV0LmluY2x1ZGVzKCcgJykgfHwgaW5wdXQuaW5jbHVkZXMoJywnKTtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICBsZXQgcGFydHMgPSBbXTtcbiAgICAgIGZpZWxkcy5mb3JFYWNoKHBOYW1lID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gZ2V0KGl0ZW0sIHBOYW1lKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgIW11bHRpV29yZCAmJlxuICAgICAgICAgIChwTmFtZSA9PT0gJ3Byb3BlcnRpZXMubGFiZWwnIHx8IHBOYW1lID09PSAnYWRkcmVzcycpICYmXG4gICAgICAgICAgdmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gc3BlY2lhbCBjYXNlOiBkcm9wIGxhc3QgcGFydHMgaS5lLiBjaXR5IGFuZCBuZWlnaGJvdXJob29kXG4gICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zcGxpdCgnLCcpO1xuICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMiwgMik7XG4gICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICB2YWx1ZS5zcGxpY2UodmFsdWUubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuam9pbignLCcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChtdWx0aVdvcmQpIHtcbiAgICAgICAgICAgIHBhcnRzID0gcGFydHMuY29uY2F0KHZhbHVlLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdChcbiAgICAgICAgICAgICAgdmFsdWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8sL2csICcgJykuc3BsaXQoJyAnKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBhcnRzW2ldLmluZGV4T2YoaW5wdXQpID09PSAwKSB7XG4gICAgICAgICAgLy8gYWNjZXB0IG1hdGNoIG9ubHkgYXQgd29yZCBzdGFydFxuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gbGlzdDtcbn1cbiIsIi8qKlxuICogU2VyaWFsaXplcyBvYmplY3RzXG4gKlxuICogQG5hbWUgc2VyaWFsaXplXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqIE9iamVjdCB0byBiZSBzZXJpYWxpemVkXG4gKiBAcGFyYW0ge0FueX0gcHJlZml4XG4gKiBAcmV0dXJucyB7U3RyaW5nfSBTZXJpYWxpemVkIG9iamVjdFxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnNlcmlhbGl6ZShwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZShvYmosIHByZWZpeCkge1xuICBpZiAoIW9iaikge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKVxuICAgIC5tYXAocCA9PiB7XG4gICAgICBjb25zdCBrID0gcHJlZml4IHx8IHA7XG4gICAgICBjb25zdCB2ID0gb2JqW3BdO1xuXG4gICAgICByZXR1cm4gdHlwZW9mIHYgPT09ICdvYmplY3QnXG4gICAgICAgID8gc2VyaWFsaXplKHYsIGspXG4gICAgICAgIDogYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGspfT0ke2VuY29kZVVSSUNvbXBvbmVudCh2KX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn1cbiIsImltcG9ydCBzZXJpYWxpemUgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZSc7XG4vKipcbiAqICBSZXR1cm4gUHJvbWlzZSBmb3IgYSB1cmwganNvbiBnZXQgcmVxdWVzdFxuICpcbiAqIEBuYW1lIGdldEpzb25cbiAqIEBwYXJhbSB7U3RyaW5nfSB1cmxcbiAqIEBwYXJhbSB7QXJyYXl9IHBhcmFtc1xuICogQHJldHVybnMge09iamVjdH0gcmVzcG9uc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRKc29uKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXJlc3BvbnNlXG4gKi9cbmNvbnN0IGF4aW9zID0gcmVxdWlyZSgnYXhpb3MnKS5kZWZhdWx0O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRKc29uKHVybCwgcGFyYW1zKSB7XG4gIHJldHVybiBheGlvc1xuICAgIC5nZXQoXG4gICAgICBlbmNvZGVVUkkodXJsKSArXG4gICAgICAgIChwYXJhbXNcbiAgICAgICAgICA/ICh1cmwuc2VhcmNoKC9cXD8vKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplKHBhcmFtcylcbiAgICAgICAgICA6ICcnKSxcbiAgICAgIHtcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG5cbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL2pzb24nLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICApXG4gICAgLnRoZW4ocmVzID0+IHtcbiAgICAgIHJldHVybiByZXMuZGF0YTtcbiAgICB9KTtcbn1cbiIsImltcG9ydCBnZXRKc29uIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbic7XG5cbmNvbnN0IERFRkFVTFRfUEVMSUFTX1VSTCA9ICdodHRwczovL2FwaS5kaWdpdHJhbnNpdC5maS9nZW9jb2RpbmcvdjEvc2VhcmNoJztcbi8qKlxuICogPERFU0NSSVBUSU9OPlxuICpcbiAqIEBuYW1lIGdldEdlb2NvZGluZ1Jlc3VsdHNcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hTdHJpbmdcbiAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hQYXJhbXMgKE9wdGlvbmFsKSBQYXJhbWV0ZXJzIGFwcGVuZGVkIHRvIHVybCwgYmFzaWNhbGx5IGJveCAvIHBvbHlnb24gdG8gcmVzdHJpY3Qgc2VhcmNoIGFyZWFcbiAqIEBwYXJhbSB7U3RyaW5nfSBsYW5nIChPcHRpb25hbCkgc2VhcmNoIGxhbmd1YWdlXG4gKiBAcGFyYW0ge09iamVjdH0gZm9jdXNQb2ludCAoT3B0aW9uYWwpIE93biBQb3NpdGlvbiAoUEVMSUFTIEFQSSlcbiAqIEBwYXJhbSB7U3RyaW5nfSBzb3VyY2VzIChPcHRpb25hbCkgc2VhcmNoIHNvdXJjZXMgKGUuZyBPU00sIEdURlMuLilcbiAqIEBwYXJhbSB7T2JqZWN0fSBtaW5pbWFsUmVnZXhwIChPcHRpb25hbCkgUmVnZXhwIGZvciB0ZXN0aW5nXG4gKiBAcGFyYW0geyp9IGdlb2NvZGluZ0xheWVycyAoT3B0aW9uYWwpIEFycmF5IG9mIHN0cmluZ3MgdGhhdCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGljaCBsYXllcnMgaXMgc2VhcmNoZWQsIGUuZy4gWyd2ZW51ZScsICdhZGRyZXNzJywgJ3N0b3AnXVxuICogQHJldHVybnMge1N0cmluZ30gUmVzdWx0cyBpbiBKU09OIGZvcm1cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRHZW9jb2RpbmdSZXN1bHRzKFwicmVzdWx0XCIpO1xuICogLy89IGUuZy4ge3RleHQ6XCJyZXN1bHRcIn1cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgc2VhcmNoU3RyaW5nLFxuICBzZWFyY2hQYXJhbXMsXG4gIGxhbmcsXG4gIGZvY3VzUG9pbnQsXG4gIHNvdXJjZXMsXG4gIHBlbGlhc1VybCxcbiAgbWluaW1hbFJlZ2V4cCxcbiAgZ2VvY29kaW5nTGF5ZXJzLFxuKSB7XG4gIGNvbnN0IHRleHQgPSBzZWFyY2hTdHJpbmcgPyBzZWFyY2hTdHJpbmcudHJpbSgpIDogbnVsbDtcbiAgaWYgKFxuICAgIHRleHQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHRleHQgPT09IG51bGwgfHxcbiAgICB0ZXh0Lmxlbmd0aCA8IDEgfHxcbiAgICAobWluaW1hbFJlZ2V4cCAmJiAhbWluaW1hbFJlZ2V4cC50ZXN0KHRleHQpKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbiAgfVxuICBjb25zdCBQRUxJQVNfVVJMID0gcGVsaWFzVXJsIHx8IERFRkFVTFRfUEVMSUFTX1VSTDtcbiAgbGV0IG9wdHMgPSB7IHRleHQsIC4uLnNlYXJjaFBhcmFtcywgLi4uZm9jdXNQb2ludCwgbGFuZyB9O1xuICBpZiAoc291cmNlcykge1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIHNvdXJjZXMgfTtcbiAgfVxuICBpZiAoZ2VvY29kaW5nTGF5ZXJzKSB7XG4gICAgY29uc3QgbGF5ZXJzID0gZ2VvY29kaW5nTGF5ZXJzLnRvU3RyaW5nKCk7XG4gICAgb3B0cyA9IHsgLi4ub3B0cywgbGF5ZXJzIH07XG4gIH1cbiAgcmV0dXJuIGdldEpzb24oUEVMSUFTX1VSTCwgb3B0cykudGhlbihyZXMgPT4ge1xuICAgIHJldHVybiByZXMuZmVhdHVyZXM7XG4gIH0pO1xufVxuIiwiaW1wb3J0IGRlYm91bmNlIGZyb20gJ2xvZGFzaC9kZWJvdW5jZSc7XG5pbXBvcnQgZmxhdHRlbiBmcm9tICdsb2Rhc2gvZmxhdHRlbic7XG5pbXBvcnQgdGFrZSBmcm9tICdsb2Rhc2gvdGFrZSc7XG5pbXBvcnQge1xuICBzb3J0U2VhcmNoUmVzdWx0cyxcbiAgaXNTdG9wLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycyc7XG5pbXBvcnQgdW5pcUJ5TGFiZWwgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIChtYXAsIHN0b3BPclN0YXRpb24pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0U3RvcmUoJ1ByZWZlcmVuY2VzU3RvcmUnKS5nZXRMYW5ndWFnZSgpLCBUT0RPIGVuYWJsZSB0aGlzIHdoZW4gT1RQIHN1cHBvcnRzIHRyYW5zbGF0aW9uc1xuICB9KS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcy5tYXAoc3RvcCA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSB7XG4gICAgICAgIHR5cGU6ICdGYXZvdXJpdGVTdG9wJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFkZGVuZHVtOiBzdG9wLnByb3BlcnRpZXMuYWRkZW5kdW0sXG4gICAgICAgICAgZ2lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5naWQsXG4gICAgICAgICAgY29kZTogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uY29kZSxcbiAgICAgICAgICBndGZzSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmd0ZnNJZCxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0ubGFzdFVwZGF0ZWQsXG4gICAgICAgICAgZmF2b3VyaXRlSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmZhdm91cml0ZUlkLFxuICAgICAgICAgIGFkZHJlc3M6IHN0b3AucHJvcGVydGllcy5sYWJlbCxcbiAgICAgICAgICBsYXllcjogaXNTdG9wKHN0b3AucHJvcGVydGllcykgPyAnZmF2b3VyaXRlU3RvcCcgOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiBzdG9wLmdlb21ldHJ5LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmYXZvdXJpdGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZXMsIGlucHV0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGZhdm91cml0ZXMsIGlucHV0LCBbJ2FkZHJlc3MnLCAnbmFtZSddKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgdHlwZTogJ0Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgbGF5ZXI6ICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFtpdGVtLmxvbiwgaXRlbS5sYXRdIH0sXG4gICAgfSkpLFxuICApO1xufVxuZnVuY3Rpb24gc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1tYXAnLFxuICAgICAgICAgIGxheWVyOiAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0N1cnJlbnRMb2NhdGlvbicsXG4gICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICd1c2Utb3duLXBvc2l0aW9uJyxcbiAgICAgICAgICBsYXllcjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbcG9zaXRpb24ubG9uLCBwb3NpdGlvbi5sYXRdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsXG4gICAgICAgICAgbGF5ZXI6ICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdzZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFja1N1Z2dlc3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYWNrJyxcbiAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgIGxhdDogbnVsbCxcbiAgICAgIGxvbjogbnVsbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWxJZDogJ2JhY2snLFxuICAgICAgICBsYXllcjogJ2JhY2snLFxuICAgICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0KSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHMgPT4ge1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoc3RvcHMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlU3RvcHMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgcmV0dXJuIGZhdm91cml0ZVN0b3BzPy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsnZmF2b3VyaXRlUGxhY2UnLCAndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9ucyxcbiAgICBnZXRPbGRTZWFyY2hlcyxcbiAgICBnZXRGYXZvdXJpdGVTdG9wcyxcbiAgICBwYXJraW5nQXJlYVNvdXJjZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zLFxuICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVJvdXRlcyxcbiAgICBnZXRSb3V0ZXNRdWVyeSxcbiAgICBjb250ZXh0LFxuICAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogbG9jYXRpb25Bd2FyZSxcbiAgICBtaW5pbWFsUmVnZXhwLFxuICAgIGxpbmVSZWdleHAsXG4gICAgVVJMX1BFTElBUyxcbiAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgIGZlZWRJRHMsXG4gICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zLFxuICAgIGdlb2NvZGluZ1NvdXJjZXMsXG4gICAgZ2V0RnV0dXJlUm91dGVzLFxuICAgIGNpdHlCaWtlTmV0d29ya3MsXG4gIH0gPSBzZWFyY2hDb250ZXh0O1xuICAvLyBpZiBubyB0YXJnZXRzIGFyZSBwcm92aWRlZCwgc2VhcmNoIHRoZW0gYWxsLlxuICBjb25zdCBhbGxUYXJnZXRzID0gIXRhcmdldHMgfHwgdGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gIC8vIGlmIG5vIHNvdXJjZXMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFNvdXJjZXMgPSAhc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbnMoY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaENvbXBvbmVudHMgPSBbXTtcbiAgY29uc3Qgc2VhcmNoZXMgPSB7IHR5cGU6ICdhbGwnLCB0ZXJtOiBpbnB1dCwgcmVzdWx0czogW10gfTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShjb250ZXh0KTtcbiAgY29uc3QgZm9jdXNQb2ludCA9XG4gICAgbG9jYXRpb25Bd2FyZSAmJiByZWZQb2ludD8ubGF0ICYmIHJlZlBvaW50Py5sb25cbiAgICAgID8ge1xuICAgICAgICAgIC8vIFJvdW5kIGNvb3JkaW5hdGVzIHRvIGFwcHJveCAxIGttLCBpbiBvcmRlciB0byBpbXByb3ZlIGNhY2hpbmdcbiAgICAgICAgICAnZm9jdXMucG9pbnQubGF0JzogcmVmUG9pbnQubGF0LnRvRml4ZWQoMyksXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50Lmxvbic6IHJlZlBvaW50Lmxvbi50b0ZpeGVkKDMpLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICBjb25zdCBtb2RlID0gdHJhbnNwb3J0TW9kZSA/IHRyYW5zcG9ydE1vZGUuc3BsaXQoJy0nKVsxXSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ0N1cnJlbnRQb3NpdGlvbicpICYmXG4gICAgcG9zaXRpb24uc3RhdHVzICE9PSAnZ2VvbG9jYXRpb24tbm90LXN1cHBvcnRlZCdcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTWFwUG9zaXRpb24nKSkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkpO1xuICB9XG4gIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdGdXR1cmVSb3V0ZXMnKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0RnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaCh0YWtlKGl0ZW1zLCAzKSk7XG4gIH1cbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSAmJlxuICAgIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dClcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGdldEZhdm91cml0ZUxvY2F0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZUxvY2F0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdCYWNrJykpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEJhY2tTdWdnZXN0aW9uKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydzdGF0aW9uJywgJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG4gICAgICBjb25zdCBmZWVkaXMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApO1xuICAgICAgY29uc3QgZ2Vvc291cmNlcyA9IGdlb2NvZGluZ1NvdXJjZXMuY29uY2F0KGZlZWRpcykuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb3NvdXJjZXMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgbG9jYXRpb25IaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCwgJ2VuZHBvaW50Jyk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Jpa2VSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2Jpa2VwYXJrJyxcbiAgICAgICAgJ2NhcnBhcmsnLFxuICAgICAgICAnc3RvcCcsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhsb2NhdGlvbkhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1BhcmtpbmdBcmVhcycpKSB7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgICBpZiAoZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuc2l6ZSA9IGdlb2NvZGluZ1NpemU7XG4gICAgICB9XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdiaWtlc3RhdGlvbicsXG4gICAgICAgICdiaWtlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiYWNrJyxcbiAgICAgICAgJ3N0b3AnLFxuICAgICAgICAnc3RhdGlvbicsXG4gICAgICBdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IGdldEZhdm91cml0ZVN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkaXMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkaXMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBzdG9wSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdiaWtlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnRNb2RlICE9PSAncm91dGUtQ0lUWUJJS0UnKSB7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlUmVudGFsU3RhdGlvbicpO1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZXN0YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlUm91dGVzLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgcGF0aE9wdHMsXG4gICAgICAgICkudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdzdG9wJyxcbiAgICAgICAgJ3N0YXRpb24nLFxuICAgICAgICAnYmlrZXBhcmsnLFxuICAgICAgICAnY2FycGFyaycsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnYmFjaycsXG4gICAgICBdO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydE1vZGUgIT09ICdyb3V0ZS1DSVRZQklLRScpIHtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ2Jpa2VSZW50YWxTdGF0aW9uJyk7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlc3RhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhyb3V0ZUhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdHMgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHRzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnQmlrZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUJpa2VTdGF0aW9ucyA9IGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlQmlrZVN0YXRpb25zLCBpbnB1dCksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ0Jpa2VSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHVuaXFCeUxhYmVsKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMjkuNFxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAgIGdsb2JhbC5tb21lbnQgPSBmYWN0b3J5KClcbn0odGhpcywgKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgdmFyIGhvb2tDYWxsYmFjaztcblxuICAgIGZ1bmN0aW9uIGhvb2tzKCkge1xuICAgICAgICByZXR1cm4gaG9va0NhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBkb25lIHRvIHJlZ2lzdGVyIHRoZSBtZXRob2QgY2FsbGVkIHdpdGggbW9tZW50KClcbiAgICAvLyB3aXRob3V0IGNyZWF0aW5nIGNpcmN1bGFyIGRlcGVuZGVuY2llcy5cbiAgICBmdW5jdGlvbiBzZXRIb29rQ2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgaG9va0NhbGxiYWNrID0gY2FsbGJhY2s7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBcnJheShpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgaW5zdGFuY2VvZiBBcnJheSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgQXJyYXldJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0KSB7XG4gICAgICAgIC8vIElFOCB3aWxsIHRyZWF0IHVuZGVmaW5lZCBhbmQgbnVsbCBhcyBvYmplY3QgaWYgaXQgd2Fzbid0IGZvclxuICAgICAgICAvLyBpbnB1dCAhPSBudWxsXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCAhPSBudWxsICYmXG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBPYmplY3RdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhc093blByb3AoYSwgYikge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsIGIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gICAgICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoID09PSAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGs7XG4gICAgICAgICAgICBmb3IgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICAgICAgaWYgKGhhc093blByb3Aob2JqLCBrKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1VuZGVmaW5lZChpbnB1dCkge1xuICAgICAgICByZXR1cm4gaW5wdXQgPT09IHZvaWQgMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc051bWJlcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJyB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgTnVtYmVyXSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0RhdGUoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgRGF0ZSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRGF0ZV0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwKGFyciwgZm4pIHtcbiAgICAgICAgdmFyIHJlcyA9IFtdLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcnJMZW47ICsraSkge1xuICAgICAgICAgICAgcmVzLnB1c2goZm4oYXJyW2ldLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICAgICAgICBmb3IgKHZhciBpIGluIGIpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGIsIGkpKSB7XG4gICAgICAgICAgICAgICAgYVtpXSA9IGJbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndG9TdHJpbmcnKSkge1xuICAgICAgICAgICAgYS50b1N0cmluZyA9IGIudG9TdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzT3duUHJvcChiLCAndmFsdWVPZicpKSB7XG4gICAgICAgICAgICBhLnZhbHVlT2YgPSBiLnZhbHVlT2Y7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIHRydWUpLnV0YygpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmF1bHRQYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gZGVlcCBjbG9uZSB0aGlzIG9iamVjdC5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGVtcHR5OiBmYWxzZSxcbiAgICAgICAgICAgIHVudXNlZFRva2VuczogW10sXG4gICAgICAgICAgICB1bnVzZWRJbnB1dDogW10sXG4gICAgICAgICAgICBvdmVyZmxvdzogLTIsXG4gICAgICAgICAgICBjaGFyc0xlZnRPdmVyOiAwLFxuICAgICAgICAgICAgbnVsbElucHV0OiBmYWxzZSxcbiAgICAgICAgICAgIGludmFsaWRFcmE6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkTW9udGg6IG51bGwsXG4gICAgICAgICAgICBpbnZhbGlkRm9ybWF0OiBmYWxzZSxcbiAgICAgICAgICAgIHVzZXJJbnZhbGlkYXRlZDogZmFsc2UsXG4gICAgICAgICAgICBpc286IGZhbHNlLFxuICAgICAgICAgICAgcGFyc2VkRGF0ZVBhcnRzOiBbXSxcbiAgICAgICAgICAgIGVyYTogbnVsbCxcbiAgICAgICAgICAgIG1lcmlkaWVtOiBudWxsLFxuICAgICAgICAgICAgcmZjMjgyMjogZmFsc2UsXG4gICAgICAgICAgICB3ZWVrZGF5TWlzbWF0Y2g6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNpbmdGbGFncyhtKSB7XG4gICAgICAgIGlmIChtLl9wZiA9PSBudWxsKSB7XG4gICAgICAgICAgICBtLl9wZiA9IGRlZmF1bHRQYXJzaW5nRmxhZ3MoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5fcGY7XG4gICAgfVxuXG4gICAgdmFyIHNvbWU7XG4gICAgaWYgKEFycmF5LnByb3RvdHlwZS5zb21lKSB7XG4gICAgICAgIHNvbWUgPSBBcnJheS5wcm90b3R5cGUuc29tZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzb21lID0gZnVuY3Rpb24gKGZ1bikge1xuICAgICAgICAgICAgdmFyIHQgPSBPYmplY3QodGhpcyksXG4gICAgICAgICAgICAgICAgbGVuID0gdC5sZW5ndGggPj4+IDAsXG4gICAgICAgICAgICAgICAgaTtcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkgaW4gdCAmJiBmdW4uY2FsbCh0aGlzLCB0W2ldLCBpLCB0KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkKG0pIHtcbiAgICAgICAgaWYgKG0uX2lzVmFsaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGZsYWdzID0gZ2V0UGFyc2luZ0ZsYWdzKG0pLFxuICAgICAgICAgICAgICAgIHBhcnNlZFBhcnRzID0gc29tZS5jYWxsKGZsYWdzLnBhcnNlZERhdGVQYXJ0cywgZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkgIT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgIWlzTmFOKG0uX2QuZ2V0VGltZSgpKSAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5vdmVyZmxvdyA8IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmVtcHR5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkRXJhICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkTW9udGggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRXZWVrZGF5ICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy53ZWVrZGF5TWlzbWF0Y2ggJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLm51bGxJbnB1dCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEZvcm1hdCAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MudXNlckludmFsaWRhdGVkICYmXG4gICAgICAgICAgICAgICAgICAgICghZmxhZ3MubWVyaWRpZW0gfHwgKGZsYWdzLm1lcmlkaWVtICYmIHBhcnNlZFBhcnRzKSk7XG5cbiAgICAgICAgICAgIGlmIChtLl9zdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBpc05vd1ZhbGlkID1cbiAgICAgICAgICAgICAgICAgICAgaXNOb3dWYWxpZCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy5jaGFyc0xlZnRPdmVyID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLnVudXNlZFRva2Vucy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYmlnSG91ciA9PT0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoT2JqZWN0LmlzRnJvemVuID09IG51bGwgfHwgIU9iamVjdC5pc0Zyb3plbihtKSkge1xuICAgICAgICAgICAgICAgIG0uX2lzVmFsaWQgPSBpc05vd1ZhbGlkO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbS5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkKGZsYWdzKSB7XG4gICAgICAgIHZhciBtID0gY3JlYXRlVVRDKE5hTik7XG4gICAgICAgIGlmIChmbGFncyAhPSBudWxsKSB7XG4gICAgICAgICAgICBleHRlbmQoZ2V0UGFyc2luZ0ZsYWdzKG0pLCBmbGFncyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkudXNlckludmFsaWRhdGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIFBsdWdpbnMgdGhhdCBhZGQgcHJvcGVydGllcyBzaG91bGQgYWxzbyBhZGQgdGhlIGtleSBoZXJlIChudWxsIHZhbHVlKSxcbiAgICAvLyBzbyB3ZSBjYW4gcHJvcGVybHkgY2xvbmUgb3Vyc2VsdmVzLlxuICAgIHZhciBtb21lbnRQcm9wZXJ0aWVzID0gKGhvb2tzLm1vbWVudFByb3BlcnRpZXMgPSBbXSksXG4gICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIGZ1bmN0aW9uIGNvcHlDb25maWcodG8sIGZyb20pIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBwcm9wLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgbW9tZW50UHJvcGVydGllc0xlbiA9IG1vbWVudFByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNBTW9tZW50T2JqZWN0KSkge1xuICAgICAgICAgICAgdG8uX2lzQU1vbWVudE9iamVjdCA9IGZyb20uX2lzQU1vbWVudE9iamVjdDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2kpKSB7XG4gICAgICAgICAgICB0by5faSA9IGZyb20uX2k7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9mKSkge1xuICAgICAgICAgICAgdG8uX2YgPSBmcm9tLl9mO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fbCkpIHtcbiAgICAgICAgICAgIHRvLl9sID0gZnJvbS5fbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX3N0cmljdCkpIHtcbiAgICAgICAgICAgIHRvLl9zdHJpY3QgPSBmcm9tLl9zdHJpY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl90em0pKSB7XG4gICAgICAgICAgICB0by5fdHptID0gZnJvbS5fdHptO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5faXNVVEMpKSB7XG4gICAgICAgICAgICB0by5faXNVVEMgPSBmcm9tLl9pc1VUQztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX29mZnNldCkpIHtcbiAgICAgICAgICAgIHRvLl9vZmZzZXQgPSBmcm9tLl9vZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9wZikpIHtcbiAgICAgICAgICAgIHRvLl9wZiA9IGdldFBhcnNpbmdGbGFncyhmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2xvY2FsZSkpIHtcbiAgICAgICAgICAgIHRvLl9sb2NhbGUgPSBmcm9tLl9sb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9tZW50UHJvcGVydGllc0xlbiA+IDApIHtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtb21lbnRQcm9wZXJ0aWVzTGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gbW9tZW50UHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgICAgICB2YWwgPSBmcm9tW3Byb3BdO1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQodmFsKSkge1xuICAgICAgICAgICAgICAgICAgICB0b1twcm9wXSA9IHZhbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuXG4gICAgLy8gTW9tZW50IHByb3RvdHlwZSBvYmplY3RcbiAgICBmdW5jdGlvbiBNb21lbnQoY29uZmlnKSB7XG4gICAgICAgIGNvcHlDb25maWcodGhpcywgY29uZmlnKTtcbiAgICAgICAgdGhpcy5fZCA9IG5ldyBEYXRlKGNvbmZpZy5fZCAhPSBudWxsID8gY29uZmlnLl9kLmdldFRpbWUoKSA6IE5hTik7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcCBpbiBjYXNlIHVwZGF0ZU9mZnNldCBjcmVhdGVzIG5ldyBtb21lbnRcbiAgICAgICAgLy8gb2JqZWN0cy5cbiAgICAgICAgaWYgKHVwZGF0ZUluUHJvZ3Jlc3MgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIHVwZGF0ZUluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50KG9iaikge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgb2JqIGluc3RhbmNlb2YgTW9tZW50IHx8IChvYmogIT0gbnVsbCAmJiBvYmouX2lzQU1vbWVudE9iamVjdCAhPSBudWxsKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdhcm4obXNnKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAgICAgY29uc29sZS53YXJuXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiAnICsgbXNnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtc2csIGZuKSB7XG4gICAgICAgIHZhciBmaXJzdFRpbWUgPSB0cnVlO1xuXG4gICAgICAgIHJldHVybiBleHRlbmQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyKG51bGwsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZmlyc3RUaW1lKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXSxcbiAgICAgICAgICAgICAgICAgICAgYXJnLFxuICAgICAgICAgICAgICAgICAgICBpLFxuICAgICAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgICAgIGFyZ0xlbiA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFyZ0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1tpXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyArPSAnXFxuWycgKyBpICsgJ10gJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoa2V5IGluIGFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGFyZ3VtZW50c1swXSwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0ga2V5ICsgJzogJyArIGFyZ3VtZW50c1swXVtrZXldICsgJywgJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcuc2xpY2UoMCwgLTIpOyAvLyBSZW1vdmUgdHJhaWxpbmcgY29tbWEgYW5kIHNwYWNlXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHdhcm4oXG4gICAgICAgICAgICAgICAgICAgIG1zZyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuQXJndW1lbnRzOiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3MpLmpvaW4oJycpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdcXG4nICtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBFcnJvcigpLnN0YWNrXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBmaXJzdFRpbWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9LCBmbik7XG4gICAgfVxuXG4gICAgdmFyIGRlcHJlY2F0aW9ucyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gZGVwcmVjYXRlU2ltcGxlKG5hbWUsIG1zZykge1xuICAgICAgICBpZiAoaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyICE9IG51bGwpIHtcbiAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihuYW1lLCBtc2cpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGVwcmVjYXRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICB3YXJuKG1zZyk7XG4gICAgICAgICAgICBkZXByZWNhdGlvbnNbbmFtZV0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3Muc3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzID0gZmFsc2U7XG4gICAgaG9va3MuZGVwcmVjYXRpb25IYW5kbGVyID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGlzRnVuY3Rpb24oaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICh0eXBlb2YgRnVuY3Rpb24gIT09ICd1bmRlZmluZWQnICYmIGlucHV0IGluc3RhbmNlb2YgRnVuY3Rpb24pIHx8XG4gICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaW5wdXQpID09PSAnW29iamVjdCBGdW5jdGlvbl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0KGNvbmZpZykge1xuICAgICAgICB2YXIgcHJvcCwgaTtcbiAgICAgICAgZm9yIChpIGluIGNvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY29uZmlnLCBpKSkge1xuICAgICAgICAgICAgICAgIHByb3AgPSBjb25maWdbaV07XG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocHJvcCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1tpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpc1snXycgKyBpXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2NvbmZpZyA9IGNvbmZpZztcbiAgICAgICAgLy8gTGVuaWVudCBvcmRpbmFsIHBhcnNpbmcgYWNjZXB0cyBqdXN0IGEgbnVtYmVyIGluIGFkZGl0aW9uIHRvXG4gICAgICAgIC8vIG51bWJlciArIChwb3NzaWJseSkgc3R1ZmYgY29taW5nIGZyb20gX2RheU9mTW9udGhPcmRpbmFsUGFyc2UuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSBcIm9yZGluYWxQYXJzZVwiIGZhbGxiYWNrIGluIG5leHQgbWFqb3IgcmVsZWFzZS5cbiAgICAgICAgdGhpcy5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQgPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgKHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2Uuc291cmNlIHx8IHRoaXMuX29yZGluYWxQYXJzZS5zb3VyY2UpICtcbiAgICAgICAgICAgICAgICAnfCcgK1xuICAgICAgICAgICAgICAgIC9cXGR7MSwyfS8uc291cmNlXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY2hpbGRDb25maWcpIHtcbiAgICAgICAgdmFyIHJlcyA9IGV4dGVuZCh7fSwgcGFyZW50Q29uZmlnKSxcbiAgICAgICAgICAgIHByb3A7XG4gICAgICAgIGZvciAocHJvcCBpbiBjaGlsZENvbmZpZykge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzT2JqZWN0KHBhcmVudENvbmZpZ1twcm9wXSkgJiYgaXNPYmplY3QoY2hpbGRDb25maWdbcHJvcF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBwYXJlbnRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgICAgICBleHRlbmQocmVzW3Byb3BdLCBjaGlsZENvbmZpZ1twcm9wXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZENvbmZpZ1twcm9wXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGNoaWxkQ29uZmlnW3Byb3BdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSByZXNbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZvciAocHJvcCBpbiBwYXJlbnRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBoYXNPd25Qcm9wKHBhcmVudENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICAhaGFzT3duUHJvcChjaGlsZENvbmZpZywgcHJvcCkgJiZcbiAgICAgICAgICAgICAgICBpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBtYWtlIHN1cmUgY2hhbmdlcyB0byBwcm9wZXJ0aWVzIGRvbid0IG1vZGlmeSBwYXJlbnQgY29uZmlnXG4gICAgICAgICAgICAgICAgcmVzW3Byb3BdID0gZXh0ZW5kKHt9LCByZXNbcHJvcF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gTG9jYWxlKGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0KGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIga2V5cztcblxuICAgIGlmIChPYmplY3Qua2V5cykge1xuICAgICAgICBrZXlzID0gT2JqZWN0LmtleXM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5cyA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgIHZhciBpLFxuICAgICAgICAgICAgICAgIHJlcyA9IFtdO1xuICAgICAgICAgICAgZm9yIChpIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdENhbGVuZGFyID0ge1xuICAgICAgICBzYW1lRGF5OiAnW1RvZGF5IGF0XSBMVCcsXG4gICAgICAgIG5leHREYXk6ICdbVG9tb3Jyb3cgYXRdIExUJyxcbiAgICAgICAgbmV4dFdlZWs6ICdkZGRkIFthdF0gTFQnLFxuICAgICAgICBsYXN0RGF5OiAnW1llc3RlcmRheSBhdF0gTFQnLFxuICAgICAgICBsYXN0V2VlazogJ1tMYXN0XSBkZGRkIFthdF0gTFQnLFxuICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjYWxlbmRhcihrZXksIG1vbSwgbm93KSB7XG4gICAgICAgIHZhciBvdXRwdXQgPSB0aGlzLl9jYWxlbmRhcltrZXldIHx8IHRoaXMuX2NhbGVuZGFyWydzYW1lRWxzZSddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpID8gb3V0cHV0LmNhbGwobW9tLCBub3cpIDogb3V0cHV0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHplcm9GaWxsKG51bWJlciwgdGFyZ2V0TGVuZ3RoLCBmb3JjZVNpZ24pIHtcbiAgICAgICAgdmFyIGFic051bWJlciA9ICcnICsgTWF0aC5hYnMobnVtYmVyKSxcbiAgICAgICAgICAgIHplcm9zVG9GaWxsID0gdGFyZ2V0TGVuZ3RoIC0gYWJzTnVtYmVyLmxlbmd0aCxcbiAgICAgICAgICAgIHNpZ24gPSBudW1iZXIgPj0gMDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChzaWduID8gKGZvcmNlU2lnbiA/ICcrJyA6ICcnKSA6ICctJykgK1xuICAgICAgICAgICAgTWF0aC5wb3coMTAsIE1hdGgubWF4KDAsIHplcm9zVG9GaWxsKSkudG9TdHJpbmcoKS5zdWJzdHIoMSkgK1xuICAgICAgICAgICAgYWJzTnVtYmVyXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdHRpbmdUb2tlbnMgPVxuICAgICAgICAgICAgLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KFtIaF1tbShzcyk/fE1vfE1NP00/TT98RG98REREb3xERD9EP0Q/fGRkZD9kP3xkbz98d1tvfHddP3xXW298V10/fFFvP3xOezEsNX18WVlZWVlZfFlZWVlZfFlZWVl8WVl8eXsyLDR9fHlvP3xnZyhnZ2c/KT98R0coR0dHPyk/fGV8RXxhfEF8aGg/fEhIP3xraz98bW0/fHNzP3xTezEsOX18eHxYfHp6P3xaWj98LikvZyxcbiAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zID0gLyhcXFtbXlxcW10qXFxdKXwoXFxcXCk/KExUU3xMVHxMTD9MP0w/fGx7MSw0fSkvZyxcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zID0ge30sXG4gICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zID0ge307XG5cbiAgICAvLyB0b2tlbjogICAgJ00nXG4gICAgLy8gcGFkZGVkOiAgIFsnTU0nLCAyXVxuICAgIC8vIG9yZGluYWw6ICAnTW8nXG4gICAgLy8gY2FsbGJhY2s6IGZ1bmN0aW9uICgpIHsgdGhpcy5tb250aCgpICsgMSB9XG4gICAgZnVuY3Rpb24gYWRkRm9ybWF0VG9rZW4odG9rZW4sIHBhZGRlZCwgb3JkaW5hbCwgY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGZ1bmMgPSBjYWxsYmFjaztcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNbY2FsbGJhY2tdKCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2tlbikge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbdG9rZW5dID0gZnVuYztcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFkZGVkKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1twYWRkZWRbMF1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB6ZXJvRmlsbChmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksIHBhZGRlZFsxXSwgcGFkZGVkWzJdKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9yZGluYWwpIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW29yZGluYWxdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5vcmRpbmFsKFxuICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgICAgICAgICAgICAgIHRva2VuXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGlucHV0KSB7XG4gICAgICAgIGlmIChpbnB1dC5tYXRjaCgvXFxbW1xcc1xcU10vKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL15cXFt8XFxdJC9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlucHV0LnJlcGxhY2UoL1xcXFwvZywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpIHtcbiAgICAgICAgdmFyIGFycmF5ID0gZm9ybWF0Lm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIGxlbmd0aDtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsZW5ndGggPSBhcnJheS5sZW5ndGg7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2ldID0gZm9ybWF0VG9rZW5GdW5jdGlvbnNbYXJyYXlbaV1dO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IHJlbW92ZUZvcm1hdHRpbmdUb2tlbnMoYXJyYXlbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChtb20pIHtcbiAgICAgICAgICAgIHZhciBvdXRwdXQgPSAnJyxcbiAgICAgICAgICAgICAgICBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IGlzRnVuY3Rpb24oYXJyYXlbaV0pXG4gICAgICAgICAgICAgICAgICAgID8gYXJyYXlbaV0uY2FsbChtb20sIGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgOiBhcnJheVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gZm9ybWF0IGRhdGUgdXNpbmcgbmF0aXZlIGRhdGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gZm9ybWF0TW9tZW50KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbS5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvcm1hdCA9IGV4cGFuZEZvcm1hdChmb3JtYXQsIG0ubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gPVxuICAgICAgICAgICAgZm9ybWF0RnVuY3Rpb25zW2Zvcm1hdF0gfHwgbWFrZUZvcm1hdEZ1bmN0aW9uKGZvcm1hdCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdKG0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4cGFuZEZvcm1hdChmb3JtYXQsIGxvY2FsZSkge1xuICAgICAgICB2YXIgaSA9IDU7XG5cbiAgICAgICAgZnVuY3Rpb24gcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zKGlucHV0KSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLmxvbmdEYXRlRm9ybWF0KGlucHV0KSB8fCBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy5sYXN0SW5kZXggPSAwO1xuICAgICAgICB3aGlsZSAoaSA+PSAwICYmIGxvY2FsRm9ybWF0dGluZ1Rva2Vucy50ZXN0KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyxcbiAgICAgICAgICAgICAgICByZXBsYWNlTG9uZ0RhdGVGb3JtYXRUb2tlbnNcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb25nRGF0ZUZvcm1hdCA9IHtcbiAgICAgICAgTFRTOiAnaDptbTpzcyBBJyxcbiAgICAgICAgTFQ6ICdoOm1tIEEnLFxuICAgICAgICBMOiAnTU0vREQvWVlZWScsXG4gICAgICAgIExMOiAnTU1NTSBELCBZWVlZJyxcbiAgICAgICAgTExMOiAnTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgICAgIExMTEw6ICdkZGRkLCBNTU1NIEQsIFlZWVkgaDptbSBBJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gbG9uZ0RhdGVGb3JtYXQoa2V5KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldLFxuICAgICAgICAgICAgZm9ybWF0VXBwZXIgPSB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXkudG9VcHBlckNhc2UoKV07XG5cbiAgICAgICAgaWYgKGZvcm1hdCB8fCAhZm9ybWF0VXBwZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldID0gZm9ybWF0VXBwZXJcbiAgICAgICAgICAgIC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAodG9rKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTU1NJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdNTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnREQnIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ2RkZGQnXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0b2s7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9sb25nRGF0ZUZvcm1hdFtrZXldO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0SW52YWxpZERhdGUgPSAnSW52YWxpZCBkYXRlJztcblxuICAgIGZ1bmN0aW9uIGludmFsaWREYXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52YWxpZERhdGU7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRPcmRpbmFsID0gJyVkJyxcbiAgICAgICAgZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UgPSAvXFxkezEsMn0vO1xuXG4gICAgZnVuY3Rpb24gb3JkaW5hbChudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29yZGluYWwucmVwbGFjZSgnJWQnLCBudW1iZXIpO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0UmVsYXRpdmVUaW1lID0ge1xuICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgIHBhc3Q6ICclcyBhZ28nLFxuICAgICAgICBzOiAnYSBmZXcgc2Vjb25kcycsXG4gICAgICAgIHNzOiAnJWQgc2Vjb25kcycsXG4gICAgICAgIG06ICdhIG1pbnV0ZScsXG4gICAgICAgIG1tOiAnJWQgbWludXRlcycsXG4gICAgICAgIGg6ICdhbiBob3VyJyxcbiAgICAgICAgaGg6ICclZCBob3VycycsXG4gICAgICAgIGQ6ICdhIGRheScsXG4gICAgICAgIGRkOiAnJWQgZGF5cycsXG4gICAgICAgIHc6ICdhIHdlZWsnLFxuICAgICAgICB3dzogJyVkIHdlZWtzJyxcbiAgICAgICAgTTogJ2EgbW9udGgnLFxuICAgICAgICBNTTogJyVkIG1vbnRocycsXG4gICAgICAgIHk6ICdhIHllYXInLFxuICAgICAgICB5eTogJyVkIHllYXJzJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fcmVsYXRpdmVUaW1lW3N0cmluZ107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKG91dHB1dClcbiAgICAgICAgICAgID8gb3V0cHV0KG51bWJlciwgd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSlcbiAgICAgICAgICAgIDogb3V0cHV0LnJlcGxhY2UoLyVkL2ksIG51bWJlcik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFzdEZ1dHVyZShkaWZmLCBvdXRwdXQpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHRoaXMuX3JlbGF0aXZlVGltZVtkaWZmID4gMCA/ICdmdXR1cmUnIDogJ3Bhc3QnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24oZm9ybWF0KSA/IGZvcm1hdChvdXRwdXQpIDogZm9ybWF0LnJlcGxhY2UoLyVzL2ksIG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFsaWFzZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRBbGlhcyh1bml0LCBzaG9ydGhhbmQpIHtcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IHVuaXQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgYWxpYXNlc1tsb3dlckNhc2VdID0gYWxpYXNlc1tsb3dlckNhc2UgKyAncyddID0gYWxpYXNlc1tzaG9ydGhhbmRdID0gdW5pdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVVbml0cyh1bml0cykge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHVuaXRzID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgPyBhbGlhc2VzW3VuaXRzXSB8fCBhbGlhc2VzW3VuaXRzLnRvTG93ZXJDYXNlKCldXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBub3JtYWxpemVPYmplY3RVbml0cyhpbnB1dE9iamVjdCkge1xuICAgICAgICB2YXIgbm9ybWFsaXplZElucHV0ID0ge30sXG4gICAgICAgICAgICBub3JtYWxpemVkUHJvcCxcbiAgICAgICAgICAgIHByb3A7XG5cbiAgICAgICAgZm9yIChwcm9wIGluIGlucHV0T2JqZWN0KSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChpbnB1dE9iamVjdCwgcHJvcCkpIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkUHJvcCA9IG5vcm1hbGl6ZVVuaXRzKHByb3ApO1xuICAgICAgICAgICAgICAgIGlmIChub3JtYWxpemVkUHJvcCkge1xuICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkSW5wdXRbbm9ybWFsaXplZFByb3BdID0gaW5wdXRPYmplY3RbcHJvcF07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWRJbnB1dDtcbiAgICB9XG5cbiAgICB2YXIgcHJpb3JpdGllcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkVW5pdFByaW9yaXR5KHVuaXQsIHByaW9yaXR5KSB7XG4gICAgICAgIHByaW9yaXRpZXNbdW5pdF0gPSBwcmlvcml0eTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQcmlvcml0aXplZFVuaXRzKHVuaXRzT2JqKSB7XG4gICAgICAgIHZhciB1bml0cyA9IFtdLFxuICAgICAgICAgICAgdTtcbiAgICAgICAgZm9yICh1IGluIHVuaXRzT2JqKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcCh1bml0c09iaiwgdSkpIHtcbiAgICAgICAgICAgICAgICB1bml0cy5wdXNoKHsgdW5pdDogdSwgcHJpb3JpdHk6IHByaW9yaXRpZXNbdV0gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5O1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVuaXRzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gKHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDApIHx8IHllYXIgJSA0MDAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzRmxvb3IobnVtYmVyKSB7XG4gICAgICAgIGlmIChudW1iZXIgPCAwKSB7XG4gICAgICAgICAgICAvLyAtMCAtPiAwXG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcikgfHwgMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0ludChhcmd1bWVudEZvckNvZXJjaW9uKSB7XG4gICAgICAgIHZhciBjb2VyY2VkTnVtYmVyID0gK2FyZ3VtZW50Rm9yQ29lcmNpb24sXG4gICAgICAgICAgICB2YWx1ZSA9IDA7XG5cbiAgICAgICAgaWYgKGNvZXJjZWROdW1iZXIgIT09IDAgJiYgaXNGaW5pdGUoY29lcmNlZE51bWJlcikpIHtcbiAgICAgICAgICAgIHZhbHVlID0gYWJzRmxvb3IoY29lcmNlZE51bWJlcik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFrZUdldFNldCh1bml0LCBrZWVwVGltZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNldCQxKHRoaXMsIHVuaXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsIHVuaXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldChtb20sIHVuaXQpIHtcbiAgICAgICAgcmV0dXJuIG1vbS5pc1ZhbGlkKClcbiAgICAgICAgICAgID8gbW9tLl9kWydnZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKClcbiAgICAgICAgICAgIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldCQxKG1vbSwgdW5pdCwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG1vbS5pc1ZhbGlkKCkgJiYgIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHVuaXQgPT09ICdGdWxsWWVhcicgJiZcbiAgICAgICAgICAgICAgICBpc0xlYXBZZWFyKG1vbS55ZWFyKCkpICYmXG4gICAgICAgICAgICAgICAgbW9tLm1vbnRoKCkgPT09IDEgJiZcbiAgICAgICAgICAgICAgICBtb20uZGF0ZSgpID09PSAyOVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgbW9tLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoKHZhbHVlLCBtb20ubW9udGgoKSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgdW5pdF0odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc3RyaW5nR2V0KHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ1NldCh1bml0cywgdmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB1bml0cyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHVuaXRzID0gbm9ybWFsaXplT2JqZWN0VW5pdHModW5pdHMpO1xuICAgICAgICAgICAgdmFyIHByaW9yaXRpemVkID0gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0cyksXG4gICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICBwcmlvcml0aXplZExlbiA9IHByaW9yaXRpemVkLmxlbmd0aDtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcmlvcml0aXplZExlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpc1twcmlvcml0aXplZFtpXS51bml0XSh1bml0c1twcmlvcml0aXplZFtpXS51bml0XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHRoaXNbdW5pdHNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW3VuaXRzXSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgdmFyIG1hdGNoMSA9IC9cXGQvLCAvLyAgICAgICAwIC0gOVxuICAgICAgICBtYXRjaDIgPSAvXFxkXFxkLywgLy8gICAgICAwMCAtIDk5XG4gICAgICAgIG1hdGNoMyA9IC9cXGR7M30vLCAvLyAgICAgMDAwIC0gOTk5XG4gICAgICAgIG1hdGNoNCA9IC9cXGR7NH0vLCAvLyAgICAwMDAwIC0gOTk5OVxuICAgICAgICBtYXRjaDYgPSAvWystXT9cXGR7Nn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMiA9IC9cXGRcXGQ/LywgLy8gICAgICAgMCAtIDk5XG4gICAgICAgIG1hdGNoM3RvNCA9IC9cXGRcXGRcXGRcXGQ/LywgLy8gICAgIDk5OSAtIDk5OTlcbiAgICAgICAgbWF0Y2g1dG82ID0gL1xcZFxcZFxcZFxcZFxcZFxcZD8vLCAvLyAgIDk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoMXRvMyA9IC9cXGR7MSwzfS8sIC8vICAgICAgIDAgLSA5OTlcbiAgICAgICAgbWF0Y2gxdG80ID0gL1xcZHsxLDR9LywgLy8gICAgICAgMCAtIDk5OTlcbiAgICAgICAgbWF0Y2gxdG82ID0gL1srLV0/XFxkezEsNn0vLCAvLyAtOTk5OTk5IC0gOTk5OTk5XG4gICAgICAgIG1hdGNoVW5zaWduZWQgPSAvXFxkKy8sIC8vICAgICAgIDAgLSBpbmZcbiAgICAgICAgbWF0Y2hTaWduZWQgPSAvWystXT9cXGQrLywgLy8gICAgLWluZiAtIGluZlxuICAgICAgICBtYXRjaE9mZnNldCA9IC9afFsrLV1cXGRcXGQ6P1xcZFxcZC9naSwgLy8gKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoU2hvcnRPZmZzZXQgPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy9naSwgLy8gKzAwIC0wMCArMDA6MDAgLTAwOjAwICswMDAwIC0wMDAwIG9yIFpcbiAgICAgICAgbWF0Y2hUaW1lc3RhbXAgPSAvWystXT9cXGQrKFxcLlxcZHsxLDN9KT8vLCAvLyAxMjM0NTY3ODkgMTIzNDU2Nzg5LjEyM1xuICAgICAgICAvLyBhbnkgd29yZCAob3IgdHdvKSBjaGFyYWN0ZXJzIG9yIG51bWJlcnMgaW5jbHVkaW5nIHR3by90aHJlZSB3b3JkIG1vbnRoIGluIGFyYWJpYy5cbiAgICAgICAgLy8gaW5jbHVkZXMgc2NvdHRpc2ggZ2FlbGljIHR3byB3b3JkIGFuZCBoeXBoZW5hdGVkIG1vbnRoc1xuICAgICAgICBtYXRjaFdvcmQgPVxuICAgICAgICAgICAgL1swLTldezAsMjU2fVsnYS16XFx1MDBBMC1cXHUwNUZGXFx1MDcwMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRjA3XFx1RkYxMC1cXHVGRkVGXXsxLDI1Nn18W1xcdTA2MDAtXFx1MDZGRlxcL117MSwyNTZ9KFxccyo/W1xcdTA2MDAtXFx1MDZGRl17MSwyNTZ9KXsxLDJ9L2ksXG4gICAgICAgIHJlZ2V4ZXM7XG5cbiAgICByZWdleGVzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRSZWdleFRva2VuKHRva2VuLCByZWdleCwgc3RyaWN0UmVnZXgpIHtcbiAgICAgICAgcmVnZXhlc1t0b2tlbl0gPSBpc0Z1bmN0aW9uKHJlZ2V4KVxuICAgICAgICAgICAgPyByZWdleFxuICAgICAgICAgICAgOiBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZURhdGEpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpc1N0cmljdCAmJiBzdHJpY3RSZWdleCA/IHN0cmljdFJlZ2V4IDogcmVnZXg7XG4gICAgICAgICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UGFyc2VSZWdleEZvclRva2VuKHRva2VuLCBjb25maWcpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHJlZ2V4ZXMsIHRva2VuKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBSZWdFeHAodW5lc2NhcGVGb3JtYXQodG9rZW4pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZWdleGVzW3Rva2VuXShjb25maWcuX3N0cmljdCwgY29uZmlnLl9sb2NhbGUpO1xuICAgIH1cblxuICAgIC8vIENvZGUgZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM1NjE0OTMvaXMtdGhlcmUtYS1yZWdleHAtZXNjYXBlLWZ1bmN0aW9uLWluLWphdmFzY3JpcHRcbiAgICBmdW5jdGlvbiB1bmVzY2FwZUZvcm1hdChzKSB7XG4gICAgICAgIHJldHVybiByZWdleEVzY2FwZShcbiAgICAgICAgICAgIHNcbiAgICAgICAgICAgICAgICAucmVwbGFjZSgnXFxcXCcsICcnKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKFxuICAgICAgICAgICAgICAgICAgICAvXFxcXChcXFspfFxcXFwoXFxdKXxcXFsoW15cXF1cXFtdKilcXF18XFxcXCguKS9nLFxuICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWF0Y2hlZCwgcDEsIHAyLCBwMywgcDQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwMSB8fCBwMiB8fCBwMyB8fCBwNDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWdleEVzY2FwZShzKSB7XG4gICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xuICAgIH1cblxuICAgIHZhciB0b2tlbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFBhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZnVuYyA9IGNhbGxiYWNrLFxuICAgICAgICAgICAgdG9rZW5MZW47XG4gICAgICAgIGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0b2tlbiA9IFt0b2tlbl07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTnVtYmVyKGNhbGxiYWNrKSkge1xuICAgICAgICAgICAgZnVuYyA9IGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBhcnJheVtjYWxsYmFja10gPSB0b0ludChpbnB1dCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW4ubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdG9rZW5MZW47IGkrKykge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2VuW2ldXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRXZWVrUGFyc2VUb2tlbih0b2tlbiwgY2FsbGJhY2spIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgY29uZmlnLl93ID0gY29uZmlnLl93IHx8IHt9O1xuICAgICAgICAgICAgY2FsbGJhY2soaW5wdXQsIGNvbmZpZy5fdywgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBpbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsICYmIGhhc093blByb3AodG9rZW5zLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbl0oaW5wdXQsIGNvbmZpZy5fYSwgY29uZmlnLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgWUVBUiA9IDAsXG4gICAgICAgIE1PTlRIID0gMSxcbiAgICAgICAgREFURSA9IDIsXG4gICAgICAgIEhPVVIgPSAzLFxuICAgICAgICBNSU5VVEUgPSA0LFxuICAgICAgICBTRUNPTkQgPSA1LFxuICAgICAgICBNSUxMSVNFQ09ORCA9IDYsXG4gICAgICAgIFdFRUsgPSA3LFxuICAgICAgICBXRUVLREFZID0gODtcblxuICAgIGZ1bmN0aW9uIG1vZChuLCB4KSB7XG4gICAgICAgIHJldHVybiAoKG4gJSB4KSArIHgpICUgeDtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXhPZjtcblxuICAgIGlmIChBcnJheS5wcm90b3R5cGUuaW5kZXhPZikge1xuICAgICAgICBpbmRleE9mID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5kZXhPZiA9IGZ1bmN0aW9uIChvKSB7XG4gICAgICAgICAgICAvLyBJIGtub3dcbiAgICAgICAgICAgIHZhciBpO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpc1tpXSA9PT0gbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgICAgICAgaWYgKGlzTmFOKHllYXIpIHx8IGlzTmFOKG1vbnRoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbW9kTW9udGggPSBtb2QobW9udGgsIDEyKTtcbiAgICAgICAgeWVhciArPSAobW9udGggLSBtb2RNb250aCkgLyAxMjtcbiAgICAgICAgcmV0dXJuIG1vZE1vbnRoID09PSAxXG4gICAgICAgICAgICA/IGlzTGVhcFllYXIoeWVhcilcbiAgICAgICAgICAgICAgICA/IDI5XG4gICAgICAgICAgICAgICAgOiAyOFxuICAgICAgICAgICAgOiAzMSAtICgobW9kTW9udGggJSA3KSAlIDIpO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNJywgWydNTScsIDJdLCAnTW8nLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoKCkgKyAxO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRoc1Nob3J0KHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTU1NTScsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLm1vbnRocyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtb250aCcsICdNJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtb250aCcsIDgpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignTScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdNTU1NJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5tb250aHNSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTScsICdNTSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9IHRvSW50KGlucHV0KSAtIDE7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnTU1NJywgJ01NTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbW9udGggPSBjb25maWcuX2xvY2FsZS5tb250aHNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGZpbmQgYSBtb250aCBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWQuXG4gICAgICAgIGlmIChtb250aCAhPSBudWxsKSB7XG4gICAgICAgICAgICBhcnJheVtNT05USF0gPSBtb250aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRNb250aCA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1vbnRocyA9XG4gICAgICAgICAgICAnSmFudWFyeV9GZWJydWFyeV9NYXJjaF9BcHJpbF9NYXlfSnVuZV9KdWx5X0F1Z3VzdF9TZXB0ZW1iZXJfT2N0b2Jlcl9Ob3ZlbWJlcl9EZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQgPVxuICAgICAgICAgICAgJ0phbl9GZWJfTWFyX0Fwcl9NYXlfSnVuX0p1bF9BdWdfU2VwX09jdF9Ob3ZfRGVjJy5zcGxpdCgnXycpLFxuICAgICAgICBNT05USFNfSU5fRk9STUFUID0gL0Rbb0RdPyhcXFtbXlxcW1xcXV0qXFxdfFxccykrTU1NTT8vLFxuICAgICAgICBkZWZhdWx0TW9udGhzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1JlZ2V4ID0gbWF0Y2hXb3JkO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzKG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgICAgICA/IHRoaXMuX21vbnRoc1xuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzWydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzKVxuICAgICAgICAgICAgPyB0aGlzLl9tb250aHNbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNbXG4gICAgICAgICAgICAgICAgICAodGhpcy5fbW9udGhzLmlzRm9ybWF0IHx8IE1PTlRIU19JTl9GT1JNQVQpLnRlc3QoZm9ybWF0KVxuICAgICAgICAgICAgICAgICAgICAgID8gJ2Zvcm1hdCdcbiAgICAgICAgICAgICAgICAgICAgICA6ICdzdGFuZGFsb25lJ1xuICAgICAgICAgICAgICBdW20ubW9udGgoKV07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlTW9udGhzU2hvcnQobSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbJ3N0YW5kYWxvbmUnXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHNTaG9ydClcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRbbS5tb250aCgpXVxuICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFtcbiAgICAgICAgICAgICAgICAgIE1PTlRIU19JTl9GT1JNQVQudGVzdChmb3JtYXQpID8gJ2Zvcm1hdCcgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IG1vbnRoTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX21vbnRoc1BhcnNlKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIG5vdCB1c2VkXG4gICAgICAgICAgICB0aGlzLl9tb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7ICsraSkge1xuICAgICAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRoc1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXSA9IHRoaXMubW9udGhzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnTU1NJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0TW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1BhcnNlKG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVTdHJpY3RQYXJzZS5jYWxsKHRoaXMsIG1vbnRoTmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzogYWRkIHNvcnRpbmdcbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlclxuICAgICAgICAvLyBzZWUgc29ydGluZyBpbiBjb21wdXRlTW9udGhzUGFyc2VcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCBpXSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnJykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXN0cmljdCAmJiAhdGhpcy5fbW9udGhzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMubW9udGhzKG1vbSwgJycpICsgJ3xeJyArIHRoaXMubW9udGhzU2hvcnQobW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ01NTScgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fbW9udGhzUGFyc2VbaV0udGVzdChtb250aE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBzZXRNb250aChtb20sIHZhbHVlKSB7XG4gICAgICAgIHZhciBkYXlPZk1vbnRoO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybiBtb207XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaWYgKC9eXFxkKyQvLnRlc3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0b0ludCh2YWx1ZSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gbW9tLmxvY2FsZURhdGEoKS5tb250aHNQYXJzZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogQW5vdGhlciBzaWxlbnQgZmFpbHVyZT9cbiAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGRheU9mTW9udGggPSBNYXRoLm1pbihtb20uZGF0ZSgpLCBkYXlzSW5Nb250aChtb20ueWVhcigpLCB2YWx1ZSkpO1xuICAgICAgICBtb20uX2RbJ3NldCcgKyAobW9tLl9pc1VUQyA/ICdVVEMnIDogJycpICsgJ01vbnRoJ10odmFsdWUsIGRheU9mTW9udGgpO1xuICAgICAgICByZXR1cm4gbW9tO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldE1vbnRoKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzZXRNb250aCh0aGlzLCB2YWx1ZSk7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQodGhpcywgJ01vbnRoJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXREYXlzSW5Nb250aCgpIHtcbiAgICAgICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1Nob3J0UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1Nob3J0UmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1Nob3J0UmVnZXggPSBkZWZhdWx0TW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl9tb250aHNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX21vbnRoc1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlTW9udGhzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfbW9udGhzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gZGVmYXVsdE1vbnRoc1JlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlTW9udGhzUGFyc2UoKSB7XG4gICAgICAgIGZ1bmN0aW9uIGNtcExlblJldihhLCBiKSB7XG4gICAgICAgICAgICByZXR1cm4gYi5sZW5ndGggLSBhLmxlbmd0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb207XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgc2hvcnRQaWVjZXMucHVzaCh0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzKG1vbSwgJycpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSBtb250aCAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIHNob3J0UGllY2VzW2ldID0gcmVnZXhFc2NhcGUoc2hvcnRQaWVjZXNbaV0pO1xuICAgICAgICAgICAgbG9uZ1BpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKGxvbmdQaWVjZXNbaV0pO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNDsgaSsrKSB7XG4gICAgICAgICAgICBtaXhlZFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKG1peGVkUGllY2VzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX21vbnRoc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gdGhpcy5fbW9udGhzUmVnZXg7XG4gICAgICAgIHRoaXMuX21vbnRoc1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl9tb250aHNTaG9ydFN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBzaG9ydFBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignWScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHkgPSB0aGlzLnllYXIoKTtcbiAgICAgICAgcmV0dXJuIHkgPD0gOTk5OSA/IHplcm9GaWxsKHksIDQpIDogJysnICsgeTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVknLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVknLCA0XSwgMCwgJ3llYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZWVlZJywgNV0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWVknLCA2LCB0cnVlXSwgMCwgJ3llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygneWVhcicsICd5Jyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1knLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVknLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWScsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWScsIG1hdGNoMXRvNiwgbWF0Y2g2KTtcbiAgICBhZGRSZWdleFRva2VuKCdZWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnWVlZWVknLCAnWVlZWVlZJ10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1lZWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID1cbiAgICAgICAgICAgIGlucHV0Lmxlbmd0aCA9PT0gMiA/IGhvb2tzLnBhcnNlVHdvRGlnaXRZZWFyKGlucHV0KSA6IHRvSW50KGlucHV0KTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbWUVBUl0gPSBwYXJzZUludChpbnB1dCwgMTApO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gICAgICAgIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xuICAgIH1cblxuICAgIC8vIEhPT0tTXG5cbiAgICBob29rcy5wYXJzZVR3b0RpZ2l0WWVhciA9IGZ1bmN0aW9uIChpbnB1dCkge1xuICAgICAgICByZXR1cm4gdG9JbnQoaW5wdXQpICsgKHRvSW50KGlucHV0KSA+IDY4ID8gMTkwMCA6IDIwMDApO1xuICAgIH07XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0WWVhciA9IG1ha2VHZXRTZXQoJ0Z1bGxZZWFyJywgdHJ1ZSk7XG5cbiAgICBmdW5jdGlvbiBnZXRJc0xlYXBZZWFyKCkge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih0aGlzLnllYXIoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGF0ZSh5LCBtLCBkLCBoLCBNLCBzLCBtcykge1xuICAgICAgICAvLyBjYW4ndCBqdXN0IGFwcGx5KCkgdG8gY3JlYXRlIGEgZGF0ZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xLzE4MTM0OFxuICAgICAgICB2YXIgZGF0ZTtcbiAgICAgICAgLy8gdGhlIGRhdGUgY29uc3RydWN0b3IgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZSh5ICsgNDAwLCBtLCBkLCBoLCBNLCBzLCBtcyk7XG4gICAgICAgICAgICBpZiAoaXNGaW5pdGUoZGF0ZS5nZXRGdWxsWWVhcigpKSkge1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDRGF0ZSh5KSB7XG4gICAgICAgIHZhciBkYXRlLCBhcmdzO1xuICAgICAgICAvLyB0aGUgRGF0ZS5VVEMgZnVuY3Rpb24gcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgYXJnc1swXSA9IHkgKyA0MDA7XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoRGF0ZS5VVEMuYXBwbHkobnVsbCwgYXJncykpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgfVxuXG4gICAgLy8gc3RhcnQtb2YtZmlyc3Qtd2VlayAtIHN0YXJ0LW9mLXllYXJcbiAgICBmdW5jdGlvbiBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIC8vIGZpcnN0LXdlZWsgZGF5IC0tIHdoaWNoIGphbnVhcnkgaXMgYWx3YXlzIGluIHRoZSBmaXJzdCB3ZWVrICg0IGZvciBpc28sIDEgZm9yIG90aGVyKVxuICAgICAgICAgICAgZndkID0gNyArIGRvdyAtIGRveSxcbiAgICAgICAgICAgIC8vIGZpcnN0LXdlZWsgZGF5IGxvY2FsIHdlZWtkYXkgLS0gd2hpY2ggbG9jYWwgd2Vla2RheSBpcyBmd2RcbiAgICAgICAgICAgIGZ3ZGx3ID0gKDcgKyBjcmVhdGVVVENEYXRlKHllYXIsIDAsIGZ3ZCkuZ2V0VVRDRGF5KCkgLSBkb3cpICUgNztcblxuICAgICAgICByZXR1cm4gLWZ3ZGx3ICsgZndkIC0gMTtcbiAgICB9XG5cbiAgICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fd2Vla19kYXRlI0NhbGN1bGF0aW5nX2FfZGF0ZV9naXZlbl90aGVfeWVhci4yQ193ZWVrX251bWJlcl9hbmRfd2Vla2RheVxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrcyh5ZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgbG9jYWxXZWVrZGF5ID0gKDcgKyB3ZWVrZGF5IC0gZG93KSAlIDcsXG4gICAgICAgICAgICB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIGRheU9mWWVhciA9IDEgKyA3ICogKHdlZWsgLSAxKSArIGxvY2FsV2Vla2RheSArIHdlZWtPZmZzZXQsXG4gICAgICAgICAgICByZXNZZWFyLFxuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyO1xuXG4gICAgICAgIGlmIChkYXlPZlllYXIgPD0gMCkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgLSAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5c0luWWVhcihyZXNZZWFyKSArIGRheU9mWWVhcjtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlPZlllYXIgPiBkYXlzSW5ZZWFyKHllYXIpKSB7XG4gICAgICAgICAgICByZXNZZWFyID0geWVhciArIDE7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXIgLSBkYXlzSW5ZZWFyKHllYXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXI7XG4gICAgICAgICAgICByZXNEYXlPZlllYXIgPSBkYXlPZlllYXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeWVhcjogcmVzWWVhcixcbiAgICAgICAgICAgIGRheU9mWWVhcjogcmVzRGF5T2ZZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtPZlllYXIobW9tLCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldChtb20ueWVhcigpLCBkb3csIGRveSksXG4gICAgICAgICAgICB3ZWVrID0gTWF0aC5mbG9vcigobW9tLmRheU9mWWVhcigpIC0gd2Vla09mZnNldCAtIDEpIC8gNykgKyAxLFxuICAgICAgICAgICAgcmVzV2VlayxcbiAgICAgICAgICAgIHJlc1llYXI7XG5cbiAgICAgICAgaWYgKHdlZWsgPCAxKSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSAtIDE7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayArIHdlZWtzSW5ZZWFyKHJlc1llYXIsIGRvdywgZG95KTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrID4gd2Vla3NJblllYXIobW9tLnllYXIoKSwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICByZXNXZWVrID0gd2VlayAtIHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KTtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpICsgMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSBtb20ueWVhcigpO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2VlazogcmVzV2VlayxcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla3NJblllYXIoeWVhciwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2Vla09mZnNldE5leHQgPSBmaXJzdFdlZWtPZmZzZXQoeWVhciArIDEsIGRvdywgZG95KTtcbiAgICAgICAgcmV0dXJuIChkYXlzSW5ZZWFyKHllYXIpIC0gd2Vla09mZnNldCArIHdlZWtPZmZzZXROZXh0KSAvIDc7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3cnLCBbJ3d3JywgMl0sICd3bycsICd3ZWVrJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ1cnLCBbJ1dXJywgMl0sICdXbycsICdpc29XZWVrJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWsnLCAndycpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2VlaycsICdXJyk7XG5cbiAgICAvLyBQUklPUklUSUVTXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWsnLCA1KTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWsnLCA1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3d3JywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1cnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1dXJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsndycsICd3dycsICdXJywgJ1dXJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMSldID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIC8vIExPQ0FMRVNcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWsobW9tKSB7XG4gICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKG1vbSwgdGhpcy5fd2Vlay5kb3csIHRoaXMuX3dlZWsuZG95KS53ZWVrO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9jYWxlV2VlayA9IHtcbiAgICAgICAgZG93OiAwLCAvLyBTdW5kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgZG95OiA2LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA2dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZXZWVrKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRmlyc3REYXlPZlllYXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl93ZWVrLmRveTtcbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gdGhpcy5sb2NhbGVEYXRhKCkud2Vlayh0aGlzKTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyB3ZWVrIDogdGhpcy5hZGQoKGlucHV0IC0gd2VlaykgKiA3LCAnZCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldElTT1dlZWsoaW5wdXQpIHtcbiAgICAgICAgdmFyIHdlZWsgPSB3ZWVrT2ZZZWFyKHRoaXMsIDEsIDQpLndlZWs7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignZCcsIDAsICdkbycsICdkYXknKTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzTWluKHRoaXMsIGZvcm1hdCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5cyh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2UnLCAwLCAwLCAnd2Vla2RheScpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdFJywgMCwgMCwgJ2lzb1dlZWtkYXknKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5JywgJ2QnKTtcbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtkYXknLCAnZScpO1xuICAgIGFkZFVuaXRBbGlhcygnaXNvV2Vla2RheScsICdFJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5JywgMTEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtkYXknLCAxMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdkJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdlJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdFJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNNaW5SZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1Nob3J0UmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydkZCcsICdkZGQnLCAnZGRkZCddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIHdlZWtkYXkgPSBjb25maWcuX2xvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0LCB0b2tlbiwgY29uZmlnLl9zdHJpY3QpO1xuICAgICAgICAvLyBpZiB3ZSBkaWRuJ3QgZ2V0IGEgd2Vla2RheSBuYW1lLCBtYXJrIHRoZSBkYXRlIGFzIGludmFsaWRcbiAgICAgICAgaWYgKHdlZWtkYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgd2Vlay5kID0gd2Vla2RheTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRXZWVrZGF5ID0gaW5wdXQ7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZCcsICdlJywgJ0UnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgZnVuY3Rpb24gcGFyc2VXZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNOYU4oaW5wdXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlucHV0ID0gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpO1xuICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VJc29XZWVrZGF5KGlucHV0LCBsb2NhbGUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCkgJSA3IHx8IDc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzTmFOKGlucHV0KSA/IG51bGwgOiBpbnB1dDtcbiAgICB9XG5cbiAgICAvLyBMT0NBTEVTXG4gICAgZnVuY3Rpb24gc2hpZnRXZWVrZGF5cyh3cywgbikge1xuICAgICAgICByZXR1cm4gd3Muc2xpY2UobiwgNykuY29uY2F0KHdzLnNsaWNlKDAsIG4pKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWtkYXlzID1cbiAgICAgICAgICAgICdTdW5kYXlfTW9uZGF5X1R1ZXNkYXlfV2VkbmVzZGF5X1RodXJzZGF5X0ZyaWRheV9TYXR1cmRheScuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQgPSAnU3VuX01vbl9UdWVfV2VkX1RodV9GcmlfU2F0Jy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4gPSAnU3VfTW9fVHVfV2VfVGhfRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRXZWVrZGF5c1JlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4ID0gbWF0Y2hXb3JkLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNNaW5SZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzKG0sIGZvcm1hdCkge1xuICAgICAgICB2YXIgd2Vla2RheXMgPSBpc0FycmF5KHRoaXMuX3dlZWtkYXlzKVxuICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1xuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1tcbiAgICAgICAgICAgICAgICAgIG0gJiYgbSAhPT0gdHJ1ZSAmJiB0aGlzLl93ZWVrZGF5cy5pc0Zvcm1hdC50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh3ZWVrZGF5cywgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gd2Vla2RheXNbbS5kYXkoKV1cbiAgICAgICAgICAgIDogd2Vla2RheXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNTaG9ydChtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNTaG9ydCwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFttLmRheSgpXVxuICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzTWluKG0pIHtcbiAgICAgICAgcmV0dXJuIG0gPT09IHRydWVcbiAgICAgICAgICAgID8gc2hpZnRXZWVrZGF5cyh0aGlzLl93ZWVrZGF5c01pbiwgdGhpcy5fd2Vlay5kb3cpXG4gICAgICAgICAgICA6IG1cbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5bbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFuZGxlU3RyaWN0UGFyc2UkMSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBpaSxcbiAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgIGxsYyA9IHdlZWtkYXlOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgIGlmICghdGhpcy5fd2Vla2RheXNQYXJzZSkge1xuICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNNaW4oXG4gICAgICAgICAgICAgICAgICAgIG1vbSxcbiAgICAgICAgICAgICAgICAgICAgJydcbiAgICAgICAgICAgICAgICApLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5c1Nob3J0KFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzKG1vbSwgJycpLnRvTG9jYWxlTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RyaWN0KSB7XG4gICAgICAgICAgICBpZiAoZm9ybWF0ID09PSAnZGRkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gJ2RkZCcpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c1BhcnNlKHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSwgbW9tLCByZWdleDtcblxuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UkMS5jYWxsKHRoaXMsIHdlZWtkYXlOYW1lLCBmb3JtYXQsIHN0cmljdCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuXG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIDFdKS5kYXkoaSk7XG4gICAgICAgICAgICBpZiAoc3RyaWN0ICYmICF0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5cyhtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpLnJlcGxhY2UoJy4nLCAnXFxcXC4/JykgKyAnJCcsXG4gICAgICAgICAgICAgICAgICAgICdpJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICByZWdleCA9XG4gICAgICAgICAgICAgICAgICAgICdeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXMobW9tLCAnJykgK1xuICAgICAgICAgICAgICAgICAgICAnfF4nICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNNaW4obW9tLCAnJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAocmVnZXgucmVwbGFjZSgnLicsICcnKSwgJ2knKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHRlc3QgdGhlIHJlZ2V4XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGRkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZCcgJiZcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIXN0cmljdCAmJiB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXkgPSB0aGlzLl9pc1VUQyA/IHRoaXMuX2QuZ2V0VVRDRGF5KCkgOiB0aGlzLl9kLmdldERheSgpO1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaW5wdXQgPSBwYXJzZVdlZWtkYXkoaW5wdXQsIHRoaXMubG9jYWxlRGF0YSgpKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChpbnB1dCAtIGRheSwgJ2QnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBkYXk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRMb2NhbGVEYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gKHRoaXMuZGF5KCkgKyA3IC0gdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93KSAlIDc7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2Vla2RheSA6IHRoaXMuYWRkKGlucHV0IC0gd2Vla2RheSwgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09EYXlPZldlZWsoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmVoYXZlcyB0aGUgc2FtZSBhcyBtb21lbnQjZGF5IGV4Y2VwdFxuICAgICAgICAvLyBhcyBhIGdldHRlciwgcmV0dXJucyA3IGluc3RlYWQgb2YgMCAoMS03IHJhbmdlIGluc3RlYWQgb2YgMC02KVxuICAgICAgICAvLyBhcyBhIHNldHRlciwgc3VuZGF5IHNob3VsZCBiZWxvbmcgdG8gdGhlIHByZXZpb3VzIHdlZWsuXG5cbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciB3ZWVrZGF5ID0gcGFyc2VJc29XZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXkodGhpcy5kYXkoKSAlIDcgPyB3ZWVrZGF5IDogd2Vla2RheSAtIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KCkgfHwgNztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZVdlZWtkYXlzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1N0cmljdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBkZWZhdWx0V2Vla2RheXNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ICYmIGlzU3RyaWN0XG4gICAgICAgICAgICAgICAgPyB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSBkZWZhdWx0V2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4XG4gICAgICAgICAgICAgICAgOiB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c01pblJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c01pblJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNNaW5TdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNNaW5SZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVXZWVrZGF5c1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbWluUGllY2VzID0gW10sXG4gICAgICAgICAgICBzaG9ydFBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbG9uZ1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBtaW5wLFxuICAgICAgICAgICAgc2hvcnRwLFxuICAgICAgICAgICAgbG9uZ3A7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIC8vIG1ha2UgdGhlIHJlZ2V4IGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeVxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgbWlucCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNNaW4obW9tLCAnJykpO1xuICAgICAgICAgICAgc2hvcnRwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5c1Nob3J0KG1vbSwgJycpKTtcbiAgICAgICAgICAgIGxvbmdwID0gcmVnZXhFc2NhcGUodGhpcy53ZWVrZGF5cyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaW5QaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKG1pbnApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChzaG9ydHApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChsb25ncCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gU29ydGluZyBtYWtlcyBzdXJlIGlmIG9uZSB3ZWVrZGF5IChvciBhYmJyKSBpcyBhIHByZWZpeCBvZiBhbm90aGVyIGl0XG4gICAgICAgIC8vIHdpbGwgbWF0Y2ggdGhlIGxvbmdlciBwaWVjZS5cbiAgICAgICAgbWluUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgc2hvcnRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBsb25nUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbWl4ZWRQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleCA9IHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluUmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuXG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIGxvbmdQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG1pblBpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBoRm9ybWF0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5ob3VycygpICUgMTIgfHwgMTI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24ga0Zvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSB8fCAyNDtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignSCcsIFsnSEgnLCAyXSwgMCwgJ2hvdXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignaCcsIFsnaGgnLCAyXSwgMCwgaEZvcm1hdCk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2snLCBbJ2trJywgMl0sIDAsIGtGb3JtYXQpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgaEZvcm1hdC5hcHBseSh0aGlzKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIGhGb3JtYXQuYXBwbHkodGhpcykgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMuc2Vjb25kcygpLCAyKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbScsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICcnICsgdGhpcy5ob3VycygpICsgemVyb0ZpbGwodGhpcy5taW51dGVzKCksIDIpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0htbXNzJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgJycgK1xuICAgICAgICAgICAgdGhpcy5ob3VycygpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtKHRva2VuLCBsb3dlcmNhc2UpIHtcbiAgICAgICAgYWRkRm9ybWF0VG9rZW4odG9rZW4sIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tZXJpZGllbShcbiAgICAgICAgICAgICAgICB0aGlzLmhvdXJzKCksXG4gICAgICAgICAgICAgICAgdGhpcy5taW51dGVzKCksXG4gICAgICAgICAgICAgICAgbG93ZXJjYXNlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBtZXJpZGllbSgnYScsIHRydWUpO1xuICAgIG1lcmlkaWVtKCdBJywgZmFsc2UpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdob3VyJywgJ2gnKTtcblxuICAgIC8vIFBSSU9SSVRZXG4gICAgYWRkVW5pdFByaW9yaXR5KCdob3VyJywgMTMpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgZnVuY3Rpb24gbWF0Y2hNZXJpZGllbShpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuX21lcmlkaWVtUGFyc2U7XG4gICAgfVxuXG4gICAgYWRkUmVnZXhUb2tlbignYScsIG1hdGNoTWVyaWRpZW0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdIJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdoJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdrJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdISCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdoaCcsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdraycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignaG1tc3MnLCBtYXRjaDV0bzYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbScsIG1hdGNoM3RvNCk7XG4gICAgYWRkUmVnZXhUb2tlbignSG1tc3MnLCBtYXRjaDV0bzYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ0gnLCAnSEgnXSwgSE9VUik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2snLCAna2snXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBrSW5wdXQgPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGFycmF5W0hPVVJdID0ga0lucHV0ID09PSAyNCA/IDAgOiBrSW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2EnLCAnQSddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9pc1BtID0gY29uZmlnLl9sb2NhbGUuaXNQTShpbnB1dCk7XG4gICAgICAgIGNvbmZpZy5fbWVyaWRpZW0gPSBpbnB1dDtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnaCcsICdoaCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ2htbXNzJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MxID0gaW5wdXQubGVuZ3RoIC0gNCxcbiAgICAgICAgICAgIHBvczIgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MxKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMSwgMikpO1xuICAgICAgICBhcnJheVtTRUNPTkRdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczIpKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHRydWU7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIHZhciBwb3MgPSBpbnB1dC5sZW5ndGggLSAyO1xuICAgICAgICBhcnJheVtIT1VSXSA9IHRvSW50KGlucHV0LnN1YnN0cigwLCBwb3MpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MpKTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdIbW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgfSk7XG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVJc1BNKGlucHV0KSB7XG4gICAgICAgIC8vIElFOCBRdWlya3MgTW9kZSAmIElFNyBTdGFuZGFyZHMgTW9kZSBkbyBub3QgYWxsb3cgYWNjZXNzaW5nIHN0cmluZ3MgbGlrZSBhcnJheXNcbiAgICAgICAgLy8gVXNpbmcgY2hhckF0IHNob3VsZCBiZSBtb3JlIGNvbXBhdGlibGUuXG4gICAgICAgIHJldHVybiAoaW5wdXQgKyAnJykudG9Mb3dlckNhc2UoKS5jaGFyQXQoMCkgPT09ICdwJztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UgPSAvW2FwXVxcLj9tP1xcLj8vaSxcbiAgICAgICAgLy8gU2V0dGluZyB0aGUgaG91ciBzaG91bGQga2VlcCB0aGUgdGltZSwgYmVjYXVzZSB0aGUgdXNlciBleHBsaWNpdGx5XG4gICAgICAgIC8vIHNwZWNpZmllZCB3aGljaCBob3VyIHRoZXkgd2FudC4gU28gdHJ5aW5nIHRvIG1haW50YWluIHRoZSBzYW1lIGhvdXIgKGluXG4gICAgICAgIC8vIGEgbmV3IHRpbWV6b25lKSBtYWtlcyBzZW5zZS4gQWRkaW5nL3N1YnRyYWN0aW5nIGhvdXJzIGRvZXMgbm90IGZvbGxvd1xuICAgICAgICAvLyB0aGlzIHJ1bGUuXG4gICAgICAgIGdldFNldEhvdXIgPSBtYWtlR2V0U2V0KCdIb3VycycsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlTWVyaWRpZW0oaG91cnMsIG1pbnV0ZXMsIGlzTG93ZXIpIHtcbiAgICAgICAgaWYgKGhvdXJzID4gMTEpIHtcbiAgICAgICAgICAgIHJldHVybiBpc0xvd2VyID8gJ3BtJyA6ICdQTSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdhbScgOiAnQU0nO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGJhc2VDb25maWcgPSB7XG4gICAgICAgIGNhbGVuZGFyOiBkZWZhdWx0Q2FsZW5kYXIsXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQsXG4gICAgICAgIGludmFsaWREYXRlOiBkZWZhdWx0SW52YWxpZERhdGUsXG4gICAgICAgIG9yZGluYWw6IGRlZmF1bHRPcmRpbmFsLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiBkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiBkZWZhdWx0UmVsYXRpdmVUaW1lLFxuXG4gICAgICAgIG1vbnRoczogZGVmYXVsdExvY2FsZU1vbnRocyxcbiAgICAgICAgbW9udGhzU2hvcnQ6IGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCxcblxuICAgICAgICB3ZWVrOiBkZWZhdWx0TG9jYWxlV2VlayxcblxuICAgICAgICB3ZWVrZGF5czogZGVmYXVsdExvY2FsZVdlZWtkYXlzLFxuICAgICAgICB3ZWVrZGF5c01pbjogZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCxcblxuICAgICAgICBtZXJpZGllbVBhcnNlOiBkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSxcbiAgICB9O1xuXG4gICAgLy8gaW50ZXJuYWwgc3RvcmFnZSBmb3IgbG9jYWxlIGNvbmZpZyBmaWxlc1xuICAgIHZhciBsb2NhbGVzID0ge30sXG4gICAgICAgIGxvY2FsZUZhbWlsaWVzID0ge30sXG4gICAgICAgIGdsb2JhbExvY2FsZTtcblxuICAgIGZ1bmN0aW9uIGNvbW1vblByZWZpeChhcnIxLCBhcnIyKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbWlubCA9IE1hdGgubWluKGFycjEubGVuZ3RoLCBhcnIyLmxlbmd0aCk7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBtaW5sOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGlmIChhcnIxW2ldICE9PSBhcnIyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbmw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlKGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID8ga2V5LnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnXycsICctJykgOiBrZXk7XG4gICAgfVxuXG4gICAgLy8gcGljayB0aGUgbG9jYWxlIGZyb20gdGhlIGFycmF5XG4gICAgLy8gdHJ5IFsnZW4tYXUnLCAnZW4tZ2InXSBhcyAnZW4tYXUnLCAnZW4tZ2InLCAnZW4nLCBhcyBpbiBtb3ZlIHRocm91Z2ggdGhlIGxpc3QgdHJ5aW5nIGVhY2hcbiAgICAvLyBzdWJzdHJpbmcgZnJvbSBtb3N0IHNwZWNpZmljIHRvIGxlYXN0LCBidXQgbW92ZSB0byB0aGUgbmV4dCBhcnJheSBpdGVtIGlmIGl0J3MgYSBtb3JlIHNwZWNpZmljIHZhcmlhbnQgdGhhbiB0aGUgY3VycmVudCByb290XG4gICAgZnVuY3Rpb24gY2hvb3NlTG9jYWxlKG5hbWVzKSB7XG4gICAgICAgIHZhciBpID0gMCxcbiAgICAgICAgICAgIGosXG4gICAgICAgICAgICBuZXh0LFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgc3BsaXQ7XG5cbiAgICAgICAgd2hpbGUgKGkgPCBuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHNwbGl0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2ldKS5zcGxpdCgnLScpO1xuICAgICAgICAgICAgaiA9IHNwbGl0Lmxlbmd0aDtcbiAgICAgICAgICAgIG5leHQgPSBub3JtYWxpemVMb2NhbGUobmFtZXNbaSArIDFdKTtcbiAgICAgICAgICAgIG5leHQgPSBuZXh0ID8gbmV4dC5zcGxpdCgnLScpIDogbnVsbDtcbiAgICAgICAgICAgIHdoaWxlIChqID4gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoc3BsaXQuc2xpY2UoMCwgaikuam9pbignLScpKTtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgbmV4dCAmJlxuICAgICAgICAgICAgICAgICAgICBuZXh0Lmxlbmd0aCA+PSBqICYmXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vblByZWZpeChzcGxpdCwgbmV4dCkgPj0gaiAtIDFcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgLy90aGUgbmV4dCBhcnJheSBpdGVtIGlzIGJldHRlciB0aGFuIGEgc2hhbGxvd2VyIHN1YnN0cmluZyBvZiB0aGlzIG9uZVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgai0tO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaSsrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbGVOYW1lU2FuZShuYW1lKSB7XG4gICAgICAgIC8vIFByZXZlbnQgbmFtZXMgdGhhdCBsb29rIGxpa2UgZmlsZXN5c3RlbSBwYXRocywgaS5lIGNvbnRhaW4gJy8nIG9yICdcXCdcbiAgICAgICAgcmV0dXJuIG5hbWUubWF0Y2goJ15bXi9cXFxcXFxcXF0qJCcpICE9IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9hZExvY2FsZShuYW1lKSB7XG4gICAgICAgIHZhciBvbGRMb2NhbGUgPSBudWxsLFxuICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmU7XG4gICAgICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHJlZ2lzdGVyIGFuZCBsb2FkIGFsbCB0aGUgbG9jYWxlcyBpbiBOb2RlXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIG1vZHVsZSAmJlxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgJiZcbiAgICAgICAgICAgIGlzTG9jYWxlTmFtZVNhbmUobmFtZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIG9sZExvY2FsZSA9IGdsb2JhbExvY2FsZS5fYWJicjtcbiAgICAgICAgICAgICAgICBhbGlhc2VkUmVxdWlyZSA9IHJlcXVpcmU7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUoJy4vbG9jYWxlLycgKyBuYW1lKTtcbiAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUob2xkTG9jYWxlKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAvLyBtYXJrIGFzIG5vdCBmb3VuZCB0byBhdm9pZCByZXBlYXRpbmcgZXhwZW5zaXZlIGZpbGUgcmVxdWlyZSBjYWxsIGNhdXNpbmcgaGlnaCBDUFVcbiAgICAgICAgICAgICAgICAvLyB3aGVuIHRyeWluZyB0byBmaW5kIGVuLVVTLCBlbl9VUywgZW4tdXMgZm9yIGV2ZXJ5IGZvcm1hdCBjYWxsXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IG51bGw7IC8vIG51bGwgbWVhbnMgbm90IGZvdW5kXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGxvYWQgbG9jYWxlIGFuZCB0aGVuIHNldCB0aGUgZ2xvYmFsIGxvY2FsZS4gIElmXG4gICAgLy8gbm8gYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4sIGl0IHdpbGwgc2ltcGx5IHJldHVybiB0aGUgY3VycmVudCBnbG9iYWxcbiAgICAvLyBsb2NhbGUga2V5LlxuICAgIGZ1bmN0aW9uIGdldFNldEdsb2JhbExvY2FsZShrZXksIHZhbHVlcykge1xuICAgICAgICB2YXIgZGF0YTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkZWZpbmVMb2NhbGUoa2V5LCB2YWx1ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgICAgICAgIC8vIG1vbWVudC5kdXJhdGlvbi5fbG9jYWxlID0gbW9tZW50Ll9sb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgICAgIGdsb2JhbExvY2FsZSA9IGRhdGE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vd2FybiB1c2VyIGlmIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGJ1dCB0aGUgbG9jYWxlIGNvdWxkIG5vdCBiZSBzZXRcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0xvY2FsZSAnICsga2V5ICsgJyBub3QgZm91bmQuIERpZCB5b3UgZm9yZ2V0IHRvIGxvYWQgaXQ/J1xuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGVmaW5lTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgbG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG4gICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICAnZGVmaW5lTG9jYWxlT3ZlcnJpZGUnLFxuICAgICAgICAgICAgICAgICAgICAndXNlIG1vbWVudC51cGRhdGVMb2NhbGUobG9jYWxlTmFtZSwgY29uZmlnKSB0byBjaGFuZ2UgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnYW4gZXhpc3RpbmcgbG9jYWxlLiBtb21lbnQuZGVmaW5lTG9jYWxlKGxvY2FsZU5hbWUsICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbmZpZykgc2hvdWxkIG9ubHkgYmUgdXNlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1NlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RlZmluZS1sb2NhbGUvIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gbG9jYWxlc1tuYW1lXS5fY29uZmlnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobG9jYWxlc1tjb25maWcucGFyZW50TG9jYWxlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0uX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKGNvbmZpZy5wYXJlbnRMb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZS5fY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsZUZhbWlsaWVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXS5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZzogY29uZmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBuZXcgTG9jYWxlKG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZykpO1xuXG4gICAgICAgICAgICBpZiAobG9jYWxlRmFtaWxpZXNbbmFtZV0pIHtcbiAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICAgICAgICAgIGRlZmluZUxvY2FsZSh4Lm5hbWUsIHguY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICAvLyBtYWtlIHN1cmUgd2Ugc2V0IHRoZSBsb2NhbGUgQUZURVIgYWxsIGNoaWxkIGxvY2FsZXMgaGF2ZSBiZWVuXG4gICAgICAgICAgICAvLyBjcmVhdGVkLCBzbyB3ZSB3b24ndCBlbmQgdXAgd2l0aCB0aGUgY2hpbGQgbG9jYWxlIHNldC5cbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB1c2VmdWwgZm9yIHRlc3RpbmdcbiAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVMb2NhbGUobmFtZSwgY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgIT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUsXG4gICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gYmFzZUNvbmZpZztcblxuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCAmJiBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIGNoaWxkIGxvY2FsZSBpbi1wbGFjZSB0byBhdm9pZCBtZW1vcnktbGVha3NcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdLnNldChtZXJnZUNvbmZpZ3MobG9jYWxlc1tuYW1lXS5fY29uZmlnLCBjb25maWcpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gTUVSR0VcbiAgICAgICAgICAgICAgICB0bXBMb2NhbGUgPSBsb2FkTG9jYWxlKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0bXBMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSB0bXBMb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uZmlnID0gbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gdXBkYXRlTG9jYWxlIGlzIGNhbGxlZCBmb3IgY3JlYXRpbmcgYSBuZXcgbG9jYWxlXG4gICAgICAgICAgICAgICAgICAgIC8vIFNldCBhYmJyIHNvIGl0IHdpbGwgaGF2ZSBhIG5hbWUgKGdldHRlcnMgcmV0dXJuXG4gICAgICAgICAgICAgICAgICAgIC8vIHVuZGVmaW5lZCBvdGhlcndpc2UpLlxuICAgICAgICAgICAgICAgICAgICBjb25maWcuYWJiciA9IG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxvY2FsZSA9IG5ldyBMb2NhbGUoY29uZmlnKTtcbiAgICAgICAgICAgICAgICBsb2NhbGUucGFyZW50TG9jYWxlID0gbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbG9jYWxlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBiYWNrd2FyZHMgY29tcGF0IGZvciBub3c6IGFsc28gc2V0IHRoZSBsb2NhbGVcbiAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHBhc3MgbnVsbCBmb3IgY29uZmlnIHRvIHVudXBkYXRlLCB1c2VmdWwgZm9yIHRlc3RzXG4gICAgICAgICAgICBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZXNbbmFtZV0ucGFyZW50TG9jYWxlO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZ2V0U2V0R2xvYmFsTG9jYWxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldFNldEdsb2JhbExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYWxlc1tuYW1lXSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBsb2NhbGVzW25hbWVdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbG9jYWxlc1tuYW1lXTtcbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIGxvY2FsZSBkYXRhXG4gICAgZnVuY3Rpb24gZ2V0TG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbG9jYWxlO1xuXG4gICAgICAgIGlmIChrZXkgJiYga2V5Ll9sb2NhbGUgJiYga2V5Ll9sb2NhbGUuX2FiYnIpIHtcbiAgICAgICAgICAgIGtleSA9IGtleS5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiBnbG9iYWxMb2NhbGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAgLy9zaG9ydC1jaXJjdWl0IGV2ZXJ5dGhpbmcgZWxzZVxuICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrZXkgPSBba2V5XTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaG9vc2VMb2NhbGUoa2V5KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TG9jYWxlcygpIHtcbiAgICAgICAgcmV0dXJuIGtleXMobG9jYWxlcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tPdmVyZmxvdyhtKSB7XG4gICAgICAgIHZhciBvdmVyZmxvdyxcbiAgICAgICAgICAgIGEgPSBtLl9hO1xuXG4gICAgICAgIGlmIChhICYmIGdldFBhcnNpbmdGbGFncyhtKS5vdmVyZmxvdyA9PT0gLTIpIHtcbiAgICAgICAgICAgIG92ZXJmbG93ID1cbiAgICAgICAgICAgICAgICBhW01PTlRIXSA8IDAgfHwgYVtNT05USF0gPiAxMVxuICAgICAgICAgICAgICAgICAgICA/IE1PTlRIXG4gICAgICAgICAgICAgICAgICAgIDogYVtEQVRFXSA8IDEgfHwgYVtEQVRFXSA+IGRheXNJbk1vbnRoKGFbWUVBUl0sIGFbTU9OVEhdKVxuICAgICAgICAgICAgICAgICAgICA/IERBVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW0hPVVJdIDwgMCB8fFxuICAgICAgICAgICAgICAgICAgICAgIGFbSE9VUl0gPiAyNCB8fFxuICAgICAgICAgICAgICAgICAgICAgIChhW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoYVtNSU5VVEVdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW1NFQ09ORF0gIT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbTUlMTElTRUNPTkRdICE9PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgPyBIT1VSXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSU5VVEVdIDwgMCB8fCBhW01JTlVURV0gPiA1OVxuICAgICAgICAgICAgICAgICAgICA/IE1JTlVURVxuICAgICAgICAgICAgICAgICAgICA6IGFbU0VDT05EXSA8IDAgfHwgYVtTRUNPTkRdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiBhW01JTExJU0VDT05EXSA8IDAgfHwgYVtNSUxMSVNFQ09ORF0gPiA5OTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSUxMSVNFQ09ORFxuICAgICAgICAgICAgICAgICAgICA6IC0xO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd0RheU9mWWVhciAmJlxuICAgICAgICAgICAgICAgIChvdmVyZmxvdyA8IFlFQVIgfHwgb3ZlcmZsb3cgPiBEQVRFKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBEQVRFO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrcyAmJiBvdmVyZmxvdyA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBvdmVyZmxvdyA9IFdFRUs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZ2V0UGFyc2luZ0ZsYWdzKG0pLl9vdmVyZmxvd1dlZWtkYXkgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLREFZO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPSBvdmVyZmxvdztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cblxuICAgIC8vIGlzbyA4NjAxIHJlZ2V4XG4gICAgLy8gMDAwMC0wMC0wMCAwMDAwLVcwMCBvciAwMDAwLVcwMC0wICsgVCArIDAwIG9yIDAwOjAwIG9yIDAwOjAwOjAwIG9yIDAwOjAwOjAwLjAwMCArICswMDowMCBvciArMDAwMCBvciArMDApXG4gICAgdmFyIGV4dGVuZGVkSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KS0oPzpcXGRcXGQtXFxkXFxkfFdcXGRcXGQtXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZCkpKD86KFR8ICkoXFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIGJhc2ljSXNvUmVnZXggPVxuICAgICAgICAgICAgL15cXHMqKCg/OlsrLV1cXGR7Nn18XFxkezR9KSg/OlxcZFxcZFxcZFxcZHxXXFxkXFxkXFxkfFdcXGRcXGR8XFxkXFxkXFxkfFxcZFxcZHwpKSg/OihUfCApKFxcZFxcZCg/OlxcZFxcZCg/OlxcZFxcZCg/OlsuLF1cXGQrKT8pPyk/KShbKy1dXFxkXFxkKD86Oj9cXGRcXGQpP3xcXHMqWik/KT8kLyxcbiAgICAgICAgdHpSZWdleCA9IC9afFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/LyxcbiAgICAgICAgaXNvRGF0ZXMgPSBbXG4gICAgICAgICAgICBbJ1lZWVlZWS1NTS1ERCcsIC9bKy1dXFxkezZ9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTS1ERCcsIC9cXGR7NH0tXFxkXFxkLVxcZFxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXLUUnLCAvXFxkezR9LVdcXGRcXGQtXFxkL10sXG4gICAgICAgICAgICBbJ0dHR0ctW1ddV1cnLCAvXFxkezR9LVdcXGRcXGQvLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVktREREJywgL1xcZHs0fS1cXGR7M30vXSxcbiAgICAgICAgICAgIFsnWVlZWS1NTScsIC9cXGR7NH0tXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZWVlNTUREJywgL1srLV1cXGR7MTB9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTUREJywgL1xcZHs4fS9dLFxuICAgICAgICAgICAgWydHR0dHW1ddV1dFJywgL1xcZHs0fVdcXGR7M30vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXJywgL1xcZHs0fVdcXGR7Mn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVlEREQnLCAvXFxkezd9L10sXG4gICAgICAgICAgICBbJ1lZWVlNTScsIC9cXGR7Nn0vLCBmYWxzZV0sXG4gICAgICAgICAgICBbJ1lZWVknLCAvXFxkezR9LywgZmFsc2VdLFxuICAgICAgICBdLFxuICAgICAgICAvLyBpc28gdGltZSBmb3JtYXRzIGFuZCByZWdleGVzXG4gICAgICAgIGlzb1RpbWVzID0gW1xuICAgICAgICAgICAgWydISDptbTpzcy5TU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISDptbTpzcyxTU1NTJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkLFxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MnLCAvXFxkXFxkOlxcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEg6bW0nLCAvXFxkXFxkOlxcZFxcZC9dLFxuICAgICAgICAgICAgWydISG1tc3MuU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGRcXC5cXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcyxTU1NTJywgL1xcZFxcZFxcZFxcZFxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIbW1zcycsIC9cXGRcXGRcXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbScsIC9cXGRcXGRcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEgnLCAvXFxkXFxkL10sXG4gICAgICAgIF0sXG4gICAgICAgIGFzcE5ldEpzb25SZWdleCA9IC9eXFwvP0RhdGVcXCgoLT9cXGQrKS9pLFxuICAgICAgICAvLyBSRkMgMjgyMiByZWdleDogRm9yIGRldGFpbHMgc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyODIyI3NlY3Rpb24tMy4zXG4gICAgICAgIHJmYzI4MjIgPVxuICAgICAgICAgICAgL14oPzooTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSw/XFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfChbKy1dXFxkezR9KSkkLyxcbiAgICAgICAgb2JzT2Zmc2V0cyA9IHtcbiAgICAgICAgICAgIFVUOiAwLFxuICAgICAgICAgICAgR01UOiAwLFxuICAgICAgICAgICAgRURUOiAtNCAqIDYwLFxuICAgICAgICAgICAgRVNUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ0RUOiAtNSAqIDYwLFxuICAgICAgICAgICAgQ1NUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTURUOiAtNiAqIDYwLFxuICAgICAgICAgICAgTVNUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUERUOiAtNyAqIDYwLFxuICAgICAgICAgICAgUFNUOiAtOCAqIDYwLFxuICAgICAgICB9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIGlzbyBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSVNPKGNvbmZpZykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBzdHJpbmcgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBtYXRjaCA9IGV4dGVuZGVkSXNvUmVnZXguZXhlYyhzdHJpbmcpIHx8IGJhc2ljSXNvUmVnZXguZXhlYyhzdHJpbmcpLFxuICAgICAgICAgICAgYWxsb3dUaW1lLFxuICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgIHRpbWVGb3JtYXQsXG4gICAgICAgICAgICB0ekZvcm1hdCxcbiAgICAgICAgICAgIGlzb0RhdGVzTGVuID0gaXNvRGF0ZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXNvVGltZXNMZW4gPSBpc29UaW1lcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pc28gPSB0cnVlO1xuICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb0RhdGVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzb0RhdGVzW2ldWzFdLmV4ZWMobWF0Y2hbMV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQgPSBpc29EYXRlc1tpXVswXTtcbiAgICAgICAgICAgICAgICAgICAgYWxsb3dUaW1lID0gaXNvRGF0ZXNbaV1bMl0gIT09IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZGF0ZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzNdKSB7XG4gICAgICAgICAgICAgICAgZm9yIChpID0gMCwgbCA9IGlzb1RpbWVzTGVuOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc29UaW1lc1tpXVsxXS5leGVjKG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF0Y2hbMl0gc2hvdWxkIGJlICdUJyBvciBzcGFjZVxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZUZvcm1hdCA9IChtYXRjaFsyXSB8fCAnICcpICsgaXNvVGltZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGltZUZvcm1hdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFhbGxvd1RpbWUgJiYgdGltZUZvcm1hdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1hdGNoWzRdKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR6UmVnZXguZXhlYyhtYXRjaFs0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHpGb3JtYXQgPSAnWic7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcuX2YgPSBkYXRlRm9ybWF0ICsgKHRpbWVGb3JtYXQgfHwgJycpICsgKHR6Rm9ybWF0IHx8ICcnKTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyhcbiAgICAgICAgeWVhclN0cixcbiAgICAgICAgbW9udGhTdHIsXG4gICAgICAgIGRheVN0cixcbiAgICAgICAgaG91clN0cixcbiAgICAgICAgbWludXRlU3RyLFxuICAgICAgICBzZWNvbmRTdHJcbiAgICApIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IFtcbiAgICAgICAgICAgIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpLFxuICAgICAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0LmluZGV4T2YobW9udGhTdHIpLFxuICAgICAgICAgICAgcGFyc2VJbnQoZGF5U3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChob3VyU3RyLCAxMCksXG4gICAgICAgICAgICBwYXJzZUludChtaW51dGVTdHIsIDEwKSxcbiAgICAgICAgXTtcblxuICAgICAgICBpZiAoc2Vjb25kU3RyKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUludChzZWNvbmRTdHIsIDEwKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVudHJ1bmNhdGVZZWFyKHllYXJTdHIpIHtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludCh5ZWFyU3RyLCAxMCk7XG4gICAgICAgIGlmICh5ZWFyIDw9IDQ5KSB7XG4gICAgICAgICAgICByZXR1cm4gMjAwMCArIHllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoeWVhciA8PSA5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiAxOTAwICsgeWVhcjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geWVhcjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwcm9jZXNzUkZDMjgyMihzKSB7XG4gICAgICAgIC8vIFJlbW92ZSBjb21tZW50cyBhbmQgZm9sZGluZyB3aGl0ZXNwYWNlIGFuZCByZXBsYWNlIG11bHRpcGxlLXNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG4gICAgICAgIHJldHVybiBzXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwoW14oKV0qXFwpfFtcXG5cXHRdL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC8oXFxzXFxzKykvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL15cXHNcXHMqLywgJycpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFxzXFxzKiQvLCAnJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2hlY2tXZWVrZGF5KHdlZWtkYXlTdHIsIHBhcnNlZElucHV0LCBjb25maWcpIHtcbiAgICAgICAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IFJlcGxhY2UgdGhlIHZhbmlsbGEgSlMgRGF0ZSBvYmplY3Qgd2l0aCBhbiBpbmRlcGVuZGVudCBkYXktb2Ytd2VlayBjaGVjay5cbiAgICAgICAgICAgIHZhciB3ZWVrZGF5UHJvdmlkZWQgPSBkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydC5pbmRleE9mKHdlZWtkYXlTdHIpLFxuICAgICAgICAgICAgICAgIHdlZWtkYXlBY3R1YWwgPSBuZXcgRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMF0sXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzFdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsyXVxuICAgICAgICAgICAgICAgICkuZ2V0RGF5KCk7XG4gICAgICAgICAgICBpZiAod2Vla2RheVByb3ZpZGVkICE9PSB3ZWVrZGF5QWN0dWFsKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsY3VsYXRlT2Zmc2V0KG9ic09mZnNldCwgbWlsaXRhcnlPZmZzZXQsIG51bU9mZnNldCkge1xuICAgICAgICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbGl0YXJ5T2Zmc2V0KSB7XG4gICAgICAgICAgICAvLyB0aGUgb25seSBhbGxvd2VkIG1pbGl0YXJ5IHR6IGlzIFpcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIGhtID0gcGFyc2VJbnQobnVtT2Zmc2V0LCAxMCksXG4gICAgICAgICAgICAgICAgbSA9IGhtICUgMTAwLFxuICAgICAgICAgICAgICAgIGggPSAoaG0gLSBtKSAvIDEwMDtcbiAgICAgICAgICAgIHJldHVybiBoICogNjAgKyBtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBhbmQgdGltZSBmcm9tIHJlZiAyODIyIGZvcm1hdFxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2ggPSByZmMyODIyLmV4ZWMocHJlcHJvY2Vzc1JGQzI4MjIoY29uZmlnLl9pKSksXG4gICAgICAgICAgICBwYXJzZWRBcnJheTtcbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBwYXJzZWRBcnJheSA9IGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgICAgICAgICAgbWF0Y2hbNF0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbM10sXG4gICAgICAgICAgICAgICAgbWF0Y2hbMl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNV0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbNl0sXG4gICAgICAgICAgICAgICAgbWF0Y2hbN11cbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoIWNoZWNrV2Vla2RheShtYXRjaFsxXSwgcGFyc2VkQXJyYXksIGNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbmZpZy5fYSA9IHBhcnNlZEFycmF5O1xuICAgICAgICAgICAgY29uZmlnLl90em0gPSBjYWxjdWxhdGVPZmZzZXQobWF0Y2hbOF0sIG1hdGNoWzldLCBtYXRjaFsxMF0pO1xuXG4gICAgICAgICAgICBjb25maWcuX2QgPSBjcmVhdGVVVENEYXRlLmFwcGx5KG51bGwsIGNvbmZpZy5fYSk7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5yZmMyODIyID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGF0ZSBmcm9tIDEpIEFTUC5ORVQsIDIpIElTTywgMykgUkZDIDI4MjIgZm9ybWF0cywgb3IgNCkgb3B0aW9uYWwgZmFsbGJhY2sgaWYgcGFyc2luZyBpc24ndCBzdHJpY3RcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tU3RyaW5nKGNvbmZpZykge1xuICAgICAgICB2YXIgbWF0Y2hlZCA9IGFzcE5ldEpzb25SZWdleC5leGVjKGNvbmZpZy5faSk7XG4gICAgICAgIGlmIChtYXRjaGVkICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSgrbWF0Y2hlZFsxXSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgaWYgKGNvbmZpZy5faXNWYWxpZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBjb25maWcuX2lzVmFsaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9zdHJpY3QpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gRmluYWwgYXR0ZW1wdCwgdXNlIElucHV0IEZhbGxiYWNrXG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2sgPSBkZXByZWNhdGUoXG4gICAgICAgICd2YWx1ZSBwcm92aWRlZCBpcyBub3QgaW4gYSByZWNvZ25pemVkIFJGQzI4MjIgb3IgSVNPIGZvcm1hdC4gbW9tZW50IGNvbnN0cnVjdGlvbiBmYWxscyBiYWNrIHRvIGpzIERhdGUoKSwgJyArXG4gICAgICAgICAgICAnd2hpY2ggaXMgbm90IHJlbGlhYmxlIGFjcm9zcyBhbGwgYnJvd3NlcnMgYW5kIHZlcnNpb25zLiBOb24gUkZDMjgyMi9JU08gZGF0ZSBmb3JtYXRzIGFyZSAnICtcbiAgICAgICAgICAgICdkaXNjb3VyYWdlZC4gUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvanMtZGF0ZS8gZm9yIG1vcmUgaW5mby4nLFxuICAgICAgICBmdW5jdGlvbiAoY29uZmlnKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShjb25maWcuX2kgKyAoY29uZmlnLl91c2VVVEMgPyAnIFVUQycgOiAnJykpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIC8vIFBpY2sgdGhlIGZpcnN0IGRlZmluZWQgb2YgdHdvIG9yIHRocmVlIGFyZ3VtZW50cy5cbiAgICBmdW5jdGlvbiBkZWZhdWx0cyhhLCBiLCBjKSB7XG4gICAgICAgIGlmIChhICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBhO1xuICAgICAgICB9XG4gICAgICAgIGlmIChiICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIC8vIGhvb2tzIGlzIGFjdHVhbGx5IHRoZSBleHBvcnRlZCBtb21lbnQgb2JqZWN0XG4gICAgICAgIHZhciBub3dWYWx1ZSA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ0Z1bGxZZWFyKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDTW9udGgoKSxcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENEYXRlKCksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbbm93VmFsdWUuZ2V0RnVsbFllYXIoKSwgbm93VmFsdWUuZ2V0TW9udGgoKSwgbm93VmFsdWUuZ2V0RGF0ZSgpXTtcbiAgICB9XG5cbiAgICAvLyBjb252ZXJ0IGFuIGFycmF5IHRvIGEgZGF0ZS5cbiAgICAvLyB0aGUgYXJyYXkgc2hvdWxkIG1pcnJvciB0aGUgcGFyYW1ldGVycyBiZWxvd1xuICAgIC8vIG5vdGU6IGFsbCB2YWx1ZXMgcGFzdCB0aGUgeWVhciBhcmUgb3B0aW9uYWwgYW5kIHdpbGwgZGVmYXVsdCB0byB0aGUgbG93ZXN0IHBvc3NpYmxlIHZhbHVlLlxuICAgIC8vIFt5ZWFyLCBtb250aCwgZGF5ICwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXVxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21BcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgaW5wdXQgPSBbXSxcbiAgICAgICAgICAgIGN1cnJlbnREYXRlLFxuICAgICAgICAgICAgZXhwZWN0ZWRXZWVrZGF5LFxuICAgICAgICAgICAgeWVhclRvVXNlO1xuXG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnREYXRlID0gY3VycmVudERhdGVBcnJheShjb25maWcpO1xuXG4gICAgICAgIC8vY29tcHV0ZSBkYXkgb2YgdGhlIHllYXIgZnJvbSB3ZWVrcyBhbmQgd2Vla2RheXNcbiAgICAgICAgaWYgKGNvbmZpZy5fdyAmJiBjb25maWcuX2FbREFURV0gPT0gbnVsbCAmJiBjb25maWcuX2FbTU9OVEhdID09IG51bGwpIHtcbiAgICAgICAgICAgIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy9pZiB0aGUgZGF5IG9mIHRoZSB5ZWFyIGlzIHNldCwgZmlndXJlIG91dCB3aGF0IGl0IGlzXG4gICAgICAgIGlmIChjb25maWcuX2RheU9mWWVhciAhPSBudWxsKSB7XG4gICAgICAgICAgICB5ZWFyVG9Vc2UgPSBkZWZhdWx0cyhjb25maWcuX2FbWUVBUl0sIGN1cnJlbnREYXRlW1lFQVJdKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyVG9Vc2UpIHx8XG4gICAgICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd0RheU9mWWVhciA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGUgPSBjcmVhdGVVVENEYXRlKHllYXJUb1VzZSwgMCwgY29uZmlnLl9kYXlPZlllYXIpO1xuICAgICAgICAgICAgY29uZmlnLl9hW01PTlRIXSA9IGRhdGUuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtEQVRFXSA9IGRhdGUuZ2V0VVRDRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IGRhdGUuXG4gICAgICAgIC8vICogaWYgbm8geWVhciwgbW9udGgsIGRheSBvZiBtb250aCBhcmUgZ2l2ZW4sIGRlZmF1bHQgdG8gdG9kYXlcbiAgICAgICAgLy8gKiBpZiBkYXkgb2YgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgbW9udGggYW5kIHllYXJcbiAgICAgICAgLy8gKiBpZiBtb250aCBpcyBnaXZlbiwgZGVmYXVsdCBvbmx5IHllYXJcbiAgICAgICAgLy8gKiBpZiB5ZWFyIGlzIGdpdmVuLCBkb24ndCBkZWZhdWx0IGFueXRoaW5nXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAzICYmIGNvbmZpZy5fYVtpXSA9PSBudWxsOyArK2kpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID0gY3VycmVudERhdGVbaV07XG4gICAgICAgIH1cblxuICAgICAgICAvLyBaZXJvIG91dCB3aGF0ZXZlciB3YXMgbm90IGRlZmF1bHRlZCwgaW5jbHVkaW5nIHRpbWVcbiAgICAgICAgZm9yICg7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtpXSA9IGlucHV0W2ldID1cbiAgICAgICAgICAgICAgICBjb25maWcuX2FbaV0gPT0gbnVsbCA/IChpID09PSAyID8gMSA6IDApIDogY29uZmlnLl9hW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hlY2sgZm9yIDI0OjAwOjAwLjAwMFxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPT09IDI0ICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlOVVRFXSA9PT0gMCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW1NFQ09ORF0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNSUxMSVNFQ09ORF0gPT09IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25maWcuX25leHREYXkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy5fZCA9IChjb25maWcuX3VzZVVUQyA/IGNyZWF0ZVVUQ0RhdGUgOiBjcmVhdGVEYXRlKS5hcHBseShcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICBpbnB1dFxuICAgICAgICApO1xuICAgICAgICBleHBlY3RlZFdlZWtkYXkgPSBjb25maWcuX3VzZVVUQ1xuICAgICAgICAgICAgPyBjb25maWcuX2QuZ2V0VVRDRGF5KClcbiAgICAgICAgICAgIDogY29uZmlnLl9kLmdldERheSgpO1xuXG4gICAgICAgIC8vIEFwcGx5IHRpbWV6b25lIG9mZnNldCBmcm9tIGlucHV0LiBUaGUgYWN0dWFsIHV0Y09mZnNldCBjYW4gYmUgY2hhbmdlZFxuICAgICAgICAvLyB3aXRoIHBhcnNlWm9uZS5cbiAgICAgICAgaWYgKGNvbmZpZy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZC5zZXRVVENNaW51dGVzKGNvbmZpZy5fZC5nZXRVVENNaW51dGVzKCkgLSBjb25maWcuX3R6bSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPSAyNDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNoZWNrIGZvciBtaXNtYXRjaGluZyBkYXkgb2Ygd2Vla1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX3cgJiZcbiAgICAgICAgICAgIHR5cGVvZiBjb25maWcuX3cuZCAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fdy5kICE9PSBleHBlY3RlZFdlZWtkYXlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS53ZWVrZGF5TWlzbWF0Y2ggPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5T2ZZZWFyRnJvbVdlZWtJbmZvKGNvbmZpZykge1xuICAgICAgICB2YXIgdywgd2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95LCB0ZW1wLCB3ZWVrZGF5T3ZlcmZsb3csIGN1cldlZWs7XG5cbiAgICAgICAgdyA9IGNvbmZpZy5fdztcbiAgICAgICAgaWYgKHcuR0cgIT0gbnVsbCB8fCB3LlcgIT0gbnVsbCB8fCB3LkUgIT0gbnVsbCkge1xuICAgICAgICAgICAgZG93ID0gMTtcbiAgICAgICAgICAgIGRveSA9IDQ7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IFdlIG5lZWQgdG8gdGFrZSB0aGUgY3VycmVudCBpc29XZWVrWWVhciwgYnV0IHRoYXQgZGVwZW5kcyBvblxuICAgICAgICAgICAgLy8gaG93IHdlIGludGVycHJldCBub3cgKGxvY2FsLCB1dGMsIGZpeGVkIG9mZnNldCkuIFNvIGNyZWF0ZVxuICAgICAgICAgICAgLy8gYSBub3cgdmVyc2lvbiBvZiBjdXJyZW50IGNvbmZpZyAodGFrZSBsb2NhbC91dGMvb2Zmc2V0IGZsYWdzLCBhbmRcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBub3cpLlxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyhcbiAgICAgICAgICAgICAgICB3LkdHLFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSxcbiAgICAgICAgICAgICAgICB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIDEsIDQpLnllYXJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody5XLCAxKTtcbiAgICAgICAgICAgIHdlZWtkYXkgPSBkZWZhdWx0cyh3LkUsIDEpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXkgPCAxIHx8IHdlZWtkYXkgPiA3KSB7XG4gICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRvdyA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRvdztcbiAgICAgICAgICAgIGRveSA9IGNvbmZpZy5fbG9jYWxlLl93ZWVrLmRveTtcblxuICAgICAgICAgICAgY3VyV2VlayA9IHdlZWtPZlllYXIoY3JlYXRlTG9jYWwoKSwgZG93LCBkb3kpO1xuXG4gICAgICAgICAgICB3ZWVrWWVhciA9IGRlZmF1bHRzKHcuZ2csIGNvbmZpZy5fYVtZRUFSXSwgY3VyV2Vlay55ZWFyKTtcblxuICAgICAgICAgICAgLy8gRGVmYXVsdCB0byBjdXJyZW50IHdlZWsuXG4gICAgICAgICAgICB3ZWVrID0gZGVmYXVsdHMody53LCBjdXJXZWVrLndlZWspO1xuXG4gICAgICAgICAgICBpZiAody5kICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyB3ZWVrZGF5IC0tIGxvdyBkYXkgbnVtYmVycyBhcmUgY29uc2lkZXJlZCBuZXh0IHdlZWtcbiAgICAgICAgICAgICAgICB3ZWVrZGF5ID0gdy5kO1xuICAgICAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMCB8fCB3ZWVrZGF5ID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAody5lICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAvLyBsb2NhbCB3ZWVrZGF5IC0tIGNvdW50aW5nIHN0YXJ0cyBmcm9tIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZSArIGRvdztcbiAgICAgICAgICAgICAgICBpZiAody5lIDwgMCB8fCB3LmUgPiA2KSB7XG4gICAgICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IHRvIGJlZ2lubmluZyBvZiB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IGRvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAod2VlayA8IDEgfHwgd2VlayA+IHdlZWtzSW5ZZWFyKHdlZWtZZWFyLCBkb3csIGRveSkpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh3ZWVrZGF5T3ZlcmZsb3cgIT0gbnVsbCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuX292ZXJmbG93V2Vla2RheSA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZW1wID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgICAgICBjb25maWcuX2FbWUVBUl0gPSB0ZW1wLnllYXI7XG4gICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA9IHRlbXAuZGF5T2ZZZWFyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIElTTyBzdGFuZGFyZFxuICAgIGhvb2tzLklTT184NjAxID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBjb25zdGFudCB0aGF0IHJlZmVycyB0byB0aGUgUkZDIDI4MjIgZm9ybVxuICAgIGhvb2tzLlJGQ18yODIyID0gZnVuY3Rpb24gKCkge307XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBmb3JtYXQgc3RyaW5nXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpIHtcbiAgICAgICAgLy8gVE9ETzogTW92ZSB0aGlzIHRvIGFub3RoZXIgcGFydCBvZiB0aGUgY3JlYXRpb24gZmxvdyB0byBwcmV2ZW50IGNpcmN1bGFyIGRlcHNcbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuSVNPXzg2MDEpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21JU08oY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uZmlnLl9mID09PSBob29rcy5SRkNfMjgyMikge1xuICAgICAgICAgICAgY29uZmlnRnJvbVJGQzI4MjIoY29uZmlnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25maWcuX2EgPSBbXTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSB0cnVlO1xuXG4gICAgICAgIC8vIFRoaXMgYXJyYXkgaXMgdXNlZCB0byBtYWtlIGEgRGF0ZSwgZWl0aGVyIHdpdGggYG5ldyBEYXRlYCBvciBgRGF0ZS5VVENgXG4gICAgICAgIHZhciBzdHJpbmcgPSAnJyArIGNvbmZpZy5faSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwYXJzZWRJbnB1dCxcbiAgICAgICAgICAgIHRva2VucyxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICAgICAgc2tpcHBlZCxcbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCA9IHN0cmluZy5sZW5ndGgsXG4gICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoID0gMCxcbiAgICAgICAgICAgIGVyYSxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuXG4gICAgICAgIHRva2VucyA9XG4gICAgICAgICAgICBleHBhbmRGb3JtYXQoY29uZmlnLl9mLCBjb25maWcuX2xvY2FsZSkubWF0Y2goZm9ybWF0dGluZ1Rva2VucykgfHwgW107XG4gICAgICAgIHRva2VuTGVuID0gdG9rZW5zLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgcGFyc2VkSW5wdXQgPSAoc3RyaW5nLm1hdGNoKGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSkgfHxcbiAgICAgICAgICAgICAgICBbXSlbMF07XG4gICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBza2lwcGVkID0gc3RyaW5nLnN1YnN0cigwLCBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkpO1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChza2lwcGVkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnNsaWNlKFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmcuaW5kZXhPZihwYXJzZWRJbnB1dCkgKyBwYXJzZWRJbnB1dC5sZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGggKz0gcGFyc2VkSW5wdXQubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaWYgaXQncyBub3QgYSBrbm93biB0b2tlblxuICAgICAgICAgICAgaWYgKGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZWRJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lbXB0eSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZFRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4odG9rZW4sIHBhcnNlZElucHV0LCBjb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjb25maWcuX3N0cmljdCAmJiAhcGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhZGQgcmVtYWluaW5nIHVucGFyc2VkIGlucHV0IGxlbmd0aCB0byB0aGUgc3RyaW5nXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmNoYXJzTGVmdE92ZXIgPVxuICAgICAgICAgICAgc3RyaW5nTGVuZ3RoIC0gdG90YWxQYXJzZWRJbnB1dExlbmd0aDtcbiAgICAgICAgaWYgKHN0cmluZy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRJbnB1dC5wdXNoKHN0cmluZyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjbGVhciBfMTJoIGZsYWcgaWYgaG91ciBpcyA8PSAxMlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPD0gMTIgJiZcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPT09IHRydWUgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucGFyc2VkRGF0ZVBhcnRzID0gY29uZmlnLl9hLnNsaWNlKDApO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5tZXJpZGllbSA9IGNvbmZpZy5fbWVyaWRpZW07XG4gICAgICAgIC8vIGhhbmRsZSBtZXJpZGllbVxuICAgICAgICBjb25maWcuX2FbSE9VUl0gPSBtZXJpZGllbUZpeFdyYXAoXG4gICAgICAgICAgICBjb25maWcuX2xvY2FsZSxcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSxcbiAgICAgICAgICAgIGNvbmZpZy5fbWVyaWRpZW1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBoYW5kbGUgZXJhXG4gICAgICAgIGVyYSA9IGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVyYTtcbiAgICAgICAgaWYgKGVyYSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gY29uZmlnLl9sb2NhbGUuZXJhc0NvbnZlcnRZZWFyKGVyYSwgY29uZmlnLl9hW1lFQVJdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICBjaGVja092ZXJmbG93KGNvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWVyaWRpZW1GaXhXcmFwKGxvY2FsZSwgaG91ciwgbWVyaWRpZW0pIHtcbiAgICAgICAgdmFyIGlzUG07XG5cbiAgICAgICAgaWYgKG1lcmlkaWVtID09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb2NhbGUubWVyaWRpZW1Ib3VyICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbGUubWVyaWRpZW1Ib3VyKGhvdXIsIG1lcmlkaWVtKTtcbiAgICAgICAgfSBlbHNlIGlmIChsb2NhbGUuaXNQTSAhPSBudWxsKSB7XG4gICAgICAgICAgICAvLyBGYWxsYmFja1xuICAgICAgICAgICAgaXNQbSA9IGxvY2FsZS5pc1BNKG1lcmlkaWVtKTtcbiAgICAgICAgICAgIGlmIChpc1BtICYmIGhvdXIgPCAxMikge1xuICAgICAgICAgICAgICAgIGhvdXIgKz0gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzUG0gJiYgaG91ciA9PT0gMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBob3VyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3Qgc3VwcG9zZWQgdG8gaGFwcGVuXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSBzdHJpbmcgYW5kIGFycmF5IG9mIGZvcm1hdCBzdHJpbmdzXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZykge1xuICAgICAgICB2YXIgdGVtcENvbmZpZyxcbiAgICAgICAgICAgIGJlc3RNb21lbnQsXG4gICAgICAgICAgICBzY29yZVRvQmVhdCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUsXG4gICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kLFxuICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSBmYWxzZSxcbiAgICAgICAgICAgIGNvbmZpZ2ZMZW4gPSBjb25maWcuX2YubGVuZ3RoO1xuXG4gICAgICAgIGlmIChjb25maWdmTGVuID09PSAwKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRm9ybWF0ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKE5hTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY29uZmlnZkxlbjsgaSsrKSB7XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgPSAwO1xuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGVtcENvbmZpZyA9IGNvcHlDb25maWcoe30sIGNvbmZpZyk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLl91c2VVVEMgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRlbXBDb25maWcuX3VzZVVUQyA9IGNvbmZpZy5fdXNlVVRDO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGVtcENvbmZpZy5fZiA9IGNvbmZpZy5fZltpXTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQodGVtcENvbmZpZyk7XG5cbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKHRlbXBDb25maWcpKSB7XG4gICAgICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIGlzIGFueSBpbnB1dCB0aGF0IHdhcyBub3QgcGFyc2VkIGFkZCBhIHBlbmFsdHkgZm9yIHRoYXQgZm9ybWF0XG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLmNoYXJzTGVmdE92ZXI7XG5cbiAgICAgICAgICAgIC8vb3IgdG9rZW5zXG4gICAgICAgICAgICBjdXJyZW50U2NvcmUgKz0gZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnVudXNlZFRva2Vucy5sZW5ndGggKiAxMDtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKHRlbXBDb25maWcpLnNjb3JlID0gY3VycmVudFNjb3JlO1xuXG4gICAgICAgICAgICBpZiAoIWJlc3RGb3JtYXRJc1ZhbGlkKSB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBzY29yZVRvQmVhdCA9PSBudWxsIHx8XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0IHx8XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmRcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRGb3JtYXRGb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVzdEZvcm1hdElzVmFsaWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFNjb3JlIDwgc2NvcmVUb0JlYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPSBjdXJyZW50U2NvcmU7XG4gICAgICAgICAgICAgICAgICAgIGJlc3RNb21lbnQgPSB0ZW1wQ29uZmlnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGV4dGVuZChjb25maWcsIGJlc3RNb21lbnQgfHwgdGVtcENvbmZpZyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbU9iamVjdChjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5fZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGkgPSBub3JtYWxpemVPYmplY3RVbml0cyhjb25maWcuX2kpLFxuICAgICAgICAgICAgZGF5T3JEYXRlID0gaS5kYXkgPT09IHVuZGVmaW5lZCA/IGkuZGF0ZSA6IGkuZGF5O1xuICAgICAgICBjb25maWcuX2EgPSBtYXAoXG4gICAgICAgICAgICBbaS55ZWFyLCBpLm1vbnRoLCBkYXlPckRhdGUsIGkuaG91ciwgaS5taW51dGUsIGkuc2Vjb25kLCBpLm1pbGxpc2Vjb25kXSxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqICYmIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuXG4gICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZyb21Db25maWcoY29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3cocHJlcGFyZUNvbmZpZyhjb25maWcpKSk7XG4gICAgICAgIGlmIChyZXMuX25leHREYXkpIHtcbiAgICAgICAgICAgIC8vIEFkZGluZyBpcyBzbWFydCBlbm91Z2ggYXJvdW5kIERTVFxuICAgICAgICAgICAgcmVzLmFkZCgxLCAnZCcpO1xuICAgICAgICAgICAgcmVzLl9uZXh0RGF5ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVwYXJlQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2ksXG4gICAgICAgICAgICBmb3JtYXQgPSBjb25maWcuX2Y7XG5cbiAgICAgICAgY29uZmlnLl9sb2NhbGUgPSBjb25maWcuX2xvY2FsZSB8fCBnZXRMb2NhbGUoY29uZmlnLl9sKTtcblxuICAgICAgICBpZiAoaW5wdXQgPT09IG51bGwgfHwgKGZvcm1hdCA9PT0gdW5kZWZpbmVkICYmIGlucHV0ID09PSAnJykpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVJbnZhbGlkKHsgbnVsbElucHV0OiB0cnVlIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZy5faSA9IGlucHV0ID0gY29uZmlnLl9sb2NhbGUucHJlcGFyc2UoaW5wdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzTW9tZW50KGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQoY2hlY2tPdmVyZmxvdyhpbnB1dCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IGlucHV0O1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZm9ybWF0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZm9ybWF0KSB7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSW5wdXQoY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghaXNWYWxpZChjb25maWcpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbmZpZztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tSW5wdXQoY29uZmlnKSB7XG4gICAgICAgIHZhciBpbnB1dCA9IGNvbmZpZy5faTtcbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoaG9va3Mubm93KCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzRGF0ZShpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0LnZhbHVlT2YoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZyhjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2EgPSBtYXAoaW5wdXQuc2xpY2UoMCksIGZ1bmN0aW9uIChvYmopIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VJbnQob2JqLCAxMCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21BcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnRnJvbU9iamVjdChjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSkge1xuICAgICAgICAgICAgLy8gZnJvbSBtaWxsaXNlY29uZHNcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGlucHV0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrKGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBpc1VUQykge1xuICAgICAgICB2YXIgYyA9IHt9O1xuXG4gICAgICAgIGlmIChmb3JtYXQgPT09IHRydWUgfHwgZm9ybWF0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxvY2FsZSA9PT0gdHJ1ZSB8fCBsb2NhbGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBzdHJpY3QgPSBsb2NhbGU7XG4gICAgICAgICAgICBsb2NhbGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoaXNPYmplY3QoaW5wdXQpICYmIGlzT2JqZWN0RW1wdHkoaW5wdXQpKSB8fFxuICAgICAgICAgICAgKGlzQXJyYXkoaW5wdXQpICYmIGlucHV0Lmxlbmd0aCA9PT0gMClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpbnB1dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICAvLyBvYmplY3QgY29uc3RydWN0aW9uIG11c3QgYmUgZG9uZSB0aGlzIHdheS5cbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzE0MjNcbiAgICAgICAgYy5faXNBTW9tZW50T2JqZWN0ID0gdHJ1ZTtcbiAgICAgICAgYy5fdXNlVVRDID0gYy5faXNVVEMgPSBpc1VUQztcbiAgICAgICAgYy5fbCA9IGxvY2FsZTtcbiAgICAgICAgYy5faSA9IGlucHV0O1xuICAgICAgICBjLl9mID0gZm9ybWF0O1xuICAgICAgICBjLl9zdHJpY3QgPSBzdHJpY3Q7XG5cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUZyb21Db25maWcoYyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWwoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsT3JVVEMoaW5wdXQsIGZvcm1hdCwgbG9jYWxlLCBzdHJpY3QsIGZhbHNlKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG90eXBlTWluID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1pbiBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1heCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyIDwgdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKSxcbiAgICAgICAgcHJvdG90eXBlTWF4ID0gZGVwcmVjYXRlKFxuICAgICAgICAgICAgJ21vbWVudCgpLm1heCBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50Lm1pbiBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL21pbi1tYXgvJyxcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgb3RoZXIgPSBjcmVhdGVMb2NhbC5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG90aGVyID4gdGhpcyA/IHRoaXMgOiBvdGhlcjtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgIC8vIFBpY2sgYSBtb21lbnQgbSBmcm9tIG1vbWVudHMgc28gdGhhdCBtW2ZuXShvdGhlcikgaXMgdHJ1ZSBmb3IgYWxsXG4gICAgLy8gb3RoZXIuIFRoaXMgcmVsaWVzIG9uIHRoZSBmdW5jdGlvbiBmbiB0byBiZSB0cmFuc2l0aXZlLlxuICAgIC8vXG4gICAgLy8gbW9tZW50cyBzaG91bGQgZWl0aGVyIGJlIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzIG9yIGFuIGFycmF5LCB3aG9zZVxuICAgIC8vIGZpcnN0IGVsZW1lbnQgaXMgYW4gYXJyYXkgb2YgbW9tZW50IG9iamVjdHMuXG4gICAgZnVuY3Rpb24gcGlja0J5KGZuLCBtb21lbnRzKSB7XG4gICAgICAgIHZhciByZXMsIGk7XG4gICAgICAgIGlmIChtb21lbnRzLmxlbmd0aCA9PT0gMSAmJiBpc0FycmF5KG1vbWVudHNbMF0pKSB7XG4gICAgICAgICAgICBtb21lbnRzID0gbW9tZW50c1swXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1vbWVudHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwoKTtcbiAgICAgICAgfVxuICAgICAgICByZXMgPSBtb21lbnRzWzBdO1xuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgbW9tZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFtb21lbnRzW2ldLmlzVmFsaWQoKSB8fCBtb21lbnRzW2ldW2ZuXShyZXMpKSB7XG4gICAgICAgICAgICAgICAgcmVzID0gbW9tZW50c1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSBbXS5zb3J0IGluc3RlYWQ/XG4gICAgZnVuY3Rpb24gbWluKCkge1xuICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcblxuICAgICAgICByZXR1cm4gcGlja0J5KCdpc0JlZm9yZScsIGFyZ3MpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1heCgpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNBZnRlcicsIGFyZ3MpO1xuICAgIH1cblxuICAgIHZhciBub3cgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBEYXRlLm5vdyA/IERhdGUubm93KCkgOiArbmV3IERhdGUoKTtcbiAgICB9O1xuXG4gICAgdmFyIG9yZGVyaW5nID0gW1xuICAgICAgICAneWVhcicsXG4gICAgICAgICdxdWFydGVyJyxcbiAgICAgICAgJ21vbnRoJyxcbiAgICAgICAgJ3dlZWsnLFxuICAgICAgICAnZGF5JyxcbiAgICAgICAgJ2hvdXInLFxuICAgICAgICAnbWludXRlJyxcbiAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgXTtcblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb25WYWxpZChtKSB7XG4gICAgICAgIHZhciBrZXksXG4gICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IGZhbHNlLFxuICAgICAgICAgICAgaSxcbiAgICAgICAgICAgIG9yZGVyTGVuID0gb3JkZXJpbmcubGVuZ3RoO1xuICAgICAgICBmb3IgKGtleSBpbiBtKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChtLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAgICAgaW5kZXhPZi5jYWxsKG9yZGVyaW5nLCBrZXkpICE9PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICAobVtrZXldID09IG51bGwgfHwgIWlzTmFOKG1ba2V5XSkpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG9yZGVyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChtW29yZGVyaW5nW2ldXSkge1xuICAgICAgICAgICAgICAgIGlmICh1bml0SGFzRGVjaW1hbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIG9ubHkgYWxsb3cgbm9uLWludGVnZXJzIGZvciBzbWFsbGVzdCB1bml0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwYXJzZUZsb2F0KG1bb3JkZXJpbmdbaV1dKSAhPT0gdG9JbnQobVtvcmRlcmluZ1tpXV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHVuaXRIYXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUludmFsaWQkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKE5hTik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gRHVyYXRpb24oZHVyYXRpb24pIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKGR1cmF0aW9uKSxcbiAgICAgICAgICAgIHllYXJzID0gbm9ybWFsaXplZElucHV0LnllYXIgfHwgMCxcbiAgICAgICAgICAgIHF1YXJ0ZXJzID0gbm9ybWFsaXplZElucHV0LnF1YXJ0ZXIgfHwgMCxcbiAgICAgICAgICAgIG1vbnRocyA9IG5vcm1hbGl6ZWRJbnB1dC5tb250aCB8fCAwLFxuICAgICAgICAgICAgd2Vla3MgPSBub3JtYWxpemVkSW5wdXQud2VlayB8fCBub3JtYWxpemVkSW5wdXQuaXNvV2VlayB8fCAwLFxuICAgICAgICAgICAgZGF5cyA9IG5vcm1hbGl6ZWRJbnB1dC5kYXkgfHwgMCxcbiAgICAgICAgICAgIGhvdXJzID0gbm9ybWFsaXplZElucHV0LmhvdXIgfHwgMCxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBub3JtYWxpemVkSW5wdXQubWludXRlIHx8IDAsXG4gICAgICAgICAgICBzZWNvbmRzID0gbm9ybWFsaXplZElucHV0LnNlY29uZCB8fCAwLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gbm9ybWFsaXplZElucHV0Lm1pbGxpc2Vjb25kIHx8IDA7XG5cbiAgICAgICAgdGhpcy5faXNWYWxpZCA9IGlzRHVyYXRpb25WYWxpZChub3JtYWxpemVkSW5wdXQpO1xuXG4gICAgICAgIC8vIHJlcHJlc2VudGF0aW9uIGZvciBkYXRlQWRkUmVtb3ZlXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9XG4gICAgICAgICAgICArbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHNlY29uZHMgKiAxZTMgKyAvLyAxMDAwXG4gICAgICAgICAgICBtaW51dGVzICogNmU0ICsgLy8gMTAwMCAqIDYwXG4gICAgICAgICAgICBob3VycyAqIDEwMDAgKiA2MCAqIDYwOyAvL3VzaW5nIDEwMDAgKiA2MCAqIDYwIGluc3RlYWQgb2YgMzZlNSB0byBhdm9pZCBmbG9hdGluZyBwb2ludCByb3VuZGluZyBlcnJvcnMgaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzI5NzhcbiAgICAgICAgLy8gQmVjYXVzZSBvZiBkYXRlQWRkUmVtb3ZlIHRyZWF0cyAyNCBob3VycyBhcyBkaWZmZXJlbnQgZnJvbSBhXG4gICAgICAgIC8vIGRheSB3aGVuIHdvcmtpbmcgYXJvdW5kIERTVCwgd2UgbmVlZCB0byBzdG9yZSB0aGVtIHNlcGFyYXRlbHlcbiAgICAgICAgdGhpcy5fZGF5cyA9ICtkYXlzICsgd2Vla3MgKiA3O1xuICAgICAgICAvLyBJdCBpcyBpbXBvc3NpYmxlIHRvIHRyYW5zbGF0ZSBtb250aHMgaW50byBkYXlzIHdpdGhvdXQga25vd2luZ1xuICAgICAgICAvLyB3aGljaCBtb250aHMgeW91IGFyZSBhcmUgdGFsa2luZyBhYm91dCwgc28gd2UgaGF2ZSB0byBzdG9yZVxuICAgICAgICAvLyBpdCBzZXBhcmF0ZWx5LlxuICAgICAgICB0aGlzLl9tb250aHMgPSArbW9udGhzICsgcXVhcnRlcnMgKiAzICsgeWVhcnMgKiAxMjtcblxuICAgICAgICB0aGlzLl9kYXRhID0ge307XG5cbiAgICAgICAgdGhpcy5fbG9jYWxlID0gZ2V0TG9jYWxlKCk7XG5cbiAgICAgICAgdGhpcy5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEdXJhdGlvbihvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIER1cmF0aW9uO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic1JvdW5kKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQoLTEgKiBudW1iZXIpICogLTE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29tcGFyZSB0d28gYXJyYXlzLCByZXR1cm4gdGhlIG51bWJlciBvZiBkaWZmZXJlbmNlc1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoYXJyYXkxLCBhcnJheTIsIGRvbnRDb252ZXJ0KSB7XG4gICAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihhcnJheTEubGVuZ3RoLCBhcnJheTIubGVuZ3RoKSxcbiAgICAgICAgICAgIGxlbmd0aERpZmYgPSBNYXRoLmFicyhhcnJheTEubGVuZ3RoIC0gYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBkaWZmcyA9IDAsXG4gICAgICAgICAgICBpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAoZG9udENvbnZlcnQgJiYgYXJyYXkxW2ldICE9PSBhcnJheTJbaV0pIHx8XG4gICAgICAgICAgICAgICAgKCFkb250Q29udmVydCAmJiB0b0ludChhcnJheTFbaV0pICE9PSB0b0ludChhcnJheTJbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGlmZnMrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGlmZnMgKyBsZW5ndGhEaWZmO1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGZ1bmN0aW9uIG9mZnNldCh0b2tlbiwgc2VwYXJhdG9yKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy51dGNPZmZzZXQoKSxcbiAgICAgICAgICAgICAgICBzaWduID0gJysnO1xuICAgICAgICAgICAgaWYgKG9mZnNldCA8IDApIHtcbiAgICAgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHNpZ24gPSAnLSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHNpZ24gK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+KG9mZnNldCAvIDYwKSwgMikgK1xuICAgICAgICAgICAgICAgIHNlcGFyYXRvciArXG4gICAgICAgICAgICAgICAgemVyb0ZpbGwofn5vZmZzZXQgJSA2MCwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG9mZnNldCgnWicsICc6Jyk7XG4gICAgb2Zmc2V0KCdaWicsICcnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1onLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRSZWdleFRva2VuKCdaWicsIG1hdGNoU2hvcnRPZmZzZXQpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydaJywgJ1paJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX3VzZVVUQyA9IHRydWU7XG4gICAgICAgIGNvbmZpZy5fdHptID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyB0aW1lem9uZSBjaHVua2VyXG4gICAgLy8gJysxMDowMCcgPiBbJzEwJywgICcwMCddXG4gICAgLy8gJy0xNTMwJyAgPiBbJy0xNScsICczMCddXG4gICAgdmFyIGNodW5rT2Zmc2V0ID0gLyhbXFwrXFwtXXxcXGRcXGQpL2dpO1xuXG4gICAgZnVuY3Rpb24gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaGVyLCBzdHJpbmcpIHtcbiAgICAgICAgdmFyIG1hdGNoZXMgPSAoc3RyaW5nIHx8ICcnKS5tYXRjaChtYXRjaGVyKSxcbiAgICAgICAgICAgIGNodW5rLFxuICAgICAgICAgICAgcGFydHMsXG4gICAgICAgICAgICBtaW51dGVzO1xuXG4gICAgICAgIGlmIChtYXRjaGVzID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNodW5rID0gbWF0Y2hlc1ttYXRjaGVzLmxlbmd0aCAtIDFdIHx8IFtdO1xuICAgICAgICBwYXJ0cyA9IChjaHVuayArICcnKS5tYXRjaChjaHVua09mZnNldCkgfHwgWyctJywgMCwgMF07XG4gICAgICAgIG1pbnV0ZXMgPSArKHBhcnRzWzFdICogNjApICsgdG9JbnQocGFydHNbMl0pO1xuXG4gICAgICAgIHJldHVybiBtaW51dGVzID09PSAwID8gMCA6IHBhcnRzWzBdID09PSAnKycgPyBtaW51dGVzIDogLW1pbnV0ZXM7XG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIGEgbW9tZW50IGZyb20gaW5wdXQsIHRoYXQgaXMgbG9jYWwvdXRjL3pvbmUgZXF1aXZhbGVudCB0byBtb2RlbC5cbiAgICBmdW5jdGlvbiBjbG9uZVdpdGhPZmZzZXQoaW5wdXQsIG1vZGVsKSB7XG4gICAgICAgIHZhciByZXMsIGRpZmY7XG4gICAgICAgIGlmIChtb2RlbC5faXNVVEMpIHtcbiAgICAgICAgICAgIHJlcyA9IG1vZGVsLmNsb25lKCk7XG4gICAgICAgICAgICBkaWZmID1cbiAgICAgICAgICAgICAgICAoaXNNb21lbnQoaW5wdXQpIHx8IGlzRGF0ZShpbnB1dClcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgOiBjcmVhdGVMb2NhbChpbnB1dCkudmFsdWVPZigpKSAtIHJlcy52YWx1ZU9mKCk7XG4gICAgICAgICAgICAvLyBVc2UgbG93LWxldmVsIGFwaSwgYmVjYXVzZSB0aGlzIGZuIGlzIGxvdy1sZXZlbCBhcGkuXG4gICAgICAgICAgICByZXMuX2Quc2V0VGltZShyZXMuX2QudmFsdWVPZigpICsgZGlmZik7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQocmVzLCBmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0KS5sb2NhbCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF0ZU9mZnNldChtKSB7XG4gICAgICAgIC8vIE9uIEZpcmVmb3guMjQgRGF0ZSNnZXRUaW1lem9uZU9mZnNldCByZXR1cm5zIGEgZmxvYXRpbmcgcG9pbnQuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L3B1bGwvMTg3MVxuICAgICAgICByZXR1cm4gLU1hdGgucm91bmQobS5fZC5nZXRUaW1lem9uZU9mZnNldCgpKTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBhIG1vbWVudCBpcyBtdXRhdGVkLlxuICAgIC8vIEl0IGlzIGludGVuZGVkIHRvIGtlZXAgdGhlIG9mZnNldCBpbiBzeW5jIHdpdGggdGhlIHRpbWV6b25lLlxuICAgIGhvb2tzLnVwZGF0ZU9mZnNldCA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgLy8ga2VlcExvY2FsVGltZSA9IHRydWUgbWVhbnMgb25seSBjaGFuZ2UgdGhlIHRpbWV6b25lLCB3aXRob3V0XG4gICAgLy8gYWZmZWN0aW5nIHRoZSBsb2NhbCBob3VyLiBTbyA1OjMxOjI2ICswMzAwIC0tW3V0Y09mZnNldCgyLCB0cnVlKV0tLT5cbiAgICAvLyA1OjMxOjI2ICswMjAwIEl0IGlzIHBvc3NpYmxlIHRoYXQgNTozMToyNiBkb2Vzbid0IGV4aXN0IHdpdGggb2Zmc2V0XG4gICAgLy8gKzAyMDAsIHNvIHdlIGFkanVzdCB0aGUgdGltZSBhcyBuZWVkZWQsIHRvIGJlIHZhbGlkLlxuICAgIC8vXG4gICAgLy8gS2VlcGluZyB0aGUgdGltZSBhY3R1YWxseSBhZGRzL3N1YnRyYWN0cyAob25lIGhvdXIpXG4gICAgLy8gZnJvbSB0aGUgYWN0dWFsIHJlcHJlc2VudGVkIHRpbWUuIFRoYXQgaXMgd2h5IHdlIGNhbGwgdXBkYXRlT2Zmc2V0XG4gICAgLy8gYSBzZWNvbmQgdGltZS4gSW4gY2FzZSBpdCB3YW50cyB1cyB0byBjaGFuZ2UgdGhlIG9mZnNldCBhZ2FpblxuICAgIC8vIF9jaGFuZ2VJblByb2dyZXNzID09IHRydWUgY2FzZSwgdGhlbiB3ZSBoYXZlIHRvIGFkanVzdCwgYmVjYXVzZVxuICAgIC8vIHRoZXJlIGlzIG5vIHN1Y2ggdGltZSBpbiB0aGUgZ2l2ZW4gdGltZXpvbmUuXG4gICAgZnVuY3Rpb24gZ2V0U2V0T2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lLCBrZWVwTWludXRlcykge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gdGhpcy5fb2Zmc2V0IHx8IDAsXG4gICAgICAgICAgICBsb2NhbEFkanVzdDtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGlucHV0ICE9IG51bGwgPyB0aGlzIDogTmFOO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaFNob3J0T2Zmc2V0LCBpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoaW5wdXQpIDwgMTYgJiYgIWtlZXBNaW51dGVzKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBpbnB1dCAqIDYwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl9pc1VUQyAmJiBrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxBZGp1c3QgPSBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fb2Zmc2V0ID0gaW5wdXQ7XG4gICAgICAgICAgICB0aGlzLl9pc1VUQyA9IHRydWU7XG4gICAgICAgICAgICBpZiAobG9jYWxBZGp1c3QgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkKGxvY2FsQWRqdXN0LCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9mZnNldCAhPT0gaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWtlZXBMb2NhbFRpbWUgfHwgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcykge1xuICAgICAgICAgICAgICAgICAgICBhZGRTdWJ0cmFjdChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVEdXJhdGlvbihpbnB1dCAtIG9mZnNldCwgJ20nKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbmdlSW5Qcm9ncmVzcyA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNVVEMgPyBvZmZzZXQgOiBnZXREYXRlT2Zmc2V0KHRoaXMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0Wm9uZShpbnB1dCwga2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IC1pbnB1dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoaW5wdXQsIGtlZXBMb2NhbFRpbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiAtdGhpcy51dGNPZmZzZXQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvVVRDKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvTG9jYWwoa2VlcExvY2FsVGltZSkge1xuICAgICAgICBpZiAodGhpcy5faXNVVEMpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KDAsIGtlZXBMb2NhbFRpbWUpO1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnRyYWN0KGdldERhdGVPZmZzZXQodGhpcyksICdtJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2V0T2Zmc2V0VG9QYXJzZWRPZmZzZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLl90em0gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodGhpcy5fdHptLCBmYWxzZSwgdHJ1ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2kgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB2YXIgdFpvbmUgPSBvZmZzZXRGcm9tU3RyaW5nKG1hdGNoT2Zmc2V0LCB0aGlzLl9pKTtcbiAgICAgICAgICAgIGlmICh0Wm9uZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQodFpvbmUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNBbGlnbmVkSG91ck9mZnNldChpbnB1dCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5wdXQgPSBpbnB1dCA/IGNyZWF0ZUxvY2FsKGlucHV0KS51dGNPZmZzZXQoKSA6IDA7XG5cbiAgICAgICAgcmV0dXJuICh0aGlzLnV0Y09mZnNldCgpIC0gaW5wdXQpICUgNjAgPT09IDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWUoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDApLnV0Y09mZnNldCgpIHx8XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgpID4gdGhpcy5jbG9uZSgpLm1vbnRoKDUpLnV0Y09mZnNldCgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkKCkge1xuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHRoaXMuX2lzRFNUU2hpZnRlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgYyA9IHt9LFxuICAgICAgICAgICAgb3RoZXI7XG5cbiAgICAgICAgY29weUNvbmZpZyhjLCB0aGlzKTtcbiAgICAgICAgYyA9IHByZXBhcmVDb25maWcoYyk7XG5cbiAgICAgICAgaWYgKGMuX2EpIHtcbiAgICAgICAgICAgIG90aGVyID0gYy5faXNVVEMgPyBjcmVhdGVVVEMoYy5fYSkgOiBjcmVhdGVMb2NhbChjLl9hKTtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9XG4gICAgICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiYgY29tcGFyZUFycmF5cyhjLl9hLCBvdGhlci50b0FycmF5KCkpID4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzRFNUU2hpZnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzRFNUU2hpZnRlZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xvY2FsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyAhdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0Y09mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgOiBmYWxzZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1V0YygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5faXNVVEMgJiYgdGhpcy5fb2Zmc2V0ID09PSAwIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gQVNQLk5FVCBqc29uIGRhdGUgZm9ybWF0IHJlZ2V4XG4gICAgdmFyIGFzcE5ldFJlZ2V4ID0gL14oLXxcXCspPyg/OihcXGQqKVsuIF0pPyhcXGQrKTooXFxkKykoPzo6KFxcZCspKFxcLlxcZCopPyk/JC8sXG4gICAgICAgIC8vIGZyb20gaHR0cDovL2RvY3MuY2xvc3VyZS1saWJyYXJ5Lmdvb2dsZWNvZGUuY29tL2dpdC9jbG9zdXJlX2dvb2dfZGF0ZV9kYXRlLmpzLnNvdXJjZS5odG1sXG4gICAgICAgIC8vIHNvbWV3aGF0IG1vcmUgaW4gbGluZSB3aXRoIDQuNC4zLjIgMjAwNCBzcGVjLCBidXQgYWxsb3dzIGRlY2ltYWwgYW55d2hlcmVcbiAgICAgICAgLy8gYW5kIGZ1cnRoZXIgbW9kaWZpZWQgdG8gYWxsb3cgZm9yIHN0cmluZ3MgY29udGFpbmluZyBib3RoIHdlZWsgYW5kIGRheVxuICAgICAgICBpc29SZWdleCA9XG4gICAgICAgICAgICAvXigtfFxcKyk/UCg/OihbLStdP1swLTksLl0qKVkpPyg/OihbLStdP1swLTksLl0qKU0pPyg/OihbLStdP1swLTksLl0qKVcpPyg/OihbLStdP1swLTksLl0qKUQpPyg/OlQoPzooWy0rXT9bMC05LC5dKilIKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilTKT8pPyQvO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRHVyYXRpb24oaW5wdXQsIGtleSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBpbnB1dCxcbiAgICAgICAgICAgIC8vIG1hdGNoaW5nIGFnYWluc3QgcmVnZXhwIGlzIGV4cGVuc2l2ZSwgZG8gaXQgb24gZGVtYW5kXG4gICAgICAgICAgICBtYXRjaCA9IG51bGwsXG4gICAgICAgICAgICBzaWduLFxuICAgICAgICAgICAgcmV0LFxuICAgICAgICAgICAgZGlmZlJlcztcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIG1zOiBpbnB1dC5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgICAgIGQ6IGlucHV0Ll9kYXlzLFxuICAgICAgICAgICAgICAgIE06IGlucHV0Ll9tb250aHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKGlucHV0KSB8fCAhaXNOYU4oK2lucHV0KSkge1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbltrZXldID0gK2lucHV0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkdXJhdGlvbi5taWxsaXNlY29uZHMgPSAraW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gYXNwTmV0UmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IDAsXG4gICAgICAgICAgICAgICAgZDogdG9JbnQobWF0Y2hbREFURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBoOiB0b0ludChtYXRjaFtIT1VSXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG06IHRvSW50KG1hdGNoW01JTlVURV0pICogc2lnbixcbiAgICAgICAgICAgICAgICBzOiB0b0ludChtYXRjaFtTRUNPTkRdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgbXM6IHRvSW50KGFic1JvdW5kKG1hdGNoW01JTExJU0VDT05EXSAqIDEwMDApKSAqIHNpZ24sIC8vIHRoZSBtaWxsaXNlY29uZCBkZWNpbWFsIHBvaW50IGlzIGluY2x1ZGVkIGluIHRoZSBtYXRjaFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmICgobWF0Y2ggPSBpc29SZWdleC5leGVjKGlucHV0KSkpIHtcbiAgICAgICAgICAgIHNpZ24gPSBtYXRjaFsxXSA9PT0gJy0nID8gLTEgOiAxO1xuICAgICAgICAgICAgZHVyYXRpb24gPSB7XG4gICAgICAgICAgICAgICAgeTogcGFyc2VJc28obWF0Y2hbMl0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIE06IHBhcnNlSXNvKG1hdGNoWzNdLCBzaWduKSxcbiAgICAgICAgICAgICAgICB3OiBwYXJzZUlzbyhtYXRjaFs0XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgZDogcGFyc2VJc28obWF0Y2hbNV0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGg6IHBhcnNlSXNvKG1hdGNoWzZdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBtOiBwYXJzZUlzbyhtYXRjaFs3XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgczogcGFyc2VJc28obWF0Y2hbOF0sIHNpZ24pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChkdXJhdGlvbiA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBjaGVja3MgZm9yIG51bGwgb3IgdW5kZWZpbmVkXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIGR1cmF0aW9uID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgKCdmcm9tJyBpbiBkdXJhdGlvbiB8fCAndG8nIGluIGR1cmF0aW9uKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRpZmZSZXMgPSBtb21lbnRzRGlmZmVyZW5jZShcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi5mcm9tKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVMb2NhbChkdXJhdGlvbi50bylcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBkdXJhdGlvbi5tcyA9IGRpZmZSZXMubWlsbGlzZWNvbmRzO1xuICAgICAgICAgICAgZHVyYXRpb24uTSA9IGRpZmZSZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0ID0gbmV3IER1cmF0aW9uKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoaXNEdXJhdGlvbihpbnB1dCkgJiYgaGFzT3duUHJvcChpbnB1dCwgJ19sb2NhbGUnKSkge1xuICAgICAgICAgICAgcmV0Ll9sb2NhbGUgPSBpbnB1dC5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfaXNWYWxpZCcpKSB7XG4gICAgICAgICAgICByZXQuX2lzVmFsaWQgPSBpbnB1dC5faXNWYWxpZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuXG4gICAgY3JlYXRlRHVyYXRpb24uZm4gPSBEdXJhdGlvbi5wcm90b3R5cGU7XG4gICAgY3JlYXRlRHVyYXRpb24uaW52YWxpZCA9IGNyZWF0ZUludmFsaWQkMTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvKGlucCwgc2lnbikge1xuICAgICAgICAvLyBXZSdkIG5vcm1hbGx5IHVzZSB+fmlucCBmb3IgdGhpcywgYnV0IHVuZm9ydHVuYXRlbHkgaXQgYWxzb1xuICAgICAgICAvLyBjb252ZXJ0cyBmbG9hdHMgdG8gaW50cy5cbiAgICAgICAgLy8gaW5wIG1heSBiZSB1bmRlZmluZWQsIHNvIGNhcmVmdWwgY2FsbGluZyByZXBsYWNlIG9uIGl0LlxuICAgICAgICB2YXIgcmVzID0gaW5wICYmIHBhcnNlRmxvYXQoaW5wLnJlcGxhY2UoJywnLCAnLicpKTtcbiAgICAgICAgLy8gYXBwbHkgc2lnbiB3aGlsZSB3ZSdyZSBhdCBpdFxuICAgICAgICByZXR1cm4gKGlzTmFOKHJlcykgPyAwIDogcmVzKSAqIHNpZ247XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzID0ge307XG5cbiAgICAgICAgcmVzLm1vbnRocyA9XG4gICAgICAgICAgICBvdGhlci5tb250aCgpIC0gYmFzZS5tb250aCgpICsgKG90aGVyLnllYXIoKSAtIGJhc2UueWVhcigpKSAqIDEyO1xuICAgICAgICBpZiAoYmFzZS5jbG9uZSgpLmFkZChyZXMubW9udGhzLCAnTScpLmlzQWZ0ZXIob3RoZXIpKSB7XG4gICAgICAgICAgICAtLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gK290aGVyIC0gK2Jhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKTtcblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbWVudHNEaWZmZXJlbmNlKGJhc2UsIG90aGVyKSB7XG4gICAgICAgIHZhciByZXM7XG4gICAgICAgIGlmICghKGJhc2UuaXNWYWxpZCgpICYmIG90aGVyLmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1pbGxpc2Vjb25kczogMCwgbW9udGhzOiAwIH07XG4gICAgICAgIH1cblxuICAgICAgICBvdGhlciA9IGNsb25lV2l0aE9mZnNldChvdGhlciwgYmFzZSk7XG4gICAgICAgIGlmIChiYXNlLmlzQmVmb3JlKG90aGVyKSkge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXMgPSBwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlKG90aGVyLCBiYXNlKTtcbiAgICAgICAgICAgIHJlcy5taWxsaXNlY29uZHMgPSAtcmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIHJlcy5tb250aHMgPSAtcmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlICduYW1lJyBhcmcgYWZ0ZXIgZGVwcmVjYXRpb24gaXMgcmVtb3ZlZFxuICAgIGZ1bmN0aW9uIGNyZWF0ZUFkZGVyKGRpcmVjdGlvbiwgbmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHZhbCwgcGVyaW9kKSB7XG4gICAgICAgICAgICB2YXIgZHVyLCB0bXA7XG4gICAgICAgICAgICAvL2ludmVydCB0aGUgYXJndW1lbnRzLCBidXQgY29tcGxhaW4gYWJvdXQgaXRcbiAgICAgICAgICAgIGlmIChwZXJpb2QgIT09IG51bGwgJiYgIWlzTmFOKCtwZXJpb2QpKSB7XG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlU2ltcGxlKFxuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAnbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcocGVyaW9kLCBudW1iZXIpIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgbW9tZW50KCkuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lICtcbiAgICAgICAgICAgICAgICAgICAgICAgICcobnVtYmVyLCBwZXJpb2QpLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9hZGQtaW52ZXJ0ZWQtcGFyYW0vIGZvciBtb3JlIGluZm8uJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdG1wID0gdmFsO1xuICAgICAgICAgICAgICAgIHZhbCA9IHBlcmlvZDtcbiAgICAgICAgICAgICAgICBwZXJpb2QgPSB0bXA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGR1ciA9IGNyZWF0ZUR1cmF0aW9uKHZhbCwgcGVyaW9kKTtcbiAgICAgICAgICAgIGFkZFN1YnRyYWN0KHRoaXMsIGR1ciwgZGlyZWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0KG1vbSwgZHVyYXRpb24sIGlzQWRkaW5nLCB1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IGR1cmF0aW9uLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gYWJzUm91bmQoZHVyYXRpb24uX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzUm91bmQoZHVyYXRpb24uX21vbnRocyk7XG5cbiAgICAgICAgaWYgKCFtb20uaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBObyBvcFxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdXBkYXRlT2Zmc2V0ID0gdXBkYXRlT2Zmc2V0ID09IG51bGwgPyB0cnVlIDogdXBkYXRlT2Zmc2V0O1xuXG4gICAgICAgIGlmIChtb250aHMpIHtcbiAgICAgICAgICAgIHNldE1vbnRoKG1vbSwgZ2V0KG1vbSwgJ01vbnRoJykgKyBtb250aHMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRheXMpIHtcbiAgICAgICAgICAgIHNldCQxKG1vbSwgJ0RhdGUnLCBnZXQobW9tLCAnRGF0ZScpICsgZGF5cyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobWlsbGlzZWNvbmRzKSB7XG4gICAgICAgICAgICBtb20uX2Quc2V0VGltZShtb20uX2QudmFsdWVPZigpICsgbWlsbGlzZWNvbmRzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVPZmZzZXQpIHtcbiAgICAgICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldChtb20sIGRheXMgfHwgbW9udGhzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBhZGQgPSBjcmVhdGVBZGRlcigxLCAnYWRkJyksXG4gICAgICAgIHN1YnRyYWN0ID0gY3JlYXRlQWRkZXIoLTEsICdzdWJ0cmFjdCcpO1xuXG4gICAgZnVuY3Rpb24gaXNTdHJpbmcoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycgfHwgaW5wdXQgaW5zdGFuY2VvZiBTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gdHlwZSBNb21lbnRJbnB1dCA9IE1vbWVudCB8IERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCAobnVtYmVyIHwgc3RyaW5nKVtdIHwgTW9tZW50SW5wdXRPYmplY3QgfCB2b2lkOyAvLyBudWxsIHwgdW5kZWZpbmVkXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dChpbnB1dCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaXNNb21lbnQoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc0RhdGUoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc1N0cmluZyhpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkgfHxcbiAgICAgICAgICAgIGlucHV0ID09PSBudWxsIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gdW5kZWZpbmVkXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNNb21lbnRJbnB1dE9iamVjdChpbnB1dCkge1xuICAgICAgICB2YXIgb2JqZWN0VGVzdCA9IGlzT2JqZWN0KGlucHV0KSAmJiAhaXNPYmplY3RFbXB0eShpbnB1dCksXG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBmYWxzZSxcbiAgICAgICAgICAgIHByb3BlcnRpZXMgPSBbXG4gICAgICAgICAgICAgICAgJ3llYXJzJyxcbiAgICAgICAgICAgICAgICAneWVhcicsXG4gICAgICAgICAgICAgICAgJ3knLFxuICAgICAgICAgICAgICAgICdtb250aHMnLFxuICAgICAgICAgICAgICAgICdtb250aCcsXG4gICAgICAgICAgICAgICAgJ00nLFxuICAgICAgICAgICAgICAgICdkYXlzJyxcbiAgICAgICAgICAgICAgICAnZGF5JyxcbiAgICAgICAgICAgICAgICAnZCcsXG4gICAgICAgICAgICAgICAgJ2RhdGVzJyxcbiAgICAgICAgICAgICAgICAnZGF0ZScsXG4gICAgICAgICAgICAgICAgJ0QnLFxuICAgICAgICAgICAgICAgICdob3VycycsXG4gICAgICAgICAgICAgICAgJ2hvdXInLFxuICAgICAgICAgICAgICAgICdoJyxcbiAgICAgICAgICAgICAgICAnbWludXRlcycsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICAgICAgICAgJ20nLFxuICAgICAgICAgICAgICAgICdzZWNvbmRzJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAncycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ21pbGxpc2Vjb25kJyxcbiAgICAgICAgICAgICAgICAnbXMnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgIHByb3BlcnR5TGVuID0gcHJvcGVydGllcy5sZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnR5TGVuOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXJPclN0cmluZ0FycmF5KGlucHV0KSB7XG4gICAgICAgIHZhciBhcnJheVRlc3QgPSBpc0FycmF5KGlucHV0KSxcbiAgICAgICAgICAgIGRhdGFUeXBlVGVzdCA9IGZhbHNlO1xuICAgICAgICBpZiAoYXJyYXlUZXN0KSB7XG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPVxuICAgICAgICAgICAgICAgIGlucHV0LmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gIWlzTnVtYmVyKGl0ZW0pICYmIGlzU3RyaW5nKGlucHV0KTtcbiAgICAgICAgICAgICAgICB9KS5sZW5ndGggPT09IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFycmF5VGVzdCAmJiBkYXRhVHlwZVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNDYWxlbmRhclNwZWMoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICdzYW1lRGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dERheScsXG4gICAgICAgICAgICAgICAgJ2xhc3REYXknLFxuICAgICAgICAgICAgICAgICduZXh0V2VlaycsXG4gICAgICAgICAgICAgICAgJ2xhc3RXZWVrJyxcbiAgICAgICAgICAgICAgICAnc2FtZUVsc2UnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBwcm9wZXJ0eTtcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICAgICAgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gcHJvcGVydHlUZXN0IHx8IGhhc093blByb3AoaW5wdXQsIHByb3BlcnR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBvYmplY3RUZXN0ICYmIHByb3BlcnR5VGVzdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRDYWxlbmRhckZvcm1hdChteU1vbWVudCwgbm93KSB7XG4gICAgICAgIHZhciBkaWZmID0gbXlNb21lbnQuZGlmZihub3csICdkYXlzJywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBkaWZmIDwgLTZcbiAgICAgICAgICAgID8gJ3NhbWVFbHNlJ1xuICAgICAgICAgICAgOiBkaWZmIDwgLTFcbiAgICAgICAgICAgID8gJ2xhc3RXZWVrJ1xuICAgICAgICAgICAgOiBkaWZmIDwgMFxuICAgICAgICAgICAgPyAnbGFzdERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDFcbiAgICAgICAgICAgID8gJ3NhbWVEYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAyXG4gICAgICAgICAgICA/ICduZXh0RGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgN1xuICAgICAgICAgICAgPyAnbmV4dFdlZWsnXG4gICAgICAgICAgICA6ICdzYW1lRWxzZSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIkMSh0aW1lLCBmb3JtYXRzKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgZm9yIHNpbmdsZSBwYXJhbWV0ZXIsIGZvcm1hdHMgb25seSBvdmVybG9hZCB0byB0aGUgY2FsZW5kYXIgZnVuY3Rpb25cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmICghYXJndW1lbnRzWzBdKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc01vbWVudElucHV0KGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICB0aW1lID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIGZvcm1hdHMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzQ2FsZW5kYXJTcGVjKGFyZ3VtZW50c1swXSkpIHtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2Ugd2FudCB0byBjb21wYXJlIHRoZSBzdGFydCBvZiB0b2RheSwgdnMgdGhpcy5cbiAgICAgICAgLy8gR2V0dGluZyBzdGFydC1vZi10b2RheSBkZXBlbmRzIG9uIHdoZXRoZXIgd2UncmUgbG9jYWwvdXRjL29mZnNldCBvciBub3QuXG4gICAgICAgIHZhciBub3cgPSB0aW1lIHx8IGNyZWF0ZUxvY2FsKCksXG4gICAgICAgICAgICBzb2QgPSBjbG9uZVdpdGhPZmZzZXQobm93LCB0aGlzKS5zdGFydE9mKCdkYXknKSxcbiAgICAgICAgICAgIGZvcm1hdCA9IGhvb2tzLmNhbGVuZGFyRm9ybWF0KHRoaXMsIHNvZCkgfHwgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgZm9ybWF0cyAmJlxuICAgICAgICAgICAgICAgIChpc0Z1bmN0aW9uKGZvcm1hdHNbZm9ybWF0XSlcbiAgICAgICAgICAgICAgICAgICAgPyBmb3JtYXRzW2Zvcm1hdF0uY2FsbCh0aGlzLCBub3cpXG4gICAgICAgICAgICAgICAgICAgIDogZm9ybWF0c1tmb3JtYXRdKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQoXG4gICAgICAgICAgICBvdXRwdXQgfHwgdGhpcy5sb2NhbGVEYXRhKCkuY2FsZW5kYXIoZm9ybWF0LCB0aGlzLCBjcmVhdGVMb2NhbChub3cpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsb25lKCkge1xuICAgICAgICByZXR1cm4gbmV3IE1vbWVudCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0FmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA+IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsSW5wdXQudmFsdWVPZigpIDwgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICB2YXIgbG9jYWxJbnB1dCA9IGlzTW9tZW50KGlucHV0KSA/IGlucHV0IDogY3JlYXRlTG9jYWwoaW5wdXQpO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5lbmRPZih1bml0cykudmFsdWVPZigpIDwgbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JldHdlZW4oZnJvbSwgdG8sIHVuaXRzLCBpbmNsdXNpdml0eSkge1xuICAgICAgICB2YXIgbG9jYWxGcm9tID0gaXNNb21lbnQoZnJvbSkgPyBmcm9tIDogY3JlYXRlTG9jYWwoZnJvbSksXG4gICAgICAgICAgICBsb2NhbFRvID0gaXNNb21lbnQodG8pID8gdG8gOiBjcmVhdGVMb2NhbCh0byk7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsRnJvbS5pc1ZhbGlkKCkgJiYgbG9jYWxUby5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVzaXZpdHkgPSBpbmNsdXNpdml0eSB8fCAnKCknO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzBdID09PSAnKCdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNBZnRlcihsb2NhbEZyb20sIHVuaXRzKVxuICAgICAgICAgICAgICAgIDogIXRoaXMuaXNCZWZvcmUobG9jYWxGcm9tLCB1bml0cykpICYmXG4gICAgICAgICAgICAoaW5jbHVzaXZpdHlbMV0gPT09ICcpJ1xuICAgICAgICAgICAgICAgID8gdGhpcy5pc0JlZm9yZShsb2NhbFRvLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQWZ0ZXIobG9jYWxUbywgdW5pdHMpKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KSxcbiAgICAgICAgICAgIGlucHV0TXM7XG4gICAgICAgIGlmICghKHRoaXMuaXNWYWxpZCgpICYmIGxvY2FsSW5wdXQuaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpIHx8ICdtaWxsaXNlY29uZCc7XG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21pbGxpc2Vjb25kJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpID09PSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlucHV0TXMgPSBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgdGhpcy5jbG9uZSgpLnN0YXJ0T2YodW5pdHMpLnZhbHVlT2YoKSA8PSBpbnB1dE1zICYmXG4gICAgICAgICAgICAgICAgaW5wdXRNcyA8PSB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQWZ0ZXIoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzU2FtZShpbnB1dCwgdW5pdHMpIHx8IHRoaXMuaXNBZnRlcihpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzU2FtZU9yQmVmb3JlKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQmVmb3JlKGlucHV0LCB1bml0cyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlmZihpbnB1dCwgdW5pdHMsIGFzRmxvYXQpIHtcbiAgICAgICAgdmFyIHRoYXQsIHpvbmVEZWx0YSwgb3V0cHV0O1xuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cblxuICAgICAgICB0aGF0ID0gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCB0aGlzKTtcblxuICAgICAgICBpZiAoIXRoYXQuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgem9uZURlbHRhID0gKHRoYXQudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIDZlNDtcblxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAxMjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSBtb250aERpZmYodGhpcywgdGhhdCkgLyAzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gMWUzO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwXG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyA2ZTQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwXG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCwgbmVnYXRlIGRzdFxuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0IC0gem9uZURlbHRhKSAvIDYwNDhlNTtcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMCAqIDYwICogNjAgKiAyNCAqIDcsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gdGhpcyAtIHRoYXQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXNGbG9hdCA/IG91dHB1dCA6IGFic0Zsb29yKG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhEaWZmKGEsIGIpIHtcbiAgICAgICAgaWYgKGEuZGF0ZSgpIDwgYi5kYXRlKCkpIHtcbiAgICAgICAgICAgIC8vIGVuZC1vZi1tb250aCBjYWxjdWxhdGlvbnMgd29yayBjb3JyZWN0IHdoZW4gdGhlIHN0YXJ0IG1vbnRoIGhhcyBtb3JlXG4gICAgICAgICAgICAvLyBkYXlzIHRoYW4gdGhlIGVuZCBtb250aC5cbiAgICAgICAgICAgIHJldHVybiAtbW9udGhEaWZmKGIsIGEpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGRpZmZlcmVuY2UgaW4gbW9udGhzXG4gICAgICAgIHZhciB3aG9sZU1vbnRoRGlmZiA9IChiLnllYXIoKSAtIGEueWVhcigpKSAqIDEyICsgKGIubW9udGgoKSAtIGEubW9udGgoKSksXG4gICAgICAgICAgICAvLyBiIGlzIGluIChhbmNob3IgLSAxIG1vbnRoLCBhbmNob3IgKyAxIG1vbnRoKVxuICAgICAgICAgICAgYW5jaG9yID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiwgJ21vbnRocycpLFxuICAgICAgICAgICAgYW5jaG9yMixcbiAgICAgICAgICAgIGFkanVzdDtcblxuICAgICAgICBpZiAoYiAtIGFuY2hvciA8IDApIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmIC0gMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IgLSBhbmNob3IyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFuY2hvcjIgPSBhLmNsb25lKCkuYWRkKHdob2xlTW9udGhEaWZmICsgMSwgJ21vbnRocycpO1xuICAgICAgICAgICAgLy8gbGluZWFyIGFjcm9zcyB0aGUgbW9udGhcbiAgICAgICAgICAgIGFkanVzdCA9IChiIC0gYW5jaG9yKSAvIChhbmNob3IyIC0gYW5jaG9yKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vY2hlY2sgZm9yIG5lZ2F0aXZlIHplcm8sIHJldHVybiB6ZXJvIGlmIG5lZ2F0aXZlIHplcm9cbiAgICAgICAgcmV0dXJuIC0od2hvbGVNb250aERpZmYgKyBhZGp1c3QpIHx8IDA7XG4gICAgfVxuXG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdCA9ICdZWVlZLU1NLUREVEhIOm1tOnNzWic7XG4gICAgaG9va3MuZGVmYXVsdEZvcm1hdFV0YyA9ICdZWVlZLU1NLUREVEhIOm1tOnNzW1pdJztcblxuICAgIGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpLmxvY2FsZSgnZW4nKS5mb3JtYXQoJ2RkZCBNTU0gREQgWVlZWSBISDptbTpzcyBbR01UXVpaJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JU09TdHJpbmcoa2VlcE9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgdXRjID0ga2VlcE9mZnNldCAhPT0gdHJ1ZSxcbiAgICAgICAgICAgIG0gPSB1dGMgPyB0aGlzLmNsb25lKCkudXRjKCkgOiB0aGlzO1xuICAgICAgICBpZiAobS55ZWFyKCkgPCAwIHx8IG0ueWVhcigpID4gOTk5OSkge1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgICAgICBtLFxuICAgICAgICAgICAgICAgIHV0Y1xuICAgICAgICAgICAgICAgICAgICA/ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NbWl0nXG4gICAgICAgICAgICAgICAgICAgIDogJ1lZWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKERhdGUucHJvdG90eXBlLnRvSVNPU3RyaW5nKSkge1xuICAgICAgICAgICAgLy8gbmF0aXZlIGltcGxlbWVudGF0aW9uIGlzIH41MHggZmFzdGVyLCB1c2UgaXQgd2hlbiB3ZSBjYW5cbiAgICAgICAgICAgIGlmICh1dGMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50b0RhdGUoKS50b0lTT1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkgKyB0aGlzLnV0Y09mZnNldCgpICogNjAgKiAxMDAwKVxuICAgICAgICAgICAgICAgICAgICAudG9JU09TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgnWicsIGZvcm1hdE1vbWVudChtLCAnWicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0TW9tZW50KFxuICAgICAgICAgICAgbSxcbiAgICAgICAgICAgIHV0YyA/ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJyA6ICdZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTWidcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBodW1hbiByZWFkYWJsZSByZXByZXNlbnRhdGlvbiBvZiBhIG1vbWVudCB0aGF0IGNhblxuICAgICAqIGFsc28gYmUgZXZhbHVhdGVkIHRvIGdldCBhIG5ldyBtb21lbnQgd2hpY2ggaXMgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEBsaW5rIGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC9kb2NzL2FwaS91dGlsLmh0bWwjdXRpbF9jdXN0b21faW5zcGVjdF9mdW5jdGlvbl9vbl9vYmplY3RzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5zcGVjdCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuICdtb21lbnQuaW52YWxpZCgvKiAnICsgdGhpcy5faSArICcgKi8pJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgZnVuYyA9ICdtb21lbnQnLFxuICAgICAgICAgICAgem9uZSA9ICcnLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgIGRhdGV0aW1lLFxuICAgICAgICAgICAgc3VmZml4O1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2NhbCgpKSB7XG4gICAgICAgICAgICBmdW5jID0gdGhpcy51dGNPZmZzZXQoKSA9PT0gMCA/ICdtb21lbnQudXRjJyA6ICdtb21lbnQucGFyc2Vab25lJztcbiAgICAgICAgICAgIHpvbmUgPSAnWic7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ID0gJ1snICsgZnVuYyArICcoXCJdJztcbiAgICAgICAgeWVhciA9IDAgPD0gdGhpcy55ZWFyKCkgJiYgdGhpcy55ZWFyKCkgPD0gOTk5OSA/ICdZWVlZJyA6ICdZWVlZWVknO1xuICAgICAgICBkYXRldGltZSA9ICctTU0tRERbVF1ISDptbTpzcy5TU1MnO1xuICAgICAgICBzdWZmaXggPSB6b25lICsgJ1tcIildJztcblxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXQocHJlZml4ICsgeWVhciArIGRhdGV0aW1lICsgc3VmZml4KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JtYXQoaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgaWYgKCFpbnB1dFN0cmluZykge1xuICAgICAgICAgICAgaW5wdXRTdHJpbmcgPSB0aGlzLmlzVXRjKClcbiAgICAgICAgICAgICAgICA/IGhvb2tzLmRlZmF1bHRGb3JtYXRVdGNcbiAgICAgICAgICAgICAgICA6IGhvb2tzLmRlZmF1bHRGb3JtYXQ7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdE1vbWVudCh0aGlzLCBpbnB1dFN0cmluZyk7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbSh0aW1lLCB3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAoKGlzTW9tZW50KHRpbWUpICYmIHRpbWUuaXNWYWxpZCgpKSB8fCBjcmVhdGVMb2NhbCh0aW1lKS5pc1ZhbGlkKCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHsgdG86IHRoaXMsIGZyb206IHRpbWUgfSlcbiAgICAgICAgICAgICAgICAubG9jYWxlKHRoaXMubG9jYWxlKCkpXG4gICAgICAgICAgICAgICAgLmh1bWFuaXplKCF3aXRob3V0U3VmZml4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZnJvbU5vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZyb20oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG8odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IGZyb206IHRoaXMsIHRvOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvTm93KHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG8oY3JlYXRlTG9jYWwoKSwgd2l0aG91dFN1ZmZpeCk7XG4gICAgfVxuXG4gICAgLy8gSWYgcGFzc2VkIGEgbG9jYWxlIGtleSwgaXQgd2lsbCBzZXQgdGhlIGxvY2FsZSBmb3IgdGhpc1xuICAgIC8vIGluc3RhbmNlLiAgT3RoZXJ3aXNlLCBpdCB3aWxsIHJldHVybiB0aGUgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbiAgICAvLyB2YXJpYWJsZXMgZm9yIHRoaXMgaW5zdGFuY2UuXG4gICAgZnVuY3Rpb24gbG9jYWxlKGtleSkge1xuICAgICAgICB2YXIgbmV3TG9jYWxlRGF0YTtcblxuICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGUuX2FiYnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdMb2NhbGVEYXRhID0gZ2V0TG9jYWxlKGtleSk7XG4gICAgICAgICAgICBpZiAobmV3TG9jYWxlRGF0YSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9jYWxlID0gbmV3TG9jYWxlRGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGxhbmcgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb21lbnQoKS5sYW5nKCkgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCwgdXNlIG1vbWVudCgpLmxvY2FsZURhdGEoKSB0byBnZXQgdGhlIGxhbmd1YWdlIGNvbmZpZ3VyYXRpb24uIFVzZSBtb21lbnQoKS5sb2NhbGUoKSB0byBjaGFuZ2UgbGFuZ3VhZ2VzLicsXG4gICAgICAgIGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xvY2FsZTtcbiAgICB9XG5cbiAgICB2YXIgTVNfUEVSX1NFQ09ORCA9IDEwMDAsXG4gICAgICAgIE1TX1BFUl9NSU5VVEUgPSA2MCAqIE1TX1BFUl9TRUNPTkQsXG4gICAgICAgIE1TX1BFUl9IT1VSID0gNjAgKiBNU19QRVJfTUlOVVRFLFxuICAgICAgICBNU19QRVJfNDAwX1lFQVJTID0gKDM2NSAqIDQwMCArIDk3KSAqIDI0ICogTVNfUEVSX0hPVVI7XG5cbiAgICAvLyBhY3R1YWwgbW9kdWxvIC0gaGFuZGxlcyBuZWdhdGl2ZSBudW1iZXJzIChmb3IgZGF0ZXMgYmVmb3JlIDE5NzApOlxuICAgIGZ1bmN0aW9uIG1vZCQxKGRpdmlkZW5kLCBkaXZpc29yKSB7XG4gICAgICAgIHJldHVybiAoKGRpdmlkZW5kICUgZGl2aXNvcikgKyBkaXZpc29yKSAlIGRpdmlzb3I7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHksIG0sIGQpLnZhbHVlT2YoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHV0Y1N0YXJ0T2ZEYXRlKHksIG0sIGQpIHtcbiAgICAgICAgLy8gRGF0ZS5VVEMgcmVtYXBzIHllYXJzIDAtOTkgdG8gMTkwMC0xOTk5XG4gICAgICAgIGlmICh5IDwgMTAwICYmIHkgPj0gMCkge1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIHJldHVybiBEYXRlLlVUQyh5ICsgNDAwLCBtLCBkKSAtIE1TX1BFUl80MDBfWUVBUlM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSwgbSwgZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdGFydE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgMCwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCkgLSAodGhpcy5tb250aCgpICUgMyksXG4gICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCAxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSB0aGlzLndlZWtkYXkoKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdpc29XZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gKHRoaXMuaXNvV2Vla2RheSgpIC0gMSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpLCB0aGlzLmRhdGUoKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgIE1TX1BFUl9IT1VSXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEodGltZSwgTVNfUEVSX01JTlVURSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZC5zZXRUaW1lKHRpbWUpO1xuICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mKHVuaXRzKSB7XG4gICAgICAgIHZhciB0aW1lLCBzdGFydE9mRGF0ZTtcbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgIGlmICh1bml0cyA9PT0gdW5kZWZpbmVkIHx8IHVuaXRzID09PSAnbWlsbGlzZWNvbmQnIHx8ICF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cblxuICAgICAgICBzdGFydE9mRGF0ZSA9IHRoaXMuX2lzVVRDID8gdXRjU3RhcnRPZkRhdGUgOiBsb2NhbFN0YXJ0T2ZEYXRlO1xuXG4gICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSArIDEsIDAsIDEpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpICsgMyxcbiAgICAgICAgICAgICAgICAgICAgICAgIDFcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCkgKyAxLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KCkgKyA3XG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkgKyAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSArPVxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUiAtXG4gICAgICAgICAgICAgICAgICAgIG1vZCQxKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSArICh0aGlzLl9pc1VUQyA/IDAgOiB0aGlzLnV0Y09mZnNldCgpICogTVNfUEVSX01JTlVURSksXG4gICAgICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICAgICApIC1cbiAgICAgICAgICAgICAgICAgICAgMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX01JTlVURSAtIG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz0gTVNfUEVSX1NFQ09ORCAtIG1vZCQxKHRpbWUsIE1TX1BFUl9TRUNPTkQpIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2YWx1ZU9mKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZC52YWx1ZU9mKCkgLSAodGhpcy5fb2Zmc2V0IHx8IDApICogNjAwMDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdW5peCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxMDAwKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0RhdGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZSh0aGlzLnZhbHVlT2YoKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgICAgICAgdmFyIG0gPSB0aGlzO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgbS55ZWFyKCksXG4gICAgICAgICAgICBtLm1vbnRoKCksXG4gICAgICAgICAgICBtLmRhdGUoKSxcbiAgICAgICAgICAgIG0uaG91cigpLFxuICAgICAgICAgICAgbS5taW51dGUoKSxcbiAgICAgICAgICAgIG0uc2Vjb25kKCksXG4gICAgICAgICAgICBtLm1pbGxpc2Vjb25kKCksXG4gICAgICAgIF07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9PYmplY3QoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXJzOiBtLnllYXIoKSxcbiAgICAgICAgICAgIG1vbnRoczogbS5tb250aCgpLFxuICAgICAgICAgICAgZGF0ZTogbS5kYXRlKCksXG4gICAgICAgICAgICBob3VyczogbS5ob3VycygpLFxuICAgICAgICAgICAgbWludXRlczogbS5taW51dGVzKCksXG4gICAgICAgICAgICBzZWNvbmRzOiBtLnNlY29uZHMoKSxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kczogbS5taWxsaXNlY29uZHMoKSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgICAgIC8vIG5ldyBEYXRlKE5hTikudG9KU09OKCkgPT09IG51bGxcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1ZhbGlkJDIoKSB7XG4gICAgICAgIHJldHVybiBpc1ZhbGlkKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNpbmdGbGFncygpIHtcbiAgICAgICAgcmV0dXJuIGV4dGVuZCh7fSwgZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkQXQoKSB7XG4gICAgICAgIHJldHVybiBnZXRQYXJzaW5nRmxhZ3ModGhpcykub3ZlcmZsb3c7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRpb25EYXRhKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaW5wdXQ6IHRoaXMuX2ksXG4gICAgICAgICAgICBmb3JtYXQ6IHRoaXMuX2YsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMuX2xvY2FsZSxcbiAgICAgICAgICAgIGlzVVRDOiB0aGlzLl9pc1VUQyxcbiAgICAgICAgICAgIHN0cmljdDogdGhpcy5fc3RyaWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGFkZEZvcm1hdFRva2VuKCdOJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk4nLCAwLCAwLCAnZXJhQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdOTk5OJywgMCwgMCwgJ2VyYU5hbWUnKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTk4nLCAwLCAwLCAnZXJhTmFycm93Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneScsIDFdLCAneW8nLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eScsIDJdLCAwLCAnZXJhWWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd5JywgWyd5eXknLCAzXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5eScsIDRdLCAwLCAnZXJhWWVhcicpO1xuXG4gICAgYWRkUmVnZXhUb2tlbignTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTicsIG1hdGNoRXJhQWJicik7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTicsIG1hdGNoRXJhTmFtZSk7XG4gICAgYWRkUmVnZXhUb2tlbignTk5OTk4nLCBtYXRjaEVyYU5hcnJvdyk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFxuICAgICAgICBbJ04nLCAnTk4nLCAnTk5OJywgJ05OTk4nLCAnTk5OTk4nXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgdmFyIGVyYSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgICAgIGlmIChlcmEpIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmEgPSBlcmE7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmludmFsaWRFcmEgPSBpbnB1dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICk7XG5cbiAgICBhZGRSZWdleFRva2VuKCd5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXknLCBtYXRjaFVuc2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCd5eXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneW8nLCBtYXRjaEVyYVllYXJPcmRpbmFsKTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWyd5JywgJ3l5JywgJ3l5eScsICd5eXl5J10sIFlFQVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWyd5byddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciBtYXRjaDtcbiAgICAgICAgaWYgKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KSB7XG4gICAgICAgICAgICBtYXRjaCA9IGlucHV0Lm1hdGNoKGNvbmZpZy5fbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYVllYXJPcmRpbmFsUGFyc2UoaW5wdXQsIG1hdGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhcyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLl9lcmFzIHx8IGdldExvY2FsZSgnZW4nKS5fZXJhcztcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS5zaW5jZSkuc3RhcnRPZignZGF5Jyk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0uc2luY2UgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gK0luZmluaXR5O1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBob29rcyhlcmFzW2ldLnVudGlsKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGVyYXNbaV0udW50aWwgPSBkYXRlLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyYXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlRXJhc1BhcnNlKGVyYU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKSxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBhYmJyLFxuICAgICAgICAgICAgbmFycm93O1xuICAgICAgICBlcmFOYW1lID0gZXJhTmFtZS50b1VwcGVyQ2FzZSgpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZSA9IGVyYXNbaV0ubmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgYWJiciA9IGVyYXNbaV0uYWJici50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgbmFycm93ID0gZXJhc1tpXS5uYXJyb3cudG9VcHBlckNhc2UoKTtcblxuICAgICAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ04nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTic6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYWJiciA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTic6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk5OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hcnJvdyA9PT0gZXJhTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChbbmFtZSwgYWJiciwgbmFycm93XS5pbmRleE9mKGVyYU5hbWUpID49IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNDb252ZXJ0WWVhcihlcmEsIHllYXIpIHtcbiAgICAgICAgdmFyIGRpciA9IGVyYS5zaW5jZSA8PSBlcmEudW50aWwgPyArMSA6IC0xO1xuICAgICAgICBpZiAoeWVhciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gaG9va3MoZXJhLnNpbmNlKS55ZWFyKCkgKyAoeWVhciAtIGVyYS5vZmZzZXQpICogZGlyO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFtZSgpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoZXJhc1tpXS5zaW5jZSA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0udW50aWwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5uYW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFOYXJyb3coKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGVyYXNbaV0udW50aWwgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnNpbmNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFycm93O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYUFiYnIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0uYWJicjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhWWVhcigpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZGlyLFxuICAgICAgICAgICAgdmFsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMubG9jYWxlRGF0YSgpLmVyYXMoKTtcbiAgICAgICAgZm9yIChpID0gMCwgbCA9IGVyYXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICAgICAgICBkaXIgPSBlcmFzW2ldLnNpbmNlIDw9IGVyYXNbaV0udW50aWwgPyArMSA6IC0xO1xuXG4gICAgICAgICAgICAvLyB0cnVuY2F0ZSB0aW1lXG4gICAgICAgICAgICB2YWwgPSB0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB8fFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLnllYXIoKSAtIGhvb2tzKGVyYXNbaV0uc2luY2UpLnllYXIoKSkgKiBkaXIgK1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLm9mZnNldFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy55ZWFyKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hbWVSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19lcmFzTmFtZVJlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFtZVJlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNBYmJyUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc0FiYnJSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc0FiYnJSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hcnJvd1JlZ2V4JykpIHtcbiAgICAgICAgICAgIGNvbXB1dGVFcmFzUGFyc2UuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaXNTdHJpY3QgPyB0aGlzLl9lcmFzTmFycm93UmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFBYmJyKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzQWJiclJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hbWUoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLmVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhTmFycm93KGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFycm93UmVnZXgoaXNTdHJpY3QpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhWWVhck9yZGluYWwoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9lcmFZZWFyT3JkaW5hbFJlZ2V4IHx8IG1hdGNoVW5zaWduZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZUVyYXNQYXJzZSgpIHtcbiAgICAgICAgdmFyIGFiYnJQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hbWVQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcyA9IFtdLFxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgZXJhcyA9IHRoaXMuZXJhcygpO1xuXG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgbmFtZVBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFtZSkpO1xuICAgICAgICAgICAgYWJiclBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbmFycm93UGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYXJyb3cpKTtcblxuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5hYmJyKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9lcmFzUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBtaXhlZFBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNOYW1lUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBuYW1lUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc0FiYnJSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIGFiYnJQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFycm93UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIG5hcnJvd1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ2dnJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnR0cnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc29XZWVrWWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1llYXJGb3JtYXRUb2tlbih0b2tlbiwgZ2V0dGVyKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKDAsIFt0b2tlbiwgdG9rZW4ubGVuZ3RoXSwgMCwgZ2V0dGVyKTtcbiAgICB9XG5cbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZ2cnLCAnd2Vla1llYXInKTtcbiAgICBhZGRXZWVrWWVhckZvcm1hdFRva2VuKCdHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHR0cnLCAnaXNvV2Vla1llYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnd2Vla1llYXInLCAnZ2cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtZZWFyJywgJ0dHJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrWWVhcicsIDEpO1xuICAgIGFkZFVuaXRQcmlvcml0eSgnaXNvV2Vla1llYXInLCAxKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignZycsIG1hdGNoU2lnbmVkKTtcbiAgICBhZGRSZWdleFRva2VuKCdHRycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdnZycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdHR0dHJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2cnLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHR0cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2dnZ2cnLCBtYXRjaDF0bzYsIG1hdGNoNik7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihcbiAgICAgICAgWydnZ2dnJywgJ2dnZ2dnJywgJ0dHR0cnLCAnR0dHR0cnXSxcbiAgICAgICAgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgICAgICB3ZWVrW3Rva2VuLnN1YnN0cigwLCAyKV0gPSB0b0ludChpbnB1dCk7XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oWydnZycsICdHRyddLCBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgd2Vla1t0b2tlbl0gPSBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRXZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMud2VlaygpLFxuICAgICAgICAgICAgdGhpcy53ZWVrZGF5KCksXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3csXG4gICAgICAgICAgICB0aGlzLmxvY2FsZURhdGEoKS5fd2Vlay5kb3lcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrWWVhcihpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0U2V0V2Vla1llYXJIZWxwZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICAgIHRoaXMuaXNvV2VlaygpLFxuICAgICAgICAgICAgdGhpcy5pc29XZWVrZGF5KCksXG4gICAgICAgICAgICAxLFxuICAgICAgICAgICAgNFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5ZZWFyKCkge1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldElTT1dlZWtzSW5JU09XZWVrWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMuaXNvV2Vla1llYXIoKSwgMSwgNCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJblllYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy55ZWFyKCksIHdlZWtJbmZvLmRvdywgd2Vla0luZm8uZG95KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRXZWVrc0luV2Vla1llYXIoKSB7XG4gICAgICAgIHZhciB3ZWVrSW5mbyA9IHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrO1xuICAgICAgICByZXR1cm4gd2Vla3NJblllYXIodGhpcy53ZWVrWWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXJIZWxwZXIoaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrc1RhcmdldDtcbiAgICAgICAgaWYgKGlucHV0ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB3ZWVrT2ZZZWFyKHRoaXMsIGRvdywgZG95KS55ZWFyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgd2Vla3NUYXJnZXQgPSB3ZWVrc0luWWVhcihpbnB1dCwgZG93LCBkb3kpO1xuICAgICAgICAgICAgaWYgKHdlZWsgPiB3ZWVrc1RhcmdldCkge1xuICAgICAgICAgICAgICAgIHdlZWsgPSB3ZWVrc1RhcmdldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBzZXRXZWVrQWxsLmNhbGwodGhpcywgaW5wdXQsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldFdlZWtBbGwod2Vla1llYXIsIHdlZWssIHdlZWtkYXksIGRvdywgZG95KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXJEYXRhID0gZGF5T2ZZZWFyRnJvbVdlZWtzKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZShkYXlPZlllYXJEYXRhLnllYXIsIDAsIGRheU9mWWVhckRhdGEuZGF5T2ZZZWFyKTtcblxuICAgICAgICB0aGlzLnllYXIoZGF0ZS5nZXRVVENGdWxsWWVhcigpKTtcbiAgICAgICAgdGhpcy5tb250aChkYXRlLmdldFVUQ01vbnRoKCkpO1xuICAgICAgICB0aGlzLmRhdGUoZGF0ZS5nZXRVVENEYXRlKCkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUScsIDAsICdRbycsICdxdWFydGVyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3F1YXJ0ZXInLCAnUScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgncXVhcnRlcicsIDcpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignUScsIG1hdGNoMSk7XG4gICAgYWRkUGFyc2VUb2tlbignUScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbTU9OVEhdID0gKHRvSW50KGlucHV0KSAtIDEpICogMztcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIGdldFNldFF1YXJ0ZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGxcbiAgICAgICAgICAgID8gTWF0aC5jZWlsKCh0aGlzLm1vbnRoKCkgKyAxKSAvIDMpXG4gICAgICAgICAgICA6IHRoaXMubW9udGgoKGlucHV0IC0gMSkgKiAzICsgKHRoaXMubW9udGgoKSAlIDMpKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignRCcsIFsnREQnLCAyXSwgJ0RvJywgJ2RhdGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF0ZScsICdEJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF0ZScsIDkpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignRCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignREQnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignRG8nLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHJldHVybiBpc1N0cmljdFxuICAgICAgICAgICAgPyBsb2NhbGUuX2RheU9mTW9udGhPcmRpbmFsUGFyc2UgfHwgbG9jYWxlLl9vcmRpbmFsUGFyc2VcbiAgICAgICAgICAgIDogbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudDtcbiAgICB9KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydEJywgJ0REJ10sIERBVEUpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtEQVRFXSA9IHRvSW50KGlucHV0Lm1hdGNoKG1hdGNoMXRvMilbMF0pO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldERheU9mTW9udGggPSBtYWtlR2V0U2V0KCdEYXRlJywgdHJ1ZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignREREJywgWydEREREJywgM10sICdERERvJywgJ2RheU9mWWVhcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdkYXlPZlllYXInLCAnREREJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnZGF5T2ZZZWFyJywgNCk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdEREQnLCBtYXRjaDF0bzMpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REREQnLCBtYXRjaDMpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydEREQnLCAnRERERCddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0b0ludChpbnB1dCk7XG4gICAgfSk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXREYXlPZlllYXIoaW5wdXQpIHtcbiAgICAgICAgdmFyIGRheU9mWWVhciA9XG4gICAgICAgICAgICBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgICh0aGlzLmNsb25lKCkuc3RhcnRPZignZGF5JykgLSB0aGlzLmNsb25lKCkuc3RhcnRPZigneWVhcicpKSAvIDg2NGU1XG4gICAgICAgICAgICApICsgMTtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09IG51bGwgPyBkYXlPZlllYXIgOiB0aGlzLmFkZChpbnB1dCAtIGRheU9mWWVhciwgJ2QnKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignbScsIFsnbW0nLCAyXSwgMCwgJ21pbnV0ZScpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaW51dGUnLCAnbScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWludXRlJywgMTQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignbScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignbW0nLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUGFyc2VUb2tlbihbJ20nLCAnbW0nXSwgTUlOVVRFKTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXRNaW51dGUgPSBtYWtlR2V0U2V0KCdNaW51dGVzJywgZmFsc2UpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3MnLCBbJ3NzJywgMl0sIDAsICdzZWNvbmQnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnc2Vjb25kJywgJ3MnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3NlY29uZCcsIDE1KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3MnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3NzJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydzJywgJ3NzJ10sIFNFQ09ORCk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0U2Vjb25kID0gbWFrZUdldFNldCgnU2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdTJywgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTAwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1MnLCAyXSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gfn4odGhpcy5taWxsaXNlY29uZCgpIC8gMTApO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1MnLCAzXSwgMCwgJ21pbGxpc2Vjb25kJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTJywgNF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1MnLCA1XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTJywgNl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDA7XG4gICAgfSk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydTU1NTU1NTJywgN10sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1MnLCA4XSwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5taWxsaXNlY29uZCgpICogMTAwMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTU1NTJywgOV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDA7XG4gICAgfSk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ21pbGxpc2Vjb25kJywgJ21zJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdtaWxsaXNlY29uZCcsIDE2KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1MnLCBtYXRjaDF0bzMsIG1hdGNoMSk7XG4gICAgYWRkUmVnZXhUb2tlbignU1MnLCBtYXRjaDF0bzMsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignU1NTJywgbWF0Y2gxdG8zLCBtYXRjaDMpO1xuXG4gICAgdmFyIHRva2VuLCBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBmb3IgKHRva2VuID0gJ1NTU1MnOyB0b2tlbi5sZW5ndGggPD0gOTsgdG9rZW4gKz0gJ1MnKSB7XG4gICAgICAgIGFkZFJlZ2V4VG9rZW4odG9rZW4sIG1hdGNoVW5zaWduZWQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTXMoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01JTExJU0VDT05EXSA9IHRvSW50KCgnMC4nICsgaW5wdXQpICogMTAwMCk7XG4gICAgfVxuXG4gICAgZm9yICh0b2tlbiA9ICdTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRQYXJzZVRva2VuKHRva2VuLCBwYXJzZU1zKTtcbiAgICB9XG5cbiAgICBnZXRTZXRNaWxsaXNlY29uZCA9IG1ha2VHZXRTZXQoJ01pbGxpc2Vjb25kcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd6JywgMCwgMCwgJ3pvbmVBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3p6JywgMCwgMCwgJ3pvbmVOYW1lJyk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRab25lQWJicigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ1VUQycgOiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRab25lTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gJ0Nvb3JkaW5hdGVkIFVuaXZlcnNhbCBUaW1lJyA6ICcnO1xuICAgIH1cblxuICAgIHZhciBwcm90byA9IE1vbWVudC5wcm90b3R5cGU7XG5cbiAgICBwcm90by5hZGQgPSBhZGQ7XG4gICAgcHJvdG8uY2FsZW5kYXIgPSBjYWxlbmRhciQxO1xuICAgIHByb3RvLmNsb25lID0gY2xvbmU7XG4gICAgcHJvdG8uZGlmZiA9IGRpZmY7XG4gICAgcHJvdG8uZW5kT2YgPSBlbmRPZjtcbiAgICBwcm90by5mb3JtYXQgPSBmb3JtYXQ7XG4gICAgcHJvdG8uZnJvbSA9IGZyb207XG4gICAgcHJvdG8uZnJvbU5vdyA9IGZyb21Ob3c7XG4gICAgcHJvdG8udG8gPSB0bztcbiAgICBwcm90by50b05vdyA9IHRvTm93O1xuICAgIHByb3RvLmdldCA9IHN0cmluZ0dldDtcbiAgICBwcm90by5pbnZhbGlkQXQgPSBpbnZhbGlkQXQ7XG4gICAgcHJvdG8uaXNBZnRlciA9IGlzQWZ0ZXI7XG4gICAgcHJvdG8uaXNCZWZvcmUgPSBpc0JlZm9yZTtcbiAgICBwcm90by5pc0JldHdlZW4gPSBpc0JldHdlZW47XG4gICAgcHJvdG8uaXNTYW1lID0gaXNTYW1lO1xuICAgIHByb3RvLmlzU2FtZU9yQWZ0ZXIgPSBpc1NhbWVPckFmdGVyO1xuICAgIHByb3RvLmlzU2FtZU9yQmVmb3JlID0gaXNTYW1lT3JCZWZvcmU7XG4gICAgcHJvdG8uaXNWYWxpZCA9IGlzVmFsaWQkMjtcbiAgICBwcm90by5sYW5nID0gbGFuZztcbiAgICBwcm90by5sb2NhbGUgPSBsb2NhbGU7XG4gICAgcHJvdG8ubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG4gICAgcHJvdG8ubWF4ID0gcHJvdG90eXBlTWF4O1xuICAgIHByb3RvLm1pbiA9IHByb3RvdHlwZU1pbjtcbiAgICBwcm90by5wYXJzaW5nRmxhZ3MgPSBwYXJzaW5nRmxhZ3M7XG4gICAgcHJvdG8uc2V0ID0gc3RyaW5nU2V0O1xuICAgIHByb3RvLnN0YXJ0T2YgPSBzdGFydE9mO1xuICAgIHByb3RvLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG4gICAgcHJvdG8udG9BcnJheSA9IHRvQXJyYXk7XG4gICAgcHJvdG8udG9PYmplY3QgPSB0b09iamVjdDtcbiAgICBwcm90by50b0RhdGUgPSB0b0RhdGU7XG4gICAgcHJvdG8udG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZztcbiAgICBwcm90by5pbnNwZWN0ID0gaW5zcGVjdDtcbiAgICBpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLmZvciAhPSBudWxsKSB7XG4gICAgICAgIHByb3RvW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuICdNb21lbnQ8JyArIHRoaXMuZm9ybWF0KCkgKyAnPic7XG4gICAgICAgIH07XG4gICAgfVxuICAgIHByb3RvLnRvSlNPTiA9IHRvSlNPTjtcbiAgICBwcm90by50b1N0cmluZyA9IHRvU3RyaW5nO1xuICAgIHByb3RvLnVuaXggPSB1bml4O1xuICAgIHByb3RvLnZhbHVlT2YgPSB2YWx1ZU9mO1xuICAgIHByb3RvLmNyZWF0aW9uRGF0YSA9IGNyZWF0aW9uRGF0YTtcbiAgICBwcm90by5lcmFOYW1lID0gZ2V0RXJhTmFtZTtcbiAgICBwcm90by5lcmFOYXJyb3cgPSBnZXRFcmFOYXJyb3c7XG4gICAgcHJvdG8uZXJhQWJiciA9IGdldEVyYUFiYnI7XG4gICAgcHJvdG8uZXJhWWVhciA9IGdldEVyYVllYXI7XG4gICAgcHJvdG8ueWVhciA9IGdldFNldFllYXI7XG4gICAgcHJvdG8uaXNMZWFwWWVhciA9IGdldElzTGVhcFllYXI7XG4gICAgcHJvdG8ud2Vla1llYXIgPSBnZXRTZXRXZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrWWVhciA9IGdldFNldElTT1dlZWtZZWFyO1xuICAgIHByb3RvLnF1YXJ0ZXIgPSBwcm90by5xdWFydGVycyA9IGdldFNldFF1YXJ0ZXI7XG4gICAgcHJvdG8ubW9udGggPSBnZXRTZXRNb250aDtcbiAgICBwcm90by5kYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoO1xuICAgIHByb3RvLndlZWsgPSBwcm90by53ZWVrcyA9IGdldFNldFdlZWs7XG4gICAgcHJvdG8uaXNvV2VlayA9IHByb3RvLmlzb1dlZWtzID0gZ2V0U2V0SVNPV2VlaztcbiAgICBwcm90by53ZWVrc0luWWVhciA9IGdldFdlZWtzSW5ZZWFyO1xuICAgIHByb3RvLndlZWtzSW5XZWVrWWVhciA9IGdldFdlZWtzSW5XZWVrWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luWWVhciA9IGdldElTT1dlZWtzSW5ZZWFyO1xuICAgIHByb3RvLmlzb1dlZWtzSW5JU09XZWVrWWVhciA9IGdldElTT1dlZWtzSW5JU09XZWVrWWVhcjtcbiAgICBwcm90by5kYXRlID0gZ2V0U2V0RGF5T2ZNb250aDtcbiAgICBwcm90by5kYXkgPSBwcm90by5kYXlzID0gZ2V0U2V0RGF5T2ZXZWVrO1xuICAgIHByb3RvLndlZWtkYXkgPSBnZXRTZXRMb2NhbGVEYXlPZldlZWs7XG4gICAgcHJvdG8uaXNvV2Vla2RheSA9IGdldFNldElTT0RheU9mV2VlaztcbiAgICBwcm90by5kYXlPZlllYXIgPSBnZXRTZXREYXlPZlllYXI7XG4gICAgcHJvdG8uaG91ciA9IHByb3RvLmhvdXJzID0gZ2V0U2V0SG91cjtcbiAgICBwcm90by5taW51dGUgPSBwcm90by5taW51dGVzID0gZ2V0U2V0TWludXRlO1xuICAgIHByb3RvLnNlY29uZCA9IHByb3RvLnNlY29uZHMgPSBnZXRTZXRTZWNvbmQ7XG4gICAgcHJvdG8ubWlsbGlzZWNvbmQgPSBwcm90by5taWxsaXNlY29uZHMgPSBnZXRTZXRNaWxsaXNlY29uZDtcbiAgICBwcm90by51dGNPZmZzZXQgPSBnZXRTZXRPZmZzZXQ7XG4gICAgcHJvdG8udXRjID0gc2V0T2Zmc2V0VG9VVEM7XG4gICAgcHJvdG8ubG9jYWwgPSBzZXRPZmZzZXRUb0xvY2FsO1xuICAgIHByb3RvLnBhcnNlWm9uZSA9IHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0O1xuICAgIHByb3RvLmhhc0FsaWduZWRIb3VyT2Zmc2V0ID0gaGFzQWxpZ25lZEhvdXJPZmZzZXQ7XG4gICAgcHJvdG8uaXNEU1QgPSBpc0RheWxpZ2h0U2F2aW5nVGltZTtcbiAgICBwcm90by5pc0xvY2FsID0gaXNMb2NhbDtcbiAgICBwcm90by5pc1V0Y09mZnNldCA9IGlzVXRjT2Zmc2V0O1xuICAgIHByb3RvLmlzVXRjID0gaXNVdGM7XG4gICAgcHJvdG8uaXNVVEMgPSBpc1V0YztcbiAgICBwcm90by56b25lQWJiciA9IGdldFpvbmVBYmJyO1xuICAgIHByb3RvLnpvbmVOYW1lID0gZ2V0Wm9uZU5hbWU7XG4gICAgcHJvdG8uZGF0ZXMgPSBkZXByZWNhdGUoXG4gICAgICAgICdkYXRlcyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgZGF0ZSBpbnN0ZWFkLicsXG4gICAgICAgIGdldFNldERheU9mTW9udGhcbiAgICApO1xuICAgIHByb3RvLm1vbnRocyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbnRocyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgbW9udGggaW5zdGVhZCcsXG4gICAgICAgIGdldFNldE1vbnRoXG4gICAgKTtcbiAgICBwcm90by55ZWFycyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3llYXJzIGFjY2Vzc29yIGlzIGRlcHJlY2F0ZWQuIFVzZSB5ZWFyIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRZZWFyXG4gICAgKTtcbiAgICBwcm90by56b25lID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkuem9uZSBpcyBkZXByZWNhdGVkLCB1c2UgbW9tZW50KCkudXRjT2Zmc2V0IGluc3RlYWQuIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3Mvem9uZS8nLFxuICAgICAgICBnZXRTZXRab25lXG4gICAgKTtcbiAgICBwcm90by5pc0RTVFNoaWZ0ZWQgPSBkZXByZWNhdGUoXG4gICAgICAgICdpc0RTVFNoaWZ0ZWQgaXMgZGVwcmVjYXRlZC4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvZHN0LXNoaWZ0ZWQvIGZvciBtb3JlIGluZm9ybWF0aW9uJyxcbiAgICAgICAgaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVuaXgoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKGlucHV0ICogMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW5ab25lKCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKS5wYXJzZVpvbmUoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwcmVQYXJzZVBvc3RGb3JtYXQoc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmc7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDEgPSBMb2NhbGUucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMS5jYWxlbmRhciA9IGNhbGVuZGFyO1xuICAgIHByb3RvJDEubG9uZ0RhdGVGb3JtYXQgPSBsb25nRGF0ZUZvcm1hdDtcbiAgICBwcm90byQxLmludmFsaWREYXRlID0gaW52YWxpZERhdGU7XG4gICAgcHJvdG8kMS5vcmRpbmFsID0gb3JkaW5hbDtcbiAgICBwcm90byQxLnByZXBhcnNlID0gcHJlUGFyc2VQb3N0Rm9ybWF0O1xuICAgIHByb3RvJDEucG9zdGZvcm1hdCA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnJlbGF0aXZlVGltZSA9IHJlbGF0aXZlVGltZTtcbiAgICBwcm90byQxLnBhc3RGdXR1cmUgPSBwYXN0RnV0dXJlO1xuICAgIHByb3RvJDEuc2V0ID0gc2V0O1xuICAgIHByb3RvJDEuZXJhcyA9IGxvY2FsZUVyYXM7XG4gICAgcHJvdG8kMS5lcmFzUGFyc2UgPSBsb2NhbGVFcmFzUGFyc2U7XG4gICAgcHJvdG8kMS5lcmFzQ29udmVydFllYXIgPSBsb2NhbGVFcmFzQ29udmVydFllYXI7XG4gICAgcHJvdG8kMS5lcmFzQWJiclJlZ2V4ID0gZXJhc0FiYnJSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYW1lUmVnZXggPSBlcmFzTmFtZVJlZ2V4O1xuICAgIHByb3RvJDEuZXJhc05hcnJvd1JlZ2V4ID0gZXJhc05hcnJvd1JlZ2V4O1xuXG4gICAgcHJvdG8kMS5tb250aHMgPSBsb2NhbGVNb250aHM7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydCA9IGxvY2FsZU1vbnRoc1Nob3J0O1xuICAgIHByb3RvJDEubW9udGhzUGFyc2UgPSBsb2NhbGVNb250aHNQYXJzZTtcbiAgICBwcm90byQxLm1vbnRoc1JlZ2V4ID0gbW9udGhzUmVnZXg7XG4gICAgcHJvdG8kMS5tb250aHNTaG9ydFJlZ2V4ID0gbW9udGhzU2hvcnRSZWdleDtcbiAgICBwcm90byQxLndlZWsgPSBsb2NhbGVXZWVrO1xuICAgIHByb3RvJDEuZmlyc3REYXlPZlllYXIgPSBsb2NhbGVGaXJzdERheU9mWWVhcjtcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZXZWVrID0gbG9jYWxlRmlyc3REYXlPZldlZWs7XG5cbiAgICBwcm90byQxLndlZWtkYXlzID0gbG9jYWxlV2Vla2RheXM7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pbiA9IGxvY2FsZVdlZWtkYXlzTWluO1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydCA9IGxvY2FsZVdlZWtkYXlzU2hvcnQ7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1BhcnNlID0gbG9jYWxlV2Vla2RheXNQYXJzZTtcblxuICAgIHByb3RvJDEud2Vla2RheXNSZWdleCA9IHdlZWtkYXlzUmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c1Nob3J0UmVnZXggPSB3ZWVrZGF5c1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrZGF5c01pblJlZ2V4ID0gd2Vla2RheXNNaW5SZWdleDtcblxuICAgIHByb3RvJDEuaXNQTSA9IGxvY2FsZUlzUE07XG4gICAgcHJvdG8kMS5tZXJpZGllbSA9IGxvY2FsZU1lcmlkaWVtO1xuXG4gICAgZnVuY3Rpb24gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsIHNldHRlcikge1xuICAgICAgICB2YXIgbG9jYWxlID0gZ2V0TG9jYWxlKCksXG4gICAgICAgICAgICB1dGMgPSBjcmVhdGVVVEMoKS5zZXQoc2V0dGVyLCBpbmRleCk7XG4gICAgICAgIHJldHVybiBsb2NhbGVbZmllbGRdKHV0YywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIGluZGV4LCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG91dCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgb3V0W2ldID0gZ2V0JDEoZm9ybWF0LCBpLCBmaWVsZCwgJ21vbnRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICB9XG5cbiAgICAvLyAoKVxuICAgIC8vICg1KVxuICAgIC8vIChmbXQsIDUpXG4gICAgLy8gKGZtdClcbiAgICAvLyAodHJ1ZSlcbiAgICAvLyAodHJ1ZSwgNSlcbiAgICAvLyAodHJ1ZSwgZm10LCA1KVxuICAgIC8vICh0cnVlLCBmbXQpXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzSW1wbChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbG9jYWxlU29ydGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGlmIChpc051bWJlcihmb3JtYXQpKSB7XG4gICAgICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQgfHwgJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBsb2NhbGVTb3J0ZWQ7XG4gICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGxvY2FsZVNvcnRlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgc2hpZnQgPSBsb2NhbGVTb3J0ZWQgPyBsb2NhbGUuX3dlZWsuZG93IDogMCxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcblxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGdldCQxKGZvcm1hdCwgKGluZGV4ICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgKGkgKyBzaGlmdCkgJSA3LCBmaWVsZCwgJ2RheScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRocyhmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc1Nob3J0KGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RNb250aHNJbXBsKGZvcm1hdCwgaW5kZXgsICdtb250aHNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5cyhsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXMnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNTaG9ydChsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNTaG9ydCcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c01pbihsb2NhbGVTb3J0ZWQsIGZvcm1hdCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCAnd2Vla2RheXNNaW4nKTtcbiAgICB9XG5cbiAgICBnZXRTZXRHbG9iYWxMb2NhbGUoJ2VuJywge1xuICAgICAgICBlcmFzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAxLTAxLTAxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogK0luZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQW5ubyBEb21pbmknLFxuICAgICAgICAgICAgICAgIG5hcnJvdzogJ0FEJyxcbiAgICAgICAgICAgICAgICBhYmJyOiAnQUQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBzaW5jZTogJzAwMDAtMTItMzEnLFxuICAgICAgICAgICAgICAgIHVudGlsOiAtSW5maW5pdHksXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdCZWZvcmUgQ2hyaXN0JyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdCQycsXG4gICAgICAgICAgICAgICAgYWJicjogJ0JDJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfSh0aHxzdHxuZHxyZCkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIHRvSW50KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICd0aCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnc3QnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ25kJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICdyZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJ3RoJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICAvLyBTaWRlIGVmZmVjdCBpbXBvcnRzXG5cbiAgICBob29rcy5sYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmcgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbWVudC5sb2NhbGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGVcbiAgICApO1xuICAgIGhvb2tzLmxhbmdEYXRhID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50LmxhbmdEYXRhIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlRGF0YSBpbnN0ZWFkLicsXG4gICAgICAgIGdldExvY2FsZVxuICAgICk7XG5cbiAgICB2YXIgbWF0aEFicyA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gYWJzKCkge1xuICAgICAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzID0gbWF0aEFicyh0aGlzLl9taWxsaXNlY29uZHMpO1xuICAgICAgICB0aGlzLl9kYXlzID0gbWF0aEFicyh0aGlzLl9kYXlzKTtcbiAgICAgICAgdGhpcy5fbW9udGhzID0gbWF0aEFicyh0aGlzLl9tb250aHMpO1xuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWF0aEFicyhkYXRhLm1pbGxpc2Vjb25kcyk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5zZWNvbmRzKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWF0aEFicyhkYXRhLm1pbnV0ZXMpO1xuICAgICAgICBkYXRhLmhvdXJzID0gbWF0aEFicyhkYXRhLmhvdXJzKTtcbiAgICAgICAgZGF0YS5tb250aHMgPSBtYXRoQWJzKGRhdGEubW9udGhzKTtcbiAgICAgICAgZGF0YS55ZWFycyA9IG1hdGhBYnMoZGF0YS55ZWFycyk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkU3VidHJhY3QkMShkdXJhdGlvbiwgaW5wdXQsIHZhbHVlLCBkaXJlY3Rpb24pIHtcbiAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlRHVyYXRpb24oaW5wdXQsIHZhbHVlKTtcblxuICAgICAgICBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9taWxsaXNlY29uZHM7XG4gICAgICAgIGR1cmF0aW9uLl9kYXlzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9kYXlzO1xuICAgICAgICBkdXJhdGlvbi5fbW9udGhzICs9IGRpcmVjdGlvbiAqIG90aGVyLl9tb250aHM7XG5cbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uLl9idWJibGUoKTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0cyBvbmx5IDIuMC1zdHlsZSBhZGQoMSwgJ3MnKSBvciBhZGQoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gYWRkJDEoaW5wdXQsIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdCQxKHRoaXMsIGlucHV0LCB2YWx1ZSwgMSk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgc3VidHJhY3QoMSwgJ3MnKSBvciBzdWJ0cmFjdChkdXJhdGlvbilcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIC0xKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNDZWlsKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJ1YmJsZSgpIHtcbiAgICAgICAgdmFyIG1pbGxpc2Vjb25kcyA9IHRoaXMuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzLFxuICAgICAgICAgICAgbW9udGhzID0gdGhpcy5fbW9udGhzLFxuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RhdGEsXG4gICAgICAgICAgICBzZWNvbmRzLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBtb250aHNGcm9tRGF5cztcblxuICAgICAgICAvLyBpZiB3ZSBoYXZlIGEgbWl4IG9mIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSB2YWx1ZXMsIGJ1YmJsZSBkb3duIGZpcnN0XG4gICAgICAgIC8vIGNoZWNrOiBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9pc3N1ZXMvMjE2NlxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAhKFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPj0gMCAmJiBkYXlzID49IDAgJiYgbW9udGhzID49IDApIHx8XG4gICAgICAgICAgICAgICAgKG1pbGxpc2Vjb25kcyA8PSAwICYmIGRheXMgPD0gMCAmJiBtb250aHMgPD0gMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgKz0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzKSArIGRheXMpICogODY0ZTU7XG4gICAgICAgICAgICBkYXlzID0gMDtcbiAgICAgICAgICAgIG1vbnRocyA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgZm9sbG93aW5nIGNvZGUgYnViYmxlcyB1cCB2YWx1ZXMsIHNlZSB0aGUgdGVzdHMgZm9yXG4gICAgICAgIC8vIGV4YW1wbGVzIG9mIHdoYXQgdGhhdCBtZWFucy5cbiAgICAgICAgZGF0YS5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHMgJSAxMDAwO1xuXG4gICAgICAgIHNlY29uZHMgPSBhYnNGbG9vcihtaWxsaXNlY29uZHMgLyAxMDAwKTtcbiAgICAgICAgZGF0YS5zZWNvbmRzID0gc2Vjb25kcyAlIDYwO1xuXG4gICAgICAgIG1pbnV0ZXMgPSBhYnNGbG9vcihzZWNvbmRzIC8gNjApO1xuICAgICAgICBkYXRhLm1pbnV0ZXMgPSBtaW51dGVzICUgNjA7XG5cbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBkYXRhLmhvdXJzID0gaG91cnMgJSAyNDtcblxuICAgICAgICBkYXlzICs9IGFic0Zsb29yKGhvdXJzIC8gMjQpO1xuXG4gICAgICAgIC8vIGNvbnZlcnQgZGF5cyB0byBtb250aHNcbiAgICAgICAgbW9udGhzRnJvbURheXMgPSBhYnNGbG9vcihkYXlzVG9Nb250aHMoZGF5cykpO1xuICAgICAgICBtb250aHMgKz0gbW9udGhzRnJvbURheXM7XG4gICAgICAgIGRheXMgLT0gYWJzQ2VpbChtb250aHNUb0RheXMobW9udGhzRnJvbURheXMpKTtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgZGF0YS5kYXlzID0gZGF5cztcbiAgICAgICAgZGF0YS5tb250aHMgPSBtb250aHM7XG4gICAgICAgIGRhdGEueWVhcnMgPSB5ZWFycztcblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkYXlzVG9Nb250aHMoZGF5cykge1xuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxNDYwOTcgZGF5cyAodGFraW5nIGludG8gYWNjb3VudCBsZWFwIHllYXIgcnVsZXMpXG4gICAgICAgIC8vIDQwMCB5ZWFycyBoYXZlIDEyIG1vbnRocyA9PT0gNDgwMFxuICAgICAgICByZXR1cm4gKGRheXMgKiA0ODAwKSAvIDE0NjA5NztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNUb0RheXMobW9udGhzKSB7XG4gICAgICAgIC8vIHRoZSByZXZlcnNlIG9mIGRheXNUb01vbnRoc1xuICAgICAgICByZXR1cm4gKG1vbnRocyAqIDE0NjA5NykgLyA0ODAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFzKHVuaXRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGRheXMsXG4gICAgICAgICAgICBtb250aHMsXG4gICAgICAgICAgICBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHM7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgaWYgKHVuaXRzID09PSAnbW9udGgnIHx8IHVuaXRzID09PSAncXVhcnRlcicgfHwgdW5pdHMgPT09ICd5ZWFyJykge1xuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyArIGRheXNUb01vbnRocyhkYXlzKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHM7XG4gICAgICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb250aHMgLyAzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMTI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBoYW5kbGUgbWlsbGlzZWNvbmRzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBmbG9hdGluZyBwb2ludCBtYXRoIGVycm9ycyAoaXNzdWUgIzE4NjcpXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyArIE1hdGgucm91bmQobW9udGhzVG9EYXlzKHRoaXMuX21vbnRocykpO1xuICAgICAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAvIDcgKyBtaWxsaXNlY29uZHMgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKyBtaWxsaXNlY29uZHMgLyA4NjRlNTtcbiAgICAgICAgICAgICAgICBjYXNlICdob3VyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAyNCArIG1pbGxpc2Vjb25kcyAvIDM2ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgKiAxNDQwICsgbWlsbGlzZWNvbmRzIC8gNmU0O1xuICAgICAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogODY0MDAgKyBtaWxsaXNlY29uZHMgLyAxMDAwO1xuICAgICAgICAgICAgICAgIC8vIE1hdGguZmxvb3IgcHJldmVudHMgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgaGVyZVxuICAgICAgICAgICAgICAgIGNhc2UgJ21pbGxpc2Vjb25kJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZGF5cyAqIDg2NGU1KSArIG1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gdW5pdCAnICsgdW5pdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVE9ETzogVXNlIHRoaXMuYXMoJ21zJyk/XG4gICAgZnVuY3Rpb24gdmFsdWVPZiQxKCkge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgK1xuICAgICAgICAgICAgdGhpcy5fZGF5cyAqIDg2NGU1ICtcbiAgICAgICAgICAgICh0aGlzLl9tb250aHMgJSAxMikgKiAyNTkyZTYgK1xuICAgICAgICAgICAgdG9JbnQodGhpcy5fbW9udGhzIC8gMTIpICogMzE1MzZlNlxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VBcyhhbGlhcykge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXMoYWxpYXMpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIHZhciBhc01pbGxpc2Vjb25kcyA9IG1ha2VBcygnbXMnKSxcbiAgICAgICAgYXNTZWNvbmRzID0gbWFrZUFzKCdzJyksXG4gICAgICAgIGFzTWludXRlcyA9IG1ha2VBcygnbScpLFxuICAgICAgICBhc0hvdXJzID0gbWFrZUFzKCdoJyksXG4gICAgICAgIGFzRGF5cyA9IG1ha2VBcygnZCcpLFxuICAgICAgICBhc1dlZWtzID0gbWFrZUFzKCd3JyksXG4gICAgICAgIGFzTW9udGhzID0gbWFrZUFzKCdNJyksXG4gICAgICAgIGFzUXVhcnRlcnMgPSBtYWtlQXMoJ1EnKSxcbiAgICAgICAgYXNZZWFycyA9IG1ha2VBcygneScpO1xuXG4gICAgZnVuY3Rpb24gY2xvbmUkMSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUR1cmF0aW9uKHRoaXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldCQyKHVuaXRzKSB7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ZhbGlkKCkgPyB0aGlzW3VuaXRzICsgJ3MnXSgpIDogTmFOO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXR0ZXIobmFtZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy5fZGF0YVtuYW1lXSA6IE5hTjtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgbWlsbGlzZWNvbmRzID0gbWFrZUdldHRlcignbWlsbGlzZWNvbmRzJyksXG4gICAgICAgIHNlY29uZHMgPSBtYWtlR2V0dGVyKCdzZWNvbmRzJyksXG4gICAgICAgIG1pbnV0ZXMgPSBtYWtlR2V0dGVyKCdtaW51dGVzJyksXG4gICAgICAgIGhvdXJzID0gbWFrZUdldHRlcignaG91cnMnKSxcbiAgICAgICAgZGF5cyA9IG1ha2VHZXR0ZXIoJ2RheXMnKSxcbiAgICAgICAgbW9udGhzID0gbWFrZUdldHRlcignbW9udGhzJyksXG4gICAgICAgIHllYXJzID0gbWFrZUdldHRlcigneWVhcnMnKTtcblxuICAgIGZ1bmN0aW9uIHdlZWtzKCkge1xuICAgICAgICByZXR1cm4gYWJzRmxvb3IodGhpcy5kYXlzKCkgLyA3KTtcbiAgICB9XG5cbiAgICB2YXIgcm91bmQgPSBNYXRoLnJvdW5kLFxuICAgICAgICB0aHJlc2hvbGRzID0ge1xuICAgICAgICAgICAgc3M6IDQ0LCAvLyBhIGZldyBzZWNvbmRzIHRvIHNlY29uZHNcbiAgICAgICAgICAgIHM6IDQ1LCAvLyBzZWNvbmRzIHRvIG1pbnV0ZVxuICAgICAgICAgICAgbTogNDUsIC8vIG1pbnV0ZXMgdG8gaG91clxuICAgICAgICAgICAgaDogMjIsIC8vIGhvdXJzIHRvIGRheVxuICAgICAgICAgICAgZDogMjYsIC8vIGRheXMgdG8gbW9udGgvd2Vla1xuICAgICAgICAgICAgdzogbnVsbCwgLy8gd2Vla3MgdG8gbW9udGhcbiAgICAgICAgICAgIE06IDExLCAvLyBtb250aHMgdG8geWVhclxuICAgICAgICB9O1xuXG4gICAgLy8gaGVscGVyIGZ1bmN0aW9uIGZvciBtb21lbnQuZm4uZnJvbSwgbW9tZW50LmZuLmZyb21Ob3csIGFuZCBtb21lbnQuZHVyYXRpb24uZm4uaHVtYW5pemVcbiAgICBmdW5jdGlvbiBzdWJzdGl0dXRlVGltZUFnbyhzdHJpbmcsIG51bWJlciwgd2l0aG91dFN1ZmZpeCwgaXNGdXR1cmUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLnJlbGF0aXZlVGltZShudW1iZXIgfHwgMSwgISF3aXRob3V0U3VmZml4LCBzdHJpbmcsIGlzRnV0dXJlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiByZWxhdGl2ZVRpbWUkMShwb3NOZWdEdXJhdGlvbiwgd2l0aG91dFN1ZmZpeCwgdGhyZXNob2xkcywgbG9jYWxlKSB7XG4gICAgICAgIHZhciBkdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uKHBvc05lZ0R1cmF0aW9uKS5hYnMoKSxcbiAgICAgICAgICAgIHNlY29uZHMgPSByb3VuZChkdXJhdGlvbi5hcygncycpKSxcbiAgICAgICAgICAgIG1pbnV0ZXMgPSByb3VuZChkdXJhdGlvbi5hcygnbScpKSxcbiAgICAgICAgICAgIGhvdXJzID0gcm91bmQoZHVyYXRpb24uYXMoJ2gnKSksXG4gICAgICAgICAgICBkYXlzID0gcm91bmQoZHVyYXRpb24uYXMoJ2QnKSksXG4gICAgICAgICAgICBtb250aHMgPSByb3VuZChkdXJhdGlvbi5hcygnTScpKSxcbiAgICAgICAgICAgIHdlZWtzID0gcm91bmQoZHVyYXRpb24uYXMoJ3cnKSksXG4gICAgICAgICAgICB5ZWFycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd5JykpLFxuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPD0gdGhyZXNob2xkcy5zcyAmJiBbJ3MnLCBzZWNvbmRzXSkgfHxcbiAgICAgICAgICAgICAgICAoc2Vjb25kcyA8IHRocmVzaG9sZHMucyAmJiBbJ3NzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPD0gMSAmJiBbJ20nXSkgfHxcbiAgICAgICAgICAgICAgICAobWludXRlcyA8IHRocmVzaG9sZHMubSAmJiBbJ21tJywgbWludXRlc10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDw9IDEgJiYgWydoJ10pIHx8XG4gICAgICAgICAgICAgICAgKGhvdXJzIDwgdGhyZXNob2xkcy5oICYmIFsnaGgnLCBob3Vyc10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPD0gMSAmJiBbJ2QnXSkgfHxcbiAgICAgICAgICAgICAgICAoZGF5cyA8IHRocmVzaG9sZHMuZCAmJiBbJ2RkJywgZGF5c10pO1xuXG4gICAgICAgIGlmICh0aHJlc2hvbGRzLncgIT0gbnVsbCkge1xuICAgICAgICAgICAgYSA9XG4gICAgICAgICAgICAgICAgYSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8PSAxICYmIFsndyddKSB8fFxuICAgICAgICAgICAgICAgICh3ZWVrcyA8IHRocmVzaG9sZHMudyAmJiBbJ3d3Jywgd2Vla3NdKTtcbiAgICAgICAgfVxuICAgICAgICBhID0gYSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8PSAxICYmIFsnTSddKSB8fFxuICAgICAgICAgICAgKG1vbnRocyA8IHRocmVzaG9sZHMuTSAmJiBbJ01NJywgbW9udGhzXSkgfHxcbiAgICAgICAgICAgICh5ZWFycyA8PSAxICYmIFsneSddKSB8fCBbJ3l5JywgeWVhcnNdO1xuXG4gICAgICAgIGFbMl0gPSB3aXRob3V0U3VmZml4O1xuICAgICAgICBhWzNdID0gK3Bvc05lZ0R1cmF0aW9uID4gMDtcbiAgICAgICAgYVs0XSA9IGxvY2FsZTtcbiAgICAgICAgcmV0dXJuIHN1YnN0aXR1dGVUaW1lQWdvLmFwcGx5KG51bGwsIGEpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHJvdW5kaW5nIGZ1bmN0aW9uIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZyhyb3VuZGluZ0Z1bmN0aW9uKSB7XG4gICAgICAgIGlmIChyb3VuZGluZ0Z1bmN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiByb3VuZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHJvdW5kaW5nRnVuY3Rpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJvdW5kID0gcm91bmRpbmdGdW5jdGlvbjtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IGEgdGhyZXNob2xkIGZvciByZWxhdGl2ZSB0aW1lIHN0cmluZ3NcbiAgICBmdW5jdGlvbiBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQodGhyZXNob2xkLCBsaW1pdCkge1xuICAgICAgICBpZiAodGhyZXNob2xkc1t0aHJlc2hvbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIHRocmVzaG9sZHNbdGhyZXNob2xkXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJlc2hvbGRzW3RocmVzaG9sZF0gPSBsaW1pdDtcbiAgICAgICAgaWYgKHRocmVzaG9sZCA9PT0gJ3MnKSB7XG4gICAgICAgICAgICB0aHJlc2hvbGRzLnNzID0gbGltaXQgLSAxO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGh1bWFuaXplKGFyZ1dpdGhTdWZmaXgsIGFyZ1RocmVzaG9sZHMpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgd2l0aFN1ZmZpeCA9IGZhbHNlLFxuICAgICAgICAgICAgdGggPSB0aHJlc2hvbGRzLFxuICAgICAgICAgICAgbG9jYWxlLFxuICAgICAgICAgICAgb3V0cHV0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGFyZ1RocmVzaG9sZHMgPSBhcmdXaXRoU3VmZml4O1xuICAgICAgICAgICAgYXJnV2l0aFN1ZmZpeCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgYXJnV2l0aFN1ZmZpeCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICB3aXRoU3VmZml4ID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1RocmVzaG9sZHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB0aCA9IE9iamVjdC5hc3NpZ24oe30sIHRocmVzaG9sZHMsIGFyZ1RocmVzaG9sZHMpO1xuICAgICAgICAgICAgaWYgKGFyZ1RocmVzaG9sZHMucyAhPSBudWxsICYmIGFyZ1RocmVzaG9sZHMuc3MgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoLnNzID0gYXJnVGhyZXNob2xkcy5zIC0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxvY2FsZSA9IHRoaXMubG9jYWxlRGF0YSgpO1xuICAgICAgICBvdXRwdXQgPSByZWxhdGl2ZVRpbWUkMSh0aGlzLCAhd2l0aFN1ZmZpeCwgdGgsIGxvY2FsZSk7XG5cbiAgICAgICAgaWYgKHdpdGhTdWZmaXgpIHtcbiAgICAgICAgICAgIG91dHB1dCA9IGxvY2FsZS5wYXN0RnV0dXJlKCt0aGlzLCBvdXRwdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxvY2FsZS5wb3N0Zm9ybWF0KG91dHB1dCk7XG4gICAgfVxuXG4gICAgdmFyIGFicyQxID0gTWF0aC5hYnM7XG5cbiAgICBmdW5jdGlvbiBzaWduKHgpIHtcbiAgICAgICAgcmV0dXJuICh4ID4gMCkgLSAoeCA8IDApIHx8ICt4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nJDEoKSB7XG4gICAgICAgIC8vIGZvciBJU08gc3RyaW5ncyB3ZSBkbyBub3QgdXNlIHRoZSBub3JtYWwgYnViYmxpbmcgcnVsZXM6XG4gICAgICAgIC8vICAqIG1pbGxpc2Vjb25kcyBidWJibGUgdXAgdW50aWwgdGhleSBiZWNvbWUgaG91cnNcbiAgICAgICAgLy8gICogZGF5cyBkbyBub3QgYnViYmxlIGF0IGFsbFxuICAgICAgICAvLyAgKiBtb250aHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIHllYXJzXG4gICAgICAgIC8vIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSBpcyBubyBjb250ZXh0LWZyZWUgY29udmVyc2lvbiBiZXR3ZWVuIGhvdXJzIGFuZCBkYXlzXG4gICAgICAgIC8vICh0aGluayBvZiBjbG9jayBjaGFuZ2VzKVxuICAgICAgICAvLyBhbmQgYWxzbyBub3QgYmV0d2VlbiBkYXlzIGFuZCBtb250aHMgKDI4LTMxIGRheXMgcGVyIG1vbnRoKVxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWNvbmRzID0gYWJzJDEodGhpcy5fbWlsbGlzZWNvbmRzKSAvIDEwMDAsXG4gICAgICAgICAgICBkYXlzID0gYWJzJDEodGhpcy5fZGF5cyksXG4gICAgICAgICAgICBtb250aHMgPSBhYnMkMSh0aGlzLl9tb250aHMpLFxuICAgICAgICAgICAgbWludXRlcyxcbiAgICAgICAgICAgIGhvdXJzLFxuICAgICAgICAgICAgeWVhcnMsXG4gICAgICAgICAgICBzLFxuICAgICAgICAgICAgdG90YWwgPSB0aGlzLmFzU2Vjb25kcygpLFxuICAgICAgICAgICAgdG90YWxTaWduLFxuICAgICAgICAgICAgeW1TaWduLFxuICAgICAgICAgICAgZGF5c1NpZ24sXG4gICAgICAgICAgICBobXNTaWduO1xuXG4gICAgICAgIGlmICghdG90YWwpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdGhlIHNhbWUgYXMgQyMncyAoTm9kYSkgYW5kIHB5dGhvbiAoaXNvZGF0ZSkuLi5cbiAgICAgICAgICAgIC8vIGJ1dCBub3Qgb3RoZXIgSlMgKGdvb2cuZGF0ZSlcbiAgICAgICAgICAgIHJldHVybiAnUDBEJztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDM2MDAgc2Vjb25kcyAtPiA2MCBtaW51dGVzIC0+IDEgaG91clxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgaG91cnMgPSBhYnNGbG9vcihtaW51dGVzIC8gNjApO1xuICAgICAgICBzZWNvbmRzICU9IDYwO1xuICAgICAgICBtaW51dGVzICU9IDYwO1xuXG4gICAgICAgIC8vIDEyIG1vbnRocyAtPiAxIHllYXJcbiAgICAgICAgeWVhcnMgPSBhYnNGbG9vcihtb250aHMgLyAxMik7XG4gICAgICAgIG1vbnRocyAlPSAxMjtcblxuICAgICAgICAvLyBpbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZG9yZGlsbGUvbW9tZW50LWlzb2R1cmF0aW9uL2Jsb2IvbWFzdGVyL21vbWVudC5pc29kdXJhdGlvbi5qc1xuICAgICAgICBzID0gc2Vjb25kcyA/IHNlY29uZHMudG9GaXhlZCgzKS5yZXBsYWNlKC9cXC4/MCskLywgJycpIDogJyc7XG5cbiAgICAgICAgdG90YWxTaWduID0gdG90YWwgPCAwID8gJy0nIDogJyc7XG4gICAgICAgIHltU2lnbiA9IHNpZ24odGhpcy5fbW9udGhzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgZGF5c1NpZ24gPSBzaWduKHRoaXMuX2RheXMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuICAgICAgICBobXNTaWduID0gc2lnbih0aGlzLl9taWxsaXNlY29uZHMpICE9PSBzaWduKHRvdGFsKSA/ICctJyA6ICcnO1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0b3RhbFNpZ24gK1xuICAgICAgICAgICAgJ1AnICtcbiAgICAgICAgICAgICh5ZWFycyA/IHltU2lnbiArIHllYXJzICsgJ1knIDogJycpICtcbiAgICAgICAgICAgIChtb250aHMgPyB5bVNpZ24gKyBtb250aHMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKGRheXMgPyBkYXlzU2lnbiArIGRheXMgKyAnRCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzIHx8IG1pbnV0ZXMgfHwgc2Vjb25kcyA/ICdUJyA6ICcnKSArXG4gICAgICAgICAgICAoaG91cnMgPyBobXNTaWduICsgaG91cnMgKyAnSCcgOiAnJykgK1xuICAgICAgICAgICAgKG1pbnV0ZXMgPyBobXNTaWduICsgbWludXRlcyArICdNJyA6ICcnKSArXG4gICAgICAgICAgICAoc2Vjb25kcyA/IGhtc1NpZ24gKyBzICsgJ1MnIDogJycpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvJDIgPSBEdXJhdGlvbi5wcm90b3R5cGU7XG5cbiAgICBwcm90byQyLmlzVmFsaWQgPSBpc1ZhbGlkJDE7XG4gICAgcHJvdG8kMi5hYnMgPSBhYnM7XG4gICAgcHJvdG8kMi5hZGQgPSBhZGQkMTtcbiAgICBwcm90byQyLnN1YnRyYWN0ID0gc3VidHJhY3QkMTtcbiAgICBwcm90byQyLmFzID0gYXM7XG4gICAgcHJvdG8kMi5hc01pbGxpc2Vjb25kcyA9IGFzTWlsbGlzZWNvbmRzO1xuICAgIHByb3RvJDIuYXNTZWNvbmRzID0gYXNTZWNvbmRzO1xuICAgIHByb3RvJDIuYXNNaW51dGVzID0gYXNNaW51dGVzO1xuICAgIHByb3RvJDIuYXNIb3VycyA9IGFzSG91cnM7XG4gICAgcHJvdG8kMi5hc0RheXMgPSBhc0RheXM7XG4gICAgcHJvdG8kMi5hc1dlZWtzID0gYXNXZWVrcztcbiAgICBwcm90byQyLmFzTW9udGhzID0gYXNNb250aHM7XG4gICAgcHJvdG8kMi5hc1F1YXJ0ZXJzID0gYXNRdWFydGVycztcbiAgICBwcm90byQyLmFzWWVhcnMgPSBhc1llYXJzO1xuICAgIHByb3RvJDIudmFsdWVPZiA9IHZhbHVlT2YkMTtcbiAgICBwcm90byQyLl9idWJibGUgPSBidWJibGU7XG4gICAgcHJvdG8kMi5jbG9uZSA9IGNsb25lJDE7XG4gICAgcHJvdG8kMi5nZXQgPSBnZXQkMjtcbiAgICBwcm90byQyLm1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLnNlY29uZHMgPSBzZWNvbmRzO1xuICAgIHByb3RvJDIubWludXRlcyA9IG1pbnV0ZXM7XG4gICAgcHJvdG8kMi5ob3VycyA9IGhvdXJzO1xuICAgIHByb3RvJDIuZGF5cyA9IGRheXM7XG4gICAgcHJvdG8kMi53ZWVrcyA9IHdlZWtzO1xuICAgIHByb3RvJDIubW9udGhzID0gbW9udGhzO1xuICAgIHByb3RvJDIueWVhcnMgPSB5ZWFycztcbiAgICBwcm90byQyLmh1bWFuaXplID0gaHVtYW5pemU7XG4gICAgcHJvdG8kMi50b0lTT1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b1N0cmluZyA9IHRvSVNPU3RyaW5nJDE7XG4gICAgcHJvdG8kMi50b0pTT04gPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvJDIubG9jYWxlRGF0YSA9IGxvY2FsZURhdGE7XG5cbiAgICBwcm90byQyLnRvSXNvU3RyaW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAndG9Jc29TdHJpbmcoKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIHRvSVNPU3RyaW5nKCkgaW5zdGVhZCAobm90aWNlIHRoZSBjYXBpdGFscyknLFxuICAgICAgICB0b0lTT1N0cmluZyQxXG4gICAgKTtcbiAgICBwcm90byQyLmxhbmcgPSBsYW5nO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1gnLCAwLCAwLCAndW5peCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd4JywgMCwgMCwgJ3ZhbHVlT2YnKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ3gnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignWCcsIG1hdGNoVGltZXN0YW1wKTtcbiAgICBhZGRQYXJzZVRva2VuKCdYJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKHBhcnNlRmxvYXQoaW5wdXQpICogMTAwMCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbigneCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZSh0b0ludChpbnB1dCkpO1xuICAgIH0pO1xuXG4gICAgLy8hIG1vbWVudC5qc1xuXG4gICAgaG9va3MudmVyc2lvbiA9ICcyLjI5LjQnO1xuXG4gICAgc2V0SG9va0NhbGxiYWNrKGNyZWF0ZUxvY2FsKTtcblxuICAgIGhvb2tzLmZuID0gcHJvdG87XG4gICAgaG9va3MubWluID0gbWluO1xuICAgIGhvb2tzLm1heCA9IG1heDtcbiAgICBob29rcy5ub3cgPSBub3c7XG4gICAgaG9va3MudXRjID0gY3JlYXRlVVRDO1xuICAgIGhvb2tzLnVuaXggPSBjcmVhdGVVbml4O1xuICAgIGhvb2tzLm1vbnRocyA9IGxpc3RNb250aHM7XG4gICAgaG9va3MuaXNEYXRlID0gaXNEYXRlO1xuICAgIGhvb2tzLmxvY2FsZSA9IGdldFNldEdsb2JhbExvY2FsZTtcbiAgICBob29rcy5pbnZhbGlkID0gY3JlYXRlSW52YWxpZDtcbiAgICBob29rcy5kdXJhdGlvbiA9IGNyZWF0ZUR1cmF0aW9uO1xuICAgIGhvb2tzLmlzTW9tZW50ID0gaXNNb21lbnQ7XG4gICAgaG9va3Mud2Vla2RheXMgPSBsaXN0V2Vla2RheXM7XG4gICAgaG9va3MucGFyc2Vab25lID0gY3JlYXRlSW5ab25lO1xuICAgIGhvb2tzLmxvY2FsZURhdGEgPSBnZXRMb2NhbGU7XG4gICAgaG9va3MuaXNEdXJhdGlvbiA9IGlzRHVyYXRpb247XG4gICAgaG9va3MubW9udGhzU2hvcnQgPSBsaXN0TW9udGhzU2hvcnQ7XG4gICAgaG9va3Mud2Vla2RheXNNaW4gPSBsaXN0V2Vla2RheXNNaW47XG4gICAgaG9va3MuZGVmaW5lTG9jYWxlID0gZGVmaW5lTG9jYWxlO1xuICAgIGhvb2tzLnVwZGF0ZUxvY2FsZSA9IHVwZGF0ZUxvY2FsZTtcbiAgICBob29rcy5sb2NhbGVzID0gbGlzdExvY2FsZXM7XG4gICAgaG9va3Mud2Vla2RheXNTaG9ydCA9IGxpc3RXZWVrZGF5c1Nob3J0O1xuICAgIGhvb2tzLm5vcm1hbGl6ZVVuaXRzID0gbm9ybWFsaXplVW5pdHM7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lUm91bmRpbmcgPSBnZXRTZXRSZWxhdGl2ZVRpbWVSb3VuZGluZztcbiAgICBob29rcy5yZWxhdGl2ZVRpbWVUaHJlc2hvbGQgPSBnZXRTZXRSZWxhdGl2ZVRpbWVUaHJlc2hvbGQ7XG4gICAgaG9va3MuY2FsZW5kYXJGb3JtYXQgPSBnZXRDYWxlbmRhckZvcm1hdDtcbiAgICBob29rcy5wcm90b3R5cGUgPSBwcm90bztcblxuICAgIC8vIGN1cnJlbnRseSBIVE1MNSBpbnB1dCB0eXBlIG9ubHkgc3VwcG9ydHMgMjQtaG91ciBmb3JtYXRzXG4gICAgaG9va3MuSFRNTDVfRk1UID0ge1xuICAgICAgICBEQVRFVElNRV9MT0NBTDogJ1lZWVktTU0tRERUSEg6bW0nLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfU0VDT05EUzogJ1lZWVktTU0tRERUSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBEQVRFVElNRV9MT0NBTF9NUzogJ1lZWVktTU0tRERUSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIwLjAwMVwiIC8+XG4gICAgICAgIERBVEU6ICdZWVlZLU1NLUREJywgLy8gPGlucHV0IHR5cGU9XCJkYXRlXCIgLz5cbiAgICAgICAgVElNRTogJ0hIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgLz5cbiAgICAgICAgVElNRV9TRUNPTkRTOiAnSEg6bW06c3MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMVwiIC8+XG4gICAgICAgIFRJTUVfTVM6ICdISDptbTpzcy5TU1MnLCAvLyA8aW5wdXQgdHlwZT1cInRpbWVcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBXRUVLOiAnR0dHRy1bV11XVycsIC8vIDxpbnB1dCB0eXBlPVwid2Vla1wiIC8+XG4gICAgICAgIE1PTlRIOiAnWVlZWS1NTScsIC8vIDxpbnB1dCB0eXBlPVwibW9udGhcIiAvPlxuICAgIH07XG5cbiAgICByZXR1cm4gaG9va3M7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LXRpbWV6b25lLmpzXG4vLyEgdmVyc2lvbiA6IDAuNS40M1xuLy8hIENvcHlyaWdodCAoYykgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIGdpdGh1Yi5jb20vbW9tZW50L21vbWVudC10aW1lem9uZVxuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0LypnbG9iYWwgZGVmaW5lKi9cblx0aWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJ21vbWVudCcpKTsgLy8gTm9kZVxuXHR9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuXHRcdGRlZmluZShbJ21vbWVudCddLCBmYWN0b3J5KTsgICAgICAgICAgICAgICAgIC8vIEFNRFxuXHR9IGVsc2Uge1xuXHRcdGZhY3Rvcnkocm9vdC5tb21lbnQpOyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJyb3dzZXJcblx0fVxufSh0aGlzLCBmdW5jdGlvbiAobW9tZW50KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8vIFJlc29sdmVzIGVzNiBtb2R1bGUgbG9hZGluZyBpc3N1ZVxuXHRpZiAobW9tZW50LnZlcnNpb24gPT09IHVuZGVmaW5lZCAmJiBtb21lbnQuZGVmYXVsdCkge1xuXHRcdG1vbWVudCA9IG1vbWVudC5kZWZhdWx0O1xuXHR9XG5cblx0Ly8gRG8gbm90IGxvYWQgbW9tZW50LXRpbWV6b25lIGEgc2Vjb25kIHRpbWUuXG5cdC8vIGlmIChtb21lbnQudHogIT09IHVuZGVmaW5lZCkge1xuXHQvLyBcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgJyArIG1vbWVudC50ei52ZXJzaW9uICsgJyB3YXMgYWxyZWFkeSBsb2FkZWQgJyArIChtb21lbnQudHouZGF0YVZlcnNpb24gPyAnd2l0aCBkYXRhIGZyb20gJyA6ICd3aXRob3V0IGFueSBkYXRhJykgKyBtb21lbnQudHouZGF0YVZlcnNpb24pO1xuXHQvLyBcdHJldHVybiBtb21lbnQ7XG5cdC8vIH1cblxuXHR2YXIgVkVSU0lPTiA9IFwiMC41LjQzXCIsXG5cdFx0em9uZXMgPSB7fSxcblx0XHRsaW5rcyA9IHt9LFxuXHRcdGNvdW50cmllcyA9IHt9LFxuXHRcdG5hbWVzID0ge30sXG5cdFx0Z3Vlc3NlcyA9IHt9LFxuXHRcdGNhY2hlZEd1ZXNzO1xuXG5cdGlmICghbW9tZW50IHx8IHR5cGVvZiBtb21lbnQudmVyc2lvbiAhPT0gJ3N0cmluZycpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcy4gU2VlIGh0dHBzOi8vbW9tZW50anMuY29tL3RpbWV6b25lL2RvY3MvIy91c2UtaXQvYnJvd3Nlci8nKTtcblx0fVxuXG5cdHZhciBtb21lbnRWZXJzaW9uID0gbW9tZW50LnZlcnNpb24uc3BsaXQoJy4nKSxcblx0XHRtYWpvciA9ICttb21lbnRWZXJzaW9uWzBdLFxuXHRcdG1pbm9yID0gK21vbWVudFZlcnNpb25bMV07XG5cblx0Ly8gTW9tZW50LmpzIHZlcnNpb24gY2hlY2tcblx0aWYgKG1ham9yIDwgMiB8fCAobWFqb3IgPT09IDIgJiYgbWlub3IgPCA2KSkge1xuXHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgcmVxdWlyZXMgTW9tZW50LmpzID49IDIuNi4wLiBZb3UgYXJlIHVzaW5nIE1vbWVudC5qcyAnICsgbW9tZW50LnZlcnNpb24gKyAnLiBTZWUgbW9tZW50anMuY29tJyk7XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0VW5wYWNraW5nXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBjaGFyQ29kZVRvSW50KGNoYXJDb2RlKSB7XG5cdFx0aWYgKGNoYXJDb2RlID4gOTYpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDg3O1xuXHRcdH0gZWxzZSBpZiAoY2hhckNvZGUgPiA2NCkge1xuXHRcdFx0cmV0dXJuIGNoYXJDb2RlIC0gMjk7XG5cdFx0fVxuXHRcdHJldHVybiBjaGFyQ29kZSAtIDQ4O1xuXHR9XG5cblx0ZnVuY3Rpb24gdW5wYWNrQmFzZTYwKHN0cmluZykge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdHBhcnRzID0gc3RyaW5nLnNwbGl0KCcuJyksXG5cdFx0XHR3aG9sZSA9IHBhcnRzWzBdLFxuXHRcdFx0ZnJhY3Rpb25hbCA9IHBhcnRzWzFdIHx8ICcnLFxuXHRcdFx0bXVsdGlwbGllciA9IDEsXG5cdFx0XHRudW0sXG5cdFx0XHRvdXQgPSAwLFxuXHRcdFx0c2lnbiA9IDE7XG5cblx0XHQvLyBoYW5kbGUgbmVnYXRpdmUgbnVtYmVyc1xuXHRcdGlmIChzdHJpbmcuY2hhckNvZGVBdCgwKSA9PT0gNDUpIHtcblx0XHRcdGkgPSAxO1xuXHRcdFx0c2lnbiA9IC0xO1xuXHRcdH1cblxuXHRcdC8vIGhhbmRsZSBkaWdpdHMgYmVmb3JlIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpOyBpIDwgd2hvbGUubGVuZ3RoOyBpKyspIHtcblx0XHRcdG51bSA9IGNoYXJDb2RlVG9JbnQod2hvbGUuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgPSA2MCAqIG91dCArIG51bTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsXG5cdFx0Zm9yIChpID0gMDsgaSA8IGZyYWN0aW9uYWwubGVuZ3RoOyBpKyspIHtcblx0XHRcdG11bHRpcGxpZXIgPSBtdWx0aXBsaWVyIC8gNjA7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KGZyYWN0aW9uYWwuY2hhckNvZGVBdChpKSk7XG5cdFx0XHRvdXQgKz0gbnVtICogbXVsdGlwbGllcjtcblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0ICogc2lnbjtcblx0fVxuXG5cdGZ1bmN0aW9uIGFycmF5VG9JbnQgKGFycmF5KSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSB1bnBhY2tCYXNlNjAoYXJyYXlbaV0pO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGludFRvVW50aWwgKGFycmF5LCBsZW5ndGgpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhcnJheVtpXSA9IE1hdGgucm91bmQoKGFycmF5W2kgLSAxXSB8fCAwKSArIChhcnJheVtpXSAqIDYwMDAwKSk7IC8vIG1pbnV0ZXMgdG8gbWlsbGlzZWNvbmRzXG5cdFx0fVxuXG5cdFx0YXJyYXlbbGVuZ3RoIC0gMV0gPSBJbmZpbml0eTtcblx0fVxuXG5cdGZ1bmN0aW9uIG1hcEluZGljZXMgKHNvdXJjZSwgaW5kaWNlcykge1xuXHRcdHZhciBvdXQgPSBbXSwgaTtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBpbmRpY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvdXRbaV0gPSBzb3VyY2VbaW5kaWNlc1tpXV07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFjayAoc3RyaW5nKSB7XG5cdFx0dmFyIGRhdGEgPSBzdHJpbmcuc3BsaXQoJ3wnKSxcblx0XHRcdG9mZnNldHMgPSBkYXRhWzJdLnNwbGl0KCcgJyksXG5cdFx0XHRpbmRpY2VzID0gZGF0YVszXS5zcGxpdCgnJyksXG5cdFx0XHR1bnRpbHMgID0gZGF0YVs0XS5zcGxpdCgnICcpO1xuXG5cdFx0YXJyYXlUb0ludChvZmZzZXRzKTtcblx0XHRhcnJheVRvSW50KGluZGljZXMpO1xuXHRcdGFycmF5VG9JbnQodW50aWxzKTtcblxuXHRcdGludFRvVW50aWwodW50aWxzLCBpbmRpY2VzLmxlbmd0aCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0bmFtZSAgICAgICA6IGRhdGFbMF0sXG5cdFx0XHRhYmJycyAgICAgIDogbWFwSW5kaWNlcyhkYXRhWzFdLnNwbGl0KCcgJyksIGluZGljZXMpLFxuXHRcdFx0b2Zmc2V0cyAgICA6IG1hcEluZGljZXMob2Zmc2V0cywgaW5kaWNlcyksXG5cdFx0XHR1bnRpbHMgICAgIDogdW50aWxzLFxuXHRcdFx0cG9wdWxhdGlvbiA6IGRhdGFbNV0gfCAwXG5cdFx0fTtcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRab25lIG9iamVjdFxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gWm9uZSAocGFja2VkU3RyaW5nKSB7XG5cdFx0aWYgKHBhY2tlZFN0cmluZykge1xuXHRcdFx0dGhpcy5fc2V0KHVucGFjayhwYWNrZWRTdHJpbmcpKTtcblx0XHR9XG5cdH1cblxuXHRab25lLnByb3RvdHlwZSA9IHtcblx0XHRfc2V0IDogZnVuY3Rpb24gKHVucGFja2VkKSB7XG5cdFx0XHR0aGlzLm5hbWUgICAgICAgPSB1bnBhY2tlZC5uYW1lO1xuXHRcdFx0dGhpcy5hYmJycyAgICAgID0gdW5wYWNrZWQuYWJicnM7XG5cdFx0XHR0aGlzLnVudGlscyAgICAgPSB1bnBhY2tlZC51bnRpbHM7XG5cdFx0XHR0aGlzLm9mZnNldHMgICAgPSB1bnBhY2tlZC5vZmZzZXRzO1xuXHRcdFx0dGhpcy5wb3B1bGF0aW9uID0gdW5wYWNrZWQucG9wdWxhdGlvbjtcblx0XHR9LFxuXG5cdFx0X2luZGV4IDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdFx0dmFyIHRhcmdldCA9ICt0aW1lc3RhbXAsXG5cdFx0XHRcdHVudGlscyA9IHRoaXMudW50aWxzLFxuXHRcdFx0XHRpO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgdW50aWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0YXJnZXQgPCB1bnRpbHNbaV0pIHtcblx0XHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjb3VudHJpZXMgOiBmdW5jdGlvbiAoKSB7XG5cdFx0XHR2YXIgem9uZV9uYW1lID0gdGhpcy5uYW1lO1xuXHRcdFx0cmV0dXJuIE9iamVjdC5rZXlzKGNvdW50cmllcykuZmlsdGVyKGZ1bmN0aW9uIChjb3VudHJ5X2NvZGUpIHtcblx0XHRcdFx0cmV0dXJuIGNvdW50cmllc1tjb3VudHJ5X2NvZGVdLnpvbmVzLmluZGV4T2Yoem9uZV9uYW1lKSAhPT0gLTE7XG5cdFx0XHR9KTtcblx0XHR9LFxuXG5cdFx0cGFyc2UgOiBmdW5jdGlvbiAodGltZXN0YW1wKSB7XG5cdFx0XHR2YXIgdGFyZ2V0ICA9ICt0aW1lc3RhbXAsXG5cdFx0XHRcdG9mZnNldHMgPSB0aGlzLm9mZnNldHMsXG5cdFx0XHRcdHVudGlscyAgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0bWF4ICAgICA9IHVudGlscy5sZW5ndGggLSAxLFxuXHRcdFx0XHRvZmZzZXQsIG9mZnNldE5leHQsIG9mZnNldFByZXYsIGk7XG5cblx0XHRcdGZvciAoaSA9IDA7IGkgPCBtYXg7IGkrKykge1xuXHRcdFx0XHRvZmZzZXQgICAgID0gb2Zmc2V0c1tpXTtcblx0XHRcdFx0b2Zmc2V0TmV4dCA9IG9mZnNldHNbaSArIDFdO1xuXHRcdFx0XHRvZmZzZXRQcmV2ID0gb2Zmc2V0c1tpID8gaSAtIDEgOiBpXTtcblxuXHRcdFx0XHRpZiAob2Zmc2V0IDwgb2Zmc2V0TmV4dCAmJiB0ei5tb3ZlQW1iaWd1b3VzRm9yd2FyZCkge1xuXHRcdFx0XHRcdG9mZnNldCA9IG9mZnNldE5leHQ7XG5cdFx0XHRcdH0gZWxzZSBpZiAob2Zmc2V0ID4gb2Zmc2V0UHJldiAmJiB0ei5tb3ZlSW52YWxpZEZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXRQcmV2O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRhcmdldCA8IHVudGlsc1tpXSAtIChvZmZzZXQgKiA2MDAwMCkpIHtcblx0XHRcdFx0XHRyZXR1cm4gb2Zmc2V0c1tpXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0c1ttYXhdO1xuXHRcdH0sXG5cblx0XHRhYmJyIDogZnVuY3Rpb24gKG1vbSkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYWJicnNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fSxcblxuXHRcdG9mZnNldCA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdGxvZ0Vycm9yKFwiem9uZS5vZmZzZXQgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB6b25lLnV0Y09mZnNldFwiKTtcblx0XHRcdHJldHVybiB0aGlzLm9mZnNldHNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fSxcblxuXHRcdHV0Y09mZnNldCA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLm9mZnNldHNbdGhpcy5faW5kZXgobW9tKV07XG5cdFx0fVxuXHR9O1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDb3VudHJ5IG9iamVjdFxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gQ291bnRyeSAoY291bnRyeV9uYW1lLCB6b25lX25hbWVzKSB7XG5cdFx0dGhpcy5uYW1lID0gY291bnRyeV9uYW1lO1xuXHRcdHRoaXMuem9uZXMgPSB6b25lX25hbWVzO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdEN1cnJlbnQgVGltZXpvbmVcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIE9mZnNldEF0KGF0KSB7XG5cdFx0dmFyIHRpbWVTdHJpbmcgPSBhdC50b1RpbWVTdHJpbmcoKTtcblx0XHR2YXIgYWJiciA9IHRpbWVTdHJpbmcubWF0Y2goL1xcKFthLXogXStcXCkvaSk7XG5cdFx0aWYgKGFiYnIgJiYgYWJiclswXSkge1xuXHRcdFx0Ly8gMTc6NTY6MzEgR01ULTA2MDAgKENTVClcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDZW50cmFsIFN0YW5kYXJkIFRpbWUpXG5cdFx0XHRhYmJyID0gYWJiclswXS5tYXRjaCgvW0EtWl0vZyk7XG5cdFx0XHRhYmJyID0gYWJiciA/IGFiYnIuam9pbignJykgOiB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIDE3OjU2OjMxIENTVFxuXHRcdFx0Ly8gMTc6NTY6MzEgR01UKzA4MDAgKOWPsOWMl+aomea6luaZgumWkylcblx0XHRcdGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9bQS1aXXszLDV9L2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyWzBdIDogdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmIChhYmJyID09PSAnR01UJykge1xuXHRcdFx0YWJiciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHR0aGlzLmF0ID0gK2F0O1xuXHRcdHRoaXMuYWJiciA9IGFiYnI7XG5cdFx0dGhpcy5vZmZzZXQgPSBhdC5nZXRUaW1lem9uZU9mZnNldCgpO1xuXHR9XG5cblx0ZnVuY3Rpb24gWm9uZVNjb3JlKHpvbmUpIHtcblx0XHR0aGlzLnpvbmUgPSB6b25lO1xuXHRcdHRoaXMub2Zmc2V0U2NvcmUgPSAwO1xuXHRcdHRoaXMuYWJiclNjb3JlID0gMDtcblx0fVxuXG5cdFpvbmVTY29yZS5wcm90b3R5cGUuc2NvcmVPZmZzZXRBdCA9IGZ1bmN0aW9uIChvZmZzZXRBdCkge1xuXHRcdHRoaXMub2Zmc2V0U2NvcmUgKz0gTWF0aC5hYnModGhpcy56b25lLnV0Y09mZnNldChvZmZzZXRBdC5hdCkgLSBvZmZzZXRBdC5vZmZzZXQpO1xuXHRcdGlmICh0aGlzLnpvbmUuYWJicihvZmZzZXRBdC5hdCkucmVwbGFjZSgvW15BLVpdL2csICcnKSAhPT0gb2Zmc2V0QXQuYWJicikge1xuXHRcdFx0dGhpcy5hYmJyU2NvcmUrKztcblx0XHR9XG5cdH07XG5cblx0ZnVuY3Rpb24gZmluZENoYW5nZShsb3csIGhpZ2gpIHtcblx0XHR2YXIgbWlkLCBkaWZmO1xuXG5cdFx0d2hpbGUgKChkaWZmID0gKChoaWdoLmF0IC0gbG93LmF0KSAvIDEyZTQgfCAwKSAqIDZlNCkpIHtcblx0XHRcdG1pZCA9IG5ldyBPZmZzZXRBdChuZXcgRGF0ZShsb3cuYXQgKyBkaWZmKSk7XG5cdFx0XHRpZiAobWlkLm9mZnNldCA9PT0gbG93Lm9mZnNldCkge1xuXHRcdFx0XHRsb3cgPSBtaWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoaWdoID0gbWlkO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBsb3c7XG5cdH1cblxuXHRmdW5jdGlvbiB1c2VyT2Zmc2V0cygpIHtcblx0XHR2YXIgc3RhcnRZZWFyID0gbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpIC0gMixcblx0XHRcdGxhc3QgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyLCAwLCAxKSksXG5cdFx0XHRvZmZzZXRzID0gW2xhc3RdLFxuXHRcdFx0Y2hhbmdlLCBuZXh0LCBpO1xuXG5cdFx0Zm9yIChpID0gMTsgaSA8IDQ4OyBpKyspIHtcblx0XHRcdG5leHQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyLCBpLCAxKSk7XG5cdFx0XHRpZiAobmV4dC5vZmZzZXQgIT09IGxhc3Qub2Zmc2V0KSB7XG5cdFx0XHRcdGNoYW5nZSA9IGZpbmRDaGFuZ2UobGFzdCwgbmV4dCk7XG5cdFx0XHRcdG9mZnNldHMucHVzaChjaGFuZ2UpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKGNoYW5nZS5hdCArIDZlNCkpKTtcblx0XHRcdH1cblx0XHRcdGxhc3QgPSBuZXh0O1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgMCwgMSkpKTtcblx0XHRcdG9mZnNldHMucHVzaChuZXcgT2Zmc2V0QXQobmV3IERhdGUoc3RhcnRZZWFyICsgaSwgNiwgMSkpKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb2Zmc2V0cztcblx0fVxuXG5cdGZ1bmN0aW9uIHNvcnRab25lU2NvcmVzIChhLCBiKSB7XG5cdFx0aWYgKGEub2Zmc2V0U2NvcmUgIT09IGIub2Zmc2V0U2NvcmUpIHtcblx0XHRcdHJldHVybiBhLm9mZnNldFNjb3JlIC0gYi5vZmZzZXRTY29yZTtcblx0XHR9XG5cdFx0aWYgKGEuYWJiclNjb3JlICE9PSBiLmFiYnJTY29yZSkge1xuXHRcdFx0cmV0dXJuIGEuYWJiclNjb3JlIC0gYi5hYmJyU2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLnpvbmUucG9wdWxhdGlvbiAhPT0gYi56b25lLnBvcHVsYXRpb24pIHtcblx0XHRcdHJldHVybiBiLnpvbmUucG9wdWxhdGlvbiAtIGEuem9uZS5wb3B1bGF0aW9uO1xuXHRcdH1cblx0XHRyZXR1cm4gYi56b25lLm5hbWUubG9jYWxlQ29tcGFyZShhLnpvbmUubmFtZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRUb0d1ZXNzZXMgKG5hbWUsIG9mZnNldHMpIHtcblx0XHR2YXIgaSwgb2Zmc2V0O1xuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG9mZnNldHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdG9mZnNldCA9IG9mZnNldHNbaV07XG5cdFx0XHRndWVzc2VzW29mZnNldF0gPSBndWVzc2VzW29mZnNldF0gfHwge307XG5cdFx0XHRndWVzc2VzW29mZnNldF1bbmFtZV0gPSB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyAob2Zmc2V0cykge1xuXHRcdHZhciBvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRmaWx0ZXJlZEd1ZXNzZXMgPSB7fSxcblx0XHRcdG91dCA9IFtdLFxuXHRcdFx0aSwgaiwgZ3Vlc3Nlc09mZnNldDtcblxuXHRcdGZvciAoaSA9IDA7IGkgPCBvZmZzZXRzTGVuZ3RoOyBpKyspIHtcblx0XHRcdGd1ZXNzZXNPZmZzZXQgPSBndWVzc2VzW29mZnNldHNbaV0ub2Zmc2V0XSB8fCB7fTtcblx0XHRcdGZvciAoaiBpbiBndWVzc2VzT2Zmc2V0KSB7XG5cdFx0XHRcdGlmIChndWVzc2VzT2Zmc2V0Lmhhc093blByb3BlcnR5KGopKSB7XG5cdFx0XHRcdFx0ZmlsdGVyZWRHdWVzc2VzW2pdID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAoaSBpbiBmaWx0ZXJlZEd1ZXNzZXMpIHtcblx0XHRcdGlmIChmaWx0ZXJlZEd1ZXNzZXMuaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0b3V0LnB1c2gobmFtZXNbaV0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRmdW5jdGlvbiByZWJ1aWxkR3Vlc3MgKCkge1xuXG5cdFx0Ly8gdXNlIEludGwgQVBJIHdoZW4gYXZhaWxhYmxlIGFuZCByZXR1cm5pbmcgdmFsaWQgdGltZSB6b25lXG5cdFx0dHJ5IHtcblx0XHRcdHZhciBpbnRsTmFtZSA9IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcblx0XHRcdGlmIChpbnRsTmFtZSAmJiBpbnRsTmFtZS5sZW5ndGggPiAzKSB7XG5cdFx0XHRcdHZhciBuYW1lID0gbmFtZXNbbm9ybWFsaXplTmFtZShpbnRsTmFtZSldO1xuXHRcdFx0XHRpZiAobmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiBuYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGxvZ0Vycm9yKFwiTW9tZW50IFRpbWV6b25lIGZvdW5kIFwiICsgaW50bE5hbWUgKyBcIiBmcm9tIHRoZSBJbnRsIGFwaSwgYnV0IGRpZCBub3QgaGF2ZSB0aGF0IGRhdGEgbG9hZGVkLlwiKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHQvLyBJbnRsIHVuYXZhaWxhYmxlLCBmYWxsIGJhY2sgdG8gbWFudWFsIGd1ZXNzaW5nLlxuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRzID0gdXNlck9mZnNldHMoKSxcblx0XHRcdG9mZnNldHNMZW5ndGggPSBvZmZzZXRzLmxlbmd0aCxcblx0XHRcdGd1ZXNzZXMgPSBndWVzc2VzRm9yVXNlck9mZnNldHMob2Zmc2V0cyksXG5cdFx0XHR6b25lU2NvcmVzID0gW10sXG5cdFx0XHR6b25lU2NvcmUsIGksIGo7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgZ3Vlc3Nlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0em9uZVNjb3JlID0gbmV3IFpvbmVTY29yZShnZXRab25lKGd1ZXNzZXNbaV0pLCBvZmZzZXRzTGVuZ3RoKTtcblx0XHRcdGZvciAoaiA9IDA7IGogPCBvZmZzZXRzTGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0em9uZVNjb3JlLnNjb3JlT2Zmc2V0QXQob2Zmc2V0c1tqXSk7XG5cdFx0XHR9XG5cdFx0XHR6b25lU2NvcmVzLnB1c2goem9uZVNjb3JlKTtcblx0XHR9XG5cblx0XHR6b25lU2NvcmVzLnNvcnQoc29ydFpvbmVTY29yZXMpO1xuXG5cdFx0cmV0dXJuIHpvbmVTY29yZXMubGVuZ3RoID4gMCA/IHpvbmVTY29yZXNbMF0uem9uZS5uYW1lIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ3Vlc3MgKGlnbm9yZUNhY2hlKSB7XG5cdFx0aWYgKCFjYWNoZWRHdWVzcyB8fCBpZ25vcmVDYWNoZSkge1xuXHRcdFx0Y2FjaGVkR3Vlc3MgPSByZWJ1aWxkR3Vlc3MoKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlZEd1ZXNzO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdEdsb2JhbCBNZXRob2RzXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBub3JtYWxpemVOYW1lIChuYW1lKSB7XG5cdFx0cmV0dXJuIChuYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1xcLy9nLCAnXycpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkWm9uZSAocGFja2VkKSB7XG5cdFx0dmFyIGksIG5hbWUsIHNwbGl0LCBub3JtYWxpemVkO1xuXG5cdFx0aWYgKHR5cGVvZiBwYWNrZWQgPT09IFwic3RyaW5nXCIpIHtcblx0XHRcdHBhY2tlZCA9IFtwYWNrZWRdO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCBwYWNrZWQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNwbGl0ID0gcGFja2VkW2ldLnNwbGl0KCd8Jyk7XG5cdFx0XHRuYW1lID0gc3BsaXRbMF07XG5cdFx0XHRub3JtYWxpemVkID0gbm9ybWFsaXplTmFtZShuYW1lKTtcblx0XHRcdHpvbmVzW25vcm1hbGl6ZWRdID0gcGFja2VkW2ldO1xuXHRcdFx0bmFtZXNbbm9ybWFsaXplZF0gPSBuYW1lO1xuXHRcdFx0YWRkVG9HdWVzc2VzKG5vcm1hbGl6ZWQsIHNwbGl0WzJdLnNwbGl0KCcgJykpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldFpvbmUgKG5hbWUsIGNhbGxlcikge1xuXG5cdFx0bmFtZSA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cblx0XHR2YXIgem9uZSA9IHpvbmVzW25hbWVdO1xuXHRcdHZhciBsaW5rO1xuXG5cdFx0aWYgKHpvbmUgaW5zdGFuY2VvZiBab25lKSB7XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRpZiAodHlwZW9mIHpvbmUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHR6b25lID0gbmV3IFpvbmUoem9uZSk7XG5cdFx0XHR6b25lc1tuYW1lXSA9IHpvbmU7XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHQvLyBQYXNzIGdldFpvbmUgdG8gcHJldmVudCByZWN1cnNpb24gbW9yZSB0aGFuIDEgbGV2ZWwgZGVlcFxuXHRcdGlmIChsaW5rc1tuYW1lXSAmJiBjYWxsZXIgIT09IGdldFpvbmUgJiYgKGxpbmsgPSBnZXRab25lKGxpbmtzW25hbWVdLCBnZXRab25lKSkpIHtcblx0XHRcdHpvbmUgPSB6b25lc1tuYW1lXSA9IG5ldyBab25lKCk7XG5cdFx0XHR6b25lLl9zZXQobGluayk7XG5cdFx0XHR6b25lLm5hbWUgPSBuYW1lc1tuYW1lXTtcblx0XHRcdHJldHVybiB6b25lO1xuXHRcdH1cblxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0TmFtZXMgKCkge1xuXHRcdHZhciBpLCBvdXQgPSBbXTtcblxuXHRcdGZvciAoaSBpbiBuYW1lcykge1xuXHRcdFx0aWYgKG5hbWVzLmhhc093blByb3BlcnR5KGkpICYmICh6b25lc1tpXSB8fCB6b25lc1tsaW5rc1tpXV0pICYmIG5hbWVzW2ldKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0LnNvcnQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldENvdW50cnlOYW1lcyAoKSB7XG5cdFx0cmV0dXJuIE9iamVjdC5rZXlzKGNvdW50cmllcyk7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRMaW5rIChhbGlhc2VzKSB7XG5cdFx0dmFyIGksIGFsaWFzLCBub3JtYWwwLCBub3JtYWwxO1xuXG5cdFx0aWYgKHR5cGVvZiBhbGlhc2VzID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRhbGlhc2VzID0gW2FsaWFzZXNdO1xuXHRcdH1cblxuXHRcdGZvciAoaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRhbGlhcyA9IGFsaWFzZXNbaV0uc3BsaXQoJ3wnKTtcblxuXHRcdFx0bm9ybWFsMCA9IG5vcm1hbGl6ZU5hbWUoYWxpYXNbMF0pO1xuXHRcdFx0bm9ybWFsMSA9IG5vcm1hbGl6ZU5hbWUoYWxpYXNbMV0pO1xuXG5cdFx0XHRsaW5rc1tub3JtYWwwXSA9IG5vcm1hbDE7XG5cdFx0XHRuYW1lc1tub3JtYWwwXSA9IGFsaWFzWzBdO1xuXG5cdFx0XHRsaW5rc1tub3JtYWwxXSA9IG5vcm1hbDA7XG5cdFx0XHRuYW1lc1tub3JtYWwxXSA9IGFsaWFzWzFdO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGFkZENvdW50cmllcyAoZGF0YSkge1xuXHRcdHZhciBpLCBjb3VudHJ5X2NvZGUsIGNvdW50cnlfem9uZXMsIHNwbGl0O1xuXHRcdGlmICghZGF0YSB8fCAhZGF0YS5sZW5ndGgpIHJldHVybjtcblx0XHRmb3IgKGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0c3BsaXQgPSBkYXRhW2ldLnNwbGl0KCd8Jyk7XG5cdFx0XHRjb3VudHJ5X2NvZGUgPSBzcGxpdFswXS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0Y291bnRyeV96b25lcyA9IHNwbGl0WzFdLnNwbGl0KCcgJyk7XG5cdFx0XHRjb3VudHJpZXNbY291bnRyeV9jb2RlXSA9IG5ldyBDb3VudHJ5KFxuXHRcdFx0XHRjb3VudHJ5X2NvZGUsXG5cdFx0XHRcdGNvdW50cnlfem9uZXNcblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0Q291bnRyeSAobmFtZSkge1xuXHRcdG5hbWUgPSBuYW1lLnRvVXBwZXJDYXNlKCk7XG5cdFx0cmV0dXJuIGNvdW50cmllc1tuYW1lXSB8fCBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gem9uZXNGb3JDb3VudHJ5KGNvdW50cnksIHdpdGhfb2Zmc2V0KSB7XG5cdFx0Y291bnRyeSA9IGdldENvdW50cnkoY291bnRyeSk7XG5cblx0XHRpZiAoIWNvdW50cnkpIHJldHVybiBudWxsO1xuXG5cdFx0dmFyIHpvbmVzID0gY291bnRyeS56b25lcy5zb3J0KCk7XG5cblx0XHRpZiAod2l0aF9vZmZzZXQpIHtcblx0XHRcdHJldHVybiB6b25lcy5tYXAoZnVuY3Rpb24gKHpvbmVfbmFtZSkge1xuXHRcdFx0XHR2YXIgem9uZSA9IGdldFpvbmUoem9uZV9uYW1lKTtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuYW1lOiB6b25lX25hbWUsXG5cdFx0XHRcdFx0b2Zmc2V0OiB6b25lLnV0Y09mZnNldChuZXcgRGF0ZSgpKVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHpvbmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gbG9hZERhdGEgKGRhdGEpIHtcblx0XHRhZGRab25lKGRhdGEuem9uZXMpO1xuXHRcdGFkZExpbmsoZGF0YS5saW5rcyk7XG5cdFx0YWRkQ291bnRyaWVzKGRhdGEuY291bnRyaWVzKTtcblx0XHR0ei5kYXRhVmVyc2lvbiA9IGRhdGEudmVyc2lvbjtcblx0fVxuXG5cdGZ1bmN0aW9uIHpvbmVFeGlzdHMgKG5hbWUpIHtcblx0XHRpZiAoIXpvbmVFeGlzdHMuZGlkU2hvd0Vycm9yKSB7XG5cdFx0XHR6b25lRXhpc3RzLmRpZFNob3dFcnJvciA9IHRydWU7XG5cdFx0XHRcdGxvZ0Vycm9yKFwibW9tZW50LnR6LnpvbmVFeGlzdHMoJ1wiICsgbmFtZSArIFwiJykgaGFzIGJlZW4gZGVwcmVjYXRlZCBpbiBmYXZvciBvZiAhbW9tZW50LnR6LnpvbmUoJ1wiICsgbmFtZSArIFwiJylcIik7XG5cdFx0fVxuXHRcdHJldHVybiAhIWdldFpvbmUobmFtZSk7XG5cdH1cblxuXHRmdW5jdGlvbiBuZWVkc09mZnNldCAobSkge1xuXHRcdHZhciBpc1VuaXhUaW1lc3RhbXAgPSAobS5fZiA9PT0gJ1gnIHx8IG0uX2YgPT09ICd4Jyk7XG5cdFx0cmV0dXJuICEhKG0uX2EgJiYgKG0uX3R6bSA9PT0gdW5kZWZpbmVkKSAmJiAhaXNVbml4VGltZXN0YW1wKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGxvZ0Vycm9yIChtZXNzYWdlKSB7XG5cdFx0aWYgKHR5cGVvZiBjb25zb2xlICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0Y29uc29sZS5lcnJvcihtZXNzYWdlKTtcblx0XHR9XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0bW9tZW50LnR6IG5hbWVzcGFjZVxuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gdHogKGlucHV0KSB7XG5cdFx0dmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDAsIC0xKSxcblx0XHRcdG5hbWUgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdLFxuXHRcdFx0em9uZSA9IGdldFpvbmUobmFtZSksXG5cdFx0XHRvdXQgID0gbW9tZW50LnV0Yy5hcHBseShudWxsLCBhcmdzKTtcblxuXHRcdGlmICh6b25lICYmICFtb21lbnQuaXNNb21lbnQoaW5wdXQpICYmIG5lZWRzT2Zmc2V0KG91dCkpIHtcblx0XHRcdG91dC5hZGQoem9uZS5wYXJzZShvdXQpLCAnbWludXRlcycpO1xuXHRcdH1cblxuXHRcdG91dC50eihuYW1lKTtcblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHR0ei52ZXJzaW9uICAgICAgPSBWRVJTSU9OO1xuXHR0ei5kYXRhVmVyc2lvbiAgPSAnJztcblx0dHouX3pvbmVzICAgICAgID0gem9uZXM7XG5cdHR6Ll9saW5rcyAgICAgICA9IGxpbmtzO1xuXHR0ei5fbmFtZXMgICAgICAgPSBuYW1lcztcblx0dHouX2NvdW50cmllc1x0PSBjb3VudHJpZXM7XG5cdHR6LmFkZCAgICAgICAgICA9IGFkZFpvbmU7XG5cdHR6LmxpbmsgICAgICAgICA9IGFkZExpbms7XG5cdHR6LmxvYWQgICAgICAgICA9IGxvYWREYXRhO1xuXHR0ei56b25lICAgICAgICAgPSBnZXRab25lO1xuXHR0ei56b25lRXhpc3RzICAgPSB6b25lRXhpc3RzOyAvLyBkZXByZWNhdGVkIGluIDAuMS4wXG5cdHR6Lmd1ZXNzICAgICAgICA9IGd1ZXNzO1xuXHR0ei5uYW1lcyAgICAgICAgPSBnZXROYW1lcztcblx0dHouWm9uZSAgICAgICAgID0gWm9uZTtcblx0dHoudW5wYWNrICAgICAgID0gdW5wYWNrO1xuXHR0ei51bnBhY2tCYXNlNjAgPSB1bnBhY2tCYXNlNjA7XG5cdHR6Lm5lZWRzT2Zmc2V0ICA9IG5lZWRzT2Zmc2V0O1xuXHR0ei5tb3ZlSW52YWxpZEZvcndhcmQgICA9IHRydWU7XG5cdHR6Lm1vdmVBbWJpZ3VvdXNGb3J3YXJkID0gZmFsc2U7XG5cdHR6LmNvdW50cmllcyAgICA9IGdldENvdW50cnlOYW1lcztcblx0dHouem9uZXNGb3JDb3VudHJ5ID0gem9uZXNGb3JDb3VudHJ5O1xuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRJbnRlcmZhY2Ugd2l0aCBNb21lbnQuanNcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdHZhciBmbiA9IG1vbWVudC5mbjtcblxuXHRtb21lbnQudHogPSB0ejtcblxuXHRtb21lbnQuZGVmYXVsdFpvbmUgPSBudWxsO1xuXG5cdG1vbWVudC51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAobW9tLCBrZWVwVGltZSkge1xuXHRcdHZhciB6b25lID0gbW9tZW50LmRlZmF1bHRab25lLFxuXHRcdFx0b2Zmc2V0O1xuXG5cdFx0aWYgKG1vbS5feiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoem9uZSAmJiBuZWVkc09mZnNldChtb20pICYmICFtb20uX2lzVVRDKSB7XG5cdFx0XHRcdG1vbS5fZCA9IG1vbWVudC51dGMobW9tLl9hKS5fZDtcblx0XHRcdFx0bW9tLnV0YygpLmFkZCh6b25lLnBhcnNlKG1vbSksICdtaW51dGVzJyk7XG5cdFx0XHR9XG5cdFx0XHRtb20uX3ogPSB6b25lO1xuXHRcdH1cblx0XHRpZiAobW9tLl96KSB7XG5cdFx0XHRvZmZzZXQgPSBtb20uX3oudXRjT2Zmc2V0KG1vbSk7XG5cdFx0XHRpZiAoTWF0aC5hYnMob2Zmc2V0KSA8IDE2KSB7XG5cdFx0XHRcdG9mZnNldCA9IG9mZnNldCAvIDYwO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG1vbS51dGNPZmZzZXQgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR2YXIgeiA9IG1vbS5fejtcblx0XHRcdFx0bW9tLnV0Y09mZnNldCgtb2Zmc2V0LCBrZWVwVGltZSk7XG5cdFx0XHRcdG1vbS5feiA9IHo7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtb20uem9uZShvZmZzZXQsIGtlZXBUaW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Zm4udHogPSBmdW5jdGlvbiAobmFtZSwga2VlcFRpbWUpIHtcblx0XHRpZiAobmFtZSkge1xuXHRcdFx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RpbWUgem9uZSBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGdvdCAnICsgbmFtZSArICcgWycgKyB0eXBlb2YgbmFtZSArICddJyk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl96ID0gZ2V0Wm9uZShuYW1lKTtcblx0XHRcdGlmICh0aGlzLl96KSB7XG5cdFx0XHRcdG1vbWVudC51cGRhdGVPZmZzZXQodGhpcywga2VlcFRpbWUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bG9nRXJyb3IoXCJNb21lbnQgVGltZXpvbmUgaGFzIG5vIGRhdGEgZm9yIFwiICsgbmFtZSArIFwiLiBTZWUgaHR0cDovL21vbWVudGpzLmNvbS90aW1lem9uZS9kb2NzLyMvZGF0YS1sb2FkaW5nLy5cIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKHRoaXMuX3opIHsgcmV0dXJuIHRoaXMuX3oubmFtZTsgfVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGFiYnJXcmFwIChvbGQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKHRoaXMuX3opIHsgcmV0dXJuIHRoaXMuX3ouYWJicih0aGlzKTsgfVxuXHRcdFx0cmV0dXJuIG9sZC5jYWxsKHRoaXMpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldFpvbmVXcmFwIChvbGQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0dGhpcy5feiA9IG51bGw7XG5cdFx0XHRyZXR1cm4gb2xkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIHJlc2V0Wm9uZVdyYXAyIChvbGQpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAwKSB0aGlzLl96ID0gbnVsbDtcblx0XHRcdHJldHVybiBvbGQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblx0XHR9O1xuXHR9XG5cblx0Zm4uem9uZU5hbWUgID0gYWJicldyYXAoZm4uem9uZU5hbWUpO1xuXHRmbi56b25lQWJiciAgPSBhYmJyV3JhcChmbi56b25lQWJicik7XG5cdGZuLnV0YyAgICAgICA9IHJlc2V0Wm9uZVdyYXAoZm4udXRjKTtcblx0Zm4ubG9jYWwgICAgID0gcmVzZXRab25lV3JhcChmbi5sb2NhbCk7XG5cdGZuLnV0Y09mZnNldCA9IHJlc2V0Wm9uZVdyYXAyKGZuLnV0Y09mZnNldCk7XG5cblx0bW9tZW50LnR6LnNldERlZmF1bHQgPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0aWYgKG1ham9yIDwgMiB8fCAobWFqb3IgPT09IDIgJiYgbWlub3IgPCA5KSkge1xuXHRcdFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSBzZXREZWZhdWx0KCkgcmVxdWlyZXMgTW9tZW50LmpzID49IDIuOS4wLiBZb3UgYXJlIHVzaW5nIE1vbWVudC5qcyAnICsgbW9tZW50LnZlcnNpb24gKyAnLicpO1xuXHRcdH1cblx0XHRtb21lbnQuZGVmYXVsdFpvbmUgPSBuYW1lID8gZ2V0Wm9uZShuYW1lKSA6IG51bGw7XG5cdFx0cmV0dXJuIG1vbWVudDtcblx0fTtcblxuXHQvLyBDbG9uaW5nIGEgbW9tZW50IHNob3VsZCBpbmNsdWRlIHRoZSBfeiBwcm9wZXJ0eS5cblx0dmFyIG1vbWVudFByb3BlcnRpZXMgPSBtb21lbnQubW9tZW50UHJvcGVydGllcztcblx0aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChtb21lbnRQcm9wZXJ0aWVzKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuXHRcdC8vIG1vbWVudCAyLjguMStcblx0XHRtb21lbnRQcm9wZXJ0aWVzLnB1c2goJ196Jyk7XG5cdFx0bW9tZW50UHJvcGVydGllcy5wdXNoKCdfYScpO1xuXHR9IGVsc2UgaWYgKG1vbWVudFByb3BlcnRpZXMpIHtcblx0XHQvLyBtb21lbnQgMi43LjBcblx0XHRtb21lbnRQcm9wZXJ0aWVzLl96ID0gbnVsbDtcblx0fVxuXG5cdC8vIElOSkVDVCBEQVRBXG5cblx0cmV0dXJuIG1vbWVudDtcbn0pKTtcbiIsInZhciBtb21lbnQgPSBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCIuL21vbWVudC10aW1lem9uZVwiKTtcbm1vbWVudC50ei5sb2FkKHJlcXVpcmUoJy4vZGF0YS9wYWNrZWQvbGF0ZXN0Lmpzb24nKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogRmlubmlzaCBbZmldXG4vLyEgYXV0aG9yIDogVGFybW8gQWlkYW50YXVzdGEgOiBodHRwczovL2dpdGh1Yi5jb20vYmxlYWRvZlxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJ1xuICAgICAgICYmIHR5cGVvZiByZXF1aXJlID09PSAnZnVuY3Rpb24nID8gZmFjdG9yeShyZXF1aXJlKCcuLi9tb21lbnQnKSkgOlxuICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi4vbW9tZW50J10sIGZhY3RvcnkpIDpcbiAgIGZhY3RvcnkoZ2xvYmFsLm1vbWVudClcbn0odGhpcywgKGZ1bmN0aW9uIChtb21lbnQpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuXG4gICAgdmFyIG51bWJlcnNQYXN0ID1cbiAgICAgICAgICAgICdub2xsYSB5a3NpIGtha3NpIGtvbG1lIG5lbGrDpCB2aWlzaSBrdXVzaSBzZWl0c2Vtw6RuIGthaGRla3NhbiB5aGRla3PDpG4nLnNwbGl0KFxuICAgICAgICAgICAgICAgICcgJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgbnVtYmVyc0Z1dHVyZSA9IFtcbiAgICAgICAgICAgICdub2xsYScsXG4gICAgICAgICAgICAneWhkZW4nLFxuICAgICAgICAgICAgJ2thaGRlbicsXG4gICAgICAgICAgICAna29sbWVuJyxcbiAgICAgICAgICAgICduZWxqw6RuJyxcbiAgICAgICAgICAgICd2aWlkZW4nLFxuICAgICAgICAgICAgJ2t1dWRlbicsXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs3XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzhdLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbOV0sXG4gICAgICAgIF07XG4gICAgZnVuY3Rpb24gdHJhbnNsYXRlKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gJyc7XG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbXV1dGFtYW4gc2VrdW5uaW4nIDogJ211dXRhbWEgc2VrdW50aSc7XG4gICAgICAgICAgICBjYXNlICdzcyc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAnc2VrdW5uaW4nIDogJ3Nla3VudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ20nOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGknO1xuICAgICAgICAgICAgY2FzZSAnbW0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ21pbnV1dGluJyA6ICdtaW51dXR0aWEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaCc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGknO1xuICAgICAgICAgICAgY2FzZSAnaGgnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3R1bm5pbicgOiAndHVudGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICdww6RpdsOkbicgOiAncMOkaXbDpCc7XG4gICAgICAgICAgICBjYXNlICdkZCc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6TDpCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdNJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXVzaSc7XG4gICAgICAgICAgICBjYXNlICdNTSc6XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gaXNGdXR1cmUgPyAna3V1a2F1ZGVuJyA6ICdrdXVrYXV0dGEnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvc2knO1xuICAgICAgICAgICAgY2FzZSAneXknOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Z1b2RlbicgOiAndnVvdHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQgPSB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkgKyAnICcgKyByZXN1bHQ7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZlcmJhbE51bWJlcihudW1iZXIsIGlzRnV0dXJlKSB7XG4gICAgICAgIHJldHVybiBudW1iZXIgPCAxMFxuICAgICAgICAgICAgPyBpc0Z1dHVyZVxuICAgICAgICAgICAgICAgID8gbnVtYmVyc0Z1dHVyZVtudW1iZXJdXG4gICAgICAgICAgICAgICAgOiBudW1iZXJzUGFzdFtudW1iZXJdXG4gICAgICAgICAgICA6IG51bWJlcjtcbiAgICB9XG5cbiAgICB2YXIgZmkgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdmaScsIHtcbiAgICAgICAgbW9udGhzOiAndGFtbWlrdXVfaGVsbWlrdXVfbWFhbGlza3V1X2h1aHRpa3V1X3RvdWtva3V1X2tlc8Oka3V1X2hlaW7DpGt1dV9lbG9rdXVfc3l5c2t1dV9sb2tha3V1X21hcnJhc2t1dV9qb3VsdWt1dScuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAndGFtbWlfaGVsbWlfbWFhbGlzX2h1aHRpX3RvdWtvX2tlc8OkX2hlaW7DpF9lbG9fc3l5c19sb2thX21hcnJhc19qb3VsdScuc3BsaXQoXG4gICAgICAgICAgICAgICAgJ18nXG4gICAgICAgICAgICApLFxuICAgICAgICB3ZWVrZGF5czpcbiAgICAgICAgICAgICdzdW5udW50YWlfbWFhbmFudGFpX3RpaXN0YWlfa2Vza2l2aWlra29fdG9yc3RhaV9wZXJqYW50YWlfbGF1YW50YWknLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3N1X21hX3RpX2tlX3RvX3BlX2xhJy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISC5tbScsXG4gICAgICAgICAgICBMVFM6ICdISC5tbS5zcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0RvIE1NTU1bdGFdIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRG8gTU1NTVt0YV0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIERvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIGw6ICdELk0uWVlZWScsXG4gICAgICAgICAgICBsbDogJ0RvIE1NTSBZWVlZJyxcbiAgICAgICAgICAgIGxsbDogJ0RvIE1NTSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkLCBEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1t0w6Ruw6TDpG5dIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbaHVvbWVubmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2VpbGVuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1t2aWltZV0gZGRkZFtuYV0gW2tsb10gTFQnLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICclcyBww6TDpHN0w6QnLFxuICAgICAgICAgICAgcGFzdDogJyVzIHNpdHRlbicsXG4gICAgICAgICAgICBzOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBzczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgbW06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGg6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIGhoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBkZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTTogdHJhbnNsYXRlLFxuICAgICAgICAgICAgTU06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHk6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIHl5OiB0cmFuc2xhdGUsXG4gICAgICAgIH0sXG4gICAgICAgIGRheU9mTW9udGhPcmRpbmFsUGFyc2U6IC9cXGR7MSwyfVxcLi8sXG4gICAgICAgIG9yZGluYWw6ICclZC4nLFxuICAgICAgICB3ZWVrOiB7XG4gICAgICAgICAgICBkb3c6IDEsIC8vIE1vbmRheSBpcyB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrLlxuICAgICAgICAgICAgZG95OiA0LCAvLyBUaGUgd2VlayB0aGF0IGNvbnRhaW5zIEphbiA0dGggaXMgdGhlIGZpcnN0IHdlZWsgb2YgdGhlIHllYXIuXG4gICAgICAgIH0sXG4gICAgfSk7XG5cbiAgICByZXR1cm4gZmk7XG5cbn0pKSk7XG4iLCIvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG4vLyEgbG9jYWxlIDogU3dlZGlzaCBbc3ZdXG4vLyEgYXV0aG9yIDogSmVucyBBbG0gOiBodHRwczovL2dpdGh1Yi5jb20vdWxtdXNcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBzdiA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ3N2Jywge1xuICAgICAgICBtb250aHM6ICdqYW51YXJpX2ZlYnJ1YXJpX21hcnNfYXByaWxfbWFqX2p1bmlfanVsaV9hdWd1c3RpX3NlcHRlbWJlcl9va3RvYmVyX25vdmVtYmVyX2RlY2VtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDogJ2phbl9mZWJfbWFyX2Fwcl9tYWpfanVuX2p1bF9hdWdfc2VwX29rdF9ub3ZfZGVjJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5czogJ3PDtm5kYWdfbcOlbmRhZ190aXNkYWdfb25zZGFnX3RvcnNkYWdfZnJlZGFnX2zDtnJkYWcnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzw7ZuX23DpW5fdGlzX29uc190b3JfZnJlX2zDtnInLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnc8O2X23DpV90aV9vbl90b19mcl9sw7YnLnNwbGl0KCdfJyksXG4gICAgICAgIGxvbmdEYXRlRm9ybWF0OiB7XG4gICAgICAgICAgICBMVDogJ0hIOm1tJyxcbiAgICAgICAgICAgIExUUzogJ0hIOm1tOnNzJyxcbiAgICAgICAgICAgIEw6ICdZWVlZLU1NLUREJyxcbiAgICAgICAgICAgIExMOiAnRCBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQgRCBNTU1NIFlZWVkgW2tsLl0gSEg6bW0nLFxuICAgICAgICAgICAgbGxsOiAnRCBNTU0gWVlZWSBISDptbScsXG4gICAgICAgICAgICBsbGxsOiAnZGRkIEQgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1tJZGFnXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW0ltb3Jnb25dIExUJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbSWfDpXJdIExUJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnW1DDpV0gZGRkZCBMVCcsXG4gICAgICAgICAgICBsYXN0V2VlazogJ1tJXSBkZGRkW3NdIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnb20gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ2bDtnIgJXMgc2VkYW4nLFxuICAgICAgICAgICAgczogJ27DpWdyYSBzZWt1bmRlcicsXG4gICAgICAgICAgICBzczogJyVkIHNla3VuZGVyJyxcbiAgICAgICAgICAgIG06ICdlbiBtaW51dCcsXG4gICAgICAgICAgICBtbTogJyVkIG1pbnV0ZXInLFxuICAgICAgICAgICAgaDogJ2VuIHRpbW1lJyxcbiAgICAgICAgICAgIGhoOiAnJWQgdGltbWFyJyxcbiAgICAgICAgICAgIGQ6ICdlbiBkYWcnLFxuICAgICAgICAgICAgZGQ6ICclZCBkYWdhcicsXG4gICAgICAgICAgICBNOiAnZW4gbcOlbmFkJyxcbiAgICAgICAgICAgIE1NOiAnJWQgbcOlbmFkZXInLFxuICAgICAgICAgICAgeTogJ2V0dCDDpXInLFxuICAgICAgICAgICAgeXk6ICclZCDDpXInLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0oXFw6ZXxcXDphKS8sXG4gICAgICAgIG9yZGluYWw6IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICAgICAgICAgIHZhciBiID0gbnVtYmVyICUgMTAsXG4gICAgICAgICAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgICAgICAgICAgfn4oKG51bWJlciAlIDEwMCkgLyAxMCkgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6YSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMlxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzplJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiAnOmUnO1xuICAgICAgICAgICAgcmV0dXJuIG51bWJlciArIG91dHB1dDtcbiAgICAgICAgfSxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHN2O1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEdlcm1hbiBbZGVdXG4vLyEgYXV0aG9yIDogbGx1Y2hzIDogaHR0cHM6Ly9naXRodWIuY29tL2xsdWNoc1xuLy8hIGF1dGhvcjogTWVuZWxpb24gRWxlbnPDumxlOiBodHRwczovL2dpdGh1Yi5jb20vT2lyZVxuLy8hIGF1dGhvciA6IE1pa29sYWogRGFkZWxhIDogaHR0cHM6Ly9naXRodWIuY29tL21pazAxYWpcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIGZ1bmN0aW9uIHByb2Nlc3NSZWxhdGl2ZVRpbWUobnVtYmVyLCB3aXRob3V0U3VmZml4LCBrZXksIGlzRnV0dXJlKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB7XG4gICAgICAgICAgICBtOiBbJ2VpbmUgTWludXRlJywgJ2VpbmVyIE1pbnV0ZSddLFxuICAgICAgICAgICAgaDogWydlaW5lIFN0dW5kZScsICdlaW5lciBTdHVuZGUnXSxcbiAgICAgICAgICAgIGQ6IFsnZWluIFRhZycsICdlaW5lbSBUYWcnXSxcbiAgICAgICAgICAgIGRkOiBbbnVtYmVyICsgJyBUYWdlJywgbnVtYmVyICsgJyBUYWdlbiddLFxuICAgICAgICAgICAgdzogWydlaW5lIFdvY2hlJywgJ2VpbmVyIFdvY2hlJ10sXG4gICAgICAgICAgICBNOiBbJ2VpbiBNb25hdCcsICdlaW5lbSBNb25hdCddLFxuICAgICAgICAgICAgTU06IFtudW1iZXIgKyAnIE1vbmF0ZScsIG51bWJlciArICcgTW9uYXRlbiddLFxuICAgICAgICAgICAgeTogWydlaW4gSmFocicsICdlaW5lbSBKYWhyJ10sXG4gICAgICAgICAgICB5eTogW251bWJlciArICcgSmFocmUnLCBudW1iZXIgKyAnIEphaHJlbiddLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gd2l0aG91dFN1ZmZpeCA/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIGFkZHJlc3M6ICdBZHJlc3NlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgIGFycml2YWw6ICdBbmt1bmZ0JyxcbiAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgIGJ1czogJ0J1cycsXG4gICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnU3VjaGhpc3RvcmllIGzDtnNjaGVuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdXb2xsZW4gU2llIGRpZSBTdWNoLUhpc3RvcmllIGzDtnNjaGVuPycsXG4gICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICBmZXJyeTogJ0bDpGhyZScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICByYWlsOiAnWnVnJyxcbiAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N1Y2hlIGFuaGFuZCB2b24gQWRyZXNzZSBvZGVyIE9ydHNhbmdhYmUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1ppZWxvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnS2VpbiBPcnQgZ2VmdW5kZW4uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU3RhbmRvcnQgZXJtaXR0ZWxuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWRlc2t0b3AnOlxuICAgICAgJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4gTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb2JpbGUnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJhw59lJyxcbiAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSGFsdGVzdGVsbGUnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N1Y2hlIExlaWhyYWQtU3RhdGlvbmVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3VjaGUgU3RhZHRiYWhuLUhhbHRlc3RlbGxlbi1TdWNoZScsXG4gICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICB0cmFtOiAnU3RyYcOfZW5iYWhuJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdBdXMgZWlnZW5lbiBGYXZvcml0ZW4gYXVzd8OkaGxlbicsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgIHdoZXJlOiAnV29oaW4/JyxcbiAgICBwbGFjZTogJ09ydCcsXG4gIH0sXG4gIGVuOiB7XG4gICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmxpZ2h0JyxcbiAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgYmFjazogJ0JhY2snLFxuICAgIGJpa2VwYXJrOiAnUGFyayAmIFJpZGUgZm9yIGJpa2VzJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgYnVzOiAnYnVzJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ0NsZWFyIHNlYXJjaCBoaXN0b3J5JyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBjbGVhciB0aGUgc2VhcmNoIGhpc3Rvcnk/JyxcbiAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgZmVycnk6ICdGZXJyeScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ20nLFxuICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgIHJhaWw6ICdUcmFpbicsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1NlYXJjaCBvcmlnaW4sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5JyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6XG4gICAgICAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLiBFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ1N0b3AnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1NlYXJjaCBzdG9wcyBhbmQgcm91dGVzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1NlYXJjaCB0cmFpbiByb3V0ZXMgb3Igc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzIGFuZCBzdG9wIHNlYXJjaCcsXG4gICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgIHRyYW06ICdUcmFtJyxcbiAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdTZWxlY3QgcG9zaXRpb24gZnJvbSBtYXAnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gIH0sXG4gIGZpOiB7XG4gICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnT3NvaXRlLCBwYWlra2EgdGFpIHlyaXR5cycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgIGFycml2YWw6ICdQZXJpbGzDpCcsXG4gICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgYmlrZXBhcms6ICdMaWl0eW50w6RwecO2csOkcGFya2tpJyxcbiAgICBidXM6ICdidXNzaScsXG4gICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka29pbnRpJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ1TDpG3DpG5oZXRraW5lbiBzaWphaW50aScsXG4gICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgIGRlcGFydHVyZTogJ0zDpGh0w7ZhaWthJyxcbiAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgZmVycnk6ICdMYXV0dGEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgb3dubG9jYXRpb25zOiAnT21hdCBwYWlrYXQnLFxuICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnTGFpdHVyaScsXG4gICAgcmFpbDogJ0p1bmEnLFxuICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICBzZWFyY2g6ICdFdHNpJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdIYWUgbcOkw6Ryw6RucMOkw6R0w6QsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnS2F0c28gdHVsb2tzZXQgdmllcmVpc2VsdMOkIE3DpMOkcsOkbnDDpMOkLXbDpGxpbGVoZGVsdMOkJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTecO2dMOkIGzDpGh0w7ZwYWlra2EnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCc6XG4gICAgICAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuIE5hdmlnb2kgbGlzdGFzc2EgbnVvbGluw6RwcMOkaW1pbGzDpCBqYSB2YWxpdHNlIGVudGVyaWxsw6QnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJzpcbiAgICAgICdQYWlra2EsIGxpbmphIGphIHB5c8Oka2tpaGFrdS4gU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzdGEnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICBzdHJlZXQ6ICdLYXR1JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICBzdG9wOiAnUHlzw6Rra2knLFxuICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnSGFlIGthdXB1bmtpcHnDtnLDpGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnSGFlIHJhaXRpb2xpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2h1b21lbm5hIGtsbycsXG4gICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICB2ZW51ZTogJ1BhaWtrYScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgIHBsYWNlOiAnUGFpa2thJyxcbiAgfSxcbiAgc3Y6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgIGJhY2s6ICdUaWxsYmFrYScsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgYnVzOiAnQnVzc2knLFxuICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVMO2bScsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0ZyYW10aWRhIHJ1dHQnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICBvcmlnaW46ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICBsb2FkaW5nOiAnTGFkZGFyLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgIHJhaWw6ICdUw6VnJyxcbiAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTw7ZrIG1lZCBhZHJlc3NlbiBlbGxlciBwbGF0c2VucyBuYW1uJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU2tyaXYgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0luZ2Egc8O2a3Jlc3VsdGF0JyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU8O2ayBwb3NpdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1kZXNrdG9wJzpcbiAgICAgICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4gTmF2aWdlcmEgbGlzdGFuIG1lZCBwaWx0YW5nZW50ZXJuYSBvY2ggdsOkbGogbWVkIEVudGVyLXRhbmdldGVuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vYmlsZSc6XG4gICAgICAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuIEFuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnSGl0dGFkZSB7e2NvdW50fX0gZsO2cnNsYWcnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ051dmFyYW5kZSB2YWw6IHt7c2VsZWN0aW9ufX0nLFxuICAgIHN0cmVldDogJ0dhdGEnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0jDpWxscGxhdHMnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1PDtmsgaMOlbGxwbGF0c2VyIGVsbGVyIGxpbmplcicsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU8O2ayBmbHlnIGVsbGVyIGZseWdwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU8O2ayBidXNzbGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU8O2ayBzdGFkc2N5a2Vsc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1PDtmsgbsOkcnTDpWdlciBlbGxlciBzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTw7ZrIG1ldHJvbGluamVyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTw7ZrIHNww6VydmFnbmxpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzcyBvY2ggc3RvcHAgc8O2a25pbmdlbicsXG4gICAgJ3RvZGF5LWF0JzogJ2kgZGFnIGtsJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnaSBtb3Jnb24nLFxuICAgIHRyYW06ICdTcMOlcnZhZ24nLFxuICAgIHRyYWNrOiAnU3DDpXInLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1bDpGxqIHBvc2l0aW9uIGZyw6VuIGthcnRhbicsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVsOkbGogZnLDpW4gZWduYSBwbGF0c2VyJyxcbiAgICB2ZW51ZTogJ03DtnRlc3BsYXRzJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgd2hlcmU6ICdWYXJ0IHZpbGwgZHUgw6VrYT8nLFxuICAgIHBsYWNlOiAnUGxhdHMnLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgdHJhbnNsYXRpb25zO1xuIiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUsIHVzZUVmZmVjdCwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RNb2RhbCBmcm9tICdyZWFjdC1tb2RhbCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgSWNvbiBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBEaWFsb2dNb2RhbCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1kaWFsb2ctbW9kYWwnO1xuaW1wb3J0IEF1dG9zdWdnZXN0IGZyb20gJ3JlYWN0LWF1dG9zdWdnZXN0JztcbmltcG9ydCBtb2JpbGVTdHlsZXMgZnJvbSAnLi9Nb2JpbGVTZWFyY2guc2Nzcyc7XG5pbXBvcnQgbW9iaWxlTm9TY3JvbGxTdHlsZXMgZnJvbSAnLi9Nb2JpbGVOb1Njcm9sbC5zY3NzJztcblxuY2xhc3MgQXV0b3N1Z2dlc3RQYXRjaCBleHRlbmRzIEF1dG9zdWdnZXN0IHtcbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gICAgc2VsZi5vblN1Z2dlc3Rpb25Ub3VjaE1vdmUgPSAoKSA9PiB7XG4gICAgICBzZWxmLmp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24gPSBmYWxzZTtcbiAgICAgIHNlbGYucHJlc3NlZFN1Z2dlc3Rpb24gPSBudWxsO1xuICAgIH07XG4gIH1cbn1cblxuY29uc3QgTW9iaWxlU2VhcmNoID0gKHtcbiAgYXBwRWxlbWVudCxcbiAgaWQsXG4gIGNsb3NlSGFuZGxlLFxuICBjbGVhcklucHV0LFxuICB2YWx1ZSxcbiAgc3VnZ2VzdGlvbnMsXG4gIGlucHV0UHJvcHMsXG4gIGZldGNoRnVuY3Rpb24sXG4gIHJlbmRlclN1Z2dlc3Rpb24sXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZSxcbiAgYXJpYUxhYmVsLFxuICBsYWJlbCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXMsXG4gIGRpYWxvZ0hlYWRlclRleHQsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0LFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0LFxuICBjbGVhcklucHV0QnV0dG9uVGV4dCxcbiAgZm9jdXNJbnB1dCxcbiAgY29sb3IsXG4gIGhvdmVyQ29sb3IsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3IsXG4gIHNlYXJjaE9wZW4sXG4gIGZvbnRXZWlnaHRzLFxuICBzaG93U2Nyb2xsLFxufSkgPT4ge1xuICBjb25zdCBzdHlsZXMgPSBzaG93U2Nyb2xsID8gbW9iaWxlU3R5bGVzIDogbW9iaWxlTm9TY3JvbGxTdHlsZXM7XG5cbiAgY29uc3QgaW5wdXRJZCA9IGAke2lkfS1pbnB1dGA7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuXG4gIGNvbnN0IFtpc0RpYWxvZ09wZW4sIHNldERpYWxvZ09wZW5dID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpbnB1dFJlZiA9IFJlYWN0LnVzZVJlZigpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgUmVhY3RNb2RhbC5zZXRBcHBFbGVtZW50KGFwcEVsZW1lbnQpO1xuICB9LCBbXSk7XG5cbiAgY29uc3Qgb25DbG9zZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjbG9zZUhhbmRsZSgpO1xuICB9KTtcblxuICBjb25zdCBvblNlbGVjdCA9IChlLCByZWYpID0+IHtcbiAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgc2V0RGlhbG9nT3Blbih0cnVlKTtcbiAgICB9IGVsc2UgaWYgKCFyZWYuc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmFycm93Q2xpY2tlZCkge1xuICAgICAgLy8gU2VsZWN0IGl0ZW0gaWYgZmlsbCBpbnB1dCBidXR0b24gaXMgbm90IHByZXNzZWQgKGRpYWdvbmFsIGFycm93IGluIHN1Z2dlc3Rpb24gaXRlbXMpXG4gICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZChlLCByZWYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gICAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gICAgY29uc3QgZW50ZXIgPSBbMzIsICdFbnRlciddO1xuICAgIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcblxuICAgIGlmICgha2V5IHx8ICFzcGFjZS5jb25jYXQoZW50ZXIpLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcblxuICBjb25zdCBnZXRWYWx1ZSA9IHN1Z2dlc3Rpb24gPT4ge1xuICAgIGlmIChzdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIGdldFN1Z2dlc3Rpb25WYWx1ZShzdWdnZXN0aW9uKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLXNlYXJjaC1oaXN0b3J5J119PlxuICAgICAgICAgIHtpdGVtLmxhYmVsSWR9XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlbmRlclN1Z2dlc3Rpb24oaXRlbSk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyRGlhbG9nTW9kYWwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEaWFsb2dNb2RhbFxuICAgICAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fVxuICAgICAgICBpc01vZGFsT3Blbj17aXNEaWFsb2dPcGVufVxuICAgICAgICBoYW5kbGVDbG9zZT17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGhlYWRlclRleHQ9e2RpYWxvZ0hlYWRlclRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25UZXh0PXtkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uVGV4dD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzKCk7XG4gICAgICAgICAgc2V0RGlhbG9nT3BlbihmYWxzZSk7XG4gICAgICAgIH19XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvbk9uQ2xpY2s9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBjb2xvcj17Y29sb3J9XG4gICAgICAgIGhvdmVyQ29sb3I9e2hvdmVyQ29sb3J9XG4gICAgICAgIGZvbnRXZWlnaHRzPXtmb250V2VpZ2h0c31cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e2NsZWFySW5wdXR9XG4gICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgY2xlYXJJbnB1dCgpfVxuICAgICAgICBhcmlhLWxhYmVsPXtjbGVhcklucHV0QnV0dG9uVGV4dH1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17Y29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckNvbnRlbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfSBodG1sRm9yPXtpbnB1dElkfT5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1pY29uJ119XG4gICAgICAgICAgb25DbGljaz17KCkgPT4gb25DbG9zZSgpfVxuICAgICAgICAgIG9uS2V5RG93bj17ZSA9PiBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgb25DbG9zZSgpfVxuICAgICAgICAgIGFyaWEtbGFiZWw9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgICAgdGFiSW5kZXg9ezB9XG4gICAgICAgID5cbiAgICAgICAgICA8SWNvbiBpbWc9XCJhcnJvd1wiIC8+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sncmlnaHQtY29sdW1uJ119PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfSBpZD17bGFiZWxJZH0+XG4gICAgICAgICAgICB7bGFiZWx9XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxBdXRvc3VnZ2VzdFBhdGNoXG4gICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9uc1xuICAgICAgICAgICAgaWQ9e2lkfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXtmZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRWYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3JlbmRlckl0ZW19XG4gICAgICAgICAgICAvLyBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2sgbXVzdCBiZSBzZXQgdG8gdHJ1ZS5cbiAgICAgICAgICAgIC8vIElmIHNldCB0byBmYWxzZSwgaW5wdXQgd29uJ3QgYmUgZm9jdXNlZCB3aGVuIHVzZXIgY2xpY2tzIG9uXG4gICAgICAgICAgICAvLyBGaWxsIGlucHV0IGJ1dHRvbiBpbiBzdWdnZXN0aW9uIGxpc3QuIChkaWFnb25hbCBhcnJvdyBpbiBzdHJlZXQgbmFtZSBpdGVtcylcbiAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRydWV9XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgICAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke3N0eWxlc1tpZF0gfHwgJyd9ICR7XG4gICAgICAgICAgICAgICAgICBpbnB1dFByb3BzLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgYXV0b0ZvY3VzOiB0cnVlLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICA8aW5wdXQgYXJpYS1sYWJlbD17YXJpYUxhYmVsfSBpZD17aWR9IHsuLi5wfSAvPlxuICAgICAgICAgICAgICAgIHt2YWx1ZSAmJiBjbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e29uU2VsZWN0fVxuICAgICAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgICAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9O1xuICBpZiAoZm9jdXNJbnB1dCAmJiBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c2VhcmNoT3Blbn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIG9uQWZ0ZXJDbG9zZT17b25DbG9zZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7Y29sb3J9YCxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7aG92ZXJDb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3JlbmRlckRpYWxvZ01vZGFsKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVTZWFyY2gucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsb3NlSGFuZGxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc3VnZ2VzdGlvbnM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGZldGNoRnVuY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nSGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvY3VzSW5wdXQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWFyY2hPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBNb2JpbGVTZWFyY2g7XG4iLCIvKiEgRm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gcGxlYXNlIHNlZSBpbmRleC5qcy5MSUNFTlNFLnR4dCAqL1xuIWZ1bmN0aW9uKGUsdCl7aWYoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGUpbW9kdWxlLmV4cG9ydHM9dChyZXF1aXJlKFwicmVhY3RcIikpO2Vsc2UgaWYoXCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXCJyZWFjdFwiXSx0KTtlbHNle3ZhciBuPVwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP3QocmVxdWlyZShcInJlYWN0XCIpKTp0KGUucmVhY3QpO2Zvcih2YXIgbyBpbiBuKShcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzOmUpW29dPW5bb119fShcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXs4ODg6ZnVuY3Rpb24oZSx0LG4pe3ZhciBvLHI7cj12b2lkIDAhPT1uLmc/bi5nOlwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/d2luZG93OnRoaXMsbz1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtcInVzZSBzdHJpY3RcIjt2YXIgdD17aWdub3JlOlwiW2RhdGEtc2Nyb2xsLWlnbm9yZV1cIixoZWFkZXI6bnVsbCx0b3BPbkVtcHR5SGFzaDohMCxzcGVlZDo1MDAsc3BlZWRBc0R1cmF0aW9uOiExLGR1cmF0aW9uTWF4Om51bGwsZHVyYXRpb25NaW46bnVsbCxjbGlwOiEwLG9mZnNldDowLGVhc2luZzpcImVhc2VJbk91dEN1YmljXCIsY3VzdG9tRWFzaW5nOm51bGwsdXBkYXRlVVJMOiEwLHBvcHN0YXRlOiEwLGVtaXRFdmVudHM6ITB9LG49ZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChhcmd1bWVudHMsKGZ1bmN0aW9uKHQpe2Zvcih2YXIgbiBpbiB0KXtpZighdC5oYXNPd25Qcm9wZXJ0eShuKSlyZXR1cm47ZVtuXT10W25dfX0pKSxlfSxvPWZ1bmN0aW9uKGUpe1wiI1wiPT09ZS5jaGFyQXQoMCkmJihlPWUuc3Vic3RyKDEpKTtmb3IodmFyIHQsbj1TdHJpbmcoZSksbz1uLmxlbmd0aCxyPS0xLGk9XCJcIix1PW4uY2hhckNvZGVBdCgwKTsrK3I8bzspe2lmKDA9PT0odD1uLmNoYXJDb2RlQXQocikpKXRocm93IG5ldyBJbnZhbGlkQ2hhcmFjdGVyRXJyb3IoXCJJbnZhbGlkIGNoYXJhY3RlcjogdGhlIGlucHV0IGNvbnRhaW5zIFUrMDAwMC5cIik7aSs9dD49MSYmdDw9MzF8fDEyNz09dHx8MD09PXImJnQ+PTQ4JiZ0PD01N3x8MT09PXImJnQ+PTQ4JiZ0PD01NyYmNDU9PT11P1wiXFxcXFwiK3QudG9TdHJpbmcoMTYpK1wiIFwiOnQ+PTEyOHx8NDU9PT10fHw5NT09PXR8fHQ+PTQ4JiZ0PD01N3x8dD49NjUmJnQ8PTkwfHx0Pj05NyYmdDw9MTIyP24uY2hhckF0KHIpOlwiXFxcXFwiK24uY2hhckF0KHIpfXJldHVyblwiI1wiK2l9LHI9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5tYXgoZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodCxkb2N1bWVudC5ib2R5Lm9mZnNldEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmJvZHkuY2xpZW50SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpfSxpPWZ1bmN0aW9uKHQpe3JldHVybiB0PyhuPXQscGFyc2VJbnQoZS5nZXRDb21wdXRlZFN0eWxlKG4pLmhlaWdodCwxMCkrdC5vZmZzZXRUb3ApOjA7dmFyIG59LHU9ZnVuY3Rpb24odCxuLG8pezA9PT10JiZkb2N1bWVudC5ib2R5LmZvY3VzKCksb3x8KHQuZm9jdXMoKSxkb2N1bWVudC5hY3RpdmVFbGVtZW50IT09dCYmKHQuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpLHQuZm9jdXMoKSx0LnN0eWxlLm91dGxpbmU9XCJub25lXCIpLGUuc2Nyb2xsVG8oMCxuKSl9LHM9ZnVuY3Rpb24odCxuLG8scil7aWYobi5lbWl0RXZlbnRzJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkN1c3RvbUV2ZW50KXt2YXIgaT1uZXcgQ3VzdG9tRXZlbnQodCx7YnViYmxlczohMCxkZXRhaWw6e2FuY2hvcjpvLHRvZ2dsZTpyfX0pO2RvY3VtZW50LmRpc3BhdGNoRXZlbnQoaSl9fTtyZXR1cm4gZnVuY3Rpb24oYyxhKXt2YXIgbCxmLGQsdixwPXtjYW5jZWxTY3JvbGw6ZnVuY3Rpb24oZSl7Y2FuY2VsQW5pbWF0aW9uRnJhbWUodiksdj1udWxsLGV8fHMoXCJzY3JvbGxDYW5jZWxcIixsKX0sYW5pbWF0ZVNjcm9sbDpmdW5jdGlvbihvLGMsYSl7cC5jYW5jZWxTY3JvbGwoKTt2YXIgZj1uKGx8fHQsYXx8e30pLG09XCJbb2JqZWN0IE51bWJlcl1cIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSxoPW18fCFvLnRhZ05hbWU/bnVsbDpvO2lmKG18fGgpe3ZhciB5PWUucGFnZVlPZmZzZXQ7Zi5oZWFkZXImJiFkJiYoZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGYuaGVhZGVyKSk7dmFyIGcsYix3LEU9aShkKSxPPW0/bzpmdW5jdGlvbih0LG4sbyxpKXt2YXIgdT0wO2lmKHQub2Zmc2V0UGFyZW50KWRve3UrPXQub2Zmc2V0VG9wLHQ9dC5vZmZzZXRQYXJlbnR9d2hpbGUodCk7cmV0dXJuIHU9TWF0aC5tYXgodS1uLW8sMCksaSYmKHU9TWF0aC5taW4odSxyKCktZS5pbm5lckhlaWdodCkpLHV9KGgsRSxwYXJzZUludChcImZ1bmN0aW9uXCI9PXR5cGVvZiBmLm9mZnNldD9mLm9mZnNldChvLGMpOmYub2Zmc2V0LDEwKSxmLmNsaXApLFM9Ty15LF89cigpLEk9MCxNPWZ1bmN0aW9uKGUsdCl7dmFyIG49dC5zcGVlZEFzRHVyYXRpb24/dC5zcGVlZDpNYXRoLmFicyhlLzFlMyp0LnNwZWVkKTtyZXR1cm4gdC5kdXJhdGlvbk1heCYmbj50LmR1cmF0aW9uTWF4P3QuZHVyYXRpb25NYXg6dC5kdXJhdGlvbk1pbiYmbjx0LmR1cmF0aW9uTWluP3QuZHVyYXRpb25NaW46cGFyc2VJbnQobiwxMCl9KFMsZiksTD1mdW5jdGlvbih0KXtnfHwoZz10KSxJKz10LWcsdz15K1MqZnVuY3Rpb24oZSx0KXt2YXIgbjtyZXR1cm5cImVhc2VJblF1YWRcIj09PWUuZWFzaW5nJiYobj10KnQpLFwiZWFzZU91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10KigyLXQpKSxcImVhc2VJbk91dFF1YWRcIj09PWUuZWFzaW5nJiYobj10PC41PzIqdCp0Oig0LTIqdCkqdC0xKSxcImVhc2VJbkN1YmljXCI9PT1lLmVhc2luZyYmKG49dCp0KnQpLFwiZWFzZU91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49LS10KnQqdCsxKSxcImVhc2VJbk91dEN1YmljXCI9PT1lLmVhc2luZyYmKG49dDwuNT80KnQqdCp0Oih0LTEpKigyKnQtMikqKDIqdC0yKSsxKSxcImVhc2VJblF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCksXCJlYXNlT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj0xLSAtLXQqdCp0KnQpLFwiZWFzZUluT3V0UXVhcnRcIj09PWUuZWFzaW5nJiYobj10PC41PzgqdCp0KnQqdDoxLTgqLS10KnQqdCp0KSxcImVhc2VJblF1aW50XCI9PT1lLmVhc2luZyYmKG49dCp0KnQqdCp0KSxcImVhc2VPdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPTErLS10KnQqdCp0KnQpLFwiZWFzZUluT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj10PC41PzE2KnQqdCp0KnQqdDoxKzE2Ki0tdCp0KnQqdCp0KSxlLmN1c3RvbUVhc2luZyYmKG49ZS5jdXN0b21FYXNpbmcodCkpLG58fHR9KGYsYj0oYj0wPT09TT8wOkkvTSk+MT8xOmIpLGUuc2Nyb2xsVG8oMCxNYXRoLmZsb29yKHcpKSxmdW5jdGlvbih0LG4pe3ZhciByPWUucGFnZVlPZmZzZXQ7aWYodD09bnx8cj09bnx8KHk8biYmZS5pbm5lckhlaWdodCtyKT49XylyZXR1cm4gcC5jYW5jZWxTY3JvbGwoITApLHUobyxuLG0pLHMoXCJzY3JvbGxTdG9wXCIsZixvLGMpLGc9bnVsbCx2PW51bGwsITB9KHcsTyl8fCh2PWUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpLGc9dCl9OzA9PT1lLnBhZ2VZT2Zmc2V0JiZlLnNjcm9sbFRvKDAsMCksZnVuY3Rpb24oZSx0LG4pe3R8fGhpc3RvcnkucHVzaFN0YXRlJiZuLnVwZGF0ZVVSTCYmaGlzdG9yeS5wdXNoU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeShuKSxhbmNob3I6ZS5pZH0sZG9jdW1lbnQudGl0bGUsZT09PWRvY3VtZW50LmRvY3VtZW50RWxlbWVudD9cIiN0b3BcIjpcIiNcIitlLmlkKX0obyxtLGYpLFwibWF0Y2hNZWRpYVwiaW4gZSYmZS5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpLm1hdGNoZXM/dShvLE1hdGguZmxvb3IoTyksITEpOihzKFwic2Nyb2xsU3RhcnRcIixmLG8sYykscC5jYW5jZWxTY3JvbGwoITApLGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lKEwpKX19fSxtPWZ1bmN0aW9uKHQpe2lmKCF0LmRlZmF1bHRQcmV2ZW50ZWQmJiEoMCE9PXQuYnV0dG9ufHx0Lm1ldGFLZXl8fHQuY3RybEtleXx8dC5zaGlmdEtleSkmJlwiY2xvc2VzdFwiaW4gdC50YXJnZXQmJihmPXQudGFyZ2V0LmNsb3Nlc3QoYykpJiZcImFcIj09PWYudGFnTmFtZS50b0xvd2VyQ2FzZSgpJiYhdC50YXJnZXQuY2xvc2VzdChsLmlnbm9yZSkmJmYuaG9zdG5hbWU9PT1lLmxvY2F0aW9uLmhvc3RuYW1lJiZmLnBhdGhuYW1lPT09ZS5sb2NhdGlvbi5wYXRobmFtZSYmLyMvLnRlc3QoZi5ocmVmKSl7dmFyIG4scjt0cnl7bj1vKGRlY29kZVVSSUNvbXBvbmVudChmLmhhc2gpKX1jYXRjaChlKXtuPW8oZi5oYXNoKX1pZihcIiNcIj09PW4pe2lmKCFsLnRvcE9uRW1wdHlIYXNoKXJldHVybjtyPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudH1lbHNlIHI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihuKTsocj1yfHxcIiN0b3BcIiE9PW4/cjpkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpJiYodC5wcmV2ZW50RGVmYXVsdCgpLGZ1bmN0aW9uKHQpe2lmKGhpc3RvcnkucmVwbGFjZVN0YXRlJiZ0LnVwZGF0ZVVSTCYmIWhpc3Rvcnkuc3RhdGUpe3ZhciBuPWUubG9jYXRpb24uaGFzaDtuPW58fFwiXCIsaGlzdG9yeS5yZXBsYWNlU3RhdGUoe3Ntb290aFNjcm9sbDpKU09OLnN0cmluZ2lmeSh0KSxhbmNob3I6bnx8ZS5wYWdlWU9mZnNldH0sZG9jdW1lbnQudGl0bGUsbnx8ZS5sb2NhdGlvbi5ocmVmKX19KGwpLHAuYW5pbWF0ZVNjcm9sbChyLGYpKX19LGg9ZnVuY3Rpb24oZSl7aWYobnVsbCE9PWhpc3Rvcnkuc3RhdGUmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbD09PUpTT04uc3RyaW5naWZ5KGwpKXt2YXIgdD1oaXN0b3J5LnN0YXRlLmFuY2hvcjtcInN0cmluZ1wiPT10eXBlb2YgdCYmdCYmISh0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobyhoaXN0b3J5LnN0YXRlLmFuY2hvcikpKXx8cC5hbmltYXRlU2Nyb2xsKHQsbnVsbCx7dXBkYXRlVVJMOiExfSl9fTtyZXR1cm4gcC5kZXN0cm95PWZ1bmN0aW9uKCl7bCYmKGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLG0sITEpLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsaCwhMSkscC5jYW5jZWxTY3JvbGwoKSxsPW51bGwsZj1udWxsLGQ9bnVsbCx2PW51bGwpfSxmdW5jdGlvbigpe2lmKCEoXCJxdWVyeVNlbGVjdG9yXCJpbiBkb2N1bWVudCYmXCJhZGRFdmVudExpc3RlbmVyXCJpbiBlJiZcInJlcXVlc3RBbmltYXRpb25GcmFtZVwiaW4gZSYmXCJjbG9zZXN0XCJpbiBlLkVsZW1lbnQucHJvdG90eXBlKSl0aHJvd1wiU21vb3RoIFNjcm9sbDogVGhpcyBicm93c2VyIGRvZXMgbm90IHN1cHBvcnQgdGhlIHJlcXVpcmVkIEphdmFTY3JpcHQgbWV0aG9kcyBhbmQgYnJvd3NlciBBUElzLlwiO3AuZGVzdHJveSgpLGw9bih0LGF8fHt9KSxkPWwuaGVhZGVyP2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IobC5oZWFkZXIpOm51bGwsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsbSwhMSksbC51cGRhdGVVUkwmJmwucG9wc3RhdGUmJmUuYWRkRXZlbnRMaXN0ZW5lcihcInBvcHN0YXRlXCIsaCwhMSl9KCkscH19KHIpfS5hcHBseSh0LFtdKSx2b2lkIDA9PT1vfHwoZS5leHBvcnRzPW8pfSwyNTM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO3ZhciBvPXRoaXMmJnRoaXMuX19jcmVhdGVCaW5kaW5nfHwoT2JqZWN0LmNyZWF0ZT9mdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxvLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0W25dfX0pfTpmdW5jdGlvbihlLHQsbixvKXt2b2lkIDA9PT1vJiYobz1uKSxlW29dPXRbbl19KSxyPXRoaXMmJnRoaXMuX19leHBvcnRTdGFyfHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiBlKVwiZGVmYXVsdFwiPT09bnx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbil8fG8odCxlLG4pfTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSxyKG4oNzIwKSx0KSxyKG4oNjQ2KSx0KSxyKG4oODcpLHQpLHIobig2NDEpLHQpLHIobig5MSksdCkscihuKDE4MyksdCkscihuKDM3NiksdCkscihuKDQ1KSx0KSxyKG4oODQwKSx0KSxyKG4oNTg2KSx0KSxyKG4oMjE5KSx0KSxyKG4oNTEwKSx0KSxyKG4oMzMzKSx0KSxyKG4oMjMpLHQpLHIobigzNDgpLHQpLHIobigxOTcpLHQpfSw4NzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksaT1yWzBdLHU9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXt1KGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHMoaT4wP2ktMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLGk8dC5sZW5ndGgtMT9zKGkrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDppfX19LDMzMzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSxpPW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7aShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDIzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUVsZW1lbnRTaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VFbGVtZW50U2l6ZT1mdW5jdGlvbigpe3ZhciBlLHQsbj0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuW24se3dpZHRoOm51bGw9PT0oZT1udWxsPT1uP3ZvaWQgMDpuLmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmNsaWVudFdpZHRoLGhlaWdodDpudWxsPT09KHQ9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09dD92b2lkIDA6dC5jbGllbnRIZWlnaHR9XX0sdC5kZWZhdWx0PXQudXNlRWxlbWVudFNpemV9LDY0MTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJbnRlcnNlY3Rpb25PYnNlcnZlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby51c2VSZWYpKG51bGwpLG49KDAsby51c2VTdGF0ZSkoITEpLHI9blswXSxpPW5bMV0sdT1mdW5jdGlvbihlKXt2YXIgdD1lWzBdO2kodC5pc0ludGVyc2VjdGluZyl9O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtpZih3aW5kb3cmJndpbmRvdy5JbnRlcnNlY3Rpb25PYnNlcnZlcil7dmFyIG49bmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHUsZSksbz10LmN1cnJlbnQ7cmV0dXJuIHQuY3VycmVudCYmbi5vYnNlcnZlKHQuY3VycmVudCksZnVuY3Rpb24oKXtvJiZuLnVub2JzZXJ2ZShvKX19aSghMSl9KSxbdCxlXSkse2NvbnRhaW5lclJlZjp0LGlzVmlzaWJsZTpyfX0sdC5kZWZhdWx0PXQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXJ9LDkxOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzQnJlYWtwb2ludD12b2lkIDA7dmFyIG89bigxNTYpLHI9bigyNTMpLGk9e3hzOjEsbW9iaWxlU21hbGw6MzIwLG1vYmlsZTozNzUsdGFibGV0Ojc2OCx0YWJsZXRMYXJnZTo5MjAsZGVza3RvcFNtYWxsOjEwMjQsZGVza3RvcDoxMjYwLGRlc2t0b3BMYXJnZToxNDQwfTt0LnVzZUlzQnJlYWtwb2ludD1mdW5jdGlvbihlKXt2YXIgdD1cInN0cmluZ1wiPT10eXBlb2YgZT9pW2VdOmUsbj0oMCxvLnVzZVN0YXRlKShudWxsKSx1PW5bMF0scz1uWzFdLGM9KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7cyh3aW5kb3cuaW5uZXJXaWR0aCl9KSxbXSk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2MoKX0pLFtdKSwoMCxyLnVzZU9uUmVzaXplKShjKSx1Pj10fSx0LmRlZmF1bHQ9dC51c2VJc0JyZWFrcG9pbnR9LDQ1OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbz1uKDE1Nikscj17XCJjcmF6eS1lZ2dcIjpcImNyYXp5ZWdnLmNvbVwiLHlvdXR1YmU6XCJ5b3V0dWJlLmNvbVwifSxpPXtQcml2YWN5TWFuYWdlckFQSTp7YWN0aW9uOlwiZ2V0Q29uc2VudERlY2lzaW9uXCIsdGltZXN0YW1wOihuZXcgRGF0ZSkuZ2V0VGltZSgpLHNlbGY6XCJoc2wuZmlcIn19O3QuZGVmYXVsdD1mdW5jdGlvbihlKXt2YXIgdD0oMCxvLnVzZVN0YXRlKSghMSksbj10WzBdLHU9dFsxXSxzPWZ1bmN0aW9uKCl7dmFyIHQsbj1udWxsPT09KHQ9d2luZG93LnRydXN0ZSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY21hO2lmKG4pe3ZhciBvPW4uY2FsbEFwaShcImdldENvbnNlbnRcIixcImhzbC5maVwiLHJbZV0sXCJoc2wuZmlcIik7dShcImFwcHJvdmVkXCI9PT0obnVsbD09bz92b2lkIDA6by5jb25zZW50KSl9ZWxzZSBjb25zb2xlLmVycm9yKFwiVHJ1c3RBcmMgYXBpIG5vdCBmb3VuZCwgcmV0dXJuaW5nIGlzQ29va2llRW5hYmxlZCBhcyBmYWxzZVwiKX0sYz1mdW5jdGlvbihlKXtpZihcInN0cmluZ1wiPT10eXBlb2YobnVsbD09ZT92b2lkIDA6ZS5vcmlnaW4pJiZlLm9yaWdpbi5pbmNsdWRlcyhcInRydXN0YXJjXCIpJiZcInN0cmluZ1wiPT10eXBlb2YobnVsbD09ZT92b2lkIDA6ZS5kYXRhKSl0cnl7dmFyIHQ9SlNPTi5wYXJzZShudWxsPT1lP3ZvaWQgMDplLmRhdGEpO1wic3VibWl0X3ByZWZlcmVuY2VzXCI9PT0obnVsbD09dD92b2lkIDA6dC5tZXNzYWdlKSYmcygpfWNhdGNoKGUpe3JldHVybn19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKCl9KSxbZV0pLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzZXRUaW1lb3V0KHMsMCksc2V0VGltZW91dChzLDEwMCksc2V0VGltZW91dChzLDFlMyl9KSxbXSksKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiB3aW5kb3cudG9wLnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KGkpLFwiKlwiKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixjLCExKSxmdW5jdGlvbigpe3JldHVybiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixjKX19KSxbXSksbn19LDM3NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0xvYWRpbmdBZnRlckVycm9yPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc0xvYWRpbmdBZnRlckVycm9yPWZ1bmN0aW9uKGUsdCl7dmFyIG49KDAsby51c2VTdGF0ZSkodCkscj1uWzBdLGk9blsxXTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7ZXx8aSh0KX0pLFtlLHRdKSxlJiZyfX0sMzQ4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTW9iaWxlPXZvaWQgMDt2YXIgbz1uKDkxKTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDE4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNTg2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSwxOTc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSw1MTA6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDcyMDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPdXRzaWRlUmVhY3Rlcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT3V0c2lkZVJlYWN0ZXI9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKG4pe2UuY3VycmVudCYmIWUuY3VycmVudC5jb250YWlucyhuLnRhcmdldCkmJnQoKX0oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKSxmdW5jdGlvbigpe2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIixuKX19KSl9fSwyMTk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pO3ZhciBvPW4oMTU2KTt0LmRlZmF1bHQ9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19fSw2NDY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sODQwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLGk9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsdT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IGkuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiB1fSx1cGRhdGVVUkw6ITF9KX0pLFt1LG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgaT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKGkuZXhwb3J0cyxpLGkuZXhwb3J0cyxvKSxpLmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oMjUzKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvZmknO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL3N2JztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9kZSc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vaGVscGVycy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IE1vYmlsZVNlYXJjaCBmcm9tICcuL2hlbHBlcnMvTW9iaWxlU2VhcmNoJztcbmltcG9ydCB3aXRoU2Nyb2xsTG9jayBmcm9tICcuL2hlbHBlcnMvd2l0aFNjcm9sbExvY2snO1xuXG5tb21lbnQubG9jYWxlKCdlbicpO1xuXG5pMThuZXh0LmluaXQoe1xuICBmYWxsYmFja0xuZzogJ2ZpJyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICBpbnRlcnBvbGF0aW9uOiB7XG4gICAgZXNjYXBlVmFsdWU6IGZhbHNlLCAvLyBub3QgbmVlZGVkIGZvciByZWFjdCBhcyBpdCBlc2NhcGVzIGJ5IGRlZmF1bHRcbiAgfSxcbn0pO1xuXG5jb25zdCBMb2FkaW5nID0gcHJvcHMgPT4gKFxuICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzcGlubmVyLWxvYWRlciddfT5cbiAgICB7KHByb3BzICYmIHByb3BzLmNoaWxkcmVuKSB8fCAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfT57aTE4bmV4dC50KCdsb2FkaW5nJyl9PC9zcGFuPlxuICAgICl9XG4gIDwvZGl2PlxuKTtcblxuTG9hZGluZy5wcm9wVHlwZXMgPSB7XG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbn07XG5cbmNvbnN0IGdldFBsYXRmb3JtID0gYWRkZW5kdW0gPT4ge1xuICBpZiAoIWFkZGVuZHVtIHx8ICFhZGRlbmR1bS5HVEZTLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB7IG1vZGVzLCBwbGF0Zm9ybSB9ID0gYWRkZW5kdW0uR1RGUztcbiAgY29uc3QgdHlwZSA9XG4gICAgbW9kZXMgJiYgbW9kZXNbMF0gPT09ICdSQUlMJyA/IGkxOG5leHQudCgndHJhY2snKSA6IGkxOG5leHQudCgncGxhdGZvcm0nKTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5mdW5jdGlvbiBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKSB7XG4gIGlmIChpdGVtLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tbWFwJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCd1c2Utb3duLXBvc2l0aW9uJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycpXTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgIGxldCBbbmFtZSwgbGFiZWxdID0gZ2V0TmFtZUxhYmVsKGl0ZW0ucHJvcGVydGllcywgdHJ1ZSk7XG4gICAgbGV0IHN1Z2dlc3Rpb25UeXBlO1xuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlcmVudGFsJykgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnYmlrZXJlbnRhbHN0YXRpb24nKTtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmxhYmVsSWQ7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHN0b3BDb2RlXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnYmlrZXBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnYmlrZXBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdjYXJwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5tb2RlKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChcbiAgICAgICAgaXRlbS5wcm9wZXJ0aWVzLm1vZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXllciA9IGl0ZW0ucHJvcGVydGllcy5sYXllclxuICAgICAgICAucmVwbGFjZSgncm91dGUtJywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyk7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChsYXllcik7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3VnZ2VzdGlvblR5cGUsXG4gICAgICAgIGdldFN0b3BOYW1lKG5hbWUsIHN0b3BDb2RlKSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHN0b3BDb2RlLFxuICAgICAgICBtb2RlLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdGF0aW9uJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb2RlIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBzdG9OYW1lID0gYWRkcmVzcyA/IGdldFN0b3BOYW1lKGFkZHJlc3Muc3BsaXQoJywnKVswXSwgY29kZSkgOiBuYW1lO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgc3RvTmFtZSwgbGFiZWwsIGNvZGUsIHVuZGVmaW5lZCwgcGxhdGZvcm1dO1xuICAgIH1cbiAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCBsYWJlbF07XG4gIH1cbiAgY29uc3QgeyBvcmlnaW4sIGRlc3RpbmF0aW9uIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gIGNvbnN0IHRhaWwxID0gb3JpZ2luLmxvY2FsaXR5ID8gYCwgJHtvcmlnaW4ubG9jYWxpdHl9IGZvb2JhcmAgOiAnJztcbiAgY29uc3QgdGFpbDIgPSBkZXN0aW5hdGlvbi5sb2NhbGl0eSA/IGAsICR7ZGVzdGluYXRpb24ubG9jYWxpdHl9YCA6ICcnO1xuICBjb25zdCBuYW1lMSA9IG9yaWdpbi5uYW1lO1xuICBjb25zdCBuYW1lMiA9IGRlc3RpbmF0aW9uLm5hbWU7XG4gIHJldHVybiBbXG4gICAgaTE4bmV4dC50KCdmdXR1cmUtcm91dGUnKSxcbiAgICBgJHtpMThuZXh0LnQoJ29yaWdpbicpfSAke25hbWUxfSR7dGFpbDF9ICR7aTE4bmV4dC50KFxuICAgICAgJ2Rlc3RpbmF0aW9uJyxcbiAgICApfSAke25hbWUyfSR7dGFpbDJ9YCxcbiAgICBpdGVtLnRyYW5zbGF0ZWRUZXh0LFxuICBdO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pIHtcbiAgY29uc3QgdGltZSA9IG1vbWVudC51bml4KGl0ZW0ucHJvcGVydGllcy50aW1lKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gaTE4bmV4dC50KCdhcnJpdmFsJylcbiAgICA6IGkxOG5leHQudCgnZGVwYXJ0dXJlJyk7XG4gIGlmICh0aW1lLmlzU2FtZShtb21lbnQoKSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9kYXktYXQnKX1gO1xuICB9IGVsc2UgaWYgKHRpbWUuaXNTYW1lKG1vbWVudCgpLmFkZCgxLCAnZGF5JyksICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHtpMThuZXh0LnQoJ3RvbW9ycm93LWF0Jyl9YDtcbiAgfSBlbHNlIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7dGltZS5mb3JtYXQoJ2RkIEQuTS4nKX1gO1xuICB9XG4gIHN0ciA9IGAke3N0cn0gJHttb21lbnQodGltZSkuZm9ybWF0KCdISDptbScpfWA7XG4gIHJldHVybiBzdHI7XG59XG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0QWxsQmlrZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYWxsIGJpa2UgcmVudGFsIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBvcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBSb3V0ZXMsIEJpa2VSZW50YWxTdGF0aW9ucywgRnV0dXJlUm91dGVzLCBNYXBQb3NpdGlvbiBhbmQgQ3VycmVudFBvc2l0aW9uLiBMZWF2ZSBlbXB0eSB0byBzZWFyY2ggYWxsIHRhcmdldHMuXG4gKiBjb25zdCBzb3VyY2VzID0gWydGYXZvdXJpdGUnLCAnSGlzdG9yeScsICdEYXRhc291cmNlJ10gLy8gRGVmaW5lcyB3aGVyZSB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBhcmU6IEZhdm91cml0ZSwgSGlzdG9yeSAocHJldmlvdXNseSBzZWFyY2hlZCBzZWFyY2hlcykgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIHJldHVybiAoXG4gKiAgPERUQXV0b3N1Z2dlc3RcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgaWNvbj1cIm9yaWdpblwiIC8vIE9wdGlvbmFsIFN0cmluZyBmb3IgaWNvbiB0aGF0IGlzIHNob3duIGxlZnQgb2Ygc2VhcmNoZmllbGQuIHVzZWQgd2l0aCBJY29uIGxpYnJhcnlcbiAqICAgIGlkPVwib3JpZ2luXCIgLy8gdXNlZCBmb3Igc3R5bGUgcHJvcHMgYW5kIGluZm8gZm9yIGNvbXBvbmVudC5cbiAqICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLy8gU3RyaW5nIHRoYXQgaXMgc2hvd25zIGluaXRhbGx5IGluIHNlYXJjaCBmaWVsZFxuICogICAgdmFsdWU9XCJcIiAvLyBlLmcuIHVzZXIgdHlwZWQgc3RyaW5nIHRoYXQgaXMgc2hvd24gaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICogICAgYXV0b0ZvY3VzPXtmYWxzZX0gLy8gZGVmaW5lcyB0aGF0IHNob3VsZCB0aGlzIGZpZWxkIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZCB3aGVuIHBhZ2UgaXMgbG9hZGVkLlxuICogICAgbGFuZz17bGFuZ31cbiAqICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e2dldEF1dG9TdWdnZXN0SWNvbnN9XG4gKiAgICB0cmFuc3BvcnRNb2RlPXt0cmFuc3BvcnRNb2RlfSAvLyB0cmFuc3BvcnRtb2RlIHdpdGggd2hpY2ggd2UgZmlsdGVyIHRoZSByb3V0ZXMsIGUuZy4gcm91dGUtQlVTXG4gKiAgICBnZW9jb2RpbmdTaXplPXsxMH0gLy8gZGVmaW5lcyBob3cgbWFueSBzdG9wcyBhbmQgc3RhdGlvbnMgdG8gZmV0Y2ggZnJvbSBnZW9jb2RpbmcuIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgYW5kIHN0aWxsIGdldCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHN1Z2dlc3Rpb25zLlxuICogICAgZmlsdGVyUmVzdWx0cz17cmVzdWx0cyA9PiByZXR1cm4gcmVzdWx0c30gLy8gT3B0aW9uYWwgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciByb3V0ZXMgYW5kIHN0b3BzXG4gKiAgICBoYW5kZWxWaWFQb2ludHM9eygpID0+IHJldHVybiBudWxsIH0gLy8gT3B0aW9uYWwgVmlhIHBvaW50IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBmb2N1c0NoYW5nZT17KCkgPT4gcmV0dXJuIG51bGx9IC8vIFdoZW4gc3VnZ2VzdGlvbiBpcyBzZWxlY3RlZCwgaGFuZGxlIGNoYW5naW5nIGZvY3VzLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzdG9yZVJlZj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIEZ1bmN0aW9uYWxpdHkgdG8gc3RvcmUgcmVmcy4gQ3VycmVubHR5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gKiAgICB0YXJnZXRzPXt0YXJnZXRzfVxuICogICAgaXNNb2JpbGUgIC8vIE9wdGlvbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4gV2hldGhlciB0byB1c2UgbW9iaWxlIHNlYXJjaC5cbiAqICAgIG1vYmlsZUxhYmVsPVwiQ3VzdG9tIGxhYmVsXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBsYWJlbCB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBpbnB1dENsYXNzTmFtZT1cIlwiIC8vIE9wdGlvbmFsLiBDdXN0b20gY2xhc3NuYW1lIGFwcGxpZWQgdG8gdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCBmb3IgcHJvdmlkaW5nIENTUyBzdHlsZXMuXG4gKiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI9IC8vIE9wdGlvbmFsLiBDdXN0b24gdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZC5cbiAqL1xuY2xhc3MgRFRBdXRvc3VnZ2VzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0aW1lWm9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdW5sb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZlBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBtb2RlSWNvbkNvbG9yczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGljb246IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogJycsXG4gICAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICAgIGxhbmc6ICdmaScsXG4gICAgc291cmNlczogW10sXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6ICcjMDA3NGJlJyxcbiAgICB0aW1lWm9uZTogJ0V1cm9wZS9IZWxzaW5raScsXG4gICAgcGF0aE9wdHM6IHtcbiAgICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgICBzdG9wc1ByZWZpeDogJ3B5c2FraXQnLFxuICAgIH0sXG4gICAgbW9iaWxlTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBpbnB1dENsYXNzTmFtZTogJycsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gICAgbW9kZUljb25Db2xvcnM6IHtcbiAgICAgICdtb2RlLWJ1cyc6ICcjMDA3YWM5JyxcbiAgICAgICdtb2RlLXJhaWwnOiAnIzhjNDc5OScsXG4gICAgICAnbW9kZS10cmFtJzogJyMwMDgxNTEnLFxuICAgICAgJ21vZGUtbWV0cm8nOiAnI2VkOGMwMCcsXG4gICAgICAnbW9kZS1mZXJyeSc6ICcjMDA3QTk3JyxcbiAgICAgICdtb2RlLWNpdHliaWtlJzogJyNmMmI2MmQnLFxuICAgICAgJ21vZGUtZnVuaWN1bGFyJzogJyNmZjAwZmYnLFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIG1vZGVTZXQ6IHVuZGVmaW5lZCxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgICByZWZQb2ludDoge30sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgbW9tZW50LnR6LnNldERlZmF1bHQocHJvcHMudGltZVpvbmUpO1xuICAgIG1vbWVudC5sb2NhbGUocHJvcHMubGFuZyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICBzb3VyY2VzOiBwcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHR5cGluZ1RpbWVyOiBudWxsLFxuICAgICAgdHlwaW5nOiBmYWxzZSxcbiAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICBzdWdnZXN0aW9uSW5kZXg6IDAsXG4gICAgICBjbGVhbkV4ZWN1dGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFk6IDAsXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gobGFuZyA9PiB7XG4gICAgICBpMThuZXh0LmFkZFJlc291cmNlQnVuZGxlKGxhbmcsICd0cmFuc2xhdGlvbicsIHRyYW5zbGF0aW9uc1tsYW5nXSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBEVC00MDc0OiBXaGVuIGEgdXNlcidzIGxvY2F0aW9uIGlzIHVwZGF0ZWQgRFRBdXRvc3VnZ2VzdCB3b3VsZCByZS1yZW5kZXIgY2F1c2luZyBzdWdnZXN0aW9uIGxpc3QgdG8gcmVzZXQuXG4gIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGl0LlxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICByZXR1cm4gIWlzRXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fCAhaXNFcXVhbChuZXh0UHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlID0gKCkgPT4ge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IG5leHRQcm9wcyA9PiB7XG4gICAgLy8gd2FpdCB1bnRpbCBhZGRyZXNzIGlzIHNldCBvciBnZW9sb2NhdGlvbmluZyBmYWlsc1xuICAgIGlmIChuZXh0UHJvcHMudmFsdWUgIT09IHRoaXMuc3RhdGUudmFsdWUgJiYgIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBuZXh0UHJvcHMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgb25DaGFuZ2UgPSAoZXZlbnQsIHsgbmV3VmFsdWUsIG1ldGhvZCB9KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICB2YWx1ZTogdGhpcy5mSW5wdXQgfHwgbmV3VmFsdWUgfHwgJycsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBSZW1vdmUgZmlsbGVkIGlucHV0IHZhbHVlIHNvIGl0IHdvbnQgYmUgcmV1c2VkIHVubmVjZXNzYXJ5XG4gICAgdGhpcy5mSW5wdXQgPSBudWxsO1xuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBuZXdTdGF0ZS5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZSB8fCAnJyB9KSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgIT09ICdlbnRlcicgfHwgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gdGVzdCBhYm92ZSBkcm9wcyB1bm5lY2Vzc2FyeSB1cGRhdGVcbiAgICAgIC8vIHdoZW4gdXNlciBoaXRzIGVudGVyIGJ1dCBzZWFyY2ggaXMgdW5maW5pc2hlZFxuICAgICAgaWYgKHRoaXMuc3RhdGUudHlwaW5nVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUudHlwaW5nVGltZXIpO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIC8vIGFmdGVyIHRpbWVvdXQgcnVucywgYXJpYSBhbGVydCB3aWxsIGFubm91bmNlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHR5cGluZzogZmFsc2UgfSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmdUaW1lciA9IHRpbWVyO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIG9uU2VsZWN0ZWQgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiBbJ0Zhdm91cml0ZScsICdCYWNrJ10sXG4gICAgICAgICAgICBvd25QbGFjZXM6IHRydWUsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snIHx8XG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiByZWYuc3VnZ2VzdGlvbkluZGV4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IHRydWU7IC8vIHNlbGVjdGlvbiBkb25lLCBkbyBub3QgbGV0IHVwY29taW5nIGtleWJvYXJkIGV2ZW50cyBjb25mdXNlIHRoZSBmbG93XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHJlZi5zdWdnZXN0aW9uVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKHJlZi5zdWdnZXN0aW9uLCByZWYuc3VnZ2VzdGlvbkluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChyZWYuc3VnZ2VzdGlvbiwgdGhpcy5wcm9wcy5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICBwcmV2U3RhdGUgPT4gKHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBwcmV2U3RhdGUudmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLCAvLyBzZWFyY2ggbWF5IGZpbmlzaCBkdXJpbmcgc3RhdGUgY2hhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgfSk7XG4gIH07XG5cbiAgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gICAgaWYgKFxuICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xuICB9O1xuXG4gIGNoZWNrUGVuZGluZ1NlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbGlkXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIGFjY2VwdCBhZnRlciBhbGwgb25nb2luZyBzZWFyY2hlcyBoYXZlIGZpbmlzaGVkXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gJiYgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gZmluaXNoIHRoZSBzZWxlY3Rpb24gYnkgcGlja2luZyBmaXJzdCA9IGJlc3QgbWF0Y2ggb3Igd2l0aCAnRnV0dXJlUm91dGUnIGJ5IHN1Z2dlc3Rpb25JbmRleFxuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1t0aGlzLnN0YXRlLnN1Z2dlc3Rpb25JbmRleF0sXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgnY2xlYXItYnV0dG9uLWxhYmVsJyl9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGZldGNoRnVuY3Rpb24gPSAoeyB2YWx1ZSwgY2xlYW5FeGVjdXRlZCB9KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7IHZhbGlkOiBmYWxzZSwgY2xlYW5FeGVjdXRlZDogIWNsZWFuRXhlY3V0ZWQgPyBmYWxzZSA6IGNsZWFuRXhlY3V0ZWQgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgICAgIC8vIGRvIG5vdCBsZXQgY29tcG9uZW50IGNhc3QgdW5uZWNlc3NhcnkgcmVxdWVzdHNcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9XG4gICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcbiAgICAgICAgbGV0IHRhcmdldHM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm93blBsYWNlcykge1xuICAgICAgICAgIHRhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ1N0b3BzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdCaWtlUmVudGFsU3RhdGlvbnMnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdCaWtlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSkge1xuICAgICAgICAgIHRhcmdldHMgPSBbLi4udGhpcy5wcm9wcy50YXJnZXRzXTtcbiAgICAgICAgICAvLyBpbiBkZXNrdG9wLCBmYXZvcml0ZXMgYXJlIGFjY2Vzc2VkIHZpYSBzdWIgc2VhcmNoXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGUgJiZcbiAgICAgICAgICAgIChpc0VtcHR5KHRoaXMucHJvcHMuc291cmNlcykgfHxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgIGxvY2F0aW9uIGZhdm91cml0ZXMgaW4gZGVza3RvcCBzZWFyY2ggKGNvbGxlY3Rpb24gaXRlbSByZXBsYWNlcyBpdCBpbiB0YXJnZXQgYXJyYXkpXG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPVxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcyAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcy5maWx0ZXIoXG4gICAgICAgICAgICBzID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgICAgIHMgPT09ICdGYXZvdXJpdGUnICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuc3RhdGUub3duUGxhY2VzICYmXG4gICAgICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQsXG4gICAgICAgICAgdGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMuZ2VvY29kaW5nU2l6ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDogdmFsdWUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFhYWCB0cmFuc2xhdGVzIGN1cnJlbnQgbG9jYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPT5cbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMudGltZSA+IG1vbWVudCgpLnVuaXgoKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChzdWdnZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkID0geyAuLi5zdWdnZXN0aW9uIH07XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLnByb3BlcnRpZXMubGFiZWxJZCA9IGkxOG5leHQudChcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgfHxcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5wcm9wcy5wYXRoT3B0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLnJlZlBvaW50LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGNsZWFySW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJywgY2xlYW5FeGVjdXRlZDogdHJ1ZSB9KSxcbiAgICApO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2xlYXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGVhcih0aGlzLnByb3BzLmlkKTtcbiAgICB9XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIGlucHV0Q2xpY2tlZCA9IGlucHV0VmFsdWUgPT4ge1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucHJvcHMubG9jaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIC8vIHJlc2V0IGF0IHN0YXJ0LCBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkIHNvbWV0aGluZ1xuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBEVC0zMjYzOiBhZGRlZCBzdGF0ZUtleURvd25cbiAgICAgIGNvbnN0IHN0YXRlS2V5RG93biA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIERULTMyNjM6IGFkZGVkIGlmLWVsc2Ugc3RhdGVtZW50XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgfHwgIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlS2V5RG93biwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIXRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVuZGVyTW9iaWxlU2VhcmNoOiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBzdG9yZUlucHV0UmVmZXJlbmNlID0gYXV0b3N1Z2dlc3QgPT4ge1xuICAgIGlmIChhdXRvc3VnZ2VzdCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5pbnB1dCA9IGF1dG9zdWdnZXN0LmlucHV0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuc3RvcmVSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zdG9yZVJlZihhdXRvc3VnZ2VzdC5pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIEZpbGwgaW5wdXQgd2hlbiB1c2VyIGNsaWNrcyBmaWxsIGlucHV0IGJ1dHRvbiBpbiBzdHJlZXQgc3VnZ2VzdGlvbiBpdGVtXG4gIGZpbGxJbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICB0aGlzLmZJbnB1dCA9IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lLFxuICAgICAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uOiBuZXdWYWx1ZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lIH0pO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbSA9XG4gICAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSksXG4gICAgICAgICAgfVxuICAgICAgICA6IGl0ZW07XG4gICAgY29uc3QgY29udGVudCA9IGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pO1xuICAgIHJldHVybiAoXG4gICAgICA8U3VnZ2VzdGlvbkl0ZW1cbiAgICAgICAgaXRlbT17bmV3SXRlbX1cbiAgICAgICAgY29udGVudD17Y29udGVudH1cbiAgICAgICAgbG9hZGluZz17IXRoaXMuc3RhdGUudmFsaWR9XG4gICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICBhcmlhRmF2b3VyaXRlU3RyaW5nPXtpMThuZXh0LnQoJ2Zhdm91cml0ZScpfVxuICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICBmaWxsSW5wdXQ9e3RoaXMuZmlsbElucHV0fVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9iaWxlU2VhcmNoID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMudW5sb2NrKCk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdGhpcy5zdGF0ZS5zY3JvbGxZKTtcbiAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBrZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleTtcbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgaWYgKGtleUNvZGUgPT09ICdFbnRlcicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBlbmRpbmdTZWxlY3Rpb246IHRydWUgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXRDbGlja2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGtleUNvZGUgPT09ICdFbnRlcicgfHwga2V5Q29kZSA9PT0gJ0Fycm93RG93bicpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbHVlID09PSAnJ1xuICAgICkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICB9O1xuICAgICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnVGFiJykge1xuICAgICAgdGhpcy5vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgPSAoKSA9PiB7XG4gICAgbGV0IGxhYmVsID0gW107XG4gICAgY29uc3QgZmlyc3RTdWdnZXN0aW9uID0gdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXTtcbiAgICBpZiAoZmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgICBpZiAoZmlyc3RTdWdnZXN0aW9uLnR5cGUgJiYgZmlyc3RTdWdnZXN0aW9uLnR5cGUuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICAgIGxhYmVsLnB1c2goaTE4bmV4dC50KCdmYXZvdXJpdGUnKSk7XG4gICAgICB9XG4gICAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudCh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdKSk7XG4gICAgfVxuICAgIHJldHVybiBbLi4ubmV3IFNldChsYWJlbCldLmpvaW4oJyAtICcpO1xuICB9O1xuXG4gIGNsZWFyT2xkU2VhcmNoZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY29udGV4dCxcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMsXG4gICAgICBjbGVhckZ1dHVyZVJvdXRlcyxcbiAgICB9ID0gdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQgPSAoKSA9PlxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbi1zdG9wLW5lYXIteW91JztcblxuICBjbGVhckxvY2F0aW9uVGV4dCA9ICgpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBbXG4gICAgICAnVmFsaXR0dSBzaWphaW50aScsXG4gICAgICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICAgICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICAnU2VsZWN0ZWQgbG9jYXRpb24nLFxuICAgICAgJ1ZhbGQgcG9zaXRpb24nLFxuICAgICAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdNaW4gcG9zaXRpb24nLFxuICAgICAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ1lvdXIgY3VycmVudCBsb2NhdGlvbicsXG4gICAgXTtcbiAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHRoaXMuc3RhdGUudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB9XG4gIH07XG5cbiAgb25Gb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG5cbiAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHsgc2Nyb2xsWSB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoLFxuICAgICAgY2xlYW5FeGVjdXRlZCxcbiAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgID8gdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5wbGFjZWhvbGRlciksXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtcbiAgICAgICAgICB0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJydcbiAgICAgICAgfSAke3N0eWxlc1t0aGlzLnByb3BzLmlkXSB8fCAnJ30gJHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgfSAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9YCxcbiAgICAgICksXG4gICAgICBvbktleURvd246IHRoaXMua2V5RG93biwgLy8gRFQtMzI2M1xuICAgICAgcmVxdWlyZWQ6IHRoaXMucHJvcHMucmVxdWlyZWQsXG4gICAgfTtcbiAgICBjb25zdCBhcmlhQmFySWQgPSB0aGlzLnByb3BzLmlkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBsZXQgU2VhcmNoQmFySWQgPSB0aGlzLnByb3BzLmFyaWFMYWJlbCB8fCBpMThuZXh0LnQoYXJpYUJhcklkKTtcbiAgICBTZWFyY2hCYXJJZCA9IFNlYXJjaEJhcklkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gdGhpcy5wcm9wcy5yZXF1aXJlZFxuICAgICAgPyBgJHtpMThuZXh0LnQoJ3JlcXVpcmVkJyl9LmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IHRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgID8gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW9iaWxlJylcbiAgICAgIDogaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtZGVza3RvcCcpO1xuICAgIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgICAgY291bnQ6IHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFyaWFDdXJyZW50U3VnZ2VzdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkgfHwgdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gaTE4bmV4dC50KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICB7IXRoaXMuc3RhdGUudHlwaW5nICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmVkaXRpbmcgJiZcbiAgICAgICAgICAgIGAke2FyaWFTdWdnZXN0aW9uTGVufSAke2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMucHJvcHMuaXNNb2JpbGUgJiYgKFxuICAgICAgICAgIDxNb2JpbGVTZWFyY2hcbiAgICAgICAgICAgIHNlYXJjaE9wZW49e3JlbmRlck1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e3RoaXMuY2xlYXJPbGRTZWFyY2hlc31cbiAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgY2xlYXJJbnB1dD17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17W1xuICAgICAgICAgICAgICAuLi5zdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjbGVhci1zZWFyY2gtaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWxJZDogaTE4bmV4dC50KCdjbGVhci1zZWFyY2gtaGlzdG9yeScpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQoKVxuICAgICAgICAgICAgICAgID8gaTE4bmV4dC50KCdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJylcbiAgICAgICAgICAgICAgICA6IGlucHV0UHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZmV0Y2hGdW5jdGlvbj17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17dGhpcy5nZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICBjbG9zZUhhbmRsZT17dGhpcy5jbG9zZU1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKCkpfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICBkaWFsb2dIZWFkZXJUZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJyl9XG4gICAgICAgICAgICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdkZWxldGUnKX1cbiAgICAgICAgICAgIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2FuY2VsJyl9XG4gICAgICAgICAgICBjbGVhcklucHV0QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgICAgICAgIGZvY3VzSW5wdXQ9e2NsZWFuRXhlY3V0ZWR9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshcmVuZGVyTW9iaWxlU2VhcmNoICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAnLS1jb2xvcic6IGAke3RoaXMucHJvcHMuY29sb3J9YCxcbiAgICAgICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHt0aGlzLnByb3BzLmhvdmVyQ29sb3J9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMuaWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1tgYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbmBdLFxuICAgICAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYCxcbiAgICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz17YCR7dGhpcy5wcm9wcy5pY29ufWB9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXt0aGlzLmdldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17dGhpcy5yZW5kZXJJdGVtfVxuICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb249eyF0aGlzLnN0YXRlLm93blBsYWNlc31cbiAgICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gaHRtbEZvcj17dGhpcy5wcm9wcy5pZH0+XG4gICAgICAgICAgICAgICAgICAgIHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaW5wdXRDbGlja2VkfVxuICAgICAgICAgICAgICAgICAgICBvbktleURvd249e3RoaXMua2V5RG93bn1cbiAgICAgICAgICAgICAgICAgICAgey4uLnB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudmFsdWUgJiYgdGhpcy5jbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17dGhpcy5vblNlbGVjdGVkfVxuICAgICAgICAgICAgICByZWY9e3RoaXMuc3RvcmVJbnB1dFJlZmVyZW5jZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrID0gd2l0aFNjcm9sbExvY2soRFRBdXRvc3VnZ2VzdCk7XG5cbmV4cG9ydCBkZWZhdWx0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jaztcbiIsImltcG9ydCB7IGdldE5hbWVMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbi8qKlxuICogUmV0dXJucyBsYWJlbCBmb3IgcHJvcGVydGllc1xuICpcbiAqIEBuYW1lIGdldExhYmVsXG4gKiBAcGFyYW0geyp9IHByb3BlcnRpZXMgb2JqZWN0IHRoYXQgY29udGFpbnMgXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHByb3BlcnRpZXM6IHtcbiAgICBcImlkXCI6IFwiR1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcImdpZFwiOiBcImd0ZnNtYXRrYTpzdGF0aW9uOkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJsYXllclwiOiBcInN0YXRpb25cIixcbiAgICBcInNvdXJjZVwiOiBcImd0ZnNtYXRrYVwiLFxuICAgIFwic291cmNlX2lkXCI6IFwiR1RGUzpNQVRLQTozMTg5MTVcIixcbiAgICBcIm5hbWVcIjogXCJSYXV0YXRpZW50b3JpXCIsXG4gICAgXCJwb3N0YWxjb2RlXCI6IFwiMDAxMDBcIixcbiAgICBcInBvc3RhbGNvZGVfZ2lkXCI6IFwid2hvc29uZmlyc3Q6cG9zdGFsY29kZTo0MjE0Nzk1NjlcIixcbiAgICBcImNvbmZpZGVuY2VcIjogMSxcbiAgICBcImFjY3VyYWN5XCI6IFwiY2VudHJvaWRcIixcbiAgICBcImNvdW50cnlcIjogXCJTdW9taVwiLFxuICAgIFwiY291bnRyeV9naWRcIjogXCJ3aG9zb25maXJzdDpjb3VudHJ5OjBcIixcbiAgICBcImNvdW50cnlfYVwiOiBcIkZJTlwiLFxuICAgIFwicmVnaW9uXCI6IFwiVXVzaW1hYVwiLFxuICAgIFwicmVnaW9uX2dpZFwiOiBcIndob3NvbmZpcnN0OnJlZ2lvbjo4NTY4MzA2N1wiLFxuICAgIFwibG9jYWxhZG1pblwiOiBcIkhlbHNpbmtpXCIsXG4gICAgXCJsb2NhbGFkbWluX2dpZFwiOiBcIndob3NvbmZpcnN0OmxvY2FsYWRtaW46OTA3MTk5NzE1XCIsXG4gICAgXCJsb2NhbGl0eVwiOiBcIkhlbHNpbmtpXCIsXG4gICAgXCJsb2NhbGl0eV9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGl0eToxMDE3NDg0MTdcIixcbiAgICBcIm5laWdoYm91cmhvb2RcIjogXCJLbHV1dmlcIixcbiAgICBcIm5laWdoYm91cmhvb2RfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bmVpZ2hib3VyaG9vZDo4NTg5ODg0N1wiLFxuICAgIFwibGFiZWxcIjogXCJSYXV0YXRpZW50b3JpLCBrb2lsbGluZW4sIEtsdXV2aSwgSGVsc2lua2lcIlxuICAgIH1cbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLmdldExhYmVsKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGFiZWwocHJvcGVydGllcykge1xuICBjb25zdCBwYXJ0cyA9IGdldE5hbWVMYWJlbChwcm9wZXJ0aWVzLCB0cnVlKTtcbiAgc3dpdGNoIChwcm9wZXJ0aWVzLmxheWVyKSB7XG4gICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgIGNhc2UgJ2JhY2snOlxuICAgICAgcmV0dXJuIHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICAgIGNhc2UgJ2Zhdm91cml0ZUJpa2VSZW50YWxTdGF0aW9uJzpcbiAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICByZXR1cm4gcGFydHNbMF07XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBwYXJ0cy5sZW5ndGggPiAxICYmIHBhcnRzWzFdICE9PSAnJ1xuICAgICAgICA/IHBhcnRzLmpvaW4oJywgJylcbiAgICAgICAgOiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgfVxufVxuIiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBob29rcyBmcm9tICdAaHNsLWZpL2hvb2tzJztcblxuY29uc3Qgd2l0aFNjcm9sbExvY2sgPSBDb21wb25lbnQgPT4ge1xuICByZXR1cm4gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHsgbG9jaywgdW5sb2NrIH0gPSBob29rcy51c2VTY3JvbGxMb2NrKCk7XG5cbiAgICByZXR1cm4gPENvbXBvbmVudCBsb2NrPXtsb2NrfSB1bmxvY2s9e3VubG9ja30gey4uLnByb3BzfSAvPjtcbiAgfTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHdpdGhTY3JvbGxMb2NrO1xuIl0sIm5hbWVzIjpbIl9leHRlbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwiYmluZCIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsInRoaXMiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibmFtZSIsImxvY2FsaXR5IiwibGF5ZXIiLCJsYWJlbElkIiwiZ3Rmc0lkIiwiZ2lkIiwiaW5jbHVkZXMiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwiTGF5ZXJUeXBlIiwiQWRkcmVzcyIsIkJhY2siLCJDdXJyZW50UG9zaXRpb24iLCJGYXZvdXJpdGVTdG9wIiwiRmF2b3VyaXRlU3RhdGlvbiIsIkZhdm91cml0ZVBsYWNlIiwiRmF2b3VyaXRlUm91dGUiLCJGdXR1cmVSb3V0ZSIsIlN0YXRpb24iLCJTZWxlY3RGcm9tTWFwIiwiU2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsIlN0b3AiLCJTdHJlZXQiLCJWZW51ZSIsIkJpa2VSZW50YWxTdGF0aW9uIiwiQ2FyUGFyayIsIkJpa2VQYXJrIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwiRmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb24iLCJpbmRleE9mIiwic29ydFNlYXJjaFJlc3VsdHMiLCJsaW5lUmVnZXhwIiwicmVzdWx0cyIsInRlcm0iLCJBcnJheSIsImlzQXJyYXkiLCJpc0xpbmVJZGVudGlmaWVyIiwidmFsdWUiLCJ0ZXN0Iiwibm9ybWFsaXplZFRlcm0iLCJpc0xpbmVTZWFyY2giLCJvcmRlcmVkUmVzdWx0cyIsIm9yZGVyQnkiLCJyZXN1bHQiLCJzaG9ydE5hbWUiLCJjb25maWRlbmNlIiwibWF0Y2giLCJyZXN1bHRQcm9wZXJ0aWVzIiwibWFwIiwiZmlsdGVyIiwibm9ybWFsaXplZFZhbHVlIiwicmVkdWNlIiwicHJldmlvdXMiLCJjdXJyZW50IiwidW5pcVdpdGgiLCJnZXRTdG9wTmFtZSIsInN0b3BDb2RlIiwibGFzdEluZGV4T2YiLCJzdWJzdHJpbmciLCJnZXRMb2NhbGl0eSIsInN1Z2dlc3Rpb24iLCJsb2NhbGFkbWluIiwiZ2V0U3RvcENvZGUiLCJpZCIsImNvZGUiLCJnZXROYW1lTGFiZWwiLCJtZW1vaXplIiwicGxhaW4iLCJzcGxpdCIsInJlcGxhY2UiLCJSZWdFeHAiLCJlc2NhcGVSZWdFeHAiLCJtb2RlIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiaXRlbSIsImNsb25lRGVlcCIsInVuaXFCeUxhYmVsIiwiZmVhdHVyZXMiLCJmZWF0MSIsImZlYXQyIiwiYm9vbCIsImlzRXF1YWwiLCJmaWx0ZXJNYXRjaGluZ1RvSW5wdXQiLCJsaXN0IiwiSW5wdXQiLCJmaWVsZHMiLCJpbnB1dCIsInRyaW0iLCJtdWx0aVdvcmQiLCJwYXJ0cyIsImZvckVhY2giLCJwTmFtZSIsImdldCIsInNwbGljZSIsImpvaW4iLCJjb25jYXQiLCJzZXJpYWxpemUiLCJvYmoiLCJwcmVmaXgiLCJrZXlzIiwicCIsImsiLCJ2IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYXhpb3MiLCJyZXF1aXJlIiwiZGVmYXVsdCIsImdldEpzb24iLCJ1cmwiLCJwYXJhbXMiLCJlbmNvZGVVUkkiLCJzZWFyY2giLCJ0aW1lb3V0IiwibWV0aG9kIiwiaGVhZGVycyIsIkFjY2VwdCIsInRoZW4iLCJyZXMiLCJkYXRhIiwiREVGQVVMVF9QRUxJQVNfVVJMIiwiZ2V0R2VvY29kaW5nUmVzdWx0cyIsInNlYXJjaFN0cmluZyIsInNlYXJjaFBhcmFtcyIsImxhbmciLCJmb2N1c1BvaW50Iiwic291cmNlcyIsInBlbGlhc1VybCIsIm1pbmltYWxSZWdleHAiLCJnZW9jb2RpbmdMYXllcnMiLCJ0ZXh0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJQRUxJQVNfVVJMIiwib3B0cyIsImxheWVycyIsInRvU3RyaW5nIiwiZ2V0U3RvcHNGcm9tR2VvY29kaW5nIiwic3RvcHMiLCJVUkxfUEVMSUFTX1BMQUNFIiwiZ2lkcyIsInN0b3BTdGF0aW9uTWFwIiwic3RvcCIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJzbGljZSIsImFkZGVuZHVtIiwibGFzdFVwZGF0ZWQiLCJmYXZvdXJpdGVJZCIsImZpbHRlck9sZFNlYXJjaGVzIiwib2xkU2VhcmNoZXMiLCJkcm9wTGF5ZXJzIiwibWF0Y2hpbmdPbGRTZWFyY2hlcyIsInRha2UiLCJuZXdJdGVtIiwidGltZXRhYmxlQ2xpY2tlZCIsImFycm93Q2xpY2tlZCIsInJvdXRlTGF5ZXJzIiwibG9jYXRpb25MYXllcnMiLCJwYXJraW5nTGF5ZXJzIiwiZGVib3VuY2VkU2VhcmNoIiwiZGVib3VuY2UiLCJ0YXJnZXRzIiwidHJhbnNwb3J0TW9kZSIsInNlYXJjaENvbnRleHQiLCJmaWx0ZXJSZXN1bHRzIiwiZ2VvY29kaW5nU2l6ZSIsImNhbGxiYWNrIiwicGF0aE9wdHMiLCJyZWZQb2ludCIsImdldFBvc2l0aW9ucyIsImdldEZhdm91cml0ZUxvY2F0aW9ucyIsImdldE9sZFNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlQmlrZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVCaWtlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiY29udGV4dCIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsImxvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJwb3NpdGlvbiIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsInN0YXR1cyIsInB1c2giLCJnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5Iiwic2VsZWN0UG9zaXRpb25Gb21NYXAiLCJpdGVtcyIsImZhdm91cml0ZUxvY2F0aW9ucyIsImZhdm91cml0ZVN0b3BzIiwiaGFzRmF2b3VyaXRlcyIsInNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJmYXZvdXJpdGVzIiwiZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zIiwiZmVlZGlzIiwiZ2Vvc291cmNlcyIsImxvY2F0aW9uSGlzdG9yeSIsInNpemUiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsImZpbHRlckZhdm91cml0ZVN0b3BzIiwiZGVkdXBlc3RvcHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZUJpa2VTdGF0aW9ucyIsImFsbCIsImZsYXR0ZW4iLCJjYXRjaCIsImVyciIsImVycm9yIiwibGVhZGluZyIsIm1vZHVsZSIsImhvb2tDYWxsYmFjayIsInNvbWUiLCJob29rcyIsInNldEhvb2tDYWxsYmFjayIsImlzT2JqZWN0IiwiaGFzT3duUHJvcCIsImEiLCJiIiwiaXNPYmplY3RFbXB0eSIsImdldE93blByb3BlcnR5TmFtZXMiLCJpc1VuZGVmaW5lZCIsImlzTnVtYmVyIiwiaXNEYXRlIiwiRGF0ZSIsImFyciIsImZuIiwiYXJyTGVuIiwiZXh0ZW5kIiwidmFsdWVPZiIsImNyZWF0ZVVUQyIsImZvcm1hdCIsImxvY2FsZSIsInN0cmljdCIsImNyZWF0ZUxvY2FsT3JVVEMiLCJ1dGMiLCJkZWZhdWx0UGFyc2luZ0ZsYWdzIiwiZW1wdHkiLCJ1bnVzZWRUb2tlbnMiLCJ1bnVzZWRJbnB1dCIsIm92ZXJmbG93IiwiY2hhcnNMZWZ0T3ZlciIsIm51bGxJbnB1dCIsImludmFsaWRFcmEiLCJpbnZhbGlkTW9udGgiLCJpbnZhbGlkRm9ybWF0IiwidXNlckludmFsaWRhdGVkIiwiaXNvIiwicGFyc2VkRGF0ZVBhcnRzIiwiZXJhIiwibWVyaWRpZW0iLCJyZmMyODIyIiwid2Vla2RheU1pc21hdGNoIiwiZ2V0UGFyc2luZ0ZsYWdzIiwibSIsIl9wZiIsImlzVmFsaWQiLCJfaXNWYWxpZCIsImZsYWdzIiwicGFyc2VkUGFydHMiLCJpc05vd1ZhbGlkIiwiaXNOYU4iLCJfZCIsImdldFRpbWUiLCJpbnZhbGlkV2Vla2RheSIsIl9zdHJpY3QiLCJiaWdIb3VyIiwiaXNGcm96ZW4iLCJjcmVhdGVJbnZhbGlkIiwiTmFOIiwiZnVuIiwidCIsImxlbiIsIm1vbWVudFByb3BlcnRpZXMiLCJ1cGRhdGVJblByb2dyZXNzIiwiY29weUNvbmZpZyIsInRvIiwiZnJvbSIsInByb3AiLCJ2YWwiLCJtb21lbnRQcm9wZXJ0aWVzTGVuIiwiX2lzQU1vbWVudE9iamVjdCIsIl9pIiwiX2YiLCJfbCIsIl90em0iLCJfaXNVVEMiLCJfb2Zmc2V0IiwiX2xvY2FsZSIsIk1vbWVudCIsImNvbmZpZyIsInVwZGF0ZU9mZnNldCIsImlzTW9tZW50Iiwid2FybiIsIm1zZyIsInN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyIsImNvbnNvbGUiLCJkZXByZWNhdGUiLCJmaXJzdFRpbWUiLCJkZXByZWNhdGlvbkhhbmRsZXIiLCJhcmciLCJhcmdzIiwiYXJnTGVuIiwiRXJyb3IiLCJzdGFjayIsImRlcHJlY2F0aW9ucyIsImRlcHJlY2F0ZVNpbXBsZSIsImlzRnVuY3Rpb24iLCJGdW5jdGlvbiIsInNldCIsIl9jb25maWciLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQiLCJfZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsUGFyc2UiLCJtZXJnZUNvbmZpZ3MiLCJwYXJlbnRDb25maWciLCJjaGlsZENvbmZpZyIsIkxvY2FsZSIsImRlZmF1bHRDYWxlbmRhciIsInNhbWVEYXkiLCJuZXh0RGF5IiwibmV4dFdlZWsiLCJsYXN0RGF5IiwibGFzdFdlZWsiLCJzYW1lRWxzZSIsImNhbGVuZGFyIiwibW9tIiwibm93Iiwib3V0cHV0IiwiX2NhbGVuZGFyIiwiemVyb0ZpbGwiLCJudW1iZXIiLCJ0YXJnZXRMZW5ndGgiLCJmb3JjZVNpZ24iLCJhYnNOdW1iZXIiLCJ6ZXJvc1RvRmlsbCIsInBvdyIsIm1heCIsInN1YnN0ciIsImZvcm1hdHRpbmdUb2tlbnMiLCJsb2NhbEZvcm1hdHRpbmdUb2tlbnMiLCJmb3JtYXRGdW5jdGlvbnMiLCJmb3JtYXRUb2tlbkZ1bmN0aW9ucyIsImFkZEZvcm1hdFRva2VuIiwidG9rZW4iLCJwYWRkZWQiLCJvcmRpbmFsIiwiZnVuYyIsImxvY2FsZURhdGEiLCJyZW1vdmVGb3JtYXR0aW5nVG9rZW5zIiwibWFrZUZvcm1hdEZ1bmN0aW9uIiwiYXJyYXkiLCJmb3JtYXRNb21lbnQiLCJleHBhbmRGb3JtYXQiLCJpbnZhbGlkRGF0ZSIsInJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyIsImxvbmdEYXRlRm9ybWF0IiwibGFzdEluZGV4IiwiZGVmYXVsdExvbmdEYXRlRm9ybWF0IiwiTFRTIiwiTFQiLCJMIiwiTEwiLCJMTEwiLCJMTExMIiwiX2xvbmdEYXRlRm9ybWF0IiwiZm9ybWF0VXBwZXIiLCJ0b1VwcGVyQ2FzZSIsInRvayIsImRlZmF1bHRJbnZhbGlkRGF0ZSIsIl9pbnZhbGlkRGF0ZSIsImRlZmF1bHRPcmRpbmFsIiwiZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJfb3JkaW5hbCIsImRlZmF1bHRSZWxhdGl2ZVRpbWUiLCJmdXR1cmUiLCJwYXN0IiwicyIsInNzIiwibW0iLCJoIiwiaGgiLCJkIiwiZGQiLCJ3Iiwid3ciLCJNIiwiTU0iLCJ5IiwieXkiLCJyZWxhdGl2ZVRpbWUiLCJ3aXRob3V0U3VmZml4Iiwic3RyaW5nIiwiaXNGdXR1cmUiLCJfcmVsYXRpdmVUaW1lIiwicGFzdEZ1dHVyZSIsImRpZmYiLCJhbGlhc2VzIiwiYWRkVW5pdEFsaWFzIiwidW5pdCIsInNob3J0aGFuZCIsImxvd2VyQ2FzZSIsIm5vcm1hbGl6ZVVuaXRzIiwidW5pdHMiLCJub3JtYWxpemVPYmplY3RVbml0cyIsImlucHV0T2JqZWN0Iiwibm9ybWFsaXplZFByb3AiLCJub3JtYWxpemVkSW5wdXQiLCJwcmlvcml0aWVzIiwiYWRkVW5pdFByaW9yaXR5IiwicHJpb3JpdHkiLCJnZXRQcmlvcml0aXplZFVuaXRzIiwidW5pdHNPYmoiLCJ1Iiwic29ydCIsImlzTGVhcFllYXIiLCJ5ZWFyIiwiYWJzRmxvb3IiLCJjZWlsIiwiZmxvb3IiLCJ0b0ludCIsImFyZ3VtZW50Rm9yQ29lcmNpb24iLCJjb2VyY2VkTnVtYmVyIiwiaXNGaW5pdGUiLCJtYWtlR2V0U2V0Iiwia2VlcFRpbWUiLCJzZXQkMSIsIm1vbnRoIiwiZGF0ZSIsImRheXNJbk1vbnRoIiwic3RyaW5nR2V0Iiwic3RyaW5nU2V0IiwicHJpb3JpdGl6ZWQiLCJwcmlvcml0aXplZExlbiIsInJlZ2V4ZXMiLCJtYXRjaDEiLCJtYXRjaDIiLCJtYXRjaDMiLCJtYXRjaDQiLCJtYXRjaDYiLCJtYXRjaDF0bzIiLCJtYXRjaDN0bzQiLCJtYXRjaDV0bzYiLCJtYXRjaDF0bzMiLCJtYXRjaDF0bzQiLCJtYXRjaDF0bzYiLCJtYXRjaFVuc2lnbmVkIiwibWF0Y2hTaWduZWQiLCJtYXRjaE9mZnNldCIsIm1hdGNoU2hvcnRPZmZzZXQiLCJtYXRjaFRpbWVzdGFtcCIsIm1hdGNoV29yZCIsImFkZFJlZ2V4VG9rZW4iLCJyZWdleCIsInN0cmljdFJlZ2V4IiwiaXNTdHJpY3QiLCJnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4iLCJ1bmVzY2FwZUZvcm1hdCIsInJlZ2V4RXNjYXBlIiwibWF0Y2hlZCIsInAzIiwicDQiLCJ0b2tlbnMiLCJhZGRQYXJzZVRva2VuIiwidG9rZW5MZW4iLCJhZGRXZWVrUGFyc2VUb2tlbiIsIl93IiwiYWRkVGltZVRvQXJyYXlGcm9tVG9rZW4iLCJfYSIsIllFQVIiLCJNT05USCIsIkRBVEUiLCJIT1VSIiwiTUlOVVRFIiwiU0VDT05EIiwiTUlMTElTRUNPTkQiLCJXRUVLIiwiV0VFS0RBWSIsIm1vZCIsIm4iLCJ4IiwibW9kTW9udGgiLCJvIiwibW9udGhzU2hvcnQiLCJtb250aHMiLCJtb250aHNTaG9ydFJlZ2V4IiwibW9udGhzUmVnZXgiLCJtb250aHNQYXJzZSIsImRlZmF1bHRMb2NhbGVNb250aHMiLCJkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQiLCJNT05USFNfSU5fRk9STUFUIiwiZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXgiLCJkZWZhdWx0TW9udGhzUmVnZXgiLCJsb2NhbGVNb250aHMiLCJfbW9udGhzIiwiaXNGb3JtYXQiLCJsb2NhbGVNb250aHNTaG9ydCIsIl9tb250aHNTaG9ydCIsImhhbmRsZVN0cmljdFBhcnNlIiwibW9udGhOYW1lIiwiaWkiLCJsbGMiLCJ0b0xvY2FsZUxvd2VyQ2FzZSIsIl9tb250aHNQYXJzZSIsIl9sb25nTW9udGhzUGFyc2UiLCJfc2hvcnRNb250aHNQYXJzZSIsImxvY2FsZU1vbnRoc1BhcnNlIiwiX21vbnRoc1BhcnNlRXhhY3QiLCJzZXRNb250aCIsImRheU9mTW9udGgiLCJtaW4iLCJnZXRTZXRNb250aCIsImdldERheXNJbk1vbnRoIiwiY29tcHV0ZU1vbnRoc1BhcnNlIiwiX21vbnRoc1Nob3J0U3RyaWN0UmVnZXgiLCJfbW9udGhzU2hvcnRSZWdleCIsIl9tb250aHNTdHJpY3RSZWdleCIsIl9tb250aHNSZWdleCIsImNtcExlblJldiIsInNob3J0UGllY2VzIiwibG9uZ1BpZWNlcyIsIm1peGVkUGllY2VzIiwiZGF5c0luWWVhciIsInBhcnNlVHdvRGlnaXRZZWFyIiwicGFyc2VJbnQiLCJnZXRTZXRZZWFyIiwiZ2V0SXNMZWFwWWVhciIsImNyZWF0ZURhdGUiLCJtcyIsImdldEZ1bGxZZWFyIiwic2V0RnVsbFllYXIiLCJjcmVhdGVVVENEYXRlIiwiVVRDIiwiZ2V0VVRDRnVsbFllYXIiLCJzZXRVVENGdWxsWWVhciIsImZpcnN0V2Vla09mZnNldCIsImRvdyIsImRveSIsImZ3ZCIsImdldFVUQ0RheSIsImRheU9mWWVhckZyb21XZWVrcyIsIndlZWsiLCJ3ZWVrZGF5IiwicmVzWWVhciIsInJlc0RheU9mWWVhciIsImRheU9mWWVhciIsIndlZWtPZlllYXIiLCJyZXNXZWVrIiwid2Vla09mZnNldCIsIndlZWtzSW5ZZWFyIiwid2Vla09mZnNldE5leHQiLCJsb2NhbGVXZWVrIiwiX3dlZWsiLCJkZWZhdWx0TG9jYWxlV2VlayIsImxvY2FsZUZpcnN0RGF5T2ZXZWVrIiwibG9jYWxlRmlyc3REYXlPZlllYXIiLCJnZXRTZXRXZWVrIiwiYWRkIiwiZ2V0U2V0SVNPV2VlayIsInBhcnNlV2Vla2RheSIsIndlZWtkYXlzUGFyc2UiLCJwYXJzZUlzb1dlZWtkYXkiLCJzaGlmdFdlZWtkYXlzIiwid3MiLCJ3ZWVrZGF5c01pbiIsIndlZWtkYXlzU2hvcnQiLCJ3ZWVrZGF5cyIsIndlZWtkYXlzTWluUmVnZXgiLCJ3ZWVrZGF5c1Nob3J0UmVnZXgiLCJ3ZWVrZGF5c1JlZ2V4IiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzIiwiZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNNaW4iLCJkZWZhdWx0V2Vla2RheXNSZWdleCIsImRlZmF1bHRXZWVrZGF5c1Nob3J0UmVnZXgiLCJkZWZhdWx0V2Vla2RheXNNaW5SZWdleCIsImxvY2FsZVdlZWtkYXlzIiwiX3dlZWtkYXlzIiwiZGF5IiwibG9jYWxlV2Vla2RheXNTaG9ydCIsIl93ZWVrZGF5c1Nob3J0IiwibG9jYWxlV2Vla2RheXNNaW4iLCJfd2Vla2RheXNNaW4iLCJoYW5kbGVTdHJpY3RQYXJzZSQxIiwid2Vla2RheU5hbWUiLCJfd2Vla2RheXNQYXJzZSIsIl9zaG9ydFdlZWtkYXlzUGFyc2UiLCJfbWluV2Vla2RheXNQYXJzZSIsImxvY2FsZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNQYXJzZUV4YWN0IiwiX2Z1bGxXZWVrZGF5c1BhcnNlIiwiZ2V0U2V0RGF5T2ZXZWVrIiwiZ2V0RGF5IiwiZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrIiwiZ2V0U2V0SVNPRGF5T2ZXZWVrIiwiY29tcHV0ZVdlZWtkYXlzUGFyc2UiLCJfd2Vla2RheXNTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1JlZ2V4IiwiX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleCIsIl93ZWVrZGF5c1Nob3J0UmVnZXgiLCJfd2Vla2RheXNNaW5TdHJpY3RSZWdleCIsIl93ZWVrZGF5c01pblJlZ2V4IiwibWlucCIsInNob3J0cCIsImxvbmdwIiwibWluUGllY2VzIiwiaEZvcm1hdCIsImhvdXJzIiwia0Zvcm1hdCIsImxvd2VyY2FzZSIsIm1pbnV0ZXMiLCJtYXRjaE1lcmlkaWVtIiwiX21lcmlkaWVtUGFyc2UiLCJsb2NhbGVJc1BNIiwiY2hhckF0Iiwic2Vjb25kcyIsImtJbnB1dCIsIl9pc1BtIiwiaXNQTSIsIl9tZXJpZGllbSIsInBvcyIsInBvczEiLCJwb3MyIiwiZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UiLCJnZXRTZXRIb3VyIiwibG9jYWxlTWVyaWRpZW0iLCJpc0xvd2VyIiwiZ2xvYmFsTG9jYWxlIiwiYmFzZUNvbmZpZyIsImRheU9mTW9udGhPcmRpbmFsUGFyc2UiLCJtZXJpZGllbVBhcnNlIiwibG9jYWxlcyIsImxvY2FsZUZhbWlsaWVzIiwiY29tbW9uUHJlZml4IiwiYXJyMSIsImFycjIiLCJtaW5sIiwibm9ybWFsaXplTG9jYWxlIiwiY2hvb3NlTG9jYWxlIiwibmFtZXMiLCJqIiwibmV4dCIsImxvYWRMb2NhbGUiLCJpc0xvY2FsZU5hbWVTYW5lIiwib2xkTG9jYWxlIiwiZXhwb3J0cyIsIl9hYmJyIiwiZ2V0U2V0R2xvYmFsTG9jYWxlIiwiZSIsInZhbHVlcyIsImdldExvY2FsZSIsImRlZmluZUxvY2FsZSIsImFiYnIiLCJwYXJlbnRMb2NhbGUiLCJ1cGRhdGVMb2NhbGUiLCJ0bXBMb2NhbGUiLCJsaXN0TG9jYWxlcyIsImNoZWNrT3ZlcmZsb3ciLCJfb3ZlcmZsb3dEYXlPZlllYXIiLCJfb3ZlcmZsb3dXZWVrcyIsIl9vdmVyZmxvd1dlZWtkYXkiLCJleHRlbmRlZElzb1JlZ2V4IiwiYmFzaWNJc29SZWdleCIsInR6UmVnZXgiLCJpc29EYXRlcyIsImlzb1RpbWVzIiwiYXNwTmV0SnNvblJlZ2V4Iiwib2JzT2Zmc2V0cyIsIlVUIiwiR01UIiwiRURUIiwiRVNUIiwiQ0RUIiwiQ1NUIiwiTURUIiwiTVNUIiwiUERUIiwiUFNUIiwiY29uZmlnRnJvbUlTTyIsImwiLCJhbGxvd1RpbWUiLCJkYXRlRm9ybWF0IiwidGltZUZvcm1hdCIsInR6Rm9ybWF0IiwiZXhlYyIsImlzb0RhdGVzTGVuIiwiaXNvVGltZXNMZW4iLCJjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0IiwiZXh0cmFjdEZyb21SRkMyODIyU3RyaW5ncyIsInllYXJTdHIiLCJtb250aFN0ciIsImRheVN0ciIsImhvdXJTdHIiLCJtaW51dGVTdHIiLCJzZWNvbmRTdHIiLCJ1bnRydW5jYXRlWWVhciIsInByZXByb2Nlc3NSRkMyODIyIiwiY2hlY2tXZWVrZGF5Iiwid2Vla2RheVN0ciIsInBhcnNlZElucHV0IiwiY2FsY3VsYXRlT2Zmc2V0Iiwib2JzT2Zmc2V0IiwibWlsaXRhcnlPZmZzZXQiLCJudW1PZmZzZXQiLCJobSIsImNvbmZpZ0Zyb21SRkMyODIyIiwicGFyc2VkQXJyYXkiLCJzZXRVVENNaW51dGVzIiwiZ2V0VVRDTWludXRlcyIsImNvbmZpZ0Zyb21TdHJpbmciLCJjcmVhdGVGcm9tSW5wdXRGYWxsYmFjayIsImRlZmF1bHRzIiwiYyIsImN1cnJlbnREYXRlQXJyYXkiLCJub3dWYWx1ZSIsIl91c2VVVEMiLCJnZXRVVENNb250aCIsImdldFVUQ0RhdGUiLCJnZXRNb250aCIsImdldERhdGUiLCJjb25maWdGcm9tQXJyYXkiLCJjdXJyZW50RGF0ZSIsImV4cGVjdGVkV2Vla2RheSIsInllYXJUb1VzZSIsImRheU9mWWVhckZyb21XZWVrSW5mbyIsIl9kYXlPZlllYXIiLCJfbmV4dERheSIsIndlZWtZZWFyIiwidGVtcCIsIndlZWtkYXlPdmVyZmxvdyIsImN1cldlZWsiLCJHRyIsIlciLCJFIiwiY3JlYXRlTG9jYWwiLCJnZyIsIklTT184NjAxIiwiUkZDXzI4MjIiLCJza2lwcGVkIiwic3RyaW5nTGVuZ3RoIiwidG90YWxQYXJzZWRJbnB1dExlbmd0aCIsIm1lcmlkaWVtRml4V3JhcCIsImVyYXNDb252ZXJ0WWVhciIsImhvdXIiLCJpc1BtIiwibWVyaWRpZW1Ib3VyIiwiY29uZmlnRnJvbVN0cmluZ0FuZEFycmF5IiwidGVtcENvbmZpZyIsImJlc3RNb21lbnQiLCJzY29yZVRvQmVhdCIsImN1cnJlbnRTY29yZSIsInZhbGlkRm9ybWF0Rm91bmQiLCJiZXN0Rm9ybWF0SXNWYWxpZCIsImNvbmZpZ2ZMZW4iLCJzY29yZSIsImNvbmZpZ0Zyb21PYmplY3QiLCJkYXlPckRhdGUiLCJtaW51dGUiLCJzZWNvbmQiLCJtaWxsaXNlY29uZCIsImNyZWF0ZUZyb21Db25maWciLCJwcmVwYXJlQ29uZmlnIiwicHJlcGFyc2UiLCJjb25maWdGcm9tSW5wdXQiLCJpc1VUQyIsInByb3RvdHlwZU1pbiIsIm90aGVyIiwicHJvdG90eXBlTWF4IiwicGlja0J5IiwibW9tZW50cyIsIm9yZGVyaW5nIiwiaXNEdXJhdGlvblZhbGlkIiwidW5pdEhhc0RlY2ltYWwiLCJvcmRlckxlbiIsInBhcnNlRmxvYXQiLCJpc1ZhbGlkJDEiLCJjcmVhdGVJbnZhbGlkJDEiLCJjcmVhdGVEdXJhdGlvbiIsIkR1cmF0aW9uIiwiZHVyYXRpb24iLCJ5ZWFycyIsInF1YXJ0ZXJzIiwicXVhcnRlciIsIndlZWtzIiwiaXNvV2VlayIsImRheXMiLCJtaWxsaXNlY29uZHMiLCJfbWlsbGlzZWNvbmRzIiwiX2RheXMiLCJfZGF0YSIsIl9idWJibGUiLCJpc0R1cmF0aW9uIiwiYWJzUm91bmQiLCJyb3VuZCIsImNvbXBhcmVBcnJheXMiLCJhcnJheTEiLCJhcnJheTIiLCJkb250Q29udmVydCIsImxlbmd0aERpZmYiLCJkaWZmcyIsIm9mZnNldCIsInNlcGFyYXRvciIsInV0Y09mZnNldCIsInNpZ24iLCJvZmZzZXRGcm9tU3RyaW5nIiwiY2h1bmtPZmZzZXQiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNsb25lV2l0aE9mZnNldCIsIm1vZGVsIiwiY2xvbmUiLCJzZXRUaW1lIiwibG9jYWwiLCJnZXREYXRlT2Zmc2V0IiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRTZXRPZmZzZXQiLCJrZWVwTG9jYWxUaW1lIiwia2VlcE1pbnV0ZXMiLCJsb2NhbEFkanVzdCIsIl9jaGFuZ2VJblByb2dyZXNzIiwiYWRkU3VidHJhY3QiLCJnZXRTZXRab25lIiwic2V0T2Zmc2V0VG9VVEMiLCJzZXRPZmZzZXRUb0xvY2FsIiwic3VidHJhY3QiLCJzZXRPZmZzZXRUb1BhcnNlZE9mZnNldCIsInRab25lIiwiaGFzQWxpZ25lZEhvdXJPZmZzZXQiLCJpc0RheWxpZ2h0U2F2aW5nVGltZSIsImlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCIsIl9pc0RTVFNoaWZ0ZWQiLCJ0b0FycmF5IiwiaXNMb2NhbCIsImlzVXRjT2Zmc2V0IiwiaXNVdGMiLCJhc3BOZXRSZWdleCIsImlzb1JlZ2V4IiwicmV0IiwiZGlmZlJlcyIsInBhcnNlSXNvIiwibW9tZW50c0RpZmZlcmVuY2UiLCJpbnAiLCJwb3NpdGl2ZU1vbWVudHNEaWZmZXJlbmNlIiwiYmFzZSIsImlzQWZ0ZXIiLCJpc0JlZm9yZSIsImNyZWF0ZUFkZGVyIiwiZGlyZWN0aW9uIiwicGVyaW9kIiwidG1wIiwiaXNBZGRpbmciLCJpbnZhbGlkIiwiU3RyaW5nIiwiaXNNb21lbnRJbnB1dCIsImlzTnVtYmVyT3JTdHJpbmdBcnJheSIsImlzTW9tZW50SW5wdXRPYmplY3QiLCJwcm9wZXJ0eSIsIm9iamVjdFRlc3QiLCJwcm9wZXJ0eVRlc3QiLCJwcm9wZXJ0eUxlbiIsImFycmF5VGVzdCIsImRhdGFUeXBlVGVzdCIsImlzQ2FsZW5kYXJTcGVjIiwiZ2V0Q2FsZW5kYXJGb3JtYXQiLCJteU1vbWVudCIsImNhbGVuZGFyJDEiLCJ0aW1lIiwiZm9ybWF0cyIsInNvZCIsInN0YXJ0T2YiLCJjYWxlbmRhckZvcm1hdCIsImxvY2FsSW5wdXQiLCJlbmRPZiIsImlzQmV0d2VlbiIsImluY2x1c2l2aXR5IiwibG9jYWxGcm9tIiwibG9jYWxUbyIsImlzU2FtZSIsImlucHV0TXMiLCJpc1NhbWVPckFmdGVyIiwiaXNTYW1lT3JCZWZvcmUiLCJhc0Zsb2F0IiwidGhhdCIsInpvbmVEZWx0YSIsIm1vbnRoRGlmZiIsIndob2xlTW9udGhEaWZmIiwiYW5jaG9yIiwidG9JU09TdHJpbmciLCJrZWVwT2Zmc2V0IiwidG9EYXRlIiwiaW5zcGVjdCIsImRhdGV0aW1lIiwic3VmZml4Iiwiem9uZSIsImlucHV0U3RyaW5nIiwiZGVmYXVsdEZvcm1hdFV0YyIsImRlZmF1bHRGb3JtYXQiLCJwb3N0Zm9ybWF0IiwiaHVtYW5pemUiLCJmcm9tTm93IiwidG9Ob3ciLCJuZXdMb2NhbGVEYXRhIiwiTVNfUEVSX1NFQ09ORCIsIk1TX1BFUl9NSU5VVEUiLCJNU19QRVJfSE9VUiIsIk1TX1BFUl80MDBfWUVBUlMiLCJtb2QkMSIsImRpdmlkZW5kIiwiZGl2aXNvciIsImxvY2FsU3RhcnRPZkRhdGUiLCJ1dGNTdGFydE9mRGF0ZSIsInN0YXJ0T2ZEYXRlIiwiaXNvV2Vla2RheSIsInVuaXgiLCJ0b09iamVjdCIsInRvSlNPTiIsImlzVmFsaWQkMiIsInBhcnNpbmdGbGFncyIsImludmFsaWRBdCIsImNyZWF0aW9uRGF0YSIsImxvY2FsZUVyYXMiLCJlcmFzIiwiX2VyYXMiLCJzaW5jZSIsInVudGlsIiwibG9jYWxlRXJhc1BhcnNlIiwiZXJhTmFtZSIsIm5hcnJvdyIsImxvY2FsZUVyYXNDb252ZXJ0WWVhciIsImRpciIsImdldEVyYU5hbWUiLCJnZXRFcmFOYXJyb3ciLCJnZXRFcmFBYmJyIiwiZ2V0RXJhWWVhciIsImVyYXNOYW1lUmVnZXgiLCJjb21wdXRlRXJhc1BhcnNlIiwiX2VyYXNOYW1lUmVnZXgiLCJfZXJhc1JlZ2V4IiwiZXJhc0FiYnJSZWdleCIsIl9lcmFzQWJiclJlZ2V4IiwiZXJhc05hcnJvd1JlZ2V4IiwiX2VyYXNOYXJyb3dSZWdleCIsIm1hdGNoRXJhQWJiciIsIm1hdGNoRXJhTmFtZSIsIm1hdGNoRXJhTmFycm93IiwibWF0Y2hFcmFZZWFyT3JkaW5hbCIsIl9lcmFZZWFyT3JkaW5hbFJlZ2V4IiwiYWJiclBpZWNlcyIsIm5hbWVQaWVjZXMiLCJuYXJyb3dQaWVjZXMiLCJhZGRXZWVrWWVhckZvcm1hdFRva2VuIiwiZ2V0dGVyIiwiZ2V0U2V0V2Vla1llYXIiLCJnZXRTZXRXZWVrWWVhckhlbHBlciIsImdldFNldElTT1dlZWtZZWFyIiwiZ2V0SVNPV2Vla3NJblllYXIiLCJnZXRJU09XZWVrc0luSVNPV2Vla1llYXIiLCJpc29XZWVrWWVhciIsImdldFdlZWtzSW5ZZWFyIiwid2Vla0luZm8iLCJnZXRXZWVrc0luV2Vla1llYXIiLCJ3ZWVrc1RhcmdldCIsInNldFdlZWtBbGwiLCJkYXlPZlllYXJEYXRhIiwiZ2V0U2V0UXVhcnRlciIsImVyYXNQYXJzZSIsImVyYVllYXJPcmRpbmFsUGFyc2UiLCJnZXRTZXREYXlPZk1vbnRoIiwiZ2V0U2V0RGF5T2ZZZWFyIiwiZ2V0U2V0TWludXRlIiwiZ2V0U2V0TWlsbGlzZWNvbmQiLCJnZXRTZXRTZWNvbmQiLCJwYXJzZU1zIiwiZ2V0Wm9uZUFiYnIiLCJnZXRab25lTmFtZSIsInByb3RvIiwiY3JlYXRlVW5peCIsImNyZWF0ZUluWm9uZSIsInBhcnNlWm9uZSIsInByZVBhcnNlUG9zdEZvcm1hdCIsIlN5bWJvbCIsImZvciIsImVyYU5hcnJvdyIsImVyYUFiYnIiLCJlcmFZZWFyIiwiaXNvV2Vla3MiLCJ3ZWVrc0luV2Vla1llYXIiLCJpc29XZWVrc0luWWVhciIsImlzb1dlZWtzSW5JU09XZWVrWWVhciIsImlzRFNUIiwiem9uZUFiYnIiLCJ6b25lTmFtZSIsImRhdGVzIiwiaXNEU1RTaGlmdGVkIiwicHJvdG8kMSIsImdldCQxIiwiaW5kZXgiLCJmaWVsZCIsInNldHRlciIsImxpc3RNb250aHNJbXBsIiwib3V0IiwibGlzdFdlZWtkYXlzSW1wbCIsImxvY2FsZVNvcnRlZCIsInNoaWZ0IiwibGlzdE1vbnRocyIsImxpc3RNb250aHNTaG9ydCIsImxpc3RXZWVrZGF5cyIsImxpc3RXZWVrZGF5c1Nob3J0IiwibGlzdFdlZWtkYXlzTWluIiwiZmlyc3REYXlPZlllYXIiLCJmaXJzdERheU9mV2VlayIsImxhbmdEYXRhIiwibWF0aEFicyIsImFkZFN1YnRyYWN0JDEiLCJhZGQkMSIsInN1YnRyYWN0JDEiLCJhYnNDZWlsIiwiYnViYmxlIiwibW9udGhzRnJvbURheXMiLCJtb250aHNUb0RheXMiLCJkYXlzVG9Nb250aHMiLCJhcyIsInZhbHVlT2YkMSIsIm1ha2VBcyIsImFsaWFzIiwiYXNNaWxsaXNlY29uZHMiLCJhc1NlY29uZHMiLCJhc01pbnV0ZXMiLCJhc0hvdXJzIiwiYXNEYXlzIiwiYXNXZWVrcyIsImFzTW9udGhzIiwiYXNRdWFydGVycyIsImFzWWVhcnMiLCJjbG9uZSQxIiwiZ2V0JDIiLCJtYWtlR2V0dGVyIiwidGhyZXNob2xkcyIsInN1YnN0aXR1dGVUaW1lQWdvIiwicmVsYXRpdmVUaW1lJDEiLCJwb3NOZWdEdXJhdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVJvdW5kaW5nIiwicm91bmRpbmdGdW5jdGlvbiIsImdldFNldFJlbGF0aXZlVGltZVRocmVzaG9sZCIsInRocmVzaG9sZCIsImxpbWl0IiwiYXJnV2l0aFN1ZmZpeCIsImFyZ1RocmVzaG9sZHMiLCJ3aXRoU3VmZml4IiwidGgiLCJhYnMkMSIsInRvSVNPU3RyaW5nJDEiLCJ0b3RhbFNpZ24iLCJ5bVNpZ24iLCJkYXlzU2lnbiIsImhtc1NpZ24iLCJ0b3RhbCIsInByb3RvJDIiLCJ0b0lzb1N0cmluZyIsInZlcnNpb24iLCJyZWxhdGl2ZVRpbWVSb3VuZGluZyIsInJlbGF0aXZlVGltZVRocmVzaG9sZCIsIkhUTUw1X0ZNVCIsIkRBVEVUSU1FX0xPQ0FMIiwiREFURVRJTUVfTE9DQUxfU0VDT05EUyIsIkRBVEVUSU1FX0xPQ0FMX01TIiwiVElNRSIsIlRJTUVfU0VDT05EUyIsIlRJTUVfTVMiLCJmYWN0b3J5Iiwicm9vdCIsIm1vbWVudCIsImNhY2hlZEd1ZXNzIiwiem9uZXMiLCJsaW5rcyIsImNvdW50cmllcyIsImd1ZXNzZXMiLCJsb2dFcnJvciIsIm1vbWVudFZlcnNpb24iLCJtYWpvciIsIm1pbm9yIiwiY2hhckNvZGVUb0ludCIsImNoYXJDb2RlIiwidW5wYWNrQmFzZTYwIiwid2hvbGUiLCJmcmFjdGlvbmFsIiwibXVsdGlwbGllciIsImNoYXJDb2RlQXQiLCJhcnJheVRvSW50IiwibWFwSW5kaWNlcyIsImluZGljZXMiLCJ1bnBhY2siLCJvZmZzZXRzIiwidW50aWxzIiwiSW5maW5pdHkiLCJpbnRUb1VudGlsIiwiYWJicnMiLCJwb3B1bGF0aW9uIiwiWm9uZSIsInBhY2tlZFN0cmluZyIsIl9zZXQiLCJDb3VudHJ5IiwiY291bnRyeV9uYW1lIiwiem9uZV9uYW1lcyIsIk9mZnNldEF0IiwiYXQiLCJ0aW1lU3RyaW5nIiwidG9UaW1lU3RyaW5nIiwiWm9uZVNjb3JlIiwib2Zmc2V0U2NvcmUiLCJhYmJyU2NvcmUiLCJmaW5kQ2hhbmdlIiwibG93IiwiaGlnaCIsIm1pZCIsInNvcnRab25lU2NvcmVzIiwibG9jYWxlQ29tcGFyZSIsImFkZFRvR3Vlc3NlcyIsImd1ZXNzZXNGb3JVc2VyT2Zmc2V0cyIsImd1ZXNzZXNPZmZzZXQiLCJvZmZzZXRzTGVuZ3RoIiwiZmlsdGVyZWRHdWVzc2VzIiwicmVidWlsZEd1ZXNzIiwiaW50bE5hbWUiLCJJbnRsIiwiRGF0ZVRpbWVGb3JtYXQiLCJyZXNvbHZlZE9wdGlvbnMiLCJ0aW1lWm9uZSIsIm5vcm1hbGl6ZU5hbWUiLCJ6b25lU2NvcmUiLCJjaGFuZ2UiLCJzdGFydFllYXIiLCJsYXN0IiwidXNlck9mZnNldHMiLCJ6b25lU2NvcmVzIiwiZ2V0Wm9uZSIsInNjb3JlT2Zmc2V0QXQiLCJhZGRab25lIiwicGFja2VkIiwibm9ybWFsaXplZCIsImNhbGxlciIsImxpbmsiLCJhZGRMaW5rIiwibm9ybWFsMCIsIm5vcm1hbDEiLCJuZWVkc09mZnNldCIsImlzVW5peFRpbWVzdGFtcCIsIm1lc3NhZ2UiLCJ0eiIsInBhcnNlIiwidW5wYWNrZWQiLCJfaW5kZXgiLCJ0aW1lc3RhbXAiLCJ6b25lX25hbWUiLCJjb3VudHJ5X2NvZGUiLCJvZmZzZXROZXh0Iiwib2Zmc2V0UHJldiIsIm1vdmVBbWJpZ3VvdXNGb3J3YXJkIiwibW92ZUludmFsaWRGb3J3YXJkIiwib2Zmc2V0QXQiLCJkYXRhVmVyc2lvbiIsIl96b25lcyIsIl9saW5rcyIsIl9uYW1lcyIsIl9jb3VudHJpZXMiLCJsb2FkIiwiY291bnRyeV96b25lcyIsImFkZENvdW50cmllcyIsInpvbmVFeGlzdHMiLCJkaWRTaG93RXJyb3IiLCJndWVzcyIsImlnbm9yZUNhY2hlIiwiem9uZXNGb3JDb3VudHJ5IiwiY291bnRyeSIsIndpdGhfb2Zmc2V0Iiwib2xkIiwiYWJicldyYXAiLCJfeiIsInJlc2V0Wm9uZVdyYXAiLCJkZWZhdWx0Wm9uZSIsInoiLCJzZXREZWZhdWx0IiwicmVxdWlyZSQkMCIsInJlcXVpcmUkJDEiLCJudW1iZXJzUGFzdCIsIm51bWJlcnNGdXR1cmUiLCJ0cmFuc2xhdGUiLCJ2ZXJiYWxOdW1iZXIiLCJsbCIsImxsbCIsImxsbGwiLCJwcm9jZXNzUmVsYXRpdmVUaW1lIiwibW9udGhzUGFyc2VFeGFjdCIsIndlZWtkYXlzUGFyc2VFeGFjdCIsInRyYW5zbGF0aW9ucyIsImRlIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY2FuY2VsIiwiY3VycmVudHBvc2l0aW9uIiwiZGVsZXRlIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJwbGF0Zm9ybSIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInN2Iiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImRvY3VtZW50IiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsIkF1dG9zdWdnZXN0UGF0Y2giLCJBdXRvc3VnZ2VzdCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdXBlciIsInNlbGYiLCJvblN1Z2dlc3Rpb25Ub3VjaE1vdmUiLCJqdXN0U2VsZWN0ZWRTdWdnZXN0aW9uIiwicHJlc3NlZFN1Z2dlc3Rpb24iLCJNb2JpbGVTZWFyY2giLCJhcHBFbGVtZW50IiwiY2xvc2VIYW5kbGUiLCJjbGVhcklucHV0Iiwic3VnZ2VzdGlvbnMiLCJpbnB1dFByb3BzIiwiZmV0Y2hGdW5jdGlvbiIsInJlbmRlclN1Z2dlc3Rpb24iLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJhcmlhTGFiZWwiLCJvblN1Z2dlc3Rpb25TZWxlY3RlZCIsImNsZWFyT2xkU2VhcmNoZXMiLCJkaWFsb2dIZWFkZXJUZXh0IiwiZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQiLCJkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0IiwiY2xlYXJJbnB1dEJ1dHRvblRleHQiLCJmb2N1c0lucHV0IiwiY29sb3IiLCJob3ZlckNvbG9yIiwiYWNjZXNzaWJsZVByaW1hcnlDb2xvciIsInNlYXJjaE9wZW4iLCJmb250V2VpZ2h0cyIsInNob3dTY3JvbGwiLCJfaW5wdXRSZWYkY3VycmVudCIsInN0eWxlcyIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJ1c2VTdGF0ZSIsImlucHV0UmVmIiwiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsIm9uQ2xvc2UiLCJ1c2VDYWxsYmFjayIsIm9uU2VsZWN0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJ3aGljaCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsImdldFZhbHVlIiwicmVuZGVySXRlbSIsImNsYXNzTmFtZSIsImZvY3VzIiwiaXNPcGVuIiwib3ZlcmxheUNsYXNzTmFtZSIsIm9uQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJtZWRpdW0iLCJodG1sRm9yIiwib25DbGljayIsIm9uS2V5RG93biIsInRhYkluZGV4IiwiSWNvbiIsImltZyIsImFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwiZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJoYXNWYWx1ZSIsImF1dG9Gb2N1cyIsInJlbmRlcklucHV0Q29tcG9uZW50IiwiRnJhZ21lbnQiLCJ0aGVtZSIsIkRpYWxvZ01vZGFsIiwiaXNNb2RhbE9wZW4iLCJoYW5kbGVDbG9zZSIsImhlYWRlclRleHQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJpc1JlcXVpcmVkIiwic2hhcGUiLCJvbkNoYW5nZSIsIm9uQmx1ciIsInBsYWNlaG9sZGVyIiwiciIsImciLCJ3aW5kb3ciLCJpZ25vcmUiLCJoZWFkZXIiLCJ0b3BPbkVtcHR5SGFzaCIsInNwZWVkIiwic3BlZWRBc0R1cmF0aW9uIiwiZHVyYXRpb25NYXgiLCJkdXJhdGlvbk1pbiIsImNsaXAiLCJlYXNpbmciLCJjdXN0b21FYXNpbmciLCJ1cGRhdGVVUkwiLCJwb3BzdGF0ZSIsImVtaXRFdmVudHMiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJib2R5Iiwic2Nyb2xsSGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsImhlaWdodCIsIm9mZnNldFRvcCIsImFjdGl2ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJvdXRsaW5lIiwic2Nyb2xsVG8iLCJDdXN0b21FdmVudCIsImJ1YmJsZXMiLCJkZXRhaWwiLCJ0b2dnbGUiLCJkaXNwYXRjaEV2ZW50IiwiZiIsImNhbmNlbFNjcm9sbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbCIsInRhZ05hbWUiLCJwYWdlWU9mZnNldCIsInF1ZXJ5U2VsZWN0b3IiLCJPIiwib2Zmc2V0UGFyZW50IiwiaW5uZXJIZWlnaHQiLCJTIiwiXyIsIkkiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwdXNoU3RhdGUiLCJzbW9vdGhTY3JvbGwiLCJKU09OIiwic3RyaW5naWZ5IiwidGl0bGUiLCJtYXRjaE1lZGlhIiwiZGVmYXVsdFByZXZlbnRlZCIsImJ1dHRvbiIsIm1ldGFLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJjbG9zZXN0IiwiaG9zdG5hbWUiLCJsb2NhdGlvbiIsInBhdGhuYW1lIiwiaHJlZiIsImRlY29kZVVSSUNvbXBvbmVudCIsImhhc2giLCJyZXBsYWNlU3RhdGUiLCJzdGF0ZSIsImRlc3Ryb3kiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiRWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfX2NyZWF0ZUJpbmRpbmciLCJjcmVhdGUiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwidXNlRWxlbWVudFNpemUiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ5b3V0dWJlIiwiUHJpdmFjeU1hbmFnZXJBUEkiLCJhY3Rpb24iLCJ0cnVzdGUiLCJjbWEiLCJjYWxsQXBpIiwiY29uc2VudCIsInRvcCIsInBvc3RNZXNzYWdlIiwidXNlSXNMb2FkaW5nQWZ0ZXJFcnJvciIsInVzZUlzTW9iaWxlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU9uTG9zZUZvY3VzV2l0aGluIiwid2F0Y2giLCJwYXNzaXZlIiwidXNlT25XaW5kb3dGb2N1cyIsInZpc2liaWxpdHlTdGF0ZSIsInVzZU91dHNpZGVSZWFjdGVyIiwiY29udGFpbnMiLCJ1c2VTY3JvbGxMb2NrIiwibG9jayIsInNjcm9sbFkiLCJ1bmxvY2siLCJfX2ltcG9ydERlZmF1bHQiLCJfX2VzTW9kdWxlIiwidXNlU21vb3RoU2Nyb2xsIiwiZ2xvYmFsVGhpcyIsImluaXQiLCJmYWxsYmFja0xuZyIsImRlZmF1bHROUyIsImludGVycG9sYXRpb24iLCJlc2NhcGVWYWx1ZSIsIm5vZGUiLCJnZXRQbGF0Zm9ybSIsIkdURlMiLCJtb2RlcyIsImkxOG5leHQiLCJnZXRTdWdnZXN0aW9uQ29udGVudCIsInN1Z2dlc3Rpb25UeXBlIiwiX2l0ZW0kcHJvcGVydGllcyRhZGRlIiwidGFpbDEiLCJ0YWlsMiIsIm5hbWUxIiwibmFtZTIiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUiLCJhcnJpdmVCeSIsIkRUQXV0b3N1Z2dlc3QiLCJDb21wb25lbnQiLCJjb21wb25lbnREaWRVcGRhdGUiLCJjaGFuZ2VMYW5ndWFnZSIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwibmV4dFByb3BzIiwiZWRpdGluZyIsInNldFN0YXRlIiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwidmFsaWQiLCJ0eXBpbmdUaW1lciIsInRpbWVyIiwidHlwaW5nIiwib25TZWxlY3RlZCIsIm93blBsYWNlcyIsInBlbmRpbmdTZWxlY3Rpb24iLCJzdWdnZXN0aW9uSW5kZXgiLCJzZWxlY3Rpb25Eb25lIiwic3VnZ2VzdGlvblZhbHVlIiwiYmx1ciIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwiaXNFbWJlZGRlZCIsImNsb3NlTW9iaWxlU2VhcmNoIiwicHJldlN0YXRlIiwiY2hlY2tQZW5kaW5nU2VsZWN0aW9uIiwib25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkIiwiZ2V0TGFiZWwiLCJjbGVhckJ1dHRvbiIsImNsZWFuRXhlY3V0ZWQiLCJpc0xvY2F0aW9uU2VhcmNoIiwiaXNFbXB0eSIsImV4ZWN1dGVTZWFyY2giLCJzZWFyY2hSZXN1bHQiLCJ0cmFuc2xhdGVkIiwib25DbGVhciIsImlucHV0Q2xpY2tlZCIsImlucHV0VmFsdWUiLCJjbGVhckxvY2F0aW9uVGV4dCIsInN0YXRlS2V5RG93biIsInN0b3JlSW5wdXRSZWZlcmVuY2UiLCJhdXRvc3VnZ2VzdCIsInN0b3JlUmVmIiwiZmlsbElucHV0IiwiY29udGVudCIsIlN1Z2dlc3Rpb25JdGVtIiwiYXJpYUZhdm91cml0ZVN0cmluZyIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJtb2RlSWNvbkNvbG9ycyIsIm1vZGVTZXQiLCJrZXlEb3duIiwic3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQiLCJmaXJzdFN1Z2dlc3Rpb24iLCJTZXQiLCJjbGVhckZ1dHVyZVJvdXRlcyIsImlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50Iiwib25Gb2N1cyIsImFkZFJlc291cmNlQnVuZGxlIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwibmV4dFN0YXRlIiwicmVuZGVyIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwidGhpbiIsImlucHV0Q2xhc3NOYW1lIiwiYXJpYUJhcklkIiwiU2VhcmNoQmFySWQiLCJhcmlhUmVxdWlyZWRUZXh0IiwiYXJpYUxhYmVsVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJzZWxlY3Rpb24iLCJyb2xlIiwibW9iaWxlTGFiZWwiLCJjeCIsImljb24iLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJkZWZhdWx0UHJvcHMiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsImFueSIsImFycmF5T2YiLCJvYmplY3QiLCJEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2siXSwibWFwcGluZ3MiOiJrekRBQWUsU0FBU0EsSUFZdEIsT0FYQUEsRUFBV0MsT0FBT0MsT0FBU0QsT0FBT0MsT0FBT0MsT0FBUyxTQUFVQyxHQUMxRCxJQUFLLElBQUlDLEVBQUksRUFBR0EsRUFBSUMsVUFBVUMsT0FBUUYsSUFBSyxDQUN6QyxJQUFJRyxFQUFTRixVQUFVRCxHQUN2QixJQUFLLElBQUlJLEtBQU9ELEVBQ1ZQLE9BQU9TLFVBQVVDLGVBQWVDLEtBQUtKLEVBQVFDLEtBQy9DTCxFQUFPSyxHQUFPRCxFQUFPQyxJQUkzQixPQUFPTCxHQUVGSixFQUFTYSxNQUFNQyxLQUFNUixVQUM5QixDQ0ZlLFNBQVNTLEVBQU1DLEVBQU1DLEdBQ2xDLE9BQU9ELEdBQVFDLEdBQVFELElBQVNDLENBQ2xDLENDV2UsU0FBU0MsRUFBWUMsRUFBT0MsR0FDekMsTUFBTUMsRUFBU0YsRUFBTUcsV0FDZkMsRUFBU0gsRUFBTUUsV0FFckIsR0FBbUIsZ0JBQWZILEVBQU1LLE1BQXlDLGdCQUFmSixFQUFNSSxLQUF3QixDQUNoRSxNQUFNQyxFQUFLSixFQUFPSyxPQUNaQyxFQUFLTixFQUFPTyxZQUNaQyxFQUFLTixFQUFPRyxPQUNaSSxFQUFLUCxFQUFPSyxZQUtsQixNQUhlLEdBQUVILEVBQUdNLFNBQVNOLEVBQUdPLGFBQWFMLEVBQUdJLFNBQVNKLEVBQUdLLGFBQzdDLEdBQUVILEVBQUdFLFNBQVNGLEVBQUdHLGFBQWFGLEVBQUdDLFNBQVNELEVBQUdFLFdBSTlELEdBQW1CLGdCQUFmYixFQUFNSyxNQUF5QyxnQkFBZkosRUFBTUksS0FDeEMsT0FBTyxFQUVULElBQ3FCLHNCQUFqQkgsRUFBT1ksT0FDVSwrQkFBakJaLEVBQU9ZLFNBQ1csc0JBQWpCVixFQUFP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