@digitransit-component/digitransit-component-autosuggest 2.0.1 → 2.0.3
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.
- package/lib/index.development.js +3 -3
- package/lib/index.js +2 -2
- package/lib/index.js.map +1 -1
- package/package.json +4 -4
package/lib/index.development.js
CHANGED
|
@@ -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/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),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/get","@digitransit-component/digitransit-component-suggestion-item","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","@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.get,M.SuggestionItem,M.isEqual,M.memoize,M.escapeRegExp,M.cloneDeep,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),H=L(f),F=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}const j=["stop","station","favouriteStop","favouriteStation"],G=["favouriteVehicleRentalStation","bikestation"];function V(M){if(!M)return"";const z=M.split(":");return 0===z.length?"":`citybikes${z[0]}:bikestation:${z[1]}`}function K(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(G.includes(b.layer)&&G.includes(p.layer)){return(b.gid||V(b.labelId))===(p.gid||V(p.labelId))}if(b.gtfsId&&p.gtfsId)return b.gtfsId===p.gtfsId;if(j.includes(b.layer)&&j.includes(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 Q=M=>y.default(M)?M.toLowerCase():"",J="back",Z="currentPosition",$="favouriteStop",MM="favouriteStation",zM="favouritePlace",bM="favouriteRoute",pM="favouriteVehicleRentalStation",OM="futureRoute",oM="station",cM="selectFromMap",AM="ownLocations",qM="stop",eM="bikestation",nM="carpark",WM="bikepark",aM=({layer:M,type:z})=>"stop"===M||"favouriteStop"===M||"stop"===z||"favouriteStop"===z,tM=(M,z)=>{switch(M){case Z:return 1;case J:return.9;case cM:return.8;case AM:return.79;case MM:case zM:case $:case bM:case pM:return.45;case OM:return.44;case oM:return y.default(z)&&0===z.indexOf("gtfs")?.43:.42;default:return.41;case nM:case WM:case eM:return.38;case qM:return.36}},dM=(M,z,b="")=>{if(!Array.isArray(z))return z;const p=z=>y.default(z)&&M&&M.test(z),O=Q(b),o=p(O),c=S.default(z,[M=>o&&p(Q(M.properties.shortName))&&0===Q(M.properties.shortName).indexOf(O)?1:0,M=>{const{confidence:z,layer:b,source:p}=M.properties;if(0===O.length)return tM(b,p);if(!z)return tM(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=Q(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 oM:return z+(0===p.indexOf("gtfs")?.02:.01);case qM:case nM:case WM:return z-.05;case eM:return z-.04;default:return z}}],["desc","desc"]);return v.default(c,K)},iM=(M,z)=>null!=z&&-1!==M.lastIndexOf(z)?M.substring(0,M.lastIndexOf(z)-1):M;function rM(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=k.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 sM(M,z){return M?Object.keys(M).map((b=>{const p=z||b,O=M[b];return"object"==typeof O?sM(O,p):`${encodeURIComponent(p)}=${encodeURIComponent(O)}`})).join("&"):""}const uM=require("axios").default;function RM(M,z){return uM.get(encodeURI(M)+(z?(-1===M.search(/\?/)?"?":"&")+sM(z):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((M=>M.data))}const fM="https://api.digitransit.fi/geocoding/v1/search";function lM(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||fM;let n=Y({text:q},z,p,{lang:b});if(O&&(n=Y({},n,{sources:O})),A){n=Y({},n,{layers:A.toString()})}return RM(e,n).then((M=>M.features))}function LM(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 RM(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:aM(M.properties)?"favouriteStop":"favouriteStation"},geometry:M.geometry})))))}function NM(M,z,b){let p=rM(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 BM=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE"],XM=["favouritePlace","venue","address","street"],hM=["carpark","bikepark"];const mM=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,getFavouriteVehicleRentalStationsQuery:s,getFavouriteVehicleRentalStations: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)}:{},H=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(rM(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(lM(c,M,x,I,p,h,B,z))}if(w||z.includes("History")){const M=a(L,"endpoint"),z=["currentPosition","selectFromMap","futureRoute","ownLocations","vehicleRentalStation","bikepark","carpark","stop","back"];z.push(...BM),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(lM(c,M,x,I,b,h,B,z).then((M=>O?O(M,H):M)))}if(w||z.includes("History")){const M=a(L),z=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikestation","vehicleRentalStation","back","stop","station"];z.push(...BM),z.push(...XM),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))?LM(M,m).then((M=>O?O(M,H):M)):r(M).then((M=>LM(M,m))).then((M=>O?O(M,H):M)),D.push(function(M,z){return M.then((M=>rM(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(lM(c,b,x,I,p,h,B,z).then((M=>O?O(M,H):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","vehicleRentalStation","back"];z.push(...BM),z.push(...XM),z.push(...hM),b?("route-CITYBIKE"!==b&&(z.push("vehicleRentalStation"),z.push("bikestation")),D.push(NM(M,c,z).then((M=>O?O(M,H):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,H,q).then((M=>O?O(M,H,"Routes"):M)))}if(D.push(l(c,g,b,q).then((M=>O?O(M,H,"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("vehicleRentalStation"),z.push("bikestation")),z.push(...BM.filter((M=>!(M===b))))),z.push(...XM),D.push(NM(M,c,z).then((M=>O?O(M,H,"Routes"):M)))}}if(E||M.includes("VehicleRentalStations")){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(lM(c,z,x,I,k.join(","),h,B,M).then((M=>O?O(M,H,"VehicleRentalStations"):M)))}}Promise.all(D).then(T.default).then((M=>{P.results=M})).catch((M=>{P.error=M})).then((()=>{A(Y({},P,{results:dM(X,P.results,c)}))}))}),300,{leading:!0}),gM=M=>M.localadmin||M.locality||M.address&&M.address.lastIndexOf(",")<M.address.length-2&&M.address.substring(M.address.lastIndexOf(",")+2)||"",TM=({id:M,code:z})=>z||(void 0!==M&&void 0!==M.indexOf&&-1!==M.indexOf("#")?M.substring(M.indexOf("#")+1):void 0),_M=C.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(`${D.default(b)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":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(`${D.default(M.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return z?[M.name||M.label||M.address&&M.address.split(",")[0],gM(M)]:[M.name,M.id,TM(M),gM(M)];default:return[M.name||M.label||M.address&&M.address.split(",")[0],gM(M)]}var b,p}),((M,z)=>{const b=P.default(M);return b.plain=z,b}));function yM(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function SM(M,z){return M(z={exports:{}},z.exports),z.exports}var vM,kM=SM((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 H(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 F(M,z){return M.isValid()?(z=Y(z,M.localeData()),D[z]=D[z]||H(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 iM(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 rM,sM=/\d/,uM=/\d\d/,RM=/\d{3}/,fM=/\d{4}/,lM=/[+-]?\d{6}/,LM=/\d\d?/,NM=/\d\d\d\d?/,BM=/\d\d\d\d\d\d?/,XM=/\d{1,3}/,hM=/\d{1,4}/,mM=/[+-]?\d{1,6}/,gM=/\d+/,TM=/[+-]?\d+/,_M=/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){rM[M]=T(z)?z:function(M,p){return M&&b?b:z}}function wM(M,z){return A(rM,M)?rM[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,"\\$&")}rM={};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 HM(M,z,b){null!=z&&A(PM,M)&&PM[M](z,b._a,b,M)}var FM,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}FM=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",LM),EM("MM",LM,uM),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=FM.call(this._shortMonthsParse,c))?O:null:-1!==(O=FM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=FM.call(this._shortMonthsParse,c))||-1!==(O=FM.call(this._longMonthsParse,c))?O:null:-1!==(O=FM.call(this._longMonthsParse,c))||-1!==(O=FM.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",TM),EM("YY",LM,uM),EM("YYYY",hM,fM),EM("YYYYY",mM,lM),EM("YYYYYY",mM,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",LM),EM("ww",LM,uM),EM("W",LM),EM("WW",LM,uM),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",LM),EM("e",LM),EM("E",LM),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 Hz(M){return!0===M?vz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Fz(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=FM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=FM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=FM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=FM.call(this._weekdaysParse,c))||-1!==(O=FM.call(this._shortWeekdaysParse,c))||-1!==(O=FM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=FM.call(this._shortWeekdaysParse,c))||-1!==(O=FM.call(this._weekdaysParse,c))||-1!==(O=FM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=FM.call(this._minWeekdaysParse,c))||-1!==(O=FM.call(this._weekdaysParse,c))||-1!==(O=FM.call(this._shortWeekdaysParse,c))?O:null}function Yz(M,z,b){var p,O,o;if(this._weekdaysParseExact)return Fz.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",LM),EM("h",LM),EM("k",LM),EM("HH",LM,uM),EM("hh",LM,uM),EM("kk",LM,uM),EM("hmm",NM),EM("hmmss",BM),EM("Hmm",NM),EM("Hmmss",BM),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,yM(),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),HM(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]=Hb(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 Hb(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 Fb(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)?Fb(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===FM.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(_M,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 Hp(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 Fp(){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?F(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",F(b,"Z")):F(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=F(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")||HO.call(this),M?this._erasNameRegex:this._erasRegex}function wO(M){return A(this,"_erasAbbrRegex")||HO.call(this),M?this._erasAbbrRegex:this._erasRegex}function CO(M){return A(this,"_erasNarrowRegex")||HO.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||gM}function HO(){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 FO(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",gM),EM("yy",gM),EM("yyy",gM),EM("yyyy",gM),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})),FO("gggg","weekYear"),FO("ggggg","weekYear"),FO("GGGG","isoWeekYear"),FO("GGGGG","isoWeekYear"),bM("weekYear","gg"),bM("isoWeekYear","GG"),cM("weekYear",1),cM("isoWeekYear",1),EM("G",TM),EM("g",TM),EM("GG",LM,uM),EM("gg",LM,uM),EM("GGGG",hM,fM),EM("gggg",hM,fM),EM("GGGGG",mM,lM),EM("ggggg",mM,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",sM),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",LM),EM("DD",LM,uM),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(LM)[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",XM),EM("DDDD",RM),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",LM),EM("mm",LM,uM),xM(["m","mm"],VM);var zo=WM("Minutes",!1);x("s",["ss",2],0,"second"),bM("second","s"),cM("second",15),EM("s",LM),EM("ss",LM,uM),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",XM,sM),EM("SS",XM,uM),EM("SSS",XM,RM),bo="SSSS";bo.length<=9;bo+="S")EM(bo,gM);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=Hp,qo.clone=Fp,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=iM,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=Hz,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"),Ho=vo("y");function Fo(){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=Ho,nc.valueOf=So,nc._bubble=go,nc.clone=Fo,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",TM),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/get"),require("@digitransit-component/digitransit-component-suggestion-item"),require("lodash/isEqual"),require("lodash/memoize"),require("lodash/escapeRegExp"),require("lodash/cloneDeep"),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/get","@digitransit-component/digitransit-component-suggestion-item","lodash/isEqual","lodash/memoize","lodash/escapeRegExp","lodash/cloneDeep","@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.get,M.SuggestionItem,M.isEqual,M.memoize,M.escapeRegExp,M.cloneDeep,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),H=L(f),Y=L(l);function F(){return F=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},F.apply(this,arguments)}function U(M,z){return M&&z&&M===z}const j=["stop","station","favouriteStop","favouriteStation"],G=["favouriteVehicleRentalStation","bikestation"];function V(M){if(!M)return"";const z=M.split(":");return 0===z.length?"":`citybikes${z[0]}:bikestation:${z[1]}`}function K(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(G.includes(b.layer)&&G.includes(p.layer)){return(b.gid||V(b.labelId))===(p.gid||V(p.labelId))}if(b.gtfsId&&p.gtfsId)return b.gtfsId===p.gtfsId;if(j.includes(b.layer)&&j.includes(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 Q=M=>y.default(M)?M.toLowerCase():"",J="back",Z="currentPosition",$="favouriteStop",MM="favouriteStation",zM="favouritePlace",bM="favouriteRoute",pM="favouriteVehicleRentalStation",OM="futureRoute",oM="station",cM="selectFromMap",AM="ownLocations",qM="stop",eM="bikestation",nM="carpark",WM="bikepark",aM=({layer:M,type:z})=>"stop"===M||"favouriteStop"===M||"stop"===z||"favouriteStop"===z,tM=(M,z)=>{switch(M){case Z:return 1;case J:return.9;case cM:return.8;case AM:return.79;case MM:case zM:case $:case bM:case pM:return.45;case OM:return.44;case oM:return y.default(z)&&0===z.indexOf("gtfs")?.43:.42;case nM:case WM:case eM:return.38;case qM:return.36;default:return.41}},dM=(M,z,b="")=>{if(!Array.isArray(z))return z;const p=z=>y.default(z)&&M&&M.test(z),O=Q(b),o=p(O),c=S.default(z,[M=>o&&p(Q(M.properties.shortName))&&0===Q(M.properties.shortName).indexOf(O)?1:0,M=>{const{confidence:z,layer:b,source:p}=M.properties;if(0===O.length)return tM(b,p);if(!z)return tM(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=Q(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 oM:return z+(0===p.indexOf("gtfs")?.02:.01);case qM:case nM:case WM:return z-.05;case eM:return z-.04;default:return z}}],["desc","desc"]);return v.default(c,K)},iM=(M,z)=>null!=z&&-1!==M.lastIndexOf(z)?M.substring(0,M.lastIndexOf(z)-1):M;function rM(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=k.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 sM(M,z){return M?Object.keys(M).map((b=>{const p=z||b,O=M[b];return"object"==typeof O?sM(O,p):`${encodeURIComponent(p)}=${encodeURIComponent(O)}`})).join("&"):""}const uM=require("axios").default;function RM(M,z){return uM.get(encodeURI(M)+(z?(-1===M.search(/\?/)?"?":"&")+sM(z):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((M=>M.data))}const fM="https://api.digitransit.fi/geocoding/v1/search";function lM(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||fM;let n=F({text:q},z,p,{lang:b});if(O&&(n=F({},n,{sources:O})),A){n=F({},n,{layers:A.toString()})}return RM(e,n).then((M=>M.features))}function LM(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},`,F({},M,{gid:p})})).reduce((function(M,z){return M[z.gid]=z,M}),{});return RM(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:aM(M.properties)?"favouriteStop":"favouriteStation"},geometry:M.geometry})))))}function NM(M,z,b){let p=rM(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=F({},M,{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete z.properties.confidence,z})))}const BM=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE"],XM=["favouritePlace","venue","address","street"],hM=["carpark","bikepark"];const mM=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,getFavouriteVehicleRentalStationsQuery:s,getFavouriteVehicleRentalStations: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)}:{},H=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.getFavouriteVehicleRentalStations(M.context);if((null==b?void 0:b.length)>0)return!0;const p=M.getFavouriteStops(M.context);return(null==p?void 0:p.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(rM(M,z,["address","name"]).map((M=>({type:"FavouritePlace",properties:F({},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(lM(c,M,x,I,p,h,B,z))}if(w||z.includes("History")){const M=a(L,"endpoint"),z=["currentPosition","selectFromMap","futureRoute","ownLocations","vehicleRentalStation","bikepark","carpark","stop","back"];z.push(...BM),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(lM(c,M,x,I,b,h,B,z).then((M=>O?O(M,H):M)))}if(w||z.includes("History")){const M=a(L),z=["currentPosition","selectFromMap","futureRoute","ownLocations","favouritePlace","bikestation","vehicleRentalStation","back","stop","station"];z.push(...BM),z.push(...XM),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))?LM(M,m).then((M=>O?O(M,H):M)):r(M).then((M=>LM(M,m))).then((M=>O?O(M,H):M)),D.push(function(M,z){return M.then((M=>rM(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(lM(c,b,x,I,p,h,B,z).then((M=>O?O(M,H):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","vehicleRentalStation","back"];z.push(...BM),z.push(...XM),z.push(...hM),b?("route-CITYBIKE"!==b&&(z.push("vehicleRentalStation"),z.push("bikestation")),D.push(NM(M,c,z).then((M=>O?O(M,H):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,H,q).then((M=>O?O(M,H,"Routes"):M)))}if(D.push(l(c,g,b,q).then((M=>O?O(M,H,"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("vehicleRentalStation"),z.push("bikestation")),z.push(...BM.filter((M=>!(M===b))))),z.push(...XM),D.push(NM(M,c,z).then((M=>O?O(M,H,"Routes"):M)))}}if(E||M.includes("VehicleRentalStations")){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(lM(c,z,x,I,k.join(","),h,B,M).then((M=>O?O(M,H,"VehicleRentalStations"):M)))}}Promise.all(D).then(T.default).then((M=>{P.results=M})).catch((M=>{P.error=M})).then((()=>{A(F({},P,{results:dM(X,P.results,c)}))}))}),300,{leading:!0}),gM=M=>M.localadmin||M.locality||M.address&&M.address.lastIndexOf(",")<M.address.length-2&&M.address.substring(M.address.lastIndexOf(",")+2)||"",TM=({id:M,code:z})=>z||(void 0!==M&&void 0!==M.indexOf&&-1!==M.indexOf("#")?M.substring(M.indexOf("#")+1):void 0),_M=C.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(`${D.default(b)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":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(`${D.default(M.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return z?[M.name||M.label||M.address&&M.address.split(",")[0],gM(M)]:[M.name,M.id,TM(M),gM(M)];default:return[M.name||M.label||M.address&&M.address.split(",")[0],gM(M)]}var b,p}),((M,z)=>{const b=P.default(M);return b.plain=z,b}));function yM(){throw new Error("Dynamic requires are not currently supported by rollup-plugin-commonjs")}function SM(M,z){return M(z={exports:{}},z.exports),z.exports}var vM,kM=SM((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 H(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 Y(M,z){return M.isValid()?(z=F(z,M.localeData()),D[z]=D[z]||H(z),D[z](M)):M.localeData().invalidDate()}function F(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 iM(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 rM,sM=/\d/,uM=/\d\d/,RM=/\d{3}/,fM=/\d{4}/,lM=/[+-]?\d{6}/,LM=/\d\d?/,NM=/\d\d\d\d?/,BM=/\d\d\d\d\d\d?/,XM=/\d{1,3}/,hM=/\d{1,4}/,mM=/[+-]?\d{1,6}/,gM=/\d+/,TM=/[+-]?\d+/,_M=/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){rM[M]=T(z)?z:function(M,p){return M&&b?b:z}}function wM(M,z){return A(rM,M)?rM[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,"\\$&")}rM={};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 HM(M,z,b){null!=z&&A(PM,M)&&PM[M](z,b._a,b,M)}var YM,FM=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}YM=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",LM),EM("MM",LM,uM),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=YM.call(this._shortMonthsParse,c))?O:null:-1!==(O=YM.call(this._longMonthsParse,c))?O:null:"MMM"===z?-1!==(O=YM.call(this._shortMonthsParse,c))||-1!==(O=YM.call(this._longMonthsParse,c))?O:null:-1!==(O=YM.call(this._longMonthsParse,c))||-1!==(O=YM.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",TM),EM("YY",LM,uM),EM("YYYY",hM,fM),EM("YYYYY",mM,lM),EM("YYYYYY",mM,lM),xM(["YYYYY","YYYYYY"],FM),xM("YYYY",(function(M,z){z[FM]=2===M.length?p.parseTwoDigitYear(M):nM(M)})),xM("YY",(function(M,z){z[FM]=p.parseTwoDigitYear(M)})),xM("Y",(function(M,z){z[FM]=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",LM),EM("ww",LM,uM),EM("W",LM),EM("WW",LM,uM),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",LM),EM("e",LM),EM("E",LM),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 Hz(M){return!0===M?vz(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin}function Yz(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=YM.call(this._weekdaysParse,c))?O:null:"ddd"===z?-1!==(O=YM.call(this._shortWeekdaysParse,c))?O:null:-1!==(O=YM.call(this._minWeekdaysParse,c))?O:null:"dddd"===z?-1!==(O=YM.call(this._weekdaysParse,c))||-1!==(O=YM.call(this._shortWeekdaysParse,c))||-1!==(O=YM.call(this._minWeekdaysParse,c))?O:null:"ddd"===z?-1!==(O=YM.call(this._shortWeekdaysParse,c))||-1!==(O=YM.call(this._weekdaysParse,c))||-1!==(O=YM.call(this._minWeekdaysParse,c))?O:null:-1!==(O=YM.call(this._minWeekdaysParse,c))||-1!==(O=YM.call(this._weekdaysParse,c))||-1!==(O=YM.call(this._shortWeekdaysParse,c))?O:null}function Fz(M,z,b){var p,O,o;if(this._weekdaysParseExact)return Yz.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",LM),EM("h",LM),EM("k",LM),EM("HH",LM,uM),EM("hh",LM,uM),EM("kk",LM,uM),EM("hmm",NM),EM("hmmss",BM),EM("Hmm",NM),EM("Hmmss",BM),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,yM(),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[FM],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<FM||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[FM],p[FM]),(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[FM],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[FM],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[FM]=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=F(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),HM(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]=Hb(M._locale,M._a[GM],M._meridiem),null!==(A=r(M).era)&&(M._a[FM]=M._locale.erasConvertYear(A,M._a[FM])),Pb(M),fb(M)}else Eb(M);else Tb(M)}function Hb(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 Yb(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 Fb(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)?Yb(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)?Fb(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===YM.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(_M,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 Hp(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 Yp(){return new L(this)}function Fp(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?Y(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",Y(b,"Z")):Y(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=Y(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")||HO.call(this),M?this._erasNameRegex:this._erasRegex}function wO(M){return A(this,"_erasAbbrRegex")||HO.call(this),M?this._erasAbbrRegex:this._erasRegex}function CO(M){return A(this,"_erasNarrowRegex")||HO.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||gM}function HO(){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 YO(M,z){x(0,[M,M.length],0,z)}function FO(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",gM),EM("yy",gM),EM("yyy",gM),EM("yyyy",gM),EM("yo",IO),xM(["y","yy","yyy","yyyy"],FM),xM(["yo"],(function(M,z,b,p){var O;b._locale._eraYearOrdinalRegex&&(O=M.match(b._locale._eraYearOrdinalRegex)),b._locale.eraYearOrdinalParse?z[FM]=b._locale.eraYearOrdinalParse(M,O):z[FM]=parseInt(M,10)})),x(0,["gg",2],0,(function(){return this.weekYear()%100})),x(0,["GG",2],0,(function(){return this.isoWeekYear()%100})),YO("gggg","weekYear"),YO("ggggg","weekYear"),YO("GGGG","isoWeekYear"),YO("GGGGG","isoWeekYear"),bM("weekYear","gg"),bM("isoWeekYear","GG"),cM("weekYear",1),cM("isoWeekYear",1),EM("G",TM),EM("g",TM),EM("GG",LM,uM),EM("gg",LM,uM),EM("GGGG",hM,fM),EM("gggg",hM,fM),EM("GGGGG",mM,lM),EM("ggggg",mM,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",sM),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",LM),EM("DD",LM,uM),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(LM)[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",XM),EM("DDDD",RM),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",LM),EM("mm",LM,uM),xM(["m","mm"],VM);var zo=WM("Minutes",!1);x("s",["ss",2],0,"second"),bM("second","s"),cM("second",15),EM("s",LM),EM("ss",LM,uM),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",XM,sM),EM("SS",XM,uM),EM("SSS",XM,RM),bo="SSSS";bo.length<=9;bo+="S")EM(bo,gM);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=Hp,qo.clone=Yp,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=Fp,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=iM,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=FO,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=Hz,ao.weekdaysShort=Iz,ao.weekdaysParse=Fz,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"),Ho=vo("y");function Yo(){return gp(this)}function Fo(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=Ho,nc.valueOf=So,nc._bubble=go,nc.clone=Yo,nc.get=Fo,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",TM),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}()})),EM=SM((function(M){
|
|
4
4
|
//! moment-timezone.js
|
|
@@ -10,5 +10,5 @@ var z,b;z=this,b=function(M){void 0===M.version&&M.default&&(M=M.default);var z,
|
|
|
10
10
|
//! moment.js locale configuration
|
|
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(kM)})),SM((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(kM)})),SM((function(M,z){var b;b=function(M){
|
|
12
12
|
//! moment.js locale configuration
|
|
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(kM)}));const FM={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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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",vehiclerentalstation:"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":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","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":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","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 YM(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 UM={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"};YM("/* 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 jM={"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"};YM("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 GM={"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"};YM("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 VM extends m.default{constructor(M){super(M);const z=this;z.onSuggestionTouchMove=()=>{z.justSelectedSuggestion=!1,z.pressedSuggestion=null}}}const KM=({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?jM:GM,T=`${z}-input`,_=`${z}-label`,[y,S]=b.useState(!1),v=B.default.useRef();b.useEffect((()=>{H.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(H.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(VM,{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(F.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&&(KM.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 QM,JM=SM((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)}())})),ZM=(QM=JM)&&QM.__esModule&&Object.prototype.hasOwnProperty.call(QM,"default")?QM.default:QM;HM.locale("en"),X.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});"production"!==process.env.NODE_ENV&&N.default.node;const $M=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 Mz(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]=_M(M.properties,!0);if(M.properties.layer.toLowerCase().includes("bikerental")||M.properties.layer.toLowerCase().includes("bikestation")){b=X.default.t("vehiclerentalstation");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=TM(M.properties),c=null===(z=M.properties.addendum)||void 0===z?void 0:z.GTFS.modes,A=$M(M.properties.addendum);return[b,iM(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?iM(z.split(",")[0],o):p,O,o,void 0,$M(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 zz(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 bz 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=_M(M,!0);switch(M.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return z[1]||z[0];case"favouriteVehicleRentalStation":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:UM["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("VehicleRentalStations"))&&b.push("VehicleRentalStations")):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),mM(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:zz(M)}):M,b=Mz(M);return B.default.createElement(E.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(Mz(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(FM).forEach((M=>{X.default.addResourceBundle(M,"translation",FM[M])}))}shouldComponentUpdate(M,z){return!w.default(z,this.state)||!w.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:`${UM.input} ${this.props.isMobile&&this.props.transportMode?UM.thin:""} ${UM[this.props.id]||""} ${this.state.value?UM.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-","").concat(".");const A=this.props.required?`${X.default.t("required")}.`:"",q=this.props.isMobile?X.default.t("search-autosuggest-label-instructions-mobile"):X.default.t("search-autosuggest-label-instructions-desktop"),e="origin"===this.props.id?X.default.t("search-autosuggest-label-move-to-destination"):"",n=q.concat(" ").concat(e),W=X.default.t("search-autosuggest-len",{count:z.length}),a=()=>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:UM["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${W} ${a()}`),this.props.isMobile&&B.default.createElement(KM,{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(a()),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(UM["autosuggest-input-container"],UM[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&B.default.createElement("div",{className:h.default(UM["autosuggest-input-icon"],UM[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":A.concat(" ").concat(c).concat(" ").concat(X.default.t("search-autosuggest-label"))},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:UM,renderInputComponent:M=>B.default.createElement(B.default.Fragment,null,B.default.createElement("label",{className:UM["sr-only"],htmlFor:this.props.id},a().concat(" ").concat(A).concat(" ").concat(c).concat(" ").concat(n)),B.default.createElement("input",Object.assign({"aria-label":a().concat(" ").concat(A).concat(" ").concat(c).concat(" ").concat(n),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},M)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}bz.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&&(bz.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 pz=(Oz=bz,M=>{const{lock:z,unlock:b}=ZM.useScrollLock();return B.default.createElement(Oz,Object.assign({lock:z,unlock:b},M))});var Oz;M.default=pz,Object.defineProperty(M,"__esModule",{value:!0})}));
|
|
14
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50LXRpbWV6b25lL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vYmlsZVNlYXJjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsIi8qKlxuICogIGFjY2VwdCBlcXVhbGl0eSBvZiBub24gbnVsbGlzaCB2YWx1ZXNcbiAqXG4gKiBAbmFtZSB0cnVFcVxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHZhbDEgRmlyc3QgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSBwYXJhbTIgU2Vjb25kIHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwudHJ1RXEoJzInLCAnMicpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cnVFcSh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiB2YWwxICYmIHZhbDIgJiYgdmFsMSA9PT0gdmFsMjtcbn1cbiIsImltcG9ydCB0cnVFcSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxJztcbi8qKlxuICogQ2hlY2tzIHRoYXQgaXMgaXRlbXMgZHVwbGljYXRlXG4gKlxuICogQG5hbWUgaXNEdXBsaWNhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMSBPYmplY3QgY29udGFpbmluZyBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIHtcbiAqICBwcm9wZXJ0aWVzIHtcbiAqICAgICAgZ3Rmc0lkOiBTdHJpbmdcbiAqICAgICAgZ2lkOiBTdHJpbmcgZnJvbSBnZW9jb2RlclxuICogICAgICBuYW1lOiBTdHJpbmdcbiAqICAgICAgbGFiZWw6IFN0cmluZ1xuICogICAgICAgYWRkcmVzczogU3RyaW5nXG4gKiAgICAgIGdlb21ldHJ5IHtcbiAqICAgICAgICAgY29vcmRpbmF0ZXMgW051bWJlciBsYXQsIE51bWJlciBsb25dXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTIgT2JqZWN0IHdpdGggc2FtZSBhdHRyaWJ1dGVzIGFzIGl0ZW0xXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuaXNEdXBsaWNhdGUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5cbmNvbnN0IGd0ZnNTdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nLCAnZmF2b3VyaXRlU3RvcCcsICdmYXZvdXJpdGVTdGF0aW9uJ107XG5jb25zdCB2ZWhpY2xlUmVudGFsTGF5ZXJzID0gWydmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsICdiaWtlc3RhdGlvbiddO1xuXG5mdW5jdGlvbiBsYWJlbElkVG9HaWQoaWQpIHtcbiAgaWYgKCFpZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBwYXJ0cyA9IGlkLnNwbGl0KCc6Jyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGBjaXR5YmlrZXMke3BhcnRzWzBdfTpiaWtlc3RhdGlvbjoke3BhcnRzWzFdfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRHVwbGljYXRlKGl0ZW0xLCBpdGVtMikge1xuICBjb25zdCBwcm9wczEgPSBpdGVtMS5wcm9wZXJ0aWVzO1xuICBjb25zdCBwcm9wczIgPSBpdGVtMi5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnICYmIGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBjb25zdCBvMSA9IHByb3BzMS5vcmlnaW47XG4gICAgY29uc3QgZDEgPSBwcm9wczEuZGVzdGluYXRpb247XG4gICAgY29uc3QgbzIgPSBwcm9wczIub3JpZ2luO1xuICAgIGNvbnN0IGQyID0gcHJvcHMyLmRlc3RpbmF0aW9uO1xuXG4gICAgY29uc3QgbmFtZTEgPSBgJHtvMS5uYW1lfS8vJHtvMS5sb2NhbGl0eX0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxpdHl9YDtcbiAgICBjb25zdCBuYW1lMiA9IGAke28yLm5hbWV9Ly8ke28yLmxvY2FsaXR5fS8vJHtkMi5uYW1lfS8vJHtkMi5sb2NhbGl0eX1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtpdGVtLmd0ZnNJZH0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0LiBUaGUgYmVzdCBtYXRjaCB3aWxsIGJlIHJldHVybmVkIChtaW46IDAsIG1heDogMS41KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0pXG4gICAgLmZpbHRlcih2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZSh2YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBdLFxuICAgIFsnZGVzYycsICdkZXNjJ10sXG4gICk7XG5cbiAgcmV0dXJuIHVuaXFXaXRoKG9yZGVyZWRSZXN1bHRzLCBpc0R1cGxpY2F0ZSk7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzdG9wJ3MgbmFtZSB3aXRob3V0IHN0b3AgY29kZSBmcm9tIGEgc3RvcCBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgc3RvcCdzIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9wQ29kZSBzdG9wIGNvZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9wTmFtZSA9IChuYW1lLCBzdG9wQ29kZSkgPT4ge1xuICBpZiAoXG4gICAgc3RvcENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN0b3BDb2RlICE9PSBudWxsICYmXG4gICAgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgIT09IC0xXG4gICkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAtIDEpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIChtYXAsIHN0b3BPclN0YXRpb24pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0U3RvcmUoJ1ByZWZlcmVuY2VzU3RvcmUnKS5nZXRMYW5ndWFnZSgpLCBUT0RPIGVuYWJsZSB0aGlzIHdoZW4gT1RQIHN1cHBvcnRzIHRyYW5zbGF0aW9uc1xuICB9KS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcy5tYXAoc3RvcCA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSB7XG4gICAgICAgIHR5cGU6ICdGYXZvdXJpdGVTdG9wJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFkZGVuZHVtOiBzdG9wLnByb3BlcnRpZXMuYWRkZW5kdW0sXG4gICAgICAgICAgZ2lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5naWQsXG4gICAgICAgICAgY29kZTogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uY29kZSxcbiAgICAgICAgICBndGZzSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmd0ZnNJZCxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0ubGFzdFVwZGF0ZWQsXG4gICAgICAgICAgZmF2b3VyaXRlSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmZhdm91cml0ZUlkLFxuICAgICAgICAgIGFkZHJlc3M6IHN0b3AucHJvcGVydGllcy5sYWJlbCxcbiAgICAgICAgICBsYXllcjogaXNTdG9wKHN0b3AucHJvcGVydGllcykgPyAnZmF2b3VyaXRlU3RvcCcgOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiBzdG9wLmdlb21ldHJ5LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmYXZvdXJpdGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZXMsIGlucHV0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGZhdm91cml0ZXMsIGlucHV0LCBbJ2FkZHJlc3MnLCAnbmFtZSddKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgdHlwZTogJ0Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgbGF5ZXI6ICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFtpdGVtLmxvbiwgaXRlbS5sYXRdIH0sXG4gICAgfSkpLFxuICApO1xufVxuZnVuY3Rpb24gc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1tYXAnLFxuICAgICAgICAgIGxheWVyOiAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0N1cnJlbnRMb2NhdGlvbicsXG4gICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICd1c2Utb3duLXBvc2l0aW9uJyxcbiAgICAgICAgICBsYXllcjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbcG9zaXRpb24ubG9uLCBwb3NpdGlvbi5sYXRdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsXG4gICAgICAgICAgbGF5ZXI6ICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdzZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFja1N1Z2dlc3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYWNrJyxcbiAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgIGxhdDogbnVsbCxcbiAgICAgIGxvbjogbnVsbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWxJZDogJ2JhY2snLFxuICAgICAgICBsYXllcjogJ2JhY2snLFxuICAgICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0KSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHMgPT4ge1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoc3RvcHMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IHNlYXJjaENvbnRleHQuZ2V0RmF2b3VyaXRlU3RvcHMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgcmV0dXJuIGZhdm91cml0ZVN0b3BzPy5sZW5ndGggPiAwO1xufVxuXG5jb25zdCByb3V0ZUxheWVycyA9IFtcbiAgJ3JvdXRlLVRSQU0nLFxuICAncm91dGUtQlVTJyxcbiAgJ3JvdXRlLVJBSUwnLFxuICAncm91dGUtRkVSUlknLFxuICAncm91dGUtU1VCV0FZJyxcbiAgJ3JvdXRlLUFJUlBMQU5FJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsnZmF2b3VyaXRlUGxhY2UnLCAndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbi8qKlxuICogRXhlY3V0ZXMgdGhlIHNlYXJjaFxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFNlYXJjaFJlc3VsdHMoXG4gIHRhcmdldHMsXG4gIHNvdXJjZXMsXG4gIHRyYW5zcG9ydE1vZGUsXG4gIHNlYXJjaENvbnRleHQsXG4gIGZpbHRlclJlc3VsdHMsXG4gIGdlb2NvZGluZ1NpemUsXG4gIHsgaW5wdXQgfSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikge1xuICBjb25zdCB7XG4gICAgZ2V0UG9zaXRpb25zLFxuICAgIGdldEZhdm91cml0ZUxvY2F0aW9ucyxcbiAgICBnZXRPbGRTZWFyY2hlcyxcbiAgICBnZXRGYXZvdXJpdGVTdG9wcyxcbiAgICBwYXJraW5nQXJlYVNvdXJjZXMsXG4gICAgZ2V0TGFuZ3VhZ2UsXG4gICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zLFxuICAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVJvdXRlcyxcbiAgICBnZXRSb3V0ZXNRdWVyeSxcbiAgICBjb250ZXh0LFxuICAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogbG9jYXRpb25Bd2FyZSxcbiAgICBtaW5pbWFsUmVnZXhwLFxuICAgIGxpbmVSZWdleHAsXG4gICAgVVJMX1BFTElBUyxcbiAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgIGZlZWRJRHMsXG4gICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zLFxuICAgIGdlb2NvZGluZ1NvdXJjZXMsXG4gICAgZ2V0RnV0dXJlUm91dGVzLFxuICAgIGNpdHlCaWtlTmV0d29ya3MsXG4gIH0gPSBzZWFyY2hDb250ZXh0O1xuICAvLyBpZiBubyB0YXJnZXRzIGFyZSBwcm92aWRlZCwgc2VhcmNoIHRoZW0gYWxsLlxuICBjb25zdCBhbGxUYXJnZXRzID0gIXRhcmdldHMgfHwgdGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gIC8vIGlmIG5vIHNvdXJjZXMgYXJlIHByb3ZpZGVkLCB1c2UgdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFNvdXJjZXMgPSAhc291cmNlcyB8fCBzb3VyY2VzLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgcG9zaXRpb24gPSBnZXRQb3NpdGlvbnMoY29udGV4dCk7XG4gIGNvbnN0IHNlYXJjaENvbXBvbmVudHMgPSBbXTtcbiAgY29uc3Qgc2VhcmNoZXMgPSB7IHR5cGU6ICdhbGwnLCB0ZXJtOiBpbnB1dCwgcmVzdWx0czogW10gfTtcbiAgY29uc3QgbGFuZ3VhZ2UgPSBnZXRMYW5ndWFnZShjb250ZXh0KTtcbiAgY29uc3QgZm9jdXNQb2ludCA9XG4gICAgbG9jYXRpb25Bd2FyZSAmJiByZWZQb2ludD8ubGF0ICYmIHJlZlBvaW50Py5sb25cbiAgICAgID8ge1xuICAgICAgICAgIC8vIFJvdW5kIGNvb3JkaW5hdGVzIHRvIGFwcHJveCAxIGttLCBpbiBvcmRlciB0byBpbXByb3ZlIGNhY2hpbmdcbiAgICAgICAgICAnZm9jdXMucG9pbnQubGF0JzogcmVmUG9pbnQubGF0LnRvRml4ZWQoMyksXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50Lmxvbic6IHJlZlBvaW50Lmxvbi50b0ZpeGVkKDMpLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuICBjb25zdCBtb2RlID0gdHJhbnNwb3J0TW9kZSA/IHRyYW5zcG9ydE1vZGUuc3BsaXQoJy0nKVsxXSA6IHVuZGVmaW5lZDtcbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ0N1cnJlbnRQb3NpdGlvbicpICYmXG4gICAgcG9zaXRpb24uc3RhdHVzICE9PSAnZ2VvbG9jYXRpb24tbm90LXN1cHBvcnRlZCdcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTWFwUG9zaXRpb24nKSkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkpO1xuICB9XG4gIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdGdXR1cmVSb3V0ZXMnKSkge1xuICAgIGNvbnN0IGl0ZW1zID0gZ2V0RnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaCh0YWtlKGl0ZW1zLCAzKSk7XG4gIH1cbiAgaWYgKFxuICAgIHRhcmdldHMuaW5jbHVkZXMoJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSAmJlxuICAgIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dClcbiAgKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItZGVzdHJ1Y3R1cmluZ1xuICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZUxvY2F0aW9ucyA9IGdldEZhdm91cml0ZUxvY2F0aW9ucyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZUxvY2F0aW9ucywgaW5wdXQpLFxuICAgICAgKTtcbiAgICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdCYWNrJykpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKGdldEJhY2tTdWdnZXN0aW9uKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gWydzdGF0aW9uJywgJ3ZlbnVlJywgJ2FkZHJlc3MnLCAnc3RyZWV0J107XG4gICAgICBjb25zdCBmZWVkaXMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApO1xuICAgICAgY29uc3QgZ2Vvc291cmNlcyA9IGdlb2NvZGluZ1NvdXJjZXMuY29uY2F0KGZlZWRpcykuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb3NvdXJjZXMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgbG9jYXRpb25IaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCwgJ2VuZHBvaW50Jyk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ3ZlaGljbGVSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2Jpa2VwYXJrJyxcbiAgICAgICAgJ2NhcnBhcmsnLFxuICAgICAgICAnc3RvcCcsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhsb2NhdGlvbkhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1BhcmtpbmdBcmVhcycpKSB7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgICBpZiAoZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCkge1xuICAgICAgICBzZWFyY2hQYXJhbXMuc2l6ZSA9IGdlb2NvZGluZ1NpemU7XG4gICAgICB9XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbiAgICAgIGNvbnN0IGZlZWRJZHMgPSBwYXJraW5nQXJlYVNvdXJjZXMgPyBwYXJraW5nQXJlYVNvdXJjZXMuam9pbignLCcpIDogbnVsbDtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkSWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3QgaGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdiaWtlc3RhdGlvbicsXG4gICAgICAgICd2ZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiYWNrJyxcbiAgICAgICAgJ3N0b3AnLFxuICAgICAgICAnc3RhdGlvbicsXG4gICAgICBdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpKSB7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVTdG9wcyA9IGdldEZhdm91cml0ZVN0b3BzKGNvbnRleHQpO1xuICAgICAgbGV0IHN0b3BzQW5kU3RhdGlvbnM7XG4gICAgICBpZiAoZmF2b3VyaXRlU3RvcHMuZXZlcnkoc3RvcCA9PiBzdG9wLnR5cGUgPT09ICdzdGF0aW9uJykpIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BzRnJvbUdlb2NvZGluZyhcbiAgICAgICAgICBmYXZvdXJpdGVTdG9wcyxcbiAgICAgICAgICBVUkxfUEVMSUFTX1BMQUNFLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkoZmF2b3VyaXRlU3RvcHMpXG4gICAgICAgICAgLnRoZW4oZmF2b3VyaXRlcyA9PlxuICAgICAgICAgICAgZ2V0U3RvcHNGcm9tR2VvY29kaW5nKGZhdm91cml0ZXMsIFVSTF9QRUxJQVNfUExBQ0UpLFxuICAgICAgICAgIClcbiAgICAgICAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQpKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkaXMgPSBmZWVkSURzLm1hcCh2ID0+IGBndGZzJHt2fWApLmpvaW4oJywnKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBmZWVkaXMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBzdG9wSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpLmZpbHRlcihpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0ucHJvcGVydGllcy5naWQpIHtcbiAgICAgICAgICByZXR1cm4gaXRlbS5wcm9wZXJ0aWVzLmdpZC5pbmNsdWRlcygnR1RGUzonKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICd2ZWhpY2xlUmVudGFsU3RhdGlvbicsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGlmICh0cmFuc3BvcnRNb2RlICE9PSAncm91dGUtQ0lUWUJJS0UnKSB7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCd2ZWhpY2xlUmVudGFsU3RhdGlvbicpO1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgnYmlrZXN0YXRpb24nKTtcbiAgICAgICAgfVxuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlKSA6IHJlc3VsdCxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycyksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUm91dGVzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVJvdXRlcyA9IGdldEZhdm91cml0ZVJvdXRlcyhjb250ZXh0KTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlUm91dGVzLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIG1vZGUsXG4gICAgICAgICAgcGF0aE9wdHMsXG4gICAgICAgICkudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgIGdldFJvdXRlc1F1ZXJ5KGlucHV0LCBmZWVkSURzLCB0cmFuc3BvcnRNb2RlLCBwYXRoT3B0cykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgZmlsdGVyUmVzdWx0cyA/IGZpbHRlclJlc3VsdHMocmVzdWx0LCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHQsXG4gICAgICApLFxuICAgICk7XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCByb3V0ZUhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICAgICdzdG9wJyxcbiAgICAgICAgJ3N0YXRpb24nLFxuICAgICAgICAnYmlrZXBhcmsnLFxuICAgICAgICAnY2FycGFyaycsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAnYmFjaycsXG4gICAgICBdO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydE1vZGUgIT09ICdyb3V0ZS1DSVRZQklLRScpIHtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3ZlaGljbGVSZW50YWxTdGF0aW9uJyk7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlc3RhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhyb3V0ZUhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKS50aGVuKHJlc3VsdHMgPT5cbiAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlLCAnUm91dGVzJykgOiByZXN1bHRzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uID0gZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zKFxuICAgICAgICBjb250ZXh0LFxuICAgICAgKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkoXG4gICAgICAgICAgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24sXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9XG4gICAgICAgIGdlb2NvZGluZ1NpemUgJiYgZ2VvY29kaW5nU2l6ZSAhPT0gMTAgPyB7IHNpemU6IGdlb2NvZGluZ1NpemUgfSA6IHt9O1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGNpdHlCaWtlTmV0d29ya3Muam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSwgJ1ZlaGljbGVSZW50YWxTdGF0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxpdHkgKGNpdHkgbmFtZSkgZm9yIHN1Z2dlc3Rpb25zXG4gKlxuICogQG5hbWUgZ2V0TG9jYWxpdHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBzdWdnZXN0aW9uIHN1Z2dlc3Rpb24ncyBwcm9wZXJ0aWVzIGZyb20gZ2VvY29kaW5nIG9yIGEgZmF2b3VyaXRlIHN0b3Avc3RhdGlvbi5cbiAqIEV4cGVjdHMgbGFzdCBwYXJ0IG9mIGFuIGFkZHJlc3MgKGFmdGVyICcsJykgdG8gY29udGFpbiB0aGUgY2l0eSBuYW1lIG9mIHRoZSBzdWdnZXN0aW9uIGxvY2F0aW9uLlxuICogQHJldHVybnMge1N0cmluZ30gIENpdHkgbmFtZSBvciBlbXB0eSBzdHJpbmdcbiAqL1xuY29uc3QgZ2V0TG9jYWxpdHkgPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsaXR5IHx8XG4gIChzdWdnZXN0aW9uLmFkZHJlc3MgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSA8IHN1Z2dlc3Rpb24uYWRkcmVzcy5sZW5ndGggLSAyICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLnN1YnN0cmluZyhzdWdnZXN0aW9uLmFkZHJlc3MubGFzdEluZGV4T2YoJywnKSArIDIpKSB8fFxuICAnJztcblxuZXhwb3J0IGNvbnN0IGdldFN0b3BDb2RlID0gKHsgaWQsIGNvZGUgfSkgPT4ge1xuICBpZiAoY29kZSkge1xuICAgIHJldHVybiBjb2RlO1xuICB9XG4gIGlmIChcbiAgICBpZCA9PT0gdW5kZWZpbmVkIHx8XG4gICAgdHlwZW9mIGlkLmluZGV4T2YgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgaWQuaW5kZXhPZignIycpID09PSAtMVxuICApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIC8vIGlkIGZyb20gcGVsaWFzXG4gIHJldHVybiBpZC5zdWJzdHJpbmcoaWQuaW5kZXhPZignIycpICsgMSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCA9IChuYW1lLCBhZGRyZXNzKSA9PiBbXG4gIG5hbWUgfHwgKGFkZHJlc3MgJiYgYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnXG4gICAgPyBhZGRyZXNzLnJlcGxhY2UobmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAobmFtZSl9KFsgLF18JCkrYCksICcnKVxuICAgIDogJycsXG5dO1xuXG4vKipcbiAqIEZvcm1hdCBzdWdnZXN0aW9uLXBhaXIgW25hbWUsIGFkZHJlc3NdIGJ5IGBzdWdnZXN0aW9uLmxheWVyYC5cbiAqXG4gKiBAbmFtZSBnZXROYW1lTGFiZWxcbiAqIEBwYXJhbSB7TG9jYXRpb25Qcm9wZXJ0aWVzfSBzdWdnZXN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtwbGFpbl1cbiAqXG4gKiBAcmV0dXJucyB7QXJyYXkuPHN0cmluZz59IEZvcm1hdHRlZCBsYWJlbC5cbiAqL1xuZXhwb3J0IGNvbnN0IGdldE5hbWVMYWJlbCA9IG1lbW9pemUoXG4gIChzdWdnZXN0aW9uLCBwbGFpbiA9IGZhbHNlKSA9PiB7XG4gICAgc3dpdGNoIChzdWdnZXN0aW9uLmxheWVyKSB7XG4gICAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZCwgc3VnZ2VzdGlvbi5hZGRyZXNzXTtcbiAgICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICAgIGNhc2UgJ2JhY2snOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubGFiZWxJZF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVQbGFjZSc6XG4gICAgICAgIHJldHVybiBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsKHN1Z2dlc3Rpb24ubmFtZSwgc3VnZ2VzdGlvbi5hZGRyZXNzKTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ2Jpa2VzdGF0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLm5hbWVdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUm91dGUnOlxuICAgICAgY2FzZSAncm91dGUtQlVTJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVRSQU0nOlxuICAgICAgY2FzZSAncm91dGUtUkFJTCc6XG4gICAgICBjYXNlICdyb3V0ZS1TVUJXQVknOlxuICAgICAgY2FzZSAncm91dGUtRkVSUlknOlxuICAgICAgY2FzZSAncm91dGUtRlVOSUNVTEFSJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUFJUlBMQU5FJzpcbiAgICAgICAgcmV0dXJuICFwbGFpbiAmJiBzdWdnZXN0aW9uLnNob3J0TmFtZVxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmd0ZnNJZCxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5tb2RlLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uc2hvcnROYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmFnZW5jeSA/IHN1Z2dlc3Rpb24uYWdlbmN5Lm5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBdO1xuICAgICAgY2FzZSAndmVudWUnOlxuICAgICAgY2FzZSAnYWRkcmVzcyc6XG4gICAgICBjYXNlICdzdHJlZXQnOlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsLnJlcGxhY2UoXG4gICAgICAgICAgICBuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChzdWdnZXN0aW9uLm5hbWUpfSgsKT8oICk/YCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICApLFxuICAgICAgICBdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlU3RvcCc6XG4gICAgICBjYXNlICdzdG9wJzpcbiAgICAgICAgcmV0dXJuIHBsYWluXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmIHN1Z2dlc3Rpb24uYWRkcmVzcy5zcGxpdCgnLCcpWzBdKSxcbiAgICAgICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICBdXG4gICAgICAgICAgOiBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5pZCxcbiAgICAgICAgICAgICAgZ2V0U3RvcENvZGUoc3VnZ2VzdGlvbiksXG4gICAgICAgICAgICAgIGdldExvY2FsaXR5KHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxpdHkoc3VnZ2VzdGlvbiksXG4gICAgICAgIF07XG4gICAgfVxuICB9LFxuICAoaXRlbSwgcGxhaW4pID0+IHtcbiAgICBjb25zdCBpID0gY2xvbmVEZWVwKGl0ZW0pO1xuICAgIGkucGxhaW4gPSBwbGFpbjtcbiAgICByZXR1cm4gaTtcbiAgfSxcbik7XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgZmVhdHVyZXMgYXJlIHVuaXF1ZSBieSBsYWJlbFxuICpcbiAqIEBuYW1lIHVuaXFCeUxhYmVsXG4gKiBAcGFyYW0ge0FycmF5fSBmZWF0dXJlcyBBcnJheSBvZiBmZWF0dXJlc1xuICogQHJldHVybnMge0FycmF5fSAgQXJyYXkgb2YgdW5pcXVlIGZlYXR1cmVzXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwudW5pcUJ5TGFiZWwoZmVhdHVyZXMpO1xuICogLy89IEFycmF5KDIpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXFCeUxhYmVsKGZlYXR1cmVzKSB7XG4gIHJldHVybiB1bmlxV2l0aChmZWF0dXJlcywgKGZlYXQxLCBmZWF0MikgPT4ge1xuICAgIGlmIChmZWF0MS50eXBlID09PSAnRnV0dXJlUm91dGUnIHx8IGZlYXQyLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGlzRXF1YWwoZ2V0TmFtZUxhYmVsKGZlYXQxLnByb3BlcnRpZXMpLCBnZXROYW1lTGFiZWwoZmVhdDIucHJvcGVydGllcykpICYmXG4gICAgICBmZWF0MS5wcm9wZXJ0aWVzLmxheWVyID09PSBmZWF0Mi5wcm9wZXJ0aWVzLmxheWVyXG4gICAgKTtcbiAgfSk7XG59XG4iLCIvLyEgbW9tZW50LmpzXG4vLyEgdmVyc2lvbiA6IDIuMjkuNFxuLy8hIGF1dGhvcnMgOiBUaW0gV29vZCwgSXNrcmVuIENoZXJuZXYsIE1vbWVudC5qcyBjb250cmlidXRvcnNcbi8vISBsaWNlbnNlIDogTUlUXG4vLyEgbW9tZW50anMuY29tXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/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/IGZvcm1hdFtrZXldWzBdIDogZm9ybWF0W2tleV1bMV07XG4gICAgfVxuXG4gICAgdmFyIGRlID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZGUnLCB7XG4gICAgICAgIG1vbnRoczogJ0phbnVhcl9GZWJydWFyX03DpHJ6X0FwcmlsX01haV9KdW5pX0p1bGlfQXVndXN0X1NlcHRlbWJlcl9Pa3RvYmVyX05vdmVtYmVyX0RlemVtYmVyJy5zcGxpdChcbiAgICAgICAgICAgICdfJ1xuICAgICAgICApLFxuICAgICAgICBtb250aHNTaG9ydDpcbiAgICAgICAgICAgICdKYW4uX0ZlYi5fTcOkcnpfQXByLl9NYWlfSnVuaV9KdWxpX0F1Zy5fU2VwLl9Pa3QuX05vdi5fRGV6Licuc3BsaXQoJ18nKSxcbiAgICAgICAgbW9udGhzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnU29ubnRhZ19Nb250YWdfRGllbnN0YWdfTWl0dHdvY2hfRG9ubmVyc3RhZ19GcmVpdGFnX1NhbXN0YWcnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXNTaG9ydDogJ1NvLl9Nby5fRGkuX01pLl9Eby5fRnIuX1NhLicuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdTb19Nb19EaV9NaV9Eb19Gcl9TYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNQYXJzZUV4YWN0OiB0cnVlLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnREQuTU0uWVlZWScsXG4gICAgICAgICAgICBMTDogJ0QuIE1NTU0gWVlZWScsXG4gICAgICAgICAgICBMTEw6ICdELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgTExMTDogJ2RkZGQsIEQuIE1NTU0gWVlZWSBISDptbScsXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICBzYW1lRGF5OiAnW2hldXRlIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICAgICAgbmV4dERheTogJ1ttb3JnZW4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIG5leHRXZWVrOiAnZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3REYXk6ICdbZ2VzdGVybiB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbbGV0enRlbl0gZGRkZCBbdW1dIExUIFtVaHJdJyxcbiAgICAgICAgfSxcbiAgICAgICAgcmVsYXRpdmVUaW1lOiB7XG4gICAgICAgICAgICBmdXR1cmU6ICdpbiAlcycsXG4gICAgICAgICAgICBwYXN0OiAndm9yICVzJyxcbiAgICAgICAgICAgIHM6ICdlaW4gcGFhciBTZWt1bmRlbicsXG4gICAgICAgICAgICBzczogJyVkIFNla3VuZGVuJyxcbiAgICAgICAgICAgIG06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBtbTogJyVkIE1pbnV0ZW4nLFxuICAgICAgICAgICAgaDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGhoOiAnJWQgU3R1bmRlbicsXG4gICAgICAgICAgICBkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgZGQ6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB3OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgd3c6ICclZCBXb2NoZW4nLFxuICAgICAgICAgICAgTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIE1NOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgeTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHl5OiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRlO1xuXG59KSkpO1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIGFkZHJlc3M6ICdBZHJlc3NlJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIE9ydCBvciBHZXNjaMOkZnQnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdGw7xnZSBad2lzY2hlbnppZWwgaGluenUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsdWcnLFxuICAgIGFycml2YWw6ICdBbmt1bmZ0JyxcbiAgICBiYWNrOiAnWnVyw7xjaycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdMZWlocmFkLVN0YXRpb24nLFxuICAgIGJ1czogJ0J1cycsXG4gICAgY2FuY2VsOiAnQWJicmVjaGVuJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ0zDtnNjaGVuJyxcbiAgICAnY2xlYXItc2VhcmNoLWhpc3RvcnknOiAnU3VjaGhpc3RvcmllIGzDtnNjaGVuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdBa3R1ZWxsZSBQb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnTMO2c2NoZW4nLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdXb2xsZW4gU2llIGRpZSBTdWNoLUhpc3RvcmllIGzDtnNjaGVuPycsXG4gICAgZGVwYXJ0dXJlOiAnQWJmYWhydCcsXG4gICAgZGVzdGluYXRpb246ICdaaWVsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnU3RhcnQgZWluZ2ViZW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdaaWVsIGVpbmdlYmVuLicsXG4gICAgZmF2b3VyaXRlOiAnRmF2b3JpdGVuJyxcbiAgICBmZXJyeTogJ0bDpGhyZScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdadWvDvG5mdGlnZSBWZXJiaW5kdW5nJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdFaWdlbmUgRmF2b3JpdGVuJyxcbiAgICBsb2FkaW5nOiAnTGFkZW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICByYWlsOiAnWnVnJyxcbiAgICBzZWFyY2g6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1N1Y2hlIGFuaGFuZCB2b24gQWRyZXNzZSBvZGVyIE9ydHNhbmdhYmUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N1Y2hlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1N1Y2hlIFppZWxvcnQsIExpbmllIG9yIEhhbHRlc3RlbGxlJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1ppZWxvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdFcmdlYm5pc3NlIGluIOKAnFppZWxvcnTigJ0tUmVpdGVyIGFuemVpZ2VuJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnS2VpbiBPcnQgZ2VmdW5kZW4uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTdWNoZSBTdGFydG9ydCwgTGluaWUgb2RlciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3RhcnRvcnQgZWluZ2ViZW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU3RhbmRvcnQgZXJtaXR0ZWxuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdBa3R1ZWxsZSBBdXN3YWhsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJhw59lJyxcbiAgICBzdWJ3YXk6ICdVLUJhaG4nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSGFsdGVzdGVsbGUnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1N1Y2hlIEhhbHRlc3RlbGxlbiB1bmQgTGluaWVuIGluIGRlciBOw6RoZScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1N1Y2hlIEJ1c2xpbmllbiBvciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1N1Y2hlIExlaWhyYWQtU3RhdGlvbmVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1N1Y2hlIFp1Z3ZlcmJpbmR1bmdlbiBvZGVyIEJhaG5ow7ZmZScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1N1Y2hlIFUtQmFobi1MaW5pZW4gb2RlciBIYWx0ZXN0ZWxsZW4nLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU3VjaGUgU3RhZHRiYWhuLUhhbHRlc3RlbGxlbi1TdWNoZScsXG4gICAgJ3RvZGF5LWF0JzogJ0hldXRlIHVtJyxcbiAgICAndG9tb3Jyb3ctYXQnOiAnTW9yZ2VuIHVtJyxcbiAgICB0cmFtOiAnU3RyYcOfZW5iYWhuJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdCZW51dHplIGFrdHVlbGxlbiBTdGFuZG9ydCcsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdXw6RobGUgUG9zaXRpb24gYW5oYW5kIEthcnRlJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdBdXMgZWlnZW5lbiBGYXZvcml0ZW4gYXVzd8OkaGxlbicsXG4gICAgdmVudWU6ICdWZW51ZScsXG4gICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgIHdoZXJlOiAnV29oaW4/JyxcbiAgICBwbGFjZTogJ09ydCcsXG4gIH0sXG4gIGVuOiB7XG4gICAgYWRkcmVzczogJ0FkZHJlc3MnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ0FkZHJlc3MsIHBsYWNlIG9yIGJ1c2luZXNzJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzogJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnT3BlbiBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgIGFpcnBsYW5lOiAnRmxpZ2h0JyxcbiAgICBhcnJpdmFsOiAnQXJyaXZhbCcsXG4gICAgYmFjazogJ0JhY2snLFxuICAgIGJpa2VwYXJrOiAnUGFyayAmIFJpZGUgZm9yIGJpa2VzJyxcbiAgICBiaWtlcmVudGFsc3RhdGlvbjogJ0Jpa2Ugc3RhdGlvbicsXG4gICAgYnVzOiAnYnVzJyxcbiAgICBjYW5jZWw6ICdDYW5jZWwnLFxuICAgIGNhcnBhcms6ICdQYXJrICYgUmlkZScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdDbGVhcicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ0NsZWFyIHNlYXJjaCBoaXN0b3J5JyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdDdXJyZW50IHBvc2l0aW9uJyxcbiAgICBkZWxldGU6ICdEZWxldGUnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdEbyB5b3Ugd2FudCB0byBjbGVhciB0aGUgc2VhcmNoIGhpc3Rvcnk/JyxcbiAgICBkZXBhcnR1cmU6ICdEZXBhcnR1cmUnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdFbnRlciB5b3VyIG9yaWdpbi4nLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ0VudGVyIHlvdXIgZGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm91cml0ZScsXG4gICAgZmVycnk6ICdGZXJyeScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGdXR1cmUgcm91dGUnLFxuICAgIG9yaWdpbjogJ1N0YXJ0JyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnU3RhcnQnLFxuICAgIG93bmxvY2F0aW9uczogJ093biBsb2NhdGlvbnMnLFxuICAgIGxvYWRpbmc6ICdMb2FkaW5nLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ20nLFxuICAgIHBsYXRmb3JtOiAnUGxhdGZvcm0nLFxuICAgIHJhaWw6ICdUcmFpbicsXG4gICAgcmVxdWlyZWQ6ICdyZXF1aXJlZCBmaWVsZCcsXG4gICAgc2VhcmNoOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU2VhcmNoIGJ5IGFkZHJlc3Mgb3IgcGxhY2UgbmFtZScsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU2VhcmNoJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1NlYXJjaCBkZXN0aW5hdGlvbiwgcm91dGUgb3Igc3RvcCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdFbnRlciBkZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ1ZpZXcgcmVzdWx0cyBpbiB0aGUgYWRqYWNlbnQg4oCcRGVzdGluYXRpb27igJ0gdGFiJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnTm8gbG9jYXRpb24nLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ1NlYXJjaCBvcmlnaW4sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ0VudGVyIG9yaWdpbicsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdEZXRlY3QgbG9jYXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnVmVudWUsIHBsYWNlIGFuZCBzdG9wc2VhcmNoLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdhdGUgbGlzdCB3aXRoIGFycm93IGtleXMgYW5kIHNlbGVjdCB3aXRoIGVudGVyIGtleS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnRW50ZXIgdGhlIGxvY2F0aW9uIGFuZCBuYXZpZ2F0ZSBpbiB0aGUgbGlzdCBieSBzd2lwaW5nLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdBZnRlciBzZWxlY3RpbmcgdGhlIHN0YXJ0aW5nIGxvY2F0aW9uIHlvdSBhcmUgYXV0b21hdGljYWxseSBtb3ZlZCB0byB0aGUgZGVzdGluYXRpb24gZmllbGQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdUaGVyZSBpcyB7e2NvdW50fX0gc3VnZ2VzdGlvbiBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX3BsdXJhbCc6XG4gICAgICAnVGhlcmUgYXJlIHt7Y291bnR9fSBzdWdnZXN0aW9ucyBhdmFpbGFibGUnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ0N1cnJlbnQgc2VsZWN0aW9uOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdTdHJlZXQnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ1N0b3AnLFxuICAgICdzdG9wLW5lYXIteW91JzogJ1NlYXJjaCBzdG9wcyBhbmQgcm91dGVzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTZWFyY2ggZmxpZ2h0cyBvciBhaXJwb3J0cycsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1NlYXJjaCBidXMgcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTZWFyY2ggY2l0eSBiaWtlIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1yYWlsJzogJ1NlYXJjaCB0cmFpbiByb3V0ZXMgb3Igc3RhdGlvbnMnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTZWFyY2ggbWV0cm8gcm91dGVzIG9yIHN0YXRpb25zICcsXG4gICAgJ3N0b3AtbmVhci15b3UtdHJhbSc6ICdTZWFyY2ggdHJhbSByb3V0ZXMgb3Igc3RvcHMnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnQnVzIGFuZCBzdG9wIHNlYXJjaCcsXG4gICAgJ3RvZGF5LWF0JzogJ3RvZGF5IGF0JyxcbiAgICAndG9tb3Jyb3ctYXQnOiAndG9tb3Jyb3cgYXQnLFxuICAgIHRyYW06ICdUcmFtJyxcbiAgICB0cmFjazogJ1RyYWNrJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdVc2UgY3VycmVudCBsb2NhdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdTZWxlY3QgcG9zaXRpb24gZnJvbSBtYXAnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1NlbGVjdCBmcm9tIG93biBsb2NhdGlvbnMnLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICB3aGVyZTogJ1doZXJlIHRvPycsXG4gICAgcGxhY2U6ICdMb2NhdGlvbicsXG4gIH0sXG4gIGZpOiB7XG4gICAgYWRkcmVzczogJ09zb2l0ZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnT3NvaXRlLCBwYWlra2EgdGFpIHlyaXR5cycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0xpc8Okw6QgdsOkbGlwaXN0ZScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdTdWxqZSB2w6RsaXBpc3RlZW4ge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0byB2YWxpdHNpbicsXG4gICAgYWlycGxhbmU6ICdMZW50b2tvbmUnLFxuICAgIGFycml2YWw6ICdQZXJpbGzDpCcsXG4gICAgYmFjazogJ1Rha2Fpc2luJyxcbiAgICB2ZWhpY2xlcmVudGFsc3RhdGlvbjogJ1B5w7Zyw6Rhc2VtYScsXG4gICAgYmlrZXBhcms6ICdMaWl0eW50w6RwecO2csOkcGFya2tpJyxcbiAgICBidXM6ICdidXNzaScsXG4gICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka29pbnRpJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1R5aGplbm7DpCcsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1R5aGplbm7DpCBoYWt1aGlzdG9yaWEnLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ1TDpG3DpG5oZXRraW5lbiBzaWphaW50aScsXG4gICAgZGVsZXRlOiAnUG9pc3RhJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnSGFsdWF0a28gdHloamVudMOkw6QgaGFrdWhpc3Rvcmlhbj8nLFxuICAgIGRlcGFydHVyZTogJ0zDpGh0w7ZhaWthJyxcbiAgICBkZXN0aW5hdGlvbjogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBmYXZvdXJpdGU6ICdTdW9zaWtraScsXG4gICAgZmVycnk6ICdMYXV0dGEnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnVHVsZXZhIHJlaXR0aScsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ03DpMOkcsOkbnDDpMOkJyxcbiAgICBvcmlnaW46ICdMw6RodMO2cGFpa2thJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgb3dubG9jYXRpb25zOiAnT21hdCBwYWlrYXQnLFxuICAgIGxvYWRpbmc6ICdMYWRhdGFhbi4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnTGFpdHVyaScsXG4gICAgcmFpbDogJ0p1bmEnLFxuICAgIHJlcXVpcmVkOiAncGFrb2xsaW5lbiBrZW50dMOkJyxcbiAgICBzZWFyY2g6ICdFdHNpJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnSGFlIG9zb2l0dGVlbGxhIHRhaSBwYWlrYW4gbmltZWxsw6QnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ0hhZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdIYWUgbcOkw6Ryw6RucMOkw6R0w6QsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdTecO2dMOkIG3DpMOkcsOkbnDDpMOkJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnS2F0c28gdHVsb2tzZXQgdmllcmVpc2VsdMOkIE3DpMOkcsOkbnDDpMOkLXbDpGxpbGVoZGVsdMOkJyxcbiAgICAnc2VhcmNoLW5vLXJlc3VsdHMnOiAnRWkgdHVsb2tzaWEnLFxuICAgICdzZWFyY2gtb3JpZ2luJzogJ0hhZSBsw6RodMO2cGFpa2thYSwgbGluamFhIHRhaSBweXPDpGtracOkJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTecO2dMOkIGzDpGh0w7ZwYWlra2EnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGFpa2thLCBsaW5qYSBqYSBweXPDpGtraWhha3UuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ29pIGxpc3Rhc3NhIG51b2xpbsOkcHDDpGltaWxsw6QgamEgdmFsaXRzZSBlbnRlcmlsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdTecO2dMOkIHNpamFpbnRpIGphIG5hdmlnb2kgbGlzdGFzc2EgcHl5aGvDpGlzZW3DpGxsw6QuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ1ZhbGl0dHVhc2kgbMOkaHTDtnBhaWthbiBzaWlycnl0w6TDpG4gc3VvcmFhbiBtw6TDpHLDpG5ww6TDpC1rZW50dMOkw6RuLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOiAnIEzDtnlkZXR0aWluIHt7Y291bnR9fSBlaGRvdHVzdGEnLFxuICAgICdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJzogJ1TDpG3DpG5oZXRraW5lbiB2YWxpbnRhOiB7e3NlbGVjdGlvbn19JyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1BhaWthbm5hJyxcbiAgICBzdHJlZXQ6ICdLYXR1JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ0FzZW1hJyxcbiAgICBzdG9wOiAnUHlzw6Rra2knLFxuICAgICdzdG9wLW5lYXIteW91JzogJ0xpbmphLCBweXPDpGtraSB0YWkgYXNlbWEnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ0hhZSBsZW50b2phIHRhaSBsZW50b2FzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ0hhZSBidXNzaWxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnSGFlIGthdXB1bmtpcHnDtnLDpGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdIYWUgbMOkaGlqdW5hYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnSGFlIG1ldHJvbGluamFhIHRhaSBhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnSGFlIHJhaXRpb2xpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdMaW5qYS0gamEgcHlzw6Rra2loYWt1JyxcbiAgICAndG9kYXktYXQnOiAndMOkbsOkw6RuIGtsbycsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2h1b21lbm5hIGtsbycsXG4gICAgdHJhbTogJ1JhaXRpb3ZhdW51JyxcbiAgICB0cmFjazogJ1JhaWRlJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVmFsaXRzZSBzaWphaW50aSBrYXJ0YWx0YScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnVmFsaXRzZSBvbWlzdGEgcGFpa29pc3RhJyxcbiAgICB2ZW51ZTogJ1BhaWtrYScsXG4gICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICB3aGVyZTogJ01pbm5lIG1lbm7DpMOkbj8nLFxuICAgIHBsYWNlOiAnUGFpa2thJyxcbiAgfSxcbiAgc3Y6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlc3MsIHBsYXRzIGVsbGVyIGbDtnJldGFnJyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdTdMOkbmcgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZseWcnLFxuICAgIGFycml2YWw6ICdBbmzDpG5kZXInLFxuICAgIGJhY2s6ICdUaWxsYmFrYScsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdTdGFkc2N5a2Vsc3RhdGlvbicsXG4gICAgYmlrZXBhcms6ICdBbnNsdXRuaW5nc3BhcmtlcmluZyBmw7ZyIGN5a2xhcicsXG4gICAgYnVzOiAnQnVzc2knLFxuICAgIGNhbmNlbDogJ0F2YnJ5dCcsXG4gICAgY2FycGFyazogJ0luZmFydHNwYXJrZXJpbmcnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnVMO2bScsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1TDtm0gc8O2a2hpc3RvcmlrZW4nLFxuICAgIGN1cnJlbnRwb3NpdGlvbjogJ051dmFyYW5kZSBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnVGEgYm9ydCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ1ZpbGwgZHUgdMO2bW1hIHPDtmtoaXN0b3Jpa2VuPycsXG4gICAgZGVwYXJ0dXJlOiAnQXZnw6VuZ3N0aWQnLFxuICAgIGRlc3RpbmF0aW9uOiAnRGVzdGluYXRpb24nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXQnLFxuICAgIGZlcnJ5OiAnRsOkcmphJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ0ZyYW10aWRhIHJ1dHQnLFxuICAgICdnaXZlLWRlc3RpbmF0aW9uJzogJ1Nrcml2IGluIGRpbiBkZXN0aW5hdGlvbicsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1Nrcml2IGluIGRpbiBhdmbDpHJkc3BsYXRzJyxcbiAgICBvcmlnaW46ICdBdmbDpHJkc3BsYXRzJyxcbiAgICAnb3JpZ2luLXN0b3AtbmVhci15b3UnOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgb3dubG9jYXRpb25zOiAnRWduYSBwbGF0c2VyJyxcbiAgICBsb2FkaW5nOiAnTGFkZGFyLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcGxhdGZvcm06ICdQbGF0dGZvcm0nLFxuICAgIHJhaWw6ICdUw6VnJyxcbiAgICByZXF1aXJlZDogJ29ibGlnYXRvcmlza3QgZsOkbHQnLFxuICAgIHNlYXJjaDogJ1PDtmsnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTw7ZrIG1lZCBhZHJlc3NlbiBlbGxlciBwbGF0c2VucyBuYW1uJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uJzogJ1PDtmsgZGVzdGluYXRpb24sIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU2tyaXYgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdTZSByZXN1bHRhdGVuIHVuZGVyIGZsaWtlbiBEZXN0aW5hdGlvbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0luZ2Egc8O2a3Jlc3VsdGF0JyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTw7ZrIGF2ZsOkcmRzcGxhdHMsIGxpbmplIGVsbGVyIGjDpWxscGxhdHMnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1Nrcml2IGF2ZsOkcmRzcGxhdHMnLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnU8O2ayBwb3NpdGlvbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdQbGF0cywgbGluamUgb2NoIGjDpWxscGxhdHNzw7ZrbmluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnZXJhIGxpc3RhbiBtZWQgcGlsdGFuZ2VudGVybmEgb2NoIHbDpGxqIG1lZCBFbnRlci10YW5nZXRlbi4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnQW5nZSBwbGF0c2VuIG9jaCBuYXZpZ2VyYSBpIGxpc3RhbiBnZW5vbSBhdHQgc3ZlcGEuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0VmdGVyIGF0dCBkdSB2YWx0IGF2Z8OlbmdzcGxhdHNlbiB0YXMgZHUgZGlyZWt0IHRpbGwgRGVzdGluYXRpb24tZsOkbHRldC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ0hpdHRhZGUge3tjb3VudH19IGbDtnJzbGFnJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdOdXZhcmFuZGUgdmFsOiB7e3NlbGVjdGlvbn19JyxcbiAgICBzdHJlZXQ6ICdHYXRhJyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdIw6VsbHBsYXRzJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTw7ZrIGjDpWxscGxhdHNlciBlbGxlciBsaW5qZXInLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1PDtmsgZmx5ZyBlbGxlciBmbHlncGxhdHNlcicsXG4gICAgJ3N0b3AtbmVhci15b3UtYnVzJzogJ1PDtmsgYnVzc2xpbmplciBlbGxlciBow6VsbHBsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ1PDtmsgc3RhZHNjeWtlbHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTw7ZrIG7DpHJ0w6VnZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU8O2ayBtZXRyb2xpbmplciBlbGxlciBzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU8O2ayBzcMOlcnZhZ25saW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1c3Mgb2NoIHN0b3BwIHPDtmtuaW5nZW4nLFxuICAgICd0b2RheS1hdCc6ICdpIGRhZyBrbCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ2kgbW9yZ29uJyxcbiAgICB0cmFtOiAnU3DDpXJ2YWduJyxcbiAgICB0cmFjazogJ1Nww6VyJyxcbiAgICAndXNlLW93bi1wb3NpdGlvbic6ICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgJ3NlbGVjdC1mcm9tLW1hcCc6ICdWw6RsaiBwb3NpdGlvbiBmcsOlbiBrYXJ0YW4nLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1bDpGxqIGZyw6VuIGVnbmEgcGxhdHNlcicsXG4gICAgdmVudWU6ICdNw7Z0ZXNwbGF0cycsXG4gICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgIHdoZXJlOiAnVmFydCB2aWxsIGR1IMOla2E/JyxcbiAgICBwbGFjZTogJ1BsYXRzJyxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0LCB7IHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0TW9kYWwgZnJvbSAncmVhY3QtbW9kYWwnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgRGlhbG9nTW9kYWwgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtZGlhbG9nLW1vZGFsJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgbW9iaWxlU3R5bGVzIGZyb20gJy4vTW9iaWxlU2VhcmNoLnNjc3MnO1xuaW1wb3J0IG1vYmlsZU5vU2Nyb2xsU3R5bGVzIGZyb20gJy4vTW9iaWxlTm9TY3JvbGwuc2Nzcyc7XG5cbmNsYXNzIEF1dG9zdWdnZXN0UGF0Y2ggZXh0ZW5kcyBBdXRvc3VnZ2VzdCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIHNlbGYub25TdWdnZXN0aW9uVG91Y2hNb3ZlID0gKCkgPT4ge1xuICAgICAgc2VsZi5qdXN0U2VsZWN0ZWRTdWdnZXN0aW9uID0gZmFsc2U7XG4gICAgICBzZWxmLnByZXNzZWRTdWdnZXN0aW9uID0gbnVsbDtcbiAgICB9O1xuICB9XG59XG5cbmNvbnN0IE1vYmlsZVNlYXJjaCA9ICh7XG4gIGFwcEVsZW1lbnQsXG4gIGlkLFxuICBjbG9zZUhhbmRsZSxcbiAgY2xlYXJJbnB1dCxcbiAgdmFsdWUsXG4gIHN1Z2dlc3Rpb25zLFxuICBpbnB1dFByb3BzLFxuICBmZXRjaEZ1bmN0aW9uLFxuICByZW5kZXJTdWdnZXN0aW9uLFxuICBnZXRTdWdnZXN0aW9uVmFsdWUsXG4gIGFyaWFMYWJlbCxcbiAgbGFiZWwsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkLFxuICBjbGVhck9sZFNlYXJjaGVzLFxuICBkaWFsb2dIZWFkZXJUZXh0LFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dCxcbiAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQsXG4gIGZvY3VzSW5wdXQsXG4gIGNvbG9yLFxuICBob3ZlckNvbG9yLFxuICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICBzZWFyY2hPcGVuLFxuICBmb250V2VpZ2h0cyxcbiAgc2hvd1Njcm9sbCxcbn0pID0+IHtcbiAgY29uc3Qgc3R5bGVzID0gc2hvd1Njcm9sbCA/IG1vYmlsZVN0eWxlcyA6IG1vYmlsZU5vU2Nyb2xsU3R5bGVzO1xuXG4gIGNvbnN0IGlucHV0SWQgPSBgJHtpZH0taW5wdXRgO1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcblxuICBjb25zdCBbaXNEaWFsb2dPcGVuLCBzZXREaWFsb2dPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaW5wdXRSZWYgPSBSZWFjdC51c2VSZWYoKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIFJlYWN0TW9kYWwuc2V0QXBwRWxlbWVudChhcHBFbGVtZW50KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uQ2xvc2UgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY2xvc2VIYW5kbGUoKTtcbiAgfSk7XG5cbiAgY29uc3Qgb25TZWxlY3QgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHNldERpYWxvZ09wZW4odHJ1ZSk7XG4gICAgfSBlbHNlIGlmICghcmVmLnN1Z2dlc3Rpb24ucHJvcGVydGllcy5hcnJvd0NsaWNrZWQpIHtcbiAgICAgIC8vIFNlbGVjdCBpdGVtIGlmIGZpbGwgaW5wdXQgYnV0dG9uIGlzIG5vdCBwcmVzc2VkIChkaWFnb25hbCBhcnJvdyBpbiBzdWdnZXN0aW9uIGl0ZW1zKVxuICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQoZSwgcmVmKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50ID0gZXZlbnQgPT4ge1xuICAgIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICAgIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgICBjb25zdCBrZXkgPSAoZXZlbnQgJiYgKGV2ZW50LmtleSB8fCBldmVudC53aGljaCB8fCBldmVudC5rZXlDb2RlKSkgfHwgJyc7XG5cbiAgICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG5cbiAgY29uc3QgZ2V0VmFsdWUgPSBzdWdnZXN0aW9uID0+IHtcbiAgICBpZiAoc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRTdWdnZXN0aW9uVmFsdWUoc3VnZ2VzdGlvbik7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdjbGVhci1zZWFyY2gtaGlzdG9yeScpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1zZWFyY2gtaGlzdG9yeSddfT5cbiAgICAgICAgICB7aXRlbS5sYWJlbElkfVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZW5kZXJTdWdnZXN0aW9uKGl0ZW0pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckRpYWxvZ01vZGFsID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8RGlhbG9nTW9kYWxcbiAgICAgICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH1cbiAgICAgICAgaXNNb2RhbE9wZW49e2lzRGlhbG9nT3Blbn1cbiAgICAgICAgaGFuZGxlQ2xvc2U9eygpID0+IHNldERpYWxvZ09wZW4oZmFsc2UpfVxuICAgICAgICBoZWFkZXJUZXh0PXtkaWFsb2dIZWFkZXJUZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uVGV4dD17ZGlhbG9nUHJpbWFyeUJ1dHRvblRleHR9XG4gICAgICAgIHNlY29uZGFyeUJ1dHRvblRleHQ9e2RpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHR9XG4gICAgICAgIHByaW1hcnlCdXR0b25PbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcygpO1xuICAgICAgICAgIHNldERpYWxvZ09wZW4oZmFsc2UpO1xuICAgICAgICB9fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25PbkNsaWNrPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICBob3ZlckNvbG9yPXtob3ZlckNvbG9yfVxuICAgICAgICBmb250V2VpZ2h0cz17Zm9udFdlaWdodHN9XG4gICAgICAvPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXtjbGVhcklucHV0fVxuICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIGNsZWFySW5wdXQoKX1cbiAgICAgICAgYXJpYS1sYWJlbD17Y2xlYXJJbnB1dEJ1dHRvblRleHR9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e2NvbG9yfSAvPlxuICAgICAgPC9idXR0b24+XG4gICAgKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJDb250ZW50ID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0gaHRtbEZvcj17aW5wdXRJZH0+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtaWNvbiddfVxuICAgICAgICAgIG9uQ2xpY2s9eygpID0+IG9uQ2xvc2UoKX1cbiAgICAgICAgICBvbktleURvd249e2UgPT4gaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIG9uQ2xvc2UoKX1cbiAgICAgICAgICBhcmlhLWxhYmVsPXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICAgIHRhYkluZGV4PXswfVxuICAgICAgICA+XG4gICAgICAgICAgPEljb24gaW1nPVwiYXJyb3dcIiAvPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3JpZ2h0LWNvbHVtbiddfT5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0gaWQ9e2xhYmVsSWR9PlxuICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8QXV0b3N1Z2dlc3RQYXRjaFxuICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnNcbiAgICAgICAgICAgIGlkPXtpZH1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17ZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0VmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXtyZW5kZXJJdGVtfVxuICAgICAgICAgICAgLy8gZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIG11c3QgYmUgc2V0IHRvIHRydWUuXG4gICAgICAgICAgICAvLyBJZiBzZXQgdG8gZmFsc2UsIGlucHV0IHdvbid0IGJlIGZvY3VzZWQgd2hlbiB1c2VyIGNsaWNrcyBvblxuICAgICAgICAgICAgLy8gRmlsbCBpbnB1dCBidXR0b24gaW4gc3VnZ2VzdGlvbiBsaXN0LiAoZGlhZ29uYWwgYXJyb3cgaW4gc3RyZWV0IG5hbWUgaXRlbXMpXG4gICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0cnVlfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICAgICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtzdHlsZXNbaWRdIHx8ICcnfSAke1xuICAgICAgICAgICAgICAgICAgaW5wdXRQcm9wcy52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgICAgICAgICAgfWAsXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIGF1dG9Gb2N1czogdHJ1ZSxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgPGlucHV0IGFyaWEtbGFiZWw9e2FyaWFMYWJlbH0gaWQ9e2lkfSB7Li4ucH0gLz5cbiAgICAgICAgICAgICAgICB7dmFsdWUgJiYgY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXtvblNlbGVjdH1cbiAgICAgICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfTtcbiAgaWYgKGZvY3VzSW5wdXQgJiYgaW5wdXRSZWYuY3VycmVudD8uaW5wdXQpIHtcbiAgICBpbnB1dFJlZi5jdXJyZW50LmlucHV0LmZvY3VzKCk7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxSZWFjdE1vZGFsXG4gICAgICBpc09wZW49e3NlYXJjaE9wZW59XG4gICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsJ119XG4gICAgICBvdmVybGF5Q2xhc3NOYW1lPXtzdHlsZXNbJ21vYmlsZS1tb2RhbC1vdmVybGF5J119XG4gICAgICBvbkFmdGVyQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBzaG91bGRDbG9zZU9uRXNjXG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLWNvbnRlbnQnXX1cbiAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAnLS1jb2xvcic6IGAke2NvbG9yfWAsXG4gICAgICAgICAgJy0tYWNjZXNzaWJsZS1wcmltYXJ5LWNvbG9yJzogYWNjZXNzaWJsZVByaW1hcnlDb2xvcixcbiAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke2hvdmVyQ29sb3J9YCxcbiAgICAgICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHtyZW5kZXJDb250ZW50KCl9XG4gICAgICAgIHtyZW5kZXJEaWFsb2dNb2RhbCgpfVxuICAgICAgPC9kaXY+XG4gICAgPC9SZWFjdE1vZGFsPlxuICApO1xufTtcblxuTW9iaWxlU2VhcmNoLnByb3BUeXBlcyA9IHtcbiAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbG9zZUhhbmRsZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgY2xlYXJJbnB1dDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNsZWFySW5wdXRCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgaW5wdXRQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICB9KS5pc1JlcXVpcmVkLFxuICBmZXRjaEZ1bmN0aW9uOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBnZXRTdWdnZXN0aW9uVmFsdWU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHJlbmRlclN1Z2dlc3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIG9uU3VnZ2VzdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBhcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ0hlYWRlclRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb2N1c0lucHV0OiBQcm9wVHlwZXMuYm9vbCxcbiAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgc2VhcmNoT3BlbjogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgTW9iaWxlU2VhcmNoO1xuIiwiLyohIEZvciBsaWNlbnNlIGluZm9ybWF0aW9uIHBsZWFzZSBzZWUgaW5kZXguanMuTElDRU5TRS50eHQgKi9cbiFmdW5jdGlvbihlLHQpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzJiZcIm9iamVjdFwiPT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPXQocmVxdWlyZShcInJlYWN0XCIpKTtlbHNlIGlmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZClkZWZpbmUoW1wicmVhY3RcIl0sdCk7ZWxzZXt2YXIgbj1cIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz90KHJlcXVpcmUoXCJyZWFjdFwiKSk6dChlLnJlYWN0KTtmb3IodmFyIG8gaW4gbikoXCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czplKVtvXT1uW29dfX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGY/c2VsZjp0aGlzLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD17ODg4OmZ1bmN0aW9uKGUsdCxuKXt2YXIgbyxyO3I9dm9pZCAwIT09bi5nP24uZzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp0aGlzLG89ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIHQ9e2lnbm9yZTpcIltkYXRhLXNjcm9sbC1pZ25vcmVdXCIsaGVhZGVyOm51bGwsdG9wT25FbXB0eUhhc2g6ITAsc3BlZWQ6NTAwLHNwZWVkQXNEdXJhdGlvbjohMSxkdXJhdGlvbk1heDpudWxsLGR1cmF0aW9uTWluOm51bGwsY2xpcDohMCxvZmZzZXQ6MCxlYXNpbmc6XCJlYXNlSW5PdXRDdWJpY1wiLGN1c3RvbUVhc2luZzpudWxsLHVwZGF0ZVVSTDohMCxwb3BzdGF0ZTohMCxlbWl0RXZlbnRzOiEwfSxuPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJndW1lbnRzLChmdW5jdGlvbih0KXtmb3IodmFyIG4gaW4gdCl7aWYoIXQuaGFzT3duUHJvcGVydHkobikpcmV0dXJuO2Vbbl09dFtuXX19KSksZX0sbz1mdW5jdGlvbihlKXtcIiNcIj09PWUuY2hhckF0KDApJiYoZT1lLnN1YnN0cigxKSk7Zm9yKHZhciB0LG49U3RyaW5nKGUpLG89bi5sZW5ndGgscj0tMSxpPVwiXCIsdT1uLmNoYXJDb2RlQXQoMCk7KytyPG87KXtpZigwPT09KHQ9bi5jaGFyQ29kZUF0KHIpKSl0aHJvdyBuZXcgSW52YWxpZENoYXJhY3RlckVycm9yKFwiSW52YWxpZCBjaGFyYWN0ZXI6IHRoZSBpbnB1dCBjb250YWlucyBVKzAwMDAuXCIpO2krPXQ+PTEmJnQ8PTMxfHwxMjc9PXR8fDA9PT1yJiZ0Pj00OCYmdDw9NTd8fDE9PT1yJiZ0Pj00OCYmdDw9NTcmJjQ1PT09dT9cIlxcXFxcIit0LnRvU3RyaW5nKDE2KStcIiBcIjp0Pj0xMjh8fDQ1PT09dHx8OTU9PT10fHx0Pj00OCYmdDw9NTd8fHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMj9uLmNoYXJBdChyKTpcIlxcXFxcIituLmNoYXJBdChyKX1yZXR1cm5cIiNcIitpfSxyPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgubWF4KGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxIZWlnaHQsZG9jdW1lbnQuYm9keS5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9mZnNldEhlaWdodCxkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0KX0saT1mdW5jdGlvbih0KXtyZXR1cm4gdD8obj10LHBhcnNlSW50KGUuZ2V0Q29tcHV0ZWRTdHlsZShuKS5oZWlnaHQsMTApK3Qub2Zmc2V0VG9wKTowO3ZhciBufSx1PWZ1bmN0aW9uKHQsbixvKXswPT09dCYmZG9jdW1lbnQuYm9keS5mb2N1cygpLG98fCh0LmZvY3VzKCksZG9jdW1lbnQuYWN0aXZlRWxlbWVudCE9PXQmJih0LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSx0LmZvY3VzKCksdC5zdHlsZS5vdXRsaW5lPVwibm9uZVwiKSxlLnNjcm9sbFRvKDAsbikpfSxzPWZ1bmN0aW9uKHQsbixvLHIpe2lmKG4uZW1pdEV2ZW50cyYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5DdXN0b21FdmVudCl7dmFyIGk9bmV3IEN1c3RvbUV2ZW50KHQse2J1YmJsZXM6ITAsZGV0YWlsOnthbmNob3I6byx0b2dnbGU6cn19KTtkb2N1bWVudC5kaXNwYXRjaEV2ZW50KGkpfX07cmV0dXJuIGZ1bmN0aW9uKGMsYSl7dmFyIGwsZixkLHYscD17Y2FuY2VsU2Nyb2xsOmZ1bmN0aW9uKGUpe2NhbmNlbEFuaW1hdGlvbkZyYW1lKHYpLHY9bnVsbCxlfHxzKFwic2Nyb2xsQ2FuY2VsXCIsbCl9LGFuaW1hdGVTY3JvbGw6ZnVuY3Rpb24obyxjLGEpe3AuY2FuY2VsU2Nyb2xsKCk7dmFyIGY9bihsfHx0LGF8fHt9KSxtPVwiW29iamVjdCBOdW1iZXJdXCI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyksaD1tfHwhby50YWdOYW1lP251bGw6bztpZihtfHxoKXt2YXIgeT1lLnBhZ2VZT2Zmc2V0O2YuaGVhZGVyJiYhZCYmKGQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihmLmhlYWRlcikpO3ZhciBnLGIsdyxFPWkoZCksTz1tP286ZnVuY3Rpb24odCxuLG8saSl7dmFyIHU9MDtpZih0Lm9mZnNldFBhcmVudClkb3t1Kz10Lm9mZnNldFRvcCx0PXQub2Zmc2V0UGFyZW50fXdoaWxlKHQpO3JldHVybiB1PU1hdGgubWF4KHUtbi1vLDApLGkmJih1PU1hdGgubWluKHUscigpLWUuaW5uZXJIZWlnaHQpKSx1fShoLEUscGFyc2VJbnQoXCJmdW5jdGlvblwiPT10eXBlb2YgZi5vZmZzZXQ/Zi5vZmZzZXQobyxjKTpmLm9mZnNldCwxMCksZi5jbGlwKSxTPU8teSxfPXIoKSxJPTAsTT1mdW5jdGlvbihlLHQpe3ZhciBuPXQuc3BlZWRBc0R1cmF0aW9uP3Quc3BlZWQ6TWF0aC5hYnMoZS8xZTMqdC5zcGVlZCk7cmV0dXJuIHQuZHVyYXRpb25NYXgmJm4+dC5kdXJhdGlvbk1heD90LmR1cmF0aW9uTWF4OnQuZHVyYXRpb25NaW4mJm48dC5kdXJhdGlvbk1pbj90LmR1cmF0aW9uTWluOnBhcnNlSW50KG4sMTApfShTLGYpLEw9ZnVuY3Rpb24odCl7Z3x8KGc9dCksSSs9dC1nLHc9eStTKmZ1bmN0aW9uKGUsdCl7dmFyIG47cmV0dXJuXCJlYXNlSW5RdWFkXCI9PT1lLmVhc2luZyYmKG49dCp0KSxcImVhc2VPdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dCooMi10KSksXCJlYXNlSW5PdXRRdWFkXCI9PT1lLmVhc2luZyYmKG49dDwuNT8yKnQqdDooNC0yKnQpKnQtMSksXCJlYXNlSW5DdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQqdCp0KSxcImVhc2VPdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPS0tdCp0KnQrMSksXCJlYXNlSW5PdXRDdWJpY1wiPT09ZS5lYXNpbmcmJihuPXQ8LjU/NCp0KnQqdDoodC0xKSooMip0LTIpKigyKnQtMikrMSksXCJlYXNlSW5RdWFydFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQpLFwiZWFzZU91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49MS0gLS10KnQqdCp0KSxcImVhc2VJbk91dFF1YXJ0XCI9PT1lLmVhc2luZyYmKG49dDwuNT84KnQqdCp0KnQ6MS04Ki0tdCp0KnQqdCksXCJlYXNlSW5RdWludFwiPT09ZS5lYXNpbmcmJihuPXQqdCp0KnQqdCksXCJlYXNlT3V0UXVpbnRcIj09PWUuZWFzaW5nJiYobj0xKy0tdCp0KnQqdCp0KSxcImVhc2VJbk91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49dDwuNT8xNip0KnQqdCp0KnQ6MSsxNiotLXQqdCp0KnQqdCksZS5jdXN0b21FYXNpbmcmJihuPWUuY3VzdG9tRWFzaW5nKHQpKSxufHx0fShmLGI9KGI9MD09PU0/MDpJL00pPjE/MTpiKSxlLnNjcm9sbFRvKDAsTWF0aC5mbG9vcih3KSksZnVuY3Rpb24odCxuKXt2YXIgcj1lLnBhZ2VZT2Zmc2V0O2lmKHQ9PW58fHI9PW58fCh5PG4mJmUuaW5uZXJIZWlnaHQrcik+PV8pcmV0dXJuIHAuY2FuY2VsU2Nyb2xsKCEwKSx1KG8sbixtKSxzKFwic2Nyb2xsU3RvcFwiLGYsbyxjKSxnPW51bGwsdj1udWxsLCEwfSh3LE8pfHwodj1lLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSxnPXQpfTswPT09ZS5wYWdlWU9mZnNldCYmZS5zY3JvbGxUbygwLDApLGZ1bmN0aW9uKGUsdCxuKXt0fHxoaXN0b3J5LnB1c2hTdGF0ZSYmbi51cGRhdGVVUkwmJmhpc3RvcnkucHVzaFN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkobiksYW5jaG9yOmUuaWR9LGRvY3VtZW50LnRpdGxlLGU9PT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ/XCIjdG9wXCI6XCIjXCIrZS5pZCl9KG8sbSxmKSxcIm1hdGNoTWVkaWFcImluIGUmJmUubWF0Y2hNZWRpYShcIihwcmVmZXJzLXJlZHVjZWQtbW90aW9uKVwiKS5tYXRjaGVzP3UobyxNYXRoLmZsb29yKE8pLCExKToocyhcInNjcm9sbFN0YXJ0XCIsZixvLGMpLHAuY2FuY2VsU2Nyb2xsKCEwKSxlLnJlcXVlc3RBbmltYXRpb25GcmFtZShMKSl9fX0sbT1mdW5jdGlvbih0KXtpZighdC5kZWZhdWx0UHJldmVudGVkJiYhKDAhPT10LmJ1dHRvbnx8dC5tZXRhS2V5fHx0LmN0cmxLZXl8fHQuc2hpZnRLZXkpJiZcImNsb3Nlc3RcImluIHQudGFyZ2V0JiYoZj10LnRhcmdldC5jbG9zZXN0KGMpKSYmXCJhXCI9PT1mLnRhZ05hbWUudG9Mb3dlckNhc2UoKSYmIXQudGFyZ2V0LmNsb3Nlc3QobC5pZ25vcmUpJiZmLmhvc3RuYW1lPT09ZS5sb2NhdGlvbi5ob3N0bmFtZSYmZi5wYXRobmFtZT09PWUubG9jYXRpb24ucGF0aG5hbWUmJi8jLy50ZXN0KGYuaHJlZikpe3ZhciBuLHI7dHJ5e249byhkZWNvZGVVUklDb21wb25lbnQoZi5oYXNoKSl9Y2F0Y2goZSl7bj1vKGYuaGFzaCl9aWYoXCIjXCI9PT1uKXtpZighbC50b3BPbkVtcHR5SGFzaClyZXR1cm47cj1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9ZWxzZSByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Iobik7KHI9cnx8XCIjdG9wXCIhPT1uP3I6ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSYmKHQucHJldmVudERlZmF1bHQoKSxmdW5jdGlvbih0KXtpZihoaXN0b3J5LnJlcGxhY2VTdGF0ZSYmdC51cGRhdGVVUkwmJiFoaXN0b3J5LnN0YXRlKXt2YXIgbj1lLmxvY2F0aW9uLmhhc2g7bj1ufHxcIlwiLGhpc3RvcnkucmVwbGFjZVN0YXRlKHtzbW9vdGhTY3JvbGw6SlNPTi5zdHJpbmdpZnkodCksYW5jaG9yOm58fGUucGFnZVlPZmZzZXR9LGRvY3VtZW50LnRpdGxlLG58fGUubG9jYXRpb24uaHJlZil9fShsKSxwLmFuaW1hdGVTY3JvbGwocixmKSl9fSxoPWZ1bmN0aW9uKGUpe2lmKG51bGwhPT1oaXN0b3J5LnN0YXRlJiZoaXN0b3J5LnN0YXRlLnNtb290aFNjcm9sbCYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGw9PT1KU09OLnN0cmluZ2lmeShsKSl7dmFyIHQ9aGlzdG9yeS5zdGF0ZS5hbmNob3I7XCJzdHJpbmdcIj09dHlwZW9mIHQmJnQmJiEodD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG8oaGlzdG9yeS5zdGF0ZS5hbmNob3IpKSl8fHAuYW5pbWF0ZVNjcm9sbCh0LG51bGwse3VwZGF0ZVVSTDohMX0pfX07cmV0dXJuIHAuZGVzdHJveT1mdW5jdGlvbigpe2wmJihkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixtLCExKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLGgsITEpLHAuY2FuY2VsU2Nyb2xsKCksbD1udWxsLGY9bnVsbCxkPW51bGwsdj1udWxsKX0sZnVuY3Rpb24oKXtpZighKFwicXVlcnlTZWxlY3RvclwiaW4gZG9jdW1lbnQmJlwiYWRkRXZlbnRMaXN0ZW5lclwiaW4gZSYmXCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWVcImluIGUmJlwiY2xvc2VzdFwiaW4gZS5FbGVtZW50LnByb3RvdHlwZSkpdGhyb3dcIlNtb290aCBTY3JvbGw6IFRoaXMgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByZXF1aXJlZCBKYXZhU2NyaXB0IG1ldGhvZHMgYW5kIGJyb3dzZXIgQVBJcy5cIjtwLmRlc3Ryb3koKSxsPW4odCxhfHx7fSksZD1sLmhlYWRlcj9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKGwuaGVhZGVyKTpudWxsLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLG0sITEpLGwudXBkYXRlVVJMJiZsLnBvcHN0YXRlJiZlLmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLGgsITEpfSgpLHB9fShyKX0uYXBwbHkodCxbXSksdm9pZCAwPT09b3x8KGUuZXhwb3J0cz1vKX0sMjUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9fY3JlYXRlQmluZGluZ3x8KE9iamVjdC5jcmVhdGU/ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbyx7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdFtuXX19KX06ZnVuY3Rpb24oZSx0LG4sbyl7dm9pZCAwPT09byYmKG89biksZVtvXT10W25dfSkscj10aGlzJiZ0aGlzLl9fZXhwb3J0U3Rhcnx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gZSlcImRlZmF1bHRcIj09PW58fE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LG4pfHxvKHQsZSxuKX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSkscihuKDcyMCksdCkscihuKDY0NiksdCkscihuKDg3KSx0KSxyKG4oNjQxKSx0KSxyKG4oOTEpLHQpLHIobigxODMpLHQpLHIobigzNzYpLHQpLHIobig0NSksdCkscihuKDg0MCksdCkscihuKDU4NiksdCkscihuKDIxOSksdCkscihuKDUxMCksdCkscihuKDMzMyksdCkscihuKDIzKSx0KSxyKG4oMzQ4KSx0KSxyKG4oMTk3KSx0KX0sODc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlQXJyb3dOYXZpZ2F0aW9uPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VBcnJvd05hdmlnYXRpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5saXN0SXRlbXMsbj1lLm9uQXJyb3dVcE9yRG93bixyPSgwLG8udXNlU3RhdGUpKDApLGk9clswXSx1PXJbMV0scz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oZSl7dShlKX0pLFt0XSksYz1mdW5jdGlvbihlKXt2YXIgbz1lLmtleTtpZihudWxsPT10P3ZvaWQgMDp0Lmxlbmd0aClpZihcIkFycm93VXBcIj09PW8pbiYmbigpLGUucHJldmVudERlZmF1bHQoKSxzKGk+MD9pLTE6dC5sZW5ndGgtMSk7ZWxzZXtpZihcIkFycm93RG93blwiIT09bylyZXR1cm47biYmbigpLGUucHJldmVudERlZmF1bHQoKSxpPHQubGVuZ3RoLTE/cyhpKzEpOnMoMCl9fTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLGMpfX0pKSwoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cygwKX0pLFt0XSkse3NlbGVjdGVkSW5kZXg6aX19fSwzMzM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlRGVib3VuY2U9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZURlYm91bmNlPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9MzAwKTt2YXIgbj0oMCxvLnVzZVN0YXRlKShlKSxyPW5bMF0saT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgbj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe2koZSl9KSx0KTtyZXR1cm4gZnVuY3Rpb24oKXtjbGVhclRpbWVvdXQobil9fSksW2UsdF0pLHJ9fSwyMzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSw2NDE6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0saT1uWzFdLHU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtpKHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcih1LGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fWkoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw5MTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc0JyZWFrcG9pbnQ9dm9pZCAwO3ZhciBvPW4oMTU2KSxyPW4oMjUzKSxpPXt4czoxLG1vYmlsZVNtYWxsOjMyMCxtb2JpbGU6Mzc1LHRhYmxldDo3NjgsdGFibGV0TGFyZ2U6OTIwLGRlc2t0b3BTbWFsbDoxMDI0LGRlc2t0b3A6MTI2MCxkZXNrdG9wTGFyZ2U6MTQ0MH07dC51c2VJc0JyZWFrcG9pbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9XCJzdHJpbmdcIj09dHlwZW9mIGU/aVtlXTplLG49KDAsby51c2VTdGF0ZSkobnVsbCksdT1uWzBdLHM9blsxXSxjPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3Mod2luZG93LmlubmVyV2lkdGgpfSksW10pO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtjKCl9KSxbXSksKDAsci51c2VPblJlc2l6ZSkoYyksdT49dH0sdC5kZWZhdWx0PXQudXNlSXNCcmVha3BvaW50fSw0NTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSk7dmFyIG89bigxNTYpLHI9e1wiY3JhenktZWdnXCI6XCJjcmF6eWVnZy5jb21cIix5b3V0dWJlOlwieW91dHViZS5jb21cIn0saT17UHJpdmFjeU1hbmFnZXJBUEk6e2FjdGlvbjpcImdldENvbnNlbnREZWNpc2lvblwiLHRpbWVzdGFtcDoobmV3IERhdGUpLmdldFRpbWUoKSxzZWxmOlwiaHNsLmZpXCJ9fTt0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsby51c2VTdGF0ZSkoITEpLG49dFswXSx1PXRbMV0scz1mdW5jdGlvbigpe3ZhciB0LG49bnVsbD09PSh0PXdpbmRvdy50cnVzdGUpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNtYTtpZihuKXt2YXIgbz1uLmNhbGxBcGkoXCJnZXRDb25zZW50XCIsXCJoc2wuZmlcIixyW2VdLFwiaHNsLmZpXCIpO3UoXCJhcHByb3ZlZFwiPT09KG51bGw9PW8/dm9pZCAwOm8uY29uc2VudCkpfWVsc2UgY29uc29sZS5lcnJvcihcIlRydXN0QXJjIGFwaSBub3QgZm91bmQsIHJldHVybmluZyBpc0Nvb2tpZUVuYWJsZWQgYXMgZmFsc2VcIil9LGM9ZnVuY3Rpb24oZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mKG51bGw9PWU/dm9pZCAwOmUub3JpZ2luKSYmZS5vcmlnaW4uaW5jbHVkZXMoXCJ0cnVzdGFyY1wiKSYmXCJzdHJpbmdcIj09dHlwZW9mKG51bGw9PWU/dm9pZCAwOmUuZGF0YSkpdHJ5e3ZhciB0PUpTT04ucGFyc2UobnVsbD09ZT92b2lkIDA6ZS5kYXRhKTtcInN1Ym1pdF9wcmVmZXJlbmNlc1wiPT09KG51bGw9PXQ/dm9pZCAwOnQubWVzc2FnZSkmJnMoKX1jYXRjaChlKXtyZXR1cm59fTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7cygpfSksW2VdKSwoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7c2V0VGltZW91dChzLDApLHNldFRpbWVvdXQocywxMDApLHNldFRpbWVvdXQocywxZTMpfSksW10pLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnRvcC5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShpKSxcIipcIiksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsYywhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsYyl9fSksW10pLG59fSwzNzY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNMb2FkaW5nQWZ0ZXJFcnJvcj1mdW5jdGlvbihlLHQpe3ZhciBuPSgwLG8udXNlU3RhdGUpKHQpLHI9blswXSxpPW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2V8fGkodCl9KSxbZSx0XSksZSYmcn19LDM0ODpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc01vYmlsZT12b2lkIDA7dmFyIG89big5MSk7dC51c2VJc01vYmlsZT1mdW5jdGlvbigpe3JldHVybiEoMCxvLnVzZUlzQnJlYWtwb2ludCkoXCJ0YWJsZXRcIil9LHQuZGVmYXVsdD10LnVzZUlzTW9iaWxlfSwxODM6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdD1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93P28udXNlTGF5b3V0RWZmZWN0Om8udXNlRWZmZWN0LHQuZGVmYXVsdD10LnVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3R9LDU4NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VPbkxvc2VGb2N1c1dpdGhpbj12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25Mb3NlRm9jdXNXaXRoaW49ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZWYsbj1lLmNhbGxiYWNrLHI9ZS53YXRjaDsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt2YXIgZTtpZihyKXJldHVybihudWxsPT09KGU9dC5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5tYXRjaGVzKFwiOmZvY3VzLXdpdGhpblwiKSk/dm9pZCAwOm4oKX07cmV0dXJuIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpLGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXl1cFwiLGUpfX0pLFtuLHQscl0pfSx0LmRlZmF1bHQ9dC51c2VPbkxvc2VGb2N1c1dpdGhpbn0sMTk3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uUmVzaXplPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPblJlc2l6ZT1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlKHdpbmRvdy5pbm5lcldpZHRoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCx7cGFzc2l2ZTohMH0pLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdCl9fSksW10pfSx0LmRlZmF1bHQ9dC51c2VPblJlc2l6ZX0sNTEwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uV2luZG93Rm9jdXM9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uV2luZG93Rm9jdXM9ZnVuY3Rpb24oZSl7KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciB0PWZ1bmN0aW9uKCl7ZSYmXCJ2aXNpYmxlXCI9PT1kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUmJmUoKX07cmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQsITEpLGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQpfX0pLFtlXSl9fSw3MjA6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT3V0c2lkZVJlYWN0ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU91dHNpZGVSZWFjdGVyPWZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gbihuKXtlLmN1cnJlbnQmJiFlLmN1cnJlbnQuY29udGFpbnMobi50YXJnZXQpJiZ0KCl9KDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbiksZnVuY3Rpb24oKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsbil9fSkpfX0sMjE5OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KTt2YXIgbz1uKDE1Nik7dC5kZWZhdWx0PWZ1bmN0aW9uKCl7dmFyIGU9KDAsby51c2VSZWYpKG51bGwpO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlLmN1cnJlbnQmJihlLmN1cnJlbnQoKSxlLmN1cnJlbnQ9bnVsbCl9KSksZnVuY3Rpb24odCl7ZS5jdXJyZW50PXR9fX0sNjQ2OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNjcm9sbExvY2s9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZVNjcm9sbExvY2s9ZnVuY3Rpb24oKXtyZXR1cm57bG9jazooMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuc2Nyb2xsWStcInB4XCIsdD1kb2N1bWVudC5ib2R5O3Quc3R5bGUucG9zaXRpb249XCJmaXhlZFwiLHQuc3R5bGUudG9wPVwiLVwiK2V9KSxbXSksdW5sb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmJvZHksdD1lLnN0eWxlLnRvcCxuPS0xKnBhcnNlSW50KHR8fFwiMFwiKTtlLnN0eWxlLnBvc2l0aW9uPVwiXCIsZS5zdHlsZS50b3A9XCJcIixuJiZ3aW5kb3cuc2Nyb2xsVG8oMCwtMSpwYXJzZUludCh0fHxcIjBcIikpfSksW10pfX19LDg0MDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2ltcG9ydERlZmF1bHR8fGZ1bmN0aW9uKGUpe3JldHVybiBlJiZlLl9fZXNNb2R1bGU/ZTp7ZGVmYXVsdDplfX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VTbW9vdGhTY3JvbGw9dm9pZCAwO3ZhciByPW4oMTU2KSxpPW8obig4ODgpKTt0LnVzZVNtb290aFNjcm9sbD1mdW5jdGlvbihlKXt2YXIgdD0oMCxyLnVzZVJlZikobnVsbCksbj1lLnJlZixvPWUub2Zmc2V0LHU9dm9pZCAwPT09bz8wOm8scz1lLnNwZWVkLGM9dm9pZCAwPT09cz81MDA6cztyZXR1cm4oMCxyLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dC5jdXJyZW50PW5ldyBpLmRlZmF1bHQobnVsbCx7c3BlZWQ6YyxzcGVlZEFzRHVyYXRpb246ITB9KX0pLFtdKSwoMCxyLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtuJiZ0LmN1cnJlbnQmJnQuY3VycmVudC5hbmltYXRlU2Nyb2xsKG4uY3VycmVudCxudWxsLHtvZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX0sdXBkYXRlVVJMOiExfSl9KSxbdSxuXSl9fSwxNTY6ZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPWV9fSxuPXt9O2Z1bmN0aW9uIG8oZSl7dmFyIHI9bltlXTtpZih2b2lkIDAhPT1yKXJldHVybiByLmV4cG9ydHM7dmFyIGk9bltlXT17ZXhwb3J0czp7fX07cmV0dXJuIHRbZV0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsbyksaS5leHBvcnRzfXJldHVybiBvLmc9ZnVuY3Rpb24oKXtpZihcIm9iamVjdFwiPT10eXBlb2YgZ2xvYmFsVGhpcylyZXR1cm4gZ2xvYmFsVGhpczt0cnl7cmV0dXJuIHRoaXN8fG5ldyBGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl9Y2F0Y2goZSl7aWYoXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdylyZXR1cm4gd2luZG93fX0oKSxvKDI1Myl9KCl9KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXMgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGkxOG5leHQgZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IHsgZXhlY3V0ZVNlYXJjaCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1leGVjdXRlLXNlYXJjaC1pbW1pZGlhdGUnO1xuaW1wb3J0IFN1Z2dlc3Rpb25JdGVtIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LXN1Z2dlc3Rpb24taXRlbSc7XG5pbXBvcnQge1xuICBnZXROYW1lTGFiZWwsXG4gIGdldFN0b3BDb2RlLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG5pbXBvcnQgeyBnZXRTdG9wTmFtZSB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1oZWxwZXJzJztcbmltcG9ydCBnZXRMYWJlbCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQtdGltZXpvbmUnO1xuaW1wb3J0ICdtb21lbnQvbG9jYWxlL2ZpJztcbmltcG9ydCAnbW9tZW50L2xvY2FsZS9zdic7XG5pbXBvcnQgJ21vbWVudC9sb2NhbGUvZGUnO1xuaW1wb3J0IGlzRXF1YWwgZnJvbSAnbG9kYXNoL2lzRXF1YWwnO1xuaW1wb3J0IGlzRW1wdHkgZnJvbSAnbG9kYXNoL2lzRW1wdHknO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL2hlbHBlcnMvdHJhbnNsYXRpb25zJztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9oZWxwZXJzL3N0eWxlcy5zY3NzJztcbmltcG9ydCBNb2JpbGVTZWFyY2ggZnJvbSAnLi9oZWxwZXJzL01vYmlsZVNlYXJjaCc7XG5pbXBvcnQgd2l0aFNjcm9sbExvY2sgZnJvbSAnLi9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrJztcblxubW9tZW50LmxvY2FsZSgnZW4nKTtcblxuaTE4bmV4dC5pbml0KHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgaW50ZXJwb2xhdGlvbjoge1xuICAgIGVzY2FwZVZhbHVlOiBmYWxzZSwgLy8gbm90IG5lZWRlZCBmb3IgcmVhY3QgYXMgaXQgZXNjYXBlcyBieSBkZWZhdWx0XG4gIH0sXG59KTtcblxuY29uc3QgTG9hZGluZyA9IHByb3BzID0+IChcbiAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snc3Bpbm5lci1sb2FkZXInXX0+XG4gICAgeyhwcm9wcyAmJiBwcm9wcy5jaGlsZHJlbikgfHwgKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0+e2kxOG5leHQudCgnbG9hZGluZycpfTwvc3Bhbj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbkxvYWRpbmcucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG59O1xuXG5jb25zdCBnZXRQbGF0Zm9ybSA9IGFkZGVuZHVtID0+IHtcbiAgaWYgKCFhZGRlbmR1bSB8fCAhYWRkZW5kdW0uR1RGUy5wbGF0Zm9ybSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgY29uc3QgeyBtb2RlcywgcGxhdGZvcm0gfSA9IGFkZGVuZHVtLkdURlM7XG4gIGNvbnN0IHR5cGUgPVxuICAgIG1vZGVzICYmIG1vZGVzWzBdID09PSAnUkFJTCcgPyBpMThuZXh0LnQoJ3RyYWNrJykgOiBpMThuZXh0LnQoJ3BsYXRmb3JtJyk7XG4gIHJldHVybiBbdHlwZSwgcGxhdGZvcm1dO1xufTtcblxuZnVuY3Rpb24gZ2V0U3VnZ2VzdGlvbkNvbnRlbnQoaXRlbSkge1xuICBpZiAoaXRlbS50eXBlICE9PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21NYXAnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW1hcCcpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ0N1cnJlbnRMb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgndXNlLW93bi1wb3NpdGlvbicpXTtcbiAgICB9XG4gICAgaWYgKGl0ZW0udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnKV07XG4gICAgfVxuICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3QgKi9cbiAgICBsZXQgW25hbWUsIGxhYmVsXSA9IGdldE5hbWVMYWJlbChpdGVtLnByb3BlcnRpZXMsIHRydWUpO1xuICAgIGxldCBzdWdnZXN0aW9uVHlwZTtcbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXJlbnRhbCcpIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYmlrZXN0YXRpb24nKVxuICAgICkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ3ZlaGljbGVyZW50YWxzdGF0aW9uJyk7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGl0ZW0ucHJvcGVydGllcy5sYWJlbElkO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCBzdG9wQ29kZV07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Jpa2VwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2Jpa2VwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2NhcnBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnY2FycGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubW9kZSkge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoXG4gICAgICAgIGl0ZW0ucHJvcGVydGllcy5tb2RlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGF5ZXIgPSBpdGVtLnByb3BlcnRpZXMubGF5ZXJcbiAgICAgICAgLnJlcGxhY2UoJ3JvdXRlLScsICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgnZmF2b3VyaXRlJywgJycpO1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQobGF5ZXIpO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5pZCAmJlxuICAgICAgKGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0b3AnIHx8IGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ3N0YXRpb24nKVxuICAgICkge1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBnZXRTdG9wQ29kZShpdGVtLnByb3BlcnRpZXMpO1xuICAgICAgY29uc3QgbW9kZSA9IGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bT8uR1RGUy5tb2RlcztcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHN1Z2dlc3Rpb25UeXBlLFxuICAgICAgICBnZXRTdG9wTmFtZShuYW1lLCBzdG9wQ29kZSksXG4gICAgICAgIGxhYmVsLFxuICAgICAgICBzdG9wQ29kZSxcbiAgICAgICAgbW9kZSxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICBdO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdG9wJyB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RhdGlvbidcbiAgICApIHtcbiAgICAgIGNvbnN0IHsgYWRkcmVzcywgY29kZSB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICAgICAgY29uc3Qgc3RvTmFtZSA9IGFkZHJlc3MgPyBnZXRTdG9wTmFtZShhZGRyZXNzLnNwbGl0KCcsJylbMF0sIGNvZGUpIDogbmFtZTtcbiAgICAgIGNvbnN0IHBsYXRmb3JtID0gZ2V0UGxhdGZvcm0oaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIHN0b05hbWUsIGxhYmVsLCBjb2RlLCB1bmRlZmluZWQsIHBsYXRmb3JtXTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgbGFiZWxdO1xuICB9XG4gIGNvbnN0IHsgb3JpZ2luLCBkZXN0aW5hdGlvbiB9ID0gaXRlbS5wcm9wZXJ0aWVzO1xuICBjb25zdCB0YWlsMSA9IG9yaWdpbi5sb2NhbGl0eSA/IGAsICR7b3JpZ2luLmxvY2FsaXR5fSBmb29iYXJgIDogJyc7XG4gIGNvbnN0IHRhaWwyID0gZGVzdGluYXRpb24ubG9jYWxpdHkgPyBgLCAke2Rlc3RpbmF0aW9uLmxvY2FsaXR5fWAgOiAnJztcbiAgY29uc3QgbmFtZTEgPSBvcmlnaW4ubmFtZTtcbiAgY29uc3QgbmFtZTIgPSBkZXN0aW5hdGlvbi5uYW1lO1xuICByZXR1cm4gW1xuICAgIGkxOG5leHQudCgnZnV0dXJlLXJvdXRlJyksXG4gICAgYCR7aTE4bmV4dC50KCdvcmlnaW4nKX0gJHtuYW1lMX0ke3RhaWwxfSAke2kxOG5leHQudChcbiAgICAgICdkZXN0aW5hdGlvbicsXG4gICAgKX0gJHtuYW1lMn0ke3RhaWwyfWAsXG4gICAgaXRlbS50cmFuc2xhdGVkVGV4dCxcbiAgXTtcbn1cblxuZnVuY3Rpb24gdHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZShpdGVtKSB7XG4gIGNvbnN0IHRpbWUgPSBtb21lbnQudW5peChpdGVtLnByb3BlcnRpZXMudGltZSk7XG4gIGxldCBzdHIgPSBpdGVtLnByb3BlcnRpZXMuYXJyaXZlQnlcbiAgICA/IGkxOG5leHQudCgnYXJyaXZhbCcpXG4gICAgOiBpMThuZXh0LnQoJ2RlcGFydHVyZScpO1xuICBpZiAodGltZS5pc1NhbWUobW9tZW50KCksICdkYXknKSkge1xuICAgIHN0ciA9IGAke3N0cn0gJHtpMThuZXh0LnQoJ3RvZGF5LWF0Jyl9YDtcbiAgfSBlbHNlIGlmICh0aW1lLmlzU2FtZShtb21lbnQoKS5hZGQoMSwgJ2RheScpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b21vcnJvdy1hdCcpfWA7XG4gIH0gZWxzZSB7XG4gICAgc3RyID0gYCR7c3RyfSAke3RpbWUuZm9ybWF0KCdkZCBELk0uJyl9YDtcbiAgfVxuICBzdHIgPSBgJHtzdHJ9ICR7bW9tZW50KHRpbWUpLmZvcm1hdCgnSEg6bW0nKX1gO1xuICByZXR1cm4gc3RyO1xufVxuLyoqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqIGNvbnN0IGxhbmcgPSAnZmknOyAvLyBlbiwgZmkgb3Igc3ZcbiAqIGNvbnN0IG9uU2VsZWN0ID0gKGl0ZW0sIGlkKSA9PiB7XG4gKiAgICAvLyBGdW50aW9uYWxpdHkgd2hlbiB1c2VyIHNlbGVjdHMgYSBzdWdnZXNpb25zLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3Qgb25DbGVhciA9IGlkID0+IHtcbiAqICAgIC8vIENhbGxlZCAgd2hlbiB1c2VyIGNsaWNrcyB0aGUgY2xlYXIgc2VhcmNoIHN0cmluZyBidXR0b24uIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdHJhbnNwb3J0TW9kZSA9IHVuZGVmaW5lZDtcbiAqIGNvbnN0IHBsYWNlaG9sZGVyID0gXCJzdG9wLW5lYXIteW91XCI7XG4gKiBjb25zdCB0YXJnZXRzID0gWydMb2NhdGlvbnMnLCAnU3RvcHMnLCAnUm91dGVzJ107IC8vIERlZmluZXMgd2hhdCB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBvcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBSb3V0ZXMsIFZlaGljbGVSZW50YWxTdGF0aW9ucywgRnV0dXJlUm91dGVzLCBNYXBQb3NpdGlvbiBhbmQgQ3VycmVudFBvc2l0aW9uLiBMZWF2ZSBlbXB0eSB0byBzZWFyY2ggYWxsIHRhcmdldHMuXG4gKiBjb25zdCBzb3VyY2VzID0gWydGYXZvdXJpdGUnLCAnSGlzdG9yeScsICdEYXRhc291cmNlJ10gLy8gRGVmaW5lcyB3aGVyZSB5b3UgYXJlIHNlYXJjaGluZy4gYWxsIGF2YWlsYWJsZSBhcmU6IEZhdm91cml0ZSwgSGlzdG9yeSAocHJldmlvdXNseSBzZWFyY2hlZCBzZWFyY2hlcykgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIHJldHVybiAoXG4gKiAgPERUQXV0b3N1Z2dlc3RcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgaWNvbj1cIm9yaWdpblwiIC8vIE9wdGlvbmFsIFN0cmluZyBmb3IgaWNvbiB0aGF0IGlzIHNob3duIGxlZnQgb2Ygc2VhcmNoZmllbGQuIHVzZWQgd2l0aCBJY29uIGxpYnJhcnlcbiAqICAgIGlkPVwib3JpZ2luXCIgLy8gdXNlZCBmb3Igc3R5bGUgcHJvcHMgYW5kIGluZm8gZm9yIGNvbXBvbmVudC5cbiAqICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn0gLy8gU3RyaW5nIHRoYXQgaXMgc2hvd25zIGluaXRhbGx5IGluIHNlYXJjaCBmaWVsZFxuICogICAgdmFsdWU9XCJcIiAvLyBlLmcuIHVzZXIgdHlwZWQgc3RyaW5nIHRoYXQgaXMgc2hvd24gaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBvblNlbGVjdD17b25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXtvbkNsZWFyfVxuICogICAgYXV0b0ZvY3VzPXtmYWxzZX0gLy8gZGVmaW5lcyB0aGF0IHNob3VsZCB0aGlzIGZpZWxkIGJlIGF1dG9tYXRpY2FsbHkgZm9jdXNlZCB3aGVuIHBhZ2UgaXMgbG9hZGVkLlxuICogICAgbGFuZz17bGFuZ31cbiAqICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e2dldEF1dG9TdWdnZXN0SWNvbnN9XG4gKiAgICB0cmFuc3BvcnRNb2RlPXt0cmFuc3BvcnRNb2RlfSAvLyB0cmFuc3BvcnRtb2RlIHdpdGggd2hpY2ggd2UgZmlsdGVyIHRoZSByb3V0ZXMsIGUuZy4gcm91dGUtQlVTXG4gKiAgICBnZW9jb2RpbmdTaXplPXsxMH0gLy8gZGVmaW5lcyBob3cgbWFueSBzdG9wcyBhbmQgc3RhdGlvbnMgdG8gZmV0Y2ggZnJvbSBnZW9jb2RpbmcuIFVzZWZ1bCBpZiB5b3Ugd2FudCB0byBmaWx0ZXIgdGhlIHJlc3VsdHMgYW5kIHN0aWxsIGdldCBhIHJlYXNvbmFibGUgYW1vdW50IG9mIHN1Z2dlc3Rpb25zLlxuICogICAgZmlsdGVyUmVzdWx0cz17cmVzdWx0cyA9PiByZXR1cm4gcmVzdWx0c30gLy8gT3B0aW9uYWwgZmlsdGVyaW5nIGZ1bmN0aW9uIGZvciByb3V0ZXMgYW5kIHN0b3BzXG4gKiAgICBoYW5kZWxWaWFQb2ludHM9eygpID0+IHJldHVybiBudWxsIH0gLy8gT3B0aW9uYWwgVmlhIHBvaW50IGhhbmRsaW5nIGxvZ2ljLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBmb2N1c0NoYW5nZT17KCkgPT4gcmV0dXJuIG51bGx9IC8vIFdoZW4gc3VnZ2VzdGlvbiBpcyBzZWxlY3RlZCwgaGFuZGxlIGNoYW5naW5nIGZvY3VzLiBUaGlzIGlzIGN1cnJlbnRseSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzdG9yZVJlZj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIEZ1bmN0aW9uYWxpdHkgdG8gc3RvcmUgcmVmcy4gQ3VycmVubHR5IG1hbmFnZWQgd2l0aCBEVEF1dG9zdWdnZXN0cGFuZWwgYnkgZGVmYXVsdCwgYnV0IGlmIERUQXV0b3N1Z2dlc3QgaXMgdXNlZCBzZXBlcmF0ZWxseSBvd24gaW1wbGVtZW50YXRpb24gbXVzdCBiZSBwcm92aWRlZC5cbiAqICAgIHNvdXJjZXM9e3NvdXJjZXN9XG4gKiAgICB0YXJnZXRzPXt0YXJnZXRzfVxuICogICAgaXNNb2JpbGUgIC8vIE9wdGlvbmFsLiBEZWZhdWx0cyB0byBmYWxzZS4gV2hldGhlciB0byB1c2UgbW9iaWxlIHNlYXJjaC5cbiAqICAgIG1vYmlsZUxhYmVsPVwiQ3VzdG9tIGxhYmVsXCIgLy8gT3B0aW9uYWwuIEN1c3RvbSBsYWJlbCB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBpbnB1dENsYXNzTmFtZT1cIlwiIC8vIE9wdGlvbmFsLiBDdXN0b20gY2xhc3NuYW1lIGFwcGxpZWQgdG8gdGhlIGlucHV0IGVsZW1lbnQgb2YgdGhlIGNvbXBvbmVudCBmb3IgcHJvdmlkaW5nIENTUyBzdHlsZXMuXG4gKiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI9IC8vIE9wdGlvbmFsLiBDdXN0b24gdHJhbnNsYXRlZCBwbGFjZWhvbGRlciB0ZXh0IGZvciBhdXRvc3VnZ2VzdCBmaWVsZC5cbiAqL1xuY2xhc3MgRFRBdXRvc3VnZ2VzdCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuYW55LmlzUmVxdWlyZWQsXG4gICAgYXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYyxcbiAgICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0aW1lWm9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdW5sb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZlBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBtb2RlSWNvbkNvbG9yczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJlcXVpcmVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgYXV0b0ZvY3VzOiBmYWxzZSxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIGljb246IHVuZGVmaW5lZCxcbiAgICB2YWx1ZTogJycsXG4gICAgdHJhbnNwb3J0TW9kZTogdW5kZWZpbmVkLFxuICAgIGxhbmc6ICdmaScsXG4gICAgc291cmNlczogW10sXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGNvbG9yOiAnIzAwN2FjOScsXG4gICAgaG92ZXJDb2xvcjogJyMwMDYyYTEnLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6ICcjMDA3NGJlJyxcbiAgICB0aW1lWm9uZTogJ0V1cm9wZS9IZWxzaW5raScsXG4gICAgcGF0aE9wdHM6IHtcbiAgICAgIHJvdXRlc1ByZWZpeDogJ2xpbmphdCcsXG4gICAgICBzdG9wc1ByZWZpeDogJ3B5c2FraXQnLFxuICAgIH0sXG4gICAgbW9iaWxlTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBpbnB1dENsYXNzTmFtZTogJycsXG4gICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyOiB1bmRlZmluZWQsXG4gICAgZm9udFdlaWdodHM6IHtcbiAgICAgIG1lZGl1bTogNTAwLFxuICAgIH0sXG4gICAgbW9kZUljb25Db2xvcnM6IHtcbiAgICAgICdtb2RlLWJ1cyc6ICcjMDA3YWM5JyxcbiAgICAgICdtb2RlLXJhaWwnOiAnIzhjNDc5OScsXG4gICAgICAnbW9kZS10cmFtJzogJyMwMDgxNTEnLFxuICAgICAgJ21vZGUtbWV0cm8nOiAnI2VkOGMwMCcsXG4gICAgICAnbW9kZS1mZXJyeSc6ICcjMDA3QTk3JyxcbiAgICAgICdtb2RlLWNpdHliaWtlJzogJyNmMmI2MmQnLFxuICAgICAgJ21vZGUtZnVuaWN1bGFyJzogJyNmZjAwZmYnLFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IGZhbHNlLFxuICAgIG1vZGVTZXQ6IHVuZGVmaW5lZCxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgICByZWZQb2ludDoge30sXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gICAgbW9tZW50LnR6LnNldERlZmF1bHQocHJvcHMudGltZVpvbmUpO1xuICAgIG1vbWVudC5sb2NhbGUocHJvcHMubGFuZyk7XG5cbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgdmFsdWU6IHByb3BzLnZhbHVlLFxuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICBzb3VyY2VzOiBwcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHR5cGluZ1RpbWVyOiBudWxsLFxuICAgICAgdHlwaW5nOiBmYWxzZSxcbiAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICBzdWdnZXN0aW9uSW5kZXg6IDAsXG4gICAgICBjbGVhbkV4ZWN1dGVkOiBmYWxzZSxcbiAgICAgIHNjcm9sbFk6IDAsXG4gICAgfTtcbiAgICBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpLmZvckVhY2gobGFuZyA9PiB7XG4gICAgICBpMThuZXh0LmFkZFJlc291cmNlQnVuZGxlKGxhbmcsICd0cmFuc2xhdGlvbicsIHRyYW5zbGF0aW9uc1tsYW5nXSk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBEVC00MDc0OiBXaGVuIGEgdXNlcidzIGxvY2F0aW9uIGlzIHVwZGF0ZWQgRFRBdXRvc3VnZ2VzdCB3b3VsZCByZS1yZW5kZXIgY2F1c2luZyBzdWdnZXN0aW9uIGxpc3QgdG8gcmVzZXQuXG4gIC8vIFRoaXMgd2lsbCBwcmV2ZW50IGl0LlxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgICByZXR1cm4gIWlzRXF1YWwobmV4dFN0YXRlLCB0aGlzLnN0YXRlKSB8fCAhaXNFcXVhbChuZXh0UHJvcHMsIHRoaXMucHJvcHMpO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlID0gKCkgPT4ge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gIH07XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyA9IG5leHRQcm9wcyA9PiB7XG4gICAgLy8gd2FpdCB1bnRpbCBhZGRyZXNzIGlzIHNldCBvciBnZW9sb2NhdGlvbmluZyBmYWlsc1xuICAgIGlmIChuZXh0UHJvcHMudmFsdWUgIT09IHRoaXMuc3RhdGUudmFsdWUgJiYgIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBuZXh0UHJvcHMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgb25DaGFuZ2UgPSAoZXZlbnQsIHsgbmV3VmFsdWUsIG1ldGhvZCB9KSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICB2YWx1ZTogdGhpcy5mSW5wdXQgfHwgbmV3VmFsdWUgfHwgJycsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBSZW1vdmUgZmlsbGVkIGlucHV0IHZhbHVlIHNvIGl0IHdvbnQgYmUgcmV1c2VkIHVubmVjZXNzYXJ5XG4gICAgdGhpcy5mSW5wdXQgPSBudWxsO1xuICAgIGlmICghdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBuZXdTdGF0ZS5lZGl0aW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBuZXdWYWx1ZSB8fCAnJyB9KSxcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChtZXRob2QgIT09ICdlbnRlcicgfHwgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gdGVzdCBhYm92ZSBkcm9wcyB1bm5lY2Vzc2FyeSB1cGRhdGVcbiAgICAgIC8vIHdoZW4gdXNlciBoaXRzIGVudGVyIGJ1dCBzZWFyY2ggaXMgdW5maW5pc2hlZFxuICAgICAgaWYgKHRoaXMuc3RhdGUudHlwaW5nVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3RhdGUudHlwaW5nVGltZXIpO1xuICAgICAgfVxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ3R5cGUnKSB7XG4gICAgICAgIC8vIGFmdGVyIHRpbWVvdXQgcnVucywgYXJpYSBhbGVydCB3aWxsIGFubm91bmNlIGN1cnJlbnQgc2VsZWN0aW9uXG4gICAgICAgIGNvbnN0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHR5cGluZzogZmFsc2UgfSk7XG4gICAgICAgIH0sIDEwMDApO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmdUaW1lciA9IHRpbWVyO1xuICAgICAgICBuZXdTdGF0ZS50eXBpbmcgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgfVxuICB9O1xuXG4gIG9uQmx1ciA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5zdGF0ZS5yZW5kZXJNb2JpbGVTZWFyY2gpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIH1cbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgIH0pO1xuICB9O1xuXG4gIG9uU2VsZWN0ZWQgPSAoZSwgcmVmKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiBbJ0Zhdm91cml0ZScsICdCYWNrJ10sXG4gICAgICAgICAgICBvd25QbGFjZXM6IHRydWUsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgcmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snIHx8XG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiByZWYuc3VnZ2VzdGlvbi50eXBlLFxuICAgICAgICAgICAgc3VnZ2VzdGlvbkluZGV4OiByZWYuc3VnZ2VzdGlvbkluZGV4LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6ICcnIH0pO1xuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IHRydWU7IC8vIHNlbGVjdGlvbiBkb25lLCBkbyBub3QgbGV0IHVwY29taW5nIGtleWJvYXJkIGV2ZW50cyBjb25mdXNlIHRoZSBmbG93XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgICAgdmFsdWU6IHJlZi5zdWdnZXN0aW9uVmFsdWUsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludHMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKHJlZi5zdWdnZXN0aW9uLCByZWYuc3VnZ2VzdGlvbkluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChyZWYuc3VnZ2VzdGlvbiwgdGhpcy5wcm9wcy5pZCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgICAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgICAgICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Eb25lID0gZmFsc2U7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICBwcmV2U3RhdGUgPT4gKHtcbiAgICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBwcmV2U3RhdGUudmFsdWUsXG4gICAgICAgIH0pLFxuICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLCAvLyBzZWFyY2ggbWF5IGZpbmlzaCBkdXJpbmcgc3RhdGUgY2hhbmdlXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgfSk7XG4gIH07XG5cbiAgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gICAgaWYgKFxuICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiBnZXRMYWJlbChzdWdnZXN0aW9uLnByb3BlcnRpZXMpO1xuICB9O1xuXG4gIGNoZWNrUGVuZGluZ1NlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbGlkXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIGFjY2VwdCBhZnRlciBhbGwgb25nb2luZyBzZWFyY2hlcyBoYXZlIGZpbmlzaGVkXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gJiYgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gZmluaXNoIHRoZSBzZWxlY3Rpb24gYnkgcGlja2luZyBmaXJzdCA9IGJlc3QgbWF0Y2ggb3Igd2l0aCAnRnV0dXJlUm91dGUnIGJ5IHN1Z2dlc3Rpb25JbmRleFxuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1t0aGlzLnN0YXRlLnN1Z2dlc3Rpb25JbmRleF0sXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgnY2xlYXItYnV0dG9uLWxhYmVsJyl9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGZldGNoRnVuY3Rpb24gPSAoeyB2YWx1ZSwgY2xlYW5FeGVjdXRlZCB9KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7IHZhbGlkOiBmYWxzZSwgY2xlYW5FeGVjdXRlZDogIWNsZWFuRXhlY3V0ZWQgPyBmYWxzZSA6IGNsZWFuRXhlY3V0ZWQgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgICAgIC8vIGRvIG5vdCBsZXQgY29tcG9uZW50IGNhc3QgdW5uZWNlc3NhcnkgcmVxdWVzdHNcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9XG4gICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcbiAgICAgICAgbGV0IHRhcmdldHM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm93blBsYWNlcykge1xuICAgICAgICAgIHRhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ1N0b3BzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSkge1xuICAgICAgICAgIHRhcmdldHMgPSBbLi4udGhpcy5wcm9wcy50YXJnZXRzXTtcbiAgICAgICAgICAvLyBpbiBkZXNrdG9wLCBmYXZvcml0ZXMgYXJlIGFjY2Vzc2VkIHZpYSBzdWIgc2VhcmNoXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGUgJiZcbiAgICAgICAgICAgIChpc0VtcHR5KHRoaXMucHJvcHMuc291cmNlcykgfHxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgIGxvY2F0aW9uIGZhdm91cml0ZXMgaW4gZGVza3RvcCBzZWFyY2ggKGNvbGxlY3Rpb24gaXRlbSByZXBsYWNlcyBpdCBpbiB0YXJnZXQgYXJyYXkpXG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPVxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcyAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcy5maWx0ZXIoXG4gICAgICAgICAgICBzID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgICAgIHMgPT09ICdGYXZvdXJpdGUnICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuc3RhdGUub3duUGxhY2VzICYmXG4gICAgICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQsXG4gICAgICAgICAgdGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMuZ2VvY29kaW5nU2l6ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDogdmFsdWUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFhYWCB0cmFuc2xhdGVzIGN1cnJlbnQgbG9jYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPT5cbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMudGltZSA+IG1vbWVudCgpLnVuaXgoKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChzdWdnZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkID0geyAuLi5zdWdnZXN0aW9uIH07XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLnByb3BlcnRpZXMubGFiZWxJZCA9IGkxOG5leHQudChcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgfHxcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5wcm9wcy5wYXRoT3B0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLnJlZlBvaW50LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGNsZWFySW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJywgY2xlYW5FeGVjdXRlZDogdHJ1ZSB9KSxcbiAgICApO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2xlYXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGVhcih0aGlzLnByb3BzLmlkKTtcbiAgICB9XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIGlucHV0Q2xpY2tlZCA9IGlucHV0VmFsdWUgPT4ge1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucHJvcHMubG9jaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIC8vIHJlc2V0IGF0IHN0YXJ0LCBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkIHNvbWV0aGluZ1xuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBEVC0zMjYzOiBhZGRlZCBzdGF0ZUtleURvd25cbiAgICAgIGNvbnN0IHN0YXRlS2V5RG93biA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIERULTMyNjM6IGFkZGVkIGlmLWVsc2Ugc3RhdGVtZW50XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgfHwgIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlS2V5RG93biwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIXRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVuZGVyTW9iaWxlU2VhcmNoOiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBzdG9yZUlucHV0UmVmZXJlbmNlID0gYXV0b3N1Z2dlc3QgPT4ge1xuICAgIGlmIChhdXRvc3VnZ2VzdCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5pbnB1dCA9IGF1dG9zdWdnZXN0LmlucHV0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuc3RvcmVSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zdG9yZVJlZihhdXRvc3VnZ2VzdC5pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIEZpbGwgaW5wdXQgd2hlbiB1c2VyIGNsaWNrcyBmaWxsIGlucHV0IGJ1dHRvbiBpbiBzdHJlZXQgc3VnZ2VzdGlvbiBpdGVtXG4gIGZpbGxJbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICB0aGlzLmZJbnB1dCA9IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lLFxuICAgICAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uOiBuZXdWYWx1ZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lIH0pO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbSA9XG4gICAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSksXG4gICAgICAgICAgfVxuICAgICAgICA6IGl0ZW07XG4gICAgY29uc3QgY29udGVudCA9IGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pO1xuICAgIHJldHVybiAoXG4gICAgICA8U3VnZ2VzdGlvbkl0ZW1cbiAgICAgICAgaXRlbT17bmV3SXRlbX1cbiAgICAgICAgY29udGVudD17Y29udGVudH1cbiAgICAgICAgbG9hZGluZz17IXRoaXMuc3RhdGUudmFsaWR9XG4gICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICBhcmlhRmF2b3VyaXRlU3RyaW5nPXtpMThuZXh0LnQoJ2Zhdm91cml0ZScpfVxuICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICBmaWxsSW5wdXQ9e3RoaXMuZmlsbElucHV0fVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9iaWxlU2VhcmNoID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMudW5sb2NrKCk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdGhpcy5zdGF0ZS5zY3JvbGxZKTtcbiAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBrZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleTtcbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgaWYgKGtleUNvZGUgPT09ICdFbnRlcicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBlbmRpbmdTZWxlY3Rpb246IHRydWUgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXRDbGlja2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGtleUNvZGUgPT09ICdFbnRlcicgfHwga2V5Q29kZSA9PT0gJ0Fycm93RG93bicpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbHVlID09PSAnJ1xuICAgICkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICB9O1xuICAgICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnVGFiJykge1xuICAgICAgdGhpcy5vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgPSAoKSA9PiB7XG4gICAgbGV0IGxhYmVsID0gW107XG4gICAgY29uc3QgZmlyc3RTdWdnZXN0aW9uID0gdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXTtcbiAgICBpZiAoZmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgICBpZiAoZmlyc3RTdWdnZXN0aW9uLnR5cGUgJiYgZmlyc3RTdWdnZXN0aW9uLnR5cGUuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICAgIGxhYmVsLnB1c2goaTE4bmV4dC50KCdmYXZvdXJpdGUnKSk7XG4gICAgICB9XG4gICAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudCh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdKSk7XG4gICAgfVxuICAgIHJldHVybiBbLi4ubmV3IFNldChsYWJlbCldLmpvaW4oJyAtICcpO1xuICB9O1xuXG4gIGNsZWFyT2xkU2VhcmNoZXMgPSAoKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY29udGV4dCxcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMsXG4gICAgICBjbGVhckZ1dHVyZVJvdXRlcyxcbiAgICB9ID0gdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQgPSAoKSA9PlxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbi1zdG9wLW5lYXIteW91JztcblxuICBjbGVhckxvY2F0aW9uVGV4dCA9ICgpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBbXG4gICAgICAnVmFsaXR0dSBzaWphaW50aScsXG4gICAgICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICAgICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICAnU2VsZWN0ZWQgbG9jYXRpb24nLFxuICAgICAgJ1ZhbGQgcG9zaXRpb24nLFxuICAgICAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdNaW4gcG9zaXRpb24nLFxuICAgICAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ1lvdXIgY3VycmVudCBsb2NhdGlvbicsXG4gICAgXTtcbiAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHRoaXMuc3RhdGUudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB9XG4gIH07XG5cbiAgb25Gb2N1cyA9ICgpID0+IHtcbiAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG5cbiAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHsgc2Nyb2xsWSB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgICBjb25zdCB7XG4gICAgICB2YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoLFxuICAgICAgY2xlYW5FeGVjdXRlZCxcbiAgICB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgID8gdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5wbGFjZWhvbGRlciksXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtcbiAgICAgICAgICB0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJydcbiAgICAgICAgfSAke3N0eWxlc1t0aGlzLnByb3BzLmlkXSB8fCAnJ30gJHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgfSAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9YCxcbiAgICAgICksXG4gICAgICBvbktleURvd246IHRoaXMua2V5RG93biwgLy8gRFQtMzI2M1xuICAgICAgcmVxdWlyZWQ6IHRoaXMucHJvcHMucmVxdWlyZWQsXG4gICAgfTtcbiAgICBjb25zdCBhcmlhQmFySWQgPSB0aGlzLnByb3BzLmlkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBsZXQgU2VhcmNoQmFySWQgPSB0aGlzLnByb3BzLmFyaWFMYWJlbCB8fCBpMThuZXh0LnQoYXJpYUJhcklkKTtcbiAgICBTZWFyY2hCYXJJZCA9IFNlYXJjaEJhcklkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKS5jb25jYXQoJy4nKTsgLy8gRnVsbCBzdG9wIG1ha2VzIHNjcmVlbiByZWFkZXIgc3BlZWNoIGNsZWFyZXIuXG4gICAgY29uc3QgYXJpYVJlcXVpcmVkVGV4dCA9IHRoaXMucHJvcHMucmVxdWlyZWRcbiAgICAgID8gYCR7aTE4bmV4dC50KCdyZXF1aXJlZCcpfS5gXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGFyaWFMYWJlbEluc3RydWN0aW9ucyA9IHRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgID8gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZScpXG4gICAgICA6IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJyk7XG4gICAgY29uc3QgbW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCA9XG4gICAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luJ1xuICAgICAgICA/IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nKVxuICAgICAgICA6ICcnO1xuICAgIGNvbnN0IGFyaWFMYWJlbFRleHQgPSBhcmlhTGFiZWxJbnN0cnVjdGlvbnNcbiAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgLmNvbmNhdChtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0KTtcblxuICAgIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgICAgY291bnQ6IHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFyaWFDdXJyZW50U3VnZ2VzdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkgfHwgdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gaTE4bmV4dC50KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIHNlbGVjdGlvbjogdGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICB7IXRoaXMuc3RhdGUudHlwaW5nICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmVkaXRpbmcgJiZcbiAgICAgICAgICAgIGAke2FyaWFTdWdnZXN0aW9uTGVufSAke2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMucHJvcHMuaXNNb2JpbGUgJiYgKFxuICAgICAgICAgIDxNb2JpbGVTZWFyY2hcbiAgICAgICAgICAgIHNlYXJjaE9wZW49e3JlbmRlck1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e3RoaXMuY2xlYXJPbGRTZWFyY2hlc31cbiAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgY2xlYXJJbnB1dD17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17W1xuICAgICAgICAgICAgICAuLi5zdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjbGVhci1zZWFyY2gtaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWxJZDogaTE4bmV4dC50KCdjbGVhci1zZWFyY2gtaGlzdG9yeScpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQoKVxuICAgICAgICAgICAgICAgID8gaTE4bmV4dC50KCdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJylcbiAgICAgICAgICAgICAgICA6IGlucHV0UHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZmV0Y2hGdW5jdGlvbj17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17dGhpcy5nZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICBjbG9zZUhhbmRsZT17dGhpcy5jbG9zZU1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKCkpfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICBkaWFsb2dIZWFkZXJUZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJyl9XG4gICAgICAgICAgICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdkZWxldGUnKX1cbiAgICAgICAgICAgIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2FuY2VsJyl9XG4gICAgICAgICAgICBjbGVhcklucHV0QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgICAgICAgIGZvY3VzSW5wdXQ9e2NsZWFuRXhlY3V0ZWR9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshcmVuZGVyTW9iaWxlU2VhcmNoICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAnLS1jb2xvcic6IGAke3RoaXMucHJvcHMuY29sb3J9YCxcbiAgICAgICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHt0aGlzLnByb3BzLmhvdmVyQ29sb3J9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMuaWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1tgYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbmBdLFxuICAgICAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYCxcbiAgICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnKSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9e2Ake3RoaXMucHJvcHMuaWNvbn1gfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8QXV0b3N1Z2dlc3RcbiAgICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnM9e3RoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17dGhpcy5nZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uPXshdGhpcy5zdGF0ZS5vd25QbGFjZXN9XG4gICAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IGh0bWxGb3I9e3RoaXMucHJvcHMuaWR9PlxuICAgICAgICAgICAgICAgICAgICB7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmlucHV0Q2xpY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmtleURvd259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5wfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnZhbHVlICYmIHRoaXMuY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayA9IHdpdGhTY3JvbGxMb2NrKERUQXV0b3N1Z2dlc3QpO1xuXG5leHBvcnQgZGVmYXVsdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2s7XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGNvbnRhaW5zIFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9wZXJ0aWVzOiB7XG4gICAgXCJpZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJnaWRcIjogXCJndGZzbWF0a2E6c3RhdGlvbjpHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwibGF5ZXJcIjogXCJzdGF0aW9uXCIsXG4gICAgXCJzb3VyY2VcIjogXCJndGZzbWF0a2FcIixcbiAgICBcInNvdXJjZV9pZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJuYW1lXCI6IFwiUmF1dGF0aWVudG9yaVwiLFxuICAgIFwicG9zdGFsY29kZVwiOiBcIjAwMTAwXCIsXG4gICAgXCJwb3N0YWxjb2RlX2dpZFwiOiBcIndob3NvbmZpcnN0OnBvc3RhbGNvZGU6NDIxNDc5NTY5XCIsXG4gICAgXCJjb25maWRlbmNlXCI6IDEsXG4gICAgXCJhY2N1cmFjeVwiOiBcImNlbnRyb2lkXCIsXG4gICAgXCJjb3VudHJ5XCI6IFwiU3VvbWlcIixcbiAgICBcImNvdW50cnlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6Y291bnRyeTowXCIsXG4gICAgXCJjb3VudHJ5X2FcIjogXCJGSU5cIixcbiAgICBcInJlZ2lvblwiOiBcIlV1c2ltYWFcIixcbiAgICBcInJlZ2lvbl9naWRcIjogXCJ3aG9zb25maXJzdDpyZWdpb246ODU2ODMwNjdcIixcbiAgICBcImxvY2FsYWRtaW5cIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxhZG1pbl9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGFkbWluOjkwNzE5OTcxNVwiLFxuICAgIFwibG9jYWxpdHlcIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxpdHlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bG9jYWxpdHk6MTAxNzQ4NDE3XCIsXG4gICAgXCJuZWlnaGJvdXJob29kXCI6IFwiS2x1dXZpXCIsXG4gICAgXCJuZWlnaGJvdXJob29kX2dpZFwiOiBcIndob3NvbmZpcnN0Om5laWdoYm91cmhvb2Q6ODU4OTg4NDdcIixcbiAgICBcImxhYmVsXCI6IFwiUmF1dGF0aWVudG9yaSwga29pbGxpbmVuLCBLbHV1dmksIEhlbHNpbmtpXCJcbiAgICB9XG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRMYWJlbChwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5cbmNvbnN0IHdpdGhTY3JvbGxMb2NrID0gQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgbG9jaz17bG9ja30gdW5sb2NrPXt1bmxvY2t9IHsuLi5wcm9wc30gLz47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2Nyb2xsTG9jaztcbiJdLCJuYW1lcyI6WyJfZXh0ZW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImJpbmQiLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJ0aGlzIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGl0eSIsImluY2x1ZGVzIiwibGF5ZXIiLCJnaWQiLCJsYWJlbElkIiwiZ3Rmc0lkIiwicDEiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwidW5kZWZpbmVkIiwicDIiLCJNYXRoIiwiYWJzIiwibGFiZWwiLCJhZGRyZXNzIiwibm9ybWFsaXplIiwic3RyIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsIkxheWVyVHlwZSIsImlzU3RvcCIsImdldExheWVyUmFuayIsImluZGV4T2YiLCJzb3J0U2VhcmNoUmVzdWx0cyIsImxpbmVSZWdleHAiLCJyZXN1bHRzIiwidGVybSIsIkFycmF5IiwiaXNBcnJheSIsImlzTGluZUlkZW50aWZpZXIiLCJ2YWx1ZSIsInRlc3QiLCJub3JtYWxpemVkVGVybSIsImlzTGluZVNlYXJjaCIsIm9yZGVyZWRSZXN1bHRzIiwib3JkZXJCeSIsInJlc3VsdCIsInNob3J0TmFtZSIsImNvbmZpZGVuY2UiLCJtYXRjaCIsInJlc3VsdFByb3BlcnRpZXMiLCJtYXAiLCJmaWx0ZXIiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJERUZBVUxUX1BFTElBU19VUkwiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwibGF5ZXJzIiwidG9TdHJpbmciLCJmZWF0dXJlcyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJjb2RlIiwic3RvcE9yU3RhdGlvbiIsImlkcyIsInNsaWNlIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZmlsdGVyT2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJjb250ZXh0IiwiaXNQZWxpYXNMb2NhdGlvbkF3YXJlIiwibG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInBvc2l0aW9uIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsInN0YXR1cyIsInB1c2giLCJnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5Iiwic2VsZWN0UG9zaXRpb25Gb21NYXAiLCJpdGVtcyIsImZhdm91cml0ZUxvY2F0aW9ucyIsImZhdm91cml0ZVN0b3BzIiwiaGFzRmF2b3VyaXRlcyIsInNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJmYXZvdXJpdGVzIiwiZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zIiwiZmVlZGlzIiwiZ2Vvc291cmNlcyIsImxvY2F0aW9uSGlzdG9yeSIsInNpemUiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsImZpbHRlckZhdm91cml0ZVN0b3BzIiwiZGVkdXBlc3RvcHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiZ2V0TG9jYWxpdHkiLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwibW9kdWxlIiwiaG9va0NhbGxiYWNrIiwic29tZSIsImhvb2tzIiwic2V0SG9va0NhbGxiYWNrIiwiaXNPYmplY3QiLCJoYXNPd25Qcm9wIiwiYSIsImIiLCJpc09iamVjdEVtcHR5IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImlzVW5kZWZpbmVkIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJEYXRlIiwiYXJyIiwiZm4iLCJhcnJMZW4iLCJleHRlbmQiLCJ2YWx1ZU9mIiwiY3JlYXRlVVRDIiwiZm9ybWF0IiwibG9jYWxlIiwic3RyaWN0IiwiY3JlYXRlTG9jYWxPclVUQyIsInV0YyIsImRlZmF1bHRQYXJzaW5nRmxhZ3MiLCJlbXB0eSIsInVudXNlZFRva2VucyIsInVudXNlZElucHV0Iiwib3ZlcmZsb3ciLCJjaGFyc0xlZnRPdmVyIiwibnVsbElucHV0IiwiaW52YWxpZEVyYSIsImludmFsaWRNb250aCIsImludmFsaWRGb3JtYXQiLCJ1c2VySW52YWxpZGF0ZWQiLCJpc28iLCJwYXJzZWREYXRlUGFydHMiLCJlcmEiLCJtZXJpZGllbSIsInJmYzI4MjIiLCJ3ZWVrZGF5TWlzbWF0Y2giLCJnZXRQYXJzaW5nRmxhZ3MiLCJtIiwiX3BmIiwiaXNWYWxpZCIsIl9pc1ZhbGlkIiwiZmxhZ3MiLCJwYXJzZWRQYXJ0cyIsImlzTm93VmFsaWQiLCJpc05hTiIsIl9kIiwiZ2V0VGltZSIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJpc0Zyb3plbiIsImNyZWF0ZUludmFsaWQiLCJOYU4iLCJmdW4iLCJ0IiwibGVuIiwibW9tZW50UHJvcGVydGllcyIsInVwZGF0ZUluUHJvZ3Jlc3MiLCJjb3B5Q29uZmlnIiwidG8iLCJmcm9tIiwicHJvcCIsInZhbCIsIm1vbWVudFByb3BlcnRpZXNMZW4iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2kiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwiTW9tZW50IiwiY29uZmlnIiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJ3YXJuIiwibXNnIiwic3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzIiwiY29uc29sZSIsImRlcHJlY2F0ZSIsImZpcnN0VGltZSIsImRlcHJlY2F0aW9uSGFuZGxlciIsImFyZyIsImFyZ3MiLCJhcmdMZW4iLCJFcnJvciIsInN0YWNrIiwiZGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlU2ltcGxlIiwiaXNGdW5jdGlvbiIsIkZ1bmN0aW9uIiwic2V0IiwiX2NvbmZpZyIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWxQYXJzZSIsIm1lcmdlQ29uZmlncyIsInBhcmVudENvbmZpZyIsImNoaWxkQ29uZmlnIiwiTG9jYWxlIiwiZGVmYXVsdENhbGVuZGFyIiwic2FtZURheSIsIm5leHREYXkiLCJuZXh0V2VlayIsImxhc3REYXkiLCJsYXN0V2VlayIsInNhbWVFbHNlIiwiY2FsZW5kYXIiLCJtb20iLCJub3ciLCJvdXRwdXQiLCJfY2FsZW5kYXIiLCJ6ZXJvRmlsbCIsIm51bWJlciIsInRhcmdldExlbmd0aCIsImZvcmNlU2lnbiIsImFic051bWJlciIsInplcm9zVG9GaWxsIiwicG93IiwibWF4Iiwic3Vic3RyIiwiZm9ybWF0dGluZ1Rva2VucyIsImxvY2FsRm9ybWF0dGluZ1Rva2VucyIsImZvcm1hdEZ1bmN0aW9ucyIsImZvcm1hdFRva2VuRnVuY3Rpb25zIiwiYWRkRm9ybWF0VG9rZW4iLCJ0b2tlbiIsInBhZGRlZCIsIm9yZGluYWwiLCJmdW5jIiwibG9jYWxlRGF0YSIsInJlbW92ZUZvcm1hdHRpbmdUb2tlbnMiLCJtYWtlRm9ybWF0RnVuY3Rpb24iLCJhcnJheSIsImZvcm1hdE1vbWVudCIsImV4cGFuZEZvcm1hdCIsImludmFsaWREYXRlIiwicmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zIiwibG9uZ0RhdGVGb3JtYXQiLCJsYXN0SW5kZXgiLCJkZWZhdWx0TG9uZ0RhdGVGb3JtYXQiLCJMVFMiLCJMVCIsIkwiLCJMTCIsIkxMTCIsIkxMTEwiLCJfbG9uZ0RhdGVGb3JtYXQiLCJmb3JtYXRVcHBlciIsInRvVXBwZXJDYXNlIiwidG9rIiwiZGVmYXVsdEludmFsaWREYXRlIiwiX2ludmFsaWREYXRlIiwiZGVmYXVsdE9yZGluYWwiLCJkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsIiwiZGVmYXVsdFJlbGF0aXZlVGltZSIsImZ1dHVyZSIsInBhc3QiLCJzIiwic3MiLCJtbSIsImgiLCJoaCIsImQiLCJkZCIsInciLCJ3dyIsIk0iLCJNTSIsInkiLCJ5eSIsInJlbGF0aXZlVGltZSIsIndpdGhvdXRTdWZmaXgiLCJzdHJpbmciLCJpc0Z1dHVyZSIsIl9yZWxhdGl2ZVRpbWUiLCJwYXN0RnV0dXJlIiwiZGlmZiIsImFsaWFzZXMiLCJhZGRVbml0QWxpYXMiLCJ1bml0Iiwic2hvcnRoYW5kIiwibG93ZXJDYXNlIiwibm9ybWFsaXplVW5pdHMiLCJ1bml0cyIsIm5vcm1hbGl6ZU9iamVjdFVuaXRzIiwiaW5wdXRPYmplY3QiLCJub3JtYWxpemVkUHJvcCIsIm5vcm1hbGl6ZWRJbnB1dCIsInByaW9yaXRpZXMiLCJhZGRVbml0UHJpb3JpdHkiLCJwcmlvcml0eSIsImdldFByaW9yaXRpemVkVW5pdHMiLCJ1bml0c09iaiIsInUiLCJzb3J0IiwiaXNMZWFwWWVhciIsInllYXIiLCJhYnNGbG9vciIsImNlaWwiLCJmbG9vciIsInRvSW50IiwiYXJndW1lbnRGb3JDb2VyY2lvbiIsImNvZXJjZWROdW1iZXIiLCJpc0Zpbml0ZSIsIm1ha2VHZXRTZXQiLCJrZWVwVGltZSIsInNldCQxIiwibW9udGgiLCJkYXRlIiwiZGF5c0luTW9udGgiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsInByaW9yaXRpemVkTGVuIiwicmVnZXhlcyIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDMiLCJwNCIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJ0b2tlbkxlbiIsImFkZFdlZWtQYXJzZVRva2VuIiwiX3ciLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsIl9hIiwiWUVBUiIsIk1PTlRIIiwiREFURSIsIkhPVVIiLCJNSU5VVEUiLCJTRUNPTkQiLCJNSUxMSVNFQ09ORCIsIldFRUsiLCJXRUVLREFZIiwibW9kIiwibiIsIngiLCJtb2RNb250aCIsIm8iLCJtb250aHNTaG9ydCIsIm1vbnRocyIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNSZWdleCIsIm1vbnRoc1BhcnNlIiwiZGVmYXVsdExvY2FsZU1vbnRocyIsImRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCIsIk1PTlRIU19JTl9GT1JNQVQiLCJkZWZhdWx0TW9udGhzU2hvcnRSZWdleCIsImRlZmF1bHRNb250aHNSZWdleCIsImxvY2FsZU1vbnRocyIsIl9tb250aHMiLCJpc0Zvcm1hdCIsImxvY2FsZU1vbnRoc1Nob3J0IiwiX21vbnRoc1Nob3J0IiwiaGFuZGxlU3RyaWN0UGFyc2UiLCJtb250aE5hbWUiLCJpaSIsImxsYyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiX21vbnRoc1BhcnNlIiwiX2xvbmdNb250aHNQYXJzZSIsIl9zaG9ydE1vbnRoc1BhcnNlIiwibG9jYWxlTW9udGhzUGFyc2UiLCJfbW9udGhzUGFyc2VFeGFjdCIsInNldE1vbnRoIiwiZGF5T2ZNb250aCIsIm1pbiIsImdldFNldE1vbnRoIiwiZ2V0RGF5c0luTW9udGgiLCJjb21wdXRlTW9udGhzUGFyc2UiLCJfbW9udGhzU2hvcnRTdHJpY3RSZWdleCIsIl9tb250aHNTaG9ydFJlZ2V4IiwiX21vbnRoc1N0cmljdFJlZ2V4IiwiX21vbnRoc1JlZ2V4IiwiY21wTGVuUmV2Iiwic2hvcnRQaWVjZXMiLCJsb25nUGllY2VzIiwibWl4ZWRQaWVjZXMiLCJkYXlzSW5ZZWFyIiwicGFyc2VUd29EaWdpdFllYXIiLCJwYXJzZUludCIsImdldFNldFllYXIiLCJnZXRJc0xlYXBZZWFyIiwiY3JlYXRlRGF0ZSIsIm1zIiwiZ2V0RnVsbFllYXIiLCJzZXRGdWxsWWVhciIsImNyZWF0ZVVUQ0RhdGUiLCJVVEMiLCJnZXRVVENGdWxsWWVhciIsInNldFVUQ0Z1bGxZZWFyIiwiZmlyc3RXZWVrT2Zmc2V0IiwiZG93IiwiZG95IiwiZndkIiwiZ2V0VVRDRGF5IiwiZGF5T2ZZZWFyRnJvbVdlZWtzIiwid2VlayIsIndlZWtkYXkiLCJyZXNZZWFyIiwicmVzRGF5T2ZZZWFyIiwiZGF5T2ZZZWFyIiwid2Vla09mWWVhciIsInJlc1dlZWsiLCJ3ZWVrT2Zmc2V0Iiwid2Vla3NJblllYXIiLCJ3ZWVrT2Zmc2V0TmV4dCIsImxvY2FsZVdlZWsiLCJfd2VlayIsImRlZmF1bHRMb2NhbGVXZWVrIiwibG9jYWxlRmlyc3REYXlPZldlZWsiLCJsb2NhbGVGaXJzdERheU9mWWVhciIsImdldFNldFdlZWsiLCJhZGQiLCJnZXRTZXRJU09XZWVrIiwicGFyc2VXZWVrZGF5Iiwid2Vla2RheXNQYXJzZSIsInBhcnNlSXNvV2Vla2RheSIsInNoaWZ0V2Vla2RheXMiLCJ3cyIsIndlZWtkYXlzTWluIiwid2Vla2RheXNTaG9ydCIsIndlZWtkYXlzIiwid2Vla2RheXNNaW5SZWdleCIsIndlZWtkYXlzU2hvcnRSZWdleCIsIndlZWtkYXlzUmVnZXgiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXMiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiIsImRlZmF1bHRXZWVrZGF5c1JlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCIsImRlZmF1bHRXZWVrZGF5c01pblJlZ2V4IiwibG9jYWxlV2Vla2RheXMiLCJfd2Vla2RheXMiLCJkYXkiLCJsb2NhbGVXZWVrZGF5c1Nob3J0IiwiX3dlZWtkYXlzU2hvcnQiLCJsb2NhbGVXZWVrZGF5c01pbiIsIl93ZWVrZGF5c01pbiIsImhhbmRsZVN0cmljdFBhcnNlJDEiLCJ3ZWVrZGF5TmFtZSIsIl93ZWVrZGF5c1BhcnNlIiwiX3Nob3J0V2Vla2RheXNQYXJzZSIsIl9taW5XZWVrZGF5c1BhcnNlIiwibG9jYWxlV2Vla2RheXNQYXJzZSIsIl93ZWVrZGF5c1BhcnNlRXhhY3QiLCJfZnVsbFdlZWtkYXlzUGFyc2UiLCJnZXRTZXREYXlPZldlZWsiLCJnZXREYXkiLCJnZXRTZXRMb2NhbGVEYXlPZldlZWsiLCJnZXRTZXRJU09EYXlPZldlZWsiLCJjb21wdXRlV2Vla2RheXNQYXJzZSIsIl93ZWVrZGF5c1N0cmljdFJlZ2V4IiwiX3dlZWtkYXlzUmVnZXgiLCJfd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzU2hvcnRSZWdleCIsIl93ZWVrZGF5c01pblN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzTWluUmVnZXgiLCJtaW5wIiwic2hvcnRwIiwibG9uZ3AiLCJtaW5QaWVjZXMiLCJoRm9ybWF0IiwiaG91cnMiLCJrRm9ybWF0IiwibG93ZXJjYXNlIiwibWludXRlcyIsIm1hdGNoTWVyaWRpZW0iLCJfbWVyaWRpZW1QYXJzZSIsImxvY2FsZUlzUE0iLCJjaGFyQXQiLCJzZWNvbmRzIiwia0lucHV0IiwiX2lzUG0iLCJpc1BNIiwiX21lcmlkaWVtIiwicG9zIiwicG9zMSIsInBvczIiLCJkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSIsImdldFNldEhvdXIiLCJsb2NhbGVNZXJpZGllbSIsImlzTG93ZXIiLCJnbG9iYWxMb2NhbGUiLCJiYXNlQ29uZmlnIiwiZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIm1lcmlkaWVtUGFyc2UiLCJsb2NhbGVzIiwibG9jYWxlRmFtaWxpZXMiLCJjb21tb25QcmVmaXgiLCJhcnIxIiwiYXJyMiIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJjaG9vc2VMb2NhbGUiLCJuYW1lcyIsImoiLCJuZXh0IiwibG9hZExvY2FsZSIsImlzTG9jYWxlTmFtZVNhbmUiLCJvbGRMb2NhbGUiLCJleHBvcnRzIiwiX2FiYnIiLCJnZXRTZXRHbG9iYWxMb2NhbGUiLCJlIiwidmFsdWVzIiwiZ2V0TG9jYWxlIiwiZGVmaW5lTG9jYWxlIiwiYWJiciIsInBhcmVudExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsImxpc3RMb2NhbGVzIiwiY2hlY2tPdmVyZmxvdyIsIl9vdmVyZmxvd0RheU9mWWVhciIsIl9vdmVyZmxvd1dlZWtzIiwiX292ZXJmbG93V2Vla2RheSIsImV4dGVuZGVkSXNvUmVnZXgiLCJiYXNpY0lzb1JlZ2V4IiwidHpSZWdleCIsImlzb0RhdGVzIiwiaXNvVGltZXMiLCJhc3BOZXRKc29uUmVnZXgiLCJvYnNPZmZzZXRzIiwiVVQiLCJHTVQiLCJFRFQiLCJFU1QiLCJDRFQiLCJDU1QiLCJNRFQiLCJNU1QiLCJQRFQiLCJQU1QiLCJjb25maWdGcm9tSVNPIiwibCIsImFsbG93VGltZSIsImRhdGVGb3JtYXQiLCJ0aW1lRm9ybWF0IiwidHpGb3JtYXQiLCJleGVjIiwiaXNvRGF0ZXNMZW4iLCJpc29UaW1lc0xlbiIsImNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQiLCJleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzIiwieWVhclN0ciIsIm1vbnRoU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsInVudHJ1bmNhdGVZZWFyIiwicHJlcHJvY2Vzc1JGQzI4MjIiLCJjaGVja1dlZWtkYXkiLCJ3ZWVrZGF5U3RyIiwicGFyc2VkSW5wdXQiLCJjYWxjdWxhdGVPZmZzZXQiLCJvYnNPZmZzZXQiLCJtaWxpdGFyeU9mZnNldCIsIm51bU9mZnNldCIsImhtIiwiY29uZmlnRnJvbVJGQzI4MjIiLCJwYXJzZWRBcnJheSIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENNaW51dGVzIiwiY29uZmlnRnJvbVN0cmluZyIsImNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrIiwiZGVmYXVsdHMiLCJjIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiX3VzZVVUQyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNvbmZpZ0Zyb21BcnJheSIsImN1cnJlbnREYXRlIiwiZXhwZWN0ZWRXZWVrZGF5IiwieWVhclRvVXNlIiwiZGF5T2ZZZWFyRnJvbVdlZWtJbmZvIiwiX2RheU9mWWVhciIsIl9uZXh0RGF5Iiwid2Vla1llYXIiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiY3VyV2VlayIsIkdHIiwiVyIsIkUiLCJjcmVhdGVMb2NhbCIsImdnIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiZXJhc0NvbnZlcnRZZWFyIiwiaG91ciIsImlzUG0iLCJtZXJpZGllbUhvdXIiLCJjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkiLCJ0ZW1wQ29uZmlnIiwiYmVzdE1vbWVudCIsInNjb3JlVG9CZWF0IiwiY3VycmVudFNjb3JlIiwidmFsaWRGb3JtYXRGb3VuZCIsImJlc3RGb3JtYXRJc1ZhbGlkIiwiY29uZmlnZkxlbiIsInNjb3JlIiwiY29uZmlnRnJvbU9iamVjdCIsImRheU9yRGF0ZSIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsImlzVVRDIiwicHJvdG90eXBlTWluIiwib3RoZXIiLCJwcm90b3R5cGVNYXgiLCJwaWNrQnkiLCJtb21lbnRzIiwib3JkZXJpbmciLCJpc0R1cmF0aW9uVmFsaWQiLCJ1bml0SGFzRGVjaW1hbCIsIm9yZGVyTGVuIiwicGFyc2VGbG9hdCIsImlzVmFsaWQkMSIsImNyZWF0ZUludmFsaWQkMSIsImNyZWF0ZUR1cmF0aW9uIiwiRHVyYXRpb24iLCJkdXJhdGlvbiIsInllYXJzIiwicXVhcnRlcnMiLCJxdWFydGVyIiwid2Vla3MiLCJpc29XZWVrIiwiZGF5cyIsIm1pbGxpc2Vjb25kcyIsIl9taWxsaXNlY29uZHMiLCJfZGF5cyIsIl9kYXRhIiwiX2J1YmJsZSIsImlzRHVyYXRpb24iLCJhYnNSb3VuZCIsInJvdW5kIiwiY29tcGFyZUFycmF5cyIsImFycmF5MSIsImFycmF5MiIsImRvbnRDb252ZXJ0IiwibGVuZ3RoRGlmZiIsImRpZmZzIiwib2Zmc2V0Iiwic2VwYXJhdG9yIiwidXRjT2Zmc2V0Iiwic2lnbiIsIm9mZnNldEZyb21TdHJpbmciLCJjaHVua09mZnNldCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiY2xvbmVXaXRoT2Zmc2V0IiwibW9kZWwiLCJjbG9uZSIsInNldFRpbWUiLCJsb2NhbCIsImdldERhdGVPZmZzZXQiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFNldE9mZnNldCIsImtlZXBMb2NhbFRpbWUiLCJrZWVwTWludXRlcyIsImxvY2FsQWRqdXN0IiwiX2NoYW5nZUluUHJvZ3Jlc3MiLCJhZGRTdWJ0cmFjdCIsImdldFNldFpvbmUiLCJzZXRPZmZzZXRUb1VUQyIsInNldE9mZnNldFRvTG9jYWwiLCJzdWJ0cmFjdCIsInNldE9mZnNldFRvUGFyc2VkT2Zmc2V0IiwidFpvbmUiLCJoYXNBbGlnbmVkSG91ck9mZnNldCIsImlzRGF5bGlnaHRTYXZpbmdUaW1lIiwiaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkIiwiX2lzRFNUU2hpZnRlZCIsInRvQXJyYXkiLCJpc0xvY2FsIiwiaXNVdGNPZmZzZXQiLCJpc1V0YyIsImFzcE5ldFJlZ2V4IiwiaXNvUmVnZXgiLCJyZXQiLCJkaWZmUmVzIiwicGFyc2VJc28iLCJtb21lbnRzRGlmZmVyZW5jZSIsImlucCIsInBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UiLCJiYXNlIiwiaXNBZnRlciIsImlzQmVmb3JlIiwiY3JlYXRlQWRkZXIiLCJkaXJlY3Rpb24iLCJwZXJpb2QiLCJ0bXAiLCJpc0FkZGluZyIsImludmFsaWQiLCJTdHJpbmciLCJpc01vbWVudElucHV0IiwiaXNOdW1iZXJPclN0cmluZ0FycmF5IiwiaXNNb21lbnRJbnB1dE9iamVjdCIsInByb3BlcnR5Iiwib2JqZWN0VGVzdCIsInByb3BlcnR5VGVzdCIsInByb3BlcnR5TGVuIiwiYXJyYXlUZXN0IiwiZGF0YVR5cGVUZXN0IiwiaXNDYWxlbmRhclNwZWMiLCJnZXRDYWxlbmRhckZvcm1hdCIsIm15TW9tZW50IiwiY2FsZW5kYXIkMSIsInRpbWUiLCJmb3JtYXRzIiwic29kIiwic3RhcnRPZiIsImNhbGVuZGFyRm9ybWF0IiwibG9jYWxJbnB1dCIsImVuZE9mIiwiaXNCZXR3ZWVuIiwiaW5jbHVzaXZpdHkiLCJsb2NhbEZyb20iLCJsb2NhbFRvIiwiaXNTYW1lIiwiaW5wdXRNcyIsImlzU2FtZU9yQWZ0ZXIiLCJpc1NhbWVPckJlZm9yZSIsImFzRmxvYXQiLCJ0aGF0Iiwiem9uZURlbHRhIiwibW9udGhEaWZmIiwid2hvbGVNb250aERpZmYiLCJhbmNob3IiLCJ0b0lTT1N0cmluZyIsImtlZXBPZmZzZXQiLCJ0b0RhdGUiLCJpbnNwZWN0IiwiZGF0ZXRpbWUiLCJzdWZmaXgiLCJ6b25lIiwiaW5wdXRTdHJpbmciLCJkZWZhdWx0Rm9ybWF0VXRjIiwiZGVmYXVsdEZvcm1hdCIsInBvc3Rmb3JtYXQiLCJodW1hbml6ZSIsImZyb21Ob3ciLCJ0b05vdyIsIm5ld0xvY2FsZURhdGEiLCJNU19QRVJfU0VDT05EIiwiTVNfUEVSX01JTlVURSIsIk1TX1BFUl9IT1VSIiwiTVNfUEVSXzQwMF9ZRUFSUyIsIm1vZCQxIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwibG9jYWxTdGFydE9mRGF0ZSIsInV0Y1N0YXJ0T2ZEYXRlIiwic3RhcnRPZkRhdGUiLCJpc29XZWVrZGF5IiwidW5peCIsInRvT2JqZWN0IiwidG9KU09OIiwiaXNWYWxpZCQyIiwicGFyc2luZ0ZsYWdzIiwiaW52YWxpZEF0IiwiY3JlYXRpb25EYXRhIiwibG9jYWxlRXJhcyIsImVyYXMiLCJfZXJhcyIsInNpbmNlIiwidW50aWwiLCJsb2NhbGVFcmFzUGFyc2UiLCJlcmFOYW1lIiwibmFycm93IiwibG9jYWxlRXJhc0NvbnZlcnRZZWFyIiwiZGlyIiwiZ2V0RXJhTmFtZSIsImdldEVyYU5hcnJvdyIsImdldEVyYUFiYnIiLCJnZXRFcmFZZWFyIiwiZXJhc05hbWVSZWdleCIsImNvbXB1dGVFcmFzUGFyc2UiLCJfZXJhc05hbWVSZWdleCIsIl9lcmFzUmVnZXgiLCJlcmFzQWJiclJlZ2V4IiwiX2VyYXNBYmJyUmVnZXgiLCJlcmFzTmFycm93UmVnZXgiLCJfZXJhc05hcnJvd1JlZ2V4IiwibWF0Y2hFcmFBYmJyIiwibWF0Y2hFcmFOYW1lIiwibWF0Y2hFcmFOYXJyb3ciLCJtYXRjaEVyYVllYXJPcmRpbmFsIiwiX2VyYVllYXJPcmRpbmFsUmVnZXgiLCJhYmJyUGllY2VzIiwibmFtZVBpZWNlcyIsIm5hcnJvd1BpZWNlcyIsImFkZFdlZWtZZWFyRm9ybWF0VG9rZW4iLCJnZXR0ZXIiLCJnZXRTZXRXZWVrWWVhciIsImdldFNldFdlZWtZZWFySGVscGVyIiwiZ2V0U2V0SVNPV2Vla1llYXIiLCJnZXRJU09XZWVrc0luWWVhciIsImdldElTT1dlZWtzSW5JU09XZWVrWWVhciIsImlzb1dlZWtZZWFyIiwiZ2V0V2Vla3NJblllYXIiLCJ3ZWVrSW5mbyIsImdldFdlZWtzSW5XZWVrWWVhciIsIndlZWtzVGFyZ2V0Iiwic2V0V2Vla0FsbCIsImRheU9mWWVhckRhdGEiLCJnZXRTZXRRdWFydGVyIiwiZXJhc1BhcnNlIiwiZXJhWWVhck9yZGluYWxQYXJzZSIsImdldFNldERheU9mTW9udGgiLCJnZXRTZXREYXlPZlllYXIiLCJnZXRTZXRNaW51dGUiLCJnZXRTZXRNaWxsaXNlY29uZCIsImdldFNldFNlY29uZCIsInBhcnNlTXMiLCJnZXRab25lQWJiciIsImdldFpvbmVOYW1lIiwicHJvdG8iLCJjcmVhdGVVbml4IiwiY3JlYXRlSW5ab25lIiwicGFyc2Vab25lIiwicHJlUGFyc2VQb3N0Rm9ybWF0IiwiU3ltYm9sIiwiZm9yIiwiZXJhTmFycm93IiwiZXJhQWJiciIsImVyYVllYXIiLCJpc29XZWVrcyIsIndlZWtzSW5XZWVrWWVhciIsImlzb1dlZWtzSW5ZZWFyIiwiaXNvV2Vla3NJbklTT1dlZWtZZWFyIiwiaXNEU1QiLCJ6b25lQWJiciIsInpvbmVOYW1lIiwiZGF0ZXMiLCJpc0RTVFNoaWZ0ZWQiLCJwcm90byQxIiwiZ2V0JDEiLCJpbmRleCIsImZpZWxkIiwic2V0dGVyIiwibGlzdE1vbnRoc0ltcGwiLCJvdXQiLCJsaXN0V2Vla2RheXNJbXBsIiwibG9jYWxlU29ydGVkIiwic2hpZnQiLCJsaXN0TW9udGhzIiwibGlzdE1vbnRoc1Nob3J0IiwibGlzdFdlZWtkYXlzIiwibGlzdFdlZWtkYXlzU2hvcnQiLCJsaXN0V2Vla2RheXNNaW4iLCJmaXJzdERheU9mWWVhciIsImZpcnN0RGF5T2ZXZWVrIiwibGFuZ0RhdGEiLCJtYXRoQWJzIiwiYWRkU3VidHJhY3QkMSIsImFkZCQxIiwic3VidHJhY3QkMSIsImFic0NlaWwiLCJidWJibGUiLCJtb250aHNGcm9tRGF5cyIsIm1vbnRoc1RvRGF5cyIsImRheXNUb01vbnRocyIsImFzIiwidmFsdWVPZiQxIiwibWFrZUFzIiwiYWxpYXMiLCJhc01pbGxpc2Vjb25kcyIsImFzU2Vjb25kcyIsImFzTWludXRlcyIsImFzSG91cnMiLCJhc0RheXMiLCJhc1dlZWtzIiwiYXNNb250aHMiLCJhc1F1YXJ0ZXJzIiwiYXNZZWFycyIsImNsb25lJDEiLCJnZXQkMiIsIm1ha2VHZXR0ZXIiLCJ0aHJlc2hvbGRzIiwic3Vic3RpdHV0ZVRpbWVBZ28iLCJyZWxhdGl2ZVRpbWUkMSIsInBvc05lZ0R1cmF0aW9uIiwiZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmciLCJyb3VuZGluZ0Z1bmN0aW9uIiwiZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkIiwidGhyZXNob2xkIiwibGltaXQiLCJhcmdXaXRoU3VmZml4IiwiYXJnVGhyZXNob2xkcyIsIndpdGhTdWZmaXgiLCJ0aCIsImFicyQxIiwidG9JU09TdHJpbmckMSIsInRvdGFsU2lnbiIsInltU2lnbiIsImRheXNTaWduIiwiaG1zU2lnbiIsInRvdGFsIiwicHJvdG8kMiIsInRvSXNvU3RyaW5nIiwidmVyc2lvbiIsInJlbGF0aXZlVGltZVJvdW5kaW5nIiwicmVsYXRpdmVUaW1lVGhyZXNob2xkIiwiSFRNTDVfRk1UIiwiREFURVRJTUVfTE9DQUwiLCJEQVRFVElNRV9MT0NBTF9TRUNPTkRTIiwiREFURVRJTUVfTE9DQUxfTVMiLCJUSU1FIiwiVElNRV9TRUNPTkRTIiwiVElNRV9NUyIsImZhY3RvcnkiLCJyb290IiwibW9tZW50IiwiY2FjaGVkR3Vlc3MiLCJ6b25lcyIsImxpbmtzIiwiY291bnRyaWVzIiwiZ3Vlc3NlcyIsImxvZ0Vycm9yIiwibW9tZW50VmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJjaGFyQ29kZVRvSW50IiwiY2hhckNvZGUiLCJ1bnBhY2tCYXNlNjAiLCJ3aG9sZSIsImZyYWN0aW9uYWwiLCJtdWx0aXBsaWVyIiwiY2hhckNvZGVBdCIsImFycmF5VG9JbnQiLCJtYXBJbmRpY2VzIiwiaW5kaWNlcyIsInVucGFjayIsIm9mZnNldHMiLCJ1bnRpbHMiLCJJbmZpbml0eSIsImludFRvVW50aWwiLCJhYmJycyIsInBvcHVsYXRpb24iLCJab25lIiwicGFja2VkU3RyaW5nIiwiX3NldCIsIkNvdW50cnkiLCJjb3VudHJ5X25hbWUiLCJ6b25lX25hbWVzIiwiT2Zmc2V0QXQiLCJhdCIsInRpbWVTdHJpbmciLCJ0b1RpbWVTdHJpbmciLCJab25lU2NvcmUiLCJvZmZzZXRTY29yZSIsImFiYnJTY29yZSIsImZpbmRDaGFuZ2UiLCJsb3ciLCJoaWdoIiwibWlkIiwic29ydFpvbmVTY29yZXMiLCJsb2NhbGVDb21wYXJlIiwiYWRkVG9HdWVzc2VzIiwiZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIiwiZ3Vlc3Nlc09mZnNldCIsIm9mZnNldHNMZW5ndGgiLCJmaWx0ZXJlZEd1ZXNzZXMiLCJyZWJ1aWxkR3Vlc3MiLCJpbnRsTmFtZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsInJlc29sdmVkT3B0aW9ucyIsInRpbWVab25lIiwibm9ybWFsaXplTmFtZSIsInpvbmVTY29yZSIsImNoYW5nZSIsInN0YXJ0WWVhciIsImxhc3QiLCJ1c2VyT2Zmc2V0cyIsInpvbmVTY29yZXMiLCJnZXRab25lIiwic2NvcmVPZmZzZXRBdCIsImFkZFpvbmUiLCJwYWNrZWQiLCJub3JtYWxpemVkIiwiY2FsbGVyIiwibGluayIsImFkZExpbmsiLCJub3JtYWwwIiwibm9ybWFsMSIsIm5lZWRzT2Zmc2V0IiwiaXNVbml4VGltZXN0YW1wIiwibWVzc2FnZSIsInR6IiwicGFyc2UiLCJ1bnBhY2tlZCIsIl9pbmRleCIsInRpbWVzdGFtcCIsInpvbmVfbmFtZSIsImNvdW50cnlfY29kZSIsIm9mZnNldE5leHQiLCJvZmZzZXRQcmV2IiwibW92ZUFtYmlndW91c0ZvcndhcmQiLCJtb3ZlSW52YWxpZEZvcndhcmQiLCJvZmZzZXRBdCIsImRhdGFWZXJzaW9uIiwiX3pvbmVzIiwiX2xpbmtzIiwiX25hbWVzIiwiX2NvdW50cmllcyIsImxvYWQiLCJjb3VudHJ5X3pvbmVzIiwiYWRkQ291bnRyaWVzIiwiem9uZUV4aXN0cyIsImRpZFNob3dFcnJvciIsImd1ZXNzIiwiaWdub3JlQ2FjaGUiLCJ6b25lc0ZvckNvdW50cnkiLCJjb3VudHJ5Iiwid2l0aF9vZmZzZXQiLCJvbGQiLCJhYmJyV3JhcCIsIl96IiwicmVzZXRab25lV3JhcCIsImRlZmF1bHRab25lIiwieiIsInNldERlZmF1bHQiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsIm51bWJlcnNQYXN0IiwibnVtYmVyc0Z1dHVyZSIsInRyYW5zbGF0ZSIsInZlcmJhbE51bWJlciIsImxsIiwibGxsIiwibGxsbCIsInByb2Nlc3NSZWxhdGl2ZVRpbWUiLCJtb250aHNQYXJzZUV4YWN0Iiwid2Vla2RheXNQYXJzZUV4YWN0IiwidHJhbnNsYXRpb25zIiwiZGUiLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjYW5jZWwiLCJjdXJyZW50cG9zaXRpb24iLCJkZWxldGUiLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInBsYXRmb3JtIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwidmVoaWNsZXJlbnRhbHN0YXRpb24iLCJzdiIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJBdXRvc3VnZ2VzdFBhdGNoIiwiQXV0b3N1Z2dlc3QiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3VwZXIiLCJzZWxmIiwib25TdWdnZXN0aW9uVG91Y2hNb3ZlIiwianVzdFNlbGVjdGVkU3VnZ2VzdGlvbiIsInByZXNzZWRTdWdnZXN0aW9uIiwiTW9iaWxlU2VhcmNoIiwiYXBwRWxlbWVudCIsImNsb3NlSGFuZGxlIiwiY2xlYXJJbnB1dCIsInN1Z2dlc3Rpb25zIiwiaW5wdXRQcm9wcyIsImZldGNoRnVuY3Rpb24iLCJyZW5kZXJTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiYXJpYUxhYmVsIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJjbGVhck9sZFNlYXJjaGVzIiwiZGlhbG9nSGVhZGVyVGV4dCIsImRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0IiwiZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCIsImNsZWFySW5wdXRCdXR0b25UZXh0IiwiZm9jdXNJbnB1dCIsImNvbG9yIiwiaG92ZXJDb2xvciIsImFjY2Vzc2libGVQcmltYXJ5Q29sb3IiLCJzZWFyY2hPcGVuIiwiZm9udFdlaWdodHMiLCJzaG93U2Nyb2xsIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJzdHlsZXMiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwidXNlU3RhdGUiLCJpbnB1dFJlZiIsIlJlYWN0IiwidXNlUmVmIiwidXNlRWZmZWN0IiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJvbkNsb3NlIiwidXNlQ2FsbGJhY2siLCJvblNlbGVjdCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJnZXRWYWx1ZSIsInJlbmRlckl0ZW0iLCJjbGFzc05hbWUiLCJmb2N1cyIsImlzT3BlbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJvbkFmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwibWVkaXVtIiwiaHRtbEZvciIsIm9uQ2xpY2siLCJvbktleURvd24iLCJ0YWJJbmRleCIsIkljb24iLCJpbWciLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGFzVmFsdWUiLCJhdXRvRm9jdXMiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsIkZyYWdtZW50IiwidGhlbWUiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsInNoYXBlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJwbGFjZWhvbGRlciIsImJvb2wiLCJyIiwiZyIsIndpbmRvdyIsImlnbm9yZSIsImhlYWRlciIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsImJvZHkiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiYWN0aXZlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm91dGxpbmUiLCJzY3JvbGxUbyIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsInRvZ2dsZSIsImRpc3BhdGNoRXZlbnQiLCJmIiwiY2FuY2VsU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwidGFnTmFtZSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsIk8iLCJvZmZzZXRQYXJlbnQiLCJpbm5lckhlaWdodCIsIlMiLCJfIiwiSSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInB1c2hTdGF0ZSIsInNtb290aFNjcm9sbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aXRsZSIsIm1hdGNoTWVkaWEiLCJkZWZhdWx0UHJldmVudGVkIiwiYnV0dG9uIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsImNsb3Nlc3QiLCJob3N0bmFtZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJocmVmIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsInN0YXRlIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInNlbGVjdGVkSW5kZXgiLCJ1c2VEZWJvdW5jZSIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJ1c2VFbGVtZW50U2l6ZSIsIndpZHRoIiwiY2xpZW50V2lkdGgiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwidXNlSXNCcmVha3BvaW50IiwieHMiLCJtb2JpbGVTbWFsbCIsIm1vYmlsZSIsInRhYmxldCIsInRhYmxldExhcmdlIiwiZGVza3RvcFNtYWxsIiwiZGVza3RvcCIsImRlc2t0b3BMYXJnZSIsImlubmVyV2lkdGgiLCJ1c2VPblJlc2l6ZSIsInlvdXR1YmUiLCJQcml2YWN5TWFuYWdlckFQSSIsImFjdGlvbiIsInRydXN0ZSIsImNtYSIsImNhbGxBcGkiLCJjb25zZW50IiwidG9wIiwicG9zdE1lc3NhZ2UiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVNjcm9sbExvY2siLCJsb2NrIiwic2Nyb2xsWSIsInVubG9jayIsIl9faW1wb3J0RGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJ1c2VTbW9vdGhTY3JvbGwiLCJnbG9iYWxUaGlzIiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVmYXVsdE5TIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIm1vZGVzIiwiaTE4bmV4dCIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsImFycml2ZUJ5IiwiRFRBdXRvc3VnZ2VzdCIsIkNvbXBvbmVudCIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNoYW5nZUxhbmd1YWdlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJuZXh0UHJvcHMiLCJlZGl0aW5nIiwic2V0U3RhdGUiLCJuZXdWYWx1ZSIsIm5ld1N0YXRlIiwiZklucHV0IiwicmVuZGVyTW9iaWxlU2VhcmNoIiwiaXNNb2JpbGUiLCJ2YWxpZCIsInR5cGluZ1RpbWVyIiwidGltZXIiLCJ0eXBpbmciLCJvblNlbGVjdGVkIiwib3duUGxhY2VzIiwicGVuZGluZ1NlbGVjdGlvbiIsInN1Z2dlc3Rpb25JbmRleCIsInNlbGVjdGlvbkRvbmUiLCJzdWdnZXN0aW9uVmFsdWUiLCJibHVyIiwiaGFuZGxlVmlhUG9pbnRzIiwiZm9jdXNDaGFuZ2UiLCJpc0VtYmVkZGVkIiwiY2xvc2VNb2JpbGVTZWFyY2giLCJwcmV2U3RhdGUiLCJjaGVja1BlbmRpbmdTZWxlY3Rpb24iLCJvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQiLCJnZXRMYWJlbCIsImNsZWFyQnV0dG9uIiwiY2xlYW5FeGVjdXRlZCIsImlzTG9jYXRpb25TZWFyY2giLCJpc0VtcHR5IiwiZXhlY3V0ZVNlYXJjaCIsInNlYXJjaFJlc3VsdCIsInRyYW5zbGF0ZWQiLCJvbkNsZWFyIiwiaW5wdXRDbGlja2VkIiwiaW5wdXRWYWx1ZSIsImNsZWFyTG9jYXRpb25UZXh0Iiwic3RhdGVLZXlEb3duIiwic3RvcmVJbnB1dFJlZmVyZW5jZSIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJmaWxsSW5wdXQiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsIm1vZGVJY29uQ29sb3JzIiwibW9kZVNldCIsImtleURvd24iLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsImNsZWFyRnV0dXJlUm91dGVzIiwiaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQiLCJvbkZvY3VzIiwiYWRkUmVzb3VyY2VCdW5kbGUiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0U3RhdGUiLCJpc0VxdWFsIiwicmVuZGVyIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwidGhpbiIsImlucHV0Q2xhc3NOYW1lIiwiYXJpYUJhcklkIiwiU2VhcmNoQmFySWQiLCJhcmlhUmVxdWlyZWRUZXh0IiwiYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zIiwibW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCIsImFyaWFMYWJlbFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50IiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwic2VsZWN0aW9uIiwicm9sZSIsIm1vYmlsZUxhYmVsIiwiY3giLCJpY29uIiwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIiwiZGVmYXVsdFByb3BzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJhbnkiLCJhcnJheU9mIiwib2JqZWN0IiwiRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrIl0sIm1hcHBpbmdzIjoia3pEQUFlLFNBQVNBLElBWXRCLE9BWEFBLEVBQVdDLE9BQU9DLE9BQVNELE9BQU9DLE9BQU9DLE9BQVMsU0FBVUMsR0FDMUQsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlDLFVBQVVDLE9BQVFGLElBQUssQ0FDekMsSUFBSUcsRUFBU0YsVUFBVUQsR0FDdkIsSUFBSyxJQUFJSSxLQUFPRCxFQUNWUCxPQUFPUyxVQUFVQyxlQUFlQyxLQUFLSixFQUFRQyxLQUMvQ0wsRUFBT0ssR0FBT0QsRUFBT0MsSUFJM0IsT0FBT0wsR0FFRkosRUFBU2EsTUFBTUMsS0FBTVIsVUFDOUIsQ0NGZSxTQUFTUyxFQUFNQyxFQUFNQyxHQUNsQyxPQUFPRCxHQUFRQyxHQUFRRCxJQUFTQyxDQUNsQyxDQ1lBLE1BQU1DLEVBQWlCLENBQUMsT0FBUSxVQUFXLGdCQUFpQixvQkFDdERDLEVBQXNCLENBQUMsZ0NBQWlDLGVBRTlELFNBQVNDLEVBQWFDLEdBQ3BCLElBQUtBLEVBQ0gsTUFBTyxHQUVULE1BQU1DLEVBQVFELEVBQUdFLE1BQU0sS0FDdkIsT0FBcUIsSUFBakJELEVBQU1mLE9BQ0QsR0FFRCxZQUFXZSxFQUFNLGtCQUFrQkEsRUFBTSxJQUNuRCxDQUVlLFNBQVNFLEVBQVlDLEVBQU9DLEdBQ3pDLE1BQU1DLEVBQVNGLEVBQU1HLFdBQ2ZDLEVBQVNILEVBQU1FLFdBRXJCLEdBQW1CLGdCQUFmSCxFQUFNSyxNQUF5QyxnQkFBZkosRUFBTUksS0FBd0IsQ0FDaEUsTUFBTUMsRUFBS0osRUFBT0ssT0FDWkMsRUFBS04sRUFBT08sWUFDWkMsRUFBS04sRUFBT0csT0FDWkksRUFBS1AsRUFBT0ssWUFLbEIsTUFIZSxHQUFFSCxFQUFHTSxTQUFTTixFQUFHTyxhQUFhTCxFQUFHSSxTQUFTSixFQUFHSyxhQUM3QyxHQUFFSCxFQUFHRSxTQUFTRixFQUFHRyxhQUFhRixFQUFHQyxTQUFTRCxFQUFHRSxXQUk5RCxHQUFtQixnQkFBZmIsRUFBTUssTUFBeUMsZ0JBQWZKLEVBQU1JLEtBQ3hDLE9BQU8sRUFFVCxHQUNFWCxFQUFvQm9CLFNBQVNaLEVBQU9hLFFBQ3BDckIsRUFBb0JvQixTQUFTVixFQUFPVyxPQUNwQyxDQUdBLE9BRlliLEVBQU9jLEtBQU9yQixFQUFhTyxFQUFPZSxhQUNsQ2IsRUFBT1ksS0FBT3JCLEVBQWFTLEVBQU9hLFVBR2hELEdBQUlmLEVBQU9nQixRQUFVZCxFQUFPYyxPQUMxQixPQUFPaEIsRUFBT2dCLFNBQVdkLEVBQU9jLE9BRWxDLEdBQ0V6QixFQUFlcUIsU0FBU1osRUFBT2EsUUFDL0J0QixFQUFlcUIsU0FBU1YsRUFBT1csUUFDL0JiLEVBQU9jLEtBQ1BaLEVBQU9ZLElBRVAsT0FBT2QsRUFBT2MsTUFBUVosRUFBT1ksSUFHL0IsTUFBTUcsRUFBS25CLEdBQVNBLEVBQU1vQixTQUFXcEIsRUFBTW9CLFNBQVNDLGlCQUFjQyxFQUM1REMsRUFBS3RCLEdBQVNBLEVBQU1tQixTQUFXbkIsRUFBTW1CLFNBQVNDLGlCQUFjQyxFQUVsRSxTQUFJSCxHQUFNSSxHQUVKQyxLQUFLQyxJQUFJTixFQUFHLEdBQUtJLEVBQUcsSUFBTSxNQUFRQyxLQUFLQyxJQUFJTixFQUFHLEdBQUtJLEVBQUcsSUFBTSxPQUc1RGpDLEVBQU1ZLEVBQU9VLEtBQU1SLEVBQU9RLE9BQzFCdEIsRUFBTVksRUFBT3dCLE1BQU90QixFQUFPc0IsUUFDM0JwQyxFQUFNWSxFQUFPeUIsUUFBU3ZCLEVBQU91QixVQUM3QnJDLEVBQU1ZLEVBQU95QixRQUFTdkIsRUFBT3NCLFFBQzdCcEMsRUFBTVksRUFBT3dCLE1BQU90QixFQUFPdUIsVUFPbkMsQ0MzRkEsTUFBTUMsRUFBWUMsR0FDWEMsVUFBU0QsR0FHUEEsRUFBSUUsY0FGRixHQVFMQyxFQUVFLE9BRkZBLEVBR2Esa0JBSGJBLEVBSVcsZ0JBSlhBLEdBS2MsbUJBTGRBLEdBTVksaUJBTlpBLEdBT1ksaUJBUFpBLEdBUTJCLGdDQVIzQkEsR0FTUyxjQVRUQSxHQVVLLFVBVkxBLEdBV1csZ0JBWFhBLEdBWW9CLGVBWnBCQSxHQWFFLE9BYkZBLEdBZ0JrQixjQWhCbEJBLEdBaUJLLFVBakJMQSxHQWtCTSxXQUVDQyxHQUFTQSxFQUFHbEIsUUFBT1YsVUFDcEIsU0FBVlUsR0FDVSxrQkFBVkEsR0FDUyxTQUFUVixHQUNTLGtCQUFUQSxFQW9FVzZCLEdBQWVBLENBQUNuQixFQUFPaEMsS0FDbEMsT0FBUWdDLEdBQ04sS0FBS2lCLEVBQ0gsT0FBTyxFQUNULEtBQUtBLEVBQ0gsTUFBTyxHQUNULEtBQUtBLEdBQ0gsTUFBTyxHQUNULEtBQUtBLEdBQ0gsTUFBTyxJQUNULEtBQUtBLEdBQ0wsS0FBS0EsR0FDTCxLQUFLQSxFQUNMLEtBQUtBLEdBQ0wsS0FBS0EsR0FDSCxNQUFPLElBQ1QsS0FBS0EsR0FDSCxNQUFPLElBQ1QsS0FBS0EsR0FDSCxPQUFJRixVQUFTL0MsSUFBc0MsSUFBM0JBLEVBQU9vRCxRQUFRLFFBQzlCLElBRUYsSUFFVCxRQUVFLE1BQU8sSUFDVCxLQUFLSCxHQUVMLEtBQUtBLEdBRUwsS0FBS0EsR0FDSCxNQUFPLElBQ1QsS0FBS0EsR0FDSCxNQUFPLE1BbUJBSSxHQUFvQkEsQ0FBQ0MsRUFBWUMsRUFBU0MsRUFBTyxNQUM1RCxJQUFLQyxNQUFNQyxRQUFRSCxHQUNqQixPQUFPQSxFQUVULE1BQU1JLEVBQW1CQyxHQUN2QmIsVUFBU2EsSUFBVU4sR0FBY0EsRUFBV08sS0FBS0QsR0FFN0NFLEVBQWlCakIsRUFBVVcsR0FDM0JPLEVBQWVKLEVBQWlCRyxHQUVoQ0UsRUFBaUJDLFVBQ3JCVixFQUNBLENBRUVXLEdBQ0VILEdBQ0FKLEVBQWlCZCxFQUFVcUIsRUFBTzlDLFdBQVcrQyxhQUNzQixJQUFuRXRCLEVBQVVxQixFQUFPOUMsV0FBVytDLFdBQVdmLFFBQVFVLEdBQzNDLEVBQ0EsRUFFTkksSUFDRSxNQUFNRSxXQUFFQSxFQUFVcEMsTUFBRUEsRUFBS2hDLE9BQUVBLEdBQVdrRSxFQUFPOUMsV0FDN0MsR0FBOEIsSUFBMUIwQyxFQUFlL0QsT0FHakIsT0FBT29ELEdBQWFuQixFQUFPaEMsR0FLN0IsSUFBS29FLEVBRUgsT0FDRWpCLEdBQWFuQixFQUFPaEMsR0F2SFhxRSxFQUFDUCxFQUFnQlEsSUFDL0J2QixVQUFTZSxJQUE2QyxJQUExQkEsRUFBZS9ELE9BSTdCLENBQUMsT0FBUSxRQUFTLFVBQVcsYUFFN0N3RSxLQUFJMUMsR0FBUXlDLEVBQWlCekMsS0FDN0IyQyxRQUFPWixHQUFTYixVQUFTYSxJQUFVQSxFQUFNN0QsT0FBUyxJQUNsRHdFLEtBQUlYLElBQ0gsTUFBTWEsRUFBa0I1QixFQUFVZSxHQUNsQyxPQUFnRCxJQUE1Q2EsRUFBZ0JyQixRQUFRVSxHQUVuQixHQUFNQSxFQUFlL0QsT0FBUzBFLEVBQWdCMUUsT0FLL0MsR0FBTStELEVBQWUvRCxRQUFXK0QsRUFBZS9ELE9BQVMsRUFBRSxJQUVuRTJFLFFBQ0MsQ0FBQ0MsRUFBVUMsSUFBYUEsRUFBVUQsRUFBV0MsRUFBVUQsR0FDdkQsR0FwQkssRUFzSENOLENBQU1QLEVBQWdCSSxFQUFPOUMsWUFJakMsT0FBUVksR0FDTixLQUFLaUIsR0FFSCxPQUFPbUIsR0FEa0MsSUFBM0JwRSxFQUFPb0QsUUFBUSxRQUFnQixJQUFPLEtBR3RELEtBQUtILEdBRUwsS0FBS0EsR0FFTCxLQUFLQSxHQUNILE9BQU9tQixFQUFhLElBQ3RCLEtBQUtuQixHQUNILE9BQU9tQixFQUFhLElBQ3RCLFFBQ0UsT0FBT0EsS0FJZixDQUFDLE9BQVEsU0FHWCxPQUFPUyxVQUFTYixFQUFnQmhELEVBQVksRUFTakM4RCxHQUFjQSxDQUFDakQsRUFBTWtELElBRTlCQSxVQUVnQyxJQUFoQ2xELEVBQUttRCxZQUFZRCxHQUVWbEQsRUFBS29ELFVBQVUsRUFBR3BELEVBQUttRCxZQUFZRCxHQUFZLEdBRWpEbEQsRUN2Tk0sU0FBU3FELEdBQXNCQyxFQUFNQyxFQUFPQyxHQUN6RCxHQUFxQixpQkFBVkQsR0FBc0JBLEVBQU1yRixPQUFTLEVBQUcsQ0FDakQsTUFBTXVGLEVBQVFGLEVBQU1wQyxjQUFjdUMsT0FDNUJDLEVBQVlGLEVBQU12RCxTQUFTLE1BQVF1RCxFQUFNdkQsU0FBUyxLQUN4RCxPQUFPb0QsRUFBS1gsUUFBT2lCLElBQ2pCLElBQUkzRSxFQUFRLEdBQ1p1RSxFQUFPSyxTQUFRQyxJQUNiLElBQUkvQixFQUFRZ0MsVUFBSUgsRUFBTUUsR0FHbkJILEdBQ1UscUJBQVZHLEdBQTBDLFlBQVZBLElBQ2pDL0IsSUFHQUEsRUFBUUEsRUFBTTdDLE1BQU0sS0FDaEI2QyxFQUFNN0QsT0FBUyxFQUNqQjZELEVBQU1pQyxPQUFPakMsRUFBTTdELE9BQVMsRUFBRyxHQUN0QjZELEVBQU03RCxPQUFTLEdBQ3hCNkQsRUFBTWlDLE9BQU9qQyxFQUFNN0QsT0FBUyxFQUFHLEdBRWpDNkQsRUFBUUEsRUFBTWtDLEtBQUssTUFFakJsQyxJQUVBOUMsRUFERTBFLEVBQ00xRSxFQUFNaUYsT0FBT25DLEVBQU1aLGVBRW5CbEMsRUFBTWlGLE9BQ1puQyxFQUFNWixjQUFjZ0QsUUFBUSxLQUFNLEtBQUtqRixNQUFNLFVBS3JELElBQUssSUFBSWxCLEVBQUksRUFBR0EsRUFBSWlCLEVBQU1mLE9BQVFGLElBQ2hDLEdBQWdDLElBQTVCaUIsRUFBTWpCLEdBQUd1RCxRQUFRa0MsR0FFbkIsT0FBTyxFQUdYLE9BQU8sQ0FBSyxJQUloQixPQUFPSCxDQUNULENDdkRlLFNBQVNjLEdBQVVDLEVBQUtDLEdBQ3JDLE9BQUtELEVBR0V6RyxPQUFPMkcsS0FBS0YsR0FDaEIzQixLQUFJOEIsSUFDSCxNQUFNQyxFQUFJSCxHQUFVRSxFQUNkRSxFQUFJTCxFQUFJRyxHQUVkLE1BQW9CLGlCQUFORSxFQUNWTixHQUFVTSxFQUFHRCxHQUNaLEdBQUVFLG1CQUFtQkYsTUFBTUUsbUJBQW1CRCxJQUFJLElBRXhEVCxLQUFLLEtBWEMsRUFZWCxDQ2JBLE1BQU1XLEdBQVFDLFFBQVEsU0FBU0MsUUFFaEIsU0FBU0MsR0FBUUMsRUFBS0MsR0FDbkMsT0FBT0wsR0FDSmIsSUFDQ21CLFVBQVVGLElBQ1BDLElBQzBCLElBQXRCRCxFQUFJRyxPQUFPLE1BQWUsSUFBTSxLQUFPZixHQUFVYSxHQUNsRCxJQUNOLENBQ0VHLFFBQVMsSUFDVEMsT0FBUSxNQUVSQyxRQUFTLENBQ1BDLE9BQVEsc0JBSWJDLE1BQUtDLEdBQ0dBLEVBQUlDLE1BRWpCLENDL0JBLE1BQU1DLEdBQXFCLGlEQWlCWixTQUFTQyxHQUN0QkMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsR0FFQSxNQUFNQyxFQUFPUixFQUFlQSxFQUFhbkMsT0FBUyxLQUNsRCxHQUNFMkMsU0FFQUEsRUFBS25JLE9BQVMsR0FDYmlJLElBQWtCQSxFQUFjbkUsS0FBS3FFLEdBRXRDLE9BQU9DLFFBQVFDLFFBQVEsSUFFekIsTUFBTUMsRUFBYU4sR0FBYVAsR0FDaEMsSUFBSWMsRUFBSTlJLEdBQUswSSxRQUFTUCxFQUFpQkUsR0FBWUQsU0FJbkQsR0FISUUsSUFDRlEsRUFBSTlJLEtBQVE4SSxHQUFNUixhQUVoQkcsRUFBaUIsQ0FFbkJLLEVBQUk5SSxLQUFROEksR0FBTUMsT0FESE4sRUFBZ0JPLGFBR2pDLE9BQU81QixHQUFReUIsRUFBWUMsR0FBTWpCLE1BQUtDLEdBQzdCQSxFQUFJbUIsVUFFZixDQ3ZDQSxTQUFTQyxHQUFzQkMsRUFBT0MsR0FDcEMsSUFBS0QsR0FBU0EsRUFBTTVJLE9BQVMsRUFDM0IsT0FBT29JLFFBQVFDLFFBQVEsSUFFekIsSUFBSVMsRUFBTyxHQUNYLE1BV01DLEVBWGdCSCxFQUFNcEUsS0FBSXdFLElBQzlCLE1BQU16SCxFQUFxQixTQUFkeUgsRUFBS3pILEtBQWtCLE9BQVMsVUFDN0MsSUFBSVcsRUFBTyxPQUFNOEcsRUFBSzVHLE9BQU9wQixNQUFNLEtBQUssR0FBR2lDLGlCQUFpQjFCLFVBQzFEeUgsRUFBSzVHLFNBTVAsT0FKSTRHLEVBQUtDLE9BQ1AvRyxHQUFRLElBQUc4RyxFQUFLQyxRQUVsQkgsR0FBUyxHQUFFNUcsS0FDWHpDLEtBQVl1SixHQUFNOUcsV0FFaUJ5QyxRQUFPLFNBQVVILEVBQUswRSxHQUd6RCxPQURBMUUsRUFBSTBFLEVBQWNoSCxLQUFPZ0gsRUFDbEIxRSxJQUNOLElBQ0gsT0FBT3FDLEdBQVFnQyxFQUFrQixDQUMvQk0sSUFBS0wsRUFBS00sTUFBTSxHQUFJLEtBRW5COUIsTUFBS0MsR0FDQ0EsRUFBSW1CLFNBQVNsRSxLQUFJd0UsSUFDSixDQUNoQnpILEtBQU0sZ0JBQ05GLFdBQVksQ0FDVmdJLFNBQVVMLEVBQUszSCxXQUFXZ0ksU0FDMUJuSCxJQUFLNkcsRUFBZUMsRUFBSzNILFdBQVdhLEtBQUtBLElBQ3pDK0csS0FBTUYsRUFBZUMsRUFBSzNILFdBQVdhLEtBQUsrRyxLQUMxQzdHLE9BQVEyRyxFQUFlQyxFQUFLM0gsV0FBV2EsS0FBS0UsT0FDNUNrSCxZQUFhUCxFQUFlQyxFQUFLM0gsV0FBV2EsS0FBS29ILFlBQ2pEQyxZQUFhUixFQUFlQyxFQUFLM0gsV0FBV2EsS0FBS3FILFlBQ2pEMUcsUUFBU21HLEVBQUszSCxXQUFXdUIsTUFDekJYLE1BQU9rQixHQUFPNkYsRUFBSzNILFlBQWMsZ0JBQWtCLG9CQUVyRGlCLFNBQVUwRyxFQUFLMUcsY0FLdkIsQ0EwSEEsU0FBU2tILEdBQWtCQyxFQUFhbEUsRUFBT21FLEdBQzdDLElBQUlDLEVBQXNCeEUsR0FBc0JzRSxFQUFhbEUsRUFBTyxDQUNsRSxrQkFDQSxtQkFDQSxxQkFDQSx1QkFDQSx3QkFRRixPQU5JbUUsSUFFRkMsRUFBc0JBLEVBQW9CbEYsUUFDeENpQixJQUFTZ0UsRUFBVzFILFNBQVMwRCxFQUFLckUsV0FBV1ksVUFHMUNtRyxRQUFRQyxRQUNidUIsVUFBS0QsRUFBcUIsSUFBSW5GLEtBQUlrQixJQUNoQyxNQUFNbUUsRUFBT3BLLEtBQ1JpRyxHQUNIbkUsS0FBTSxZQUNOdUksa0JBQWtCLEVBQ2xCQyxjQUFjLElBR2hCLGNBRE9GLEVBQVF4SSxXQUFXZ0QsV0FDbkJ3RixDQUFPLElBR3BCLENBYUEsTUFBTUcsR0FBYyxDQUNsQixhQUNBLFlBQ0EsYUFDQSxjQUNBLGVBQ0Esa0JBRUlDLEdBQWlCLENBQUMsaUJBQWtCLFFBQVMsVUFBVyxVQUN4REMsR0FBZ0IsQ0FBQyxVQUFXLFlBa1hsQyxNQUFNQyxHQUFrQkMsV0E3V2pCLFNBQ0xDLEVBQ0F0QyxFQUNBdUMsRUFDQUMsRUFDQUMsRUFDQUMsR0FDQWxGLE1BQUVBLEdBQ0ZtRixFQUNBQyxFQUNBQyxHQUVBLE1BQU1DLGFBQ0pBLEVBQVlDLHNCQUNaQSxFQUFxQkMsZUFDckJBLEVBQWNDLGtCQUNkQSxFQUFpQkMsbUJBQ2pCQSxFQUFrQkMsWUFDbEJBLEVBQVdDLHdCQUNYQSxFQUF1QkMsdUNBQ3ZCQSxFQUFzQ0Msa0NBQ3RDQSxFQUFpQ0Msd0JBQ2pDQSxFQUF1QkMsbUJBQ3ZCQSxFQUFrQkMsZUFDbEJBLEVBQWNDLFFBQ2RBLEVBQ0FDLHNCQUF1QkMsRUFBYTFELGNBQ3BDQSxFQUFhMUUsV0FDYkEsRUFBVXFJLFdBQ1ZBLEVBQVUvQyxpQkFDVkEsRUFBZ0JnRCxRQUNoQkEsRUFBT0Msc0JBQ1BBLEVBQXFCQyxpQkFDckJBLEVBQWdCQyxnQkFDaEJBLEVBQWVDLGlCQUNmQSxHQUNFMUIsRUFFRTJCLEdBQWM3QixHQUE4QixJQUFuQkEsRUFBUXJLLE9BRWpDbU0sR0FBY3BFLEdBQThCLElBQW5CQSxFQUFRL0gsT0FDakNvTSxFQUFXdkIsRUFBYVksR0FDeEJZLEVBQW1CLEdBQ25CQyxFQUFXLENBQUUvSyxLQUFNLE1BQU9rQyxLQUFNOEIsRUFBTy9CLFFBQVMsSUFDaEQrSSxFQUFXckIsRUFBWU8sR0FDdkIzRCxFQUNKNkQsU0FBaUJmLEdBQUFBLEVBQVU0QixLQUEzQmIsTUFBa0NmLEdBQUFBLEVBQVU2QixJQUN4QyxDQUVFLGtCQUFtQjdCLEVBQVM0QixJQUFJRSxRQUFRLEdBQ3hDLGtCQUFtQjlCLEVBQVM2QixJQUFJQyxRQUFRLElBRTFDLEdBQ0FDLEVBQU9yQyxFQUFnQkEsRUFBY3RKLE1BQU0sS0FBSyxRQUFLd0IsRUFVM0QsR0FSRTZILEVBQVFySSxTQUFTLG9CQUNHLDhCQUFwQm9LLEVBQVNRLFFBRVRQLEVBQWlCUSxLQWxNckIsU0FBbUN0SCxFQUFPNkcsR0FDeEMsTUFBcUIsaUJBQVY3RyxHQUF1QyxJQUFqQkEsRUFBTXZGLE9BQzlCb0ksUUFBUUMsUUFBUSxDQUNyQixDQUNFOUcsS0FBTSxrQkFDTnNCLFFBQVN1SixFQUFTdkosUUFDbEIySixJQUFLSixFQUFTSSxJQUNkQyxJQUFLTCxFQUFTSyxJQUNkcEwsV0FBWSxDQUNWYyxRQUFTLG1CQUNURixNQUFPLGtCQUNQWSxRQUFTdUosRUFBU3ZKLFFBQ2xCMkosSUFBS0osRUFBU0ksSUFDZEMsSUFBS0wsRUFBU0ssS0FFaEJuSyxTQUFVLENBQ1JmLEtBQU0sUUFDTmdCLFlBQWEsQ0FBQzZKLEVBQVNLLElBQUtMLEVBQVNJLFNBTXRDcEUsUUFBUUMsUUFBUSxHQUN6QixDQTBLMEJ5RSxDQUEwQnZILEVBQU82RyxLQUVyREYsR0FBYzdCLEVBQVFySSxTQUFTLGlCQUNqQ3FLLEVBQWlCUSxLQTlOckIsU0FBOEJ0SCxHQUM1QixNQUFxQixpQkFBVkEsR0FBdUMsSUFBakJBLEVBQU12RixPQUM5Qm9JLFFBQVFDLFFBQVEsQ0FDckIsQ0FDRTlHLEtBQU0sZ0JBQ05zQixRQUFTLGdCQUNUMkosSUFBSyxLQUNMQyxJQUFLLEtBQ0xwTCxXQUFZLENBQ1ZjLFFBQVMsa0JBQ1RGLE1BQU8sZ0JBQ1BZLFFBQVMsZ0JBQ1QySixJQUFLLEtBQ0xDLElBQUssTUFFUG5LLFNBQVUsQ0FDUmYsS0FBTSxRQUNOZ0IsWUFBYSxPQUtkNkYsUUFBUUMsUUFBUSxHQUN6QixDQXVNMEIwRSxDQUFxQnhILElBRXpDOEUsRUFBUXJJLFNBQVMsZ0JBQWlCLENBQ3BDLE1BQU1nTCxFQUFRaEIsRUFBZ0JQLEdBQzlCWSxFQUFpQlEsS0FBS2pELFVBQUtvRCxFQUFPLElBUXBDLEdBTEUzQyxFQUFRckksU0FBUywyQkE3RnJCLFNBQXVCdUksR0FDckIsTUFBTTBDLEVBQXFCMUMsRUFBY08sc0JBQ3ZDUCxFQUFja0IsU0FFaEIsSUFBSXdCLGVBQUFBLEVBQW9Cak4sUUFBUyxFQUMvQixPQUFPLEVBRVQsTUFBTWtOLEVBQWlCM0MsRUFBY1Msa0JBQWtCVCxFQUFja0IsU0FDckUsT0FBT3lCLGVBQUFBLEVBQWdCbE4sUUFBUyxDQUNsQyxDQXFGSW1OLENBQWM1QyxJQUVkOEIsRUFBaUJRLEtBckxyQixTQUFnQ3RILEdBQzlCLE1BQXFCLGlCQUFWQSxHQUF1QyxJQUFqQkEsRUFBTXZGLE9BQzlCb0ksUUFBUUMsUUFBUSxDQUNyQixDQUNFOUcsS0FBTSx5QkFDTnNCLFFBQVMseUJBQ1QySixJQUFLLEtBQ0xDLElBQUssS0FDTHBMLFdBQVksQ0FDVmMsUUFBUyw0QkFDVEYsTUFBTyxlQUNQWSxRQUFTLHlCQUNUMkosSUFBSyxLQUNMQyxJQUFLLE1BRVBuSyxTQUFVLENBQ1JmLEtBQU0sUUFDTmdCLFlBQWEsT0FLZDZGLFFBQVFDLFFBQVEsR0FDekIsQ0E4SjBCK0UsQ0FBdUI3SCxJQUUzQzJHLEdBQWM3QixFQUFRckksU0FBUyxhQUFjLENBRS9DLE1BQU00RixFQUFla0UsRUFDckIsR0FBSS9ELEVBQVEvRixTQUFTLGFBQWMsQ0FDakMsTUFBTWlMLEVBQXFCbkMsRUFBc0JXLEdBQ2pEWSxFQUFpQlEsS0E1UHZCLFNBQWtDUSxFQUFZOUgsR0FDNUMsT0FBTzZDLFFBQVFDLFFBQ2JsRCxHQUFzQmtJLEVBQVk5SCxFQUFPLENBQUMsVUFBVyxTQUFTZixLQUFJa0IsS0FDaEVuRSxLQUFNLGlCQUNORixXQUFVNUIsS0FDTGlHLEdBQ0g5QyxNQUFPOEMsRUFBSzVELEtBQ1pHLE1BQU8sbUJBRVRLLFNBQVUsQ0FBRWYsS0FBTSxRQUFTZ0IsWUFBYSxDQUFDbUQsRUFBSytHLElBQUsvRyxFQUFLOEcsVUFHOUQsQ0FpUFFjLENBQXlCTCxFQUFvQjFILElBRTNDd0MsRUFBUS9GLFNBQVMsU0FDbkJxSyxFQUFpQlEsS0F0S2hCekUsUUFBUUMsUUFBUSxDQUNyQixDQUNFOUcsS0FBTSxPQUNOc0IsUUFBUyxPQUNUMkosSUFBSyxLQUNMQyxJQUFLLEtBQ0xwTCxXQUFZLENBQ1ZjLFFBQVMsT0FDVEYsTUFBTyxPQUNQWSxRQUFTLE9BQ1QySixJQUFLLEtBQ0xDLElBQUssTUFFUG5LLFNBQVUsQ0FDUmYsS0FBTSxRQUNOZ0IsWUFBYSxRQTJKakIsR0FBSTRKLEdBQWNwRSxFQUFRL0YsU0FBUyxjQUFlLENBQ2hELE1BQU1rRyxFQUFrQixDQUFDLFVBQVcsUUFBUyxVQUFXLFVBQ2xEcUYsRUFBUzFCLEVBQVFySCxLQUFJZ0MsR0FBTSxPQUFNQSxNQUNqQ2dILEVBQWF6QixFQUFpQi9GLE9BQU91SCxHQUFReEgsS0FBSyxLQUN4RHNHLEVBQWlCUSxLQUNmbkYsR0FDRW5DLEVBQ0FxQyxFQUNBMkUsRUFDQXpFLEVBQ0EwRixFQUNBNUIsRUFDQTNELEVBQ0FDLElBSU4sR0FBSWlFLEdBQWNwRSxFQUFRL0YsU0FBUyxXQUFZLENBQzdDLE1BQU15TCxFQUFrQjFDLEVBQWVVLEVBQVMsWUFDMUMvQixFQUFhLENBQ2pCLGtCQUNBLGdCQUNBLGNBQ0EsZUFDQSx1QkFDQSxXQUNBLFVBQ0EsT0FDQSxRQUVGQSxFQUFXbUQsUUFBUTdDLElBQ25CcUMsRUFBaUJRLEtBQ2ZyRCxHQUFrQmlFLEVBQWlCbEksRUFBT21FLEtBSWhELEdBQUl3QyxHQUFjN0IsRUFBUXJJLFNBQVMsZ0JBQWlCLENBQ2xELEdBQUltSyxHQUFjcEUsRUFBUS9GLFNBQVMsY0FBZSxDQUNoRCxNQUFNNEYsRUFBZWtFLEVBQ2pCckIsR0FBbUMsS0FBbEJBLElBQ25CN0MsRUFBYThGLEtBQU9qRCxHQUV0QixNQUFNdkMsRUFBa0IsQ0FBQyxVQUFXLFlBQzlCeUYsRUFBVTFDLEVBQXFCQSxFQUFtQmxGLEtBQUssS0FBTyxLQUNwRXNHLEVBQWlCUSxLQUNmbkYsR0FDRW5DLEVBQ0FxQyxFQUNBMkUsRUFDQXpFLEVBQ0E2RixFQUNBL0IsRUFDQTNELEVBQ0FDLEdBQ0FaLE1BQUs5RCxHQUNEZ0gsRUFDS0EsRUFBY2hILEVBQVNtSixHQUV6Qm5KLEtBSWIsR0FBSTJJLEdBQWNwRSxFQUFRL0YsU0FBUyxXQUFZLENBQzdDLE1BQU00TCxFQUFVN0MsRUFBZVUsR0FDekIvQixFQUFhLENBQ2pCLGtCQUNBLGdCQUNBLGNBQ0EsZUFDQSxpQkFDQSxjQUNBLHVCQUNBLE9BQ0EsT0FDQSxXQUVGQSxFQUFXbUQsUUFBUTdDLElBQ25CTixFQUFXbUQsUUFBUTVDLElBQ25Cb0MsRUFBaUJRLEtBQUtyRCxHQUFrQm9FLEVBQVNySSxFQUFPbUUsS0FJNUQsR0FBSXdDLEdBQWM3QixFQUFRckksU0FBUyxTQUFVLENBQzNDLEdBQUkrRixFQUFRL0YsU0FBUyxhQUFjLENBQ2pDLE1BQU1rTCxFQUFpQmxDLEVBQWtCUyxHQUN6QyxJQUFJb0MsRUFFRkEsRUFERVgsRUFBZVksT0FBTTlFLEdBQXNCLFlBQWRBLEVBQUt6SCxPQUNqQm9ILEdBQ2pCdUUsRUFDQXJFLEdBQ0F2QixNQUFLOUQsR0FDRGdILEVBQ0tBLEVBQWNoSCxFQUFTbUosR0FFekJuSixJQUdVMkgsRUFBd0IrQixHQUN4QzVGLE1BQUsrRixHQUNKMUUsR0FBc0IwRSxFQUFZeEUsS0FFbkN2QixNQUFLOUQsR0FDQWdILEVBQ0tBLEVBQWNoSCxFQUFTbUosR0FFekJuSixJQUdiNkksRUFBaUJRLEtBalF2QixTQUE4QmdCLEVBQWtCdEksR0FDOUMsT0FBT3NJLEVBQWlCdkcsTUFBS3NCLEdBQ3BCekQsR0FBc0J5RCxFQUFPckQsRUFBTyxDQUN6QyxrQkFDQSxrQkFDQSx3QkFHTixDQXlQNEJ3SSxDQUFxQkYsRUFBa0J0SSxJQUUvRCxHQUFJNEcsR0FBY3BFLEVBQVEvRixTQUFTLGNBQWUsQ0FDaEQsTUFBTWtHLEVBQWtCLENBQUMsT0FBUSxXQUMzQk4sRUFDSjZDLEdBQW1DLEtBQWxCQSxFQUF1QixDQUFFaUQsS0FBTWpELEdBQWtCLEdBQ2hFcUIsR0FBeUJBLEVBQXNCLHNCQUNqRGxFLEVBQWEsb0JBQ1hrRSxFQUFzQixzQkFJdEJJLEdBQWM3QixFQUFRckksU0FBUyxnQkFDakM0RixFQUFhb0csWUFBYyxHQUU3QixNQUFNVCxFQUFTMUIsRUFBUXJILEtBQUlnQyxHQUFNLE9BQU1BLE1BQUtULEtBQUssS0FDakRzRyxFQUFpQlEsS0FDZm5GLEdBQ0VuQyxFQUNBcUMsRUFDQTJFLEVBQ0F6RSxFQUNBeUYsRUFDQTNCLEVBQ0EzRCxFQUNBQyxHQUNBWixNQUFLOUQsR0FDRGdILEVBQ0tBLEVBQWNoSCxFQUFTbUosR0FFekJuSixLQUliLEdBQUkySSxHQUFjcEUsRUFBUS9GLFNBQVMsV0FBWSxDQUM3QyxNQUFNaU0sRUFBY2xELEVBQWVVLEdBQVNoSCxRQUFPaUIsSUFDN0NBLEVBQUtyRSxXQUFXYSxLQUNYd0QsRUFBS3JFLFdBQVdhLElBQUlGLFNBQVMsV0FJbEMwSCxFQUFhLENBQ2pCLGtCQUNBLGdCQUNBLGNBQ0EsZUFDQSxpQkFDQSx1QkFDQSxRQUVGQSxFQUFXbUQsUUFBUTdDLElBQ25CTixFQUFXbUQsUUFBUTVDLElBQ25CUCxFQUFXbUQsUUFBUTNDLElBQ2ZJLEdBQ29CLG1CQUFsQkEsSUFDRlosRUFBV21ELEtBQUssd0JBQ2hCbkQsRUFBV21ELEtBQUssZ0JBRWxCUixFQUFpQlEsS0FDZnJELEdBQWtCeUUsRUFBYTFJLEVBQU9tRSxHQUFZcEMsTUFBS25ELEdBQ3JEcUcsRUFBZ0JBLEVBQWNyRyxFQUFRd0ksR0FBUXhJLE1BSWxEa0ksRUFBaUJRLEtBQ2ZyRCxHQUFrQnlFLEVBQWExSSxFQUFPbUUsS0FNOUMsR0FBSXdDLEdBQWM3QixFQUFRckksU0FBUyxVQUFXLENBQzVDLEdBQUkrRixFQUFRL0YsU0FBUyxhQUFjLENBQ2pDLE1BQU1rTSxFQUFrQjNDLEVBQW1CRSxHQUMzQ1ksRUFBaUJRLEtBQ2Z2QixFQUNFNEMsRUFDQTNJLEVBQ0FvSCxFQUNBaEMsR0FDQXJELE1BQUtuRCxHQUNMcUcsRUFBZ0JBLEVBQWNyRyxFQUFRd0ksRUFBTSxVQUFZeEksS0FTOUQsR0FMQWtJLEVBQWlCUSxLQUNmckIsRUFBZWpHLEVBQU9zRyxFQUFTdkIsRUFBZUssR0FBVXJELE1BQUtuRCxHQUMzRHFHLEVBQWdCQSxFQUFjckcsRUFBUXdJLEVBQU0sVUFBWXhJLEtBR3hEZ0ksR0FBY3BFLEVBQVEvRixTQUFTLFdBQVksQ0FDN0MsTUFBTW1NLEVBQWVwRCxFQUFlVSxHQUM5Qi9CLEVBQWEsQ0FDakIsa0JBQ0EsZ0JBQ0EsY0FDQSxpQkFDQSxPQUNBLFVBQ0EsV0FDQSxVQUNBLGVBQ0EsUUFFRVksSUFDb0IsbUJBQWxCQSxJQUNGWixFQUFXbUQsS0FBSyx3QkFDaEJuRCxFQUFXbUQsS0FBSyxnQkFFbEJuRCxFQUFXbUQsUUFBUTdDLEdBQVl2RixRQUFPM0UsS0FBT0EsSUFBTXdLLE9BRXJEWixFQUFXbUQsUUFBUTVDLElBQ25Cb0MsRUFBaUJRLEtBQ2ZyRCxHQUFrQjJFLEVBQWM1SSxFQUFPbUUsR0FBWXBDLE1BQUs5RCxHQUN0RGdILEVBQWdCQSxFQUFjaEgsRUFBU21KLEVBQU0sVUFBWW5KLE1BS2pFLEdBQUkwSSxHQUFjN0IsRUFBUXJJLFNBQVMseUJBQTBCLENBQzNELEdBQUkrRixFQUFRL0YsU0FBUyxhQUFjLENBQ2pDLE1BQU1vTSxFQUFnQy9DLEVBQ3BDSSxHQUVGWSxFQUFpQlEsS0FDZnpCLEVBQ0VnRCxFQUNBN0ksSUFJTixHQUFJNEcsR0FBY3BFLEVBQVEvRixTQUFTLGNBQWUsQ0FDaEQsTUFBTWtHLEVBQWtCLENBQUMsZUFDbkJOLEVBQ0o2QyxHQUFtQyxLQUFsQkEsRUFBdUIsQ0FBRWlELEtBQU1qRCxHQUFrQixHQUNwRTRCLEVBQWlCUSxLQUNmbkYsR0FDRW5DLEVBQ0FxQyxFQUNBMkUsRUFDQXpFLEVBQ0FtRSxFQUFpQmxHLEtBQUssS0FDdEI2RixFQUNBM0QsRUFDQUMsR0FDQVosTUFBSzlELEdBQ0RnSCxFQUNLQSxFQUFjaEgsRUFBU21KLEVBQU0seUJBRS9CbkosTUFNYzRFLFFBQVFpRyxJQUFJaEMsR0FDdEMvRSxLQUFLZ0gsV0FDTGhILE1BQUs5RCxJQUNKOEksRUFBUzlJLFFBQVVBLENBQU8sSUFFM0IrSyxPQUFNQyxJQUNMbEMsRUFBU21DLE1BQVFELENBQUcsSUFFSGxILE1BQUssS0FDeEJvRCxFQUFRakwsS0FDSDZNLEdBQ0g5SSxRQUFTRixHQUFrQkMsRUFBWStJLEVBQVM5SSxRQUFTK0IsS0FDekQsR0FFTixHQUVtRCxJQUFLLENBQ3REbUosU0FBUyxJQzVqQkxDLEdBQWNDLEdBQ2xCQSxFQUFXQyxZQUNYRCxFQUFXN00sVUFDVjZNLEVBQVcvTCxTQUNWK0wsRUFBVy9MLFFBQVFvQyxZQUFZLEtBQU8ySixFQUFXL0wsUUFBUTdDLE9BQVMsR0FDbEU0TyxFQUFXL0wsUUFBUXFDLFVBQVUwSixFQUFXL0wsUUFBUW9DLFlBQVksS0FBTyxJQUNyRSxHQUVXNkosR0FBY0EsRUFBR2hPLEtBQUltSSxVQUM1QkEsU0FJS3pHLElBQVAxQixRQUNzQixJQUFmQSxFQUFHdUMsVUFDVyxJQUFyQnZDLEVBQUd1QyxRQUFRLEtBS052QyxFQUFHb0UsVUFBVXBFLEVBQUd1QyxRQUFRLEtBQU8sUUFSdEMsR0EyQlcwTCxHQUFlQyxXQUMxQixDQUFDSixFQUFZSyxHQUFRLEtBQ25CLE9BQVFMLEVBQVczTSxPQUNqQixJQUFLLGtCQUNILE1BQU8sQ0FBQzJNLEVBQVd6TSxRQUFTeU0sRUFBVy9MLFNBQ3pDLElBQUssZ0JBQ0wsSUFBSyxlQUNMLElBQUssT0FDSCxNQUFPLENBQUMrTCxFQUFXek0sU0FDckIsSUFBSyxpQkFDSCxPQTFCa0NMLEVBMEJEOE0sRUFBVzlNLEtBMUJKZSxFQTBCVStMLEVBQVcvTCxRQTFCVCxDQUMxRGYsR0FBU2UsR0FBV0EsRUFBUTdCLE1BQU0sS0FBSyxHQUNwQixpQkFBWjZCLEVBQ0hBLEVBQVFvRCxRQUFRLElBQUlpSixPQUFRLEdBQUVDLFVBQWFyTixlQUFtQixJQUM5RCxJQXVCQSxJQUFLLGdDQUNMLElBQUssY0FDSCxNQUFPLENBQUM4TSxFQUFXOU0sTUFDckIsSUFBSyxpQkFDTCxJQUFLLFlBQ0wsSUFBSyxhQUNMLElBQUssYUFDTCxJQUFLLGVBQ0wsSUFBSyxjQUNMLElBQUssa0JBQ0wsSUFBSyxpQkFDSCxPQUFRbU4sR0FBU0wsRUFBV3hLLFVBQ3hCLENBQ0V3SyxFQUFXeE0sT0FDWHdNLEVBQVdqQyxLQUFLMUosY0FDaEIyTCxFQUFXUSxVQUViLENBQ0VSLEVBQVd4SyxVQUNYd0ssRUFBV1EsU0FDWFIsRUFBV1MsT0FBU1QsRUFBV1MsT0FBT3ZOLFVBQU9VLEdBRXJELElBQUssUUFDTCxJQUFLLFVBQ0wsSUFBSyxTQUNILE1BQU8sQ0FDTG9NLEVBQVc5TSxLQUNYOE0sRUFBV2hNLE1BQU1xRCxRQUNmLElBQUlpSixPQUFRLEdBQUVDLFVBQWFQLEVBQVc5TSxpQkFDdEMsS0FHTixJQUFLLGdCQUNMLElBQUssT0FDSCxPQUFPbU4sRUFDSCxDQUNFTCxFQUFXOU0sTUFDVDhNLEVBQVdoTSxPQUNWZ00sRUFBVy9MLFNBQVcrTCxFQUFXL0wsUUFBUTdCLE1BQU0sS0FBSyxHQUN2RDJOLEdBQVlDLElBRWQsQ0FDRUEsRUFBVzlNLEtBQ1g4TSxFQUFXOU4sR0FDWGdPLEdBQVlGLEdBQ1pELEdBQVlDLElBSXBCLFFBQ0UsTUFBTyxDQUNMQSxFQUFXOU0sTUFDVDhNLEVBQVdoTSxPQUNWZ00sRUFBVy9MLFNBQVcrTCxFQUFXL0wsUUFBUTdCLE1BQU0sS0FBSyxHQUN2RDJOLEdBQVlDLElBakZtQlUsSUFBQ3hOLEVBQU1lLEtBcUY5QyxDQUFDNkMsRUFBTXVKLEtBQ0wsTUFBTW5QLEVBQUl5UCxVQUFVN0osR0FFcEIsT0FEQTVGLEVBQUVtUCxNQUFRQSxFQUNIblAsQ0FBQyxzTUMvSHVEMFAscUJBSy9ELElBQUlDLEVBNkhBQyxFQTNISixTQUFTQyxJQUNMLE9BQU9GLEVBQWFuUCxNQUFNLEtBQU1QLFdBS3BDLFNBQVM2UCxFQUFnQmxGLEdBQ3JCK0UsRUFBZS9FLEVBR25CLFNBQVMvRyxFQUFRNEIsR0FDYixPQUNJQSxhQUFpQjdCLE9BQ3lCLG1CQUExQ2hFLE9BQU9TLFVBQVVzSSxTQUFTcEksS0FBS2tGLEdBSXZDLFNBQVNzSyxFQUFTdEssR0FHZCxPQUNhLE1BQVRBLEdBQzBDLG9CQUExQzdGLE9BQU9TLFVBQVVzSSxTQUFTcEksS0FBS2tGLEdBSXZDLFNBQVN1SyxFQUFXQyxFQUFHQyxHQUNuQixPQUFPdFEsT0FBT1MsVUFBVUMsZUFBZUMsS0FBSzBQLEVBQUdDLEdBR25ELFNBQVNDLEVBQWM5SixHQUNuQixHQUFJekcsT0FBT3dRLG9CQUNQLE9BQWtELElBQTNDeFEsT0FBT3dRLG9CQUFvQi9KLEdBQUtuRyxPQUV2QyxJQUFJdUcsRUFDSixJQUFLQSxLQUFLSixFQUNOLEdBQUkySixFQUFXM0osRUFBS0ksR0FDaEIsT0FBTyxFQUdmLE9BQU8sRUFJZixTQUFTNEosRUFBWTVLLEdBQ2pCLFlBQWlCLElBQVZBLEVBR1gsU0FBUzZLLEVBQVM3SyxHQUNkLE1BQ3FCLGlCQUFWQSxHQUNtQyxvQkFBMUM3RixPQUFPUyxVQUFVc0ksU0FBU3BJLEtBQUtrRixHQUl2QyxTQUFTOEssRUFBTzlLLEdBQ1osT0FDSUEsYUFBaUIrSyxNQUN5QixrQkFBMUM1USxPQUFPUyxVQUFVc0ksU0FBU3BJLEtBQUtrRixHQUl2QyxTQUFTZixFQUFJK0wsRUFBS0MsR0FDZCxJQUNJMVEsRUFEQXlILEVBQU0sR0FFTmtKLEVBQVNGLEVBQUl2USxPQUNqQixJQUFLRixFQUFJLEVBQUdBLEVBQUkyUSxJQUFVM1EsRUFDdEJ5SCxFQUFJc0YsS0FBSzJELEVBQUdELEVBQUl6USxHQUFJQSxJQUV4QixPQUFPeUgsRUFHWCxTQUFTbUosRUFBT1gsRUFBR0MsR0FDZixJQUFLLElBQUlsUSxLQUFLa1EsRUFDTkYsRUFBV0UsRUFBR2xRLEtBQ2RpUSxFQUFFalEsR0FBS2tRLEVBQUVsUSxJQVlqQixPQVJJZ1EsRUFBV0UsRUFBRyxjQUNkRCxFQUFFdEgsU0FBV3VILEVBQUV2SCxVQUdmcUgsRUFBV0UsRUFBRyxhQUNkRCxFQUFFWSxRQUFVWCxFQUFFVyxTQUdYWixFQUdYLFNBQVNhLEVBQVVyTCxFQUFPc0wsRUFBUUMsRUFBUUMsR0FDdEMsT0FBT0MsR0FBaUJ6TCxFQUFPc0wsRUFBUUMsRUFBUUMsR0FBUSxHQUFNRSxNQUdqRSxTQUFTQyxJQUVMLE1BQU8sQ0FDSEMsT0FBTyxFQUNQQyxhQUFjLEdBQ2RDLFlBQWEsR0FDYkMsVUFBVyxFQUNYQyxjQUFlLEVBQ2ZDLFdBQVcsRUFDWEMsV0FBWSxLQUNaQyxhQUFjLEtBQ2RDLGVBQWUsRUFDZkMsaUJBQWlCLEVBQ2pCQyxLQUFLLEVBQ0xDLGdCQUFpQixHQUNqQkMsSUFBSyxLQUNMQyxTQUFVLEtBQ1ZDLFNBQVMsRUFDVEMsaUJBQWlCLEdBSXpCLFNBQVNDLEVBQWdCQyxHQUlyQixPQUhhLE1BQVRBLEVBQUVDLE1BQ0ZELEVBQUVDLElBQU1uQixLQUVMa0IsRUFBRUMsSUFzQmIsU0FBU0MsRUFBUUYsR0FDYixHQUFrQixNQUFkQSxFQUFFRyxTQUFrQixDQUNwQixJQUFJQyxFQUFRTCxFQUFnQkMsR0FDeEJLLEVBQWMvQyxFQUFLclAsS0FBS21TLEVBQU1WLGlCQUFpQixTQUFVaFMsR0FDckQsT0FBWSxNQUFMQSxLQUVYNFMsR0FDS0MsTUFBTVAsRUFBRVEsR0FBR0MsWUFDWkwsRUFBTWxCLFNBQVcsSUFDaEJrQixFQUFNckIsUUFDTnFCLEVBQU1mLGFBQ05lLEVBQU1kLGVBQ05jLEVBQU1NLGlCQUNOTixFQUFNTixrQkFDTk0sRUFBTWhCLFlBQ05nQixFQUFNYixnQkFDTmEsRUFBTVosbUJBQ0xZLEVBQU1SLFVBQWFRLEVBQU1SLFVBQVlTLEdBVS9DLEdBUklMLEVBQUVXLFVBQ0ZMLEVBQ0lBLEdBQ3dCLElBQXhCRixFQUFNakIsZUFDd0IsSUFBOUJpQixFQUFNcEIsYUFBYXBSLGFBQ0R3QyxJQUFsQmdRLEVBQU1RLFNBR1MsTUFBbkJ0VCxPQUFPdVQsVUFBcUJ2VCxPQUFPdVQsU0FBU2IsR0FHNUMsT0FBT00sRUFGUE4sRUFBRUcsU0FBV0csRUFLckIsT0FBT04sRUFBRUcsU0FHYixTQUFTVyxFQUFjVixHQUNuQixJQUFJSixFQUFJeEIsRUFBVXVDLEtBT2xCLE9BTmEsTUFBVFgsRUFDQTlCLEVBQU95QixFQUFnQkMsR0FBSUksR0FFM0JMLEVBQWdCQyxHQUFHUixpQkFBa0IsRUFHbENRLEVBN0RQMUMsRUFEQWhNLE1BQU12RCxVQUFVdVAsS0FDVGhNLE1BQU12RCxVQUFVdVAsS0FFaEIsU0FBVTBELEdBQ2IsSUFFSXRULEVBRkF1VCxFQUFJM1QsT0FBT2EsTUFDWCtTLEVBQU1ELEVBQUVyVCxTQUFXLEVBR3ZCLElBQUtGLEVBQUksRUFBR0EsRUFBSXdULEVBQUt4VCxJQUNqQixHQUFJQSxLQUFLdVQsR0FBS0QsRUFBSS9TLEtBQUtFLEtBQU04UyxFQUFFdlQsR0FBSUEsRUFBR3VULEdBQ2xDLE9BQU8sRUFJZixPQUFPLEdBcURmLElBQUlFLEVBQW9CNUQsRUFBTTRELGlCQUFtQixHQUM3Q0MsR0FBbUIsRUFFdkIsU0FBU0MsRUFBV0MsRUFBSUMsR0FDcEIsSUFBSTdULEVBQ0E4VCxFQUNBQyxFQUNBQyxFQUFzQlAsRUFBaUJ2VCxPQWlDM0MsR0EvQkttUSxFQUFZd0QsRUFBS0ksb0JBQ2xCTCxFQUFHSyxpQkFBbUJKLEVBQUtJLGtCQUUxQjVELEVBQVl3RCxFQUFLSyxNQUNsQk4sRUFBR00sR0FBS0wsRUFBS0ssSUFFWjdELEVBQVl3RCxFQUFLTSxNQUNsQlAsRUFBR08sR0FBS04sRUFBS00sSUFFWjlELEVBQVl3RCxFQUFLTyxNQUNsQlIsRUFBR1EsR0FBS1AsRUFBS08sSUFFWi9ELEVBQVl3RCxFQUFLWixXQUNsQlcsRUFBR1gsUUFBVVksRUFBS1osU0FFakI1QyxFQUFZd0QsRUFBS1EsUUFDbEJULEVBQUdTLEtBQU9SLEVBQUtRLE1BRWRoRSxFQUFZd0QsRUFBS1MsVUFDbEJWLEVBQUdVLE9BQVNULEVBQUtTLFFBRWhCakUsRUFBWXdELEVBQUtVLFdBQ2xCWCxFQUFHVyxRQUFVVixFQUFLVSxTQUVqQmxFLEVBQVl3RCxFQUFLdEIsT0FDbEJxQixFQUFHckIsSUFBTUYsRUFBZ0J3QixJQUV4QnhELEVBQVl3RCxFQUFLVyxXQUNsQlosRUFBR1ksUUFBVVgsRUFBS1csU0FHbEJSLEVBQXNCLEVBQ3RCLElBQUtoVSxFQUFJLEVBQUdBLEVBQUlnVSxFQUFxQmhVLElBRzVCcVEsRUFETDBELEVBQU1GLEVBRE5DLEVBQU9MLEVBQWlCelQsT0FHcEI0VCxFQUFHRSxHQUFRQyxHQUt2QixPQUFPSCxFQUlYLFNBQVNhLEVBQU9DLEdBQ1pmLEVBQVdsVCxLQUFNaVUsR0FDakJqVSxLQUFLcVMsR0FBSyxJQUFJdEMsS0FBa0IsTUFBYmtFLEVBQU81QixHQUFhNEIsRUFBTzVCLEdBQUdDLFVBQVlNLEtBQ3hENVMsS0FBSytSLFlBQ04vUixLQUFLcVMsR0FBSyxJQUFJdEMsS0FBSzZDLE9BSUUsSUFBckJLLElBQ0FBLEdBQW1CLEVBQ25CN0QsRUFBTThFLGFBQWFsVSxNQUNuQmlULEdBQW1CLEdBSTNCLFNBQVNrQixFQUFTdk8sR0FDZCxPQUNJQSxhQUFlb08sR0FBa0IsTUFBUHBPLEdBQXVDLE1BQXhCQSxFQUFJNE4saUJBSXJELFNBQVNZLEVBQUtDLElBRWdDLElBQXRDakYsRUFBTWtGLDZCQUNhLG9CQUFaQyxTQUNQQSxRQUFRSCxNQUVSRyxRQUFRSCxLQUFLLHdCQUEwQkMsR0FJL0MsU0FBU0csRUFBVUgsRUFBS3BFLEdBQ3BCLElBQUl3RSxHQUFZLEVBRWhCLE9BQU90RSxHQUFPLFdBSVYsR0FIZ0MsTUFBNUJmLEVBQU1zRixvQkFDTnRGLEVBQU1zRixtQkFBbUIsS0FBTUwsR0FFL0JJLEVBQVcsQ0FDWCxJQUNJRSxFQUNBcFYsRUFDQUksRUFIQWlWLEVBQU8sR0FJUEMsRUFBU3JWLFVBQVVDLE9BQ3ZCLElBQUtGLEVBQUksRUFBR0EsRUFBSXNWLEVBQVF0VixJQUFLLENBRXpCLEdBREFvVixFQUFNLEdBQ3NCLGlCQUFqQm5WLFVBQVVELEdBQWlCLENBRWxDLElBQUtJLEtBRExnVixHQUFPLE1BQVFwVixFQUFJLEtBQ1BDLFVBQVUsR0FDZCtQLEVBQVcvUCxVQUFVLEdBQUlHLEtBQ3pCZ1YsR0FBT2hWLEVBQU0sS0FBT0gsVUFBVSxHQUFHRyxHQUFPLE1BR2hEZ1YsRUFBTUEsRUFBSTlMLE1BQU0sR0FBSSxRQUVwQjhMLEVBQU1uVixVQUFVRCxHQUVwQnFWLEVBQUt0SSxLQUFLcUksR0FFZFAsRUFDSUMsRUFDSSxnQkFDQWxSLE1BQU12RCxVQUFVaUosTUFBTS9JLEtBQUs4VSxHQUFNcFAsS0FBSyxJQUN0QyxNQUNBLElBQUlzUCxPQUFRQyxPQUVwQk4sR0FBWSxFQUVoQixPQUFPeEUsRUFBR2xRLE1BQU1DLEtBQU1SLGFBQ3ZCeVEsR0FHUCxJQWdGSW5LLEVBaEZBa1AsRUFBZSxHQUVuQixTQUFTQyxFQUFnQjFULEVBQU04UyxHQUNLLE1BQTVCakYsRUFBTXNGLG9CQUNOdEYsRUFBTXNGLG1CQUFtQm5ULEVBQU04UyxHQUU5QlcsRUFBYXpULEtBQ2Q2UyxFQUFLQyxHQUNMVyxFQUFhelQsSUFBUSxHQU83QixTQUFTMlQsRUFBV2xRLEdBQ2hCLE1BQ3lCLG9CQUFibVEsVUFBNEJuUSxhQUFpQm1RLFVBQ1gsc0JBQTFDaFcsT0FBT1MsVUFBVXNJLFNBQVNwSSxLQUFLa0YsR0FJdkMsU0FBU29RLEVBQUluQixHQUNULElBQUlaLEVBQU05VCxFQUNWLElBQUtBLEtBQUswVSxFQUNGMUUsRUFBVzBFLEVBQVExVSxLQUVmMlYsRUFESjdCLEVBQU9ZLEVBQU8xVSxJQUVWUyxLQUFLVCxHQUFLOFQsRUFFVnJULEtBQUssSUFBTVQsR0FBSzhULEdBSTVCclQsS0FBS3FWLFFBQVVwQixFQUlmalUsS0FBS3NWLCtCQUFpQyxJQUFJM0csUUFDckMzTyxLQUFLdVYsd0JBQXdCN1YsUUFBVU0sS0FBS3dWLGNBQWM5VixRQUN2RCxJQUNBLFVBQVVBLFFBSXRCLFNBQVMrVixFQUFhQyxFQUFjQyxHQUNoQyxJQUNJdEMsRUFEQXJNLEVBQU1tSixFQUFPLEdBQUl1RixHQUVyQixJQUFLckMsS0FBUXNDLEVBQ0xwRyxFQUFXb0csRUFBYXRDLEtBQ3BCL0QsRUFBU29HLEVBQWFyQyxLQUFVL0QsRUFBU3FHLEVBQVl0QyxLQUNyRHJNLEVBQUlxTSxHQUFRLEdBQ1psRCxFQUFPbkosRUFBSXFNLEdBQU9xQyxFQUFhckMsSUFDL0JsRCxFQUFPbkosRUFBSXFNLEdBQU9zQyxFQUFZdEMsS0FDRixNQUFyQnNDLEVBQVl0QyxHQUNuQnJNLEVBQUlxTSxHQUFRc0MsRUFBWXRDLFVBRWpCck0sRUFBSXFNLElBSXZCLElBQUtBLEtBQVFxQyxFQUVMbkcsRUFBV21HLEVBQWNyQyxLQUN4QjlELEVBQVdvRyxFQUFhdEMsSUFDekIvRCxFQUFTb0csRUFBYXJDLE1BR3RCck0sRUFBSXFNLEdBQVFsRCxFQUFPLEdBQUluSixFQUFJcU0sS0FHbkMsT0FBT3JNLEVBR1gsU0FBUzRPLEVBQU8zQixHQUNFLE1BQVZBLEdBQ0FqVSxLQUFLb1YsSUFBSW5CLEdBaEVqQjdFLEVBQU1rRiw2QkFBOEIsRUFDcENsRixFQUFNc0YsbUJBQXFCLEtBc0V2QjVPLEVBREEzRyxPQUFPMkcsS0FDQTNHLE9BQU8yRyxLQUVQLFNBQVVGLEdBQ2IsSUFBSXJHLEVBQ0F5SCxFQUFNLEdBQ1YsSUFBS3pILEtBQUtxRyxFQUNGMkosRUFBVzNKLEVBQUtyRyxJQUNoQnlILEVBQUlzRixLQUFLL00sR0FHakIsT0FBT3lILEdBSWYsSUFBSTZPLEVBQWtCLENBQ2xCQyxRQUFTLGdCQUNUQyxRQUFTLG1CQUNUQyxTQUFVLGVBQ1ZDLFFBQVMsb0JBQ1RDLFNBQVUsc0JBQ1ZDLFNBQVUsS0FHZCxTQUFTQyxFQUFTelcsRUFBSzBXLEVBQUtDLEdBQ3hCLElBQUlDLEVBQVN2VyxLQUFLd1csVUFBVTdXLElBQVFLLEtBQUt3VyxVQUFvQixTQUM3RCxPQUFPdEIsRUFBV3FCLEdBQVVBLEVBQU96VyxLQUFLdVcsRUFBS0MsR0FBT0MsRUFHeEQsU0FBU0UsRUFBU0MsRUFBUUMsRUFBY0MsR0FDcEMsSUFBSUMsRUFBWSxHQUFLMVUsS0FBS0MsSUFBSXNVLEdBQzFCSSxFQUFjSCxFQUFlRSxFQUFVcFgsT0FFM0MsT0FEV2lYLEdBQVUsRUFFUkUsRUFBWSxJQUFNLEdBQU0sS0FDakN6VSxLQUFLNFUsSUFBSSxHQUFJNVUsS0FBSzZVLElBQUksRUFBR0YsSUFBYzVPLFdBQVcrTyxPQUFPLEdBQ3pESixFQUlSLElBQUlLLEVBQ0kseU1BQ0pDLEVBQXdCLDZDQUN4QkMsRUFBa0IsR0FDbEJDLEVBQXVCLEdBTTNCLFNBQVNDLEVBQWVDLEVBQU9DLEVBQVFDLEVBQVN0TixHQUM1QyxJQUFJdU4sRUFBT3ZOLEVBQ2EsaUJBQWJBLElBQ1B1TixFQUFPLFdBQ0gsT0FBTzFYLEtBQUttSyxPQUdoQm9OLElBQ0FGLEVBQXFCRSxHQUFTRyxHQUU5QkYsSUFDQUgsRUFBcUJHLEVBQU8sSUFBTSxXQUM5QixPQUFPZixFQUFTaUIsRUFBSzNYLE1BQU1DLEtBQU1SLFdBQVlnWSxFQUFPLEdBQUlBLEVBQU8sTUFHbkVDLElBQ0FKLEVBQXFCSSxHQUFXLFdBQzVCLE9BQU96WCxLQUFLMlgsYUFBYUYsUUFDckJDLEVBQUszWCxNQUFNQyxLQUFNUixXQUNqQitYLEtBTWhCLFNBQVNLLEVBQXVCNVMsR0FDNUIsT0FBSUEsRUFBTWpCLE1BQU0sWUFDTGlCLEVBQU1VLFFBQVEsV0FBWSxJQUU5QlYsRUFBTVUsUUFBUSxNQUFPLElBR2hDLFNBQVNtUyxFQUFtQnZILEdBQ3hCLElBQ0kvUSxFQUNBRSxFQUZBcVksRUFBUXhILEVBQU92TSxNQUFNbVQsR0FJekIsSUFBSzNYLEVBQUksRUFBR0UsRUFBU3FZLEVBQU1yWSxPQUFRRixFQUFJRSxFQUFRRixJQUN2QzhYLEVBQXFCUyxFQUFNdlksSUFDM0J1WSxFQUFNdlksR0FBSzhYLEVBQXFCUyxFQUFNdlksSUFFdEN1WSxFQUFNdlksR0FBS3FZLEVBQXVCRSxFQUFNdlksSUFJaEQsT0FBTyxTQUFVOFcsR0FDYixJQUNJOVcsRUFEQWdYLEVBQVMsR0FFYixJQUFLaFgsRUFBSSxFQUFHQSxFQUFJRSxFQUFRRixJQUNwQmdYLEdBQVVyQixFQUFXNEMsRUFBTXZZLElBQ3JCdVksRUFBTXZZLEdBQUdPLEtBQUt1VyxFQUFLL0YsR0FDbkJ3SCxFQUFNdlksR0FFaEIsT0FBT2dYLEdBS2YsU0FBU3dCLEVBQWFsRyxFQUFHdkIsR0FDckIsT0FBS3VCLEVBQUVFLFdBSVB6QixFQUFTMEgsRUFBYTFILEVBQVF1QixFQUFFOEYsY0FDaENQLEVBQWdCOUcsR0FDWjhHLEVBQWdCOUcsSUFBV3VILEVBQW1CdkgsR0FFM0M4RyxFQUFnQjlHLEdBQVF1QixJQVBwQkEsRUFBRThGLGFBQWFNLGNBVTlCLFNBQVNELEVBQWExSCxFQUFRQyxHQUMxQixJQUFJaFIsRUFBSSxFQUVSLFNBQVMyWSxFQUE0QmxULEdBQ2pDLE9BQU91TCxFQUFPNEgsZUFBZW5ULElBQVVBLEVBSTNDLElBREFtUyxFQUFzQmlCLFVBQVksRUFDM0I3WSxHQUFLLEdBQUs0WCxFQUFzQjVULEtBQUsrTSxJQUN4Q0EsRUFBU0EsRUFBTzVLLFFBQ1p5UixFQUNBZSxHQUVKZixFQUFzQmlCLFVBQVksRUFDbEM3WSxHQUFLLEVBR1QsT0FBTytRLEVBR1gsSUFBSStILEVBQXdCLENBQ3hCQyxJQUFLLFlBQ0xDLEdBQUksU0FDSkMsRUFBRyxhQUNIQyxHQUFJLGVBQ0pDLElBQUssc0JBQ0xDLEtBQU0sNkJBR1YsU0FBU1IsRUFBZXhZLEdBQ3BCLElBQUkyUSxFQUFTdFEsS0FBSzRZLGdCQUFnQmpaLEdBQzlCa1osRUFBYzdZLEtBQUs0WSxnQkFBZ0JqWixFQUFJbVosZUFFM0MsT0FBSXhJLElBQVd1SSxFQUNKdkksR0FHWHRRLEtBQUs0WSxnQkFBZ0JqWixHQUFPa1osRUFDdkI5VSxNQUFNbVQsR0FDTmpULEtBQUksU0FBVThVLEdBQ1gsTUFDWSxTQUFSQSxHQUNRLE9BQVJBLEdBQ1EsT0FBUkEsR0FDUSxTQUFSQSxFQUVPQSxFQUFJbFEsTUFBTSxHQUVka1EsS0FFVnZULEtBQUssSUFFSHhGLEtBQUs0WSxnQkFBZ0JqWixJQUdoQyxJQUFJcVosRUFBcUIsZUFFekIsU0FBU2YsSUFDTCxPQUFPalksS0FBS2laLGFBR2hCLElBQUlDLEVBQWlCLEtBQ2pCQyxFQUFnQyxVQUVwQyxTQUFTMUIsRUFBUWYsR0FDYixPQUFPMVcsS0FBS29aLFNBQVMxVCxRQUFRLEtBQU1nUixHQUd2QyxJQUFJMkMsRUFBc0IsQ0FDdEJDLE9BQVEsUUFDUkMsS0FBTSxTQUNOQyxFQUFHLGdCQUNIQyxHQUFJLGFBQ0o1SCxFQUFHLFdBQ0g2SCxHQUFJLGFBQ0pDLEVBQUcsVUFDSEMsR0FBSSxXQUNKQyxFQUFHLFFBQ0hDLEdBQUksVUFDSkMsRUFBRyxTQUNIQyxHQUFJLFdBQ0pDLEVBQUcsVUFDSEMsR0FBSSxZQUNKQyxFQUFHLFNBQ0hDLEdBQUksWUFHUixTQUFTQyxFQUFhM0QsRUFBUTRELEVBQWVDLEVBQVFDLEdBQ2pELElBQUlqRSxFQUFTdlcsS0FBS3lhLGNBQWNGLEdBQ2hDLE9BQU9yRixFQUFXcUIsR0FDWkEsRUFBT0csRUFBUTRELEVBQWVDLEVBQVFDLEdBQ3RDakUsRUFBTzdRLFFBQVEsTUFBT2dSLEdBR2hDLFNBQVNnRSxHQUFXQyxFQUFNcEUsR0FDdEIsSUFBSWpHLEVBQVN0USxLQUFLeWEsY0FBY0UsRUFBTyxFQUFJLFNBQVcsUUFDdEQsT0FBT3pGLEVBQVc1RSxHQUFVQSxFQUFPaUcsR0FBVWpHLEVBQU81SyxRQUFRLE1BQU82USxHQUd2RSxJQUFJcUUsR0FBVSxHQUVkLFNBQVNDLEdBQWFDLEVBQU1DLEdBQ3hCLElBQUlDLEVBQVlGLEVBQUtwWSxjQUNyQmtZLEdBQVFJLEdBQWFKLEdBQVFJLEVBQVksS0FBT0osR0FBUUcsR0FBYUQsRUFHekUsU0FBU0csR0FBZUMsR0FDcEIsTUFBd0IsaUJBQVZBLEVBQ1JOLEdBQVFNLElBQVVOLEdBQVFNLEVBQU14WSxvQkFDaENULEVBR1YsU0FBU2taLEdBQXFCQyxHQUMxQixJQUNJQyxFQUNBaEksRUFGQWlJLEVBQWtCLEdBSXRCLElBQUtqSSxLQUFRK0gsRUFDTDdMLEVBQVc2TCxFQUFhL0gsS0FDeEJnSSxFQUFpQkosR0FBZTVILE1BRTVCaUksRUFBZ0JELEdBQWtCRCxFQUFZL0gsSUFLMUQsT0FBT2lJLEVBR1gsSUFBSUMsR0FBYSxHQUVqQixTQUFTQyxHQUFnQlYsRUFBTVcsR0FDM0JGLEdBQVdULEdBQVFXLEVBR3ZCLFNBQVNDLEdBQW9CQyxHQUN6QixJQUNJQyxFQURBVixFQUFRLEdBRVosSUFBS1UsS0FBS0QsRUFDRnBNLEVBQVdvTSxFQUFVQyxJQUNyQlYsRUFBTTVPLEtBQUssQ0FBRXdPLEtBQU1jLEVBQUdILFNBQVVGLEdBQVdLLEtBTW5ELE9BSEFWLEVBQU1XLE1BQUssU0FBVXJNLEVBQUdDLEdBQ3BCLE9BQU9ELEVBQUVpTSxTQUFXaE0sRUFBRWdNLFlBRW5CUCxFQUdYLFNBQVNZLEdBQVdDLEdBQ2hCLE9BQVFBLEVBQU8sR0FBTSxHQUFLQSxFQUFPLEtBQVEsR0FBTUEsRUFBTyxLQUFRLEVBR2xFLFNBQVNDLEdBQVN0RixHQUNkLE9BQUlBLEVBQVMsRUFFRnZVLEtBQUs4WixLQUFLdkYsSUFBVyxFQUVyQnZVLEtBQUsrWixNQUFNeEYsR0FJMUIsU0FBU3lGLEdBQU1DLEdBQ1gsSUFBSUMsR0FBaUJELEVBQ2pCOVksRUFBUSxFQU1aLE9BSnNCLElBQWxCK1ksR0FBdUJDLFNBQVNELEtBQ2hDL1ksRUFBUTBZLEdBQVNLLElBR2QvWSxFQUdYLFNBQVNpWixHQUFXekIsRUFBTTBCLEdBQ3RCLE9BQU8sU0FBVWxaLEdBQ2IsT0FBYSxNQUFUQSxHQUNBbVosR0FBTXpjLEtBQU04YSxFQUFNeFgsR0FDbEI4TCxFQUFNOEUsYUFBYWxVLEtBQU13YyxHQUNsQnhjLE1BRUFzRixHQUFJdEYsS0FBTThhLElBSzdCLFNBQVN4VixHQUFJK1EsRUFBS3lFLEdBQ2QsT0FBT3pFLEVBQUl0RSxVQUNMc0UsRUFBSWhFLEdBQUcsT0FBU2dFLEVBQUl4QyxPQUFTLE1BQVEsSUFBTWlILEtBQzNDbEksSUFHVixTQUFTNkosR0FBTXBHLEVBQUt5RSxFQUFNeFgsR0FDbEIrUyxFQUFJdEUsWUFBY0ssTUFBTTlPLEtBRVgsYUFBVHdYLEdBQ0FnQixHQUFXekYsRUFBSTBGLFNBQ0MsSUFBaEIxRixFQUFJcUcsU0FDVyxLQUFmckcsRUFBSXNHLFFBRUpyWixFQUFRNlksR0FBTTdZLEdBQ2QrUyxFQUFJaEUsR0FBRyxPQUFTZ0UsRUFBSXhDLE9BQVMsTUFBUSxJQUFNaUgsR0FDdkN4WCxFQUNBK1MsRUFBSXFHLFFBQ0pFLEdBQVl0WixFQUFPK1MsRUFBSXFHLFdBRzNCckcsRUFBSWhFLEdBQUcsT0FBU2dFLEVBQUl4QyxPQUFTLE1BQVEsSUFBTWlILEdBQU14WCxJQU83RCxTQUFTdVosR0FBVTNCLEdBRWYsT0FBSWhHLEVBQVdsVixLQURma2IsRUFBUUQsR0FBZUMsS0FFWmxiLEtBQUtrYixLQUVUbGIsS0FHWCxTQUFTOGMsR0FBVTVCLEVBQU81WCxHQUN0QixHQUFxQixpQkFBVjRYLEVBQW9CLENBRTNCLElBQ0kzYixFQURBd2QsRUFBY3JCLEdBRGxCUixFQUFRQyxHQUFxQkQsSUFHekI4QixFQUFpQkQsRUFBWXRkLE9BQ2pDLElBQUtGLEVBQUksRUFBR0EsRUFBSXlkLEVBQWdCemQsSUFDNUJTLEtBQUsrYyxFQUFZeGQsR0FBR3ViLE1BQU1JLEVBQU02QixFQUFZeGQsR0FBR3ViLFlBSW5ELEdBQUk1RixFQUFXbFYsS0FEZmtiLEVBQVFELEdBQWVDLEtBRW5CLE9BQU9sYixLQUFLa2IsR0FBTzVYLEdBRzNCLE9BQU90RCxLQUdYLElBb0JJaWQsR0FwQkFDLEdBQVMsS0FDVEMsR0FBUyxPQUNUQyxHQUFTLFFBQ1RDLEdBQVMsUUFDVEMsR0FBUyxhQUNUQyxHQUFZLFFBQ1pDLEdBQVksWUFDWkMsR0FBWSxnQkFDWkMsR0FBWSxVQUNaQyxHQUFZLFVBQ1pDLEdBQVksZUFDWkMsR0FBZ0IsTUFDaEJDLEdBQWMsV0FDZEMsR0FBYyxxQkFDZEMsR0FBbUIsMEJBQ25CQyxHQUFpQix1QkFHakJDLEdBQ0ksd0pBS1IsU0FBU0MsR0FBYzVHLEVBQU82RyxFQUFPQyxHQUNqQ3BCLEdBQVExRixHQUFTckMsRUFBV2tKLEdBQ3RCQSxFQUNBLFNBQVVFLEVBQVUzRyxHQUNoQixPQUFPMkcsR0FBWUQsRUFBY0EsRUFBY0QsR0FJN0QsU0FBU0csR0FBc0JoSCxFQUFPdEQsR0FDbEMsT0FBSzFFLEVBQVcwTixHQUFTMUYsR0FJbEIwRixHQUFRMUYsR0FBT3RELEVBQU96QixRQUFTeUIsRUFBT0YsU0FIbEMsSUFBSXBGLE9BQU82UCxHQUFlakgsSUFPekMsU0FBU2lILEdBQWVoRixHQUNwQixPQUFPaUYsR0FDSGpGLEVBQ0s5VCxRQUFRLEtBQU0sSUFDZEEsUUFDRyx1Q0FDQSxTQUFVZ1osRUFBUzVjLEVBQUlJLEVBQUl5YyxFQUFJQyxHQUMzQixPQUFPOWMsR0FBTUksR0FBTXljLEdBQU1DLE1BTTdDLFNBQVNILEdBQVlqRixHQUNqQixPQUFPQSxFQUFFOVQsUUFBUSx5QkFBMEIsUUFqQy9DdVgsR0FBVSxHQW9DVixJQUFJNEIsR0FBUyxHQUViLFNBQVNDLEdBQWN2SCxFQUFPcE4sR0FDMUIsSUFBSTVLLEVBRUF3ZixFQURBckgsRUFBT3ZOLEVBV1gsSUFUcUIsaUJBQVZvTixJQUNQQSxFQUFRLENBQUNBLElBRVQxSCxFQUFTMUYsS0FDVHVOLEVBQU8sU0FBVTFTLEVBQU84UyxHQUNwQkEsRUFBTTNOLEdBQVlnUyxHQUFNblgsS0FHaEMrWixFQUFXeEgsRUFBTTlYLE9BQ1pGLEVBQUksRUFBR0EsRUFBSXdmLEVBQVV4ZixJQUN0QnNmLEdBQU90SCxFQUFNaFksSUFBTW1ZLEVBSTNCLFNBQVNzSCxHQUFrQnpILEVBQU9wTixHQUM5QjJVLEdBQWN2SCxHQUFPLFNBQVV2UyxFQUFPOFMsRUFBTzdELEVBQVFzRCxHQUNqRHRELEVBQU9nTCxHQUFLaEwsRUFBT2dMLElBQU0sR0FDekI5VSxFQUFTbkYsRUFBT2lQLEVBQU9nTCxHQUFJaEwsRUFBUXNELE1BSTNDLFNBQVMySCxHQUF3QjNILEVBQU92UyxFQUFPaVAsR0FDOUIsTUFBVGpQLEdBQWlCdUssRUFBV3NQLEdBQVF0SCxJQUNwQ3NILEdBQU90SCxHQUFPdlMsRUFBT2lQLEVBQU9rTCxHQUFJbEwsRUFBUXNELEdBSWhELElBY0l6VSxHQWRBc2MsR0FBTyxFQUNQQyxHQUFRLEVBQ1JDLEdBQU8sRUFDUEMsR0FBTyxFQUNQQyxHQUFTLEVBQ1RDLEdBQVMsRUFDVEMsR0FBYyxFQUNkQyxHQUFPLEVBQ1BDLEdBQVUsRUFFZCxTQUFTQyxHQUFJQyxFQUFHQyxHQUNaLE9BQVNELEVBQUlDLEVBQUtBLEdBQUtBLEVBb0IzQixTQUFTbkQsR0FBWWIsRUFBTVcsR0FDdkIsR0FBSXRLLE1BQU0ySixJQUFTM0osTUFBTXNLLEdBQ3JCLE9BQU85SixJQUVYLElBQUlvTixFQUFXSCxHQUFJbkQsRUFBTyxJQUUxQixPQURBWCxJQUFTVyxFQUFRc0QsR0FBWSxHQUNULElBQWJBLEVBQ0RsRSxHQUFXQyxHQUNQLEdBQ0EsR0FDSixHQUFPaUUsRUFBVyxFQUFLLEVBeEI3QmxkLEdBREFLLE1BQU12RCxVQUFVa0QsUUFDTkssTUFBTXZELFVBQVVrRCxRQUVoQixTQUFVbWQsR0FFaEIsSUFBSTFnQixFQUNKLElBQUtBLEVBQUksRUFBR0EsRUFBSVMsS0FBS1AsU0FBVUYsRUFDM0IsR0FBSVMsS0FBS1QsS0FBTzBnQixFQUNaLE9BQU8xZ0IsRUFHZixPQUFRLEdBbUJoQitYLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxNQUFNLFdBQ2pDLE9BQU90WCxLQUFLMGMsUUFBVSxLQUcxQnBGLEVBQWUsTUFBTyxFQUFHLEdBQUcsU0FBVWhILEdBQ2xDLE9BQU90USxLQUFLMlgsYUFBYXVJLFlBQVlsZ0IsS0FBTXNRLE1BRy9DZ0gsRUFBZSxPQUFRLEVBQUcsR0FBRyxTQUFVaEgsR0FDbkMsT0FBT3RRLEtBQUsyWCxhQUFhd0ksT0FBT25nQixLQUFNc1EsTUFLMUN1SyxHQUFhLFFBQVMsS0FJdEJXLEdBQWdCLFFBQVMsR0FJekIyQyxHQUFjLElBQUtaLElBQ25CWSxHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxPQUFPLFNBQVVHLEVBQVUvTixHQUNyQyxPQUFPQSxFQUFPNlAsaUJBQWlCOUIsTUFFbkNILEdBQWMsUUFBUSxTQUFVRyxFQUFVL04sR0FDdEMsT0FBT0EsRUFBTzhQLFlBQVkvQixNQUc5QlEsR0FBYyxDQUFDLElBQUssT0FBTyxTQUFVOVosRUFBTzhTLEdBQ3hDQSxFQUFNdUgsSUFBU2xELEdBQU1uWCxHQUFTLEtBR2xDOFosR0FBYyxDQUFDLE1BQU8sU0FBUyxTQUFVOVosRUFBTzhTLEVBQU83RCxFQUFRc0QsR0FDM0QsSUFBSW1GLEVBQVF6SSxFQUFPRixRQUFRdU0sWUFBWXRiLEVBQU91UyxFQUFPdEQsRUFBT3pCLFNBRS9DLE1BQVRrSyxFQUNBNUUsRUFBTXVILElBQVMzQyxFQUVmOUssRUFBZ0JxQyxHQUFROUMsYUFBZW5NLEtBTS9DLElBQUl1YixHQUNJLHdGQUF3RjlmLE1BQ3BGLEtBRVIrZixHQUNJLGtEQUFrRC9mLE1BQU0sS0FDNURnZ0IsR0FBbUIsZ0NBQ25CQyxHQUEwQnhDLEdBQzFCeUMsR0FBcUJ6QyxHQUV6QixTQUFTMEMsR0FBYS9PLEVBQUd2QixHQUNyQixPQUFLdUIsRUFLRXpPLEVBQVFwRCxLQUFLNmdCLFNBQ2Q3Z0IsS0FBSzZnQixRQUFRaFAsRUFBRTZLLFNBQ2YxYyxLQUFLNmdCLFNBQ0E3Z0IsS0FBSzZnQixRQUFRQyxVQUFZTCxJQUFrQmxkLEtBQUsrTSxHQUMzQyxTQUNBLGNBQ1J1QixFQUFFNkssU0FWQ3RaLEVBQVFwRCxLQUFLNmdCLFNBQ2Q3Z0IsS0FBSzZnQixRQUNMN2dCLEtBQUs2Z0IsUUFBb0IsV0FXdkMsU0FBU0UsR0FBa0JsUCxFQUFHdkIsR0FDMUIsT0FBS3VCLEVBS0V6TyxFQUFRcEQsS0FBS2doQixjQUNkaGhCLEtBQUtnaEIsYUFBYW5QLEVBQUU2SyxTQUNwQjFjLEtBQUtnaEIsYUFDRFAsR0FBaUJsZCxLQUFLK00sR0FBVSxTQUFXLGNBQzdDdUIsRUFBRTZLLFNBUkN0WixFQUFRcEQsS0FBS2doQixjQUNkaGhCLEtBQUtnaEIsYUFDTGhoQixLQUFLZ2hCLGFBQXlCLFdBUzVDLFNBQVNDLEdBQWtCQyxFQUFXNVEsRUFBUUUsR0FDMUMsSUFBSWpSLEVBQ0E0aEIsRUFDQTlLLEVBQ0ErSyxFQUFNRixFQUFVRyxvQkFDcEIsSUFBS3JoQixLQUFLc2hCLGFBS04sSUFIQXRoQixLQUFLc2hCLGFBQWUsR0FDcEJ0aEIsS0FBS3VoQixpQkFBbUIsR0FDeEJ2aEIsS0FBS3doQixrQkFBb0IsR0FDcEJqaUIsRUFBSSxFQUFHQSxFQUFJLEtBQU1BLEVBQ2xCOFcsRUFBTWhHLEVBQVUsQ0FBQyxJQUFNOVEsSUFDdkJTLEtBQUt3aEIsa0JBQWtCamlCLEdBQUtTLEtBQUtrZ0IsWUFDN0I3SixFQUNBLElBQ0ZnTCxvQkFDRnJoQixLQUFLdWhCLGlCQUFpQmhpQixHQUFLUyxLQUFLbWdCLE9BQU85SixFQUFLLElBQUlnTCxvQkFJeEQsT0FBSTdRLEVBQ2UsUUFBWEYsR0FFZSxLQURmNlEsRUFBS3JlLEdBQVFoRCxLQUFLRSxLQUFLd2hCLGtCQUFtQkosSUFDdkJELEVBQUssTUFHVCxLQURmQSxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUt1aEIsaUJBQWtCSCxJQUN0QkQsRUFBSyxLQUdiLFFBQVg3USxHQUVZLEtBRFo2USxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUt3aEIsa0JBQW1CSixNQUszQixLQURmRCxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUt1aEIsaUJBQWtCSCxJQUY5QkQsRUFHYSxNQUdaLEtBRFpBLEVBQUtyZSxHQUFRaEQsS0FBS0UsS0FBS3VoQixpQkFBa0JILE1BSzFCLEtBRGZELEVBQUtyZSxHQUFRaEQsS0FBS0UsS0FBS3doQixrQkFBbUJKLElBRi9CRCxFQUdhLEtBS3BDLFNBQVNNLEdBQWtCUCxFQUFXNVEsRUFBUUUsR0FDMUMsSUFBSWpSLEVBQUc4VyxFQUFLK0gsRUFFWixHQUFJcGUsS0FBSzBoQixrQkFDTCxPQUFPVCxHQUFrQm5oQixLQUFLRSxLQUFNa2hCLEVBQVc1USxFQUFRRSxHQVkzRCxJQVRLeFEsS0FBS3NoQixlQUNOdGhCLEtBQUtzaEIsYUFBZSxHQUNwQnRoQixLQUFLdWhCLGlCQUFtQixHQUN4QnZoQixLQUFLd2hCLGtCQUFvQixJQU14QmppQixFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFBSyxDQW1CckIsR0FqQkE4VyxFQUFNaEcsRUFBVSxDQUFDLElBQU05USxJQUNuQmlSLElBQVd4USxLQUFLdWhCLGlCQUFpQmhpQixLQUNqQ1MsS0FBS3VoQixpQkFBaUJoaUIsR0FBSyxJQUFJb1AsT0FDM0IsSUFBTTNPLEtBQUttZ0IsT0FBTzlKLEVBQUssSUFBSTNRLFFBQVEsSUFBSyxJQUFNLElBQzlDLEtBRUoxRixLQUFLd2hCLGtCQUFrQmppQixHQUFLLElBQUlvUCxPQUM1QixJQUFNM08sS0FBS2tnQixZQUFZN0osRUFBSyxJQUFJM1EsUUFBUSxJQUFLLElBQU0sSUFDbkQsTUFHSDhLLEdBQVd4USxLQUFLc2hCLGFBQWEvaEIsS0FDOUI2ZSxFQUNJLElBQU1wZSxLQUFLbWdCLE9BQU85SixFQUFLLElBQU0sS0FBT3JXLEtBQUtrZ0IsWUFBWTdKLEVBQUssSUFDOURyVyxLQUFLc2hCLGFBQWEvaEIsR0FBSyxJQUFJb1AsT0FBT3lQLEVBQU0xWSxRQUFRLElBQUssSUFBSyxNQUkxRDhLLEdBQ1csU0FBWEYsR0FDQXRRLEtBQUt1aEIsaUJBQWlCaGlCLEdBQUdnRSxLQUFLMmQsR0FFOUIsT0FBTzNoQixFQUNKLEdBQ0hpUixHQUNXLFFBQVhGLEdBQ0F0USxLQUFLd2hCLGtCQUFrQmppQixHQUFHZ0UsS0FBSzJkLEdBRS9CLE9BQU8zaEIsRUFDSixJQUFLaVIsR0FBVXhRLEtBQUtzaEIsYUFBYS9oQixHQUFHZ0UsS0FBSzJkLEdBQzVDLE9BQU8zaEIsR0FPbkIsU0FBU29pQixHQUFTdEwsRUFBSy9TLEdBQ25CLElBQUlzZSxFQUVKLElBQUt2TCxFQUFJdEUsVUFFTCxPQUFPc0UsRUFHWCxHQUFxQixpQkFBVi9TLEVBQ1AsR0FBSSxRQUFRQyxLQUFLRCxHQUNiQSxFQUFRNlksR0FBTTdZLFFBSWQsSUFBS3VNLEVBRkx2TSxFQUFRK1MsRUFBSXNCLGFBQWEySSxZQUFZaGQsSUFHakMsT0FBTytTLEVBT25CLE9BRkF1TCxFQUFhemYsS0FBSzBmLElBQUl4TCxFQUFJc0csT0FBUUMsR0FBWXZHLEVBQUkwRixPQUFRelksSUFDMUQrUyxFQUFJaEUsR0FBRyxPQUFTZ0UsRUFBSXhDLE9BQVMsTUFBUSxJQUFNLFNBQVN2USxFQUFPc2UsR0FDcER2TCxFQUdYLFNBQVN5TCxHQUFZeGUsR0FDakIsT0FBYSxNQUFUQSxHQUNBcWUsR0FBUzNoQixLQUFNc0QsR0FDZjhMLEVBQU04RSxhQUFhbFUsTUFBTSxHQUNsQkEsTUFFQXNGLEdBQUl0RixLQUFNLFNBSXpCLFNBQVMraEIsS0FDTCxPQUFPbkYsR0FBWTVjLEtBQUsrYixPQUFRL2IsS0FBSzBjLFNBR3pDLFNBQVMwRCxHQUFpQjlCLEdBQ3RCLE9BQUl0ZSxLQUFLMGhCLG1CQUNBblMsRUFBV3ZQLEtBQU0saUJBQ2xCZ2lCLEdBQW1CbGlCLEtBQUtFLE1BRXhCc2UsRUFDT3RlLEtBQUtpaUIsd0JBRUxqaUIsS0FBS2tpQixvQkFHWDNTLEVBQVd2UCxLQUFNLHVCQUNsQkEsS0FBS2tpQixrQkFBb0J4QixJQUV0QjFnQixLQUFLaWlCLHlCQUEyQjNELEVBQ2pDdGUsS0FBS2lpQix3QkFDTGppQixLQUFLa2lCLG1CQUluQixTQUFTN0IsR0FBWS9CLEdBQ2pCLE9BQUl0ZSxLQUFLMGhCLG1CQUNBblMsRUFBV3ZQLEtBQU0saUJBQ2xCZ2lCLEdBQW1CbGlCLEtBQUtFLE1BRXhCc2UsRUFDT3RlLEtBQUttaUIsbUJBRUxuaUIsS0FBS29pQixlQUdYN1MsRUFBV3ZQLEtBQU0sa0JBQ2xCQSxLQUFLb2lCLGFBQWV6QixJQUVqQjNnQixLQUFLbWlCLG9CQUFzQjdELEVBQzVCdGUsS0FBS21pQixtQkFDTG5pQixLQUFLb2lCLGNBSW5CLFNBQVNKLEtBQ0wsU0FBU0ssRUFBVTdTLEVBQUdDLEdBQ2xCLE9BQU9BLEVBQUVoUSxPQUFTK1AsRUFBRS9QLE9BR3hCLElBR0lGLEVBQ0E4VyxFQUpBaU0sRUFBYyxHQUNkQyxFQUFhLEdBQ2JDLEVBQWMsR0FHbEIsSUFBS2pqQixFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFFaEI4VyxFQUFNaEcsRUFBVSxDQUFDLElBQU05USxJQUN2QitpQixFQUFZaFcsS0FBS3RNLEtBQUtrZ0IsWUFBWTdKLEVBQUssS0FDdkNrTSxFQUFXalcsS0FBS3RNLEtBQUttZ0IsT0FBTzlKLEVBQUssS0FDakNtTSxFQUFZbFcsS0FBS3RNLEtBQUttZ0IsT0FBTzlKLEVBQUssS0FDbENtTSxFQUFZbFcsS0FBS3RNLEtBQUtrZ0IsWUFBWTdKLEVBQUssS0FPM0MsSUFIQWlNLEVBQVl6RyxLQUFLd0csR0FDakJFLEVBQVcxRyxLQUFLd0csR0FDaEJHLEVBQVkzRyxLQUFLd0csR0FDWjlpQixFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFDaEIraUIsRUFBWS9pQixHQUFLa2YsR0FBWTZELEVBQVkvaUIsSUFDekNnakIsRUFBV2hqQixHQUFLa2YsR0FBWThELEVBQVdoakIsSUFFM0MsSUFBS0EsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCaWpCLEVBQVlqakIsR0FBS2tmLEdBQVkrRCxFQUFZampCLElBRzdDUyxLQUFLb2lCLGFBQWUsSUFBSXpULE9BQU8sS0FBTzZULEVBQVloZCxLQUFLLEtBQU8sSUFBSyxLQUNuRXhGLEtBQUtraUIsa0JBQW9CbGlCLEtBQUtvaUIsYUFDOUJwaUIsS0FBS21pQixtQkFBcUIsSUFBSXhULE9BQzFCLEtBQU80VCxFQUFXL2MsS0FBSyxLQUFPLElBQzlCLEtBRUp4RixLQUFLaWlCLHdCQUEwQixJQUFJdFQsT0FDL0IsS0FBTzJULEVBQVk5YyxLQUFLLEtBQU8sSUFDL0IsS0FpRFIsU0FBU2lkLEdBQVcxRyxHQUNoQixPQUFPRCxHQUFXQyxHQUFRLElBQU0sSUE1Q3BDekUsRUFBZSxJQUFLLEVBQUcsR0FBRyxXQUN0QixJQUFJNkMsRUFBSW5hLEtBQUsrYixPQUNiLE9BQU81QixHQUFLLEtBQU8xRCxFQUFTMEQsRUFBRyxHQUFLLElBQU1BLEtBRzlDN0MsRUFBZSxFQUFHLENBQUMsS0FBTSxHQUFJLEdBQUcsV0FDNUIsT0FBT3RYLEtBQUsrYixPQUFTLE9BR3pCekUsRUFBZSxFQUFHLENBQUMsT0FBUSxHQUFJLEVBQUcsUUFDbENBLEVBQWUsRUFBRyxDQUFDLFFBQVMsR0FBSSxFQUFHLFFBQ25DQSxFQUFlLEVBQUcsQ0FBQyxTQUFVLEdBQUcsR0FBTyxFQUFHLFFBSTFDdUQsR0FBYSxPQUFRLEtBSXJCVyxHQUFnQixPQUFRLEdBSXhCMkMsR0FBYyxJQUFLTCxJQUNuQkssR0FBYyxLQUFNWixHQUFXSixJQUMvQmdCLEdBQWMsT0FBUVIsR0FBV04sSUFDakNjLEdBQWMsUUFBU1AsR0FBV04sSUFDbENhLEdBQWMsU0FBVVAsR0FBV04sSUFFbkN3QixHQUFjLENBQUMsUUFBUyxVQUFXTSxJQUNuQ04sR0FBYyxRQUFRLFNBQVU5WixFQUFPOFMsR0FDbkNBLEVBQU1zSCxJQUNlLElBQWpCcGEsRUFBTXZGLE9BQWUyUCxFQUFNc1Qsa0JBQWtCMWQsR0FBU21YLEdBQU1uWCxNQUVwRThaLEdBQWMsTUFBTSxTQUFVOVosRUFBTzhTLEdBQ2pDQSxFQUFNc0gsSUFBUWhRLEVBQU1zVCxrQkFBa0IxZCxNQUUxQzhaLEdBQWMsS0FBSyxTQUFVOVosRUFBTzhTLEdBQ2hDQSxFQUFNc0gsSUFBUXVELFNBQVMzZCxFQUFPLE9BV2xDb0ssRUFBTXNULGtCQUFvQixTQUFVMWQsR0FDaEMsT0FBT21YLEdBQU1uWCxJQUFVbVgsR0FBTW5YLEdBQVMsR0FBSyxLQUFPLE1BS3RELElBQUk0ZCxHQUFhckcsR0FBVyxZQUFZLEdBRXhDLFNBQVNzRyxLQUNMLE9BQU8vRyxHQUFXOWIsS0FBSytiLFFBRzNCLFNBQVMrRyxHQUFXM0ksRUFBR3RJLEVBQUdnSSxFQUFHRixFQUFHTSxFQUFHVCxFQUFHdUosR0FHbEMsSUFBSXBHLEVBWUosT0FWSXhDLEVBQUksS0FBT0EsR0FBSyxHQUVoQndDLEVBQU8sSUFBSTVNLEtBQUtvSyxFQUFJLElBQUt0SSxFQUFHZ0ksRUFBR0YsRUFBR00sRUFBR1QsRUFBR3VKLEdBQ3BDekcsU0FBU0ssRUFBS3FHLGdCQUNkckcsRUFBS3NHLFlBQVk5SSxJQUdyQndDLEVBQU8sSUFBSTVNLEtBQUtvSyxFQUFHdEksRUFBR2dJLEVBQUdGLEVBQUdNLEVBQUdULEVBQUd1SixHQUcvQnBHLEVBR1gsU0FBU3VHLEdBQWMvSSxHQUNuQixJQUFJd0MsRUFBTS9ILEVBY1YsT0FaSXVGLEVBQUksS0FBT0EsR0FBSyxJQUNoQnZGLEVBQU96UixNQUFNdkQsVUFBVWlKLE1BQU0vSSxLQUFLTixZQUU3QixHQUFLMmEsRUFBSSxJQUNkd0MsRUFBTyxJQUFJNU0sS0FBS0EsS0FBS29ULElBQUlwakIsTUFBTSxLQUFNNlUsSUFDakMwSCxTQUFTSyxFQUFLeUcsbUJBQ2R6RyxFQUFLMEcsZUFBZWxKLElBR3hCd0MsRUFBTyxJQUFJNU0sS0FBS0EsS0FBS29ULElBQUlwakIsTUFBTSxLQUFNUCxZQUdsQ21kLEVBSVgsU0FBUzJHLEdBQWdCdkgsRUFBTXdILEVBQUtDLEdBQ2hDLElBQ0lDLEVBQU0sRUFBSUYsRUFBTUMsRUFJcEIsUUFGYSxFQUFJTixHQUFjbkgsRUFBTSxFQUFHMEgsR0FBS0MsWUFBY0gsR0FBTyxFQUVsREUsRUFBTSxFQUkxQixTQUFTRSxHQUFtQjVILEVBQU02SCxFQUFNQyxFQUFTTixFQUFLQyxHQUNsRCxJQUdJTSxFQUNBQyxFQUZBQyxFQUFZLEVBQUksR0FBS0osRUFBTyxJQUZaLEVBQUlDLEVBQVVOLEdBQU8sRUFDeEJELEdBQWdCdkgsRUFBTXdILEVBQUtDLEdBZ0I1QyxPQVhJUSxHQUFhLEVBRWJELEVBQWV0QixHQURmcUIsRUFBVS9ILEVBQU8sR0FDb0JpSSxFQUM5QkEsRUFBWXZCLEdBQVcxRyxJQUM5QitILEVBQVUvSCxFQUFPLEVBQ2pCZ0ksRUFBZUMsRUFBWXZCLEdBQVcxRyxLQUV0QytILEVBQVUvSCxFQUNWZ0ksRUFBZUMsR0FHWixDQUNIakksS0FBTStILEVBQ05FLFVBQVdELEdBSW5CLFNBQVNFLEdBQVc1TixFQUFLa04sRUFBS0MsR0FDMUIsSUFFSVUsRUFDQUosRUFIQUssRUFBYWIsR0FBZ0JqTixFQUFJMEYsT0FBUXdILEVBQUtDLEdBQzlDSSxFQUFPemhCLEtBQUsrWixPQUFPN0YsRUFBSTJOLFlBQWNHLEVBQWEsR0FBSyxHQUFLLEVBZWhFLE9BWElQLEVBQU8sRUFFUE0sRUFBVU4sRUFBT1EsR0FEakJOLEVBQVV6TixFQUFJMEYsT0FBUyxFQUNld0gsRUFBS0MsR0FDcENJLEVBQU9RLEdBQVkvTixFQUFJMEYsT0FBUXdILEVBQUtDLElBQzNDVSxFQUFVTixFQUFPUSxHQUFZL04sRUFBSTBGLE9BQVF3SCxFQUFLQyxHQUM5Q00sRUFBVXpOLEVBQUkwRixPQUFTLElBRXZCK0gsRUFBVXpOLEVBQUkwRixPQUNkbUksRUFBVU4sR0FHUCxDQUNIQSxLQUFNTSxFQUNObkksS0FBTStILEdBSWQsU0FBU00sR0FBWXJJLEVBQU13SCxFQUFLQyxHQUM1QixJQUFJVyxFQUFhYixHQUFnQnZILEVBQU13SCxFQUFLQyxHQUN4Q2EsRUFBaUJmLEdBQWdCdkgsRUFBTyxFQUFHd0gsRUFBS0MsR0FDcEQsT0FBUWYsR0FBVzFHLEdBQVFvSSxFQUFhRSxHQUFrQixFQW9DOUQsU0FBU0MsR0FBV2pPLEdBQ2hCLE9BQU80TixHQUFXNU4sRUFBS3JXLEtBQUt1a0IsTUFBTWhCLElBQUt2akIsS0FBS3VrQixNQUFNZixLQUFLSSxLQWhDM0R0TSxFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksS0FBTSxRQUNyQ0EsRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEtBQU0sV0FJckN1RCxHQUFhLE9BQVEsS0FDckJBLEdBQWEsVUFBVyxLQUl4QlcsR0FBZ0IsT0FBUSxHQUN4QkEsR0FBZ0IsVUFBVyxHQUkzQjJDLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLElBQUtaLElBQ25CWSxHQUFjLEtBQU1aLEdBQVdKLElBRS9CNkIsR0FDSSxDQUFDLElBQUssS0FBTSxJQUFLLE9BQ2pCLFNBQVVoYSxFQUFPNGUsRUFBTTNQLEVBQVFzRCxHQUMzQnFNLEVBQUtyTSxFQUFNTixPQUFPLEVBQUcsSUFBTWtGLEdBQU1uWCxNQVl6QyxJQUFJd2YsR0FBb0IsQ0FDcEJqQixJQUFLLEVBQ0xDLElBQUssR0FHVCxTQUFTaUIsS0FDTCxPQUFPemtCLEtBQUt1a0IsTUFBTWhCLElBR3RCLFNBQVNtQixLQUNMLE9BQU8xa0IsS0FBS3VrQixNQUFNZixJQUt0QixTQUFTbUIsR0FBVzNmLEdBQ2hCLElBQUk0ZSxFQUFPNWpCLEtBQUsyWCxhQUFhaU0sS0FBSzVqQixNQUNsQyxPQUFnQixNQUFUZ0YsRUFBZ0I0ZSxFQUFPNWpCLEtBQUs0a0IsSUFBcUIsR0FBaEI1ZixFQUFRNGUsR0FBVyxLQUcvRCxTQUFTaUIsR0FBYzdmLEdBQ25CLElBQUk0ZSxFQUFPSyxHQUFXamtCLEtBQU0sRUFBRyxHQUFHNGpCLEtBQ2xDLE9BQWdCLE1BQVQ1ZSxFQUFnQjRlLEVBQU81akIsS0FBSzRrQixJQUFxQixHQUFoQjVmLEVBQVE0ZSxHQUFXLEtBZ0UvRCxTQUFTa0IsR0FBYTlmLEVBQU91TCxHQUN6QixNQUFxQixpQkFBVnZMLEVBQ0FBLEVBR05vTixNQUFNcE4sR0FLVSxpQkFEckJBLEVBQVF1TCxFQUFPd1UsY0FBYy9mLElBRWxCQSxFQUdKLEtBUkkyZCxTQUFTM2QsRUFBTyxJQVcvQixTQUFTZ2dCLEdBQWdCaGdCLEVBQU91TCxHQUM1QixNQUFxQixpQkFBVnZMLEVBQ0F1TCxFQUFPd1UsY0FBYy9mLEdBQVMsR0FBSyxFQUV2Q29OLE1BQU1wTixHQUFTLEtBQU9BLEVBSWpDLFNBQVNpZ0IsR0FBY0MsRUFBSXBGLEdBQ3ZCLE9BQU9vRixFQUFHcmMsTUFBTWlYLEVBQUcsR0FBR3JhLE9BQU95ZixFQUFHcmMsTUFBTSxFQUFHaVgsSUFyRjdDeEksRUFBZSxJQUFLLEVBQUcsS0FBTSxPQUU3QkEsRUFBZSxLQUFNLEVBQUcsR0FBRyxTQUFVaEgsR0FDakMsT0FBT3RRLEtBQUsyWCxhQUFhd04sWUFBWW5sQixLQUFNc1EsTUFHL0NnSCxFQUFlLE1BQU8sRUFBRyxHQUFHLFNBQVVoSCxHQUNsQyxPQUFPdFEsS0FBSzJYLGFBQWF5TixjQUFjcGxCLEtBQU1zUSxNQUdqRGdILEVBQWUsT0FBUSxFQUFHLEdBQUcsU0FBVWhILEdBQ25DLE9BQU90USxLQUFLMlgsYUFBYTBOLFNBQVNybEIsS0FBTXNRLE1BRzVDZ0gsRUFBZSxJQUFLLEVBQUcsRUFBRyxXQUMxQkEsRUFBZSxJQUFLLEVBQUcsRUFBRyxjQUkxQnVELEdBQWEsTUFBTyxLQUNwQkEsR0FBYSxVQUFXLEtBQ3hCQSxHQUFhLGFBQWMsS0FHM0JXLEdBQWdCLE1BQU8sSUFDdkJBLEdBQWdCLFVBQVcsSUFDM0JBLEdBQWdCLGFBQWMsSUFJOUIyQyxHQUFjLElBQUtaLElBQ25CWSxHQUFjLElBQUtaLElBQ25CWSxHQUFjLElBQUtaLElBQ25CWSxHQUFjLE1BQU0sU0FBVUcsRUFBVS9OLEdBQ3BDLE9BQU9BLEVBQU8rVSxpQkFBaUJoSCxNQUVuQ0gsR0FBYyxPQUFPLFNBQVVHLEVBQVUvTixHQUNyQyxPQUFPQSxFQUFPZ1YsbUJBQW1CakgsTUFFckNILEdBQWMsUUFBUSxTQUFVRyxFQUFVL04sR0FDdEMsT0FBT0EsRUFBT2lWLGNBQWNsSCxNQUdoQ1UsR0FBa0IsQ0FBQyxLQUFNLE1BQU8sU0FBUyxTQUFVaGEsRUFBTzRlLEVBQU0zUCxFQUFRc0QsR0FDcEUsSUFBSXNNLEVBQVU1UCxFQUFPRixRQUFRZ1IsY0FBYy9mLEVBQU91UyxFQUFPdEQsRUFBT3pCLFNBRWpELE1BQVhxUixFQUNBRCxFQUFLL0osRUFBSWdLLEVBRVRqUyxFQUFnQnFDLEdBQVExQixlQUFpQnZOLEtBSWpEZ2EsR0FBa0IsQ0FBQyxJQUFLLElBQUssTUFBTSxTQUFVaGEsRUFBTzRlLEVBQU0zUCxFQUFRc0QsR0FDOURxTSxFQUFLck0sR0FBUzRFLEdBQU1uWCxNQWtDeEIsSUFBSXlnQixHQUNJLDJEQUEyRGhsQixNQUFNLEtBQ3JFaWxCLEdBQTZCLDhCQUE4QmpsQixNQUFNLEtBQ2pFa2xCLEdBQTJCLHVCQUF1QmxsQixNQUFNLEtBQ3hEbWxCLEdBQXVCMUgsR0FDdkIySCxHQUE0QjNILEdBQzVCNEgsR0FBMEI1SCxHQUU5QixTQUFTNkgsR0FBZWxVLEVBQUd2QixHQUN2QixJQUFJK1UsRUFBV2ppQixFQUFRcEQsS0FBS2dtQixXQUN0QmhtQixLQUFLZ21CLFVBQ0xobUIsS0FBS2dtQixVQUNEblUsSUFBVyxJQUFOQSxHQUFjN1IsS0FBS2dtQixVQUFVbEYsU0FBU3ZkLEtBQUsrTSxHQUMxQyxTQUNBLGNBRWhCLE9BQWEsSUFBTnVCLEVBQ0RvVCxHQUFjSSxFQUFVcmxCLEtBQUt1a0IsTUFBTWhCLEtBQ25DMVIsRUFDQXdULEVBQVN4VCxFQUFFb1UsT0FDWFosRUFHVixTQUFTYSxHQUFvQnJVLEdBQ3pCLE9BQWEsSUFBTkEsRUFDRG9ULEdBQWNqbEIsS0FBS21tQixlQUFnQm5tQixLQUFLdWtCLE1BQU1oQixLQUM5QzFSLEVBQ0E3UixLQUFLbW1CLGVBQWV0VSxFQUFFb1UsT0FDdEJqbUIsS0FBS21tQixlQUdmLFNBQVNDLEdBQWtCdlUsR0FDdkIsT0FBYSxJQUFOQSxFQUNEb1QsR0FBY2psQixLQUFLcW1CLGFBQWNybUIsS0FBS3VrQixNQUFNaEIsS0FDNUMxUixFQUNBN1IsS0FBS3FtQixhQUFheFUsRUFBRW9VLE9BQ3BCam1CLEtBQUtxbUIsYUFHZixTQUFTQyxHQUFvQkMsRUFBYWpXLEVBQVFFLEdBQzlDLElBQUlqUixFQUNBNGhCLEVBQ0E5SyxFQUNBK0ssRUFBTW1GLEVBQVlsRixvQkFDdEIsSUFBS3JoQixLQUFLd21CLGVBS04sSUFKQXhtQixLQUFLd21CLGVBQWlCLEdBQ3RCeG1CLEtBQUt5bUIsb0JBQXNCLEdBQzNCem1CLEtBQUswbUIsa0JBQW9CLEdBRXBCbm5CLEVBQUksRUFBR0EsRUFBSSxJQUFLQSxFQUNqQjhXLEVBQU1oRyxFQUFVLENBQUMsSUFBTSxJQUFJNFYsSUFBSTFtQixHQUMvQlMsS0FBSzBtQixrQkFBa0JubkIsR0FBS1MsS0FBS21sQixZQUM3QjlPLEVBQ0EsSUFDRmdMLG9CQUNGcmhCLEtBQUt5bUIsb0JBQW9CbG5CLEdBQUtTLEtBQUtvbEIsY0FDL0IvTyxFQUNBLElBQ0ZnTCxvQkFDRnJoQixLQUFLd21CLGVBQWVqbkIsR0FBS1MsS0FBS3FsQixTQUFTaFAsRUFBSyxJQUFJZ0wsb0JBSXhELE9BQUk3USxFQUNlLFNBQVhGLEdBRWUsS0FEZjZRLEVBQUtyZSxHQUFRaEQsS0FBS0UsS0FBS3dtQixlQUFnQnBGLElBQ3BCRCxFQUFLLEtBQ04sUUFBWDdRLEdBRVEsS0FEZjZRLEVBQUtyZSxHQUFRaEQsS0FBS0UsS0FBS3ltQixvQkFBcUJyRixJQUN6QkQsRUFBSyxNQUdULEtBRGZBLEVBQUtyZSxHQUFRaEQsS0FBS0UsS0FBSzBtQixrQkFBbUJ0RixJQUN2QkQsRUFBSyxLQUdiLFNBQVg3USxHQUVZLEtBRFo2USxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUt3bUIsZUFBZ0JwRixNQUszQixLQURaRCxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUt5bUIsb0JBQXFCckYsTUFLN0IsS0FEZkQsRUFBS3JlLEdBQVFoRCxLQUFLRSxLQUFLMG1CLGtCQUFtQnRGLElBTi9CRCxFQU9hLEtBQ04sUUFBWDdRLEdBRUssS0FEWjZRLEVBQUtyZSxHQUFRaEQsS0FBS0UsS0FBS3ltQixvQkFBcUJyRixNQUtoQyxLQURaRCxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUt3bUIsZUFBZ0JwRixNQUt4QixLQURmRCxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUswbUIsa0JBQW1CdEYsSUFOL0JELEVBT2EsTUFHWixLQURaQSxFQUFLcmUsR0FBUWhELEtBQUtFLEtBQUswbUIsa0JBQW1CdEYsTUFLOUIsS0FEWkQsRUFBS3JlLEdBQVFoRCxLQUFLRSxLQUFLd21CLGVBQWdCcEYsTUFLeEIsS0FEZkQsRUFBS3JlLEdBQVFoRCxLQUFLRSxLQUFLeW1CLG9CQUFxQnJGLElBTmpDRCxFQU9hLEtBS3BDLFNBQVN3RixHQUFvQkosRUFBYWpXLEVBQVFFLEdBQzlDLElBQUlqUixFQUFHOFcsRUFBSytILEVBRVosR0FBSXBlLEtBQUs0bUIsb0JBQ0wsT0FBT04sR0FBb0J4bUIsS0FBS0UsS0FBTXVtQixFQUFhalcsRUFBUUUsR0FVL0QsSUFQS3hRLEtBQUt3bUIsaUJBQ054bUIsS0FBS3dtQixlQUFpQixHQUN0QnhtQixLQUFLMG1CLGtCQUFvQixHQUN6QjFtQixLQUFLeW1CLG9CQUFzQixHQUMzQnptQixLQUFLNm1CLG1CQUFxQixJQUd6QnRuQixFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFBSyxDQTZCcEIsR0ExQkE4VyxFQUFNaEcsRUFBVSxDQUFDLElBQU0sSUFBSTRWLElBQUkxbUIsR0FDM0JpUixJQUFXeFEsS0FBSzZtQixtQkFBbUJ0bkIsS0FDbkNTLEtBQUs2bUIsbUJBQW1CdG5CLEdBQUssSUFBSW9QLE9BQzdCLElBQU0zTyxLQUFLcWxCLFNBQVNoUCxFQUFLLElBQUkzUSxRQUFRLElBQUssUUFBVSxJQUNwRCxLQUVKMUYsS0FBS3ltQixvQkFBb0JsbkIsR0FBSyxJQUFJb1AsT0FDOUIsSUFBTTNPLEtBQUtvbEIsY0FBYy9PLEVBQUssSUFBSTNRLFFBQVEsSUFBSyxRQUFVLElBQ3pELEtBRUoxRixLQUFLMG1CLGtCQUFrQm5uQixHQUFLLElBQUlvUCxPQUM1QixJQUFNM08sS0FBS21sQixZQUFZOU8sRUFBSyxJQUFJM1EsUUFBUSxJQUFLLFFBQVUsSUFDdkQsTUFHSDFGLEtBQUt3bUIsZUFBZWpuQixLQUNyQjZlLEVBQ0ksSUFDQXBlLEtBQUtxbEIsU0FBU2hQLEVBQUssSUFDbkIsS0FDQXJXLEtBQUtvbEIsY0FBYy9PLEVBQUssSUFDeEIsS0FDQXJXLEtBQUttbEIsWUFBWTlPLEVBQUssSUFDMUJyVyxLQUFLd21CLGVBQWVqbkIsR0FBSyxJQUFJb1AsT0FBT3lQLEVBQU0xWSxRQUFRLElBQUssSUFBSyxNQUk1RDhLLEdBQ1csU0FBWEYsR0FDQXRRLEtBQUs2bUIsbUJBQW1CdG5CLEdBQUdnRSxLQUFLZ2pCLEdBRWhDLE9BQU9obkIsRUFDSixHQUNIaVIsR0FDVyxRQUFYRixHQUNBdFEsS0FBS3ltQixvQkFBb0JsbkIsR0FBR2dFLEtBQUtnakIsR0FFakMsT0FBT2huQixFQUNKLEdBQ0hpUixHQUNXLE9BQVhGLEdBQ0F0USxLQUFLMG1CLGtCQUFrQm5uQixHQUFHZ0UsS0FBS2dqQixHQUUvQixPQUFPaG5CLEVBQ0osSUFBS2lSLEdBQVV4USxLQUFLd21CLGVBQWVqbkIsR0FBR2dFLEtBQUtnakIsR0FDOUMsT0FBT2huQixHQU9uQixTQUFTdW5CLEdBQWdCOWhCLEdBQ3JCLElBQUtoRixLQUFLK1IsVUFDTixPQUFnQixNQUFUL00sRUFBZ0JoRixLQUFPNFMsSUFFbEMsSUFBSXFULEVBQU1qbUIsS0FBSzZULE9BQVM3VCxLQUFLcVMsR0FBR3FSLFlBQWMxakIsS0FBS3FTLEdBQUcwVSxTQUN0RCxPQUFhLE1BQVQvaEIsR0FDQUEsRUFBUThmLEdBQWE5ZixFQUFPaEYsS0FBSzJYLGNBQzFCM1gsS0FBSzRrQixJQUFJNWYsRUFBUWloQixFQUFLLE1BRXRCQSxFQUlmLFNBQVNlLEdBQXNCaGlCLEdBQzNCLElBQUtoRixLQUFLK1IsVUFDTixPQUFnQixNQUFUL00sRUFBZ0JoRixLQUFPNFMsSUFFbEMsSUFBSWlSLEdBQVc3akIsS0FBS2ltQixNQUFRLEVBQUlqbUIsS0FBSzJYLGFBQWE0TSxNQUFNaEIsS0FBTyxFQUMvRCxPQUFnQixNQUFUdmUsRUFBZ0I2ZSxFQUFVN2pCLEtBQUs0a0IsSUFBSTVmLEVBQVE2ZSxFQUFTLEtBRy9ELFNBQVNvRCxHQUFtQmppQixHQUN4QixJQUFLaEYsS0FBSytSLFVBQ04sT0FBZ0IsTUFBVC9NLEVBQWdCaEYsS0FBTzRTLElBT2xDLEdBQWEsTUFBVDVOLEVBQWUsQ0FDZixJQUFJNmUsRUFBVW1CLEdBQWdCaGdCLEVBQU9oRixLQUFLMlgsY0FDMUMsT0FBTzNYLEtBQUtpbUIsSUFBSWptQixLQUFLaW1CLE1BQVEsRUFBSXBDLEVBQVVBLEVBQVUsR0FFckQsT0FBTzdqQixLQUFLaW1CLE9BQVMsRUFJN0IsU0FBU1QsR0FBY2xILEdBQ25CLE9BQUl0ZSxLQUFLNG1CLHFCQUNBclgsRUFBV3ZQLEtBQU0sbUJBQ2xCa25CLEdBQXFCcG5CLEtBQUtFLE1BRTFCc2UsRUFDT3RlLEtBQUttbkIscUJBRUxubkIsS0FBS29uQixpQkFHWDdYLEVBQVd2UCxLQUFNLG9CQUNsQkEsS0FBS29uQixlQUFpQnhCLElBRW5CNWxCLEtBQUttbkIsc0JBQXdCN0ksRUFDOUJ0ZSxLQUFLbW5CLHFCQUNMbm5CLEtBQUtvbkIsZ0JBSW5CLFNBQVM3QixHQUFtQmpILEdBQ3hCLE9BQUl0ZSxLQUFLNG1CLHFCQUNBclgsRUFBV3ZQLEtBQU0sbUJBQ2xCa25CLEdBQXFCcG5CLEtBQUtFLE1BRTFCc2UsRUFDT3RlLEtBQUtxbkIsMEJBRUxybkIsS0FBS3NuQixzQkFHWC9YLEVBQVd2UCxLQUFNLHlCQUNsQkEsS0FBS3NuQixvQkFBc0J6QixJQUV4QjdsQixLQUFLcW5CLDJCQUE2Qi9JLEVBQ25DdGUsS0FBS3FuQiwwQkFDTHJuQixLQUFLc25CLHFCQUluQixTQUFTaEMsR0FBaUJoSCxHQUN0QixPQUFJdGUsS0FBSzRtQixxQkFDQXJYLEVBQVd2UCxLQUFNLG1CQUNsQmtuQixHQUFxQnBuQixLQUFLRSxNQUUxQnNlLEVBQ090ZSxLQUFLdW5CLHdCQUVMdm5CLEtBQUt3bkIsb0JBR1hqWSxFQUFXdlAsS0FBTSx1QkFDbEJBLEtBQUt3bkIsa0JBQW9CMUIsSUFFdEI5bEIsS0FBS3VuQix5QkFBMkJqSixFQUNqQ3RlLEtBQUt1bkIsd0JBQ0x2bkIsS0FBS3duQixtQkFJbkIsU0FBU04sS0FDTCxTQUFTN0UsRUFBVTdTLEVBQUdDLEdBQ2xCLE9BQU9BLEVBQUVoUSxPQUFTK1AsRUFBRS9QLE9BR3hCLElBSUlGLEVBQ0E4VyxFQUNBb1IsRUFDQUMsRUFDQUMsRUFSQUMsRUFBWSxHQUNadEYsRUFBYyxHQUNkQyxFQUFhLEdBQ2JDLEVBQWMsR0FNbEIsSUFBS2pqQixFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFFZjhXLEVBQU1oRyxFQUFVLENBQUMsSUFBTSxJQUFJNFYsSUFBSTFtQixHQUMvQmtvQixFQUFPaEosR0FBWXplLEtBQUttbEIsWUFBWTlPLEVBQUssS0FDekNxUixFQUFTakosR0FBWXplLEtBQUtvbEIsY0FBYy9PLEVBQUssS0FDN0NzUixFQUFRbEosR0FBWXplLEtBQUtxbEIsU0FBU2hQLEVBQUssS0FDdkN1UixFQUFVdGIsS0FBS21iLEdBQ2ZuRixFQUFZaFcsS0FBS29iLEdBQ2pCbkYsRUFBV2pXLEtBQUtxYixHQUNoQm5GLEVBQVlsVyxLQUFLbWIsR0FDakJqRixFQUFZbFcsS0FBS29iLEdBQ2pCbEYsRUFBWWxXLEtBQUtxYixHQUlyQkMsRUFBVS9MLEtBQUt3RyxHQUNmQyxFQUFZekcsS0FBS3dHLEdBQ2pCRSxFQUFXMUcsS0FBS3dHLEdBQ2hCRyxFQUFZM0csS0FBS3dHLEdBRWpCcmlCLEtBQUtvbkIsZUFBaUIsSUFBSXpZLE9BQU8sS0FBTzZULEVBQVloZCxLQUFLLEtBQU8sSUFBSyxLQUNyRXhGLEtBQUtzbkIsb0JBQXNCdG5CLEtBQUtvbkIsZUFDaENwbkIsS0FBS3duQixrQkFBb0J4bkIsS0FBS29uQixlQUU5QnBuQixLQUFLbW5CLHFCQUF1QixJQUFJeFksT0FDNUIsS0FBTzRULEVBQVcvYyxLQUFLLEtBQU8sSUFDOUIsS0FFSnhGLEtBQUtxbkIsMEJBQTRCLElBQUkxWSxPQUNqQyxLQUFPMlQsRUFBWTljLEtBQUssS0FBTyxJQUMvQixLQUVKeEYsS0FBS3VuQix3QkFBMEIsSUFBSTVZLE9BQy9CLEtBQU9pWixFQUFVcGlCLEtBQUssS0FBTyxJQUM3QixLQU1SLFNBQVNxaUIsS0FDTCxPQUFPN25CLEtBQUs4bkIsUUFBVSxJQUFNLEdBR2hDLFNBQVNDLEtBQ0wsT0FBTy9uQixLQUFLOG5CLFNBQVcsR0FpQzNCLFNBQVNyVyxHQUFTOEYsRUFBT3lRLEdBQ3JCMVEsRUFBZUMsRUFBTyxFQUFHLEdBQUcsV0FDeEIsT0FBT3ZYLEtBQUsyWCxhQUFhbEcsU0FDckJ6UixLQUFLOG5CLFFBQ0w5bkIsS0FBS2lvQixVQUNMRCxNQWlCWixTQUFTRSxHQUFjNUosRUFBVS9OLEdBQzdCLE9BQU9BLEVBQU80WCxlQTJEbEIsU0FBU0MsR0FBV3BqQixHQUdoQixNQUFnRCxPQUF4Q0EsRUFBUSxJQUFJdEMsY0FBYzJsQixPQUFPLEdBbkg3Qy9RLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFFBQ2xDQSxFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksRUFBR3VRLElBQ2xDdlEsRUFBZSxJQUFLLENBQUMsS0FBTSxHQUFJLEVBQUd5USxJQUVsQ3pRLEVBQWUsTUFBTyxFQUFHLEdBQUcsV0FDeEIsTUFBTyxHQUFLdVEsR0FBUTluQixNQUFNQyxNQUFReVcsRUFBU3pXLEtBQUtpb0IsVUFBVyxNQUcvRDNRLEVBQWUsUUFBUyxFQUFHLEdBQUcsV0FDMUIsTUFDSSxHQUNBdVEsR0FBUTluQixNQUFNQyxNQUNkeVcsRUFBU3pXLEtBQUtpb0IsVUFBVyxHQUN6QnhSLEVBQVN6VyxLQUFLc29CLFVBQVcsTUFJakNoUixFQUFlLE1BQU8sRUFBRyxHQUFHLFdBQ3hCLE1BQU8sR0FBS3RYLEtBQUs4bkIsUUFBVXJSLEVBQVN6VyxLQUFLaW9CLFVBQVcsTUFHeEQzUSxFQUFlLFFBQVMsRUFBRyxHQUFHLFdBQzFCLE1BQ0ksR0FDQXRYLEtBQUs4bkIsUUFDTHJSLEVBQVN6VyxLQUFLaW9CLFVBQVcsR0FDekJ4UixFQUFTelcsS0FBS3NvQixVQUFXLE1BY2pDN1csR0FBUyxLQUFLLEdBQ2RBLEdBQVMsS0FBSyxHQUlkb0osR0FBYSxPQUFRLEtBR3JCVyxHQUFnQixPQUFRLElBUXhCMkMsR0FBYyxJQUFLK0osSUFDbkIvSixHQUFjLElBQUsrSixJQUNuQi9KLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxLQUFNWixHQUFXSixJQUUvQmdCLEdBQWMsTUFBT1gsSUFDckJXLEdBQWMsUUFBU1YsSUFDdkJVLEdBQWMsTUFBT1gsSUFDckJXLEdBQWMsUUFBU1YsSUFFdkJxQixHQUFjLENBQUMsSUFBSyxNQUFPUyxJQUMzQlQsR0FBYyxDQUFDLElBQUssT0FBTyxTQUFVOVosRUFBTzhTLEVBQU83RCxHQUMvQyxJQUFJc1UsRUFBU3BNLEdBQU1uWCxHQUNuQjhTLEVBQU15SCxJQUFtQixLQUFYZ0osRUFBZ0IsRUFBSUEsS0FFdEN6SixHQUFjLENBQUMsSUFBSyxNQUFNLFNBQVU5WixFQUFPOFMsRUFBTzdELEdBQzlDQSxFQUFPdVUsTUFBUXZVLEVBQU9GLFFBQVEwVSxLQUFLempCLEdBQ25DaVAsRUFBT3lVLFVBQVkxakIsS0FFdkI4WixHQUFjLENBQUMsSUFBSyxPQUFPLFNBQVU5WixFQUFPOFMsRUFBTzdELEdBQy9DNkQsRUFBTXlILElBQVFwRCxHQUFNblgsR0FDcEI0TSxFQUFnQnFDLEdBQVF4QixTQUFVLEtBRXRDcU0sR0FBYyxPQUFPLFNBQVU5WixFQUFPOFMsRUFBTzdELEdBQ3pDLElBQUkwVSxFQUFNM2pCLEVBQU12RixPQUFTLEVBQ3pCcVksRUFBTXlILElBQVFwRCxHQUFNblgsRUFBTWlTLE9BQU8sRUFBRzBSLElBQ3BDN1EsRUFBTTBILElBQVVyRCxHQUFNblgsRUFBTWlTLE9BQU8wUixJQUNuQy9XLEVBQWdCcUMsR0FBUXhCLFNBQVUsS0FFdENxTSxHQUFjLFNBQVMsU0FBVTlaLEVBQU84UyxFQUFPN0QsR0FDM0MsSUFBSTJVLEVBQU81akIsRUFBTXZGLE9BQVMsRUFDdEJvcEIsRUFBTzdqQixFQUFNdkYsT0FBUyxFQUMxQnFZLEVBQU15SCxJQUFRcEQsR0FBTW5YLEVBQU1pUyxPQUFPLEVBQUcyUixJQUNwQzlRLEVBQU0wSCxJQUFVckQsR0FBTW5YLEVBQU1pUyxPQUFPMlIsRUFBTSxJQUN6QzlRLEVBQU0ySCxJQUFVdEQsR0FBTW5YLEVBQU1pUyxPQUFPNFIsSUFDbkNqWCxFQUFnQnFDLEdBQVF4QixTQUFVLEtBRXRDcU0sR0FBYyxPQUFPLFNBQVU5WixFQUFPOFMsRUFBTzdELEdBQ3pDLElBQUkwVSxFQUFNM2pCLEVBQU12RixPQUFTLEVBQ3pCcVksRUFBTXlILElBQVFwRCxHQUFNblgsRUFBTWlTLE9BQU8sRUFBRzBSLElBQ3BDN1EsRUFBTTBILElBQVVyRCxHQUFNblgsRUFBTWlTLE9BQU8wUixPQUV2QzdKLEdBQWMsU0FBUyxTQUFVOVosRUFBTzhTLEVBQU83RCxHQUMzQyxJQUFJMlUsRUFBTzVqQixFQUFNdkYsT0FBUyxFQUN0Qm9wQixFQUFPN2pCLEVBQU12RixPQUFTLEVBQzFCcVksRUFBTXlILElBQVFwRCxHQUFNblgsRUFBTWlTLE9BQU8sRUFBRzJSLElBQ3BDOVEsRUFBTTBILElBQVVyRCxHQUFNblgsRUFBTWlTLE9BQU8yUixFQUFNLElBQ3pDOVEsRUFBTTJILElBQVV0RCxHQUFNblgsRUFBTWlTLE9BQU80UixPQVd2QyxJQUFJQyxHQUE2QixnQkFLN0JDLEdBQWF4TSxHQUFXLFNBQVMsR0FFckMsU0FBU3lNLEdBQWVsQixFQUFPRyxFQUFTZ0IsR0FDcEMsT0FBSW5CLEVBQVEsR0FDRG1CLEVBQVUsS0FBTyxLQUVqQkEsRUFBVSxLQUFPLEtBSWhDLElBdUJJQyxHQXZCQUMsR0FBYSxDQUNiL1MsU0FBVVAsRUFDVnNDLGVBQWdCRSxFQUNoQkosWUFBYWUsRUFDYnZCLFFBQVN5QixFQUNUa1EsdUJBQXdCalEsRUFDeEJrQixhQUFjaEIsRUFFZDhHLE9BQVFJLEdBQ1JMLFlBQWFNLEdBRWJvRCxLQUFNWSxHQUVOYSxTQUFVSSxHQUNWTixZQUFhUSxHQUNiUCxjQUFlTSxHQUVmMkQsY0FBZVAsSUFJZlEsR0FBVSxHQUNWQyxHQUFpQixHQUdyQixTQUFTQyxHQUFhQyxFQUFNQyxHQUN4QixJQUFJbnFCLEVBQ0FvcUIsRUFBT3huQixLQUFLMGYsSUFBSTRILEVBQUtocUIsT0FBUWlxQixFQUFLanFCLFFBQ3RDLElBQUtGLEVBQUksRUFBR0EsRUFBSW9xQixFQUFNcHFCLEdBQUssRUFDdkIsR0FBSWtxQixFQUFLbHFCLEtBQU9tcUIsRUFBS25xQixHQUNqQixPQUFPQSxFQUdmLE9BQU9vcUIsRUFHWCxTQUFTQyxHQUFnQmpxQixHQUNyQixPQUFPQSxFQUFNQSxFQUFJK0MsY0FBY2dELFFBQVEsSUFBSyxLQUFPL0YsRUFNdkQsU0FBU2txQixHQUFhQyxHQU9sQixJQU5BLElBQ0lDLEVBQ0FDLEVBQ0F6WixFQUNBOVAsRUFKQWxCLEVBQUksRUFNREEsRUFBSXVxQixFQUFNcnFCLFFBQVEsQ0FLckIsSUFIQXNxQixHQURBdHBCLEVBQVFtcEIsR0FBZ0JFLEVBQU12cUIsSUFBSWtCLE1BQU0sTUFDOUJoQixPQUVWdXFCLEdBREFBLEVBQU9KLEdBQWdCRSxFQUFNdnFCLEVBQUksS0FDbkJ5cUIsRUFBS3ZwQixNQUFNLEtBQU8sS0FDekJzcEIsRUFBSSxHQUFHLENBRVYsR0FEQXhaLEVBQVMwWixHQUFXeHBCLEVBQU1vSSxNQUFNLEVBQUdraEIsR0FBR3ZrQixLQUFLLE1BRXZDLE9BQU8rSyxFQUVYLEdBQ0l5WixHQUNBQSxFQUFLdnFCLFFBQVVzcUIsR0FDZlAsR0FBYS9vQixFQUFPdXBCLElBQVNELEVBQUksRUFHakMsTUFFSkEsSUFFSnhxQixJQUVKLE9BQU8ycEIsR0FHWCxTQUFTZ0IsR0FBaUIzb0IsR0FFdEIsT0FBb0MsTUFBN0JBLEVBQUt3QyxNQUFNLGVBR3RCLFNBQVNrbUIsR0FBVzFvQixHQUNoQixJQUFJNG9CLEVBQVksS0FHaEIsUUFDc0Jsb0IsSUFBbEJxbkIsR0FBUS9uQixJQUVSME4sR0FDQUEsRUFBT21iLFNBQ1BGLEdBQWlCM29CLEdBRWpCLElBQ0k0b0IsRUFBWWpCLEdBQWFtQixNQUNSamtCLEtBRWpCa2tCLEdBQW1CSCxHQUNyQixNQUFPSSxHQUdMakIsR0FBUS9uQixHQUFRLEtBR3hCLE9BQU8rbkIsR0FBUS9uQixHQU1uQixTQUFTK29CLEdBQW1CM3FCLEVBQUs2cUIsR0FDN0IsSUFBSXZqQixFQXFCSixPQXBCSXRILEtBRUlzSCxFQURBMkksRUFBWTRhLEdBQ0xDLEdBQVU5cUIsR0FFVitxQixHQUFhL3FCLEVBQUs2cUIsSUFLekJ0QixHQUFlamlCLEVBRVEsb0JBQVpzTixTQUEyQkEsUUFBUUgsTUFFMUNHLFFBQVFILEtBQ0osVUFBWXpVLEVBQU0sMkNBTTNCdXBCLEdBQWFtQixNQUd4QixTQUFTSyxHQUFhbnBCLEVBQU0wUyxHQUN4QixHQUFlLE9BQVhBLEVBQWlCLENBQ2pCLElBQUkxRCxFQUNBbUYsRUFBZXlULEdBRW5CLEdBREFsVixFQUFPMFcsS0FBT3BwQixFQUNPLE1BQWpCK25CLEdBQVEvbkIsR0FDUjBULEVBQ0ksdUJBQ0EsMk9BS0pTLEVBQWU0VCxHQUFRL25CLEdBQU04VCxhQUMxQixHQUEyQixNQUF2QnBCLEVBQU8yVyxhQUNkLEdBQW9DLE1BQWhDdEIsR0FBUXJWLEVBQU8yVyxjQUNmbFYsRUFBZTRULEdBQVFyVixFQUFPMlcsY0FBY3ZWLFlBQ3pDLENBRUgsR0FBYyxPQURkOUUsRUFBUzBaLEdBQVdoVyxFQUFPMlcsZUFXdkIsT0FQS3JCLEdBQWV0VixFQUFPMlcsZ0JBQ3ZCckIsR0FBZXRWLEVBQU8yVyxjQUFnQixJQUUxQ3JCLEdBQWV0VixFQUFPMlcsY0FBY3RlLEtBQUssQ0FDckMvSyxLQUFNQSxFQUNOMFMsT0FBUUEsSUFFTCxLQVRQeUIsRUFBZW5GLEVBQU84RSxRQTBCbEMsT0FiQWlVLEdBQVEvbkIsR0FBUSxJQUFJcVUsRUFBT0gsRUFBYUMsRUFBY3pCLElBRWxEc1YsR0FBZWhvQixJQUNmZ29CLEdBQWVob0IsR0FBTTZELFNBQVEsU0FBVTJhLEdBQ25DMkssR0FBYTNLLEVBQUV4ZSxLQUFNd2UsRUFBRTlMLFdBTy9CcVcsR0FBbUIvb0IsR0FFWituQixHQUFRL25CLEdBSWYsY0FETytuQixHQUFRL25CLEdBQ1IsS0FJZixTQUFTc3BCLEdBQWF0cEIsRUFBTTBTLEdBQ3hCLEdBQWMsTUFBVkEsRUFBZ0IsQ0FDaEIsSUFBSTFELEVBQ0F1YSxFQUNBcFYsRUFBZXlULEdBRUUsTUFBakJHLEdBQVEvbkIsSUFBK0MsTUFBOUIrbkIsR0FBUS9uQixHQUFNcXBCLGFBRXZDdEIsR0FBUS9uQixHQUFNNlQsSUFBSUssRUFBYTZULEdBQVEvbkIsR0FBTThULFFBQVNwQixLQUlyQyxPQURqQjZXLEVBQVliLEdBQVcxb0IsTUFFbkJtVSxFQUFlb1YsRUFBVXpWLFNBRTdCcEIsRUFBU3dCLEVBQWFDLEVBQWN6QixHQUNuQixNQUFiNlcsSUFJQTdXLEVBQU8wVyxLQUFPcHBCLElBRWxCZ1AsRUFBUyxJQUFJcUYsRUFBTzNCLElBQ2IyVyxhQUFldEIsR0FBUS9uQixHQUM5QituQixHQUFRL25CLEdBQVFnUCxHQUlwQitaLEdBQW1CL29CLFFBR0UsTUFBakIrbkIsR0FBUS9uQixLQUMwQixNQUE5QituQixHQUFRL25CLEdBQU1xcEIsY0FDZHRCLEdBQVEvbkIsR0FBUStuQixHQUFRL25CLEdBQU1xcEIsYUFDMUJycEIsSUFBUytvQixNQUNUQSxHQUFtQi9vQixJQUVDLE1BQWpCK25CLEdBQVEvbkIsV0FDUituQixHQUFRL25CLElBSTNCLE9BQU8rbkIsR0FBUS9uQixHQUluQixTQUFTa3BCLEdBQVU5cUIsR0FDZixJQUFJNFEsRUFNSixHQUpJNVEsR0FBT0EsRUFBSW9VLFNBQVdwVSxFQUFJb1UsUUFBUXNXLFFBQ2xDMXFCLEVBQU1BLEVBQUlvVSxRQUFRc1csUUFHakIxcUIsRUFDRCxPQUFPdXBCLEdBR1gsSUFBSzlsQixFQUFRekQsR0FBTSxDQUdmLEdBREE0USxFQUFTMFosR0FBV3RxQixHQUVoQixPQUFPNFEsRUFFWDVRLEVBQU0sQ0FBQ0EsR0FHWCxPQUFPa3FCLEdBQWFscUIsR0FHeEIsU0FBU29yQixLQUNMLE9BQU9qbEIsRUFBS3dqQixJQUdoQixTQUFTMEIsR0FBY25aLEdBQ25CLElBQUlkLEVBQ0F2QixFQUFJcUMsRUFBRXNOLEdBdUNWLE9BckNJM1AsSUFBc0MsSUFBakNvQyxFQUFnQkMsR0FBR2QsV0FDeEJBLEVBQ0l2QixFQUFFNlAsSUFBUyxHQUFLN1AsRUFBRTZQLElBQVMsR0FDckJBLEdBQ0E3UCxFQUFFOFAsSUFBUSxHQUFLOVAsRUFBRThQLElBQVExQyxHQUFZcE4sRUFBRTRQLElBQU81UCxFQUFFNlAsS0FDaERDLEdBQ0E5UCxFQUFFK1AsSUFBUSxHQUNWL1AsRUFBRStQLElBQVEsSUFDRyxLQUFaL1AsRUFBRStQLE1BQ2dCLElBQWQvUCxFQUFFZ1EsS0FDZSxJQUFkaFEsRUFBRWlRLEtBQ2lCLElBQW5CalEsRUFBRWtRLEtBQ1ZILEdBQ0EvUCxFQUFFZ1EsSUFBVSxHQUFLaFEsRUFBRWdRLElBQVUsR0FDN0JBLEdBQ0FoUSxFQUFFaVEsSUFBVSxHQUFLalEsRUFBRWlRLElBQVUsR0FDN0JBLEdBQ0FqUSxFQUFFa1EsSUFBZSxHQUFLbFEsRUFBRWtRLElBQWUsSUFDdkNBLElBQ0MsRUFHUDlOLEVBQWdCQyxHQUFHb1oscUJBQ2xCbGEsRUFBV3FPLElBQVFyTyxFQUFXdU8sTUFFL0J2TyxFQUFXdU8sSUFFWDFOLEVBQWdCQyxHQUFHcVosaUJBQWdDLElBQWRuYSxJQUNyQ0EsRUFBVzRPLElBRVgvTixFQUFnQkMsR0FBR3NaLG1CQUFrQyxJQUFkcGEsSUFDdkNBLEVBQVc2TyxJQUdmaE8sRUFBZ0JDLEdBQUdkLFNBQVdBLEdBRzNCYyxFQUtYLElBQUl1WixHQUNJLGlKQUNKQyxHQUNJLDZJQUNKQyxHQUFVLHdCQUNWQyxHQUFXLENBQ1AsQ0FBQyxlQUFnQix1QkFDakIsQ0FBQyxhQUFjLG1CQUNmLENBQUMsZUFBZ0Isa0JBQ2pCLENBQUMsYUFBYyxlQUFlLEdBQzlCLENBQUMsV0FBWSxlQUNiLENBQUMsVUFBVyxjQUFjLEdBQzFCLENBQUMsYUFBYyxjQUNmLENBQUMsV0FBWSxTQUNiLENBQUMsYUFBYyxlQUNmLENBQUMsWUFBYSxlQUFlLEdBQzdCLENBQUMsVUFBVyxTQUNaLENBQUMsU0FBVSxTQUFTLEdBQ3BCLENBQUMsT0FBUSxTQUFTLElBR3RCQyxHQUFXLENBQ1AsQ0FBQyxnQkFBaUIsdUJBQ2xCLENBQUMsZ0JBQWlCLHNCQUNsQixDQUFDLFdBQVksa0JBQ2IsQ0FBQyxRQUFTLGFBQ1YsQ0FBQyxjQUFlLHFCQUNoQixDQUFDLGNBQWUsb0JBQ2hCLENBQUMsU0FBVSxnQkFDWCxDQUFDLE9BQVEsWUFDVCxDQUFDLEtBQU0sU0FFWEMsR0FBa0IscUJBRWxCL1osR0FDSSwwTEFDSmdhLEdBQWEsQ0FDVEMsR0FBSSxFQUNKQyxJQUFLLEVBQ0xDLEtBQUssSUFDTEMsS0FBSyxJQUNMQyxLQUFLLElBQ0xDLEtBQUssSUFDTEMsS0FBSyxJQUNMQyxLQUFLLElBQ0xDLEtBQUssSUFDTEMsS0FBSyxLQUliLFNBQVNDLEdBQWNwWSxHQUNuQixJQUFJMVUsRUFDQStzQixFQUdBQyxFQUNBQyxFQUNBQyxFQUNBQyxFQUxBblMsRUFBU3RHLEVBQU9SLEdBQ2hCMVAsRUFBUXFuQixHQUFpQnVCLEtBQUtwUyxJQUFXOFEsR0FBY3NCLEtBQUtwUyxHQUs1RHFTLEVBQWNyQixHQUFTOXJCLE9BQ3ZCb3RCLEVBQWNyQixHQUFTL3JCLE9BRTNCLEdBQUlzRSxFQUFPLENBRVAsSUFEQTZOLEVBQWdCcUMsR0FBUTNDLEtBQU0sRUFDekIvUixFQUFJLEVBQUcrc0IsRUFBSU0sRUFBYXJ0QixFQUFJK3NCLEVBQUcvc0IsSUFDaEMsR0FBSWdzQixHQUFTaHNCLEdBQUcsR0FBR290QixLQUFLNW9CLEVBQU0sSUFBSyxDQUMvQnlvQixFQUFhakIsR0FBU2hzQixHQUFHLEdBQ3pCZ3RCLEdBQStCLElBQW5CaEIsR0FBU2hzQixHQUFHLEdBQ3hCLE1BR1IsR0FBa0IsTUFBZGl0QixFQUVBLFlBREF2WSxFQUFPakMsVUFBVyxHQUd0QixHQUFJak8sRUFBTSxHQUFJLENBQ1YsSUFBS3hFLEVBQUksRUFBRytzQixFQUFJTyxFQUFhdHRCLEVBQUkrc0IsRUFBRy9zQixJQUNoQyxHQUFJaXNCLEdBQVNqc0IsR0FBRyxHQUFHb3RCLEtBQUs1b0IsRUFBTSxJQUFLLENBRS9CMG9CLEdBQWMxb0IsRUFBTSxJQUFNLEtBQU95bkIsR0FBU2pzQixHQUFHLEdBQzdDLE1BR1IsR0FBa0IsTUFBZGt0QixFQUVBLFlBREF4WSxFQUFPakMsVUFBVyxHQUkxQixJQUFLdWEsR0FBMkIsTUFBZEUsRUFFZCxZQURBeFksRUFBT2pDLFVBQVcsR0FHdEIsR0FBSWpPLEVBQU0sR0FBSSxDQUNWLElBQUl1bkIsR0FBUXFCLEtBQUs1b0IsRUFBTSxJQUluQixZQURBa1EsRUFBT2pDLFVBQVcsR0FGbEIwYSxFQUFXLElBTW5CelksRUFBT1AsR0FBSzhZLEdBQWNDLEdBQWMsS0FBT0MsR0FBWSxJQUMzREksR0FBMEI3WSxRQUUxQkEsRUFBT2pDLFVBQVcsRUFJMUIsU0FBUythLEdBQ0xDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEdBRUEsSUFBSXpwQixFQUFTLENBQ1QwcEIsR0FBZU4sR0FDZnhNLEdBQXlCMWQsUUFBUW1xQixHQUNqQ3RLLFNBQVN1SyxFQUFRLElBQ2pCdkssU0FBU3dLLEVBQVMsSUFDbEJ4SyxTQUFTeUssRUFBVyxLQU94QixPQUpJQyxHQUNBenBCLEVBQU8wSSxLQUFLcVcsU0FBUzBLLEVBQVcsS0FHN0J6cEIsRUFHWCxTQUFTMHBCLEdBQWVOLEdBQ3BCLElBQUlqUixFQUFPNEcsU0FBU3FLLEVBQVMsSUFDN0IsT0FBSWpSLEdBQVEsR0FDRCxJQUFPQSxFQUNQQSxHQUFRLElBQ1IsS0FBT0EsRUFFWEEsRUFHWCxTQUFTd1IsR0FBa0IvVCxHQUV2QixPQUFPQSxFQUNGOVQsUUFBUSxxQkFBc0IsS0FDOUJBLFFBQVEsV0FBWSxLQUNwQkEsUUFBUSxTQUFVLElBQ2xCQSxRQUFRLFNBQVUsSUFHM0IsU0FBUzhuQixHQUFhQyxFQUFZQyxFQUFhelosR0FDM0MsT0FBSXdaLEdBRXNCL0gsR0FBMkI1aUIsUUFBUTJxQixLQUNyQyxJQUFJMWQsS0FDaEIyZCxFQUFZLEdBQ1pBLEVBQVksR0FDWkEsRUFBWSxJQUNkM0csV0FFRm5WLEVBQWdCcUMsR0FBUXRDLGlCQUFrQixFQUMxQ3NDLEVBQU9qQyxVQUFXLEdBQ1gsR0FNbkIsU0FBUzJiLEdBQWdCQyxFQUFXQyxFQUFnQkMsR0FDaEQsR0FBSUYsRUFDQSxPQUFPbEMsR0FBV2tDLEdBQ2YsR0FBSUMsRUFFUCxPQUFPLEVBRVAsSUFBSUUsRUFBS3BMLFNBQVNtTCxFQUFXLElBQ3pCamMsRUFBSWtjLEVBQUssSUFFYixPQURTQSxFQUFLbGMsR0FBSyxJQUNSLEdBQUtBLEVBS3hCLFNBQVNtYyxHQUFrQi9aLEdBQ3ZCLElBQ0lnYSxFQURBbHFCLEVBQVEyTixHQUFRaWIsS0FBS1ksR0FBa0J0WixFQUFPUixLQUVsRCxHQUFJMVAsRUFBTyxDQVNQLEdBUkFrcUIsRUFBY2xCLEdBQ1ZocEIsRUFBTSxHQUNOQSxFQUFNLEdBQ05BLEVBQU0sR0FDTkEsRUFBTSxHQUNOQSxFQUFNLEdBQ05BLEVBQU0sS0FFTHlwQixHQUFhenBCLEVBQU0sR0FBSWtxQixFQUFhaGEsR0FDckMsT0FHSkEsRUFBT2tMLEdBQUs4TyxFQUNaaGEsRUFBT0wsS0FBTytaLEdBQWdCNXBCLEVBQU0sR0FBSUEsRUFBTSxHQUFJQSxFQUFNLEtBRXhEa1EsRUFBTzVCLEdBQUs2USxHQUFjbmpCLE1BQU0sS0FBTWtVLEVBQU9rTCxJQUM3Q2xMLEVBQU81QixHQUFHNmIsY0FBY2phLEVBQU81QixHQUFHOGIsZ0JBQWtCbGEsRUFBT0wsTUFFM0RoQyxFQUFnQnFDLEdBQVF2QyxTQUFVLE9BRWxDdUMsRUFBT2pDLFVBQVcsRUFLMUIsU0FBU29jLEdBQWlCbmEsR0FDdEIsSUFBSXlLLEVBQVUrTSxHQUFnQmtCLEtBQUsxWSxFQUFPUixJQUMxQixPQUFaaUwsR0FLSjJOLEdBQWNwWSxJQUNVLElBQXBCQSxFQUFPakMsa0JBQ0FpQyxFQUFPakMsU0FLbEJnYyxHQUFrQi9aLElBQ00sSUFBcEJBLEVBQU9qQyxrQkFDQWlDLEVBQU9qQyxTQUtkaUMsRUFBT3pCLFFBQ1B5QixFQUFPakMsVUFBVyxFQUdsQjVDLEVBQU1pZix3QkFBd0JwYSxNQXRCOUJBLEVBQU81QixHQUFLLElBQUl0QyxNQUFNMk8sRUFBUSxJQW9DdEMsU0FBUzRQLEdBQVM5ZSxFQUFHQyxFQUFHOGUsR0FDcEIsT0FBUyxNQUFML2UsRUFDT0EsRUFFRixNQUFMQyxFQUNPQSxFQUVKOGUsRUFHWCxTQUFTQyxHQUFpQnZhLEdBRXRCLElBQUl3YSxFQUFXLElBQUkxZSxLQUFLWCxFQUFNa0gsT0FDOUIsT0FBSXJDLEVBQU95YSxRQUNBLENBQ0hELEVBQVNyTCxpQkFDVHFMLEVBQVNFLGNBQ1RGLEVBQVNHLGNBR1YsQ0FBQ0gsRUFBU3pMLGNBQWV5TCxFQUFTSSxXQUFZSixFQUFTSyxXQU9sRSxTQUFTQyxHQUFnQjlhLEdBQ3JCLElBQUkxVSxFQUNBb2QsRUFFQXFTLEVBQ0FDLEVBQ0FDLEVBSEFscUIsRUFBUSxHQUtaLElBQUlpUCxFQUFPNUIsR0FBWCxDQWdDQSxJQTVCQTJjLEVBQWNSLEdBQWlCdmEsR0FHM0JBLEVBQU9nTCxJQUF5QixNQUFuQmhMLEVBQU9rTCxHQUFHRyxLQUFxQyxNQUFwQnJMLEVBQU9rTCxHQUFHRSxLQUNsRDhQLEdBQXNCbGIsR0FJRCxNQUFyQkEsRUFBT21iLGFBQ1BGLEVBQVlaLEdBQVNyYSxFQUFPa0wsR0FBR0MsSUFBTzRQLEVBQVk1UCxNQUc5Q25MLEVBQU9tYixXQUFhM00sR0FBV3lNLElBQ1QsSUFBdEJqYixFQUFPbWIsY0FFUHhkLEVBQWdCcUMsR0FBUWdYLG9CQUFxQixHQUdqRHRPLEVBQU91RyxHQUFjZ00sRUFBVyxFQUFHamIsRUFBT21iLFlBQzFDbmIsRUFBT2tMLEdBQUdFLElBQVMxQyxFQUFLZ1MsY0FDeEIxYSxFQUFPa0wsR0FBR0csSUFBUTNDLEVBQUtpUyxjQVF0QnJ2QixFQUFJLEVBQUdBLEVBQUksR0FBcUIsTUFBaEIwVSxFQUFPa0wsR0FBRzVmLEtBQWNBLEVBQ3pDMFUsRUFBT2tMLEdBQUc1ZixHQUFLeUYsRUFBTXpGLEdBQUt5dkIsRUFBWXp2QixHQUkxQyxLQUFPQSxFQUFJLEVBQUdBLElBQ1YwVSxFQUFPa0wsR0FBRzVmLEdBQUt5RixFQUFNekYsR0FDRCxNQUFoQjBVLEVBQU9rTCxHQUFHNWYsR0FBb0IsSUFBTkEsRUFBVSxFQUFJLEVBQUswVSxFQUFPa0wsR0FBRzVmLEdBS3JDLEtBQXBCMFUsRUFBT2tMLEdBQUdJLEtBQ1ksSUFBdEJ0TCxFQUFPa0wsR0FBR0ssS0FDWSxJQUF0QnZMLEVBQU9rTCxHQUFHTSxLQUNpQixJQUEzQnhMLEVBQU9rTCxHQUFHTyxNQUVWekwsRUFBT29iLFVBQVcsRUFDbEJwYixFQUFPa0wsR0FBR0ksSUFBUSxHQUd0QnRMLEVBQU81QixJQUFNNEIsRUFBT3lhLFFBQVV4TCxHQUFnQkosSUFBWS9pQixNQUN0RCxLQUNBaUYsR0FFSmlxQixFQUFrQmhiLEVBQU95YSxRQUNuQnphLEVBQU81QixHQUFHcVIsWUFDVnpQLEVBQU81QixHQUFHMFUsU0FJRyxNQUFmOVMsRUFBT0wsTUFDUEssRUFBTzVCLEdBQUc2YixjQUFjamEsRUFBTzVCLEdBQUc4YixnQkFBa0JsYSxFQUFPTCxNQUczREssRUFBT29iLFdBQ1BwYixFQUFPa0wsR0FBR0ksSUFBUSxJQUtsQnRMLEVBQU9nTCxTQUNnQixJQUFoQmhMLEVBQU9nTCxHQUFHcEYsR0FDakI1RixFQUFPZ0wsR0FBR3BGLElBQU1vVixJQUVoQnJkLEVBQWdCcUMsR0FBUXRDLGlCQUFrQixJQUlsRCxTQUFTd2QsR0FBc0JsYixHQUMzQixJQUFJOEYsRUFBR3VWLEVBQVUxTCxFQUFNQyxFQUFTTixFQUFLQyxFQUFLK0wsRUFBTUMsRUFBaUJDLEVBR3JELE9BRFoxVixFQUFJOUYsRUFBT2dMLElBQ0x5USxJQUFxQixNQUFQM1YsRUFBRTRWLEdBQW9CLE1BQVA1VixFQUFFNlYsR0FDakNyTSxFQUFNLEVBQ05DLEVBQU0sRUFNTjhMLEVBQVdoQixHQUNQdlUsRUFBRTJWLEdBQ0Z6YixFQUFPa0wsR0FBR0MsSUFDVjZFLEdBQVc0TCxLQUFlLEVBQUcsR0FBRzlULE1BRXBDNkgsRUFBTzBLLEdBQVN2VSxFQUFFNFYsRUFBRyxLQUNyQjlMLEVBQVV5SyxHQUFTdlUsRUFBRTZWLEVBQUcsSUFDVixHQUFLL0wsRUFBVSxLQUN6QjJMLEdBQWtCLEtBR3RCak0sRUFBTXRQLEVBQU9GLFFBQVF3USxNQUFNaEIsSUFDM0JDLEVBQU12UCxFQUFPRixRQUFRd1EsTUFBTWYsSUFFM0JpTSxFQUFVeEwsR0FBVzRMLEtBQWV0TSxFQUFLQyxHQUV6QzhMLEVBQVdoQixHQUFTdlUsRUFBRStWLEdBQUk3YixFQUFPa0wsR0FBR0MsSUFBT3FRLEVBQVExVCxNQUduRDZILEVBQU8wSyxHQUFTdlUsRUFBRUEsRUFBRzBWLEVBQVE3TCxNQUVsQixNQUFQN0osRUFBRUYsSUFFRmdLLEVBQVU5SixFQUFFRixHQUNFLEdBQUtnSyxFQUFVLEtBQ3pCMkwsR0FBa0IsR0FFUixNQUFQelYsRUFBRXdRLEdBRVQxRyxFQUFVOUosRUFBRXdRLEVBQUloSCxHQUNaeEosRUFBRXdRLEVBQUksR0FBS3hRLEVBQUV3USxFQUFJLEtBQ2pCaUYsR0FBa0IsSUFJdEIzTCxFQUFVTixHQUdkSyxFQUFPLEdBQUtBLEVBQU9RLEdBQVlrTCxFQUFVL0wsRUFBS0MsR0FDOUM1UixFQUFnQnFDLEdBQVFpWCxnQkFBaUIsRUFDZixNQUFuQnNFLEVBQ1A1ZCxFQUFnQnFDLEdBQVFrWCxrQkFBbUIsR0FFM0NvRSxFQUFPNUwsR0FBbUIyTCxFQUFVMUwsRUFBTUMsRUFBU04sRUFBS0MsR0FDeER2UCxFQUFPa0wsR0FBR0MsSUFBUW1RLEVBQUt4VCxLQUN2QjlILEVBQU9tYixXQUFhRyxFQUFLdkwsV0FXakMsU0FBUzhJLEdBQTBCN1ksR0FFL0IsR0FBSUEsRUFBT1AsS0FBT3RFLEVBQU0yZ0IsU0FJeEIsR0FBSTliLEVBQU9QLEtBQU90RSxFQUFNNGdCLFNBQXhCLENBSUEvYixFQUFPa0wsR0FBSyxHQUNadk4sRUFBZ0JxQyxHQUFRckQsT0FBUSxFQUdoQyxJQUNJclIsRUFDQW11QixFQUNBN08sRUFDQXRILEVBQ0EwWSxFQUdBemUsRUFDQXVOLEVBVEF4RSxFQUFTLEdBQUt0RyxFQUFPUixHQU1yQnljLEVBQWUzVixFQUFPOWEsT0FDdEIwd0IsRUFBeUIsRUFPN0IsSUFEQXBSLEdBRkFGLEVBQ0k3RyxFQUFhL0QsRUFBT1AsR0FBSU8sRUFBT0YsU0FBU2hRLE1BQU1tVCxJQUFxQixJQUNyRHpYLE9BQ2JGLEVBQUksRUFBR0EsRUFBSXdmLEVBQVV4ZixJQUN0QmdZLEVBQVFzSCxFQUFPdGYsSUFDZm11QixHQUFlblQsRUFBT3hXLE1BQU13YSxHQUFzQmhILEVBQU90RCxLQUNyRCxJQUFJLE9BRUpnYyxFQUFVMVYsRUFBT3RELE9BQU8sRUFBR3NELEVBQU96WCxRQUFRNHFCLEtBQzlCanVCLE9BQVMsR0FDakJtUyxFQUFnQnFDLEdBQVFuRCxZQUFZeEUsS0FBSzJqQixHQUU3QzFWLEVBQVNBLEVBQU8xUixNQUNaMFIsRUFBT3pYLFFBQVE0cUIsR0FBZUEsRUFBWWp1QixRQUU5QzB3QixHQUEwQnpDLEVBQVlqdUIsUUFHdEM0WCxFQUFxQkUsSUFDakJtVyxFQUNBOWIsRUFBZ0JxQyxHQUFRckQsT0FBUSxFQUVoQ2dCLEVBQWdCcUMsR0FBUXBELGFBQWF2RSxLQUFLaUwsR0FFOUMySCxHQUF3QjNILEVBQU9tVyxFQUFhelosSUFDckNBLEVBQU96QixVQUFZa2IsR0FDMUI5YixFQUFnQnFDLEdBQVFwRCxhQUFhdkUsS0FBS2lMLEdBS2xEM0YsRUFBZ0JxQyxHQUFRakQsY0FDcEJrZixFQUFlQyxFQUNmNVYsRUFBTzlhLE9BQVMsR0FDaEJtUyxFQUFnQnFDLEdBQVFuRCxZQUFZeEUsS0FBS2lPLEdBS3pDdEcsRUFBT2tMLEdBQUdJLEtBQVMsS0FDaUIsSUFBcEMzTixFQUFnQnFDLEdBQVF4QixTQUN4QndCLEVBQU9rTCxHQUFHSSxJQUFRLElBRWxCM04sRUFBZ0JxQyxHQUFReEIsYUFBVXhRLEdBR3RDMlAsRUFBZ0JxQyxHQUFRMUMsZ0JBQWtCMEMsRUFBT2tMLEdBQUd0VyxNQUFNLEdBQzFEK0ksRUFBZ0JxQyxHQUFReEMsU0FBV3dDLEVBQU95VSxVQUUxQ3pVLEVBQU9rTCxHQUFHSSxJQUFRNlEsR0FDZG5jLEVBQU9GLFFBQ1BFLEVBQU9rTCxHQUFHSSxJQUNWdEwsRUFBT3lVLFdBS0MsUUFEWmxYLEVBQU1JLEVBQWdCcUMsR0FBUXpDLE9BRTFCeUMsRUFBT2tMLEdBQUdDLElBQVFuTCxFQUFPRixRQUFRc2MsZ0JBQWdCN2UsRUFBS3lDLEVBQU9rTCxHQUFHQyxNQUdwRTJQLEdBQWdCOWEsR0FDaEIrVyxHQUFjL1csUUFoRlYrWixHQUFrQi9aLFFBSmxCb1ksR0FBY3BZLEdBdUZ0QixTQUFTbWMsR0FBZ0I3ZixFQUFRK2YsRUFBTTdlLEdBQ25DLElBQUk4ZSxFQUVKLE9BQWdCLE1BQVo5ZSxFQUVPNmUsRUFFZ0IsTUFBdkIvZixFQUFPaWdCLGFBQ0FqZ0IsRUFBT2lnQixhQUFhRixFQUFNN2UsR0FDWCxNQUFmbEIsRUFBT2tZLE9BRWQ4SCxFQUFPaGdCLEVBQU9rWSxLQUFLaFgsS0FDUDZlLEVBQU8sS0FDZkEsR0FBUSxJQUVQQyxHQUFpQixLQUFURCxJQUNUQSxFQUFPLEdBRUpBLEdBR0FBLEVBS2YsU0FBU0csR0FBeUJ4YyxHQUM5QixJQUFJeWMsRUFDQUMsRUFDQUMsRUFDQXJ4QixFQUNBc3hCLEVBQ0FDLEVBQ0FDLEdBQW9CLEVBQ3BCQyxFQUFhL2MsRUFBT1AsR0FBR2pVLE9BRTNCLEdBQW1CLElBQWZ1eEIsRUFHQSxPQUZBcGYsRUFBZ0JxQyxHQUFRN0MsZUFBZ0IsT0FDeEM2QyxFQUFPNUIsR0FBSyxJQUFJdEMsS0FBSzZDLE1BSXpCLElBQUtyVCxFQUFJLEVBQUdBLEVBQUl5eEIsRUFBWXp4QixJQUN4QnN4QixFQUFlLEVBQ2ZDLEdBQW1CLEVBQ25CSixFQUFheGQsRUFBVyxHQUFJZSxHQUNOLE1BQWxCQSxFQUFPeWEsVUFDUGdDLEVBQVdoQyxRQUFVemEsRUFBT3lhLFNBRWhDZ0MsRUFBV2hkLEdBQUtPLEVBQU9QLEdBQUduVSxHQUMxQnV0QixHQUEwQjRELEdBRXRCM2UsRUFBUTJlLEtBQ1JJLEdBQW1CLEdBSXZCRCxHQUFnQmpmLEVBQWdCOGUsR0FBWTFmLGNBRzVDNmYsR0FBa0UsR0FBbERqZixFQUFnQjhlLEdBQVk3ZixhQUFhcFIsT0FFekRtUyxFQUFnQjhlLEdBQVlPLE1BQVFKLEVBRS9CRSxFQWFHRixFQUFlRCxJQUNmQSxFQUFjQyxFQUNkRixFQUFhRCxJQWJFLE1BQWZFLEdBQ0FDLEVBQWVELEdBQ2ZFLEtBRUFGLEVBQWNDLEVBQ2RGLEVBQWFELEVBQ1RJLElBQ0FDLEdBQW9CLElBV3BDNWdCLEVBQU84RCxFQUFRMGMsR0FBY0QsR0FHakMsU0FBU1EsR0FBaUJqZCxHQUN0QixJQUFJQSxFQUFPNUIsR0FBWCxDQUlBLElBQUk5UyxFQUFJNGIsR0FBcUJsSCxFQUFPUixJQUNoQzBkLE9BQXNCbHZCLElBQVYxQyxFQUFFMG1CLElBQW9CMW1CLEVBQUVvZCxLQUFPcGQsRUFBRTBtQixJQUNqRGhTLEVBQU9rTCxHQUFLbGIsRUFDUixDQUFDMUUsRUFBRXdjLEtBQU14YyxFQUFFbWQsTUFBT3lVLEVBQVc1eEIsRUFBRSt3QixLQUFNL3dCLEVBQUU2eEIsT0FBUTd4QixFQUFFOHhCLE9BQVE5eEIsRUFBRSt4QixjQUMzRCxTQUFVMXJCLEdBQ04sT0FBT0EsR0FBTytjLFNBQVMvYyxFQUFLLE9BSXBDbXBCLEdBQWdCOWEsSUFHcEIsU0FBU3NkLEdBQWlCdGQsR0FDdEIsSUFBSWpOLEVBQU0sSUFBSWdOLEVBQU9nWCxHQUFjd0csR0FBY3ZkLEtBT2pELE9BTklqTixFQUFJcW9CLFdBRUpyb0IsRUFBSTRkLElBQUksRUFBRyxLQUNYNWQsRUFBSXFvQixjQUFXcHRCLEdBR1orRSxFQUdYLFNBQVN3cUIsR0FBY3ZkLEdBQ25CLElBQUlqUCxFQUFRaVAsRUFBT1IsR0FDZm5ELEVBQVMyRCxFQUFPUCxHQUlwQixPQUZBTyxFQUFPRixRQUFVRSxFQUFPRixTQUFXMFcsR0FBVXhXLEVBQU9OLElBRXRDLE9BQVYzTyxRQUE4Qi9DLElBQVhxTyxHQUFrQyxLQUFWdEwsRUFDcEMyTixFQUFjLENBQUUxQixXQUFXLEtBR2pCLGlCQUFWak0sSUFDUGlQLEVBQU9SLEdBQUt6TyxFQUFRaVAsRUFBT0YsUUFBUTBkLFNBQVN6c0IsSUFHNUNtUCxFQUFTblAsR0FDRixJQUFJZ1AsRUFBT2dYLEdBQWNobUIsS0FDekI4SyxFQUFPOUssR0FDZGlQLEVBQU81QixHQUFLck4sRUFDTDVCLEVBQVFrTixHQUNmbWdCLEdBQXlCeGMsR0FDbEIzRCxFQUNQd2MsR0FBMEI3WSxHQUUxQnlkLEdBQWdCemQsR0FHZmxDLEVBQVFrQyxLQUNUQSxFQUFPNUIsR0FBSyxNQUdUNEIsSUFHWCxTQUFTeWQsR0FBZ0J6ZCxHQUNyQixJQUFJalAsRUFBUWlQLEVBQU9SLEdBQ2Y3RCxFQUFZNUssR0FDWmlQLEVBQU81QixHQUFLLElBQUl0QyxLQUFLWCxFQUFNa0gsT0FDcEJ4RyxFQUFPOUssR0FDZGlQLEVBQU81QixHQUFLLElBQUl0QyxLQUFLL0ssRUFBTW9MLFdBQ0gsaUJBQVZwTCxFQUNkb3BCLEdBQWlCbmEsR0FDVjdRLEVBQVE0QixJQUNmaVAsRUFBT2tMLEdBQUtsYixFQUFJZSxFQUFNNkQsTUFBTSxJQUFJLFNBQVVqRCxHQUN0QyxPQUFPK2MsU0FBUy9jLEVBQUssT0FFekJtcEIsR0FBZ0I5YSxJQUNUM0UsRUFBU3RLLEdBQ2hCa3NCLEdBQWlCamQsR0FDVnBFLEVBQVM3SyxHQUVoQmlQLEVBQU81QixHQUFLLElBQUl0QyxLQUFLL0ssR0FFckJvSyxFQUFNaWYsd0JBQXdCcGEsR0FJdEMsU0FBU3hELEdBQWlCekwsRUFBT3NMLEVBQVFDLEVBQVFDLEVBQVFtaEIsR0FDckQsSUFBSXBELEVBQUksR0EyQlIsT0F6QmUsSUFBWGplLElBQThCLElBQVhBLElBQ25CRSxFQUFTRixFQUNUQSxPQUFTck8sSUFHRSxJQUFYc08sSUFBOEIsSUFBWEEsSUFDbkJDLEVBQVNELEVBQ1RBLE9BQVN0TyxJQUlScU4sRUFBU3RLLElBQVUwSyxFQUFjMUssSUFDakM1QixFQUFRNEIsSUFBMkIsSUFBakJBLEVBQU12RixVQUV6QnVGLE9BQVEvQyxHQUlac3NCLEVBQUUvYSxrQkFBbUIsRUFDckIrYSxFQUFFRyxRQUFVSCxFQUFFMWEsT0FBUzhkLEVBQ3ZCcEQsRUFBRTVhLEdBQUtwRCxFQUNQZ2UsRUFBRTlhLEdBQUt6TyxFQUNQdXBCLEVBQUU3YSxHQUFLcEQsRUFDUGllLEVBQUUvYixRQUFVaEMsRUFFTCtnQixHQUFpQmhELEdBRzVCLFNBQVNzQixHQUFZN3FCLEVBQU9zTCxFQUFRQyxFQUFRQyxHQUN4QyxPQUFPQyxHQUFpQnpMLEVBQU9zTCxFQUFRQyxFQUFRQyxHQUFRLEdBdmUzRHBCLEVBQU1pZix3QkFBMEI3WixFQUM1QixpU0FHQSxTQUFVUCxHQUNOQSxFQUFPNUIsR0FBSyxJQUFJdEMsS0FBS2tFLEVBQU9SLElBQU1RLEVBQU95YSxRQUFVLE9BQVMsUUF1THBFdGYsRUFBTTJnQixTQUFXLGFBR2pCM2dCLEVBQU00Z0IsU0FBVyxhQTJTakIsSUFBSTRCLEdBQWVwZCxFQUNYLHNHQUNBLFdBQ0ksSUFBSXFkLEVBQVFoQyxHQUFZOXZCLE1BQU0sS0FBTVAsV0FDcEMsT0FBSVEsS0FBSytSLFdBQWE4ZixFQUFNOWYsVUFDakI4ZixFQUFRN3hCLEtBQU9BLEtBQU82eEIsRUFFdEJsZixPQUluQm1mLEdBQWV0ZCxFQUNYLHNHQUNBLFdBQ0ksSUFBSXFkLEVBQVFoQyxHQUFZOXZCLE1BQU0sS0FBTVAsV0FDcEMsT0FBSVEsS0FBSytSLFdBQWE4ZixFQUFNOWYsVUFDakI4ZixFQUFRN3hCLEtBQU9BLEtBQU82eEIsRUFFdEJsZixPQVV2QixTQUFTb2YsR0FBTzloQixFQUFJK2hCLEdBQ2hCLElBQUlockIsRUFBS3pILEVBSVQsR0FIdUIsSUFBbkJ5eUIsRUFBUXZ5QixRQUFnQjJELEVBQVE0dUIsRUFBUSxNQUN4Q0EsRUFBVUEsRUFBUSxLQUVqQkEsRUFBUXZ5QixPQUNULE9BQU9vd0IsS0FHWCxJQURBN29CLEVBQU1nckIsRUFBUSxHQUNUenlCLEVBQUksRUFBR0EsRUFBSXl5QixFQUFRdnlCLFNBQVVGLEVBQ3pCeXlCLEVBQVF6eUIsR0FBR3dTLFlBQWFpZ0IsRUFBUXp5QixHQUFHMFEsR0FBSWpKLEtBQ3hDQSxFQUFNZ3JCLEVBQVF6eUIsSUFHdEIsT0FBT3lILEVBSVgsU0FBUzZhLEtBR0wsT0FBT2tRLEdBQU8sV0FGSCxHQUFHbHBCLE1BQU0vSSxLQUFLTixVQUFXLElBS3hDLFNBQVN3WCxLQUdMLE9BQU8rYSxHQUFPLFVBRkgsR0FBR2xwQixNQUFNL0ksS0FBS04sVUFBVyxJQUt4QyxJQUFJOFcsR0FBTSxXQUNOLE9BQU92RyxLQUFLdUcsSUFBTXZHLEtBQUt1RyxPQUFTLElBQUl2RyxNQUdwQ2tpQixHQUFXLENBQ1gsT0FDQSxVQUNBLFFBQ0EsT0FDQSxNQUNBLE9BQ0EsU0FDQSxTQUNBLGVBR0osU0FBU0MsR0FBZ0JyZ0IsR0FDckIsSUFBSWxTLEVBRUFKLEVBREE0eUIsR0FBaUIsRUFFakJDLEVBQVdILEdBQVN4eUIsT0FDeEIsSUFBS0UsS0FBT2tTLEVBQ1IsR0FDSXRDLEVBQVdzQyxFQUFHbFMsTUFFdUIsSUFBakNtRCxHQUFRaEQsS0FBS215QixHQUFVdHlCLElBQ1osTUFBVmtTLEVBQUVsUyxJQUFpQnlTLE1BQU1QLEVBQUVsUyxLQUdoQyxPQUFPLEVBSWYsSUFBS0osRUFBSSxFQUFHQSxFQUFJNnlCLElBQVk3eUIsRUFDeEIsR0FBSXNTLEVBQUVvZ0IsR0FBUzF5QixJQUFLLENBQ2hCLEdBQUk0eUIsRUFDQSxPQUFPLEVBRVBFLFdBQVd4Z0IsRUFBRW9nQixHQUFTMXlCLE9BQVM0YyxHQUFNdEssRUFBRW9nQixHQUFTMXlCLE9BQ2hENHlCLEdBQWlCLEdBSzdCLE9BQU8sRUFHWCxTQUFTRyxLQUNMLE9BQU90eUIsS0FBS2dTLFNBR2hCLFNBQVN1Z0IsS0FDTCxPQUFPQyxHQUFlNWYsS0FHMUIsU0FBUzZmLEdBQVNDLEdBQ2QsSUFBSXBYLEVBQWtCSCxHQUFxQnVYLEdBQ3ZDQyxFQUFRclgsRUFBZ0JTLE1BQVEsRUFDaEM2VyxFQUFXdFgsRUFBZ0J1WCxTQUFXLEVBQ3RDMVMsRUFBUzdFLEVBQWdCb0IsT0FBUyxFQUNsQ29XLEVBQVF4WCxFQUFnQnNJLE1BQVF0SSxFQUFnQnlYLFNBQVcsRUFDM0RDLEVBQU8xWCxFQUFnQjJLLEtBQU8sRUFDOUI2QixFQUFReE0sRUFBZ0JnVixNQUFRLEVBQ2hDckksRUFBVTNNLEVBQWdCOFYsUUFBVSxFQUNwQzlJLEVBQVVoTixFQUFnQitWLFFBQVUsRUFDcEM0QixFQUFlM1gsRUFBZ0JnVyxhQUFlLEVBRWxEdHhCLEtBQUtnUyxTQUFXa2dCLEdBQWdCNVcsR0FHaEN0YixLQUFLa3pCLGVBQ0FELEVBQ1MsSUFBVjNLLEVBQ1UsSUFBVkwsRUFDUSxJQUFSSCxFQUFlLEdBQUssR0FHeEI5bkIsS0FBS216QixPQUFTSCxFQUFlLEVBQVJGLEVBSXJCOXlCLEtBQUs2Z0IsU0FBV1YsRUFBb0IsRUFBWHlTLEVBQXVCLEdBQVJELEVBRXhDM3lCLEtBQUtvekIsTUFBUSxHQUVicHpCLEtBQUsrVCxRQUFVMFcsS0FFZnpxQixLQUFLcXpCLFVBR1QsU0FBU0MsR0FBVzF0QixHQUNoQixPQUFPQSxhQUFlNnNCLEdBRzFCLFNBQVNjLEdBQVM3YyxHQUNkLE9BQUlBLEVBQVMsR0FDeUIsRUFBM0J2VSxLQUFLcXhCLE9BQU8sRUFBSTljLEdBRWhCdlUsS0FBS3F4QixNQUFNOWMsR0FLMUIsU0FBUytjLEdBQWNDLEVBQVFDLEVBQVFDLEdBQ25DLElBR0lyMEIsRUFIQXdULEVBQU01USxLQUFLMGYsSUFBSTZSLEVBQU9qMEIsT0FBUWswQixFQUFPbDBCLFFBQ3JDbzBCLEVBQWExeEIsS0FBS0MsSUFBSXN4QixFQUFPajBCLE9BQVNrMEIsRUFBT2wwQixRQUM3Q3EwQixFQUFRLEVBRVosSUFBS3YwQixFQUFJLEVBQUdBLEVBQUl3VCxFQUFLeFQsS0FFWnEwQixHQUFlRixFQUFPbjBCLEtBQU9vMEIsRUFBT3AwQixLQUNuQ3EwQixHQUFlelgsR0FBTXVYLEVBQU9uMEIsTUFBUTRjLEdBQU13WCxFQUFPcDBCLE1BRW5EdTBCLElBR1IsT0FBT0EsRUFBUUQsRUFLbkIsU0FBU0UsR0FBT3hjLEVBQU95YyxHQUNuQjFjLEVBQWVDLEVBQU8sRUFBRyxHQUFHLFdBQ3hCLElBQUl3YyxFQUFTL3pCLEtBQUtpMEIsWUFDZEMsRUFBTyxJQUtYLE9BSklILEVBQVMsSUFDVEEsR0FBVUEsRUFDVkcsRUFBTyxLQUdQQSxFQUNBemQsS0FBWXNkLEVBQVMsSUFBSyxHQUMxQkMsRUFDQXZkLElBQVdzZCxFQUFTLEdBQUksTUFLcENBLEdBQU8sSUFBSyxLQUNaQSxHQUFPLEtBQU0sSUFJYjVWLEdBQWMsSUFBS0gsSUFDbkJHLEdBQWMsS0FBTUgsSUFDcEJjLEdBQWMsQ0FBQyxJQUFLLE9BQU8sU0FBVTlaLEVBQU84UyxFQUFPN0QsR0FDL0NBLEVBQU95YSxTQUFVLEVBQ2pCemEsRUFBT0wsS0FBT3VnQixHQUFpQm5XLEdBQWtCaFosTUFRckQsSUFBSW92QixHQUFjLGtCQUVsQixTQUFTRCxHQUFpQkUsRUFBUzlaLEdBQy9CLElBRUkvWixFQUNBeW5CLEVBSEFxTSxHQUFXL1osR0FBVSxJQUFJeFcsTUFBTXN3QixHQUtuQyxPQUFnQixPQUFaQyxFQUNPLEtBT1EsS0FGbkJyTSxFQUF1QixJQUR2QnpuQixJQURROHpCLEVBQVFBLEVBQVE3MEIsT0FBUyxJQUFNLElBQ3RCLElBQUlzRSxNQUFNcXdCLEtBQWdCLENBQUMsSUFBSyxFQUFHLElBQ2xDLEdBQVdqWSxHQUFNM2IsRUFBTSxLQUVsQixFQUFpQixNQUFiQSxFQUFNLEdBQWF5bkIsR0FBV0EsRUFJN0QsU0FBU3NNLEdBQWdCdnZCLEVBQU93dkIsR0FDNUIsSUFBSXh0QixFQUFLMlQsRUFDVCxPQUFJNlosRUFBTTNnQixRQUNON00sRUFBTXd0QixFQUFNQyxRQUNaOVosR0FDS3hHLEVBQVNuUCxJQUFVOEssRUFBTzlLLEdBQ3JCQSxFQUFNb0wsVUFDTnlmLEdBQVk3cUIsR0FBT29MLFdBQWFwSixFQUFJb0osVUFFOUNwSixFQUFJcUwsR0FBR3FpQixRQUFRMXRCLEVBQUlxTCxHQUFHakMsVUFBWXVLLEdBQ2xDdkwsRUFBTThFLGFBQWFsTixHQUFLLEdBQ2pCQSxHQUVBNm9CLEdBQVk3cUIsR0FBTzJ2QixRQUlsQyxTQUFTQyxHQUFjL2lCLEdBR25CLE9BQVExUCxLQUFLcXhCLE1BQU0zaEIsRUFBRVEsR0FBR3dpQixxQkFxQjVCLFNBQVNDLEdBQWE5dkIsRUFBTyt2QixFQUFlQyxHQUN4QyxJQUNJQyxFQURBbEIsRUFBUy96QixLQUFLOFQsU0FBVyxFQUU3QixJQUFLOVQsS0FBSytSLFVBQ04sT0FBZ0IsTUFBVC9NLEVBQWdCaEYsS0FBTzRTLElBRWxDLEdBQWEsTUFBVDVOLEVBQWUsQ0FDZixHQUFxQixpQkFBVkEsR0FFUCxHQUFjLFFBRGRBLEVBQVFtdkIsR0FBaUJuVyxHQUFrQmhaLElBRXZDLE9BQU9oRixVQUVKbUMsS0FBS0MsSUFBSTRDLEdBQVMsS0FBT2d3QixJQUNoQ2h3QixHQUFnQixJQXdCcEIsT0F0QktoRixLQUFLNlQsUUFBVWtoQixJQUNoQkUsRUFBY0wsR0FBYzUwQixPQUVoQ0EsS0FBSzhULFFBQVU5TyxFQUNmaEYsS0FBSzZULFFBQVMsRUFDSyxNQUFmb2hCLEdBQ0FqMUIsS0FBSzRrQixJQUFJcVEsRUFBYSxLQUV0QmxCLElBQVcvdUIsS0FDTit2QixHQUFpQi8wQixLQUFLazFCLGtCQUN2QkMsR0FDSW4xQixLQUNBd3lCLEdBQWV4dEIsRUFBUSt1QixFQUFRLEtBQy9CLEdBQ0EsR0FFSS96QixLQUFLazFCLG9CQUNibDFCLEtBQUtrMUIsbUJBQW9CLEVBQ3pCOWxCLEVBQU04RSxhQUFhbFUsTUFBTSxHQUN6QkEsS0FBS2sxQixrQkFBb0IsT0FHMUJsMUIsS0FFUCxPQUFPQSxLQUFLNlQsT0FBU2tnQixFQUFTYSxHQUFjNTBCLE1BSXBELFNBQVNvMUIsR0FBV3B3QixFQUFPK3ZCLEdBQ3ZCLE9BQWEsTUFBVC92QixHQUNxQixpQkFBVkEsSUFDUEEsR0FBU0EsR0FHYmhGLEtBQUtpMEIsVUFBVWp2QixFQUFPK3ZCLEdBRWYvMEIsT0FFQ0EsS0FBS2kwQixZQUlyQixTQUFTb0IsR0FBZU4sR0FDcEIsT0FBTy8wQixLQUFLaTBCLFVBQVUsRUFBR2MsR0FHN0IsU0FBU08sR0FBaUJQLEdBU3RCLE9BUkkvMEIsS0FBSzZULFNBQ0w3VCxLQUFLaTBCLFVBQVUsRUFBR2MsR0FDbEIvMEIsS0FBSzZULFFBQVMsRUFFVmtoQixHQUNBLzBCLEtBQUt1MUIsU0FBU1gsR0FBYzUwQixNQUFPLE1BR3BDQSxLQUdYLFNBQVN3MUIsS0FDTCxHQUFpQixNQUFieDFCLEtBQUs0VCxLQUNMNVQsS0FBS2kwQixVQUFVajBCLEtBQUs0VCxNQUFNLEdBQU8sUUFDOUIsR0FBdUIsaUJBQVo1VCxLQUFLeVQsR0FBaUIsQ0FDcEMsSUFBSWdpQixFQUFRdEIsR0FBaUJwVyxHQUFhL2QsS0FBS3lULElBQ2xDLE1BQVRnaUIsRUFDQXoxQixLQUFLaTBCLFVBQVV3QixHQUVmejFCLEtBQUtpMEIsVUFBVSxHQUFHLEdBRzFCLE9BQU9qMEIsS0FHWCxTQUFTMDFCLEdBQXFCMXdCLEdBQzFCLFFBQUtoRixLQUFLK1IsWUFHVi9NLEVBQVFBLEVBQVE2cUIsR0FBWTdxQixHQUFPaXZCLFlBQWMsR0FFekNqMEIsS0FBS2kwQixZQUFjanZCLEdBQVMsSUFBTyxHQUcvQyxTQUFTMndCLEtBQ0wsT0FDSTMxQixLQUFLaTBCLFlBQWNqMEIsS0FBS3kwQixRQUFRL1gsTUFBTSxHQUFHdVgsYUFDekNqMEIsS0FBS2kwQixZQUFjajBCLEtBQUt5MEIsUUFBUS9YLE1BQU0sR0FBR3VYLFlBSWpELFNBQVMyQixLQUNMLElBQUtobUIsRUFBWTVQLEtBQUs2MUIsZUFDbEIsT0FBTzcxQixLQUFLNjFCLGNBR2hCLElBQ0loRSxFQURBdEQsRUFBSSxHQWNSLE9BWEFyYixFQUFXcWIsRUFBR3Z1QixPQUNkdXVCLEVBQUlpRCxHQUFjakQsSUFFWnBQLElBQ0YwUyxFQUFRdEQsRUFBRTFhLE9BQVN4RCxFQUFVa2UsRUFBRXBQLElBQU0wUSxHQUFZdEIsRUFBRXBQLElBQ25EbmYsS0FBSzYxQixjQUNENzFCLEtBQUsrUixXQUFhMGhCLEdBQWNsRixFQUFFcFAsR0FBSTBTLEVBQU1pRSxXQUFhLEdBRTdEOTFCLEtBQUs2MUIsZUFBZ0IsRUFHbEI3MUIsS0FBSzYxQixjQUdoQixTQUFTRSxLQUNMLFFBQU8vMUIsS0FBSytSLFlBQWEvUixLQUFLNlQsT0FHbEMsU0FBU21pQixLQUNMLFFBQU9oMkIsS0FBSytSLFdBQVkvUixLQUFLNlQsT0FHakMsU0FBU29pQixLQUNMLFFBQU9qMkIsS0FBSytSLFdBQVkvUixLQUFLNlQsUUFBMkIsSUFBakI3VCxLQUFLOFQsUUFwSmhEMUUsRUFBTThFLGFBQWUsYUF3SnJCLElBQUlnaUIsR0FBYyx3REFJZEMsR0FDSSxzS0FFUixTQUFTM0QsR0FBZXh0QixFQUFPckYsR0FDM0IsSUFHSXUwQixFQUNBa0MsRUFDQUMsRUFMQTNELEVBQVcxdEIsRUFFWGpCLEVBQVEsS0FrRVosT0E3REl1dkIsR0FBV3R1QixHQUNYMHRCLEVBQVcsQ0FDUDNQLEdBQUkvZCxFQUFNa3VCLGNBQ1ZyWixFQUFHN1UsRUFBTW11QixNQUNUbFosRUFBR2pWLEVBQU02YixTQUVOaFIsRUFBUzdLLEtBQVdvTixPQUFPcE4sSUFDbEMwdEIsRUFBVyxHQUNQL3lCLEVBQ0EreUIsRUFBUy95QixJQUFRcUYsRUFFakIwdEIsRUFBU08sY0FBZ0JqdUIsSUFFckJqQixFQUFRbXlCLEdBQVl2SixLQUFLM25CLEtBQ2pDa3ZCLEVBQW9CLE1BQWJud0IsRUFBTSxJQUFjLEVBQUksRUFDL0IydUIsRUFBVyxDQUNQdlksRUFBRyxFQUNITixFQUFHc0MsR0FBTXBZLEVBQU11YixLQUFTNFUsRUFDeEJ2YSxFQUFHd0MsR0FBTXBZLEVBQU13YixLQUFTMlUsRUFDeEJyaUIsRUFBR3NLLEdBQU1wWSxFQUFNeWIsS0FBVzBVLEVBQzFCMWEsRUFBRzJDLEdBQU1wWSxFQUFNMGIsS0FBV3lVLEVBQzFCblIsR0FBSTVHLEdBQU1vWCxHQUE4QixJQUFyQnh2QixFQUFNMmIsTUFBd0J3VSxLQUU3Q253QixFQUFRb3lCLEdBQVN4SixLQUFLM25CLEtBQzlCa3ZCLEVBQW9CLE1BQWJud0IsRUFBTSxJQUFjLEVBQUksRUFDL0IydUIsRUFBVyxDQUNQdlksRUFBR21jLEdBQVN2eUIsRUFBTSxHQUFJbXdCLEdBQ3RCamEsRUFBR3FjLEdBQVN2eUIsRUFBTSxHQUFJbXdCLEdBQ3RCbmEsRUFBR3VjLEdBQVN2eUIsRUFBTSxHQUFJbXdCLEdBQ3RCcmEsRUFBR3ljLEdBQVN2eUIsRUFBTSxHQUFJbXdCLEdBQ3RCdmEsRUFBRzJjLEdBQVN2eUIsRUFBTSxHQUFJbXdCLEdBQ3RCcmlCLEVBQUd5a0IsR0FBU3Z5QixFQUFNLEdBQUltd0IsR0FDdEIxYSxFQUFHOGMsR0FBU3Z5QixFQUFNLEdBQUltd0IsS0FFUCxNQUFaeEIsRUFFUEEsRUFBVyxHQUVTLGlCQUFiQSxJQUNOLFNBQVVBLEdBQVksT0FBUUEsS0FFL0IyRCxFQUFVRSxHQUNOMUcsR0FBWTZDLEVBQVN0ZixNQUNyQnljLEdBQVk2QyxFQUFTdmYsTUFHekJ1ZixFQUFXLElBQ0YzUCxHQUFLc1QsRUFBUXBELGFBQ3RCUCxFQUFTelksRUFBSW9jLEVBQVFsVyxRQUd6QmlXLEVBQU0sSUFBSTNELEdBQVNDLEdBRWZZLEdBQVd0dUIsSUFBVXVLLEVBQVd2SyxFQUFPLGFBQ3ZDb3hCLEVBQUlyaUIsUUFBVS9PLEVBQU0rTyxTQUdwQnVmLEdBQVd0dUIsSUFBVXVLLEVBQVd2SyxFQUFPLGNBQ3ZDb3hCLEVBQUlwa0IsU0FBV2hOLEVBQU1nTixVQUdsQm9rQixFQU1YLFNBQVNFLEdBQVNFLEVBQUt0QyxHQUluQixJQUFJbHRCLEVBQU13dkIsR0FBT25FLFdBQVdtRSxFQUFJOXdCLFFBQVEsSUFBSyxNQUU3QyxPQUFRME0sTUFBTXBMLEdBQU8sRUFBSUEsR0FBT2t0QixFQUdwQyxTQUFTdUMsR0FBMEJDLEVBQU03RSxHQUNyQyxJQUFJN3FCLEVBQU0sR0FVVixPQVJBQSxFQUFJbVosT0FDQTBSLEVBQU1uVixRQUFVZ2EsRUFBS2hhLFFBQXlDLElBQTlCbVYsRUFBTTlWLE9BQVMyYSxFQUFLM2EsUUFDcEQyYSxFQUFLakMsUUFBUTdQLElBQUk1ZCxFQUFJbVosT0FBUSxLQUFLd1csUUFBUTlFLE1BQ3hDN3FCLEVBQUltWixPQUdWblosRUFBSWlzQixjQUFnQnBCLEdBQVM2RSxFQUFLakMsUUFBUTdQLElBQUk1ZCxFQUFJbVosT0FBUSxLQUVuRG5aLEVBR1gsU0FBU3V2QixHQUFrQkcsRUFBTTdFLEdBQzdCLElBQUk3cUIsRUFDSixPQUFNMHZCLEVBQUsza0IsV0FBYThmLEVBQU05ZixXQUk5QjhmLEVBQVEwQyxHQUFnQjFDLEVBQU82RSxHQUMzQkEsRUFBS0UsU0FBUy9FLEdBQ2Q3cUIsRUFBTXl2QixHQUEwQkMsRUFBTTdFLEtBRXRDN3FCLEVBQU15dkIsR0FBMEI1RSxFQUFPNkUsSUFDbkN6RCxjQUFnQmpzQixFQUFJaXNCLGFBQ3hCanNCLEVBQUltWixRQUFVblosRUFBSW1aLFFBR2ZuWixHQVpJLENBQUVpc0IsYUFBYyxFQUFHOVMsT0FBUSxHQWdCMUMsU0FBUzBXLEdBQVlDLEVBQVd2MUIsR0FDNUIsT0FBTyxTQUFVK1IsRUFBS3lqQixHQUNsQixJQUFTQyxFQW1CVCxPQWpCZSxPQUFYRCxHQUFvQjNrQixPQUFPMmtCLEtBQzNCOWhCLEVBQ0kxVCxFQUNBLFlBQ0lBLEVBQ0EsdURBQ0FBLEVBSEosa0dBT0p5MUIsRUFBTTFqQixFQUNOQSxFQUFNeWpCLEVBQ05BLEVBQVNDLEdBSWI3QixHQUFZbjFCLEtBRE53eUIsR0FBZWxmLEVBQUt5akIsR0FDSEQsR0FDaEI5MkIsTUFJZixTQUFTbTFCLEdBQVk5ZSxFQUFLcWMsRUFBVXVFLEVBQVUvaUIsR0FDMUMsSUFBSStlLEVBQWVQLEVBQVNRLGNBQ3hCRixFQUFPTyxHQUFTYixFQUFTUyxPQUN6QmhULEVBQVNvVCxHQUFTYixFQUFTN1IsU0FFMUJ4SyxFQUFJdEUsWUFLVG1DLEVBQStCLE1BQWhCQSxHQUE4QkEsRUFFekNpTSxHQUNBd0IsR0FBU3RMLEVBQUsvUSxHQUFJK1EsRUFBSyxTQUFXOEosRUFBUzhXLEdBRTNDakUsR0FDQXZXLEdBQU1wRyxFQUFLLE9BQVEvUSxHQUFJK1EsRUFBSyxRQUFVMmMsRUFBT2lFLEdBRTdDaEUsR0FDQTVjLEVBQUloRSxHQUFHcWlCLFFBQVFyZSxFQUFJaEUsR0FBR2pDLFVBQVk2aUIsRUFBZWdFLEdBRWpEL2lCLEdBQ0E5RSxFQUFNOEUsYUFBYW1DLEVBQUsyYyxHQUFRN1MsSUE1RnhDcVMsR0FBZXZpQixHQUFLd2lCLEdBQVM3eUIsVUFDN0I0eUIsR0FBZTBFLFFBQVUzRSxHQStGekIsSUFBSTNOLEdBQU1pUyxHQUFZLEVBQUcsT0FDckJ0QixHQUFXc0IsSUFBYSxFQUFHLFlBRS9CLFNBQVNwMEIsR0FBU3VDLEdBQ2QsTUFBd0IsaUJBQVZBLEdBQXNCQSxhQUFpQm15QixPQUl6RCxTQUFTQyxHQUFjcHlCLEdBQ25CLE9BQ0ltUCxFQUFTblAsSUFDVDhLLEVBQU85SyxJQUNQdkMsR0FBU3VDLElBQ1Q2SyxFQUFTN0ssSUFDVHF5QixHQUFzQnJ5QixJQUN0QnN5QixHQUFvQnR5QixVQUNwQkEsRUFLUixTQUFTc3lCLEdBQW9CdHlCLEdBQ3pCLElBNEJJekYsRUFDQWc0QixFQTdCQUMsRUFBYWxvQixFQUFTdEssS0FBVzBLLEVBQWMxSyxHQUMvQ3l5QixHQUFlLEVBQ2YzMkIsRUFBYSxDQUNULFFBQ0EsT0FDQSxJQUNBLFNBQ0EsUUFDQSxJQUNBLE9BQ0EsTUFDQSxJQUNBLFFBQ0EsT0FDQSxJQUNBLFFBQ0EsT0FDQSxJQUNBLFVBQ0EsU0FDQSxJQUNBLFVBQ0EsU0FDQSxJQUNBLGVBQ0EsY0FDQSxNQUlKNDJCLEVBQWM1MkIsRUFBV3JCLE9BRTdCLElBQUtGLEVBQUksRUFBR0EsRUFBSW00QixFQUFhbjRCLEdBQUssRUFDOUJnNEIsRUFBV3oyQixFQUFXdkIsR0FDdEJrNEIsRUFBZUEsR0FBZ0Jsb0IsRUFBV3ZLLEVBQU91eUIsR0FHckQsT0FBT0MsR0FBY0MsRUFHekIsU0FBU0osR0FBc0JyeUIsR0FDM0IsSUFBSTJ5QixFQUFZdjBCLEVBQVE0QixHQUNwQjR5QixHQUFlLEVBT25CLE9BTklELElBQ0FDLEVBR2tCLElBRmQ1eUIsRUFBTWQsUUFBTyxTQUFVaUIsR0FDbkIsT0FBUTBLLEVBQVMxSyxJQUFTMUMsR0FBU3VDLE1BQ3BDdkYsUUFFSms0QixHQUFhQyxFQUd4QixTQUFTQyxHQUFlN3lCLEdBQ3BCLElBVUl6RixFQUNBZzRCLEVBWEFDLEVBQWFsb0IsRUFBU3RLLEtBQVcwSyxFQUFjMUssR0FDL0N5eUIsR0FBZSxFQUNmMzJCLEVBQWEsQ0FDVCxVQUNBLFVBQ0EsVUFDQSxXQUNBLFdBQ0EsWUFLUixJQUFLdkIsRUFBSSxFQUFHQSxFQUFJdUIsRUFBV3JCLE9BQVFGLEdBQUssRUFDcENnNEIsRUFBV3oyQixFQUFXdkIsR0FDdEJrNEIsRUFBZUEsR0FBZ0Jsb0IsRUFBV3ZLLEVBQU91eUIsR0FHckQsT0FBT0MsR0FBY0MsRUFHekIsU0FBU0ssR0FBa0JDLEVBQVV6aEIsR0FDakMsSUFBSXFFLEVBQU9vZCxFQUFTcGQsS0FBS3JFLEVBQUssUUFBUSxHQUN0QyxPQUFPcUUsR0FBUSxFQUNULFdBQ0FBLEdBQVEsRUFDUixXQUNBQSxFQUFPLEVBQ1AsVUFDQUEsRUFBTyxFQUNQLFVBQ0FBLEVBQU8sRUFDUCxVQUNBQSxFQUFPLEVBQ1AsV0FDQSxXQUdWLFNBQVNxZCxHQUFXQyxFQUFNQyxHQUVHLElBQXJCMTRCLFVBQVVDLFNBQ0xELFVBQVUsR0FHSjQzQixHQUFjNTNCLFVBQVUsS0FDL0J5NEIsRUFBT3o0QixVQUFVLEdBQ2pCMDRCLE9BQVVqMkIsR0FDSDQxQixHQUFlcjRCLFVBQVUsTUFDaEMwNEIsRUFBVTE0QixVQUFVLEdBQ3BCeTRCLE9BQU9oMkIsSUFQUGcyQixPQUFPaDJCLEVBQ1BpMkIsT0FBVWoyQixJQVdsQixJQUFJcVUsRUFBTTJoQixHQUFRcEksS0FDZHNJLEVBQU01RCxHQUFnQmplLEVBQUt0VyxNQUFNbzRCLFFBQVEsT0FDekM5bkIsRUFBU2xCLEVBQU1pcEIsZUFBZXI0QixLQUFNbTRCLElBQVEsV0FDNUM1aEIsRUFDSTJoQixJQUNDaGpCLEVBQVdnakIsRUFBUTVuQixJQUNkNG5CLEVBQVE1bkIsR0FBUXhRLEtBQUtFLEtBQU1zVyxHQUMzQjRoQixFQUFRNW5CLElBRXRCLE9BQU90USxLQUFLc1EsT0FDUmlHLEdBQVV2VyxLQUFLMlgsYUFBYXZCLFNBQVM5RixFQUFRdFEsS0FBTTZ2QixHQUFZdlosS0FJdkUsU0FBU21lLEtBQ0wsT0FBTyxJQUFJemdCLEVBQU9oVSxNQUd0QixTQUFTMjJCLEdBQVEzeEIsRUFBT2tXLEdBQ3BCLElBQUlvZCxFQUFhbmtCLEVBQVNuUCxHQUFTQSxFQUFRNnFCLEdBQVk3cUIsR0FDdkQsU0FBTWhGLEtBQUsrUixZQUFhdW1CLEVBQVd2bUIsYUFJckIsaUJBRGRtSixFQUFRRCxHQUFlQyxJQUFVLGVBRXRCbGIsS0FBS29RLFVBQVlrb0IsRUFBV2xvQixVQUU1QmtvQixFQUFXbG9CLFVBQVlwUSxLQUFLeTBCLFFBQVEyRCxRQUFRbGQsR0FBTzlLLFdBSWxFLFNBQVN3bUIsR0FBUzV4QixFQUFPa1csR0FDckIsSUFBSW9kLEVBQWFua0IsRUFBU25QLEdBQVNBLEVBQVE2cUIsR0FBWTdxQixHQUN2RCxTQUFNaEYsS0FBSytSLFlBQWF1bUIsRUFBV3ZtQixhQUlyQixpQkFEZG1KLEVBQVFELEdBQWVDLElBQVUsZUFFdEJsYixLQUFLb1EsVUFBWWtvQixFQUFXbG9CLFVBRTVCcFEsS0FBS3kwQixRQUFROEQsTUFBTXJkLEdBQU85SyxVQUFZa29CLEVBQVdsb0IsV0FJaEUsU0FBU29vQixHQUFVcGxCLEVBQU1ELEVBQUkrSCxFQUFPdWQsR0FDaEMsSUFBSUMsRUFBWXZrQixFQUFTZixHQUFRQSxFQUFPeWMsR0FBWXpjLEdBQ2hEdWxCLEVBQVV4a0IsRUFBU2hCLEdBQU1BLEVBQUswYyxHQUFZMWMsR0FDOUMsU0FBTW5ULEtBQUsrUixXQUFhMm1CLEVBQVUzbUIsV0FBYTRtQixFQUFRNW1CLGFBSy9CLE9BRnhCMG1CLEVBQWNBLEdBQWUsTUFFWixHQUNQejRCLEtBQUsyMkIsUUFBUStCLEVBQVd4ZCxJQUN2QmxiLEtBQUs0MkIsU0FBUzhCLEVBQVd4ZCxNQUNaLE1BQW5CdWQsRUFBWSxHQUNQejRCLEtBQUs0MkIsU0FBUytCLEVBQVN6ZCxJQUN0QmxiLEtBQUsyMkIsUUFBUWdDLEVBQVN6ZCxJQUlyQyxTQUFTMGQsR0FBTzV6QixFQUFPa1csR0FDbkIsSUFDSTJkLEVBREFQLEVBQWFua0IsRUFBU25QLEdBQVNBLEVBQVE2cUIsR0FBWTdxQixHQUV2RCxTQUFNaEYsS0FBSytSLFlBQWF1bUIsRUFBV3ZtQixhQUlyQixpQkFEZG1KLEVBQVFELEdBQWVDLElBQVUsZUFFdEJsYixLQUFLb1EsWUFBY2tvQixFQUFXbG9CLFdBRXJDeW9CLEVBQVVQLEVBQVdsb0IsVUFFakJwUSxLQUFLeTBCLFFBQVEyRCxRQUFRbGQsR0FBTzlLLFdBQWF5b0IsR0FDekNBLEdBQVc3NEIsS0FBS3kwQixRQUFROEQsTUFBTXJkLEdBQU85SyxZQUtqRCxTQUFTMG9CLEdBQWM5ekIsRUFBT2tXLEdBQzFCLE9BQU9sYixLQUFLNDRCLE9BQU81ekIsRUFBT2tXLElBQVVsYixLQUFLMjJCLFFBQVEzeEIsRUFBT2tXLEdBRzVELFNBQVM2ZCxHQUFlL3pCLEVBQU9rVyxHQUMzQixPQUFPbGIsS0FBSzQ0QixPQUFPNXpCLEVBQU9rVyxJQUFVbGIsS0FBSzQyQixTQUFTNXhCLEVBQU9rVyxHQUc3RCxTQUFTUCxHQUFLM1YsRUFBT2tXLEVBQU84ZCxHQUN4QixJQUFJQyxFQUFNQyxFQUFXM2lCLEVBRXJCLElBQUt2VyxLQUFLK1IsVUFDTixPQUFPYSxJQUtYLEtBRkFxbUIsRUFBTzFFLEdBQWdCdnZCLEVBQU9oRixPQUVwQitSLFVBQ04sT0FBT2EsSUFPWCxPQUpBc21CLEVBQW9ELEtBQXZDRCxFQUFLaEYsWUFBY2owQixLQUFLaTBCLGFBRXJDL1ksRUFBUUQsR0FBZUMsSUFHbkIsSUFBSyxPQUNEM0UsRUFBUzRpQixHQUFVbjVCLEtBQU1pNUIsR0FBUSxHQUNqQyxNQUNKLElBQUssUUFDRDFpQixFQUFTNGlCLEdBQVVuNUIsS0FBTWk1QixHQUN6QixNQUNKLElBQUssVUFDRDFpQixFQUFTNGlCLEdBQVVuNUIsS0FBTWk1QixHQUFRLEVBQ2pDLE1BQ0osSUFBSyxTQUNEMWlCLEdBQVV2VyxLQUFPaTVCLEdBQVEsSUFDekIsTUFDSixJQUFLLFNBQ0QxaUIsR0FBVXZXLEtBQU9pNUIsR0FBUSxJQUN6QixNQUNKLElBQUssT0FDRDFpQixHQUFVdlcsS0FBT2k1QixHQUFRLEtBQ3pCLE1BQ0osSUFBSyxNQUNEMWlCLEdBQVV2VyxLQUFPaTVCLEVBQU9DLEdBQWEsTUFDckMsTUFDSixJQUFLLE9BQ0QzaUIsR0FBVXZXLEtBQU9pNUIsRUFBT0MsR0FBYSxPQUNyQyxNQUNKLFFBQ0kzaUIsRUFBU3ZXLEtBQU9pNUIsRUFHeEIsT0FBT0QsRUFBVXppQixFQUFTeUYsR0FBU3pGLEdBR3ZDLFNBQVM0aUIsR0FBVTNwQixFQUFHQyxHQUNsQixHQUFJRCxFQUFFbU4sT0FBU2xOLEVBQUVrTixPQUdiLE9BQVF3YyxHQUFVMXBCLEVBQUdELEdBR3pCLElBQUk0cEIsRUFBeUMsSUFBdkIzcEIsRUFBRXNNLE9BQVN2TSxFQUFFdU0sU0FBZ0J0TSxFQUFFaU4sUUFBVWxOLEVBQUVrTixTQUU3RDJjLEVBQVM3cEIsRUFBRWlsQixRQUFRN1AsSUFBSXdVLEVBQWdCLFVBZTNDLFFBQVNBLEdBWEwzcEIsRUFBSTRwQixFQUFTLEdBR0g1cEIsRUFBSTRwQixJQUFXQSxFQUZmN3BCLEVBQUVpbEIsUUFBUTdQLElBQUl3VSxFQUFpQixFQUFHLFlBTWxDM3BCLEVBQUk0cEIsSUFGSjdwQixFQUFFaWxCLFFBQVE3UCxJQUFJd1UsRUFBaUIsRUFBRyxVQUVUQyxNQUlGLEVBTXpDLFNBQVNueEIsS0FDTCxPQUFPbEksS0FBS3kwQixRQUFRbGtCLE9BQU8sTUFBTUQsT0FBTyxvQ0FHNUMsU0FBU2dwQixHQUFZQyxHQUNqQixJQUFLdjVCLEtBQUsrUixVQUNOLE9BQU8sS0FFWCxJQUFJckIsR0FBcUIsSUFBZjZvQixFQUNOMW5CLEVBQUluQixFQUFNMVEsS0FBS3kwQixRQUFRL2pCLE1BQVExUSxLQUNuQyxPQUFJNlIsRUFBRWtLLE9BQVMsR0FBS2xLLEVBQUVrSyxPQUFTLEtBQ3BCaEUsRUFDSGxHLEVBQ0FuQixFQUNNLGlDQUNBLGdDQUdWd0UsRUFBV25GLEtBQUtuUSxVQUFVMDVCLGFBRXRCNW9CLEVBQ08xUSxLQUFLdzVCLFNBQVNGLGNBRWQsSUFBSXZwQixLQUFLL1AsS0FBS29RLFVBQStCLEdBQW5CcFEsS0FBS2kwQixZQUFtQixLQUNwRHFGLGNBQ0E1ekIsUUFBUSxJQUFLcVMsRUFBYWxHLEVBQUcsTUFHbkNrRyxFQUNIbEcsRUFDQW5CLEVBQU0sK0JBQWlDLDhCQVUvQyxTQUFTK29CLEtBQ0wsSUFBS3o1QixLQUFLK1IsVUFDTixNQUFPLHFCQUF1Qi9SLEtBQUt5VCxHQUFLLE9BRTVDLElBRUk1TixFQUNBa1csRUFDQTJkLEVBQ0FDLEVBTEFqaUIsRUFBTyxTQUNQa2lCLEVBQU8sR0FjWCxPQVRLNTVCLEtBQUsrMUIsWUFDTnJlLEVBQTRCLElBQXJCMVgsS0FBS2kwQixZQUFvQixhQUFlLG1CQUMvQzJGLEVBQU8sS0FFWC96QixFQUFTLElBQU02UixFQUFPLE1BQ3RCcUUsRUFBTyxHQUFLL2IsS0FBSytiLFFBQVUvYixLQUFLK2IsUUFBVSxLQUFPLE9BQVMsU0FDMUQyZCxFQUFXLHdCQUNYQyxFQUFTQyxFQUFPLE9BRVQ1NUIsS0FBS3NRLE9BQU96SyxFQUFTa1csRUFBTzJkLEVBQVdDLEdBR2xELFNBQVNycEIsR0FBT3VwQixHQUNQQSxJQUNEQSxFQUFjNzVCLEtBQUtpMkIsUUFDYjdtQixFQUFNMHFCLGlCQUNOMXFCLEVBQU0ycUIsZUFFaEIsSUFBSXhqQixFQUFTd0IsRUFBYS9YLEtBQU02NUIsR0FDaEMsT0FBTzc1QixLQUFLMlgsYUFBYXFpQixXQUFXempCLEdBR3hDLFNBQVNuRCxHQUFLNmtCLEVBQU0zZCxHQUNoQixPQUNJdGEsS0FBSytSLFlBQ0hvQyxFQUFTOGpCLElBQVNBLEVBQUtsbUIsV0FBYzhkLEdBQVlvSSxHQUFNbG1CLFdBRWxEeWdCLEdBQWUsQ0FBRXJmLEdBQUluVCxLQUFNb1QsS0FBTTZrQixJQUNuQzFuQixPQUFPdlEsS0FBS3VRLFVBQ1owcEIsVUFBVTNmLEdBRVJ0YSxLQUFLMlgsYUFBYU0sY0FJakMsU0FBU2lpQixHQUFRNWYsR0FDYixPQUFPdGEsS0FBS29ULEtBQUt5YyxLQUFldlYsR0FHcEMsU0FBU25ILEdBQUc4a0IsRUFBTTNkLEdBQ2QsT0FDSXRhLEtBQUsrUixZQUNIb0MsRUFBUzhqQixJQUFTQSxFQUFLbG1CLFdBQWM4ZCxHQUFZb0ksR0FBTWxtQixXQUVsRHlnQixHQUFlLENBQUVwZixLQUFNcFQsS0FBTW1ULEdBQUk4a0IsSUFDbkMxbkIsT0FBT3ZRLEtBQUt1USxVQUNaMHBCLFVBQVUzZixHQUVSdGEsS0FBSzJYLGFBQWFNLGNBSWpDLFNBQVNraUIsR0FBTTdmLEdBQ1gsT0FBT3RhLEtBQUttVCxHQUFHMGMsS0FBZXZWLEdBTWxDLFNBQVMvSixHQUFPNVEsR0FDWixJQUFJeTZCLEVBRUosWUFBWW40QixJQUFSdEMsRUFDT0ssS0FBSytULFFBQVFzVyxPQUdDLE9BRHJCK1AsRUFBZ0IzUCxHQUFVOXFCLE1BRXRCSyxLQUFLK1QsUUFBVXFtQixHQUVacDZCLE1BMUhmb1AsRUFBTTJxQixjQUFnQix1QkFDdEIzcUIsRUFBTTBxQixpQkFBbUIseUJBNkh6QixJQUFJeHlCLEdBQU9rTixFQUNQLG1KQUNBLFNBQVU3VSxHQUNOLFlBQVlzQyxJQUFSdEMsRUFDT0ssS0FBSzJYLGFBRUwzWCxLQUFLdVEsT0FBTzVRLE1BSy9CLFNBQVNnWSxLQUNMLE9BQU8zWCxLQUFLK1QsUUFHaEIsSUFBSXNtQixHQUFnQixJQUNoQkMsR0FBZ0IsR0FBS0QsR0FDckJFLEdBQWMsR0FBS0QsR0FDbkJFLEdBQW1CLFFBQXdCRCxHQUcvQyxTQUFTRSxHQUFNQyxFQUFVQyxHQUNyQixPQUFTRCxFQUFXQyxFQUFXQSxHQUFXQSxFQUc5QyxTQUFTQyxHQUFpQnpnQixFQUFHdEksRUFBR2dJLEdBRTVCLE9BQUlNLEVBQUksS0FBT0EsR0FBSyxFQUVULElBQUlwSyxLQUFLb0ssRUFBSSxJQUFLdEksRUFBR2dJLEdBQUsyZ0IsR0FFMUIsSUFBSXpxQixLQUFLb0ssRUFBR3RJLEVBQUdnSSxHQUFHekosVUFJakMsU0FBU3lxQixHQUFlMWdCLEVBQUd0SSxFQUFHZ0ksR0FFMUIsT0FBSU0sRUFBSSxLQUFPQSxHQUFLLEVBRVRwSyxLQUFLb1QsSUFBSWhKLEVBQUksSUFBS3RJLEVBQUdnSSxHQUFLMmdCLEdBRTFCenFCLEtBQUtvVCxJQUFJaEosRUFBR3RJLEVBQUdnSSxHQUk5QixTQUFTdWUsR0FBUWxkLEdBQ2IsSUFBSStjLEVBQU02QyxFQUVWLFFBQWM3NEIsS0FEZGlaLEVBQVFELEdBQWVDLEtBQ2MsZ0JBQVZBLElBQTRCbGIsS0FBSytSLFVBQ3hELE9BQU8vUixLQUtYLE9BRkE4NkIsRUFBYzk2QixLQUFLNlQsT0FBU2duQixHQUFpQkQsR0FFckMxZixHQUNKLElBQUssT0FDRCtjLEVBQU82QyxFQUFZOTZCLEtBQUsrYixPQUFRLEVBQUcsR0FDbkMsTUFDSixJQUFLLFVBQ0RrYyxFQUFPNkMsRUFDSDk2QixLQUFLK2IsT0FDTC9iLEtBQUswYyxRQUFXMWMsS0FBSzBjLFFBQVUsRUFDL0IsR0FFSixNQUNKLElBQUssUUFDRHViLEVBQU82QyxFQUFZOTZCLEtBQUsrYixPQUFRL2IsS0FBSzBjLFFBQVMsR0FDOUMsTUFDSixJQUFLLE9BQ0R1YixFQUFPNkMsRUFDSDk2QixLQUFLK2IsT0FDTC9iLEtBQUswYyxRQUNMMWMsS0FBSzJjLE9BQVMzYyxLQUFLNmpCLFdBRXZCLE1BQ0osSUFBSyxVQUNEb1UsRUFBTzZDLEVBQ0g5NkIsS0FBSytiLE9BQ0wvYixLQUFLMGMsUUFDTDFjLEtBQUsyYyxRQUFVM2MsS0FBSys2QixhQUFlLElBRXZDLE1BQ0osSUFBSyxNQUNMLElBQUssT0FDRDlDLEVBQU82QyxFQUFZOTZCLEtBQUsrYixPQUFRL2IsS0FBSzBjLFFBQVMxYyxLQUFLMmMsUUFDbkQsTUFDSixJQUFLLE9BQ0RzYixFQUFPajRCLEtBQUtxUyxHQUFHakMsVUFDZjZuQixHQUFRd0MsR0FDSnhDLEdBQVFqNEIsS0FBSzZULE9BQVMsRUFBSTdULEtBQUtpMEIsWUFBY3FHLElBQzdDQyxJQUVKLE1BQ0osSUFBSyxTQUNEdEMsRUFBT2o0QixLQUFLcVMsR0FBR2pDLFVBQ2Y2bkIsR0FBUXdDLEdBQU14QyxFQUFNcUMsSUFDcEIsTUFDSixJQUFLLFNBQ0RyQyxFQUFPajRCLEtBQUtxUyxHQUFHakMsVUFDZjZuQixHQUFRd0MsR0FBTXhDLEVBQU1vQyxJQU01QixPQUZBcjZCLEtBQUtxUyxHQUFHcWlCLFFBQVF1RCxHQUNoQjdvQixFQUFNOEUsYUFBYWxVLE1BQU0sR0FDbEJBLEtBR1gsU0FBU3U0QixHQUFNcmQsR0FDWCxJQUFJK2MsRUFBTTZDLEVBRVYsUUFBYzc0QixLQURkaVosRUFBUUQsR0FBZUMsS0FDYyxnQkFBVkEsSUFBNEJsYixLQUFLK1IsVUFDeEQsT0FBTy9SLEtBS1gsT0FGQTg2QixFQUFjOTZCLEtBQUs2VCxPQUFTZ25CLEdBQWlCRCxHQUVyQzFmLEdBQ0osSUFBSyxPQUNEK2MsRUFBTzZDLEVBQVk5NkIsS0FBSytiLE9BQVMsRUFBRyxFQUFHLEdBQUssRUFDNUMsTUFDSixJQUFLLFVBQ0RrYyxFQUNJNkMsRUFDSTk2QixLQUFLK2IsT0FDTC9iLEtBQUswYyxRQUFXMWMsS0FBSzBjLFFBQVUsRUFBSyxFQUNwQyxHQUNBLEVBQ1IsTUFDSixJQUFLLFFBQ0R1YixFQUFPNkMsRUFBWTk2QixLQUFLK2IsT0FBUS9iLEtBQUswYyxRQUFVLEVBQUcsR0FBSyxFQUN2RCxNQUNKLElBQUssT0FDRHViLEVBQ0k2QyxFQUNJOTZCLEtBQUsrYixPQUNML2IsS0FBSzBjLFFBQ0wxYyxLQUFLMmMsT0FBUzNjLEtBQUs2akIsVUFBWSxHQUMvQixFQUNSLE1BQ0osSUFBSyxVQUNEb1UsRUFDSTZDLEVBQ0k5NkIsS0FBSytiLE9BQ0wvYixLQUFLMGMsUUFDTDFjLEtBQUsyYyxRQUFVM2MsS0FBSys2QixhQUFlLEdBQUssR0FDeEMsRUFDUixNQUNKLElBQUssTUFDTCxJQUFLLE9BQ0Q5QyxFQUFPNkMsRUFBWTk2QixLQUFLK2IsT0FBUS9iLEtBQUswYyxRQUFTMWMsS0FBSzJjLE9BQVMsR0FBSyxFQUNqRSxNQUNKLElBQUssT0FDRHNiLEVBQU9qNEIsS0FBS3FTLEdBQUdqQyxVQUNmNm5CLEdBQ0lzQyxHQUNBRSxHQUNJeEMsR0FBUWo0QixLQUFLNlQsT0FBUyxFQUFJN1QsS0FBS2kwQixZQUFjcUcsSUFDN0NDLElBRUosRUFDSixNQUNKLElBQUssU0FDRHRDLEVBQU9qNEIsS0FBS3FTLEdBQUdqQyxVQUNmNm5CLEdBQVFxQyxHQUFnQkcsR0FBTXhDLEVBQU1xQyxJQUFpQixFQUNyRCxNQUNKLElBQUssU0FDRHJDLEVBQU9qNEIsS0FBS3FTLEdBQUdqQyxVQUNmNm5CLEdBQVFvQyxHQUFnQkksR0FBTXhDLEVBQU1vQyxJQUFpQixFQU03RCxPQUZBcjZCLEtBQUtxUyxHQUFHcWlCLFFBQVF1RCxHQUNoQjdvQixFQUFNOEUsYUFBYWxVLE1BQU0sR0FDbEJBLEtBR1gsU0FBU29RLEtBQ0wsT0FBT3BRLEtBQUtxUyxHQUFHakMsVUFBa0MsS0FBckJwUSxLQUFLOFQsU0FBVyxHQUdoRCxTQUFTa25CLEtBQ0wsT0FBTzc0QixLQUFLK1osTUFBTWxjLEtBQUtvUSxVQUFZLEtBR3ZDLFNBQVNvcEIsS0FDTCxPQUFPLElBQUl6cEIsS0FBSy9QLEtBQUtvUSxXQUd6QixTQUFTMGxCLEtBQ0wsSUFBSWprQixFQUFJN1IsS0FDUixNQUFPLENBQ0g2UixFQUFFa0ssT0FDRmxLLEVBQUU2SyxRQUNGN0ssRUFBRThLLE9BQ0Y5SyxFQUFFeWUsT0FDRnplLEVBQUV1ZixTQUNGdmYsRUFBRXdmLFNBQ0Z4ZixFQUFFeWYsZUFJVixTQUFTMkosS0FDTCxJQUFJcHBCLEVBQUk3UixLQUNSLE1BQU8sQ0FDSDJ5QixNQUFPOWdCLEVBQUVrSyxPQUNUb0UsT0FBUXRPLEVBQUU2SyxRQUNWQyxLQUFNOUssRUFBRThLLE9BQ1JtTCxNQUFPalcsRUFBRWlXLFFBQ1RHLFFBQVNwVyxFQUFFb1csVUFDWEssUUFBU3pXLEVBQUV5VyxVQUNYMkssYUFBY3BoQixFQUFFb2hCLGdCQUl4QixTQUFTaUksS0FFTCxPQUFPbDdCLEtBQUsrUixVQUFZL1IsS0FBS3M1QixjQUFnQixLQUdqRCxTQUFTNkIsS0FDTCxPQUFPcHBCLEVBQVEvUixNQUduQixTQUFTbzdCLEtBQ0wsT0FBT2pyQixFQUFPLEdBQUl5QixFQUFnQjVSLE9BR3RDLFNBQVNxN0IsS0FDTCxPQUFPenBCLEVBQWdCNVIsTUFBTStRLFNBR2pDLFNBQVN1cUIsS0FDTCxNQUFPLENBQ0h0MkIsTUFBT2hGLEtBQUt5VCxHQUNabkQsT0FBUXRRLEtBQUswVCxHQUNibkQsT0FBUXZRLEtBQUsrVCxRQUNiNGQsTUFBTzN4QixLQUFLNlQsT0FDWnJELE9BQVF4USxLQUFLd1MsU0FxRHJCLFNBQVMrb0IsR0FBVzFwQixFQUFHdkIsR0FDbkIsSUFBSS9RLEVBQ0Erc0IsRUFDQTNQLEVBQ0E2ZSxFQUFPeDdCLEtBQUt5N0IsT0FBU2hSLEdBQVUsTUFBTWdSLE1BQ3pDLElBQUtsOEIsRUFBSSxFQUFHK3NCLEVBQUlrUCxFQUFLLzdCLE9BQVFGLEVBQUkrc0IsSUFBSy9zQixFQVNsQyxPQVBTLGlCQURNaThCLEVBQUtqOEIsR0FBR204QixRQUdmL2UsRUFBT3ZOLEVBQU1vc0IsRUFBS2o4QixHQUFHbThCLE9BQU90RCxRQUFRLE9BQ3BDb0QsRUFBS2o4QixHQUFHbThCLE1BQVEvZSxFQUFLdk0sa0JBSWRvckIsRUFBS2o4QixHQUFHbzhCLE9BQ25CLElBQUssWUFDREgsRUFBS2o4QixHQUFHbzhCLE1BQVEsSUFDaEIsTUFDSixJQUFLLFNBRURoZixFQUFPdk4sRUFBTW9zQixFQUFLajhCLEdBQUdvOEIsT0FBT3ZELFFBQVEsT0FBT2hvQixVQUMzQ29yQixFQUFLajhCLEdBQUdvOEIsTUFBUWhmLEVBQUt2TSxVQUlqQyxPQUFPb3JCLEVBR1gsU0FBU0ksR0FBZ0JDLEVBQVN2ckIsRUFBUUUsR0FDdEMsSUFBSWpSLEVBQ0Erc0IsRUFFQS9xQixFQUNBb3BCLEVBQ0FtUixFQUhBTixFQUFPeDdCLEtBQUt3N0IsT0FNaEIsSUFGQUssRUFBVUEsRUFBUS9pQixjQUVidlosRUFBSSxFQUFHK3NCLEVBQUlrUCxFQUFLLzdCLE9BQVFGLEVBQUkrc0IsSUFBSy9zQixFQUtsQyxHQUpBZ0MsRUFBT2k2QixFQUFLajhCLEdBQUdnQyxLQUFLdVgsY0FDcEI2UixFQUFPNlEsRUFBS2o4QixHQUFHb3JCLEtBQUs3UixjQUNwQmdqQixFQUFTTixFQUFLajhCLEdBQUd1OEIsT0FBT2hqQixjQUVwQnRJLEVBQ0EsT0FBUUYsR0FDSixJQUFLLElBQ0wsSUFBSyxLQUNMLElBQUssTUFDRCxHQUFJcWEsSUFBU2tSLEVBQ1QsT0FBT0wsRUFBS2o4QixHQUVoQixNQUVKLElBQUssT0FDRCxHQUFJZ0MsSUFBU3M2QixFQUNULE9BQU9MLEVBQUtqOEIsR0FFaEIsTUFFSixJQUFLLFFBQ0QsR0FBSXU4QixJQUFXRCxFQUNYLE9BQU9MLEVBQUtqOEIsUUFJckIsR0FBSSxDQUFDZ0MsRUFBTW9wQixFQUFNbVIsR0FBUWg1QixRQUFRKzRCLElBQVksRUFDaEQsT0FBT0wsRUFBS2o4QixHQUt4QixTQUFTdzhCLEdBQXNCdnFCLEVBQUt1SyxHQUNoQyxJQUFJaWdCLEVBQU14cUIsRUFBSWtxQixPQUFTbHFCLEVBQUltcUIsTUFBUSxHQUFNLEVBQ3pDLFlBQWExNUIsSUFBVDhaLEVBQ08zTSxFQUFNb0MsRUFBSWtxQixPQUFPM2YsT0FFakIzTSxFQUFNb0MsRUFBSWtxQixPQUFPM2YsUUFBVUEsRUFBT3ZLLEVBQUl1aUIsUUFBVWlJLEVBSS9ELFNBQVNDLEtBQ0wsSUFBSTE4QixFQUNBK3NCLEVBQ0FoWixFQUNBa29CLEVBQU94N0IsS0FBSzJYLGFBQWE2akIsT0FDN0IsSUFBS2o4QixFQUFJLEVBQUcrc0IsRUFBSWtQLEVBQUsvN0IsT0FBUUYsRUFBSStzQixJQUFLL3NCLEVBQUcsQ0FJckMsR0FGQStULEVBQU10VCxLQUFLeTBCLFFBQVEyRCxRQUFRLE9BQU9ob0IsVUFFOUJvckIsRUFBS2o4QixHQUFHbThCLE9BQVNwb0IsR0FBT0EsR0FBT2tvQixFQUFLajhCLEdBQUdvOEIsTUFDdkMsT0FBT0gsRUFBS2o4QixHQUFHZ0MsS0FFbkIsR0FBSWk2QixFQUFLajhCLEdBQUdvOEIsT0FBU3JvQixHQUFPQSxHQUFPa29CLEVBQUtqOEIsR0FBR204QixNQUN2QyxPQUFPRixFQUFLajhCLEdBQUdnQyxLQUl2QixNQUFPLEdBR1gsU0FBUzI2QixLQUNMLElBQUkzOEIsRUFDQStzQixFQUNBaFosRUFDQWtvQixFQUFPeDdCLEtBQUsyWCxhQUFhNmpCLE9BQzdCLElBQUtqOEIsRUFBSSxFQUFHK3NCLEVBQUlrUCxFQUFLLzdCLE9BQVFGLEVBQUkrc0IsSUFBSy9zQixFQUFHLENBSXJDLEdBRkErVCxFQUFNdFQsS0FBS3kwQixRQUFRMkQsUUFBUSxPQUFPaG9CLFVBRTlCb3JCLEVBQUtqOEIsR0FBR204QixPQUFTcG9CLEdBQU9BLEdBQU9rb0IsRUFBS2o4QixHQUFHbzhCLE1BQ3ZDLE9BQU9ILEVBQUtqOEIsR0FBR3U4QixPQUVuQixHQUFJTixFQUFLajhCLEdBQUdvOEIsT0FBU3JvQixHQUFPQSxHQUFPa29CLEVBQUtqOEIsR0FBR204QixNQUN2QyxPQUFPRixFQUFLajhCLEdBQUd1OEIsT0FJdkIsTUFBTyxHQUdYLFNBQVNLLEtBQ0wsSUFBSTU4QixFQUNBK3NCLEVBQ0FoWixFQUNBa29CLEVBQU94N0IsS0FBSzJYLGFBQWE2akIsT0FDN0IsSUFBS2o4QixFQUFJLEVBQUcrc0IsRUFBSWtQLEVBQUsvN0IsT0FBUUYsRUFBSStzQixJQUFLL3NCLEVBQUcsQ0FJckMsR0FGQStULEVBQU10VCxLQUFLeTBCLFFBQVEyRCxRQUFRLE9BQU9ob0IsVUFFOUJvckIsRUFBS2o4QixHQUFHbThCLE9BQVNwb0IsR0FBT0EsR0FBT2tvQixFQUFLajhCLEdBQUdvOEIsTUFDdkMsT0FBT0gsRUFBS2o4QixHQUFHb3JCLEtBRW5CLEdBQUk2USxFQUFLajhCLEdBQUdvOEIsT0FBU3JvQixHQUFPQSxHQUFPa29CLEVBQUtqOEIsR0FBR204QixNQUN2QyxPQUFPRixFQUFLajhCLEdBQUdvckIsS0FJdkIsTUFBTyxHQUdYLFNBQVN5UixLQUNMLElBQUk3OEIsRUFDQStzQixFQUNBMFAsRUFDQTFvQixFQUNBa29CLEVBQU94N0IsS0FBSzJYLGFBQWE2akIsT0FDN0IsSUFBS2o4QixFQUFJLEVBQUcrc0IsRUFBSWtQLEVBQUsvN0IsT0FBUUYsRUFBSStzQixJQUFLL3NCLEVBTWxDLEdBTEF5OEIsRUFBTVIsRUFBS2o4QixHQUFHbThCLE9BQVNGLEVBQUtqOEIsR0FBR284QixNQUFRLEdBQU0sRUFHN0Nyb0IsRUFBTXRULEtBQUt5MEIsUUFBUTJELFFBQVEsT0FBT2hvQixVQUc3Qm9yQixFQUFLajhCLEdBQUdtOEIsT0FBU3BvQixHQUFPQSxHQUFPa29CLEVBQUtqOEIsR0FBR284QixPQUN2Q0gsRUFBS2o4QixHQUFHbzhCLE9BQVNyb0IsR0FBT0EsR0FBT2tvQixFQUFLajhCLEdBQUdtOEIsTUFFeEMsT0FDSzE3QixLQUFLK2IsT0FBUzNNLEVBQU1vc0IsRUFBS2o4QixHQUFHbThCLE9BQU8zZixRQUFVaWdCLEVBQzlDUixFQUFLajhCLEdBQUd3MEIsT0FLcEIsT0FBTy96QixLQUFLK2IsT0FHaEIsU0FBU3NnQixHQUFjL2QsR0FJbkIsT0FISy9PLEVBQVd2UCxLQUFNLG1CQUNsQnM4QixHQUFpQng4QixLQUFLRSxNQUVuQnNlLEVBQVd0ZSxLQUFLdThCLGVBQWlCdjhCLEtBQUt3OEIsV0FHakQsU0FBU0MsR0FBY25lLEdBSW5CLE9BSEsvTyxFQUFXdlAsS0FBTSxtQkFDbEJzOEIsR0FBaUJ4OEIsS0FBS0UsTUFFbkJzZSxFQUFXdGUsS0FBSzA4QixlQUFpQjE4QixLQUFLdzhCLFdBR2pELFNBQVNHLEdBQWdCcmUsR0FJckIsT0FISy9PLEVBQVd2UCxLQUFNLHFCQUNsQnM4QixHQUFpQng4QixLQUFLRSxNQUVuQnNlLEVBQVd0ZSxLQUFLNDhCLGlCQUFtQjU4QixLQUFLdzhCLFdBR25ELFNBQVNLLEdBQWF2ZSxFQUFVL04sR0FDNUIsT0FBT0EsRUFBT2tzQixjQUFjbmUsR0FHaEMsU0FBU3dlLEdBQWF4ZSxFQUFVL04sR0FDNUIsT0FBT0EsRUFBTzhyQixjQUFjL2QsR0FHaEMsU0FBU3llLEdBQWV6ZSxFQUFVL04sR0FDOUIsT0FBT0EsRUFBT29zQixnQkFBZ0JyZSxHQUdsQyxTQUFTMGUsR0FBb0IxZSxFQUFVL04sR0FDbkMsT0FBT0EsRUFBTzBzQixzQkFBd0JwZixHQUcxQyxTQUFTeWUsS0FDTCxJQUlJLzhCLEVBQ0Erc0IsRUFMQTRRLEVBQWEsR0FDYkMsRUFBYSxHQUNiQyxFQUFlLEdBQ2Y1YSxFQUFjLEdBR2RnWixFQUFPeDdCLEtBQUt3N0IsT0FFaEIsSUFBS2o4QixFQUFJLEVBQUcrc0IsRUFBSWtQLEVBQUsvN0IsT0FBUUYsRUFBSStzQixJQUFLL3NCLEVBQ2xDNDlCLEVBQVc3d0IsS0FBS21TLEdBQVkrYyxFQUFLajhCLEdBQUdnQyxPQUNwQzI3QixFQUFXNXdCLEtBQUttUyxHQUFZK2MsRUFBS2o4QixHQUFHb3JCLE9BQ3BDeVMsRUFBYTl3QixLQUFLbVMsR0FBWStjLEVBQUtqOEIsR0FBR3U4QixTQUV0Q3RaLEVBQVlsVyxLQUFLbVMsR0FBWStjLEVBQUtqOEIsR0FBR2dDLE9BQ3JDaWhCLEVBQVlsVyxLQUFLbVMsR0FBWStjLEVBQUtqOEIsR0FBR29yQixPQUNyQ25JLEVBQVlsVyxLQUFLbVMsR0FBWStjLEVBQUtqOEIsR0FBR3U4QixTQUd6Qzk3QixLQUFLdzhCLFdBQWEsSUFBSTd0QixPQUFPLEtBQU82VCxFQUFZaGQsS0FBSyxLQUFPLElBQUssS0FDakV4RixLQUFLdThCLGVBQWlCLElBQUk1dEIsT0FBTyxLQUFPd3VCLEVBQVczM0IsS0FBSyxLQUFPLElBQUssS0FDcEV4RixLQUFLMDhCLGVBQWlCLElBQUkvdEIsT0FBTyxLQUFPdXVCLEVBQVcxM0IsS0FBSyxLQUFPLElBQUssS0FDcEV4RixLQUFLNDhCLGlCQUFtQixJQUFJanVCLE9BQ3hCLEtBQU95dUIsRUFBYTUzQixLQUFLLEtBQU8sSUFDaEMsS0FjUixTQUFTNjNCLEdBQXVCOWxCLEVBQU8rbEIsR0FDbkNobUIsRUFBZSxFQUFHLENBQUNDLEVBQU9BLEVBQU05WCxRQUFTLEVBQUc2OUIsR0EwQ2hELFNBQVNDLEdBQWV2NEIsR0FDcEIsT0FBT3c0QixHQUFxQjE5QixLQUN4QkUsS0FDQWdGLEVBQ0FoRixLQUFLNGpCLE9BQ0w1akIsS0FBSzZqQixVQUNMN2pCLEtBQUsyWCxhQUFhNE0sTUFBTWhCLElBQ3hCdmpCLEtBQUsyWCxhQUFhNE0sTUFBTWYsS0FJaEMsU0FBU2lhLEdBQWtCejRCLEdBQ3ZCLE9BQU93NEIsR0FBcUIxOUIsS0FDeEJFLEtBQ0FnRixFQUNBaEYsS0FBSyt5QixVQUNML3lCLEtBQUsrNkIsYUFDTCxFQUNBLEdBSVIsU0FBUzJDLEtBQ0wsT0FBT3RaLEdBQVlwa0IsS0FBSytiLE9BQVEsRUFBRyxHQUd2QyxTQUFTNGhCLEtBQ0wsT0FBT3ZaLEdBQVlwa0IsS0FBSzQ5QixjQUFlLEVBQUcsR0FHOUMsU0FBU0MsS0FDTCxJQUFJQyxFQUFXOTlCLEtBQUsyWCxhQUFhNE0sTUFDakMsT0FBT0gsR0FBWXBrQixLQUFLK2IsT0FBUStoQixFQUFTdmEsSUFBS3VhLEVBQVN0YSxLQUczRCxTQUFTdWEsS0FDTCxJQUFJRCxFQUFXOTlCLEtBQUsyWCxhQUFhNE0sTUFDakMsT0FBT0gsR0FBWXBrQixLQUFLc3ZCLFdBQVl3TyxFQUFTdmEsSUFBS3VhLEVBQVN0YSxLQUcvRCxTQUFTZ2EsR0FBcUJ4NEIsRUFBTzRlLEVBQU1DLEVBQVNOLEVBQUtDLEdBQ3JELElBQUl3YSxFQUNKLE9BQWEsTUFBVGg1QixFQUNPaWYsR0FBV2prQixLQUFNdWpCLEVBQUtDLEdBQUt6SCxNQUc5QjZILEdBREpvYSxFQUFjNVosR0FBWXBmLEVBQU91ZSxFQUFLQyxNQUVsQ0ksRUFBT29hLEdBRUpDLEdBQVduK0IsS0FBS0UsS0FBTWdGLEVBQU80ZSxFQUFNQyxFQUFTTixFQUFLQyxJQUloRSxTQUFTeWEsR0FBVzNPLEVBQVUxTCxFQUFNQyxFQUFTTixFQUFLQyxHQUM5QyxJQUFJMGEsRUFBZ0J2YSxHQUFtQjJMLEVBQVUxTCxFQUFNQyxFQUFTTixFQUFLQyxHQUNqRTdHLEVBQU91RyxHQUFjZ2IsRUFBY25pQixLQUFNLEVBQUdtaUIsRUFBY2xhLFdBSzlELE9BSEFoa0IsS0FBSytiLEtBQUtZLEVBQUt5RyxrQkFDZnBqQixLQUFLMGMsTUFBTUMsRUFBS2dTLGVBQ2hCM3VCLEtBQUsyYyxLQUFLQSxFQUFLaVMsY0FDUjV1QixLQXdCWCxTQUFTbStCLEdBQWNuNUIsR0FDbkIsT0FBZ0IsTUFBVEEsRUFDRDdDLEtBQUs4WixNQUFNamMsS0FBSzBjLFFBQVUsR0FBSyxHQUMvQjFjLEtBQUswYyxNQUFvQixHQUFiMVgsRUFBUSxHQUFVaEYsS0FBSzBjLFFBQVUsR0FuYXZEcEYsRUFBZSxJQUFLLEVBQUcsRUFBRyxXQUMxQkEsRUFBZSxLQUFNLEVBQUcsRUFBRyxXQUMzQkEsRUFBZSxNQUFPLEVBQUcsRUFBRyxXQUM1QkEsRUFBZSxPQUFRLEVBQUcsRUFBRyxXQUM3QkEsRUFBZSxRQUFTLEVBQUcsRUFBRyxhQUU5QkEsRUFBZSxJQUFLLENBQUMsSUFBSyxHQUFJLEtBQU0sV0FDcENBLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFdBQ2xDQSxFQUFlLElBQUssQ0FBQyxNQUFPLEdBQUksRUFBRyxXQUNuQ0EsRUFBZSxJQUFLLENBQUMsT0FBUSxHQUFJLEVBQUcsV0FFcEM2RyxHQUFjLElBQUswZSxJQUNuQjFlLEdBQWMsS0FBTTBlLElBQ3BCMWUsR0FBYyxNQUFPMGUsSUFDckIxZSxHQUFjLE9BQVEyZSxJQUN0QjNlLEdBQWMsUUFBUzRlLElBRXZCamUsR0FDSSxDQUFDLElBQUssS0FBTSxNQUFPLE9BQVEsVUFDM0IsU0FBVTlaLEVBQU84UyxFQUFPN0QsRUFBUXNELEdBQzVCLElBQUkvRixFQUFNeUMsRUFBT0YsUUFBUXFxQixVQUFVcDVCLEVBQU91UyxFQUFPdEQsRUFBT3pCLFNBQ3BEaEIsRUFDQUksRUFBZ0JxQyxHQUFRekMsSUFBTUEsRUFFOUJJLEVBQWdCcUMsR0FBUS9DLFdBQWFsTSxLQUtqRG1aLEdBQWMsSUFBS04sSUFDbkJNLEdBQWMsS0FBTU4sSUFDcEJNLEdBQWMsTUFBT04sSUFDckJNLEdBQWMsT0FBUU4sSUFDdEJNLEdBQWMsS0FBTTZlLElBRXBCbGUsR0FBYyxDQUFDLElBQUssS0FBTSxNQUFPLFFBQVNNLElBQzFDTixHQUFjLENBQUMsT0FBTyxTQUFVOVosRUFBTzhTLEVBQU83RCxFQUFRc0QsR0FDbEQsSUFBSXhULEVBQ0FrUSxFQUFPRixRQUFRa3BCLHVCQUNmbDVCLEVBQVFpQixFQUFNakIsTUFBTWtRLEVBQU9GLFFBQVFrcEIsdUJBR25DaHBCLEVBQU9GLFFBQVFzcUIsb0JBQ2Z2bUIsRUFBTXNILElBQVFuTCxFQUFPRixRQUFRc3FCLG9CQUFvQnI1QixFQUFPakIsR0FFeEQrVCxFQUFNc0gsSUFBUXVELFNBQVMzZCxFQUFPLE9BNE90Q3NTLEVBQWUsRUFBRyxDQUFDLEtBQU0sR0FBSSxHQUFHLFdBQzVCLE9BQU90WCxLQUFLc3ZCLFdBQWEsT0FHN0JoWSxFQUFlLEVBQUcsQ0FBQyxLQUFNLEdBQUksR0FBRyxXQUM1QixPQUFPdFgsS0FBSzQ5QixjQUFnQixPQU9oQ1AsR0FBdUIsT0FBUSxZQUMvQkEsR0FBdUIsUUFBUyxZQUNoQ0EsR0FBdUIsT0FBUSxlQUMvQkEsR0FBdUIsUUFBUyxlQUloQ3hpQixHQUFhLFdBQVksTUFDekJBLEdBQWEsY0FBZSxNQUk1QlcsR0FBZ0IsV0FBWSxHQUM1QkEsR0FBZ0IsY0FBZSxHQUkvQjJDLEdBQWMsSUFBS0wsSUFDbkJLLEdBQWMsSUFBS0wsSUFDbkJLLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLEtBQU1aLEdBQVdKLElBQy9CZ0IsR0FBYyxPQUFRUixHQUFXTixJQUNqQ2MsR0FBYyxPQUFRUixHQUFXTixJQUNqQ2MsR0FBYyxRQUFTUCxHQUFXTixJQUNsQ2EsR0FBYyxRQUFTUCxHQUFXTixJQUVsQzBCLEdBQ0ksQ0FBQyxPQUFRLFFBQVMsT0FBUSxVQUMxQixTQUFVaGEsRUFBTzRlLEVBQU0zUCxFQUFRc0QsR0FDM0JxTSxFQUFLck0sRUFBTU4sT0FBTyxFQUFHLElBQU1rRixHQUFNblgsTUFJekNnYSxHQUFrQixDQUFDLEtBQU0sT0FBTyxTQUFVaGEsRUFBTzRlLEVBQU0zUCxFQUFRc0QsR0FDM0RxTSxFQUFLck0sR0FBU25JLEVBQU1zVCxrQkFBa0IxZCxNQXNFMUNzUyxFQUFlLElBQUssRUFBRyxLQUFNLFdBSTdCdUQsR0FBYSxVQUFXLEtBSXhCVyxHQUFnQixVQUFXLEdBSTNCMkMsR0FBYyxJQUFLakIsSUFDbkI0QixHQUFjLEtBQUssU0FBVTlaLEVBQU84UyxHQUNoQ0EsRUFBTXVILElBQThCLEdBQXBCbEQsR0FBTW5YLEdBQVMsTUFhbkNzUyxFQUFlLElBQUssQ0FBQyxLQUFNLEdBQUksS0FBTSxRQUlyQ3VELEdBQWEsT0FBUSxLQUdyQlcsR0FBZ0IsT0FBUSxHQUl4QjJDLEdBQWMsSUFBS1osSUFDbkJZLEdBQWMsS0FBTVosR0FBV0osSUFDL0JnQixHQUFjLE1BQU0sU0FBVUcsRUFBVS9OLEdBRXBDLE9BQU8rTixFQUNEL04sRUFBT2dGLHlCQUEyQmhGLEVBQU9pRixjQUN6Q2pGLEVBQU8rRSxrQ0FHakJ3SixHQUFjLENBQUMsSUFBSyxNQUFPUSxJQUMzQlIsR0FBYyxNQUFNLFNBQVU5WixFQUFPOFMsR0FDakNBLEVBQU13SCxJQUFRbkQsR0FBTW5YLEVBQU1qQixNQUFNd1osSUFBVyxPQUsvQyxJQUFJK2dCLEdBQW1CL2hCLEdBQVcsUUFBUSxHQXlCMUMsU0FBU2dpQixHQUFnQnY1QixHQUNyQixJQUFJZ2YsRUFDQTdoQixLQUFLcXhCLE9BQ0F4ekIsS0FBS3kwQixRQUFRMkQsUUFBUSxPQUFTcDRCLEtBQUt5MEIsUUFBUTJELFFBQVEsU0FBVyxPQUMvRCxFQUNSLE9BQWdCLE1BQVRwekIsRUFBZ0JnZixFQUFZaGtCLEtBQUs0a0IsSUFBSTVmLEVBQVFnZixFQUFXLEtBMUJuRTFNLEVBQWUsTUFBTyxDQUFDLE9BQVEsR0FBSSxPQUFRLGFBSTNDdUQsR0FBYSxZQUFhLE9BRzFCVyxHQUFnQixZQUFhLEdBSTdCMkMsR0FBYyxNQUFPVCxJQUNyQlMsR0FBYyxPQUFRZixJQUN0QjBCLEdBQWMsQ0FBQyxNQUFPLFNBQVMsU0FBVTlaLEVBQU84UyxFQUFPN0QsR0FDbkRBLEVBQU9tYixXQUFhalQsR0FBTW5YLE1BaUI5QnNTLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFVBSWxDdUQsR0FBYSxTQUFVLEtBSXZCVyxHQUFnQixTQUFVLElBSTFCMkMsR0FBYyxJQUFLWixJQUNuQlksR0FBYyxLQUFNWixHQUFXSixJQUMvQjJCLEdBQWMsQ0FBQyxJQUFLLE1BQU9VLElBSTNCLElBQUlnZixHQUFlamlCLEdBQVcsV0FBVyxHQUl6Q2pGLEVBQWUsSUFBSyxDQUFDLEtBQU0sR0FBSSxFQUFHLFVBSWxDdUQsR0FBYSxTQUFVLEtBSXZCVyxHQUFnQixTQUFVLElBSTFCMkMsR0FBYyxJQUFLWixJQUNuQlksR0FBYyxLQUFNWixHQUFXSixJQUMvQjJCLEdBQWMsQ0FBQyxJQUFLLE1BQU9XLElBSTNCLElBOENJbEksR0FBT2tuQixHQTlDUEMsR0FBZW5pQixHQUFXLFdBQVcsR0ErQ3pDLElBM0NBakYsRUFBZSxJQUFLLEVBQUcsR0FBRyxXQUN0QixTQUFVdFgsS0FBS3N4QixjQUFnQixRQUduQ2hhLEVBQWUsRUFBRyxDQUFDLEtBQU0sR0FBSSxHQUFHLFdBQzVCLFNBQVV0WCxLQUFLc3hCLGNBQWdCLE9BR25DaGEsRUFBZSxFQUFHLENBQUMsTUFBTyxHQUFJLEVBQUcsZUFDakNBLEVBQWUsRUFBRyxDQUFDLE9BQVEsR0FBSSxHQUFHLFdBQzlCLE9BQTRCLEdBQXJCdFgsS0FBS3N4QixpQkFFaEJoYSxFQUFlLEVBQUcsQ0FBQyxRQUFTLEdBQUksR0FBRyxXQUMvQixPQUE0QixJQUFyQnRYLEtBQUtzeEIsaUJBRWhCaGEsRUFBZSxFQUFHLENBQUMsU0FBVSxHQUFJLEdBQUcsV0FDaEMsT0FBNEIsSUFBckJ0WCxLQUFLc3hCLGlCQUVoQmhhLEVBQWUsRUFBRyxDQUFDLFVBQVcsR0FBSSxHQUFHLFdBQ2pDLE9BQTRCLElBQXJCdFgsS0FBS3N4QixpQkFFaEJoYSxFQUFlLEVBQUcsQ0FBQyxXQUFZLEdBQUksR0FBRyxXQUNsQyxPQUE0QixJQUFyQnRYLEtBQUtzeEIsaUJBRWhCaGEsRUFBZSxFQUFHLENBQUMsWUFBYSxHQUFJLEdBQUcsV0FDbkMsT0FBNEIsSUFBckJ0WCxLQUFLc3hCLGlCQUtoQnpXLEdBQWEsY0FBZSxNQUk1QlcsR0FBZ0IsY0FBZSxJQUkvQjJDLEdBQWMsSUFBS1QsR0FBV1IsSUFDOUJpQixHQUFjLEtBQU1ULEdBQVdQLElBQy9CZ0IsR0FBYyxNQUFPVCxHQUFXTixJQUczQjdGLEdBQVEsT0FBUUEsR0FBTTlYLFFBQVUsRUFBRzhYLElBQVMsSUFDN0M0RyxHQUFjNUcsR0FBT3NHLElBR3pCLFNBQVM4Z0IsR0FBUTM1QixFQUFPOFMsR0FDcEJBLEVBQU00SCxJQUFldkQsR0FBdUIsS0FBaEIsS0FBT25YLElBR3ZDLElBQUt1UyxHQUFRLElBQUtBLEdBQU05WCxRQUFVLEVBQUc4WCxJQUFTLElBQzFDdUgsR0FBY3ZILEdBQU9vbkIsSUFZekIsU0FBU0MsS0FDTCxPQUFPNStCLEtBQUs2VCxPQUFTLE1BQVEsR0FHakMsU0FBU2dyQixLQUNMLE9BQU83K0IsS0FBSzZULE9BQVMsNkJBQStCLEdBZHhENHFCLEdBQW9CbGlCLEdBQVcsZ0JBQWdCLEdBSS9DakYsRUFBZSxJQUFLLEVBQUcsRUFBRyxZQUMxQkEsRUFBZSxLQUFNLEVBQUcsRUFBRyxZQVkzQixJQUFJd25CLEdBQVE5cUIsRUFBT3BVLFVBd0duQixTQUFTbS9CLEdBQVcvNUIsR0FDaEIsT0FBTzZxQixHQUFvQixJQUFSN3FCLEdBR3ZCLFNBQVNnNkIsS0FDTCxPQUFPblAsR0FBWTl2QixNQUFNLEtBQU1QLFdBQVd5L0IsWUFHOUMsU0FBU0MsR0FBbUIza0IsR0FDeEIsT0FBT0EsRUEvR1h1a0IsR0FBTWxhLElBQU1BLEdBQ1prYSxHQUFNMW9CLFNBQVc0aEIsR0FDakI4RyxHQUFNckssTUFBUUEsR0FDZHFLLEdBQU1ua0IsS0FBT0EsR0FDYm1rQixHQUFNdkcsTUFBUUEsR0FDZHVHLEdBQU14dUIsT0FBU0EsR0FDZnd1QixHQUFNMXJCLEtBQU9BLEdBQ2IwckIsR0FBTTVFLFFBQVVBLEdBQ2hCNEUsR0FBTTNyQixHQUFLQSxHQUNYMnJCLEdBQU0zRSxNQUFRQSxHQUNkMkUsR0FBTXg1QixJQUFNdVgsR0FDWmlpQixHQUFNekQsVUFBWUEsR0FDbEJ5RCxHQUFNbkksUUFBVUEsR0FDaEJtSSxHQUFNbEksU0FBV0EsR0FDakJrSSxHQUFNdEcsVUFBWUEsR0FDbEJzRyxHQUFNbEcsT0FBU0EsR0FDZmtHLEdBQU1oRyxjQUFnQkEsR0FDdEJnRyxHQUFNL0YsZUFBaUJBLEdBQ3ZCK0YsR0FBTS9zQixRQUFVb3BCLEdBQ2hCMkQsR0FBTXgzQixLQUFPQSxHQUNidzNCLEdBQU12dUIsT0FBU0EsR0FDZnV1QixHQUFNbm5CLFdBQWFBLEdBQ25CbW5CLEdBQU05bkIsSUFBTThhLEdBQ1pnTixHQUFNamQsSUFBTStQLEdBQ1prTixHQUFNMUQsYUFBZUEsR0FDckIwRCxHQUFNMXBCLElBQU0wSCxHQUNaZ2lCLEdBQU0xRyxRQUFVQSxHQUNoQjBHLEdBQU12SixTQUFXQSxHQUNqQnVKLEdBQU1oSixRQUFVQSxHQUNoQmdKLEdBQU03RCxTQUFXQSxHQUNqQjZELEdBQU10RixPQUFTQSxHQUNmc0YsR0FBTXhGLFlBQWNBLEdBQ3BCd0YsR0FBTXJGLFFBQVVBLEdBQ00sb0JBQVgwRixRQUF3QyxNQUFkQSxPQUFPQyxNQUN4Q04sR0FBTUssT0FBT0MsSUFBSSwrQkFBaUMsV0FDOUMsTUFBTyxVQUFZcC9CLEtBQUtzUSxTQUFXLE1BRzNDd3VCLEdBQU01RCxPQUFTQSxHQUNmNEQsR0FBTTUyQixTQUFXQSxHQUNqQjQyQixHQUFNOUQsS0FBT0EsR0FDYjhELEdBQU0xdUIsUUFBVUEsR0FDaEIwdUIsR0FBTXhELGFBQWVBLEdBQ3JCd0QsR0FBTWpELFFBQVVJLEdBQ2hCNkMsR0FBTU8sVUFBWW5ELEdBQ2xCNEMsR0FBTVEsUUFBVW5ELEdBQ2hCMkMsR0FBTVMsUUFBVW5ELEdBQ2hCMEMsR0FBTS9pQixLQUFPNkcsR0FDYmtjLEdBQU1oakIsV0FBYStHLEdBQ25CaWMsR0FBTXhQLFNBQVdpTyxHQUNqQnVCLEdBQU1sQixZQUFjSCxHQUNwQnFCLEdBQU1qTSxRQUFVaU0sR0FBTWxNLFNBQVd1TCxHQUNqQ1csR0FBTXBpQixNQUFRb0YsR0FDZGdkLEdBQU1saUIsWUFBY21GLEdBQ3BCK2MsR0FBTWxiLEtBQU9rYixHQUFNaE0sTUFBUW5PLEdBQzNCbWEsR0FBTS9MLFFBQVUrTCxHQUFNVSxTQUFXM2EsR0FDakNpYSxHQUFNMWEsWUFBY3laLEdBQ3BCaUIsR0FBTVcsZ0JBQWtCMUIsR0FDeEJlLEdBQU1ZLGVBQWlCaEMsR0FDdkJvQixHQUFNYSxzQkFBd0JoQyxHQUM5Qm1CLEdBQU1uaUIsS0FBTzJoQixHQUNiUSxHQUFNN1ksSUFBTTZZLEdBQU05TCxLQUFPbE0sR0FDekJnWSxHQUFNamIsUUFBVW1ELEdBQ2hCOFgsR0FBTS9ELFdBQWE5VCxHQUNuQjZYLEdBQU05YSxVQUFZdWEsR0FDbEJPLEdBQU14TyxLQUFPd08sR0FBTWhYLE1BQVFpQixHQUMzQitWLEdBQU0xTixPQUFTME4sR0FBTTdXLFFBQVV1VyxHQUMvQk0sR0FBTXpOLE9BQVN5TixHQUFNeFcsUUFBVW9XLEdBQy9CSSxHQUFNeE4sWUFBY3dOLEdBQU03TCxhQUFld0wsR0FDekNLLEdBQU03SyxVQUFZYSxHQUNsQmdLLEdBQU1wdUIsSUFBTTJrQixHQUNaeUosR0FBTW5LLE1BQVFXLEdBQ2R3SixHQUFNRyxVQUFZekosR0FDbEJzSixHQUFNcEoscUJBQXVCQSxHQUM3Qm9KLEdBQU1jLE1BQVFqSyxHQUNkbUosR0FBTS9JLFFBQVVBLEdBQ2hCK0ksR0FBTTlJLFlBQWNBLEdBQ3BCOEksR0FBTTdJLE1BQVFBLEdBQ2Q2SSxHQUFNbk4sTUFBUXNFLEdBQ2Q2SSxHQUFNZSxTQUFXakIsR0FDakJFLEdBQU1nQixTQUFXakIsR0FDakJDLEdBQU1pQixNQUFRdnJCLEVBQ1Ysa0RBQ0E4cEIsSUFFSlEsR0FBTTNlLE9BQVMzTCxFQUNYLG1EQUNBc04sSUFFSmdkLEdBQU1uTSxNQUFRbmUsRUFDVixpREFDQW9PLElBRUprYyxHQUFNbEYsS0FBT3BsQixFQUNULDJHQUNBNGdCLElBRUowSixHQUFNa0IsYUFBZXhyQixFQUNqQiwwR0FDQW9oQixJQWVKLElBQUlxSyxHQUFVcnFCLEVBQU9oVyxVQXVDckIsU0FBU3NnQyxHQUFNNXZCLEVBQVE2dkIsRUFBT0MsRUFBT0MsR0FDakMsSUFBSTl2QixFQUFTa2EsS0FDVC9aLEVBQU1MLElBQVkrRSxJQUFJaXJCLEVBQVFGLEdBQ2xDLE9BQU81dkIsRUFBTzZ2QixHQUFPMXZCLEVBQUtKLEdBRzlCLFNBQVNnd0IsR0FBZWh3QixFQUFRNnZCLEVBQU9DLEdBUW5DLEdBUEl2d0IsRUFBU1MsS0FDVDZ2QixFQUFRN3ZCLEVBQ1JBLE9BQVNyTyxHQUdicU8sRUFBU0EsR0FBVSxHQUVOLE1BQVQ2dkIsRUFDQSxPQUFPRCxHQUFNNXZCLEVBQVE2dkIsRUFBT0MsRUFBTyxTQUd2QyxJQUFJN2dDLEVBQ0FnaEMsRUFBTSxHQUNWLElBQUtoaEMsRUFBSSxFQUFHQSxFQUFJLEdBQUlBLElBQ2hCZ2hDLEVBQUloaEMsR0FBSzJnQyxHQUFNNXZCLEVBQVEvUSxFQUFHNmdDLEVBQU8sU0FFckMsT0FBT0csRUFXWCxTQUFTQyxHQUFpQkMsRUFBY253QixFQUFRNnZCLEVBQU9DLEdBQ3ZCLGtCQUFqQkssR0FDSDV3QixFQUFTUyxLQUNUNnZCLEVBQVE3dkIsRUFDUkEsT0FBU3JPLEdBR2JxTyxFQUFTQSxHQUFVLEtBR25CNnZCLEVBREE3dkIsRUFBU213QixFQUVUQSxHQUFlLEVBRVg1d0IsRUFBU1MsS0FDVDZ2QixFQUFRN3ZCLEVBQ1JBLE9BQVNyTyxHQUdicU8sRUFBU0EsR0FBVSxJQUd2QixJQUVJL1EsRUFGQWdSLEVBQVNrYSxLQUNUaVcsRUFBUUQsRUFBZWx3QixFQUFPZ1UsTUFBTWhCLElBQU0sRUFFMUNnZCxFQUFNLEdBRVYsR0FBYSxNQUFUSixFQUNBLE9BQU9ELEdBQU01dkIsR0FBUzZ2QixFQUFRTyxHQUFTLEVBQUdOLEVBQU8sT0FHckQsSUFBSzdnQyxFQUFJLEVBQUdBLEVBQUksRUFBR0EsSUFDZmdoQyxFQUFJaGhDLEdBQUsyZ0MsR0FBTTV2QixHQUFTL1EsRUFBSW1oQyxHQUFTLEVBQUdOLEVBQU8sT0FFbkQsT0FBT0csRUFHWCxTQUFTSSxHQUFXcndCLEVBQVE2dkIsR0FDeEIsT0FBT0csR0FBZWh3QixFQUFRNnZCLEVBQU8sVUFHekMsU0FBU1MsR0FBZ0J0d0IsRUFBUTZ2QixHQUM3QixPQUFPRyxHQUFlaHdCLEVBQVE2dkIsRUFBTyxlQUd6QyxTQUFTVSxHQUFhSixFQUFjbndCLEVBQVE2dkIsR0FDeEMsT0FBT0ssR0FBaUJDLEVBQWNud0IsRUFBUTZ2QixFQUFPLFlBR3pELFNBQVNXLEdBQWtCTCxFQUFjbndCLEVBQVE2dkIsR0FDN0MsT0FBT0ssR0FBaUJDLEVBQWNud0IsRUFBUTZ2QixFQUFPLGlCQUd6RCxTQUFTWSxHQUFnQk4sRUFBY253QixFQUFRNnZCLEdBQzNDLE9BQU9LLEdBQWlCQyxFQUFjbndCLEVBQVE2dkIsRUFBTyxlQTVIekRGLEdBQVE3cEIsU0FBV0EsRUFDbkI2cEIsR0FBUTluQixlQUFpQkEsRUFDekI4bkIsR0FBUWhvQixZQUFjQSxFQUN0QmdvQixHQUFReG9CLFFBQVVBLEVBQ2xCd29CLEdBQVF4TyxTQUFXeU4sR0FDbkJlLEdBQVFqRyxXQUFha0YsR0FDckJlLEdBQVE1bEIsYUFBZUEsRUFDdkI0bEIsR0FBUXZsQixXQUFhQSxHQUNyQnVsQixHQUFRN3FCLElBQU1BLEVBQ2Q2cUIsR0FBUXpFLEtBQU9ELEdBQ2YwRSxHQUFRN0IsVUFBWXhDLEdBQ3BCcUUsR0FBUTVQLGdCQUFrQjBMLEdBQzFCa0UsR0FBUXhELGNBQWdCQSxHQUN4QndELEdBQVE1RCxjQUFnQkEsR0FDeEI0RCxHQUFRdEQsZ0JBQWtCQSxHQUUxQnNELEdBQVE5ZixPQUFTUyxHQUNqQnFmLEdBQVEvZixZQUFjYSxHQUN0QmtmLEdBQVEzZixZQUFjbUIsR0FDdEJ3ZSxHQUFRNWYsWUFBY0EsR0FDdEI0ZixHQUFRN2YsaUJBQW1CQSxHQUMzQjZmLEdBQVFyYyxLQUFPVSxHQUNmMmIsR0FBUWUsZUFBaUJ0YyxHQUN6QnViLEdBQVFnQixlQUFpQnhjLEdBRXpCd2IsR0FBUTVhLFNBQVdVLEdBQ25Ca2EsR0FBUTlhLFlBQWNpQixHQUN0QjZaLEdBQVE3YSxjQUFnQmMsR0FDeEIrWixHQUFRbGIsY0FBZ0I0QixHQUV4QnNaLEdBQVF6YSxjQUFnQkEsR0FDeEJ5YSxHQUFRMWEsbUJBQXFCQSxHQUM3QjBhLEdBQVEzYSxpQkFBbUJBLEdBRTNCMmEsR0FBUXhYLEtBQU9MLEdBQ2Y2WCxHQUFReHVCLFNBQVd1WCxHQTRGbkJzQixHQUFtQixLQUFNLENBQ3JCa1IsS0FBTSxDQUNGLENBQ0lFLE1BQU8sYUFDUEMsTUFBTyxJQUNQNUgsT0FBUSxFQUNSeHlCLEtBQU0sY0FDTnU2QixPQUFRLEtBQ1JuUixLQUFNLE1BRVYsQ0FDSStRLE1BQU8sYUFDUEMsT0FBTyxJQUNQNUgsT0FBUSxFQUNSeHlCLEtBQU0sZ0JBQ051NkIsT0FBUSxLQUNSblIsS0FBTSxPQUdkdkIsdUJBQXdCLHVCQUN4QjNSLFFBQVMsU0FBVWYsR0FDZixJQUFJakgsRUFBSWlILEVBQVMsR0FXakIsT0FBT0EsR0FUZ0MsSUFBL0J5RixHQUFPekYsRUFBUyxJQUFPLElBQ2pCLEtBQ00sSUFBTmpILEVBQ0EsS0FDTSxJQUFOQSxFQUNBLEtBQ00sSUFBTkEsRUFDQSxLQUNBLFNBT3RCTCxFQUFNOUgsS0FBT2tOLEVBQ1Qsd0RBQ0E4VixJQUVKbGIsRUFBTTh4QixTQUFXMXNCLEVBQ2IsZ0VBQ0FpVyxJQUdKLElBQUkwVyxHQUFVaC9CLEtBQUtDLElBRW5CLFNBQVNBLEtBQ0wsSUFBSTZFLEVBQU9qSCxLQUFLb3pCLE1BYWhCLE9BWEFwekIsS0FBS2t6QixjQUFnQmlPLEdBQVFuaEMsS0FBS2t6QixlQUNsQ2x6QixLQUFLbXpCLE1BQVFnTyxHQUFRbmhDLEtBQUttekIsT0FDMUJuekIsS0FBSzZnQixRQUFVc2dCLEdBQVFuaEMsS0FBSzZnQixTQUU1QjVaLEVBQUtnc0IsYUFBZWtPLEdBQVFsNkIsRUFBS2dzQixjQUNqQ2hzQixFQUFLcWhCLFFBQVU2WSxHQUFRbDZCLEVBQUtxaEIsU0FDNUJyaEIsRUFBS2doQixRQUFVa1osR0FBUWw2QixFQUFLZ2hCLFNBQzVCaGhCLEVBQUs2Z0IsTUFBUXFaLEdBQVFsNkIsRUFBSzZnQixPQUMxQjdnQixFQUFLa1osT0FBU2doQixHQUFRbDZCLEVBQUtrWixRQUMzQmxaLEVBQUswckIsTUFBUXdPLEdBQVFsNkIsRUFBSzByQixPQUVuQjN5QixLQUdYLFNBQVNvaEMsR0FBYzFPLEVBQVUxdEIsRUFBTzFCLEVBQU93ekIsR0FDM0MsSUFBSWpGLEVBQVFXLEdBQWV4dEIsRUFBTzFCLEdBTWxDLE9BSkFvdkIsRUFBU1EsZUFBaUI0RCxFQUFZakYsRUFBTXFCLGNBQzVDUixFQUFTUyxPQUFTMkQsRUFBWWpGLEVBQU1zQixNQUNwQ1QsRUFBUzdSLFNBQVdpVyxFQUFZakYsRUFBTWhSLFFBRS9CNlIsRUFBU1csVUFJcEIsU0FBU2dPLEdBQU1yOEIsRUFBTzFCLEdBQ2xCLE9BQU84OUIsR0FBY3BoQyxLQUFNZ0YsRUFBTzFCLEVBQU8sR0FJN0MsU0FBU2crQixHQUFXdDhCLEVBQU8xQixHQUN2QixPQUFPODlCLEdBQWNwaEMsS0FBTWdGLEVBQU8xQixHQUFRLEdBRzlDLFNBQVNpK0IsR0FBUTdxQixHQUNiLE9BQUlBLEVBQVMsRUFDRnZVLEtBQUsrWixNQUFNeEYsR0FFWHZVLEtBQUs4WixLQUFLdkYsR0FJekIsU0FBUzhxQixLQUNMLElBSUlsWixFQUNBTCxFQUNBSCxFQUNBNkssRUFDQThPLEVBUkF4TyxFQUFlanpCLEtBQUtrekIsY0FDcEJGLEVBQU9oekIsS0FBS216QixNQUNaaFQsRUFBU25nQixLQUFLNmdCLFFBQ2Q1WixFQUFPakgsS0FBS296QixNQWdEaEIsT0FyQ1NILEdBQWdCLEdBQUtELEdBQVEsR0FBSzdTLEdBQVUsR0FDNUM4UyxHQUFnQixHQUFLRCxHQUFRLEdBQUs3UyxHQUFVLElBR2pEOFMsR0FBdUQsTUFBdkNzTyxHQUFRRyxHQUFhdmhCLEdBQVU2UyxHQUMvQ0EsRUFBTyxFQUNQN1MsRUFBUyxHQUtibFosRUFBS2dzQixhQUFlQSxFQUFlLElBRW5DM0ssRUFBVXRNLEdBQVNpWCxFQUFlLEtBQ2xDaHNCLEVBQUtxaEIsUUFBVUEsRUFBVSxHQUV6QkwsRUFBVWpNLEdBQVNzTSxFQUFVLElBQzdCcmhCLEVBQUtnaEIsUUFBVUEsRUFBVSxHQUV6QkgsRUFBUTlMLEdBQVNpTSxFQUFVLElBQzNCaGhCLEVBQUs2Z0IsTUFBUUEsRUFBUSxHQUVyQmtMLEdBQVFoWCxHQUFTOEwsRUFBUSxJQUl6QjNILEdBREFzaEIsRUFBaUJ6bEIsR0FBUzJsQixHQUFhM08sSUFFdkNBLEdBQVF1TyxHQUFRRyxHQUFhRCxJQUc3QjlPLEVBQVEzVyxHQUFTbUUsRUFBUyxJQUMxQkEsR0FBVSxHQUVWbFosRUFBSytyQixLQUFPQSxFQUNaL3JCLEVBQUtrWixPQUFTQSxFQUNkbFosRUFBSzByQixNQUFRQSxFQUVOM3lCLEtBR1gsU0FBUzJoQyxHQUFhM08sR0FHbEIsT0FBZSxLQUFQQSxFQUFlLE9BRzNCLFNBQVMwTyxHQUFhdmhCLEdBRWxCLE9BQWlCLE9BQVRBLEVBQW1CLEtBRy9CLFNBQVN5aEIsR0FBRzFtQixHQUNSLElBQUtsYixLQUFLK1IsVUFDTixPQUFPYSxJQUVYLElBQUlvZ0IsRUFDQTdTLEVBQ0E4UyxFQUFlanpCLEtBQUtrekIsY0FJeEIsR0FBYyxXQUZkaFksRUFBUUQsR0FBZUMsS0FFWSxZQUFWQSxHQUFpQyxTQUFWQSxFQUc1QyxPQUZBOFgsRUFBT2h6QixLQUFLbXpCLE1BQVFGLEVBQWUsTUFDbkM5UyxFQUFTbmdCLEtBQUs2Z0IsUUFBVThnQixHQUFhM08sR0FDN0I5WCxHQUNKLElBQUssUUFDRCxPQUFPaUYsRUFDWCxJQUFLLFVBQ0QsT0FBT0EsRUFBUyxFQUNwQixJQUFLLE9BQ0QsT0FBT0EsRUFBUyxRQUt4QixPQURBNlMsRUFBT2h6QixLQUFLbXpCLE1BQVFoeEIsS0FBS3F4QixNQUFNa08sR0FBYTFoQyxLQUFLNmdCLFVBQ3pDM0YsR0FDSixJQUFLLE9BQ0QsT0FBTzhYLEVBQU8sRUFBSUMsRUFBZSxPQUNyQyxJQUFLLE1BQ0QsT0FBT0QsRUFBT0MsRUFBZSxNQUNqQyxJQUFLLE9BQ0QsT0FBYyxHQUFQRCxFQUFZQyxFQUFlLEtBQ3RDLElBQUssU0FDRCxPQUFjLEtBQVBELEVBQWNDLEVBQWUsSUFDeEMsSUFBSyxTQUNELE9BQWMsTUFBUEQsRUFBZUMsRUFBZSxJQUV6QyxJQUFLLGNBQ0QsT0FBTzl3QixLQUFLK1osTUFBYSxNQUFQOFcsR0FBZ0JDLEVBQ3RDLFFBQ0ksTUFBTSxJQUFJbmUsTUFBTSxnQkFBa0JvRyxJQU1sRCxTQUFTMm1CLEtBQ0wsT0FBSzdoQyxLQUFLK1IsVUFJTi9SLEtBQUtrekIsY0FDUSxNQUFibHpCLEtBQUttekIsTUFDSm56QixLQUFLNmdCLFFBQVUsR0FBTSxPQUNLLFFBQTNCMUUsR0FBTW5jLEtBQUs2Z0IsUUFBVSxJQU5kak8sSUFVZixTQUFTa3ZCLEdBQU9DLEdBQ1osT0FBTyxXQUNILE9BQU8vaEMsS0FBSzRoQyxHQUFHRyxJQUl2QixJQUFJQyxHQUFpQkYsR0FBTyxNQUN4QkcsR0FBWUgsR0FBTyxLQUNuQkksR0FBWUosR0FBTyxLQUNuQkssR0FBVUwsR0FBTyxLQUNqQk0sR0FBU04sR0FBTyxLQUNoQk8sR0FBVVAsR0FBTyxLQUNqQlEsR0FBV1IsR0FBTyxLQUNsQlMsR0FBYVQsR0FBTyxLQUNwQlUsR0FBVVYsR0FBTyxLQUVyQixTQUFTVyxLQUNMLE9BQU9qUSxHQUFleHlCLE1BRzFCLFNBQVMwaUMsR0FBTXhuQixHQUVYLE9BREFBLEVBQVFELEdBQWVDLEdBQ2hCbGIsS0FBSytSLFVBQVkvUixLQUFLa2IsRUFBUSxPQUFTdEksSUFHbEQsU0FBUyt2QixHQUFXcGhDLEdBQ2hCLE9BQU8sV0FDSCxPQUFPdkIsS0FBSytSLFVBQVkvUixLQUFLb3pCLE1BQU03eEIsR0FBUXFSLEtBSW5ELElBQUlxZ0IsR0FBZTBQLEdBQVcsZ0JBQzFCcmEsR0FBVXFhLEdBQVcsV0FDckIxYSxHQUFVMGEsR0FBVyxXQUNyQjdhLEdBQVE2YSxHQUFXLFNBQ25CM1AsR0FBTzJQLEdBQVcsUUFDbEJ4aUIsR0FBU3dpQixHQUFXLFVBQ3BCaFEsR0FBUWdRLEdBQVcsU0FFdkIsU0FBUzdQLEtBQ0wsT0FBTzlXLEdBQVNoYyxLQUFLZ3pCLE9BQVMsR0FHbEMsSUFBSVEsR0FBUXJ4QixLQUFLcXhCLE1BQ2JvUCxHQUFhLENBQ1RucEIsR0FBSSxHQUNKRCxFQUFHLEdBQ0gzSCxFQUFHLEdBQ0g4SCxFQUFHLEdBQ0hFLEVBQUcsR0FDSEUsRUFBRyxLQUNIRSxFQUFHLElBSVgsU0FBUzRvQixHQUFrQnRvQixFQUFRN0QsRUFBUTRELEVBQWVFLEVBQVVqSyxHQUNoRSxPQUFPQSxFQUFPOEosYUFBYTNELEdBQVUsSUFBSzRELEVBQWVDLEVBQVFDLEdBR3JFLFNBQVNzb0IsR0FBZUMsRUFBZ0J6b0IsRUFBZXNvQixFQUFZcnlCLEdBQy9ELElBQUltaUIsRUFBV0YsR0FBZXVRLEdBQWdCM2dDLE1BQzFDa21CLEVBQVVrTCxHQUFNZCxFQUFTa1AsR0FBRyxNQUM1QjNaLEVBQVV1TCxHQUFNZCxFQUFTa1AsR0FBRyxNQUM1QjlaLEVBQVEwTCxHQUFNZCxFQUFTa1AsR0FBRyxNQUMxQjVPLEVBQU9RLEdBQU1kLEVBQVNrUCxHQUFHLE1BQ3pCemhCLEVBQVNxVCxHQUFNZCxFQUFTa1AsR0FBRyxNQUMzQjlPLEVBQVFVLEdBQU1kLEVBQVNrUCxHQUFHLE1BQzFCalAsRUFBUWEsR0FBTWQsRUFBU2tQLEdBQUcsTUFDMUJweUIsRUFDSzhZLEdBQVdzYSxFQUFXbnBCLElBQU0sQ0FBQyxJQUFLNk8sSUFDbENBLEVBQVVzYSxFQUFXcHBCLEdBQUssQ0FBQyxLQUFNOE8sSUFDakNMLEdBQVcsR0FBSyxDQUFDLE1BQ2pCQSxFQUFVMmEsRUFBVy93QixHQUFLLENBQUMsS0FBTW9XLElBQ2pDSCxHQUFTLEdBQUssQ0FBQyxNQUNmQSxFQUFROGEsRUFBV2pwQixHQUFLLENBQUMsS0FBTW1PLElBQy9Ca0wsR0FBUSxHQUFLLENBQUMsTUFDZEEsRUFBTzRQLEVBQVcvb0IsR0FBSyxDQUFDLEtBQU1tWixHQWdCdkMsT0Fkb0IsTUFBaEI0UCxFQUFXN29CLElBQ1h2SyxFQUNJQSxHQUNDc2pCLEdBQVMsR0FBSyxDQUFDLE1BQ2ZBLEVBQVE4UCxFQUFXN29CLEdBQUssQ0FBQyxLQUFNK1ksS0FFeEN0akIsRUFBSUEsR0FDQzJRLEdBQVUsR0FBSyxDQUFDLE1BQ2hCQSxFQUFTeWlCLEVBQVczb0IsR0FBSyxDQUFDLEtBQU1rRyxJQUNoQ3dTLEdBQVMsR0FBSyxDQUFDLE1BQVMsQ0FBQyxLQUFNQSxJQUVsQyxHQUFLclksRUFDUDlLLEVBQUUsSUFBTXV6QixFQUFpQixFQUN6QnZ6QixFQUFFLEdBQUtlLEVBQ0FzeUIsR0FBa0I5aUMsTUFBTSxLQUFNeVAsR0FJekMsU0FBU3d6QixHQUEyQkMsR0FDaEMsWUFBeUJoaEMsSUFBckJnaEMsRUFDT3pQLEdBRXFCLG1CQUFyQnlQLElBQ1B6UCxHQUFReVAsR0FDRCxHQU1mLFNBQVNDLEdBQTRCQyxFQUFXQyxHQUM1QyxZQUE4Qm5oQyxJQUExQjJnQyxHQUFXTyxVQUdEbGhDLElBQVZtaEMsRUFDT1IsR0FBV08sSUFFdEJQLEdBQVdPLEdBQWFDLEVBQ04sTUFBZEQsSUFDQVAsR0FBV25wQixHQUFLMnBCLEVBQVEsSUFFckIsSUFHWCxTQUFTbkosR0FBU29KLEVBQWVDLEdBQzdCLElBQUt0akMsS0FBSytSLFVBQ04sT0FBTy9SLEtBQUsyWCxhQUFhTSxjQUc3QixJQUVJMUgsRUFDQWdHLEVBSEFndEIsR0FBYSxFQUNiQyxFQUFLWixHQXlCVCxNQXJCNkIsaUJBQWxCUyxJQUNQQyxFQUFnQkQsRUFDaEJBLEdBQWdCLEdBRVMsa0JBQWxCQSxJQUNQRSxFQUFhRixHQUVZLGlCQUFsQkMsSUFDUEUsRUFBS3JrQyxPQUFPQyxPQUFPLEdBQUl3akMsR0FBWVUsR0FDWixNQUFuQkEsRUFBYzlwQixHQUFpQyxNQUFwQjhwQixFQUFjN3BCLEtBQ3pDK3BCLEVBQUcvcEIsR0FBSzZwQixFQUFjOXBCLEVBQUksSUFLbENqRCxFQUFTdXNCLEdBQWU5aUMsTUFBT3VqQyxFQUFZQyxFQUQzQ2p6QixFQUFTdlEsS0FBSzJYLGNBR1Y0ckIsSUFDQWh0QixFQUFTaEcsRUFBT21LLFlBQVkxYSxLQUFNdVcsSUFHL0JoRyxFQUFPeXBCLFdBQVd6akIsR0FHN0IsSUFBSWt0QixHQUFRdGhDLEtBQUtDLElBRWpCLFNBQVM4eEIsR0FBS25VLEdBQ1YsT0FBUUEsRUFBSSxJQUFNQSxFQUFJLEtBQU9BLEVBR2pDLFNBQVMyakIsS0FRTCxJQUFLMWpDLEtBQUsrUixVQUNOLE9BQU8vUixLQUFLMlgsYUFBYU0sY0FHN0IsSUFHSWdRLEVBQ0FILEVBQ0E2SyxFQUNBblosRUFFQW1xQixFQUNBQyxFQUNBQyxFQUNBQyxFQVhBeGIsRUFBVW1iLEdBQU16akMsS0FBS2t6QixlQUFpQixJQUN0Q0YsRUFBT3lRLEdBQU16akMsS0FBS216QixPQUNsQmhULEVBQVNzakIsR0FBTXpqQyxLQUFLNmdCLFNBS3BCa2pCLEVBQVEvakMsS0FBS2lpQyxZQU1qQixPQUFLOEIsR0FPTDliLEVBQVVqTSxHQUFTc00sRUFBVSxJQUM3QlIsRUFBUTlMLEdBQVNpTSxFQUFVLElBQzNCSyxHQUFXLEdBQ1hMLEdBQVcsR0FHWDBLLEVBQVEzVyxHQUFTbUUsRUFBUyxJQUMxQkEsR0FBVSxHQUdWM0csRUFBSThPLEVBQVVBLEVBQVFuYyxRQUFRLEdBQUd6RyxRQUFRLFNBQVUsSUFBTSxHQUV6RGkrQixFQUFZSSxFQUFRLEVBQUksSUFBTSxHQUM5QkgsRUFBUzFQLEdBQUtsMEIsS0FBSzZnQixXQUFhcVQsR0FBSzZQLEdBQVMsSUFBTSxHQUNwREYsRUFBVzNQLEdBQUtsMEIsS0FBS216QixTQUFXZSxHQUFLNlAsR0FBUyxJQUFNLEdBQ3BERCxFQUFVNVAsR0FBS2wwQixLQUFLa3pCLGlCQUFtQmdCLEdBQUs2UCxHQUFTLElBQU0sR0FHdkRKLEVBQ0EsS0FDQ2hSLEVBQVFpUixFQUFTalIsRUFBUSxJQUFNLEtBQy9CeFMsRUFBU3lqQixFQUFTempCLEVBQVMsSUFBTSxLQUNqQzZTLEVBQU82USxFQUFXN1EsRUFBTyxJQUFNLEtBQy9CbEwsR0FBU0csR0FBV0ssRUFBVSxJQUFNLEtBQ3BDUixFQUFRZ2MsRUFBVWhjLEVBQVEsSUFBTSxLQUNoQ0csRUFBVTZiLEVBQVU3YixFQUFVLElBQU0sS0FDcENLLEVBQVV3YixFQUFVdHFCLEVBQUksSUFBTSxLQTlCeEIsTUFrQ2YsSUFBSXdxQixHQUFVdlIsR0FBUzd5QixVQXdHdkIsT0F0R0Fva0MsR0FBUWp5QixRQUFVdWdCLEdBQ2xCMFIsR0FBUTVoQyxJQUFNQSxHQUNkNGhDLEdBQVFwZixJQUFNeWMsR0FDZDJDLEdBQVF6TyxTQUFXK0wsR0FDbkIwQyxHQUFRcEMsR0FBS0EsR0FDYm9DLEdBQVFoQyxlQUFpQkEsR0FDekJnQyxHQUFRL0IsVUFBWUEsR0FDcEIrQixHQUFROUIsVUFBWUEsR0FDcEI4QixHQUFRN0IsUUFBVUEsR0FDbEI2QixHQUFRNUIsT0FBU0EsR0FDakI0QixHQUFRM0IsUUFBVUEsR0FDbEIyQixHQUFRMUIsU0FBV0EsR0FDbkIwQixHQUFRekIsV0FBYUEsR0FDckJ5QixHQUFReEIsUUFBVUEsR0FDbEJ3QixHQUFRNXpCLFFBQVV5eEIsR0FDbEJtQyxHQUFRM1EsUUFBVW1PLEdBQ2xCd0MsR0FBUXZQLE1BQVFnTyxHQUNoQnVCLEdBQVExK0IsSUFBTW85QixHQUNkc0IsR0FBUS9RLGFBQWVBLEdBQ3ZCK1EsR0FBUTFiLFFBQVVBLEdBQ2xCMGIsR0FBUS9iLFFBQVVBLEdBQ2xCK2IsR0FBUWxjLE1BQVFBLEdBQ2hCa2MsR0FBUWhSLEtBQU9BLEdBQ2ZnUixHQUFRbFIsTUFBUUEsR0FDaEJrUixHQUFRN2pCLE9BQVNBLEdBQ2pCNmpCLEdBQVFyUixNQUFRQSxHQUNoQnFSLEdBQVEvSixTQUFXQSxHQUNuQitKLEdBQVExSyxZQUFjb0ssR0FDdEJNLEdBQVE5N0IsU0FBV3c3QixHQUNuQk0sR0FBUTlJLE9BQVN3SSxHQUNqQk0sR0FBUXp6QixPQUFTQSxHQUNqQnl6QixHQUFRcnNCLFdBQWFBLEdBRXJCcXNCLEdBQVFDLFlBQWN6dkIsRUFDbEIsc0ZBQ0FrdkIsSUFFSk0sR0FBUTE4QixLQUFPQSxHQUlmZ1EsRUFBZSxJQUFLLEVBQUcsRUFBRyxRQUMxQkEsRUFBZSxJQUFLLEVBQUcsRUFBRyxXQUkxQjZHLEdBQWMsSUFBS0wsSUFDbkJLLEdBQWMsSUFBS0YsSUFDbkJhLEdBQWMsS0FBSyxTQUFVOVosRUFBTzhTLEVBQU83RCxHQUN2Q0EsRUFBTzVCLEdBQUssSUFBSXRDLEtBQXlCLElBQXBCc2lCLFdBQVdydEIsT0FFcEM4WixHQUFjLEtBQUssU0FBVTlaLEVBQU84UyxFQUFPN0QsR0FDdkNBLEVBQU81QixHQUFLLElBQUl0QyxLQUFLb00sR0FBTW5YOztBQUsvQm9LLEVBQU04MEIsUUFBVSxTQUVoQjcwQixFQUFnQndnQixJQUVoQnpnQixFQUFNYSxHQUFLNnVCLEdBQ1gxdkIsRUFBTXlTLElBQU1BLEdBQ1p6UyxFQUFNNEgsSUFBTUEsR0FDWjVILEVBQU1rSCxJQUFNQSxHQUNabEgsRUFBTXNCLElBQU1MLEVBQ1pqQixFQUFNNHJCLEtBQU8rRCxHQUNiM3ZCLEVBQU0rUSxPQUFTd2dCLEdBQ2Z2eEIsRUFBTVUsT0FBU0EsRUFDZlYsRUFBTW1CLE9BQVMrWixHQUNmbGIsRUFBTThuQixRQUFVdmtCLEVBQ2hCdkQsRUFBTXNqQixTQUFXRixHQUNqQnBqQixFQUFNK0UsU0FBV0EsRUFDakIvRSxFQUFNaVcsU0FBV3diLEdBQ2pCenhCLEVBQU02dkIsVUFBWUQsR0FDbEI1dkIsRUFBTXVJLFdBQWE4UyxHQUNuQnJiLEVBQU1ra0IsV0FBYUEsR0FDbkJsa0IsRUFBTThRLFlBQWMwZ0IsR0FDcEJ4eEIsRUFBTStWLFlBQWM0YixHQUNwQjN4QixFQUFNc2IsYUFBZUEsR0FDckJ0YixFQUFNeWIsYUFBZUEsR0FDckJ6YixFQUFNa2EsUUFBVXlCLEdBQ2hCM2IsRUFBTWdXLGNBQWdCMGIsR0FDdEIxeEIsRUFBTTZMLGVBQWlCQSxHQUN2QjdMLEVBQU0rMEIscUJBQXVCbkIsR0FDN0I1ekIsRUFBTWcxQixzQkFBd0JsQixHQUM5Qjl6QixFQUFNaXBCLGVBQWlCUCxHQUN2QjFvQixFQUFNeFAsVUFBWWsvQixHQUdsQjF2QixFQUFNaTFCLFVBQVksQ0FDZEMsZUFBZ0IsbUJBQ2hCQyx1QkFBd0Isc0JBQ3hCQyxrQkFBbUIsMEJBQ25CbGxCLEtBQU0sYUFDTm1sQixLQUFNLFFBQ05DLGFBQWMsV0FDZEMsUUFBUyxlQUNUaGxCLEtBQU0sYUFDTk4sTUFBTyxXQUdKalEsQ0FFVixDQTdpTG1GdzFCOzs7Ozs7QUNEbkYsSUFBVUMsRUFBTUQsRUFBTkMsRUFXVDdrQyxLQVhlNGtDLEVBV1QsU0FBVUUsUUFJTTdpQyxJQUFuQjZpQyxFQUFPWixTQUF5QlksRUFBT3orQixVQUMxQ3krQixFQUFTQSxFQUFPeitCLFNBU2pCLElBTUMwK0IsRUFMQUMsRUFBUSxHQUNSQyxFQUFRLEdBQ1JDLEVBQVksR0FDWnBiLEVBQVEsR0FDUnFiLEVBQVUsR0FHTkwsR0FBb0MsaUJBQW5CQSxFQUFPWixTQUM1QmtCLEVBQVMsZ0dBR1YsSUFBSUMsRUFBZ0JQLEVBQU9aLFFBQVF6akMsTUFBTSxLQUN4QzZrQyxHQUFTRCxFQUFjLEdBQ3ZCRSxHQUFTRixFQUFjLEdBV3hCLFNBQVNHLEVBQWNDLEdBQ3RCLE9BQUlBLEVBQVcsR0FDUEEsRUFBVyxHQUNSQSxFQUFXLEdBQ2RBLEVBQVcsR0FFWkEsRUFBVyxHQUduQixTQUFTQyxFQUFhbnJCLEdBQ3JCLElBQUloYixFQUFJLEVBQ1BpQixFQUFRK1osRUFBTzlaLE1BQU0sS0FDckJrbEMsRUFBUW5sQyxFQUFNLEdBQ2RvbEMsRUFBYXBsQyxFQUFNLElBQU0sR0FDekJxbEMsRUFBYSxFQUVidEYsRUFBTSxFQUNOck0sRUFBTyxFQVNSLElBTjZCLEtBQXpCM1osRUFBT3VyQixXQUFXLEtBQ3JCdm1DLEVBQUksRUFDSjIwQixHQUFRLEdBSUQzMEIsRUFBSW9tQyxFQUFNbG1DLE9BQVFGLElBRXpCZ2hDLEVBQU0sR0FBS0EsRUFETGlGLEVBQWNHLEVBQU1HLFdBQVd2bUMsSUFLdEMsSUFBS0EsRUFBSSxFQUFHQSxFQUFJcW1DLEVBQVdubUMsT0FBUUYsSUFDbENzbUMsR0FBMEIsR0FFMUJ0RixHQURNaUYsRUFBY0ksRUFBV0UsV0FBV3ZtQyxJQUM3QnNtQyxFQUdkLE9BQU90RixFQUFNck0sRUFHZCxTQUFTNlIsRUFBWWp1QixHQUNwQixJQUFLLElBQUl2WSxFQUFJLEVBQUdBLEVBQUl1WSxFQUFNclksT0FBUUYsSUFDakN1WSxFQUFNdlksR0FBS21tQyxFQUFhNXRCLEVBQU12WSxJQVloQyxTQUFTeW1DLEVBQVl0bUMsRUFBUXVtQyxHQUM1QixJQUFjMW1DLEVBQVZnaEMsRUFBTSxHQUVWLElBQUtoaEMsRUFBSSxFQUFHQSxFQUFJMG1DLEVBQVF4bUMsT0FBUUYsSUFDL0JnaEMsRUFBSWhoQyxHQUFLRyxFQUFPdW1DLEVBQVExbUMsSUFHekIsT0FBT2doQyxFQUdSLFNBQVMyRixFQUFRM3JCLEdBQ2hCLElBQUl0VCxFQUFPc1QsRUFBTzlaLE1BQU0sS0FDdkIwbEMsRUFBVWwvQixFQUFLLEdBQUd4RyxNQUFNLEtBQ3hCd2xDLEVBQVVoL0IsRUFBSyxHQUFHeEcsTUFBTSxJQUN4QjJsQyxFQUFVbi9CLEVBQUssR0FBR3hHLE1BQU0sS0FRekIsT0FOQXNsQyxFQUFXSSxHQUNYSixFQUFXRSxHQUNYRixFQUFXSyxHQTFCWixTQUFxQnR1QixFQUFPclksR0FDM0IsSUFBSyxJQUFJRixFQUFJLEVBQUdBLEVBQUlFLEVBQVFGLElBQzNCdVksRUFBTXZZLEdBQUs0QyxLQUFLcXhCLE9BQU8xYixFQUFNdlksRUFBSSxJQUFNLEdBQWlCLElBQVh1WSxFQUFNdlksSUFHcER1WSxFQUFNclksRUFBUyxHQUFLNG1DLElBdUJwQkMsQ0FBV0YsRUFBUUgsRUFBUXhtQyxRQUVwQixDQUNOOEIsS0FBYTBGLEVBQUssR0FDbEJzL0IsTUFBYVAsRUFBVy8rQixFQUFLLEdBQUd4RyxNQUFNLEtBQU13bEMsR0FDNUNFLFFBQWFILEVBQVdHLEVBQVNGLEdBQ2pDRyxPQUFhQSxFQUNiSSxXQUF1QixFQUFWdi9CLEVBQUssSUFRcEIsU0FBU3cvQixFQUFNQyxHQUNWQSxHQUNIMW1DLEtBQUsybUMsS0FBS1QsRUFBT1EsSUE0RW5CLFNBQVNFLEVBQVNDLEVBQWNDLEdBQy9COW1DLEtBQUt1QixLQUFPc2xDLEVBQ1o3bUMsS0FBS2dsQyxNQUFROEIsRUFPZCxTQUFTQyxFQUFTQyxHQUNqQixJQUFJQyxFQUFhRCxFQUFHRSxlQUNoQnZjLEVBQU9zYyxFQUFXbGpDLE1BQU0sZ0JBYWYsU0FSWjRtQixFQUpHQSxHQUFRQSxFQUFLLElBR2hCQSxFQUFPQSxFQUFLLEdBQUc1bUIsTUFBTSxXQUNQNG1CLEVBQUtubEIsS0FBSyxTQUFNdkQsR0FJOUIwb0IsRUFBT3NjLEVBQVdsakMsTUFBTSxnQkFDVjRtQixFQUFLLFFBQUsxb0IsS0FJeEIwb0IsT0FBTzFvQixHQUdSakMsS0FBS2duQyxJQUFNQSxFQUNYaG5DLEtBQUsycUIsS0FBT0EsRUFDWjNxQixLQUFLK3pCLE9BQVNpVCxFQUFHblMsb0JBR2xCLFNBQVNzUyxFQUFVdk4sR0FDbEI1NUIsS0FBSzQ1QixLQUFPQSxFQUNaNTVCLEtBQUtvbkMsWUFBYyxFQUNuQnBuQyxLQUFLcW5DLFVBQVksRUFVbEIsU0FBU0MsRUFBV0MsRUFBS0MsR0FHeEIsSUFGQSxJQUFJQyxFQUFLOXNCLEVBRURBLEVBQXlDLE1BQWhDNnNCLEVBQUtSLEdBQUtPLEVBQUlQLElBQU0sS0FBTyxLQUMzQ1MsRUFBTSxJQUFJVixFQUFTLElBQUloM0IsS0FBS3czQixFQUFJUCxHQUFLcnNCLEtBQzdCb1osU0FBV3dULEVBQUl4VCxPQUN0QndULEVBQU1FLEVBRU5ELEVBQU9DLEVBSVQsT0FBT0YsRUEyQlIsU0FBU0csRUFBZ0JsNEIsRUFBR0MsR0FDM0IsT0FBSUQsRUFBRTQzQixjQUFnQjMzQixFQUFFMjNCLFlBQ2hCNTNCLEVBQUU0M0IsWUFBYzMzQixFQUFFMjNCLFlBRXRCNTNCLEVBQUU2M0IsWUFBYzUzQixFQUFFNDNCLFVBQ2Q3M0IsRUFBRTYzQixVQUFZNTNCLEVBQUU0M0IsVUFFcEI3M0IsRUFBRW9xQixLQUFLNE0sYUFBZS8yQixFQUFFbXFCLEtBQUs0TSxXQUN6Qi8yQixFQUFFbXFCLEtBQUs0TSxXQUFhaDNCLEVBQUVvcUIsS0FBSzRNLFdBRTVCLzJCLEVBQUVtcUIsS0FBS3I0QixLQUFLb21DLGNBQWNuNEIsRUFBRW9xQixLQUFLcjRCLE1BR3pDLFNBQVNxbUMsRUFBY3JtQyxFQUFNNGtDLEdBQzVCLElBQUk1bUMsRUFBR3cwQixFQUVQLElBREFnUyxFQUFXSSxHQUNONW1DLEVBQUksRUFBR0EsRUFBSTRtQyxFQUFRMW1DLE9BQVFGLElBQy9CdzBCLEVBQVNvUyxFQUFRNW1DLEdBQ2pCNGxDLEVBQVFwUixHQUFVb1IsRUFBUXBSLElBQVcsR0FDckNvUixFQUFRcFIsR0FBUXh5QixJQUFRLEVBSTFCLFNBQVNzbUMsRUFBdUIxQixHQUMvQixJQUdDNW1DLEVBQUd3cUIsRUFBRytkLEVBSEhDLEVBQWdCNUIsRUFBUTFtQyxPQUMzQnVvQyxFQUFrQixHQUNsQnpILEVBQU0sR0FHUCxJQUFLaGhDLEVBQUksRUFBR0EsRUFBSXdvQyxFQUFleG9DLElBRTlCLElBQUt3cUIsS0FETCtkLEVBQWdCM0MsRUFBUWdCLEVBQVE1bUMsR0FBR3cwQixTQUFXLEdBRXpDK1QsRUFBY2pvQyxlQUFla3FCLEtBQ2hDaWUsRUFBZ0JqZSxJQUFLLEdBS3hCLElBQUt4cUIsS0FBS3lvQyxFQUNMQSxFQUFnQm5vQyxlQUFlTixJQUNsQ2doQyxFQUFJajBCLEtBQUt3ZCxFQUFNdnFCLElBSWpCLE9BQU9naEMsRUFHUixTQUFTMEgsSUFHUixJQUNDLElBQUlDLEVBQVdDLEtBQUtDLGlCQUFpQkMsa0JBQWtCQyxTQUN2RCxHQUFJSixHQUFZQSxFQUFTem9DLE9BQVMsRUFBRyxDQUNwQyxJQUFJOEIsRUFBT3VvQixFQUFNeWUsRUFBY0wsSUFDL0IsR0FBSTNtQyxFQUNILE9BQU9BLEVBRVI2akMsRUFBUyx5QkFBMkI4QyxFQUFXLDJEQUUvQyxNQUFPM2QsSUFJVCxJQUlDaWUsRUFBV2pwQyxFQUFHd3FCLEVBSlhvYyxFQXZGTCxXQUNDLElBR0NzQyxFQUFRemUsRUFBTXpxQixFQUhYbXBDLEdBQVksSUFBSTM0QixNQUFPaVQsY0FBZ0IsRUFDMUMybEIsRUFBTyxJQUFJNUIsRUFBUyxJQUFJaDNCLEtBQUsyNEIsRUFBVyxFQUFHLElBQzNDdkMsRUFBVSxDQUFDd0MsR0FHWixJQUFLcHBDLEVBQUksRUFBR0EsRUFBSSxHQUFJQSxLQUNuQnlxQixFQUFPLElBQUkrYyxFQUFTLElBQUloM0IsS0FBSzI0QixFQUFXbnBDLEVBQUcsS0FDbEN3MEIsU0FBVzRVLEVBQUs1VSxTQUN4QjBVLEVBQVNuQixFQUFXcUIsRUFBTTNlLEdBQzFCbWMsRUFBUTc1QixLQUFLbThCLEdBQ2J0QyxFQUFRNzVCLEtBQUssSUFBSXk2QixFQUFTLElBQUloM0IsS0FBSzA0QixFQUFPekIsR0FBSyxRQUVoRDJCLEVBQU8zZSxFQUdSLElBQUt6cUIsRUFBSSxFQUFHQSxFQUFJLEVBQUdBLElBQ2xCNG1DLEVBQVE3NUIsS0FBSyxJQUFJeTZCLEVBQVMsSUFBSWgzQixLQUFLMjRCLEVBQVlucEMsRUFBRyxFQUFHLEtBQ3JENG1DLEVBQVE3NUIsS0FBSyxJQUFJeTZCLEVBQVMsSUFBSWgzQixLQUFLMjRCLEVBQVlucEMsRUFBRyxFQUFHLEtBR3RELE9BQU80bUMsRUFrRU95QyxHQUNiYixFQUFnQjVCLEVBQVExbUMsT0FDeEIwbEMsRUFBVTBDLEVBQXNCMUIsR0FDaEMwQyxFQUFhLEdBR2QsSUFBS3RwQyxFQUFJLEVBQUdBLEVBQUk0bEMsRUFBUTFsQyxPQUFRRixJQUFLLENBRXBDLElBREFpcEMsRUFBWSxJQUFJckIsRUFBVTJCLEVBQVEzRCxFQUFRNWxDLElBQUt3b0MsR0FDMUNoZSxFQUFJLEVBQUdBLEVBQUlnZSxFQUFlaGUsSUFDOUJ5ZSxFQUFVTyxjQUFjNUMsRUFBUXBjLElBRWpDOGUsRUFBV3Y4QixLQUFLazhCLEdBS2pCLE9BRkFLLEVBQVdodEIsS0FBSzZyQixHQUVUbUIsRUFBV3BwQyxPQUFTLEVBQUlvcEMsRUFBVyxHQUFHalAsS0FBS3I0QixVQUFPVSxFQWMxRCxTQUFTc21DLEVBQWVobkMsR0FDdkIsT0FBUUEsR0FBUSxJQUFJbUIsY0FBY2dELFFBQVEsTUFBTyxLQUdsRCxTQUFTc2pDLEVBQVNDLEdBQ2pCLElBQUkxcEMsRUFBR2dDLEVBQU1kLEVBQU95b0MsRUFNcEIsSUFKc0IsaUJBQVhELElBQ1ZBLEVBQVMsQ0FBQ0EsSUFHTjFwQyxFQUFJLEVBQUdBLEVBQUkwcEMsRUFBT3hwQyxPQUFRRixJQUc5QjJwQyxFQUFhWCxFQURiaG5DLEdBREFkLEVBQVF3b0MsRUFBTzFwQyxHQUFHa0IsTUFBTSxNQUNYLElBRWJ1a0MsRUFBTWtFLEdBQWNELEVBQU8xcEMsR0FDM0J1cUIsRUFBTW9mLEdBQWMzbkMsRUFDcEJxbUMsRUFBYXNCLEVBQVl6b0MsRUFBTSxHQUFHQSxNQUFNLE1BSTFDLFNBQVNxb0MsRUFBU3ZuQyxFQUFNNG5DLEdBRXZCNW5DLEVBQU9nbkMsRUFBY2huQyxHQUVyQixJQUNJNm5DLEVBREF4UCxFQUFPb0wsRUFBTXpqQyxHQUdqQixPQUFJcTRCLGFBQWdCNk0sRUFDWjdNLEVBR1ksaUJBQVRBLEdBQ1ZBLEVBQU8sSUFBSTZNLEVBQUs3TSxHQUNoQm9MLEVBQU16akMsR0FBUXE0QixFQUNQQSxHQUlKcUwsRUFBTTFqQyxJQUFTNG5DLElBQVdMLElBQVlNLEVBQU9OLEVBQVE3RCxFQUFNMWpDLEdBQU91bkMsTUFDckVsUCxFQUFPb0wsRUFBTXpqQyxHQUFRLElBQUlrbEMsR0FDcEJFLEtBQUt5QyxHQUNWeFAsRUFBS3I0QixLQUFPdW9CLEVBQU12b0IsR0FDWHE0QixHQUdELEtBbUJSLFNBQVN5UCxFQUFTenVCLEdBQ2pCLElBQUlyYixFQUFHd2lDLEVBQU91SCxFQUFTQyxFQU12QixJQUp1QixpQkFBWjN1QixJQUNWQSxFQUFVLENBQUNBLElBR1ByYixFQUFJLEVBQUdBLEVBQUlxYixFQUFRbmIsT0FBUUYsSUFHL0IrcEMsRUFBVWYsR0FGVnhHLEVBQVFubkIsRUFBUXJiLEdBQUdrQixNQUFNLE1BRUssSUFDOUI4b0MsRUFBVWhCLEVBQWN4RyxFQUFNLElBRTlCa0QsRUFBTXFFLEdBQVdDLEVBQ2pCemYsRUFBTXdmLEdBQVd2SCxFQUFNLEdBRXZCa0QsRUFBTXNFLEdBQVdELEVBQ2pCeGYsRUFBTXlmLEdBQVd4SCxFQUFNLEdBMER6QixTQUFTeUgsRUFBYTMzQixHQUNyQixJQUFJNDNCLEVBQTRCLE1BQVQ1M0IsRUFBRTZCLElBQXVCLE1BQVQ3QixFQUFFNkIsR0FDekMsU0FBVTdCLEVBQUVzTixTQUFrQmxkLElBQVg0UCxFQUFFK0IsTUFBd0I2MUIsR0FHOUMsU0FBU3JFLEVBQVVzRSxHQUNLLG9CQUFabjFCLFNBQW9ELG1CQUFsQkEsUUFBUXJHLE9BQ3BEcUcsUUFBUXJHLE1BQU13N0IsR0FRaEIsU0FBU0MsRUFBSTNrQyxHQUNaLElBQUk0UCxFQUFPelIsTUFBTXZELFVBQVVpSixNQUFNL0ksS0FBS04sVUFBVyxHQUFJLEdBQ3BEK0IsRUFBTy9CLFVBQVVBLFVBQVVDLE9BQVMsR0FDcENtNkIsRUFBT2tQLEVBQVF2bkMsR0FDZmcvQixFQUFPdUUsRUFBT3AwQixJQUFJM1EsTUFBTSxLQUFNNlUsR0FRL0IsT0FOSWdsQixJQUFTa0wsRUFBTzN3QixTQUFTblAsSUFBVXdrQyxFQUFZakosSUFDbERBLEVBQUkzYixJQUFJZ1YsRUFBS2dRLE1BQU1ySixHQUFNLFdBRzFCQSxFQUFJb0osR0FBR3BvQyxHQUVBZy9CLEdBemdCSitFLEVBQVEsR0FBZ0IsSUFBVkEsR0FBZUMsRUFBUSxJQUN4Q0gsRUFBUyx3RUFBMEVOLEVBQU9aLFFBQVUsc0JBdUdyR3VDLEVBQUs3bUMsVUFBWSxDQUNoQittQyxLQUFPLFNBQVVrRCxHQUNoQjdwQyxLQUFLdUIsS0FBYXNvQyxFQUFTdG9DLEtBQzNCdkIsS0FBS3VtQyxNQUFhc0QsRUFBU3RELE1BQzNCdm1DLEtBQUtvbUMsT0FBYXlELEVBQVN6RCxPQUMzQnBtQyxLQUFLbW1DLFFBQWEwRCxFQUFTMUQsUUFDM0JubUMsS0FBS3dtQyxXQUFhcUQsRUFBU3JELFlBRzVCc0QsT0FBUyxTQUFVQyxHQUNsQixJQUVDeHFDLEVBRkdELEdBQVV5cUMsRUFDYjNELEVBQVNwbUMsS0FBS29tQyxPQUdmLElBQUs3bUMsRUFBSSxFQUFHQSxFQUFJNm1DLEVBQU8zbUMsT0FBUUYsSUFDOUIsR0FBSUQsRUFBUzhtQyxFQUFPN21DLEdBQ25CLE9BQU9BLEdBS1YybEMsVUFBWSxXQUNYLElBQUk4RSxFQUFZaHFDLEtBQUt1QixLQUNyQixPQUFPcEMsT0FBTzJHLEtBQUtvL0IsR0FBV2hoQyxRQUFPLFNBQVUrbEMsR0FDOUMsT0FBNkQsSUFBdEQvRSxFQUFVK0UsR0FBY2pGLE1BQU1saUMsUUFBUWtuQyxPQUkvQ0osTUFBUSxTQUFVRyxHQUNqQixJQUlDaFcsRUFBUW1XLEVBQVlDLEVBQVk1cUMsRUFKN0JELEdBQVd5cUMsRUFDZDVELEVBQVVubUMsS0FBS21tQyxRQUNmQyxFQUFVcG1DLEtBQUtvbUMsT0FDZnB2QixFQUFVb3ZCLEVBQU8zbUMsT0FBUyxFQUczQixJQUFLRixFQUFJLEVBQUdBLEVBQUl5WCxFQUFLelgsSUFXcEIsR0FWQXcwQixFQUFhb1MsRUFBUTVtQyxHQUNyQjJxQyxFQUFhL0QsRUFBUTVtQyxFQUFJLEdBQ3pCNHFDLEVBQWFoRSxFQUFRNW1DLEVBQUlBLEVBQUksRUFBSUEsR0FFN0J3MEIsRUFBU21XLEdBQWNQLEVBQUdTLHFCQUM3QnJXLEVBQVNtVyxFQUNDblcsRUFBU29XLEdBQWNSLEVBQUdVLHFCQUNwQ3RXLEVBQVNvVyxHQUdON3FDLEVBQVM4bUMsRUFBTzdtQyxHQUFlLElBQVR3MEIsRUFDekIsT0FBT29TLEVBQVE1bUMsR0FJakIsT0FBTzRtQyxFQUFRbnZCLElBR2hCMlQsS0FBTyxTQUFVdFUsR0FDaEIsT0FBT3JXLEtBQUt1bUMsTUFBTXZtQyxLQUFLOHBDLE9BQU96ekIsS0FHL0IwZCxPQUFTLFNBQVUxZCxHQUVsQixPQURBK3VCLEVBQVMsOERBQ0ZwbEMsS0FBS21tQyxRQUFRbm1DLEtBQUs4cEMsT0FBT3p6QixLQUdqQzRkLFVBQVksU0FBVTVkLEdBQ3JCLE9BQU9yVyxLQUFLbW1DLFFBQVFubUMsS0FBSzhwQyxPQUFPenpCLE1BK0NsQzh3QixFQUFVdm5DLFVBQVVtcEMsY0FBZ0IsU0FBVXVCLEdBQzdDdHFDLEtBQUtvbkMsYUFBZWpsQyxLQUFLQyxJQUFJcEMsS0FBSzQ1QixLQUFLM0YsVUFBVXFXLEVBQVN0RCxJQUFNc0QsRUFBU3ZXLFFBQ3JFL3pCLEtBQUs0NUIsS0FBS2pQLEtBQUsyZixFQUFTdEQsSUFBSXRoQyxRQUFRLFVBQVcsTUFBUTRrQyxFQUFTM2YsTUFDbkUzcUIsS0FBS3FuQyxhQWtUUHNDLEVBQUd6RixRQTdoQlcsU0E4aEJkeUYsRUFBR1ksWUFBZSxHQUNsQlosRUFBR2EsT0FBZXhGLEVBQ2xCMkUsRUFBR2MsT0FBZXhGLEVBQ2xCMEUsRUFBR2UsT0FBZTVnQixFQUNsQjZmLEVBQUdnQixXQUFhekYsRUFDaEJ5RSxFQUFHL2tCLElBQWVva0IsRUFDbEJXLEVBQUdQLEtBQWVDLEVBQ2xCTSxFQUFHaUIsS0FyREgsU0FBbUIzakMsR0FDbEIraEMsRUFBUS9oQyxFQUFLKzlCLE9BQ2JxRSxFQUFRcGlDLEVBQUtnK0IsT0F6Q2QsU0FBdUJoK0IsR0FDdEIsSUFBSTFILEVBQUcwcUMsRUFBY1ksRUFBZXBxQyxFQUNwQyxHQUFLd0csR0FBU0EsRUFBS3hILE9BQ25CLElBQUtGLEVBQUksRUFBR0EsRUFBSTBILEVBQUt4SCxPQUFRRixJQUU1QjBxQyxHQURBeHBDLEVBQVF3RyxFQUFLMUgsR0FBR2tCLE1BQU0sTUFDRCxHQUFHcVksY0FDeEIreEIsRUFBZ0JwcUMsRUFBTSxHQUFHQSxNQUFNLEtBQy9CeWtDLEVBQVUrRSxHQUFnQixJQUFJckQsRUFDN0JxRCxFQUNBWSxHQWlDRkMsQ0FBYTdqQyxFQUFLaStCLFdBQ2xCeUUsRUFBR1ksWUFBY3RqQyxFQUFLaTlCLFNBa0R2QnlGLEVBQUcvUCxLQUFla1AsRUFDbEJhLEVBQUdvQixXQWhESCxTQUFTQSxFQUFZeHBDLEdBS3BCLE9BSkt3cEMsRUFBV0MsZUFDZkQsRUFBV0MsY0FBZSxFQUN6QjVGLEVBQVMseUJBQTJCN2pDLEVBQU8sdURBQXlEQSxFQUFPLFNBRXBHdW5DLEVBQVF2bkMsSUE0Q2xCb29DLEVBQUdzQixNQWhNSCxTQUFnQkMsR0FJZixPQUhLbkcsSUFBZW1HLElBQ25CbkcsRUFBY2tELEtBRVJsRCxHQTZMUjRFLEVBQUc3ZixNQXJJSCxXQUNDLElBQUl2cUIsRUFBR2doQyxFQUFNLEdBRWIsSUFBS2hoQyxLQUFLdXFCLEVBQ0xBLEVBQU1qcUIsZUFBZU4sS0FBT3lsQyxFQUFNemxDLElBQU15bEMsRUFBTUMsRUFBTTFsQyxNQUFRdXFCLEVBQU12cUIsSUFDckVnaEMsRUFBSWowQixLQUFLd2QsRUFBTXZxQixJQUlqQixPQUFPZ2hDLEVBQUkxa0IsUUE2SFo4dEIsRUFBR2xELEtBQWVBLEVBQ2xCa0QsRUFBR3pELE9BQWVBLEVBQ2xCeUQsRUFBR2pFLGFBQWVBLEVBQ2xCaUUsRUFBR0gsWUFBZUEsRUFDbEJHLEVBQUdVLG9CQUF1QixFQUMxQlYsRUFBR1Msc0JBQXVCLEVBQzFCVCxFQUFHekUsVUFoSUgsV0FDQyxPQUFPL2xDLE9BQU8yRyxLQUFLby9CLElBZ0lwQnlFLEVBQUd3QixnQkFyRkgsU0FBeUJDLEVBQVNDLEdBTGxDLElBQXFCOXBDLEVBUXBCLEdBUEFBLEdBRG9CQSxFQU1DNnBDLEdBTFR0eUIsZ0JBS1pzeUIsRUFKT2xHLEVBQVUzakMsSUFBUyxNQU1aLE9BQU8sS0FFckIsSUFBSXlqQyxFQUFRb0csRUFBUXBHLE1BQU1ucEIsT0FFMUIsT0FBSXd2QixFQUNJckcsRUFBTS9nQyxLQUFJLFNBQVUrbEMsR0FFMUIsTUFBTyxDQUNOem9DLEtBQU15b0MsRUFDTmpXLE9BSFUrVSxFQUFRa0IsR0FHTC9WLFVBQVUsSUFBSWxrQixVQUt2QmkxQixHQTBFUixJQThEeUJzRyxFQTlEckJyN0IsRUFBSzYwQixFQUFPNzBCLEdBZ0RoQixTQUFTczdCLEVBQVVELEdBQ2xCLE9BQU8sV0FDTixPQUFJdHJDLEtBQUt3ckMsR0FBYXhyQyxLQUFLd3JDLEdBQUc3Z0IsS0FBSzNxQixNQUM1QnNyQyxFQUFJeHJDLEtBQUtFLE9BSWxCLFNBQVN5ckMsRUFBZUgsR0FDdkIsT0FBTyxXQUVOLE9BREF0ckMsS0FBS3dyQyxHQUFLLEtBQ0hGLEVBQUl2ckMsTUFBTUMsS0FBTVIsWUF4RHpCc2xDLEVBQU82RSxHQUFLQSxFQUVaN0UsRUFBTzRHLFlBQWMsS0FFckI1RyxFQUFPNXdCLGFBQWUsU0FBVW1DLEVBQUttRyxHQUNwQyxJQUNDdVgsRUFERzZGLEVBQU9rTCxFQUFPNEcsWUFVbEIsUUFQZXpwQyxJQUFYb1UsRUFBSW0xQixLQUNINVIsR0FBUTRQLEVBQVluekIsS0FBU0EsRUFBSXhDLFNBQ3BDd0MsRUFBSWhFLEdBQUt5eUIsRUFBT3AwQixJQUFJMkYsRUFBSThJLElBQUk5TSxHQUM1QmdFLEVBQUkzRixNQUFNa1UsSUFBSWdWLEVBQUtnUSxNQUFNdnpCLEdBQU0sWUFFaENBLEVBQUltMUIsR0FBSzVSLEdBRU52akIsRUFBSW0xQixHQUtQLEdBSkF6WCxFQUFTMWQsRUFBSW0xQixHQUFHdlgsVUFBVTVkLEdBQ3RCbFUsS0FBS0MsSUFBSTJ4QixHQUFVLEtBQ3RCQSxHQUFrQixTQUVHOXhCLElBQWxCb1UsRUFBSTRkLFVBQXlCLENBQ2hDLElBQUkwWCxFQUFJdDFCLEVBQUltMUIsR0FDWm4xQixFQUFJNGQsV0FBV0YsRUFBUXZYLEdBQ3ZCbkcsRUFBSW0xQixHQUFLRyxPQUVUdDFCLEVBQUl1akIsS0FBSzdGLEVBQVF2WCxJQUtwQnZNLEVBQUcwNUIsR0FBSyxTQUFVcG9DLEVBQU1pYixHQUN2QixHQUFJamIsRUFBTSxDQUNULEdBQW9CLGlCQUFUQSxFQUNWLE1BQU0sSUFBSXVULE1BQU0sd0NBQTBDdlQsRUFBTyxZQUFjQSxFQUFPLEtBUXZGLE9BTkF2QixLQUFLd3JDLEdBQUsxQyxFQUFRdm5DLEdBQ2R2QixLQUFLd3JDLEdBQ1IxRyxFQUFPNXdCLGFBQWFsVSxLQUFNd2MsR0FFMUI0b0IsRUFBUyxtQ0FBcUM3akMsRUFBTyw0REFFL0N2QixLQUVSLEdBQUlBLEtBQUt3ckMsR0FBTSxPQUFPeHJDLEtBQUt3ckMsR0FBR2pxQyxNQXdCL0IwTyxFQUFHNnZCLFNBQVl5TCxFQUFTdDdCLEVBQUc2dkIsVUFDM0I3dkIsRUFBRzR2QixTQUFZMEwsRUFBU3Q3QixFQUFHNHZCLFVBQzNCNXZCLEVBQUdTLElBQVkrNkIsRUFBY3g3QixFQUFHUyxLQUNoQ1QsRUFBRzBrQixNQUFZOFcsRUFBY3g3QixFQUFHMGtCLE9BQ2hDMWtCLEVBQUdna0IsV0FYc0JxWCxFQVdLcjdCLEVBQUdna0IsVUFWekIsV0FFTixPQURJejBCLFVBQVVDLE9BQVMsSUFBR08sS0FBS3dyQyxHQUFLLE1BQzdCRixFQUFJdnJDLE1BQU1DLEtBQU1SLGFBVXpCc2xDLEVBQU82RSxHQUFHaUMsV0FBYSxTQUFTcnFDLEdBSy9CLE9BSkkrakMsRUFBUSxHQUFnQixJQUFWQSxHQUFlQyxFQUFRLElBQ3hDSCxFQUFTLHFGQUF1Rk4sRUFBT1osUUFBVSxLQUVsSFksRUFBTzRHLFlBQWNucUMsRUFBT3VuQyxFQUFRdm5DLEdBQVEsS0FDckN1akMsR0FJUixJQUFJOXhCLEVBQW1COHhCLEVBQU85eEIsaUJBWTlCLE1BWHlELG1CQUFyRDdULE9BQU9TLFVBQVVzSSxTQUFTcEksS0FBS2tULElBRWxDQSxFQUFpQjFHLEtBQUssTUFDdEIwRyxFQUFpQjFHLEtBQUssT0FDWjBHLElBRVZBLEVBQWlCdzRCLEdBQUssTUFLaEIxRyxDQUNSLEVBN3FCbUM3MUIsRUFBT21iLFFBQ3hDbmIsVUFBaUIyMUIsRUFBUWlILElBSXpCakgsRUFBUUMsRUFBS0MsdzhudkJDZkY3MUIsVUFBaUI0OEIsSUFDdkJsQyxHQUFHaUIsS0FBS2tCLHlCQ0diLElBQWtCbEgsYUFLREU7O0FBSWYsSUFBSWlILEVBQ0ksd0VBQXdFdHJDLE1BQ3BFLEtBRVJ1ckMsRUFBZ0IsQ0FDWixRQUNBLFFBQ0EsU0FDQSxTQUNBLFNBQ0EsU0FDQSxTQUNBRCxFQUFZLEdBQ1pBLEVBQVksR0FDWkEsRUFBWSxJQUVwQixTQUFTRSxFQUFVdjFCLEVBQVE0RCxFQUFlM2EsRUFBSzZhLEdBQzNDLElBQUk1VyxFQUFTLEdBQ2IsT0FBUWpFLEdBQ0osSUFBSyxJQUNELE9BQU82YSxFQUFXLG9CQUFzQixrQkFDNUMsSUFBSyxLQUNENVcsRUFBUzRXLEVBQVcsV0FBYSxXQUNqQyxNQUNKLElBQUssSUFDRCxPQUFPQSxFQUFXLFdBQWEsV0FDbkMsSUFBSyxLQUNENVcsRUFBUzRXLEVBQVcsV0FBYSxZQUNqQyxNQUNKLElBQUssSUFDRCxPQUFPQSxFQUFXLFNBQVcsUUFDakMsSUFBSyxLQUNENVcsRUFBUzRXLEVBQVcsU0FBVyxTQUMvQixNQUNKLElBQUssSUFDRCxPQUFPQSxFQUFXLFNBQVcsUUFDakMsSUFBSyxLQUNENVcsRUFBUzRXLEVBQVcsU0FBVyxTQUMvQixNQUNKLElBQUssSUFDRCxPQUFPQSxFQUFXLFlBQWMsV0FDcEMsSUFBSyxLQUNENVcsRUFBUzRXLEVBQVcsWUFBYyxZQUNsQyxNQUNKLElBQUssSUFDRCxPQUFPQSxFQUFXLFNBQVcsUUFDakMsSUFBSyxLQUNENVcsRUFBUzRXLEVBQVcsU0FBVyxTQUl2QyxPQURBNVcsRUFHSixTQUFzQjhTLEVBQVE4RCxHQUMxQixPQUFPOUQsRUFBUyxHQUNWOEQsRUFDSXd4QixFQUFjdDFCLEdBQ2RxMUIsRUFBWXIxQixHQUNoQkEsRUFSR3cxQixDQUFheDFCLEVBQVE4RCxHQUFZLElBQU01VyxFQUN6Q0EsRUFvRVgsT0ExRFNraEMsRUFBT3BhLGFBQWEsS0FBTSxDQUMvQnZLLE9BQVEsMkdBQTJHMWYsTUFDL0csS0FFSnlmLFlBQ0ksdUVBQXVFemYsTUFDbkUsS0FFUjRrQixTQUNJLHFFQUFxRTVrQixNQUNqRSxLQUVSMmtCLGNBQWUsdUJBQXVCM2tCLE1BQU0sS0FDNUMwa0IsWUFBYSx1QkFBdUIxa0IsTUFBTSxLQUMxQzBYLGVBQWdCLENBQ1pJLEdBQUksUUFDSkQsSUFBSyxXQUNMRSxFQUFHLGFBQ0hDLEdBQUksbUJBQ0pDLElBQUssZ0NBQ0xDLEtBQU0sc0NBQ04yVCxFQUFHLFdBQ0g2ZixHQUFJLGNBQ0pDLElBQUssMkJBQ0xDLEtBQU0saUNBRVZqMkIsU0FBVSxDQUNOTixRQUFTLG9CQUNUQyxRQUFTLHNCQUNUQyxTQUFVLGdCQUNWQyxRQUFTLG1CQUNUQyxTQUFVLDRCQUNWQyxTQUFVLEtBRWRrRSxhQUFjLENBQ1ZmLE9BQVEsWUFDUkMsS0FBTSxZQUNOQyxFQUFHeXlCLEVBQ0h4eUIsR0FBSXd5QixFQUNKcDZCLEVBQUdvNkIsRUFDSHZ5QixHQUFJdXlCLEVBQ0p0eUIsRUFBR3N5QixFQUNIcnlCLEdBQUlxeUIsRUFDSnB5QixFQUFHb3lCLEVBQ0hueUIsR0FBSW15QixFQUNKaHlCLEVBQUdneUIsRUFDSC94QixHQUFJK3hCLEVBQ0o5eEIsRUFBRzh4QixFQUNIN3hCLEdBQUk2eEIsR0FFUjdpQix1QkFBd0IsWUFDeEIzUixRQUFTLE1BQ1RtTSxLQUFNLENBQ0ZMLElBQUssRUFDTEMsSUFBSyxJQU1oQixFQWhJeUNvaEIsRUFBUWlILHlCQ0ZoRCxJQUFrQmpILGFBS0RFLEdBbUVmLE9BL0RTQSxFQUFPcGEsYUFBYSxLQUFNLENBQy9CdkssT0FBUSx3RkFBd0YxZixNQUM1RixLQUVKeWYsWUFBYSxrREFBa0R6ZixNQUFNLEtBQ3JFNGtCLFNBQVUsb0RBQW9ENWtCLE1BQU0sS0FDcEUya0IsY0FBZSw4QkFBOEIza0IsTUFBTSxLQUNuRDBrQixZQUFhLHVCQUF1QjFrQixNQUFNLEtBQzFDMFgsZUFBZ0IsQ0FDWkksR0FBSSxRQUNKRCxJQUFLLFdBQ0xFLEVBQUcsYUFDSEMsR0FBSSxjQUNKQyxJQUFLLDBCQUNMQyxLQUFNLCtCQUNOeXpCLElBQUssbUJBQ0xDLEtBQU0sd0JBRVZqMkIsU0FBVSxDQUNOTixRQUFTLFlBQ1RDLFFBQVMsZUFDVEUsUUFBUyxZQUNURCxTQUFVLGVBQ1ZFLFNBQVUsaUJBQ1ZDLFNBQVUsS0FFZGtFLGFBQWMsQ0FDVmYsT0FBUSxRQUNSQyxLQUFNLGVBQ05DLEVBQUcsaUJBQ0hDLEdBQUksY0FDSjVILEVBQUcsV0FDSDZILEdBQUksYUFDSkMsRUFBRyxXQUNIQyxHQUFJLFlBQ0pDLEVBQUcsU0FDSEMsR0FBSSxXQUNKRyxFQUFHLFdBQ0hDLEdBQUksYUFDSkMsRUFBRyxTQUNIQyxHQUFJLFNBRVJnUCx1QkFBd0IsbUJBQ3hCM1IsUUFBUyxTQUFVZixHQUNmLElBQUlqSCxFQUFJaUgsRUFBUyxHQVdqQixPQUFPQSxHQVQ2QixNQUF4QkEsRUFBUyxJQUFPLElBQ2QsS0FDTSxJQUFOakgsR0FFTSxJQUFOQSxFQURBLEtBSUEsT0FJbEJtVSxLQUFNLENBQ0ZMLElBQUssRUFDTEMsSUFBSyxJQU1oQixFQXhFeUNvaEIsRUFBUWlILHlCQ0FoRCxJQUFrQmpILGFBS0RFOztBQUlmLFNBQVN3SCxFQUFvQjUxQixFQUFRNEQsRUFBZTNhLEVBQUs2YSxHQUNyRCxJQUFJbEssRUFBUyxDQUNUdUIsRUFBRyxDQUFDLGNBQWUsZ0JBQ25COEgsRUFBRyxDQUFDLGNBQWUsZ0JBQ25CRSxFQUFHLENBQUMsVUFBVyxhQUNmQyxHQUFJLENBQUNwRCxFQUFTLFFBQVNBLEVBQVMsVUFDaENxRCxFQUFHLENBQUMsYUFBYyxlQUNsQkUsRUFBRyxDQUFDLFlBQWEsZUFDakJDLEdBQUksQ0FBQ3hELEVBQVMsVUFBV0EsRUFBUyxZQUNsQ3lELEVBQUcsQ0FBQyxXQUFZLGNBQ2hCQyxHQUFJLENBQUMxRCxFQUFTLFNBQVVBLEVBQVMsWUFFckMsT0FBTzRELEVBQWdCaEssRUFBTzNRLEdBQUssR0FBSzJRLEVBQU8zUSxHQUFLLEdBMkR4RCxPQXhEU21sQyxFQUFPcGEsYUFBYSxLQUFNLENBQy9CdkssT0FBUSxxRkFBcUYxZixNQUN6RixLQUVKeWYsWUFDSSw2REFBNkR6ZixNQUFNLEtBQ3ZFOHJDLGtCQUFrQixFQUNsQmxuQixTQUNJLDhEQUE4RDVrQixNQUMxRCxLQUVSMmtCLGNBQWUsOEJBQThCM2tCLE1BQU0sS0FDbkQwa0IsWUFBYSx1QkFBdUIxa0IsTUFBTSxLQUMxQytyQyxvQkFBb0IsRUFDcEJyMEIsZUFBZ0IsQ0FDWkksR0FBSSxRQUNKRCxJQUFLLFdBQ0xFLEVBQUcsYUFDSEMsR0FBSSxlQUNKQyxJQUFLLHFCQUNMQyxLQUFNLDRCQUVWdkMsU0FBVSxDQUNOTixRQUFTLHNCQUNUSyxTQUFVLElBQ1ZKLFFBQVMsdUJBQ1RDLFNBQVUscUJBQ1ZDLFFBQVMsd0JBQ1RDLFNBQVUsZ0NBRWRtRSxhQUFjLENBQ1ZmLE9BQVEsUUFDUkMsS0FBTSxTQUNOQyxFQUFHLG9CQUNIQyxHQUFJLGNBQ0o1SCxFQUFHeTZCLEVBQ0g1eUIsR0FBSSxhQUNKQyxFQUFHMnlCLEVBQ0gxeUIsR0FBSSxhQUNKQyxFQUFHeXlCLEVBQ0h4eUIsR0FBSXd5QixFQUNKdnlCLEVBQUd1eUIsRUFDSHR5QixHQUFJLFlBQ0pDLEVBQUdxeUIsRUFDSHB5QixHQUFJb3lCLEVBQ0pueUIsRUFBR215QixFQUNIbHlCLEdBQUlreUIsR0FFUmxqQix1QkFBd0IsWUFDeEIzUixRQUFTLE1BQ1RtTSxLQUFNLENBQ0ZMLElBQUssRUFDTEMsSUFBSyxJQU1oQixFQWhGeUNvaEIsRUFBUWlILE9DUmxELE1BQU1ZLEdBQWUsQ0FDbkJDLEdBQUksQ0FDRnBxQyxRQUFTLFVBQ1QsNEJBQTZCLDBCQUM3Qix1QkFBd0IsMEJBQ3hCLGdDQUFpQywyQ0FDakMsc0NBQ0Usc0RBQ0YscUNBQ0UscURBQ0ZxcUMsU0FBVSxPQUNWQyxRQUFTLFVBQ1RDLEtBQU0sU0FDTkMsa0JBQW1CLGtCQUNuQkMsSUFBSyxNQUNMQyxPQUFRLFlBQ1IscUJBQXNCLFVBQ3RCLHVCQUF3Qix1QkFDeEJDLGdCQUFpQixvQkFDakJDLE9BQVEsVUFDUiw2QkFBOEIsd0NBQzlCQyxVQUFXLFVBQ1gvckMsWUFBYSxPQUNiLGNBQWUsa0JBQ2YsbUJBQW9CLGlCQUNwQmdzQyxVQUFXLFlBQ1hDLE1BQU8sUUFDUCxlQUFnQix3QkFDaEJuc0MsT0FBUSxRQUNSLHVCQUF3QixRQUN4Qm9zQyxhQUFjLG1CQUNkQyxRQUFTLFdBQ1QsZUFBZ0IsTUFDaEJDLEtBQU0sTUFDTjltQyxPQUFRLFFBQ1IsMEJBQTJCLDJDQUMzQixzQkFBdUIsUUFDdkIscUJBQXNCLHNDQUN0QiwyQkFBNEIsbUJBQzVCLDJDQUNFLDBDQUNGLG9CQUFxQixxQkFDckIsZ0JBQWlCLHlDQUNqQixzQkFBdUIsb0JBQ3ZCLGtCQUFtQixxQkFDbkIsMkJBQTRCLCtCQUM1QixnREFDRSwyREFDRiwrQ0FDRSwwREFDRiwrQ0FDRSw4RkFDRix5QkFBMEIsMENBQzFCLGdDQUNFLDRDQUNGLDRCQUE2QixrQ0FDN0IrbUMsT0FBUSxTQUNSQyxPQUFRLFNBQ1JDLFFBQVMsVUFDVGxsQyxLQUFNLGNBQ04sZ0JBQWlCLDRDQUNqQixvQkFBcUIsa0NBQ3JCLHlCQUEwQiwwQkFDMUIscUJBQXNCLHNDQUN0Qix1QkFBd0Isd0NBQ3hCLHFCQUFzQixxQ0FDdEIsV0FBWSxXQUNaLGNBQWUsWUFDZm1sQyxLQUFNLGNBQ04sbUJBQW9CLDZCQUNwQixrQkFBbUIsOEJBQ25CLDRCQUE2QixrQ0FDN0JDLE1BQU8sUUFDUCxZQUFhLGVBQ2JDLE1BQU8sU0FDUEMsTUFBTyxPQUVUQyxHQUFJLENBQ0YxckMsUUFBUyxVQUNULDRCQUE2Qiw2QkFDN0IsdUJBQXdCLGdCQUN4QixnQ0FBaUMsMkNBQ2pDLHNDQUNFLHNEQUNGLHFDQUNFLHFEQUNGcXFDLFNBQVUsU0FDVkMsUUFBUyxVQUNUQyxLQUFNLE9BQ05vQixTQUFVLHdCQUNWbkIsa0JBQW1CLGVBQ25CQyxJQUFLLE1BQ0xDLE9BQVEsU0FDUmtCLFFBQVMsY0FDVCxxQkFBc0IsUUFDdEIsdUJBQXdCLHVCQUN4QmpCLGdCQUFpQixtQkFDakJDLE9BQVEsU0FDUiw2QkFBOEIsMkNBQzlCQyxVQUFXLFlBQ1gvckMsWUFBYSxjQUNiLGNBQWUscUJBQ2YsbUJBQW9CLHlCQUNwQmdzQyxVQUFXLFlBQ1hDLE1BQU8sUUFDUCxlQUFnQixlQUNoQm5zQyxPQUFRLFFBQ1IsdUJBQXdCLFFBQ3hCb3NDLGFBQWMsZ0JBQ2RDLFFBQVMsYUFDVCxlQUFnQixJQUNoQlksU0FBVSxXQUNWWCxLQUFNLFFBQ05ZLFNBQVUsaUJBQ1YxbkMsT0FBUSxTQUNSLDBCQUEyQixrQ0FDM0Isc0JBQXVCLFNBQ3ZCLHFCQUFzQixvQ0FDdEIsMkJBQTRCLG9CQUM1QiwyQ0FDRSxpREFDRixvQkFBcUIsY0FDckIsZ0JBQWlCLCtCQUNqQixzQkFBdUIsZUFDdkIsa0JBQW1CLGtCQUNuQiwyQkFBNEIsK0JBQzVCLGdEQUNFLDJEQUNGLCtDQUNFLDBEQUNGLCtDQUNFLDhGQUNGLHlCQUEwQiwwQ0FDMUIsZ0NBQ0UsNENBQ0YsNEJBQTZCLG1DQUM3QittQyxPQUFRLFNBQ1JDLE9BQVEsUUFDUkMsUUFBUyxVQUNUbGxDLEtBQU0sT0FDTixnQkFBaUIsMEJBQ2pCLHlCQUEwQiw2QkFDMUIsb0JBQXFCLDZCQUNyQix5QkFBMEIsNEJBQzFCLHFCQUFzQixrQ0FDdEIsdUJBQXdCLG1DQUN4QixxQkFBc0IsOEJBQ3RCLHFCQUFzQixzQkFDdEIsV0FBWSxXQUNaLGNBQWUsY0FDZm1sQyxLQUFNLE9BQ05TLE1BQU8sUUFDUCxtQkFBb0IsdUJBQ3BCLGtCQUFtQiwyQkFDbkIsNEJBQTZCLDRCQUM3QlIsTUFBTyxRQUNQLFlBQWEsWUFDYkMsTUFBTyxZQUNQQyxNQUFPLFlBRVRPLEdBQUksQ0FDRmhzQyxRQUFTLFNBQ1QsNEJBQTZCLDRCQUM3Qix1QkFBd0Isa0JBQ3hCLGdDQUNFLGtEQUNGLHNDQUNFLHdEQUNGLHFDQUNFLHlEQUNGcXFDLFNBQVUsWUFDVkMsUUFBUyxVQUNUQyxLQUFNLFdBQ04wQixxQkFBc0IsYUFDdEJOLFNBQVUsc0JBQ1ZsQixJQUFLLFFBQ0xDLE9BQVEsVUFDUmtCLFFBQVMscUJBQ1QscUJBQXNCLFdBQ3RCLHVCQUF3Qix3QkFDeEJqQixnQkFBaUIseUJBQ2pCQyxPQUFRLFNBQ1IsNkJBQThCLG9DQUM5QkMsVUFBVyxZQUNYL3JDLFlBQWEsWUFDYmdzQyxVQUFXLFdBQ1hDLE1BQU8sU0FDUCxlQUFnQixnQkFDaEIsY0FBZSxjQUNmLG1CQUFvQixZQUNwQm5zQyxPQUFRLGNBQ1IsdUJBQXdCLGNBQ3hCb3NDLGFBQWMsY0FDZEMsUUFBUyxjQUNULGVBQWdCLE1BQ2hCWSxTQUFVLFVBQ1ZYLEtBQU0sT0FDTlksU0FBVSxvQkFDVjFuQyxPQUFRLE9BQ1IsMEJBQTJCLHFDQUMzQixzQkFBdUIsTUFDdkIscUJBQXNCLHVDQUN0QiwyQkFBNEIsa0JBQzVCLDJDQUNFLG9EQUNGLG9CQUFxQixjQUNyQixnQkFBaUIsd0NBQ2pCLHNCQUF1QixvQkFDdkIsMkJBQTRCLGdDQUM1QixnREFDRSwwREFDRiwrQ0FDRSxxREFDRiwrQ0FDRSxnRUFDRix5QkFBMEIsZ0NBQzFCLGdDQUFpQyxrQ0FDakMsNEJBQTZCLHVDQUM3QixrQkFBbUIsV0FDbkIrbUMsT0FBUSxPQUNSQyxPQUFRLFFBQ1JDLFFBQVMsUUFDVGxsQyxLQUFNLFVBQ04sZ0JBQWlCLDJCQUNqQix5QkFBMEIsOEJBQzFCLG9CQUFxQiwrQkFDckIseUJBQTBCLDBCQUMxQixxQkFBc0IsMkJBQ3RCLHVCQUF3Qiw2QkFDeEIscUJBQXNCLGdDQUN0QixxQkFBc0Isd0JBQ3RCLFdBQVksYUFDWixjQUFlLGVBQ2ZtbEMsS0FBTSxjQUNOUyxNQUFPLFFBQ1AsbUJBQW9CLDJCQUNwQixrQkFBbUIsNEJBQ25CLDRCQUE2QiwyQkFDN0JSLE1BQU8sU0FDUCxZQUFhLFlBQ2JDLE1BQU8saUJBQ1BDLE1BQU8sVUFFVFMsR0FBSSxDQUNGbHNDLFFBQVMsU0FDVCw0QkFBNkIsOEJBQzdCLHVCQUF3QixxQkFDeEIsZ0NBQ0UsZ0RBQ0Ysc0NBQ0UsMkRBQ0YscUNBQ0UsMkRBQ0ZxcUMsU0FBVSxPQUNWQyxRQUFTLFdBQ1RDLEtBQU0sV0FDTkMsa0JBQW1CLG9CQUNuQm1CLFNBQVUsa0NBQ1ZsQixJQUFLLFFBQ0xDLE9BQVEsU0FDUmtCLFFBQVMsbUJBQ1QscUJBQXNCLE1BQ3RCLHVCQUF3QixvQkFDeEJqQixnQkFBaUIscUJBQ2pCQyxPQUFRLFVBQ1IsNkJBQThCLCtCQUM5QkMsVUFBVyxhQUNYL3JDLFlBQWEsY0FDYmdzQyxVQUFXLFVBQ1hDLE1BQU8sUUFDUCxlQUFnQixnQkFDaEIsbUJBQW9CLDJCQUNwQixjQUFlLDRCQUNmbnNDLE9BQVEsZUFDUix1QkFBd0IsZUFDeEJvc0MsYUFBYyxlQUNkQyxRQUFTLFlBQ1QsZUFBZ0IsTUFDaEJZLFNBQVUsWUFDVlgsS0FBTSxNQUNOWSxTQUFVLHFCQUNWMW5DLE9BQVEsTUFDUiwwQkFBMkIsdUNBQzNCLHNCQUF1QixNQUN2QixxQkFBc0IseUNBQ3RCLDJCQUE0QixvQkFDNUIsMkNBQ0UseUNBQ0Ysb0JBQXFCLG1CQUNyQixnQkFBaUIsMENBQ2pCLHNCQUF1QixxQkFDdkIsa0JBQW1CLGVBQ25CLDJCQUE0QixxQ0FDNUIsZ0RBQ0Usa0VBQ0YsK0NBQ0Usc0RBQ0YsK0NBQ0UsMEVBQ0YseUJBQTBCLDRCQUMxQiw0QkFBNkIsK0JBQzdCK21DLE9BQVEsT0FDUkMsT0FBUSxRQUNSQyxRQUFTLFVBQ1RsbEMsS0FBTSxZQUNOLGdCQUFpQiwrQkFDakIseUJBQTBCLDZCQUMxQixvQkFBcUIsbUNBQ3JCLHlCQUEwQiwwQkFDMUIscUJBQXNCLCtCQUN0Qix1QkFBd0Isa0NBQ3hCLHFCQUFzQix1Q0FDdEIscUJBQXNCLDJCQUN0QixXQUFZLFdBQ1osY0FBZSxXQUNmbWxDLEtBQU0sV0FDTlMsTUFBTyxPQUNQLG1CQUFvQixzQkFDcEIsa0JBQW1CLDRCQUNuQiw0QkFBNkIseUJBQzdCUixNQUFPLGFBQ1AsWUFBYSxZQUNiQyxNQUFPLG9CQUNQQyxNQUFPLFVDblVYLFNBQVNVLEdBQVlDLEVBQUtDLFFBQ1gsSUFBUkEsSUFBaUJBLEVBQU0sSUFDNUIsSUFBSUMsRUFBV0QsRUFBSUMsU0FFbkIsR0FBS0YsR0FBMkIsb0JBQWJHLFNBQW5CLENBRUEsSUFBSUMsRUFBT0QsU0FBU0MsTUFBUUQsU0FBU0UscUJBQXFCLFFBQVEsR0FDOURDLEVBQVFILFNBQVNJLGNBQWMsU0FDbkNELEVBQU1odUMsS0FBTyxXQUVJLFFBQWI0dEMsR0FDRUUsRUFBS0ksV0FDUEosRUFBS0ssYUFBYUgsRUFBT0YsRUFBS0ksWUFLaENKLEVBQUtNLFlBQVlKLEdBR2ZBLEVBQU1LLFdBQ1JMLEVBQU1LLFdBQVdDLFFBQVVaLEVBRTNCTSxFQUFNSSxZQUFZUCxTQUFTVSxlQUFlYixJQUU5QywrOGlCQ2ZBLE1BQU1jLFdBQXlCQyxVQUM3QkMsV0FBQUEsQ0FBWUMsR0FDVkMsTUFBTUQsR0FDTixNQUFNRSxFQUFPN3ZDLEtBQ2I2dkMsRUFBS0Msc0JBQXdCLEtBQzNCRCxFQUFLRSx3QkFBeUIsRUFDOUJGLEVBQUtHLGtCQUFvQixJQUFJLEdBS25DLE1BQU1DLEdBQWVBLEVBQ25CQyxhQUNBM3ZDLEtBQ0E0dkMsY0FDQUMsYUFDQTlzQyxRQUNBK3NDLGNBQ0FDLGFBQ0FDLGdCQUNBQyxtQkFDQUMscUJBQ0FDLFlBQ0FydUMsUUFDQXN1Qyx1QkFDQUMsbUJBQ0FDLG1CQUNBQywwQkFDQUMsNEJBQ0FDLHVCQUNBQyxhQUNBQyxRQUNBQyxhQUNBQyx5QkFDQUMsYUFDQUMsY0FDQUMsaUJBQ0ksSUFBQUMsRUFDSixNQUFNQyxFQUFTRixFQUFhRyxHQUFlQyxHQUVyQ0MsRUFBVyxHQUFFcnhDLFVBQ2JxQixFQUFXLEdBQUVyQixXQUVac3hDLEVBQWNDLEdBQWlCQyxZQUFTLEdBQ3pDQyxFQUFXQyxVQUFNQyxTQUV2QkMsYUFBVSxLQUNSQyxVQUFXQyxjQUFjbkMsRUFBVyxHQUNuQyxJQUVILE1BQU1vQyxFQUFVQyxlQUFZLEtBQzFCcEMsR0FBYSxJQUdUcUMsRUFBV0EsQ0FBQ2pvQixFQUFHb2tCLEtBQ1MseUJBQXhCQSxFQUFJdGdDLFdBQVdyTixLQUNqQjh3QyxHQUFjLEdBQ0puRCxFQUFJdGdDLFdBQVd2TixXQUFXMEksY0FFcENtbkMsRUFBcUJwbUIsRUFBR29rQixJQUl0QjhELEVBQTJCQyxJQUMvQixNQUVNL3lDLEVBQU8reUMsSUFBVUEsRUFBTS95QyxLQUFPK3lDLEVBQU1DLE9BQVNELEVBQU1FLFVBQWEsR0FFdEUsU0FBS2p6QyxJQUpTLENBQUMsR0FBSSxJQUFLLFlBSUw4RixPQUhMLENBQUMsR0FBSSxVQUdjaEUsU0FBUzlCLE1BRzFDK3lDLEVBQU1HLGtCQUNDLEVBQUksRUFHUEMsRUFBV3prQyxHQUNTLHlCQUFwQkEsRUFBV3JOLEtBQ04sR0FFRnl2QyxFQUFtQnBpQyxHQUd0QjBrQyxFQUFhNXRDLEdBQ0MseUJBQWRBLEVBQUtuRSxLQUVMaXhDLFVBQUFoRCx3QkFBUWp1QyxLQUFLLFNBQVNneUMsVUFBV3ZCLEVBQU8seUJBQ3JDdHNDLEVBQUt2RCxTQUlMNHVDLEVBQWlCcnJDLEdBOEYxQixPQUpJOHJDLFdBQVVPLEVBQUlRLEVBQVMxdEMsbUJBQU9rdEMsR0FBaEJBLEVBQWtCeHNDLE9BQ2xDZ3RDLEVBQVMxdEMsUUFBUVUsTUFBTWl1QyxRQUl2QmhCLFVBQUFoRCxjQUFDbUQsV0FDQ2MsT0FBUTdCLEVBQ1IyQixVQUFXdkIsRUFBTyxnQkFDbEIwQixpQkFBa0IxQixFQUFPLHdCQUN6QjJCLGFBQWNkLEVBQ2RlLHFCQUVBcEIsVUFBQWhELHFCQUNFK0QsVUFBV3ZCLEVBQU8sd0JBQ2xCekMsTUFBTyxDQUNMLFVBQVksR0FBRWtDLElBQ2QsNkJBQThCRSxFQUM5QixnQkFBa0IsR0FBRUQsSUFDcEIsdUJBQXdCRyxFQUFZZ0MsU0FwRXhDckIsVUFBQWhELHFCQUFLK0QsVUFBV3ZCLEVBQU8sc0JBQXVCOEIsUUFBUzNCLEdBQ3JESyxVQUFBaEQsd0JBQ0VqdUMsS0FBSyxTQUNMZ3lDLFVBQVd2QixFQUFPLGlCQUNsQitCLFFBQVNBLElBQU1sQixJQUNmbUIsVUFBV2xwQixHQUFLa29CLEVBQXlCbG9CLElBQU0rbkIsSUFDL0MsYUFBWXZCLEVBQ1oyQyxTQUFVLEdBRVZ6QixVQUFBaEQsY0FBQzBFLFdBQUtDLElBQUksV0FFWjNCLFVBQUFoRCxzQkFBTStELFVBQVd2QixFQUFPLGlCQUN0QlEsVUFBQWhELHNCQUFNK0QsVUFBV3ZCLEVBQU8sa0JBQW1CbHhDLEdBQUlxQixHQUM1Q1MsR0FFSDR2QyxVQUFBaEQsY0FBQ08sSUFDQ3FFLDJCQUNBdHpDLEdBQUlBLEVBQ0o4dkMsWUFBYUEsRUFDYnlELDRCQUE2QnZELEVBQzdCRSxtQkFBb0JxQyxFQUNwQnRDLGlCQUFrQnVDLEVBSWxCZ0IsK0JBQ0FDLHdCQUF5QkEsS0FBTSxFQUMvQjFELFdBQVVweEMsS0FDTG94QyxHQUNIMEMsVUFDRyxHQUFFdkIsRUFBT3pzQyxTQUFTeXNDLEVBQU9seEMsSUFBTyxNQUMvQit2QyxFQUFXaHRDLE1BQVFtdUMsRUFBT3dDLFNBQVcsS0FHekNDLFdBQVcsSUFFYkMscUJBQXNCcHVDLEdBQ3BCa3NDLFVBQUFoRCxjQUFBZ0QsVUFBQW1DLGNBQ0VuQyxVQUFBaEQsc0JBQUE5dkMsT0FBQUMsUUFBTyxhQUFZc3hDLEVBQVdud0MsR0FBSUEsR0FBUXdGLElBQ3pDekMsR0FyRFgydUMsVUFBQWhELHdCQUNFanVDLEtBQUssU0FDTGd5QyxVQUFXdkIsRUFBTyxlQUNsQitCLFFBQVNwRCxFQUNUcUQsVUFBV2xwQixHQUFLa29CLEVBQXlCbG9CLElBQU02bEIsSUFDL0MsYUFBWVksR0FFWmlCLFVBQUFoRCxjQUFDMEUsV0FBS0MsSUFBSSxRQUFRMUMsTUFBT0EsTUFpRHJCbUQsTUFBTzVDLEVBQ1BkLHFCQUFzQjZCLEVBQ3RCN0QsSUFBS3FELE1BL0VYQyxVQUFBaEQsY0FBQ3FGLFdBQ0NwRSxXQUFZQSxFQUNacUUsWUFBYTFDLEVBQ2IyQyxZQUFhQSxJQUFNMUMsR0FBYyxHQUNqQzJDLFdBQVk1RCxFQUNaNkQsa0JBQW1CNUQsRUFDbkI2RCxvQkFBcUI1RCxFQUNyQjZELHFCQUFzQkEsS0FDcEJoRSxJQUNBa0IsR0FBYyxFQUFNLEVBRXRCK0MsdUJBQXdCQSxJQUFNL0MsR0FBYyxHQUM1Q1osTUFBT0EsRUFDUEMsV0FBWUEsRUFDWkcsWUFBYUEsS0ErRkosaUJBSWpCd0QsUUFBQUMsSUFBQUMsV0FBQS9FLEdBQWFnRixVQUFZLENBQ3ZCL0UsV0FBWWdGLFVBQVUzNkIsT0FBTzQ2QixXQUM3QjUwQyxHQUFJMjBDLFVBQVUzNkIsT0FBTzQ2QixXQUNyQmhGLFlBQWErRSxVQUFVeDlCLEtBQUt5OUIsV0FDNUIvRSxXQUFZOEUsVUFBVXg5QixLQUFLeTlCLFdBQzNCN3hDLE1BQU80eEMsVUFBVTM2QixPQUNqQnkyQixxQkFBc0JrRSxVQUFVMzZCLE9BQU80NkIsV0FDdkM5RSxZQUFhNkUsVUFBVXA5QixNQUFNcTlCLFdBQzdCN0UsV0FBWTRFLFVBQVVFLE1BQU0sQ0FDMUJDLFNBQVVILFVBQVV4OUIsS0FBS3k5QixXQUN6QkcsT0FBUUosVUFBVXg5QixLQUFLeTlCLFdBQ3ZCN3hDLE1BQU80eEMsVUFBVTM2QixPQUFPNDZCLFdBQ3hCSSxZQUFhTCxVQUFVMzZCLE9BQU80NkIsV0FDOUJuQyxVQUFXa0MsVUFBVTM2QixPQUFPNDZCLGFBQzNCQSxXQUNINUUsY0FBZTJFLFVBQVV4OUIsS0FBS3k5QixXQUM5QjFFLG1CQUFvQnlFLFVBQVV4OUIsS0FBS3k5QixXQUNuQzNFLGlCQUFrQjBFLFVBQVV4OUIsS0FBS3k5QixXQUNqQ3hFLHFCQUFzQnVFLFVBQVV4OUIsS0FBS3k5QixXQUNyQzl5QyxNQUFPNnlDLFVBQVUzNkIsT0FBTzQ2QixXQUN4QnZFLGlCQUFrQnNFLFVBQVV4OUIsS0FBS3k5QixXQUNqQ3pFLFVBQVd3RSxVQUFVMzZCLE9BQ3JCczJCLGlCQUFrQnFFLFVBQVUzNkIsT0FDNUJ1MkIsd0JBQXlCb0UsVUFBVTM2QixPQUNuQ3cyQiwwQkFBMkJtRSxVQUFVMzZCLE9BQ3JDMDJCLFdBQVlpRSxVQUFVTSxLQUN0QnRFLE1BQU9nRSxVQUFVMzZCLE9BQ2pCNDJCLFdBQVkrRCxVQUFVMzZCLE9BQ3RCNjJCLHVCQUF3QjhELFVBQVUzNkIsT0FBTzQ2QixXQUN6QzlELFdBQVk2RCxVQUFVTSxLQUFLTCxXQUMzQjdELFlBQWE0RCxVQUFVRSxNQUFNLENBQzNCOUIsT0FBUTRCLFVBQVV4K0IsT0FBT3krQixhQUN4QkEsV0FDSDVELFdBQVkyRCxVQUFVTSx1Q0MxUCtUanJCLEVBQTdDLG9CQUFvQnNsQixNQUFLQSxLQUEvUDVnQyxXQUFtUnNiLEVBQWxRc2hCLFVBQTRRLFdBQVcsSUFBSS80QixFQUFFLENBQUMsSUFBSSxTQUFTeVgsRUFBRXpYLEVBQUVnTixHQUFHLElBQUlHLEVBQUV3MUIsRUFBRUEsT0FBRSxJQUFTMzFCLEVBQUU0MUIsRUFBRTUxQixFQUFFNDFCLEVBQUUsb0JBQW9CQyxPQUFPQSxPQUFPMzFDLEtBQUtpZ0IsRUFBRSxXQUFXLE9BQU8sU0FBU3NLLEdBQWdCLElBQUl6WCxFQUFFLENBQUM4aUMsT0FBTyx1QkFBdUJDLE9BQU8sS0FBS0MsZ0JBQWUsRUFBR0MsTUFBTSxJQUFJQyxpQkFBZ0IsRUFBR0MsWUFBWSxLQUFLQyxZQUFZLEtBQUtDLE1BQUssRUFBR3BpQixPQUFPLEVBQUVxaUIsT0FBTyxpQkFBaUJDLGFBQWEsS0FBS0MsV0FBVSxFQUFHQyxVQUFTLEVBQUdDLFlBQVcsR0FBSTEyQixFQUFFLFdBQVcsSUFBSXlLLEVBQUUsR0FBRyxPQUFPcG5CLE1BQU12RCxVQUFVd0YsUUFBUXRGLEtBQUtOLG9CQUFvQnNULEdBQUcsSUFBSSxJQUFJZ04sS0FBS2hOLEVBQUUsQ0FBQyxJQUFJQSxFQUFFalQsZUFBZWlnQixHQUFHLE9BQU95SyxFQUFFekssR0FBR2hOLEVBQUVnTixFQUFFLENBQUUsSUFBR3lLLENBQUMsRUFBRXRLLEVBQUUsU0FBU3NLLEdBQUcsTUFBTUEsRUFBRWxDLE9BQU8sS0FBS2tDLEVBQUVBLEVBQUV0VCxPQUFPLElBQUksSUFBSSxJQUFJbkUsRUFBRWdOLEVBQUVxWCxPQUFPNU0sR0FBR3RLLEVBQUVILEVBQUVyZ0IsT0FBT2cyQyxHQUFHLEVBQUVsMkMsRUFBRSxHQUFHcWMsRUFBRWtFLEVBQUVnbUIsV0FBVyxLQUFLMlAsRUFBRXgxQixHQUFHLENBQUMsR0FBRyxLQUFLbk4sRUFBRWdOLEVBQUVnbUIsV0FBVzJQLElBQUksTUFBTSxJQUFJZ0Isc0JBQXNCLGlEQUFpRGwzQyxHQUFHdVQsR0FBRyxHQUFHQSxHQUFHLElBQUksS0FBS0EsR0FBRyxJQUFJMmlDLEdBQUczaUMsR0FBRyxJQUFJQSxHQUFHLElBQUksSUFBSTJpQyxHQUFHM2lDLEdBQUcsSUFBSUEsR0FBRyxJQUFJLEtBQUs4SSxFQUFFLEtBQUs5SSxFQUFFNUssU0FBUyxJQUFJLElBQUk0SyxHQUFHLEtBQUssS0FBS0EsR0FBRyxLQUFLQSxHQUFHQSxHQUFHLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxJQUFJQSxHQUFHLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxJQUFJZ04sRUFBRXVJLE9BQU9vdEIsR0FBRyxLQUFLMzFCLEVBQUV1SSxPQUFPb3RCLEVBQUUsQ0FBQyxNQUFNLElBQUlsMkMsQ0FBQyxFQUFFazJDLEVBQUUsV0FBVyxPQUFPdHpDLEtBQUs2VSxJQUFJNjNCLFNBQVM2SCxLQUFLQyxhQUFhOUgsU0FBUytILGdCQUFnQkQsYUFBYTlILFNBQVM2SCxLQUFLRyxhQUFhaEksU0FBUytILGdCQUFnQkMsYUFBYWhJLFNBQVM2SCxLQUFLSSxhQUFhakksU0FBUytILGdCQUFnQkUsYUFBYSxFQUFFdjNDLEVBQUUsU0FBU3VULEdBQUcsT0FBT0EsR0FBR2dOLEVBQUVoTixFQUFFNlAsU0FBUzRILEVBQUV3c0IsaUJBQWlCajNCLEdBQUdrM0IsT0FBTyxJQUFJbGtDLEVBQUVta0MsV0FBVyxFQUFFLElBQUluM0IsQ0FBQyxFQUFFbEUsRUFBRSxTQUFTOUksRUFBRWdOLEVBQUVHLEdBQUcsSUFBSW5OLEdBQUcrN0IsU0FBUzZILEtBQUt6RCxRQUFRaHpCLElBQUluTixFQUFFbWdDLFFBQVFwRSxTQUFTcUksZ0JBQWdCcGtDLElBQUlBLEVBQUVxa0MsYUFBYSxXQUFXLE1BQU1ya0MsRUFBRW1nQyxRQUFRbmdDLEVBQUVrOEIsTUFBTW9JLFFBQVEsUUFBUTdzQixFQUFFOHNCLFNBQVMsRUFBRXYzQixHQUFHLEVBQUV0RyxFQUFFLFNBQVMxRyxFQUFFZ04sRUFBRUcsRUFBRXcxQixHQUFHLEdBQUczMUIsRUFBRTAyQixZQUFZLG1CQUFtQmpzQixFQUFFK3NCLFlBQVksQ0FBQyxJQUFJLzNDLEVBQUUsSUFBSSszQyxZQUFZeGtDLEVBQUUsQ0FBQ3lrQyxTQUFRLEVBQUdDLE9BQU8sQ0FBQ25lLE9BQU9wWixFQUFFdzNCLE9BQU9oQyxLQUFLNUcsU0FBUzZJLGNBQWNuNEMsRUFBRSxDQUFDLEVBQUUsT0FBTyxTQUFTZ3ZCLEVBQUUvZSxHQUFHLElBQUk4YyxFQUFFcXJCLEVBQUU5OUIsRUFBRTVULEVBQUVGLEVBQUUsQ0FBQzZ4QyxhQUFhLFNBQVNydEIsR0FBR3N0QixxQkFBcUI1eEMsR0FBR0EsRUFBRSxLQUFLc2tCLEdBQUcvUSxFQUFFLGVBQWU4UyxFQUFFLEVBQUV3ckIsY0FBYyxTQUFTNzNCLEVBQUVzTyxFQUFFL2UsR0FBR3pKLEVBQUU2eEMsZUFBZSxJQUFJRCxFQUFFNzNCLEVBQUV3TSxHQUFHeFosRUFBRXRELEdBQUcsSUFBSXFDLEVBQUUsb0JBQW9CMVMsT0FBT1MsVUFBVXNJLFNBQVNwSSxLQUFLbWdCLEdBQUd0RyxFQUFFOUgsSUFBSW9PLEVBQUU4M0IsUUFBUSxLQUFLOTNCLEVBQUUsR0FBR3BPLEdBQUc4SCxFQUFFLENBQUMsSUFBSVEsRUFBRW9RLEVBQUV5dEIsWUFBWUwsRUFBRTlCLFNBQVNoOEIsSUFBSUEsRUFBRWcxQixTQUFTb0osY0FBY04sRUFBRTlCLFNBQVMsSUFBSUgsRUFBRWptQyxFQUFFc0ssRUFBRTZWLEVBQUVyd0IsRUFBRXNhLEdBQUdxK0IsRUFBRXJtQyxFQUFFb08sRUFBRSxTQUFTbk4sRUFBRWdOLEVBQUVHLEVBQUUxZ0IsR0FBRyxJQUFJcWMsRUFBRSxFQUFFLEdBQUc5SSxFQUFFcWxDLGFBQWEsR0FBR3Y4QixHQUFHOUksRUFBRW1rQyxVQUFVbmtDLEVBQUVBLEVBQUVxbEMsbUJBQW1CcmxDLEdBQUcsT0FBTzhJLEVBQUV6WixLQUFLNlUsSUFBSTRFLEVBQUVrRSxFQUFFRyxFQUFFLEdBQUcxZ0IsSUFBSXFjLEVBQUV6WixLQUFLMGYsSUFBSWpHLEVBQUU2NUIsSUFBSWxyQixFQUFFNnRCLGNBQWN4OEIsQ0FBQyxDQUF6SixDQUEySmpDLEVBQUVpVyxFQUFFak4sU0FBUyxtQkFBbUJnMUIsRUFBRTVqQixPQUFPNGpCLEVBQUU1akIsT0FBTzlULEVBQUVzTyxHQUFHb3BCLEVBQUU1akIsT0FBTyxJQUFJNGpCLEVBQUV4QixNQUFNa0MsRUFBRUgsRUFBRS85QixFQUFFbStCLEVBQUU3QyxJQUFJOEMsRUFBRSxFQUFFdCtCLEVBQUUsU0FBU3NRLEVBQUV6WCxHQUFHLElBQUlnTixFQUFFaE4sRUFBRWtqQyxnQkFBZ0JsakMsRUFBRWlqQyxNQUFNNXpDLEtBQUtDLElBQUltb0IsRUFBRSxJQUFJelgsRUFBRWlqQyxPQUFPLE9BQU9qakMsRUFBRW1qQyxhQUFhbjJCLEVBQUVoTixFQUFFbWpDLFlBQVluakMsRUFBRW1qQyxZQUFZbmpDLEVBQUVvakMsYUFBYXAyQixFQUFFaE4sRUFBRW9qQyxZQUFZcGpDLEVBQUVvakMsWUFBWXZ6QixTQUFTN0MsRUFBRSxHQUFHLENBQXJMLENBQXVMdTRCLEVBQUVWLEdBQUduL0IsRUFBRSxTQUFTMUYsR0FBRzRpQyxJQUFJQSxFQUFFNWlDLEdBQUd5bEMsR0FBR3psQyxFQUFFNGlDLEVBQUUzN0IsRUFBRUksRUFBRWsrQixFQUFFLFNBQVM5dEIsRUFBRXpYLEdBQUcsSUFBSWdOLEVBQUUsTUFBTSxlQUFleUssRUFBRTZyQixTQUFTdDJCLEVBQUVoTixFQUFFQSxHQUFHLGdCQUFnQnlYLEVBQUU2ckIsU0FBU3QyQixFQUFFaE4sR0FBRyxFQUFFQSxJQUFJLGtCQUFrQnlYLEVBQUU2ckIsU0FBU3QyQixFQUFFaE4sRUFBRSxHQUFHLEVBQUVBLEVBQUVBLEdBQUcsRUFBRSxFQUFFQSxHQUFHQSxFQUFFLEdBQUcsZ0JBQWdCeVgsRUFBRTZyQixTQUFTdDJCLEVBQUVoTixFQUFFQSxFQUFFQSxHQUFHLGlCQUFpQnlYLEVBQUU2ckIsU0FBU3QyQixJQUFJaE4sRUFBRUEsRUFBRUEsRUFBRSxHQUFHLG1CQUFtQnlYLEVBQUU2ckIsU0FBU3QyQixFQUFFaE4sRUFBRSxHQUFHLEVBQUVBLEVBQUVBLEVBQUVBLEdBQUdBLEVBQUUsSUFBSSxFQUFFQSxFQUFFLElBQUksRUFBRUEsRUFBRSxHQUFHLEdBQUcsZ0JBQWdCeVgsRUFBRTZyQixTQUFTdDJCLEVBQUVoTixFQUFFQSxFQUFFQSxFQUFFQSxHQUFHLGlCQUFpQnlYLEVBQUU2ckIsU0FBU3QyQixFQUFFLEtBQUtoTixFQUFFQSxFQUFFQSxFQUFFQSxHQUFHLG1CQUFtQnlYLEVBQUU2ckIsU0FBU3QyQixFQUFFaE4sRUFBRSxHQUFHLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUVBLEVBQUUsRUFBRSxJQUFJQSxFQUFFQSxFQUFFQSxFQUFFQSxHQUFHLGdCQUFnQnlYLEVBQUU2ckIsU0FBU3QyQixFQUFFaE4sRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsR0FBRyxpQkFBaUJ5WCxFQUFFNnJCLFNBQVN0MkIsRUFBRSxJQUFJaE4sRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsR0FBRyxtQkFBbUJ5WCxFQUFFNnJCLFNBQVN0MkIsRUFBRWhOLEVBQUUsR0FBRyxHQUFHQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFQSxFQUFFLEVBQUUsS0FBS0EsRUFBRUEsRUFBRUEsRUFBRUEsRUFBRUEsR0FBR3lYLEVBQUU4ckIsZUFBZXYyQixFQUFFeUssRUFBRThyQixhQUFhdmpDLElBQUlnTixHQUFHaE4sQ0FBQyxDQUE5bkIsQ0FBZ29CNmtDLEVBQUVsb0MsR0FBR0EsRUFBRSxJQUFJd0ssRUFBRSxFQUFFcytCLEVBQUV0K0IsR0FBRyxFQUFFLEVBQUV4SyxHQUFHOGEsRUFBRThzQixTQUFTLEVBQUVsMUMsS0FBSytaLE1BQU1uQyxJQUFJLFNBQVNqSCxFQUFFZ04sR0FBRyxJQUFJMjFCLEVBQUVsckIsRUFBRXl0QixZQUFZLEdBQUdsbEMsR0FBR2dOLEdBQUcyMUIsR0FBRzMxQixJQUFJM0YsRUFBRTJGLEdBQUd5SyxFQUFFNnRCLFlBQVkzQyxJQUFJNkMsRUFBRSxPQUFPdnlDLEVBQUU2eEMsY0FBYSxHQUFJaDhCLEVBQUVxRSxFQUFFSCxFQUFFak8sR0FBRzJILEVBQUUsYUFBYW0rQixFQUFFMTNCLEVBQUVzTyxHQUFHbW5CLEVBQUUsS0FBS3p2QyxFQUFFLE1BQUssQ0FBRSxDQUFwSixDQUFzSjhULEVBQUVtK0IsS0FBS2p5QyxFQUFFc2tCLEVBQUVpdUIsc0JBQXNCaGdDLEdBQUdrOUIsRUFBRTVpQyxFQUFFLEVBQUUsSUFBSXlYLEVBQUV5dEIsYUFBYXp0QixFQUFFOHNCLFNBQVMsRUFBRSxHQUFHLFNBQVM5c0IsRUFBRXpYLEVBQUVnTixHQUFHaE4sR0FBR3pGLFFBQVFvckMsV0FBVzM0QixFQUFFdzJCLFdBQVdqcEMsUUFBUW9yQyxVQUFVLENBQUNDLGFBQWFDLEtBQUtDLFVBQVU5NEIsR0FBR3VaLE9BQU85TyxFQUFFaHFCLElBQUlzdUMsU0FBU2dLLE1BQU10dUIsSUFBSXNrQixTQUFTK0gsZ0JBQWdCLE9BQU8sSUFBSXJzQixFQUFFaHFCLEdBQUcsQ0FBOUssQ0FBZ0wwZixFQUFFcE8sRUFBRThsQyxHQUFHLGVBQWVwdEIsR0FBR0EsRUFBRXV1QixXQUFXLDRCQUE0QnhrQixRQUFRMVksRUFBRXFFLEVBQUU5ZCxLQUFLK1osTUFBTWc4QixJQUFHLElBQUsxK0IsRUFBRSxjQUFjbStCLEVBQUUxM0IsRUFBRXNPLEdBQUd4b0IsRUFBRTZ4QyxjQUFhLEdBQUlydEIsRUFBRWl1QixzQkFBc0JoZ0MsR0FBRyxDQUFDLEdBQUczRyxFQUFFLFNBQVNpQixHQUFHLElBQUlBLEVBQUVpbUMsb0JBQW9CLElBQUlqbUMsRUFBRWttQyxRQUFRbG1DLEVBQUVtbUMsU0FBU25tQyxFQUFFb21DLFNBQVNwbUMsRUFBRXFtQyxXQUFXLFlBQVlybUMsRUFBRXhULFNBQVNxNEMsRUFBRTdrQyxFQUFFeFQsT0FBTzg1QyxRQUFRN3FCLEtBQUssTUFBTW9wQixFQUFFSSxRQUFRcjFDLGdCQUFnQm9RLEVBQUV4VCxPQUFPODVDLFFBQVE5c0IsRUFBRXNwQixTQUFTK0IsRUFBRTBCLFdBQVc5dUIsRUFBRSt1QixTQUFTRCxVQUFVMUIsRUFBRTRCLFdBQVdodkIsRUFBRSt1QixTQUFTQyxVQUFVLElBQUloMkMsS0FBS28wQyxFQUFFNkIsTUFBTSxDQUFDLElBQUkxNUIsRUFBRTIxQixFQUFFLElBQUkzMUIsRUFBRUcsRUFBRXc1QixtQkFBbUI5QixFQUFFK0IsTUFBTSxDQUFDLE1BQU1udkIsR0FBR3pLLEVBQUVHLEVBQUUwM0IsRUFBRStCLEtBQUssQ0FBQyxHQUFHLE1BQU01NUIsRUFBRSxDQUFDLElBQUl3TSxFQUFFd3BCLGVBQWUsT0FBT0wsRUFBRTVHLFNBQVMrSCxlQUFlLE1BQU1uQixFQUFFNUcsU0FBU29KLGNBQWNuNEIsSUFBSTIxQixFQUFFQSxHQUFHLFNBQVMzMUIsRUFBRTIxQixFQUFFNUcsU0FBUytILG1CQUFtQjlqQyxFQUFFKy9CLGlCQUFpQixTQUFTLy9CLEdBQUcsR0FBR3pGLFFBQVFzc0MsY0FBYzdtQyxFQUFFd2pDLFlBQVlqcEMsUUFBUXVzQyxNQUFNLENBQUMsSUFBSTk1QixFQUFFeUssRUFBRSt1QixTQUFTSSxLQUFLNTVCLEVBQUVBLEdBQUcsR0FBR3pTLFFBQVFzc0MsYUFBYSxDQUFDakIsYUFBYUMsS0FBS0MsVUFBVTlsQyxHQUFHdW1CLE9BQU92WixHQUFHeUssRUFBRXl0QixhQUFhbkosU0FBU2dLLE1BQU0vNEIsR0FBR3lLLEVBQUUrdUIsU0FBU0UsS0FBSyxDQUFDLENBQWpOLENBQW1ObHRCLEdBQUd2bUIsRUFBRSt4QyxjQUFjckMsRUFBRWtDLEdBQUcsQ0FBQyxFQUFFaCtCLEVBQUUsU0FBUzRRLEdBQUcsR0FBRyxPQUFPbGQsUUFBUXVzQyxPQUFPdnNDLFFBQVF1c0MsTUFBTWxCLGNBQWNyckMsUUFBUXVzQyxNQUFNbEIsZUFBZUMsS0FBS0MsVUFBVXRzQixHQUFHLENBQUMsSUFBSXhaLEVBQUV6RixRQUFRdXNDLE1BQU12Z0IsT0FBTyxpQkFBaUJ2bUIsR0FBR0EsS0FBS0EsRUFBRSs3QixTQUFTb0osY0FBY2g0QixFQUFFNVMsUUFBUXVzQyxNQUFNdmdCLFdBQVd0ekIsRUFBRSt4QyxjQUFjaGxDLEVBQUUsS0FBSyxDQUFDd2pDLFdBQVUsR0FBSSxDQUFDLEVBQUUsT0FBT3Z3QyxFQUFFOHpDLFFBQVEsV0FBV3Z0QixJQUFJdWlCLFNBQVNpTCxvQkFBb0IsUUFBUWpvQyxHQUFFLEdBQUkwWSxFQUFFdXZCLG9CQUFvQixXQUFXbmdDLEdBQUUsR0FBSTVULEVBQUU2eEMsZUFBZXRyQixFQUFFLEtBQUtxckIsRUFBRSxLQUFLOTlCLEVBQUUsS0FBSzVULEVBQUUsS0FBSyxFQUFFLFdBQVcsS0FBSyxrQkFBa0I0b0MsVUFBVSxxQkFBcUJ0a0IsR0FBRywwQkFBMEJBLEdBQUcsWUFBWUEsRUFBRXd2QixRQUFRbjZDLFdBQVcsS0FBSyxpR0FBaUdtRyxFQUFFOHpDLFVBQVV2dEIsRUFBRXhNLEVBQUVoTixFQUFFdEQsR0FBRyxJQUFJcUssRUFBRXlTLEVBQUV1cEIsT0FBT2hILFNBQVNvSixjQUFjM3JCLEVBQUV1cEIsUUFBUSxLQUFLaEgsU0FBU21MLGlCQUFpQixRQUFRbm9DLEdBQUUsR0FBSXlhLEVBQUVncUIsV0FBV2hxQixFQUFFaXFCLFVBQVVoc0IsRUFBRXl2QixpQkFBaUIsV0FBV3JnQyxHQUFFLEVBQUcsQ0FBdFosR0FBMFo1VCxDQUFDLENBQUMsQ0FBeGpLLENBQTBqSzB2QyxFQUFFLEVBQUUxMUMsTUFBTStTLEVBQUUsU0FBSSxJQUFTbU4sSUFBSXNLLEVBQUVILFFBQVFuSyxFQUFFLEVBQUUsSUFBSSxTQUFTc0ssRUFBRXpYLEVBQUVnTixHQUFnQixJQUFJRyxFQUFFamdCLE1BQU1BLEtBQUtpNkMsa0JBQWtCOTZDLE9BQU8rNkMsT0FBTyxTQUFTM3ZCLEVBQUV6WCxFQUFFZ04sRUFBRUcsUUFBRyxJQUFTQSxJQUFJQSxFQUFFSCxHQUFHM2dCLE9BQU9nN0MsZUFBZTV2QixFQUFFdEssRUFBRSxDQUFDbTZCLFlBQVcsRUFBRzkwQyxJQUFJLFdBQVcsT0FBT3dOLEVBQUVnTixFQUFFLEdBQUcsRUFBRSxTQUFTeUssRUFBRXpYLEVBQUVnTixFQUFFRyxRQUFHLElBQVNBLElBQUlBLEVBQUVILEdBQUd5SyxFQUFFdEssR0FBR25OLEVBQUVnTixFQUFFLEdBQUcyMUIsRUFBRXoxQyxNQUFNQSxLQUFLcTZDLGNBQWMsU0FBUzl2QixFQUFFelgsR0FBRyxJQUFJLElBQUlnTixLQUFLeUssRUFBRSxZQUFZekssR0FBRzNnQixPQUFPUyxVQUFVQyxlQUFlQyxLQUFLZ1QsRUFBRWdOLElBQUlHLEVBQUVuTixFQUFFeVgsRUFBRXpLLEVBQUUsRUFBRTNnQixPQUFPZzdDLGVBQWVybkMsRUFBRSxhQUFhLENBQUN4UCxPQUFNLElBQUtteUMsRUFBRTMxQixFQUFFLEtBQUtoTixHQUFHMmlDLEVBQUUzMUIsRUFBRSxLQUFLaE4sR0FBRzJpQyxFQUFFMzFCLEVBQUUsSUFBSWhOLEdBQUcyaUMsRUFBRTMxQixFQUFFLEtBQUtoTixHQUFHMmlDLEVBQUUzMUIsRUFBRSxJQUFJaE4sR0FBRzJpQyxFQUFFMzFCLEVBQUUsS0FBS2hOLEdBQUcyaUMsRUFBRTMxQixFQUFFLEtBQUtoTixHQUFHMmlDLEVBQUUzMUIsRUFBRSxJQUFJaE4sR0FBRzJpQyxFQUFFMzFCLEVBQUUsS0FBS2hOLEdBQUcyaUMsRUFBRTMxQixFQUFFLEtBQUtoTixHQUFHMmlDLEVBQUUzMUIsRUFBRSxLQUFLaE4sR0FBRzJpQyxFQUFFMzFCLEVBQUUsS0FBS2hOLEdBQUcyaUMsRUFBRTMxQixFQUFFLEtBQUtoTixHQUFHMmlDLEVBQUUzMUIsRUFBRSxJQUFJaE4sR0FBRzJpQyxFQUFFMzFCLEVBQUUsS0FBS2hOLEdBQUcyaUMsRUFBRTMxQixFQUFFLEtBQUtoTixFQUFFLEVBQUUsR0FBRyxTQUFTeVgsRUFBRXpYLEVBQUVnTixHQUFnQjNnQixPQUFPZzdDLGVBQWVybkMsRUFBRSxhQUFhLENBQUN4UCxPQUFNLElBQUt3UCxFQUFFd25DLHdCQUFtQixFQUFPLElBQUlyNkIsRUFBRUgsRUFBRSxLQUFLaE4sRUFBRXduQyxtQkFBbUIsU0FBUy92QixHQUFHLElBQUl6WCxFQUFFeVgsRUFBRWd3QixVQUFVejZCLEVBQUV5SyxFQUFFaXdCLGdCQUFnQi9FLEdBQUUsRUFBR3gxQixFQUFFOHhCLFVBQVUsR0FBR3h5QyxFQUFFazJDLEVBQUUsR0FBRzc1QixFQUFFNjVCLEVBQUUsR0FBR2o4QixHQUFFLEVBQUd5RyxFQUFFc3lCLHVCQUF1QmhvQixHQUFHM08sRUFBRTJPLEVBQUcsR0FBRSxDQUFDelgsSUFBSXliLEVBQUUsU0FBU2hFLEdBQUcsSUFBSXRLLEVBQUVzSyxFQUFFNXFCLElBQUksR0FBRyxNQUFNbVQsT0FBRSxFQUFPQSxFQUFFclQsT0FBTyxHQUFHLFlBQVl3Z0IsRUFBRUgsR0FBR0EsSUFBSXlLLEVBQUVzb0IsaUJBQWlCcjVCLEVBQUVqYSxFQUFFLEVBQUVBLEVBQUUsRUFBRXVULEVBQUVyVCxPQUFPLE9BQU8sQ0FBQyxHQUFHLGNBQWN3Z0IsRUFBRSxPQUFPSCxHQUFHQSxJQUFJeUssRUFBRXNvQixpQkFBaUJ0ekMsRUFBRXVULEVBQUVyVCxPQUFPLEVBQUUrWixFQUFFamEsRUFBRSxHQUFHaWEsRUFBRSxFQUFFLENBQUMsRUFBRSxPQUFNLEVBQUd5RyxFQUFFa3lCLHVCQUF1QixPQUFPd0QsT0FBT3FFLGlCQUFpQixVQUFVenJCLEdBQUcsV0FBVyxPQUFPb25CLE9BQU9tRSxvQkFBb0IsVUFBVXZyQixFQUFFLENBQUUsS0FBRyxFQUFHdE8sRUFBRWt5Qix1QkFBdUIzNEIsRUFBRSxFQUFHLEdBQUUsQ0FBQzFHLElBQUksQ0FBQzJuQyxjQUFjbDdDLEVBQUUsQ0FBQyxFQUFFLElBQUksU0FBU2dyQixFQUFFelgsRUFBRWdOLEdBQWdCM2dCLE9BQU9nN0MsZUFBZXJuQyxFQUFFLGFBQWEsQ0FBQ3hQLE9BQU0sSUFBS3dQLEVBQUU0bkMsaUJBQVksRUFBTyxJQUFJejZCLEVBQUVILEVBQUUsS0FBS2hOLEVBQUU0bkMsWUFBWSxTQUFTbndCLEVBQUV6WCxRQUFHLElBQVNBLElBQUlBLEVBQUUsS0FBSyxJQUFJZ04sR0FBRSxFQUFHRyxFQUFFOHhCLFVBQVV4bkIsR0FBR2tyQixFQUFFMzFCLEVBQUUsR0FBR3ZnQixFQUFFdWdCLEVBQUUsR0FBRyxPQUFNLEVBQUdHLEVBQUVreUIsdUJBQXVCLElBQUlyeUIsRUFBRTY2Qix1QkFBdUJwN0MsRUFBRWdyQixFQUFHLEdBQUV6WCxHQUFHLE9BQU8sV0FBVzhuQyxhQUFhOTZCLEVBQUUsQ0FBRSxHQUFFLENBQUN5SyxFQUFFelgsSUFBSTJpQyxDQUFDLENBQUMsRUFBRSxHQUFHLFNBQVNsckIsRUFBRXpYLEVBQUVnTixHQUFnQjNnQixPQUFPZzdDLGVBQWVybkMsRUFBRSxhQUFhLENBQUN4UCxPQUFNLElBQUt3UCxFQUFFK25DLG9CQUFlLEVBQU8sSUFBSTU2QixFQUFFSCxFQUFFLEtBQUtoTixFQUFFK25DLGVBQWUsV0FBVyxJQUFJdHdCLEVBQUV6WCxFQUFFZ04sR0FBRSxFQUFHRyxFQUFFaXlCLFFBQVEsTUFBTSxNQUFNLENBQUNweUIsRUFBRSxDQUFDZzdCLE1BQU0sUUFBUXZ3QixFQUFFLE1BQU16SyxPQUFFLEVBQU9BLEVBQUV4YixlQUFVLElBQVNpbUIsT0FBRSxFQUFPQSxFQUFFd3dCLFlBQVkvRCxPQUFPLFFBQVFsa0MsRUFBRSxNQUFNZ04sT0FBRSxFQUFPQSxFQUFFeGIsZUFBVSxJQUFTd08sT0FBRSxFQUFPQSxFQUFFZ2tDLGNBQWMsRUFBRWhrQyxFQUFFek0sUUFBUXlNLEVBQUUrbkMsY0FBYyxFQUFFLElBQUksU0FBU3R3QixFQUFFelgsRUFBRWdOLEdBQWdCM2dCLE9BQU9nN0MsZUFBZXJuQyxFQUFFLGFBQWEsQ0FBQ3hQLE9BQU0sSUFBS3dQLEVBQUVrb0MsNkJBQXdCLEVBQU8sSUFBSS82QixFQUFFSCxFQUFFLEtBQUtoTixFQUFFa29DLHdCQUF3QixTQUFTendCLEdBQUcsSUFBSXpYLEdBQUUsRUFBR21OLEVBQUVpeUIsUUFBUSxNQUFNcHlCLEdBQUUsRUFBR0csRUFBRTh4QixXQUFVLEdBQUkwRCxFQUFFMzFCLEVBQUUsR0FBR3ZnQixFQUFFdWdCLEVBQUUsR0FBR2xFLEVBQUUsU0FBUzJPLEdBQUcsSUFBSXpYLEVBQUV5WCxFQUFFLEdBQUdockIsRUFBRXVULEVBQUVtb0MsZUFBZSxFQUFFLE9BQU0sRUFBR2g3QixFQUFFa3lCLHVCQUF1QixHQUFHd0QsUUFBUUEsT0FBT3VGLHFCQUFxQixDQUFDLElBQUlwN0IsRUFBRSxJQUFJbzdCLHFCQUFxQnQvQixFQUFFMk8sR0FBR3RLLEVBQUVuTixFQUFFeE8sUUFBUSxPQUFPd08sRUFBRXhPLFNBQVN3YixFQUFFcTdCLFFBQVFyb0MsRUFBRXhPLFNBQVMsV0FBVzJiLEdBQUdILEVBQUVzN0IsVUFBVW43QixFQUFFLENBQUMsQ0FBQzFnQixHQUFFLEVBQUksR0FBRSxDQUFDdVQsRUFBRXlYLElBQUksQ0FBQzh3QixhQUFhdm9DLEVBQUV3b0MsVUFBVTdGLEVBQUUsRUFBRTNpQyxFQUFFek0sUUFBUXlNLEVBQUVrb0MsdUJBQXVCLEVBQUUsR0FBRyxTQUFTendCLEVBQUV6WCxFQUFFZ04sR0FBZ0IzZ0IsT0FBT2c3QyxlQUFlcm5DLEVBQUUsYUFBYSxDQUFDeFAsT0FBTSxJQUFLd1AsRUFBRXlvQyxxQkFBZ0IsRUFBTyxJQUFJdDdCLEVBQUVILEVBQUUsS0FBSzIxQixFQUFFMzFCLEVBQUUsS0FBS3ZnQixFQUFFLENBQUNpOEMsR0FBRyxFQUFFQyxZQUFZLElBQUlDLE9BQU8sSUFBSUMsT0FBTyxJQUFJQyxZQUFZLElBQUlDLGFBQWEsS0FBS0MsUUFBUSxLQUFLQyxhQUFhLE1BQU1qcEMsRUFBRXlvQyxnQkFBZ0IsU0FBU2h4QixHQUFHLElBQUl6WCxFQUFFLGlCQUFpQnlYLEVBQUVockIsRUFBRWdyQixHQUFHQSxFQUFFekssR0FBRSxFQUFHRyxFQUFFOHhCLFVBQVUsTUFBTW4yQixFQUFFa0UsRUFBRSxHQUFHdEcsRUFBRXNHLEVBQUUsR0FBR3lPLEdBQUUsRUFBR3RPLEVBQUVzeUIseUJBQXlCLzRCLEVBQUVtOEIsT0FBT3FHLFdBQVksR0FBRSxJQUFJLE9BQU0sRUFBRy83QixFQUFFa3lCLHVCQUF1QjVqQixHQUFJLEdBQUUsS0FBSSxFQUFHa25CLEVBQUV3RyxhQUFhMXRCLEdBQUczUyxHQUFHOUksQ0FBQyxFQUFFQSxFQUFFek0sUUFBUXlNLEVBQUV5b0MsZUFBZSxFQUFFLEdBQUcsU0FBU2h4QixFQUFFelgsRUFBRWdOLEdBQWdCM2dCLE9BQU9nN0MsZUFBZXJuQyxFQUFFLGFBQWEsQ0FBQ3hQLE9BQU0sSUFBSyxJQUFJMmMsRUFBRUgsRUFBRSxLQUFLMjFCLEVBQUUsQ0FBQyxZQUFZLGVBQWV5RyxRQUFRLGVBQWUzOEMsRUFBRSxDQUFDNDhDLGtCQUFrQixDQUFDQyxPQUFPLHFCQUFxQnJTLFdBQVUsSUFBS2g2QixNQUFNdUMsVUFBVXU5QixLQUFLLFdBQVcvOEIsRUFBRXpNLFFBQVEsU0FBU2trQixHQUFHLElBQUl6WCxHQUFFLEVBQUdtTixFQUFFOHhCLFdBQVUsR0FBSWp5QixFQUFFaE4sRUFBRSxHQUFHOEksRUFBRTlJLEVBQUUsR0FBRzBHLEVBQUUsV0FBVyxJQUFJMUcsRUFBRWdOLEVBQUUsUUFBUWhOLEVBQUU2aUMsT0FBTzBHLGNBQVMsSUFBU3ZwQyxPQUFFLEVBQU9BLEVBQUV3cEMsSUFBSSxHQUFHeDhCLEVBQUUsQ0FBQyxJQUFJRyxFQUFFSCxFQUFFeThCLFFBQVEsYUFBYSxTQUFTOUcsRUFBRWxyQixHQUFHLFVBQVUzTyxFQUFFLGNBQWMsTUFBTXFFLE9BQUUsRUFBT0EsRUFBRXU4QixTQUFTLE1BQU1qb0MsUUFBUXJHLE1BQU0sNkRBQTZELEVBQUVxZ0IsRUFBRSxTQUFTaEUsR0FBRyxHQUFHLGlCQUFpQixNQUFNQSxPQUFFLEVBQU9BLEVBQUVycEIsU0FBU3FwQixFQUFFcnBCLE9BQU9PLFNBQVMsYUFBYSxpQkFBaUIsTUFBTThvQixPQUFFLEVBQU9BLEVBQUV0akIsTUFBTSxJQUFJLElBQUk2TCxFQUFFNmxDLEtBQUsvTyxNQUFNLE1BQU1yZixPQUFFLEVBQU9BLEVBQUV0akIsTUFBTSx3QkFBd0IsTUFBTTZMLE9BQUUsRUFBT0EsRUFBRTQyQixVQUFVbHdCLEdBQUcsQ0FBQyxNQUFNK1EsR0FBRyxNQUFNLENBQUMsRUFBRSxPQUFNLEVBQUd0SyxFQUFFa3lCLHVCQUF1QjM0QixHQUFJLEdBQUUsQ0FBQytRLEtBQUksRUFBR3RLLEVBQUVreUIsdUJBQXVCd0ksV0FBV25oQyxFQUFFLEdBQUdtaEMsV0FBV25oQyxFQUFFLEtBQUttaEMsV0FBV25oQyxFQUFFLElBQUssR0FBRSxLQUFJLEVBQUd5RyxFQUFFa3lCLHVCQUF1QixPQUFPd0QsT0FBTzhHLElBQUlDLFlBQVkvRCxLQUFLQyxVQUFVcjVDLEdBQUcsS0FBS28yQyxPQUFPcUUsaUJBQWlCLFVBQVV6ckIsR0FBRSxHQUFJLFdBQVcsT0FBT29uQixPQUFPbUUsb0JBQW9CLFVBQVV2ckIsRUFBRSxDQUFFLEdBQUUsSUFBSXpPLENBQUMsQ0FBQyxFQUFFLElBQUksU0FBU3lLLEVBQUV6WCxFQUFFZ04sR0FBZ0IzZ0IsT0FBT2c3QyxlQUFlcm5DLEVBQUUsYUFBYSxDQUFDeFAsT0FBTSxJQUFLd1AsRUFBRTZwQyw0QkFBdUIsRUFBTyxJQUFJMThCLEVBQUVILEVBQUUsS0FBS2hOLEVBQUU2cEMsdUJBQXVCLFNBQVNweUIsRUFBRXpYLEdBQUcsSUFBSWdOLEdBQUUsRUFBR0csRUFBRTh4QixVQUFVai9CLEdBQUcyaUMsRUFBRTMxQixFQUFFLEdBQUd2Z0IsRUFBRXVnQixFQUFFLEdBQUcsT0FBTSxFQUFHRyxFQUFFa3lCLHVCQUF1QjVuQixHQUFHaHJCLEVBQUV1VCxFQUFHLEdBQUUsQ0FBQ3lYLEVBQUV6WCxJQUFJeVgsR0FBR2tyQixDQUFDLENBQUMsRUFBRSxJQUFJLFNBQVNsckIsRUFBRXpYLEVBQUVnTixHQUFnQjNnQixPQUFPZzdDLGVBQWVybkMsRUFBRSxhQUFhLENBQUN4UCxPQUFNLElBQUt3UCxFQUFFOHBDLGlCQUFZLEVBQU8sSUFBSTM4QixFQUFFSCxFQUFFLElBQUloTixFQUFFOHBDLFlBQVksV0FBVyxRQUFPLEVBQUczOEIsRUFBRXM3QixpQkFBaUIsU0FBUyxFQUFFem9DLEVBQUV6TSxRQUFReU0sRUFBRThwQyxXQUFXLEVBQUUsSUFBSSxTQUFTcnlCLEVBQUV6WCxFQUFFZ04sR0FBZ0IzZ0IsT0FBT2c3QyxlQUFlcm5DLEVBQUUsYUFBYSxDQUFDeFAsT0FBTSxJQUFLd1AsRUFBRStwQywrQkFBMEIsRUFBTyxJQUFJNThCLEVBQUVILEVBQUUsS0FBS2hOLEVBQUUrcEMsMEJBQTBCLG9CQUFvQmxILE9BQU8xMUIsRUFBRTY4QixnQkFBZ0I3OEIsRUFBRWt5QixVQUFVci9CLEVBQUV6TSxRQUFReU0sRUFBRStwQyx5QkFBeUIsRUFBRSxJQUFJLFNBQVN0eUIsRUFBRXpYLEVBQUVnTixHQUFnQjNnQixPQUFPZzdDLGVBQWVybkMsRUFBRSxhQUFhLENBQUN4UCxPQUFNLElBQUt3UCxFQUFFaXFDLDBCQUFxQixFQUFPLElBQUk5OEIsRUFBRUgsRUFBRSxLQUFLaE4sRUFBRWlxQyxxQkFBcUIsU0FBU3h5QixHQUFHLElBQUl6WCxFQUFFeVgsRUFBRW9rQixJQUFJN3VCLEVBQUV5SyxFQUFFcGdCLFNBQVNzckMsRUFBRWxyQixFQUFFeXlCLE9BQU0sRUFBRy84QixFQUFFa3lCLHVCQUF1QixJQUFJNW5CLEVBQUUsV0FBVyxJQUFJQSxFQUFFLEdBQUdrckIsRUFBRSxPQUFPLFFBQVFsckIsRUFBRXpYLEVBQUV4TyxlQUFVLElBQVNpbUIsT0FBRSxFQUFPQSxFQUFFK0osUUFBUSx1QkFBa0IsRUFBT3hVLEdBQUcsRUFBRSxPQUFPK3VCLFNBQVNtTCxpQkFBaUIsUUFBUXp2QixHQUFHLFdBQVcsT0FBT3NrQixTQUFTaUwsb0JBQW9CLFFBQVF2dkIsRUFBRSxDQUFFLEdBQUUsQ0FBQ3pLLEVBQUVoTixFQUFFMmlDLEdBQUcsRUFBRTNpQyxFQUFFek0sUUFBUXlNLEVBQUVpcUMsb0JBQW9CLEVBQUUsSUFBSSxTQUFTeHlCLEVBQUV6WCxFQUFFZ04sR0FBZ0IzZ0IsT0FBT2c3QyxlQUFlcm5DLEVBQUUsYUFBYSxDQUFDeFAsT0FBTSxJQUFLd1AsRUFBRW1wQyxpQkFBWSxFQUFPLElBQUloOEIsRUFBRUgsRUFBRSxLQUFLaE4sRUFBRW1wQyxZQUFZLFNBQVMxeEIsSUFBRyxFQUFHdEssRUFBRWt5Qix1QkFBdUIsSUFBSXIvQixFQUFFLFdBQVd5WCxFQUFFb3JCLE9BQU9xRyxXQUFXLEVBQUUsT0FBT3JHLE9BQU9xRSxpQkFBaUIsU0FBU2xuQyxFQUFFLENBQUNtcUMsU0FBUSxJQUFLLFdBQVcsT0FBT3RILE9BQU9tRSxvQkFBb0IsU0FBU2huQyxFQUFFLENBQUUsR0FBRSxHQUFHLEVBQUVBLEVBQUV6TSxRQUFReU0sRUFBRW1wQyxXQUFXLEVBQUUsSUFBSSxTQUFTMXhCLEVBQUV6WCxFQUFFZ04sR0FBZ0IzZ0IsT0FBT2c3QyxlQUFlcm5DLEVBQUUsYUFBYSxDQUFDeFAsT0FBTSxJQUFLd1AsRUFBRW9xQyxzQkFBaUIsRUFBTyxJQUFJajlCLEVBQUVILEVBQUUsS0FBS2hOLEVBQUVvcUMsaUJBQWlCLFNBQVMzeUIsSUFBRyxFQUFHdEssRUFBRWt5Qix1QkFBdUIsSUFBSXIvQixFQUFFLFdBQVd5WCxHQUFHLFlBQVlza0IsU0FBU3NPLGlCQUFpQjV5QixHQUFHLEVBQUUsT0FBT29yQixPQUFPcUUsaUJBQWlCLG1CQUFtQmxuQyxHQUFFLEdBQUksV0FBVyxPQUFPNmlDLE9BQU9tRSxvQkFBb0IsbUJBQW1CaG5DLEVBQUUsQ0FBRSxHQUFFLENBQUN5WCxHQUFHLENBQUMsRUFBRSxJQUFJLFNBQVNBLEVBQUV6WCxFQUFFZ04sR0FBZ0IzZ0IsT0FBT2c3QyxlQUFlcm5DLEVBQUUsYUFBYSxDQUFDeFAsT0FBTSxJQUFLd1AsRUFBRXNxQyx1QkFBa0IsRUFBTyxJQUFJbjlCLEVBQUVILEVBQUUsS0FBS2hOLEVBQUVzcUMsa0JBQWtCLFNBQVM3eUIsRUFBRXpYLEdBQUcsU0FBU2dOLEVBQUVBLEdBQUd5SyxFQUFFam1CLFVBQVVpbUIsRUFBRWptQixRQUFRKzRDLFNBQVN2OUIsRUFBRXhnQixTQUFTd1QsR0FBRyxFQUFDLEVBQUdtTixFQUFFa3lCLHVCQUF1QixPQUFPdEQsU0FBU21MLGlCQUFpQixZQUFZbDZCLEdBQUcsV0FBVyt1QixTQUFTaUwsb0JBQW9CLFlBQVloNkIsRUFBRSxDQUFFLEdBQUUsQ0FBQyxFQUFFLElBQUksU0FBU3lLLEVBQUV6WCxFQUFFZ04sR0FBZ0IzZ0IsT0FBT2c3QyxlQUFlcm5DLEVBQUUsYUFBYSxDQUFDeFAsT0FBTSxJQUFLLElBQUkyYyxFQUFFSCxFQUFFLEtBQUtoTixFQUFFek0sUUFBUSxXQUFXLElBQUlra0IsR0FBRSxFQUFHdEssRUFBRWl5QixRQUFRLE1BQU0sT0FBTSxFQUFHanlCLEVBQUVreUIsdUJBQXVCNW5CLEVBQUVqbUIsVUFBVWltQixFQUFFam1CLFVBQVVpbUIsRUFBRWptQixRQUFRLEtBQU0sSUFBRyxTQUFTd08sR0FBR3lYLEVBQUVqbUIsUUFBUXdPLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxTQUFTeVgsRUFBRXpYLEVBQUVnTixHQUFnQjNnQixPQUFPZzdDLGVBQWVybkMsRUFBRSxhQUFhLENBQUN4UCxPQUFNLElBQUt3UCxFQUFFd3FDLG1CQUFjLEVBQU8sSUFBSXI5QixFQUFFSCxFQUFFLEtBQUtoTixFQUFFd3FDLGNBQWMsV0FBVyxNQUFNLENBQUNDLE1BQUssRUFBR3Q5QixFQUFFc3lCLHlCQUF5QixJQUFJaG9CLEVBQUVvckIsT0FBTzZILFFBQVEsS0FBSzFxQyxFQUFFKzdCLFNBQVM2SCxLQUFLNWpDLEVBQUVrOEIsTUFBTW5qQyxTQUFTLFFBQVFpSCxFQUFFazhCLE1BQU15TixJQUFJLElBQUlseUIsQ0FBRSxHQUFFLElBQUlrekIsUUFBTyxFQUFHeDlCLEVBQUVzeUIseUJBQXlCLElBQUlob0IsRUFBRXNrQixTQUFTNkgsS0FBSzVqQyxFQUFFeVgsRUFBRXlrQixNQUFNeU4sSUFBSTM4QixHQUFHLEVBQUU2QyxTQUFTN1AsR0FBRyxLQUFLeVgsRUFBRXlrQixNQUFNbmpDLFNBQVMsR0FBRzBlLEVBQUV5a0IsTUFBTXlOLElBQUksR0FBRzM4QixHQUFHNjFCLE9BQU8wQixTQUFTLEdBQUcsRUFBRTEwQixTQUFTN1AsR0FBRyxLQUFNLEdBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTeVgsRUFBRXpYLEVBQUVnTixHQUFnQixJQUFJRyxFQUFFamdCLE1BQU1BLEtBQUswOUMsaUJBQWlCLFNBQVNuekIsR0FBRyxPQUFPQSxHQUFHQSxFQUFFb3pCLFdBQVdwekIsRUFBRSxDQUFDbGtCLFFBQVFra0IsRUFBRSxFQUFFcHJCLE9BQU9nN0MsZUFBZXJuQyxFQUFFLGFBQWEsQ0FBQ3hQLE9BQU0sSUFBS3dQLEVBQUU4cUMscUJBQWdCLEVBQU8sSUFBSW5JLEVBQUUzMUIsRUFBRSxLQUFLdmdCLEVBQUUwZ0IsRUFBRUgsRUFBRSxNQUFNaE4sRUFBRThxQyxnQkFBZ0IsU0FBU3J6QixHQUFHLElBQUl6WCxHQUFFLEVBQUcyaUMsRUFBRXZELFFBQVEsTUFBTXB5QixFQUFFeUssRUFBRW9rQixJQUFJMXVCLEVBQUVzSyxFQUFFd0osT0FBT25ZLE9BQUUsSUFBU3FFLEVBQUUsRUFBRUEsRUFBRXpHLEVBQUUrUSxFQUFFd3JCLE1BQU14bkIsT0FBRSxJQUFTL1UsRUFBRSxJQUFJQSxFQUFFLE9BQU0sRUFBR2k4QixFQUFFdEQsdUJBQXVCci9CLEVBQUV4TyxRQUFRLElBQUkvRSxFQUFFOEcsUUFBUSxLQUFLLENBQUMwdkMsTUFBTXhuQixFQUFFeW5CLGlCQUFnQixHQUFLLEdBQUUsS0FBSSxFQUFHUCxFQUFFbEQseUJBQXlCenlCLEdBQUdoTixFQUFFeE8sU0FBU3dPLEVBQUV4TyxRQUFRd3pDLGNBQWNoNEIsRUFBRXhiLFFBQVEsS0FBSyxDQUFDeXZCLE9BQU8sV0FBVyxPQUFPblksQ0FBQyxFQUFFMDZCLFdBQVUsR0FBSyxHQUFFLENBQUMxNkIsRUFBRWtFLEdBQUcsQ0FBQyxFQUFFLElBQUksU0FBU2hOLEdBQWdCQSxFQUFFc1gsUUFBUUcsQ0FBQyxHQUFHekssRUFBRSxHQUFHLFNBQVNHLEVBQUVzSyxHQUFHLElBQUlrckIsRUFBRTMxQixFQUFFeUssR0FBRyxRQUFHLElBQVNrckIsRUFBRSxPQUFPQSxFQUFFcnJCLFFBQVEsSUFBSTdxQixFQUFFdWdCLEVBQUV5SyxHQUFHLENBQUNILFFBQVEsSUFBSSxPQUFPdFgsRUFBRXlYLEdBQUd6cUIsS0FBS1AsRUFBRTZxQixRQUFRN3FCLEVBQUVBLEVBQUU2cUIsUUFBUW5LLEdBQUcxZ0IsRUFBRTZxQixPQUFPLENBQUMsT0FBT25LLEVBQUV5MUIsRUFBRSxXQUFXLEdBQUcsaUJBQWlCbUksV0FBVyxPQUFPQSxXQUFXLElBQUksT0FBTzc5QyxNQUFNLElBQUltVixTQUFTLGNBQWIsRUFBNkIsQ0FBQyxNQUFNb1YsR0FBRyxHQUFHLGlCQUFpQm9yQixPQUFPLE9BQU9BLE1BQU0sQ0FBQyxDQUE3SixHQUFpSzExQixFQUFFLElBQUksQ0FBL2xhLHNHQ3lCMVYxUCxPQUFPLGdCQUVOdXRDLEtBQUssQ0FDWEMsWUFBYSxLQUNiQyxVQUFXLGNBQ1hDLGNBQWUsQ0FDYkMsYUFBYSxvQkFZakJwSixRQUFBQyxJQUFBQyxVQUNZRSxVQUFVaUosS0FHdEIsTUFBTUMsR0FBY3QxQyxJQUNsQixJQUFLQSxJQUFhQSxFQUFTdTFDLEtBQUtsUSxTQUM5QixPQUVGLE1BQU1tUSxNQUFFQSxFQUFLblEsU0FBRUEsR0FBYXJsQyxFQUFTdTFDLEtBR3JDLE1BQU8sQ0FETEMsR0FBc0IsU0FBYkEsRUFBTSxHQUFnQkMsVUFBUXpyQyxFQUFFLFNBQVd5ckMsVUFBUXpyQyxFQUFFLFlBQ2xEcTdCLEVBQVMsRUFHekIsU0FBU3FRLEdBQXFCcjVDLEdBQzVCLEdBQWtCLGdCQUFkQSxFQUFLbkUsS0FBd0IsQ0FDL0IsR0FBa0Isa0JBQWRtRSxFQUFLbkUsS0FDUCxNQUFPLENBQUMsR0FBSXU5QyxVQUFRenJDLEVBQUUsb0JBRXhCLEdBQWtCLG9CQUFkM04sRUFBS25FLEtBQ1AsTUFBTyxDQUFDLEdBQUl1OUMsVUFBUXpyQyxFQUFFLHFCQUV4QixHQUFrQiwyQkFBZDNOLEVBQUtuRSxLQUNQLE1BQU8sQ0FBQyxHQUFJdTlDLFVBQVF6ckMsRUFBRSw4QkFHeEIsSUFDSTJyQyxHQURDbDlDLEVBQU1jLEdBQVNtTSxHQUFhckosRUFBS3JFLFlBQVksR0FFbEQsR0FDRXFFLEVBQUtyRSxXQUFXWSxNQUFNZ0IsY0FBY2pCLFNBQVMsZUFDN0MwRCxFQUFLckUsV0FBV1ksTUFBTWdCLGNBQWNqQixTQUFTLGVBQzdDLENBQ0FnOUMsRUFBaUJGLFVBQVF6ckMsRUFBRSx3QkFFM0IsTUFBTyxDQUFDMnJDLEVBQWdCbDlDLE9BQU1VLEVBRGJrRCxFQUFLckUsV0FBV2MsU0FJbkMsR0FBOEIsYUFBMUJ1RCxFQUFLckUsV0FBV1ksTUFFbEIsT0FEQSs4QyxFQUFpQkYsVUFBUXpyQyxFQUFFLFlBQ3BCLENBQUMyckMsRUFBZ0JsOUMsT0FBTVUsT0FBV0EsR0FHM0MsR0FBOEIsWUFBMUJrRCxFQUFLckUsV0FBV1ksTUFFbEIsT0FEQSs4QyxFQUFpQkYsVUFBUXpyQyxFQUFFLFdBQ3BCLENBQUMyckMsRUFBZ0JsOUMsT0FBTVUsT0FBV0EsR0FHM0MsR0FBSWtELEVBQUtyRSxXQUFXc0wsS0FDbEJxeUMsRUFBaUJGLFVBQVF6ckMsRUFDdkIzTixFQUFLckUsV0FBV3NMLEtBQUsxSixjQUFjZ0QsUUFBUSxZQUFhLFNBRXJELENBQ0wsTUFBTWhFLEVBQVF5RCxFQUFLckUsV0FBV1ksTUFDM0JnRSxRQUFRLFNBQVUsSUFDbEJoRCxjQUNBZ0QsUUFBUSxZQUFhLElBQ3hCKzRDLEVBQWlCRixVQUFRenJDLEVBQUVwUixHQUc3QixHQUNFeUQsRUFBS3JFLFdBQVdQLEtBQ1csU0FBMUI0RSxFQUFLckUsV0FBV1ksT0FBOEMsWUFBMUJ5RCxFQUFLckUsV0FBV1ksT0FDckQsQ0FBQSxJQUFBZzlDLEVBQ0EsTUFBTWo2QyxFQUFXOEosR0FBWXBKLEVBQUtyRSxZQUM1QnNMLFVBQUlzeUMsRUFBR3Y1QyxFQUFLckUsV0FBV2dJLG9CQUFRNDFDLFNBQXhCQSxFQUEwQkwsS0FBS0MsTUFDdENuUSxFQUFXaVEsR0FBWWo1QyxFQUFLckUsV0FBV2dJLFVBQzdDLE1BQU8sQ0FDTDIxQyxFQUNBajZDLEdBQVlqRCxFQUFNa0QsR0FDbEJwQyxFQUNBb0MsRUFDQTJILEVBQ0EraEMsR0FHSixHQUM0QixrQkFBMUJocEMsRUFBS3JFLFdBQVdZLE9BQ1UscUJBQTFCeUQsRUFBS3JFLFdBQVdZLE1BQ2hCLENBQ0EsTUFBTVksUUFBRUEsRUFBT29HLEtBQUVBLEdBQVN2RCxFQUFLckUsV0FHL0IsTUFBTyxDQUFDMjlDLEVBRlFuOEMsRUFBVWtDLEdBQVlsQyxFQUFRN0IsTUFBTSxLQUFLLEdBQUlpSSxHQUFRbkgsRUFFcENjLEVBQU9xRyxPQUFNekcsRUFEN0JtOEMsR0FBWWo1QyxFQUFLckUsV0FBV2dJLFdBRy9DLE1BQU8sQ0FBQzIxQyxFQUFnQmw5QyxFQUFNYyxHQUVoQyxNQUFNbkIsT0FBRUEsRUFBTUUsWUFBRUEsR0FBZ0IrRCxFQUFLckUsV0FDL0I2OUMsRUFBUXo5QyxFQUFPTSxTQUFZLEtBQUlOLEVBQU9NLGtCQUFvQixHQUMxRG85QyxFQUFReDlDLEVBQVlJLFNBQVksS0FBSUosRUFBWUksV0FBYSxHQUM3RHE5QyxFQUFRMzlDLEVBQU9LLEtBQ2Z1OUMsRUFBUTE5QyxFQUFZRyxLQUMxQixNQUFPLENBQ0xnOUMsVUFBUXpyQyxFQUFFLGdCQUNULEdBQUV5ckMsVUFBUXpyQyxFQUFFLGFBQWErckMsSUFBUUYsS0FBU0osVUFBUXpyQyxFQUNqRCxrQkFDR2dzQyxJQUFRRixJQUNiejVDLEVBQUs0NUMsZUFFVCxDQUVBLFNBQVNDLEdBQW1DNzVDLEdBQzFDLE1BQU04eUIsRUFBTzZNLEdBQU85SixLQUFLNzFCLEVBQUtyRSxXQUFXbTNCLE1BQ3pDLElBQUl6MUIsRUFBTTJDLEVBQUtyRSxXQUFXbStDLFNBQ3RCVixVQUFRenJDLEVBQUUsV0FDVnlyQyxVQUFRenJDLEVBQUUsYUFTZCxPQVBFdFEsRUFERXkxQixFQUFLVyxPQUFPa00sS0FBVSxPQUNqQixHQUFFdGlDLEtBQU8rN0MsVUFBUXpyQyxFQUFFLGNBQ2pCbWxCLEVBQUtXLE9BQU9rTSxLQUFTbGdCLElBQUksRUFBRyxPQUFRLE9BQ3RDLEdBQUVwaUIsS0FBTys3QyxVQUFRenJDLEVBQUUsaUJBRW5CLEdBQUV0USxLQUFPeTFCLEVBQUszbkIsT0FBTyxhQUU5QjlOLEVBQU8sR0FBRUEsS0FBT3NpQyxHQUFPN00sR0FBTTNuQixPQUFPLFdBQzdCOU4sQ0FDVCxDQTZFQSxNQUFNMDhDLFdBQXNCak4sVUFBTWtOLFVBMEZoQ3pQLFdBQUFBLENBQVlDLEdBQ1ZDLE1BQU1ELEdBQU8zdkMsS0E4QmZvL0MsbUJBQXFCLEtBQ2ZiLFVBQVF2eUMsV0FBYWhNLEtBQUsydkMsTUFBTXJvQyxNQUNsQ2kzQyxVQUFRYyxlQUFlci9DLEtBQUsydkMsTUFBTXJvQyxPQUl0Q3RILEtBQ0FzL0MsaUNBQW1DQyxJQUU3QkEsRUFBVWo4QyxRQUFVdEQsS0FBSzQ1QyxNQUFNdDJDLE9BQVV0RCxLQUFLNDVDLE1BQU00RixTQUN0RHgvQyxLQUFLeS9DLFNBQVMsQ0FDWm44QyxNQUFPaThDLEVBQVVqOEMsU0FHdEJ0RCxLQUVEcTFDLFNBQVcsQ0FBQzNDLEdBQVNnTixXQUFVOTRDLGFBQzdCLE1BQU0rNEMsRUFBVyxDQUNmcjhDLE1BQU90RCxLQUFLNC9DLFFBQVVGLEdBQVksR0FDbENHLG1CQUFvQjcvQyxLQUFLMnZDLE1BQU1tUSxVQUlqQyxHQURBOS9DLEtBQUs0L0MsT0FBUyxLQUNUNS9DLEtBQUs0NUMsTUFBTTRGLFNBS1QsR0FBZSxVQUFYNTRDLEdBQXNCNUcsS0FBSzQ1QyxNQUFNbUcsTUFBTyxDQU1qRCxHQUhJLy9DLEtBQUs0NUMsTUFBTW9HLGFBQ2JwRixhQUFhNTZDLEtBQUs0NUMsTUFBTW9HLGFBRVgsU0FBWHA1QyxFQUFtQixDQUVyQixNQUFNcTVDLEVBQVF0RixZQUFXLEtBQ3ZCMzZDLEtBQUt5L0MsU0FBUyxDQUFFUyxRQUFRLEdBQVEsR0FDL0IsS0FDSFAsRUFBU0ssWUFBY0MsRUFDdkJOLEVBQVNPLFFBQVMsRUFFcEJsZ0QsS0FBS3kvQyxTQUFTRSxTQWxCZEEsRUFBU0gsU0FBVSxFQUNuQngvQyxLQUFLeS9DLFNBQVNFLEdBQVUsSUFDdEIzL0MsS0FBS3V3QyxjQUFjLENBQUVqdEMsTUFBT284QyxHQUFZLFFBa0I3QzEvQyxLQUVEczFDLE9BQVMsS0FDSHQxQyxLQUFLNDVDLE1BQU1pRyxxQkFHWDcvQyxLQUFLNDVDLE1BQU00RixTQUNieC9DLEtBQUtnRixNQUFNaXVDLFFBRWJqekMsS0FBS3kvQyxTQUFTLENBQ1pELFNBQVMsRUFDVEssb0JBQW9CLEVBQ3BCdjhDLE1BQU90RCxLQUFLMnZDLE1BQU1yc0MsUUFDbEIsRUFDSHRELEtBRURtZ0QsV0FBYSxDQUFDNTFCLEVBQUdva0IsS0FDZixHQUFJM3VDLEtBQUs0NUMsTUFBTW1HLE1BQU8sQ0FDcEIsR0FBNEIsMkJBQXhCcFIsRUFBSXRnQyxXQUFXck4sS0FZakIsWUFYQWhCLEtBQUt5L0MsU0FDSCxDQUNFajRDLFFBQVMsQ0FBQyxZQUFhLFFBQ3ZCNDRDLFdBQVcsRUFDWEMsaUJBQWtCMVIsRUFBSXRnQyxXQUFXck4sS0FDakNzQyxNQUFPLEtBRVQsS0FDRXRELEtBQUt1d0MsY0FBYyxDQUFFanRDLE1BQU8sSUFBSyxJQUt2QyxHQUMwQixTQUF4QnFyQyxFQUFJdGdDLFdBQVdyTixNQUNTLGdCQUF4QjJ0QyxFQUFJdGdDLFdBQVdyTixLQWFmLFlBWEFoQixLQUFLeS9DLFNBQ0gsQ0FDRWo0QyxRQUFTeEgsS0FBSzJ2QyxNQUFNbm9DLFFBQ3BCNDRDLFdBQVcsRUFDWEMsaUJBQWtCMVIsRUFBSXRnQyxXQUFXck4sS0FDakNzL0MsZ0JBQWlCM1IsRUFBSTJSLGtCQUV2QixLQUNFdGdELEtBQUt1d0MsY0FBYyxDQUFFanRDLE1BQU8sSUFBSyxJQUt2Q3RELEtBQUt1Z0QsZUFBZ0IsRUFDckJ2Z0QsS0FBS3kvQyxTQUNILENBQ0VELFNBQVMsRUFDVGw4QyxNQUFPcXJDLEVBQUk2UixrQkFFYixLQUNFeGdELEtBQUtnRixNQUFNeTdDLE9BQ1B6Z0QsS0FBSzJ2QyxNQUFNK1EsZ0JBQ2IxZ0QsS0FBSzJ2QyxNQUFNK1EsZ0JBQWdCL1IsRUFBSXRnQyxXQUFZc2dDLEVBQUkyUixpQkFFL0N0Z0QsS0FBSzJ2QyxNQUFNNkMsU0FBUzdELEVBQUl0Z0MsV0FBWXJPLEtBQUsydkMsTUFBTXB2QyxJQUVqRFAsS0FBS3kvQyxTQUNILENBQ0VJLG9CQUFvQixFQUNwQnI0QyxRQUFTeEgsS0FBSzJ2QyxNQUFNbm9DLFFBQ3BCNDRDLFdBQVcsRUFDWC9QLFlBQWEsS0FFZixLQUNFcndDLEtBQUt1Z0QsZUFBZ0IsQ0FBSyxLQUk1QnZnRCxLQUFLMnZDLE1BQU1nUixhQUNUM2dELEtBQUsydkMsTUFBTW1RLFdBQVk5L0MsS0FBSzJ2QyxNQUFNaVIsWUFFcEM1Z0QsS0FBSzJ2QyxNQUFNZ1IsY0FFVDNnRCxLQUFLMnZDLE1BQU1tUSxVQUNiOS9DLEtBQUs2Z0QsNEJBS1g3Z0QsS0FBS3kvQyxVQUNIcUIsS0FDRVQsaUJBQWtCUyxFQUFVeDlDLFVBRTlCLElBQU10RCxLQUFLK2dELDJCQUdoQi9nRCxLQUVEZ2hELDRCQUE4QixLQUM1QmhoRCxLQUFLeS9DLFNBQVMsQ0FDWnBQLFlBQWEsR0FDYjdvQyxRQUFTeEgsS0FBSzJ2QyxNQUFNbm9DLFFBQ3BCNDRDLFdBQVcsRUFDWFosU0FBUyxHQUNULEVBQ0h4L0MsS0FFRHl3QyxtQkFBcUJwaUMsR0FFRywyQkFBcEJBLEVBQVdyTixNQUNTLFNBQXBCcU4sRUFBV3JOLEtBRUosR0N6ZEUsU0FBa0JGLEdBQy9CLE1BQU1OLEVBQVFnTyxHQUFhMU4sR0FBWSxHQUN2QyxPQUFRQSxFQUFXWSxPQUNqQixJQUFLLGdCQUNMLElBQUssa0JBQ0wsSUFBSyxlQUNMLElBQUssT0FDSCxPQUFPbEIsRUFBTSxJQUFNQSxFQUFNLEdBQzNCLElBQUssZ0NBQ0wsSUFBSyxpQkFDSCxPQUFPQSxFQUFNLEdBQ2YsUUFDRSxPQUFPQSxFQUFNZixPQUFTLEdBQWtCLEtBQWJlLEVBQU0sR0FDN0JBLEVBQU1nRixLQUFLLE1BQ1hoRixFQUFNLElBQU1BLEVBQU0sR0FFNUIsQ0QyY1d5Z0QsQ0FBUzV5QyxFQUFXdk4sWUFDNUJkLEtBRUQrZ0Qsc0JBQXdCLEtBRWEsMkJBQWhDL2dELEtBQUs0NUMsTUFBTXlHLGtCQUNzQixTQUFoQ3JnRCxLQUFLNDVDLE1BQU15RyxtQkFDYnJnRCxLQUFLNDVDLE1BQU1tRyxNQVlGLy9DLEtBQUs0NUMsTUFBTXlHLGtCQUFvQnJnRCxLQUFLNDVDLE1BQU1tRyxPQUVuRC8vQyxLQUFLeS9DLFNBQ0gsQ0FDRVksaUJBQWtCLEtBQ2xCYixTQUFTLElBRVgsS0FDTXgvQyxLQUFLNDVDLE1BQU12SixZQUFZNXdDLFNBQ3pCTyxLQUFLZ0YsTUFBTXk3QyxPQUNYemdELEtBQUsydkMsTUFBTTZDLFNBQ1R4eUMsS0FBSzQ1QyxNQUFNdkosWUFBWXJ3QyxLQUFLNDVDLE1BQU0wRyxpQkFDbEN0Z0QsS0FBSzJ2QyxNQUFNcHZDLElBR1RQLEtBQUsydkMsTUFBTW1RLFVBQ2I5L0MsS0FBSzZnRCxxQkFHTDdnRCxLQUFLMnZDLE1BQU1nUixhQUNUM2dELEtBQUsydkMsTUFBTW1RLFdBQVk5L0MsS0FBSzJ2QyxNQUFNaVIsWUFFcEM1Z0QsS0FBSzJ2QyxNQUFNZ1Isa0JBaENuQjNnRCxLQUFLeS9DLFNBQ0gsQ0FDRVksaUJBQWtCLEtBQ2xCYixTQUFTLElBRVgsS0FDRXgvQyxLQUFLZ0YsTUFBTWl1QyxPQUFPLEtBZ0N6Qmp6QyxLQUVEa2hELFlBQWMsSUFFVmpQLFVBQUFoRCx3QkFDRWp1QyxLQUFLLFNBQ0xneUMsVUFBV3ZCLEdBQU8sZUFDbEIrQixRQUFTeHpDLEtBQUtvd0MsV0FDZCxhQUFZbU8sVUFBUXpyQyxFQUFFLHVCQUV0Qm0vQixVQUFBaEQsY0FBQzBFLFdBQUtDLElBQUksUUFBUTFDLE1BQU9seEMsS0FBSzJ2QyxNQUFNdUIsU0FHekNseEMsS0FFRHV3QyxjQUFnQixFQUFHanRDLFFBQU82OUMsbUJBQ2pCbmhELEtBQUt5L0MsU0FDVixDQUFFTSxPQUFPLEVBQU9vQixjQUFnQkEsSUFBZ0IsSUFDaEQsS0FDRSxHQUFJbmhELEtBQUt1Z0QsY0FFUCxPQUVGLE1BQU1hLEVBQ0pDLFVBQVFyaEQsS0FBSzJ2QyxNQUFNN2xDLFVBQ25COUosS0FBSzJ2QyxNQUFNN2xDLFFBQVFySSxTQUFTLGFBQzlCLElBQUlxSSxFQUNBOUosS0FBSzQ1QyxNQUFNd0csV0FDYnQyQyxFQUFVLENBQUMsY0FFVHUzQyxVQUFRcmhELEtBQUsydkMsTUFBTTdsQyxVQUNuQjlKLEtBQUsydkMsTUFBTTdsQyxRQUFRckksU0FBUyxXQUU1QnFJLEVBQVF3QyxLQUFLLFVBR2IrMEMsVUFBUXJoRCxLQUFLMnZDLE1BQU03bEMsVUFDbkI5SixLQUFLMnZDLE1BQU03bEMsUUFBUXJJLFNBQVMsMkJBRTVCcUksRUFBUXdDLEtBQUssMEJBRUwrMEMsVUFBUXJoRCxLQUFLMnZDLE1BQU03bEMsV0FDN0JBLEVBQVUsSUFBSTlKLEtBQUsydkMsTUFBTTdsQyxTQUd2QnMzQyxJQUNDcGhELEtBQUsydkMsTUFBTW1RLFdBQ1h1QixVQUFRcmhELEtBQUsydkMsTUFBTW5vQyxVQUNsQnhILEtBQUsydkMsTUFBTW5vQyxRQUFRL0YsU0FBUyxlQUU5QnFJLEVBQVF3QyxLQUFLLDJCWlRJZzFDLEVBQzNCeDNDLEVBQ0F0QyxFQUNBdUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQWpELEVBQ0FrRCxFQUNBQyxFQUNBQyxLQUVBRixFQUFTLE1BQ1RQLEdBQ0VFLEVBQ0F0QyxFQUNBdUMsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQWpELEVBQ0FrRCxFQUNBQyxFQUNBQyxFQUNELEVZQ0tpM0MsQ0FDRXgzQyxFQVpBOUosS0FBSzQ1QyxNQUFNcHlDLFNBQ1h4SCxLQUFLNDVDLE1BQU1weUMsUUFBUXRELFFBQ2pCc1YsS0FFSTRuQyxHQUNNLGNBQU41bkMsSUFDQ3haLEtBQUs0NUMsTUFBTXdHLFlBQ1hwZ0QsS0FBSzJ2QyxNQUFNbVEsWUFPbEI5L0MsS0FBSzJ2QyxNQUFNNWxDLGNBQ1gvSixLQUFLMnZDLE1BQU0zbEMsY0FDWGhLLEtBQUsydkMsTUFBTTFsQyxjQUNYakssS0FBSzJ2QyxNQUFNemxDLGNBQ1gsQ0FDRWxGLE1BQU8xQixHQUFTLEtBRWxCaStDLElBQ0UsR0FBb0IsTUFBaEJBLEVBQ0YsT0FHRixNQUFNbFIsR0FBZWtSLEVBQWF0K0MsU0FBVyxJQUMxQ2lCLFFBQ0NtSyxHQUNzQixnQkFBcEJBLEVBQVdyTixNQUNVLGdCQUFwQnFOLEVBQVdyTixNQUNWcU4sRUFBV3ZOLFdBQVdtM0IsS0FBTzZNLEtBQVM5SixTQUUzQy8yQixLQUFJb0ssSUFDSCxHQUNzQixvQkFBcEJBLEVBQVdyTixNQUNTLGtCQUFwQnFOLEVBQVdyTixNQUNTLDJCQUFwQnFOLEVBQVdyTixNQUNTLFNBQXBCcU4sRUFBV3JOLEtBQ1gsQ0FDQSxNQUFNd2dELEVBQVV0aUQsS0FBUW1QLEdBSXhCLE9BSEFtekMsRUFBVzFnRCxXQUFXYyxRQUFVMjhDLFVBQVF6ckMsRUFDdEN6RSxFQUFXdk4sV0FBV2MsU0FFakI0L0MsRUFFVCxPQUFPbnpDLENBQVUsSUFHbkIvSyxJQUFVdEQsS0FBSzQ1QyxNQUFNdDJDLE9BQ3JCQSxJQUFVdEQsS0FBSzQ1QyxNQUFNeUcsa0JBQ1csMkJBQWhDcmdELEtBQUs0NUMsTUFBTXlHLGtCQUNxQixTQUFoQ3JnRCxLQUFLNDVDLE1BQU15RyxrQkFDcUIsZ0JBQWhDcmdELEtBQUs0NUMsTUFBTXlHLGtCQUVYcmdELEtBQUt5L0MsU0FDSCxDQUNFTSxPQUFPLEVBQ1AxUCxnQkFFRixJQUFNcndDLEtBQUsrZ0QsNEJBSWpCL2dELEtBQUsydkMsTUFBTXZsQyxTQUNYcEssS0FBSzJ2QyxNQUFNdGxDLFNBQ1osSUFHTnJLLEtBRURvd0MsV0FBYSxLQUNYLE1BQU11UCxFQUFXLENBQ2ZILFNBQVMsRUFDVGw4QyxNQUFPLEdBQ1BrRSxRQUFTeEgsS0FBSzJ2QyxNQUFNbm9DLFFBQ3BCNDRDLFdBQVcsRUFDWFAsbUJBQW9CNy9DLEtBQUsydkMsTUFBTW1RLFVBR2pDOS9DLEtBQUt5L0MsU0FBU0UsR0FBVSxJQUN0QjMvQyxLQUFLdXdDLGNBQWMsQ0FBRWp0QyxNQUFPLEdBQUk2OUMsZUFBZSxNQUU3Q25oRCxLQUFLMnZDLE1BQU04UixTQUNiemhELEtBQUsydkMsTUFBTThSLFFBQVF6aEQsS0FBSzJ2QyxNQUFNcHZDLElBRWhDUCxLQUFLZ0YsTUFBTWl1QyxPQUFPLEVBQ25CanpDLEtBRUQwaEQsYUFBZUMsSUFNYixHQUxBM2hELEtBQUtnRixNQUFNaXVDLFFBQ1hqekMsS0FBSzRoRCxvQkFDRDVoRCxLQUFLMnZDLE1BQU1tUSxVQUNiOS9DLEtBQUsydkMsTUFBTTROLE9BRVJ2OUMsS0FBSzQ1QyxNQUFNNEYsUUE4Qkx4L0MsS0FBSzJ2QyxNQUFNbVEsV0FBYTkvQyxLQUFLNDVDLE1BQU1pRyxvQkFDNUM3L0MsS0FBS3kvQyxTQUFTLENBQUVJLG9CQUFvQixRQS9CYixDQUN2QixNQUFNRixFQUFXLENBQ2ZILFNBQVMsRUFFVGEsaUJBQWtCLEtBQ2xCUixtQkFBb0I3L0MsS0FBSzJ2QyxNQUFNbVEsVUFJM0IrQixFQUFlLENBQ25CckMsU0FBUyxFQUNUYSxpQkFBa0IsS0FDbEIvOEMsTUFBT3ErQyxHQUdKM2hELEtBQUs0NUMsTUFBTXZKLFlBQVk1d0MsUUFZMUJPLEtBQUt1d0MsY0FBYyxDQUFFanRDLE1BQU90RCxLQUFLNDVDLE1BQU10MkMsUUFDdkN0RCxLQUFLeS9DLFNBQVNFLElBWFksaUJBQWZnQyxHQUE0QkEsRUFLckMzaEQsS0FBS3kvQyxTQUFTb0MsR0FBYyxJQUMxQjdoRCxLQUFLdXdDLGNBQWMsQ0FBRWp0QyxNQUFPcStDLE1BTDlCM2hELEtBQUt5L0MsU0FBU0UsR0FBVSxJQUN0QjMvQyxLQUFLdXdDLGNBQWMsQ0FBRWp0QyxNQUFPdEQsS0FBSzQ1QyxNQUFNdDJDLFlBY2hEdEQsS0FFRDhoRCxvQkFBc0JDLElBQ0EsT0FBaEJBLElBQ0YvaEQsS0FBS2dGLE1BQVErOEMsRUFBWS84QyxNQUNyQmhGLEtBQUsydkMsTUFBTXFTLFVBQ2JoaUQsS0FBSzJ2QyxNQUFNcVMsU0FBU0QsRUFBWS84QyxTQUt0Q2hGLEtBQ0FpaUQsVUFBWXZDLElBQ1YxL0MsS0FBSzQvQyxPQUFTRixFQUFTNStDLFdBQVdTLEtBQ2xDLE1BQU1vK0MsRUFBVyxDQUNmSCxTQUFTLEVBQ1RsOEMsTUFBT284QyxFQUFTNStDLFdBQVdTLEtBQzNCdy9DLHNCQUF1QnJCLEVBQ3ZCSyxPQUFPLEdBR1QvL0MsS0FBS3kvQyxTQUFTRSxHQUNkMy9DLEtBQUt1d0MsY0FBYyxDQUFFanRDLE1BQU9vOEMsRUFBUzUrQyxXQUFXUyxPQUNoRHZCLEtBQUtnRixNQUFNaXVDLE9BQU8sRUFDbkJqekMsS0FFRCt5QyxXQUFhNXRDLElBQ1gsTUFBTW1FLEVBQ1UsZ0JBQWRuRSxFQUFLbkUsS0FBc0I5QixLQUVsQmlHLEdBQ0g0NUMsZUFBZ0JDLEdBQW1DNzVDLEtBRXJEQSxFQUNBKzhDLEVBQVUxRCxHQUFxQnI1QyxHQUNyQyxPQUNFOHNDLFVBQUFoRCxjQUFDa1QsV0FDQ2g5QyxLQUFNbUUsRUFDTjQ0QyxRQUFTQSxFQUNUM1UsU0FBVXZ0QyxLQUFLNDVDLE1BQU1tRyxNQUNyQkQsU0FBVTkvQyxLQUFLMnZDLE1BQU1tUSxTQUNyQnNDLG9CQUFxQjdELFVBQVF6ckMsRUFBRSxhQUMvQm8rQixNQUFPbHhDLEtBQUsydkMsTUFBTXVCLE1BQ2xCRSx1QkFBd0JweEMsS0FBSzJ2QyxNQUFNeUIsdUJBQ25DNlEsVUFBV2ppRCxLQUFLaWlELFVBQ2hCM1EsWUFBYXR4QyxLQUFLMnZDLE1BQU0yQixZQUN4QitRLG9CQUFxQnJpRCxLQUFLMnZDLE1BQU0wUyxvQkFDaENDLGVBQWdCdGlELEtBQUsydkMsTUFBTTJTLGVBQzNCQyxRQUFTdmlELEtBQUsydkMsTUFBTTRTLFNBQ3BCLEVBRUx2aUQsS0FFRDZnRCxrQkFBb0IsS0FDbEI3Z0QsS0FBSzJ2QyxNQUFNOE4sU0FDWHo5QyxLQUFLeS9DLFNBQ0gsQ0FDRUksb0JBQW9CLEVBQ3BCdjhDLE1BQU90RCxLQUFLMnZDLE1BQU1yc0MsUUFFcEIsS0FDRXF5QyxPQUFPMEIsU0FBUyxFQUFHcjNDLEtBQUs0NUMsTUFBTTRELFNBQzlCeDlDLEtBQUtnaEQsNkJBQTZCLEdBRXJDLEVBQ0ZoaEQsS0FFRHdpRCxRQUFVOVAsSUFDUixHQUFJMXlDLEtBQUt1Z0QsY0FDUCxPQUVGLE1BQU0zTixFQUFVRixFQUFNL3lDLElBSXRCLEdBSGdCLFdBQVppekMsR0FDRjV5QyxLQUFLeS9DLFNBQVMsQ0FBRUQsU0FBUyxJQUV2QngvQyxLQUFLNDVDLE1BQU00RixRQU9iLE1BTmdCLFVBQVo1TSxHQUE0QyxLQUFyQjV5QyxLQUFLNDVDLE1BQU10MkMsT0FDcEN0RCxLQUFLeS9DLFNBQVMsQ0FBRVksa0JBQWtCLElBQVEsS0FDeENyZ0QsS0FBS3V3QyxjQUFjLENBQUVqdEMsTUFBT3RELEtBQUs0NUMsTUFBTXQyQyxPQUFRLFNBR25EdEQsS0FBSzBoRCxlQUlQLEdBQ2UsVUFBWjlPLEdBQW1DLGNBQVpBLEdBQ0gsS0FBckI1eUMsS0FBSzQ1QyxNQUFNdDJDLE1BRmIsQ0FRQSxHQUFnQixjQUFac3ZDLEdBQWdELEtBQXJCNXlDLEtBQUs0NUMsTUFBTXQyQyxNQUFjLENBQ3RELE1BQU1xOEMsRUFBVyxDQUNmSCxTQUFTLEVBQ1RsOEMsTUFBT3RELEtBQUs0NUMsTUFBTXQyQyxPQUdwQnRELEtBQUt5L0MsU0FBU0UsR0FBVSxJQUN0QjMvQyxLQUFLdXdDLGNBQWMsQ0FBRWp0QyxNQUFPdEQsS0FBSzQ1QyxNQUFNdDJDLFVBR3RDdEQsS0FBSzQ1QyxNQUFNNEYsU0FDZHgvQyxLQUFLeS9DLFNBQVMsQ0FBRUQsU0FBUyxJQUdYLFFBQVo1TSxHQUNGNXlDLEtBQUtzMUMsY0FuQkx0MUMsS0FBS293QyxjQXFCUnB3QyxLQUVEeWlELHdCQUEwQixLQUN4QixJQUFJcGdELEVBQVEsR0FDWixNQUFNcWdELEVBQWtCMWlELEtBQUs0NUMsTUFBTXZKLFlBQVksR0FPL0MsT0FOSXFTLElBQ0VBLEVBQWdCMWhELE1BQVEwaEQsRUFBZ0IxaEQsS0FBS1MsU0FBUyxjQUN4RFksRUFBTWlLLEtBQUtpeUMsVUFBUXpyQyxFQUFFLGNBRXZCelEsRUFBUUEsRUFBTW9ELE9BQU8rNEMsR0FBcUJ4K0MsS0FBSzQ1QyxNQUFNdkosWUFBWSxNQUU1RCxJQUFJLElBQUlzUyxJQUFJdGdELElBQVFtRCxLQUFLLE1BQU0sRUFDdkN4RixLQUVENHdDLGlCQUFtQixLQUNqQixNQUFNMWxDLFFBQ0pBLEVBQU8wbEMsaUJBQ1BBLEVBQWdCZ1Msa0JBQ2hCQSxHQUNFNWlELEtBQUsydkMsTUFBTTNsQyxjQUNYa0IsR0FBVzBsQyxJQUNiQSxFQUFpQjFsQyxHQUNiMDNDLEdBQ0ZBLEVBQWtCMTNDLEdBRXBCbEwsS0FBS3V3QyxjQUFjLENBQUVqdEMsTUFBT3RELEtBQUs0NUMsTUFBTXQyQyxVQUUxQ3RELEtBRUQ2aUQsOEJBQWdDLElBQ1osV0FBbEI3aUQsS0FBSzJ2QyxNQUFNcHZDLElBQ08sZ0JBQWxCUCxLQUFLMnZDLE1BQU1wdkMsSUFDTyxjQUFsQlAsS0FBSzJ2QyxNQUFNcHZDLElBQ08seUJBQWxCUCxLQUFLMnZDLE1BQU1wdkMsR0FBNkJQLEtBRTFDNGhELGtCQUFvQixLQUNBLENBQ2hCLG1CQUNBLHNCQUNBLG1CQUNBLG9CQUNBLGdCQUNBLHNCQUNBLGVBQ0EsMkJBQ0EsdUJBQ0EseUJBRVluZ0QsU0FBU3pCLEtBQUs0NUMsTUFBTXQyQyxRQUNoQ3RELEtBQUtvd0MsY0FFUnB3QyxLQUVEOGlELFFBQVUsS0FDUjlpRCxLQUFLNGhELG9CQUVMLE1BQU1wRSxFQUFVN0gsT0FBT3FDLFlBQ3ZCLE9BQU9oNEMsS0FBS3kvQyxTQUFTLENBQUVqQyxXQUFVLEVBcGtCakMxWSxHQUFPNkUsR0FBR2lDLFdBQVcrRCxFQUFNckgsVUFDM0J4RCxHQUFPdjBCLE9BQU9vL0IsRUFBTXJvQyxNQUVwQnRILEtBQUs0NUMsTUFBUSxDQUNYdDJDLE1BQU9xc0MsRUFBTXJzQyxNQUNiK3NDLFlBQWEsR0FDYm1QLFNBQVMsRUFDVE8sT0FBTyxFQUNQRixvQkFBb0IsRUFDcEJyNEMsUUFBU21vQyxFQUFNbm9DLFFBQ2Y0NEMsV0FBVyxFQUNYSixZQUFhLEtBQ2JFLFFBQVEsRUFDUkcsaUJBQWtCLEtBQ2xCQyxnQkFBaUIsRUFDakJhLGVBQWUsRUFDZjNELFFBQVMsR0FFWHIrQyxPQUFPMkcsS0FBSzJtQyxJQUFjcm5DLFNBQVFrQyxJQUNoQ2kzQyxVQUFRd0Usa0JBQWtCejdDLEVBQU0sY0FBZW1sQyxHQUFhbmxDLEdBQU0sSUFNdEUwN0MscUJBQUFBLENBQXNCekQsRUFBVzBELEdBQy9CLE9BQVFDLFVBQVFELEVBQVdqakQsS0FBSzQ1QyxTQUFXc0osVUFBUTNELEVBQVd2L0MsS0FBSzJ2QyxPQTZpQnJFd1QsTUFBQUEsR0FDTTVFLFVBQVF2eUMsV0FBYWhNLEtBQUsydkMsTUFBTXJvQyxNQUNsQ2kzQyxVQUFRYyxlQUFlci9DLEtBQUsydkMsTUFBTXJvQyxNQUVwQyxNQUFNaEUsTUFDSkEsRUFBSytzQyxZQUNMQSxFQUFXd1AsbUJBQ1hBLEVBQWtCc0IsY0FDbEJBLEdBQ0VuaEQsS0FBSzQ1QyxNQUNIdEosRUFBYSxDQUNqQmlGLFlBQWF2MUMsS0FBSzJ2QyxNQUFNeVQsc0JBQ3BCcGpELEtBQUsydkMsTUFBTXlULHNCQUNYN0UsVUFBUXpyQyxFQUFFOVMsS0FBSzJ2QyxNQUFNNEYsYUFDekJqeUMsUUFDQSt4QyxTQUFVcjFDLEtBQUtxMUMsU0FDZkMsT0FBUXQxQyxLQUFLczFDLE9BQ2J0QyxVQUNHLEdBQUV2QixHQUFPenNDLFNBQ1JoRixLQUFLMnZDLE1BQU1tUSxVQUFZOS9DLEtBQUsydkMsTUFBTTVsQyxjQUFnQjBuQyxHQUFPNFIsS0FBTyxNQUM5RDVSLEdBQU96eEMsS0FBSzJ2QyxNQUFNcHZDLEtBQU8sTUFDM0JQLEtBQUs0NUMsTUFBTXQyQyxNQUFRbXVDLEdBQU93QyxTQUFXLE1BQ25DajBDLEtBQUsydkMsTUFBTTJULGlCQUVqQjdQLFVBQVd6ekMsS0FBS3dpRCxRQUNoQnBVLFNBQVVwdUMsS0FBSzJ2QyxNQUFNdkIsVUFFakJtVixFQUFZdmpELEtBQUsydkMsTUFBTXB2QyxHQUFHbUYsUUFBUSxlQUFnQixJQUN4RCxJQUFJODlDLEVBQWN4akQsS0FBSzJ2QyxNQUFNZSxXQUFhNk4sVUFBUXpyQyxFQUFFeXdDLEdBQ3BEQyxFQUFjQSxFQUFZOTlDLFFBQVEsZUFBZ0IsSUFBSUQsT0FBTyxLQUM3RCxNQUFNZytDLEVBQW1CempELEtBQUsydkMsTUFBTXZCLFNBQy9CLEdBQUVtUSxVQUFRenJDLEVBQUUsZUFDYixHQUNFNHdDLEVBQXdCMWpELEtBQUsydkMsTUFBTW1RLFNBQ3JDdkIsVUFBUXpyQyxFQUFFLGdEQUNWeXJDLFVBQVF6ckMsRUFBRSxpREFDUjZ3QyxFQUNjLFdBQWxCM2pELEtBQUsydkMsTUFBTXB2QyxHQUNQZytDLFVBQVF6ckMsRUFBRSxnREFDVixHQUNBOHdDLEVBQWdCRixFQUNuQmorQyxPQUFPLEtBQ1BBLE9BQU9rK0MsR0FFSkUsRUFBb0J0RixVQUFRenJDLEVBQUUseUJBQTBCLENBQzVEZ3hDLE1BQU96VCxFQUFZNXdDLFNBR2Zza0QsRUFBd0JBLElBQ3hCL2pELEtBQUt5aUQsMkJBQTZCemlELEtBQUsydkMsTUFBTXJzQyxNQUN4Q2k3QyxVQUFRenJDLEVBQUUsNEJBQTZCLENBQzVDa3hDLFVBQVdoa0QsS0FBS3lpRCwyQkFBNkJ6aUQsS0FBSzJ2QyxNQUFNcnNDLFFBR3JELEdBR1QsT0FDRTJ1QyxVQUFBaEQsY0FBQ2dELFVBQU1tQyxjQUNMbkMsVUFBQWhELHNCQUFNK0QsVUFBV3ZCLEdBQU8sV0FBWXdTLEtBQUssVUFDckNqa0QsS0FBSzQ1QyxNQUFNc0csUUFDWGxnRCxLQUFLNDVDLE1BQU00RixTQUNWLEdBQUVxRSxLQUFxQkUsT0FFM0IvakQsS0FBSzJ2QyxNQUFNbVEsVUFDVjdOLFVBQUFoRCxjQUFDZ0IsSUFDQ29CLFdBQVl3TyxFQUNaM1AsV0FBWWx3QyxLQUFLMnZDLE1BQU1PLFdBQ3ZCVSxpQkFBa0I1d0MsS0FBSzR3QyxpQkFDdkJyd0MsR0FBSVAsS0FBSzJ2QyxNQUFNcHZDLEdBQ2Y2dkMsV0FBWXB3QyxLQUFLb3dDLFdBQ2pCOXNDLE1BQU90RCxLQUFLNDVDLE1BQU10MkMsTUFDbEIrc0MsWUFBYSxJQUNSQSxFQUNILENBQ0VydkMsS0FBTSx1QkFDTlksUUFBUzI4QyxVQUFRenJDLEVBQUUsMEJBR3ZCdzlCLFdBQVVweEMsS0FDTG94QyxHQUNIaUYsWUFBYXYxQyxLQUFLNmlELGdDQUNkdEUsVUFBUXpyQyxFQUFFLDZCQUNWdzlCLEVBQVdpRixjQUVqQmhGLGNBQWV2d0MsS0FBS3V3QyxjQUNwQnlRLDRCQUE2QmhoRCxLQUFLZ2hELDRCQUNsQ3ZRLG1CQUFvQnp3QyxLQUFLeXdDLG1CQUN6QkQsaUJBQWtCeHdDLEtBQUsreUMsV0FDdkI1QyxZQUFhbndDLEtBQUs2Z0Qsa0JBQ2xCblEsVUFBVytTLEVBQ1JoK0MsT0FBTyxLQUNQQSxPQUFPKzlDLEdBQ1AvOUMsT0FBTyxLQUNQQSxPQUFPcytDLEtBQ1YxaEQsTUFDRXJDLEtBQUsydkMsTUFBTXVVLFlBQ1Bsa0QsS0FBSzJ2QyxNQUFNdVUsWUFDWDNGLFVBQVF6ckMsRUFBRTlTLEtBQUsydkMsTUFBTXB2QyxJQUUzQm93QyxxQkFBc0Izd0MsS0FBS21nRCxXQUMzQnRQLGlCQUFrQjBOLFVBQVF6ckMsRUFBRSw4QkFDNUJnK0Isd0JBQXlCeU4sVUFBUXpyQyxFQUFFLFVBQ25DaStCLDBCQUEyQndOLFVBQVF6ckMsRUFBRSxVQUNyQ2srQixxQkFBc0J1TixVQUFRenJDLEVBQUUsc0JBQ2hDbStCLFdBQVlrUSxFQUNaalEsTUFBT2x4QyxLQUFLMnZDLE1BQU11QixNQUNsQkMsV0FBWW54QyxLQUFLMnZDLE1BQU13QixXQUN2QkMsdUJBQXdCcHhDLEtBQUsydkMsTUFBTXlCLHVCQUNuQ0UsWUFBYXR4QyxLQUFLMnZDLE1BQU0yQixZQUN4QkMsV0FBWXZ4QyxLQUFLMnZDLE1BQU00QixjQUd6QnNPLEdBQ0E1TixVQUFBaEQscUJBQ0UrRCxVQUFXbVIsVUFDVDFTLEdBQU8sK0JBQ1BBLEdBQU96eEMsS0FBSzJ2QyxNQUFNcHZDLEtBRXBCeXVDLE1BQU8sQ0FDTCxVQUFZLEdBQUVodkMsS0FBSzJ2QyxNQUFNdUIsUUFDekIsZ0JBQWtCLEdBQUVseEMsS0FBSzJ2QyxNQUFNd0IsZUFHaENueEMsS0FBSzJ2QyxNQUFNeVUsTUFDVm5TLFVBQUFoRCxxQkFDRStELFVBQVdtUixVQUNUMVMsR0FBUSwwQkFDUkEsR0FBT3p4QyxLQUFLMnZDLE1BQU1wdkMsSUFDbEJQLEtBQUsydkMsTUFBTTJULGdCQUNSLEdBQUV0akQsS0FBSzJ2QyxNQUFNMlQsNkJBRWxCLGFBQVlHLEVBQ1RoK0MsT0FBTyxLQUNQQSxPQUFPKzlDLEdBQ1AvOUMsT0FBTyxLQUNQQSxPQUFPODRDLFVBQVF6ckMsRUFBRSw4QkFFcEJtL0IsVUFBQWhELGNBQUMwRSxXQUFLQyxJQUFNLEdBQUU1ekMsS0FBSzJ2QyxNQUFNeVUsVUFHN0JuUyxVQUFBaEQsY0FBQ1EsV0FDQ29FLHdCQUF5Qjd6QyxLQUFLNDVDLE1BQU00RixRQUNwQ2ovQyxHQUFJUCxLQUFLMnZDLE1BQU1wdkMsR0FDZjh2QyxZQUFhQSxFQUNieUQsNEJBQTZCOXpDLEtBQUt1d0MsY0FDbEN5USw0QkFBNkJoaEQsS0FBS2doRCw0QkFDbEN2USxtQkFBb0J6d0MsS0FBS3l3QyxtQkFDekJELGlCQUFrQnh3QyxLQUFLK3lDLFdBQ3ZCekMsV0FBVXB4QyxLQUNMb3hDLEdBQ0h3UyxRQUFTOWlELEtBQUs4aUQsVUFFaEIvTywrQkFDQUMsd0JBQXlCQSxJQUFNaDBDLEtBQUs0NUMsTUFBTTRGLFFBQzFDNkUsMEJBQTJCcmtELEtBQUs0NUMsTUFBTXdHLFVBQ3RDL0wsTUFBTzVDLEdBQ1AwQyxxQkFBc0JwdUMsR0FDcEJrc0MsVUFBQWhELGNBQUFnRCxVQUFBbUMsY0FDRW5DLFVBQUFoRCx1QkFBTytELFVBQVd2QixHQUFPLFdBQVk4QixRQUFTdnpDLEtBQUsydkMsTUFBTXB2QyxJQUN0RHdqRCxJQUNFdCtDLE9BQU8sS0FDUEEsT0FBT2crQyxHQUNQaCtDLE9BQU8sS0FDUEEsT0FBTys5QyxHQUNQLzlDLE9BQU8sS0FDUEEsT0FBT20rQyxJQUVaM1IsVUFBQWhELHNCQUFBOXZDLE9BQUFDLFFBQ0UsYUFBWTJrRCxJQUNUdCtDLE9BQU8sS0FDUEEsT0FBT2crQyxHQUNQaCtDLE9BQU8sS0FDUEEsT0FBTys5QyxHQUNQLzlDLE9BQU8sS0FDUEEsT0FBT20rQyxHQUNWcmpELEdBQUlQLEtBQUsydkMsTUFBTXB2QyxHQUNmaXpDLFFBQVN4ekMsS0FBSzBoRCxhQUNkak8sVUFBV3p6QyxLQUFLd2lELFNBQ1p6OEMsSUFFTC9GLEtBQUs0NUMsTUFBTXQyQyxPQUFTdEQsS0FBS2toRCxlQUc5QnZRLHFCQUFzQjN3QyxLQUFLbWdELFdBQzNCeFIsSUFBSzN1QyxLQUFLOGhELHlCQTUxQmxCNUMsR0FvREdvRixhQUFlLENBQ3BCcFEsV0FBVyxFQUNYbEIsVUFBVyxHQUNYb1IsVUFBTW5pRCxFQUNOcUIsTUFBTyxHQUNQeUcsbUJBQWU5SCxFQUNmcUYsS0FBTSxLQUNORSxRQUFTLEdBQ1RzNEMsVUFBVSxFQUNWNU8sTUFBTyxVQUNQQyxXQUFZLFVBQ1pDLHVCQUF3QixVQUN4QjlJLFNBQVUsa0JBQ1ZsK0IsU0FBVSxDQUNSbTZDLGFBQWMsU0FDZEMsWUFBYSxXQUVmTixpQkFBYWppRCxFQUNicWhELGVBQWdCLEdBQ2hCRiwyQkFBdUJuaEQsRUFDdkJxdkMsWUFBYSxDQUNYZ0MsT0FBUSxLQUVWZ1AsZUFBZ0IsQ0FDZCxXQUFZLFVBQ1osWUFBYSxVQUNiLFlBQWEsVUFDYixhQUFjLFVBQ2QsYUFBYyxVQUNkLGdCQUFpQixVQUNqQixpQkFBa0IsV0FFcEJsVSxVQUFVLEVBQ1ZtVSxhQUFTdGdELEVBQ1RzdkMsWUFBWSxFQUNabG5DLFNBQVUsbUJBQ1h5cUMsUUFBQUMsSUFBQUMsV0F4RkdrSyxHQUNHakssVUFBWSxDQUNqQi9FLFdBQVlnRixVQUFVMzZCLE9BQU80NkIsV0FDN0JqQixVQUFXZ0IsVUFBVU0sS0FDckJ4QyxVQUFXa0MsVUFBVTM2QixPQUNyQjZwQyxLQUFNbFAsVUFBVTM2QixPQUNoQmhhLEdBQUkyMEMsVUFBVTM2QixPQUFPNDZCLFdBQ3JCSSxZQUFhTCxVQUFVMzZCLE9BQU80NkIsV0FDOUJpTyxzQkFBdUJsTyxVQUFVMzZCLE9BQ2pDalgsTUFBTzR4QyxVQUFVMzZCLE9BQ2pCdlEsY0FBZWtyQyxVQUFVdVAsSUFBSXRQLFdBQzdCekUsVUFBV3dFLFVBQVUzNkIsT0FDckJpNEIsU0FBVTBDLFVBQVV4OUIsS0FDcEIzTixjQUFlbXJDLFVBQVUzNkIsT0FDekJ0USxjQUFlaXJDLFVBQVV4OUIsS0FDekJ4TixjQUFlZ3JDLFVBQVV4K0IsT0FDekIrcUMsUUFBU3ZNLFVBQVV4OUIsS0FDbkJzcUMsU0FBVTlNLFVBQVV4OUIsS0FDcEJncEMsZ0JBQWlCeEwsVUFBVXg5QixLQUMzQmlwQyxZQUFhekwsVUFBVXg5QixLQUN2QnBRLEtBQU00dEMsVUFBVTM2QixPQUNoQi9TLFFBQVMwdEMsVUFBVXdQLFFBQVF4UCxVQUFVMzZCLFFBQ3JDelEsUUFBU29yQyxVQUFVd1AsUUFBUXhQLFVBQVUzNkIsUUFDckN1bEMsU0FBVTVLLFVBQVVNLEtBQ3BCdEUsTUFBT2dFLFVBQVUzNkIsT0FDakI0MkIsV0FBWStELFVBQVUzNkIsT0FDdEI2MkIsdUJBQXdCOEQsVUFBVTM2QixPQUNsQyt0QixTQUFVNE0sVUFBVTM2QixPQUNwQm5RLFNBQVU4cUMsVUFBVUUsTUFBTSxDQUN4Qm1QLGFBQWNyUCxVQUFVMzZCLE9BQ3hCaXFDLFlBQWF0UCxVQUFVMzZCLFNBRXpCMnBDLFlBQWFoUCxVQUFVMzZCLE9BQ3ZCZ2pDLEtBQU1ySSxVQUFVeDlCLEtBQUt5OUIsV0FDckJzSSxPQUFRdkksVUFBVXg5QixLQUFLeTlCLFdBQ3ZCOXFDLFNBQVU2cUMsVUFBVUUsTUFBTSxDQUN4Qjl5QyxRQUFTNHlDLFVBQVUzNkIsT0FDbkJ0TyxJQUFLaXBDLFVBQVV4K0IsT0FDZnhLLElBQUtncEMsVUFBVXgrQixTQUVqQjRzQyxlQUFnQnBPLFVBQVUzNkIsT0FDMUIrMkIsWUFBYTRELFVBQVVFLE1BQU0sQ0FDM0I5QixPQUFRNEIsVUFBVXgrQixTQUVwQjRyQyxlQUFnQnBOLFVBQVV5UCxPQUMxQnRDLG9CQUFxQm5OLFVBQVV5UCxPQUMvQnZXLFNBQVU4RyxVQUFVTSxLQUNwQitNLFFBQVNyTixVQUFVMzZCLE9BQ25CZzNCLFdBQVkyRCxVQUFVTSxLQUN0Qm9MLFdBQVkxTCxVQUFVTSxhQW96QnBCb1AsSUU3a0NpQnpGLEdGNmtDNEJELEdFNWtDMUN2UCxJQUNMLE1BQU00TixLQUFFQSxFQUFJRSxPQUFFQSxHQUFXcnVDLEdBQU1rdUMsZ0JBRS9CLE9BQU9yTCxVQUFBaEQsY0FBQ2tRLEdBQVNoZ0QsT0FBQUMsUUFBQ20rQyxLQUFNQSxFQUFNRSxPQUFRQSxHQUFZOU4sR0FBUyxHQUp4Q3dQIn0=
|
|
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(kM)}));const YM={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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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":"Venue, place and stopsearch.","search-autosuggest-label-instructions-desktop":"Navigate list with arrow keys and select with enter key.","search-autosuggest-label-instructions-mobile":"Enter the location and navigate in the list by swiping.","search-autosuggest-label-move-to-destination":"After selecting the starting location you are automatically moved to the destination field.","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",vehiclerentalstation:"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":"Paikka, linja ja pysäkkihaku.","search-autosuggest-label-instructions-desktop":"Navigoi listassa nuolinäppäimillä ja valitse enterillä.","search-autosuggest-label-instructions-mobile":"Syötä sijainti ja navigoi listassa pyyhkäisemällä.","search-autosuggest-label-move-to-destination":"Valittuasi lähtöpaikan siirrytään suoraan määränpää-kenttään.","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":"Plats, linje och hållplatssökning.","search-autosuggest-label-instructions-desktop":"Navigera listan med piltangenterna och välj med Enter-tangeten.","search-autosuggest-label-instructions-mobile":"Ange platsen och navigera i listan genom att svepa.","search-autosuggest-label-move-to-destination":"Efter att du valt avgångsplatsen tas du direkt till Destination-fältet.","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 FM(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 UM={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"};FM("input[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 #888;\n background-color: #fff;\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: 0 0 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: #666;\n opacity: 1;\n font-size: 15px; }\n\n.styles_hasValue__tzCTr {\n color: #333; }\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: #888;\n width: 16px;\n height: 16px; }\n .styles_autosuggest-input-icon__uhYGQ.styles_origin-stop-near-you__Ekwp- svg {\n fill: #888;\n width: 16px;\n height: 16px; }\n\nbutton.styles_clear-input__Vx7B4 {\n display: flex;\n position: absolute;\n padding: 14px 0;\n right: 0;\n width: 44px;\n height: 100%;\n color: var(--color);\n outline: none;\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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 /* 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, :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 jM={"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"};FM("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 #888 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: #333; }\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: #666;\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: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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: #333; }\n\n.MobileSearch_suggestion__UBz5O {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\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 .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: #fff;\n transition: transform 0.25s;\n transform: translateY(10%); }\n");var GM={"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"};FM("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 #888 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: #333; }\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: #666;\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: 0;\n padding: 0 15px 7px 0;\n height: 26px;\n color: var(--color);\n border: 0;\n margin: 0;\n justify-content: center;\n text-align: left;\n background: none;\n border-style: none;\n border-width: 0;\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: #333; }\n\n.MobileNoScroll_suggestion__NAWcY {\n font-size: 15px;\n min-height: 50px;\n letter-spacing: -0.6px;\n color: #333;\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 .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: #fff;\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 VM extends m.default{constructor(M){super(M);const z=this;z.onSuggestionTouchMove=()=>{z.justSelectedSuggestion=!1,z.pressedSuggestion=null}}}const KM=({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?jM:GM,T=`${z}-input`,_=`${z}-label`,[y,S]=b.useState(!1),v=B.default.useRef();b.useEffect((()=>{H.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(H.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(VM,{alwaysRenderSuggestions:!0,id:z,suggestions:c,onSuggestionsFetchRequested:q,getSuggestionValue:C,renderSuggestion:D,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:F({},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(Y.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&&(KM.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 QM,JM=SM((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)}())})),ZM=(QM=JM)&&QM.__esModule&&Object.prototype.hasOwnProperty.call(QM,"default")?QM.default:QM;HM.locale("en"),X.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}});"production"!==process.env.NODE_ENV&&N.default.node;const $M=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 Mz(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]=_M(M.properties,!0);if(M.properties.layer.toLowerCase().includes("bikerental")||M.properties.layer.toLowerCase().includes("bikestation")){b=X.default.t("vehiclerentalstation");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=TM(M.properties),c=null===(z=M.properties.addendum)||void 0===z?void 0:z.GTFS.modes,A=$M(M.properties.addendum);return[b,iM(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?iM(z.split(",")[0],o):p,O,o,void 0,$M(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 zz(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}const bz=M=>"SelectFromOwnLocations"===M.type||"back"===M.type?"":function(M){const z=_M(M,!0);switch(M.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return z[1]||z[0];case"favouriteVehicleRentalStation":case"favouritePlace":return z[0];default:return z.length>1&&""!==z[1]?z.join(", "):z[1]||z[0]}}(M.properties);class pz extends B.default.Component{constructor(M){super(M),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.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:UM["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("VehicleRentalStations"))&&b.push("VehicleRentalStations")):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),mM(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=F({},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?F({},M,{translatedText:zz(M)}):M,b=Mz(M);return B.default.createElement(E.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(Mz(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(YM).forEach((M=>{X.default.addResourceBundle(M,"translation",YM[M])}))}shouldComponentUpdate(M,z){return!w.default(z,this.state)||!w.default(M,this.props)}componentDidUpdate(){X.default.language!==this.props.lang&&X.default.changeLanguage(this.props.lang)}UNSAFE_componentWillReceiveProps(M){M.value===this.state.value||this.state.editing||this.setState({value:M.value})}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:`${UM.input} ${this.props.isMobile&&this.props.transportMode?UM.thin:""} ${UM[this.props.id]||""} ${this.state.value?UM.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-","").concat(".");const A=this.props.required?`${X.default.t("required")}.`:"",q=this.props.isMobile?X.default.t("search-autosuggest-label-instructions-mobile"):X.default.t("search-autosuggest-label-instructions-desktop"),e="origin"===this.props.id?X.default.t("search-autosuggest-label-move-to-destination"):"",n=q.concat(" ").concat(e),W=X.default.t("search-autosuggest-len",{count:z.length}),a=()=>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:UM["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${W} ${a()}`),this.props.isMobile&&B.default.createElement(KM,{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:F({},O,{placeholder:this.isOriginDestinationOrViapoint()?X.default.t("address-place-or-business"):O.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:bz,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:A.concat(" ").concat(c).concat(" ").concat(a()),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(UM["autosuggest-input-container"],UM[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&B.default.createElement("div",{className:h.default(UM["autosuggest-input-icon"],UM[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":A.concat(" ").concat(c).concat(" ").concat(X.default.t("search-autosuggest-label"))},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:bz,renderSuggestion:this.renderItem,inputProps:F({},O,{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:UM,renderInputComponent:M=>B.default.createElement(B.default.Fragment,null,B.default.createElement("label",{className:UM["sr-only"],htmlFor:this.props.id},a().concat(" ").concat(A).concat(" ").concat(c).concat(" ").concat(n)),B.default.createElement("input",Object.assign({"aria-label":a().concat(" ").concat(A).concat(" ").concat(c).concat(" ").concat(n),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},M)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}pz.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&&(pz.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 Oz=(oz=pz,M=>{const{lock:z,unlock:b}=ZM.useScrollLock();return B.default.createElement(oz,Object.assign({lock:z,unlock:b},M))});var oz;M.default=Oz,Object.defineProperty(M,"__esModule",{value:!0})}));
|
|
14
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaXMtZHVwbGljYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtaGVscGVycy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWZpbHRlci1tYXRjaGluZy10by1pbnB1dC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXNlcmlhbGl6ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWdlb2NvZGluZy1yZXN1bHRzL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZXhlY3V0ZS1zZWFyY2gtaW1taWRpYXRlL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbC9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbW9tZW50LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC10aW1lem9uZS9tb21lbnQtdGltZXpvbmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50LXRpbWV6b25lL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL21vbWVudC9sb2NhbGUvZmkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvbW9tZW50L2xvY2FsZS9zdi5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9tb21lbnQvbG9jYWxlL2RlLmpzIiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWluamVjdC9kaXN0L3N0eWxlLWluamVjdC5lcy5qcyIsIi4uL3NyYy9oZWxwZXJzL01vYmlsZVNlYXJjaC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AaHNsLWZpL2hvb2tzL2xpYi9pbmRleC5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1sYWJlbC9pbmRleC5qcyIsIi4uL3NyYy9oZWxwZXJzL3dpdGhTY3JvbGxMb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsIi8qKlxuICogIGFjY2VwdCBlcXVhbGl0eSBvZiBub24gbnVsbGlzaCB2YWx1ZXNcbiAqXG4gKiBAbmFtZSB0cnVFcVxuICogQHBhcmFtIHtCb29sZWFufE51bWJlcnxCaWdJbnR8U3RyaW5nfFN5bWJvbHxPYmplY3R9IHZhbDEgRmlyc3QgdmFsdWUgdG8gYmUgY29tcGFyZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSBwYXJhbTIgU2Vjb25kIHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwudHJ1RXEoJzInLCAnMicpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cnVFcSh2YWwxLCB2YWwyKSB7XG4gIHJldHVybiB2YWwxICYmIHZhbDIgJiYgdmFsMSA9PT0gdmFsMjtcbn1cbiIsImltcG9ydCB0cnVFcSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdHJ1LWVxJztcbi8qKlxuICogQ2hlY2tzIHRoYXQgaXMgaXRlbXMgZHVwbGljYXRlXG4gKlxuICogQG5hbWUgaXNEdXBsaWNhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSBpdGVtMSBPYmplY3QgY29udGFpbmluZyBmb2xsb3dpbmcgYXR0cmlidXRlczpcbiAqIHtcbiAqICBwcm9wZXJ0aWVzIHtcbiAqICAgICAgZ3Rmc0lkOiBTdHJpbmdcbiAqICAgICAgZ2lkOiBTdHJpbmcgZnJvbSBnZW9jb2RlclxuICogICAgICBuYW1lOiBTdHJpbmdcbiAqICAgICAgbGFiZWw6IFN0cmluZ1xuICogICAgICAgYWRkcmVzczogU3RyaW5nXG4gKiAgICAgIGdlb21ldHJ5IHtcbiAqICAgICAgICAgY29vcmRpbmF0ZXMgW051bWJlciBsYXQsIE51bWJlciBsb25dXG4gKiAgICAgIH1cbiAqICB9XG4gKiB9XG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTIgT2JqZWN0IHdpdGggc2FtZSBhdHRyaWJ1dGVzIGFzIGl0ZW0xXG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXV0aWwuaXNEdXBsaWNhdGUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5cbmNvbnN0IGd0ZnNTdG9wTGF5ZXJzID0gWydzdG9wJywgJ3N0YXRpb24nLCAnZmF2b3VyaXRlU3RvcCcsICdmYXZvdXJpdGVTdGF0aW9uJ107XG5jb25zdCB2ZWhpY2xlUmVudGFsTGF5ZXJzID0gWydmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbicsICdiaWtlc3RhdGlvbiddO1xuXG5mdW5jdGlvbiBsYWJlbElkVG9HaWQoaWQpIHtcbiAgaWYgKCFpZCkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICBjb25zdCBwYXJ0cyA9IGlkLnNwbGl0KCc6Jyk7XG4gIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGBjaXR5YmlrZXMke3BhcnRzWzBdfTpiaWtlc3RhdGlvbjoke3BhcnRzWzFdfWA7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzRHVwbGljYXRlKGl0ZW0xLCBpdGVtMikge1xuICBjb25zdCBwcm9wczEgPSBpdGVtMS5wcm9wZXJ0aWVzO1xuICBjb25zdCBwcm9wczIgPSBpdGVtMi5wcm9wZXJ0aWVzO1xuXG4gIGlmIChpdGVtMS50eXBlID09PSAnRnV0dXJlUm91dGUnICYmIGl0ZW0yLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBjb25zdCBvMSA9IHByb3BzMS5vcmlnaW47XG4gICAgY29uc3QgZDEgPSBwcm9wczEuZGVzdGluYXRpb247XG4gICAgY29uc3QgbzIgPSBwcm9wczIub3JpZ2luO1xuICAgIGNvbnN0IGQyID0gcHJvcHMyLmRlc3RpbmF0aW9uO1xuXG4gICAgY29uc3QgbmFtZTEgPSBgJHtvMS5uYW1lfS8vJHtvMS5sb2NhbGl0eX0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxpdHl9YDtcbiAgICBjb25zdCBuYW1lMiA9IGAke28yLm5hbWV9Ly8ke28yLmxvY2FsaXR5fS8vJHtkMi5uYW1lfS8vJHtkMi5sb2NhbGl0eX1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtpdGVtLmd0ZnNJZH0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0LiBUaGUgYmVzdCBtYXRjaCB3aWxsIGJlIHJldHVybmVkIChtaW46IDAsIG1heDogMS41KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0pXG4gICAgLmZpbHRlcih2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZSh2YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBdLFxuICAgIFsnZGVzYycsICdkZXNjJ10sXG4gICk7XG5cbiAgcmV0dXJuIHVuaXFXaXRoKG9yZGVyZWRSZXN1bHRzLCBpc0R1cGxpY2F0ZSk7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzdG9wJ3MgbmFtZSB3aXRob3V0IHN0b3AgY29kZSBmcm9tIGEgc3RvcCBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgc3RvcCdzIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9wQ29kZSBzdG9wIGNvZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9wTmFtZSA9IChuYW1lLCBzdG9wQ29kZSkgPT4ge1xuICBpZiAoXG4gICAgc3RvcENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN0b3BDb2RlICE9PSBudWxsICYmXG4gICAgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgIT09IC0xXG4gICkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAtIDEpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIChtYXAsIHN0b3BPclN0YXRpb24pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBtYXBbc3RvcE9yU3RhdGlvbi5naWRdID0gc3RvcE9yU3RhdGlvbjtcbiAgICByZXR1cm4gbWFwO1xuICB9LCB7fSk7XG4gIHJldHVybiBnZXRKc29uKFVSTF9QRUxJQVNfUExBQ0UsIHtcbiAgICBpZHM6IGdpZHMuc2xpY2UoMCwgLTEpLFxuICAgIC8vIGxhbmc6IGNvbnRleHQuZ2V0U3RvcmUoJ1ByZWZlcmVuY2VzU3RvcmUnKS5nZXRMYW5ndWFnZSgpLCBUT0RPIGVuYWJsZSB0aGlzIHdoZW4gT1RQIHN1cHBvcnRzIHRyYW5zbGF0aW9uc1xuICB9KS50aGVuKHJlcyA9PiB7XG4gICAgcmV0dXJuIHJlcy5mZWF0dXJlcy5tYXAoc3RvcCA9PiB7XG4gICAgICBjb25zdCBmYXZvdXJpdGUgPSB7XG4gICAgICAgIHR5cGU6ICdGYXZvdXJpdGVTdG9wJyxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGFkZGVuZHVtOiBzdG9wLnByb3BlcnRpZXMuYWRkZW5kdW0sXG4gICAgICAgICAgZ2lkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5naWQsXG4gICAgICAgICAgY29kZTogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uY29kZSxcbiAgICAgICAgICBndGZzSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmd0ZnNJZCxcbiAgICAgICAgICBsYXN0VXBkYXRlZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0ubGFzdFVwZGF0ZWQsXG4gICAgICAgICAgZmF2b3VyaXRlSWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmZhdm91cml0ZUlkLFxuICAgICAgICAgIGFkZHJlc3M6IHN0b3AucHJvcGVydGllcy5sYWJlbCxcbiAgICAgICAgICBsYXllcjogaXNTdG9wKHN0b3AucHJvcGVydGllcykgPyAnZmF2b3VyaXRlU3RvcCcgOiAnZmF2b3VyaXRlU3RhdGlvbicsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiBzdG9wLmdlb21ldHJ5LFxuICAgICAgfTtcbiAgICAgIHJldHVybiBmYXZvdXJpdGU7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zKGZhdm91cml0ZXMsIGlucHV0KSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoXG4gICAgZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGZhdm91cml0ZXMsIGlucHV0LCBbJ2FkZHJlc3MnLCAnbmFtZSddKS5tYXAoaXRlbSA9PiAoe1xuICAgICAgdHlwZTogJ0Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGFiZWw6IGl0ZW0ubmFtZSxcbiAgICAgICAgbGF5ZXI6ICdmYXZvdXJpdGVQbGFjZScsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHsgdHlwZTogJ1BvaW50JywgY29vcmRpbmF0ZXM6IFtpdGVtLmxvbiwgaXRlbS5sYXRdIH0sXG4gICAgfSkpLFxuICApO1xufVxuZnVuY3Rpb24gc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1tYXAnLFxuICAgICAgICAgIGxheWVyOiAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ0N1cnJlbnRMb2NhdGlvbicsXG4gICAgICAgIGFkZHJlc3M6IHBvc2l0aW9uLmFkZHJlc3MsXG4gICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICd1c2Utb3duLXBvc2l0aW9uJyxcbiAgICAgICAgICBsYXllcjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgICBsYXQ6IHBvc2l0aW9uLmxhdCxcbiAgICAgICAgICBsb246IHBvc2l0aW9uLmxvbixcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbcG9zaXRpb24ubG9uLCBwb3NpdGlvbi5sYXRdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycsXG4gICAgICAgIGFkZHJlc3M6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICBsYWJlbElkOiAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycsXG4gICAgICAgICAgbGF5ZXI6ICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGFkZHJlc3M6ICdzZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcbn1cblxuZnVuY3Rpb24gZ2V0QmFja1N1Z2dlc3Rpb24oKSB7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgIHtcbiAgICAgIHR5cGU6ICdiYWNrJyxcbiAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgIGxhdDogbnVsbCxcbiAgICAgIGxvbjogbnVsbCxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgbGFiZWxJZDogJ2JhY2snLFxuICAgICAgICBsYXllcjogJ2JhY2snLFxuICAgICAgICBhZGRyZXNzOiAnYmFjaycsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgfSxcbiAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgIH0sXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGZpbHRlckZhdm91cml0ZVN0b3BzKHN0b3BzQW5kU3RhdGlvbnMsIGlucHV0KSB7XG4gIHJldHVybiBzdG9wc0FuZFN0YXRpb25zLnRoZW4oc3RvcHMgPT4ge1xuICAgIHJldHVybiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoc3RvcHMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuXTtcbmNvbnN0IGxvY2F0aW9uTGF5ZXJzID0gWydmYXZvdXJpdGVQbGFjZScsICd2ZW51ZScsICdhZGRyZXNzJywgJ3N0cmVldCddO1xuY29uc3QgcGFya2luZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuLyoqXG4gKiBFeGVjdXRlcyB0aGUgc2VhcmNoXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VhcmNoUmVzdWx0cyhcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgeyBpbnB1dCB9LFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSB7XG4gIGNvbnN0IHtcbiAgICBnZXRQb3NpdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zLFxuICAgIGdldE9sZFNlYXJjaGVzLFxuICAgIGdldEZhdm91cml0ZVN0b3BzLFxuICAgIHBhcmtpbmdBcmVhU291cmNlcyxcbiAgICBnZXRMYW5ndWFnZSxcbiAgICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMsXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnksXG4gICAgZ2V0RmF2b3VyaXRlUm91dGVzLFxuICAgIGdldFJvdXRlc1F1ZXJ5LFxuICAgIGNvbnRleHQsXG4gICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBsb2NhdGlvbkF3YXJlLFxuICAgIG1pbmltYWxSZWdleHAsXG4gICAgbGluZVJlZ2V4cCxcbiAgICBVUkxfUEVMSUFTLFxuICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgZmVlZElEcyxcbiAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXMsXG4gICAgZ2VvY29kaW5nU291cmNlcyxcbiAgICBnZXRGdXR1cmVSb3V0ZXMsXG4gICAgY2l0eUJpa2VOZXR3b3JrcyxcbiAgfSA9IHNlYXJjaENvbnRleHQ7XG4gIC8vIGlmIG5vIHRhcmdldHMgYXJlIHByb3ZpZGVkLCBzZWFyY2ggdGhlbSBhbGwuXG4gIGNvbnN0IGFsbFRhcmdldHMgPSAhdGFyZ2V0cyB8fCB0YXJnZXRzLmxlbmd0aCA9PT0gMDtcbiAgLy8gaWYgbm8gc291cmNlcyBhcmUgcHJvdmlkZWQsIHVzZSB0aGVtIGFsbC5cbiAgY29uc3QgYWxsU291cmNlcyA9ICFzb3VyY2VzIHx8IHNvdXJjZXMubGVuZ3RoID09PSAwO1xuICBjb25zdCBwb3NpdGlvbiA9IGdldFBvc2l0aW9ucyhjb250ZXh0KTtcbiAgY29uc3Qgc2VhcmNoQ29tcG9uZW50cyA9IFtdO1xuICBjb25zdCBzZWFyY2hlcyA9IHsgdHlwZTogJ2FsbCcsIHRlcm06IGlucHV0LCByZXN1bHRzOiBbXSB9O1xuICBjb25zdCBsYW5ndWFnZSA9IGdldExhbmd1YWdlKGNvbnRleHQpO1xuICBjb25zdCBmb2N1c1BvaW50ID1cbiAgICBsb2NhdGlvbkF3YXJlICYmIHJlZlBvaW50Py5sYXQgJiYgcmVmUG9pbnQ/LmxvblxuICAgICAgPyB7XG4gICAgICAgICAgLy8gUm91bmQgY29vcmRpbmF0ZXMgdG8gYXBwcm94IDEga20sIGluIG9yZGVyIHRvIGltcHJvdmUgY2FjaGluZ1xuICAgICAgICAgICdmb2N1cy5wb2ludC5sYXQnOiByZWZQb2ludC5sYXQudG9GaXhlZCgzKSxcbiAgICAgICAgICAnZm9jdXMucG9pbnQubG9uJzogcmVmUG9pbnQubG9uLnRvRml4ZWQoMyksXG4gICAgICAgIH1cbiAgICAgIDoge307XG4gIGNvbnN0IG1vZGUgPSB0cmFuc3BvcnRNb2RlID8gdHJhbnNwb3J0TW9kZS5zcGxpdCgnLScpWzFdIDogdW5kZWZpbmVkO1xuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnQ3VycmVudFBvc2l0aW9uJykgJiZcbiAgICBwb3NpdGlvbi5zdGF0dXMgIT09ICdnZW9sb2NhdGlvbi1ub3Qtc3VwcG9ydGVkJ1xuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eShpbnB1dCwgcG9zaXRpb24pKTtcbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdNYXBQb3NpdGlvbicpKSB7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHNlbGVjdFBvc2l0aW9uRm9tTWFwKGlucHV0KSk7XG4gIH1cbiAgaWYgKHRhcmdldHMuaW5jbHVkZXMoJ0Z1dHVyZVJvdXRlcycpKSB7XG4gICAgY29uc3QgaXRlbXMgPSBnZXRGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKHRha2UoaXRlbXMsIDMpKTtcbiAgfVxuICBpZiAoXG4gICAgdGFyZ2V0cy5pbmNsdWRlcygnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpICYmXG4gICAgaGFzRmF2b3VyaXRlcyhzZWFyY2hDb250ZXh0KVxuICApIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0RnJvbU93bkxvY2F0aW9ucyhpbnB1dCkpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1kZXN0cnVjdHVyaW5nXG4gICAgY29uc3Qgc2VhcmNoUGFyYW1zID0gZ2VvY29kaW5nU2VhcmNoUGFyYW1zO1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlTG9jYXRpb25zID0gZ2V0RmF2b3VyaXRlTG9jYXRpb25zKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlTG9jYXRpb25zLCBpbnB1dCksXG4gICAgICApO1xuICAgICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0JhY2snKSkge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZ2V0QmFja1N1Z2dlc3Rpb24oKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ3N0YXRpb24nLCAndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGNvbnN0IGZlZWRpcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCk7XG4gICAgICBjb25zdCBnZW9zb3VyY2VzID0gZ2VvY29kaW5nU291cmNlcy5jb25jYXQoZmVlZGlzKS5qb2luKCcsJyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgc2VhcmNoUGFyYW1zLFxuICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIGZvY3VzUG9pbnQsXG4gICAgICAgICAgZ2Vvc291cmNlcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBsb2NhdGlvbkhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0LCAnZW5kcG9pbnQnKTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbXG4gICAgICAgICdjdXJyZW50UG9zaXRpb24nLFxuICAgICAgICAnc2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICdmdXR1cmVSb3V0ZScsXG4gICAgICAgICdvd25Mb2NhdGlvbnMnLFxuICAgICAgICAndmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICAgICAgICAnYmlrZXBhcmsnLFxuICAgICAgICAnY2FycGFyaycsXG4gICAgICAgICdzdG9wJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ2Jpa2VzdGF0aW9uJyxcbiAgICAgICAgJ3ZlaGljbGVSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgICAnc3RvcCcsXG4gICAgICAgICdzdGF0aW9uJyxcbiAgICAgIF07XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gZ2V0RmF2b3VyaXRlU3RvcHMoY29udGV4dCk7XG4gICAgICBsZXQgc3RvcHNBbmRTdGF0aW9ucztcbiAgICAgIGlmIChmYXZvdXJpdGVTdG9wcy5ldmVyeShzdG9wID0+IHN0b3AudHlwZSA9PT0gJ3N0YXRpb24nKSkge1xuICAgICAgICBzdG9wc0FuZFN0YXRpb25zID0gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKFxuICAgICAgICAgIGZhdm91cml0ZVN0b3BzLFxuICAgICAgICAgIFVSTF9QRUxJQVNfUExBQ0UsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeShmYXZvdXJpdGVTdG9wcylcbiAgICAgICAgICAudGhlbihmYXZvdXJpdGVzID0+XG4gICAgICAgICAgICBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoZmF2b3VyaXRlcywgVVJMX1BFTElBU19QTEFDRSksXG4gICAgICAgICAgKVxuICAgICAgICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCkpO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIGlmIChnZW9jb2RpbmdTZWFyY2hQYXJhbXMgJiYgZ2VvY29kaW5nU2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10pIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zWydib3VuZGFyeS5jb3VudHJ5J10gPVxuICAgICAgICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddO1xuICAgICAgfVxuICAgICAgLy8gYSBsaXR0bGUgaGFjazogd2hlbiBzZWFyY2hpbmcgbG9jYXRpb24gZGF0YSwgYXV0b21hdGljYWxseSBkZWR1cGUgc3RvcHNcbiAgICAgIC8vIHRoaXMgY291bGQgYmUgYSBuZXcgZXhwbGljaXQgcHJvcFxuICAgICAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAgICAgc2VhcmNoUGFyYW1zLmRlZHVwZXN0b3BzID0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGZlZWRpcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRpcyxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gcmVzdWx0cztcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHN0b3BIaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCkuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmdpZCkge1xuICAgICAgICAgIHJldHVybiBpdGVtLnByb3BlcnRpZXMuZ2lkLmluY2x1ZGVzKCdHVEZTOicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gW1xuICAgICAgICAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgJ3NlbGVjdEZyb21NYXAnLFxuICAgICAgICAnZnV0dXJlUm91dGUnLFxuICAgICAgICAnb3duTG9jYXRpb25zJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ3ZlaGljbGVSZW50YWxTdGF0aW9uJyxcbiAgICAgICAgJ2JhY2snLFxuICAgICAgXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgaWYgKHRyYW5zcG9ydE1vZGUgIT09ICdyb3V0ZS1DSVRZQklLRScpIHtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ3ZlaGljbGVSZW50YWxTdGF0aW9uJyk7XG4gICAgICAgICAgZHJvcExheWVycy5wdXNoKCdiaWtlc3RhdGlvbicpO1xuICAgICAgICB9XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0ID0+XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUpIDogcmVzdWx0LFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgICAgZmlsdGVyT2xkU2VhcmNoZXMoc3RvcEhpc3RvcnksIGlucHV0LCBkcm9wTGF5ZXJzKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFtcbiAgICAgICAgJ2N1cnJlbnRQb3NpdGlvbicsXG4gICAgICAgICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgJ2Z1dHVyZVJvdXRlJyxcbiAgICAgICAgJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgICAgJ3N0b3AnLFxuICAgICAgICAnc3RhdGlvbicsXG4gICAgICAgICdiaWtlcGFyaycsXG4gICAgICAgICdjYXJwYXJrJyxcbiAgICAgICAgJ293bkxvY2F0aW9ucycsXG4gICAgICAgICdiYWNrJyxcbiAgICAgIF07XG4gICAgICBpZiAodHJhbnNwb3J0TW9kZSkge1xuICAgICAgICBpZiAodHJhbnNwb3J0TW9kZSAhPT0gJ3JvdXRlLUNJVFlCSUtFJykge1xuICAgICAgICAgIGRyb3BMYXllcnMucHVzaCgndmVoaWNsZVJlbnRhbFN0YXRpb24nKTtcbiAgICAgICAgICBkcm9wTGF5ZXJzLnB1c2goJ2Jpa2VzdGF0aW9uJyk7XG4gICAgICAgIH1cbiAgICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzLmZpbHRlcihpID0+ICEoaSA9PT0gdHJhbnNwb3J0TW9kZSkpKTtcbiAgICAgIH1cbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzZWFyY2hSZXN1bHRzUHJvbWlzZSA9IFByb21pc2UuYWxsKHNlYXJjaENvbXBvbmVudHMpXG4gICAgLnRoZW4oZmxhdHRlbilcbiAgICAudGhlbihyZXN1bHRzID0+IHtcbiAgICAgIHNlYXJjaGVzLnJlc3VsdHMgPSByZXN1bHRzO1xuICAgIH0pXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBzZWFyY2hlcy5lcnJvciA9IGVycjtcbiAgICB9KTtcbiAgc2VhcmNoUmVzdWx0c1Byb21pc2UudGhlbigoKSA9PiB7XG4gICAgY2FsbGJhY2soe1xuICAgICAgLi4uc2VhcmNoZXMsXG4gICAgICByZXN1bHRzOiBzb3J0U2VhcmNoUmVzdWx0cyhsaW5lUmVnZXhwLCBzZWFyY2hlcy5yZXN1bHRzLCBpbnB1dCksXG4gICAgfSk7XG4gIH0pO1xufVxuXG5jb25zdCBkZWJvdW5jZWRTZWFyY2ggPSBkZWJvdW5jZShnZXRTZWFyY2hSZXN1bHRzLCAzMDAsIHtcbiAgbGVhZGluZzogdHJ1ZSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZXhlY3V0ZVNlYXJjaCA9IChcbiAgdGFyZ2V0cyxcbiAgc291cmNlcyxcbiAgdHJhbnNwb3J0TW9kZSxcbiAgc2VhcmNoQ29udGV4dCxcbiAgZmlsdGVyUmVzdWx0cyxcbiAgZ2VvY29kaW5nU2l6ZSxcbiAgZGF0YSxcbiAgY2FsbGJhY2ssXG4gIHBhdGhPcHRzLFxuICByZWZQb2ludCxcbikgPT4ge1xuICBjYWxsYmFjayhudWxsKTsgLy8gVGhpcyBtZWFucyAnd2UgYXJlIHNlYXJjaGluZydcbiAgZGVib3VuY2VkU2VhcmNoKFxuICAgIHRhcmdldHMsXG4gICAgc291cmNlcyxcbiAgICB0cmFuc3BvcnRNb2RlLFxuICAgIHNlYXJjaENvbnRleHQsXG4gICAgZmlsdGVyUmVzdWx0cyxcbiAgICBnZW9jb2RpbmdTaXplLFxuICAgIGRhdGEsXG4gICAgY2FsbGJhY2ssXG4gICAgcGF0aE9wdHMsXG4gICAgcmVmUG9pbnQsXG4gICk7XG59O1xuIiwiaW1wb3J0IHVuaXFXaXRoIGZyb20gJ2xvZGFzaC91bmlxV2l0aCc7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gvbWVtb2l6ZSc7XG5pbXBvcnQgZXNjYXBlUmVnRXhwIGZyb20gJ2xvZGFzaC9lc2NhcGVSZWdFeHAnO1xuaW1wb3J0IGNsb25lRGVlcCBmcm9tICdsb2Rhc2gvY2xvbmVEZWVwJztcblxuLyoqXG4gKiBMb2NhdGlvbiBwcm9wZXJ0aWVzLlxuICogQHR5cGVkZWYge0xvY2F0aW9uUHJvcGVydGllc31cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBsYXllciBTdWdnZXN0aW9uIGxheWVyLlxuICogQHByb3BlcnR5IHtsYXR9IFtudW1iZXJdXG4gKiBAcHJvcGVydHkge2xvbn0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBhZGRyZXNzIEFkZHJlc3MuXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsaXR5IChjaXR5IG5hbWUpIGZvciBzdWdnZXN0aW9uc1xuICpcbiAqIEBuYW1lIGdldExvY2FsaXR5XG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsaXR5ID0gc3VnZ2VzdGlvbiA9PlxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgc3VnZ2VzdGlvbi5sb2NhbGl0eSB8fFxuICAoc3VnZ2VzdGlvbi5hZGRyZXNzICYmXG4gICAgc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgPCBzdWdnZXN0aW9uLmFkZHJlc3MubGVuZ3RoIC0gMiAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5zdWJzdHJpbmcoc3VnZ2VzdGlvbi5hZGRyZXNzLmxhc3RJbmRleE9mKCcsJykgKyAyKSkgfHxcbiAgJyc7XG5cbmV4cG9ydCBjb25zdCBnZXRTdG9wQ29kZSA9ICh7IGlkLCBjb2RlIH0pID0+IHtcbiAgaWYgKGNvZGUpIHtcbiAgICByZXR1cm4gY29kZTtcbiAgfVxuICBpZiAoXG4gICAgaWQgPT09IHVuZGVmaW5lZCB8fFxuICAgIHR5cGVvZiBpZC5pbmRleE9mID09PSAndW5kZWZpbmVkJyB8fFxuICAgIGlkLmluZGV4T2YoJyMnKSA9PT0gLTFcbiAgKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICAvLyBpZCBmcm9tIHBlbGlhc1xuICByZXR1cm4gaWQuc3Vic3RyaW5nKGlkLmluZGV4T2YoJyMnKSArIDEpO1xufTtcblxuZXhwb3J0IGNvbnN0IGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwgPSAobmFtZSwgYWRkcmVzcykgPT4gW1xuICBuYW1lIHx8IChhZGRyZXNzICYmIGFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gIHR5cGVvZiBhZGRyZXNzID09PSAnc3RyaW5nJ1xuICAgID8gYWRkcmVzcy5yZXBsYWNlKG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKG5hbWUpfShbICxdfCQpK2ApLCAnJylcbiAgICA6ICcnLFxuXTtcblxuLyoqXG4gKiBGb3JtYXQgc3VnZ2VzdGlvbi1wYWlyIFtuYW1lLCBhZGRyZXNzXSBieSBgc3VnZ2VzdGlvbi5sYXllcmAuXG4gKlxuICogQG5hbWUgZ2V0TmFtZUxhYmVsXG4gKiBAcGFyYW0ge0xvY2F0aW9uUHJvcGVydGllc30gc3VnZ2VzdGlvblxuICogQHBhcmFtIHtib29sZWFufSBbcGxhaW5dXG4gKlxuICogQHJldHVybnMge0FycmF5LjxzdHJpbmc+fSBGb3JtYXR0ZWQgbGFiZWwuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXROYW1lTGFiZWwgPSBtZW1vaXplKFxuICAoc3VnZ2VzdGlvbiwgcGxhaW4gPSBmYWxzZSkgPT4ge1xuICAgIHN3aXRjaCAoc3VnZ2VzdGlvbi5sYXllcikge1xuICAgICAgY2FzZSAnY3VycmVudFBvc2l0aW9uJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWQsIHN1Z2dlc3Rpb24uYWRkcmVzc107XG4gICAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgICBjYXNlICdiYWNrJzpcbiAgICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uLmxhYmVsSWRdO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgICByZXR1cm4gZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbChzdWdnZXN0aW9uLm5hbWUsIHN1Z2dlc3Rpb24uYWRkcmVzcyk7XG4gICAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgICBjYXNlICdiaWtlc3RhdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5uYW1lXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVJvdXRlJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUJVUyc6XG4gICAgICBjYXNlICdyb3V0ZS1UUkFNJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVJBSUwnOlxuICAgICAgY2FzZSAncm91dGUtU1VCV0FZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZFUlJZJzpcbiAgICAgIGNhc2UgJ3JvdXRlLUZVTklDVUxBUic6XG4gICAgICBjYXNlICdyb3V0ZS1BSVJQTEFORSc6XG4gICAgICAgIHJldHVybiAhcGxhaW4gJiYgc3VnZ2VzdGlvbi5zaG9ydE5hbWVcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5ndGZzSWQsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubW9kZS50b0xvd2VyQ2FzZSgpLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxvbmdOYW1lLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLnNob3J0TmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5hZ2VuY3kgPyBzdWdnZXN0aW9uLmFnZW5jeS5uYW1lIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ3ZlbnVlJzpcbiAgICAgIGNhc2UgJ2FkZHJlc3MnOlxuICAgICAgY2FzZSAnc3RyZWV0JzpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbC5yZXBsYWNlKFxuICAgICAgICAgICAgbmV3IFJlZ0V4cChgJHtlc2NhcGVSZWdFeHAoc3VnZ2VzdGlvbi5uYW1lKX0oLCk/KCApP2ApLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgKSxcbiAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0b3AnOlxuICAgICAgY2FzZSAnc3RvcCc6XG4gICAgICAgIHJldHVybiBwbGFpblxuICAgICAgICAgID8gW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLmxhYmVsIHx8XG4gICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgICAgIGdldExvY2FsaXR5KHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGl0eShzdWdnZXN0aW9uKSxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdGF0aW9uJzpcbiAgICAgIGNhc2UgJ3N0YXRpb24nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUgfHxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwgfHxcbiAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgIGdldExvY2FsaXR5KHN1Z2dlc3Rpb24pLFxuICAgICAgICBdO1xuICAgIH1cbiAgfSxcbiAgKGl0ZW0sIHBsYWluKSA9PiB7XG4gICAgY29uc3QgaSA9IGNsb25lRGVlcChpdGVtKTtcbiAgICBpLnBsYWluID0gcGxhaW47XG4gICAgcmV0dXJuIGk7XG4gIH0sXG4pO1xuXG4vKipcbiAqIENoZWNrcyB0aGF0IGZlYXR1cmVzIGFyZSB1bmlxdWUgYnkgbGFiZWxcbiAqXG4gKiBAbmFtZSB1bmlxQnlMYWJlbFxuICogQHBhcmFtIHtBcnJheX0gZmVhdHVyZXMgQXJyYXkgb2YgZmVhdHVyZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIHVuaXF1ZSBmZWF0dXJlc1xuICogQGV4YW1wbGVcbiAqIGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLnVuaXFCeUxhYmVsKGZlYXR1cmVzKTtcbiAqIC8vPSBBcnJheSgyKVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bmlxQnlMYWJlbChmZWF0dXJlcykge1xuICByZXR1cm4gdW5pcVdpdGgoZmVhdHVyZXMsIChmZWF0MSwgZmVhdDIpID0+IHtcbiAgICBpZiAoZmVhdDEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBmZWF0Mi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiAoXG4gICAgICBpc0VxdWFsKGdldE5hbWVMYWJlbChmZWF0MS5wcm9wZXJ0aWVzKSwgZ2V0TmFtZUxhYmVsKGZlYXQyLnByb3BlcnRpZXMpKSAmJlxuICAgICAgZmVhdDEucHJvcGVydGllcy5sYXllciA9PT0gZmVhdDIucHJvcGVydGllcy5sYXllclxuICAgICk7XG4gIH0pO1xufVxuIiwiLy8hIG1vbWVudC5qc1xuLy8hIHZlcnNpb24gOiAyLjI5LjRcbi8vISBhdXRob3JzIDogVGltIFdvb2QsIElza3JlbiBDaGVybmV2LCBNb21lbnQuanMgY29udHJpYnV0b3JzXG4vLyEgbGljZW5zZSA6IE1JVFxuLy8hIG1vbWVudGpzLmNvbVxuXG47KGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICBnbG9iYWwubW9tZW50ID0gZmFjdG9yeSgpXG59KHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIHZhciBob29rQ2FsbGJhY2s7XG5cbiAgICBmdW5jdGlvbiBob29rcygpIHtcbiAgICAgICAgcmV0dXJuIGhvb2tDYWxsYmFjay5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgZG9uZSB0byByZWdpc3RlciB0aGUgbWV0aG9kIGNhbGxlZCB3aXRoIG1vbWVudCgpXG4gICAgLy8gd2l0aG91dCBjcmVhdGluZyBjaXJjdWxhciBkZXBlbmRlbmNpZXMuXG4gICAgZnVuY3Rpb24gc2V0SG9va0NhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgICAgIGhvb2tDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQXJyYXkoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlucHV0IGluc3RhbmNlb2YgQXJyYXkgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IEFycmF5XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdChpbnB1dCkge1xuICAgICAgICAvLyBJRTggd2lsbCB0cmVhdCB1bmRlZmluZWQgYW5kIG51bGwgYXMgb2JqZWN0IGlmIGl0IHdhc24ndCBmb3JcbiAgICAgICAgLy8gaW5wdXQgIT0gbnVsbFxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaW5wdXQgIT0gbnVsbCAmJlxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSdcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYXNPd25Qcm9wKGEsIGIpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLCBiKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc09iamVjdEVtcHR5KG9iaikge1xuICAgICAgICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrO1xuICAgICAgICAgICAgZm9yIChrIGluIG9iaikge1xuICAgICAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKG9iaiwgaykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVbmRlZmluZWQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGlucHV0ID09PSB2b2lkIDA7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNOdW1iZXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IE51bWJlcl0nXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNEYXRlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBpbnB1dCBpbnN0YW5jZW9mIERhdGUgfHxcbiAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpbnB1dCkgPT09ICdbb2JqZWN0IERhdGVdJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hcChhcnIsIGZuKSB7XG4gICAgICAgIHZhciByZXMgPSBbXSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyTGVuOyArK2kpIHtcbiAgICAgICAgICAgIHJlcy5wdXNoKGZuKGFycltpXSwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgICAgICAgZm9yICh2YXIgaSBpbiBiKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duUHJvcChiLCBpKSkge1xuICAgICAgICAgICAgICAgIGFbaV0gPSBiW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3RvU3RyaW5nJykpIHtcbiAgICAgICAgICAgIGEudG9TdHJpbmcgPSBiLnRvU3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGhhc093blByb3AoYiwgJ3ZhbHVlT2YnKSkge1xuICAgICAgICAgICAgYS52YWx1ZU9mID0gYi52YWx1ZU9mO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCB0cnVlKS51dGMoKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZWZhdWx0UGFyc2luZ0ZsYWdzKCkge1xuICAgICAgICAvLyBXZSBuZWVkIHRvIGRlZXAgY2xvbmUgdGhpcyBvYmplY3QuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBlbXB0eTogZmFsc2UsXG4gICAgICAgICAgICB1bnVzZWRUb2tlbnM6IFtdLFxuICAgICAgICAgICAgdW51c2VkSW5wdXQ6IFtdLFxuICAgICAgICAgICAgb3ZlcmZsb3c6IC0yLFxuICAgICAgICAgICAgY2hhcnNMZWZ0T3ZlcjogMCxcbiAgICAgICAgICAgIG51bGxJbnB1dDogZmFsc2UsXG4gICAgICAgICAgICBpbnZhbGlkRXJhOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZE1vbnRoOiBudWxsLFxuICAgICAgICAgICAgaW52YWxpZEZvcm1hdDogZmFsc2UsXG4gICAgICAgICAgICB1c2VySW52YWxpZGF0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgaXNvOiBmYWxzZSxcbiAgICAgICAgICAgIHBhcnNlZERhdGVQYXJ0czogW10sXG4gICAgICAgICAgICBlcmE6IG51bGwsXG4gICAgICAgICAgICBtZXJpZGllbTogbnVsbCxcbiAgICAgICAgICAgIHJmYzI4MjI6IGZhbHNlLFxuICAgICAgICAgICAgd2Vla2RheU1pc21hdGNoOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRQYXJzaW5nRmxhZ3MobSkge1xuICAgICAgICBpZiAobS5fcGYgPT0gbnVsbCkge1xuICAgICAgICAgICAgbS5fcGYgPSBkZWZhdWx0UGFyc2luZ0ZsYWdzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX3BmO1xuICAgIH1cblxuICAgIHZhciBzb21lO1xuICAgIGlmIChBcnJheS5wcm90b3R5cGUuc29tZSkge1xuICAgICAgICBzb21lID0gQXJyYXkucHJvdG90eXBlLnNvbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgc29tZSA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICAgICAgICAgIHZhciB0ID0gT2JqZWN0KHRoaXMpLFxuICAgICAgICAgICAgICAgIGxlbiA9IHQubGVuZ3RoID4+PiAwLFxuICAgICAgICAgICAgICAgIGk7XG5cbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpIGluIHQgJiYgZnVuLmNhbGwodGhpcywgdFtpXSwgaSwgdCkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZChtKSB7XG4gICAgICAgIGlmIChtLl9pc1ZhbGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBmbGFncyA9IGdldFBhcnNpbmdGbGFncyhtKSxcbiAgICAgICAgICAgICAgICBwYXJzZWRQYXJ0cyA9IHNvbWUuY2FsbChmbGFncy5wYXJzZWREYXRlUGFydHMsIGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpICE9IG51bGw7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgICFpc05hTihtLl9kLmdldFRpbWUoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3Mub3ZlcmZsb3cgPCAwICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5lbXB0eSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZEVyYSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3MuaW52YWxpZE1vbnRoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5pbnZhbGlkV2Vla2RheSAmJlxuICAgICAgICAgICAgICAgICAgICAhZmxhZ3Mud2Vla2RheU1pc21hdGNoICYmXG4gICAgICAgICAgICAgICAgICAgICFmbGFncy5udWxsSW5wdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLmludmFsaWRGb3JtYXQgJiZcbiAgICAgICAgICAgICAgICAgICAgIWZsYWdzLnVzZXJJbnZhbGlkYXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICAoIWZsYWdzLm1lcmlkaWVtIHx8IChmbGFncy5tZXJpZGllbSAmJiBwYXJzZWRQYXJ0cykpO1xuXG4gICAgICAgICAgICBpZiAobS5fc3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgaXNOb3dWYWxpZCA9XG4gICAgICAgICAgICAgICAgICAgIGlzTm93VmFsaWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuY2hhcnNMZWZ0T3ZlciA9PT0gMCAmJlxuICAgICAgICAgICAgICAgICAgICBmbGFncy51bnVzZWRUb2tlbnMubGVuZ3RoID09PSAwICYmXG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmJpZ0hvdXIgPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKE9iamVjdC5pc0Zyb3plbiA9PSBudWxsIHx8ICFPYmplY3QuaXNGcm96ZW4obSkpIHtcbiAgICAgICAgICAgICAgICBtLl9pc1ZhbGlkID0gaXNOb3dWYWxpZDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzTm93VmFsaWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG0uX2lzVmFsaWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlSW52YWxpZChmbGFncykge1xuICAgICAgICB2YXIgbSA9IGNyZWF0ZVVUQyhOYU4pO1xuICAgICAgICBpZiAoZmxhZ3MgIT0gbnVsbCkge1xuICAgICAgICAgICAgZXh0ZW5kKGdldFBhcnNpbmdGbGFncyhtKSwgZmxhZ3MpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLnVzZXJJbnZhbGlkYXRlZCA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBQbHVnaW5zIHRoYXQgYWRkIHByb3BlcnRpZXMgc2hvdWxkIGFsc28gYWRkIHRoZSBrZXkgaGVyZSAobnVsbCB2YWx1ZSksXG4gICAgLy8gc28gd2UgY2FuIHByb3Blcmx5IGNsb25lIG91cnNlbHZlcy5cbiAgICB2YXIgbW9tZW50UHJvcGVydGllcyA9IChob29rcy5tb21lbnRQcm9wZXJ0aWVzID0gW10pLFxuICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBjb3B5Q29uZmlnKHRvLCBmcm9tKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgcHJvcCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIG1vbWVudFByb3BlcnRpZXNMZW4gPSBtb21lbnRQcm9wZXJ0aWVzLmxlbmd0aDtcblxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzQU1vbWVudE9iamVjdCkpIHtcbiAgICAgICAgICAgIHRvLl9pc0FNb21lbnRPYmplY3QgPSBmcm9tLl9pc0FNb21lbnRPYmplY3Q7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9pKSkge1xuICAgICAgICAgICAgdG8uX2kgPSBmcm9tLl9pO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fZikpIHtcbiAgICAgICAgICAgIHRvLl9mID0gZnJvbS5fZjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2wpKSB7XG4gICAgICAgICAgICB0by5fbCA9IGZyb20uX2w7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9zdHJpY3QpKSB7XG4gICAgICAgICAgICB0by5fc3RyaWN0ID0gZnJvbS5fc3RyaWN0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fdHptKSkge1xuICAgICAgICAgICAgdG8uX3R6bSA9IGZyb20uX3R6bTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGZyb20uX2lzVVRDKSkge1xuICAgICAgICAgICAgdG8uX2lzVVRDID0gZnJvbS5faXNVVEM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9vZmZzZXQpKSB7XG4gICAgICAgICAgICB0by5fb2Zmc2V0ID0gZnJvbS5fb2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoZnJvbS5fcGYpKSB7XG4gICAgICAgICAgICB0by5fcGYgPSBnZXRQYXJzaW5nRmxhZ3MoZnJvbSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChmcm9tLl9sb2NhbGUpKSB7XG4gICAgICAgICAgICB0by5fbG9jYWxlID0gZnJvbS5fbG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1vbWVudFByb3BlcnRpZXNMZW4gPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbW9tZW50UHJvcGVydGllc0xlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgcHJvcCA9IG1vbWVudFByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICAgICAgdmFsID0gZnJvbVtwcm9wXTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHZhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9bcHJvcF0gPSB2YWw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cblxuICAgIC8vIE1vbWVudCBwcm90b3R5cGUgb2JqZWN0XG4gICAgZnVuY3Rpb24gTW9tZW50KGNvbmZpZykge1xuICAgICAgICBjb3B5Q29uZmlnKHRoaXMsIGNvbmZpZyk7XG4gICAgICAgIHRoaXMuX2QgPSBuZXcgRGF0ZShjb25maWcuX2QgIT0gbnVsbCA/IGNvbmZpZy5fZC5nZXRUaW1lKCkgOiBOYU4pO1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICB0aGlzLl9kID0gbmV3IERhdGUoTmFOKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQcmV2ZW50IGluZmluaXRlIGxvb3AgaW4gY2FzZSB1cGRhdGVPZmZzZXQgY3JlYXRlcyBuZXcgbW9tZW50XG4gICAgICAgIC8vIG9iamVjdHMuXG4gICAgICAgIGlmICh1cGRhdGVJblByb2dyZXNzID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdXBkYXRlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcyk7XG4gICAgICAgICAgICB1cGRhdGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc01vbWVudChvYmopIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIG9iaiBpbnN0YW5jZW9mIE1vbWVudCB8fCAob2JqICE9IG51bGwgJiYgb2JqLl9pc0FNb21lbnRPYmplY3QgIT0gbnVsbClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3YXJuKG1zZykge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBob29rcy5zdXBwcmVzc0RlcHJlY2F0aW9uV2FybmluZ3MgPT09IGZhbHNlICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICAgICAgICAgIGNvbnNvbGUud2FyblxuICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogJyArIG1zZyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkZXByZWNhdGUobXNnLCBmbikge1xuICAgICAgICB2YXIgZmlyc3RUaW1lID0gdHJ1ZTtcblxuICAgICAgICByZXR1cm4gZXh0ZW5kKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmIChob29rcy5kZXByZWNhdGlvbkhhbmRsZXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlcihudWxsLCBtc2cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZpcnN0VGltZSkge1xuICAgICAgICAgICAgICAgIHZhciBhcmdzID0gW10sXG4gICAgICAgICAgICAgICAgICAgIGFyZyxcbiAgICAgICAgICAgICAgICAgICAgaSxcbiAgICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgICBhcmdMZW4gPSBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdMZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSAnJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgKz0gJ1xcblsnICsgaSArICddICc7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGtleSBpbiBhcmd1bWVudHNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChhcmd1bWVudHNbMF0sIGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnICs9IGtleSArICc6ICcgKyBhcmd1bWVudHNbMF1ba2V5XSArICcsICc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnNsaWNlKDAsIC0yKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIGNvbW1hIGFuZCBzcGFjZVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB3YXJuKFxuICAgICAgICAgICAgICAgICAgICBtc2cgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ1xcbkFyZ3VtZW50czogJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmdzKS5qb2luKCcnKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnXFxuJyArXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRXJyb3IoKS5zdGFja1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgZmlyc3RUaW1lID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSwgZm4pO1xuICAgIH1cblxuICAgIHZhciBkZXByZWNhdGlvbnMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZVNpbXBsZShuYW1lLCBtc2cpIHtcbiAgICAgICAgaWYgKGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciAhPSBudWxsKSB7XG4gICAgICAgICAgICBob29rcy5kZXByZWNhdGlvbkhhbmRsZXIobmFtZSwgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRlcHJlY2F0aW9uc1tuYW1lXSkge1xuICAgICAgICAgICAgd2Fybihtc2cpO1xuICAgICAgICAgICAgZGVwcmVjYXRpb25zW25hbWVdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLnN1cHByZXNzRGVwcmVjYXRpb25XYXJuaW5ncyA9IGZhbHNlO1xuICAgIGhvb2tzLmRlcHJlY2F0aW9uSGFuZGxlciA9IG51bGw7XG5cbiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uKGlucHV0KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAodHlwZW9mIEZ1bmN0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBpbnB1dCBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGlucHV0KSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJ1xuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldChjb25maWcpIHtcbiAgICAgICAgdmFyIHByb3AsIGk7XG4gICAgICAgIGZvciAoaSBpbiBjb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNvbmZpZywgaSkpIHtcbiAgICAgICAgICAgICAgICBwcm9wID0gY29uZmlnW2ldO1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbJ18nICsgaV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jb25maWcgPSBjb25maWc7XG4gICAgICAgIC8vIExlbmllbnQgb3JkaW5hbCBwYXJzaW5nIGFjY2VwdHMganVzdCBhIG51bWJlciBpbiBhZGRpdGlvbiB0b1xuICAgICAgICAvLyBudW1iZXIgKyAocG9zc2libHkpIHN0dWZmIGNvbWluZyBmcm9tIF9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLlxuICAgICAgICAvLyBUT0RPOiBSZW1vdmUgXCJvcmRpbmFsUGFyc2VcIiBmYWxsYmFjayBpbiBuZXh0IG1ham9yIHJlbGVhc2UuXG4gICAgICAgIHRoaXMuX2RheU9mTW9udGhPcmRpbmFsUGFyc2VMZW5pZW50ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICh0aGlzLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlLnNvdXJjZSB8fCB0aGlzLl9vcmRpbmFsUGFyc2Uuc291cmNlKSArXG4gICAgICAgICAgICAgICAgJ3wnICtcbiAgICAgICAgICAgICAgICAvXFxkezEsMn0vLnNvdXJjZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNoaWxkQ29uZmlnKSB7XG4gICAgICAgIHZhciByZXMgPSBleHRlbmQoe30sIHBhcmVudENvbmZpZyksXG4gICAgICAgICAgICBwcm9wO1xuICAgICAgICBmb3IgKHByb3AgaW4gY2hpbGRDb25maWcpIHtcbiAgICAgICAgICAgIGlmIChoYXNPd25Qcm9wKGNoaWxkQ29uZmlnLCBwcm9wKSkge1xuICAgICAgICAgICAgICAgIGlmIChpc09iamVjdChwYXJlbnRDb25maWdbcHJvcF0pICYmIGlzT2JqZWN0KGNoaWxkQ29uZmlnW3Byb3BdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgcGFyZW50Q29uZmlnW3Byb3BdKTtcbiAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJlc1twcm9wXSwgY2hpbGRDb25maWdbcHJvcF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGRDb25maWdbcHJvcF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXNbcHJvcF0gPSBjaGlsZENvbmZpZ1twcm9wXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcmVzW3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKHByb3AgaW4gcGFyZW50Q29uZmlnKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgaGFzT3duUHJvcChwYXJlbnRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgIWhhc093blByb3AoY2hpbGRDb25maWcsIHByb3ApICYmXG4gICAgICAgICAgICAgICAgaXNPYmplY3QocGFyZW50Q29uZmlnW3Byb3BdKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGNoYW5nZXMgdG8gcHJvcGVydGllcyBkb24ndCBtb2RpZnkgcGFyZW50IGNvbmZpZ1xuICAgICAgICAgICAgICAgIHJlc1twcm9wXSA9IGV4dGVuZCh7fSwgcmVzW3Byb3BdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIExvY2FsZShjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLnNldChjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGtleXM7XG5cbiAgICBpZiAoT2JqZWN0LmtleXMpIHtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleXMgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgICAgICByZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoaSBpbiBvYmopIHtcbiAgICAgICAgICAgICAgICBpZiAoaGFzT3duUHJvcChvYmosIGkpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRDYWxlbmRhciA9IHtcbiAgICAgICAgc2FtZURheTogJ1tUb2RheSBhdF0gTFQnLFxuICAgICAgICBuZXh0RGF5OiAnW1RvbW9ycm93IGF0XSBMVCcsXG4gICAgICAgIG5leHRXZWVrOiAnZGRkZCBbYXRdIExUJyxcbiAgICAgICAgbGFzdERheTogJ1tZZXN0ZXJkYXkgYXRdIExUJyxcbiAgICAgICAgbGFzdFdlZWs6ICdbTGFzdF0gZGRkZCBbYXRdIExUJyxcbiAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY2FsZW5kYXIoa2V5LCBtb20sIG5vdykge1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGhpcy5fY2FsZW5kYXJba2V5XSB8fCB0aGlzLl9jYWxlbmRhclsnc2FtZUVsc2UnXTtcbiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24ob3V0cHV0KSA/IG91dHB1dC5jYWxsKG1vbSwgbm93KSA6IG91dHB1dDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB6ZXJvRmlsbChudW1iZXIsIHRhcmdldExlbmd0aCwgZm9yY2VTaWduKSB7XG4gICAgICAgIHZhciBhYnNOdW1iZXIgPSAnJyArIE1hdGguYWJzKG51bWJlciksXG4gICAgICAgICAgICB6ZXJvc1RvRmlsbCA9IHRhcmdldExlbmd0aCAtIGFic051bWJlci5sZW5ndGgsXG4gICAgICAgICAgICBzaWduID0gbnVtYmVyID49IDA7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAoc2lnbiA/IChmb3JjZVNpZ24gPyAnKycgOiAnJykgOiAnLScpICtcbiAgICAgICAgICAgIE1hdGgucG93KDEwLCBNYXRoLm1heCgwLCB6ZXJvc1RvRmlsbCkpLnRvU3RyaW5nKCkuc3Vic3RyKDEpICtcbiAgICAgICAgICAgIGFic051bWJlclxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBmb3JtYXR0aW5nVG9rZW5zID1cbiAgICAgICAgICAgIC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhbSGhdbW0oc3MpP3xNb3xNTT9NP00/fERvfERERG98REQ/RD9EP3xkZGQ/ZD98ZG8/fHdbb3x3XT98V1tvfFddP3xRbz98TnsxLDV9fFlZWVlZWXxZWVlZWXxZWVlZfFlZfHl7Miw0fXx5bz98Z2coZ2dnPyk/fEdHKEdHRz8pP3xlfEV8YXxBfGhoP3xISD98a2s/fG1tP3xzcz98U3sxLDl9fHh8WHx6ej98Wlo/fC4pL2csXG4gICAgICAgIGxvY2FsRm9ybWF0dGluZ1Rva2VucyA9IC8oXFxbW15cXFtdKlxcXSl8KFxcXFwpPyhMVFN8TFR8TEw/TD9MP3xsezEsNH0pL2csXG4gICAgICAgIGZvcm1hdEZ1bmN0aW9ucyA9IHt9LFxuICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9ucyA9IHt9O1xuXG4gICAgLy8gdG9rZW46ICAgICdNJ1xuICAgIC8vIHBhZGRlZDogICBbJ01NJywgMl1cbiAgICAvLyBvcmRpbmFsOiAgJ01vJ1xuICAgIC8vIGNhbGxiYWNrOiBmdW5jdGlvbiAoKSB7IHRoaXMubW9udGgoKSArIDEgfVxuICAgIGZ1bmN0aW9uIGFkZEZvcm1hdFRva2VuKHRva2VuLCBwYWRkZWQsIG9yZGluYWwsIGNhbGxiYWNrKSB7XG4gICAgICAgIHZhciBmdW5jID0gY2FsbGJhY2s7XG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBmdW5jID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2NhbGxiYWNrXSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4pIHtcbiAgICAgICAgICAgIGZvcm1hdFRva2VuRnVuY3Rpb25zW3Rva2VuXSA9IGZ1bmM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBhZGRlZCkge1xuICAgICAgICAgICAgZm9ybWF0VG9rZW5GdW5jdGlvbnNbcGFkZGVkWzBdXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gemVyb0ZpbGwoZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBwYWRkZWRbMV0sIHBhZGRlZFsyXSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcmRpbmFsKSB7XG4gICAgICAgICAgICBmb3JtYXRUb2tlbkZ1bmN0aW9uc1tvcmRpbmFsXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkub3JkaW5hbChcbiAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICAgICAgICAgICAgICB0b2tlblxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVtb3ZlRm9ybWF0dGluZ1Rva2VucyhpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQubWF0Y2goL1xcW1tcXHNcXFNdLykpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9eXFxbfFxcXSQvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnB1dC5yZXBsYWNlKC9cXFxcL2csICcnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlRm9ybWF0RnVuY3Rpb24oZm9ybWF0KSB7XG4gICAgICAgIHZhciBhcnJheSA9IGZvcm1hdC5tYXRjaChmb3JtYXR0aW5nVG9rZW5zKSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBsZW5ndGg7XG5cbiAgICAgICAgZm9yIChpID0gMCwgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1thcnJheVtpXV0pIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpXSA9IGZvcm1hdFRva2VuRnVuY3Rpb25zW2FycmF5W2ldXTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSByZW1vdmVGb3JtYXR0aW5nVG9rZW5zKGFycmF5W2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobW9tKSB7XG4gICAgICAgICAgICB2YXIgb3V0cHV0ID0gJycsXG4gICAgICAgICAgICAgICAgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIG91dHB1dCArPSBpc0Z1bmN0aW9uKGFycmF5W2ldKVxuICAgICAgICAgICAgICAgICAgICA/IGFycmF5W2ldLmNhbGwobW9tLCBmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgIDogYXJyYXlbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGZvcm1hdCBkYXRlIHVzaW5nIG5hdGl2ZSBkYXRlIG9iamVjdFxuICAgIGZ1bmN0aW9uIGZvcm1hdE1vbWVudChtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG0ubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3JtYXQgPSBleHBhbmRGb3JtYXQoZm9ybWF0LCBtLmxvY2FsZURhdGEoKSk7XG4gICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdID1cbiAgICAgICAgICAgIGZvcm1hdEZ1bmN0aW9uc1tmb3JtYXRdIHx8IG1ha2VGb3JtYXRGdW5jdGlvbihmb3JtYXQpO1xuXG4gICAgICAgIHJldHVybiBmb3JtYXRGdW5jdGlvbnNbZm9ybWF0XShtKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBleHBhbmRGb3JtYXQoZm9ybWF0LCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIGkgPSA1O1xuXG4gICAgICAgIGZ1bmN0aW9uIHJlcGxhY2VMb25nRGF0ZUZvcm1hdFRva2VucyhpbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuIGxvY2FsZS5sb25nRGF0ZUZvcm1hdChpbnB1dCkgfHwgaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMubGFzdEluZGV4ID0gMDtcbiAgICAgICAgd2hpbGUgKGkgPj0gMCAmJiBsb2NhbEZvcm1hdHRpbmdUb2tlbnMudGVzdChmb3JtYXQpKSB7XG4gICAgICAgICAgICBmb3JtYXQgPSBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICBsb2NhbEZvcm1hdHRpbmdUb2tlbnMsXG4gICAgICAgICAgICAgICAgcmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgbG9jYWxGb3JtYXR0aW5nVG9rZW5zLmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICBpIC09IDE7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0TG9uZ0RhdGVGb3JtYXQgPSB7XG4gICAgICAgIExUUzogJ2g6bW06c3MgQScsXG4gICAgICAgIExUOiAnaDptbSBBJyxcbiAgICAgICAgTDogJ01NL0REL1lZWVknLFxuICAgICAgICBMTDogJ01NTU0gRCwgWVlZWScsXG4gICAgICAgIExMTDogJ01NTU0gRCwgWVlZWSBoOm1tIEEnLFxuICAgICAgICBMTExMOiAnZGRkZCwgTU1NTSBELCBZWVlZIGg6bW0gQScsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGxvbmdEYXRlRm9ybWF0KGtleSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSxcbiAgICAgICAgICAgIGZvcm1hdFVwcGVyID0gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5LnRvVXBwZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChmb3JtYXQgfHwgIWZvcm1hdFVwcGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9ybWF0O1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XSA9IGZvcm1hdFVwcGVyXG4gICAgICAgICAgICAubWF0Y2goZm9ybWF0dGluZ1Rva2VucylcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHRvaykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU1NTScgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rID09PSAnTU0nIHx8XG4gICAgICAgICAgICAgICAgICAgIHRvayA9PT0gJ0REJyB8fFxuICAgICAgICAgICAgICAgICAgICB0b2sgPT09ICdkZGRkJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNsaWNlKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdG9rO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKCcnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5fbG9uZ0RhdGVGb3JtYXRba2V5XTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdEludmFsaWREYXRlID0gJ0ludmFsaWQgZGF0ZSc7XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludmFsaWREYXRlO1xuICAgIH1cblxuICAgIHZhciBkZWZhdWx0T3JkaW5hbCA9ICclZCcsXG4gICAgICAgIGRlZmF1bHREYXlPZk1vbnRoT3JkaW5hbFBhcnNlID0gL1xcZHsxLDJ9LztcblxuICAgIGZ1bmN0aW9uIG9yZGluYWwobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9vcmRpbmFsLnJlcGxhY2UoJyVkJywgbnVtYmVyKTtcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdFJlbGF0aXZlVGltZSA9IHtcbiAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICBwYXN0OiAnJXMgYWdvJyxcbiAgICAgICAgczogJ2EgZmV3IHNlY29uZHMnLFxuICAgICAgICBzczogJyVkIHNlY29uZHMnLFxuICAgICAgICBtOiAnYSBtaW51dGUnLFxuICAgICAgICBtbTogJyVkIG1pbnV0ZXMnLFxuICAgICAgICBoOiAnYW4gaG91cicsXG4gICAgICAgIGhoOiAnJWQgaG91cnMnLFxuICAgICAgICBkOiAnYSBkYXknLFxuICAgICAgICBkZDogJyVkIGRheXMnLFxuICAgICAgICB3OiAnYSB3ZWVrJyxcbiAgICAgICAgd3c6ICclZCB3ZWVrcycsXG4gICAgICAgIE06ICdhIG1vbnRoJyxcbiAgICAgICAgTU06ICclZCBtb250aHMnLFxuICAgICAgICB5OiAnYSB5ZWFyJyxcbiAgICAgICAgeXk6ICclZCB5ZWFycycsXG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIHJlbGF0aXZlVGltZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIG91dHB1dCA9IHRoaXMuX3JlbGF0aXZlVGltZVtzdHJpbmddO1xuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbihvdXRwdXQpXG4gICAgICAgICAgICA/IG91dHB1dChudW1iZXIsIHdpdGhvdXRTdWZmaXgsIHN0cmluZywgaXNGdXR1cmUpXG4gICAgICAgICAgICA6IG91dHB1dC5yZXBsYWNlKC8lZC9pLCBudW1iZXIpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhc3RGdXR1cmUoZGlmZiwgb3V0cHV0KSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSB0aGlzLl9yZWxhdGl2ZVRpbWVbZGlmZiA+IDAgPyAnZnV0dXJlJyA6ICdwYXN0J107XG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGZvcm1hdCkgPyBmb3JtYXQob3V0cHV0KSA6IGZvcm1hdC5yZXBsYWNlKC8lcy9pLCBvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhbGlhc2VzID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRVbml0QWxpYXModW5pdCwgc2hvcnRoYW5kKSB7XG4gICAgICAgIHZhciBsb3dlckNhc2UgPSB1bml0LnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIGFsaWFzZXNbbG93ZXJDYXNlXSA9IGFsaWFzZXNbbG93ZXJDYXNlICsgJ3MnXSA9IGFsaWFzZXNbc2hvcnRoYW5kXSA9IHVuaXQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplVW5pdHModW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB1bml0cyA9PT0gJ3N0cmluZydcbiAgICAgICAgICAgID8gYWxpYXNlc1t1bml0c10gfHwgYWxpYXNlc1t1bml0cy50b0xvd2VyQ2FzZSgpXVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0VW5pdHMoaW5wdXRPYmplY3QpIHtcbiAgICAgICAgdmFyIG5vcm1hbGl6ZWRJbnB1dCA9IHt9LFxuICAgICAgICAgICAgbm9ybWFsaXplZFByb3AsXG4gICAgICAgICAgICBwcm9wO1xuXG4gICAgICAgIGZvciAocHJvcCBpbiBpbnB1dE9iamVjdCkge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AoaW5wdXRPYmplY3QsIHByb3ApKSB7XG4gICAgICAgICAgICAgICAgbm9ybWFsaXplZFByb3AgPSBub3JtYWxpemVVbml0cyhwcm9wKTtcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsaXplZFByb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9ybWFsaXplZElucHV0W25vcm1hbGl6ZWRQcm9wXSA9IGlucHV0T2JqZWN0W3Byb3BdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub3JtYWxpemVkSW5wdXQ7XG4gICAgfVxuXG4gICAgdmFyIHByaW9yaXRpZXMgPSB7fTtcblxuICAgIGZ1bmN0aW9uIGFkZFVuaXRQcmlvcml0eSh1bml0LCBwcmlvcml0eSkge1xuICAgICAgICBwcmlvcml0aWVzW3VuaXRdID0gcHJpb3JpdHk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0UHJpb3JpdGl6ZWRVbml0cyh1bml0c09iaikge1xuICAgICAgICB2YXIgdW5pdHMgPSBbXSxcbiAgICAgICAgICAgIHU7XG4gICAgICAgIGZvciAodSBpbiB1bml0c09iaikge1xuICAgICAgICAgICAgaWYgKGhhc093blByb3AodW5pdHNPYmosIHUpKSB7XG4gICAgICAgICAgICAgICAgdW5pdHMucHVzaCh7IHVuaXQ6IHUsIHByaW9yaXR5OiBwcmlvcml0aWVzW3VdIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVuaXRzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1bml0cztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgICAgICAgcmV0dXJuICh5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwKSB8fCB5ZWFyICUgNDAwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFic0Zsb29yKG51bWJlcikge1xuICAgICAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgICAgICAgLy8gLTAgLT4gMFxuICAgICAgICAgICAgcmV0dXJuIE1hdGguY2VpbChudW1iZXIpIHx8IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9JbnQoYXJndW1lbnRGb3JDb2VyY2lvbikge1xuICAgICAgICB2YXIgY29lcmNlZE51bWJlciA9ICthcmd1bWVudEZvckNvZXJjaW9uLFxuICAgICAgICAgICAgdmFsdWUgPSAwO1xuXG4gICAgICAgIGlmIChjb2VyY2VkTnVtYmVyICE9PSAwICYmIGlzRmluaXRlKGNvZXJjZWROdW1iZXIpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGFic0Zsb29yKGNvZXJjZWROdW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1ha2VHZXRTZXQodW5pdCwga2VlcFRpbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBzZXQkMSh0aGlzLCB1bml0LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldCh0aGlzLCB1bml0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQobW9tLCB1bml0KSB7XG4gICAgICAgIHJldHVybiBtb20uaXNWYWxpZCgpXG4gICAgICAgICAgICA/IG1vbS5fZFsnZ2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XSgpXG4gICAgICAgICAgICA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXQkMShtb20sIHVuaXQsIHZhbHVlKSB7XG4gICAgICAgIGlmIChtb20uaXNWYWxpZCgpICYmICFpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICB1bml0ID09PSAnRnVsbFllYXInICYmXG4gICAgICAgICAgICAgICAgaXNMZWFwWWVhcihtb20ueWVhcigpKSAmJlxuICAgICAgICAgICAgICAgIG1vbS5tb250aCgpID09PSAxICYmXG4gICAgICAgICAgICAgICAgbW9tLmRhdGUoKSA9PT0gMjlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgICAgIG1vbS5fZFsnc2V0JyArIChtb20uX2lzVVRDID8gJ1VUQycgOiAnJykgKyB1bml0XShcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1vbS5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICBkYXlzSW5Nb250aCh2YWx1ZSwgbW9tLm1vbnRoKCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArIHVuaXRdKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1PTUVOVFNcblxuICAgIGZ1bmN0aW9uIHN0cmluZ0dldCh1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24odGhpc1t1bml0c10pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdTZXQodW5pdHMsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdW5pdHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZU9iamVjdFVuaXRzKHVuaXRzKTtcbiAgICAgICAgICAgIHZhciBwcmlvcml0aXplZCA9IGdldFByaW9yaXRpemVkVW5pdHModW5pdHMpLFxuICAgICAgICAgICAgICAgIGksXG4gICAgICAgICAgICAgICAgcHJpb3JpdGl6ZWRMZW4gPSBwcmlvcml0aXplZC5sZW5ndGg7XG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpb3JpdGl6ZWRMZW47IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXNbcHJpb3JpdGl6ZWRbaV0udW5pdF0odW5pdHNbcHJpb3JpdGl6ZWRbaV0udW5pdF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG4gICAgICAgICAgICBpZiAoaXNGdW5jdGlvbih0aGlzW3VuaXRzXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1t1bml0c10odmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHZhciBtYXRjaDEgPSAvXFxkLywgLy8gICAgICAgMCAtIDlcbiAgICAgICAgbWF0Y2gyID0gL1xcZFxcZC8sIC8vICAgICAgMDAgLSA5OVxuICAgICAgICBtYXRjaDMgPSAvXFxkezN9LywgLy8gICAgIDAwMCAtIDk5OVxuICAgICAgICBtYXRjaDQgPSAvXFxkezR9LywgLy8gICAgMDAwMCAtIDk5OTlcbiAgICAgICAgbWF0Y2g2ID0gL1srLV0/XFxkezZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzIgPSAvXFxkXFxkPy8sIC8vICAgICAgIDAgLSA5OVxuICAgICAgICBtYXRjaDN0bzQgPSAvXFxkXFxkXFxkXFxkPy8sIC8vICAgICA5OTkgLSA5OTk5XG4gICAgICAgIG1hdGNoNXRvNiA9IC9cXGRcXGRcXGRcXGRcXGRcXGQ/LywgLy8gICA5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaDF0bzMgPSAvXFxkezEsM30vLCAvLyAgICAgICAwIC0gOTk5XG4gICAgICAgIG1hdGNoMXRvNCA9IC9cXGR7MSw0fS8sIC8vICAgICAgIDAgLSA5OTk5XG4gICAgICAgIG1hdGNoMXRvNiA9IC9bKy1dP1xcZHsxLDZ9LywgLy8gLTk5OTk5OSAtIDk5OTk5OVxuICAgICAgICBtYXRjaFVuc2lnbmVkID0gL1xcZCsvLCAvLyAgICAgICAwIC0gaW5mXG4gICAgICAgIG1hdGNoU2lnbmVkID0gL1srLV0/XFxkKy8sIC8vICAgIC1pbmYgLSBpbmZcbiAgICAgICAgbWF0Y2hPZmZzZXQgPSAvWnxbKy1dXFxkXFxkOj9cXGRcXGQvZ2ksIC8vICswMDowMCAtMDA6MDAgKzAwMDAgLTAwMDAgb3IgWlxuICAgICAgICBtYXRjaFNob3J0T2Zmc2V0ID0gL1p8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8vZ2ksIC8vICswMCAtMDAgKzAwOjAwIC0wMDowMCArMDAwMCAtMDAwMCBvciBaXG4gICAgICAgIG1hdGNoVGltZXN0YW1wID0gL1srLV0/XFxkKyhcXC5cXGR7MSwzfSk/LywgLy8gMTIzNDU2Nzg5IDEyMzQ1Njc4OS4xMjNcbiAgICAgICAgLy8gYW55IHdvcmQgKG9yIHR3bykgY2hhcmFjdGVycyBvciBudW1iZXJzIGluY2x1ZGluZyB0d28vdGhyZWUgd29yZCBtb250aCBpbiBhcmFiaWMuXG4gICAgICAgIC8vIGluY2x1ZGVzIHNjb3R0aXNoIGdhZWxpYyB0d28gd29yZCBhbmQgaHlwaGVuYXRlZCBtb250aHNcbiAgICAgICAgbWF0Y2hXb3JkID1cbiAgICAgICAgICAgIC9bMC05XXswLDI1Nn1bJ2EtelxcdTAwQTAtXFx1MDVGRlxcdTA3MDAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkYwN1xcdUZGMTAtXFx1RkZFRl17MSwyNTZ9fFtcXHUwNjAwLVxcdTA2RkZcXC9dezEsMjU2fShcXHMqP1tcXHUwNjAwLVxcdTA2RkZdezEsMjU2fSl7MSwyfS9pLFxuICAgICAgICByZWdleGVzO1xuXG4gICAgcmVnZXhlcyA9IHt9O1xuXG4gICAgZnVuY3Rpb24gYWRkUmVnZXhUb2tlbih0b2tlbiwgcmVnZXgsIHN0cmljdFJlZ2V4KSB7XG4gICAgICAgIHJlZ2V4ZXNbdG9rZW5dID0gaXNGdW5jdGlvbihyZWdleClcbiAgICAgICAgICAgID8gcmVnZXhcbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGVEYXRhKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXNTdHJpY3QgJiYgc3RyaWN0UmVnZXggPyBzdHJpY3RSZWdleCA6IHJlZ2V4O1xuICAgICAgICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFBhcnNlUmVnZXhGb3JUb2tlbih0b2tlbiwgY29uZmlnKSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcChyZWdleGVzLCB0b2tlbikpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUmVnRXhwKHVuZXNjYXBlRm9ybWF0KHRva2VuKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVnZXhlc1t0b2tlbl0oY29uZmlnLl9zdHJpY3QsIGNvbmZpZy5fbG9jYWxlKTtcbiAgICB9XG5cbiAgICAvLyBDb2RlIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNTYxNDkzL2lzLXRoZXJlLWEtcmVnZXhwLWVzY2FwZS1mdW5jdGlvbi1pbi1qYXZhc2NyaXB0XG4gICAgZnVuY3Rpb24gdW5lc2NhcGVGb3JtYXQocykge1xuICAgICAgICByZXR1cm4gcmVnZXhFc2NhcGUoXG4gICAgICAgICAgICBzXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1xcXFwnLCAnJylcbiAgICAgICAgICAgICAgICAucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgL1xcXFwoXFxbKXxcXFxcKFxcXSl8XFxbKFteXFxdXFxbXSopXFxdfFxcXFwoLikvZyxcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKG1hdGNoZWQsIHAxLCBwMiwgcDMsIHA0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDEgfHwgcDIgfHwgcDMgfHwgcDQ7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVnZXhFc2NhcGUocykge1xuICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9bLVxcL1xcXFxeJCorPy4oKXxbXFxde31dL2csICdcXFxcJCYnKTtcbiAgICB9XG5cbiAgICB2YXIgdG9rZW5zID0ge307XG5cbiAgICBmdW5jdGlvbiBhZGRQYXJzZVRva2VuKHRva2VuLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGZ1bmMgPSBjYWxsYmFjayxcbiAgICAgICAgICAgIHRva2VuTGVuO1xuICAgICAgICBpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdG9rZW4gPSBbdG9rZW5dO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc051bWJlcihjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZ1bmMgPSBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbY2FsbGJhY2tdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0b2tlbkxlbiA9IHRva2VuLmxlbmd0aDtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRva2VuTGVuOyBpKyspIHtcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbltpXV0gPSBmdW5jO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWRkV2Vla1BhcnNlVG9rZW4odG9rZW4sIGNhbGxiYWNrKSB7XG4gICAgICAgIGFkZFBhcnNlVG9rZW4odG9rZW4sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIGNvbmZpZy5fdyA9IGNvbmZpZy5fdyB8fCB7fTtcbiAgICAgICAgICAgIGNhbGxiYWNrKGlucHV0LCBjb25maWcuX3csIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRUaW1lVG9BcnJheUZyb21Ub2tlbih0b2tlbiwgaW5wdXQsIGNvbmZpZykge1xuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCAmJiBoYXNPd25Qcm9wKHRva2VucywgdG9rZW4pKSB7XG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5dKGlucHV0LCBjb25maWcuX2EsIGNvbmZpZywgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIFlFQVIgPSAwLFxuICAgICAgICBNT05USCA9IDEsXG4gICAgICAgIERBVEUgPSAyLFxuICAgICAgICBIT1VSID0gMyxcbiAgICAgICAgTUlOVVRFID0gNCxcbiAgICAgICAgU0VDT05EID0gNSxcbiAgICAgICAgTUlMTElTRUNPTkQgPSA2LFxuICAgICAgICBXRUVLID0gNyxcbiAgICAgICAgV0VFS0RBWSA9IDg7XG5cbiAgICBmdW5jdGlvbiBtb2QobiwgeCkge1xuICAgICAgICByZXR1cm4gKChuICUgeCkgKyB4KSAlIHg7XG4gICAgfVxuXG4gICAgdmFyIGluZGV4T2Y7XG5cbiAgICBpZiAoQXJyYXkucHJvdG90eXBlLmluZGV4T2YpIHtcbiAgICAgICAgaW5kZXhPZiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGluZGV4T2YgPSBmdW5jdGlvbiAobykge1xuICAgICAgICAgICAgLy8gSSBrbm93XG4gICAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXNbaV0gPT09IG8pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICAgIGlmIChpc05hTih5ZWFyKSB8fCBpc05hTihtb250aCkpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG1vZE1vbnRoID0gbW9kKG1vbnRoLCAxMik7XG4gICAgICAgIHllYXIgKz0gKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG4gICAgICAgIHJldHVybiBtb2RNb250aCA9PT0gMVxuICAgICAgICAgICAgPyBpc0xlYXBZZWFyKHllYXIpXG4gICAgICAgICAgICAgICAgPyAyOVxuICAgICAgICAgICAgICAgIDogMjhcbiAgICAgICAgICAgIDogMzEgLSAoKG1vZE1vbnRoICUgNykgJSAyKTtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignTScsIFsnTU0nLCAyXSwgJ01vJywgZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb250aCgpICsgMTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdNTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHNTaG9ydCh0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ01NTU0nLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5tb250aHModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbW9udGgnLCAnTScpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbW9udGgnLCA4KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ00nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ01NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzU2hvcnRSZWdleChpc1N0cmljdCk7XG4gICAgfSk7XG4gICAgYWRkUmVnZXhUb2tlbignTU1NTScsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUubW9udGhzUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ00nLCAnTU0nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNT05USF0gPSB0b0ludChpbnB1dCkgLSAxO1xuICAgIH0pO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ01NTScsICdNTU1NJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgdmFyIG1vbnRoID0gY29uZmlnLl9sb2NhbGUubW9udGhzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgIC8vIGlmIHdlIGRpZG4ndCBmaW5kIGEgbW9udGggbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkLlxuICAgICAgICBpZiAobW9udGggIT0gbnVsbCkge1xuICAgICAgICAgICAgYXJyYXlbTU9OVEhdID0gbW9udGg7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkTW9udGggPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNb250aHMgPVxuICAgICAgICAgICAgJ0phbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXInLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZU1vbnRoc1Nob3J0ID1cbiAgICAgICAgICAgICdKYW5fRmViX01hcl9BcHJfTWF5X0p1bl9KdWxfQXVnX1NlcF9PY3RfTm92X0RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgTU9OVEhTX0lOX0ZPUk1BVCA9IC9EW29EXT8oXFxbW15cXFtcXF1dKlxcXXxcXHMpK01NTU0/LyxcbiAgICAgICAgZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXggPSBtYXRjaFdvcmQsXG4gICAgICAgIGRlZmF1bHRNb250aHNSZWdleCA9IG1hdGNoV29yZDtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRocyhtLCBmb3JtYXQpIHtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNBcnJheSh0aGlzLl9tb250aHMpXG4gICAgICAgICAgICAgICAgPyB0aGlzLl9tb250aHNcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1snc3RhbmRhbG9uZSddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRocylcbiAgICAgICAgICAgID8gdGhpcy5fbW9udGhzW20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzW1xuICAgICAgICAgICAgICAgICAgKHRoaXMuX21vbnRocy5pc0Zvcm1hdCB8fCBNT05USFNfSU5fRk9STUFUKS50ZXN0KGZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICA/ICdmb3JtYXQnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnc3RhbmRhbG9uZSdcbiAgICAgICAgICAgICAgXVttLm1vbnRoKCldO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1vbnRoc1Nob3J0KG0sIGZvcm1hdCkge1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBpc0FycmF5KHRoaXMuX21vbnRoc1Nob3J0KVxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1Nob3J0WydzdGFuZGFsb25lJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzQXJyYXkodGhpcy5fbW9udGhzU2hvcnQpXG4gICAgICAgICAgICA/IHRoaXMuX21vbnRoc1Nob3J0W20ubW9udGgoKV1cbiAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRbXG4gICAgICAgICAgICAgICAgICBNT05USFNfSU5fRk9STUFULnRlc3QoZm9ybWF0KSA/ICdmb3JtYXQnIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF1bbS5tb250aCgpXTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBoYW5kbGVTdHJpY3RQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSBtb250aE5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKCF0aGlzLl9tb250aHNQYXJzZSkge1xuICAgICAgICAgICAgLy8gdGhpcyBpcyBub3QgdXNlZFxuICAgICAgICAgICAgdGhpcy5fbW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyArK2kpIHtcbiAgICAgICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gdGhpcy5tb250aHNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2VbaV0gPSB0aGlzLm1vbnRocyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX2xvbmdNb250aHNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ01NTScpIHtcbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9sb25nTW9udGhzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbG9uZ01vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9zaG9ydE1vbnRoc1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVNb250aHNQYXJzZShtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLCBtb20sIHJlZ2V4O1xuXG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICByZXR1cm4gaGFuZGxlU3RyaWN0UGFyc2UuY2FsbCh0aGlzLCBtb250aE5hbWUsIGZvcm1hdCwgc3RyaWN0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5fbW9udGhzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9sb25nTW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0TW9udGhzUGFyc2UgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRPRE86IGFkZCBzb3J0aW5nXG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXJcbiAgICAgICAgLy8gc2VlIHNvcnRpbmcgaW4gY29tcHV0ZU1vbnRoc1BhcnNlXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgaV0pO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbG9uZ01vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHMobW9tLCAnJykucmVwbGFjZSgnLicsICcnKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydE1vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy5tb250aHNTaG9ydChtb20sICcnKS5yZXBsYWNlKCcuJywgJycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzdHJpY3QgJiYgIXRoaXMuX21vbnRoc1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLm1vbnRocyhtb20sICcnKSArICd8XicgKyB0aGlzLm1vbnRoc1Nob3J0KG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21vbnRoc1BhcnNlW2ldID0gbmV3IFJlZ0V4cChyZWdleC5yZXBsYWNlKCcuJywgJycpLCAnaScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gdGVzdCB0aGUgcmVnZXhcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU1NJyAmJlxuICAgICAgICAgICAgICAgIHRoaXMuX2xvbmdNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdNTU0nICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRNb250aHNQYXJzZVtpXS50ZXN0KG1vbnRoTmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICghc3RyaWN0ICYmIHRoaXMuX21vbnRoc1BhcnNlW2ldLnRlc3QobW9udGhOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gc2V0TW9udGgobW9tLCB2YWx1ZSkge1xuICAgICAgICB2YXIgZGF5T2ZNb250aDtcblxuICAgICAgICBpZiAoIW1vbS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIE5vIG9wXG4gICAgICAgICAgICByZXR1cm4gbW9tO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmICgvXlxcZCskLy50ZXN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdG9JbnQodmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vbS5sb2NhbGVEYXRhKCkubW9udGhzUGFyc2UodmFsdWUpO1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IEFub3RoZXIgc2lsZW50IGZhaWx1cmU/XG4gICAgICAgICAgICAgICAgaWYgKCFpc051bWJlcih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlPZk1vbnRoID0gTWF0aC5taW4obW9tLmRhdGUoKSwgZGF5c0luTW9udGgobW9tLnllYXIoKSwgdmFsdWUpKTtcbiAgICAgICAgbW9tLl9kWydzZXQnICsgKG1vbS5faXNVVEMgPyAnVVRDJyA6ICcnKSArICdNb250aCddKHZhbHVlLCBkYXlPZk1vbnRoKTtcbiAgICAgICAgcmV0dXJuIG1vbTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRNb250aCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgc2V0TW9udGgodGhpcywgdmFsdWUpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0KHRoaXMsICdNb250aCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RGF5c0luTW9udGgoKSB7XG4gICAgICAgIHJldHVybiBkYXlzSW5Nb250aCh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb250aHNTaG9ydFJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX21vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNTaG9ydFJlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNTaG9ydFJlZ2V4ID0gZGVmYXVsdE1vbnRoc1Nob3J0UmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fbW9udGhzU2hvcnRSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoc1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl9tb250aHNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ19tb250aHNSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgY29tcHV0ZU1vbnRoc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX21vbnRoc1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IGRlZmF1bHRNb250aHNSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9tb250aHNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fbW9udGhzU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU1vbnRoc1BhcnNlKCkge1xuICAgICAgICBmdW5jdGlvbiBjbXBMZW5SZXYoYSwgYikge1xuICAgICAgICAgICAgcmV0dXJuIGIubGVuZ3RoIC0gYS5sZW5ndGg7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgICAgICAgICAgLy8gbWFrZSB0aGUgcmVnZXggaWYgd2UgZG9uJ3QgaGF2ZSBpdCBhbHJlYWR5XG4gICAgICAgICAgICBtb20gPSBjcmVhdGVVVEMoWzIwMDAsIGldKTtcbiAgICAgICAgICAgIHNob3J0UGllY2VzLnB1c2godGhpcy5tb250aHNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2godGhpcy5tb250aHMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaCh0aGlzLm1vbnRocyhtb20sICcnKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHRoaXMubW9udGhzU2hvcnQobW9tLCAnJykpO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgbW9udGggKG9yIGFiYnIpIGlzIGEgcHJlZml4IG9mIGFub3RoZXIgaXRcbiAgICAgICAgLy8gd2lsbCBtYXRjaCB0aGUgbG9uZ2VyIHBpZWNlLlxuICAgICAgICBzaG9ydFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGxvbmdQaWVjZXMuc29ydChjbXBMZW5SZXYpO1xuICAgICAgICBtaXhlZFBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7XG4gICAgICAgICAgICBzaG9ydFBpZWNlc1tpXSA9IHJlZ2V4RXNjYXBlKHNob3J0UGllY2VzW2ldKTtcbiAgICAgICAgICAgIGxvbmdQaWVjZXNbaV0gPSByZWdleEVzY2FwZShsb25nUGllY2VzW2ldKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMjQ7IGkrKykge1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXNbaV0gPSByZWdleEVzY2FwZShtaXhlZFBpZWNlc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9tb250aHNSZWdleCA9IG5ldyBSZWdFeHAoJ14oJyArIG1peGVkUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRSZWdleCA9IHRoaXMuX21vbnRoc1JlZ2V4O1xuICAgICAgICB0aGlzLl9tb250aHNTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgbG9uZ1BpZWNlcy5qb2luKCd8JykgKyAnKScsXG4gICAgICAgICAgICAnaSdcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5fbW9udGhzU2hvcnRTdHJpY3RSZWdleCA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAnXignICsgc2hvcnRQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1knLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciB5ID0gdGhpcy55ZWFyKCk7XG4gICAgICAgIHJldHVybiB5IDw9IDk5OTkgPyB6ZXJvRmlsbCh5LCA0KSA6ICcrJyArIHk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1lZJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpICUgMTAwO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZJywgNF0sIDAsICd5ZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydZWVlZWScsIDVdLCAwLCAneWVhcicpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnWVlZWVlZJywgNiwgdHJ1ZV0sIDAsICd5ZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3llYXInLCAneScpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd5ZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdZJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1lZWVknLCBtYXRjaDF0bzQsIG1hdGNoNCk7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVknLCBtYXRjaDF0bzYsIG1hdGNoNik7XG4gICAgYWRkUmVnZXhUb2tlbignWVlZWVlZJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihbJ1lZWVlZJywgJ1lZWVlZWSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKCdZWVlZJywgZnVuY3Rpb24gKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtZRUFSXSA9XG4gICAgICAgICAgICBpbnB1dC5sZW5ndGggPT09IDIgPyBob29rcy5wYXJzZVR3b0RpZ2l0WWVhcihpbnB1dCkgOiB0b0ludChpbnB1dCk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignWVknLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1knLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W1lFQVJdID0gcGFyc2VJbnQoaW5wdXQsIDEwKTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIGRheXNJblllYXIoeWVhcikge1xuICAgICAgICByZXR1cm4gaXNMZWFwWWVhcih5ZWFyKSA/IDM2NiA6IDM2NTtcbiAgICB9XG5cbiAgICAvLyBIT09LU1xuXG4gICAgaG9va3MucGFyc2VUd29EaWdpdFllYXIgPSBmdW5jdGlvbiAoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIHRvSW50KGlucHV0KSArICh0b0ludChpbnB1dCkgPiA2OCA/IDE5MDAgOiAyMDAwKTtcbiAgICB9O1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFllYXIgPSBtYWtlR2V0U2V0KCdGdWxsWWVhcicsIHRydWUpO1xuXG4gICAgZnVuY3Rpb24gZ2V0SXNMZWFwWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIGlzTGVhcFllYXIodGhpcy55ZWFyKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURhdGUoeSwgbSwgZCwgaCwgTSwgcywgbXMpIHtcbiAgICAgICAgLy8gY2FuJ3QganVzdCBhcHBseSgpIHRvIGNyZWF0ZSBhIGRhdGU6XG4gICAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcS8xODEzNDhcbiAgICAgICAgdmFyIGRhdGU7XG4gICAgICAgIC8vIHRoZSBkYXRlIGNvbnN0cnVjdG9yIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICBkYXRlID0gbmV3IERhdGUoeSArIDQwMCwgbSwgZCwgaCwgTSwgcywgbXMpO1xuICAgICAgICAgICAgaWYgKGlzRmluaXRlKGRhdGUuZ2V0RnVsbFllYXIoKSkpIHtcbiAgICAgICAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKHkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKHksIG0sIGQsIGgsIE0sIHMsIG1zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVVUQ0RhdGUoeSkge1xuICAgICAgICB2YXIgZGF0ZSwgYXJncztcbiAgICAgICAgLy8gdGhlIERhdGUuVVRDIGZ1bmN0aW9uIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICAgICAgLy8gcHJlc2VydmUgbGVhcCB5ZWFycyB1c2luZyBhIGZ1bGwgNDAwIHllYXIgY3ljbGUsIHRoZW4gcmVzZXRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSB5ICsgNDAwO1xuICAgICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDLmFwcGx5KG51bGwsIGFyZ3MpKTtcbiAgICAgICAgICAgIGlmIChpc0Zpbml0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCkpKSB7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQy5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkYXRlO1xuICAgIH1cblxuICAgIC8vIHN0YXJ0LW9mLWZpcnN0LXdlZWsgLSBzdGFydC1vZi15ZWFyXG4gICAgZnVuY3Rpb24gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciAvLyBmaXJzdC13ZWVrIGRheSAtLSB3aGljaCBqYW51YXJ5IGlzIGFsd2F5cyBpbiB0aGUgZmlyc3Qgd2VlayAoNCBmb3IgaXNvLCAxIGZvciBvdGhlcilcbiAgICAgICAgICAgIGZ3ZCA9IDcgKyBkb3cgLSBkb3ksXG4gICAgICAgICAgICAvLyBmaXJzdC13ZWVrIGRheSBsb2NhbCB3ZWVrZGF5IC0tIHdoaWNoIGxvY2FsIHdlZWtkYXkgaXMgZndkXG4gICAgICAgICAgICBmd2RsdyA9ICg3ICsgY3JlYXRlVVRDRGF0ZSh5ZWFyLCAwLCBmd2QpLmdldFVUQ0RheSgpIC0gZG93KSAlIDc7XG5cbiAgICAgICAgcmV0dXJuIC1md2RsdyArIGZ3ZCAtIDE7XG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZSNDYWxjdWxhdGluZ19hX2RhdGVfZ2l2ZW5fdGhlX3llYXIuMkNfd2Vla19udW1iZXJfYW5kX3dlZWtkYXlcbiAgICBmdW5jdGlvbiBkYXlPZlllYXJGcm9tV2Vla3MoeWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIGxvY2FsV2Vla2RheSA9ICg3ICsgd2Vla2RheSAtIGRvdykgJSA3LFxuICAgICAgICAgICAgd2Vla09mZnNldCA9IGZpcnN0V2Vla09mZnNldCh5ZWFyLCBkb3csIGRveSksXG4gICAgICAgICAgICBkYXlPZlllYXIgPSAxICsgNyAqICh3ZWVrIC0gMSkgKyBsb2NhbFdlZWtkYXkgKyB3ZWVrT2Zmc2V0LFxuICAgICAgICAgICAgcmVzWWVhcixcbiAgICAgICAgICAgIHJlc0RheU9mWWVhcjtcblxuICAgICAgICBpZiAoZGF5T2ZZZWFyIDw9IDApIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyIC0gMTtcbiAgICAgICAgICAgIHJlc0RheU9mWWVhciA9IGRheXNJblllYXIocmVzWWVhcikgKyBkYXlPZlllYXI7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5T2ZZZWFyID4gZGF5c0luWWVhcih5ZWFyKSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IHllYXIgKyAxO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyIC0gZGF5c0luWWVhcih5ZWFyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlc1llYXIgPSB5ZWFyO1xuICAgICAgICAgICAgcmVzRGF5T2ZZZWFyID0gZGF5T2ZZZWFyO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHllYXI6IHJlc1llYXIsXG4gICAgICAgICAgICBkYXlPZlllYXI6IHJlc0RheU9mWWVhcixcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrT2ZZZWFyKG1vbSwgZG93LCBkb3kpIHtcbiAgICAgICAgdmFyIHdlZWtPZmZzZXQgPSBmaXJzdFdlZWtPZmZzZXQobW9tLnllYXIoKSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgd2VlayA9IE1hdGguZmxvb3IoKG1vbS5kYXlPZlllYXIoKSAtIHdlZWtPZmZzZXQgLSAxKSAvIDcpICsgMSxcbiAgICAgICAgICAgIHJlc1dlZWssXG4gICAgICAgICAgICByZXNZZWFyO1xuXG4gICAgICAgIGlmICh3ZWVrIDwgMSkge1xuICAgICAgICAgICAgcmVzWWVhciA9IG1vbS55ZWFyKCkgLSAxO1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgKyB3ZWVrc0luWWVhcihyZXNZZWFyLCBkb3csIGRveSk7XG4gICAgICAgIH0gZWxzZSBpZiAod2VlayA+IHdlZWtzSW5ZZWFyKG1vbS55ZWFyKCksIGRvdywgZG95KSkge1xuICAgICAgICAgICAgcmVzV2VlayA9IHdlZWsgLSB3ZWVrc0luWWVhcihtb20ueWVhcigpLCBkb3csIGRveSk7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKSArIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNZZWFyID0gbW9tLnllYXIoKTtcbiAgICAgICAgICAgIHJlc1dlZWsgPSB3ZWVrO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWs6IHJlc1dlZWssXG4gICAgICAgICAgICB5ZWFyOiByZXNZZWFyLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtzSW5ZZWFyKHllYXIsIGRvdywgZG95KSB7XG4gICAgICAgIHZhciB3ZWVrT2Zmc2V0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIsIGRvdywgZG95KSxcbiAgICAgICAgICAgIHdlZWtPZmZzZXROZXh0ID0gZmlyc3RXZWVrT2Zmc2V0KHllYXIgKyAxLCBkb3csIGRveSk7XG4gICAgICAgIHJldHVybiAoZGF5c0luWWVhcih5ZWFyKSAtIHdlZWtPZmZzZXQgKyB3ZWVrT2Zmc2V0TmV4dCkgLyA3O1xuICAgIH1cblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCd3JywgWyd3dycsIDJdLCAnd28nLCAnd2VlaycpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdXJywgWydXVycsIDJdLCAnV28nLCAnaXNvV2VlaycpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrJywgJ3cnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWsnLCAnVycpO1xuXG4gICAgLy8gUFJJT1JJVElFU1xuXG4gICAgYWRkVW5pdFByaW9yaXR5KCd3ZWVrJywgNSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrJywgNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd3JywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCd3dycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRSZWdleFRva2VuKCdXJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdXVycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFxuICAgICAgICBbJ3cnLCAnd3cnLCAnVycsICdXVyddLFxuICAgICAgICBmdW5jdGlvbiAoaW5wdXQsIHdlZWssIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHdlZWtbdG9rZW4uc3Vic3RyKDAsIDEpXSA9IHRvSW50KGlucHV0KTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBIRUxQRVJTXG5cbiAgICAvLyBMT0NBTEVTXG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrKG1vbSkge1xuICAgICAgICByZXR1cm4gd2Vla09mWWVhcihtb20sIHRoaXMuX3dlZWsuZG93LCB0aGlzLl93ZWVrLmRveSkud2VlaztcbiAgICB9XG5cbiAgICB2YXIgZGVmYXVsdExvY2FsZVdlZWsgPSB7XG4gICAgICAgIGRvdzogMCwgLy8gU3VuZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgIGRveTogNiwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNnRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVGaXJzdERheU9mV2VlaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWsuZG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUZpcnN0RGF5T2ZZZWFyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fd2Vlay5kb3k7XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2VlayhpbnB1dCkge1xuICAgICAgICB2YXIgd2VlayA9IHRoaXMubG9jYWxlRGF0YSgpLndlZWsodGhpcyk7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gd2VlayA6IHRoaXMuYWRkKChpbnB1dCAtIHdlZWspICogNywgJ2QnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRTZXRJU09XZWVrKGlucHV0KSB7XG4gICAgICAgIHZhciB3ZWVrID0gd2Vla09mWWVhcih0aGlzLCAxLCA0KS53ZWVrO1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWsgOiB0aGlzLmFkZCgoaW5wdXQgLSB3ZWVrKSAqIDcsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2QnLCAwLCAnZG8nLCAnZGF5Jyk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignZGQnLCAwLCAwLCBmdW5jdGlvbiAoZm9ybWF0KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS53ZWVrZGF5c01pbih0aGlzLCBmb3JtYXQpO1xuICAgIH0pO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ2RkZCcsIDAsIDAsIGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLndlZWtkYXlzU2hvcnQodGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdkZGRkJywgMCwgMCwgZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkud2Vla2RheXModGhpcywgZm9ybWF0KTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdlJywgMCwgMCwgJ3dlZWtkYXknKTtcbiAgICBhZGRGb3JtYXRUb2tlbignRScsIDAsIDAsICdpc29XZWVrZGF5Jyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RheScsICdkJyk7XG4gICAgYWRkVW5pdEFsaWFzKCd3ZWVrZGF5JywgJ2UnKTtcbiAgICBhZGRVbml0QWxpYXMoJ2lzb1dlZWtkYXknLCAnRScpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheScsIDExKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ3dlZWtkYXknLCAxMSk7XG4gICAgYWRkVW5pdFByaW9yaXR5KCdpc29XZWVrZGF5JywgMTEpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignZCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignRScsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignZGQnLCBmdW5jdGlvbiAoaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzTWluUmVnZXgoaXNTdHJpY3QpO1xuICAgIH0pO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2RkZCcsIGZ1bmN0aW9uIChpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXNTaG9ydFJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcbiAgICBhZGRSZWdleFRva2VuKCdkZGRkJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9KTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZGQnLCAnZGRkJywgJ2RkZGQnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHZhciB3ZWVrZGF5ID0gY29uZmlnLl9sb2NhbGUud2Vla2RheXNQYXJzZShpbnB1dCwgdG9rZW4sIGNvbmZpZy5fc3RyaWN0KTtcbiAgICAgICAgLy8gaWYgd2UgZGlkbid0IGdldCBhIHdlZWtkYXkgbmFtZSwgbWFyayB0aGUgZGF0ZSBhcyBpbnZhbGlkXG4gICAgICAgIGlmICh3ZWVrZGF5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHdlZWsuZCA9IHdlZWtkYXk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkV2Vla2RheSA9IGlucHV0O1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBhZGRXZWVrUGFyc2VUb2tlbihbJ2QnLCAnZScsICdFJ10sIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB3ZWVrW3Rva2VuXSA9IHRvSW50KGlucHV0KTtcbiAgICB9KTtcblxuICAgIC8vIEhFTFBFUlNcblxuICAgIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzTmFOKGlucHV0KSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpbnB1dCA9IGxvY2FsZS53ZWVrZGF5c1BhcnNlKGlucHV0KTtcbiAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlSXNvV2Vla2RheShpbnB1dCwgbG9jYWxlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLndlZWtkYXlzUGFyc2UoaW5wdXQpICUgNyB8fCA3O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc05hTihpbnB1dCkgPyBudWxsIDogaW5wdXQ7XG4gICAgfVxuXG4gICAgLy8gTE9DQUxFU1xuICAgIGZ1bmN0aW9uIHNoaWZ0V2Vla2RheXMod3MsIG4pIHtcbiAgICAgICAgcmV0dXJuIHdzLnNsaWNlKG4sIDcpLmNvbmNhdCh3cy5zbGljZSgwLCBuKSk7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVXZWVrZGF5cyA9XG4gICAgICAgICAgICAnU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXknLnNwbGl0KCdfJyksXG4gICAgICAgIGRlZmF1bHRMb2NhbGVXZWVrZGF5c1Nob3J0ID0gJ1N1bl9Nb25fVHVlX1dlZF9UaHVfRnJpX1NhdCcuc3BsaXQoJ18nKSxcbiAgICAgICAgZGVmYXVsdExvY2FsZVdlZWtkYXlzTWluID0gJ1N1X01vX1R1X1dlX1RoX0ZyX1NhJy5zcGxpdCgnXycpLFxuICAgICAgICBkZWZhdWx0V2Vla2RheXNSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCA9IG1hdGNoV29yZCxcbiAgICAgICAgZGVmYXVsdFdlZWtkYXlzTWluUmVnZXggPSBtYXRjaFdvcmQ7XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5cyhtLCBmb3JtYXQpIHtcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gaXNBcnJheSh0aGlzLl93ZWVrZGF5cylcbiAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNcbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNbXG4gICAgICAgICAgICAgICAgICBtICYmIG0gIT09IHRydWUgJiYgdGhpcy5fd2Vla2RheXMuaXNGb3JtYXQudGVzdChmb3JtYXQpXG4gICAgICAgICAgICAgICAgICAgICAgPyAnZm9ybWF0J1xuICAgICAgICAgICAgICAgICAgICAgIDogJ3N0YW5kYWxvbmUnXG4gICAgICAgICAgICAgIF07XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXMod2Vla2RheXMsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHdlZWtkYXlzW20uZGF5KCldXG4gICAgICAgICAgICA6IHdlZWtkYXlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZVdlZWtkYXlzU2hvcnQobSkge1xuICAgICAgICByZXR1cm4gbSA9PT0gdHJ1ZVxuICAgICAgICAgICAgPyBzaGlmdFdlZWtkYXlzKHRoaXMuX3dlZWtkYXlzU2hvcnQsIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRbbS5kYXkoKV1cbiAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVXZWVrZGF5c01pbihtKSB7XG4gICAgICAgIHJldHVybiBtID09PSB0cnVlXG4gICAgICAgICAgICA/IHNoaWZ0V2Vla2RheXModGhpcy5fd2Vla2RheXNNaW4sIHRoaXMuX3dlZWsuZG93KVxuICAgICAgICAgICAgOiBtXG4gICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluW20uZGF5KCldXG4gICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGhhbmRsZVN0cmljdFBhcnNlJDEod2Vla2RheU5hbWUsIGZvcm1hdCwgc3RyaWN0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgaWksXG4gICAgICAgICAgICBtb20sXG4gICAgICAgICAgICBsbGMgPSB3ZWVrZGF5TmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoIXRoaXMuX3dlZWtkYXlzUGFyc2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSA9IFtdO1xuICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZSA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgKytpKSB7XG4gICAgICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21pbldlZWtkYXlzUGFyc2VbaV0gPSB0aGlzLndlZWtkYXlzTWluKFxuICAgICAgICAgICAgICAgICAgICBtb20sXG4gICAgICAgICAgICAgICAgICAgICcnXG4gICAgICAgICAgICAgICAgKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZVtpXSA9IHRoaXMud2Vla2RheXNTaG9ydChcbiAgICAgICAgICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgICAgICAgICAnJ1xuICAgICAgICAgICAgICAgICkudG9Mb2NhbGVMb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlW2ldID0gdGhpcy53ZWVrZGF5cyhtb20sICcnKS50b0xvY2FsZUxvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0cmljdCkge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCA9PT0gJ2RkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fd2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlpICE9PSAtMSA/IGlpIDogbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQgPT09ICdkZGRkJykge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICBpZiAoaWkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fbWluV2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtYXQgPT09ICdkZGQnKSB7XG4gICAgICAgICAgICAgICAgaWkgPSBpbmRleE9mLmNhbGwodGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl93ZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIGlmIChpaSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpaSA9IGluZGV4T2YuY2FsbCh0aGlzLl9taW5XZWVrZGF5c1BhcnNlLCBsbGMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpaSAhPT0gLTEgPyBpaSA6IG51bGw7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX21pbldlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3dlZWtkYXlzUGFyc2UsIGxsYyk7XG4gICAgICAgICAgICAgICAgaWYgKGlpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlpID0gaW5kZXhPZi5jYWxsKHRoaXMuX3Nob3J0V2Vla2RheXNQYXJzZSwgbGxjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWkgIT09IC0xID8gaWkgOiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbG9jYWxlV2Vla2RheXNQYXJzZSh3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpIHtcbiAgICAgICAgdmFyIGksIG1vbSwgcmVnZXg7XG5cbiAgICAgICAgaWYgKHRoaXMuX3dlZWtkYXlzUGFyc2VFeGFjdCkge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVN0cmljdFBhcnNlJDEuY2FsbCh0aGlzLCB3ZWVrZGF5TmFtZSwgZm9ybWF0LCBzdHJpY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlKSB7XG4gICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2UgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuX2Z1bGxXZWVrZGF5c1BhcnNlID0gW107XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcblxuICAgICAgICAgICAgbW9tID0gY3JlYXRlVVRDKFsyMDAwLCAxXSkuZGF5KGkpO1xuICAgICAgICAgICAgaWYgKHN0cmljdCAmJiAhdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9mdWxsV2Vla2RheXNQYXJzZVtpXSA9IG5ldyBSZWdFeHAoXG4gICAgICAgICAgICAgICAgICAgICdeJyArIHRoaXMud2Vla2RheXMobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG9ydFdlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgICAgICAgICAnXicgKyB0aGlzLndlZWtkYXlzU2hvcnQobW9tLCAnJykucmVwbGFjZSgnLicsICdcXFxcLj8nKSArICckJyxcbiAgICAgICAgICAgICAgICAgICAgJ2knXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9taW5XZWVrZGF5c1BhcnNlW2ldID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICAgICAgICAgJ14nICsgdGhpcy53ZWVrZGF5c01pbihtb20sICcnKS5yZXBsYWNlKCcuJywgJ1xcXFwuPycpICsgJyQnLFxuICAgICAgICAgICAgICAgICAgICAnaSdcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCF0aGlzLl93ZWVrZGF5c1BhcnNlW2ldKSB7XG4gICAgICAgICAgICAgICAgcmVnZXggPVxuICAgICAgICAgICAgICAgICAgICAnXicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzKG1vbSwgJycpICtcbiAgICAgICAgICAgICAgICAgICAgJ3xeJyArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSArXG4gICAgICAgICAgICAgICAgICAgICd8XicgK1xuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuX3dlZWtkYXlzUGFyc2VbaV0gPSBuZXcgUmVnRXhwKHJlZ2V4LnJlcGxhY2UoJy4nLCAnJyksICdpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyB0ZXN0IHRoZSByZWdleFxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0cmljdCAmJlxuICAgICAgICAgICAgICAgIGZvcm1hdCA9PT0gJ2RkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fZnVsbFdlZWtkYXlzUGFyc2VbaV0udGVzdCh3ZWVrZGF5TmFtZSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgICAgICBzdHJpY3QgJiZcbiAgICAgICAgICAgICAgICBmb3JtYXQgPT09ICdkZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvcnRXZWVrZGF5c1BhcnNlW2ldLnRlc3Qod2Vla2RheU5hbWUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgc3RyaWN0ICYmXG4gICAgICAgICAgICAgICAgZm9ybWF0ID09PSAnZGQnICYmXG4gICAgICAgICAgICAgICAgdGhpcy5fbWluV2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJpY3QgJiYgdGhpcy5fd2Vla2RheXNQYXJzZVtpXS50ZXN0KHdlZWtkYXlOYW1lKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGF5ID0gdGhpcy5faXNVVEMgPyB0aGlzLl9kLmdldFVUQ0RheSgpIDogdGhpcy5fZC5nZXREYXkoKTtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlucHV0ID0gcGFyc2VXZWVrZGF5KGlucHV0LCB0aGlzLmxvY2FsZURhdGEoKSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5hZGQoaW5wdXQgLSBkYXksICdkJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgd2Vla2RheSA9ICh0aGlzLmRheSgpICsgNyAtIHRoaXMubG9jYWxlRGF0YSgpLl93ZWVrLmRvdykgJSA3O1xuICAgICAgICByZXR1cm4gaW5wdXQgPT0gbnVsbCA/IHdlZWtkYXkgOiB0aGlzLmFkZChpbnB1dCAtIHdlZWtkYXksICdkJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPRGF5T2ZXZWVrKGlucHV0KSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGJlaGF2ZXMgdGhlIHNhbWUgYXMgbW9tZW50I2RheSBleGNlcHRcbiAgICAgICAgLy8gYXMgYSBnZXR0ZXIsIHJldHVybnMgNyBpbnN0ZWFkIG9mIDAgKDEtNyByYW5nZSBpbnN0ZWFkIG9mIDAtNilcbiAgICAgICAgLy8gYXMgYSBzZXR0ZXIsIHN1bmRheSBzaG91bGQgYmVsb25nIHRvIHRoZSBwcmV2aW91cyB3ZWVrLlxuXG4gICAgICAgIGlmIChpbnB1dCAhPSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgd2Vla2RheSA9IHBhcnNlSXNvV2Vla2RheShpbnB1dCwgdGhpcy5sb2NhbGVEYXRhKCkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF5KHRoaXMuZGF5KCkgJSA3ID8gd2Vla2RheSA6IHdlZWtkYXkgLSA3KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRheSgpIHx8IDc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3ZWVrZGF5c1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICh0aGlzLl93ZWVrZGF5c1BhcnNlRXhhY3QpIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzUmVnZXgnKSkge1xuICAgICAgICAgICAgICAgIGNvbXB1dGVXZWVrZGF5c1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNTdHJpY3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzUmVnZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleCAmJiBpc1N0cmljdFxuICAgICAgICAgICAgICAgID8gdGhpcy5fd2Vla2RheXNTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNSZWdleDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHdlZWtkYXlzU2hvcnRSZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX3dlZWtkYXlzU2hvcnRSZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4ID0gZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzU2hvcnRTdHJpY3RSZWdleFxuICAgICAgICAgICAgICAgIDogdGhpcy5fd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gd2Vla2RheXNNaW5SZWdleChpc1N0cmljdCkge1xuICAgICAgICBpZiAodGhpcy5fd2Vla2RheXNQYXJzZUV4YWN0KSB7XG4gICAgICAgICAgICBpZiAoIWhhc093blByb3AodGhpcywgJ193ZWVrZGF5c1JlZ2V4JykpIHtcbiAgICAgICAgICAgICAgICBjb21wdXRlV2Vla2RheXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzU3RyaWN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXg7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl93ZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfd2Vla2RheXNNaW5SZWdleCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2Vla2RheXNNaW5SZWdleCA9IGRlZmF1bHRXZWVrZGF5c01pblJlZ2V4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXggJiYgaXNTdHJpY3RcbiAgICAgICAgICAgICAgICA/IHRoaXMuX3dlZWtkYXlzTWluU3RyaWN0UmVnZXhcbiAgICAgICAgICAgICAgICA6IHRoaXMuX3dlZWtkYXlzTWluUmVnZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlV2Vla2RheXNQYXJzZSgpIHtcbiAgICAgICAgZnVuY3Rpb24gY21wTGVuUmV2KGEsIGIpIHtcbiAgICAgICAgICAgIHJldHVybiBiLmxlbmd0aCAtIGEubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG1pblBpZWNlcyA9IFtdLFxuICAgICAgICAgICAgc2hvcnRQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIGxvbmdQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbW9tLFxuICAgICAgICAgICAgbWlucCxcbiAgICAgICAgICAgIHNob3J0cCxcbiAgICAgICAgICAgIGxvbmdwO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICAvLyBtYWtlIHRoZSByZWdleCBpZiB3ZSBkb24ndCBoYXZlIGl0IGFscmVhZHlcbiAgICAgICAgICAgIG1vbSA9IGNyZWF0ZVVUQyhbMjAwMCwgMV0pLmRheShpKTtcbiAgICAgICAgICAgIG1pbnAgPSByZWdleEVzY2FwZSh0aGlzLndlZWtkYXlzTWluKG1vbSwgJycpKTtcbiAgICAgICAgICAgIHNob3J0cCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXNTaG9ydChtb20sICcnKSk7XG4gICAgICAgICAgICBsb25ncCA9IHJlZ2V4RXNjYXBlKHRoaXMud2Vla2RheXMobW9tLCAnJykpO1xuICAgICAgICAgICAgbWluUGllY2VzLnB1c2gobWlucCk7XG4gICAgICAgICAgICBzaG9ydFBpZWNlcy5wdXNoKHNob3J0cCk7XG4gICAgICAgICAgICBsb25nUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChtaW5wKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2goc2hvcnRwKTtcbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gobG9uZ3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNvcnRpbmcgbWFrZXMgc3VyZSBpZiBvbmUgd2Vla2RheSAob3IgYWJicikgaXMgYSBwcmVmaXggb2YgYW5vdGhlciBpdFxuICAgICAgICAvLyB3aWxsIG1hdGNoIHRoZSBsb25nZXIgcGllY2UuXG4gICAgICAgIG1pblBpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIHNob3J0UGllY2VzLnNvcnQoY21wTGVuUmV2KTtcbiAgICAgICAgbG9uZ1BpZWNlcy5zb3J0KGNtcExlblJldik7XG4gICAgICAgIG1peGVkUGllY2VzLnNvcnQoY21wTGVuUmV2KTtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0UmVnZXggPSB0aGlzLl93ZWVrZGF5c1JlZ2V4O1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblJlZ2V4ID0gdGhpcy5fd2Vla2RheXNSZWdleDtcblxuICAgICAgICB0aGlzLl93ZWVrZGF5c1N0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBsb25nUGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c1Nob3J0U3RyaWN0UmVnZXggPSBuZXcgUmVnRXhwKFxuICAgICAgICAgICAgJ14oJyArIHNob3J0UGllY2VzLmpvaW4oJ3wnKSArICcpJyxcbiAgICAgICAgICAgICdpJ1xuICAgICAgICApO1xuICAgICAgICB0aGlzLl93ZWVrZGF5c01pblN0cmljdFJlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBtaW5QaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgZnVuY3Rpb24gaEZvcm1hdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaG91cnMoKSAlIDEyIHx8IDEyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGtGb3JtYXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhvdXJzKCkgfHwgMjQ7XG4gICAgfVxuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0gnLCBbJ0hIJywgMl0sIDAsICdob3VyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ2gnLCBbJ2hoJywgMl0sIDAsIGhGb3JtYXQpO1xuICAgIGFkZEZvcm1hdFRva2VuKCdrJywgWydraycsIDJdLCAwLCBrRm9ybWF0KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdobW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIGhGb3JtYXQuYXBwbHkodGhpcykgKyB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMik7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbignaG1tc3MnLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAnJyArXG4gICAgICAgICAgICBoRm9ybWF0LmFwcGx5KHRoaXMpICtcbiAgICAgICAgICAgIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLnNlY29uZHMoKSwgMilcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW0nLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiAnJyArIHRoaXMuaG91cnMoKSArIHplcm9GaWxsKHRoaXMubWludXRlcygpLCAyKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKCdIbW1zcycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICcnICtcbiAgICAgICAgICAgIHRoaXMuaG91cnMoKSArXG4gICAgICAgICAgICB6ZXJvRmlsbCh0aGlzLm1pbnV0ZXMoKSwgMikgK1xuICAgICAgICAgICAgemVyb0ZpbGwodGhpcy5zZWNvbmRzKCksIDIpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICBmdW5jdGlvbiBtZXJpZGllbSh0b2tlbiwgbG93ZXJjYXNlKSB7XG4gICAgICAgIGFkZEZvcm1hdFRva2VuKHRva2VuLCAwLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkubWVyaWRpZW0oXG4gICAgICAgICAgICAgICAgdGhpcy5ob3VycygpLFxuICAgICAgICAgICAgICAgIHRoaXMubWludXRlcygpLFxuICAgICAgICAgICAgICAgIGxvd2VyY2FzZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbWVyaWRpZW0oJ2EnLCB0cnVlKTtcbiAgICBtZXJpZGllbSgnQScsIGZhbHNlKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnaG91cicsICdoJyk7XG5cbiAgICAvLyBQUklPUklUWVxuICAgIGFkZFVuaXRQcmlvcml0eSgnaG91cicsIDEzKTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGZ1bmN0aW9uIG1hdGNoTWVyaWRpZW0oaXNTdHJpY3QsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbG9jYWxlLl9tZXJpZGllbVBhcnNlO1xuICAgIH1cblxuICAgIGFkZFJlZ2V4VG9rZW4oJ2EnLCBtYXRjaE1lcmlkaWVtKTtcbiAgICBhZGRSZWdleFRva2VuKCdBJywgbWF0Y2hNZXJpZGllbSk7XG4gICAgYWRkUmVnZXhUb2tlbignSCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaCcsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignaycsIG1hdGNoMXRvMik7XG4gICAgYWRkUmVnZXhUb2tlbignSEgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignaGgnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbigna2snLCBtYXRjaDF0bzIsIG1hdGNoMik7XG5cbiAgICBhZGRSZWdleFRva2VuKCdobW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2htbXNzJywgbWF0Y2g1dG82KTtcbiAgICBhZGRSZWdleFRva2VuKCdIbW0nLCBtYXRjaDN0bzQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0htbXNzJywgbWF0Y2g1dG82KTtcblxuICAgIGFkZFBhcnNlVG9rZW4oWydIJywgJ0hIJ10sIEhPVVIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydrJywgJ2trJ10sIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIga0lucHV0ID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBhcnJheVtIT1VSXSA9IGtJbnB1dCA9PT0gMjQgPyAwIDoga0lucHV0O1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oWydhJywgJ0EnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5faXNQbSA9IGNvbmZpZy5fbG9jYWxlLmlzUE0oaW5wdXQpO1xuICAgICAgICBjb25maWcuX21lcmlkaWVtID0gaW5wdXQ7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbihbJ2gnLCAnaGgnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW0nLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvcyA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvcykpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvcykpO1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID0gdHJ1ZTtcbiAgICB9KTtcbiAgICBhZGRQYXJzZVRva2VuKCdobW1zcycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zMSA9IGlucHV0Lmxlbmd0aCAtIDQsXG4gICAgICAgICAgICBwb3MyID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zMSkpO1xuICAgICAgICBhcnJheVtNSU5VVEVdID0gdG9JbnQoaW5wdXQuc3Vic3RyKHBvczEsIDIpKTtcbiAgICAgICAgYXJyYXlbU0VDT05EXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MyKSk7XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmJpZ0hvdXIgPSB0cnVlO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ0htbScsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICB2YXIgcG9zID0gaW5wdXQubGVuZ3RoIC0gMjtcbiAgICAgICAgYXJyYXlbSE9VUl0gPSB0b0ludChpbnB1dC5zdWJzdHIoMCwgcG9zKSk7XG4gICAgICAgIGFycmF5W01JTlVURV0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zKSk7XG4gICAgfSk7XG4gICAgYWRkUGFyc2VUb2tlbignSG1tc3MnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgdmFyIHBvczEgPSBpbnB1dC5sZW5ndGggLSA0LFxuICAgICAgICAgICAgcG9zMiA9IGlucHV0Lmxlbmd0aCAtIDI7XG4gICAgICAgIGFycmF5W0hPVVJdID0gdG9JbnQoaW5wdXQuc3Vic3RyKDAsIHBvczEpKTtcbiAgICAgICAgYXJyYXlbTUlOVVRFXSA9IHRvSW50KGlucHV0LnN1YnN0cihwb3MxLCAyKSk7XG4gICAgICAgIGFycmF5W1NFQ09ORF0gPSB0b0ludChpbnB1dC5zdWJzdHIocG9zMikpO1xuICAgIH0pO1xuXG4gICAgLy8gTE9DQUxFU1xuXG4gICAgZnVuY3Rpb24gbG9jYWxlSXNQTShpbnB1dCkge1xuICAgICAgICAvLyBJRTggUXVpcmtzIE1vZGUgJiBJRTcgU3RhbmRhcmRzIE1vZGUgZG8gbm90IGFsbG93IGFjY2Vzc2luZyBzdHJpbmdzIGxpa2UgYXJyYXlzXG4gICAgICAgIC8vIFVzaW5nIGNoYXJBdCBzaG91bGQgYmUgbW9yZSBjb21wYXRpYmxlLlxuICAgICAgICByZXR1cm4gKGlucHV0ICsgJycpLnRvTG93ZXJDYXNlKCkuY2hhckF0KDApID09PSAncCc7XG4gICAgfVxuXG4gICAgdmFyIGRlZmF1bHRMb2NhbGVNZXJpZGllbVBhcnNlID0gL1thcF1cXC4/bT9cXC4/L2ksXG4gICAgICAgIC8vIFNldHRpbmcgdGhlIGhvdXIgc2hvdWxkIGtlZXAgdGhlIHRpbWUsIGJlY2F1c2UgdGhlIHVzZXIgZXhwbGljaXRseVxuICAgICAgICAvLyBzcGVjaWZpZWQgd2hpY2ggaG91ciB0aGV5IHdhbnQuIFNvIHRyeWluZyB0byBtYWludGFpbiB0aGUgc2FtZSBob3VyIChpblxuICAgICAgICAvLyBhIG5ldyB0aW1lem9uZSkgbWFrZXMgc2Vuc2UuIEFkZGluZy9zdWJ0cmFjdGluZyBob3VycyBkb2VzIG5vdCBmb2xsb3dcbiAgICAgICAgLy8gdGhpcyBydWxlLlxuICAgICAgICBnZXRTZXRIb3VyID0gbWFrZUdldFNldCgnSG91cnMnLCB0cnVlKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZU1lcmlkaWVtKGhvdXJzLCBtaW51dGVzLCBpc0xvd2VyKSB7XG4gICAgICAgIGlmIChob3VycyA+IDExKSB7XG4gICAgICAgICAgICByZXR1cm4gaXNMb3dlciA/ICdwbScgOiAnUE0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGlzTG93ZXIgPyAnYW0nIDogJ0FNJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBiYXNlQ29uZmlnID0ge1xuICAgICAgICBjYWxlbmRhcjogZGVmYXVsdENhbGVuZGFyLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDogZGVmYXVsdExvbmdEYXRlRm9ybWF0LFxuICAgICAgICBpbnZhbGlkRGF0ZTogZGVmYXVsdEludmFsaWREYXRlLFxuICAgICAgICBvcmRpbmFsOiBkZWZhdWx0T3JkaW5hbCxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogZGVmYXVsdERheU9mTW9udGhPcmRpbmFsUGFyc2UsXG4gICAgICAgIHJlbGF0aXZlVGltZTogZGVmYXVsdFJlbGF0aXZlVGltZSxcblxuICAgICAgICBtb250aHM6IGRlZmF1bHRMb2NhbGVNb250aHMsXG4gICAgICAgIG1vbnRoc1Nob3J0OiBkZWZhdWx0TG9jYWxlTW9udGhzU2hvcnQsXG5cbiAgICAgICAgd2VlazogZGVmYXVsdExvY2FsZVdlZWssXG5cbiAgICAgICAgd2Vla2RheXM6IGRlZmF1bHRMb2NhbGVXZWVrZGF5cyxcbiAgICAgICAgd2Vla2RheXNNaW46IGRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbixcbiAgICAgICAgd2Vla2RheXNTaG9ydDogZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQsXG5cbiAgICAgICAgbWVyaWRpZW1QYXJzZTogZGVmYXVsdExvY2FsZU1lcmlkaWVtUGFyc2UsXG4gICAgfTtcblxuICAgIC8vIGludGVybmFsIHN0b3JhZ2UgZm9yIGxvY2FsZSBjb25maWcgZmlsZXNcbiAgICB2YXIgbG9jYWxlcyA9IHt9LFxuICAgICAgICBsb2NhbGVGYW1pbGllcyA9IHt9LFxuICAgICAgICBnbG9iYWxMb2NhbGU7XG5cbiAgICBmdW5jdGlvbiBjb21tb25QcmVmaXgoYXJyMSwgYXJyMikge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIG1pbmwgPSBNYXRoLm1pbihhcnIxLmxlbmd0aCwgYXJyMi5sZW5ndGgpO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWlubDsgaSArPSAxKSB7XG4gICAgICAgICAgICBpZiAoYXJyMVtpXSAhPT0gYXJyMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtaW5sO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUxvY2FsZShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA/IGtleS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ18nLCAnLScpIDoga2V5O1xuICAgIH1cblxuICAgIC8vIHBpY2sgdGhlIGxvY2FsZSBmcm9tIHRoZSBhcnJheVxuICAgIC8vIHRyeSBbJ2VuLWF1JywgJ2VuLWdiJ10gYXMgJ2VuLWF1JywgJ2VuLWdiJywgJ2VuJywgYXMgaW4gbW92ZSB0aHJvdWdoIHRoZSBsaXN0IHRyeWluZyBlYWNoXG4gICAgLy8gc3Vic3RyaW5nIGZyb20gbW9zdCBzcGVjaWZpYyB0byBsZWFzdCwgYnV0IG1vdmUgdG8gdGhlIG5leHQgYXJyYXkgaXRlbSBpZiBpdCdzIGEgbW9yZSBzcGVjaWZpYyB2YXJpYW50IHRoYW4gdGhlIGN1cnJlbnQgcm9vdFxuICAgIGZ1bmN0aW9uIGNob29zZUxvY2FsZShuYW1lcykge1xuICAgICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgICBqLFxuICAgICAgICAgICAgbmV4dCxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIHNwbGl0O1xuXG4gICAgICAgIHdoaWxlIChpIDwgbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBzcGxpdCA9IG5vcm1hbGl6ZUxvY2FsZShuYW1lc1tpXSkuc3BsaXQoJy0nKTtcbiAgICAgICAgICAgIGogPSBzcGxpdC5sZW5ndGg7XG4gICAgICAgICAgICBuZXh0ID0gbm9ybWFsaXplTG9jYWxlKG5hbWVzW2kgKyAxXSk7XG4gICAgICAgICAgICBuZXh0ID0gbmV4dCA/IG5leHQuc3BsaXQoJy0nKSA6IG51bGw7XG4gICAgICAgICAgICB3aGlsZSAoaiA+IDApIHtcbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBsb2FkTG9jYWxlKHNwbGl0LnNsaWNlKDAsIGopLmpvaW4oJy0nKSk7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIG5leHQgJiZcbiAgICAgICAgICAgICAgICAgICAgbmV4dC5sZW5ndGggPj0gaiAmJlxuICAgICAgICAgICAgICAgICAgICBjb21tb25QcmVmaXgoc3BsaXQsIG5leHQpID49IGogLSAxXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vdGhlIG5leHQgYXJyYXkgaXRlbSBpcyBiZXR0ZXIgdGhhbiBhIHNoYWxsb3dlciBzdWJzdHJpbmcgb2YgdGhpcyBvbmVcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGotLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTG9jYWxlTmFtZVNhbmUobmFtZSkge1xuICAgICAgICAvLyBQcmV2ZW50IG5hbWVzIHRoYXQgbG9vayBsaWtlIGZpbGVzeXN0ZW0gcGF0aHMsIGkuZSBjb250YWluICcvJyBvciAnXFwnXG4gICAgICAgIHJldHVybiBuYW1lLm1hdGNoKCdeW14vXFxcXFxcXFxdKiQnKSAhPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvYWRMb2NhbGUobmFtZSkge1xuICAgICAgICB2YXIgb2xkTG9jYWxlID0gbnVsbCxcbiAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlO1xuICAgICAgICAvLyBUT0RPOiBGaW5kIGEgYmV0dGVyIHdheSB0byByZWdpc3RlciBhbmQgbG9hZCBhbGwgdGhlIGxvY2FsZXMgaW4gTm9kZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBtb2R1bGUgJiZcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzICYmXG4gICAgICAgICAgICBpc0xvY2FsZU5hbWVTYW5lKG5hbWUpXG4gICAgICAgICkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBvbGRMb2NhbGUgPSBnbG9iYWxMb2NhbGUuX2FiYnI7XG4gICAgICAgICAgICAgICAgYWxpYXNlZFJlcXVpcmUgPSByZXF1aXJlO1xuICAgICAgICAgICAgICAgIGFsaWFzZWRSZXF1aXJlKCcuL2xvY2FsZS8nICsgbmFtZSk7XG4gICAgICAgICAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlKG9sZExvY2FsZSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFyayBhcyBub3QgZm91bmQgdG8gYXZvaWQgcmVwZWF0aW5nIGV4cGVuc2l2ZSBmaWxlIHJlcXVpcmUgY2FsbCBjYXVzaW5nIGhpZ2ggQ1BVXG4gICAgICAgICAgICAgICAgLy8gd2hlbiB0cnlpbmcgdG8gZmluZCBlbi1VUywgZW5fVVMsIGVuLXVzIGZvciBldmVyeSBmb3JtYXQgY2FsbFxuICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBudWxsOyAvLyBudWxsIG1lYW5zIG5vdCBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBsb2FkIGxvY2FsZSBhbmQgdGhlbiBzZXQgdGhlIGdsb2JhbCBsb2NhbGUuICBJZlxuICAgIC8vIG5vIGFyZ3VtZW50cyBhcmUgcGFzc2VkIGluLCBpdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIGN1cnJlbnQgZ2xvYmFsXG4gICAgLy8gbG9jYWxlIGtleS5cbiAgICBmdW5jdGlvbiBnZXRTZXRHbG9iYWxMb2NhbGUoa2V5LCB2YWx1ZXMpIHtcbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGVmaW5lTG9jYWxlKGtleSwgdmFsdWVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICAgICAgICAvLyBtb21lbnQuZHVyYXRpb24uX2xvY2FsZSA9IG1vbWVudC5fbG9jYWxlID0gZGF0YTtcbiAgICAgICAgICAgICAgICBnbG9iYWxMb2NhbGUgPSBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUud2Fybikge1xuICAgICAgICAgICAgICAgICAgICAvL3dhcm4gdXNlciBpZiBhcmd1bWVudHMgYXJlIHBhc3NlZCBidXQgdGhlIGxvY2FsZSBjb3VsZCBub3QgYmUgc2V0XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgICAgICdMb2NhbGUgJyArIGtleSArICcgbm90IGZvdW5kLiBEaWQgeW91IGZvcmdldCB0byBsb2FkIGl0PydcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlLl9hYmJyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRlZmluZUxvY2FsZShuYW1lLCBjb25maWcpIHtcbiAgICAgICAgaWYgKGNvbmZpZyAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIGxvY2FsZSxcbiAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBiYXNlQ29uZmlnO1xuICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgJ2RlZmluZUxvY2FsZU92ZXJyaWRlJyxcbiAgICAgICAgICAgICAgICAgICAgJ3VzZSBtb21lbnQudXBkYXRlTG9jYWxlKGxvY2FsZU5hbWUsIGNvbmZpZykgdG8gY2hhbmdlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2FuIGV4aXN0aW5nIGxvY2FsZS4gbW9tZW50LmRlZmluZUxvY2FsZShsb2NhbGVOYW1lLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdjb25maWcpIHNob3VsZCBvbmx5IGJlIHVzZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdTZWUgaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9kZWZpbmUtbG9jYWxlLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGxvY2FsZXNbbmFtZV0uX2NvbmZpZztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGxvY2FsZXNbY29uZmlnLnBhcmVudExvY2FsZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGVzW2NvbmZpZy5wYXJlbnRMb2NhbGVdLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxlID0gbG9hZExvY2FsZShjb25maWcucGFyZW50TG9jYWxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGxvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRDb25maWcgPSBsb2NhbGUuX2NvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbGVGYW1pbGllc1tjb25maWcucGFyZW50TG9jYWxlXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbY29uZmlnLnBhcmVudExvY2FsZV0ucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWc6IGNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsb2NhbGVzW25hbWVdID0gbmV3IExvY2FsZShtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpKTtcblxuICAgICAgICAgICAgaWYgKGxvY2FsZUZhbWlsaWVzW25hbWVdKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxlRmFtaWxpZXNbbmFtZV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBkZWZpbmVMb2NhbGUoeC5uYW1lLCB4LmNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGJhY2t3YXJkcyBjb21wYXQgZm9yIG5vdzogYWxzbyBzZXQgdGhlIGxvY2FsZVxuICAgICAgICAgICAgLy8gbWFrZSBzdXJlIHdlIHNldCB0aGUgbG9jYWxlIEFGVEVSIGFsbCBjaGlsZCBsb2NhbGVzIGhhdmUgYmVlblxuICAgICAgICAgICAgLy8gY3JlYXRlZCwgc28gd2Ugd29uJ3QgZW5kIHVwIHdpdGggdGhlIGNoaWxkIGxvY2FsZSBzZXQuXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG5cbiAgICAgICAgICAgIHJldHVybiBsb2NhbGVzW25hbWVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXNlZnVsIGZvciB0ZXN0aW5nXG4gICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdXBkYXRlTG9jYWxlKG5hbWUsIGNvbmZpZykge1xuICAgICAgICBpZiAoY29uZmlnICE9IG51bGwpIHtcbiAgICAgICAgICAgIHZhciBsb2NhbGUsXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlLFxuICAgICAgICAgICAgICAgIHBhcmVudENvbmZpZyA9IGJhc2VDb25maWc7XG5cbiAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdICE9IG51bGwgJiYgbG9jYWxlc1tuYW1lXS5wYXJlbnRMb2NhbGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBjaGlsZCBsb2NhbGUgaW4tcGxhY2UgdG8gYXZvaWQgbWVtb3J5LWxlYWtzXG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXS5zZXQobWVyZ2VDb25maWdzKGxvY2FsZXNbbmFtZV0uX2NvbmZpZywgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIE1FUkdFXG4gICAgICAgICAgICAgICAgdG1wTG9jYWxlID0gbG9hZExvY2FsZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wTG9jYWxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50Q29uZmlnID0gdG1wTG9jYWxlLl9jb25maWc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZyA9IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcExvY2FsZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHVwZGF0ZUxvY2FsZSBpcyBjYWxsZWQgZm9yIGNyZWF0aW5nIGEgbmV3IGxvY2FsZVxuICAgICAgICAgICAgICAgICAgICAvLyBTZXQgYWJiciBzbyBpdCB3aWxsIGhhdmUgYSBuYW1lIChnZXR0ZXJzIHJldHVyblxuICAgICAgICAgICAgICAgICAgICAvLyB1bmRlZmluZWQgb3RoZXJ3aXNlKS5cbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmFiYnIgPSBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb2NhbGUgPSBuZXcgTG9jYWxlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgbG9jYWxlLnBhcmVudExvY2FsZSA9IGxvY2FsZXNbbmFtZV07XG4gICAgICAgICAgICAgICAgbG9jYWxlc1tuYW1lXSA9IGxvY2FsZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gYmFja3dhcmRzIGNvbXBhdCBmb3Igbm93OiBhbHNvIHNldCB0aGUgbG9jYWxlXG4gICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBwYXNzIG51bGwgZm9yIGNvbmZpZyB0byB1bnVwZGF0ZSwgdXNlZnVsIGZvciB0ZXN0c1xuICAgICAgICAgICAgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsZXNbbmFtZV0gPSBsb2NhbGVzW25hbWVdLnBhcmVudExvY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGdldFNldEdsb2JhbExvY2FsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRTZXRHbG9iYWxMb2NhbGUobmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxvY2FsZXNbbmFtZV0gIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgbG9jYWxlc1tuYW1lXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGxvY2FsZXNbbmFtZV07XG4gICAgfVxuXG4gICAgLy8gcmV0dXJucyBsb2NhbGUgZGF0YVxuICAgIGZ1bmN0aW9uIGdldExvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIGxvY2FsZTtcblxuICAgICAgICBpZiAoa2V5ICYmIGtleS5fbG9jYWxlICYmIGtleS5fbG9jYWxlLl9hYmJyKSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkuX2xvY2FsZS5fYWJicjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgha2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2xvYmFsTG9jYWxlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGtleSkpIHtcbiAgICAgICAgICAgIC8vc2hvcnQtY2lyY3VpdCBldmVyeXRoaW5nIGVsc2VcbiAgICAgICAgICAgIGxvY2FsZSA9IGxvYWRMb2NhbGUoa2V5KTtcbiAgICAgICAgICAgIGlmIChsb2NhbGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9jYWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAga2V5ID0gW2tleV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY2hvb3NlTG9jYWxlKGtleSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdExvY2FsZXMoKSB7XG4gICAgICAgIHJldHVybiBrZXlzKGxvY2FsZXMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrT3ZlcmZsb3cobSkge1xuICAgICAgICB2YXIgb3ZlcmZsb3csXG4gICAgICAgICAgICBhID0gbS5fYTtcblxuICAgICAgICBpZiAoYSAmJiBnZXRQYXJzaW5nRmxhZ3MobSkub3ZlcmZsb3cgPT09IC0yKSB7XG4gICAgICAgICAgICBvdmVyZmxvdyA9XG4gICAgICAgICAgICAgICAgYVtNT05USF0gPCAwIHx8IGFbTU9OVEhdID4gMTFcbiAgICAgICAgICAgICAgICAgICAgPyBNT05USFxuICAgICAgICAgICAgICAgICAgICA6IGFbREFURV0gPCAxIHx8IGFbREFURV0gPiBkYXlzSW5Nb250aChhW1lFQVJdLCBhW01PTlRIXSlcbiAgICAgICAgICAgICAgICAgICAgPyBEQVRFXG4gICAgICAgICAgICAgICAgICAgIDogYVtIT1VSXSA8IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICBhW0hPVVJdID4gMjQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAoYVtIT1VSXSA9PT0gMjQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGFbTUlOVVRFXSAhPT0gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYVtTRUNPTkRdICE9PSAwIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhW01JTExJU0VDT05EXSAhPT0gMCkpXG4gICAgICAgICAgICAgICAgICAgID8gSE9VUlxuICAgICAgICAgICAgICAgICAgICA6IGFbTUlOVVRFXSA8IDAgfHwgYVtNSU5VVEVdID4gNTlcbiAgICAgICAgICAgICAgICAgICAgPyBNSU5VVEVcbiAgICAgICAgICAgICAgICAgICAgOiBhW1NFQ09ORF0gPCAwIHx8IGFbU0VDT05EXSA+IDU5XG4gICAgICAgICAgICAgICAgICAgID8gU0VDT05EXG4gICAgICAgICAgICAgICAgICAgIDogYVtNSUxMSVNFQ09ORF0gPCAwIHx8IGFbTUlMTElTRUNPTkRdID4gOTk5XG4gICAgICAgICAgICAgICAgICAgID8gTUlMTElTRUNPTkRcbiAgICAgICAgICAgICAgICAgICAgOiAtMTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dEYXlPZlllYXIgJiZcbiAgICAgICAgICAgICAgICAob3ZlcmZsb3cgPCBZRUFSIHx8IG92ZXJmbG93ID4gREFURSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gREFURTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChnZXRQYXJzaW5nRmxhZ3MobSkuX292ZXJmbG93V2Vla3MgJiYgb3ZlcmZsb3cgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgb3ZlcmZsb3cgPSBXRUVLO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGdldFBhcnNpbmdGbGFncyhtKS5fb3ZlcmZsb3dXZWVrZGF5ICYmIG92ZXJmbG93ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG92ZXJmbG93ID0gV0VFS0RBWTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKG0pLm92ZXJmbG93ID0gb3ZlcmZsb3c7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbTtcbiAgICB9XG5cbiAgICAvLyBpc28gODYwMSByZWdleFxuICAgIC8vIDAwMDAtMDAtMDAgMDAwMC1XMDAgb3IgMDAwMC1XMDAtMCArIFQgKyAwMCBvciAwMDowMCBvciAwMDowMDowMCBvciAwMDowMDowMC4wMDAgKyArMDA6MDAgb3IgKzAwMDAgb3IgKzAwKVxuICAgIHZhciBleHRlbmRlZElzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSktKD86XFxkXFxkLVxcZFxcZHxXXFxkXFxkLVxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGQpKSg/OihUfCApKFxcZFxcZCg/OjpcXGRcXGQoPzo6XFxkXFxkKD86Wy4sXVxcZCspPyk/KT8pKFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/fFxccypaKT8pPyQvLFxuICAgICAgICBiYXNpY0lzb1JlZ2V4ID1cbiAgICAgICAgICAgIC9eXFxzKigoPzpbKy1dXFxkezZ9fFxcZHs0fSkoPzpcXGRcXGRcXGRcXGR8V1xcZFxcZFxcZHxXXFxkXFxkfFxcZFxcZFxcZHxcXGRcXGR8KSkoPzooVHwgKShcXGRcXGQoPzpcXGRcXGQoPzpcXGRcXGQoPzpbLixdXFxkKyk/KT8pPykoWystXVxcZFxcZCg/Ojo/XFxkXFxkKT98XFxzKlopPyk/JC8sXG4gICAgICAgIHR6UmVnZXggPSAvWnxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPy8sXG4gICAgICAgIGlzb0RhdGVzID0gW1xuICAgICAgICAgICAgWydZWVlZWVktTU0tREQnLCAvWystXVxcZHs2fS1cXGRcXGQtXFxkXFxkL10sXG4gICAgICAgICAgICBbJ1lZWVktTU0tREQnLCAvXFxkezR9LVxcZFxcZC1cXGRcXGQvXSxcbiAgICAgICAgICAgIFsnR0dHRy1bV11XVy1FJywgL1xcZHs0fS1XXFxkXFxkLVxcZC9dLFxuICAgICAgICAgICAgWydHR0dHLVtXXVdXJywgL1xcZHs0fS1XXFxkXFxkLywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZLURERCcsIC9cXGR7NH0tXFxkezN9L10sXG4gICAgICAgICAgICBbJ1lZWVktTU0nLCAvXFxkezR9LVxcZFxcZC8sIGZhbHNlXSxcbiAgICAgICAgICAgIFsnWVlZWVlZTU1ERCcsIC9bKy1dXFxkezEwfS9dLFxuICAgICAgICAgICAgWydZWVlZTU1ERCcsIC9cXGR7OH0vXSxcbiAgICAgICAgICAgIFsnR0dHR1tXXVdXRScsIC9cXGR7NH1XXFxkezN9L10sXG4gICAgICAgICAgICBbJ0dHR0dbV11XVycsIC9cXGR7NH1XXFxkezJ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZREREJywgL1xcZHs3fS9dLFxuICAgICAgICAgICAgWydZWVlZTU0nLCAvXFxkezZ9LywgZmFsc2VdLFxuICAgICAgICAgICAgWydZWVlZJywgL1xcZHs0fS8sIGZhbHNlXSxcbiAgICAgICAgXSxcbiAgICAgICAgLy8gaXNvIHRpbWUgZm9ybWF0cyBhbmQgcmVnZXhlc1xuICAgICAgICBpc29UaW1lcyA9IFtcbiAgICAgICAgICAgIFsnSEg6bW06c3MuU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZFxcLlxcZCsvXSxcbiAgICAgICAgICAgIFsnSEg6bW06c3MsU1NTUycsIC9cXGRcXGQ6XFxkXFxkOlxcZFxcZCxcXGQrL10sXG4gICAgICAgICAgICBbJ0hIOm1tOnNzJywgL1xcZFxcZDpcXGRcXGQ6XFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIOm1tJywgL1xcZFxcZDpcXGRcXGQvXSxcbiAgICAgICAgICAgIFsnSEhtbXNzLlNTU1MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkXFwuXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MsU1NTUycsIC9cXGRcXGRcXGRcXGRcXGRcXGQsXFxkKy9dLFxuICAgICAgICAgICAgWydISG1tc3MnLCAvXFxkXFxkXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIbW0nLCAvXFxkXFxkXFxkXFxkL10sXG4gICAgICAgICAgICBbJ0hIJywgL1xcZFxcZC9dLFxuICAgICAgICBdLFxuICAgICAgICBhc3BOZXRKc29uUmVnZXggPSAvXlxcLz9EYXRlXFwoKC0/XFxkKykvaSxcbiAgICAgICAgLy8gUkZDIDI4MjIgcmVnZXg6IEZvciBkZXRhaWxzIHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjgyMiNzZWN0aW9uLTMuM1xuICAgICAgICByZmMyODIyID1cbiAgICAgICAgICAgIC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksP1xccyk/KFxcZHsxLDJ9KVxccyhKYW58RmVifE1hcnxBcHJ8TWF5fEp1bnxKdWx8QXVnfFNlcHxPY3R8Tm92fERlYylcXHMoXFxkezIsNH0pXFxzKFxcZFxcZCk6KFxcZFxcZCkoPzo6KFxcZFxcZCkpP1xccyg/OihVVHxHTVR8W0VDTVBdW1NEXVQpfChbWnpdKXwoWystXVxcZHs0fSkpJC8sXG4gICAgICAgIG9ic09mZnNldHMgPSB7XG4gICAgICAgICAgICBVVDogMCxcbiAgICAgICAgICAgIEdNVDogMCxcbiAgICAgICAgICAgIEVEVDogLTQgKiA2MCxcbiAgICAgICAgICAgIEVTVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENEVDogLTUgKiA2MCxcbiAgICAgICAgICAgIENTVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1EVDogLTYgKiA2MCxcbiAgICAgICAgICAgIE1TVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBEVDogLTcgKiA2MCxcbiAgICAgICAgICAgIFBTVDogLTggKiA2MCxcbiAgICAgICAgfTtcblxuICAgIC8vIGRhdGUgZnJvbSBpc28gZm9ybWF0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlTTyhjb25maWcpIHtcbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBsLFxuICAgICAgICAgICAgc3RyaW5nID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgbWF0Y2ggPSBleHRlbmRlZElzb1JlZ2V4LmV4ZWMoc3RyaW5nKSB8fCBiYXNpY0lzb1JlZ2V4LmV4ZWMoc3RyaW5nKSxcbiAgICAgICAgICAgIGFsbG93VGltZSxcbiAgICAgICAgICAgIGRhdGVGb3JtYXQsXG4gICAgICAgICAgICB0aW1lRm9ybWF0LFxuICAgICAgICAgICAgdHpGb3JtYXQsXG4gICAgICAgICAgICBpc29EYXRlc0xlbiA9IGlzb0RhdGVzLmxlbmd0aCxcbiAgICAgICAgICAgIGlzb1RpbWVzTGVuID0gaXNvVGltZXMubGVuZ3RoO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaXNvID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29EYXRlc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpc29EYXRlc1tpXVsxXS5leGVjKG1hdGNoWzFdKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRlRm9ybWF0ID0gaXNvRGF0ZXNbaV1bMF07XG4gICAgICAgICAgICAgICAgICAgIGFsbG93VGltZSA9IGlzb0RhdGVzW2ldWzJdICE9PSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFszXSkge1xuICAgICAgICAgICAgICAgIGZvciAoaSA9IDAsIGwgPSBpc29UaW1lc0xlbjsgaSA8IGw7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNvVGltZXNbaV1bMV0uZXhlYyhtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1hdGNoWzJdIHNob3VsZCBiZSAnVCcgb3Igc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVGb3JtYXQgPSAobWF0Y2hbMl0gfHwgJyAnKSArIGlzb1RpbWVzW2ldWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRpbWVGb3JtYXQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghYWxsb3dUaW1lICYmIHRpbWVGb3JtYXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChtYXRjaFs0XSkge1xuICAgICAgICAgICAgICAgIGlmICh0elJlZ2V4LmV4ZWMobWF0Y2hbNF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHR6Rm9ybWF0ID0gJ1onO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbmZpZy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlnLl9mID0gZGF0ZUZvcm1hdCArICh0aW1lRm9ybWF0IHx8ICcnKSArICh0ekZvcm1hdCB8fCAnJyk7XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KGNvbmZpZyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dHJhY3RGcm9tUkZDMjgyMlN0cmluZ3MoXG4gICAgICAgIHllYXJTdHIsXG4gICAgICAgIG1vbnRoU3RyLFxuICAgICAgICBkYXlTdHIsXG4gICAgICAgIGhvdXJTdHIsXG4gICAgICAgIG1pbnV0ZVN0cixcbiAgICAgICAgc2Vjb25kU3RyXG4gICAgKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBbXG4gICAgICAgICAgICB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSxcbiAgICAgICAgICAgIGRlZmF1bHRMb2NhbGVNb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSxcbiAgICAgICAgICAgIHBhcnNlSW50KGRheVN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQoaG91clN0ciwgMTApLFxuICAgICAgICAgICAgcGFyc2VJbnQobWludXRlU3RyLCAxMCksXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHNlY29uZFN0cikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2gocGFyc2VJbnQoc2Vjb25kU3RyLCAxMCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1bnRydW5jYXRlWWVhcih5ZWFyU3RyKSB7XG4gICAgICAgIHZhciB5ZWFyID0gcGFyc2VJbnQoeWVhclN0ciwgMTApO1xuICAgICAgICBpZiAoeWVhciA8PSA0OSkge1xuICAgICAgICAgICAgcmV0dXJuIDIwMDAgKyB5ZWFyO1xuICAgICAgICB9IGVsc2UgaWYgKHllYXIgPD0gOTk5KSB7XG4gICAgICAgICAgICByZXR1cm4gMTkwMCArIHllYXI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHllYXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAgICAgICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICAgICAgICByZXR1cm4gc1xuICAgICAgICAgICAgLnJlcGxhY2UoL1xcKFteKCldKlxcKXxbXFxuXFx0XS9nLCAnICcpXG4gICAgICAgICAgICAucmVwbGFjZSgvKFxcc1xccyspL2csICcgJylcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eXFxzXFxzKi8sICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcc1xccyokLywgJycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNoZWNrV2Vla2RheSh3ZWVrZGF5U3RyLCBwYXJzZWRJbnB1dCwgY29uZmlnKSB7XG4gICAgICAgIGlmICh3ZWVrZGF5U3RyKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXBsYWNlIHRoZSB2YW5pbGxhIEpTIERhdGUgb2JqZWN0IHdpdGggYW4gaW5kZXBlbmRlbnQgZGF5LW9mLXdlZWsgY2hlY2suXG4gICAgICAgICAgICB2YXIgd2Vla2RheVByb3ZpZGVkID0gZGVmYXVsdExvY2FsZVdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSxcbiAgICAgICAgICAgICAgICB3ZWVrZGF5QWN0dWFsID0gbmV3IERhdGUoXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZElucHV0WzBdLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZWRJbnB1dFsxXSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkSW5wdXRbMl1cbiAgICAgICAgICAgICAgICApLmdldERheSgpO1xuICAgICAgICAgICAgaWYgKHdlZWtkYXlQcm92aWRlZCAhPT0gd2Vla2RheUFjdHVhbCkge1xuICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLndlZWtkYXlNaXNtYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uZmlnLl9pc1ZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGN1bGF0ZU9mZnNldChvYnNPZmZzZXQsIG1pbGl0YXJ5T2Zmc2V0LCBudW1PZmZzZXQpIHtcbiAgICAgICAgaWYgKG9ic09mZnNldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9ic09mZnNldHNbb2JzT2Zmc2V0XTtcbiAgICAgICAgfSBlbHNlIGlmIChtaWxpdGFyeU9mZnNldCkge1xuICAgICAgICAgICAgLy8gdGhlIG9ubHkgYWxsb3dlZCBtaWxpdGFyeSB0eiBpcyBaXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBobSA9IHBhcnNlSW50KG51bU9mZnNldCwgMTApLFxuICAgICAgICAgICAgICAgIG0gPSBobSAlIDEwMCxcbiAgICAgICAgICAgICAgICBoID0gKGhtIC0gbSkgLyAxMDA7XG4gICAgICAgICAgICByZXR1cm4gaCAqIDYwICsgbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgYW5kIHRpbWUgZnJvbSByZWYgMjgyMiBmb3JtYXRcbiAgICBmdW5jdGlvbiBjb25maWdGcm9tUkZDMjgyMihjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoID0gcmZjMjgyMi5leGVjKHByZXByb2Nlc3NSRkMyODIyKGNvbmZpZy5faSkpLFxuICAgICAgICAgICAgcGFyc2VkQXJyYXk7XG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgcGFyc2VkQXJyYXkgPSBleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzKFxuICAgICAgICAgICAgICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgIG1hdGNoWzddXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKCFjaGVja1dlZWtkYXkobWF0Y2hbMV0sIHBhcnNlZEFycmF5LCBjb25maWcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25maWcuX2EgPSBwYXJzZWRBcnJheTtcbiAgICAgICAgICAgIGNvbmZpZy5fdHptID0gY2FsY3VsYXRlT2Zmc2V0KG1hdGNoWzhdLCBtYXRjaFs5XSwgbWF0Y2hbMTBdKTtcblxuICAgICAgICAgICAgY29uZmlnLl9kID0gY3JlYXRlVVRDRGF0ZS5hcHBseShudWxsLCBjb25maWcuX2EpO1xuICAgICAgICAgICAgY29uZmlnLl9kLnNldFVUQ01pbnV0ZXMoY29uZmlnLl9kLmdldFVUQ01pbnV0ZXMoKSAtIGNvbmZpZy5fdHptKTtcblxuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykucmZjMjgyMiA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRhdGUgZnJvbSAxKSBBU1AuTkVULCAyKSBJU08sIDMpIFJGQyAyODIyIGZvcm1hdHMsIG9yIDQpIG9wdGlvbmFsIGZhbGxiYWNrIGlmIHBhcnNpbmcgaXNuJ3Qgc3RyaWN0XG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbVN0cmluZyhjb25maWcpIHtcbiAgICAgICAgdmFyIG1hdGNoZWQgPSBhc3BOZXRKc29uUmVnZXguZXhlYyhjb25maWcuX2kpO1xuICAgICAgICBpZiAobWF0Y2hlZCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoK21hdGNoZWRbMV0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uZmlnRnJvbUlTTyhjb25maWcpO1xuICAgICAgICBpZiAoY29uZmlnLl9pc1ZhbGlkID09PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVsZXRlIGNvbmZpZy5faXNWYWxpZDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgIGlmIChjb25maWcuX2lzVmFsaWQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBkZWxldGUgY29uZmlnLl9pc1ZhbGlkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fc3RyaWN0KSB7XG4gICAgICAgICAgICBjb25maWcuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIEZpbmFsIGF0dGVtcHQsIHVzZSBJbnB1dCBGYWxsYmFja1xuICAgICAgICAgICAgaG9va3MuY3JlYXRlRnJvbUlucHV0RmFsbGJhY2soY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGhvb2tzLmNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrID0gZGVwcmVjYXRlKFxuICAgICAgICAndmFsdWUgcHJvdmlkZWQgaXMgbm90IGluIGEgcmVjb2duaXplZCBSRkMyODIyIG9yIElTTyBmb3JtYXQuIG1vbWVudCBjb25zdHJ1Y3Rpb24gZmFsbHMgYmFjayB0byBqcyBEYXRlKCksICcgK1xuICAgICAgICAgICAgJ3doaWNoIGlzIG5vdCByZWxpYWJsZSBhY3Jvc3MgYWxsIGJyb3dzZXJzIGFuZCB2ZXJzaW9ucy4gTm9uIFJGQzI4MjIvSVNPIGRhdGUgZm9ybWF0cyBhcmUgJyArXG4gICAgICAgICAgICAnZGlzY291cmFnZWQuIFBsZWFzZSByZWZlciB0byBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2pzLWRhdGUvIGZvciBtb3JlIGluZm8uJyxcbiAgICAgICAgZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUoY29uZmlnLl9pICsgKGNvbmZpZy5fdXNlVVRDID8gJyBVVEMnIDogJycpKTtcbiAgICAgICAgfVxuICAgICk7XG5cbiAgICAvLyBQaWNrIHRoZSBmaXJzdCBkZWZpbmVkIG9mIHR3byBvciB0aHJlZSBhcmd1bWVudHMuXG4gICAgZnVuY3Rpb24gZGVmYXVsdHMoYSwgYiwgYykge1xuICAgICAgICBpZiAoYSAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYiAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjdXJyZW50RGF0ZUFycmF5KGNvbmZpZykge1xuICAgICAgICAvLyBob29rcyBpcyBhY3R1YWxseSB0aGUgZXhwb3J0ZWQgbW9tZW50IG9iamVjdFxuICAgICAgICB2YXIgbm93VmFsdWUgPSBuZXcgRGF0ZShob29rcy5ub3coKSk7XG4gICAgICAgIGlmIChjb25maWcuX3VzZVVUQykge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBub3dWYWx1ZS5nZXRVVENGdWxsWWVhcigpLFxuICAgICAgICAgICAgICAgIG5vd1ZhbHVlLmdldFVUQ01vbnRoKCksXG4gICAgICAgICAgICAgICAgbm93VmFsdWUuZ2V0VVRDRGF0ZSgpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW25vd1ZhbHVlLmdldEZ1bGxZZWFyKCksIG5vd1ZhbHVlLmdldE1vbnRoKCksIG5vd1ZhbHVlLmdldERhdGUoKV07XG4gICAgfVxuXG4gICAgLy8gY29udmVydCBhbiBhcnJheSB0byBhIGRhdGUuXG4gICAgLy8gdGhlIGFycmF5IHNob3VsZCBtaXJyb3IgdGhlIHBhcmFtZXRlcnMgYmVsb3dcbiAgICAvLyBub3RlOiBhbGwgdmFsdWVzIHBhc3QgdGhlIHllYXIgYXJlIG9wdGlvbmFsIGFuZCB3aWxsIGRlZmF1bHQgdG8gdGhlIGxvd2VzdCBwb3NzaWJsZSB2YWx1ZS5cbiAgICAvLyBbeWVhciwgbW9udGgsIGRheSAsIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF1cbiAgICBmdW5jdGlvbiBjb25maWdGcm9tQXJyYXkoY29uZmlnKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIGlucHV0ID0gW10sXG4gICAgICAgICAgICBjdXJyZW50RGF0ZSxcbiAgICAgICAgICAgIGV4cGVjdGVkV2Vla2RheSxcbiAgICAgICAgICAgIHllYXJUb1VzZTtcblxuICAgICAgICBpZiAoY29uZmlnLl9kKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50RGF0ZSA9IGN1cnJlbnREYXRlQXJyYXkoY29uZmlnKTtcblxuICAgICAgICAvL2NvbXB1dGUgZGF5IG9mIHRoZSB5ZWFyIGZyb20gd2Vla3MgYW5kIHdlZWtkYXlzXG4gICAgICAgIGlmIChjb25maWcuX3cgJiYgY29uZmlnLl9hW0RBVEVdID09IG51bGwgJiYgY29uZmlnLl9hW01PTlRIXSA9PSBudWxsKSB7XG4gICAgICAgICAgICBkYXlPZlllYXJGcm9tV2Vla0luZm8oY29uZmlnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vaWYgdGhlIGRheSBvZiB0aGUgeWVhciBpcyBzZXQsIGZpZ3VyZSBvdXQgd2hhdCBpdCBpc1xuICAgICAgICBpZiAoY29uZmlnLl9kYXlPZlllYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgeWVhclRvVXNlID0gZGVmYXVsdHMoY29uZmlnLl9hW1lFQVJdLCBjdXJyZW50RGF0ZVtZRUFSXSk7XG5cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjb25maWcuX2RheU9mWWVhciA+IGRheXNJblllYXIoeWVhclRvVXNlKSB8fFxuICAgICAgICAgICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dEYXlPZlllYXIgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkYXRlID0gY3JlYXRlVVRDRGF0ZSh5ZWFyVG9Vc2UsIDAsIGNvbmZpZy5fZGF5T2ZZZWFyKTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtNT05USF0gPSBkYXRlLmdldFVUQ01vbnRoKCk7XG4gICAgICAgICAgICBjb25maWcuX2FbREFURV0gPSBkYXRlLmdldFVUQ0RhdGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCBkYXRlLlxuICAgICAgICAvLyAqIGlmIG5vIHllYXIsIG1vbnRoLCBkYXkgb2YgbW9udGggYXJlIGdpdmVuLCBkZWZhdWx0IHRvIHRvZGF5XG4gICAgICAgIC8vICogaWYgZGF5IG9mIG1vbnRoIGlzIGdpdmVuLCBkZWZhdWx0IG1vbnRoIGFuZCB5ZWFyXG4gICAgICAgIC8vICogaWYgbW9udGggaXMgZ2l2ZW4sIGRlZmF1bHQgb25seSB5ZWFyXG4gICAgICAgIC8vICogaWYgeWVhciBpcyBnaXZlbiwgZG9uJ3QgZGVmYXVsdCBhbnl0aGluZ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMyAmJiBjb25maWcuX2FbaV0gPT0gbnVsbDsgKytpKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9IGN1cnJlbnREYXRlW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gWmVybyBvdXQgd2hhdGV2ZXIgd2FzIG5vdCBkZWZhdWx0ZWQsIGluY2x1ZGluZyB0aW1lXG4gICAgICAgIGZvciAoOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBjb25maWcuX2FbaV0gPSBpbnB1dFtpXSA9XG4gICAgICAgICAgICAgICAgY29uZmlnLl9hW2ldID09IG51bGwgPyAoaSA9PT0gMiA/IDEgOiAwKSA6IGNvbmZpZy5fYVtpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENoZWNrIGZvciAyNDowMDowMC4wMDBcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID09PSAyNCAmJlxuICAgICAgICAgICAgY29uZmlnLl9hW01JTlVURV0gPT09IDAgJiZcbiAgICAgICAgICAgIGNvbmZpZy5fYVtTRUNPTkRdID09PSAwICYmXG4gICAgICAgICAgICBjb25maWcuX2FbTUlMTElTRUNPTkRdID09PSAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uZmlnLl9uZXh0RGF5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtIT1VSXSA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWcuX2QgPSAoY29uZmlnLl91c2VVVEMgPyBjcmVhdGVVVENEYXRlIDogY3JlYXRlRGF0ZSkuYXBwbHkoXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKTtcbiAgICAgICAgZXhwZWN0ZWRXZWVrZGF5ID0gY29uZmlnLl91c2VVVENcbiAgICAgICAgICAgID8gY29uZmlnLl9kLmdldFVUQ0RheSgpXG4gICAgICAgICAgICA6IGNvbmZpZy5fZC5nZXREYXkoKTtcblxuICAgICAgICAvLyBBcHBseSB0aW1lem9uZSBvZmZzZXQgZnJvbSBpbnB1dC4gVGhlIGFjdHVhbCB1dGNPZmZzZXQgY2FuIGJlIGNoYW5nZWRcbiAgICAgICAgLy8gd2l0aCBwYXJzZVpvbmUuXG4gICAgICAgIGlmIChjb25maWcuX3R6bSAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuX2Quc2V0VVRDTWludXRlcyhjb25maWcuX2QuZ2V0VVRDTWludXRlcygpIC0gY29uZmlnLl90em0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbmZpZy5fbmV4dERheSkge1xuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gMjQ7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjaGVjayBmb3IgbWlzbWF0Y2hpbmcgZGF5IG9mIHdlZWtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl93ICYmXG4gICAgICAgICAgICB0eXBlb2YgY29uZmlnLl93LmQgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgICBjb25maWcuX3cuZCAhPT0gZXhwZWN0ZWRXZWVrZGF5XG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykud2Vla2RheU1pc21hdGNoID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRheU9mWWVhckZyb21XZWVrSW5mbyhjb25maWcpIHtcbiAgICAgICAgdmFyIHcsIHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSwgdGVtcCwgd2Vla2RheU92ZXJmbG93LCBjdXJXZWVrO1xuXG4gICAgICAgIHcgPSBjb25maWcuX3c7XG4gICAgICAgIGlmICh3LkdHICE9IG51bGwgfHwgdy5XICE9IG51bGwgfHwgdy5FICE9IG51bGwpIHtcbiAgICAgICAgICAgIGRvdyA9IDE7XG4gICAgICAgICAgICBkb3kgPSA0O1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBXZSBuZWVkIHRvIHRha2UgdGhlIGN1cnJlbnQgaXNvV2Vla1llYXIsIGJ1dCB0aGF0IGRlcGVuZHMgb25cbiAgICAgICAgICAgIC8vIGhvdyB3ZSBpbnRlcnByZXQgbm93IChsb2NhbCwgdXRjLCBmaXhlZCBvZmZzZXQpLiBTbyBjcmVhdGVcbiAgICAgICAgICAgIC8vIGEgbm93IHZlcnNpb24gb2YgY3VycmVudCBjb25maWcgKHRha2UgbG9jYWwvdXRjL29mZnNldCBmbGFncywgYW5kXG4gICAgICAgICAgICAvLyBjcmVhdGUgbm93KS5cbiAgICAgICAgICAgIHdlZWtZZWFyID0gZGVmYXVsdHMoXG4gICAgICAgICAgICAgICAgdy5HRyxcbiAgICAgICAgICAgICAgICBjb25maWcuX2FbWUVBUl0sXG4gICAgICAgICAgICAgICAgd2Vla09mWWVhcihjcmVhdGVMb2NhbCgpLCAxLCA0KS55ZWFyXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcuVywgMSk7XG4gICAgICAgICAgICB3ZWVrZGF5ID0gZGVmYXVsdHMody5FLCAxKTtcbiAgICAgICAgICAgIGlmICh3ZWVrZGF5IDwgMSB8fCB3ZWVrZGF5ID4gNykge1xuICAgICAgICAgICAgICAgIHdlZWtkYXlPdmVyZmxvdyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkb3cgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3c7XG4gICAgICAgICAgICBkb3kgPSBjb25maWcuX2xvY2FsZS5fd2Vlay5kb3k7XG5cbiAgICAgICAgICAgIGN1cldlZWsgPSB3ZWVrT2ZZZWFyKGNyZWF0ZUxvY2FsKCksIGRvdywgZG95KTtcblxuICAgICAgICAgICAgd2Vla1llYXIgPSBkZWZhdWx0cyh3LmdnLCBjb25maWcuX2FbWUVBUl0sIGN1cldlZWsueWVhcik7XG5cbiAgICAgICAgICAgIC8vIERlZmF1bHQgdG8gY3VycmVudCB3ZWVrLlxuICAgICAgICAgICAgd2VlayA9IGRlZmF1bHRzKHcudywgY3VyV2Vlay53ZWVrKTtcblxuICAgICAgICAgICAgaWYgKHcuZCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gd2Vla2RheSAtLSBsb3cgZGF5IG51bWJlcnMgYXJlIGNvbnNpZGVyZWQgbmV4dCB3ZWVrXG4gICAgICAgICAgICAgICAgd2Vla2RheSA9IHcuZDtcbiAgICAgICAgICAgICAgICBpZiAod2Vla2RheSA8IDAgfHwgd2Vla2RheSA+IDYpIHtcbiAgICAgICAgICAgICAgICAgICAgd2Vla2RheU92ZXJmbG93ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHcuZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gbG9jYWwgd2Vla2RheSAtLSBjb3VudGluZyBzdGFydHMgZnJvbSBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSB3LmUgKyBkb3c7XG4gICAgICAgICAgICAgICAgaWYgKHcuZSA8IDAgfHwgdy5lID4gNikge1xuICAgICAgICAgICAgICAgICAgICB3ZWVrZGF5T3ZlcmZsb3cgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCB0byBiZWdpbm5pbmcgb2Ygd2Vla1xuICAgICAgICAgICAgICAgIHdlZWtkYXkgPSBkb3c7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdlZWsgPCAxIHx8IHdlZWsgPiB3ZWVrc0luWWVhcih3ZWVrWWVhciwgZG93LCBkb3kpKSB7XG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5fb3ZlcmZsb3dXZWVrcyA9IHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAod2Vla2RheU92ZXJmbG93ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLl9vdmVyZmxvd1dlZWtkYXkgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGVtcCA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpO1xuICAgICAgICAgICAgY29uZmlnLl9hW1lFQVJdID0gdGVtcC55ZWFyO1xuICAgICAgICAgICAgY29uZmlnLl9kYXlPZlllYXIgPSB0ZW1wLmRheU9mWWVhcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbnN0YW50IHRoYXQgcmVmZXJzIHRvIHRoZSBJU08gc3RhbmRhcmRcbiAgICBob29rcy5JU09fODYwMSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gY29uc3RhbnQgdGhhdCByZWZlcnMgdG8gdGhlIFJGQyAyODIyIGZvcm1cbiAgICBob29rcy5SRkNfMjgyMiA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgLy8gZGF0ZSBmcm9tIHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZ1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQoY29uZmlnKSB7XG4gICAgICAgIC8vIFRPRE86IE1vdmUgdGhpcyB0byBhbm90aGVyIHBhcnQgb2YgdGhlIGNyZWF0aW9uIGZsb3cgdG8gcHJldmVudCBjaXJjdWxhciBkZXBzXG4gICAgICAgIGlmIChjb25maWcuX2YgPT09IGhvb2tzLklTT184NjAxKSB7XG4gICAgICAgICAgICBjb25maWdGcm9tSVNPKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZy5fZiA9PT0gaG9va3MuUkZDXzI4MjIpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21SRkMyODIyKGNvbmZpZyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uZmlnLl9hID0gW107XG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLmVtcHR5ID0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIGFycmF5IGlzIHVzZWQgdG8gbWFrZSBhIERhdGUsIGVpdGhlciB3aXRoIGBuZXcgRGF0ZWAgb3IgYERhdGUuVVRDYFxuICAgICAgICB2YXIgc3RyaW5nID0gJycgKyBjb25maWcuX2ksXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcGFyc2VkSW5wdXQsXG4gICAgICAgICAgICB0b2tlbnMsXG4gICAgICAgICAgICB0b2tlbixcbiAgICAgICAgICAgIHNraXBwZWQsXG4gICAgICAgICAgICBzdHJpbmdMZW5ndGggPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICAgICAgdG90YWxQYXJzZWRJbnB1dExlbmd0aCA9IDAsXG4gICAgICAgICAgICBlcmEsXG4gICAgICAgICAgICB0b2tlbkxlbjtcblxuICAgICAgICB0b2tlbnMgPVxuICAgICAgICAgICAgZXhwYW5kRm9ybWF0KGNvbmZpZy5fZiwgY29uZmlnLl9sb2NhbGUpLm1hdGNoKGZvcm1hdHRpbmdUb2tlbnMpIHx8IFtdO1xuICAgICAgICB0b2tlbkxlbiA9IHRva2Vucy5sZW5ndGg7XG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0b2tlbkxlbjsgaSsrKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tpXTtcbiAgICAgICAgICAgIHBhcnNlZElucHV0ID0gKHN0cmluZy5tYXRjaChnZXRQYXJzZVJlZ2V4Rm9yVG9rZW4odG9rZW4sIGNvbmZpZykpIHx8XG4gICAgICAgICAgICAgICAgW10pWzBdO1xuICAgICAgICAgICAgaWYgKHBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgc2tpcHBlZCA9IHN0cmluZy5zdWJzdHIoMCwgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnVudXNlZElucHV0LnB1c2goc2tpcHBlZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nLmluZGV4T2YocGFyc2VkSW5wdXQpICsgcGFyc2VkSW5wdXQubGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0b3RhbFBhcnNlZElucHV0TGVuZ3RoICs9IHBhcnNlZElucHV0Lmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGlmIGl0J3Mgbm90IGEga25vd24gdG9rZW5cbiAgICAgICAgICAgIGlmIChmb3JtYXRUb2tlbkZ1bmN0aW9uc1t0b2tlbl0pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkSW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZW1wdHkgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS51bnVzZWRUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGFkZFRpbWVUb0FycmF5RnJvbVRva2VuKHRva2VuLCBwYXJzZWRJbnB1dCwgY29uZmlnKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZmlnLl9zdHJpY3QgJiYgIXBhcnNlZElucHV0KSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkVG9rZW5zLnB1c2godG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gYWRkIHJlbWFpbmluZyB1bnBhcnNlZCBpbnB1dCBsZW5ndGggdG8gdGhlIHN0cmluZ1xuICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5jaGFyc0xlZnRPdmVyID1cbiAgICAgICAgICAgIHN0cmluZ0xlbmd0aCAtIHRvdGFsUGFyc2VkSW5wdXRMZW5ndGg7XG4gICAgICAgIGlmIChzdHJpbmcubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykudW51c2VkSW5wdXQucHVzaChzdHJpbmcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY2xlYXIgXzEyaCBmbGFnIGlmIGhvdXIgaXMgPD0gMTJcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY29uZmlnLl9hW0hPVVJdIDw9IDEyICYmXG4gICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5iaWdIb3VyID09PSB0cnVlICYmXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0gPiAwXG4gICAgICAgICkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuYmlnSG91ciA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGdldFBhcnNpbmdGbGFncyhjb25maWcpLnBhcnNlZERhdGVQYXJ0cyA9IGNvbmZpZy5fYS5zbGljZSgwKTtcbiAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykubWVyaWRpZW0gPSBjb25maWcuX21lcmlkaWVtO1xuICAgICAgICAvLyBoYW5kbGUgbWVyaWRpZW1cbiAgICAgICAgY29uZmlnLl9hW0hPVVJdID0gbWVyaWRpZW1GaXhXcmFwKFxuICAgICAgICAgICAgY29uZmlnLl9sb2NhbGUsXG4gICAgICAgICAgICBjb25maWcuX2FbSE9VUl0sXG4gICAgICAgICAgICBjb25maWcuX21lcmlkaWVtXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gaGFuZGxlIGVyYVxuICAgICAgICBlcmEgPSBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5lcmE7XG4gICAgICAgIGlmIChlcmEgIT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fYVtZRUFSXSA9IGNvbmZpZy5fbG9jYWxlLmVyYXNDb252ZXJ0WWVhcihlcmEsIGNvbmZpZy5fYVtZRUFSXSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgY2hlY2tPdmVyZmxvdyhjb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1lcmlkaWVtRml4V3JhcChsb2NhbGUsIGhvdXIsIG1lcmlkaWVtKSB7XG4gICAgICAgIHZhciBpc1BtO1xuXG4gICAgICAgIGlmIChtZXJpZGllbSA9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBub3RoaW5nIHRvIGRvXG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9jYWxlLm1lcmlkaWVtSG91ciAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gbG9jYWxlLm1lcmlkaWVtSG91cihob3VyLCBtZXJpZGllbSk7XG4gICAgICAgIH0gZWxzZSBpZiAobG9jYWxlLmlzUE0gIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gRmFsbGJhY2tcbiAgICAgICAgICAgIGlzUG0gPSBsb2NhbGUuaXNQTShtZXJpZGllbSk7XG4gICAgICAgICAgICBpZiAoaXNQbSAmJiBob3VyIDwgMTIpIHtcbiAgICAgICAgICAgICAgICBob3VyICs9IDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFpc1BtICYmIGhvdXIgPT09IDEyKSB7XG4gICAgICAgICAgICAgICAgaG91ciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gaG91cjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgbm90IHN1cHBvc2VkIHRvIGhhcHBlblxuICAgICAgICAgICAgcmV0dXJuIGhvdXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkYXRlIGZyb20gc3RyaW5nIGFuZCBhcnJheSBvZiBmb3JtYXQgc3RyaW5nc1xuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpIHtcbiAgICAgICAgdmFyIHRlbXBDb25maWcsXG4gICAgICAgICAgICBiZXN0TW9tZW50LFxuICAgICAgICAgICAgc2NvcmVUb0JlYXQsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgY3VycmVudFNjb3JlLFxuICAgICAgICAgICAgdmFsaWRGb3JtYXRGb3VuZCxcbiAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gZmFsc2UsXG4gICAgICAgICAgICBjb25maWdmTGVuID0gY29uZmlnLl9mLmxlbmd0aDtcblxuICAgICAgICBpZiAoY29uZmlnZkxlbiA9PT0gMCkge1xuICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuaW52YWxpZEZvcm1hdCA9IHRydWU7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShOYU4pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvbmZpZ2ZMZW47IGkrKykge1xuICAgICAgICAgICAgY3VycmVudFNjb3JlID0gMDtcbiAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRlbXBDb25maWcgPSBjb3B5Q29uZmlnKHt9LCBjb25maWcpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5fdXNlVVRDICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0ZW1wQ29uZmlnLl91c2VVVEMgPSBjb25maWcuX3VzZVVUQztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXBDb25maWcuX2YgPSBjb25maWcuX2ZbaV07XG4gICAgICAgICAgICBjb25maWdGcm9tU3RyaW5nQW5kRm9ybWF0KHRlbXBDb25maWcpO1xuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCh0ZW1wQ29uZmlnKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkRm9ybWF0Rm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSBpcyBhbnkgaW5wdXQgdGhhdCB3YXMgbm90IHBhcnNlZCBhZGQgYSBwZW5hbHR5IGZvciB0aGF0IGZvcm1hdFxuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5jaGFyc0xlZnRPdmVyO1xuXG4gICAgICAgICAgICAvL29yIHRva2Vuc1xuICAgICAgICAgICAgY3VycmVudFNjb3JlICs9IGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS51bnVzZWRUb2tlbnMubGVuZ3RoICogMTA7XG5cbiAgICAgICAgICAgIGdldFBhcnNpbmdGbGFncyh0ZW1wQ29uZmlnKS5zY29yZSA9IGN1cnJlbnRTY29yZTtcblxuICAgICAgICAgICAgaWYgKCFiZXN0Rm9ybWF0SXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgc2NvcmVUb0JlYXQgPT0gbnVsbCB8fFxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U2NvcmUgPCBzY29yZVRvQmVhdCB8fFxuICAgICAgICAgICAgICAgICAgICB2YWxpZEZvcm1hdEZvdW5kXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkRm9ybWF0Rm91bmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RGb3JtYXRJc1ZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRTY29yZSA8IHNjb3JlVG9CZWF0KSB7XG4gICAgICAgICAgICAgICAgICAgIHNjb3JlVG9CZWF0ID0gY3VycmVudFNjb3JlO1xuICAgICAgICAgICAgICAgICAgICBiZXN0TW9tZW50ID0gdGVtcENvbmZpZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBleHRlbmQoY29uZmlnLCBiZXN0TW9tZW50IHx8IHRlbXBDb25maWcpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcuX2QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBpID0gbm9ybWFsaXplT2JqZWN0VW5pdHMoY29uZmlnLl9pKSxcbiAgICAgICAgICAgIGRheU9yRGF0ZSA9IGkuZGF5ID09PSB1bmRlZmluZWQgPyBpLmRhdGUgOiBpLmRheTtcbiAgICAgICAgY29uZmlnLl9hID0gbWFwKFxuICAgICAgICAgICAgW2kueWVhciwgaS5tb250aCwgZGF5T3JEYXRlLCBpLmhvdXIsIGkubWludXRlLCBpLnNlY29uZCwgaS5taWxsaXNlY29uZF0sXG4gICAgICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9iaiAmJiBwYXJzZUludChvYmosIDEwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVGcm9tQ29uZmlnKGNvbmZpZykge1xuICAgICAgICB2YXIgcmVzID0gbmV3IE1vbWVudChjaGVja092ZXJmbG93KHByZXBhcmVDb25maWcoY29uZmlnKSkpO1xuICAgICAgICBpZiAocmVzLl9uZXh0RGF5KSB7XG4gICAgICAgICAgICAvLyBBZGRpbmcgaXMgc21hcnQgZW5vdWdoIGFyb3VuZCBEU1RcbiAgICAgICAgICAgIHJlcy5hZGQoMSwgJ2QnKTtcbiAgICAgICAgICAgIHJlcy5fbmV4dERheSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlcGFyZUNvbmZpZyhjb25maWcpIHtcbiAgICAgICAgdmFyIGlucHV0ID0gY29uZmlnLl9pLFxuICAgICAgICAgICAgZm9ybWF0ID0gY29uZmlnLl9mO1xuXG4gICAgICAgIGNvbmZpZy5fbG9jYWxlID0gY29uZmlnLl9sb2NhbGUgfHwgZ2V0TG9jYWxlKGNvbmZpZy5fbCk7XG5cbiAgICAgICAgaWYgKGlucHV0ID09PSBudWxsIHx8IChmb3JtYXQgPT09IHVuZGVmaW5lZCAmJiBpbnB1dCA9PT0gJycpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlSW52YWxpZCh7IG51bGxJbnB1dDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25maWcuX2kgPSBpbnB1dCA9IGNvbmZpZy5fbG9jYWxlLnByZXBhcnNlKGlucHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc01vbWVudChpbnB1dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgTW9tZW50KGNoZWNrT3ZlcmZsb3coaW5wdXQpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBpbnB1dDtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmdBbmRBcnJheShjb25maWcpO1xuICAgICAgICB9IGVsc2UgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgY29uZmlnRnJvbVN0cmluZ0FuZEZvcm1hdChjb25maWcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnRnJvbUlucHV0KGNvbmZpZyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzVmFsaWQoY29uZmlnKSkge1xuICAgICAgICAgICAgY29uZmlnLl9kID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29uZmlnRnJvbUlucHV0KGNvbmZpZykge1xuICAgICAgICB2YXIgaW5wdXQgPSBjb25maWcuX2k7XG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZy5fZCA9IG5ldyBEYXRlKGhvb2tzLm5vdygpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0RhdGUoaW5wdXQpKSB7XG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dC52YWx1ZU9mKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21TdHJpbmcoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgY29uZmlnLl9hID0gbWFwKGlucHV0LnNsaWNlKDApLCBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlSW50KG9iaiwgMTApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWdGcm9tQXJyYXkoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChpbnB1dCkpIHtcbiAgICAgICAgICAgIGNvbmZpZ0Zyb21PYmplY3QoY29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIC8vIGZyb20gbWlsbGlzZWNvbmRzXG4gICAgICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShpbnB1dCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBob29rcy5jcmVhdGVGcm9tSW5wdXRGYWxsYmFjayhjb25maWcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlTG9jYWxPclVUQyhpbnB1dCwgZm9ybWF0LCBsb2NhbGUsIHN0cmljdCwgaXNVVEMpIHtcbiAgICAgICAgdmFyIGMgPSB7fTtcblxuICAgICAgICBpZiAoZm9ybWF0ID09PSB0cnVlIHx8IGZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHN0cmljdCA9IGZvcm1hdDtcbiAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChsb2NhbGUgPT09IHRydWUgfHwgbG9jYWxlID09PSBmYWxzZSkge1xuICAgICAgICAgICAgc3RyaWN0ID0gbG9jYWxlO1xuICAgICAgICAgICAgbG9jYWxlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgKGlzT2JqZWN0KGlucHV0KSAmJiBpc09iamVjdEVtcHR5KGlucHV0KSkgfHxcbiAgICAgICAgICAgIChpc0FycmF5KGlucHV0KSAmJiBpbnB1dC5sZW5ndGggPT09IDApXG4gICAgICAgICkge1xuICAgICAgICAgICAgaW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gb2JqZWN0IGNvbnN0cnVjdGlvbiBtdXN0IGJlIGRvbmUgdGhpcyB3YXkuXG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8xNDIzXG4gICAgICAgIGMuX2lzQU1vbWVudE9iamVjdCA9IHRydWU7XG4gICAgICAgIGMuX3VzZVVUQyA9IGMuX2lzVVRDID0gaXNVVEM7XG4gICAgICAgIGMuX2wgPSBsb2NhbGU7XG4gICAgICAgIGMuX2kgPSBpbnB1dDtcbiAgICAgICAgYy5fZiA9IGZvcm1hdDtcbiAgICAgICAgYy5fc3RyaWN0ID0gc3RyaWN0O1xuXG4gICAgICAgIHJldHVybiBjcmVhdGVGcm9tQ29uZmlnKGMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUxvY2FsKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbE9yVVRDKGlucHV0LCBmb3JtYXQsIGxvY2FsZSwgc3RyaWN0LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgdmFyIHByb3RvdHlwZU1pbiA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5taW4gaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5tYXggaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA8IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICAgIHByb3RvdHlwZU1heCA9IGRlcHJlY2F0ZShcbiAgICAgICAgICAgICdtb21lbnQoKS5tYXggaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudC5taW4gaW5zdGVhZC4gaHR0cDovL21vbWVudGpzLmNvbS9ndWlkZXMvIy93YXJuaW5ncy9taW4tbWF4LycsXG4gICAgICAgICAgICBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIG90aGVyID0gY3JlYXRlTG9jYWwuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKCkgJiYgb3RoZXIuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvdGhlciA+IHRoaXMgPyB0aGlzIDogb3RoZXI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUludmFsaWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG5cbiAgICAvLyBQaWNrIGEgbW9tZW50IG0gZnJvbSBtb21lbnRzIHNvIHRoYXQgbVtmbl0ob3RoZXIpIGlzIHRydWUgZm9yIGFsbFxuICAgIC8vIG90aGVyLiBUaGlzIHJlbGllcyBvbiB0aGUgZnVuY3Rpb24gZm4gdG8gYmUgdHJhbnNpdGl2ZS5cbiAgICAvL1xuICAgIC8vIG1vbWVudHMgc2hvdWxkIGVpdGhlciBiZSBhbiBhcnJheSBvZiBtb21lbnQgb2JqZWN0cyBvciBhbiBhcnJheSwgd2hvc2VcbiAgICAvLyBmaXJzdCBlbGVtZW50IGlzIGFuIGFycmF5IG9mIG1vbWVudCBvYmplY3RzLlxuICAgIGZ1bmN0aW9uIHBpY2tCeShmbiwgbW9tZW50cykge1xuICAgICAgICB2YXIgcmVzLCBpO1xuICAgICAgICBpZiAobW9tZW50cy5sZW5ndGggPT09IDEgJiYgaXNBcnJheShtb21lbnRzWzBdKSkge1xuICAgICAgICAgICAgbW9tZW50cyA9IG1vbWVudHNbMF07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtb21lbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVzID0gbW9tZW50c1swXTtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IG1vbWVudHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmICghbW9tZW50c1tpXS5pc1ZhbGlkKCkgfHwgbW9tZW50c1tpXVtmbl0ocmVzKSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IG1vbWVudHNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICAvLyBUT0RPOiBVc2UgW10uc29ydCBpbnN0ZWFkP1xuICAgIGZ1bmN0aW9uIG1pbigpIHtcbiAgICAgICAgdmFyIGFyZ3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMCk7XG5cbiAgICAgICAgcmV0dXJuIHBpY2tCeSgnaXNCZWZvcmUnLCBhcmdzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXgoKSB7XG4gICAgICAgIHZhciBhcmdzID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDApO1xuXG4gICAgICAgIHJldHVybiBwaWNrQnkoJ2lzQWZ0ZXInLCBhcmdzKTtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogK25ldyBEYXRlKCk7XG4gICAgfTtcblxuICAgIHZhciBvcmRlcmluZyA9IFtcbiAgICAgICAgJ3llYXInLFxuICAgICAgICAncXVhcnRlcicsXG4gICAgICAgICdtb250aCcsXG4gICAgICAgICd3ZWVrJyxcbiAgICAgICAgJ2RheScsXG4gICAgICAgICdob3VyJyxcbiAgICAgICAgJ21pbnV0ZScsXG4gICAgICAgICdzZWNvbmQnLFxuICAgICAgICAnbWlsbGlzZWNvbmQnLFxuICAgIF07XG5cbiAgICBmdW5jdGlvbiBpc0R1cmF0aW9uVmFsaWQobSkge1xuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgdW5pdEhhc0RlY2ltYWwgPSBmYWxzZSxcbiAgICAgICAgICAgIGksXG4gICAgICAgICAgICBvcmRlckxlbiA9IG9yZGVyaW5nLmxlbmd0aDtcbiAgICAgICAgZm9yIChrZXkgaW4gbSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGhhc093blByb3AobSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgICAgIGluZGV4T2YuY2FsbChvcmRlcmluZywga2V5KSAhPT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgKG1ba2V5XSA9PSBudWxsIHx8ICFpc05hTihtW2tleV0pKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBvcmRlckxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAobVtvcmRlcmluZ1tpXV0pIHtcbiAgICAgICAgICAgICAgICBpZiAodW5pdEhhc0RlY2ltYWwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBvbmx5IGFsbG93IG5vbi1pbnRlZ2VycyBmb3Igc21hbGxlc3QgdW5pdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocGFyc2VGbG9hdChtW29yZGVyaW5nW2ldXSkgIT09IHRvSW50KG1bb3JkZXJpbmdbaV1dKSkge1xuICAgICAgICAgICAgICAgICAgICB1bml0SGFzRGVjaW1hbCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQxKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faXNWYWxpZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnZhbGlkJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbihOYU4pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIER1cmF0aW9uKGR1cmF0aW9uKSB7XG4gICAgICAgIHZhciBub3JtYWxpemVkSW5wdXQgPSBub3JtYWxpemVPYmplY3RVbml0cyhkdXJhdGlvbiksXG4gICAgICAgICAgICB5ZWFycyA9IG5vcm1hbGl6ZWRJbnB1dC55ZWFyIHx8IDAsXG4gICAgICAgICAgICBxdWFydGVycyA9IG5vcm1hbGl6ZWRJbnB1dC5xdWFydGVyIHx8IDAsXG4gICAgICAgICAgICBtb250aHMgPSBub3JtYWxpemVkSW5wdXQubW9udGggfHwgMCxcbiAgICAgICAgICAgIHdlZWtzID0gbm9ybWFsaXplZElucHV0LndlZWsgfHwgbm9ybWFsaXplZElucHV0Lmlzb1dlZWsgfHwgMCxcbiAgICAgICAgICAgIGRheXMgPSBub3JtYWxpemVkSW5wdXQuZGF5IHx8IDAsXG4gICAgICAgICAgICBob3VycyA9IG5vcm1hbGl6ZWRJbnB1dC5ob3VyIHx8IDAsXG4gICAgICAgICAgICBtaW51dGVzID0gbm9ybWFsaXplZElucHV0Lm1pbnV0ZSB8fCAwLFxuICAgICAgICAgICAgc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5zZWNvbmQgfHwgMCxcbiAgICAgICAgICAgIG1pbGxpc2Vjb25kcyA9IG5vcm1hbGl6ZWRJbnB1dC5taWxsaXNlY29uZCB8fCAwO1xuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBpc0R1cmF0aW9uVmFsaWQobm9ybWFsaXplZElucHV0KTtcblxuICAgICAgICAvLyByZXByZXNlbnRhdGlvbiBmb3IgZGF0ZUFkZFJlbW92ZVxuICAgICAgICB0aGlzLl9taWxsaXNlY29uZHMgPVxuICAgICAgICAgICAgK21pbGxpc2Vjb25kcyArXG4gICAgICAgICAgICBzZWNvbmRzICogMWUzICsgLy8gMTAwMFxuICAgICAgICAgICAgbWludXRlcyAqIDZlNCArIC8vIDEwMDAgKiA2MFxuICAgICAgICAgICAgaG91cnMgKiAxMDAwICogNjAgKiA2MDsgLy91c2luZyAxMDAwICogNjAgKiA2MCBpbnN0ZWFkIG9mIDM2ZTUgdG8gYXZvaWQgZmxvYXRpbmcgcG9pbnQgcm91bmRpbmcgZXJyb3JzIGh0dHBzOi8vZ2l0aHViLmNvbS9tb21lbnQvbW9tZW50L2lzc3Vlcy8yOTc4XG4gICAgICAgIC8vIEJlY2F1c2Ugb2YgZGF0ZUFkZFJlbW92ZSB0cmVhdHMgMjQgaG91cnMgYXMgZGlmZmVyZW50IGZyb20gYVxuICAgICAgICAvLyBkYXkgd2hlbiB3b3JraW5nIGFyb3VuZCBEU1QsIHdlIG5lZWQgdG8gc3RvcmUgdGhlbSBzZXBhcmF0ZWx5XG4gICAgICAgIHRoaXMuX2RheXMgPSArZGF5cyArIHdlZWtzICogNztcbiAgICAgICAgLy8gSXQgaXMgaW1wb3NzaWJsZSB0byB0cmFuc2xhdGUgbW9udGhzIGludG8gZGF5cyB3aXRob3V0IGtub3dpbmdcbiAgICAgICAgLy8gd2hpY2ggbW9udGhzIHlvdSBhcmUgYXJlIHRhbGtpbmcgYWJvdXQsIHNvIHdlIGhhdmUgdG8gc3RvcmVcbiAgICAgICAgLy8gaXQgc2VwYXJhdGVseS5cbiAgICAgICAgdGhpcy5fbW9udGhzID0gK21vbnRocyArIHF1YXJ0ZXJzICogMyArIHllYXJzICogMTI7XG5cbiAgICAgICAgdGhpcy5fZGF0YSA9IHt9O1xuXG4gICAgICAgIHRoaXMuX2xvY2FsZSA9IGdldExvY2FsZSgpO1xuXG4gICAgICAgIHRoaXMuX2J1YmJsZSgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRHVyYXRpb24ob2JqKSB7XG4gICAgICAgIHJldHVybiBvYmogaW5zdGFuY2VvZiBEdXJhdGlvbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhYnNSb3VuZChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKC0xICogbnVtYmVyKSAqIC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobnVtYmVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGNvbXBhcmUgdHdvIGFycmF5cywgcmV0dXJuIHRoZSBudW1iZXIgb2YgZGlmZmVyZW5jZXNcbiAgICBmdW5jdGlvbiBjb21wYXJlQXJyYXlzKGFycmF5MSwgYXJyYXkyLCBkb250Q29udmVydCkge1xuICAgICAgICB2YXIgbGVuID0gTWF0aC5taW4oYXJyYXkxLmxlbmd0aCwgYXJyYXkyLmxlbmd0aCksXG4gICAgICAgICAgICBsZW5ndGhEaWZmID0gTWF0aC5hYnMoYXJyYXkxLmxlbmd0aCAtIGFycmF5Mi5sZW5ndGgpLFxuICAgICAgICAgICAgZGlmZnMgPSAwLFxuICAgICAgICAgICAgaTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgKGRvbnRDb252ZXJ0ICYmIGFycmF5MVtpXSAhPT0gYXJyYXkyW2ldKSB8fFxuICAgICAgICAgICAgICAgICghZG9udENvbnZlcnQgJiYgdG9JbnQoYXJyYXkxW2ldKSAhPT0gdG9JbnQoYXJyYXkyW2ldKSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGRpZmZzKys7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpZmZzICsgbGVuZ3RoRGlmZjtcbiAgICB9XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBmdW5jdGlvbiBvZmZzZXQodG9rZW4sIHNlcGFyYXRvcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbih0b2tlbiwgMCwgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMudXRjT2Zmc2V0KCksXG4gICAgICAgICAgICAgICAgc2lnbiA9ICcrJztcbiAgICAgICAgICAgIGlmIChvZmZzZXQgPCAwKSB7XG4gICAgICAgICAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDtcbiAgICAgICAgICAgICAgICBzaWduID0gJy0nO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICBzaWduICtcbiAgICAgICAgICAgICAgICB6ZXJvRmlsbCh+fihvZmZzZXQgLyA2MCksIDIpICtcbiAgICAgICAgICAgICAgICBzZXBhcmF0b3IgK1xuICAgICAgICAgICAgICAgIHplcm9GaWxsKH5+b2Zmc2V0ICUgNjAsIDIpXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvZmZzZXQoJ1onLCAnOicpO1xuICAgIG9mZnNldCgnWlonLCAnJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdaJywgbWF0Y2hTaG9ydE9mZnNldCk7XG4gICAgYWRkUmVnZXhUb2tlbignWlonLCBtYXRjaFNob3J0T2Zmc2V0KTtcbiAgICBhZGRQYXJzZVRva2VuKFsnWicsICdaWiddLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl91c2VVVEMgPSB0cnVlO1xuICAgICAgICBjb25maWcuX3R6bSA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gdGltZXpvbmUgY2h1bmtlclxuICAgIC8vICcrMTA6MDAnID4gWycxMCcsICAnMDAnXVxuICAgIC8vICctMTUzMCcgID4gWyctMTUnLCAnMzAnXVxuICAgIHZhciBjaHVua09mZnNldCA9IC8oW1xcK1xcLV18XFxkXFxkKS9naTtcblxuICAgIGZ1bmN0aW9uIG9mZnNldEZyb21TdHJpbmcobWF0Y2hlciwgc3RyaW5nKSB7XG4gICAgICAgIHZhciBtYXRjaGVzID0gKHN0cmluZyB8fCAnJykubWF0Y2gobWF0Y2hlciksXG4gICAgICAgICAgICBjaHVuayxcbiAgICAgICAgICAgIHBhcnRzLFxuICAgICAgICAgICAgbWludXRlcztcblxuICAgICAgICBpZiAobWF0Y2hlcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjaHVuayA9IG1hdGNoZXNbbWF0Y2hlcy5sZW5ndGggLSAxXSB8fCBbXTtcbiAgICAgICAgcGFydHMgPSAoY2h1bmsgKyAnJykubWF0Y2goY2h1bmtPZmZzZXQpIHx8IFsnLScsIDAsIDBdO1xuICAgICAgICBtaW51dGVzID0gKyhwYXJ0c1sxXSAqIDYwKSArIHRvSW50KHBhcnRzWzJdKTtcblxuICAgICAgICByZXR1cm4gbWludXRlcyA9PT0gMCA/IDAgOiBwYXJ0c1swXSA9PT0gJysnID8gbWludXRlcyA6IC1taW51dGVzO1xuICAgIH1cblxuICAgIC8vIFJldHVybiBhIG1vbWVudCBmcm9tIGlucHV0LCB0aGF0IGlzIGxvY2FsL3V0Yy96b25lIGVxdWl2YWxlbnQgdG8gbW9kZWwuXG4gICAgZnVuY3Rpb24gY2xvbmVXaXRoT2Zmc2V0KGlucHV0LCBtb2RlbCkge1xuICAgICAgICB2YXIgcmVzLCBkaWZmO1xuICAgICAgICBpZiAobW9kZWwuX2lzVVRDKSB7XG4gICAgICAgICAgICByZXMgPSBtb2RlbC5jbG9uZSgpO1xuICAgICAgICAgICAgZGlmZiA9XG4gICAgICAgICAgICAgICAgKGlzTW9tZW50KGlucHV0KSB8fCBpc0RhdGUoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQudmFsdWVPZigpXG4gICAgICAgICAgICAgICAgICAgIDogY3JlYXRlTG9jYWwoaW5wdXQpLnZhbHVlT2YoKSkgLSByZXMudmFsdWVPZigpO1xuICAgICAgICAgICAgLy8gVXNlIGxvdy1sZXZlbCBhcGksIGJlY2F1c2UgdGhpcyBmbiBpcyBsb3ctbGV2ZWwgYXBpLlxuICAgICAgICAgICAgcmVzLl9kLnNldFRpbWUocmVzLl9kLnZhbHVlT2YoKSArIGRpZmYpO1xuICAgICAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHJlcywgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCkubG9jYWwoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldERhdGVPZmZzZXQobSkge1xuICAgICAgICAvLyBPbiBGaXJlZm94LjI0IERhdGUjZ2V0VGltZXpvbmVPZmZzZXQgcmV0dXJucyBhIGZsb2F0aW5nIHBvaW50LlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW9tZW50L21vbWVudC9wdWxsLzE4NzFcbiAgICAgICAgcmV0dXJuIC1NYXRoLnJvdW5kKG0uX2QuZ2V0VGltZXpvbmVPZmZzZXQoKSk7XG4gICAgfVxuXG4gICAgLy8gSE9PS1NcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgYSBtb21lbnQgaXMgbXV0YXRlZC5cbiAgICAvLyBJdCBpcyBpbnRlbmRlZCB0byBrZWVwIHRoZSBvZmZzZXQgaW4gc3luYyB3aXRoIHRoZSB0aW1lem9uZS5cbiAgICBob29rcy51cGRhdGVPZmZzZXQgPSBmdW5jdGlvbiAoKSB7fTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIC8vIGtlZXBMb2NhbFRpbWUgPSB0cnVlIG1lYW5zIG9ubHkgY2hhbmdlIHRoZSB0aW1lem9uZSwgd2l0aG91dFxuICAgIC8vIGFmZmVjdGluZyB0aGUgbG9jYWwgaG91ci4gU28gNTozMToyNiArMDMwMCAtLVt1dGNPZmZzZXQoMiwgdHJ1ZSldLS0+XG4gICAgLy8gNTozMToyNiArMDIwMCBJdCBpcyBwb3NzaWJsZSB0aGF0IDU6MzE6MjYgZG9lc24ndCBleGlzdCB3aXRoIG9mZnNldFxuICAgIC8vICswMjAwLCBzbyB3ZSBhZGp1c3QgdGhlIHRpbWUgYXMgbmVlZGVkLCB0byBiZSB2YWxpZC5cbiAgICAvL1xuICAgIC8vIEtlZXBpbmcgdGhlIHRpbWUgYWN0dWFsbHkgYWRkcy9zdWJ0cmFjdHMgKG9uZSBob3VyKVxuICAgIC8vIGZyb20gdGhlIGFjdHVhbCByZXByZXNlbnRlZCB0aW1lLiBUaGF0IGlzIHdoeSB3ZSBjYWxsIHVwZGF0ZU9mZnNldFxuICAgIC8vIGEgc2Vjb25kIHRpbWUuIEluIGNhc2UgaXQgd2FudHMgdXMgdG8gY2hhbmdlIHRoZSBvZmZzZXQgYWdhaW5cbiAgICAvLyBfY2hhbmdlSW5Qcm9ncmVzcyA9PSB0cnVlIGNhc2UsIHRoZW4gd2UgaGF2ZSB0byBhZGp1c3QsIGJlY2F1c2VcbiAgICAvLyB0aGVyZSBpcyBubyBzdWNoIHRpbWUgaW4gdGhlIGdpdmVuIHRpbWV6b25lLlxuICAgIGZ1bmN0aW9uIGdldFNldE9mZnNldChpbnB1dCwga2VlcExvY2FsVGltZSwga2VlcE1pbnV0ZXMpIHtcbiAgICAgICAgdmFyIG9mZnNldCA9IHRoaXMuX29mZnNldCB8fCAwLFxuICAgICAgICAgICAgbG9jYWxBZGp1c3Q7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dCAhPSBudWxsID8gdGhpcyA6IE5hTjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaW5wdXQgIT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG9mZnNldEZyb21TdHJpbmcobWF0Y2hTaG9ydE9mZnNldCwgaW5wdXQpO1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGlucHV0KSA8IDE2ICYmICFrZWVwTWludXRlcykge1xuICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQgKiA2MDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5faXNVVEMgJiYga2VlcExvY2FsVGltZSkge1xuICAgICAgICAgICAgICAgIGxvY2FsQWRqdXN0ID0gZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX29mZnNldCA9IGlucHV0O1xuICAgICAgICAgICAgdGhpcy5faXNVVEMgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKGxvY2FsQWRqdXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZChsb2NhbEFkanVzdCwgJ20nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvZmZzZXQgIT09IGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFrZWVwTG9jYWxUaW1lIHx8IHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkU3VidHJhY3QoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRHVyYXRpb24oaW5wdXQgLSBvZmZzZXQsICdtJyksXG4gICAgICAgICAgICAgICAgICAgICAgICAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jaGFuZ2VJblByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5nZUluUHJvZ3Jlc3MgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2lzVVRDID8gb2Zmc2V0IDogZ2V0RGF0ZU9mZnNldCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFpvbmUoaW5wdXQsIGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKGlucHV0ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQgPSAtaW5wdXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KGlucHV0LCBrZWVwTG9jYWxUaW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gLXRoaXMudXRjT2Zmc2V0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb1VUQyhrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRPZmZzZXRUb0xvY2FsKGtlZXBMb2NhbFRpbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVVRDKSB7XG4gICAgICAgICAgICB0aGlzLnV0Y09mZnNldCgwLCBrZWVwTG9jYWxUaW1lKTtcbiAgICAgICAgICAgIHRoaXMuX2lzVVRDID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChrZWVwTG9jYWxUaW1lKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJ0cmFjdChnZXREYXRlT2Zmc2V0KHRoaXMpLCAnbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNldE9mZnNldFRvUGFyc2VkT2Zmc2V0KCkge1xuICAgICAgICBpZiAodGhpcy5fdHptICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRoaXMuX3R6bSwgZmFsc2UsIHRydWUpO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIHRab25lID0gb2Zmc2V0RnJvbVN0cmluZyhtYXRjaE9mZnNldCwgdGhpcy5faSk7XG4gICAgICAgICAgICBpZiAodFpvbmUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMudXRjT2Zmc2V0KHRab25lKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoMCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaGFzQWxpZ25lZEhvdXJPZmZzZXQoaW5wdXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlucHV0ID0gaW5wdXQgPyBjcmVhdGVMb2NhbChpbnB1dCkudXRjT2Zmc2V0KCkgOiAwO1xuXG4gICAgICAgIHJldHVybiAodGhpcy51dGNPZmZzZXQoKSAtIGlucHV0KSAlIDYwID09PSAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCgwKS51dGNPZmZzZXQoKSB8fFxuICAgICAgICAgICAgdGhpcy51dGNPZmZzZXQoKSA+IHRoaXMuY2xvbmUoKS5tb250aCg1KS51dGNPZmZzZXQoKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZCgpIHtcbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZCh0aGlzLl9pc0RTVFNoaWZ0ZWQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faXNEU1RTaGlmdGVkO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGMgPSB7fSxcbiAgICAgICAgICAgIG90aGVyO1xuXG4gICAgICAgIGNvcHlDb25maWcoYywgdGhpcyk7XG4gICAgICAgIGMgPSBwcmVwYXJlQ29uZmlnKGMpO1xuXG4gICAgICAgIGlmIChjLl9hKSB7XG4gICAgICAgICAgICBvdGhlciA9IGMuX2lzVVRDID8gY3JlYXRlVVRDKGMuX2EpIDogY3JlYXRlTG9jYWwoYy5fYSk7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPVxuICAgICAgICAgICAgICAgIHRoaXMuaXNWYWxpZCgpICYmIGNvbXBhcmVBcnJheXMoYy5fYSwgb3RoZXIudG9BcnJheSgpKSA+IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9pc0RTVFNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9pc0RTVFNoaWZ0ZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNMb2NhbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gIXRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGNPZmZzZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDIDogZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNVdGMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2lzVVRDICYmIHRoaXMuX29mZnNldCA9PT0gMCA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIEFTUC5ORVQganNvbiBkYXRlIGZvcm1hdCByZWdleFxuICAgIHZhciBhc3BOZXRSZWdleCA9IC9eKC18XFwrKT8oPzooXFxkKilbLiBdKT8oXFxkKyk6KFxcZCspKD86OihcXGQrKShcXC5cXGQqKT8pPyQvLFxuICAgICAgICAvLyBmcm9tIGh0dHA6Ly9kb2NzLmNsb3N1cmUtbGlicmFyeS5nb29nbGVjb2RlLmNvbS9naXQvY2xvc3VyZV9nb29nX2RhdGVfZGF0ZS5qcy5zb3VyY2UuaHRtbFxuICAgICAgICAvLyBzb21ld2hhdCBtb3JlIGluIGxpbmUgd2l0aCA0LjQuMy4yIDIwMDQgc3BlYywgYnV0IGFsbG93cyBkZWNpbWFsIGFueXdoZXJlXG4gICAgICAgIC8vIGFuZCBmdXJ0aGVyIG1vZGlmaWVkIHRvIGFsbG93IGZvciBzdHJpbmdzIGNvbnRhaW5pbmcgYm90aCB3ZWVrIGFuZCBkYXlcbiAgICAgICAgaXNvUmVnZXggPVxuICAgICAgICAgICAgL14oLXxcXCspP1AoPzooWy0rXT9bMC05LC5dKilZKT8oPzooWy0rXT9bMC05LC5dKilNKT8oPzooWy0rXT9bMC05LC5dKilXKT8oPzooWy0rXT9bMC05LC5dKilEKT8oPzpUKD86KFstK10/WzAtOSwuXSopSCk/KD86KFstK10/WzAtOSwuXSopTSk/KD86KFstK10/WzAtOSwuXSopUyk/KT8kLztcblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUR1cmF0aW9uKGlucHV0LCBrZXkpIHtcbiAgICAgICAgdmFyIGR1cmF0aW9uID0gaW5wdXQsXG4gICAgICAgICAgICAvLyBtYXRjaGluZyBhZ2FpbnN0IHJlZ2V4cCBpcyBleHBlbnNpdmUsIGRvIGl0IG9uIGRlbWFuZFxuICAgICAgICAgICAgbWF0Y2ggPSBudWxsLFxuICAgICAgICAgICAgc2lnbixcbiAgICAgICAgICAgIHJldCxcbiAgICAgICAgICAgIGRpZmZSZXM7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpKSB7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICBtczogaW5wdXQuX21pbGxpc2Vjb25kcyxcbiAgICAgICAgICAgICAgICBkOiBpbnB1dC5fZGF5cyxcbiAgICAgICAgICAgICAgICBNOiBpbnB1dC5fbW9udGhzLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChpc051bWJlcihpbnB1dCkgfHwgIWlzTmFOKCtpbnB1dCkpIHtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge307XG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb25ba2V5XSA9ICtpbnB1dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZHVyYXRpb24ubWlsbGlzZWNvbmRzID0gK2lucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKChtYXRjaCA9IGFzcE5ldFJlZ2V4LmV4ZWMoaW5wdXQpKSkge1xuICAgICAgICAgICAgc2lnbiA9IG1hdGNoWzFdID09PSAnLScgPyAtMSA6IDE7XG4gICAgICAgICAgICBkdXJhdGlvbiA9IHtcbiAgICAgICAgICAgICAgICB5OiAwLFxuICAgICAgICAgICAgICAgIGQ6IHRvSW50KG1hdGNoW0RBVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgaDogdG9JbnQobWF0Y2hbSE9VUl0pICogc2lnbixcbiAgICAgICAgICAgICAgICBtOiB0b0ludChtYXRjaFtNSU5VVEVdKSAqIHNpZ24sXG4gICAgICAgICAgICAgICAgczogdG9JbnQobWF0Y2hbU0VDT05EXSkgKiBzaWduLFxuICAgICAgICAgICAgICAgIG1zOiB0b0ludChhYnNSb3VuZChtYXRjaFtNSUxMSVNFQ09ORF0gKiAxMDAwKSkgKiBzaWduLCAvLyB0aGUgbWlsbGlzZWNvbmQgZGVjaW1hbCBwb2ludCBpcyBpbmNsdWRlZCBpbiB0aGUgbWF0Y2hcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoKG1hdGNoID0gaXNvUmVnZXguZXhlYyhpbnB1dCkpKSB7XG4gICAgICAgICAgICBzaWduID0gbWF0Y2hbMV0gPT09ICctJyA/IC0xIDogMTtcbiAgICAgICAgICAgIGR1cmF0aW9uID0ge1xuICAgICAgICAgICAgICAgIHk6IHBhcnNlSXNvKG1hdGNoWzJdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBNOiBwYXJzZUlzbyhtYXRjaFszXSwgc2lnbiksXG4gICAgICAgICAgICAgICAgdzogcGFyc2VJc28obWF0Y2hbNF0sIHNpZ24pLFxuICAgICAgICAgICAgICAgIGQ6IHBhcnNlSXNvKG1hdGNoWzVdLCBzaWduKSxcbiAgICAgICAgICAgICAgICBoOiBwYXJzZUlzbyhtYXRjaFs2XSwgc2lnbiksXG4gICAgICAgICAgICAgICAgbTogcGFyc2VJc28obWF0Y2hbN10sIHNpZ24pLFxuICAgICAgICAgICAgICAgIHM6IHBhcnNlSXNvKG1hdGNoWzhdLCBzaWduKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZHVyYXRpb24gPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gY2hlY2tzIGZvciBudWxsIG9yIHVuZGVmaW5lZFxuICAgICAgICAgICAgZHVyYXRpb24gPSB7fTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBkdXJhdGlvbiA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgICgnZnJvbScgaW4gZHVyYXRpb24gfHwgJ3RvJyBpbiBkdXJhdGlvbilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkaWZmUmVzID0gbW9tZW50c0RpZmZlcmVuY2UoXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24uZnJvbSksXG4gICAgICAgICAgICAgICAgY3JlYXRlTG9jYWwoZHVyYXRpb24udG8pXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkdXJhdGlvbiA9IHt9O1xuICAgICAgICAgICAgZHVyYXRpb24ubXMgPSBkaWZmUmVzLm1pbGxpc2Vjb25kcztcbiAgICAgICAgICAgIGR1cmF0aW9uLk0gPSBkaWZmUmVzLm1vbnRocztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldCA9IG5ldyBEdXJhdGlvbihkdXJhdGlvbik7XG5cbiAgICAgICAgaWYgKGlzRHVyYXRpb24oaW5wdXQpICYmIGhhc093blByb3AoaW5wdXQsICdfbG9jYWxlJykpIHtcbiAgICAgICAgICAgIHJldC5fbG9jYWxlID0gaW5wdXQuX2xvY2FsZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0R1cmF0aW9uKGlucHV0KSAmJiBoYXNPd25Qcm9wKGlucHV0LCAnX2lzVmFsaWQnKSkge1xuICAgICAgICAgICAgcmV0Ll9pc1ZhbGlkID0gaW5wdXQuX2lzVmFsaWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmV0O1xuICAgIH1cblxuICAgIGNyZWF0ZUR1cmF0aW9uLmZuID0gRHVyYXRpb24ucHJvdG90eXBlO1xuICAgIGNyZWF0ZUR1cmF0aW9uLmludmFsaWQgPSBjcmVhdGVJbnZhbGlkJDE7XG5cbiAgICBmdW5jdGlvbiBwYXJzZUlzbyhpbnAsIHNpZ24pIHtcbiAgICAgICAgLy8gV2UnZCBub3JtYWxseSB1c2Ugfn5pbnAgZm9yIHRoaXMsIGJ1dCB1bmZvcnR1bmF0ZWx5IGl0IGFsc29cbiAgICAgICAgLy8gY29udmVydHMgZmxvYXRzIHRvIGludHMuXG4gICAgICAgIC8vIGlucCBtYXkgYmUgdW5kZWZpbmVkLCBzbyBjYXJlZnVsIGNhbGxpbmcgcmVwbGFjZSBvbiBpdC5cbiAgICAgICAgdmFyIHJlcyA9IGlucCAmJiBwYXJzZUZsb2F0KGlucC5yZXBsYWNlKCcsJywgJy4nKSk7XG4gICAgICAgIC8vIGFwcGx5IHNpZ24gd2hpbGUgd2UncmUgYXQgaXRcbiAgICAgICAgcmV0dXJuIChpc05hTihyZXMpID8gMCA6IHJlcykgKiBzaWduO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpIHtcbiAgICAgICAgdmFyIHJlcyA9IHt9O1xuXG4gICAgICAgIHJlcy5tb250aHMgPVxuICAgICAgICAgICAgb3RoZXIubW9udGgoKSAtIGJhc2UubW9udGgoKSArIChvdGhlci55ZWFyKCkgLSBiYXNlLnllYXIoKSkgKiAxMjtcbiAgICAgICAgaWYgKGJhc2UuY2xvbmUoKS5hZGQocmVzLm1vbnRocywgJ00nKS5pc0FmdGVyKG90aGVyKSkge1xuICAgICAgICAgICAgLS1yZXMubW9udGhzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzLm1pbGxpc2Vjb25kcyA9ICtvdGhlciAtICtiYXNlLmNsb25lKCkuYWRkKHJlcy5tb250aHMsICdNJyk7XG5cbiAgICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtb21lbnRzRGlmZmVyZW5jZShiYXNlLCBvdGhlcikge1xuICAgICAgICB2YXIgcmVzO1xuICAgICAgICBpZiAoIShiYXNlLmlzVmFsaWQoKSAmJiBvdGhlci5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtaWxsaXNlY29uZHM6IDAsIG1vbnRoczogMCB9O1xuICAgICAgICB9XG5cbiAgICAgICAgb3RoZXIgPSBjbG9uZVdpdGhPZmZzZXQob3RoZXIsIGJhc2UpO1xuICAgICAgICBpZiAoYmFzZS5pc0JlZm9yZShvdGhlcikpIHtcbiAgICAgICAgICAgIHJlcyA9IHBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UoYmFzZSwgb3RoZXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzID0gcG9zaXRpdmVNb21lbnRzRGlmZmVyZW5jZShvdGhlciwgYmFzZSk7XG4gICAgICAgICAgICByZXMubWlsbGlzZWNvbmRzID0gLXJlcy5taWxsaXNlY29uZHM7XG4gICAgICAgICAgICByZXMubW9udGhzID0gLXJlcy5tb250aHM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHJlbW92ZSAnbmFtZScgYXJnIGFmdGVyIGRlcHJlY2F0aW9uIGlzIHJlbW92ZWRcbiAgICBmdW5jdGlvbiBjcmVhdGVBZGRlcihkaXJlY3Rpb24sIG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICh2YWwsIHBlcmlvZCkge1xuICAgICAgICAgICAgdmFyIGR1ciwgdG1wO1xuICAgICAgICAgICAgLy9pbnZlcnQgdGhlIGFyZ3VtZW50cywgYnV0IGNvbXBsYWluIGFib3V0IGl0XG4gICAgICAgICAgICBpZiAocGVyaW9kICE9PSBudWxsICYmICFpc05hTigrcGVyaW9kKSkge1xuICAgICAgICAgICAgICAgIGRlcHJlY2F0ZVNpbXBsZShcbiAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgJ21vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKHBlcmlvZCwgbnVtYmVyKSBpcyBkZXByZWNhdGVkLiBQbGVhc2UgdXNlIG1vbWVudCgpLicgK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSArXG4gICAgICAgICAgICAgICAgICAgICAgICAnKG51bWJlciwgcGVyaW9kKS4gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAnU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vZ3VpZGVzLyMvd2FybmluZ3MvYWRkLWludmVydGVkLXBhcmFtLyBmb3IgbW9yZSBpbmZvLidcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHRtcCA9IHZhbDtcbiAgICAgICAgICAgICAgICB2YWwgPSBwZXJpb2Q7XG4gICAgICAgICAgICAgICAgcGVyaW9kID0gdG1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBkdXIgPSBjcmVhdGVEdXJhdGlvbih2YWwsIHBlcmlvZCk7XG4gICAgICAgICAgICBhZGRTdWJ0cmFjdCh0aGlzLCBkdXIsIGRpcmVjdGlvbik7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRTdWJ0cmFjdChtb20sIGR1cmF0aW9uLCBpc0FkZGluZywgdXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSBkdXJhdGlvbi5fbWlsbGlzZWNvbmRzLFxuICAgICAgICAgICAgZGF5cyA9IGFic1JvdW5kKGR1cmF0aW9uLl9kYXlzKSxcbiAgICAgICAgICAgIG1vbnRocyA9IGFic1JvdW5kKGR1cmF0aW9uLl9tb250aHMpO1xuXG4gICAgICAgIGlmICghbW9tLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgLy8gTm8gb3BcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHVwZGF0ZU9mZnNldCA9IHVwZGF0ZU9mZnNldCA9PSBudWxsID8gdHJ1ZSA6IHVwZGF0ZU9mZnNldDtcblxuICAgICAgICBpZiAobW9udGhzKSB7XG4gICAgICAgICAgICBzZXRNb250aChtb20sIGdldChtb20sICdNb250aCcpICsgbW9udGhzICogaXNBZGRpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXlzKSB7XG4gICAgICAgICAgICBzZXQkMShtb20sICdEYXRlJywgZ2V0KG1vbSwgJ0RhdGUnKSArIGRheXMgKiBpc0FkZGluZyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pbGxpc2Vjb25kcykge1xuICAgICAgICAgICAgbW9tLl9kLnNldFRpbWUobW9tLl9kLnZhbHVlT2YoKSArIG1pbGxpc2Vjb25kcyAqIGlzQWRkaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodXBkYXRlT2Zmc2V0KSB7XG4gICAgICAgICAgICBob29rcy51cGRhdGVPZmZzZXQobW9tLCBkYXlzIHx8IG1vbnRocyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYWRkID0gY3JlYXRlQWRkZXIoMSwgJ2FkZCcpLFxuICAgICAgICBzdWJ0cmFjdCA9IGNyZWF0ZUFkZGVyKC0xLCAnc3VidHJhY3QnKTtcblxuICAgIGZ1bmN0aW9uIGlzU3RyaW5nKGlucHV0KSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnIHx8IGlucHV0IGluc3RhbmNlb2YgU3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHR5cGUgTW9tZW50SW5wdXQgPSBNb21lbnQgfCBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyIHwgKG51bWJlciB8IHN0cmluZylbXSB8IE1vbWVudElucHV0T2JqZWN0IHwgdm9pZDsgLy8gbnVsbCB8IHVuZGVmaW5lZFxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXQoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGlzTW9tZW50KGlucHV0KSB8fFxuICAgICAgICAgICAgaXNEYXRlKGlucHV0KSB8fFxuICAgICAgICAgICAgaXNTdHJpbmcoaW5wdXQpIHx8XG4gICAgICAgICAgICBpc051bWJlcihpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkgfHxcbiAgICAgICAgICAgIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHx8XG4gICAgICAgICAgICBpbnB1dCA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgaW5wdXQgPT09IHVuZGVmaW5lZFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTW9tZW50SW5wdXRPYmplY3QoaW5wdXQpIHtcbiAgICAgICAgdmFyIG9iamVjdFRlc3QgPSBpc09iamVjdChpbnB1dCkgJiYgIWlzT2JqZWN0RW1wdHkoaW5wdXQpLFxuICAgICAgICAgICAgcHJvcGVydHlUZXN0ID0gZmFsc2UsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzID0gW1xuICAgICAgICAgICAgICAgICd5ZWFycycsXG4gICAgICAgICAgICAgICAgJ3llYXInLFxuICAgICAgICAgICAgICAgICd5JyxcbiAgICAgICAgICAgICAgICAnbW9udGhzJyxcbiAgICAgICAgICAgICAgICAnbW9udGgnLFxuICAgICAgICAgICAgICAgICdNJyxcbiAgICAgICAgICAgICAgICAnZGF5cycsXG4gICAgICAgICAgICAgICAgJ2RheScsXG4gICAgICAgICAgICAgICAgJ2QnLFxuICAgICAgICAgICAgICAgICdkYXRlcycsXG4gICAgICAgICAgICAgICAgJ2RhdGUnLFxuICAgICAgICAgICAgICAgICdEJyxcbiAgICAgICAgICAgICAgICAnaG91cnMnLFxuICAgICAgICAgICAgICAgICdob3VyJyxcbiAgICAgICAgICAgICAgICAnaCcsXG4gICAgICAgICAgICAgICAgJ21pbnV0ZXMnLFxuICAgICAgICAgICAgICAgICdtaW51dGUnLFxuICAgICAgICAgICAgICAgICdtJyxcbiAgICAgICAgICAgICAgICAnc2Vjb25kcycsXG4gICAgICAgICAgICAgICAgJ3NlY29uZCcsXG4gICAgICAgICAgICAgICAgJ3MnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZHMnLFxuICAgICAgICAgICAgICAgICdtaWxsaXNlY29uZCcsXG4gICAgICAgICAgICAgICAgJ21zJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBwcm9wZXJ0eUxlbiA9IHByb3BlcnRpZXMubGVuZ3RoO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcm9wZXJ0eUxlbjsgaSArPSAxKSB7XG4gICAgICAgICAgICBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaV07XG4gICAgICAgICAgICBwcm9wZXJ0eVRlc3QgPSBwcm9wZXJ0eVRlc3QgfHwgaGFzT3duUHJvcChpbnB1dCwgcHJvcGVydHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9iamVjdFRlc3QgJiYgcHJvcGVydHlUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzTnVtYmVyT3JTdHJpbmdBcnJheShpbnB1dCkge1xuICAgICAgICB2YXIgYXJyYXlUZXN0ID0gaXNBcnJheShpbnB1dCksXG4gICAgICAgICAgICBkYXRhVHlwZVRlc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKGFycmF5VGVzdCkge1xuICAgICAgICAgICAgZGF0YVR5cGVUZXN0ID1cbiAgICAgICAgICAgICAgICBpbnB1dC5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFpc051bWJlcihpdGVtKSAmJiBpc1N0cmluZyhpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoID09PSAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheVRlc3QgJiYgZGF0YVR5cGVUZXN0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGlzQ2FsZW5kYXJTcGVjKGlucHV0KSB7XG4gICAgICAgIHZhciBvYmplY3RUZXN0ID0gaXNPYmplY3QoaW5wdXQpICYmICFpc09iamVjdEVtcHR5KGlucHV0KSxcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IGZhbHNlLFxuICAgICAgICAgICAgcHJvcGVydGllcyA9IFtcbiAgICAgICAgICAgICAgICAnc2FtZURheScsXG4gICAgICAgICAgICAgICAgJ25leHREYXknLFxuICAgICAgICAgICAgICAgICdsYXN0RGF5JyxcbiAgICAgICAgICAgICAgICAnbmV4dFdlZWsnLFxuICAgICAgICAgICAgICAgICdsYXN0V2VlaycsXG4gICAgICAgICAgICAgICAgJ3NhbWVFbHNlJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgcHJvcGVydHk7XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgIHByb3BlcnR5ID0gcHJvcGVydGllc1tpXTtcbiAgICAgICAgICAgIHByb3BlcnR5VGVzdCA9IHByb3BlcnR5VGVzdCB8fCBoYXNPd25Qcm9wKGlucHV0LCBwcm9wZXJ0eSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2JqZWN0VGVzdCAmJiBwcm9wZXJ0eVRlc3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Q2FsZW5kYXJGb3JtYXQobXlNb21lbnQsIG5vdykge1xuICAgICAgICB2YXIgZGlmZiA9IG15TW9tZW50LmRpZmYobm93LCAnZGF5cycsIHRydWUpO1xuICAgICAgICByZXR1cm4gZGlmZiA8IC02XG4gICAgICAgICAgICA/ICdzYW1lRWxzZSdcbiAgICAgICAgICAgIDogZGlmZiA8IC0xXG4gICAgICAgICAgICA/ICdsYXN0V2VlaydcbiAgICAgICAgICAgIDogZGlmZiA8IDBcbiAgICAgICAgICAgID8gJ2xhc3REYXknXG4gICAgICAgICAgICA6IGRpZmYgPCAxXG4gICAgICAgICAgICA/ICdzYW1lRGF5J1xuICAgICAgICAgICAgOiBkaWZmIDwgMlxuICAgICAgICAgICAgPyAnbmV4dERheSdcbiAgICAgICAgICAgIDogZGlmZiA8IDdcbiAgICAgICAgICAgID8gJ25leHRXZWVrJ1xuICAgICAgICAgICAgOiAnc2FtZUVsc2UnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNhbGVuZGFyJDEodGltZSwgZm9ybWF0cykge1xuICAgICAgICAvLyBTdXBwb3J0IGZvciBzaW5nbGUgcGFyYW1ldGVyLCBmb3JtYXRzIG9ubHkgb3ZlcmxvYWQgdG8gdGhlIGNhbGVuZGFyIGZ1bmN0aW9uXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAoIWFyZ3VtZW50c1swXSkge1xuICAgICAgICAgICAgICAgIHRpbWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNNb21lbnRJbnB1dChhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgdGltZSA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICBmb3JtYXRzID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0NhbGVuZGFyU3BlYyhhcmd1bWVudHNbMF0pKSB7XG4gICAgICAgICAgICAgICAgZm9ybWF0cyA9IGFyZ3VtZW50c1swXTtcbiAgICAgICAgICAgICAgICB0aW1lID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFdlIHdhbnQgdG8gY29tcGFyZSB0aGUgc3RhcnQgb2YgdG9kYXksIHZzIHRoaXMuXG4gICAgICAgIC8vIEdldHRpbmcgc3RhcnQtb2YtdG9kYXkgZGVwZW5kcyBvbiB3aGV0aGVyIHdlJ3JlIGxvY2FsL3V0Yy9vZmZzZXQgb3Igbm90LlxuICAgICAgICB2YXIgbm93ID0gdGltZSB8fCBjcmVhdGVMb2NhbCgpLFxuICAgICAgICAgICAgc29kID0gY2xvbmVXaXRoT2Zmc2V0KG5vdywgdGhpcykuc3RhcnRPZignZGF5JyksXG4gICAgICAgICAgICBmb3JtYXQgPSBob29rcy5jYWxlbmRhckZvcm1hdCh0aGlzLCBzb2QpIHx8ICdzYW1lRWxzZScsXG4gICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgIGZvcm1hdHMgJiZcbiAgICAgICAgICAgICAgICAoaXNGdW5jdGlvbihmb3JtYXRzW2Zvcm1hdF0pXG4gICAgICAgICAgICAgICAgICAgID8gZm9ybWF0c1tmb3JtYXRdLmNhbGwodGhpcywgbm93KVxuICAgICAgICAgICAgICAgICAgICA6IGZvcm1hdHNbZm9ybWF0XSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KFxuICAgICAgICAgICAgb3V0cHV0IHx8IHRoaXMubG9jYWxlRGF0YSgpLmNhbGVuZGFyKGZvcm1hdCwgdGhpcywgY3JlYXRlTG9jYWwobm93KSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbG9uZSgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBNb21lbnQodGhpcyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNBZnRlcihpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPiBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbElucHV0LnZhbHVlT2YoKSA8IHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc0JlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgdmFyIGxvY2FsSW5wdXQgPSBpc01vbWVudChpbnB1dCkgPyBpbnB1dCA6IGNyZWF0ZUxvY2FsKGlucHV0KTtcbiAgICAgICAgaWYgKCEodGhpcy5pc1ZhbGlkKCkgJiYgbG9jYWxJbnB1dC5pc1ZhbGlkKCkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cykgfHwgJ21pbGxpc2Vjb25kJztcbiAgICAgICAgaWYgKHVuaXRzID09PSAnbWlsbGlzZWNvbmQnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCkgPCBsb2NhbElucHV0LnZhbHVlT2YoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuZW5kT2YodW5pdHMpLnZhbHVlT2YoKSA8IGxvY2FsSW5wdXQudmFsdWVPZigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNCZXR3ZWVuKGZyb20sIHRvLCB1bml0cywgaW5jbHVzaXZpdHkpIHtcbiAgICAgICAgdmFyIGxvY2FsRnJvbSA9IGlzTW9tZW50KGZyb20pID8gZnJvbSA6IGNyZWF0ZUxvY2FsKGZyb20pLFxuICAgICAgICAgICAgbG9jYWxUbyA9IGlzTW9tZW50KHRvKSA/IHRvIDogY3JlYXRlTG9jYWwodG8pO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbEZyb20uaXNWYWxpZCgpICYmIGxvY2FsVG8uaXNWYWxpZCgpKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1c2l2aXR5ID0gaW5jbHVzaXZpdHkgfHwgJygpJztcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIChpbmNsdXNpdml0eVswXSA9PT0gJygnXG4gICAgICAgICAgICAgICAgPyB0aGlzLmlzQWZ0ZXIobG9jYWxGcm9tLCB1bml0cylcbiAgICAgICAgICAgICAgICA6ICF0aGlzLmlzQmVmb3JlKGxvY2FsRnJvbSwgdW5pdHMpKSAmJlxuICAgICAgICAgICAgKGluY2x1c2l2aXR5WzFdID09PSAnKSdcbiAgICAgICAgICAgICAgICA/IHRoaXMuaXNCZWZvcmUobG9jYWxUbywgdW5pdHMpXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5pc0FmdGVyKGxvY2FsVG8sIHVuaXRzKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWUoaW5wdXQsIHVuaXRzKSB7XG4gICAgICAgIHZhciBsb2NhbElucHV0ID0gaXNNb21lbnQoaW5wdXQpID8gaW5wdXQgOiBjcmVhdGVMb2NhbChpbnB1dCksXG4gICAgICAgICAgICBpbnB1dE1zO1xuICAgICAgICBpZiAoISh0aGlzLmlzVmFsaWQoKSAmJiBsb2NhbElucHV0LmlzVmFsaWQoKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKSB8fCAnbWlsbGlzZWNvbmQnO1xuICAgICAgICBpZiAodW5pdHMgPT09ICdtaWxsaXNlY29uZCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlT2YoKSA9PT0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dE1zID0gbG9jYWxJbnB1dC52YWx1ZU9mKCk7XG4gICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgIHRoaXMuY2xvbmUoKS5zdGFydE9mKHVuaXRzKS52YWx1ZU9mKCkgPD0gaW5wdXRNcyAmJlxuICAgICAgICAgICAgICAgIGlucHV0TXMgPD0gdGhpcy5jbG9uZSgpLmVuZE9mKHVuaXRzKS52YWx1ZU9mKClcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckFmdGVyKGlucHV0LCB1bml0cykge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1NhbWUoaW5wdXQsIHVuaXRzKSB8fCB0aGlzLmlzQWZ0ZXIoaW5wdXQsIHVuaXRzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpc1NhbWVPckJlZm9yZShpbnB1dCwgdW5pdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNTYW1lKGlucHV0LCB1bml0cykgfHwgdGhpcy5pc0JlZm9yZShpbnB1dCwgdW5pdHMpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpZmYoaW5wdXQsIHVuaXRzLCBhc0Zsb2F0KSB7XG4gICAgICAgIHZhciB0aGF0LCB6b25lRGVsdGEsIG91dHB1dDtcblxuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhhdCA9IGNsb25lV2l0aE9mZnNldChpbnB1dCwgdGhpcyk7XG5cbiAgICAgICAgaWYgKCF0aGF0LmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIHpvbmVEZWx0YSA9ICh0aGF0LnV0Y09mZnNldCgpIC0gdGhpcy51dGNPZmZzZXQoKSkgKiA2ZTQ7XG5cbiAgICAgICAgdW5pdHMgPSBub3JtYWxpemVVbml0cyh1bml0cyk7XG5cbiAgICAgICAgc3dpdGNoICh1bml0cykge1xuICAgICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMTI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gbW9udGhEaWZmKHRoaXMsIHRoYXQpIC8gMztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3NlY29uZCc6XG4gICAgICAgICAgICAgICAgb3V0cHV0ID0gKHRoaXMgLSB0aGF0KSAvIDFlMztcbiAgICAgICAgICAgICAgICBicmVhazsgLy8gMTAwMFxuICAgICAgICAgICAgY2FzZSAnbWludXRlJzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQpIC8gNmU0O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjBcbiAgICAgICAgICAgIGNhc2UgJ2hvdXInOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCkgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGJyZWFrOyAvLyAxMDAwICogNjAgKiA2MFxuICAgICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgICAgICBvdXRwdXQgPSAodGhpcyAtIHRoYXQgLSB6b25lRGVsdGEpIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQsIG5lZ2F0ZSBkc3RcbiAgICAgICAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICAgICAgICAgIG91dHB1dCA9ICh0aGlzIC0gdGhhdCAtIHpvbmVEZWx0YSkgLyA2MDQ4ZTU7XG4gICAgICAgICAgICAgICAgYnJlYWs7IC8vIDEwMDAgKiA2MCAqIDYwICogMjQgKiA3LCBuZWdhdGUgZHN0XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIG91dHB1dCA9IHRoaXMgLSB0aGF0O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFzRmxvYXQgPyBvdXRwdXQgOiBhYnNGbG9vcihvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1vbnRoRGlmZihhLCBiKSB7XG4gICAgICAgIGlmIChhLmRhdGUoKSA8IGIuZGF0ZSgpKSB7XG4gICAgICAgICAgICAvLyBlbmQtb2YtbW9udGggY2FsY3VsYXRpb25zIHdvcmsgY29ycmVjdCB3aGVuIHRoZSBzdGFydCBtb250aCBoYXMgbW9yZVxuICAgICAgICAgICAgLy8gZGF5cyB0aGFuIHRoZSBlbmQgbW9udGguXG4gICAgICAgICAgICByZXR1cm4gLW1vbnRoRGlmZihiLCBhKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkaWZmZXJlbmNlIGluIG1vbnRoc1xuICAgICAgICB2YXIgd2hvbGVNb250aERpZmYgPSAoYi55ZWFyKCkgLSBhLnllYXIoKSkgKiAxMiArIChiLm1vbnRoKCkgLSBhLm1vbnRoKCkpLFxuICAgICAgICAgICAgLy8gYiBpcyBpbiAoYW5jaG9yIC0gMSBtb250aCwgYW5jaG9yICsgMSBtb250aClcbiAgICAgICAgICAgIGFuY2hvciA9IGEuY2xvbmUoKS5hZGQod2hvbGVNb250aERpZmYsICdtb250aHMnKSxcbiAgICAgICAgICAgIGFuY2hvcjIsXG4gICAgICAgICAgICBhZGp1c3Q7XG5cbiAgICAgICAgaWYgKGIgLSBhbmNob3IgPCAwKSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiAtIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yIC0gYW5jaG9yMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhbmNob3IyID0gYS5jbG9uZSgpLmFkZCh3aG9sZU1vbnRoRGlmZiArIDEsICdtb250aHMnKTtcbiAgICAgICAgICAgIC8vIGxpbmVhciBhY3Jvc3MgdGhlIG1vbnRoXG4gICAgICAgICAgICBhZGp1c3QgPSAoYiAtIGFuY2hvcikgLyAoYW5jaG9yMiAtIGFuY2hvcik7XG4gICAgICAgIH1cblxuICAgICAgICAvL2NoZWNrIGZvciBuZWdhdGl2ZSB6ZXJvLCByZXR1cm4gemVybyBpZiBuZWdhdGl2ZSB6ZXJvXG4gICAgICAgIHJldHVybiAtKHdob2xlTW9udGhEaWZmICsgYWRqdXN0KSB8fCAwO1xuICAgIH1cblxuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXQgPSAnWVlZWS1NTS1ERFRISDptbTpzc1onO1xuICAgIGhvb2tzLmRlZmF1bHRGb3JtYXRVdGMgPSAnWVlZWS1NTS1ERFRISDptbTpzc1taXSc7XG5cbiAgICBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xvbmUoKS5sb2NhbGUoJ2VuJykuZm9ybWF0KCdkZGQgTU1NIEREIFlZWVkgSEg6bW06c3MgW0dNVF1aWicpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvSVNPU3RyaW5nKGtlZXBPZmZzZXQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHV0YyA9IGtlZXBPZmZzZXQgIT09IHRydWUsXG4gICAgICAgICAgICBtID0gdXRjID8gdGhpcy5jbG9uZSgpLnV0YygpIDogdGhpcztcbiAgICAgICAgaWYgKG0ueWVhcigpIDwgMCB8fCBtLnllYXIoKSA+IDk5OTkpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRNb21lbnQoXG4gICAgICAgICAgICAgICAgbSxcbiAgICAgICAgICAgICAgICB1dGNcbiAgICAgICAgICAgICAgICAgICAgPyAnWVlZWVlZLU1NLUREW1RdSEg6bW06c3MuU1NTW1pdJ1xuICAgICAgICAgICAgICAgICAgICA6ICdZWVlZWVktTU0tRERbVF1ISDptbTpzcy5TU1NaJ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZykpIHtcbiAgICAgICAgICAgIC8vIG5hdGl2ZSBpbXBsZW1lbnRhdGlvbiBpcyB+NTB4IGZhc3RlciwgdXNlIGl0IHdoZW4gd2UgY2FuXG4gICAgICAgICAgICBpZiAodXRjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudG9EYXRlKCkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHRoaXMudmFsdWVPZigpICsgdGhpcy51dGNPZmZzZXQoKSAqIDYwICogMTAwMClcbiAgICAgICAgICAgICAgICAgICAgLnRvSVNPU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoJ1onLCBmb3JtYXRNb21lbnQobSwgJ1onKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1hdE1vbWVudChcbiAgICAgICAgICAgIG0sXG4gICAgICAgICAgICB1dGMgPyAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1taXScgOiAnWVlZWS1NTS1ERFtUXUhIOm1tOnNzLlNTU1onXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJuIGEgaHVtYW4gcmVhZGFibGUgcmVwcmVzZW50YXRpb24gb2YgYSBtb21lbnQgdGhhdCBjYW5cbiAgICAgKiBhbHNvIGJlIGV2YWx1YXRlZCB0byBnZXQgYSBuZXcgbW9tZW50IHdoaWNoIGlzIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBAbGluayBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QvZG9jcy9hcGkvdXRpbC5odG1sI3V0aWxfY3VzdG9tX2luc3BlY3RfZnVuY3Rpb25fb25fb2JqZWN0c1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluc3BlY3QoKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiAnbW9tZW50LmludmFsaWQoLyogJyArIHRoaXMuX2kgKyAnICovKSc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGZ1bmMgPSAnbW9tZW50JyxcbiAgICAgICAgICAgIHpvbmUgPSAnJyxcbiAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBkYXRldGltZSxcbiAgICAgICAgICAgIHN1ZmZpeDtcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9jYWwoKSkge1xuICAgICAgICAgICAgZnVuYyA9IHRoaXMudXRjT2Zmc2V0KCkgPT09IDAgPyAnbW9tZW50LnV0YycgOiAnbW9tZW50LnBhcnNlWm9uZSc7XG4gICAgICAgICAgICB6b25lID0gJ1onO1xuICAgICAgICB9XG4gICAgICAgIHByZWZpeCA9ICdbJyArIGZ1bmMgKyAnKFwiXSc7XG4gICAgICAgIHllYXIgPSAwIDw9IHRoaXMueWVhcigpICYmIHRoaXMueWVhcigpIDw9IDk5OTkgPyAnWVlZWScgOiAnWVlZWVlZJztcbiAgICAgICAgZGF0ZXRpbWUgPSAnLU1NLUREW1RdSEg6bW06c3MuU1NTJztcbiAgICAgICAgc3VmZml4ID0gem9uZSArICdbXCIpXSc7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0KHByZWZpeCArIHllYXIgKyBkYXRldGltZSArIHN1ZmZpeCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9ybWF0KGlucHV0U3RyaW5nKSB7XG4gICAgICAgIGlmICghaW5wdXRTdHJpbmcpIHtcbiAgICAgICAgICAgIGlucHV0U3RyaW5nID0gdGhpcy5pc1V0YygpXG4gICAgICAgICAgICAgICAgPyBob29rcy5kZWZhdWx0Rm9ybWF0VXRjXG4gICAgICAgICAgICAgICAgOiBob29rcy5kZWZhdWx0Rm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHZhciBvdXRwdXQgPSBmb3JtYXRNb21lbnQodGhpcywgaW5wdXRTdHJpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb20odGltZSwgd2l0aG91dFN1ZmZpeCkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQoKSAmJlxuICAgICAgICAgICAgKChpc01vbWVudCh0aW1lKSAmJiB0aW1lLmlzVmFsaWQoKSkgfHwgY3JlYXRlTG9jYWwodGltZSkuaXNWYWxpZCgpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih7IHRvOiB0aGlzLCBmcm9tOiB0aW1lIH0pXG4gICAgICAgICAgICAgICAgLmxvY2FsZSh0aGlzLmxvY2FsZSgpKVxuICAgICAgICAgICAgICAgIC5odW1hbml6ZSghd2l0aG91dFN1ZmZpeCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCkuaW52YWxpZERhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZyb21Ob3cod2l0aG91dFN1ZmZpeCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mcm9tKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvKHRpbWUsIHdpdGhvdXRTdWZmaXgpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5pc1ZhbGlkKCkgJiZcbiAgICAgICAgICAgICgoaXNNb21lbnQodGltZSkgJiYgdGltZS5pc1ZhbGlkKCkpIHx8IGNyZWF0ZUxvY2FsKHRpbWUpLmlzVmFsaWQoKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlRHVyYXRpb24oeyBmcm9tOiB0aGlzLCB0bzogdGltZSB9KVxuICAgICAgICAgICAgICAgIC5sb2NhbGUodGhpcy5sb2NhbGUoKSlcbiAgICAgICAgICAgICAgICAuaHVtYW5pemUoIXdpdGhvdXRTdWZmaXgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b05vdyh3aXRob3V0U3VmZml4KSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvKGNyZWF0ZUxvY2FsKCksIHdpdGhvdXRTdWZmaXgpO1xuICAgIH1cblxuICAgIC8vIElmIHBhc3NlZCBhIGxvY2FsZSBrZXksIGl0IHdpbGwgc2V0IHRoZSBsb2NhbGUgZm9yIHRoaXNcbiAgICAvLyBpbnN0YW5jZS4gIE90aGVyd2lzZSwgaXQgd2lsbCByZXR1cm4gdGhlIGxvY2FsZSBjb25maWd1cmF0aW9uXG4gICAgLy8gdmFyaWFibGVzIGZvciB0aGlzIGluc3RhbmNlLlxuICAgIGZ1bmN0aW9uIGxvY2FsZShrZXkpIHtcbiAgICAgICAgdmFyIG5ld0xvY2FsZURhdGE7XG5cbiAgICAgICAgaWYgKGtleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbG9jYWxlLl9hYmJyO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3TG9jYWxlRGF0YSA9IGdldExvY2FsZShrZXkpO1xuICAgICAgICAgICAgaWYgKG5ld0xvY2FsZURhdGEgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xvY2FsZSA9IG5ld0xvY2FsZURhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsYW5nID0gZGVwcmVjYXRlKFxuICAgICAgICAnbW9tZW50KCkubGFuZygpIGlzIGRlcHJlY2F0ZWQuIEluc3RlYWQsIHVzZSBtb21lbnQoKS5sb2NhbGVEYXRhKCkgdG8gZ2V0IHRoZSBsYW5ndWFnZSBjb25maWd1cmF0aW9uLiBVc2UgbW9tZW50KCkubG9jYWxlKCkgdG8gY2hhbmdlIGxhbmd1YWdlcy4nLFxuICAgICAgICBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sb2NhbGVEYXRhKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9sb2NhbGU7XG4gICAgfVxuXG4gICAgdmFyIE1TX1BFUl9TRUNPTkQgPSAxMDAwLFxuICAgICAgICBNU19QRVJfTUlOVVRFID0gNjAgKiBNU19QRVJfU0VDT05ELFxuICAgICAgICBNU19QRVJfSE9VUiA9IDYwICogTVNfUEVSX01JTlVURSxcbiAgICAgICAgTVNfUEVSXzQwMF9ZRUFSUyA9ICgzNjUgKiA0MDAgKyA5NykgKiAyNCAqIE1TX1BFUl9IT1VSO1xuXG4gICAgLy8gYWN0dWFsIG1vZHVsbyAtIGhhbmRsZXMgbmVnYXRpdmUgbnVtYmVycyAoZm9yIGRhdGVzIGJlZm9yZSAxOTcwKTpcbiAgICBmdW5jdGlvbiBtb2QkMShkaXZpZGVuZCwgZGl2aXNvcikge1xuICAgICAgICByZXR1cm4gKChkaXZpZGVuZCAlIGRpdmlzb3IpICsgZGl2aXNvcikgJSBkaXZpc29yO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsU3RhcnRPZkRhdGUoeSwgbSwgZCkge1xuICAgICAgICAvLyB0aGUgZGF0ZSBjb25zdHJ1Y3RvciByZW1hcHMgeWVhcnMgMC05OSB0byAxOTAwLTE5OTlcbiAgICAgICAgaWYgKHkgPCAxMDAgJiYgeSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBwcmVzZXJ2ZSBsZWFwIHllYXJzIHVzaW5nIGEgZnVsbCA0MDAgeWVhciBjeWNsZSwgdGhlbiByZXNldFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHkgKyA0MDAsIG0sIGQpIC0gTVNfUEVSXzQwMF9ZRUFSUztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZSh5LCBtLCBkKS52YWx1ZU9mKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1dGNTdGFydE9mRGF0ZSh5LCBtLCBkKSB7XG4gICAgICAgIC8vIERhdGUuVVRDIHJlbWFwcyB5ZWFycyAwLTk5IHRvIDE5MDAtMTk5OVxuICAgICAgICBpZiAoeSA8IDEwMCAmJiB5ID49IDApIHtcbiAgICAgICAgICAgIC8vIHByZXNlcnZlIGxlYXAgeWVhcnMgdXNpbmcgYSBmdWxsIDQwMCB5ZWFyIGN5Y2xlLCB0aGVuIHJlc2V0XG4gICAgICAgICAgICByZXR1cm4gRGF0ZS5VVEMoeSArIDQwMCwgbSwgZCkgLSBNU19QRVJfNDAwX1lFQVJTO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIERhdGUuVVRDKHksIG0sIGQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3RhcnRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIDAsIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncXVhcnRlcic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpIC0gKHRoaXMubW9udGgoKSAlIDMpLFxuICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgMSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0ZSgpIC0gdGhpcy53ZWVrZGF5KClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaXNvV2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtICh0aGlzLmlzb1dlZWtkYXkoKSAtIDEpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCksIHRoaXMubW9udGgoKSwgdGhpcy5kYXRlKCkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgLT0gbW9kJDEoXG4gICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICBNU19QRVJfSE9VUlxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lIC09IG1vZCQxKHRpbWUsIE1TX1BFUl9NSU5VVEUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnc2Vjb25kJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gdGhpcy5fZC52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgdGltZSAtPSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2Quc2V0VGltZSh0aW1lKTtcbiAgICAgICAgaG9va3MudXBkYXRlT2Zmc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlbmRPZih1bml0cykge1xuICAgICAgICB2YXIgdGltZSwgc3RhcnRPZkRhdGU7XG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuICAgICAgICBpZiAodW5pdHMgPT09IHVuZGVmaW5lZCB8fCB1bml0cyA9PT0gJ21pbGxpc2Vjb25kJyB8fCAhdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnRPZkRhdGUgPSB0aGlzLl9pc1VUQyA/IHV0Y1N0YXJ0T2ZEYXRlIDogbG9jYWxTdGFydE9mRGF0ZTtcblxuICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICB0aW1lID0gc3RhcnRPZkRhdGUodGhpcy55ZWFyKCkgKyAxLCAwLCAxKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdxdWFydGVyJzpcbiAgICAgICAgICAgICAgICB0aW1lID1cbiAgICAgICAgICAgICAgICAgICAgc3RhcnRPZkRhdGUoXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnllYXIoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9udGgoKSAtICh0aGlzLm1vbnRoKCkgJSAzKSArIDMsXG4gICAgICAgICAgICAgICAgICAgICAgICAxXG4gICAgICAgICAgICAgICAgICAgICkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSBzdGFydE9mRGF0ZSh0aGlzLnllYXIoKSwgdGhpcy5tb250aCgpICsgMSwgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnd2Vlayc6XG4gICAgICAgICAgICAgICAgdGltZSA9XG4gICAgICAgICAgICAgICAgICAgIHN0YXJ0T2ZEYXRlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy55ZWFyKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vbnRoKCksXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGUoKSAtIHRoaXMud2Vla2RheSgpICsgN1xuICAgICAgICAgICAgICAgICAgICApIC0gMTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2lzb1dlZWsnOlxuICAgICAgICAgICAgICAgIHRpbWUgPVxuICAgICAgICAgICAgICAgICAgICBzdGFydE9mRGF0ZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMueWVhcigpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb250aCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRlKCkgLSAodGhpcy5pc29XZWVrZGF5KCkgLSAxKSArIDdcbiAgICAgICAgICAgICAgICAgICAgKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkYXknOlxuICAgICAgICAgICAgY2FzZSAnZGF0ZSc6XG4gICAgICAgICAgICAgICAgdGltZSA9IHN0YXJ0T2ZEYXRlKHRoaXMueWVhcigpLCB0aGlzLm1vbnRoKCksIHRoaXMuZGF0ZSgpICsgMSkgLSAxO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgdGltZSA9IHRoaXMuX2QudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgIHRpbWUgKz1cbiAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVIgLVxuICAgICAgICAgICAgICAgICAgICBtb2QkMShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgKyAodGhpcy5faXNVVEMgPyAwIDogdGhpcy51dGNPZmZzZXQoKSAqIE1TX1BFUl9NSU5VVEUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgTVNfUEVSX0hPVVJcbiAgICAgICAgICAgICAgICAgICAgKSAtXG4gICAgICAgICAgICAgICAgICAgIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtaW51dGUnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9NSU5VVEUgLSBtb2QkMSh0aW1lLCBNU19QRVJfTUlOVVRFKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgIHRpbWUgPSB0aGlzLl9kLnZhbHVlT2YoKTtcbiAgICAgICAgICAgICAgICB0aW1lICs9IE1TX1BFUl9TRUNPTkQgLSBtb2QkMSh0aW1lLCBNU19QRVJfU0VDT05EKSAtIDE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9kLnNldFRpbWUodGltZSk7XG4gICAgICAgIGhvb2tzLnVwZGF0ZU9mZnNldCh0aGlzLCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdmFsdWVPZigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2QudmFsdWVPZigpIC0gKHRoaXMuX29mZnNldCB8fCAwKSAqIDYwMDAwO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHVuaXgoKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHRoaXMudmFsdWVPZigpIC8gMTAwMCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9EYXRlKCkge1xuICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvQXJyYXkoKSB7XG4gICAgICAgIHZhciBtID0gdGhpcztcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG0ueWVhcigpLFxuICAgICAgICAgICAgbS5tb250aCgpLFxuICAgICAgICAgICAgbS5kYXRlKCksXG4gICAgICAgICAgICBtLmhvdXIoKSxcbiAgICAgICAgICAgIG0ubWludXRlKCksXG4gICAgICAgICAgICBtLnNlY29uZCgpLFxuICAgICAgICAgICAgbS5taWxsaXNlY29uZCgpLFxuICAgICAgICBdO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHRvT2JqZWN0KCkge1xuICAgICAgICB2YXIgbSA9IHRoaXM7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB5ZWFyczogbS55ZWFyKCksXG4gICAgICAgICAgICBtb250aHM6IG0ubW9udGgoKSxcbiAgICAgICAgICAgIGRhdGU6IG0uZGF0ZSgpLFxuICAgICAgICAgICAgaG91cnM6IG0uaG91cnMoKSxcbiAgICAgICAgICAgIG1pbnV0ZXM6IG0ubWludXRlcygpLFxuICAgICAgICAgICAgc2Vjb25kczogbS5zZWNvbmRzKCksXG4gICAgICAgICAgICBtaWxsaXNlY29uZHM6IG0ubWlsbGlzZWNvbmRzKCksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gdG9KU09OKCkge1xuICAgICAgICAvLyBuZXcgRGF0ZShOYU4pLnRvSlNPTigpID09PSBudWxsXG4gICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMudG9JU09TdHJpbmcoKSA6IG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNWYWxpZCQyKCkge1xuICAgICAgICByZXR1cm4gaXNWYWxpZCh0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzaW5nRmxhZ3MoKSB7XG4gICAgICAgIHJldHVybiBleHRlbmQoe30sIGdldFBhcnNpbmdGbGFncyh0aGlzKSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW52YWxpZEF0KCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2luZ0ZsYWdzKHRoaXMpLm92ZXJmbG93O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0aW9uRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlucHV0OiB0aGlzLl9pLFxuICAgICAgICAgICAgZm9ybWF0OiB0aGlzLl9mLFxuICAgICAgICAgICAgbG9jYWxlOiB0aGlzLl9sb2NhbGUsXG4gICAgICAgICAgICBpc1VUQzogdGhpcy5faXNVVEMsXG4gICAgICAgICAgICBzdHJpY3Q6IHRoaXMuX3N0cmljdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBhZGRGb3JtYXRUb2tlbignTicsIDAsIDAsICdlcmFBYmJyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OJywgMCwgMCwgJ2VyYUFiYnInKTtcbiAgICBhZGRGb3JtYXRUb2tlbignTk5OTicsIDAsIDAsICdlcmFOYW1lJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ05OTk5OJywgMCwgMCwgJ2VyYU5hcnJvdycpO1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3knLCAxXSwgJ3lvJywgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXknLCAyXSwgMCwgJ2VyYVllYXInKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneScsIFsneXl5JywgM10sIDAsICdlcmFZZWFyJyk7XG4gICAgYWRkRm9ybWF0VG9rZW4oJ3knLCBbJ3l5eXknLCA0XSwgMCwgJ2VyYVllYXInKTtcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ04nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OJywgbWF0Y2hFcmFBYmJyKTtcbiAgICBhZGRSZWdleFRva2VuKCdOTk4nLCBtYXRjaEVyYUFiYnIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk4nLCBtYXRjaEVyYU5hbWUpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ05OTk5OJywgbWF0Y2hFcmFOYXJyb3cpO1xuXG4gICAgYWRkUGFyc2VUb2tlbihcbiAgICAgICAgWydOJywgJ05OJywgJ05OTicsICdOTk5OJywgJ05OTk5OJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZywgdG9rZW4pIHtcbiAgICAgICAgICAgIHZhciBlcmEgPSBjb25maWcuX2xvY2FsZS5lcmFzUGFyc2UoaW5wdXQsIHRva2VuLCBjb25maWcuX3N0cmljdCk7XG4gICAgICAgICAgICBpZiAoZXJhKSB7XG4gICAgICAgICAgICAgICAgZ2V0UGFyc2luZ0ZsYWdzKGNvbmZpZykuZXJhID0gZXJhO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBnZXRQYXJzaW5nRmxhZ3MoY29uZmlnKS5pbnZhbGlkRXJhID0gaW5wdXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICApO1xuXG4gICAgYWRkUmVnZXhUb2tlbigneScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3l5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5JywgbWF0Y2hVbnNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbigneXl5eScsIG1hdGNoVW5zaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ3lvJywgbWF0Y2hFcmFZZWFyT3JkaW5hbCk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsneScsICd5eScsICd5eXknLCAneXl5eSddLCBZRUFSKTtcbiAgICBhZGRQYXJzZVRva2VuKFsneW8nXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnLCB0b2tlbikge1xuICAgICAgICB2YXIgbWF0Y2g7XG4gICAgICAgIGlmIChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCkge1xuICAgICAgICAgICAgbWF0Y2ggPSBpbnB1dC5tYXRjaChjb25maWcuX2xvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZmlnLl9sb2NhbGUuZXJhWWVhck9yZGluYWxQYXJzZSkge1xuICAgICAgICAgICAgYXJyYXlbWUVBUl0gPSBjb25maWcuX2xvY2FsZS5lcmFZZWFyT3JkaW5hbFBhcnNlKGlucHV0LCBtYXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVtZRUFSXSA9IHBhcnNlSW50KGlucHV0LCAxMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXMobSwgZm9ybWF0KSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRhdGUsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5fZXJhcyB8fCBnZXRMb2NhbGUoJ2VuJykuX2VyYXM7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YgZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgICAgICAgICAgZGF0ZSA9IGhvb2tzKGVyYXNbaV0uc2luY2UpLnN0YXJ0T2YoJ2RheScpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnNpbmNlID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS51bnRpbCA9ICtJbmZpbml0eTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gaG9va3MoZXJhc1tpXS51bnRpbCkuc3RhcnRPZignZGF5JykudmFsdWVPZigpO1xuICAgICAgICAgICAgICAgICAgICBlcmFzW2ldLnVudGlsID0gZGF0ZS52YWx1ZU9mKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcmFzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxvY2FsZUVyYXNQYXJzZShlcmFOYW1lLCBmb3JtYXQsIHN0cmljdCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5lcmFzKCksXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgYWJicixcbiAgICAgICAgICAgIG5hcnJvdztcbiAgICAgICAgZXJhTmFtZSA9IGVyYU5hbWUudG9VcHBlckNhc2UoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWUgPSBlcmFzW2ldLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGFiYnIgPSBlcmFzW2ldLmFiYnIudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIG5hcnJvdyA9IGVyYXNbaV0ubmFycm93LnRvVXBwZXJDYXNlKCk7XG5cbiAgICAgICAgICAgIGlmIChzdHJpY3QpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdOJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnTk4nOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdOTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFiYnIgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk4nOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5hbWUgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ05OTk5OJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuYXJyb3cgPT09IGVyYU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoW25hbWUsIGFiYnIsIG5hcnJvd10uaW5kZXhPZihlcmFOYW1lKSA+PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsb2NhbGVFcmFzQ29udmVydFllYXIoZXJhLCB5ZWFyKSB7XG4gICAgICAgIHZhciBkaXIgPSBlcmEuc2luY2UgPD0gZXJhLnVudGlsID8gKzEgOiAtMTtcbiAgICAgICAgaWYgKHllYXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhvb2tzKGVyYS5zaW5jZSkueWVhcigpICsgKHllYXIgLSBlcmEub2Zmc2V0KSAqIGRpcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYU5hbWUoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKGVyYXNbaV0uc2luY2UgPD0gdmFsICYmIHZhbCA8PSBlcmFzW2ldLnVudGlsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVyYXNbaV0ubmFtZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0RXJhTmFycm93KCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnVudGlsIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS5zaW5jZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLm5hcnJvdztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRFcmFBYmJyKCkge1xuICAgICAgICB2YXIgaSxcbiAgICAgICAgICAgIGwsXG4gICAgICAgICAgICB2YWwsXG4gICAgICAgICAgICBlcmFzID0gdGhpcy5sb2NhbGVEYXRhKCkuZXJhcygpO1xuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIC8vIHRydW5jYXRlIHRpbWVcbiAgICAgICAgICAgIHZhbCA9IHRoaXMuY2xvbmUoKS5zdGFydE9mKCdkYXknKS52YWx1ZU9mKCk7XG5cbiAgICAgICAgICAgIGlmIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBlcmFzW2ldLmFiYnI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJhc1tpXS5hYmJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEVyYVllYXIoKSB7XG4gICAgICAgIHZhciBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGRpcixcbiAgICAgICAgICAgIHZhbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmxvY2FsZURhdGEoKS5lcmFzKCk7XG4gICAgICAgIGZvciAoaSA9IDAsIGwgPSBlcmFzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICAgICAgZGlyID0gZXJhc1tpXS5zaW5jZSA8PSBlcmFzW2ldLnVudGlsID8gKzEgOiAtMTtcblxuICAgICAgICAgICAgLy8gdHJ1bmNhdGUgdGltZVxuICAgICAgICAgICAgdmFsID0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLnZhbHVlT2YoKTtcblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIChlcmFzW2ldLnNpbmNlIDw9IHZhbCAmJiB2YWwgPD0gZXJhc1tpXS51bnRpbCkgfHxcbiAgICAgICAgICAgICAgICAoZXJhc1tpXS51bnRpbCA8PSB2YWwgJiYgdmFsIDw9IGVyYXNbaV0uc2luY2UpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAgICAgICAodGhpcy55ZWFyKCkgLSBob29rcyhlcmFzW2ldLnNpbmNlKS55ZWFyKCkpICogZGlyICtcbiAgICAgICAgICAgICAgICAgICAgZXJhc1tpXS5vZmZzZXRcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMueWVhcigpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVyYXNOYW1lUmVnZXgoaXNTdHJpY3QpIHtcbiAgICAgICAgaWYgKCFoYXNPd25Qcm9wKHRoaXMsICdfZXJhc05hbWVSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hbWVSZWdleCA6IHRoaXMuX2VyYXNSZWdleDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBlcmFzQWJiclJlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNBYmJyUmVnZXgnKSkge1xuICAgICAgICAgICAgY29tcHV0ZUVyYXNQYXJzZS5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpc1N0cmljdCA/IHRoaXMuX2VyYXNBYmJyUmVnZXggOiB0aGlzLl9lcmFzUmVnZXg7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KSB7XG4gICAgICAgIGlmICghaGFzT3duUHJvcCh0aGlzLCAnX2VyYXNOYXJyb3dSZWdleCcpKSB7XG4gICAgICAgICAgICBjb21wdXRlRXJhc1BhcnNlLmNhbGwodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGlzU3RyaWN0ID8gdGhpcy5fZXJhc05hcnJvd1JlZ2V4IDogdGhpcy5fZXJhc1JlZ2V4O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG1hdGNoRXJhQWJicihpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc0FiYnJSZWdleChpc1N0cmljdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWF0Y2hFcmFOYW1lKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5lcmFzTmFtZVJlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYU5hcnJvdyhpc1N0cmljdCwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUuZXJhc05hcnJvd1JlZ2V4KGlzU3RyaWN0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXRjaEVyYVllYXJPcmRpbmFsKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5fZXJhWWVhck9yZGluYWxSZWdleCB8fCBtYXRjaFVuc2lnbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFcmFzUGFyc2UoKSB7XG4gICAgICAgIHZhciBhYmJyUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYW1lUGllY2VzID0gW10sXG4gICAgICAgICAgICBuYXJyb3dQaWVjZXMgPSBbXSxcbiAgICAgICAgICAgIG1peGVkUGllY2VzID0gW10sXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgbCxcbiAgICAgICAgICAgIGVyYXMgPSB0aGlzLmVyYXMoKTtcblxuICAgICAgICBmb3IgKGkgPSAwLCBsID0gZXJhcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICAgIG5hbWVQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hbWUpKTtcbiAgICAgICAgICAgIGFiYnJQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLmFiYnIpKTtcbiAgICAgICAgICAgIG5hcnJvd1BpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0ubmFycm93KSk7XG5cbiAgICAgICAgICAgIG1peGVkUGllY2VzLnB1c2gocmVnZXhFc2NhcGUoZXJhc1tpXS5uYW1lKSk7XG4gICAgICAgICAgICBtaXhlZFBpZWNlcy5wdXNoKHJlZ2V4RXNjYXBlKGVyYXNbaV0uYWJicikpO1xuICAgICAgICAgICAgbWl4ZWRQaWVjZXMucHVzaChyZWdleEVzY2FwZShlcmFzW2ldLm5hcnJvdykpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fZXJhc1JlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbWl4ZWRQaWVjZXMuam9pbignfCcpICsgJyknLCAnaScpO1xuICAgICAgICB0aGlzLl9lcmFzTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXignICsgbmFtZVBpZWNlcy5qb2luKCd8JykgKyAnKScsICdpJyk7XG4gICAgICAgIHRoaXMuX2VyYXNBYmJyUmVnZXggPSBuZXcgUmVnRXhwKCdeKCcgKyBhYmJyUGllY2VzLmpvaW4oJ3wnKSArICcpJywgJ2knKTtcbiAgICAgICAgdGhpcy5fZXJhc05hcnJvd1JlZ2V4ID0gbmV3IFJlZ0V4cChcbiAgICAgICAgICAgICdeKCcgKyBuYXJyb3dQaWVjZXMuam9pbignfCcpICsgJyknLFxuICAgICAgICAgICAgJ2knXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oMCwgWydnZycsIDJdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLndlZWtZZWFyKCkgJSAxMDA7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ0dHJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNvV2Vla1llYXIoKSAlIDEwMDtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4odG9rZW4sIGdldHRlcikge1xuICAgICAgICBhZGRGb3JtYXRUb2tlbigwLCBbdG9rZW4sIHRva2VuLmxlbmd0aF0sIDAsIGdldHRlcik7XG4gICAgfVxuXG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignZ2dnZycsICd3ZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ2dnZ2dnJywgJ3dlZWtZZWFyJyk7XG4gICAgYWRkV2Vla1llYXJGb3JtYXRUb2tlbignR0dHRycsICdpc29XZWVrWWVhcicpO1xuICAgIGFkZFdlZWtZZWFyRm9ybWF0VG9rZW4oJ0dHR0dHJywgJ2lzb1dlZWtZZWFyJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3dlZWtZZWFyJywgJ2dnJyk7XG4gICAgYWRkVW5pdEFsaWFzKCdpc29XZWVrWWVhcicsICdHRycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnd2Vla1llYXInLCAxKTtcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2lzb1dlZWtZZWFyJywgMSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdHJywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2cnLCBtYXRjaFNpZ25lZCk7XG4gICAgYWRkUmVnZXhUb2tlbignR0cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignZ2cnLCBtYXRjaDF0bzIsIG1hdGNoMik7XG4gICAgYWRkUmVnZXhUb2tlbignR0dHRycsIG1hdGNoMXRvNCwgbWF0Y2g0KTtcbiAgICBhZGRSZWdleFRva2VuKCdnZ2dnJywgbWF0Y2gxdG80LCBtYXRjaDQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0dHR0dHJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ2dnZ2dnJywgbWF0Y2gxdG82LCBtYXRjaDYpO1xuXG4gICAgYWRkV2Vla1BhcnNlVG9rZW4oXG4gICAgICAgIFsnZ2dnZycsICdnZ2dnZycsICdHR0dHJywgJ0dHR0dHJ10sXG4gICAgICAgIGZ1bmN0aW9uIChpbnB1dCwgd2VlaywgY29uZmlnLCB0b2tlbikge1xuICAgICAgICAgICAgd2Vla1t0b2tlbi5zdWJzdHIoMCwgMildID0gdG9JbnQoaW5wdXQpO1xuICAgICAgICB9XG4gICAgKTtcblxuICAgIGFkZFdlZWtQYXJzZVRva2VuKFsnZ2cnLCAnR0cnXSwgZnVuY3Rpb24gKGlucHV0LCB3ZWVrLCBjb25maWcsIHRva2VuKSB7XG4gICAgICAgIHdlZWtbdG9rZW5dID0gaG9va3MucGFyc2VUd29EaWdpdFllYXIoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0V2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLndlZWsoKSxcbiAgICAgICAgICAgIHRoaXMud2Vla2RheSgpLFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG93LFxuICAgICAgICAgICAgdGhpcy5sb2NhbGVEYXRhKCkuX3dlZWsuZG95XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U2V0SVNPV2Vla1llYXIoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIGdldFNldFdlZWtZZWFySGVscGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICB0aGlzLmlzb1dlZWsoKSxcbiAgICAgICAgICAgIHRoaXMuaXNvV2Vla2RheSgpLFxuICAgICAgICAgICAgMSxcbiAgICAgICAgICAgIDRcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luWWVhcigpIHtcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCAxLCA0KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRJU09XZWVrc0luSVNPV2Vla1llYXIoKSB7XG4gICAgICAgIHJldHVybiB3ZWVrc0luWWVhcih0aGlzLmlzb1dlZWtZZWFyKCksIDEsIDQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFdlZWtzSW5ZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMueWVhcigpLCB3ZWVrSW5mby5kb3csIHdlZWtJbmZvLmRveSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0V2Vla3NJbldlZWtZZWFyKCkge1xuICAgICAgICB2YXIgd2Vla0luZm8gPSB0aGlzLmxvY2FsZURhdGEoKS5fd2VlaztcbiAgICAgICAgcmV0dXJuIHdlZWtzSW5ZZWFyKHRoaXMud2Vla1llYXIoKSwgd2Vla0luZm8uZG93LCB3ZWVrSW5mby5kb3kpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFNldFdlZWtZZWFySGVscGVyKGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgd2Vla3NUYXJnZXQ7XG4gICAgICAgIGlmIChpbnB1dCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gd2Vla09mWWVhcih0aGlzLCBkb3csIGRveSkueWVhcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHdlZWtzVGFyZ2V0ID0gd2Vla3NJblllYXIoaW5wdXQsIGRvdywgZG95KTtcbiAgICAgICAgICAgIGlmICh3ZWVrID4gd2Vla3NUYXJnZXQpIHtcbiAgICAgICAgICAgICAgICB3ZWVrID0gd2Vla3NUYXJnZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2V0V2Vla0FsbC5jYWxsKHRoaXMsIGlucHV0LCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzZXRXZWVrQWxsKHdlZWtZZWFyLCB3ZWVrLCB3ZWVrZGF5LCBkb3csIGRveSkge1xuICAgICAgICB2YXIgZGF5T2ZZZWFyRGF0YSA9IGRheU9mWWVhckZyb21XZWVrcyh3ZWVrWWVhciwgd2Vlaywgd2Vla2RheSwgZG93LCBkb3kpLFxuICAgICAgICAgICAgZGF0ZSA9IGNyZWF0ZVVUQ0RhdGUoZGF5T2ZZZWFyRGF0YS55ZWFyLCAwLCBkYXlPZlllYXJEYXRhLmRheU9mWWVhcik7XG5cbiAgICAgICAgdGhpcy55ZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSk7XG4gICAgICAgIHRoaXMubW9udGgoZGF0ZS5nZXRVVENNb250aCgpKTtcbiAgICAgICAgdGhpcy5kYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ1EnLCAwLCAnUW8nLCAncXVhcnRlcicpO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdxdWFydGVyJywgJ1EnKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ3F1YXJ0ZXInLCA3KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ1EnLCBtYXRjaDEpO1xuICAgIGFkZFBhcnNlVG9rZW4oJ1EnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5KSB7XG4gICAgICAgIGFycmF5W01PTlRIXSA9ICh0b0ludChpbnB1dCkgLSAxKSAqIDM7XG4gICAgfSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICBmdW5jdGlvbiBnZXRTZXRRdWFydGVyKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsXG4gICAgICAgICAgICA/IE1hdGguY2VpbCgodGhpcy5tb250aCgpICsgMSkgLyAzKVxuICAgICAgICAgICAgOiB0aGlzLm1vbnRoKChpbnB1dCAtIDEpICogMyArICh0aGlzLm1vbnRoKCkgJSAzKSk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0QnLCBbJ0REJywgMl0sICdEbycsICdkYXRlJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ2RhdGUnLCAnRCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RhdGUnLCA5KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ0QnLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0REJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ0RvJywgZnVuY3Rpb24gKGlzU3RyaWN0LCBsb2NhbGUpIHtcbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIFwib3JkaW5hbFBhcnNlXCIgZmFsbGJhY2sgaW4gbmV4dCBtYWpvciByZWxlYXNlLlxuICAgICAgICByZXR1cm4gaXNTdHJpY3RcbiAgICAgICAgICAgID8gbG9jYWxlLl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIHx8IGxvY2FsZS5fb3JkaW5hbFBhcnNlXG4gICAgICAgICAgICA6IGxvY2FsZS5fZGF5T2ZNb250aE9yZGluYWxQYXJzZUxlbmllbnQ7XG4gICAgfSk7XG5cbiAgICBhZGRQYXJzZVRva2VuKFsnRCcsICdERCddLCBEQVRFKTtcbiAgICBhZGRQYXJzZVRva2VuKCdEbycsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXkpIHtcbiAgICAgICAgYXJyYXlbREFURV0gPSB0b0ludChpbnB1dC5tYXRjaChtYXRjaDF0bzIpWzBdKTtcbiAgICB9KTtcblxuICAgIC8vIE1PTUVOVFNcblxuICAgIHZhciBnZXRTZXREYXlPZk1vbnRoID0gbWFrZUdldFNldCgnRGF0ZScsIHRydWUpO1xuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ0RERCcsIFsnRERERCcsIDNdLCAnREREbycsICdkYXlPZlllYXInKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnZGF5T2ZZZWFyJywgJ0RERCcpO1xuXG4gICAgLy8gUFJJT1JJVFlcbiAgICBhZGRVbml0UHJpb3JpdHkoJ2RheU9mWWVhcicsIDQpO1xuXG4gICAgLy8gUEFSU0lOR1xuXG4gICAgYWRkUmVnZXhUb2tlbignREREJywgbWF0Y2gxdG8zKTtcbiAgICBhZGRSZWdleFRva2VuKCdEREREJywgbWF0Y2gzKTtcbiAgICBhZGRQYXJzZVRva2VuKFsnREREJywgJ0REREQnXSwgZnVuY3Rpb24gKGlucHV0LCBhcnJheSwgY29uZmlnKSB7XG4gICAgICAgIGNvbmZpZy5fZGF5T2ZZZWFyID0gdG9JbnQoaW5wdXQpO1xuICAgIH0pO1xuXG4gICAgLy8gSEVMUEVSU1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0U2V0RGF5T2ZZZWFyKGlucHV0KSB7XG4gICAgICAgIHZhciBkYXlPZlllYXIgPVxuICAgICAgICAgICAgTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICAodGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpIC0gdGhpcy5jbG9uZSgpLnN0YXJ0T2YoJ3llYXInKSkgLyA4NjRlNVxuICAgICAgICAgICAgKSArIDE7XG4gICAgICAgIHJldHVybiBpbnB1dCA9PSBudWxsID8gZGF5T2ZZZWFyIDogdGhpcy5hZGQoaW5wdXQgLSBkYXlPZlllYXIsICdkJyk7XG4gICAgfVxuXG4gICAgLy8gRk9STUFUVElOR1xuXG4gICAgYWRkRm9ybWF0VG9rZW4oJ20nLCBbJ21tJywgMl0sIDAsICdtaW51dGUnKTtcblxuICAgIC8vIEFMSUFTRVNcblxuICAgIGFkZFVuaXRBbGlhcygnbWludXRlJywgJ20nKTtcblxuICAgIC8vIFBSSU9SSVRZXG5cbiAgICBhZGRVbml0UHJpb3JpdHkoJ21pbnV0ZScsIDE0KTtcblxuICAgIC8vIFBBUlNJTkdcblxuICAgIGFkZFJlZ2V4VG9rZW4oJ20nLCBtYXRjaDF0bzIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ21tJywgbWF0Y2gxdG8yLCBtYXRjaDIpO1xuICAgIGFkZFBhcnNlVG9rZW4oWydtJywgJ21tJ10sIE1JTlVURSk7XG5cbiAgICAvLyBNT01FTlRTXG5cbiAgICB2YXIgZ2V0U2V0TWludXRlID0gbWFrZUdldFNldCgnTWludXRlcycsIGZhbHNlKTtcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdzJywgWydzcycsIDJdLCAwLCAnc2Vjb25kJyk7XG5cbiAgICAvLyBBTElBU0VTXG5cbiAgICBhZGRVbml0QWxpYXMoJ3NlY29uZCcsICdzJyk7XG5cbiAgICAvLyBQUklPUklUWVxuXG4gICAgYWRkVW5pdFByaW9yaXR5KCdzZWNvbmQnLCAxNSk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdzJywgbWF0Y2gxdG8yKTtcbiAgICBhZGRSZWdleFRva2VuKCdzcycsIG1hdGNoMXRvMiwgbWF0Y2gyKTtcbiAgICBhZGRQYXJzZVRva2VuKFsncycsICdzcyddLCBTRUNPTkQpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgdmFyIGdldFNldFNlY29uZCA9IG1ha2VHZXRTZXQoJ1NlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbignUycsIDAsIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwMCk7XG4gICAgfSk7XG5cbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTJywgMl0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIH5+KHRoaXMubWlsbGlzZWNvbmQoKSAvIDEwKTtcbiAgICB9KTtcblxuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTJywgM10sIDAsICdtaWxsaXNlY29uZCcpO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTUycsIDRdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTJywgNV0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTUycsIDZdLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwO1xuICAgIH0pO1xuICAgIGFkZEZvcm1hdFRva2VuKDAsIFsnU1NTU1NTUycsIDddLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTJywgOF0sIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWlsbGlzZWNvbmQoKSAqIDEwMDAwMDtcbiAgICB9KTtcbiAgICBhZGRGb3JtYXRUb2tlbigwLCBbJ1NTU1NTU1NTUycsIDldLCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbGxpc2Vjb25kKCkgKiAxMDAwMDAwO1xuICAgIH0pO1xuXG4gICAgLy8gQUxJQVNFU1xuXG4gICAgYWRkVW5pdEFsaWFzKCdtaWxsaXNlY29uZCcsICdtcycpO1xuXG4gICAgLy8gUFJJT1JJVFlcblxuICAgIGFkZFVuaXRQcmlvcml0eSgnbWlsbGlzZWNvbmQnLCAxNik7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCdTJywgbWF0Y2gxdG8zLCBtYXRjaDEpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTJywgbWF0Y2gxdG8zLCBtYXRjaDIpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1NTUycsIG1hdGNoMXRvMywgbWF0Y2gzKTtcblxuICAgIHZhciB0b2tlbiwgZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgZm9yICh0b2tlbiA9ICdTU1NTJzsgdG9rZW4ubGVuZ3RoIDw9IDk7IHRva2VuICs9ICdTJykge1xuICAgICAgICBhZGRSZWdleFRva2VuKHRva2VuLCBtYXRjaFVuc2lnbmVkKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU1zKGlucHV0LCBhcnJheSkge1xuICAgICAgICBhcnJheVtNSUxMSVNFQ09ORF0gPSB0b0ludCgoJzAuJyArIGlucHV0KSAqIDEwMDApO1xuICAgIH1cblxuICAgIGZvciAodG9rZW4gPSAnUyc7IHRva2VuLmxlbmd0aCA8PSA5OyB0b2tlbiArPSAnUycpIHtcbiAgICAgICAgYWRkUGFyc2VUb2tlbih0b2tlbiwgcGFyc2VNcyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0TWlsbGlzZWNvbmQgPSBtYWtlR2V0U2V0KCdNaWxsaXNlY29uZHMnLCBmYWxzZSk7XG5cbiAgICAvLyBGT1JNQVRUSU5HXG5cbiAgICBhZGRGb3JtYXRUb2tlbigneicsIDAsIDAsICd6b25lQWJicicpO1xuICAgIGFkZEZvcm1hdFRva2VuKCd6eicsIDAsIDAsICd6b25lTmFtZScpO1xuXG4gICAgLy8gTU9NRU5UU1xuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZUFiYnIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdVVEMnIDogJyc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0Wm9uZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1VUQyA/ICdDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZScgOiAnJztcbiAgICB9XG5cbiAgICB2YXIgcHJvdG8gPSBNb21lbnQucHJvdG90eXBlO1xuXG4gICAgcHJvdG8uYWRkID0gYWRkO1xuICAgIHByb3RvLmNhbGVuZGFyID0gY2FsZW5kYXIkMTtcbiAgICBwcm90by5jbG9uZSA9IGNsb25lO1xuICAgIHByb3RvLmRpZmYgPSBkaWZmO1xuICAgIHByb3RvLmVuZE9mID0gZW5kT2Y7XG4gICAgcHJvdG8uZm9ybWF0ID0gZm9ybWF0O1xuICAgIHByb3RvLmZyb20gPSBmcm9tO1xuICAgIHByb3RvLmZyb21Ob3cgPSBmcm9tTm93O1xuICAgIHByb3RvLnRvID0gdG87XG4gICAgcHJvdG8udG9Ob3cgPSB0b05vdztcbiAgICBwcm90by5nZXQgPSBzdHJpbmdHZXQ7XG4gICAgcHJvdG8uaW52YWxpZEF0ID0gaW52YWxpZEF0O1xuICAgIHByb3RvLmlzQWZ0ZXIgPSBpc0FmdGVyO1xuICAgIHByb3RvLmlzQmVmb3JlID0gaXNCZWZvcmU7XG4gICAgcHJvdG8uaXNCZXR3ZWVuID0gaXNCZXR3ZWVuO1xuICAgIHByb3RvLmlzU2FtZSA9IGlzU2FtZTtcbiAgICBwcm90by5pc1NhbWVPckFmdGVyID0gaXNTYW1lT3JBZnRlcjtcbiAgICBwcm90by5pc1NhbWVPckJlZm9yZSA9IGlzU2FtZU9yQmVmb3JlO1xuICAgIHByb3RvLmlzVmFsaWQgPSBpc1ZhbGlkJDI7XG4gICAgcHJvdG8ubGFuZyA9IGxhbmc7XG4gICAgcHJvdG8ubG9jYWxlID0gbG9jYWxlO1xuICAgIHByb3RvLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuICAgIHByb3RvLm1heCA9IHByb3RvdHlwZU1heDtcbiAgICBwcm90by5taW4gPSBwcm90b3R5cGVNaW47XG4gICAgcHJvdG8ucGFyc2luZ0ZsYWdzID0gcGFyc2luZ0ZsYWdzO1xuICAgIHByb3RvLnNldCA9IHN0cmluZ1NldDtcbiAgICBwcm90by5zdGFydE9mID0gc3RhcnRPZjtcbiAgICBwcm90by5zdWJ0cmFjdCA9IHN1YnRyYWN0O1xuICAgIHByb3RvLnRvQXJyYXkgPSB0b0FycmF5O1xuICAgIHByb3RvLnRvT2JqZWN0ID0gdG9PYmplY3Q7XG4gICAgcHJvdG8udG9EYXRlID0gdG9EYXRlO1xuICAgIHByb3RvLnRvSVNPU3RyaW5nID0gdG9JU09TdHJpbmc7XG4gICAgcHJvdG8uaW5zcGVjdCA9IGluc3BlY3Q7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5mb3IgIT0gbnVsbCkge1xuICAgICAgICBwcm90b1tTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiAnTW9tZW50PCcgKyB0aGlzLmZvcm1hdCgpICsgJz4nO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBwcm90by50b0pTT04gPSB0b0pTT047XG4gICAgcHJvdG8udG9TdHJpbmcgPSB0b1N0cmluZztcbiAgICBwcm90by51bml4ID0gdW5peDtcbiAgICBwcm90by52YWx1ZU9mID0gdmFsdWVPZjtcbiAgICBwcm90by5jcmVhdGlvbkRhdGEgPSBjcmVhdGlvbkRhdGE7XG4gICAgcHJvdG8uZXJhTmFtZSA9IGdldEVyYU5hbWU7XG4gICAgcHJvdG8uZXJhTmFycm93ID0gZ2V0RXJhTmFycm93O1xuICAgIHByb3RvLmVyYUFiYnIgPSBnZXRFcmFBYmJyO1xuICAgIHByb3RvLmVyYVllYXIgPSBnZXRFcmFZZWFyO1xuICAgIHByb3RvLnllYXIgPSBnZXRTZXRZZWFyO1xuICAgIHByb3RvLmlzTGVhcFllYXIgPSBnZXRJc0xlYXBZZWFyO1xuICAgIHByb3RvLndlZWtZZWFyID0gZ2V0U2V0V2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla1llYXIgPSBnZXRTZXRJU09XZWVrWWVhcjtcbiAgICBwcm90by5xdWFydGVyID0gcHJvdG8ucXVhcnRlcnMgPSBnZXRTZXRRdWFydGVyO1xuICAgIHByb3RvLm1vbnRoID0gZ2V0U2V0TW9udGg7XG4gICAgcHJvdG8uZGF5c0luTW9udGggPSBnZXREYXlzSW5Nb250aDtcbiAgICBwcm90by53ZWVrID0gcHJvdG8ud2Vla3MgPSBnZXRTZXRXZWVrO1xuICAgIHByb3RvLmlzb1dlZWsgPSBwcm90by5pc29XZWVrcyA9IGdldFNldElTT1dlZWs7XG4gICAgcHJvdG8ud2Vla3NJblllYXIgPSBnZXRXZWVrc0luWWVhcjtcbiAgICBwcm90by53ZWVrc0luV2Vla1llYXIgPSBnZXRXZWVrc0luV2Vla1llYXI7XG4gICAgcHJvdG8uaXNvV2Vla3NJblllYXIgPSBnZXRJU09XZWVrc0luWWVhcjtcbiAgICBwcm90by5pc29XZWVrc0luSVNPV2Vla1llYXIgPSBnZXRJU09XZWVrc0luSVNPV2Vla1llYXI7XG4gICAgcHJvdG8uZGF0ZSA9IGdldFNldERheU9mTW9udGg7XG4gICAgcHJvdG8uZGF5ID0gcHJvdG8uZGF5cyA9IGdldFNldERheU9mV2VlaztcbiAgICBwcm90by53ZWVrZGF5ID0gZ2V0U2V0TG9jYWxlRGF5T2ZXZWVrO1xuICAgIHByb3RvLmlzb1dlZWtkYXkgPSBnZXRTZXRJU09EYXlPZldlZWs7XG4gICAgcHJvdG8uZGF5T2ZZZWFyID0gZ2V0U2V0RGF5T2ZZZWFyO1xuICAgIHByb3RvLmhvdXIgPSBwcm90by5ob3VycyA9IGdldFNldEhvdXI7XG4gICAgcHJvdG8ubWludXRlID0gcHJvdG8ubWludXRlcyA9IGdldFNldE1pbnV0ZTtcbiAgICBwcm90by5zZWNvbmQgPSBwcm90by5zZWNvbmRzID0gZ2V0U2V0U2Vjb25kO1xuICAgIHByb3RvLm1pbGxpc2Vjb25kID0gcHJvdG8ubWlsbGlzZWNvbmRzID0gZ2V0U2V0TWlsbGlzZWNvbmQ7XG4gICAgcHJvdG8udXRjT2Zmc2V0ID0gZ2V0U2V0T2Zmc2V0O1xuICAgIHByb3RvLnV0YyA9IHNldE9mZnNldFRvVVRDO1xuICAgIHByb3RvLmxvY2FsID0gc2V0T2Zmc2V0VG9Mb2NhbDtcbiAgICBwcm90by5wYXJzZVpvbmUgPSBzZXRPZmZzZXRUb1BhcnNlZE9mZnNldDtcbiAgICBwcm90by5oYXNBbGlnbmVkSG91ck9mZnNldCA9IGhhc0FsaWduZWRIb3VyT2Zmc2V0O1xuICAgIHByb3RvLmlzRFNUID0gaXNEYXlsaWdodFNhdmluZ1RpbWU7XG4gICAgcHJvdG8uaXNMb2NhbCA9IGlzTG9jYWw7XG4gICAgcHJvdG8uaXNVdGNPZmZzZXQgPSBpc1V0Y09mZnNldDtcbiAgICBwcm90by5pc1V0YyA9IGlzVXRjO1xuICAgIHByb3RvLmlzVVRDID0gaXNVdGM7XG4gICAgcHJvdG8uem9uZUFiYnIgPSBnZXRab25lQWJicjtcbiAgICBwcm90by56b25lTmFtZSA9IGdldFpvbmVOYW1lO1xuICAgIHByb3RvLmRhdGVzID0gZGVwcmVjYXRlKFxuICAgICAgICAnZGF0ZXMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIGRhdGUgaW5zdGVhZC4nLFxuICAgICAgICBnZXRTZXREYXlPZk1vbnRoXG4gICAgKTtcbiAgICBwcm90by5tb250aHMgPSBkZXByZWNhdGUoXG4gICAgICAgICdtb250aHMgYWNjZXNzb3IgaXMgZGVwcmVjYXRlZC4gVXNlIG1vbnRoIGluc3RlYWQnLFxuICAgICAgICBnZXRTZXRNb250aFxuICAgICk7XG4gICAgcHJvdG8ueWVhcnMgPSBkZXByZWNhdGUoXG4gICAgICAgICd5ZWFycyBhY2Nlc3NvciBpcyBkZXByZWNhdGVkLiBVc2UgeWVhciBpbnN0ZWFkJyxcbiAgICAgICAgZ2V0U2V0WWVhclxuICAgICk7XG4gICAgcHJvdG8uem9uZSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudCgpLnpvbmUgaXMgZGVwcmVjYXRlZCwgdXNlIG1vbWVudCgpLnV0Y09mZnNldCBpbnN0ZWFkLiBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL3pvbmUvJyxcbiAgICAgICAgZ2V0U2V0Wm9uZVxuICAgICk7XG4gICAgcHJvdG8uaXNEU1RTaGlmdGVkID0gZGVwcmVjYXRlKFxuICAgICAgICAnaXNEU1RTaGlmdGVkIGlzIGRlcHJlY2F0ZWQuIFNlZSBodHRwOi8vbW9tZW50anMuY29tL2d1aWRlcy8jL3dhcm5pbmdzL2RzdC1zaGlmdGVkLyBmb3IgbW9yZSBpbmZvcm1hdGlvbicsXG4gICAgICAgIGlzRGF5bGlnaHRTYXZpbmdUaW1lU2hpZnRlZFxuICAgICk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVVbml4KGlucHV0KSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVMb2NhbChpbnB1dCAqIDEwMDApO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUluWm9uZSgpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUxvY2FsLmFwcGx5KG51bGwsIGFyZ3VtZW50cykucGFyc2Vab25lKCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcHJlUGFyc2VQb3N0Rm9ybWF0KHN0cmluZykge1xuICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgIH1cblxuICAgIHZhciBwcm90byQxID0gTG9jYWxlLnByb3RvdHlwZTtcblxuICAgIHByb3RvJDEuY2FsZW5kYXIgPSBjYWxlbmRhcjtcbiAgICBwcm90byQxLmxvbmdEYXRlRm9ybWF0ID0gbG9uZ0RhdGVGb3JtYXQ7XG4gICAgcHJvdG8kMS5pbnZhbGlkRGF0ZSA9IGludmFsaWREYXRlO1xuICAgIHByb3RvJDEub3JkaW5hbCA9IG9yZGluYWw7XG4gICAgcHJvdG8kMS5wcmVwYXJzZSA9IHByZVBhcnNlUG9zdEZvcm1hdDtcbiAgICBwcm90byQxLnBvc3Rmb3JtYXQgPSBwcmVQYXJzZVBvc3RGb3JtYXQ7XG4gICAgcHJvdG8kMS5yZWxhdGl2ZVRpbWUgPSByZWxhdGl2ZVRpbWU7XG4gICAgcHJvdG8kMS5wYXN0RnV0dXJlID0gcGFzdEZ1dHVyZTtcbiAgICBwcm90byQxLnNldCA9IHNldDtcbiAgICBwcm90byQxLmVyYXMgPSBsb2NhbGVFcmFzO1xuICAgIHByb3RvJDEuZXJhc1BhcnNlID0gbG9jYWxlRXJhc1BhcnNlO1xuICAgIHByb3RvJDEuZXJhc0NvbnZlcnRZZWFyID0gbG9jYWxlRXJhc0NvbnZlcnRZZWFyO1xuICAgIHByb3RvJDEuZXJhc0FiYnJSZWdleCA9IGVyYXNBYmJyUmVnZXg7XG4gICAgcHJvdG8kMS5lcmFzTmFtZVJlZ2V4ID0gZXJhc05hbWVSZWdleDtcbiAgICBwcm90byQxLmVyYXNOYXJyb3dSZWdleCA9IGVyYXNOYXJyb3dSZWdleDtcblxuICAgIHByb3RvJDEubW9udGhzID0gbG9jYWxlTW9udGhzO1xuICAgIHByb3RvJDEubW9udGhzU2hvcnQgPSBsb2NhbGVNb250aHNTaG9ydDtcbiAgICBwcm90byQxLm1vbnRoc1BhcnNlID0gbG9jYWxlTW9udGhzUGFyc2U7XG4gICAgcHJvdG8kMS5tb250aHNSZWdleCA9IG1vbnRoc1JlZ2V4O1xuICAgIHByb3RvJDEubW9udGhzU2hvcnRSZWdleCA9IG1vbnRoc1Nob3J0UmVnZXg7XG4gICAgcHJvdG8kMS53ZWVrID0gbG9jYWxlV2VlaztcbiAgICBwcm90byQxLmZpcnN0RGF5T2ZZZWFyID0gbG9jYWxlRmlyc3REYXlPZlllYXI7XG4gICAgcHJvdG8kMS5maXJzdERheU9mV2VlayA9IGxvY2FsZUZpcnN0RGF5T2ZXZWVrO1xuXG4gICAgcHJvdG8kMS53ZWVrZGF5cyA9IGxvY2FsZVdlZWtkYXlzO1xuICAgIHByb3RvJDEud2Vla2RheXNNaW4gPSBsb2NhbGVXZWVrZGF5c01pbjtcbiAgICBwcm90byQxLndlZWtkYXlzU2hvcnQgPSBsb2NhbGVXZWVrZGF5c1Nob3J0O1xuICAgIHByb3RvJDEud2Vla2RheXNQYXJzZSA9IGxvY2FsZVdlZWtkYXlzUGFyc2U7XG5cbiAgICBwcm90byQxLndlZWtkYXlzUmVnZXggPSB3ZWVrZGF5c1JlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNTaG9ydFJlZ2V4ID0gd2Vla2RheXNTaG9ydFJlZ2V4O1xuICAgIHByb3RvJDEud2Vla2RheXNNaW5SZWdleCA9IHdlZWtkYXlzTWluUmVnZXg7XG5cbiAgICBwcm90byQxLmlzUE0gPSBsb2NhbGVJc1BNO1xuICAgIHByb3RvJDEubWVyaWRpZW0gPSBsb2NhbGVNZXJpZGllbTtcblxuICAgIGZ1bmN0aW9uIGdldCQxKGZvcm1hdCwgaW5kZXgsIGZpZWxkLCBzZXR0ZXIpIHtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGdldExvY2FsZSgpLFxuICAgICAgICAgICAgdXRjID0gY3JlYXRlVVRDKCkuc2V0KHNldHRlciwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbG9jYWxlW2ZpZWxkXSh1dGMsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgZmllbGQpIHtcbiAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgZm9ybWF0ID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuXG4gICAgICAgIGlmIChpbmRleCAhPSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0JDEoZm9ybWF0LCBpbmRleCwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGksXG4gICAgICAgICAgICBvdXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIG91dFtpXSA9IGdldCQxKGZvcm1hdCwgaSwgZmllbGQsICdtb250aCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuXG4gICAgLy8gKClcbiAgICAvLyAoNSlcbiAgICAvLyAoZm10LCA1KVxuICAgIC8vIChmbXQpXG4gICAgLy8gKHRydWUpXG4gICAgLy8gKHRydWUsIDUpXG4gICAgLy8gKHRydWUsIGZtdCwgNSlcbiAgICAvLyAodHJ1ZSwgZm10KVxuICAgIGZ1bmN0aW9uIGxpc3RXZWVrZGF5c0ltcGwobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4LCBmaWVsZCkge1xuICAgICAgICBpZiAodHlwZW9mIGxvY2FsZVNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICBpZiAoaXNOdW1iZXIoZm9ybWF0KSkge1xuICAgICAgICAgICAgICAgIGluZGV4ID0gZm9ybWF0O1xuICAgICAgICAgICAgICAgIGZvcm1hdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9ybWF0ID0gZm9ybWF0IHx8ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9ybWF0ID0gbG9jYWxlU29ydGVkO1xuICAgICAgICAgICAgaW5kZXggPSBmb3JtYXQ7XG4gICAgICAgICAgICBsb2NhbGVTb3J0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGlzTnVtYmVyKGZvcm1hdCkpIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGZvcm1hdDtcbiAgICAgICAgICAgICAgICBmb3JtYXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvcm1hdCA9IGZvcm1hdCB8fCAnJztcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBsb2NhbGUgPSBnZXRMb2NhbGUoKSxcbiAgICAgICAgICAgIHNoaWZ0ID0gbG9jYWxlU29ydGVkID8gbG9jYWxlLl93ZWVrLmRvdyA6IDAsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgb3V0ID0gW107XG5cbiAgICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXQkMShmb3JtYXQsIChpbmRleCArIHNoaWZ0KSAlIDcsIGZpZWxkLCAnZGF5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICAgICAgICBvdXRbaV0gPSBnZXQkMShmb3JtYXQsIChpICsgc2hpZnQpICUgNywgZmllbGQsICdkYXknKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHMoZm9ybWF0LCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbGlzdE1vbnRoc0ltcGwoZm9ybWF0LCBpbmRleCwgJ21vbnRocycpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGxpc3RNb250aHNTaG9ydChmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0TW9udGhzSW1wbChmb3JtYXQsIGluZGV4LCAnbW9udGhzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXMobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzJyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbGlzdFdlZWtkYXlzU2hvcnQobG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzU2hvcnQnKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBsaXN0V2Vla2RheXNNaW4obG9jYWxlU29ydGVkLCBmb3JtYXQsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBsaXN0V2Vla2RheXNJbXBsKGxvY2FsZVNvcnRlZCwgZm9ybWF0LCBpbmRleCwgJ3dlZWtkYXlzTWluJyk7XG4gICAgfVxuXG4gICAgZ2V0U2V0R2xvYmFsTG9jYWxlKCdlbicsIHtcbiAgICAgICAgZXJhczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNpbmNlOiAnMDAwMS0wMS0wMScsXG4gICAgICAgICAgICAgICAgdW50aWw6ICtJbmZpbml0eSxcbiAgICAgICAgICAgICAgICBvZmZzZXQ6IDEsXG4gICAgICAgICAgICAgICAgbmFtZTogJ0Fubm8gRG9taW5pJyxcbiAgICAgICAgICAgICAgICBuYXJyb3c6ICdBRCcsXG4gICAgICAgICAgICAgICAgYWJicjogJ0FEJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2luY2U6ICcwMDAwLTEyLTMxJyxcbiAgICAgICAgICAgICAgICB1bnRpbDogLUluZmluaXR5LFxuICAgICAgICAgICAgICAgIG9mZnNldDogMSxcbiAgICAgICAgICAgICAgICBuYW1lOiAnQmVmb3JlIENocmlzdCcsXG4gICAgICAgICAgICAgICAgbmFycm93OiAnQkMnLFxuICAgICAgICAgICAgICAgIGFiYnI6ICdCQycsXG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn0odGh8c3R8bmR8cmQpLyxcbiAgICAgICAgb3JkaW5hbDogZnVuY3Rpb24gKG51bWJlcikge1xuICAgICAgICAgICAgdmFyIGIgPSBudW1iZXIgJSAxMCxcbiAgICAgICAgICAgICAgICBvdXRwdXQgPVxuICAgICAgICAgICAgICAgICAgICB0b0ludCgobnVtYmVyICUgMTAwKSAvIDEwKSA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAndGgnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDFcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJ3N0J1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAyXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICduZCdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gM1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAncmQnXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICd0aCc7XG4gICAgICAgICAgICByZXR1cm4gbnVtYmVyICsgb3V0cHV0O1xuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgLy8gU2lkZSBlZmZlY3QgaW1wb3J0c1xuXG4gICAgaG9va3MubGFuZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nIGlzIGRlcHJlY2F0ZWQuIFVzZSBtb21lbnQubG9jYWxlIGluc3RlYWQuJyxcbiAgICAgICAgZ2V0U2V0R2xvYmFsTG9jYWxlXG4gICAgKTtcbiAgICBob29rcy5sYW5nRGF0YSA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ21vbWVudC5sYW5nRGF0YSBpcyBkZXByZWNhdGVkLiBVc2UgbW9tZW50LmxvY2FsZURhdGEgaW5zdGVhZC4nLFxuICAgICAgICBnZXRMb2NhbGVcbiAgICApO1xuXG4gICAgdmFyIG1hdGhBYnMgPSBNYXRoLmFicztcblxuICAgIGZ1bmN0aW9uIGFicygpIHtcbiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgICAgIHRoaXMuX21pbGxpc2Vjb25kcyA9IG1hdGhBYnModGhpcy5fbWlsbGlzZWNvbmRzKTtcbiAgICAgICAgdGhpcy5fZGF5cyA9IG1hdGhBYnModGhpcy5fZGF5cyk7XG4gICAgICAgIHRoaXMuX21vbnRocyA9IG1hdGhBYnModGhpcy5fbW9udGhzKTtcblxuICAgICAgICBkYXRhLm1pbGxpc2Vjb25kcyA9IG1hdGhBYnMoZGF0YS5taWxsaXNlY29uZHMpO1xuICAgICAgICBkYXRhLnNlY29uZHMgPSBtYXRoQWJzKGRhdGEuc2Vjb25kcyk7XG4gICAgICAgIGRhdGEubWludXRlcyA9IG1hdGhBYnMoZGF0YS5taW51dGVzKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IG1hdGhBYnMoZGF0YS5ob3Vycyk7XG4gICAgICAgIGRhdGEubW9udGhzID0gbWF0aEFicyhkYXRhLm1vbnRocyk7XG4gICAgICAgIGRhdGEueWVhcnMgPSBtYXRoQWJzKGRhdGEueWVhcnMpO1xuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkZFN1YnRyYWN0JDEoZHVyYXRpb24sIGlucHV0LCB2YWx1ZSwgZGlyZWN0aW9uKSB7XG4gICAgICAgIHZhciBvdGhlciA9IGNyZWF0ZUR1cmF0aW9uKGlucHV0LCB2YWx1ZSk7XG5cbiAgICAgICAgZHVyYXRpb24uX21pbGxpc2Vjb25kcyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbWlsbGlzZWNvbmRzO1xuICAgICAgICBkdXJhdGlvbi5fZGF5cyArPSBkaXJlY3Rpb24gKiBvdGhlci5fZGF5cztcbiAgICAgICAgZHVyYXRpb24uX21vbnRocyArPSBkaXJlY3Rpb24gKiBvdGhlci5fbW9udGhzO1xuXG4gICAgICAgIHJldHVybiBkdXJhdGlvbi5fYnViYmxlKCk7XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydHMgb25seSAyLjAtc3R5bGUgYWRkKDEsICdzJykgb3IgYWRkKGR1cmF0aW9uKVxuICAgIGZ1bmN0aW9uIGFkZCQxKGlucHV0LCB2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWRkU3VidHJhY3QkMSh0aGlzLCBpbnB1dCwgdmFsdWUsIDEpO1xuICAgIH1cblxuICAgIC8vIHN1cHBvcnRzIG9ubHkgMi4wLXN0eWxlIHN1YnRyYWN0KDEsICdzJykgb3Igc3VidHJhY3QoZHVyYXRpb24pXG4gICAgZnVuY3Rpb24gc3VidHJhY3QkMShpbnB1dCwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0JDEodGhpcywgaW5wdXQsIHZhbHVlLCAtMSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYWJzQ2VpbChudW1iZXIpIHtcbiAgICAgICAgaWYgKG51bWJlciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKG51bWJlcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKG51bWJlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBidWJibGUoKSB7XG4gICAgICAgIHZhciBtaWxsaXNlY29uZHMgPSB0aGlzLl9taWxsaXNlY29uZHMsXG4gICAgICAgICAgICBkYXlzID0gdGhpcy5fZGF5cyxcbiAgICAgICAgICAgIG1vbnRocyA9IHRoaXMuX21vbnRocyxcbiAgICAgICAgICAgIGRhdGEgPSB0aGlzLl9kYXRhLFxuICAgICAgICAgICAgc2Vjb25kcyxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgbW9udGhzRnJvbURheXM7XG5cbiAgICAgICAgLy8gaWYgd2UgaGF2ZSBhIG1peCBvZiBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdmFsdWVzLCBidWJibGUgZG93biBmaXJzdFxuICAgICAgICAvLyBjaGVjazogaHR0cHM6Ly9naXRodWIuY29tL21vbWVudC9tb21lbnQvaXNzdWVzLzIxNjZcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICAobWlsbGlzZWNvbmRzID49IDAgJiYgZGF5cyA+PSAwICYmIG1vbnRocyA+PSAwKSB8fFxuICAgICAgICAgICAgICAgIChtaWxsaXNlY29uZHMgPD0gMCAmJiBkYXlzIDw9IDAgJiYgbW9udGhzIDw9IDApXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgbWlsbGlzZWNvbmRzICs9IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRocykgKyBkYXlzKSAqIDg2NGU1O1xuICAgICAgICAgICAgZGF5cyA9IDA7XG4gICAgICAgICAgICBtb250aHMgPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIGZvbGxvd2luZyBjb2RlIGJ1YmJsZXMgdXAgdmFsdWVzLCBzZWUgdGhlIHRlc3RzIGZvclxuICAgICAgICAvLyBleGFtcGxlcyBvZiB3aGF0IHRoYXQgbWVhbnMuXG4gICAgICAgIGRhdGEubWlsbGlzZWNvbmRzID0gbWlsbGlzZWNvbmRzICUgMTAwMDtcblxuICAgICAgICBzZWNvbmRzID0gYWJzRmxvb3IobWlsbGlzZWNvbmRzIC8gMTAwMCk7XG4gICAgICAgIGRhdGEuc2Vjb25kcyA9IHNlY29uZHMgJSA2MDtcblxuICAgICAgICBtaW51dGVzID0gYWJzRmxvb3Ioc2Vjb25kcyAvIDYwKTtcbiAgICAgICAgZGF0YS5taW51dGVzID0gbWludXRlcyAlIDYwO1xuXG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgZGF0YS5ob3VycyA9IGhvdXJzICUgMjQ7XG5cbiAgICAgICAgZGF5cyArPSBhYnNGbG9vcihob3VycyAvIDI0KTtcblxuICAgICAgICAvLyBjb252ZXJ0IGRheXMgdG8gbW9udGhzXG4gICAgICAgIG1vbnRoc0Zyb21EYXlzID0gYWJzRmxvb3IoZGF5c1RvTW9udGhzKGRheXMpKTtcbiAgICAgICAgbW9udGhzICs9IG1vbnRoc0Zyb21EYXlzO1xuICAgICAgICBkYXlzIC09IGFic0NlaWwobW9udGhzVG9EYXlzKG1vbnRoc0Zyb21EYXlzKSk7XG5cbiAgICAgICAgLy8gMTIgbW9udGhzIC0+IDEgeWVhclxuICAgICAgICB5ZWFycyA9IGFic0Zsb29yKG1vbnRocyAvIDEyKTtcbiAgICAgICAgbW9udGhzICU9IDEyO1xuXG4gICAgICAgIGRhdGEuZGF5cyA9IGRheXM7XG4gICAgICAgIGRhdGEubW9udGhzID0gbW9udGhzO1xuICAgICAgICBkYXRhLnllYXJzID0geWVhcnM7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGF5c1RvTW9udGhzKGRheXMpIHtcbiAgICAgICAgLy8gNDAwIHllYXJzIGhhdmUgMTQ2MDk3IGRheXMgKHRha2luZyBpbnRvIGFjY291bnQgbGVhcCB5ZWFyIHJ1bGVzKVxuICAgICAgICAvLyA0MDAgeWVhcnMgaGF2ZSAxMiBtb250aHMgPT09IDQ4MDBcbiAgICAgICAgcmV0dXJuIChkYXlzICogNDgwMCkgLyAxNDYwOTc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbW9udGhzVG9EYXlzKG1vbnRocykge1xuICAgICAgICAvLyB0aGUgcmV2ZXJzZSBvZiBkYXlzVG9Nb250aHNcbiAgICAgICAgcmV0dXJuIChtb250aHMgKiAxNDYwOTcpIC8gNDgwMDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcyh1bml0cykge1xuICAgICAgICBpZiAoIXRoaXMuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlzLFxuICAgICAgICAgICAgbW9udGhzLFxuICAgICAgICAgICAgbWlsbGlzZWNvbmRzID0gdGhpcy5fbWlsbGlzZWNvbmRzO1xuXG4gICAgICAgIHVuaXRzID0gbm9ybWFsaXplVW5pdHModW5pdHMpO1xuXG4gICAgICAgIGlmICh1bml0cyA9PT0gJ21vbnRoJyB8fCB1bml0cyA9PT0gJ3F1YXJ0ZXInIHx8IHVuaXRzID09PSAneWVhcicpIHtcbiAgICAgICAgICAgIGRheXMgPSB0aGlzLl9kYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICBtb250aHMgPSB0aGlzLl9tb250aHMgKyBkYXlzVG9Nb250aHMoZGF5cyk7XG4gICAgICAgICAgICBzd2l0Y2ggKHVuaXRzKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9udGhzIC8gMztcbiAgICAgICAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vbnRocyAvIDEyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaGFuZGxlIG1pbGxpc2Vjb25kcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgZmxvYXRpbmcgcG9pbnQgbWF0aCBlcnJvcnMgKGlzc3VlICMxODY3KVxuICAgICAgICAgICAgZGF5cyA9IHRoaXMuX2RheXMgKyBNYXRoLnJvdW5kKG1vbnRoc1RvRGF5cyh0aGlzLl9tb250aHMpKTtcbiAgICAgICAgICAgIHN3aXRjaCAodW5pdHMpIHtcbiAgICAgICAgICAgICAgICBjYXNlICd3ZWVrJzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRheXMgLyA3ICsgbWlsbGlzZWNvbmRzIC8gNjA0OGU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICsgbWlsbGlzZWNvbmRzIC8gODY0ZTU7XG4gICAgICAgICAgICAgICAgY2FzZSAnaG91cic6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMjQgKyBtaWxsaXNlY29uZHMgLyAzNmU1O1xuICAgICAgICAgICAgICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXlzICogMTQ0MCArIG1pbGxpc2Vjb25kcyAvIDZlNDtcbiAgICAgICAgICAgICAgICBjYXNlICdzZWNvbmQnOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF5cyAqIDg2NDAwICsgbWlsbGlzZWNvbmRzIC8gMTAwMDtcbiAgICAgICAgICAgICAgICAvLyBNYXRoLmZsb29yIHByZXZlbnRzIGZsb2F0aW5nIHBvaW50IG1hdGggZXJyb3JzIGhlcmVcbiAgICAgICAgICAgICAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKGRheXMgKiA4NjRlNSkgKyBtaWxsaXNlY29uZHM7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIHVuaXQgJyArIHVuaXRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRPRE86IFVzZSB0aGlzLmFzKCdtcycpP1xuICAgIGZ1bmN0aW9uIHZhbHVlT2YkMSgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy5fbWlsbGlzZWNvbmRzICtcbiAgICAgICAgICAgIHRoaXMuX2RheXMgKiA4NjRlNSArXG4gICAgICAgICAgICAodGhpcy5fbW9udGhzICUgMTIpICogMjU5MmU2ICtcbiAgICAgICAgICAgIHRvSW50KHRoaXMuX21vbnRocyAvIDEyKSAqIDMxNTM2ZTZcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlQXMoYWxpYXMpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzKGFsaWFzKTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICB2YXIgYXNNaWxsaXNlY29uZHMgPSBtYWtlQXMoJ21zJyksXG4gICAgICAgIGFzU2Vjb25kcyA9IG1ha2VBcygncycpLFxuICAgICAgICBhc01pbnV0ZXMgPSBtYWtlQXMoJ20nKSxcbiAgICAgICAgYXNIb3VycyA9IG1ha2VBcygnaCcpLFxuICAgICAgICBhc0RheXMgPSBtYWtlQXMoJ2QnKSxcbiAgICAgICAgYXNXZWVrcyA9IG1ha2VBcygndycpLFxuICAgICAgICBhc01vbnRocyA9IG1ha2VBcygnTScpLFxuICAgICAgICBhc1F1YXJ0ZXJzID0gbWFrZUFzKCdRJyksXG4gICAgICAgIGFzWWVhcnMgPSBtYWtlQXMoJ3knKTtcblxuICAgIGZ1bmN0aW9uIGNsb25lJDEoKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVEdXJhdGlvbih0aGlzKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXQkMih1bml0cykge1xuICAgICAgICB1bml0cyA9IG5vcm1hbGl6ZVVuaXRzKHVuaXRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpc1t1bml0cyArICdzJ10oKSA6IE5hTjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYWtlR2V0dGVyKG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzVmFsaWQoKSA/IHRoaXMuX2RhdGFbbmFtZV0gOiBOYU47XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgdmFyIG1pbGxpc2Vjb25kcyA9IG1ha2VHZXR0ZXIoJ21pbGxpc2Vjb25kcycpLFxuICAgICAgICBzZWNvbmRzID0gbWFrZUdldHRlcignc2Vjb25kcycpLFxuICAgICAgICBtaW51dGVzID0gbWFrZUdldHRlcignbWludXRlcycpLFxuICAgICAgICBob3VycyA9IG1ha2VHZXR0ZXIoJ2hvdXJzJyksXG4gICAgICAgIGRheXMgPSBtYWtlR2V0dGVyKCdkYXlzJyksXG4gICAgICAgIG1vbnRocyA9IG1ha2VHZXR0ZXIoJ21vbnRocycpLFxuICAgICAgICB5ZWFycyA9IG1ha2VHZXR0ZXIoJ3llYXJzJyk7XG5cbiAgICBmdW5jdGlvbiB3ZWVrcygpIHtcbiAgICAgICAgcmV0dXJuIGFic0Zsb29yKHRoaXMuZGF5cygpIC8gNyk7XG4gICAgfVxuXG4gICAgdmFyIHJvdW5kID0gTWF0aC5yb3VuZCxcbiAgICAgICAgdGhyZXNob2xkcyA9IHtcbiAgICAgICAgICAgIHNzOiA0NCwgLy8gYSBmZXcgc2Vjb25kcyB0byBzZWNvbmRzXG4gICAgICAgICAgICBzOiA0NSwgLy8gc2Vjb25kcyB0byBtaW51dGVcbiAgICAgICAgICAgIG06IDQ1LCAvLyBtaW51dGVzIHRvIGhvdXJcbiAgICAgICAgICAgIGg6IDIyLCAvLyBob3VycyB0byBkYXlcbiAgICAgICAgICAgIGQ6IDI2LCAvLyBkYXlzIHRvIG1vbnRoL3dlZWtcbiAgICAgICAgICAgIHc6IG51bGwsIC8vIHdlZWtzIHRvIG1vbnRoXG4gICAgICAgICAgICBNOiAxMSwgLy8gbW9udGhzIHRvIHllYXJcbiAgICAgICAgfTtcblxuICAgIC8vIGhlbHBlciBmdW5jdGlvbiBmb3IgbW9tZW50LmZuLmZyb20sIG1vbWVudC5mbi5mcm9tTm93LCBhbmQgbW9tZW50LmR1cmF0aW9uLmZuLmh1bWFuaXplXG4gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZVRpbWVBZ28oc3RyaW5nLCBudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGlzRnV0dXJlLCBsb2NhbGUpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS5yZWxhdGl2ZVRpbWUobnVtYmVyIHx8IDEsICEhd2l0aG91dFN1ZmZpeCwgc3RyaW5nLCBpc0Z1dHVyZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcmVsYXRpdmVUaW1lJDEocG9zTmVnRHVyYXRpb24sIHdpdGhvdXRTdWZmaXgsIHRocmVzaG9sZHMsIGxvY2FsZSkge1xuICAgICAgICB2YXIgZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbihwb3NOZWdEdXJhdGlvbikuYWJzKCksXG4gICAgICAgICAgICBzZWNvbmRzID0gcm91bmQoZHVyYXRpb24uYXMoJ3MnKSksXG4gICAgICAgICAgICBtaW51dGVzID0gcm91bmQoZHVyYXRpb24uYXMoJ20nKSksXG4gICAgICAgICAgICBob3VycyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdoJykpLFxuICAgICAgICAgICAgZGF5cyA9IHJvdW5kKGR1cmF0aW9uLmFzKCdkJykpLFxuICAgICAgICAgICAgbW9udGhzID0gcm91bmQoZHVyYXRpb24uYXMoJ00nKSksXG4gICAgICAgICAgICB3ZWVrcyA9IHJvdW5kKGR1cmF0aW9uLmFzKCd3JykpLFxuICAgICAgICAgICAgeWVhcnMgPSByb3VuZChkdXJhdGlvbi5hcygneScpKSxcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIChzZWNvbmRzIDw9IHRocmVzaG9sZHMuc3MgJiYgWydzJywgc2Vjb25kc10pIHx8XG4gICAgICAgICAgICAgICAgKHNlY29uZHMgPCB0aHJlc2hvbGRzLnMgJiYgWydzcycsIHNlY29uZHNdKSB8fFxuICAgICAgICAgICAgICAgIChtaW51dGVzIDw9IDEgJiYgWydtJ10pIHx8XG4gICAgICAgICAgICAgICAgKG1pbnV0ZXMgPCB0aHJlc2hvbGRzLm0gJiYgWydtbScsIG1pbnV0ZXNdKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8PSAxICYmIFsnaCddKSB8fFxuICAgICAgICAgICAgICAgIChob3VycyA8IHRocmVzaG9sZHMuaCAmJiBbJ2hoJywgaG91cnNdKSB8fFxuICAgICAgICAgICAgICAgIChkYXlzIDw9IDEgJiYgWydkJ10pIHx8XG4gICAgICAgICAgICAgICAgKGRheXMgPCB0aHJlc2hvbGRzLmQgJiYgWydkZCcsIGRheXNdKTtcblxuICAgICAgICBpZiAodGhyZXNob2xkcy53ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGEgPVxuICAgICAgICAgICAgICAgIGEgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPD0gMSAmJiBbJ3cnXSkgfHxcbiAgICAgICAgICAgICAgICAod2Vla3MgPCB0aHJlc2hvbGRzLncgJiYgWyd3dycsIHdlZWtzXSk7XG4gICAgICAgIH1cbiAgICAgICAgYSA9IGEgfHxcbiAgICAgICAgICAgIChtb250aHMgPD0gMSAmJiBbJ00nXSkgfHxcbiAgICAgICAgICAgIChtb250aHMgPCB0aHJlc2hvbGRzLk0gJiYgWydNTScsIG1vbnRoc10pIHx8XG4gICAgICAgICAgICAoeWVhcnMgPD0gMSAmJiBbJ3knXSkgfHwgWyd5eScsIHllYXJzXTtcblxuICAgICAgICBhWzJdID0gd2l0aG91dFN1ZmZpeDtcbiAgICAgICAgYVszXSA9ICtwb3NOZWdEdXJhdGlvbiA+IDA7XG4gICAgICAgIGFbNF0gPSBsb2NhbGU7XG4gICAgICAgIHJldHVybiBzdWJzdGl0dXRlVGltZUFnby5hcHBseShudWxsLCBhKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSByb3VuZGluZyBmdW5jdGlvbiBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmcocm91bmRpbmdGdW5jdGlvbikge1xuICAgICAgICBpZiAocm91bmRpbmdGdW5jdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcm91bmQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiByb3VuZGluZ0Z1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByb3VuZCA9IHJvdW5kaW5nRnVuY3Rpb247XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIHNldCBhIHRocmVzaG9sZCBmb3IgcmVsYXRpdmUgdGltZSBzdHJpbmdzXG4gICAgZnVuY3Rpb24gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkKHRocmVzaG9sZCwgbGltaXQpIHtcbiAgICAgICAgaWYgKHRocmVzaG9sZHNbdGhyZXNob2xkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxpbWl0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aHJlc2hvbGRzW3RocmVzaG9sZF07XG4gICAgICAgIH1cbiAgICAgICAgdGhyZXNob2xkc1t0aHJlc2hvbGRdID0gbGltaXQ7XG4gICAgICAgIGlmICh0aHJlc2hvbGQgPT09ICdzJykge1xuICAgICAgICAgICAgdGhyZXNob2xkcy5zcyA9IGxpbWl0IC0gMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBodW1hbml6ZShhcmdXaXRoU3VmZml4LCBhcmdUaHJlc2hvbGRzKSB7XG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvY2FsZURhdGEoKS5pbnZhbGlkRGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHdpdGhTdWZmaXggPSBmYWxzZSxcbiAgICAgICAgICAgIHRoID0gdGhyZXNob2xkcyxcbiAgICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICAgIG91dHB1dDtcblxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBhcmdUaHJlc2hvbGRzID0gYXJnV2l0aFN1ZmZpeDtcbiAgICAgICAgICAgIGFyZ1dpdGhTdWZmaXggPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGFyZ1dpdGhTdWZmaXggPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgd2l0aFN1ZmZpeCA9IGFyZ1dpdGhTdWZmaXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBhcmdUaHJlc2hvbGRzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgdGggPSBPYmplY3QuYXNzaWduKHt9LCB0aHJlc2hvbGRzLCBhcmdUaHJlc2hvbGRzKTtcbiAgICAgICAgICAgIGlmIChhcmdUaHJlc2hvbGRzLnMgIT0gbnVsbCAmJiBhcmdUaHJlc2hvbGRzLnNzID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aC5zcyA9IGFyZ1RocmVzaG9sZHMucyAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbGUgPSB0aGlzLmxvY2FsZURhdGEoKTtcbiAgICAgICAgb3V0cHV0ID0gcmVsYXRpdmVUaW1lJDEodGhpcywgIXdpdGhTdWZmaXgsIHRoLCBsb2NhbGUpO1xuXG4gICAgICAgIGlmICh3aXRoU3VmZml4KSB7XG4gICAgICAgICAgICBvdXRwdXQgPSBsb2NhbGUucGFzdEZ1dHVyZSgrdGhpcywgb3V0cHV0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBsb2NhbGUucG9zdGZvcm1hdChvdXRwdXQpO1xuICAgIH1cblxuICAgIHZhciBhYnMkMSA9IE1hdGguYWJzO1xuXG4gICAgZnVuY3Rpb24gc2lnbih4KSB7XG4gICAgICAgIHJldHVybiAoeCA+IDApIC0gKHggPCAwKSB8fCAreDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB0b0lTT1N0cmluZyQxKCkge1xuICAgICAgICAvLyBmb3IgSVNPIHN0cmluZ3Mgd2UgZG8gbm90IHVzZSB0aGUgbm9ybWFsIGJ1YmJsaW5nIHJ1bGVzOlxuICAgICAgICAvLyAgKiBtaWxsaXNlY29uZHMgYnViYmxlIHVwIHVudGlsIHRoZXkgYmVjb21lIGhvdXJzXG4gICAgICAgIC8vICAqIGRheXMgZG8gbm90IGJ1YmJsZSBhdCBhbGxcbiAgICAgICAgLy8gICogbW9udGhzIGJ1YmJsZSB1cCB1bnRpbCB0aGV5IGJlY29tZSB5ZWFyc1xuICAgICAgICAvLyBUaGlzIGlzIGJlY2F1c2UgdGhlcmUgaXMgbm8gY29udGV4dC1mcmVlIGNvbnZlcnNpb24gYmV0d2VlbiBob3VycyBhbmQgZGF5c1xuICAgICAgICAvLyAodGhpbmsgb2YgY2xvY2sgY2hhbmdlcylcbiAgICAgICAgLy8gYW5kIGFsc28gbm90IGJldHdlZW4gZGF5cyBhbmQgbW9udGhzICgyOC0zMSBkYXlzIHBlciBtb250aClcbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlRGF0YSgpLmludmFsaWREYXRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2Vjb25kcyA9IGFicyQxKHRoaXMuX21pbGxpc2Vjb25kcykgLyAxMDAwLFxuICAgICAgICAgICAgZGF5cyA9IGFicyQxKHRoaXMuX2RheXMpLFxuICAgICAgICAgICAgbW9udGhzID0gYWJzJDEodGhpcy5fbW9udGhzKSxcbiAgICAgICAgICAgIG1pbnV0ZXMsXG4gICAgICAgICAgICBob3VycyxcbiAgICAgICAgICAgIHllYXJzLFxuICAgICAgICAgICAgcyxcbiAgICAgICAgICAgIHRvdGFsID0gdGhpcy5hc1NlY29uZHMoKSxcbiAgICAgICAgICAgIHRvdGFsU2lnbixcbiAgICAgICAgICAgIHltU2lnbixcbiAgICAgICAgICAgIGRheXNTaWduLFxuICAgICAgICAgICAgaG1zU2lnbjtcblxuICAgICAgICBpZiAoIXRvdGFsKSB7XG4gICAgICAgICAgICAvLyB0aGlzIGlzIHRoZSBzYW1lIGFzIEMjJ3MgKE5vZGEpIGFuZCBweXRob24gKGlzb2RhdGUpLi4uXG4gICAgICAgICAgICAvLyBidXQgbm90IG90aGVyIEpTIChnb29nLmRhdGUpXG4gICAgICAgICAgICByZXR1cm4gJ1AwRCc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzNjAwIHNlY29uZHMgLT4gNjAgbWludXRlcyAtPiAxIGhvdXJcbiAgICAgICAgbWludXRlcyA9IGFic0Zsb29yKHNlY29uZHMgLyA2MCk7XG4gICAgICAgIGhvdXJzID0gYWJzRmxvb3IobWludXRlcyAvIDYwKTtcbiAgICAgICAgc2Vjb25kcyAlPSA2MDtcbiAgICAgICAgbWludXRlcyAlPSA2MDtcblxuICAgICAgICAvLyAxMiBtb250aHMgLT4gMSB5ZWFyXG4gICAgICAgIHllYXJzID0gYWJzRmxvb3IobW9udGhzIC8gMTIpO1xuICAgICAgICBtb250aHMgJT0gMTI7XG5cbiAgICAgICAgLy8gaW5zcGlyZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2RvcmRpbGxlL21vbWVudC1pc29kdXJhdGlvbi9ibG9iL21hc3Rlci9tb21lbnQuaXNvZHVyYXRpb24uanNcbiAgICAgICAgcyA9IHNlY29uZHMgPyBzZWNvbmRzLnRvRml4ZWQoMykucmVwbGFjZSgvXFwuPzArJC8sICcnKSA6ICcnO1xuXG4gICAgICAgIHRvdGFsU2lnbiA9IHRvdGFsIDwgMCA/ICctJyA6ICcnO1xuICAgICAgICB5bVNpZ24gPSBzaWduKHRoaXMuX21vbnRocykgIT09IHNpZ24odG90YWwpID8gJy0nIDogJyc7XG4gICAgICAgIGRheXNTaWduID0gc2lnbih0aGlzLl9kYXlzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcbiAgICAgICAgaG1zU2lnbiA9IHNpZ24odGhpcy5fbWlsbGlzZWNvbmRzKSAhPT0gc2lnbih0b3RhbCkgPyAnLScgOiAnJztcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdG90YWxTaWduICtcbiAgICAgICAgICAgICdQJyArXG4gICAgICAgICAgICAoeWVhcnMgPyB5bVNpZ24gKyB5ZWFycyArICdZJyA6ICcnKSArXG4gICAgICAgICAgICAobW9udGhzID8geW1TaWduICsgbW9udGhzICsgJ00nIDogJycpICtcbiAgICAgICAgICAgIChkYXlzID8gZGF5c1NpZ24gKyBkYXlzICsgJ0QnIDogJycpICtcbiAgICAgICAgICAgIChob3VycyB8fCBtaW51dGVzIHx8IHNlY29uZHMgPyAnVCcgOiAnJykgK1xuICAgICAgICAgICAgKGhvdXJzID8gaG1zU2lnbiArIGhvdXJzICsgJ0gnIDogJycpICtcbiAgICAgICAgICAgIChtaW51dGVzID8gaG1zU2lnbiArIG1pbnV0ZXMgKyAnTScgOiAnJykgK1xuICAgICAgICAgICAgKHNlY29uZHMgPyBobXNTaWduICsgcyArICdTJyA6ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHZhciBwcm90byQyID0gRHVyYXRpb24ucHJvdG90eXBlO1xuXG4gICAgcHJvdG8kMi5pc1ZhbGlkID0gaXNWYWxpZCQxO1xuICAgIHByb3RvJDIuYWJzID0gYWJzO1xuICAgIHByb3RvJDIuYWRkID0gYWRkJDE7XG4gICAgcHJvdG8kMi5zdWJ0cmFjdCA9IHN1YnRyYWN0JDE7XG4gICAgcHJvdG8kMi5hcyA9IGFzO1xuICAgIHByb3RvJDIuYXNNaWxsaXNlY29uZHMgPSBhc01pbGxpc2Vjb25kcztcbiAgICBwcm90byQyLmFzU2Vjb25kcyA9IGFzU2Vjb25kcztcbiAgICBwcm90byQyLmFzTWludXRlcyA9IGFzTWludXRlcztcbiAgICBwcm90byQyLmFzSG91cnMgPSBhc0hvdXJzO1xuICAgIHByb3RvJDIuYXNEYXlzID0gYXNEYXlzO1xuICAgIHByb3RvJDIuYXNXZWVrcyA9IGFzV2Vla3M7XG4gICAgcHJvdG8kMi5hc01vbnRocyA9IGFzTW9udGhzO1xuICAgIHByb3RvJDIuYXNRdWFydGVycyA9IGFzUXVhcnRlcnM7XG4gICAgcHJvdG8kMi5hc1llYXJzID0gYXNZZWFycztcbiAgICBwcm90byQyLnZhbHVlT2YgPSB2YWx1ZU9mJDE7XG4gICAgcHJvdG8kMi5fYnViYmxlID0gYnViYmxlO1xuICAgIHByb3RvJDIuY2xvbmUgPSBjbG9uZSQxO1xuICAgIHByb3RvJDIuZ2V0ID0gZ2V0JDI7XG4gICAgcHJvdG8kMi5taWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZHM7XG4gICAgcHJvdG8kMi5zZWNvbmRzID0gc2Vjb25kcztcbiAgICBwcm90byQyLm1pbnV0ZXMgPSBtaW51dGVzO1xuICAgIHByb3RvJDIuaG91cnMgPSBob3VycztcbiAgICBwcm90byQyLmRheXMgPSBkYXlzO1xuICAgIHByb3RvJDIud2Vla3MgPSB3ZWVrcztcbiAgICBwcm90byQyLm1vbnRocyA9IG1vbnRocztcbiAgICBwcm90byQyLnllYXJzID0geWVhcnM7XG4gICAgcHJvdG8kMi5odW1hbml6ZSA9IGh1bWFuaXplO1xuICAgIHByb3RvJDIudG9JU09TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9TdHJpbmcgPSB0b0lTT1N0cmluZyQxO1xuICAgIHByb3RvJDIudG9KU09OID0gdG9JU09TdHJpbmckMTtcbiAgICBwcm90byQyLmxvY2FsZSA9IGxvY2FsZTtcbiAgICBwcm90byQyLmxvY2FsZURhdGEgPSBsb2NhbGVEYXRhO1xuXG4gICAgcHJvdG8kMi50b0lzb1N0cmluZyA9IGRlcHJlY2F0ZShcbiAgICAgICAgJ3RvSXNvU3RyaW5nKCkgaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0b0lTT1N0cmluZygpIGluc3RlYWQgKG5vdGljZSB0aGUgY2FwaXRhbHMpJyxcbiAgICAgICAgdG9JU09TdHJpbmckMVxuICAgICk7XG4gICAgcHJvdG8kMi5sYW5nID0gbGFuZztcblxuICAgIC8vIEZPUk1BVFRJTkdcblxuICAgIGFkZEZvcm1hdFRva2VuKCdYJywgMCwgMCwgJ3VuaXgnKTtcbiAgICBhZGRGb3JtYXRUb2tlbigneCcsIDAsIDAsICd2YWx1ZU9mJyk7XG5cbiAgICAvLyBQQVJTSU5HXG5cbiAgICBhZGRSZWdleFRva2VuKCd4JywgbWF0Y2hTaWduZWQpO1xuICAgIGFkZFJlZ2V4VG9rZW4oJ1gnLCBtYXRjaFRpbWVzdGFtcCk7XG4gICAgYWRkUGFyc2VUb2tlbignWCcsIGZ1bmN0aW9uIChpbnB1dCwgYXJyYXksIGNvbmZpZykge1xuICAgICAgICBjb25maWcuX2QgPSBuZXcgRGF0ZShwYXJzZUZsb2F0KGlucHV0KSAqIDEwMDApO1xuICAgIH0pO1xuICAgIGFkZFBhcnNlVG9rZW4oJ3gnLCBmdW5jdGlvbiAoaW5wdXQsIGFycmF5LCBjb25maWcpIHtcbiAgICAgICAgY29uZmlnLl9kID0gbmV3IERhdGUodG9JbnQoaW5wdXQpKTtcbiAgICB9KTtcblxuICAgIC8vISBtb21lbnQuanNcblxuICAgIGhvb2tzLnZlcnNpb24gPSAnMi4yOS40JztcblxuICAgIHNldEhvb2tDYWxsYmFjayhjcmVhdGVMb2NhbCk7XG5cbiAgICBob29rcy5mbiA9IHByb3RvO1xuICAgIGhvb2tzLm1pbiA9IG1pbjtcbiAgICBob29rcy5tYXggPSBtYXg7XG4gICAgaG9va3Mubm93ID0gbm93O1xuICAgIGhvb2tzLnV0YyA9IGNyZWF0ZVVUQztcbiAgICBob29rcy51bml4ID0gY3JlYXRlVW5peDtcbiAgICBob29rcy5tb250aHMgPSBsaXN0TW9udGhzO1xuICAgIGhvb2tzLmlzRGF0ZSA9IGlzRGF0ZTtcbiAgICBob29rcy5sb2NhbGUgPSBnZXRTZXRHbG9iYWxMb2NhbGU7XG4gICAgaG9va3MuaW52YWxpZCA9IGNyZWF0ZUludmFsaWQ7XG4gICAgaG9va3MuZHVyYXRpb24gPSBjcmVhdGVEdXJhdGlvbjtcbiAgICBob29rcy5pc01vbWVudCA9IGlzTW9tZW50O1xuICAgIGhvb2tzLndlZWtkYXlzID0gbGlzdFdlZWtkYXlzO1xuICAgIGhvb2tzLnBhcnNlWm9uZSA9IGNyZWF0ZUluWm9uZTtcbiAgICBob29rcy5sb2NhbGVEYXRhID0gZ2V0TG9jYWxlO1xuICAgIGhvb2tzLmlzRHVyYXRpb24gPSBpc0R1cmF0aW9uO1xuICAgIGhvb2tzLm1vbnRoc1Nob3J0ID0gbGlzdE1vbnRoc1Nob3J0O1xuICAgIGhvb2tzLndlZWtkYXlzTWluID0gbGlzdFdlZWtkYXlzTWluO1xuICAgIGhvb2tzLmRlZmluZUxvY2FsZSA9IGRlZmluZUxvY2FsZTtcbiAgICBob29rcy51cGRhdGVMb2NhbGUgPSB1cGRhdGVMb2NhbGU7XG4gICAgaG9va3MubG9jYWxlcyA9IGxpc3RMb2NhbGVzO1xuICAgIGhvb2tzLndlZWtkYXlzU2hvcnQgPSBsaXN0V2Vla2RheXNTaG9ydDtcbiAgICBob29rcy5ub3JtYWxpemVVbml0cyA9IG5vcm1hbGl6ZVVuaXRzO1xuICAgIGhvb2tzLnJlbGF0aXZlVGltZVJvdW5kaW5nID0gZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmc7XG4gICAgaG9va3MucmVsYXRpdmVUaW1lVGhyZXNob2xkID0gZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkO1xuICAgIGhvb2tzLmNhbGVuZGFyRm9ybWF0ID0gZ2V0Q2FsZW5kYXJGb3JtYXQ7XG4gICAgaG9va3MucHJvdG90eXBlID0gcHJvdG87XG5cbiAgICAvLyBjdXJyZW50bHkgSFRNTDUgaW5wdXQgdHlwZSBvbmx5IHN1cHBvcnRzIDI0LWhvdXIgZm9ybWF0c1xuICAgIGhvb2tzLkhUTUw1X0ZNVCA9IHtcbiAgICAgICAgREFURVRJTUVfTE9DQUw6ICdZWVlZLU1NLUREVEhIOm1tJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIC8+XG4gICAgICAgIERBVEVUSU1FX0xPQ0FMX1NFQ09ORFM6ICdZWVlZLU1NLUREVEhIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJkYXRldGltZS1sb2NhbFwiIHN0ZXA9XCIxXCIgLz5cbiAgICAgICAgREFURVRJTUVfTE9DQUxfTVM6ICdZWVlZLU1NLUREVEhIOm1tOnNzLlNTUycsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIiBzdGVwPVwiMC4wMDFcIiAvPlxuICAgICAgICBEQVRFOiAnWVlZWS1NTS1ERCcsIC8vIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIC8+XG4gICAgICAgIFRJTUU6ICdISDptbScsIC8vIDxpbnB1dCB0eXBlPVwidGltZVwiIC8+XG4gICAgICAgIFRJTUVfU0VDT05EUzogJ0hIOm1tOnNzJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjFcIiAvPlxuICAgICAgICBUSU1FX01TOiAnSEg6bW06c3MuU1NTJywgLy8gPGlucHV0IHR5cGU9XCJ0aW1lXCIgc3RlcD1cIjAuMDAxXCIgLz5cbiAgICAgICAgV0VFSzogJ0dHR0ctW1ddV1cnLCAvLyA8aW5wdXQgdHlwZT1cIndlZWtcIiAvPlxuICAgICAgICBNT05USDogJ1lZWVktTU0nLCAvLyA8aW5wdXQgdHlwZT1cIm1vbnRoXCIgLz5cbiAgICB9O1xuXG4gICAgcmV0dXJuIGhvb2tzO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC10aW1lem9uZS5qc1xuLy8hIHZlcnNpb24gOiAwLjUuNDNcbi8vISBDb3B5cmlnaHQgKGMpIEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuLy8hIGxpY2Vuc2UgOiBNSVRcbi8vISBnaXRodWIuY29tL21vbWVudC9tb21lbnQtdGltZXpvbmVcblxuKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdC8qZ2xvYmFsIGRlZmluZSovXG5cdGlmICh0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRcdG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCdtb21lbnQnKSk7IC8vIE5vZGVcblx0fSBlbHNlIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcblx0XHRkZWZpbmUoWydtb21lbnQnXSwgZmFjdG9yeSk7ICAgICAgICAgICAgICAgICAvLyBBTURcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KHJvb3QubW9tZW50KTsgICAgICAgICAgICAgICAgICAgICAgICAvLyBCcm93c2VyXG5cdH1cbn0odGhpcywgZnVuY3Rpb24gKG1vbWVudCkge1xuXHRcInVzZSBzdHJpY3RcIjtcblxuXHQvLyBSZXNvbHZlcyBlczYgbW9kdWxlIGxvYWRpbmcgaXNzdWVcblx0aWYgKG1vbWVudC52ZXJzaW9uID09PSB1bmRlZmluZWQgJiYgbW9tZW50LmRlZmF1bHQpIHtcblx0XHRtb21lbnQgPSBtb21lbnQuZGVmYXVsdDtcblx0fVxuXG5cdC8vIERvIG5vdCBsb2FkIG1vbWVudC10aW1lem9uZSBhIHNlY29uZCB0aW1lLlxuXHQvLyBpZiAobW9tZW50LnR6ICE9PSB1bmRlZmluZWQpIHtcblx0Ly8gXHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lICcgKyBtb21lbnQudHoudmVyc2lvbiArICcgd2FzIGFscmVhZHkgbG9hZGVkICcgKyAobW9tZW50LnR6LmRhdGFWZXJzaW9uID8gJ3dpdGggZGF0YSBmcm9tICcgOiAnd2l0aG91dCBhbnkgZGF0YScpICsgbW9tZW50LnR6LmRhdGFWZXJzaW9uKTtcblx0Ly8gXHRyZXR1cm4gbW9tZW50O1xuXHQvLyB9XG5cblx0dmFyIFZFUlNJT04gPSBcIjAuNS40M1wiLFxuXHRcdHpvbmVzID0ge30sXG5cdFx0bGlua3MgPSB7fSxcblx0XHRjb3VudHJpZXMgPSB7fSxcblx0XHRuYW1lcyA9IHt9LFxuXHRcdGd1ZXNzZXMgPSB7fSxcblx0XHRjYWNoZWRHdWVzcztcblxuXHRpZiAoIW1vbWVudCB8fCB0eXBlb2YgbW9tZW50LnZlcnNpb24gIT09ICdzdHJpbmcnKSB7XG5cdFx0bG9nRXJyb3IoJ01vbWVudCBUaW1lem9uZSByZXF1aXJlcyBNb21lbnQuanMuIFNlZSBodHRwczovL21vbWVudGpzLmNvbS90aW1lem9uZS9kb2NzLyMvdXNlLWl0L2Jyb3dzZXIvJyk7XG5cdH1cblxuXHR2YXIgbW9tZW50VmVyc2lvbiA9IG1vbWVudC52ZXJzaW9uLnNwbGl0KCcuJyksXG5cdFx0bWFqb3IgPSArbW9tZW50VmVyc2lvblswXSxcblx0XHRtaW5vciA9ICttb21lbnRWZXJzaW9uWzFdO1xuXG5cdC8vIE1vbWVudC5qcyB2ZXJzaW9uIGNoZWNrXG5cdGlmIChtYWpvciA8IDIgfHwgKG1ham9yID09PSAyICYmIG1pbm9yIDwgNikpIHtcblx0XHRsb2dFcnJvcignTW9tZW50IFRpbWV6b25lIHJlcXVpcmVzIE1vbWVudC5qcyA+PSAyLjYuMC4gWW91IGFyZSB1c2luZyBNb21lbnQuanMgJyArIG1vbWVudC52ZXJzaW9uICsgJy4gU2VlIG1vbWVudGpzLmNvbScpO1xuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdFVucGFja2luZ1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gY2hhckNvZGVUb0ludChjaGFyQ29kZSkge1xuXHRcdGlmIChjaGFyQ29kZSA+IDk2KSB7XG5cdFx0XHRyZXR1cm4gY2hhckNvZGUgLSA4Nztcblx0XHR9IGVsc2UgaWYgKGNoYXJDb2RlID4gNjQpIHtcblx0XHRcdHJldHVybiBjaGFyQ29kZSAtIDI5O1xuXHRcdH1cblx0XHRyZXR1cm4gY2hhckNvZGUgLSA0ODtcblx0fVxuXG5cdGZ1bmN0aW9uIHVucGFja0Jhc2U2MChzdHJpbmcpIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRwYXJ0cyA9IHN0cmluZy5zcGxpdCgnLicpLFxuXHRcdFx0d2hvbGUgPSBwYXJ0c1swXSxcblx0XHRcdGZyYWN0aW9uYWwgPSBwYXJ0c1sxXSB8fCAnJyxcblx0XHRcdG11bHRpcGxpZXIgPSAxLFxuXHRcdFx0bnVtLFxuXHRcdFx0b3V0ID0gMCxcblx0XHRcdHNpZ24gPSAxO1xuXG5cdFx0Ly8gaGFuZGxlIG5lZ2F0aXZlIG51bWJlcnNcblx0XHRpZiAoc3RyaW5nLmNoYXJDb2RlQXQoMCkgPT09IDQ1KSB7XG5cdFx0XHRpID0gMTtcblx0XHRcdHNpZ24gPSAtMTtcblx0XHR9XG5cblx0XHQvLyBoYW5kbGUgZGlnaXRzIGJlZm9yZSB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaTsgaSA8IHdob2xlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRudW0gPSBjaGFyQ29kZVRvSW50KHdob2xlLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ID0gNjAgKiBvdXQgKyBudW07XG5cdFx0fVxuXG5cdFx0Ly8gaGFuZGxlIGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuXHRcdGZvciAoaSA9IDA7IGkgPCBmcmFjdGlvbmFsLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRtdWx0aXBsaWVyID0gbXVsdGlwbGllciAvIDYwO1xuXHRcdFx0bnVtID0gY2hhckNvZGVUb0ludChmcmFjdGlvbmFsLmNoYXJDb2RlQXQoaSkpO1xuXHRcdFx0b3V0ICs9IG51bSAqIG11bHRpcGxpZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dCAqIHNpZ247XG5cdH1cblxuXHRmdW5jdGlvbiBhcnJheVRvSW50IChhcnJheSkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcblx0XHRcdGFycmF5W2ldID0gdW5wYWNrQmFzZTYwKGFycmF5W2ldKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnRUb1VudGlsIChhcnJheSwgbGVuZ3RoKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuXHRcdFx0YXJyYXlbaV0gPSBNYXRoLnJvdW5kKChhcnJheVtpIC0gMV0gfHwgMCkgKyAoYXJyYXlbaV0gKiA2MDAwMCkpOyAvLyBtaW51dGVzIHRvIG1pbGxpc2Vjb25kc1xuXHRcdH1cblxuXHRcdGFycmF5W2xlbmd0aCAtIDFdID0gSW5maW5pdHk7XG5cdH1cblxuXHRmdW5jdGlvbiBtYXBJbmRpY2VzIChzb3VyY2UsIGluZGljZXMpIHtcblx0XHR2YXIgb3V0ID0gW10sIGk7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgaW5kaWNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0b3V0W2ldID0gc291cmNlW2luZGljZXNbaV1dO1xuXHRcdH1cblxuXHRcdHJldHVybiBvdXQ7XG5cdH1cblxuXHRmdW5jdGlvbiB1bnBhY2sgKHN0cmluZykge1xuXHRcdHZhciBkYXRhID0gc3RyaW5nLnNwbGl0KCd8JyksXG5cdFx0XHRvZmZzZXRzID0gZGF0YVsyXS5zcGxpdCgnICcpLFxuXHRcdFx0aW5kaWNlcyA9IGRhdGFbM10uc3BsaXQoJycpLFxuXHRcdFx0dW50aWxzICA9IGRhdGFbNF0uc3BsaXQoJyAnKTtcblxuXHRcdGFycmF5VG9JbnQob2Zmc2V0cyk7XG5cdFx0YXJyYXlUb0ludChpbmRpY2VzKTtcblx0XHRhcnJheVRvSW50KHVudGlscyk7XG5cblx0XHRpbnRUb1VudGlsKHVudGlscywgaW5kaWNlcy5sZW5ndGgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdG5hbWUgICAgICAgOiBkYXRhWzBdLFxuXHRcdFx0YWJicnMgICAgICA6IG1hcEluZGljZXMoZGF0YVsxXS5zcGxpdCgnICcpLCBpbmRpY2VzKSxcblx0XHRcdG9mZnNldHMgICAgOiBtYXBJbmRpY2VzKG9mZnNldHMsIGluZGljZXMpLFxuXHRcdFx0dW50aWxzICAgICA6IHVudGlscyxcblx0XHRcdHBvcHVsYXRpb24gOiBkYXRhWzVdIHwgMFxuXHRcdH07XG5cdH1cblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Wm9uZSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIFpvbmUgKHBhY2tlZFN0cmluZykge1xuXHRcdGlmIChwYWNrZWRTdHJpbmcpIHtcblx0XHRcdHRoaXMuX3NldCh1bnBhY2socGFja2VkU3RyaW5nKSk7XG5cdFx0fVxuXHR9XG5cblx0Wm9uZS5wcm90b3R5cGUgPSB7XG5cdFx0X3NldCA6IGZ1bmN0aW9uICh1bnBhY2tlZCkge1xuXHRcdFx0dGhpcy5uYW1lICAgICAgID0gdW5wYWNrZWQubmFtZTtcblx0XHRcdHRoaXMuYWJicnMgICAgICA9IHVucGFja2VkLmFiYnJzO1xuXHRcdFx0dGhpcy51bnRpbHMgICAgID0gdW5wYWNrZWQudW50aWxzO1xuXHRcdFx0dGhpcy5vZmZzZXRzICAgID0gdW5wYWNrZWQub2Zmc2V0cztcblx0XHRcdHRoaXMucG9wdWxhdGlvbiA9IHVucGFja2VkLnBvcHVsYXRpb247XG5cdFx0fSxcblxuXHRcdF9pbmRleCA6IGZ1bmN0aW9uICh0aW1lc3RhbXApIHtcblx0XHRcdHZhciB0YXJnZXQgPSArdGltZXN0YW1wLFxuXHRcdFx0XHR1bnRpbHMgPSB0aGlzLnVudGlscyxcblx0XHRcdFx0aTtcblxuXHRcdFx0Zm9yIChpID0gMDsgaSA8IHVudGlscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAodGFyZ2V0IDwgdW50aWxzW2ldKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y291bnRyaWVzIDogZnVuY3Rpb24gKCkge1xuXHRcdFx0dmFyIHpvbmVfbmFtZSA9IHRoaXMubmFtZTtcblx0XHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpLmZpbHRlcihmdW5jdGlvbiAoY291bnRyeV9jb2RlKSB7XG5cdFx0XHRcdHJldHVybiBjb3VudHJpZXNbY291bnRyeV9jb2RlXS56b25lcy5pbmRleE9mKHpvbmVfbmFtZSkgIT09IC0xO1xuXHRcdFx0fSk7XG5cdFx0fSxcblxuXHRcdHBhcnNlIDogZnVuY3Rpb24gKHRpbWVzdGFtcCkge1xuXHRcdFx0dmFyIHRhcmdldCAgPSArdGltZXN0YW1wLFxuXHRcdFx0XHRvZmZzZXRzID0gdGhpcy5vZmZzZXRzLFxuXHRcdFx0XHR1bnRpbHMgID0gdGhpcy51bnRpbHMsXG5cdFx0XHRcdG1heCAgICAgPSB1bnRpbHMubGVuZ3RoIC0gMSxcblx0XHRcdFx0b2Zmc2V0LCBvZmZzZXROZXh0LCBvZmZzZXRQcmV2LCBpO1xuXG5cdFx0XHRmb3IgKGkgPSAwOyBpIDwgbWF4OyBpKyspIHtcblx0XHRcdFx0b2Zmc2V0ICAgICA9IG9mZnNldHNbaV07XG5cdFx0XHRcdG9mZnNldE5leHQgPSBvZmZzZXRzW2kgKyAxXTtcblx0XHRcdFx0b2Zmc2V0UHJldiA9IG9mZnNldHNbaSA/IGkgLSAxIDogaV07XG5cblx0XHRcdFx0aWYgKG9mZnNldCA8IG9mZnNldE5leHQgJiYgdHoubW92ZUFtYmlndW91c0ZvcndhcmQpIHtcblx0XHRcdFx0XHRvZmZzZXQgPSBvZmZzZXROZXh0O1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9mZnNldCA+IG9mZnNldFByZXYgJiYgdHoubW92ZUludmFsaWRGb3J3YXJkKSB7XG5cdFx0XHRcdFx0b2Zmc2V0ID0gb2Zmc2V0UHJldjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0YXJnZXQgPCB1bnRpbHNbaV0gLSAob2Zmc2V0ICogNjAwMDApKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9mZnNldHNbaV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldHNbbWF4XTtcblx0XHR9LFxuXG5cdFx0YWJiciA6IGZ1bmN0aW9uIChtb20pIHtcblx0XHRcdHJldHVybiB0aGlzLmFiYnJzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHRvZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRsb2dFcnJvcihcInpvbmUub2Zmc2V0IGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2Ygem9uZS51dGNPZmZzZXRcIik7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH0sXG5cblx0XHR1dGNPZmZzZXQgOiBmdW5jdGlvbiAobW9tKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5vZmZzZXRzW3RoaXMuX2luZGV4KG1vbSldO1xuXHRcdH1cblx0fTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0Q291bnRyeSBvYmplY3Rcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIENvdW50cnkgKGNvdW50cnlfbmFtZSwgem9uZV9uYW1lcykge1xuXHRcdHRoaXMubmFtZSA9IGNvdW50cnlfbmFtZTtcblx0XHR0aGlzLnpvbmVzID0gem9uZV9uYW1lcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRDdXJyZW50IFRpbWV6b25lXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRmdW5jdGlvbiBPZmZzZXRBdChhdCkge1xuXHRcdHZhciB0aW1lU3RyaW5nID0gYXQudG9UaW1lU3RyaW5nKCk7XG5cdFx0dmFyIGFiYnIgPSB0aW1lU3RyaW5nLm1hdGNoKC9cXChbYS16IF0rXFwpL2kpO1xuXHRcdGlmIChhYmJyICYmIGFiYnJbMF0pIHtcblx0XHRcdC8vIDE3OjU2OjMxIEdNVC0wNjAwIChDU1QpXG5cdFx0XHQvLyAxNzo1NjozMSBHTVQtMDYwMCAoQ2VudHJhbCBTdGFuZGFyZCBUaW1lKVxuXHRcdFx0YWJiciA9IGFiYnJbMF0ubWF0Y2goL1tBLVpdL2cpO1xuXHRcdFx0YWJiciA9IGFiYnIgPyBhYmJyLmpvaW4oJycpIDogdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAxNzo1NjozMSBDU1Rcblx0XHRcdC8vIDE3OjU2OjMxIEdNVCswODAwICjlj7DljJfmqJnmupbmmYLplpMpXG5cdFx0XHRhYmJyID0gdGltZVN0cmluZy5tYXRjaCgvW0EtWl17Myw1fS9nKTtcblx0XHRcdGFiYnIgPSBhYmJyID8gYWJiclswXSA6IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoYWJiciA9PT0gJ0dNVCcpIHtcblx0XHRcdGFiYnIgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0dGhpcy5hdCA9ICthdDtcblx0XHR0aGlzLmFiYnIgPSBhYmJyO1xuXHRcdHRoaXMub2Zmc2V0ID0gYXQuZ2V0VGltZXpvbmVPZmZzZXQoKTtcblx0fVxuXG5cdGZ1bmN0aW9uIFpvbmVTY29yZSh6b25lKSB7XG5cdFx0dGhpcy56b25lID0gem9uZTtcblx0XHR0aGlzLm9mZnNldFNjb3JlID0gMDtcblx0XHR0aGlzLmFiYnJTY29yZSA9IDA7XG5cdH1cblxuXHRab25lU2NvcmUucHJvdG90eXBlLnNjb3JlT2Zmc2V0QXQgPSBmdW5jdGlvbiAob2Zmc2V0QXQpIHtcblx0XHR0aGlzLm9mZnNldFNjb3JlICs9IE1hdGguYWJzKHRoaXMuem9uZS51dGNPZmZzZXQob2Zmc2V0QXQuYXQpIC0gb2Zmc2V0QXQub2Zmc2V0KTtcblx0XHRpZiAodGhpcy56b25lLmFiYnIob2Zmc2V0QXQuYXQpLnJlcGxhY2UoL1teQS1aXS9nLCAnJykgIT09IG9mZnNldEF0LmFiYnIpIHtcblx0XHRcdHRoaXMuYWJiclNjb3JlKys7XG5cdFx0fVxuXHR9O1xuXG5cdGZ1bmN0aW9uIGZpbmRDaGFuZ2UobG93LCBoaWdoKSB7XG5cdFx0dmFyIG1pZCwgZGlmZjtcblxuXHRcdHdoaWxlICgoZGlmZiA9ICgoaGlnaC5hdCAtIGxvdy5hdCkgLyAxMmU0IHwgMCkgKiA2ZTQpKSB7XG5cdFx0XHRtaWQgPSBuZXcgT2Zmc2V0QXQobmV3IERhdGUobG93LmF0ICsgZGlmZikpO1xuXHRcdFx0aWYgKG1pZC5vZmZzZXQgPT09IGxvdy5vZmZzZXQpIHtcblx0XHRcdFx0bG93ID0gbWlkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGlnaCA9IG1pZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbG93O1xuXHR9XG5cblx0ZnVuY3Rpb24gdXNlck9mZnNldHMoKSB7XG5cdFx0dmFyIHN0YXJ0WWVhciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSAtIDIsXG5cdFx0XHRsYXN0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgMCwgMSkpLFxuXHRcdFx0b2Zmc2V0cyA9IFtsYXN0XSxcblx0XHRcdGNoYW5nZSwgbmV4dCwgaTtcblxuXHRcdGZvciAoaSA9IDE7IGkgPCA0ODsgaSsrKSB7XG5cdFx0XHRuZXh0ID0gbmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciwgaSwgMSkpO1xuXHRcdFx0aWYgKG5leHQub2Zmc2V0ICE9PSBsYXN0Lm9mZnNldCkge1xuXHRcdFx0XHRjaGFuZ2UgPSBmaW5kQ2hhbmdlKGxhc3QsIG5leHQpO1xuXHRcdFx0XHRvZmZzZXRzLnB1c2goY2hhbmdlKTtcblx0XHRcdFx0b2Zmc2V0cy5wdXNoKG5ldyBPZmZzZXRBdChuZXcgRGF0ZShjaGFuZ2UuYXQgKyA2ZTQpKSk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0ID0gbmV4dDtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDAsIDEpKSk7XG5cdFx0XHRvZmZzZXRzLnB1c2gobmV3IE9mZnNldEF0KG5ldyBEYXRlKHN0YXJ0WWVhciArIGksIDYsIDEpKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9mZnNldHM7XG5cdH1cblxuXHRmdW5jdGlvbiBzb3J0Wm9uZVNjb3JlcyAoYSwgYikge1xuXHRcdGlmIChhLm9mZnNldFNjb3JlICE9PSBiLm9mZnNldFNjb3JlKSB7XG5cdFx0XHRyZXR1cm4gYS5vZmZzZXRTY29yZSAtIGIub2Zmc2V0U2NvcmU7XG5cdFx0fVxuXHRcdGlmIChhLmFiYnJTY29yZSAhPT0gYi5hYmJyU2NvcmUpIHtcblx0XHRcdHJldHVybiBhLmFiYnJTY29yZSAtIGIuYWJiclNjb3JlO1xuXHRcdH1cblx0XHRpZiAoYS56b25lLnBvcHVsYXRpb24gIT09IGIuem9uZS5wb3B1bGF0aW9uKSB7XG5cdFx0XHRyZXR1cm4gYi56b25lLnBvcHVsYXRpb24gLSBhLnpvbmUucG9wdWxhdGlvbjtcblx0XHR9XG5cdFx0cmV0dXJuIGIuem9uZS5uYW1lLmxvY2FsZUNvbXBhcmUoYS56b25lLm5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkVG9HdWVzc2VzIChuYW1lLCBvZmZzZXRzKSB7XG5cdFx0dmFyIGksIG9mZnNldDtcblx0XHRhcnJheVRvSW50KG9mZnNldHMpO1xuXHRcdGZvciAoaSA9IDA7IGkgPCBvZmZzZXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRvZmZzZXQgPSBvZmZzZXRzW2ldO1xuXHRcdFx0Z3Vlc3Nlc1tvZmZzZXRdID0gZ3Vlc3Nlc1tvZmZzZXRdIHx8IHt9O1xuXHRcdFx0Z3Vlc3Nlc1tvZmZzZXRdW25hbWVdID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBndWVzc2VzRm9yVXNlck9mZnNldHMgKG9mZnNldHMpIHtcblx0XHR2YXIgb2Zmc2V0c0xlbmd0aCA9IG9mZnNldHMubGVuZ3RoLFxuXHRcdFx0ZmlsdGVyZWRHdWVzc2VzID0ge30sXG5cdFx0XHRvdXQgPSBbXSxcblx0XHRcdGksIGosIGd1ZXNzZXNPZmZzZXQ7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgb2Zmc2V0c0xlbmd0aDsgaSsrKSB7XG5cdFx0XHRndWVzc2VzT2Zmc2V0ID0gZ3Vlc3Nlc1tvZmZzZXRzW2ldLm9mZnNldF0gfHwge307XG5cdFx0XHRmb3IgKGogaW4gZ3Vlc3Nlc09mZnNldCkge1xuXHRcdFx0XHRpZiAoZ3Vlc3Nlc09mZnNldC5oYXNPd25Qcm9wZXJ0eShqKSkge1xuXHRcdFx0XHRcdGZpbHRlcmVkR3Vlc3Nlc1tqXSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgaW4gZmlsdGVyZWRHdWVzc2VzKSB7XG5cdFx0XHRpZiAoZmlsdGVyZWRHdWVzc2VzLmhhc093blByb3BlcnR5KGkpKSB7XG5cdFx0XHRcdG91dC5wdXNoKG5hbWVzW2ldKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVidWlsZEd1ZXNzICgpIHtcblxuXHRcdC8vIHVzZSBJbnRsIEFQSSB3aGVuIGF2YWlsYWJsZSBhbmQgcmV0dXJuaW5nIHZhbGlkIHRpbWUgem9uZVxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgaW50bE5hbWUgPSBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkudGltZVpvbmU7XG5cdFx0XHRpZiAoaW50bE5hbWUgJiYgaW50bE5hbWUubGVuZ3RoID4gMykge1xuXHRcdFx0XHR2YXIgbmFtZSA9IG5hbWVzW25vcm1hbGl6ZU5hbWUoaW50bE5hbWUpXTtcblx0XHRcdFx0aWYgKG5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4gbmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsb2dFcnJvcihcIk1vbWVudCBUaW1lem9uZSBmb3VuZCBcIiArIGludGxOYW1lICsgXCIgZnJvbSB0aGUgSW50bCBhcGksIGJ1dCBkaWQgbm90IGhhdmUgdGhhdCBkYXRhIGxvYWRlZC5cIik7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0Ly8gSW50bCB1bmF2YWlsYWJsZSwgZmFsbCBiYWNrIHRvIG1hbnVhbCBndWVzc2luZy5cblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0cyA9IHVzZXJPZmZzZXRzKCksXG5cdFx0XHRvZmZzZXRzTGVuZ3RoID0gb2Zmc2V0cy5sZW5ndGgsXG5cdFx0XHRndWVzc2VzID0gZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzKG9mZnNldHMpLFxuXHRcdFx0em9uZVNjb3JlcyA9IFtdLFxuXHRcdFx0em9uZVNjb3JlLCBpLCBqO1xuXG5cdFx0Zm9yIChpID0gMDsgaSA8IGd1ZXNzZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHpvbmVTY29yZSA9IG5ldyBab25lU2NvcmUoZ2V0Wm9uZShndWVzc2VzW2ldKSwgb2Zmc2V0c0xlbmd0aCk7XG5cdFx0XHRmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c0xlbmd0aDsgaisrKSB7XG5cdFx0XHRcdHpvbmVTY29yZS5zY29yZU9mZnNldEF0KG9mZnNldHNbal0pO1xuXHRcdFx0fVxuXHRcdFx0em9uZVNjb3Jlcy5wdXNoKHpvbmVTY29yZSk7XG5cdFx0fVxuXG5cdFx0em9uZVNjb3Jlcy5zb3J0KHNvcnRab25lU2NvcmVzKTtcblxuXHRcdHJldHVybiB6b25lU2NvcmVzLmxlbmd0aCA+IDAgPyB6b25lU2NvcmVzWzBdLnpvbmUubmFtZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdGZ1bmN0aW9uIGd1ZXNzIChpZ25vcmVDYWNoZSkge1xuXHRcdGlmICghY2FjaGVkR3Vlc3MgfHwgaWdub3JlQ2FjaGUpIHtcblx0XHRcdGNhY2hlZEd1ZXNzID0gcmVidWlsZEd1ZXNzKCk7XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZWRHdWVzcztcblx0fVxuXG5cdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblx0XHRHbG9iYWwgTWV0aG9kc1xuXHQqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG5cblx0ZnVuY3Rpb24gbm9ybWFsaXplTmFtZSAobmFtZSkge1xuXHRcdHJldHVybiAobmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXC8vZywgJ18nKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFpvbmUgKHBhY2tlZCkge1xuXHRcdHZhciBpLCBuYW1lLCBzcGxpdCwgbm9ybWFsaXplZDtcblxuXHRcdGlmICh0eXBlb2YgcGFja2VkID09PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRwYWNrZWQgPSBbcGFja2VkXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgcGFja2VkLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRzcGxpdCA9IHBhY2tlZFtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0bmFtZSA9IHNwbGl0WzBdO1xuXHRcdFx0bm9ybWFsaXplZCA9IG5vcm1hbGl6ZU5hbWUobmFtZSk7XG5cdFx0XHR6b25lc1tub3JtYWxpemVkXSA9IHBhY2tlZFtpXTtcblx0XHRcdG5hbWVzW25vcm1hbGl6ZWRdID0gbmFtZTtcblx0XHRcdGFkZFRvR3Vlc3Nlcyhub3JtYWxpemVkLCBzcGxpdFsyXS5zcGxpdCgnICcpKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRab25lIChuYW1lLCBjYWxsZXIpIHtcblxuXHRcdG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpO1xuXG5cdFx0dmFyIHpvbmUgPSB6b25lc1tuYW1lXTtcblx0XHR2YXIgbGluaztcblxuXHRcdGlmICh6b25lIGluc3RhbmNlb2YgWm9uZSkge1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0aWYgKHR5cGVvZiB6b25lID09PSAnc3RyaW5nJykge1xuXHRcdFx0em9uZSA9IG5ldyBab25lKHpvbmUpO1xuXHRcdFx0em9uZXNbbmFtZV0gPSB6b25lO1xuXHRcdFx0cmV0dXJuIHpvbmU7XG5cdFx0fVxuXG5cdFx0Ly8gUGFzcyBnZXRab25lIHRvIHByZXZlbnQgcmVjdXJzaW9uIG1vcmUgdGhhbiAxIGxldmVsIGRlZXBcblx0XHRpZiAobGlua3NbbmFtZV0gJiYgY2FsbGVyICE9PSBnZXRab25lICYmIChsaW5rID0gZ2V0Wm9uZShsaW5rc1tuYW1lXSwgZ2V0Wm9uZSkpKSB7XG5cdFx0XHR6b25lID0gem9uZXNbbmFtZV0gPSBuZXcgWm9uZSgpO1xuXHRcdFx0em9uZS5fc2V0KGxpbmspO1xuXHRcdFx0em9uZS5uYW1lID0gbmFtZXNbbmFtZV07XG5cdFx0XHRyZXR1cm4gem9uZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5hbWVzICgpIHtcblx0XHR2YXIgaSwgb3V0ID0gW107XG5cblx0XHRmb3IgKGkgaW4gbmFtZXMpIHtcblx0XHRcdGlmIChuYW1lcy5oYXNPd25Qcm9wZXJ0eShpKSAmJiAoem9uZXNbaV0gfHwgem9uZXNbbGlua3NbaV1dKSAmJiBuYW1lc1tpXSkge1xuXHRcdFx0XHRvdXQucHVzaChuYW1lc1tpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG91dC5zb3J0KCk7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXRDb3VudHJ5TmFtZXMgKCkge1xuXHRcdHJldHVybiBPYmplY3Qua2V5cyhjb3VudHJpZXMpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkTGluayAoYWxpYXNlcykge1xuXHRcdHZhciBpLCBhbGlhcywgbm9ybWFsMCwgbm9ybWFsMTtcblxuXHRcdGlmICh0eXBlb2YgYWxpYXNlcyA9PT0gXCJzdHJpbmdcIikge1xuXHRcdFx0YWxpYXNlcyA9IFthbGlhc2VzXTtcblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0YWxpYXMgPSBhbGlhc2VzW2ldLnNwbGl0KCd8Jyk7XG5cblx0XHRcdG5vcm1hbDAgPSBub3JtYWxpemVOYW1lKGFsaWFzWzBdKTtcblx0XHRcdG5vcm1hbDEgPSBub3JtYWxpemVOYW1lKGFsaWFzWzFdKTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMF0gPSBub3JtYWwxO1xuXHRcdFx0bmFtZXNbbm9ybWFsMF0gPSBhbGlhc1swXTtcblxuXHRcdFx0bGlua3Nbbm9ybWFsMV0gPSBub3JtYWwwO1xuXHRcdFx0bmFtZXNbbm9ybWFsMV0gPSBhbGlhc1sxXTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRDb3VudHJpZXMgKGRhdGEpIHtcblx0XHR2YXIgaSwgY291bnRyeV9jb2RlLCBjb3VudHJ5X3pvbmVzLCBzcGxpdDtcblx0XHRpZiAoIWRhdGEgfHwgIWRhdGEubGVuZ3RoKSByZXR1cm47XG5cdFx0Zm9yIChpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcblx0XHRcdHNwbGl0ID0gZGF0YVtpXS5zcGxpdCgnfCcpO1xuXHRcdFx0Y291bnRyeV9jb2RlID0gc3BsaXRbMF0udG9VcHBlckNhc2UoKTtcblx0XHRcdGNvdW50cnlfem9uZXMgPSBzcGxpdFsxXS5zcGxpdCgnICcpO1xuXHRcdFx0Y291bnRyaWVzW2NvdW50cnlfY29kZV0gPSBuZXcgQ291bnRyeShcblx0XHRcdFx0Y291bnRyeV9jb2RlLFxuXHRcdFx0XHRjb3VudHJ5X3pvbmVzXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdGZ1bmN0aW9uIGdldENvdW50cnkgKG5hbWUpIHtcblx0XHRuYW1lID0gbmFtZS50b1VwcGVyQ2FzZSgpO1xuXHRcdHJldHVybiBjb3VudHJpZXNbbmFtZV0gfHwgbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHpvbmVzRm9yQ291bnRyeShjb3VudHJ5LCB3aXRoX29mZnNldCkge1xuXHRcdGNvdW50cnkgPSBnZXRDb3VudHJ5KGNvdW50cnkpO1xuXG5cdFx0aWYgKCFjb3VudHJ5KSByZXR1cm4gbnVsbDtcblxuXHRcdHZhciB6b25lcyA9IGNvdW50cnkuem9uZXMuc29ydCgpO1xuXG5cdFx0aWYgKHdpdGhfb2Zmc2V0KSB7XG5cdFx0XHRyZXR1cm4gem9uZXMubWFwKGZ1bmN0aW9uICh6b25lX25hbWUpIHtcblx0XHRcdFx0dmFyIHpvbmUgPSBnZXRab25lKHpvbmVfbmFtZSk7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogem9uZV9uYW1lLFxuXHRcdFx0XHRcdG9mZnNldDogem9uZS51dGNPZmZzZXQobmV3IERhdGUoKSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHJldHVybiB6b25lcztcblx0fVxuXG5cdGZ1bmN0aW9uIGxvYWREYXRhIChkYXRhKSB7XG5cdFx0YWRkWm9uZShkYXRhLnpvbmVzKTtcblx0XHRhZGRMaW5rKGRhdGEubGlua3MpO1xuXHRcdGFkZENvdW50cmllcyhkYXRhLmNvdW50cmllcyk7XG5cdFx0dHouZGF0YVZlcnNpb24gPSBkYXRhLnZlcnNpb247XG5cdH1cblxuXHRmdW5jdGlvbiB6b25lRXhpc3RzIChuYW1lKSB7XG5cdFx0aWYgKCF6b25lRXhpc3RzLmRpZFNob3dFcnJvcikge1xuXHRcdFx0em9uZUV4aXN0cy5kaWRTaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0XHRsb2dFcnJvcihcIm1vbWVudC50ei56b25lRXhpc3RzKCdcIiArIG5hbWUgKyBcIicpIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgIW1vbWVudC50ei56b25lKCdcIiArIG5hbWUgKyBcIicpXCIpO1xuXHRcdH1cblx0XHRyZXR1cm4gISFnZXRab25lKG5hbWUpO1xuXHR9XG5cblx0ZnVuY3Rpb24gbmVlZHNPZmZzZXQgKG0pIHtcblx0XHR2YXIgaXNVbml4VGltZXN0YW1wID0gKG0uX2YgPT09ICdYJyB8fCBtLl9mID09PSAneCcpO1xuXHRcdHJldHVybiAhIShtLl9hICYmIChtLl90em0gPT09IHVuZGVmaW5lZCkgJiYgIWlzVW5peFRpbWVzdGFtcCk7XG5cdH1cblxuXHRmdW5jdGlvbiBsb2dFcnJvciAobWVzc2FnZSkge1xuXHRcdGlmICh0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGNvbnNvbGUuZXJyb3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHRcdG1vbWVudC50eiBuYW1lc3BhY2Vcblx0KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGZ1bmN0aW9uIHR6IChpbnB1dCkge1xuXHRcdHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwLCAtMSksXG5cdFx0XHRuYW1lID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSxcblx0XHRcdHpvbmUgPSBnZXRab25lKG5hbWUpLFxuXHRcdFx0b3V0ICA9IG1vbWVudC51dGMuYXBwbHkobnVsbCwgYXJncyk7XG5cblx0XHRpZiAoem9uZSAmJiAhbW9tZW50LmlzTW9tZW50KGlucHV0KSAmJiBuZWVkc09mZnNldChvdXQpKSB7XG5cdFx0XHRvdXQuYWRkKHpvbmUucGFyc2Uob3V0KSwgJ21pbnV0ZXMnKTtcblx0XHR9XG5cblx0XHRvdXQudHoobmFtZSk7XG5cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dHoudmVyc2lvbiAgICAgID0gVkVSU0lPTjtcblx0dHouZGF0YVZlcnNpb24gID0gJyc7XG5cdHR6Ll96b25lcyAgICAgICA9IHpvbmVzO1xuXHR0ei5fbGlua3MgICAgICAgPSBsaW5rcztcblx0dHouX25hbWVzICAgICAgID0gbmFtZXM7XG5cdHR6Ll9jb3VudHJpZXNcdD0gY291bnRyaWVzO1xuXHR0ei5hZGQgICAgICAgICAgPSBhZGRab25lO1xuXHR0ei5saW5rICAgICAgICAgPSBhZGRMaW5rO1xuXHR0ei5sb2FkICAgICAgICAgPSBsb2FkRGF0YTtcblx0dHouem9uZSAgICAgICAgID0gZ2V0Wm9uZTtcblx0dHouem9uZUV4aXN0cyAgID0gem9uZUV4aXN0czsgLy8gZGVwcmVjYXRlZCBpbiAwLjEuMFxuXHR0ei5ndWVzcyAgICAgICAgPSBndWVzcztcblx0dHoubmFtZXMgICAgICAgID0gZ2V0TmFtZXM7XG5cdHR6LlpvbmUgICAgICAgICA9IFpvbmU7XG5cdHR6LnVucGFjayAgICAgICA9IHVucGFjaztcblx0dHoudW5wYWNrQmFzZTYwID0gdW5wYWNrQmFzZTYwO1xuXHR0ei5uZWVkc09mZnNldCAgPSBuZWVkc09mZnNldDtcblx0dHoubW92ZUludmFsaWRGb3J3YXJkICAgPSB0cnVlO1xuXHR0ei5tb3ZlQW1iaWd1b3VzRm9yd2FyZCA9IGZhbHNlO1xuXHR0ei5jb3VudHJpZXMgICAgPSBnZXRDb3VudHJ5TmFtZXM7XG5cdHR6LnpvbmVzRm9yQ291bnRyeSA9IHpvbmVzRm9yQ291bnRyeTtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdFx0SW50ZXJmYWNlIHdpdGggTW9tZW50LmpzXG5cdCoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHR2YXIgZm4gPSBtb21lbnQuZm47XG5cblx0bW9tZW50LnR6ID0gdHo7XG5cblx0bW9tZW50LmRlZmF1bHRab25lID0gbnVsbDtcblxuXHRtb21lbnQudXBkYXRlT2Zmc2V0ID0gZnVuY3Rpb24gKG1vbSwga2VlcFRpbWUpIHtcblx0XHR2YXIgem9uZSA9IG1vbWVudC5kZWZhdWx0Wm9uZSxcblx0XHRcdG9mZnNldDtcblxuXHRcdGlmIChtb20uX3ogPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0aWYgKHpvbmUgJiYgbmVlZHNPZmZzZXQobW9tKSAmJiAhbW9tLl9pc1VUQykge1xuXHRcdFx0XHRtb20uX2QgPSBtb21lbnQudXRjKG1vbS5fYSkuX2Q7XG5cdFx0XHRcdG1vbS51dGMoKS5hZGQoem9uZS5wYXJzZShtb20pLCAnbWludXRlcycpO1xuXHRcdFx0fVxuXHRcdFx0bW9tLl96ID0gem9uZTtcblx0XHR9XG5cdFx0aWYgKG1vbS5feikge1xuXHRcdFx0b2Zmc2V0ID0gbW9tLl96LnV0Y09mZnNldChtb20pO1xuXHRcdFx0aWYgKE1hdGguYWJzKG9mZnNldCkgPCAxNikge1xuXHRcdFx0XHRvZmZzZXQgPSBvZmZzZXQgLyA2MDtcblx0XHRcdH1cblx0XHRcdGlmIChtb20udXRjT2Zmc2V0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dmFyIHogPSBtb20uX3o7XG5cdFx0XHRcdG1vbS51dGNPZmZzZXQoLW9mZnNldCwga2VlcFRpbWUpO1xuXHRcdFx0XHRtb20uX3ogPSB6O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bW9tLnpvbmUob2Zmc2V0LCBrZWVwVGltZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGZuLnR6ID0gZnVuY3Rpb24gKG5hbWUsIGtlZXBUaW1lKSB7XG5cdFx0aWYgKG5hbWUpIHtcblx0XHRcdGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaW1lIHpvbmUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBnb3QgJyArIG5hbWUgKyAnIFsnICsgdHlwZW9mIG5hbWUgKyAnXScpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5feiA9IGdldFpvbmUobmFtZSk7XG5cdFx0XHRpZiAodGhpcy5feikge1xuXHRcdFx0XHRtb21lbnQudXBkYXRlT2Zmc2V0KHRoaXMsIGtlZXBUaW1lKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGxvZ0Vycm9yKFwiTW9tZW50IFRpbWV6b25lIGhhcyBubyBkYXRhIGZvciBcIiArIG5hbWUgKyBcIi4gU2VlIGh0dHA6Ly9tb21lbnRqcy5jb20vdGltZXpvbmUvZG9jcy8jL2RhdGEtbG9hZGluZy8uXCIpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96Lm5hbWU7IH1cblx0fTtcblxuXHRmdW5jdGlvbiBhYmJyV3JhcCAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICh0aGlzLl96KSB7IHJldHVybiB0aGlzLl96LmFiYnIodGhpcyk7IH1cblx0XHRcdHJldHVybiBvbGQuY2FsbCh0aGlzKTtcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gcmVzZXRab25lV3JhcCAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdHRoaXMuX3ogPSBudWxsO1xuXHRcdFx0cmV0dXJuIG9sZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiByZXNldFpvbmVXcmFwMiAob2xkKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMCkgdGhpcy5feiA9IG51bGw7XG5cdFx0XHRyZXR1cm4gb2xkLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdFx0fTtcblx0fVxuXG5cdGZuLnpvbmVOYW1lICA9IGFiYnJXcmFwKGZuLnpvbmVOYW1lKTtcblx0Zm4uem9uZUFiYnIgID0gYWJicldyYXAoZm4uem9uZUFiYnIpO1xuXHRmbi51dGMgICAgICAgPSByZXNldFpvbmVXcmFwKGZuLnV0Yyk7XG5cdGZuLmxvY2FsICAgICA9IHJlc2V0Wm9uZVdyYXAoZm4ubG9jYWwpO1xuXHRmbi51dGNPZmZzZXQgPSByZXNldFpvbmVXcmFwMihmbi51dGNPZmZzZXQpO1xuXG5cdG1vbWVudC50ei5zZXREZWZhdWx0ID0gZnVuY3Rpb24obmFtZSkge1xuXHRcdGlmIChtYWpvciA8IDIgfHwgKG1ham9yID09PSAyICYmIG1pbm9yIDwgOSkpIHtcblx0XHRcdGxvZ0Vycm9yKCdNb21lbnQgVGltZXpvbmUgc2V0RGVmYXVsdCgpIHJlcXVpcmVzIE1vbWVudC5qcyA+PSAyLjkuMC4gWW91IGFyZSB1c2luZyBNb21lbnQuanMgJyArIG1vbWVudC52ZXJzaW9uICsgJy4nKTtcblx0XHR9XG5cdFx0bW9tZW50LmRlZmF1bHRab25lID0gbmFtZSA/IGdldFpvbmUobmFtZSkgOiBudWxsO1xuXHRcdHJldHVybiBtb21lbnQ7XG5cdH07XG5cblx0Ly8gQ2xvbmluZyBhIG1vbWVudCBzaG91bGQgaW5jbHVkZSB0aGUgX3ogcHJvcGVydHkuXG5cdHZhciBtb21lbnRQcm9wZXJ0aWVzID0gbW9tZW50Lm1vbWVudFByb3BlcnRpZXM7XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobW9tZW50UHJvcGVydGllcykgPT09ICdbb2JqZWN0IEFycmF5XScpIHtcblx0XHQvLyBtb21lbnQgMi44LjErXG5cdFx0bW9tZW50UHJvcGVydGllcy5wdXNoKCdfeicpO1xuXHRcdG1vbWVudFByb3BlcnRpZXMucHVzaCgnX2EnKTtcblx0fSBlbHNlIGlmIChtb21lbnRQcm9wZXJ0aWVzKSB7XG5cdFx0Ly8gbW9tZW50IDIuNy4wXG5cdFx0bW9tZW50UHJvcGVydGllcy5feiA9IG51bGw7XG5cdH1cblxuXHQvLyBJTkpFQ1QgREFUQVxuXG5cdHJldHVybiBtb21lbnQ7XG59KSk7XG4iLCJ2YXIgbW9tZW50ID0gbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwiLi9tb21lbnQtdGltZXpvbmVcIik7XG5tb21lbnQudHoubG9hZChyZXF1aXJlKCcuL2RhdGEvcGFja2VkL2xhdGVzdC5qc29uJykpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IEZpbm5pc2ggW2ZpXVxuLy8hIGF1dGhvciA6IFRhcm1vIEFpZGFudGF1c3RhIDogaHR0cHM6Ly9naXRodWIuY29tL2JsZWFkb2ZcblxuOyhmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCdcbiAgICAgICAmJiB0eXBlb2YgcmVxdWlyZSA9PT0gJ2Z1bmN0aW9uJyA/IGZhY3RvcnkocmVxdWlyZSgnLi4vbW9tZW50JykpIDpcbiAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL21vbWVudCddLCBmYWN0b3J5KSA6XG4gICBmYWN0b3J5KGdsb2JhbC5tb21lbnQpXG59KHRoaXMsIChmdW5jdGlvbiAobW9tZW50KSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cblxuICAgIHZhciBudW1iZXJzUGFzdCA9XG4gICAgICAgICAgICAnbm9sbGEgeWtzaSBrYWtzaSBrb2xtZSBuZWxqw6Qgdmlpc2kga3V1c2kgc2VpdHNlbcOkbiBrYWhkZWtzYW4geWhkZWtzw6RuJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnICdcbiAgICAgICAgICAgICksXG4gICAgICAgIG51bWJlcnNGdXR1cmUgPSBbXG4gICAgICAgICAgICAnbm9sbGEnLFxuICAgICAgICAgICAgJ3loZGVuJyxcbiAgICAgICAgICAgICdrYWhkZW4nLFxuICAgICAgICAgICAgJ2tvbG1lbicsXG4gICAgICAgICAgICAnbmVsasOkbicsXG4gICAgICAgICAgICAndmlpZGVuJyxcbiAgICAgICAgICAgICdrdXVkZW4nLFxuICAgICAgICAgICAgbnVtYmVyc1Bhc3RbN10sXG4gICAgICAgICAgICBudW1iZXJzUGFzdFs4XSxcbiAgICAgICAgICAgIG51bWJlcnNQYXN0WzldLFxuICAgICAgICBdO1xuICAgIGZ1bmN0aW9uIHRyYW5zbGF0ZShudW1iZXIsIHdpdGhvdXRTdWZmaXgsIGtleSwgaXNGdXR1cmUpIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9ICcnO1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ211dXRhbWFuIHNla3VubmluJyA6ICdtdXV0YW1hIHNla3VudGknO1xuICAgICAgICAgICAgY2FzZSAnc3MnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3Nla3VubmluJyA6ICdzZWt1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdtJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAnbWludXV0aW4nIDogJ21pbnV1dHRpJztcbiAgICAgICAgICAgIGNhc2UgJ21tJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICdtaW51dXRpbicgOiAnbWludXV0dGlhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2gnOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpJztcbiAgICAgICAgICAgIGNhc2UgJ2hoJzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd0dW5uaW4nIDogJ3R1bnRpYSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNGdXR1cmUgPyAncMOkaXbDpG4nIDogJ3DDpGl2w6QnO1xuICAgICAgICAgICAgY2FzZSAnZGQnOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ3DDpGl2w6RuJyA6ICdww6RpdsOkw6QnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnTSc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1c2knO1xuICAgICAgICAgICAgY2FzZSAnTU0nOlxuICAgICAgICAgICAgICAgIHJlc3VsdCA9IGlzRnV0dXJlID8gJ2t1dWthdWRlbicgOiAna3V1a2F1dHRhJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3knOlxuICAgICAgICAgICAgICAgIHJldHVybiBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3NpJztcbiAgICAgICAgICAgIGNhc2UgJ3l5JzpcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBpc0Z1dHVyZSA/ICd2dW9kZW4nIDogJ3Z1b3R0YSc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gdmVyYmFsTnVtYmVyKG51bWJlciwgaXNGdXR1cmUpICsgJyAnICsgcmVzdWx0O1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICBmdW5jdGlvbiB2ZXJiYWxOdW1iZXIobnVtYmVyLCBpc0Z1dHVyZSkge1xuICAgICAgICByZXR1cm4gbnVtYmVyIDwgMTBcbiAgICAgICAgICAgID8gaXNGdXR1cmVcbiAgICAgICAgICAgICAgICA/IG51bWJlcnNGdXR1cmVbbnVtYmVyXVxuICAgICAgICAgICAgICAgIDogbnVtYmVyc1Bhc3RbbnVtYmVyXVxuICAgICAgICAgICAgOiBudW1iZXI7XG4gICAgfVxuXG4gICAgdmFyIGZpID0gbW9tZW50LmRlZmluZUxvY2FsZSgnZmknLCB7XG4gICAgICAgIG1vbnRoczogJ3RhbW1pa3V1X2hlbG1pa3V1X21hYWxpc2t1dV9odWh0aWt1dV90b3Vrb2t1dV9rZXPDpGt1dV9oZWluw6RrdXVfZWxva3V1X3N5eXNrdXVfbG9rYWt1dV9tYXJyYXNrdXVfam91bHVrdXUnLnNwbGl0KFxuICAgICAgICAgICAgJ18nXG4gICAgICAgICksXG4gICAgICAgIG1vbnRoc1Nob3J0OlxuICAgICAgICAgICAgJ3RhbW1pX2hlbG1pX21hYWxpc19odWh0aV90b3Vrb19rZXPDpF9oZWluw6RfZWxvX3N5eXNfbG9rYV9tYXJyYXNfam91bHUnLnNwbGl0KFxuICAgICAgICAgICAgICAgICdfJ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgd2Vla2RheXM6XG4gICAgICAgICAgICAnc3VubnVudGFpX21hYW5hbnRhaV90aWlzdGFpX2tlc2tpdmlpa2tvX3RvcnN0YWlfcGVyamFudGFpX2xhdWFudGFpJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXNNaW46ICdzdV9tYV90aV9rZV90b19wZV9sYScuc3BsaXQoJ18nKSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEgubW0nLFxuICAgICAgICAgICAgTFRTOiAnSEgubW0uc3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdEbyBNTU1NW3RhXSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0RvIE1NTU1bdGFdIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBEbyBNTU1NW3RhXSBZWVlZLCBba2xvXSBISC5tbScsXG4gICAgICAgICAgICBsOiAnRC5NLllZWVknLFxuICAgICAgICAgICAgbGw6ICdEbyBNTU0gWVlZWScsXG4gICAgICAgICAgICBsbGw6ICdEbyBNTU0gWVlZWSwgW2tsb10gSEgubW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCwgRG8gTU1NIFlZWVksIFtrbG9dIEhILm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbdMOkbsOkw6RuXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0RGF5OiAnW2h1b21lbm5hXSBba2xvXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdERheTogJ1tlaWxlbl0gW2tsb10gTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbdmlpbWVdIGRkZGRbbmFdIFtrbG9dIExUJyxcbiAgICAgICAgICAgIHNhbWVFbHNlOiAnTCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnJXMgcMOkw6RzdMOkJyxcbiAgICAgICAgICAgIHBhc3Q6ICclcyBzaXR0ZW4nLFxuICAgICAgICAgICAgczogdHJhbnNsYXRlLFxuICAgICAgICAgICAgc3M6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIG1tOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICBoaDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZDogdHJhbnNsYXRlLFxuICAgICAgICAgICAgZGQ6IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE06IHRyYW5zbGF0ZSxcbiAgICAgICAgICAgIE1NOiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5OiB0cmFuc2xhdGUsXG4gICAgICAgICAgICB5eTogdHJhbnNsYXRlLFxuICAgICAgICB9LFxuICAgICAgICBkYXlPZk1vbnRoT3JkaW5hbFBhcnNlOiAvXFxkezEsMn1cXC4vLFxuICAgICAgICBvcmRpbmFsOiAnJWQuJyxcbiAgICAgICAgd2Vlazoge1xuICAgICAgICAgICAgZG93OiAxLCAvLyBNb25kYXkgaXMgdGhlIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICAgICAgICAgIGRveTogNCwgLy8gVGhlIHdlZWsgdGhhdCBjb250YWlucyBKYW4gNHRoIGlzIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyLlxuICAgICAgICB9LFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpO1xuXG59KSkpO1xuIiwiLy8hIG1vbWVudC5qcyBsb2NhbGUgY29uZmlndXJhdGlvblxuLy8hIGxvY2FsZSA6IFN3ZWRpc2ggW3N2XVxuLy8hIGF1dGhvciA6IEplbnMgQWxtIDogaHR0cHM6Ly9naXRodWIuY29tL3VsbXVzXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICB2YXIgc3YgPSBtb21lbnQuZGVmaW5lTG9jYWxlKCdzdicsIHtcbiAgICAgICAgbW9udGhzOiAnamFudWFyaV9mZWJydWFyaV9tYXJzX2FwcmlsX21hal9qdW5pX2p1bGlfYXVndXN0aV9zZXB0ZW1iZXJfb2t0b2Jlcl9ub3ZlbWJlcl9kZWNlbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6ICdqYW5fZmViX21hcl9hcHJfbWFqX2p1bl9qdWxfYXVnX3NlcF9va3Rfbm92X2RlYycuc3BsaXQoJ18nKSxcbiAgICAgICAgd2Vla2RheXM6ICdzw7ZuZGFnX23DpW5kYWdfdGlzZGFnX29uc2RhZ190b3JzZGFnX2ZyZWRhZ19sw7ZyZGFnJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c1Nob3J0OiAnc8O2bl9tw6VuX3Rpc19vbnNfdG9yX2ZyZV9sw7ZyJy5zcGxpdCgnXycpLFxuICAgICAgICB3ZWVrZGF5c01pbjogJ3PDtl9tw6VfdGlfb25fdG9fZnJfbMO2Jy5zcGxpdCgnXycpLFxuICAgICAgICBsb25nRGF0ZUZvcm1hdDoge1xuICAgICAgICAgICAgTFQ6ICdISDptbScsXG4gICAgICAgICAgICBMVFM6ICdISDptbTpzcycsXG4gICAgICAgICAgICBMOiAnWVlZWS1NTS1ERCcsXG4gICAgICAgICAgICBMTDogJ0QgTU1NTSBZWVlZJyxcbiAgICAgICAgICAgIExMTDogJ0QgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkIEQgTU1NTSBZWVlZIFtrbC5dIEhIOm1tJyxcbiAgICAgICAgICAgIGxsbDogJ0QgTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICAgICAgbGxsbDogJ2RkZCBEIE1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgfSxcbiAgICAgICAgY2FsZW5kYXI6IHtcbiAgICAgICAgICAgIHNhbWVEYXk6ICdbSWRhZ10gTFQnLFxuICAgICAgICAgICAgbmV4dERheTogJ1tJbW9yZ29uXSBMVCcsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW0lnw6VyXSBMVCcsXG4gICAgICAgICAgICBuZXh0V2VlazogJ1tQw6VdIGRkZGQgTFQnLFxuICAgICAgICAgICAgbGFzdFdlZWs6ICdbSV0gZGRkZFtzXSBMVCcsXG4gICAgICAgICAgICBzYW1lRWxzZTogJ0wnLFxuICAgICAgICB9LFxuICAgICAgICByZWxhdGl2ZVRpbWU6IHtcbiAgICAgICAgICAgIGZ1dHVyZTogJ29tICVzJyxcbiAgICAgICAgICAgIHBhc3Q6ICdmw7ZyICVzIHNlZGFuJyxcbiAgICAgICAgICAgIHM6ICduw6VncmEgc2VrdW5kZXInLFxuICAgICAgICAgICAgc3M6ICclZCBzZWt1bmRlcicsXG4gICAgICAgICAgICBtOiAnZW4gbWludXQnLFxuICAgICAgICAgICAgbW06ICclZCBtaW51dGVyJyxcbiAgICAgICAgICAgIGg6ICdlbiB0aW1tZScsXG4gICAgICAgICAgICBoaDogJyVkIHRpbW1hcicsXG4gICAgICAgICAgICBkOiAnZW4gZGFnJyxcbiAgICAgICAgICAgIGRkOiAnJWQgZGFnYXInLFxuICAgICAgICAgICAgTTogJ2VuIG3DpW5hZCcsXG4gICAgICAgICAgICBNTTogJyVkIG3DpW5hZGVyJyxcbiAgICAgICAgICAgIHk6ICdldHQgw6VyJyxcbiAgICAgICAgICAgIHl5OiAnJWQgw6VyJyxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9KFxcOmV8XFw6YSkvLFxuICAgICAgICBvcmRpbmFsOiBmdW5jdGlvbiAobnVtYmVyKSB7XG4gICAgICAgICAgICB2YXIgYiA9IG51bWJlciAlIDEwLFxuICAgICAgICAgICAgICAgIG91dHB1dCA9XG4gICAgICAgICAgICAgICAgICAgIH5+KChudW1iZXIgJSAxMDApIC8gMTApID09PSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYiA9PT0gMVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAnOmEnXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGIgPT09IDJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gJzphJ1xuICAgICAgICAgICAgICAgICAgICAgICAgOiBiID09PSAzXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICc6ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgIDogJzplJztcbiAgICAgICAgICAgIHJldHVybiBudW1iZXIgKyBvdXRwdXQ7XG4gICAgICAgIH0sXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBzdjtcblxufSkpKTtcbiIsIi8vISBtb21lbnQuanMgbG9jYWxlIGNvbmZpZ3VyYXRpb25cbi8vISBsb2NhbGUgOiBHZXJtYW4gW2RlXVxuLy8hIGF1dGhvciA6IGxsdWNocyA6IGh0dHBzOi8vZ2l0aHViLmNvbS9sbHVjaHNcbi8vISBhdXRob3I6IE1lbmVsaW9uIEVsZW5zw7psZTogaHR0cHM6Ly9naXRodWIuY29tL09pcmVcbi8vISBhdXRob3IgOiBNaWtvbGFqIERhZGVsYSA6IGh0dHBzOi8vZ2l0aHViLmNvbS9taWswMWFqXG5cbjsoZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicgPyBmYWN0b3J5KHJlcXVpcmUoJy4uL21vbWVudCcpKSA6XG4gICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9tb21lbnQnXSwgZmFjdG9yeSkgOlxuICAgZmFjdG9yeShnbG9iYWwubW9tZW50KVxufSh0aGlzLCAoZnVuY3Rpb24gKG1vbWVudCkgeyAndXNlIHN0cmljdCc7XG5cbiAgICAvLyEgbW9tZW50LmpzIGxvY2FsZSBjb25maWd1cmF0aW9uXG5cbiAgICBmdW5jdGlvbiBwcm9jZXNzUmVsYXRpdmVUaW1lKG51bWJlciwgd2l0aG91dFN1ZmZpeCwga2V5LCBpc0Z1dHVyZSkge1xuICAgICAgICB2YXIgZm9ybWF0ID0ge1xuICAgICAgICAgICAgbTogWydlaW5lIE1pbnV0ZScsICdlaW5lciBNaW51dGUnXSxcbiAgICAgICAgICAgIGg6IFsnZWluZSBTdHVuZGUnLCAnZWluZXIgU3R1bmRlJ10sXG4gICAgICAgICAgICBkOiBbJ2VpbiBUYWcnLCAnZWluZW0gVGFnJ10sXG4gICAgICAgICAgICBkZDogW251bWJlciArICcgVGFnZScsIG51bWJlciArICcgVGFnZW4nXSxcbiAgICAgICAgICAgIHc6IFsnZWluZSBXb2NoZScsICdlaW5lciBXb2NoZSddLFxuICAgICAgICAgICAgTTogWydlaW4gTW9uYXQnLCAnZWluZW0gTW9uYXQnXSxcbiAgICAgICAgICAgIE1NOiBbbnVtYmVyICsgJyBNb25hdGUnLCBudW1iZXIgKyAnIE1vbmF0ZW4nXSxcbiAgICAgICAgICAgIHk6IFsnZWluIEphaHInLCAnZWluZW0gSmFociddLFxuICAgICAgICAgICAgeXk6IFtudW1iZXIgKyAnIEphaHJlJywgbnVtYmVyICsgJyBKYWhyZW4nXSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHdpdGhvdXRTdWZmaXggPyBmb3JtYXRba2V5XVswXSA6IGZvcm1hdFtrZXldWzFdO1xuICAgIH1cblxuICAgIHZhciBkZSA9IG1vbWVudC5kZWZpbmVMb2NhbGUoJ2RlJywge1xuICAgICAgICBtb250aHM6ICdKYW51YXJfRmVicnVhcl9Nw6Ryel9BcHJpbF9NYWlfSnVuaV9KdWxpX0F1Z3VzdF9TZXB0ZW1iZXJfT2t0b2Jlcl9Ob3ZlbWJlcl9EZXplbWJlcicuc3BsaXQoXG4gICAgICAgICAgICAnXydcbiAgICAgICAgKSxcbiAgICAgICAgbW9udGhzU2hvcnQ6XG4gICAgICAgICAgICAnSmFuLl9GZWIuX03DpHJ6X0Fwci5fTWFpX0p1bmlfSnVsaV9BdWcuX1NlcC5fT2t0Ll9Ob3YuX0Rlei4nLnNwbGl0KCdfJyksXG4gICAgICAgIG1vbnRoc1BhcnNlRXhhY3Q6IHRydWUsXG4gICAgICAgIHdlZWtkYXlzOlxuICAgICAgICAgICAgJ1Nvbm50YWdfTW9udGFnX0RpZW5zdGFnX01pdHR3b2NoX0Rvbm5lcnN0YWdfRnJlaXRhZ19TYW1zdGFnJy5zcGxpdChcbiAgICAgICAgICAgICAgICAnXydcbiAgICAgICAgICAgICksXG4gICAgICAgIHdlZWtkYXlzU2hvcnQ6ICdTby5fTW8uX0RpLl9NaS5fRG8uX0ZyLl9TYS4nLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzTWluOiAnU29fTW9fRGlfTWlfRG9fRnJfU2EnLnNwbGl0KCdfJyksXG4gICAgICAgIHdlZWtkYXlzUGFyc2VFeGFjdDogdHJ1ZSxcbiAgICAgICAgbG9uZ0RhdGVGb3JtYXQ6IHtcbiAgICAgICAgICAgIExUOiAnSEg6bW0nLFxuICAgICAgICAgICAgTFRTOiAnSEg6bW06c3MnLFxuICAgICAgICAgICAgTDogJ0RELk1NLllZWVknLFxuICAgICAgICAgICAgTEw6ICdELiBNTU1NIFlZWVknLFxuICAgICAgICAgICAgTExMOiAnRC4gTU1NTSBZWVlZIEhIOm1tJyxcbiAgICAgICAgICAgIExMTEw6ICdkZGRkLCBELiBNTU1NIFlZWVkgSEg6bW0nLFxuICAgICAgICB9LFxuICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgc2FtZURheTogJ1toZXV0ZSB1bV0gTFQgW1Vocl0nLFxuICAgICAgICAgICAgc2FtZUVsc2U6ICdMJyxcbiAgICAgICAgICAgIG5leHREYXk6ICdbbW9yZ2VuIHVtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBuZXh0V2VlazogJ2RkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgICAgICBsYXN0RGF5OiAnW2dlc3Rlcm4gdW1dIExUIFtVaHJdJyxcbiAgICAgICAgICAgIGxhc3RXZWVrOiAnW2xldHp0ZW5dIGRkZGQgW3VtXSBMVCBbVWhyXScsXG4gICAgICAgIH0sXG4gICAgICAgIHJlbGF0aXZlVGltZToge1xuICAgICAgICAgICAgZnV0dXJlOiAnaW4gJXMnLFxuICAgICAgICAgICAgcGFzdDogJ3ZvciAlcycsXG4gICAgICAgICAgICBzOiAnZWluIHBhYXIgU2VrdW5kZW4nLFxuICAgICAgICAgICAgc3M6ICclZCBTZWt1bmRlbicsXG4gICAgICAgICAgICBtOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgbW06ICclZCBNaW51dGVuJyxcbiAgICAgICAgICAgIGg6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBoaDogJyVkIFN0dW5kZW4nLFxuICAgICAgICAgICAgZDogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIGRkOiBwcm9jZXNzUmVsYXRpdmVUaW1lLFxuICAgICAgICAgICAgdzogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHd3OiAnJWQgV29jaGVuJyxcbiAgICAgICAgICAgIE06IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICBNTTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgICAgIHk6IHByb2Nlc3NSZWxhdGl2ZVRpbWUsXG4gICAgICAgICAgICB5eTogcHJvY2Vzc1JlbGF0aXZlVGltZSxcbiAgICAgICAgfSxcbiAgICAgICAgZGF5T2ZNb250aE9yZGluYWxQYXJzZTogL1xcZHsxLDJ9XFwuLyxcbiAgICAgICAgb3JkaW5hbDogJyVkLicsXG4gICAgICAgIHdlZWs6IHtcbiAgICAgICAgICAgIGRvdzogMSwgLy8gTW9uZGF5IGlzIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsuXG4gICAgICAgICAgICBkb3k6IDQsIC8vIFRoZSB3ZWVrIHRoYXQgY29udGFpbnMgSmFuIDR0aCBpcyB0aGUgZmlyc3Qgd2VlayBvZiB0aGUgeWVhci5cbiAgICAgICAgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiBkZTtcblxufSkpKTtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgYmFjazogJ1p1csO8Y2snLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICBidXM6ICdCdXMnLFxuICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgZmVycnk6ICdGw6RocmUnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcmFpbDogJ1p1ZycsXG4gICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgcGxhY2U6ICdPcnQnLFxuICB9LFxuICBlbjoge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgIGJhY2s6ICdCYWNrJyxcbiAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgIGJ1czogJ2J1cycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICByYWlsOiAnVHJhaW4nLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdTdG9wJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU2VhcmNoIGNpdHkgYmlrZSBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU2VhcmNoIHRyYW0gcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ3RvbW9ycm93IGF0JyxcbiAgICB0cmFtOiAnVHJhbScsXG4gICAgdHJhY2s6ICdUcmFjaycsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICB9LFxuICBmaToge1xuICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgIGFpcnBsYW5lOiAnTGVudG9rb25lJyxcbiAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgdmVoaWNsZXJlbnRhbHN0YXRpb246ICdQecO2csOkYXNlbWEnLFxuICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHnDtnLDpHBhcmtraScsXG4gICAgYnVzOiAnYnVzc2knLFxuICAgIGNhbmNlbDogJ1BlcnV1dGEnLFxuICAgIGNhcnBhcms6ICdMaWl0eW50w6RweXPDpGtvaW50aScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUeWhqZW5uw6QgaGFrdWhpc3RvcmlhJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0hhbHVhdGtvIHR5aGplbnTDpMOkIGhha3VoaXN0b3JpYW4/JyxcbiAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgZmF2b3VyaXRlOiAnU3Vvc2lra2knLFxuICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICdnaXZlLW9yaWdpbic6ICdMw6RodMO2cGFpa2thJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgIHJhaWw6ICdKdW5hJyxcbiAgICByZXF1aXJlZDogJ3Bha29sbGluZW4ga2VudHTDpCcsXG4gICAgc2VhcmNoOiAnRXRzaScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdIYWUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdIYWUgbMOkaHTDtnBhaWtrYWEsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdQYWlrYW5uYScsXG4gICAgc3RyZWV0OiAnS2F0dScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdBc2VtYScsXG4gICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdIYWUgbGVudG9qYSB0YWkgbGVudG9hc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdIYWUgYnVzc2lsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ0hhZSBtZXRyb2xpbmphYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgdHJhY2s6ICdSYWlkZScsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgdmVudWU6ICdQYWlra2EnLFxuICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgd2hlcmU6ICdNaW5uZSBtZW5uw6TDpG4/JyxcbiAgICBwbGFjZTogJ1BhaWtrYScsXG4gIH0sXG4gIHN2OiB7XG4gICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICBhcnJpdmFsOiAnQW5sw6RuZGVyJyxcbiAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgIGJpa2VwYXJrOiAnQW5zbHV0bmluZ3NwYXJrZXJpbmcgZsO2ciBjeWtsYXInLFxuICAgIGJ1czogJ0J1c3NpJyxcbiAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgIGNhcnBhcms6ICdJbmZhcnRzcGFya2VyaW5nJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdOdXZhcmFuZGUgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgIGRlcGFydHVyZTogJ0F2Z8OlbmdzdGlkJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICBmZXJyeTogJ0bDpHJqYScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdTa3JpdiBpbiBkaW4gYXZmw6RyZHNwbGF0cycsXG4gICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICByYWlsOiAnVMOlZycsXG4gICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0FuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnR2F0YScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgdHJhY2s6ICdTcMOlcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgcGxhY2U6ICdQbGF0cycsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IG1vYmlsZVN0eWxlcyBmcm9tICcuL01vYmlsZVNlYXJjaC5zY3NzJztcbmltcG9ydCBtb2JpbGVOb1Njcm9sbFN0eWxlcyBmcm9tICcuL01vYmlsZU5vU2Nyb2xsLnNjc3MnO1xuXG5jbGFzcyBBdXRvc3VnZ2VzdFBhdGNoIGV4dGVuZHMgQXV0b3N1Z2dlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLm9uU3VnZ2VzdGlvblRvdWNoTW92ZSA9ICgpID0+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+XG4pO1xuXG5Mb2FkaW5nLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxufTtcblxuY29uc3QgZ2V0UGxhdGZvcm0gPSBhZGRlbmR1bSA9PiB7XG4gIGlmICghYWRkZW5kdW0gfHwgIWFkZGVuZHVtLkdURlMucGxhdGZvcm0pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIGNvbnN0IHsgbW9kZXMsIHBsYXRmb3JtIH0gPSBhZGRlbmR1bS5HVEZTO1xuICBjb25zdCB0eXBlID1cbiAgICBtb2RlcyAmJiBtb2Rlc1swXSA9PT0gJ1JBSUwnID8gaTE4bmV4dC50KCd0cmFjaycpIDogaTE4bmV4dC50KCdwbGF0Zm9ybScpO1xuICByZXR1cm4gW3R5cGUsIHBsYXRmb3JtXTtcbn07XG5cbmZ1bmN0aW9uIGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pIHtcbiAgaWYgKGl0ZW0udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1tYXAnKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gWycnLCBpMThuZXh0LnQoJ3VzZS1vd24tcG9zaXRpb24nKV07XG4gICAgfVxuICAgIGlmIChpdGVtLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyldO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0ICovXG4gICAgbGV0IFtuYW1lLCBsYWJlbF0gPSBnZXROYW1lTGFiZWwoaXRlbS5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICBsZXQgc3VnZ2VzdGlvblR5cGU7XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VyZW50YWwnKSB8fFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2Jpa2VzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCd2ZWhpY2xlcmVudGFsc3RhdGlvbicpO1xuICAgICAgY29uc3Qgc3RvcENvZGUgPSBpdGVtLnByb3BlcnRpZXMubGFiZWxJZDtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgc3RvcENvZGVdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdiaWtlcGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdiaWtlcGFyaycpO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgbmFtZSwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuICAgIH1cblxuICAgIGlmIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdjYXJwYXJrJykge1xuICAgICAgc3VnZ2VzdGlvblR5cGUgPSBpMThuZXh0LnQoJ2NhcnBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLm1vZGUpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KFxuICAgICAgICBpdGVtLnByb3BlcnRpZXMubW9kZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKSxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxheWVyID0gaXRlbS5wcm9wZXJ0aWVzLmxheWVyXG4gICAgICAgIC5yZXBsYWNlKCdyb3V0ZS0nLCAnJylcbiAgICAgICAgLnRvTG93ZXJDYXNlKClcbiAgICAgICAgLnJlcGxhY2UoJ2Zhdm91cml0ZScsICcnKTtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KGxheWVyKTtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBpdGVtLnByb3BlcnRpZXMuaWQgJiZcbiAgICAgIChpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdG9wJyB8fCBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdzdGF0aW9uJylcbiAgICApIHtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gZ2V0U3RvcENvZGUoaXRlbS5wcm9wZXJ0aWVzKTtcbiAgICAgIGNvbnN0IG1vZGUgPSBpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0/LkdURlMubW9kZXM7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW1xuICAgICAgICBzdWdnZXN0aW9uVHlwZSxcbiAgICAgICAgZ2V0U3RvcE5hbWUobmFtZSwgc3RvcENvZGUpLFxuICAgICAgICBsYWJlbCxcbiAgICAgICAgc3RvcENvZGUsXG4gICAgICAgIG1vZGUsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgXTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnZmF2b3VyaXRlU3RvcCcgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0YXRpb24nXG4gICAgKSB7XG4gICAgICBjb25zdCB7IGFkZHJlc3MsIGNvZGUgfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgICAgIGNvbnN0IHN0b05hbWUgPSBhZGRyZXNzID8gZ2V0U3RvcE5hbWUoYWRkcmVzcy5zcGxpdCgnLCcpWzBdLCBjb2RlKSA6IG5hbWU7XG4gICAgICBjb25zdCBwbGF0Zm9ybSA9IGdldFBsYXRmb3JtKGl0ZW0ucHJvcGVydGllcy5hZGRlbmR1bSk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBzdG9OYW1lLCBsYWJlbCwgY29kZSwgdW5kZWZpbmVkLCBwbGF0Zm9ybV07XG4gICAgfVxuICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIGxhYmVsXTtcbiAgfVxuICBjb25zdCB7IG9yaWdpbiwgZGVzdGluYXRpb24gfSA9IGl0ZW0ucHJvcGVydGllcztcbiAgY29uc3QgdGFpbDEgPSBvcmlnaW4ubG9jYWxpdHkgPyBgLCAke29yaWdpbi5sb2NhbGl0eX0gZm9vYmFyYCA6ICcnO1xuICBjb25zdCB0YWlsMiA9IGRlc3RpbmF0aW9uLmxvY2FsaXR5ID8gYCwgJHtkZXN0aW5hdGlvbi5sb2NhbGl0eX1gIDogJyc7XG4gIGNvbnN0IG5hbWUxID0gb3JpZ2luLm5hbWU7XG4gIGNvbnN0IG5hbWUyID0gZGVzdGluYXRpb24ubmFtZTtcbiAgcmV0dXJuIFtcbiAgICBpMThuZXh0LnQoJ2Z1dHVyZS1yb3V0ZScpLFxuICAgIGAke2kxOG5leHQudCgnb3JpZ2luJyl9ICR7bmFtZTF9JHt0YWlsMX0gJHtpMThuZXh0LnQoXG4gICAgICAnZGVzdGluYXRpb24nLFxuICAgICl9ICR7bmFtZTJ9JHt0YWlsMn1gLFxuICAgIGl0ZW0udHJhbnNsYXRlZFRleHQsXG4gIF07XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSkge1xuICBjb25zdCB0aW1lID0gbW9tZW50LnVuaXgoaXRlbS5wcm9wZXJ0aWVzLnRpbWUpO1xuICBsZXQgc3RyID0gaXRlbS5wcm9wZXJ0aWVzLmFycml2ZUJ5XG4gICAgPyBpMThuZXh0LnQoJ2Fycml2YWwnKVxuICAgIDogaTE4bmV4dC50KCdkZXBhcnR1cmUnKTtcbiAgaWYgKHRpbWUuaXNTYW1lKG1vbWVudCgpLCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5pc1NhbWUobW9tZW50KCkuYWRkKDEsICdkYXknKSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9tb3Jyb3ctYXQnKX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLmZvcm1hdCgnZGQgRC5NLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke21vbWVudCh0aW1lKS5mb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cblxuY29uc3QgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbn07XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHNlYXJjaENvbnRleHQgPSB7XG4gKiAgIGlzUGVsaWFzTG9jYXRpb25Bd2FyZTogZmFsc2UgLy8gdHJ1ZSAvIGZhbHNlIGRvZXMgTGV0IFBlbGlhcyBzdWdnZXN0IGJhc2VkIG9uIGN1cnJlbnQgdXNlciBsb2NhdGlvblxuICogICBtaW5pbWFsUmVnZXhwOiB1bmRlZmluZWQgLy8gdXNlZCBmb3IgdGVzdGluZyBtaW4uIHJlZ2V4cC4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoJy57Mix9JyksXG4gKiAgIGxpbmVSZWdleHA6IHVuZGVmaW5lZCAvLyAgaWRlbnRpZnkgc2VhcmNoZXMgZm9yIHJvdXRlIG51bWJlcnMvbGFiZWxzOiBidXMgfCB0cmFpbiB8IG1ldHJvLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cChcbiAqICAgIC8vICAgJyheWzAtOV0rW2Etel0/JHxeW3l1bGVhcGlua3J0ZHpdJHwoXm1bMTJdP2I/JCkpJyxcbiAqICAgIC8vICAnaScsXG4gKiAgICAvLyAgKSxcbiAqICAgVVJMX1BFTElBUzogJycgLy8gdXJsIGZvciBwZWxpYXMgc2VhcmNoZXNcbiAqICAgZmVlZElEczogWydIU0wnLCAnSFNMTGF1dHRhJ10gLy8gRmVlZElkJ3MgbGlrZSAgW0hTTCwgSFNMTGF1dHRhXVxuICogICBnZW9jb2RpbmdTb3VyY2VzOiBbJ29hJywnb3NtJywnbmxzZmknXSAgLy8gc291cmNlcyBmb3IgZ2VvY29kaW5nXG4gKiAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtczsge30gIC8vIFNlYXJjaHBhcm1hcyBmcm8gZ2VvY29kaW5nXG4gKiAgIGdldEZhdm91cml0ZUxvY2F0aW9uczogKCkgPT4gKHt9KSwgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBsb2NhdGlvbnMuXG4gKiAgIGdldEZhdm91cml0ZVN0b3BzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSBzdG9wcy5cbiAqICAgZ2V0TGFuZ3VhZ2U6ICgpID0+ICh7fSksICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgY3VycmVudCBsYW5ndWFnZS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0UG9zaXRpb25zOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgdXNlcidzIGdlb2xvY2F0aW9uLlxuICogICBnZXRSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgcm91dGVzLlxuICogICBnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgZmV0Y2hlcyBmYXZvdXJpdGUgc3RvcHMgYW5kIHN0YXRpb25zIGZyb20gZ3JhcGhxbCBBUEkuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnM6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb24uXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9ucy5cbiAqICAgc3RhcnRMb2NhdGlvbldhdGNoOiAoKSA9PiAoe30pLCAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGxvY2F0ZXMgdXNlcnMgZ2VvbG9jYXRpb24uXG4gKiAgIHNhdmVTZWFyY2g6ICgpID0+ICh7fSksICAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBzZWFyY2ggdG8gb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBjbGVhck9sZFNlYXJjaGVzOiAoKSA9PiAoe30pLCAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgZ2V0RnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybiBmdXR1cmUgcm91dGVzXG4gKiAgIHNhdmVGdXR1cmVSb3V0ZTogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBzYXZlcyBhIGZ1dHVyZSByb3V0ZVxuICogICBjbGVhckZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgY2xlYXJzIGZ1dHVyZSByb3V0ZXNcbiAqIH07XG4gKiBjb25zdCBsYW5nID0gJ2ZpJzsgLy8gZW4sIGZpIG9yIHN2XG4gKiBjb25zdCBvblNlbGVjdCA9IChpdGVtLCBpZCkgPT4ge1xuICogICAgLy8gRnVudGlvbmFsaXR5IHdoZW4gdXNlciBzZWxlY3RzIGEgc3VnZ2VzaW9ucy4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IG9uQ2xlYXIgPSBpZCA9PiB7XG4gKiAgICAvLyBDYWxsZWQgIHdoZW4gdXNlciBjbGlja3MgdGhlIGNsZWFyIHNlYXJjaCBzdHJpbmcgYnV0dG9uLiBObyBkZWZhdWx0IGltcGxlbWVudGF0aW9uLlxuICogICAgcmV0dXJuIG51bGw7XG4gKiB9O1xuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRyYW5zcG9ydE1vZGUgPSB1bmRlZmluZWQ7XG4gKiBjb25zdCBwbGFjZWhvbGRlciA9IFwic3RvcC1uZWFyLXlvdVwiO1xuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGF1dG9Gb2N1cz17ZmFsc2V9IC8vIGRlZmluZXMgdGhhdCBzaG91bGQgdGhpcyBmaWVsZCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQgd2hlbiBwYWdlIGlzIGxvYWRlZC5cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKi9cbmNsYXNzIERUQXV0b3N1Z2dlc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgdHJhbnNwb3J0TW9kZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBnZW9jb2RpbmdTaXplOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN0b3JlUmVmOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVWaWFQb2ludHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZvY3VzQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNvdXJjZXM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIHRhcmdldHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGlzTW9iaWxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBob3ZlckNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdGltZVpvbmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcGF0aE9wdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICByb3V0ZXNQcmVmaXg6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzdG9wc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KSxcbiAgICBtb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBsb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHVubG9jazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZWZQb2ludDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBsb246IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgaW5wdXRDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgbW9kZUljb25Db2xvcnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzaG93U2Nyb2xsOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBpc0VtYmVkZGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGF1dG9Gb2N1czogZmFsc2UsXG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICBpY29uOiB1bmRlZmluZWQsXG4gICAgdmFsdWU6ICcnLFxuICAgIHRyYW5zcG9ydE1vZGU6IHVuZGVmaW5lZCxcbiAgICBsYW5nOiAnZmknLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBjb2xvcjogJyMwMDdhYzknLFxuICAgIGhvdmVyQ29sb3I6ICcjMDA2MmExJyxcbiAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yOiAnIzAwNzRiZScsXG4gICAgdGltZVpvbmU6ICdFdXJvcGUvSGVsc2lua2knLFxuICAgIHBhdGhPcHRzOiB7XG4gICAgICByb3V0ZXNQcmVmaXg6ICdsaW5qYXQnLFxuICAgICAgc3RvcHNQcmVmaXg6ICdweXNha2l0JyxcbiAgICB9LFxuICAgIG1vYmlsZUxhYmVsOiB1bmRlZmluZWQsXG4gICAgaW5wdXRDbGFzc05hbWU6ICcnLFxuICAgIHRyYW5zbGF0ZWRQbGFjZWhvbGRlcjogdW5kZWZpbmVkLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICAgIG1vZGVJY29uQ29sb3JzOiB7XG4gICAgICAnbW9kZS1idXMnOiAnIzAwN2FjOScsXG4gICAgICAnbW9kZS1yYWlsJzogJyM4YzQ3OTknLFxuICAgICAgJ21vZGUtdHJhbSc6ICcjMDA4MTUxJyxcbiAgICAgICdtb2RlLW1ldHJvJzogJyNlZDhjMDAnLFxuICAgICAgJ21vZGUtZmVycnknOiAnIzAwN0E5NycsXG4gICAgICAnbW9kZS1jaXR5YmlrZSc6ICcjZjJiNjJkJyxcbiAgICAgICdtb2RlLWZ1bmljdWxhcic6ICcjZmYwMGZmJyxcbiAgICB9LFxuICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gICAgc2hvd1Njcm9sbDogZmFsc2UsXG4gICAgcmVmUG9pbnQ6IHt9LFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIG1vbWVudC50ei5zZXREZWZhdWx0KHByb3BzLnRpbWVab25lKTtcbiAgICBtb21lbnQubG9jYWxlKHByb3BzLmxhbmcpO1xuXG4gICAgdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiBwcm9wcy52YWx1ZSxcbiAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgdmFsaWQ6IHRydWUsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgc291cmNlczogcHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICB0eXBpbmdUaW1lcjogbnVsbCxcbiAgICAgIHR5cGluZzogZmFsc2UsXG4gICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgc3VnZ2VzdGlvbkluZGV4OiAwLFxuICAgICAgY2xlYW5FeGVjdXRlZDogZmFsc2UsXG4gICAgICBzY3JvbGxZOiAwLFxuICAgIH07XG4gICAgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5mb3JFYWNoKGxhbmcgPT4ge1xuICAgICAgaTE4bmV4dC5hZGRSZXNvdXJjZUJ1bmRsZShsYW5nLCAndHJhbnNsYXRpb24nLCB0cmFuc2xhdGlvbnNbbGFuZ10pO1xuICAgIH0pO1xuICB9XG5cbiAgLy8gRFQtNDA3NDogV2hlbiBhIHVzZXIncyBsb2NhdGlvbiBpcyB1cGRhdGVkIERUQXV0b3N1Z2dlc3Qgd291bGQgcmUtcmVuZGVyIGNhdXNpbmcgc3VnZ2VzdGlvbiBsaXN0IHRvIHJlc2V0LlxuICAvLyBUaGlzIHdpbGwgcHJldmVudCBpdC5cbiAgc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gICAgcmV0dXJuICFpc0VxdWFsKG5leHRTdGF0ZSwgdGhpcy5zdGF0ZSkgfHwgIWlzRXF1YWwobmV4dFByb3BzLCB0aGlzLnByb3BzKTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxuICBVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuZXh0UHJvcHMpIHtcbiAgICAvLyB3YWl0IHVudGlsIGFkZHJlc3MgaXMgc2V0IG9yIGdlb2xvY2F0aW9uaW5nIGZhaWxzXG4gICAgaWYgKG5leHRQcm9wcy52YWx1ZSAhPT0gdGhpcy5zdGF0ZS52YWx1ZSAmJiAhdGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgdmFsdWU6IG5leHRQcm9wcy52YWx1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIG9uQ2hhbmdlID0gKGV2ZW50LCB7IG5ld1ZhbHVlLCBtZXRob2QgfSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgdmFsdWU6IHRoaXMuZklucHV0IHx8IG5ld1ZhbHVlIHx8ICcnLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgIH07XG4gICAgLy8gUmVtb3ZlIGZpbGxlZCBpbnB1dCB2YWx1ZSBzbyBpdCB3b250IGJlIHJldXNlZCB1bm5lY2Vzc2FyeVxuICAgIHRoaXMuZklucHV0ID0gbnVsbDtcbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgbmV3U3RhdGUuZWRpdGluZyA9IHRydWU7XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUgfHwgJycgfSksXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAobWV0aG9kICE9PSAnZW50ZXInIHx8IHRoaXMuc3RhdGUudmFsaWQpIHtcbiAgICAgIC8vIHRlc3QgYWJvdmUgZHJvcHMgdW5uZWNlc3NhcnkgdXBkYXRlXG4gICAgICAvLyB3aGVuIHVzZXIgaGl0cyBlbnRlciBidXQgc2VhcmNoIGlzIHVuZmluaXNoZWRcbiAgICAgIGlmICh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN0YXRlLnR5cGluZ1RpbWVyKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT09ICd0eXBlJykge1xuICAgICAgICAvLyBhZnRlciB0aW1lb3V0IHJ1bnMsIGFyaWEgYWxlcnQgd2lsbCBhbm5vdW5jZSBjdXJyZW50IHNlbGVjdGlvblxuICAgICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0U3RhdGUoeyB0eXBpbmc6IGZhbHNlIH0pO1xuICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nVGltZXIgPSB0aW1lcjtcbiAgICAgICAgbmV3U3RhdGUudHlwaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpO1xuICAgIH1cbiAgfTtcblxuICBvbkJsdXIgPSAoKSA9PiB7XG4gICAgaWYgKHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICB9KTtcbiAgfTtcblxuICBvblNlbGVjdGVkID0gKGUsIHJlZikgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgb3duUGxhY2VzOiB0cnVlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJyB8fFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmRleDogcmVmLnN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSB0cnVlOyAvLyBzZWxlY3Rpb24gZG9uZSwgZG8gbm90IGxldCB1cGNvbWluZyBrZXlib2FyZCBldmVudHMgY29uZnVzZSB0aGUgZmxvd1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiByZWYuc3VnZ2VzdGlvblZhbHVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cyhyZWYuc3VnZ2VzdGlvbiwgcmVmLnN1Z2dlc3Rpb25JbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QocmVmLnN1Z2dlc3Rpb24sIHRoaXMucHJvcHMuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgcHJldlN0YXRlID0+ICh7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcHJldlN0YXRlLnZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSwgLy8gc2VhcmNoIG1heSBmaW5pc2ggZHVyaW5nIHN0YXRlIGNoYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNoZWNrUGVuZGluZ1NlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbGlkXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIGFjY2VwdCBhZnRlciBhbGwgb25nb2luZyBzZWFyY2hlcyBoYXZlIGZpbmlzaGVkXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gJiYgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gZmluaXNoIHRoZSBzZWxlY3Rpb24gYnkgcGlja2luZyBmaXJzdCA9IGJlc3QgbWF0Y2ggb3Igd2l0aCAnRnV0dXJlUm91dGUnIGJ5IHN1Z2dlc3Rpb25JbmRleFxuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5vblNlbGVjdChcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1t0aGlzLnN0YXRlLnN1Z2dlc3Rpb25JbmRleF0sXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuaWQsXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSkge1xuICAgICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICAgKCF0aGlzLnByb3BzLmlzTW9iaWxlIHx8IHRoaXMucHJvcHMuaXNFbWJlZGRlZClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgY2xlYXJCdXR0b24gPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydjbGVhci1pbnB1dCddfVxuICAgICAgICBvbkNsaWNrPXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgIGFyaWEtbGFiZWw9e2kxOG5leHQudCgnY2xlYXItYnV0dG9uLWxhYmVsJyl9XG4gICAgICA+XG4gICAgICAgIDxJY29uIGltZz1cImNsb3NlXCIgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9IC8+XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9O1xuXG4gIGZldGNoRnVuY3Rpb24gPSAoeyB2YWx1ZSwgY2xlYW5FeGVjdXRlZCB9KSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7IHZhbGlkOiBmYWxzZSwgY2xlYW5FeGVjdXRlZDogIWNsZWFuRXhlY3V0ZWQgPyBmYWxzZSA6IGNsZWFuRXhlY3V0ZWQgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgICAgIC8vIGRvIG5vdCBsZXQgY29tcG9uZW50IGNhc3QgdW5uZWNlc3NhcnkgcmVxdWVzdHNcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXNMb2NhdGlvblNlYXJjaCA9XG4gICAgICAgICAgaXNFbXB0eSh0aGlzLnByb3BzLnRhcmdldHMpIHx8XG4gICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdMb2NhdGlvbnMnKTtcbiAgICAgICAgbGV0IHRhcmdldHM7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlLm93blBsYWNlcykge1xuICAgICAgICAgIHRhcmdldHMgPSBbJ0xvY2F0aW9ucyddO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdTdG9wcycpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0YXJnZXRzLnB1c2goJ1N0b3BzJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSB8fFxuICAgICAgICAgICAgdGhpcy5wcm9wcy50YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGFyZ2V0cy5wdXNoKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoIWlzRW1wdHkodGhpcy5wcm9wcy50YXJnZXRzKSkge1xuICAgICAgICAgIHRhcmdldHMgPSBbLi4udGhpcy5wcm9wcy50YXJnZXRzXTtcbiAgICAgICAgICAvLyBpbiBkZXNrdG9wLCBmYXZvcml0ZXMgYXJlIGFjY2Vzc2VkIHZpYSBzdWIgc2VhcmNoXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGUgJiZcbiAgICAgICAgICAgIChpc0VtcHR5KHRoaXMucHJvcHMuc291cmNlcykgfHxcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5zb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSlcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIHRhcmdldHMucHVzaCgnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyByZW1vdmUgIGxvY2F0aW9uIGZhdm91cml0ZXMgaW4gZGVza3RvcCBzZWFyY2ggKGNvbGxlY3Rpb24gaXRlbSByZXBsYWNlcyBpdCBpbiB0YXJnZXQgYXJyYXkpXG4gICAgICAgIGNvbnN0IHNvdXJjZXMgPVxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcyAmJlxuICAgICAgICAgIHRoaXMuc3RhdGUuc291cmNlcy5maWx0ZXIoXG4gICAgICAgICAgICBzID0+XG4gICAgICAgICAgICAgICEoXG4gICAgICAgICAgICAgICAgaXNMb2NhdGlvblNlYXJjaCAmJlxuICAgICAgICAgICAgICAgIHMgPT09ICdGYXZvdXJpdGUnICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuc3RhdGUub3duUGxhY2VzICYmXG4gICAgICAgICAgICAgICAgIXRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIGV4ZWN1dGVTZWFyY2goXG4gICAgICAgICAgdGFyZ2V0cyxcbiAgICAgICAgICBzb3VyY2VzLFxuICAgICAgICAgIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSxcbiAgICAgICAgICB0aGlzLnByb3BzLnNlYXJjaENvbnRleHQsXG4gICAgICAgICAgdGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzLFxuICAgICAgICAgIHRoaXMucHJvcHMuZ2VvY29kaW5nU2l6ZSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpbnB1dDogdmFsdWUgfHwgJycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzZWFyY2hSZXN1bHQgPT4ge1xuICAgICAgICAgICAgaWYgKHNlYXJjaFJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFhYWCB0cmFuc2xhdGVzIGN1cnJlbnQgbG9jYXRpb25cbiAgICAgICAgICAgIGNvbnN0IHN1Z2dlc3Rpb25zID0gKHNlYXJjaFJlc3VsdC5yZXN1bHRzIHx8IFtdKVxuICAgICAgICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24gPT5cbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSAhPT0gJ0Z1dHVyZVJvdXRlJyB8fFxuICAgICAgICAgICAgICAgICAgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJlxuICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnByb3BlcnRpZXMudGltZSA+IG1vbWVudCgpLnVuaXgoKSksXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLm1hcChzdWdnZXN0aW9uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdDdXJyZW50TG9jYXRpb24nIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tTWFwJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCB0cmFuc2xhdGVkID0geyAuLi5zdWdnZXN0aW9uIH07XG4gICAgICAgICAgICAgICAgICB0cmFuc2xhdGVkLnByb3BlcnRpZXMubGFiZWxJZCA9IGkxOG5leHQudChcbiAgICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzLmxhYmVsSWQsXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRyYW5zbGF0ZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWdnZXN0aW9uO1xuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUudmFsdWUgfHxcbiAgICAgICAgICAgICAgdmFsdWUgPT09IHRoaXMuc3RhdGUucGVuZGluZ1NlbGVjdGlvbiB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdiYWNrJyB8fFxuICAgICAgICAgICAgICB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAoKSA9PiB0aGlzLmNoZWNrUGVuZGluZ1NlbGVjdGlvbigpLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGhpcy5wcm9wcy5wYXRoT3B0cyxcbiAgICAgICAgICB0aGlzLnByb3BzLnJlZlBvaW50LFxuICAgICAgICApO1xuICAgICAgfSxcbiAgICApO1xuICB9O1xuXG4gIGNsZWFySW5wdXQgPSAoKSA9PiB7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6ICcnLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJywgY2xlYW5FeGVjdXRlZDogdHJ1ZSB9KSxcbiAgICApO1xuICAgIGlmICh0aGlzLnByb3BzLm9uQ2xlYXIpIHtcbiAgICAgIHRoaXMucHJvcHMub25DbGVhcih0aGlzLnByb3BzLmlkKTtcbiAgICB9XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIGlucHV0Q2xpY2tlZCA9IGlucHV0VmFsdWUgPT4ge1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG4gICAgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUpIHtcbiAgICAgIHRoaXMucHJvcHMubG9jaygpO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIC8vIHJlc2V0IGF0IHN0YXJ0LCBqdXN0IGluIGNhc2Ugd2UgbWlzc2VkIHNvbWV0aGluZ1xuICAgICAgICBwZW5kaW5nU2VsZWN0aW9uOiBudWxsLFxuICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICB9O1xuXG4gICAgICAvLyBEVC0zMjYzOiBhZGRlZCBzdGF0ZUtleURvd25cbiAgICAgIGNvbnN0IHN0YXRlS2V5RG93biA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgdmFsdWU6IGlucHV0VmFsdWUsXG4gICAgICB9O1xuXG4gICAgICBpZiAoIXRoaXMuc3RhdGUuc3VnZ2VzdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIC8vIERULTMyNjM6IGFkZGVkIGlmLWVsc2Ugc3RhdGVtZW50XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXRWYWx1ZSA9PT0gJ29iamVjdCcgfHwgIWlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlLCAoKSA9PlxuICAgICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHN0YXRlS2V5RG93biwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiBpbnB1dFZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIXRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHsgcmVuZGVyTW9iaWxlU2VhcmNoOiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcblxuICBzdG9yZUlucHV0UmVmZXJlbmNlID0gYXV0b3N1Z2dlc3QgPT4ge1xuICAgIGlmIChhdXRvc3VnZ2VzdCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5pbnB1dCA9IGF1dG9zdWdnZXN0LmlucHV0O1xuICAgICAgaWYgKHRoaXMucHJvcHMuc3RvcmVSZWYpIHtcbiAgICAgICAgdGhpcy5wcm9wcy5zdG9yZVJlZihhdXRvc3VnZ2VzdC5pbnB1dCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8vIEZpbGwgaW5wdXQgd2hlbiB1c2VyIGNsaWNrcyBmaWxsIGlucHV0IGJ1dHRvbiBpbiBzdHJlZXQgc3VnZ2VzdGlvbiBpdGVtXG4gIGZpbGxJbnB1dCA9IG5ld1ZhbHVlID0+IHtcbiAgICB0aGlzLmZJbnB1dCA9IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZTtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lLFxuICAgICAgY2hlY2tQZW5kaW5nU2VsZWN0aW9uOiBuZXdWYWx1ZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgIH07XG4gICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogbmV3VmFsdWUucHJvcGVydGllcy5uYW1lIH0pO1xuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICByZW5kZXJJdGVtID0gaXRlbSA9PiB7XG4gICAgY29uc3QgbmV3SXRlbSA9XG4gICAgICBpdGVtLnR5cGUgPT09ICdGdXR1cmVSb3V0ZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICAuLi5pdGVtLFxuICAgICAgICAgICAgdHJhbnNsYXRlZFRleHQ6IHRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUoaXRlbSksXG4gICAgICAgICAgfVxuICAgICAgICA6IGl0ZW07XG4gICAgY29uc3QgY29udGVudCA9IGdldFN1Z2dlc3Rpb25Db250ZW50KGl0ZW0pO1xuICAgIHJldHVybiAoXG4gICAgICA8U3VnZ2VzdGlvbkl0ZW1cbiAgICAgICAgaXRlbT17bmV3SXRlbX1cbiAgICAgICAgY29udGVudD17Y29udGVudH1cbiAgICAgICAgbG9hZGluZz17IXRoaXMuc3RhdGUudmFsaWR9XG4gICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICBhcmlhRmF2b3VyaXRlU3RyaW5nPXtpMThuZXh0LnQoJ2Zhdm91cml0ZScpfVxuICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICBmaWxsSW5wdXQ9e3RoaXMuZmlsbElucHV0fVxuICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICBtb2RlSWNvbkNvbG9ycz17dGhpcy5wcm9wcy5tb2RlSWNvbkNvbG9yc31cbiAgICAgICAgbW9kZVNldD17dGhpcy5wcm9wcy5tb2RlU2V0fVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNsb3NlTW9iaWxlU2VhcmNoID0gKCkgPT4ge1xuICAgIHRoaXMucHJvcHMudW5sb2NrKCk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgICAgdmFsdWU6IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgdGhpcy5zdGF0ZS5zY3JvbGxZKTtcbiAgICAgICAgdGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQoKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBrZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleTtcbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiBmYWxzZSB9KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgaWYgKGtleUNvZGUgPT09ICdFbnRlcicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBlbmRpbmdTZWxlY3Rpb246IHRydWUgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXRDbGlja2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGtleUNvZGUgPT09ICdFbnRlcicgfHwga2V5Q29kZSA9PT0gJ0Fycm93RG93bicpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbHVlID09PSAnJ1xuICAgICkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICB9O1xuICAgICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnVGFiJykge1xuICAgICAgdGhpcy5vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgPSAoKSA9PiB7XG4gICAgbGV0IGxhYmVsID0gW107XG4gICAgY29uc3QgZmlyc3RTdWdnZXN0aW9uID0gdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXTtcbiAgICBpZiAoZmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgICBpZiAoZmlyc3RTdWdnZXN0aW9uLnR5cGUgJiYgZmlyc3RTdWdnZXN0aW9uLnR5cGUuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICAgIGxhYmVsLnB1c2goaTE4bmV4dC50KCdmYXZvdXJpdGUnKSk7XG4gICAgICB9XG4gICAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudCh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdKSk7XG4gICAgfVxuICAgIHJldHVybiBbLi4ubmV3IFNldChsYWJlbCldLmpvaW4oJyAtICcpO1xuICB9O1xuXG4gIGNsZWFyT2xkU2VhcmNoZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250ZXh0LCBjbGVhck9sZFNlYXJjaGVzLCBjbGVhckZ1dHVyZVJvdXRlcyB9ID1cbiAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dDtcbiAgICBpZiAoY29udGV4dCAmJiBjbGVhck9sZFNlYXJjaGVzKSB7XG4gICAgICBjbGVhck9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgaWYgKGNsZWFyRnV0dXJlUm91dGVzKSB7XG4gICAgICAgIGNsZWFyRnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50ID0gKCkgPT5cbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAndmlhLXBvaW50JyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc7XG5cbiAgY2xlYXJMb2NhdGlvblRleHQgPSAoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25zID0gW1xuICAgICAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAgICAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAgICAgJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgICAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgICAgICdWYWxkIHBvc2l0aW9uJyxcbiAgICAgICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnTWluIHBvc2l0aW9uJyxcbiAgICAgICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICAgJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgIF07XG4gICAgaWYgKHBvc2l0aW9ucy5pbmNsdWRlcyh0aGlzLnN0YXRlLnZhbHVlKSkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgfVxuICB9O1xuXG4gIG9uRm9jdXMgPSAoKSA9PiB7XG4gICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuXG4gICAgY29uc3Qgc2Nyb2xsWSA9IHdpbmRvdy5wYWdlWU9mZnNldDtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZSh7IHNjcm9sbFkgfSk7XG4gIH07XG5cbiAgcmVuZGVyKCkge1xuICAgIGlmIChpMThuZXh0Lmxhbmd1YWdlICE9PSB0aGlzLnByb3BzLmxhbmcpIHtcbiAgICAgIGkxOG5leHQuY2hhbmdlTGFuZ3VhZ2UodGhpcy5wcm9wcy5sYW5nKTtcbiAgICB9XG4gICAgY29uc3QgeyB2YWx1ZSwgc3VnZ2VzdGlvbnMsIHJlbmRlck1vYmlsZVNlYXJjaCwgY2xlYW5FeGVjdXRlZCB9ID1cbiAgICAgIHRoaXMuc3RhdGU7XG4gICAgY29uc3QgaW5wdXRQcm9wcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA/IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgIDogaTE4bmV4dC50KHRoaXMucHJvcHMucGxhY2Vob2xkZXIpLFxuICAgICAgdmFsdWUsXG4gICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSxcbiAgICAgIG9uQmx1cjogdGhpcy5vbkJsdXIsXG4gICAgICBjbGFzc05hbWU6IGN4KFxuICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7XG4gICAgICAgICAgdGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnByb3BzLnRyYW5zcG9ydE1vZGUgPyBzdHlsZXMudGhpbiA6ICcnXG4gICAgICAgIH0gJHtzdHlsZXNbdGhpcy5wcm9wcy5pZF0gfHwgJyd9ICR7XG4gICAgICAgICAgdGhpcy5zdGF0ZS52YWx1ZSA/IHN0eWxlcy5oYXNWYWx1ZSA6ICcnXG4gICAgICAgIH0gJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfWAsXG4gICAgICApLFxuICAgICAgb25LZXlEb3duOiB0aGlzLmtleURvd24sIC8vIERULTMyNjNcbiAgICAgIHJlcXVpcmVkOiB0aGlzLnByb3BzLnJlcXVpcmVkLFxuICAgIH07XG4gICAgY29uc3QgYXJpYUJhcklkID0gdGhpcy5wcm9wcy5pZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJyk7XG4gICAgbGV0IFNlYXJjaEJhcklkID0gdGhpcy5wcm9wcy5hcmlhTGFiZWwgfHwgaTE4bmV4dC50KGFyaWFCYXJJZCk7XG4gICAgU2VhcmNoQmFySWQgPSBTZWFyY2hCYXJJZC5yZXBsYWNlKCdzZWFyY2hmaWVsZC0nLCAnJykuY29uY2F0KCcuJyk7IC8vIEZ1bGwgc3RvcCBtYWtlcyBzY3JlZW4gcmVhZGVyIHNwZWVjaCBjbGVhcmVyLlxuICAgIGNvbnN0IGFyaWFSZXF1aXJlZFRleHQgPSB0aGlzLnByb3BzLnJlcXVpcmVkXG4gICAgICA/IGAke2kxOG5leHQudCgncmVxdWlyZWQnKX0uYFxuICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxJbnN0cnVjdGlvbnMgPSB0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICA/IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnKVxuICAgICAgOiBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCcpO1xuICAgIGNvbnN0IG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQgPVxuICAgICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbidcbiAgICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJylcbiAgICAgICAgOiAnJztcbiAgICBjb25zdCBhcmlhTGFiZWxUZXh0ID0gYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zXG4gICAgICAuY29uY2F0KCcgJylcbiAgICAgIC5jb25jYXQobW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCk7XG5cbiAgICBjb25zdCBhcmlhU3VnZ2VzdGlvbkxlbiA9IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbicsIHtcbiAgICAgIGNvdW50OiBzdWdnZXN0aW9ucy5sZW5ndGgsXG4gICAgfSk7XG5cbiAgICBjb25zdCBhcmlhQ3VycmVudFN1Z2dlc3Rpb24gPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpIHx8IHRoaXMucHJvcHMudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGkxOG5leHQudCgnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbicsIHtcbiAgICAgICAgICBzZWxlY3Rpb246IHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKSB8fCB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAnJztcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gcm9sZT1cImFsZXJ0XCI+XG4gICAgICAgICAgeyF0aGlzLnN0YXRlLnR5cGluZyAmJlxuICAgICAgICAgICAgdGhpcy5zdGF0ZS5lZGl0aW5nICYmXG4gICAgICAgICAgICBgJHthcmlhU3VnZ2VzdGlvbkxlbn0gJHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKX1gfVxuICAgICAgICA8L3NwYW4+XG4gICAgICAgIHt0aGlzLnByb3BzLmlzTW9iaWxlICYmIChcbiAgICAgICAgICA8TW9iaWxlU2VhcmNoXG4gICAgICAgICAgICBzZWFyY2hPcGVuPXtyZW5kZXJNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBjbGVhck9sZFNlYXJjaGVzPXt0aGlzLmNsZWFyT2xkU2VhcmNoZXN9XG4gICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgIGNsZWFySW5wdXQ9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgICAgIHZhbHVlPXt0aGlzLnN0YXRlLnZhbHVlfVxuICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e1tcbiAgICAgICAgICAgICAgLi4uc3VnZ2VzdGlvbnMsXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnY2xlYXItc2VhcmNoLWhpc3RvcnknLFxuICAgICAgICAgICAgICAgIGxhYmVsSWQ6IGkxOG5leHQudCgnY2xlYXItc2VhcmNoLWhpc3RvcnknKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF19XG4gICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiB0aGlzLmlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50KClcbiAgICAgICAgICAgICAgICA/IGkxOG5leHQudCgnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcycpXG4gICAgICAgICAgICAgICAgOiBpbnB1dFByb3BzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIGZldGNoRnVuY3Rpb249e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgIGNsb3NlSGFuZGxlPXt0aGlzLmNsb3NlTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXJpYUxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChhcmlhQ3VycmVudFN1Z2dlc3Rpb24oKSl9XG4gICAgICAgICAgICBsYWJlbD17XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA/IHRoaXMucHJvcHMubW9iaWxlTGFiZWxcbiAgICAgICAgICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLmlkKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgIGRpYWxvZ0hlYWRlclRleHQ9e2kxOG5leHQudCgnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInKX1cbiAgICAgICAgICAgIGRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZScpfVxuICAgICAgICAgICAgZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjYW5jZWwnKX1cbiAgICAgICAgICAgIGNsZWFySW5wdXRCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NsZWFyLWJ1dHRvbi1sYWJlbCcpfVxuICAgICAgICAgICAgZm9jdXNJbnB1dD17Y2xlYW5FeGVjdXRlZH1cbiAgICAgICAgICAgIGNvbG9yPXt0aGlzLnByb3BzLmNvbG9yfVxuICAgICAgICAgICAgaG92ZXJDb2xvcj17dGhpcy5wcm9wcy5ob3ZlckNvbG9yfVxuICAgICAgICAgICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcj17dGhpcy5wcm9wcy5hY2Nlc3NpYmxlUHJpbWFyeUNvbG9yfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgLz5cbiAgICAgICAgKX1cbiAgICAgICAgeyFyZW5kZXJNb2JpbGVTZWFyY2ggJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LWlucHV0LWNvbnRhaW5lciddLFxuICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgICAgICctLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5jb2xvcn1gLFxuICAgICAgICAgICAgICAnLS1ob3Zlci1jb2xvcic6IGAke3RoaXMucHJvcHMuaG92ZXJDb2xvcn1gLFxuICAgICAgICAgICAgfX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7dGhpcy5wcm9wcy5pY29uICYmIChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goW1xuICAgICAgICAgICAgICAgICAgc3R5bGVzW2BhdXRvc3VnZ2VzdC1pbnB1dC1pY29uYF0sXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbdGhpcy5wcm9wcy5pZF0sXG4gICAgICAgICAgICAgICAgICB0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lICYmXG4gICAgICAgICAgICAgICAgICAgIGAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9LWlucHV0LWljb25gLFxuICAgICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdChpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCcpKX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz17YCR7dGhpcy5wcm9wcy5pY29ufWB9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDxBdXRvc3VnZ2VzdFxuICAgICAgICAgICAgICBhbHdheXNSZW5kZXJTdWdnZXN0aW9ucz17dGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbnM9e3N1Z2dlc3Rpb25zfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e3RoaXMuZmV0Y2hGdW5jdGlvbn1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICAgIHJlbmRlclN1Z2dlc3Rpb249e3RoaXMucmVuZGVySXRlbX1cbiAgICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAgIC4uLmlucHV0UHJvcHMsXG4gICAgICAgICAgICAgICAgb25Gb2N1czogdGhpcy5vbkZvY3VzLFxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2tcbiAgICAgICAgICAgICAgc2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnM9eygpID0+IHRoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uPXshdGhpcy5zdGF0ZS5vd25QbGFjZXN9XG4gICAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICAgIHJlbmRlcklucHV0Q29tcG9uZW50PXtwID0+IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IGh0bWxGb3I9e3RoaXMucHJvcHMuaWR9PlxuICAgICAgICAgICAgICAgICAgICB7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXt0aGlzLmlucHV0Q2xpY2tlZH1cbiAgICAgICAgICAgICAgICAgICAgb25LZXlEb3duPXt0aGlzLmtleURvd259XG4gICAgICAgICAgICAgICAgICAgIHsuLi5wfVxuICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnN0YXRlLnZhbHVlICYmIHRoaXMuY2xlYXJCdXR0b24oKX1cbiAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ9e3RoaXMub25TZWxlY3RlZH1cbiAgICAgICAgICAgICAgcmVmPXt0aGlzLnN0b3JlSW5wdXRSZWZlcmVuY2V9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayA9IHdpdGhTY3JvbGxMb2NrKERUQXV0b3N1Z2dlc3QpO1xuXG5leHBvcnQgZGVmYXVsdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2s7XG4iLCJpbXBvcnQgeyBnZXROYW1lTGFiZWwgfSBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtdW5pcS1ieS1sYWJlbCc7XG4vKipcbiAqIFJldHVybnMgbGFiZWwgZm9yIHByb3BlcnRpZXNcbiAqXG4gKiBAbmFtZSBnZXRMYWJlbFxuICogQHBhcmFtIHsqfSBwcm9wZXJ0aWVzIG9iamVjdCB0aGF0IGNvbnRhaW5zIFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9wZXJ0aWVzOiB7XG4gICAgXCJpZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJnaWRcIjogXCJndGZzbWF0a2E6c3RhdGlvbjpHVEZTOk1BVEtBOjMxODkxNVwiLFxuICAgIFwibGF5ZXJcIjogXCJzdGF0aW9uXCIsXG4gICAgXCJzb3VyY2VcIjogXCJndGZzbWF0a2FcIixcbiAgICBcInNvdXJjZV9pZFwiOiBcIkdURlM6TUFUS0E6MzE4OTE1XCIsXG4gICAgXCJuYW1lXCI6IFwiUmF1dGF0aWVudG9yaVwiLFxuICAgIFwicG9zdGFsY29kZVwiOiBcIjAwMTAwXCIsXG4gICAgXCJwb3N0YWxjb2RlX2dpZFwiOiBcIndob3NvbmZpcnN0OnBvc3RhbGNvZGU6NDIxNDc5NTY5XCIsXG4gICAgXCJjb25maWRlbmNlXCI6IDEsXG4gICAgXCJhY2N1cmFjeVwiOiBcImNlbnRyb2lkXCIsXG4gICAgXCJjb3VudHJ5XCI6IFwiU3VvbWlcIixcbiAgICBcImNvdW50cnlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6Y291bnRyeTowXCIsXG4gICAgXCJjb3VudHJ5X2FcIjogXCJGSU5cIixcbiAgICBcInJlZ2lvblwiOiBcIlV1c2ltYWFcIixcbiAgICBcInJlZ2lvbl9naWRcIjogXCJ3aG9zb25maXJzdDpyZWdpb246ODU2ODMwNjdcIixcbiAgICBcImxvY2FsYWRtaW5cIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxhZG1pbl9naWRcIjogXCJ3aG9zb25maXJzdDpsb2NhbGFkbWluOjkwNzE5OTcxNVwiLFxuICAgIFwibG9jYWxpdHlcIjogXCJIZWxzaW5raVwiLFxuICAgIFwibG9jYWxpdHlfZ2lkXCI6IFwid2hvc29uZmlyc3Q6bG9jYWxpdHk6MTAxNzQ4NDE3XCIsXG4gICAgXCJuZWlnaGJvdXJob29kXCI6IFwiS2x1dXZpXCIsXG4gICAgXCJuZWlnaGJvdXJob29kX2dpZFwiOiBcIndob3NvbmZpcnN0Om5laWdoYm91cmhvb2Q6ODU4OTg4NDdcIixcbiAgICBcImxhYmVsXCI6IFwiUmF1dGF0aWVudG9yaSwga29pbGxpbmVuLCBLbHV1dmksIEhlbHNpbmtpXCJcbiAgICB9XG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5nZXRMYWJlbChwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz10cnVlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5cbmNvbnN0IHdpdGhTY3JvbGxMb2NrID0gQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgbG9jaz17bG9ja30gdW5sb2NrPXt1bmxvY2t9IHsuLi5wcm9wc30gLz47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2Nyb2xsTG9jaztcbiJdLCJuYW1lcyI6WyJfZXh0ZW5kcyIsIk9iamVjdCIsImFzc2lnbiIsImJpbmQiLCJ0YXJnZXQiLCJpIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwic291cmNlIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiYXBwbHkiLCJ0aGlzIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGl0eSIsImluY2x1ZGVzIiwibGF5ZXIiLCJnaWQiLCJsYWJlbElkIiwiZ3Rmc0lkIiwicDEiLCJnZW9tZXRyeSIsImNvb3JkaW5hdGVzIiwidW5kZWZpbmVkIiwicDIiLCJNYXRoIiwiYWJzIiwibGFiZWwiLCJhZGRyZXNzIiwibm9ybWFsaXplIiwic3RyIiwiaXNTdHJpbmciLCJ0b0xvd2VyQ2FzZSIsIkxheWVyVHlwZSIsImlzU3RvcCIsImdldExheWVyUmFuayIsImluZGV4T2YiLCJzb3J0U2VhcmNoUmVzdWx0cyIsImxpbmVSZWdleHAiLCJyZXN1bHRzIiwidGVybSIsIkFycmF5IiwiaXNBcnJheSIsImlzTGluZUlkZW50aWZpZXIiLCJ2YWx1ZSIsInRlc3QiLCJub3JtYWxpemVkVGVybSIsImlzTGluZVNlYXJjaCIsIm9yZGVyZWRSZXN1bHRzIiwib3JkZXJCeSIsInJlc3VsdCIsInNob3J0TmFtZSIsImNvbmZpZGVuY2UiLCJtYXRjaCIsInJlc3VsdFByb3BlcnRpZXMiLCJtYXAiLCJmaWx0ZXIiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJERUZBVUxUX1BFTElBU19VUkwiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwibGF5ZXJzIiwidG9TdHJpbmciLCJmZWF0dXJlcyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJjb2RlIiwic3RvcE9yU3RhdGlvbiIsImlkcyIsInNsaWNlIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZmlsdGVyT2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJkZWJvdW5jZWRTZWFyY2giLCJkZWJvdW5jZSIsInRhcmdldHMiLCJ0cmFuc3BvcnRNb2RlIiwic2VhcmNoQ29udGV4dCIsImZpbHRlclJlc3VsdHMiLCJnZW9jb2RpbmdTaXplIiwiY2FsbGJhY2siLCJwYXRoT3B0cyIsInJlZlBvaW50IiwiZ2V0UG9zaXRpb25zIiwiZ2V0RmF2b3VyaXRlTG9jYXRpb25zIiwiZ2V0T2xkU2VhcmNoZXMiLCJnZXRGYXZvdXJpdGVTdG9wcyIsInBhcmtpbmdBcmVhU291cmNlcyIsImdldExhbmd1YWdlIiwiZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImdldEZhdm91cml0ZVJvdXRlc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlUm91dGVzIiwiZ2V0Um91dGVzUXVlcnkiLCJjb250ZXh0IiwiaXNQZWxpYXNMb2NhdGlvbkF3YXJlIiwibG9jYXRpb25Bd2FyZSIsIlVSTF9QRUxJQVMiLCJmZWVkSURzIiwiZ2VvY29kaW5nU2VhcmNoUGFyYW1zIiwiZ2VvY29kaW5nU291cmNlcyIsImdldEZ1dHVyZVJvdXRlcyIsImNpdHlCaWtlTmV0d29ya3MiLCJhbGxUYXJnZXRzIiwiYWxsU291cmNlcyIsInBvc2l0aW9uIiwic2VhcmNoQ29tcG9uZW50cyIsInNlYXJjaGVzIiwibGFuZ3VhZ2UiLCJsYXQiLCJsb24iLCJ0b0ZpeGVkIiwibW9kZSIsInN0YXR1cyIsInB1c2giLCJnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5Iiwic2VsZWN0UG9zaXRpb25Gb21NYXAiLCJpdGVtcyIsImZhdm91cml0ZUxvY2F0aW9ucyIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyIsImZhdm91cml0ZVN0b3BzIiwiaGFzRmF2b3VyaXRlcyIsInNlbGVjdEZyb21Pd25Mb2NhdGlvbnMiLCJmYXZvdXJpdGVzIiwiZmlsdGVyRmF2b3VyaXRlTG9jYXRpb25zIiwiZmVlZGlzIiwiZ2Vvc291cmNlcyIsImxvY2F0aW9uSGlzdG9yeSIsInNpemUiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInN0b3BzQW5kU3RhdGlvbnMiLCJldmVyeSIsImZpbHRlckZhdm91cml0ZVN0b3BzIiwiZGVkdXBlc3RvcHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiZ2V0TG9jYWxpdHkiLCJzdWdnZXN0aW9uIiwibG9jYWxhZG1pbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwibW9kdWxlIiwiaG9va0NhbGxiYWNrIiwic29tZSIsImhvb2tzIiwic2V0SG9va0NhbGxiYWNrIiwiaXNPYmplY3QiLCJoYXNPd25Qcm9wIiwiYSIsImIiLCJpc09iamVjdEVtcHR5IiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImlzVW5kZWZpbmVkIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJEYXRlIiwiYXJyIiwiZm4iLCJhcnJMZW4iLCJleHRlbmQiLCJ2YWx1ZU9mIiwiY3JlYXRlVVRDIiwiZm9ybWF0IiwibG9jYWxlIiwic3RyaWN0IiwiY3JlYXRlTG9jYWxPclVUQyIsInV0YyIsImRlZmF1bHRQYXJzaW5nRmxhZ3MiLCJlbXB0eSIsInVudXNlZFRva2VucyIsInVudXNlZElucHV0Iiwib3ZlcmZsb3ciLCJjaGFyc0xlZnRPdmVyIiwibnVsbElucHV0IiwiaW52YWxpZEVyYSIsImludmFsaWRNb250aCIsImludmFsaWRGb3JtYXQiLCJ1c2VySW52YWxpZGF0ZWQiLCJpc28iLCJwYXJzZWREYXRlUGFydHMiLCJlcmEiLCJtZXJpZGllbSIsInJmYzI4MjIiLCJ3ZWVrZGF5TWlzbWF0Y2giLCJnZXRQYXJzaW5nRmxhZ3MiLCJtIiwiX3BmIiwiaXNWYWxpZCIsIl9pc1ZhbGlkIiwiZmxhZ3MiLCJwYXJzZWRQYXJ0cyIsImlzTm93VmFsaWQiLCJpc05hTiIsIl9kIiwiZ2V0VGltZSIsImludmFsaWRXZWVrZGF5IiwiX3N0cmljdCIsImJpZ0hvdXIiLCJpc0Zyb3plbiIsImNyZWF0ZUludmFsaWQiLCJOYU4iLCJmdW4iLCJ0IiwibGVuIiwibW9tZW50UHJvcGVydGllcyIsInVwZGF0ZUluUHJvZ3Jlc3MiLCJjb3B5Q29uZmlnIiwidG8iLCJmcm9tIiwicHJvcCIsInZhbCIsIm1vbWVudFByb3BlcnRpZXNMZW4iLCJfaXNBTW9tZW50T2JqZWN0IiwiX2kiLCJfZiIsIl9sIiwiX3R6bSIsIl9pc1VUQyIsIl9vZmZzZXQiLCJfbG9jYWxlIiwiTW9tZW50IiwiY29uZmlnIiwidXBkYXRlT2Zmc2V0IiwiaXNNb21lbnQiLCJ3YXJuIiwibXNnIiwic3VwcHJlc3NEZXByZWNhdGlvbldhcm5pbmdzIiwiY29uc29sZSIsImRlcHJlY2F0ZSIsImZpcnN0VGltZSIsImRlcHJlY2F0aW9uSGFuZGxlciIsImFyZyIsImFyZ3MiLCJhcmdMZW4iLCJFcnJvciIsInN0YWNrIiwiZGVwcmVjYXRpb25zIiwiZGVwcmVjYXRlU2ltcGxlIiwiaXNGdW5jdGlvbiIsIkZ1bmN0aW9uIiwic2V0IiwiX2NvbmZpZyIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlTGVuaWVudCIsIl9kYXlPZk1vbnRoT3JkaW5hbFBhcnNlIiwiX29yZGluYWxQYXJzZSIsIm1lcmdlQ29uZmlncyIsInBhcmVudENvbmZpZyIsImNoaWxkQ29uZmlnIiwiTG9jYWxlIiwiZGVmYXVsdENhbGVuZGFyIiwic2FtZURheSIsIm5leHREYXkiLCJuZXh0V2VlayIsImxhc3REYXkiLCJsYXN0V2VlayIsInNhbWVFbHNlIiwiY2FsZW5kYXIiLCJtb20iLCJub3ciLCJvdXRwdXQiLCJfY2FsZW5kYXIiLCJ6ZXJvRmlsbCIsIm51bWJlciIsInRhcmdldExlbmd0aCIsImZvcmNlU2lnbiIsImFic051bWJlciIsInplcm9zVG9GaWxsIiwicG93IiwibWF4Iiwic3Vic3RyIiwiZm9ybWF0dGluZ1Rva2VucyIsImxvY2FsRm9ybWF0dGluZ1Rva2VucyIsImZvcm1hdEZ1bmN0aW9ucyIsImZvcm1hdFRva2VuRnVuY3Rpb25zIiwiYWRkRm9ybWF0VG9rZW4iLCJ0b2tlbiIsInBhZGRlZCIsIm9yZGluYWwiLCJmdW5jIiwibG9jYWxlRGF0YSIsInJlbW92ZUZvcm1hdHRpbmdUb2tlbnMiLCJtYWtlRm9ybWF0RnVuY3Rpb24iLCJhcnJheSIsImZvcm1hdE1vbWVudCIsImV4cGFuZEZvcm1hdCIsImludmFsaWREYXRlIiwicmVwbGFjZUxvbmdEYXRlRm9ybWF0VG9rZW5zIiwibG9uZ0RhdGVGb3JtYXQiLCJsYXN0SW5kZXgiLCJkZWZhdWx0TG9uZ0RhdGVGb3JtYXQiLCJMVFMiLCJMVCIsIkwiLCJMTCIsIkxMTCIsIkxMTEwiLCJfbG9uZ0RhdGVGb3JtYXQiLCJmb3JtYXRVcHBlciIsInRvVXBwZXJDYXNlIiwidG9rIiwiZGVmYXVsdEludmFsaWREYXRlIiwiX2ludmFsaWREYXRlIiwiZGVmYXVsdE9yZGluYWwiLCJkZWZhdWx0RGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIl9vcmRpbmFsIiwiZGVmYXVsdFJlbGF0aXZlVGltZSIsImZ1dHVyZSIsInBhc3QiLCJzIiwic3MiLCJtbSIsImgiLCJoaCIsImQiLCJkZCIsInciLCJ3dyIsIk0iLCJNTSIsInkiLCJ5eSIsInJlbGF0aXZlVGltZSIsIndpdGhvdXRTdWZmaXgiLCJzdHJpbmciLCJpc0Z1dHVyZSIsIl9yZWxhdGl2ZVRpbWUiLCJwYXN0RnV0dXJlIiwiZGlmZiIsImFsaWFzZXMiLCJhZGRVbml0QWxpYXMiLCJ1bml0Iiwic2hvcnRoYW5kIiwibG93ZXJDYXNlIiwibm9ybWFsaXplVW5pdHMiLCJ1bml0cyIsIm5vcm1hbGl6ZU9iamVjdFVuaXRzIiwiaW5wdXRPYmplY3QiLCJub3JtYWxpemVkUHJvcCIsIm5vcm1hbGl6ZWRJbnB1dCIsInByaW9yaXRpZXMiLCJhZGRVbml0UHJpb3JpdHkiLCJwcmlvcml0eSIsImdldFByaW9yaXRpemVkVW5pdHMiLCJ1bml0c09iaiIsInUiLCJzb3J0IiwiaXNMZWFwWWVhciIsInllYXIiLCJhYnNGbG9vciIsImNlaWwiLCJmbG9vciIsInRvSW50IiwiYXJndW1lbnRGb3JDb2VyY2lvbiIsImNvZXJjZWROdW1iZXIiLCJpc0Zpbml0ZSIsIm1ha2VHZXRTZXQiLCJrZWVwVGltZSIsInNldCQxIiwibW9udGgiLCJkYXRlIiwiZGF5c0luTW9udGgiLCJzdHJpbmdHZXQiLCJzdHJpbmdTZXQiLCJwcmlvcml0aXplZCIsInByaW9yaXRpemVkTGVuIiwicmVnZXhlcyIsIm1hdGNoMSIsIm1hdGNoMiIsIm1hdGNoMyIsIm1hdGNoNCIsIm1hdGNoNiIsIm1hdGNoMXRvMiIsIm1hdGNoM3RvNCIsIm1hdGNoNXRvNiIsIm1hdGNoMXRvMyIsIm1hdGNoMXRvNCIsIm1hdGNoMXRvNiIsIm1hdGNoVW5zaWduZWQiLCJtYXRjaFNpZ25lZCIsIm1hdGNoT2Zmc2V0IiwibWF0Y2hTaG9ydE9mZnNldCIsIm1hdGNoVGltZXN0YW1wIiwibWF0Y2hXb3JkIiwiYWRkUmVnZXhUb2tlbiIsInJlZ2V4Iiwic3RyaWN0UmVnZXgiLCJpc1N0cmljdCIsImdldFBhcnNlUmVnZXhGb3JUb2tlbiIsInVuZXNjYXBlRm9ybWF0IiwicmVnZXhFc2NhcGUiLCJtYXRjaGVkIiwicDMiLCJwNCIsInRva2VucyIsImFkZFBhcnNlVG9rZW4iLCJ0b2tlbkxlbiIsImFkZFdlZWtQYXJzZVRva2VuIiwiX3ciLCJhZGRUaW1lVG9BcnJheUZyb21Ub2tlbiIsIl9hIiwiWUVBUiIsIk1PTlRIIiwiREFURSIsIkhPVVIiLCJNSU5VVEUiLCJTRUNPTkQiLCJNSUxMSVNFQ09ORCIsIldFRUsiLCJXRUVLREFZIiwibW9kIiwibiIsIngiLCJtb2RNb250aCIsIm8iLCJtb250aHNTaG9ydCIsIm1vbnRocyIsIm1vbnRoc1Nob3J0UmVnZXgiLCJtb250aHNSZWdleCIsIm1vbnRoc1BhcnNlIiwiZGVmYXVsdExvY2FsZU1vbnRocyIsImRlZmF1bHRMb2NhbGVNb250aHNTaG9ydCIsIk1PTlRIU19JTl9GT1JNQVQiLCJkZWZhdWx0TW9udGhzU2hvcnRSZWdleCIsImRlZmF1bHRNb250aHNSZWdleCIsImxvY2FsZU1vbnRocyIsIl9tb250aHMiLCJpc0Zvcm1hdCIsImxvY2FsZU1vbnRoc1Nob3J0IiwiX21vbnRoc1Nob3J0IiwiaGFuZGxlU3RyaWN0UGFyc2UiLCJtb250aE5hbWUiLCJpaSIsImxsYyIsInRvTG9jYWxlTG93ZXJDYXNlIiwiX21vbnRoc1BhcnNlIiwiX2xvbmdNb250aHNQYXJzZSIsIl9zaG9ydE1vbnRoc1BhcnNlIiwibG9jYWxlTW9udGhzUGFyc2UiLCJfbW9udGhzUGFyc2VFeGFjdCIsInNldE1vbnRoIiwiZGF5T2ZNb250aCIsIm1pbiIsImdldFNldE1vbnRoIiwiZ2V0RGF5c0luTW9udGgiLCJjb21wdXRlTW9udGhzUGFyc2UiLCJfbW9udGhzU2hvcnRTdHJpY3RSZWdleCIsIl9tb250aHNTaG9ydFJlZ2V4IiwiX21vbnRoc1N0cmljdFJlZ2V4IiwiX21vbnRoc1JlZ2V4IiwiY21wTGVuUmV2Iiwic2hvcnRQaWVjZXMiLCJsb25nUGllY2VzIiwibWl4ZWRQaWVjZXMiLCJkYXlzSW5ZZWFyIiwicGFyc2VUd29EaWdpdFllYXIiLCJwYXJzZUludCIsImdldFNldFllYXIiLCJnZXRJc0xlYXBZZWFyIiwiY3JlYXRlRGF0ZSIsIm1zIiwiZ2V0RnVsbFllYXIiLCJzZXRGdWxsWWVhciIsImNyZWF0ZVVUQ0RhdGUiLCJVVEMiLCJnZXRVVENGdWxsWWVhciIsInNldFVUQ0Z1bGxZZWFyIiwiZmlyc3RXZWVrT2Zmc2V0IiwiZG93IiwiZG95IiwiZndkIiwiZ2V0VVRDRGF5IiwiZGF5T2ZZZWFyRnJvbVdlZWtzIiwid2VlayIsIndlZWtkYXkiLCJyZXNZZWFyIiwicmVzRGF5T2ZZZWFyIiwiZGF5T2ZZZWFyIiwid2Vla09mWWVhciIsInJlc1dlZWsiLCJ3ZWVrT2Zmc2V0Iiwid2Vla3NJblllYXIiLCJ3ZWVrT2Zmc2V0TmV4dCIsImxvY2FsZVdlZWsiLCJfd2VlayIsImRlZmF1bHRMb2NhbGVXZWVrIiwibG9jYWxlRmlyc3REYXlPZldlZWsiLCJsb2NhbGVGaXJzdERheU9mWWVhciIsImdldFNldFdlZWsiLCJhZGQiLCJnZXRTZXRJU09XZWVrIiwicGFyc2VXZWVrZGF5Iiwid2Vla2RheXNQYXJzZSIsInBhcnNlSXNvV2Vla2RheSIsInNoaWZ0V2Vla2RheXMiLCJ3cyIsIndlZWtkYXlzTWluIiwid2Vla2RheXNTaG9ydCIsIndlZWtkYXlzIiwid2Vla2RheXNNaW5SZWdleCIsIndlZWtkYXlzU2hvcnRSZWdleCIsIndlZWtkYXlzUmVnZXgiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXMiLCJkZWZhdWx0TG9jYWxlV2Vla2RheXNTaG9ydCIsImRlZmF1bHRMb2NhbGVXZWVrZGF5c01pbiIsImRlZmF1bHRXZWVrZGF5c1JlZ2V4IiwiZGVmYXVsdFdlZWtkYXlzU2hvcnRSZWdleCIsImRlZmF1bHRXZWVrZGF5c01pblJlZ2V4IiwibG9jYWxlV2Vla2RheXMiLCJfd2Vla2RheXMiLCJkYXkiLCJsb2NhbGVXZWVrZGF5c1Nob3J0IiwiX3dlZWtkYXlzU2hvcnQiLCJsb2NhbGVXZWVrZGF5c01pbiIsIl93ZWVrZGF5c01pbiIsImhhbmRsZVN0cmljdFBhcnNlJDEiLCJ3ZWVrZGF5TmFtZSIsIl93ZWVrZGF5c1BhcnNlIiwiX3Nob3J0V2Vla2RheXNQYXJzZSIsIl9taW5XZWVrZGF5c1BhcnNlIiwibG9jYWxlV2Vla2RheXNQYXJzZSIsIl93ZWVrZGF5c1BhcnNlRXhhY3QiLCJfZnVsbFdlZWtkYXlzUGFyc2UiLCJnZXRTZXREYXlPZldlZWsiLCJnZXREYXkiLCJnZXRTZXRMb2NhbGVEYXlPZldlZWsiLCJnZXRTZXRJU09EYXlPZldlZWsiLCJjb21wdXRlV2Vla2RheXNQYXJzZSIsIl93ZWVrZGF5c1N0cmljdFJlZ2V4IiwiX3dlZWtkYXlzUmVnZXgiLCJfd2Vla2RheXNTaG9ydFN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzU2hvcnRSZWdleCIsIl93ZWVrZGF5c01pblN0cmljdFJlZ2V4IiwiX3dlZWtkYXlzTWluUmVnZXgiLCJtaW5wIiwic2hvcnRwIiwibG9uZ3AiLCJtaW5QaWVjZXMiLCJoRm9ybWF0IiwiaG91cnMiLCJrRm9ybWF0IiwibG93ZXJjYXNlIiwibWludXRlcyIsIm1hdGNoTWVyaWRpZW0iLCJfbWVyaWRpZW1QYXJzZSIsImxvY2FsZUlzUE0iLCJjaGFyQXQiLCJzZWNvbmRzIiwia0lucHV0IiwiX2lzUG0iLCJpc1BNIiwiX21lcmlkaWVtIiwicG9zIiwicG9zMSIsInBvczIiLCJkZWZhdWx0TG9jYWxlTWVyaWRpZW1QYXJzZSIsImdldFNldEhvdXIiLCJsb2NhbGVNZXJpZGllbSIsImlzTG93ZXIiLCJnbG9iYWxMb2NhbGUiLCJiYXNlQ29uZmlnIiwiZGF5T2ZNb250aE9yZGluYWxQYXJzZSIsIm1lcmlkaWVtUGFyc2UiLCJsb2NhbGVzIiwibG9jYWxlRmFtaWxpZXMiLCJjb21tb25QcmVmaXgiLCJhcnIxIiwiYXJyMiIsIm1pbmwiLCJub3JtYWxpemVMb2NhbGUiLCJjaG9vc2VMb2NhbGUiLCJuYW1lcyIsImoiLCJuZXh0IiwibG9hZExvY2FsZSIsImlzTG9jYWxlTmFtZVNhbmUiLCJvbGRMb2NhbGUiLCJleHBvcnRzIiwiX2FiYnIiLCJnZXRTZXRHbG9iYWxMb2NhbGUiLCJlIiwidmFsdWVzIiwiZ2V0TG9jYWxlIiwiZGVmaW5lTG9jYWxlIiwiYWJiciIsInBhcmVudExvY2FsZSIsInVwZGF0ZUxvY2FsZSIsInRtcExvY2FsZSIsImxpc3RMb2NhbGVzIiwiY2hlY2tPdmVyZmxvdyIsIl9vdmVyZmxvd0RheU9mWWVhciIsIl9vdmVyZmxvd1dlZWtzIiwiX292ZXJmbG93V2Vla2RheSIsImV4dGVuZGVkSXNvUmVnZXgiLCJiYXNpY0lzb1JlZ2V4IiwidHpSZWdleCIsImlzb0RhdGVzIiwiaXNvVGltZXMiLCJhc3BOZXRKc29uUmVnZXgiLCJvYnNPZmZzZXRzIiwiVVQiLCJHTVQiLCJFRFQiLCJFU1QiLCJDRFQiLCJDU1QiLCJNRFQiLCJNU1QiLCJQRFQiLCJQU1QiLCJjb25maWdGcm9tSVNPIiwibCIsImFsbG93VGltZSIsImRhdGVGb3JtYXQiLCJ0aW1lRm9ybWF0IiwidHpGb3JtYXQiLCJleGVjIiwiaXNvRGF0ZXNMZW4iLCJpc29UaW1lc0xlbiIsImNvbmZpZ0Zyb21TdHJpbmdBbmRGb3JtYXQiLCJleHRyYWN0RnJvbVJGQzI4MjJTdHJpbmdzIiwieWVhclN0ciIsIm1vbnRoU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsInVudHJ1bmNhdGVZZWFyIiwicHJlcHJvY2Vzc1JGQzI4MjIiLCJjaGVja1dlZWtkYXkiLCJ3ZWVrZGF5U3RyIiwicGFyc2VkSW5wdXQiLCJjYWxjdWxhdGVPZmZzZXQiLCJvYnNPZmZzZXQiLCJtaWxpdGFyeU9mZnNldCIsIm51bU9mZnNldCIsImhtIiwiY29uZmlnRnJvbVJGQzI4MjIiLCJwYXJzZWRBcnJheSIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENNaW51dGVzIiwiY29uZmlnRnJvbVN0cmluZyIsImNyZWF0ZUZyb21JbnB1dEZhbGxiYWNrIiwiZGVmYXVsdHMiLCJjIiwiY3VycmVudERhdGVBcnJheSIsIm5vd1ZhbHVlIiwiX3VzZVVUQyIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImNvbmZpZ0Zyb21BcnJheSIsImN1cnJlbnREYXRlIiwiZXhwZWN0ZWRXZWVrZGF5IiwieWVhclRvVXNlIiwiZGF5T2ZZZWFyRnJvbVdlZWtJbmZvIiwiX2RheU9mWWVhciIsIl9uZXh0RGF5Iiwid2Vla1llYXIiLCJ0ZW1wIiwid2Vla2RheU92ZXJmbG93IiwiY3VyV2VlayIsIkdHIiwiVyIsIkUiLCJjcmVhdGVMb2NhbCIsImdnIiwiSVNPXzg2MDEiLCJSRkNfMjgyMiIsInNraXBwZWQiLCJzdHJpbmdMZW5ndGgiLCJ0b3RhbFBhcnNlZElucHV0TGVuZ3RoIiwibWVyaWRpZW1GaXhXcmFwIiwiZXJhc0NvbnZlcnRZZWFyIiwiaG91ciIsImlzUG0iLCJtZXJpZGllbUhvdXIiLCJjb25maWdGcm9tU3RyaW5nQW5kQXJyYXkiLCJ0ZW1wQ29uZmlnIiwiYmVzdE1vbWVudCIsInNjb3JlVG9CZWF0IiwiY3VycmVudFNjb3JlIiwidmFsaWRGb3JtYXRGb3VuZCIsImJlc3RGb3JtYXRJc1ZhbGlkIiwiY29uZmlnZkxlbiIsInNjb3JlIiwiY29uZmlnRnJvbU9iamVjdCIsImRheU9yRGF0ZSIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiY3JlYXRlRnJvbUNvbmZpZyIsInByZXBhcmVDb25maWciLCJwcmVwYXJzZSIsImNvbmZpZ0Zyb21JbnB1dCIsImlzVVRDIiwicHJvdG90eXBlTWluIiwib3RoZXIiLCJwcm90b3R5cGVNYXgiLCJwaWNrQnkiLCJtb21lbnRzIiwib3JkZXJpbmciLCJpc0R1cmF0aW9uVmFsaWQiLCJ1bml0SGFzRGVjaW1hbCIsIm9yZGVyTGVuIiwicGFyc2VGbG9hdCIsImlzVmFsaWQkMSIsImNyZWF0ZUludmFsaWQkMSIsImNyZWF0ZUR1cmF0aW9uIiwiRHVyYXRpb24iLCJkdXJhdGlvbiIsInllYXJzIiwicXVhcnRlcnMiLCJxdWFydGVyIiwid2Vla3MiLCJpc29XZWVrIiwiZGF5cyIsIm1pbGxpc2Vjb25kcyIsIl9taWxsaXNlY29uZHMiLCJfZGF5cyIsIl9kYXRhIiwiX2J1YmJsZSIsImlzRHVyYXRpb24iLCJhYnNSb3VuZCIsInJvdW5kIiwiY29tcGFyZUFycmF5cyIsImFycmF5MSIsImFycmF5MiIsImRvbnRDb252ZXJ0IiwibGVuZ3RoRGlmZiIsImRpZmZzIiwib2Zmc2V0Iiwic2VwYXJhdG9yIiwidXRjT2Zmc2V0Iiwic2lnbiIsIm9mZnNldEZyb21TdHJpbmciLCJjaHVua09mZnNldCIsIm1hdGNoZXIiLCJtYXRjaGVzIiwiY2xvbmVXaXRoT2Zmc2V0IiwibW9kZWwiLCJjbG9uZSIsInNldFRpbWUiLCJsb2NhbCIsImdldERhdGVPZmZzZXQiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFNldE9mZnNldCIsImtlZXBMb2NhbFRpbWUiLCJrZWVwTWludXRlcyIsImxvY2FsQWRqdXN0IiwiX2NoYW5nZUluUHJvZ3Jlc3MiLCJhZGRTdWJ0cmFjdCIsImdldFNldFpvbmUiLCJzZXRPZmZzZXRUb1VUQyIsInNldE9mZnNldFRvTG9jYWwiLCJzdWJ0cmFjdCIsInNldE9mZnNldFRvUGFyc2VkT2Zmc2V0IiwidFpvbmUiLCJoYXNBbGlnbmVkSG91ck9mZnNldCIsImlzRGF5bGlnaHRTYXZpbmdUaW1lIiwiaXNEYXlsaWdodFNhdmluZ1RpbWVTaGlmdGVkIiwiX2lzRFNUU2hpZnRlZCIsInRvQXJyYXkiLCJpc0xvY2FsIiwiaXNVdGNPZmZzZXQiLCJpc1V0YyIsImFzcE5ldFJlZ2V4IiwiaXNvUmVnZXgiLCJyZXQiLCJkaWZmUmVzIiwicGFyc2VJc28iLCJtb21lbnRzRGlmZmVyZW5jZSIsImlucCIsInBvc2l0aXZlTW9tZW50c0RpZmZlcmVuY2UiLCJiYXNlIiwiaXNBZnRlciIsImlzQmVmb3JlIiwiY3JlYXRlQWRkZXIiLCJkaXJlY3Rpb24iLCJwZXJpb2QiLCJ0bXAiLCJpc0FkZGluZyIsImludmFsaWQiLCJTdHJpbmciLCJpc01vbWVudElucHV0IiwiaXNOdW1iZXJPclN0cmluZ0FycmF5IiwiaXNNb21lbnRJbnB1dE9iamVjdCIsInByb3BlcnR5Iiwib2JqZWN0VGVzdCIsInByb3BlcnR5VGVzdCIsInByb3BlcnR5TGVuIiwiYXJyYXlUZXN0IiwiZGF0YVR5cGVUZXN0IiwiaXNDYWxlbmRhclNwZWMiLCJnZXRDYWxlbmRhckZvcm1hdCIsIm15TW9tZW50IiwiY2FsZW5kYXIkMSIsInRpbWUiLCJmb3JtYXRzIiwic29kIiwic3RhcnRPZiIsImNhbGVuZGFyRm9ybWF0IiwibG9jYWxJbnB1dCIsImVuZE9mIiwiaXNCZXR3ZWVuIiwiaW5jbHVzaXZpdHkiLCJsb2NhbEZyb20iLCJsb2NhbFRvIiwiaXNTYW1lIiwiaW5wdXRNcyIsImlzU2FtZU9yQWZ0ZXIiLCJpc1NhbWVPckJlZm9yZSIsImFzRmxvYXQiLCJ0aGF0Iiwiem9uZURlbHRhIiwibW9udGhEaWZmIiwid2hvbGVNb250aERpZmYiLCJhbmNob3IiLCJ0b0lTT1N0cmluZyIsImtlZXBPZmZzZXQiLCJ0b0RhdGUiLCJpbnNwZWN0IiwiZGF0ZXRpbWUiLCJzdWZmaXgiLCJ6b25lIiwiaW5wdXRTdHJpbmciLCJkZWZhdWx0Rm9ybWF0VXRjIiwiZGVmYXVsdEZvcm1hdCIsInBvc3Rmb3JtYXQiLCJodW1hbml6ZSIsImZyb21Ob3ciLCJ0b05vdyIsIm5ld0xvY2FsZURhdGEiLCJNU19QRVJfU0VDT05EIiwiTVNfUEVSX01JTlVURSIsIk1TX1BFUl9IT1VSIiwiTVNfUEVSXzQwMF9ZRUFSUyIsIm1vZCQxIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwibG9jYWxTdGFydE9mRGF0ZSIsInV0Y1N0YXJ0T2ZEYXRlIiwic3RhcnRPZkRhdGUiLCJpc29XZWVrZGF5IiwidW5peCIsInRvT2JqZWN0IiwidG9KU09OIiwiaXNWYWxpZCQyIiwicGFyc2luZ0ZsYWdzIiwiaW52YWxpZEF0IiwiY3JlYXRpb25EYXRhIiwibG9jYWxlRXJhcyIsImVyYXMiLCJfZXJhcyIsInNpbmNlIiwidW50aWwiLCJsb2NhbGVFcmFzUGFyc2UiLCJlcmFOYW1lIiwibmFycm93IiwibG9jYWxlRXJhc0NvbnZlcnRZZWFyIiwiZGlyIiwiZ2V0RXJhTmFtZSIsImdldEVyYU5hcnJvdyIsImdldEVyYUFiYnIiLCJnZXRFcmFZZWFyIiwiZXJhc05hbWVSZWdleCIsImNvbXB1dGVFcmFzUGFyc2UiLCJfZXJhc05hbWVSZWdleCIsIl9lcmFzUmVnZXgiLCJlcmFzQWJiclJlZ2V4IiwiX2VyYXNBYmJyUmVnZXgiLCJlcmFzTmFycm93UmVnZXgiLCJfZXJhc05hcnJvd1JlZ2V4IiwibWF0Y2hFcmFBYmJyIiwibWF0Y2hFcmFOYW1lIiwibWF0Y2hFcmFOYXJyb3ciLCJtYXRjaEVyYVllYXJPcmRpbmFsIiwiX2VyYVllYXJPcmRpbmFsUmVnZXgiLCJhYmJyUGllY2VzIiwibmFtZVBpZWNlcyIsIm5hcnJvd1BpZWNlcyIsImFkZFdlZWtZZWFyRm9ybWF0VG9rZW4iLCJnZXR0ZXIiLCJnZXRTZXRXZWVrWWVhciIsImdldFNldFdlZWtZZWFySGVscGVyIiwiZ2V0U2V0SVNPV2Vla1llYXIiLCJnZXRJU09XZWVrc0luWWVhciIsImdldElTT1dlZWtzSW5JU09XZWVrWWVhciIsImlzb1dlZWtZZWFyIiwiZ2V0V2Vla3NJblllYXIiLCJ3ZWVrSW5mbyIsImdldFdlZWtzSW5XZWVrWWVhciIsIndlZWtzVGFyZ2V0Iiwic2V0V2Vla0FsbCIsImRheU9mWWVhckRhdGEiLCJnZXRTZXRRdWFydGVyIiwiZXJhc1BhcnNlIiwiZXJhWWVhck9yZGluYWxQYXJzZSIsImdldFNldERheU9mTW9udGgiLCJnZXRTZXREYXlPZlllYXIiLCJnZXRTZXRNaW51dGUiLCJnZXRTZXRNaWxsaXNlY29uZCIsImdldFNldFNlY29uZCIsInBhcnNlTXMiLCJnZXRab25lQWJiciIsImdldFpvbmVOYW1lIiwicHJvdG8iLCJjcmVhdGVVbml4IiwiY3JlYXRlSW5ab25lIiwicGFyc2Vab25lIiwicHJlUGFyc2VQb3N0Rm9ybWF0IiwiU3ltYm9sIiwiZm9yIiwiZXJhTmFycm93IiwiZXJhQWJiciIsImVyYVllYXIiLCJpc29XZWVrcyIsIndlZWtzSW5XZWVrWWVhciIsImlzb1dlZWtzSW5ZZWFyIiwiaXNvV2Vla3NJbklTT1dlZWtZZWFyIiwiaXNEU1QiLCJ6b25lQWJiciIsInpvbmVOYW1lIiwiZGF0ZXMiLCJpc0RTVFNoaWZ0ZWQiLCJwcm90byQxIiwiZ2V0JDEiLCJpbmRleCIsImZpZWxkIiwic2V0dGVyIiwibGlzdE1vbnRoc0ltcGwiLCJvdXQiLCJsaXN0V2Vla2RheXNJbXBsIiwibG9jYWxlU29ydGVkIiwic2hpZnQiLCJsaXN0TW9udGhzIiwibGlzdE1vbnRoc1Nob3J0IiwibGlzdFdlZWtkYXlzIiwibGlzdFdlZWtkYXlzU2hvcnQiLCJsaXN0V2Vla2RheXNNaW4iLCJmaXJzdERheU9mWWVhciIsImZpcnN0RGF5T2ZXZWVrIiwibGFuZ0RhdGEiLCJtYXRoQWJzIiwiYWRkU3VidHJhY3QkMSIsImFkZCQxIiwic3VidHJhY3QkMSIsImFic0NlaWwiLCJidWJibGUiLCJtb250aHNGcm9tRGF5cyIsIm1vbnRoc1RvRGF5cyIsImRheXNUb01vbnRocyIsImFzIiwidmFsdWVPZiQxIiwibWFrZUFzIiwiYWxpYXMiLCJhc01pbGxpc2Vjb25kcyIsImFzU2Vjb25kcyIsImFzTWludXRlcyIsImFzSG91cnMiLCJhc0RheXMiLCJhc1dlZWtzIiwiYXNNb250aHMiLCJhc1F1YXJ0ZXJzIiwiYXNZZWFycyIsImNsb25lJDEiLCJnZXQkMiIsIm1ha2VHZXR0ZXIiLCJ0aHJlc2hvbGRzIiwic3Vic3RpdHV0ZVRpbWVBZ28iLCJyZWxhdGl2ZVRpbWUkMSIsInBvc05lZ0R1cmF0aW9uIiwiZ2V0U2V0UmVsYXRpdmVUaW1lUm91bmRpbmciLCJyb3VuZGluZ0Z1bmN0aW9uIiwiZ2V0U2V0UmVsYXRpdmVUaW1lVGhyZXNob2xkIiwidGhyZXNob2xkIiwibGltaXQiLCJhcmdXaXRoU3VmZml4IiwiYXJnVGhyZXNob2xkcyIsIndpdGhTdWZmaXgiLCJ0aCIsImFicyQxIiwidG9JU09TdHJpbmckMSIsInRvdGFsU2lnbiIsInltU2lnbiIsImRheXNTaWduIiwiaG1zU2lnbiIsInRvdGFsIiwicHJvdG8kMiIsInRvSXNvU3RyaW5nIiwidmVyc2lvbiIsInJlbGF0aXZlVGltZVJvdW5kaW5nIiwicmVsYXRpdmVUaW1lVGhyZXNob2xkIiwiSFRNTDVfRk1UIiwiREFURVRJTUVfTE9DQUwiLCJEQVRFVElNRV9MT0NBTF9TRUNPTkRTIiwiREFURVRJTUVfTE9DQUxfTVMiLCJUSU1FIiwiVElNRV9TRUNPTkRTIiwiVElNRV9NUyIsImZhY3RvcnkiLCJyb290IiwibW9tZW50IiwiY2FjaGVkR3Vlc3MiLCJ6b25lcyIsImxpbmtzIiwiY291bnRyaWVzIiwiZ3Vlc3NlcyIsImxvZ0Vycm9yIiwibW9tZW50VmVyc2lvbiIsIm1ham9yIiwibWlub3IiLCJjaGFyQ29kZVRvSW50IiwiY2hhckNvZGUiLCJ1bnBhY2tCYXNlNjAiLCJ3aG9sZSIsImZyYWN0aW9uYWwiLCJtdWx0aXBsaWVyIiwiY2hhckNvZGVBdCIsImFycmF5VG9JbnQiLCJtYXBJbmRpY2VzIiwiaW5kaWNlcyIsInVucGFjayIsIm9mZnNldHMiLCJ1bnRpbHMiLCJJbmZpbml0eSIsImludFRvVW50aWwiLCJhYmJycyIsInBvcHVsYXRpb24iLCJab25lIiwicGFja2VkU3RyaW5nIiwiX3NldCIsIkNvdW50cnkiLCJjb3VudHJ5X25hbWUiLCJ6b25lX25hbWVzIiwiT2Zmc2V0QXQiLCJhdCIsInRpbWVTdHJpbmciLCJ0b1RpbWVTdHJpbmciLCJab25lU2NvcmUiLCJvZmZzZXRTY29yZSIsImFiYnJTY29yZSIsImZpbmRDaGFuZ2UiLCJsb3ciLCJoaWdoIiwibWlkIiwic29ydFpvbmVTY29yZXMiLCJsb2NhbGVDb21wYXJlIiwiYWRkVG9HdWVzc2VzIiwiZ3Vlc3Nlc0ZvclVzZXJPZmZzZXRzIiwiZ3Vlc3Nlc09mZnNldCIsIm9mZnNldHNMZW5ndGgiLCJmaWx0ZXJlZEd1ZXNzZXMiLCJyZWJ1aWxkR3Vlc3MiLCJpbnRsTmFtZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsInJlc29sdmVkT3B0aW9ucyIsInRpbWVab25lIiwibm9ybWFsaXplTmFtZSIsInpvbmVTY29yZSIsImNoYW5nZSIsInN0YXJ0WWVhciIsImxhc3QiLCJ1c2VyT2Zmc2V0cyIsInpvbmVTY29yZXMiLCJnZXRab25lIiwic2NvcmVPZmZzZXRBdCIsImFkZFpvbmUiLCJwYWNrZWQiLCJub3JtYWxpemVkIiwiY2FsbGVyIiwibGluayIsImFkZExpbmsiLCJub3JtYWwwIiwibm9ybWFsMSIsIm5lZWRzT2Zmc2V0IiwiaXNVbml4VGltZXN0YW1wIiwibWVzc2FnZSIsInR6IiwicGFyc2UiLCJ1bnBhY2tlZCIsIl9pbmRleCIsInRpbWVzdGFtcCIsInpvbmVfbmFtZSIsImNvdW50cnlfY29kZSIsIm9mZnNldE5leHQiLCJvZmZzZXRQcmV2IiwibW92ZUFtYmlndW91c0ZvcndhcmQiLCJtb3ZlSW52YWxpZEZvcndhcmQiLCJvZmZzZXRBdCIsImRhdGFWZXJzaW9uIiwiX3pvbmVzIiwiX2xpbmtzIiwiX25hbWVzIiwiX2NvdW50cmllcyIsImxvYWQiLCJjb3VudHJ5X3pvbmVzIiwiYWRkQ291bnRyaWVzIiwiem9uZUV4aXN0cyIsImRpZFNob3dFcnJvciIsImd1ZXNzIiwiaWdub3JlQ2FjaGUiLCJ6b25lc0ZvckNvdW50cnkiLCJjb3VudHJ5Iiwid2l0aF9vZmZzZXQiLCJvbGQiLCJhYmJyV3JhcCIsIl96IiwicmVzZXRab25lV3JhcCIsImRlZmF1bHRab25lIiwieiIsInNldERlZmF1bHQiLCJyZXF1aXJlJCQwIiwicmVxdWlyZSQkMSIsIm51bWJlcnNQYXN0IiwibnVtYmVyc0Z1dHVyZSIsInRyYW5zbGF0ZSIsInZlcmJhbE51bWJlciIsImxsIiwibGxsIiwibGxsbCIsInByb2Nlc3NSZWxhdGl2ZVRpbWUiLCJtb250aHNQYXJzZUV4YWN0Iiwid2Vla2RheXNQYXJzZUV4YWN0IiwidHJhbnNsYXRpb25zIiwiZGUiLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjYW5jZWwiLCJjdXJyZW50cG9zaXRpb24iLCJkZWxldGUiLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInBsYXRmb3JtIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwidmVoaWNsZXJlbnRhbHN0YXRpb24iLCJzdiIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJBdXRvc3VnZ2VzdFBhdGNoIiwiQXV0b3N1Z2dlc3QiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwic3VwZXIiLCJzZWxmIiwib25TdWdnZXN0aW9uVG91Y2hNb3ZlIiwianVzdFNlbGVjdGVkU3VnZ2VzdGlvbiIsInByZXNzZWRTdWdnZXN0aW9uIiwiTW9iaWxlU2VhcmNoIiwiYXBwRWxlbWVudCIsImNsb3NlSGFuZGxlIiwiY2xlYXJJbnB1dCIsInN1Z2dlc3Rpb25zIiwiaW5wdXRQcm9wcyIsImZldGNoRnVuY3Rpb24iLCJyZW5kZXJTdWdnZXN0aW9uIiwiZ2V0U3VnZ2VzdGlvblZhbHVlIiwiYXJpYUxhYmVsIiwib25TdWdnZXN0aW9uU2VsZWN0ZWQiLCJjbGVhck9sZFNlYXJjaGVzIiwiZGlhbG9nSGVhZGVyVGV4dCIsImRpYWxvZ1ByaW1hcnlCdXR0b25UZXh0IiwiZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dCIsImNsZWFySW5wdXRCdXR0b25UZXh0IiwiZm9jdXNJbnB1dCIsImNvbG9yIiwiaG92ZXJDb2xvciIsImFjY2Vzc2libGVQcmltYXJ5Q29sb3IiLCJzZWFyY2hPcGVuIiwiZm9udFdlaWdodHMiLCJzaG93U2Nyb2xsIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJzdHlsZXMiLCJtb2JpbGVTdHlsZXMiLCJtb2JpbGVOb1Njcm9sbFN0eWxlcyIsImlucHV0SWQiLCJpc0RpYWxvZ09wZW4iLCJzZXREaWFsb2dPcGVuIiwidXNlU3RhdGUiLCJpbnB1dFJlZiIsIlJlYWN0IiwidXNlUmVmIiwidXNlRWZmZWN0IiwiUmVhY3RNb2RhbCIsInNldEFwcEVsZW1lbnQiLCJvbkNsb3NlIiwidXNlQ2FsbGJhY2siLCJvblNlbGVjdCIsImlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCIsImV2ZW50Iiwid2hpY2giLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJnZXRWYWx1ZSIsInJlbmRlckl0ZW0iLCJjbGFzc05hbWUiLCJmb2N1cyIsImlzT3BlbiIsIm92ZXJsYXlDbGFzc05hbWUiLCJvbkFmdGVyQ2xvc2UiLCJzaG91bGRDbG9zZU9uRXNjIiwibWVkaXVtIiwiaHRtbEZvciIsIm9uQ2xpY2siLCJvbktleURvd24iLCJ0YWJJbmRleCIsIkljb24iLCJpbWciLCJhbHdheXNSZW5kZXJTdWdnZXN0aW9ucyIsIm9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZCIsImZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayIsInNob3VsZFJlbmRlclN1Z2dlc3Rpb25zIiwiaGFzVmFsdWUiLCJhdXRvRm9jdXMiLCJyZW5kZXJJbnB1dENvbXBvbmVudCIsIkZyYWdtZW50IiwidGhlbWUiLCJEaWFsb2dNb2RhbCIsImlzTW9kYWxPcGVuIiwiaGFuZGxlQ2xvc2UiLCJoZWFkZXJUZXh0IiwicHJpbWFyeUJ1dHRvblRleHQiLCJzZWNvbmRhcnlCdXR0b25UZXh0IiwicHJpbWFyeUJ1dHRvbk9uQ2xpY2siLCJzZWNvbmRhcnlCdXR0b25PbkNsaWNrIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwiaXNSZXF1aXJlZCIsInNoYXBlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJwbGFjZWhvbGRlciIsImJvb2wiLCJyIiwiZyIsIndpbmRvdyIsImlnbm9yZSIsImhlYWRlciIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsImJvZHkiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiYWN0aXZlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm91dGxpbmUiLCJzY3JvbGxUbyIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsInRvZ2dsZSIsImRpc3BhdGNoRXZlbnQiLCJmIiwiY2FuY2VsU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwidGFnTmFtZSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsIk8iLCJvZmZzZXRQYXJlbnQiLCJpbm5lckhlaWdodCIsIlMiLCJfIiwiSSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInB1c2hTdGF0ZSIsInNtb290aFNjcm9sbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJ0aXRsZSIsIm1hdGNoTWVkaWEiLCJkZWZhdWx0UHJldmVudGVkIiwiYnV0dG9uIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsImNsb3Nlc3QiLCJob3N0bmFtZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJocmVmIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsInN0YXRlIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsIl9fY3JlYXRlQmluZGluZyIsImNyZWF0ZSIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsIl9fZXhwb3J0U3RhciIsInVzZUFycm93TmF2aWdhdGlvbiIsImxpc3RJdGVtcyIsIm9uQXJyb3dVcE9yRG93biIsInNlbGVjdGVkSW5kZXgiLCJ1c2VEZWJvdW5jZSIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJ1c2VFbGVtZW50U2l6ZSIsIndpZHRoIiwiY2xpZW50V2lkdGgiLCJ1c2VJbnRlcnNlY3Rpb25PYnNlcnZlciIsImlzSW50ZXJzZWN0aW5nIiwiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJvYnNlcnZlIiwidW5vYnNlcnZlIiwiY29udGFpbmVyUmVmIiwiaXNWaXNpYmxlIiwidXNlSXNCcmVha3BvaW50IiwieHMiLCJtb2JpbGVTbWFsbCIsIm1vYmlsZSIsInRhYmxldCIsInRhYmxldExhcmdlIiwiZGVza3RvcFNtYWxsIiwiZGVza3RvcCIsImRlc2t0b3BMYXJnZSIsImlubmVyV2lkdGgiLCJ1c2VPblJlc2l6ZSIsInlvdXR1YmUiLCJQcml2YWN5TWFuYWdlckFQSSIsImFjdGlvbiIsInRydXN0ZSIsImNtYSIsImNhbGxBcGkiLCJjb25zZW50IiwidG9wIiwicG9zdE1lc3NhZ2UiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVNjcm9sbExvY2siLCJsb2NrIiwic2Nyb2xsWSIsInVubG9jayIsIl9faW1wb3J0RGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJ1c2VTbW9vdGhTY3JvbGwiLCJnbG9iYWxUaGlzIiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVmYXVsdE5TIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIm1vZGVzIiwiaTE4bmV4dCIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsInRhaWwyIiwibmFtZTEiLCJuYW1lMiIsInRyYW5zbGF0ZWRUZXh0IiwidHJhbnNsYXRlRnV0dXJlUm91dGVTdWdnZXN0aW9uVGltZSIsImFycml2ZUJ5IiwiZ2V0TGFiZWwiLCJEVEF1dG9zdWdnZXN0IiwiQ29tcG9uZW50IiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwiZWRpdGluZyIsInZhbGlkIiwidHlwaW5nVGltZXIiLCJ0aW1lciIsInNldFN0YXRlIiwidHlwaW5nIiwib25TZWxlY3RlZCIsIm93blBsYWNlcyIsInBlbmRpbmdTZWxlY3Rpb24iLCJzdWdnZXN0aW9uSW5kZXgiLCJzZWxlY3Rpb25Eb25lIiwic3VnZ2VzdGlvblZhbHVlIiwiYmx1ciIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwiaXNFbWJlZGRlZCIsImNsb3NlTW9iaWxlU2VhcmNoIiwicHJldlN0YXRlIiwiY2hlY2tQZW5kaW5nU2VsZWN0aW9uIiwib25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkIiwiY2xlYXJCdXR0b24iLCJjbGVhbkV4ZWN1dGVkIiwiaXNMb2NhdGlvblNlYXJjaCIsImlzRW1wdHkiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidHJhbnNsYXRlZCIsIm9uQ2xlYXIiLCJpbnB1dENsaWNrZWQiLCJpbnB1dFZhbHVlIiwiY2xlYXJMb2NhdGlvblRleHQiLCJzdGF0ZUtleURvd24iLCJzdG9yZUlucHV0UmVmZXJlbmNlIiwiYXV0b3N1Z2dlc3QiLCJzdG9yZVJlZiIsImZpbGxJbnB1dCIsImNvbnRlbnQiLCJTdWdnZXN0aW9uSXRlbSIsImFyaWFGYXZvdXJpdGVTdHJpbmciLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwibW9kZUljb25Db2xvcnMiLCJtb2RlU2V0Iiwia2V5RG93biIsInN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50IiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0IiwiY2xlYXJGdXR1cmVSb3V0ZXMiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm9uRm9jdXMiLCJhZGRSZXNvdXJjZUJ1bmRsZSIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRQcm9wcyIsIm5leHRTdGF0ZSIsImlzRXF1YWwiLCJjb21wb25lbnREaWRVcGRhdGUiLCJjaGFuZ2VMYW5ndWFnZSIsIlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzIiwicmVuZGVyIiwidHJhbnNsYXRlZFBsYWNlaG9sZGVyIiwidGhpbiIsImlucHV0Q2xhc3NOYW1lIiwiYXJpYUJhcklkIiwiU2VhcmNoQmFySWQiLCJhcmlhUmVxdWlyZWRUZXh0IiwiYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zIiwibW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCIsImFyaWFMYWJlbFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50IiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwic2VsZWN0aW9uIiwicm9sZSIsIm1vYmlsZUxhYmVsIiwiY3giLCJpY29uIiwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIiwiZGVmYXVsdFByb3BzIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJhbnkiLCJhcnJheU9mIiwib2JqZWN0IiwiRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrIl0sIm1hcHBpbmdzIjoia3pEQUFlLFNBQVNBLElBWXRCLE9BWEFBLEVBQVdDLE9BQU9DLE9BQVNELE9BQU9DLE9BQU9DLE9BQVMsU0FBVUMsR0FDMUQsSUFBSyxJQUFJQyxFQUFJLEVBQUdBLEVBQUlDLFVBQVVDLE9BQVFGLElBQUssQ0FDekMsSUFBSUcsRUFBU0YsVUFBVUQsR0FDdkIsSUFBSyxJQUFJSSxLQUFPRCxFQUNWUCxPQUFPUyxVQUFVQyxlQUFlQyxLQUFLSixFQUFRQyxLQUMvQ0wsRUFBT0ssR0FBT0QsRUFBT0MsSUFJM0IsT0FBT0wsR0FFRkosRUFBU2EsTUFBTUMsS0FBTVIsVUFDOUIsQ0NGZSxTQUFTUyxFQUFNQyxFQUFNQyxHQUNsQyxPQUFPRCxHQUFRQyxHQUFRRCxJQUFTQyxDQUNsQyxDQ1lBLE1BQU1DLEVBQWlCLENBQUMsT0FB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
|