@digitransit-component/digitransit-component-autosuggest 4.1.0 → 4.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),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("luxon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","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","luxon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.React,e.PropTypes,e.i18next,e.cx,e.Autosuggest,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.SuggestionItem,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.Icon,e.luxon,e.isEmpty,e.ReactModal,e.DialogModal)}(this,(function(e,t,n,o,i,s,r,a,l,u,c,d,p,h,f,g,b,m,y,v,_,S,k){"use strict";function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var x=w(t),O=w(n),j=w(o),M=w(i),R=w(s),P=w(r),E=w(a),C=w(l),L=w(u),I=w(c),N=w(d),z=w(p),F=w(h),A=w(f),T=w(g),q=w(b),D=w(m),V=w(y),B=w(_),H=w(S),$=w(k);function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function W(e){var t=function(e,t){if("object"!=U(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=U(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==U(t)?t:t+""}function G(e,t,n){return(t=W(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e,t){return e&&t&&e===t}const Q=["stop","station","favouriteStop","favouriteStation"],Z=["favouriteVehicleRentalStation","bikestation"];function K(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function X(e,t){const n=e.properties,o=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,i=o.origin,s=o.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${i.name}//${i.localadmin}//${s.name}//${s.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if(Z.includes(n.layer)&&Z.includes(o.layer)){return(n.gid||K(n.labelId))===(o.gid||K(o.labelId))}if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(Q.includes(n.layer)&&Q.includes(o.layer)&&n.gid&&o.gid)return n.gid===o.gid;const i=e&&e.geometry?e.geometry.coordinates:void 0,s=t&&t.geometry?t.geometry.coordinates:void 0;return!!(i&&s&&Math.abs(i[0]-s[0])<1e-6&&Math.abs(i[1]-s[1])<1e-6&&(Y(n.name,o.name)||Y(n.label,o.label)||Y(n.address,o.address)||Y(n.address,o.label)||Y(n.label,o.address)))}const J=e=>L.default(e)?e.toLowerCase():"",ee="back",te="currentPosition",ne="favouriteStop",oe="favouriteStation",ie="favouritePlace",se="favouriteRoute",re="favouriteVehicleRentalStation",ae="futureRoute",le="station",ue="selectFromMap",ce="ownLocations",de="stop",pe="bikestation",he="carpark",fe="bikepark",ge=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,be=(e,t)=>{switch(e){case te:return 1;case ee:return.9;case ue:return.8;case ce:return.79;case oe:case ie:case ne:case se:case re:return.45;case ae:return.44;case le:return L.default(t)&&0===t.indexOf("gtfs")?.43:.42;case he:case fe:case pe:return.38;case de:return.36;default:return.41}},me=(e,t,n="")=>{if(!Array.isArray(t))return t;const o=t=>L.default(t)&&e&&e.test(t),i=J(n),s=o(i),r=I.default(t,[e=>s&&o(J(e.properties.shortName))&&0===J(e.properties.shortName).indexOf(i)?1:0,e=>{const{confidence:t,layer:n,source:o}=e.properties;if(0===i.length)return be(n,o);if(!t)return be(n,o)+((e,t)=>L.default(e)&&0!==e.length?["name","label","address","shortName"].map((e=>t[e])).filter((e=>L.default(e)&&e.length>0)).map((t=>{const n=J(t);return 0===n.indexOf(e)?.5+e.length/n.length:.5*e.length/(e.length+1)})).reduce(((e,t)=>t>e?t:e),0):0)(i,e.properties);switch(n){case le:return t+(0===o.indexOf("gtfs")?.02:.01);case de:case he:case fe:return t-.05;case pe:return t-.04;default:return t}}],["desc","desc"]);return N.default(r,X)},ye=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function ve(e,t,n){if("string"==typeof t&&t.length>0){const o=t.toLowerCase().trim(),i=o.includes(" ")||o.includes(",");return e.filter((e=>{let t=[];n.forEach((n=>{let o=z.default(e,n);i||"properties.label"!==n&&"address"!==n||!o||(o=o.split(","),o.length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(t=i?t.concat(o.toLowerCase()):t.concat(o.toLowerCase().replace(/,/g," ").split(" ")))}));for(let e=0;e<t.length;e++)if(0===t[e].indexOf(o))return!0;return!1}))}return e}function _e(e,t){return e?Object.keys(e).map((n=>{const o=t||n,i=e[n];return"object"==typeof i?_e(i,o):`${encodeURIComponent(o)}=${encodeURIComponent(i)}`})).join("&"):""}const Se=require("axios").default;function ke(e,t){return Se.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+_e(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((e=>e.data))}function we(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?we(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):we(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Oe(e,t,n,o,i,s,r,a){const l=e?e.trim():null;if(null==l||l.length<1||r&&!r.test(l))return Promise.resolve([]);const u=s||"https://api.digitransit.fi/geocoding/v1/search";let c=xe(xe(xe({text:l},t),o),{},{lang:n});if(i&&(c=xe(xe({},c),{},{sources:i})),a){const e=a.toString();c=xe(xe({},c),{},{layers:e})}return ke(u,c).then((e=>e.features))}function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Me(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?je(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):je(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Re(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const o=e.map((e=>{const t="stop"===e.type?"stop":"station";let o=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(o+=`#${e.code}`),n+=`${o},`,Me(Me({},e),{},{gid:o})})).reduce((function(e,t){return e[t.gid]=t,e}),{});return ke(t,{ids:n.slice(0,-1)}).then((e=>e.features.map((e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:o[e.properties.gid].gid,code:o[e.properties.gid].code,gtfsId:o[e.properties.gid].gtfsId,lastUpdated:o[e.properties.gid].lastUpdated,favouriteId:o[e.properties.gid].favouriteId,address:e.properties.label,layer:ge(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))))}function Pe(e,t,n){let o=ve(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter((e=>!n.includes(e.properties.layer)))),Promise.resolve(C.default(o,10).map((e=>{const t=Me(Me({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t})))}const Ee=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],Ce=["venue","address","street"],Le=["carpark","bikepark"],Ie=["stop","station"];const Ne=P.default((function(e,t,n,o,i,s,{input:r},a,l,u){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:h,parkingAreaSources:f,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:v,getFavouriteRoutes:_,getRoutesQuery:S,context:k,isPeliasLocationAware:w,minimalRegexp:x,lineRegexp:O,URL_PELIAS:j,URL_PELIAS_PLACE:M,feedIDs:R,geocodingSearchParams:P,geocodingSources:L,getFutureRoutes:I,cityBikeNetworks:N}=o,z=!e||0===e.length,F=!t||0===t.length,A=c(k),T=[],q={type:"all",term:r,results:[]},D=g(k),V=w&&null!=u&&u.lat&&null!=u&&u.lon?{"focus.point.lat":u.lat.toFixed(3),"focus.point.lon":u.lon.toFixed(3)}:{},B=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==A.status&&T.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(r,A)),(z||e.includes("MapPosition"))&&T.push(function(e){return"string"!=typeof e||0===e.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([])}(r)),e.includes("FutureRoutes")){const e=I(k);T.push(C.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if((null==t?void 0:t.length)>0)return!0;const n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const o=e.getFavouriteStops(e.context);return(null==o?void 0:o.length)>0}(o)&&T.push(function(e){return"string"!=typeof e||0===e.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([])}(r)),z||e.includes("Locations")){const n=P;if(t.includes("Favourite")){const e=d(k);T.push(function(e,t){return Promise.resolve(ve(e,t,["address","name"]).map((e=>({type:"FavouritePlace",properties:Me(Me({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}))))}(e,r)),t.includes("Back")&&T.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(F||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),T.push(Oe(r,n,D,V,L.join(","),j,x,t))}if(F||t.includes("History")){const e=p(k,"endpoint"),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Le),T.push(Pe(e,r,t))}}if(z||e.includes("ParkingAreas")){if(F||t.includes("Datasource")){const e=P;s&&10!==s&&(e.size=s);const t=["carpark","bikepark"],n=f?f.join(","):null;T.push(Oe(r,e,D,V,n,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Ce),T.push(Pe(e,r,t))}}const H=e.includes("Stops"),$=e.includes("Stations");if(z||H||$){if(t.includes("Favourite")){const e=h(k);let t;t=e.every((e=>"station"===e.type))?Re(e,M).then((e=>i?i(e,B):e)):b(e).then((e=>Re(e,M))).then((e=>i?i(e,B):e)),T.push(function(e,t,n,o){return e.then((e=>ve(e.filter((e=>"stop"===e.type?n:o)),t,["properties.name","properties.name","properties.address"])))}(t,r,H,$))}if(F||t.includes("Datasource")){const t=[];H&&t.push("stop"),$&&t.push("station");const n=s&&10!==s?{size:s}:{};P&&P["boundary.country"]&&(n["boundary.country"]=P["boundary.country"]),(z||e.includes("Locations"))&&(n.dedupestops=1);const o=R.map((e=>`gtfs${e}`)).join(",");T.push(Oe(r,n,D,V,o,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k).filter((e=>!e.properties.gid||e.properties.gid.includes("GTFS:"))),t=["bikestation"];t.push(...Ee),t.push(...Ce),t.push(...Le),H||t.push("stop"),$||t.push("station"),n?T.push(Pe(e,r,t).then((e=>i?i(e,B):e))):T.push(Pe(e,r,t))}}if(z||e.includes("Routes")){if(t.includes("Favourite")){const e=_(k);T.push(v(e,r,B,l).then((e=>i?i(e,B,"Routes"):e)))}if(T.push(S(r,R,n,l).then((e=>i?i(e,B,"Routes"):e))),F||t.includes("History")){const e=p(k),t=["bikestation"];n&&t.push(...Ee.filter((e=>!(e===n)))),t.push(...Ie),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t).then((e=>i?i(e,B,"Routes"):e)))}}if(z||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(k);T.push(m(e,r))}if(F||t.includes("Datasource")){const e=["bikestation"],t=s&&10!==s?{size:s}:{};T.push(Oe(r,t,D,V,N.join(","),j,x,e).then((e=>i?i(e,B,"VehicleRentalStations"):e)))}if(F||t.includes("History")){const e=p(k),t=[...Ie];t.push(...Ee),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t))}}Promise.all(T).then(E.default).then((e=>{q.results=e})).catch((e=>{q.error=e})).then((()=>{a(Me(Me({},q),{},{results:me(O,q.results,r)}))}))}),300,{leading:!0}),ze=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Fe=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Ae=T.default(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return n=e.name,o=e.address,[n||o&&o.split(",")[0],"string"==typeof o?o.replace(new RegExp(`${q.default(n)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[e.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!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${q.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]:[e.name,e.id,Fe(e),ze(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]}var n,o}),((e,t)=>{const n=D.default(e);return n.plain=t,n}));const Te={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äpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","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"},pl:{address:"Adres","address-place-or-business":"Adres, miejsce lub firma","add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel","give-origin":"Wprowadź swój punkt początkowy.","give-destination":"Wprowadź swój cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",loading:"Ładowanie…","minute-short":"min.",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-button-label":"Szukaj","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-current-suggestion":"Obecny wybór: {{selection}}",street:"Ulica",subway:"Metro",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków","today-at":"dziś o","tomorrow-at":"jutro o",tram:"Tramwaj",track:"Tor","use-own-position":"Użyj obecnej lokalizacji","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?",place:"Miejsce"},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 qe(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&o.firstChild?o.insertBefore(i,o.firstChild):o.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var De={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"};qe("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 -moz-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: #f2f5f7; }\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: #f2f5f7; }\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 clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var Ve={"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"};qe("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 -moz-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: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 Be={"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"};function He(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?He(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):He(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}qe("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 -moz-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: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 Ue extends R.default{constructor(e){super(e);const t=this;t.onSuggestionTouchMove=()=>{t.justSelectedSuggestion=!1,t.pressedSuggestion=null}}}const We=({appElement:e,id:n,closeHandle:o,clearInput:i,value:s,suggestions:r,inputProps:a,fetchFunction:l,renderSuggestion:u,getSuggestionValue:c,ariaLabel:d,label:p,onSuggestionSelected:h,clearOldSearches:f,dialogHeaderText:g,dialogPrimaryButtonText:b,dialogSecondaryButtonText:m,clearInputButtonText:y,focusInput:v,color:_,hoverColor:S,accessiblePrimaryColor:k,searchOpen:w,fontWeights:O,showScroll:j})=>{var M;const R=j?Ve:Be,P=`${n}-input`,E=`${n}-label`,[C,L]=t.useState(!1),I=x.default.useRef();t.useEffect((()=>{H.default.setAppElement(e)}),[]);const N=t.useCallback((()=>{o()})),z=(e,t)=>{"clear-search-history"===t.suggestion.type?L(!0):t.suggestion.properties.arrowClicked||h(e,t)},F=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},A=e=>"clear-search-history"===e.type?"":c(e),T=e=>"clear-search-history"===e.type?x.default.createElement("button",{type:"button",className:R["clear-search-history"]},e.labelId):u(e);return v&&null!==(M=I.current)&&void 0!==M&&M.input&&I.current.input.focus(),x.default.createElement(H.default,{isOpen:w,className:R["mobile-modal"],overlayClassName:R["mobile-modal-overlay"],onAfterClose:N,shouldCloseOnEsc:!0},x.default.createElement("div",{className:R["mobile-modal-content"],style:{"--color":`${_}`,"--accessible-primary-color":k,"--hover-color":`${S}`,"--font-weight-medium":O.medium}},x.default.createElement("div",{className:R["combobox-container"],htmlFor:P},x.default.createElement("button",{type:"button",className:R["combobox-icon"],onClick:()=>N(),onKeyDown:e=>F(e)&&N(),"aria-label":m,tabIndex:0},x.default.createElement(V.default,{img:"arrow"})),x.default.createElement("span",{className:R["right-column"]},x.default.createElement("span",{className:R["combobox-label"],id:E},p),x.default.createElement(Ue,{alwaysRenderSuggestions:!0,id:n,suggestions:r,onSuggestionsFetchRequested:l,getSuggestionValue:A,renderSuggestion:T,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:$e($e({},a),{},{className:`${R.input} ${R[n]||""} ${a.value?R.hasValue:""}`,autoFocus:!0}),renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("input",Object.assign({"aria-label":d,id:n},e)),s&&x.default.createElement("button",{type:"button",className:R["clear-input"],onClick:i,onKeyDown:e=>F(e)&&i(),"aria-label":y},x.default.createElement(V.default,{img:"close",color:_}))),theme:R,onSuggestionSelected:z,ref:I}))),x.default.createElement($.default,{appElement:e,isModalOpen:C,handleClose:()=>L(!1),headerText:g,primaryButtonText:b,secondaryButtonText:m,primaryButtonOnClick:()=>{f(),L(!1)},secondaryButtonOnClick:()=>L(!1),color:_,hoverColor:S,fontWeights:O})))};"production"!==process.env.NODE_ENV&&(We.propTypes={appElement:O.default.string.isRequired,id:O.default.string.isRequired,closeHandle:O.default.func.isRequired,clearInput:O.default.func.isRequired,value:O.default.string,clearInputButtonText:O.default.string.isRequired,suggestions:O.default.arrayOf(O.default.object).isRequired,inputProps:O.default.shape({onChange:O.default.func.isRequired,onBlur:O.default.func.isRequired,value:O.default.string.isRequired,placeholder:O.default.string.isRequired,className:O.default.string.isRequired}).isRequired,fetchFunction:O.default.func.isRequired,getSuggestionValue:O.default.func.isRequired,renderSuggestion:O.default.func.isRequired,onSuggestionSelected:O.default.func.isRequired,label:O.default.string.isRequired,clearOldSearches:O.default.func.isRequired,ariaLabel:O.default.string,dialogHeaderText:O.default.string,dialogPrimaryButtonText:O.default.string,dialogSecondaryButtonText:O.default.string,focusInput:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string.isRequired,searchOpen:O.default.bool.isRequired,fontWeights:O.default.shape({medium:O.default.number.isRequired}).isRequired,showScroll:O.default.bool}),We.defaultProps={value:void 0,ariaLabel:void 0,dialogHeaderText:void 0,dialogPrimaryButtonText:void 0,dialogSecondaryButtonText:void 0,focusInput:!1,color:void 0,hoverColor:void 0,showScroll:void 0};var Ge,Ye=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){var n;"undefined"!=typeof self&&self,e.exports=(n=x.default,function(){var e={888:function(e,t,n){var o,i;i=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(e){var t={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},n=function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}})),e},o=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,i=-1,s="",r=n.charCodeAt(0);++i<o;){if(0===(t=n.charCodeAt(i)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");s+=t>=1&&t<=31||127==t||0===i&&t>=48&&t<=57||1===i&&t>=48&&t<=57&&45===r?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(i):"\\"+n.charAt(i)}return"#"+s},i=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},s=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},r=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},a=function(t,n,o,i){if(n.emitEvents&&"function"==typeof e.CustomEvent){var s=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:i}});document.dispatchEvent(s)}};return function(l,u){var c,d,p,h,f={cancelScroll:function(e){cancelAnimationFrame(h),h=null,e||a("scrollCancel",c)},animateScroll:function(o,l,u){f.cancelScroll();var d=n(c||t,u||{}),g="[object Number]"===Object.prototype.toString.call(o),b=g||!o.tagName?null:o;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,v,_,S=s(p),k=g?o:function(t,n,o,s){var r=0;if(t.offsetParent)do{r+=t.offsetTop,t=t.offsetParent}while(t);return r=Math.max(r-n-o,0),s&&(r=Math.min(r,i()-e.innerHeight)),r}(b,S,parseInt("function"==typeof d.offset?d.offset(o,l):d.offset,10),d.clip),w=k-m,x=i(),O=0,j=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(w,d),M=function(t){y||(y=t),O+=t-y,_=m+w*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,v=(v=0===j?0:O/j)>1?1:v),e.scrollTo(0,Math.floor(_)),function(t,n){var i=e.pageYOffset;if(t==n||i==n||(m<n&&e.innerHeight+i)>=x)return f.cancelScroll(!0),r(o,n,g),a("scrollStop",d,o,l),y=null,h=null,!0}(_,k)||(h=e.requestAnimationFrame(M),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(o,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?r(o,Math.floor(k),!1):(a("scrollStart",d,o,l),f.cancelScroll(!0),e.requestAnimationFrame(M))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(l))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,i;try{n=o(decodeURIComponent(d.hash))}catch(e){n=o(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;i=document.documentElement}else i=document.querySelector(n);(i=i||"#top"!==n?i:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),f.animateScroll(i,d))}},b=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(o(history.state.anchor)))||f.animateScroll(t,null,{updateURL:!1})}};return f.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),f.cancelScroll(),c=null,d=null,p=null,h=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";f.destroy(),c=n(t,u||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),f}}(i)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(47),t),i(n(926),t),i(n(349),t),i(n(137),t),i(n(729),t),i(n(383),t),i(n(450),t),i(n(358),t),i(n(753),t),i(n(869),t),i(n(352),t),i(n(446),t),i(n(164),t),i(n(305),t),i(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,i=(0,o.useState)(0),s=i[0],r=i[1],a=(0,o.useCallback)((function(e){r(e)}),[t]),l=function(e){var o=e.key;if(null==t?void 0:t.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),a(s>0?s-1:t.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),s<t.length-1?a(s+1):a(0)}};return(0,o.useEffect)((function(){return window.addEventListener("keydown",l),function(){return window.removeEventListener("keydown",l)}})),(0,o.useEffect)((function(){a(0)}),[t]),{selectedIndex:s}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),i=n[0],s=n[1];return(0,o.useEffect)((function(){var n=setTimeout((function(){s(e)}),t);return function(){clearTimeout(n)}}),[e,t]),i}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),i=n[0],s=n[1],r=function(e){var t=e[0];s(t.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(r,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}s(!1)}),[t,e]),{containerRef:t,isVisible:i}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),i=n(432),s={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?s[e]:e,n=(0,o.useState)(null),r=n[0],a=n[1],l=(0,o.useCallback)((function(){a(window.innerWidth)}),[]);return(0,o.useEffect)((function(){l()}),[]),(0,i.useOnResize)(l),r>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),i=n[0],s=n[1];return(0,o.useEffect)((function(){e||s(t)}),[e,t]),e&&i}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,i=e.watch;(0,o.useEffect)((function(){var e=function(){var e;if(i)return(null===(e=t.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}}),[n,t,i])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.useEffect)((function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}}),[])},t.default=t.useOnResize},352:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var o=n(156);t.useOnWindowFocus=function(e){(0,o.useEffect)((function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}}),[e])}},47:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.useEffect)((function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}}))}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))}),[])}}},358:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var i=n(156),s=o(n(888));t.useSmoothScroll=function(e){var t=(0,i.useRef)(null),n=e.ref,o=e.offset,r=void 0===o?0:o,a=e.speed,l=void 0===a?500:a;return(0,i.useEffect)((function(){t.current=new s.default(null,{speed:l,speedAsDuration:!0})}),[]),(0,i.useCallback)((function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return r},updateURL:!1})}),[r,n])}},156:function(e){e.exports=n}},t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,o),s.exports}return o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o(432)}())})),Qe=(Ge=Ye)&&Ge.__esModule&&Object.prototype.hasOwnProperty.call(Ge,"default")?Ge.default:Ge;function Ze(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ke(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ze(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ze(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}v.Settings.defaultLocale="en",j.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}}),"production"!==process.env.NODE_ENV&&O.default.node;const Xe=e=>{if(!e||!e.GTFS.platform)return;const{modes:t,platform:n}=e.GTFS;return[t&&"RAIL"===t[0]?j.default.t("track"):j.default.t("platform"),n]};function Je(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",j.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",j.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",j.default.t("select-from-own-locations")];let n,[o,i]=Ae(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){n=j.default.t("vehiclerentalstation");return[n,o,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return n=j.default.t("bikepark"),[n,o,void 0,void 0];if("carpark"===e.properties.layer)return n=j.default.t("carpark"),[n,o,void 0,void 0];if(e.properties.mode)n=j.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{const t=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");n=j.default.t(t)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var t;const s=Fe(e.properties),r=null===(t=e.properties.addendum)||void 0===t?void 0:t.GTFS.modes,a=Xe(e.properties.addendum);return[n,ye(o,s),i,s,r,a]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:t,code:s}=e.properties;return[n,t?ye(t.split(",")[0],s):o,i,s,void 0,Xe(e.properties.addendum)]}return[n,o,i]}const{origin:n,destination:o}=e.properties,i=n.locality?`, ${n.locality} foobar`:"",s=o.locality?`, ${o.locality}`:"",r=n.name,a=o.name;return[j.default.t("future-route"),`${j.default.t("origin")} ${r}${i} ${j.default.t("destination")} ${a}${s}`,e.translatedText]}function et(e){const t=v.DateTime.fromSeconds(Number(e.properties.time)),n=v.DateTime.now();let o=e.properties.arriveBy?j.default.t("arrival"):j.default.t("departure");return o=t.hasSame(n,"day")?`${o} ${j.default.t("today-at")}`:t.hasSame(n.plus({days:1}),"day")?`${o} ${j.default.t("tomorrow-at")}`:`${o} ${t.toFormat("ccc d.L.")}`,o=`${o} ${t.toFormat("HH:mm")}`,o}const tt=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties);class nt extends x.default.Component{constructor(e){super(e),G(this,"onChange",((e,{newValue:t,method:n})=>{const o={value:this.fInput||t||"",renderMobileSearch:this.props.isMobile};if(this.fInput=null,this.state.editing){if("enter"!==n||this.state.valid){if(this.state.typingTimer&&clearTimeout(this.state.typingTimer),"type"===n){const e=setTimeout((()=>{this.setState({typing:!1})}),1e3);o.typingTimer=e,o.typing=!0}this.setState(o)}}else o.editing=!0,this.setState(o,(()=>this.fetchFunction({value:t||""})))})),G(this,"onBlur",(()=>{this.state.editing&&this.input.focus(),this.setState({editing:!1,renderMobileSearch:!1,value:this.props.value}),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()})),G(this,"onSelected",((e,t)=>{if(this.state.valid){if("SelectFromOwnLocations"===t.suggestion.type)return void this.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:t.suggestion.type,value:""},(()=>{this.fetchFunction({value:""})}));if("back"===t.suggestion.type||"FutureRoute"===t.suggestion.type)return void this.setState({sources:this.props.sources,ownPlaces:!1,pendingSelection:t.suggestion.type,suggestionIndex:t.suggestionIndex},(()=>{this.fetchFunction({value:""})}));this.selectionDone=!0,this.setState({editing:!1,value:t.suggestionValue},(()=>{this.input.blur(),this.props.handleViaPoints?this.props.handleViaPoints(t.suggestion,t.suggestionIndex):this.props.onSelect(t.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.state.renderMobileSearch&&this.closeMobileSearch()}))}else this.setState((e=>({pendingSelection:e.value})),(()=>this.checkPendingSelection()))})),G(this,"onSuggestionsClearRequested",(()=>{this.setState({suggestions:[],sources:this.props.sources,ownPlaces:!1,editing:!1})})),G(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},(()=>{if(this.state.suggestions.length){this.input.blur();"back"!==this.state.suggestions[this.state.suggestionIndex].type&&this.props.onSelect(this.state.suggestions[this.state.suggestionIndex],this.props.id),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch(),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange()}})):this.setState({pendingSelection:null,editing:!0},(()=>{this.input.focus()}))})),G(this,"clearButton",(()=>x.default.createElement("button",{type:"button",className:De["clear-input"],onClick:this.clearInput,"aria-label":j.default.t("clear-button-label")},x.default.createElement(V.default,{img:"close",color:this.props.color})))),G(this,"fetchFunction",(({value:e,cleanExecuted:t})=>this.setState({valid:!1,cleanExecuted:t||!1},(()=>{if(this.selectionDone)return;const{targets:t}=this.props,n=B.default(t),o=B.default(t)||t.includes("Locations");let i;this.state.ownPlaces?(i=["Locations"],(n||t.includes("Stops"))&&i.push("Stops"),(n||t.includes("Stations"))&&i.push("Stations"),(n||t.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):n||(i=[...t],o&&!this.props.isMobile&&(B.default(this.props.sources)||this.props.sources.includes("Favourite"))&&i.push("SelectFromOwnLocations"));((e,t,n,o,i,s,r,a,l,u)=>{a(null),Ne(e,t,n,o,i,s,r,a,l,u)})(i,this.state.sources&&this.state.sources.filter((e=>!(o&&"Favourite"===e&&!this.state.ownPlaces&&!this.props.isMobile))),this.props.transportMode,this.props.searchContext,this.props.filterResults,this.props.geocodingSize,{input:e||""},(t=>{if(null==t)return;const n=(t.results||[]).filter((e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>v.DateTime.now().toUnixInteger())).map((e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=Ke({},e);return t.properties.labelId=j.default.t(e.properties.labelId),t}return e}));e!==this.state.value&&e!==this.state.pendingSelection&&"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection&&"FutureRoute"!==this.state.pendingSelection||this.setState({valid:!0,suggestions:n},(()=>this.checkPendingSelection()))}),this.props.pathOpts,this.props.refPoint)})))),G(this,"clearInput",(()=>{const e={editing:!0,value:"",sources:this.props.sources,ownPlaces:!1,renderMobileSearch:this.props.isMobile};this.setState(e,(()=>this.fetchFunction({value:"",cleanExecuted:!0}))),this.props.onClear&&this.props.onClear(this.props.id),this.input.focus()})),G(this,"inputClicked",(e=>{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 t={editing:!0,pendingSelection:null,renderMobileSearch:this.props.isMobile},n={editing:!0,pendingSelection:null,value:e};this.state.suggestions.length?(this.fetchFunction({value:this.state.value}),this.setState(t)):"object"!=typeof e&&e?this.setState(n,(()=>this.fetchFunction({value:e}))):this.setState(t,(()=>this.fetchFunction({value:this.state.value})))}})),G(this,"storeInputReference",(e=>{null!==e&&(this.input=e.input,this.props.storeRef&&this.props.storeRef(e.input))})),G(this,"fillInput",(e=>{this.fInput=e.properties.name;const t={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};this.setState(t),this.fetchFunction({value:e.properties.name}),this.input.focus()})),G(this,"renderItem",(e=>{const t="FutureRoute"===e.type?Ke(Ke({},e),{},{translatedText:et(e)}):e,n=Je(e);return x.default.createElement(F.default,{item:t,content:n,loading:!this.state.valid,isMobile:this.props.isMobile,ariaFavouriteString:j.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})})),G(this,"closeMobileSearch",(()=>{this.props.unlock(),this.setState({renderMobileSearch:!1,value:this.props.value},(()=>{window.scrollTo(0,this.state.scrollY),this.onSuggestionsClearRequested()})),this.input.focus()})),G(this,"keyDown",(e=>{if(this.selectionDone)return;const t=e.key;if("Shift"!==t){if("Escape"===t&&this.onBlur(),this.state.editing)return"Enter"===t&&""!==this.state.value&&this.setState({pendingSelection:!0},(()=>{this.fetchFunction({value:this.state.value})})),void this.inputClicked();if("Enter"!==t&&"ArrowDown"!==t||""!==this.state.value){if("ArrowDown"===t&&""!==this.state.value){const e={editing:!0,value:this.state.value};this.setState(e,(()=>this.fetchFunction({value:this.state.value})))}this.state.editing||(this.setState({editing:!0}),this.clearLocationText()),"Tab"===t&&this.onBlur()}else this.clearInput()}})),G(this,"suggestionAsAriaContent",(()=>{let e=[];const t=this.state.suggestions[0];return t&&(t.type&&t.type.includes("Favourite")&&e.push(j.default.t("favourite")),e=e.concat(Je(this.state.suggestions[0]))),[...new Set(e)].join(" - ")})),G(this,"clearOldSearches",(()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=this.props.searchContext;e&&t&&(t(e),n&&n(e),this.fetchFunction({value:this.state.value}))})),G(this,"isOriginDestinationOrViapoint",(()=>"origin"===this.props.id||"destination"===this.props.id||"via-point"===this.props.id||"origin-stop-near-you"===this.props.id)),G(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","Wybrane miejsce"].includes(this.state.value)&&this.clearInput()})),G(this,"onFocus",(()=>{const e=window.pageYOffset;return this.setState({scrollY:e})})),v.Settings.defaultZone=e.timeZone,v.Settings.defaultLocale=e.lang,this.state={value:e.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:e.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(Te).forEach((e=>{j.default.addResourceBundle(e,"translation",Te[e])}))}shouldComponentUpdate(e,t){return!A.default(t,this.state)||!A.default(e,this.props)}componentDidUpdate(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang)}UNSAFE_componentWillReceiveProps(e){e.value===this.state.value||this.state.editing||this.setState({value:e.value})}render(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang);const{value:e,suggestions:t,renderMobileSearch:n,cleanExecuted:o}=this.state,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:j.default.t(this.props.placeholder),value:e,onChange:this.onChange,onBlur:this.onBlur,className:`${De.input} ${this.props.isMobile&&this.props.transportMode?De.thin:""} ${De[this.props.id]||""} ${this.state.value?De.hasValue:""} ${this.props.inputClassName}`,onKeyDown:this.keyDown,required:this.props.required},s=this.props.id.replace("searchfield-","");let r=this.props.ariaLabel||j.default.t(s);r=r.replace("searchfield-","").concat(".");const a=this.props.required?`${j.default.t("required")}.`:"",l=this.props.isMobile?j.default.t("search-autosuggest-label-instructions-mobile"):j.default.t("search-autosuggest-label-instructions-desktop"),u="origin"===this.props.id?j.default.t("search-autosuggest-label-move-to-destination"):"",c=l.concat(" ").concat(u),d=j.default.t("search-autosuggest-len",{count:t.length}),p=()=>this.suggestionAsAriaContent()||this.props.value?j.default.t("search-current-suggestion",{selection:this.suggestionAsAriaContent().toLowerCase()||this.props.value}):"";return x.default.createElement(x.default.Fragment,null,x.default.createElement("span",{className:De["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${d} ${p()}`),this.props.isMobile&&x.default.createElement(We,{searchOpen:n,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[...t,{type:"clear-search-history",labelId:j.default.t("clear-search-history")}],inputProps:Ke(Ke({},i),{},{placeholder:this.isOriginDestinationOrViapoint()?j.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:a.concat(" ").concat(r).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:j.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:j.default.t("delete-old-searches-header"),dialogPrimaryButtonText:j.default.t("delete"),dialogSecondaryButtonText:j.default.t("cancel"),clearInputButtonText:j.default.t("clear-button-label"),focusInput:o,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!n&&x.default.createElement("div",{className:M.default(De["autosuggest-input-container"],De[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&x.default.createElement("div",{className:M.default(De["autosuggest-input-icon"],De[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":a.concat(" ").concat(r).concat(" ").concat(j.default.t("search-autosuggest-label"))},x.default.createElement(V.default,{img:`${this.props.icon}`})),x.default.createElement(R.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:t,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,inputProps:Ke(Ke({},i),{},{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:De,renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("label",{className:De["sr-only"],htmlFor:this.props.id},p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c)),x.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},e)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}G(nt,"defaultProps",{autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,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&&(nt.propTypes={appElement:O.default.string.isRequired,autoFocus:O.default.bool,className:O.default.string,icon:O.default.string,id:O.default.string.isRequired,placeholder:O.default.string.isRequired,translatedPlaceholder:O.default.string,value:O.default.string,searchContext:O.default.shape({URL_PELIAS:O.default.string,context:O.default.object,clearOldSearches:O.default.func,clearFutureRoutes:O.default.func}).isRequired,ariaLabel:O.default.string,onSelect:O.default.func.isRequired,transportMode:O.default.string,filterResults:O.default.func,geocodingSize:O.default.number,onClear:O.default.func,storeRef:O.default.func,handleViaPoints:O.default.func,focusChange:O.default.func,lang:O.default.string,sources:O.default.arrayOf(O.default.string),targets:O.default.arrayOf(O.default.string),isMobile:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string,timeZone:O.default.string,pathOpts:O.default.shape({routesPrefix:O.default.string,stopsPrefix:O.default.string}),mobileLabel:O.default.string,lock:O.default.func.isRequired,unlock:O.default.func.isRequired,refPoint:O.default.shape({address:O.default.string,lat:O.default.number,lon:O.default.number}),inputClassName:O.default.string,fontWeights:O.default.shape({medium:O.default.number}),modeIconColors:O.default.objectOf(O.default.string),getAutoSuggestIcons:O.default.objectOf(O.default.func),required:O.default.bool,modeSet:O.default.string,showScroll:O.default.bool,isEmbedded:O.default.bool});const ot=(it=nt,e=>{const{lock:t,unlock:n}=Qe.useScrollLock();return x.default.createElement(it,Object.assign({lock:t,unlock:n},e))});var it;e.default=ot,Object.defineProperty(e,"__esModule",{value:!0})}));
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vc3JjL2hlbHBlcnMvTW9iaWxlU2VhcmNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Boc2wtZmkvaG9va3MvbGliL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsL2luZGV4LmpzIiwiLi4vc3JjL2hlbHBlcnMvd2l0aFNjcm9sbExvY2suanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuXG5jb25zdCBndGZzU3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJywgJ2Zhdm91cml0ZVN0b3AnLCAnZmF2b3VyaXRlU3RhdGlvbiddO1xuY29uc3QgdmVoaWNsZVJlbnRhbExheWVycyA9IFsnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLCAnYmlrZXN0YXRpb24nXTtcblxuZnVuY3Rpb24gbGFiZWxJZFRvR2lkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBpZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgY2l0eWJpa2VzJHtwYXJ0c1swXX06YmlrZXN0YXRpb246JHtwYXJ0c1sxXX1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxhZG1pbn0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxhZG1pbn1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxhZG1pbn0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxhZG1pbn1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtpdGVtLmd0ZnNJZH0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0LiBUaGUgYmVzdCBtYXRjaCB3aWxsIGJlIHJldHVybmVkIChtaW46IDAsIG1heDogMS41KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0pXG4gICAgLmZpbHRlcih2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZSh2YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBdLFxuICAgIFsnZGVzYycsICdkZXNjJ10sXG4gICk7XG5cbiAgcmV0dXJuIHVuaXFXaXRoKG9yZGVyZWRSZXN1bHRzLCBpc0R1cGxpY2F0ZSk7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzdG9wJ3MgbmFtZSB3aXRob3V0IHN0b3AgY29kZSBmcm9tIGEgc3RvcCBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgc3RvcCdzIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9wQ29kZSBzdG9wIGNvZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9wTmFtZSA9IChuYW1lLCBzdG9wQ29kZSkgPT4ge1xuICBpZiAoXG4gICAgc3RvcENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN0b3BDb2RlICE9PSBudWxsICYmXG4gICAgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgIT09IC0xXG4gICkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAtIDEpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxhZG1pbiAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGFkbWluXG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsYWRtaW4gPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgYmFjazogJ1p1csO8Y2snLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICBidXM6ICdCdXMnLFxuICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgZmVycnk6ICdGw6RocmUnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcmFpbDogJ1p1ZycsXG4gICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgcGxhY2U6ICdPcnQnLFxuICB9LFxuICBlbjoge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgIGJhY2s6ICdCYWNrJyxcbiAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgIGJ1czogJ2J1cycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICByYWlsOiAnVHJhaW4nLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdTdG9wJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU2VhcmNoIGNpdHkgYmlrZSBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU2VhcmNoIHRyYW0gcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ3RvbW9ycm93IGF0JyxcbiAgICB0cmFtOiAnVHJhbScsXG4gICAgdHJhY2s6ICdUcmFjaycsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICB9LFxuICBmaToge1xuICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgIGFpcnBsYW5lOiAnTGVudG9rb25lJyxcbiAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgdmVoaWNsZXJlbnRhbHN0YXRpb246ICdQecO2csOkYXNlbWEnLFxuICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICBidXM6ICdidXNzaScsXG4gICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUeWhqZW5uw6QgaGFrdWhpc3RvcmlhJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0hhbHVhdGtvIHR5aGplbnTDpMOkIGhha3VoaXN0b3JpYW4/JyxcbiAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgZmF2b3VyaXRlOiAnU3Vvc2lra2knLFxuICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICdnaXZlLW9yaWdpbic6ICdMw6RodMO2cGFpa2thJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgIHJhaWw6ICdKdW5hJyxcbiAgICByZXF1aXJlZDogJ3Bha29sbGluZW4ga2VudHTDpCcsXG4gICAgc2VhcmNoOiAnRXRzaScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdIYWUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdIYWUgbMOkaHTDtnBhaWtrYWEsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdQYWlrYW5uYScsXG4gICAgc3RyZWV0OiAnS2F0dScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdBc2VtYScsXG4gICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdIYWUgbGVudG9qYSB0YWkgbGVudG9hc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdIYWUgYnVzc2lsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ0hhZSBtZXRyb2xpbmphYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgdHJhY2s6ICdSYWlkZScsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgdmVudWU6ICdQYWlra2EnLFxuICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgd2hlcmU6ICdNaW5uZSBtZW5uw6TDpG4/JyxcbiAgICBwbGFjZTogJ1BhaWtrYScsXG4gIH0sXG4gIHBsOiB7XG4gICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdMb3QnLFxuICAgIGFycml2YWw6ICdQcnp5amF6ZCcsXG4gICAgYmFjazogJ1dyw7PEhycsXG4gICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhY2phIHJvd2Vyb3dhJyxcbiAgICBidXM6ICdhdXRvYnVzJyxcbiAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgIGNhcnBhcms6ICdQYXJrdWogaSBKZWTFuicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdXeWN6ecWbxIcnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnT2JlY25lIHBvxYJvxbxlbmllJyxcbiAgICBkZWxldGU6ICdVc3XFhCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICdDenkgbmEgcGV3bm8gY2hjZXN6IHd5Y3p5xZtjacSHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWE/JyxcbiAgICBkZXBhcnR1cmU6ICdPZGphemQnLFxuICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnV3Byb3dhZMW6IHN3w7NqIHB1bmt0IHBvY3rEhXRrb3d5LicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnV3Byb3dhZMW6IHN3w7NqIGNlbCcsXG4gICAgZmF2b3VyaXRlOiAnVWx1YmlvbmUnLFxuICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdQcnp5c3rFgmEgdHJhc2EnLFxuICAgIG9yaWdpbjogJ1BvY3rEhXRlaycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgb3dubG9jYXRpb25zOiAnV8WCYXNuZSBtaWVqc2NhJyxcbiAgICBsb2FkaW5nOiAnxYFhZG93YW5pZeKApicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICBwbGF0Zm9ybTogJ1Blcm9uJyxcbiAgICByYWlsOiAnUG9jacSFZycsXG4gICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICBzZWFyY2g6ICdTenVrYWonLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTenVrYWogcG8gYWRyZXNpZSBsdWIgbmF6d2llIG1pZWpzY2EnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N6dWthaicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTenVrYWogY2VsdSwgdHJhc3kgbHViIHByenlzdGFua3UnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IGRvY2Vsb3d5JyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnV3nFm3dpZXRsIHd5bmlraSB3IHPEhXNpZWRuaWVqIGthcmNpZSDigJ5DZWzigJ0nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdCcmFrIGxva2FsaXphY2ppJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdXeXN6dWthaiBwb2N6xIV0ZWssIGtvbmllYyBsdWIgcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgcG9jesSFdGtvd3knLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnV3lrcnlqIGxva2FsaXphY2rEmScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdNaWVqc2NlLCBsb2thbGl6YWNqYSBpIHByenlzdGFuZWsuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXdpZ3VqIHBvIGxpxZtjaWUgdcW8eXdhasSFYyBzdHJ6YcWCZWsgaSB3eWJpZXJhaiBrbGF3aXN6ZW0gRW50ZXIuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ1dwcm93YWTFuiBsb2thbGl6YWNqxJkgaSBuYXdpZ3VqIHBvIGxpxZtjaWUgZ2VzdGFtaSBwcnplc3V3YW5pYS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnUG8gd3licmFuaXUgbG9rYWxpemFjamkgcG9jesSFdGtvd2VqLCBhdXRvbWF0eWN6bmllIHByemVqZHppZXN6IGRvIHBvbGEgbWllanNjYSBkb2NlbG93ZWdvLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnRG9zdMSZcG5hIGplc3Qge3tjb3VudH19IHByb3BvenljamEnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX2Zldyc6ICdEb3N0xJlwbmUgc8SFIHt7Y291bnR9fSBwcm9wb3p5Y2plJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9vdGhlcic6ICdEb3N0xJlwbmUgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqaScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnT2JlY255IHd5YsOzcjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnVWxpY2EnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhY2phJyxcbiAgICBzdG9wOiAnUHJ6eXN0YW5laycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1N6dWthaiBsb3TDs3cgaSBsb3RuaXNrJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3p1a2FqIHRyYXMgYXV0b2J1c293eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTenVrYWogdHJhcyBrb2xlam93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3p1a2FqIHRyYXMgbWV0cmEgaSBwcnp5c3RhbmvDs3cgJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdXeXN6dWtpd2FuaWUgYXV0b2J1c8OzdyBpIHByenlzdGFua8OzdycsXG4gICAgJ3RvZGF5LWF0JzogJ2R6acWbIG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICB0cmFtOiAnVHJhbXdhaicsXG4gICAgdHJhY2s6ICdUb3InLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV3liaWVyeiBtaWVqc2NlIG5hIG1hcGllJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdXeWJpZXJ6IHogd8WCYXNueWNoIG1pZWpzYycsXG4gICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAndmlhLXBvaW50JzogJ1ByemV6IHB1bmt0JyxcbiAgICB3aGVyZTogJ0Rva8SFZD8nLFxuICAgIHBsYWNlOiAnTWllanNjZScsXG4gIH0sXG4gIHN2OiB7XG4gICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICBhcnJpdmFsOiAnQW5sw6RuZGVyJyxcbiAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgIGJpa2VwYXJrOiAnQW5zbHV0bmluZ3NwYXJrZXJpbmcgZsO2ciBjeWtsYXInLFxuICAgIGJ1czogJ0J1c3NpJyxcbiAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgIGNhcnBhcms6ICdJbmZhcnRzcGFya2VyaW5nJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdOdXZhcmFuZGUgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgIGRlcGFydHVyZTogJ0F2Z8OlbmdzdGlkJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICBmZXJyeTogJ0bDpHJqYScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdTa3JpdiBpbiBkaW4gYXZmw6RyZHNwbGF0cycsXG4gICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICByYWlsOiAnVMOlZycsXG4gICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0FuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnR2F0YScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgdHJhY2s6ICdTcMOlcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgcGxhY2U6ICdQbGF0cycsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IG1vYmlsZVN0eWxlcyBmcm9tICcuL01vYmlsZVNlYXJjaC5zY3NzJztcbmltcG9ydCBtb2JpbGVOb1Njcm9sbFN0eWxlcyBmcm9tICcuL01vYmlsZU5vU2Nyb2xsLnNjc3MnO1xuXG5jbGFzcyBBdXRvc3VnZ2VzdFBhdGNoIGV4dGVuZHMgQXV0b3N1Z2dlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLm9uU3VnZ2VzdGlvblRvdWNoTW92ZSA9ICgpID0+IHtcbiAgICAgIHNlbGYuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgc2VsZi5wcmVzc2VkU3VnZ2VzdGlvbiA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBNb2JpbGVTZWFyY2ggPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgY2xvc2VIYW5kbGUsXG4gIGNsZWFySW5wdXQsXG4gIHZhbHVlLFxuICBzdWdnZXN0aW9ucyxcbiAgaW5wdXRQcm9wcyxcbiAgZmV0Y2hGdW5jdGlvbixcbiAgcmVuZGVyU3VnZ2VzdGlvbixcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlLFxuICBhcmlhTGFiZWwsXG4gIGxhYmVsLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgZGlhbG9nSGVhZGVyVGV4dCxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQsXG4gIGNsZWFySW5wdXRCdXR0b25UZXh0LFxuICBmb2N1c0lucHV0LFxuICBjb2xvcixcbiAgaG92ZXJDb2xvcixcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcixcbiAgc2VhcmNoT3BlbixcbiAgZm9udFdlaWdodHMsXG4gIHNob3dTY3JvbGwsXG59KSA9PiB7XG4gIGNvbnN0IHN0eWxlcyA9IHNob3dTY3JvbGwgPyBtb2JpbGVTdHlsZXMgOiBtb2JpbGVOb1Njcm9sbFN0eWxlcztcblxuICBjb25zdCBpbnB1dElkID0gYCR7aWR9LWlucHV0YDtcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lkfS1sYWJlbGA7XG5cbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlSGFuZGxlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGUsIHJlZikgPT4ge1xuICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICBzZXREaWFsb2dPcGVuKHRydWUpO1xuICAgIH0gZWxzZSBpZiAoIXJlZi5zdWdnZXN0aW9uLnByb3BlcnRpZXMuYXJyb3dDbGlja2VkKSB7XG4gICAgICAvLyBTZWxlY3QgaXRlbSBpZiBmaWxsIGlucHV0IGJ1dHRvbiBpcyBub3QgcHJlc3NlZCAoZGlhZ29uYWwgYXJyb3cgaW4gc3VnZ2VzdGlvbiBpdGVtcylcbiAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkKGUsIHJlZik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gICAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gICAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGdldFZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gICAgaWYgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckl0ZW0gPSBpdGVtID0+IHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItc2VhcmNoLWhpc3RvcnknXX0+XG4gICAgICAgICAge2l0ZW0ubGFiZWxJZH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyU3VnZ2VzdGlvbihpdGVtKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJEaWFsb2dNb2RhbCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc0RpYWxvZ09wZW59XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgaGVhZGVyVGV4dD17ZGlhbG9nSGVhZGVyVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e2RpYWxvZ1ByaW1hcnlCdXR0b25UZXh0fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXMoKTtcbiAgICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgaG92ZXJDb2xvcj17aG92ZXJDb2xvcn1cbiAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17Y2xlYXJJbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBjbGVhcklucHV0KCl9XG4gICAgICAgIGFyaWEtbGFiZWw9e2NsZWFySW5wdXRCdXR0b25UZXh0fVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNsb3NlKCl9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBvbkNsb3NlKCl9XG4gICAgICAgICAgYXJpYS1sYWJlbD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIGltZz1cImFycm93XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydyaWdodC1jb2x1bW4nXX0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWxhYmVsJ119IGlkPXtsYWJlbElkfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPEF1dG9zdWdnZXN0UGF0Y2hcbiAgICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e2ZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFZhbHVlfVxuICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17cmVuZGVySXRlbX1cbiAgICAgICAgICAgIC8vIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayBtdXN0IGJlIHNldCB0byB0cnVlLlxuICAgICAgICAgICAgLy8gSWYgc2V0IHRvIGZhbHNlLCBpbnB1dCB3b24ndCBiZSBmb2N1c2VkIHdoZW4gdXNlciBjbGlja3Mgb25cbiAgICAgICAgICAgIC8vIEZpbGwgaW5wdXQgYnV0dG9uIGluIHN1Z2dlc3Rpb24gbGlzdC4gKGRpYWdvbmFsIGFycm93IGluIHN0cmVldCBuYW1lIGl0ZW1zKVxuICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7c3R5bGVzW2lkXSB8fCAnJ30gJHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHMudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsPXthcmlhTGFiZWx9IGlkPXtpZH0gey4uLnB9IC8+XG4gICAgICAgICAgICAgICAge3ZhbHVlICYmIGNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17b25TZWxlY3R9XG4gICAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG4gIC8vIFRoaXMgZG9lcyBub3Qgc2VlbSB0byBkbyBhbnl0aGluZy5cbiAgLy8gV2hlbiBkb2luZyBxdWljayB0ZXN0aW5nIG9uIHRoaXMgaXQgbG9va2VkIGxpa2UgaW5wdXRSZWYuY3VycmVudCBpcyBhbHdheXMgdW5kZWZpbmVkLlxuICBpZiAoZm9jdXNJbnB1dCAmJiBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c2VhcmNoT3Blbn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIG9uQWZ0ZXJDbG9zZT17b25DbG9zZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7Y29sb3J9YCxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7aG92ZXJDb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3JlbmRlckRpYWxvZ01vZGFsKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVTZWFyY2gucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsb3NlSGFuZGxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KS5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGZldGNoRnVuY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nSGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvY3VzSW5wdXQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWFyY2hPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5Nb2JpbGVTZWFyY2guZGVmYXVsdFByb3BzID0ge1xuICB2YWx1ZTogdW5kZWZpbmVkLFxuICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgZGlhbG9nSGVhZGVyVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0OiB1bmRlZmluZWQsXG4gIGZvY3VzSW5wdXQ6IGZhbHNlLFxuICBjb2xvcjogdW5kZWZpbmVkLFxuICBob3ZlckNvbG9yOiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IHVuZGVmaW5lZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1vYmlsZVNlYXJjaDtcbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgeyBEYXRlVGltZSwgU2V0dGluZ3MgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vaGVscGVycy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IE1vYmlsZVNlYXJjaCBmcm9tICcuL2hlbHBlcnMvTW9iaWxlU2VhcmNoJztcbmltcG9ydCB3aXRoU2Nyb2xsTG9jayBmcm9tICcuL2hlbHBlcnMvd2l0aFNjcm9sbExvY2snO1xuXG5TZXR0aW5ncy5kZWZhdWx0TG9jYWxlID0gJ2VuJztcblxuaTE4bmV4dC5pbml0KHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgaW50ZXJwb2xhdGlvbjoge1xuICAgIGVzY2FwZVZhbHVlOiBmYWxzZSwgLy8gbm90IG5lZWRlZCBmb3IgcmVhY3QgYXMgaXQgZXNjYXBlcyBieSBkZWZhdWx0XG4gIH0sXG59KTtcblxuY29uc3QgTG9hZGluZyA9IHByb3BzID0+IChcbiAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snc3Bpbm5lci1sb2FkZXInXX0+XG4gICAgeyhwcm9wcyAmJiBwcm9wcy5jaGlsZHJlbikgfHwgKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0+e2kxOG5leHQudCgnbG9hZGluZycpfTwvc3Bhbj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbkxvYWRpbmcucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG59O1xuXG5Mb2FkaW5nLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbn07XG5cbmNvbnN0IGdldFBsYXRmb3JtID0gYWRkZW5kdW0gPT4ge1xuICBpZiAoIWFkZGVuZHVtIHx8ICFhZGRlbmR1bS5HVEZTLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB7IG1vZGVzLCBwbGF0Zm9ybSB9ID0gYWRkZW5kdW0uR1RGUztcbiAgY29uc3QgdHlwZSA9XG4gICAgbW9kZXMgJiYgbW9kZXNbMF0gPT09ICdSQUlMJyA/IGkxOG5leHQudCgndHJhY2snKSA6IGkxOG5leHQudCgncGxhdGZvcm0nKTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5mdW5jdGlvbiBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKSB7XG4gIGlmIChpdGVtLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tbWFwJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCd1c2Utb3duLXBvc2l0aW9uJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycpXTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgIGxldCBbbmFtZSwgbGFiZWxdID0gZ2V0TmFtZUxhYmVsKGl0ZW0ucHJvcGVydGllcywgdHJ1ZSk7XG4gICAgbGV0IHN1Z2dlc3Rpb25UeXBlO1xuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlcmVudGFsJykgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgndmVoaWNsZXJlbnRhbHN0YXRpb24nKTtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmxhYmVsSWQ7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHN0b3BDb2RlXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnYmlrZXBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnYmlrZXBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdjYXJwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5tb2RlKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChcbiAgICAgICAgaXRlbS5wcm9wZXJ0aWVzLm1vZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXllciA9IGl0ZW0ucHJvcGVydGllcy5sYXllclxuICAgICAgICAucmVwbGFjZSgncm91dGUtJywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyk7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChsYXllcik7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3VnZ2VzdGlvblR5cGUsXG4gICAgICAgIGdldFN0b3BOYW1lKG5hbWUsIHN0b3BDb2RlKSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHN0b3BDb2RlLFxuICAgICAgICBtb2RlLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdGF0aW9uJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb2RlIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBzdG9OYW1lID0gYWRkcmVzcyA/IGdldFN0b3BOYW1lKGFkZHJlc3Muc3BsaXQoJywnKVswXSwgY29kZSkgOiBuYW1lO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgc3RvTmFtZSwgbGFiZWwsIGNvZGUsIHVuZGVmaW5lZCwgcGxhdGZvcm1dO1xuICAgIH1cbiAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCBsYWJlbF07XG4gIH1cbiAgY29uc3QgeyBvcmlnaW4sIGRlc3RpbmF0aW9uIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gIGNvbnN0IHRhaWwxID0gb3JpZ2luLmxvY2FsaXR5ID8gYCwgJHtvcmlnaW4ubG9jYWxpdHl9IGZvb2JhcmAgOiAnJztcbiAgY29uc3QgdGFpbDIgPSBkZXN0aW5hdGlvbi5sb2NhbGl0eSA/IGAsICR7ZGVzdGluYXRpb24ubG9jYWxpdHl9YCA6ICcnO1xuICBjb25zdCBuYW1lMSA9IG9yaWdpbi5uYW1lO1xuICBjb25zdCBuYW1lMiA9IGRlc3RpbmF0aW9uLm5hbWU7XG4gIHJldHVybiBbXG4gICAgaTE4bmV4dC50KCdmdXR1cmUtcm91dGUnKSxcbiAgICBgJHtpMThuZXh0LnQoJ29yaWdpbicpfSAke25hbWUxfSR7dGFpbDF9ICR7aTE4bmV4dC50KFxuICAgICAgJ2Rlc3RpbmF0aW9uJyxcbiAgICApfSAke25hbWUyfSR7dGFpbDJ9YCxcbiAgICBpdGVtLnRyYW5zbGF0ZWRUZXh0LFxuICBdO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pIHtcbiAgY29uc3QgdGltZSA9IERhdGVUaW1lLmZyb21TZWNvbmRzKE51bWJlcihpdGVtLnByb3BlcnRpZXMudGltZSkpO1xuICBjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gaTE4bmV4dC50KCdhcnJpdmFsJylcbiAgICA6IGkxOG5leHQudCgnZGVwYXJ0dXJlJyk7XG4gIGlmICh0aW1lLmhhc1NhbWUobm93LCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5oYXNTYW1lKG5vdy5wbHVzKHsgZGF5czogMSB9KSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9tb3Jyb3ctYXQnKX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdjY2MgZC5MLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke3RpbWUudG9Gb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cblxuY29uc3QgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbn07XG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBPcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBTdGF0aW9ucywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGF1dG9Gb2N1cz17ZmFsc2V9IC8vIGRlZmluZXMgdGhhdCBzaG91bGQgdGhpcyBmaWVsZCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQgd2hlbiBwYWdlIGlzIGxvYWRlZC5cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKi9cbmNsYXNzIERUQXV0b3N1Z2dlc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIFVSTF9QRUxJQVM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGNsZWFyRnV0dXJlUm91dGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0aW1lWm9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdW5sb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZlBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBtb2RlSWNvbkNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuZnVuYyksXG4gICAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaWNvbjogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiAnJyxcbiAgICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gICAgZmlsdGVyUmVzdWx0czogdW5kZWZpbmVkLFxuICAgIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgICBsYW5nOiAnZmknLFxuICAgIHN0b3JlUmVmOiB1bmRlZmluZWQsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gICAgZm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiB1bmRlZmluZWQsXG4gICAgc291cmNlczogW10sXG4gICAgdGFyZ2V0czogdW5kZWZpbmVkLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgICBnZW9jb2RpbmdTaXplOiB1bmRlZmluZWQsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogJyMwMDc0YmUnLFxuICAgIHRpbWVab25lOiAnRXVyb3BlL0hlbHNpbmtpJyxcbiAgICBwYXRoT3B0czoge1xuICAgICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gICAgfSxcbiAgICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICAgIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBtb2RlSWNvbkNvbG9yczoge1xuICAgICAgJ21vZGUtYnVzJzogJyMwMDdhYzknLFxuICAgICAgJ21vZGUtcmFpbCc6ICcjOGM0Nzk5JyxcbiAgICAgICdtb2RlLXRyYW0nOiAnIzAwODE1MScsXG4gICAgICAnbW9kZS1tZXRybyc6ICcjZWQ4YzAwJyxcbiAgICAgICdtb2RlLWZlcnJ5JzogJyMwMDdBOTcnLFxuICAgICAgJ21vZGUtY2l0eWJpa2UnOiAnI2YyYjYyZCcsXG4gICAgICAnbW9kZS1mdW5pY3VsYXInOiAnI2ZmMDBmZicsXG4gICAgfSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIHJlZlBvaW50OiB7fSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBTZXR0aW5ncy5kZWZhdWx0Wm9uZSA9IHByb3BzLnRpbWVab25lO1xuICAgIFNldHRpbmdzLmRlZmF1bHRMb2NhbGUgPSBwcm9wcy5sYW5nO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHNvdXJjZXM6IHByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgdHlwaW5nVGltZXI6IG51bGwsXG4gICAgICB0eXBpbmc6IGZhbHNlLFxuICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25JbmRleDogMCxcbiAgICAgIGNsZWFuRXhlY3V0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsWTogMCxcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgIGkxOG5leHQuYWRkUmVzb3VyY2VCdW5kbGUobGFuZywgJ3RyYW5zbGF0aW9uJywgdHJhbnNsYXRpb25zW2xhbmddKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERULTQwNzQ6IFdoZW4gYSB1c2VyJ3MgbG9jYXRpb24gaXMgdXBkYXRlZCBEVEF1dG9zdWdnZXN0IHdvdWxkIHJlLXJlbmRlciBjYXVzaW5nIHN1Z2dlc3Rpb24gbGlzdCB0byByZXNldC5cbiAgLy8gVGhpcyB3aWxsIHByZXZlbnQgaXQuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAhaXNFcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8ICFpc0VxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgLy8gd2FpdCB1bnRpbCBhZGRyZXNzIGlzIHNldCBvciBnZW9sb2NhdGlvbmluZyBmYWlsc1xuICAgIGlmIChuZXh0UHJvcHMudmFsdWUgIT09IHRoaXMuc3RhdGUudmFsdWUgJiYgIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBuZXh0UHJvcHMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSA9IChldmVudCwgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLmZJbnB1dCB8fCBuZXdWYWx1ZSB8fCAnJyxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIFJlbW92ZSBmaWxsZWQgaW5wdXQgdmFsdWUgc28gaXQgd29udCBiZSByZXVzZWQgdW5uZWNlc3NhcnlcbiAgICB0aGlzLmZJbnB1dCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlIHx8ICcnIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCAhPT0gJ2VudGVyJyB8fCB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyB0ZXN0IGFib3ZlIGRyb3BzIHVubmVjZXNzYXJ5IHVwZGF0ZVxuICAgICAgLy8gd2hlbiB1c2VyIGhpdHMgZW50ZXIgYnV0IHNlYXJjaCBpcyB1bmZpbmlzaGVkXG4gICAgICBpZiAodGhpcy5zdGF0ZS50eXBpbmdUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS50eXBpbmdUaW1lcik7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSAndHlwZScpIHtcbiAgICAgICAgLy8gYWZ0ZXIgdGltZW91dCBydW5zLCBhcmlhIGFsZXJ0IHdpbGwgYW5ub3VuY2UgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHlwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZ1RpbWVyID0gdGltZXI7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgIH1cbiAgfTtcblxuICBvblNlbGVjdGVkID0gKGUsIHJlZikgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgb3duUGxhY2VzOiB0cnVlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJyB8fFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmRleDogcmVmLnN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSB0cnVlOyAvLyBzZWxlY3Rpb24gZG9uZSwgZG8gbm90IGxldCB1cGNvbWluZyBrZXlib2FyZCBldmVudHMgY29uZnVzZSB0aGUgZmxvd1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiByZWYuc3VnZ2VzdGlvblZhbHVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cyhyZWYuc3VnZ2VzdGlvbiwgcmVmLnN1Z2dlc3Rpb25JbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QocmVmLnN1Z2dlc3Rpb24sIHRoaXMucHJvcHMuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgcHJldlN0YXRlID0+ICh7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcHJldlN0YXRlLnZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSwgLy8gc2VhcmNoIG1heSBmaW5pc2ggZHVyaW5nIHN0YXRlIGNoYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNoZWNrUGVuZGluZ1NlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbGlkXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIGFjY2VwdCBhZnRlciBhbGwgb25nb2luZyBzZWFyY2hlcyBoYXZlIGZpbmlzaGVkXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gJiYgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gZmluaXNoIHRoZSBzZWxlY3Rpb24gYnkgcGlja2luZyBmaXJzdCA9IGJlc3QgbWF0Y2ggb3Igd2l0aCAnRnV0dXJlUm91dGUnIGJ5IHN1Z2dlc3Rpb25JbmRleFxuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdO1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ2JhY2snKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1t0aGlzLnN0YXRlLnN1Z2dlc3Rpb25JbmRleF0sXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgZmV0Y2hGdW5jdGlvbiA9ICh7IHZhbHVlLCBjbGVhbkV4ZWN1dGVkIH0pID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZShcbiAgICAgIHsgdmFsaWQ6IGZhbHNlLCBjbGVhbkV4ZWN1dGVkOiAhY2xlYW5FeGVjdXRlZCA/IGZhbHNlIDogY2xlYW5FeGVjdXRlZCB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICAgICAgLy8gZG8gbm90IGxldCBjb21wb25lbnQgY2FzdCB1bm5lY2Vzc2FyeSByZXF1ZXN0c1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHVzZUFsbCA9IGlzRW1wdHkodGFyZ2V0cyk7XG4gICAgICAgIGNvbnN0IGlzTG9jYXRpb25TZWFyY2ggPVxuICAgICAgICAgIGlzRW1wdHkodGFyZ2V0cykgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJyk7XG4gICAgICAgIGxldCBuZXdUYXJnZXRzO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5vd25QbGFjZXMpIHtcbiAgICAgICAgICBuZXdUYXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICAgICAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VBbGwpIHtcbiAgICAgICAgICBuZXdUYXJnZXRzID0gWy4uLnRhcmdldHNdO1xuICAgICAgICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJlxuICAgICAgICAgICAgKGlzRW1wdHkodGhpcy5wcm9wcy5zb3VyY2VzKSB8fFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLnNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICAgICAgY29uc3Qgc291cmNlcyA9XG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAgICAgcyA9PT0gJ0Zhdm91cml0ZScgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5zdGF0ZS5vd25QbGFjZXMgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgICAgICBuZXdUYXJnZXRzLFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlLFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dCxcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlclJlc3VsdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5nZW9jb2RpbmdTaXplLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlucHV0OiB2YWx1ZSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gWFhYIHRyYW5zbGF0ZXMgY3VycmVudCBsb2NhdGlvblxuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSAoc2VhcmNoUmVzdWx0LnJlc3VsdHMgfHwgW10pXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlICE9PSAnRnV0dXJlUm91dGUnIHx8XG4gICAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID5cbiAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZS5ub3coKS50b1VuaXhJbnRlZ2VyKCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5wcm9wZXJ0aWVzLmxhYmVsSWQgPSBpMThuZXh0LnQoXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlIHx8XG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucHJvcHMucGF0aE9wdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWZQb2ludCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBjbGVhcklucHV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycsIGNsZWFuRXhlY3V0ZWQ6IHRydWUgfSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsZWFyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xlYXIodGhpcy5wcm9wcy5pZCk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICBpbnB1dENsaWNrZWQgPSBpbnB1dFZhbHVlID0+IHtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLnByb3BzLmxvY2soKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICAvLyByZXNldCBhdCBzdGFydCwganVzdCBpbiBjYXNlIHdlIG1pc3NlZCBzb21ldGhpbmdcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgfTtcblxuICAgICAgLy8gRFQtMzI2MzogYWRkZWQgc3RhdGVLZXlEb3duXG4gICAgICBjb25zdCBzdGF0ZUtleURvd24gPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBEVC0zMjYzOiBhZGRlZCBpZi1lbHNlIHN0YXRlbWVudFxuICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWUgPT09ICdvYmplY3QnIHx8ICFpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZUtleURvd24sICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmICF0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlbmRlck1vYmlsZVNlYXJjaDogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3RvcmVJbnB1dFJlZmVyZW5jZSA9IGF1dG9zdWdnZXN0ID0+IHtcbiAgICBpZiAoYXV0b3N1Z2dlc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuaW5wdXQgPSBhdXRvc3VnZ2VzdC5pbnB1dDtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0b3JlUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc3RvcmVSZWYoYXV0b3N1Z2dlc3QuaW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBGaWxsIGlucHV0IHdoZW4gdXNlciBjbGlja3MgZmlsbCBpbnB1dCBidXR0b24gaW4gc3RyZWV0IHN1Z2dlc3Rpb24gaXRlbVxuICBmaWxsSW5wdXQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgdGhpcy5mSW5wdXQgPSBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSxcbiAgICAgIGNoZWNrUGVuZGluZ1NlbGVjdGlvbjogbmV3VmFsdWUsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSB9KTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW0gPVxuICAgICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBpdGVtO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1Z2dlc3Rpb25JdGVtXG4gICAgICAgIGl0ZW09e25ld0l0ZW19XG4gICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgIGxvYWRpbmc9eyF0aGlzLnN0YXRlLnZhbGlkfVxuICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgYXJpYUZhdm91cml0ZVN0cmluZz17aTE4bmV4dC50KCdmYXZvdXJpdGUnKX1cbiAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgZmlsbElucHV0PXt0aGlzLmZpbGxJbnB1dH1cbiAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjbG9zZU1vYmlsZVNlYXJjaCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnVubG9jaygpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRoaXMuc3RhdGUuc2Nyb2xsWSk7XG4gICAgICAgIHRoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICB9O1xuXG4gIGtleURvd24gPSBldmVudCA9PiB7XG4gICAgaWYgKHRoaXMuc2VsZWN0aW9uRG9uZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5O1xuICAgIGlmIChrZXlDb2RlID09PSAnU2hpZnQnKSB7XG4gICAgICAvLyBUaGlzIGVuYWJsZXMgc2hpZnQgKyB0YWIgdG8gYmUgdXNlZFxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgIC8vIFVzaW5nIG9uQmx1ciBtYWtlcyAnRXNjYXBlJyBhY3Qgc2ltaWxhcmx5IHRvIHVzaW5nICdUYWInXG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zdGF0ZS5lZGl0aW5nKSB7XG4gICAgICBpZiAoa2V5Q29kZSA9PT0gJ0VudGVyJyAmJiB0aGlzLnN0YXRlLnZhbHVlICE9PSAnJykge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgcGVuZGluZ1NlbGVjdGlvbjogdHJ1ZSB9LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5pbnB1dENsaWNrZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICAoa2V5Q29kZSA9PT0gJ0VudGVyJyB8fCBrZXlDb2RlID09PSAnQXJyb3dEb3duJykgJiZcbiAgICAgIHRoaXMuc3RhdGUudmFsdWUgPT09ICcnXG4gICAgKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5Q29kZSA9PT0gJ0Fycm93RG93bicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSxcbiAgICAgIH07XG4gICAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IGVkaXRpbmc6IHRydWUgfSk7XG4gICAgICB0aGlzLmNsZWFyTG9jYXRpb25UZXh0KCk7XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdUYWInKSB7XG4gICAgICB0aGlzLm9uQmx1cigpO1xuICAgIH1cbiAgfTtcblxuICBzdWdnZXN0aW9uQXNBcmlhQ29udGVudCA9ICgpID0+IHtcbiAgICBsZXQgbGFiZWwgPSBbXTtcbiAgICBjb25zdCBmaXJzdFN1Z2dlc3Rpb24gPSB0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdO1xuICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24pIHtcbiAgICAgIGlmIChmaXJzdFN1Z2dlc3Rpb24udHlwZSAmJiBmaXJzdFN1Z2dlc3Rpb24udHlwZS5pbmNsdWRlcygnRmF2b3VyaXRlJykpIHtcbiAgICAgICAgbGFiZWwucHVzaChpMThuZXh0LnQoJ2Zhdm91cml0ZScpKTtcbiAgICAgIH1cbiAgICAgIGxhYmVsID0gbGFiZWwuY29uY2F0KGdldFN1Z2dlc3Rpb25Db250ZW50KHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbMF0pKTtcbiAgICB9XG4gICAgcmV0dXJuIFsuLi5uZXcgU2V0KGxhYmVsKV0uam9pbignIC0gJyk7XG4gIH07XG5cbiAgY2xlYXJPbGRTZWFyY2hlcyA9ICgpID0+IHtcbiAgICBjb25zdCB7IGNvbnRleHQsIGNsZWFyT2xkU2VhcmNoZXMsIGNsZWFyRnV0dXJlUm91dGVzIH0gPVxuICAgICAgdGhpcy5wcm9wcy5zZWFyY2hDb250ZXh0O1xuICAgIGlmIChjb250ZXh0ICYmIGNsZWFyT2xkU2VhcmNoZXMpIHtcbiAgICAgIGNsZWFyT2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBpZiAoY2xlYXJGdXR1cmVSb3V0ZXMpIHtcbiAgICAgICAgY2xlYXJGdXR1cmVSb3V0ZXMoY29udGV4dCk7XG4gICAgICB9XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQgPSAoKSA9PlxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4nIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ2Rlc3RpbmF0aW9uJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICd2aWEtcG9pbnQnIHx8XG4gICAgdGhpcy5wcm9wcy5pZCA9PT0gJ29yaWdpbi1zdG9wLW5lYXIteW91JztcblxuICBjbGVhckxvY2F0aW9uVGV4dCA9ICgpID0+IHtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBbXG4gICAgICAnVmFsaXR0dSBzaWphaW50aScsXG4gICAgICAnTnlreWluZW4gc2lqYWludGlzaScsXG4gICAgICAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgICAnU2VsZWN0ZWQgbG9jYXRpb24nLFxuICAgICAgJ1ZhbGQgcG9zaXRpb24nLFxuICAgICAgJ0FudsOkbmQgbWluIHBvc2l0aW9uJyxcbiAgICAgICdNaW4gcG9zaXRpb24nLFxuICAgICAgJ0vDpHl0w6QgbnlreWlzdMOkIHNpamFpbnRpYScsXG4gICAgICAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ1lvdXIgY3VycmVudCBsb2NhdGlvbicsXG4gICAgICAnV3licmFuZSBtaWVqc2NlJyxcbiAgICBdO1xuICAgIGlmIChwb3NpdGlvbnMuaW5jbHVkZXModGhpcy5zdGF0ZS52YWx1ZSkpIHtcbiAgICAgIHRoaXMuY2xlYXJJbnB1dCgpO1xuICAgIH1cbiAgfTtcblxuICBvbkZvY3VzID0gKCkgPT4ge1xuICAgIGNvbnN0IHNjcm9sbFkgPSB3aW5kb3cucGFnZVlPZmZzZXQ7XG4gICAgcmV0dXJuIHRoaXMuc2V0U3RhdGUoeyBzY3JvbGxZIH0pO1xuICB9O1xuXG4gIHJlbmRlcigpIHtcbiAgICBpZiAoaTE4bmV4dC5sYW5ndWFnZSAhPT0gdGhpcy5wcm9wcy5sYW5nKSB7XG4gICAgICBpMThuZXh0LmNoYW5nZUxhbmd1YWdlKHRoaXMucHJvcHMubGFuZyk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmFsdWUsIHN1Z2dlc3Rpb25zLCByZW5kZXJNb2JpbGVTZWFyY2gsIGNsZWFuRXhlY3V0ZWQgfSA9XG4gICAgICB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGlucHV0UHJvcHMgPSB7XG4gICAgICBwbGFjZWhvbGRlcjogdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgPyB0aGlzLnByb3BzLnRyYW5zbGF0ZWRQbGFjZWhvbGRlclxuICAgICAgICA6IGkxOG5leHQudCh0aGlzLnByb3BzLnBsYWNlaG9sZGVyKSxcbiAgICAgIHZhbHVlLFxuICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsXG4gICAgICBvbkJsdXI6IHRoaXMub25CbHVyLFxuICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgYCR7c3R5bGVzLmlucHV0fSAke1xuICAgICAgICAgIHRoaXMucHJvcHMuaXNNb2JpbGUgJiYgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlID8gc3R5bGVzLnRoaW4gOiAnJ1xuICAgICAgICB9ICR7c3R5bGVzW3RoaXMucHJvcHMuaWRdIHx8ICcnfSAke1xuICAgICAgICAgIHRoaXMuc3RhdGUudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICB9ICR7dGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZX1gLFxuICAgICAgKSxcbiAgICAgIG9uS2V5RG93bjogdGhpcy5rZXlEb3duLCAvLyBEVC0zMjYzXG4gICAgICByZXF1aXJlZDogdGhpcy5wcm9wcy5yZXF1aXJlZCxcbiAgICB9O1xuICAgIGNvbnN0IGFyaWFCYXJJZCA9IHRoaXMucHJvcHMuaWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpO1xuICAgIGxldCBTZWFyY2hCYXJJZCA9IHRoaXMucHJvcHMuYXJpYUxhYmVsIHx8IGkxOG5leHQudChhcmlhQmFySWQpO1xuICAgIFNlYXJjaEJhcklkID0gU2VhcmNoQmFySWQucmVwbGFjZSgnc2VhcmNoZmllbGQtJywgJycpLmNvbmNhdCgnLicpOyAvLyBGdWxsIHN0b3AgbWFrZXMgc2NyZWVuIHJlYWRlciBzcGVlY2ggY2xlYXJlci5cbiAgICBjb25zdCBhcmlhUmVxdWlyZWRUZXh0ID0gdGhpcy5wcm9wcy5yZXF1aXJlZFxuICAgICAgPyBgJHtpMThuZXh0LnQoJ3JlcXVpcmVkJyl9LmBcbiAgICAgIDogJyc7XG4gICAgY29uc3QgYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zID0gdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgPyBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJylcbiAgICAgIDogaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnKTtcbiAgICBjb25zdCBtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0ID1cbiAgICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4nXG4gICAgICAgID8gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbicpXG4gICAgICAgIDogJyc7XG4gICAgY29uc3QgYXJpYUxhYmVsVGV4dCA9IGFyaWFMYWJlbEluc3RydWN0aW9uc1xuICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAuY29uY2F0KG1vdmluZ1RvRGVzdGluYXRpb25GaWVsZFRleHQpO1xuXG4gICAgY29uc3QgYXJpYVN1Z2dlc3Rpb25MZW4gPSBpMThuZXh0LnQoJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nLCB7XG4gICAgICBjb3VudDogc3VnZ2VzdGlvbnMubGVuZ3RoLFxuICAgIH0pO1xuXG4gICAgY29uc3QgYXJpYUN1cnJlbnRTdWdnZXN0aW9uID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKSB8fCB0aGlzLnByb3BzLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBpMThuZXh0LnQoJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nLCB7XG4gICAgICAgICAgc2VsZWN0aW9uOlxuICAgICAgICAgICAgdGhpcy5zdWdnZXN0aW9uQXNBcmlhQ29udGVudCgpLnRvTG93ZXJDYXNlKCkgfHwgdGhpcy5wcm9wcy52YWx1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gJyc7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8UmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydzci1vbmx5J119IHJvbGU9XCJhbGVydFwiPlxuICAgICAgICAgIHshdGhpcy5zdGF0ZS50eXBpbmcgJiZcbiAgICAgICAgICAgIHRoaXMuc3RhdGUuZWRpdGluZyAmJlxuICAgICAgICAgICAgYCR7YXJpYVN1Z2dlc3Rpb25MZW59ICR7YXJpYUN1cnJlbnRTdWdnZXN0aW9uKCl9YH1cbiAgICAgICAgPC9zcGFuPlxuICAgICAgICB7dGhpcy5wcm9wcy5pc01vYmlsZSAmJiAoXG4gICAgICAgICAgPE1vYmlsZVNlYXJjaFxuICAgICAgICAgICAgc2VhcmNoT3Blbj17cmVuZGVyTW9iaWxlU2VhcmNofVxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgY2xlYXJPbGRTZWFyY2hlcz17dGhpcy5jbGVhck9sZFNlYXJjaGVzfVxuICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICBjbGVhcklucHV0PXt0aGlzLmNsZWFySW5wdXR9XG4gICAgICAgICAgICB2YWx1ZT17dGhpcy5zdGF0ZS52YWx1ZX1cbiAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtbXG4gICAgICAgICAgICAgIC4uLnN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyxcbiAgICAgICAgICAgICAgICBsYWJlbElkOiBpMThuZXh0LnQoJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JyksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdfVxuICAgICAgICAgICAgaW5wdXRQcm9wcz17e1xuICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogdGhpcy5pc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCgpXG4gICAgICAgICAgICAgICAgPyBpMThuZXh0LnQoJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnKVxuICAgICAgICAgICAgICAgIDogaW5wdXRQcm9wcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgICBmZXRjaEZ1bmN0aW9uPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9e3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkfVxuICAgICAgICAgICAgZ2V0U3VnZ2VzdGlvblZhbHVlPXtnZXRTdWdnZXN0aW9uVmFsdWV9XG4gICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICBjbG9zZUhhbmRsZT17dGhpcy5jbG9zZU1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFyaWFMYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoYXJpYUN1cnJlbnRTdWdnZXN0aW9uKCkpfVxuICAgICAgICAgICAgbGFiZWw9e1xuICAgICAgICAgICAgICB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgPyB0aGlzLnByb3BzLm1vYmlsZUxhYmVsXG4gICAgICAgICAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5pZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICBkaWFsb2dIZWFkZXJUZXh0PXtpMThuZXh0LnQoJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJyl9XG4gICAgICAgICAgICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dD17aTE4bmV4dC50KCdkZWxldGUnKX1cbiAgICAgICAgICAgIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2FuY2VsJyl9XG4gICAgICAgICAgICBjbGVhcklucHV0QnV0dG9uVGV4dD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgICAgICAgIGZvY3VzSW5wdXQ9e2NsZWFuRXhlY3V0ZWR9XG4gICAgICAgICAgICBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn1cbiAgICAgICAgICAgIGhvdmVyQ29sb3I9e3RoaXMucHJvcHMuaG92ZXJDb2xvcn1cbiAgICAgICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIHshcmVuZGVyTW9iaWxlU2VhcmNoICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1pbnB1dC1jb250YWluZXInXSxcbiAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICAgICAnLS1jb2xvcic6IGAke3RoaXMucHJvcHMuY29sb3J9YCxcbiAgICAgICAgICAgICAgJy0taG92ZXItY29sb3InOiBgJHt0aGlzLnByb3BzLmhvdmVyQ29sb3J9YCxcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge3RoaXMucHJvcHMuaWNvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1tgYXV0b3N1Z2dlc3QtaW5wdXQtaWNvbmBdLFxuICAgICAgICAgICAgICAgICAgc3R5bGVzW3RoaXMucHJvcHMuaWRdLFxuICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZSAmJlxuICAgICAgICAgICAgICAgICAgICBgJHt0aGlzLnByb3BzLmlucHV0Q2xhc3NOYW1lfS1pbnB1dC1pY29uYCxcbiAgICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXthcmlhUmVxdWlyZWRUZXh0XG4gICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgIC5jb25jYXQoaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnKSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9e2Ake3RoaXMucHJvcHMuaWNvbn1gfSAvPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8QXV0b3N1Z2dlc3RcbiAgICAgICAgICAgICAgYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnM9e3RoaXMuc3RhdGUuZWRpdGluZ31cbiAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zPXtzdWdnZXN0aW9uc31cbiAgICAgICAgICAgICAgb25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkPXt0aGlzLmZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZD17dGhpcy5vblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWR9XG4gICAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgICByZW5kZXJTdWdnZXN0aW9uPXt0aGlzLnJlbmRlckl0ZW19XG4gICAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgICAuLi5pbnB1dFByb3BzLFxuICAgICAgICAgICAgICAgIG9uRm9jdXM6IHRoaXMub25Gb2N1cyxcbiAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICAgIHNob3VsZFJlbmRlclN1Z2dlc3Rpb25zPXsoKSA9PiB0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGhpZ2hsaWdodEZpcnN0U3VnZ2VzdGlvbj17IXRoaXMuc3RhdGUub3duUGxhY2VzfVxuICAgICAgICAgICAgICB0aGVtZT17c3R5bGVzfVxuICAgICAgICAgICAgICByZW5kZXJJbnB1dENvbXBvbmVudD17cCA9PiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSBodG1sRm9yPXt0aGlzLnByb3BzLmlkfT5cbiAgICAgICAgICAgICAgICAgICAge2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYUN1cnJlbnRTdWdnZXN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFSZXF1aXJlZFRleHQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChTZWFyY2hCYXJJZClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFyaWFMYWJlbFRleHQpfVxuICAgICAgICAgICAgICAgICAgICBpZD17dGhpcy5wcm9wcy5pZH1cbiAgICAgICAgICAgICAgICAgICAgb25DbGljaz17dGhpcy5pbnB1dENsaWNrZWR9XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17dGhpcy5rZXlEb3dufVxuICAgICAgICAgICAgICAgICAgICB7Li4ucH1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICB7dGhpcy5zdGF0ZS52YWx1ZSAmJiB0aGlzLmNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkPXt0aGlzLm9uU2VsZWN0ZWR9XG4gICAgICAgICAgICAgIHJlZj17dGhpcy5zdG9yZUlucHV0UmVmZXJlbmNlfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5jb25zdCBEVEF1dG9zdWdnZXN0V2l0aFNjcm9sbExvY2sgPSB3aXRoU2Nyb2xsTG9jayhEVEF1dG9zdWdnZXN0KTtcblxuZXhwb3J0IGRlZmF1bHQgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrO1xuIiwiaW1wb3J0IHsgZ2V0TmFtZUxhYmVsIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwnO1xuLyoqXG4gKiBSZXR1cm5zIGxhYmVsIGZvciBwcm9wZXJ0aWVzXG4gKlxuICogQG5hbWUgZ2V0TGFiZWxcbiAqIEBwYXJhbSB7Kn0gcHJvcGVydGllcyBvYmplY3RcbiAqIEByZXR1cm5zIHtCb29sZWFufSB0cnVlL2ZhbHNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExhYmVsKHByb3BlcnRpZXMpIHtcbiAgY29uc3QgcGFydHMgPSBnZXROYW1lTGFiZWwocHJvcGVydGllcywgdHJ1ZSk7XG4gIHN3aXRjaCAocHJvcGVydGllcy5sYXllcikge1xuICAgIGNhc2UgJ3NlbGVjdEZyb21NYXAnOlxuICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgY2FzZSAnb3duTG9jYXRpb25zJzpcbiAgICBjYXNlICdiYWNrJzpcbiAgICAgIHJldHVybiBwYXJ0c1sxXSB8fCBwYXJ0c1swXTtcbiAgICBjYXNlICdmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbic6XG4gICAgY2FzZSAnZmF2b3VyaXRlUGxhY2UnOlxuICAgICAgcmV0dXJuIHBhcnRzWzBdO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gcGFydHMubGVuZ3RoID4gMSAmJiBwYXJ0c1sxXSAhPT0gJydcbiAgICAgICAgPyBwYXJ0cy5qb2luKCcsICcpXG4gICAgICAgIDogcGFydHNbMV0gfHwgcGFydHNbMF07XG4gIH1cbn1cbiIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaG9va3MgZnJvbSAnQGhzbC1maS9ob29rcyc7XG5cbmNvbnN0IHdpdGhTY3JvbGxMb2NrID0gQ29tcG9uZW50ID0+IHtcbiAgcmV0dXJuIHByb3BzID0+IHtcbiAgICBjb25zdCB7IGxvY2ssIHVubG9jayB9ID0gaG9va3MudXNlU2Nyb2xsTG9jaygpO1xuXG4gICAgcmV0dXJuIDxDb21wb25lbnQgbG9jaz17bG9ja30gdW5sb2NrPXt1bmxvY2t9IHsuLi5wcm9wc30gLz47XG4gIH07XG59O1xuXG5leHBvcnQgZGVmYXVsdCB3aXRoU2Nyb2xsTG9jaztcbiJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJ0cnVFcSIsInZhbDEiLCJ2YWwyIiwiZ3Rmc1N0b3BMYXllcnMiLCJ2ZWhpY2xlUmVudGFsTGF5ZXJzIiwibGFiZWxJZFRvR2lkIiwiaWQiLCJwYXJ0cyIsInNwbGl0IiwibGVuZ3RoIiwiaXNEdXBsaWNhdGUiLCJpdGVtMSIsIml0ZW0yIiwicHJvcHMxIiwicHJvcGVydGllcyIsInByb3BzMiIsInR5cGUiLCJvMSIsIm9yaWdpbiIsImQxIiwiZGVzdGluYXRpb24iLCJvMiIsImQyIiwibmFtZSIsImxvY2FsYWRtaW4iLCJpbmNsdWRlcyIsImxheWVyIiwiZ2lkIiwibGFiZWxJZCIsImd0ZnNJZCIsInAxIiwiZ2VvbWV0cnkiLCJjb29yZGluYXRlcyIsInVuZGVmaW5lZCIsInAyIiwiTWF0aCIsImFicyIsImxhYmVsIiwiYWRkcmVzcyIsIm5vcm1hbGl6ZSIsInN0ciIsImlzU3RyaW5nIiwidG9Mb3dlckNhc2UiLCJMYXllclR5cGUiLCJpc1N0b3AiLCJnZXRMYXllclJhbmsiLCJzb3VyY2UiLCJpbmRleE9mIiwic29ydFNlYXJjaFJlc3VsdHMiLCJsaW5lUmVnZXhwIiwicmVzdWx0cyIsInRlcm0iLCJBcnJheSIsImlzQXJyYXkiLCJpc0xpbmVJZGVudGlmaWVyIiwidGVzdCIsIm5vcm1hbGl6ZWRUZXJtIiwiaXNMaW5lU2VhcmNoIiwib3JkZXJlZFJlc3VsdHMiLCJvcmRlckJ5IiwicmVzdWx0Iiwic2hvcnROYW1lIiwiY29uZmlkZW5jZSIsIm1hdGNoIiwicmVzdWx0UHJvcGVydGllcyIsIm1hcCIsImZpbHRlciIsIm5vcm1hbGl6ZWRWYWx1ZSIsInJlZHVjZSIsInByZXZpb3VzIiwiY3VycmVudCIsInVuaXFXaXRoIiwiZ2V0U3RvcE5hbWUiLCJzdG9wQ29kZSIsImxhc3RJbmRleE9mIiwic3Vic3RyaW5nIiwiZmlsdGVyTWF0Y2hpbmdUb0lucHV0IiwibGlzdCIsIklucHV0IiwiZmllbGRzIiwiaW5wdXQiLCJ0cmltIiwibXVsdGlXb3JkIiwiaXRlbSIsImZvckVhY2giLCJwTmFtZSIsImdldCIsInNwbGljZSIsImpvaW4iLCJjb25jYXQiLCJyZXBsYWNlIiwic2VyaWFsaXplIiwib2JqIiwicHJlZml4Iiwia2V5cyIsInAiLCJrIiwidiIsImVuY29kZVVSSUNvbXBvbmVudCIsImF4aW9zIiwicmVxdWlyZSIsImRlZmF1bHQiLCJnZXRKc29uIiwidXJsIiwicGFyYW1zIiwiZW5jb2RlVVJJIiwic2VhcmNoIiwidGltZW91dCIsIm1ldGhvZCIsImhlYWRlcnMiLCJBY2NlcHQiLCJ0aGVuIiwicmVzIiwiZGF0YSIsImdldEdlb2NvZGluZ1Jlc3VsdHMiLCJzZWFyY2hTdHJpbmciLCJzZWFyY2hQYXJhbXMiLCJsYW5nIiwiZm9jdXNQb2ludCIsInNvdXJjZXMiLCJwZWxpYXNVcmwiLCJtaW5pbWFsUmVnZXhwIiwiZ2VvY29kaW5nTGF5ZXJzIiwidGV4dCIsIlByb21pc2UiLCJyZXNvbHZlIiwiUEVMSUFTX1VSTCIsIm9wdHMiLCJfb2JqZWN0U3ByZWFkIiwibGF5ZXJzIiwidG9TdHJpbmciLCJmZWF0dXJlcyIsImdldFN0b3BzRnJvbUdlb2NvZGluZyIsInN0b3BzIiwiVVJMX1BFTElBU19QTEFDRSIsImdpZHMiLCJzdG9wU3RhdGlvbk1hcCIsInN0b3AiLCJjb2RlIiwic3RvcE9yU3RhdGlvbiIsImlkcyIsInNsaWNlIiwiYWRkZW5kdW0iLCJsYXN0VXBkYXRlZCIsImZhdm91cml0ZUlkIiwiZmlsdGVyT2xkU2VhcmNoZXMiLCJvbGRTZWFyY2hlcyIsImRyb3BMYXllcnMiLCJtYXRjaGluZ09sZFNlYXJjaGVzIiwidGFrZSIsIm5ld0l0ZW0iLCJ0aW1ldGFibGVDbGlja2VkIiwiYXJyb3dDbGlja2VkIiwicm91dGVMYXllcnMiLCJsb2NhdGlvbkxheWVycyIsInBhcmtpbmdMYXllcnMiLCJzdG9wTGF5ZXJzIiwiZGVib3VuY2VkU2VhcmNoIiwiZGVib3VuY2UiLCJ0YXJnZXRzIiwidHJhbnNwb3J0TW9kZSIsInNlYXJjaENvbnRleHQiLCJmaWx0ZXJSZXN1bHRzIiwiZ2VvY29kaW5nU2l6ZSIsImNhbGxiYWNrIiwicGF0aE9wdHMiLCJyZWZQb2ludCIsImdldFBvc2l0aW9ucyIsImdldEZhdm91cml0ZUxvY2F0aW9ucyIsImdldE9sZFNlYXJjaGVzIiwiZ2V0RmF2b3VyaXRlU3RvcHMiLCJwYXJraW5nQXJlYVNvdXJjZXMiLCJnZXRMYW5ndWFnZSIsImdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnkiLCJnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSIsImdldEZhdm91cml0ZVJvdXRlcyIsImdldFJvdXRlc1F1ZXJ5IiwiY29udGV4dCIsImlzUGVsaWFzTG9jYXRpb25Bd2FyZSIsImxvY2F0aW9uQXdhcmUiLCJVUkxfUEVMSUFTIiwiZmVlZElEcyIsImdlb2NvZGluZ1NlYXJjaFBhcmFtcyIsImdlb2NvZGluZ1NvdXJjZXMiLCJnZXRGdXR1cmVSb3V0ZXMiLCJjaXR5QmlrZU5ldHdvcmtzIiwiYWxsVGFyZ2V0cyIsImFsbFNvdXJjZXMiLCJwb3NpdGlvbiIsInNlYXJjaENvbXBvbmVudHMiLCJzZWFyY2hlcyIsImxhbmd1YWdlIiwibGF0IiwibG9uIiwidG9GaXhlZCIsIm1vZGUiLCJzdGF0dXMiLCJwdXNoIiwiZ2V0Q3VycmVudFBvc2l0aW9uSWZFbXB0eSIsInNlbGVjdFBvc2l0aW9uRm9tTWFwIiwiaXRlbXMiLCJmYXZvdXJpdGVMb2NhdGlvbnMiLCJmYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMiLCJmYXZvdXJpdGVTdG9wcyIsImhhc0Zhdm91cml0ZXMiLCJzZWxlY3RGcm9tT3duTG9jYXRpb25zIiwiZmF2b3VyaXRlcyIsImZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyIsImxvY2F0aW9uSGlzdG9yeSIsInNpemUiLCJmZWVkSWRzIiwiaGlzdG9yeSIsInVzZVN0b3BzIiwidXNlU3RhdGlvbnMiLCJzdG9wc0FuZFN0YXRpb25zIiwiZXZlcnkiLCJzdG9wc1N0YXRpb25zIiwicyIsImZpbHRlckZhdm91cml0ZVN0b3BzIiwiZGVkdXBlc3RvcHMiLCJmZWVkcyIsInN0b3BIaXN0b3J5IiwiZmF2b3VyaXRlUm91dGVzIiwicm91dGVIaXN0b3J5IiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24iLCJhbGwiLCJmbGF0dGVuIiwiY2F0Y2giLCJlcnIiLCJlcnJvciIsImxlYWRpbmciLCJnZXRMb2NhbGFkbWluIiwic3VnZ2VzdGlvbiIsImdldFN0b3BDb2RlIiwiZ2V0TmFtZUxhYmVsIiwibWVtb2l6ZSIsInBsYWluIiwiUmVnRXhwIiwiZXNjYXBlUmVnRXhwIiwibG9uZ05hbWUiLCJhZ2VuY3kiLCJmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsIiwiY2xvbmVEZWVwIiwidHJhbnNsYXRpb25zIiwiZGUiLCJhaXJwbGFuZSIsImFycml2YWwiLCJiYWNrIiwiYmlrZXJlbnRhbHN0YXRpb24iLCJidXMiLCJjYW5jZWwiLCJjdXJyZW50cG9zaXRpb24iLCJkZWxldGUiLCJkZXBhcnR1cmUiLCJmYXZvdXJpdGUiLCJmZXJyeSIsIm93bmxvY2F0aW9ucyIsImxvYWRpbmciLCJyYWlsIiwic3RyZWV0Iiwic3Vid2F5Iiwic3RhdGlvbiIsInRyYW0iLCJ2ZW51ZSIsIndoZXJlIiwicGxhY2UiLCJlbiIsImJpa2VwYXJrIiwiY2FycGFyayIsInBsYXRmb3JtIiwicmVxdWlyZWQiLCJ0cmFjayIsImZpIiwidmVoaWNsZXJlbnRhbHN0YXRpb24iLCJwbCIsInN2Iiwic3R5bGVJbmplY3QiLCJjc3MiLCJyZWYiLCJpbnNlcnRBdCIsImRvY3VtZW50IiwiaGVhZCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3R5bGUiLCJjcmVhdGVFbGVtZW50IiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsIkF1dG9zdWdnZXN0UGF0Y2giLCJBdXRvc3VnZ2VzdCIsInByb3BzIiwic3VwZXIiLCJzZWxmIiwidGhpcyIsIm9uU3VnZ2VzdGlvblRvdWNoTW92ZSIsImp1c3RTZWxlY3RlZFN1Z2dlc3Rpb24iLCJwcmVzc2VkU3VnZ2VzdGlvbiIsIk1vYmlsZVNlYXJjaCIsImFwcEVsZW1lbnQiLCJjbG9zZUhhbmRsZSIsImNsZWFySW5wdXQiLCJzdWdnZXN0aW9ucyIsImlucHV0UHJvcHMiLCJmZXRjaEZ1bmN0aW9uIiwicmVuZGVyU3VnZ2VzdGlvbiIsImdldFN1Z2dlc3Rpb25WYWx1ZSIsImFyaWFMYWJlbCIsIm9uU3VnZ2VzdGlvblNlbGVjdGVkIiwiY2xlYXJPbGRTZWFyY2hlcyIsImRpYWxvZ0hlYWRlclRleHQiLCJkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dCIsImRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQiLCJjbGVhcklucHV0QnV0dG9uVGV4dCIsImZvY3VzSW5wdXQiLCJjb2xvciIsImhvdmVyQ29sb3IiLCJhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yIiwic2VhcmNoT3BlbiIsImZvbnRXZWlnaHRzIiwic2hvd1Njcm9sbCIsIl9pbnB1dFJlZiRjdXJyZW50Iiwic3R5bGVzIiwibW9iaWxlU3R5bGVzIiwibW9iaWxlTm9TY3JvbGxTdHlsZXMiLCJpbnB1dElkIiwiaXNEaWFsb2dPcGVuIiwic2V0RGlhbG9nT3BlbiIsInVzZVN0YXRlIiwiaW5wdXRSZWYiLCJSZWFjdCIsInVzZVJlZiIsInVzZUVmZmVjdCIsIlJlYWN0TW9kYWwiLCJzZXRBcHBFbGVtZW50Iiwib25DbG9zZSIsInVzZUNhbGxiYWNrIiwib25TZWxlY3QiLCJpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQiLCJldmVudCIsImtleSIsIndoaWNoIiwia2V5Q29kZSIsInByZXZlbnREZWZhdWx0IiwiZ2V0VmFsdWUiLCJyZW5kZXJJdGVtIiwiY2xhc3NOYW1lIiwiZm9jdXMiLCJpc09wZW4iLCJvdmVybGF5Q2xhc3NOYW1lIiwib25BZnRlckNsb3NlIiwic2hvdWxkQ2xvc2VPbkVzYyIsIm1lZGl1bSIsImh0bWxGb3IiLCJvbkNsaWNrIiwib25LZXlEb3duIiwidGFiSW5kZXgiLCJJY29uIiwiaW1nIiwiYWx3YXlzUmVuZGVyU3VnZ2VzdGlvbnMiLCJvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQiLCJmb2N1c0lucHV0T25TdWdnZXN0aW9uQ2xpY2siLCJzaG91bGRSZW5kZXJTdWdnZXN0aW9ucyIsImhhc1ZhbHVlIiwiYXV0b0ZvY3VzIiwicmVuZGVySW5wdXRDb21wb25lbnQiLCJGcmFnbWVudCIsImFzc2lnbiIsInRoZW1lIiwiRGlhbG9nTW9kYWwiLCJpc01vZGFsT3BlbiIsImhhbmRsZUNsb3NlIiwiaGVhZGVyVGV4dCIsInByaW1hcnlCdXR0b25UZXh0Iiwic2Vjb25kYXJ5QnV0dG9uVGV4dCIsInByaW1hcnlCdXR0b25PbkNsaWNrIiwic2Vjb25kYXJ5QnV0dG9uT25DbGljayIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsImlzUmVxdWlyZWQiLCJmdW5jIiwiYXJyYXlPZiIsIm9iamVjdCIsInNoYXBlIiwib25DaGFuZ2UiLCJvbkJsdXIiLCJwbGFjZWhvbGRlciIsImJvb2wiLCJudW1iZXIiLCJkZWZhdWx0UHJvcHMiLCJtb2R1bGUiLCJleHBvcnRzIiwicmVxdWlyZSQkMCIsIm4iLCJnIiwid2luZG93IiwiaWdub3JlIiwiaGVhZGVyIiwidG9wT25FbXB0eUhhc2giLCJzcGVlZCIsInNwZWVkQXNEdXJhdGlvbiIsImR1cmF0aW9uTWF4IiwiZHVyYXRpb25NaW4iLCJjbGlwIiwib2Zmc2V0IiwiZWFzaW5nIiwiY3VzdG9tRWFzaW5nIiwidXBkYXRlVVJMIiwicG9wc3RhdGUiLCJlbWl0RXZlbnRzIiwiYXJndW1lbnRzIiwiaGFzT3duUHJvcGVydHkiLCJjaGFyQXQiLCJzdWJzdHIiLCJ1IiwiY2hhckNvZGVBdCIsIkludmFsaWRDaGFyYWN0ZXJFcnJvciIsIm1heCIsImJvZHkiLCJzY3JvbGxIZWlnaHQiLCJkb2N1bWVudEVsZW1lbnQiLCJvZmZzZXRIZWlnaHQiLCJjbGllbnRIZWlnaHQiLCJwYXJzZUludCIsImdldENvbXB1dGVkU3R5bGUiLCJoZWlnaHQiLCJvZmZzZXRUb3AiLCJhY3RpdmVFbGVtZW50Iiwic2V0QXR0cmlidXRlIiwib3V0bGluZSIsInNjcm9sbFRvIiwiQ3VzdG9tRXZlbnQiLCJidWJibGVzIiwiZGV0YWlsIiwiYW5jaG9yIiwidG9nZ2xlIiwiZGlzcGF0Y2hFdmVudCIsImMiLCJhIiwibCIsImYiLCJkIiwiY2FuY2VsU2Nyb2xsIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJhbmltYXRlU2Nyb2xsIiwiaCIsIm0iLCJ0YWdOYW1lIiwieSIsInBhZ2VZT2Zmc2V0IiwicXVlcnlTZWxlY3RvciIsImIiLCJ3IiwiRSIsIk8iLCJvZmZzZXRQYXJlbnQiLCJtaW4iLCJpbm5lckhlaWdodCIsIlMiLCJfIiwiSSIsIk0iLCJMIiwiZmxvb3IiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJwdXNoU3RhdGUiLCJzbW9vdGhTY3JvbGwiLCJKU09OIiwic3RyaW5naWZ5IiwidGl0bGUiLCJtYXRjaE1lZGlhIiwibWF0Y2hlcyIsImRlZmF1bHRQcmV2ZW50ZWQiLCJidXR0b24iLCJtZXRhS2V5IiwiY3RybEtleSIsInNoaWZ0S2V5IiwidGFyZ2V0IiwiY2xvc2VzdCIsImhvc3RuYW1lIiwibG9jYXRpb24iLCJwYXRobmFtZSIsImhyZWYiLCJkZWNvZGVVUklDb21wb25lbnQiLCJoYXNoIiwicmVwbGFjZVN0YXRlIiwic3RhdGUiLCJkZXN0cm95IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIkVsZW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiYXBwbHkiLCJfX2NyZWF0ZUJpbmRpbmciLCJjcmVhdGUiLCJfX2V4cG9ydFN0YXIiLCJ1c2VBcnJvd05hdmlnYXRpb24iLCJsaXN0SXRlbXMiLCJvbkFycm93VXBPckRvd24iLCJzZWxlY3RlZEluZGV4IiwidXNlRGVib3VuY2UiLCJzZXRUaW1lb3V0IiwiY2xlYXJUaW1lb3V0IiwidXNlRWxlbWVudFNpemUiLCJ3aWR0aCIsImNsaWVudFdpZHRoIiwidXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJpc0ludGVyc2VjdGluZyIsIkludGVyc2VjdGlvbk9ic2VydmVyIiwib2JzZXJ2ZSIsInVub2JzZXJ2ZSIsImNvbnRhaW5lclJlZiIsImlzVmlzaWJsZSIsInVzZUlzQnJlYWtwb2ludCIsInhzIiwibW9iaWxlU21hbGwiLCJtb2JpbGUiLCJ0YWJsZXQiLCJ0YWJsZXRMYXJnZSIsImRlc2t0b3BTbWFsbCIsImRlc2t0b3AiLCJkZXNrdG9wTGFyZ2UiLCJpbm5lcldpZHRoIiwidXNlT25SZXNpemUiLCJ1c2VJc0xvYWRpbmdBZnRlckVycm9yIiwidXNlSXNNb2JpbGUiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwidXNlT25Mb3NlRm9jdXNXaXRoaW4iLCJ3YXRjaCIsInBhc3NpdmUiLCJ1c2VPbldpbmRvd0ZvY3VzIiwidmlzaWJpbGl0eVN0YXRlIiwidXNlT3V0c2lkZVJlYWN0ZXIiLCJjb250YWlucyIsInVzZVJ1bkFmdGVyVXBkYXRlIiwidXNlU2Nyb2xsTG9jayIsImxvY2siLCJzY3JvbGxZIiwidG9wIiwidW5sb2NrIiwiX19pbXBvcnREZWZhdWx0IiwiX19lc01vZHVsZSIsInVzZVNtb290aFNjcm9sbCIsImdsb2JhbFRoaXMiLCJGdW5jdGlvbiIsIlNldHRpbmdzIiwiZGVmYXVsdExvY2FsZSIsImkxOG5leHRfX2RlZmF1bHQiLCJpbml0IiwiZmFsbGJhY2tMbmciLCJkZWZhdWx0TlMiLCJpbnRlcnBvbGF0aW9uIiwiZXNjYXBlVmFsdWUiLCJub2RlIiwiZ2V0UGxhdGZvcm0iLCJHVEZTIiwibW9kZXMiLCJpMThuZXh0IiwiZ2V0U3VnZ2VzdGlvbkNvbnRlbnQiLCJzdWdnZXN0aW9uVHlwZSIsIl9pdGVtJHByb3BlcnRpZXMkYWRkZSIsInRhaWwxIiwibG9jYWxpdHkiLCJ0YWlsMiIsIm5hbWUxIiwibmFtZTIiLCJ0cmFuc2xhdGVkVGV4dCIsInRyYW5zbGF0ZUZ1dHVyZVJvdXRlU3VnZ2VzdGlvblRpbWUiLCJ0aW1lIiwiRGF0ZVRpbWUiLCJmcm9tU2Vjb25kcyIsIm5vdyIsImFycml2ZUJ5IiwiaGFzU2FtZSIsInBsdXMiLCJkYXlzIiwidG9Gb3JtYXQiLCJnZXRMYWJlbCIsIkRUQXV0b3N1Z2dlc3QiLCJDb21wb25lbnQiLCJuZXdWYWx1ZSIsIm5ld1N0YXRlIiwiZklucHV0IiwicmVuZGVyTW9iaWxlU2VhcmNoIiwiaXNNb2JpbGUiLCJlZGl0aW5nIiwidmFsaWQiLCJ0eXBpbmdUaW1lciIsInRpbWVyIiwic2V0U3RhdGUiLCJ0eXBpbmciLCJjbG9zZU1vYmlsZVNlYXJjaCIsIm93blBsYWNlcyIsInBlbmRpbmdTZWxlY3Rpb24iLCJzdWdnZXN0aW9uSW5kZXgiLCJzZWxlY3Rpb25Eb25lIiwic3VnZ2VzdGlvblZhbHVlIiwiYmx1ciIsImhhbmRsZVZpYVBvaW50cyIsImZvY3VzQ2hhbmdlIiwiaXNFbWJlZGRlZCIsInByZXZTdGF0ZSIsImNoZWNrUGVuZGluZ1NlbGVjdGlvbiIsImNsZWFuRXhlY3V0ZWQiLCJ1c2VBbGwiLCJpc0VtcHR5IiwiaXNMb2NhdGlvblNlYXJjaCIsIm5ld1RhcmdldHMiLCJleGVjdXRlU2VhcmNoIiwic2VhcmNoUmVzdWx0IiwidG9Vbml4SW50ZWdlciIsInRyYW5zbGF0ZWQiLCJvbkNsZWFyIiwiaW5wdXRWYWx1ZSIsImNsZWFyTG9jYXRpb25UZXh0Iiwic3RhdGVLZXlEb3duIiwiYXV0b3N1Z2dlc3QiLCJzdG9yZVJlZiIsImNvbnRlbnQiLCJTdWdnZXN0aW9uSXRlbSIsImFyaWFGYXZvdXJpdGVTdHJpbmciLCJmaWxsSW5wdXQiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwibW9kZUljb25Db2xvcnMiLCJtb2RlU2V0Iiwib25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkIiwiaW5wdXRDbGlja2VkIiwiZmlyc3RTdWdnZXN0aW9uIiwiU2V0IiwiY2xlYXJGdXR1cmVSb3V0ZXMiLCJkZWZhdWx0Wm9uZSIsInRpbWVab25lIiwiYWRkUmVzb3VyY2VCdW5kbGUiLCJzaG91bGRDb21wb25lbnRVcGRhdGUiLCJuZXh0UHJvcHMiLCJuZXh0U3RhdGUiLCJpc0VxdWFsIiwiY29tcG9uZW50RGlkVXBkYXRlIiwiY2hhbmdlTGFuZ3VhZ2UiLCJVTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyIsInJlbmRlciIsInRyYW5zbGF0ZWRQbGFjZWhvbGRlciIsInRoaW4iLCJpbnB1dENsYXNzTmFtZSIsImtleURvd24iLCJhcmlhQmFySWQiLCJTZWFyY2hCYXJJZCIsImFyaWFSZXF1aXJlZFRleHQiLCJhcmlhTGFiZWxJbnN0cnVjdGlvbnMiLCJtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0IiwiYXJpYUxhYmVsVGV4dCIsImFyaWFTdWdnZXN0aW9uTGVuIiwiY291bnQiLCJhcmlhQ3VycmVudFN1Z2dlc3Rpb24iLCJzdWdnZXN0aW9uQXNBcmlhQ29udGVudCIsInNlbGVjdGlvbiIsInJvbGUiLCJpc09yaWdpbkRlc3RpbmF0aW9uT3JWaWFwb2ludCIsIm1vYmlsZUxhYmVsIiwib25TZWxlY3RlZCIsImN4IiwiaWNvbiIsIm9uRm9jdXMiLCJoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb24iLCJjbGVhckJ1dHRvbiIsInN0b3JlSW5wdXRSZWZlcmVuY2UiLCJyb3V0ZXNQcmVmaXgiLCJzdG9wc1ByZWZpeCIsIm9iamVjdE9mIiwiRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrIiwiaG9va3MiXSwibWFwcGluZ3MiOiJxMURBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDZixFQUFHLFNBQVVBLEdBQ1osT0FBT0EsR0FBSyxtQkFBcUJDLFFBQVVELEVBQUVHLGNBQWdCRixRQUFVRCxJQUFNQyxPQUFPRyxVQUFZLGdCQUFrQkosQ0FDdEgsRUFBS0QsRUFBUUMsRUFDYixDQ05BLFNBQVNLLEVBQWNDLEdBQ3JCLElBQUlDLEVDRk4sU0FBcUJELEVBQUdFLEdBQ3RCLEdBQUksVUFBWVQsRUFBUU8sS0FBT0EsRUFBRyxPQUFPQSxFQUN6QyxJQUFJRyxFQUFJSCxFQUFFTCxPQUFPUyxhQUNqQixRQUFJLElBQVdE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
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("prop-types"),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("luxon"),require("lodash/isEmpty"),require("react-modal"),require("@digitransit-component/digitransit-component-dialog-modal")):"function"==typeof define&&define.amd?define(["exports","react","prop-types","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","luxon","lodash/isEmpty","react-modal","@digitransit-component/digitransit-component-dialog-modal"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).DTAutosuggest={},e.React,e.PropTypes,e.i18next,e.cx,e.Autosuggest,e.debounce,e.flatten,e.take,e.isString,e.orderBy,e.uniqWith,e.get,e.SuggestionItem,e.isEqual,e.memoize,e.escapeRegExp,e.cloneDeep,e.Icon,e.luxon,e.isEmpty,e.ReactModal,e.DialogModal)}(this,(function(e,t,n,o,i,s,r,a,l,u,c,d,p,h,f,g,b,m,y,v,_,S,k){"use strict";function w(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var x=w(t),O=w(n),j=w(o),M=w(i),R=w(s),P=w(r),E=w(a),C=w(l),L=w(u),I=w(c),N=w(d),z=w(p),F=w(h),A=w(f),T=w(g),q=w(b),D=w(m),V=w(y),B=w(_),H=w(S),$=w(k);function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function W(e){var t=function(e,t){if("object"!=U(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=U(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==U(t)?t:t+""}function G(e,t,n){return(t=W(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function Y(e,t){return e&&t&&e===t}const Q=["stop","station","favouriteStop","favouriteStation"],Z=["favouriteVehicleRentalStation","bikestation"];function K(e){if(!e)return"";const t=e.split(":");return 0===t.length?"":`citybikes${t[0]}:bikestation:${t[1]}`}function X(e,t){const n=e.properties,o=t.properties;if("FutureRoute"===e.type&&"FutureRoute"===t.type){const e=n.origin,t=n.destination,i=o.origin,s=o.destination;return`${e.name}//${e.localadmin}//${t.name}//${t.localadmin}`===`${i.name}//${i.localadmin}//${s.name}//${s.localadmin}`}if("FutureRoute"===e.type||"FutureRoute"===t.type)return!1;if(Z.includes(n.layer)&&Z.includes(o.layer)){return(n.gid||K(n.labelId))===(o.gid||K(o.labelId))}if(n.gtfsId&&o.gtfsId)return n.gtfsId===o.gtfsId;if(Q.includes(n.layer)&&Q.includes(o.layer)&&n.gid&&o.gid)return n.gid===o.gid;const i=e&&e.geometry?e.geometry.coordinates:void 0,s=t&&t.geometry?t.geometry.coordinates:void 0;return!!(i&&s&&Math.abs(i[0]-s[0])<1e-6&&Math.abs(i[1]-s[1])<1e-6&&(Y(n.name,o.name)||Y(n.label,o.label)||Y(n.address,o.address)||Y(n.address,o.label)||Y(n.label,o.address)))}const J=e=>L.default(e)?e.toLowerCase():"",ee="back",te="currentPosition",ne="favouriteStop",oe="favouriteStation",ie="favouritePlace",se="favouriteRoute",re="favouriteVehicleRentalStation",ae="futureRoute",le="station",ue="selectFromMap",ce="ownLocations",de="stop",pe="bikestation",he="carpark",fe="bikepark",ge=({layer:e,type:t})=>"stop"===e||"favouriteStop"===e||"stop"===t||"favouriteStop"===t,be=(e,t)=>{switch(e){case te:return 1;case ee:return.9;case ue:return.8;case ce:return.79;case oe:case ie:case ne:case se:case re:return.45;case ae:return.44;case le:return L.default(t)&&0===t.indexOf("gtfs")?.43:.42;case he:case fe:case pe:return.38;case de:return.36;default:return.41}},me=(e,t,n="")=>{if(!Array.isArray(t))return t;const o=t=>L.default(t)&&e&&e.test(t),i=J(n),s=o(i),r=I.default(t,[e=>s&&o(J(e.properties.shortName))&&0===J(e.properties.shortName).indexOf(i)?1:0,e=>{const{confidence:t,layer:n,source:o}=e.properties;if(0===i.length)return be(n,o);if(!t)return be(n,o)+((e,t)=>L.default(e)&&0!==e.length?["name","label","address","shortName"].map((e=>t[e])).filter((e=>L.default(e)&&e.length>0)).map((t=>{const n=J(t);return 0===n.indexOf(e)?.5+e.length/n.length:.5*e.length/(e.length+1)})).reduce(((e,t)=>t>e?t:e),0):0)(i,e.properties);switch(n){case le:return t+(0===o.indexOf("gtfs")?.02:.01);case de:case he:case fe:return t-.05;case pe:return t-.04;default:return t}}],["desc","desc"]);return N.default(r,X)},ye=(e,t)=>null!=t&&-1!==e.lastIndexOf(t)?e.substring(0,e.lastIndexOf(t)-1):e;function ve(e,t,n){if("string"==typeof t&&t.length>0){const o=t.toLowerCase().trim(),i=o.includes(" ")||o.includes(",");return e.filter((e=>{let t=[];n.forEach((n=>{let o=z.default(e,n);i||"properties.label"!==n&&"address"!==n||!o||(o=o.split(","),o.length>2?o.splice(o.length-2,2):o.length>1&&o.splice(o.length-1,1),o=o.join(",")),o&&(t=i?t.concat(o.toLowerCase()):t.concat(o.toLowerCase().replace(/,/g," ").split(" ")))}));for(let e=0;e<t.length;e++)if(0===t[e].indexOf(o))return!0;return!1}))}return e}function _e(e,t){return e?Object.keys(e).map((n=>{const o=t||n,i=e[n];return"object"==typeof i?_e(i,o):`${encodeURIComponent(o)}=${encodeURIComponent(i)}`})).join("&"):""}const Se=require("axios").default;function ke(e,t){return Se.get(encodeURI(e)+(t?(-1===e.search(/\?/)?"?":"&")+_e(t):""),{timeout:1e4,method:"GET",headers:{Accept:"application/json"}}).then((e=>e.data))}function we(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function xe(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?we(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):we(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Oe(e,t,n,o,i,s,r,a){const l=e?e.trim():null;if(null==l||l.length<1||r&&!r.test(l))return Promise.resolve([]);const u=s||"https://api.digitransit.fi/geocoding/v1/search";let c=xe(xe(xe({text:l},t),o),{},{lang:n});if(i&&(c=xe(xe({},c),{},{sources:i})),a){const e=a.toString();c=xe(xe({},c),{},{layers:e})}return ke(u,c).then((e=>e.features))}function je(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Me(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?je(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):je(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function Re(e,t){if(!e||e.length<1)return Promise.resolve([]);let n="";const o=e.map((e=>{const t="stop"===e.type?"stop":"station";let o=`gtfs${e.gtfsId.split(":")[0].toLowerCase()}:${t}:GTFS:${e.gtfsId}`;return e.code&&(o+=`#${e.code}`),n+=`${o},`,Me(Me({},e),{},{gid:o})})).reduce((function(e,t){return e[t.gid]=t,e}),{});return ke(t,{ids:n.slice(0,-1)}).then((e=>e.features.map((e=>({type:"FavouriteStop",properties:{addendum:e.properties.addendum,gid:o[e.properties.gid].gid,code:o[e.properties.gid].code,gtfsId:o[e.properties.gid].gtfsId,lastUpdated:o[e.properties.gid].lastUpdated,favouriteId:o[e.properties.gid].favouriteId,address:e.properties.label,layer:ge(e.properties)?"favouriteStop":"favouriteStation"},geometry:e.geometry})))))}function Pe(e,t,n){let o=ve(e,t,["properties.name","properties.label","properties.address","properties.shortName","properties.longName"]);return n&&(o=o.filter((e=>!n.includes(e.properties.layer)))),Promise.resolve(C.default(o,10).map((e=>{const t=Me(Me({},e),{},{type:"OldSearch",timetableClicked:!1,arrowClicked:!1});return delete t.properties.confidence,t})))}const Ee=["route-TRAM","route-BUS","route-RAIL","route-FERRY","route-SUBWAY","route-AIRPLANE","route-FUNICULAR"],Ce=["venue","address","street"],Le=["carpark","bikepark"],Ie=["stop","station"];const Ne=P.default((function(e,t,n,o,i,s,{input:r},a,l,u){const{getPositions:c,getFavouriteLocations:d,getOldSearches:p,getFavouriteStops:h,parkingAreaSources:f,getLanguage:g,getStopAndStationsQuery:b,getFavouriteVehicleRentalStationsQuery:m,getFavouriteVehicleRentalStations:y,getFavouriteRoutesQuery:v,getFavouriteRoutes:_,getRoutesQuery:S,context:k,isPeliasLocationAware:w,minimalRegexp:x,lineRegexp:O,URL_PELIAS:j,URL_PELIAS_PLACE:M,feedIDs:R,geocodingSearchParams:P,geocodingSources:L,getFutureRoutes:I,cityBikeNetworks:N}=o,z=!e||0===e.length,F=!t||0===t.length,A=c(k),T=[],q={type:"all",term:r,results:[]},D=g(k),V=w&&null!=u&&u.lat&&null!=u&&u.lon?{"focus.point.lat":u.lat.toFixed(3),"focus.point.lon":u.lon.toFixed(3)}:{},B=n?n.split("-")[1]:void 0;if(e.includes("CurrentPosition")&&"geolocation-not-supported"!==A.status&&T.push(function(e,t){return"string"!=typeof e||0===e.length?Promise.resolve([{type:"CurrentLocation",address:t.address,lat:t.lat,lon:t.lon,properties:{labelId:"use-own-position",layer:"currentPosition",address:t.address,lat:t.lat,lon:t.lon},geometry:{type:"Point",coordinates:[t.lon,t.lat]}}]):Promise.resolve([])}(r,A)),(z||e.includes("MapPosition"))&&T.push(function(e){return"string"!=typeof e||0===e.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([])}(r)),e.includes("FutureRoutes")){const e=I(k);T.push(C.default(e,3))}if(e.includes("SelectFromOwnLocations")&&function(e){const t=e.getFavouriteLocations(e.context);if((null==t?void 0:t.length)>0)return!0;const n=e.getFavouriteVehicleRentalStations(e.context);if((null==n?void 0:n.length)>0)return!0;const o=e.getFavouriteStops(e.context);return(null==o?void 0:o.length)>0}(o)&&T.push(function(e){return"string"!=typeof e||0===e.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([])}(r)),z||e.includes("Locations")){const n=P;if(t.includes("Favourite")){const e=d(k);T.push(function(e,t){return Promise.resolve(ve(e,t,["address","name"]).map((e=>({type:"FavouritePlace",properties:Me(Me({},e),{},{label:e.name,layer:"favouritePlace"}),geometry:{type:"Point",coordinates:[e.lon,e.lat]}}))))}(e,r)),t.includes("Back")&&T.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(F||t.includes("Datasource")){const t=["venue","address","street"];e.includes("Stations")&&t.push("station"),T.push(Oe(r,n,D,V,L.join(","),j,x,t))}if(F||t.includes("History")){const e=p(k,"endpoint"),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Le),T.push(Pe(e,r,t))}}if(z||e.includes("ParkingAreas")){if(F||t.includes("Datasource")){const e=P;s&&10!==s&&(e.size=s);const t=["carpark","bikepark"],n=f?f.join(","):null;T.push(Oe(r,e,D,V,n,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k),t=["bikestation"];t.push(...Ie),t.push(...Ee),t.push(...Ce),T.push(Pe(e,r,t))}}const H=e.includes("Stops"),$=e.includes("Stations");if(z||H||$){if(t.includes("Favourite")){const e=h(k);let t;t=e.every((e=>"station"===e.type))?Re(e,M).then((e=>i?i(e,B):e)):b(e).then((e=>Re(e,M))).then((e=>i?i(e,B):e)),T.push(function(e,t,n,o){return e.then((e=>ve(e.filter((e=>"stop"===e.type?n:o)),t,["properties.name","properties.name","properties.address"])))}(t,r,H,$))}if(F||t.includes("Datasource")){const t=[];H&&t.push("stop"),$&&t.push("station");const n=s&&10!==s?{size:s}:{};P&&P["boundary.country"]&&(n["boundary.country"]=P["boundary.country"]),(z||e.includes("Locations"))&&(n.dedupestops=1);const o=R.map((e=>`gtfs${e}`)).join(",");T.push(Oe(r,n,D,V,o,j,x,t).then((e=>i?i(e,B):e)))}if(F||t.includes("History")){const e=p(k).filter((e=>!e.properties.gid||e.properties.gid.includes("GTFS:"))),t=["bikestation"];t.push(...Ee),t.push(...Ce),t.push(...Le),H||t.push("stop"),$||t.push("station"),n?T.push(Pe(e,r,t).then((e=>i?i(e,B):e))):T.push(Pe(e,r,t))}}if(z||e.includes("Routes")){if(t.includes("Favourite")){const e=_(k);T.push(v(e,r,B,l).then((e=>i?i(e,B,"Routes"):e)))}if(T.push(S(r,R,n,l).then((e=>i?i(e,B,"Routes"):e))),F||t.includes("History")){const e=p(k),t=["bikestation"];n&&t.push(...Ee.filter((e=>!(e===n)))),t.push(...Ie),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t).then((e=>i?i(e,B,"Routes"):e)))}}if(z||e.includes("VehicleRentalStations")){if(t.includes("Favourite")){const e=y(k);T.push(m(e,r))}if(F||t.includes("Datasource")){const e=["bikestation"],t=s&&10!==s?{size:s}:{};T.push(Oe(r,t,D,V,N.join(","),j,x,e).then((e=>i?i(e,B,"VehicleRentalStations"):e)))}if(F||t.includes("History")){const e=p(k),t=[...Ie];t.push(...Ee),t.push(...Ce),t.push(...Le),T.push(Pe(e,r,t))}}Promise.all(T).then(E.default).then((e=>{q.results=e})).catch((e=>{q.error=e})).then((()=>{a(Me(Me({},q),{},{results:me(O,q.results,r)}))}))}),300,{leading:!0}),ze=e=>e.localadmin||e.localadmin||e.address&&e.address.lastIndexOf(",")<e.address.length-2&&e.address.substring(e.address.lastIndexOf(",")+2)||"",Fe=({id:e,code:t})=>t||(void 0!==e&&void 0!==e.indexOf&&-1!==e.indexOf("#")?e.substring(e.indexOf("#")+1):void 0),Ae=T.default(((e,t=!1)=>{switch(e.layer){case"currentPosition":return[e.labelId,e.address];case"selectFromMap":case"ownLocations":case"back":return[e.labelId];case"favouritePlace":return n=e.name,o=e.address,[n||o&&o.split(",")[0],"string"==typeof o?o.replace(new RegExp(`${q.default(n)}([ ,]|$)+`),""):""];case"favouriteVehicleRentalStation":case"bikestation":return[e.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!t&&e.shortName?[e.gtfsId,e.mode.toLowerCase(),e.longName]:[e.shortName,e.longName,e.agency?e.agency.name:void 0];case"venue":case"address":case"street":return[e.name,e.label.replace(new RegExp(`${q.default(e.name)}(,)?( )?`),"")];case"favouriteStop":case"stop":return t?[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]:[e.name,e.id,Fe(e),ze(e)];default:return[e.name||e.label||e.address&&e.address.split(",")[0],ze(e)]}var n,o}),((e,t)=>{const n=D.default(e);return n.plain=t,n}));const Te={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äpysäköinti",bus:"bussi",cancel:"Peruuta",carpark:"Liityntäpysäköinti","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"},pl:{address:"Adres","address-place-or-business":"Adres, miejsce lub firma","add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}",airplane:"Lot",arrival:"Przyjazd",back:"Wróć",bikepark:"Parkuj i Jedź dla rowerów",bikerentalstation:"Stacja rowerowa",bus:"autobus",cancel:"Anuluj",carpark:"Parkuj i Jedź","clear-button-label":"Wyczyść","clear-search-history":"Wyczyść historię wyszukiwania",currentposition:"Obecne położenie",delete:"Usuń","delete-old-searches-header":"Czy na pewno chcesz wyczyścić historię wyszukiwania?",departure:"Odjazd",destination:"Cel","give-origin":"Wprowadź swój punkt początkowy.","give-destination":"Wprowadź swój cel",favourite:"Ulubione",ferry:"Prom","future-route":"Przyszła trasa",origin:"Początek","origin-stop-near-you":"Początek",ownlocations:"Własne miejsca",loading:"Ładowanie…","minute-short":"min.",platform:"Peron",rail:"Pociąg",required:"wymagane pole",search:"Szukaj","search-address-or-place":"Szukaj po adresie lub nazwie miejsca","search-button-label":"Szukaj","search-destination":"Szukaj celu, trasy lub przystanku","search-destination-index":"Wprowadź punkt docelowy","search-destination-results-but-no-search":"Wyświetl wyniki w sąsiedniej karcie „Cel”","search-no-results":"Brak lokalizacji","search-origin":"Wyszukaj początek, koniec lub punkt pośredni","search-origin-index":"Wprowadź punkt początkowy","search-position":"Wykryj lokalizację","search-autosuggest-label":"Miejsce, lokalizacja i przystanek.","search-autosuggest-label-instructions-desktop":"Nawiguj po liście używając strzałek i wybieraj klawiszem Enter.","search-autosuggest-label-instructions-mobile":"Wprowadź lokalizację i nawiguj po liście gestami przesuwania.","search-autosuggest-label-move-to-destination":"Po wybraniu lokalizacji początkowej, automatycznie przejdziesz do pola miejsca docelowego.","search-autosuggest-len":"Dostępna jest {{count}} propozycja","search-autosuggest-len_few":"Dostępne są {{count}} propozycje","search-autosuggest-len_other":"Dostępne jest {{count}} propozycji","search-current-suggestion":"Obecny wybór: {{selection}}",street:"Ulica",subway:"Metro",station:"Stacja",stop:"Przystanek","stop-near-you":"Szukaj przystanków i tras","stop-near-you-airplane":"Szukaj lotów i lotnisk","stop-near-you-bus":"Szukaj tras autobusowych i przystanków","stop-near-you-citybike":"Szukaj stacji rowerów miejskich","stop-near-you-rail":"Szukaj tras kolejowych i przystanków","stop-near-you-subway":"Szukaj tras metra i przystanków ","stop-near-you-tram":"Szukaj tras tramwajowych i przystanków","stop-route-station":"Wyszukiwanie autobusów i przystanków","today-at":"dziś o","tomorrow-at":"jutro o",tram:"Tramwaj",track:"Tor","use-own-position":"Użyj obecnej lokalizacji","select-from-map":"Wybierz miejsce na mapie","select-from-own-locations":"Wybierz z własnych miejsc",venue:"Miejsce","via-point":"Przez punkt",where:"Dokąd?",place:"Miejsce"},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 qe(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var o=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css","top"===n&&o.firstChild?o.insertBefore(i,o.firstChild):o.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}}var De={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"};qe("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 -moz-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: #f2f5f7; }\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: #f2f5f7; }\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 clip-path: inset(50%);\n height: 1px;\n overflow: hidden;\n position: absolute;\n white-space: nowrap;\n width: 1px; }\n");var Ve={"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"};qe("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 -moz-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: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 Be={"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"};function He(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function $e(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?He(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):He(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}qe("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 -moz-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: #f2f5f7; }\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: #f2f5f7; }\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: #f2f5f7;\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 Ue extends R.default{constructor(e){super(e);const t=this;t.onSuggestionTouchMove=()=>{t.justSelectedSuggestion=!1,t.pressedSuggestion=null}}}const We=({appElement:e,id:n,closeHandle:o,clearInput:i,value:s,suggestions:r,inputProps:a,fetchFunction:l,renderSuggestion:u,getSuggestionValue:c,ariaLabel:d,label:p,onSuggestionSelected:h,clearOldSearches:f,dialogHeaderText:g,dialogPrimaryButtonText:b,dialogSecondaryButtonText:m,clearInputButtonText:y,focusInput:v,color:_,hoverColor:S,accessiblePrimaryColor:k,searchOpen:w,fontWeights:O,showScroll:j})=>{var M;const R=j?Ve:Be,P=`${n}-input`,E=`${n}-label`,[C,L]=t.useState(!1),I=x.default.useRef();t.useEffect((()=>{H.default.setAppElement(e)}),[]);const N=t.useCallback((()=>{o()})),z=(e,t)=>{"clear-search-history"===t.suggestion.type?L(!0):t.suggestion.properties.arrowClicked||h(e,t)},F=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},A=e=>"clear-search-history"===e.type?"":c(e),T=e=>"clear-search-history"===e.type?x.default.createElement("button",{type:"button",className:R["clear-search-history"]},e.labelId):u(e);return v&&null!==(M=I.current)&&void 0!==M&&M.input&&I.current.input.focus(),x.default.createElement(H.default,{isOpen:w,className:R["mobile-modal"],overlayClassName:R["mobile-modal-overlay"],onAfterClose:N,shouldCloseOnEsc:!0},x.default.createElement("div",{className:R["mobile-modal-content"],style:{"--color":`${_}`,"--accessible-primary-color":k,"--hover-color":`${S}`,"--font-weight-medium":O.medium}},x.default.createElement("div",{className:R["combobox-container"],htmlFor:P},x.default.createElement("button",{type:"button",className:R["combobox-icon"],onClick:()=>N(),onKeyDown:e=>F(e)&&N(),"aria-label":m,tabIndex:0},x.default.createElement(V.default,{img:"arrow"})),x.default.createElement("span",{className:R["right-column"]},x.default.createElement("span",{className:R["combobox-label"],id:E},p),x.default.createElement(Ue,{alwaysRenderSuggestions:!0,id:n,suggestions:r,onSuggestionsFetchRequested:l,getSuggestionValue:A,renderSuggestion:T,focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>!0,inputProps:$e($e({},a),{},{className:`${R.input} ${R[n]||""} ${a.value?R.hasValue:""}`,autoFocus:!0}),renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("input",Object.assign({"aria-label":d,id:n},e)),s&&x.default.createElement("button",{type:"button",className:R["clear-input"],onClick:i,onKeyDown:e=>F(e)&&i(),"aria-label":y},x.default.createElement(V.default,{img:"close",color:_}))),theme:R,onSuggestionSelected:z,ref:I}))),x.default.createElement($.default,{appElement:e,isModalOpen:C,handleClose:()=>L(!1),headerText:g,primaryButtonText:b,secondaryButtonText:m,primaryButtonOnClick:()=>{f(),L(!1)},secondaryButtonOnClick:()=>L(!1),color:_,hoverColor:S,fontWeights:O})))};"production"!==process.env.NODE_ENV&&(We.propTypes={appElement:O.default.string.isRequired,id:O.default.string.isRequired,closeHandle:O.default.func.isRequired,clearInput:O.default.func.isRequired,value:O.default.string,clearInputButtonText:O.default.string.isRequired,suggestions:O.default.arrayOf(O.default.object).isRequired,inputProps:O.default.shape({onChange:O.default.func.isRequired,onBlur:O.default.func.isRequired,value:O.default.string.isRequired,placeholder:O.default.string.isRequired,className:O.default.string.isRequired}).isRequired,fetchFunction:O.default.func.isRequired,getSuggestionValue:O.default.func.isRequired,renderSuggestion:O.default.func.isRequired,onSuggestionSelected:O.default.func.isRequired,label:O.default.string.isRequired,clearOldSearches:O.default.func.isRequired,ariaLabel:O.default.string,dialogHeaderText:O.default.string,dialogPrimaryButtonText:O.default.string,dialogSecondaryButtonText:O.default.string,focusInput:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string.isRequired,searchOpen:O.default.bool.isRequired,fontWeights:O.default.shape({medium:O.default.number.isRequired}).isRequired,showScroll:O.default.bool}),We.defaultProps={value:void 0,ariaLabel:void 0,dialogHeaderText:void 0,dialogPrimaryButtonText:void 0,dialogSecondaryButtonText:void 0,focusInput:!1,color:void 0,hoverColor:void 0,showScroll:void 0};var Ge,Ye=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e,t){var n;"undefined"!=typeof self&&self,e.exports=(n=x.default,function(){var e={888:function(e,t,n){var o,i;i=void 0!==n.g?n.g:"undefined"!=typeof window?window:this,o=function(){return function(e){var t={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},n=function(){var e={};return Array.prototype.forEach.call(arguments,(function(t){for(var n in t){if(!t.hasOwnProperty(n))return;e[n]=t[n]}})),e},o=function(e){"#"===e.charAt(0)&&(e=e.substr(1));for(var t,n=String(e),o=n.length,i=-1,s="",r=n.charCodeAt(0);++i<o;){if(0===(t=n.charCodeAt(i)))throw new InvalidCharacterError("Invalid character: the input contains U+0000.");s+=t>=1&&t<=31||127==t||0===i&&t>=48&&t<=57||1===i&&t>=48&&t<=57&&45===r?"\\"+t.toString(16)+" ":t>=128||45===t||95===t||t>=48&&t<=57||t>=65&&t<=90||t>=97&&t<=122?n.charAt(i):"\\"+n.charAt(i)}return"#"+s},i=function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight,document.body.offsetHeight,document.documentElement.offsetHeight,document.body.clientHeight,document.documentElement.clientHeight)},s=function(t){return t?(n=t,parseInt(e.getComputedStyle(n).height,10)+t.offsetTop):0;var n},r=function(t,n,o){0===t&&document.body.focus(),o||(t.focus(),document.activeElement!==t&&(t.setAttribute("tabindex","-1"),t.focus(),t.style.outline="none"),e.scrollTo(0,n))},a=function(t,n,o,i){if(n.emitEvents&&"function"==typeof e.CustomEvent){var s=new CustomEvent(t,{bubbles:!0,detail:{anchor:o,toggle:i}});document.dispatchEvent(s)}};return function(l,u){var c,d,p,h,f={cancelScroll:function(e){cancelAnimationFrame(h),h=null,e||a("scrollCancel",c)},animateScroll:function(o,l,u){f.cancelScroll();var d=n(c||t,u||{}),g="[object Number]"===Object.prototype.toString.call(o),b=g||!o.tagName?null:o;if(g||b){var m=e.pageYOffset;d.header&&!p&&(p=document.querySelector(d.header));var y,v,_,S=s(p),k=g?o:function(t,n,o,s){var r=0;if(t.offsetParent)do{r+=t.offsetTop,t=t.offsetParent}while(t);return r=Math.max(r-n-o,0),s&&(r=Math.min(r,i()-e.innerHeight)),r}(b,S,parseInt("function"==typeof d.offset?d.offset(o,l):d.offset,10),d.clip),w=k-m,x=i(),O=0,j=function(e,t){var n=t.speedAsDuration?t.speed:Math.abs(e/1e3*t.speed);return t.durationMax&&n>t.durationMax?t.durationMax:t.durationMin&&n<t.durationMin?t.durationMin:parseInt(n,10)}(w,d),M=function(t){y||(y=t),O+=t-y,_=m+w*function(e,t){var n;return"easeInQuad"===e.easing&&(n=t*t),"easeOutQuad"===e.easing&&(n=t*(2-t)),"easeInOutQuad"===e.easing&&(n=t<.5?2*t*t:(4-2*t)*t-1),"easeInCubic"===e.easing&&(n=t*t*t),"easeOutCubic"===e.easing&&(n=--t*t*t+1),"easeInOutCubic"===e.easing&&(n=t<.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1),"easeInQuart"===e.easing&&(n=t*t*t*t),"easeOutQuart"===e.easing&&(n=1- --t*t*t*t),"easeInOutQuart"===e.easing&&(n=t<.5?8*t*t*t*t:1-8*--t*t*t*t),"easeInQuint"===e.easing&&(n=t*t*t*t*t),"easeOutQuint"===e.easing&&(n=1+--t*t*t*t*t),"easeInOutQuint"===e.easing&&(n=t<.5?16*t*t*t*t*t:1+16*--t*t*t*t*t),e.customEasing&&(n=e.customEasing(t)),n||t}(d,v=(v=0===j?0:O/j)>1?1:v),e.scrollTo(0,Math.floor(_)),function(t,n){var i=e.pageYOffset;if(t==n||i==n||(m<n&&e.innerHeight+i)>=x)return f.cancelScroll(!0),r(o,n,g),a("scrollStop",d,o,l),y=null,h=null,!0}(_,k)||(h=e.requestAnimationFrame(M),y=t)};0===e.pageYOffset&&e.scrollTo(0,0),function(e,t,n){t||history.pushState&&n.updateURL&&history.pushState({smoothScroll:JSON.stringify(n),anchor:e.id},document.title,e===document.documentElement?"#top":"#"+e.id)}(o,g,d),"matchMedia"in e&&e.matchMedia("(prefers-reduced-motion)").matches?r(o,Math.floor(k),!1):(a("scrollStart",d,o,l),f.cancelScroll(!0),e.requestAnimationFrame(M))}}},g=function(t){if(!t.defaultPrevented&&!(0!==t.button||t.metaKey||t.ctrlKey||t.shiftKey)&&"closest"in t.target&&(d=t.target.closest(l))&&"a"===d.tagName.toLowerCase()&&!t.target.closest(c.ignore)&&d.hostname===e.location.hostname&&d.pathname===e.location.pathname&&/#/.test(d.href)){var n,i;try{n=o(decodeURIComponent(d.hash))}catch(e){n=o(d.hash)}if("#"===n){if(!c.topOnEmptyHash)return;i=document.documentElement}else i=document.querySelector(n);(i=i||"#top"!==n?i:document.documentElement)&&(t.preventDefault(),function(t){if(history.replaceState&&t.updateURL&&!history.state){var n=e.location.hash;n=n||"",history.replaceState({smoothScroll:JSON.stringify(t),anchor:n||e.pageYOffset},document.title,n||e.location.href)}}(c),f.animateScroll(i,d))}},b=function(e){if(null!==history.state&&history.state.smoothScroll&&history.state.smoothScroll===JSON.stringify(c)){var t=history.state.anchor;"string"==typeof t&&t&&!(t=document.querySelector(o(history.state.anchor)))||f.animateScroll(t,null,{updateURL:!1})}};return f.destroy=function(){c&&(document.removeEventListener("click",g,!1),e.removeEventListener("popstate",b,!1),f.cancelScroll(),c=null,d=null,p=null,h=null)},function(){if(!("querySelector"in document&&"addEventListener"in e&&"requestAnimationFrame"in e&&"closest"in e.Element.prototype))throw"Smooth Scroll: This browser does not support the required JavaScript methods and browser APIs.";f.destroy(),c=n(t,u||{}),p=c.header?document.querySelector(c.header):null,document.addEventListener("click",g,!1),c.updateURL&&c.popstate&&e.addEventListener("popstate",b,!1)}(),f}}(i)}.apply(t,[]),void 0===o||(e.exports=o)},432:function(e,t,n){var o=this&&this.__createBinding||(Object.create?function(e,t,n,o){void 0===o&&(o=n),Object.defineProperty(e,o,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,o){void 0===o&&(o=n),e[o]=t[n]}),i=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||o(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),i(n(47),t),i(n(926),t),i(n(349),t),i(n(137),t),i(n(729),t),i(n(383),t),i(n(450),t),i(n(358),t),i(n(753),t),i(n(869),t),i(n(352),t),i(n(446),t),i(n(164),t),i(n(305),t),i(n(502),t)},349:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useArrowNavigation=void 0;var o=n(156);t.useArrowNavigation=function(e){var t=e.listItems,n=e.onArrowUpOrDown,i=(0,o.useState)(0),s=i[0],r=i[1],a=(0,o.useCallback)((function(e){r(e)}),[t]),l=function(e){var o=e.key;if(null==t?void 0:t.length)if("ArrowUp"===o)n&&n(),e.preventDefault(),a(s>0?s-1:t.length-1);else{if("ArrowDown"!==o)return;n&&n(),e.preventDefault(),s<t.length-1?a(s+1):a(0)}};return(0,o.useEffect)((function(){return window.addEventListener("keydown",l),function(){return window.removeEventListener("keydown",l)}})),(0,o.useEffect)((function(){a(0)}),[t]),{selectedIndex:s}}},446:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useDebounce=void 0;var o=n(156);t.useDebounce=function(e,t){void 0===t&&(t=300);var n=(0,o.useState)(e),i=n[0],s=n[1];return(0,o.useEffect)((function(){var n=setTimeout((function(){s(e)}),t);return function(){clearTimeout(n)}}),[e,t]),i}},164:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useElementSize=void 0;var o=n(156);t.useElementSize=function(){var e,t,n=(0,o.useRef)(null);return[n,{width:null===(e=null==n?void 0:n.current)||void 0===e?void 0:e.clientWidth,height:null===(t=null==n?void 0:n.current)||void 0===t?void 0:t.clientHeight}]},t.default=t.useElementSize},137:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIntersectionObserver=void 0;var o=n(156);t.useIntersectionObserver=function(e){var t=(0,o.useRef)(null),n=(0,o.useState)(!1),i=n[0],s=n[1],r=function(e){var t=e[0];s(t.isIntersecting)};return(0,o.useEffect)((function(){if(window&&window.IntersectionObserver){var n=new IntersectionObserver(r,e),o=t.current;return t.current&&n.observe(t.current),function(){o&&n.unobserve(o)}}s(!1)}),[t,e]),{containerRef:t,isVisible:i}},t.default=t.useIntersectionObserver},729:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsBreakpoint=void 0;var o=n(156),i=n(432),s={xs:1,mobileSmall:320,mobile:375,tablet:768,tabletLarge:920,desktopSmall:1024,desktop:1260,desktopLarge:1440};t.useIsBreakpoint=function(e){var t="string"==typeof e?s[e]:e,n=(0,o.useState)(null),r=n[0],a=n[1],l=(0,o.useCallback)((function(){a(window.innerWidth)}),[]);return(0,o.useEffect)((function(){l()}),[]),(0,i.useOnResize)(l),r>=t},t.default=t.useIsBreakpoint},450:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsLoadingAfterError=void 0;var o=n(156);t.useIsLoadingAfterError=function(e,t){var n=(0,o.useState)(t),i=n[0],s=n[1];return(0,o.useEffect)((function(){e||s(t)}),[e,t]),e&&i}},305:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;var o=n(729);t.useIsMobile=function(){return!(0,o.useIsBreakpoint)("tablet")},t.default=t.useIsMobile},383:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useIsomorphicLayoutEffect=void 0;var o=n(156);t.useIsomorphicLayoutEffect="undefined"!=typeof window?o.useLayoutEffect:o.useEffect,t.default=t.useIsomorphicLayoutEffect},753:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnLoseFocusWithin=void 0;var o=n(156);t.useOnLoseFocusWithin=function(e){var t=e.ref,n=e.callback,i=e.watch;(0,o.useEffect)((function(){var e=function(){var e;if(i)return(null===(e=t.current)||void 0===e?void 0:e.matches(":focus-within"))?void 0:n()};return document.addEventListener("keyup",e),function(){return document.removeEventListener("keyup",e)}}),[n,t,i])},t.default=t.useOnLoseFocusWithin},502:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnResize=void 0;var o=n(156);t.useOnResize=function(e){(0,o.useEffect)((function(){var t=function(){e(window.innerWidth)};return window.addEventListener("resize",t,{passive:!0}),function(){return window.removeEventListener("resize",t)}}),[])},t.default=t.useOnResize},352:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOnWindowFocus=void 0;var o=n(156);t.useOnWindowFocus=function(e){(0,o.useEffect)((function(){var t=function(){e&&"visible"===document.visibilityState&&e()};return window.addEventListener("visibilitychange",t,!1),function(){return window.removeEventListener("visibilitychange",t)}}),[e])}},47:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useOutsideReacter=void 0;var o=n(156);t.useOutsideReacter=function(e,t){function n(n){e.current&&!e.current.contains(n.target)&&t()}(0,o.useEffect)((function(){return document.addEventListener("mousedown",n),function(){document.removeEventListener("mousedown",n)}}))}},869:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useRunAfterUpdate=void 0;var o=n(156);t.useRunAfterUpdate=function(){var e=(0,o.useRef)(null);return(0,o.useEffect)((function(){e.current&&(e.current(),e.current=null)})),function(t){e.current=t}},t.default=t.useRunAfterUpdate},926:function(e,t,n){Object.defineProperty(t,"__esModule",{value:!0}),t.useScrollLock=void 0;var o=n(156);t.useScrollLock=function(){return{lock:(0,o.useCallback)((function(){var e=window.scrollY+"px",t=document.body;t.style.position="fixed",t.style.top="-"+e}),[]),unlock:(0,o.useCallback)((function(){var e=document.body,t=e.style.top,n=-1*parseInt(t||"0");e.style.position="",e.style.top="",n&&window.scrollTo(0,-1*parseInt(t||"0"))}),[])}}},358:function(e,t,n){var o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useSmoothScroll=void 0;var i=n(156),s=o(n(888));t.useSmoothScroll=function(e){var t=(0,i.useRef)(null),n=e.ref,o=e.offset,r=void 0===o?0:o,a=e.speed,l=void 0===a?500:a;return(0,i.useEffect)((function(){t.current=new s.default(null,{speed:l,speedAsDuration:!0})}),[]),(0,i.useCallback)((function(){n&&t.current&&t.current.animateScroll(n.current,null,{offset:function(){return r},updateURL:!1})}),[r,n])}},156:function(e){e.exports=n}},t={};function o(n){var i=t[n];if(void 0!==i)return i.exports;var s=t[n]={exports:{}};return e[n].call(s.exports,s,s.exports,o),s.exports}return o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o(432)}())})),Qe=(Ge=Ye)&&Ge.__esModule&&Object.prototype.hasOwnProperty.call(Ge,"default")?Ge.default:Ge;function Ze(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function Ke(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?Ze(Object(n),!0).forEach((function(t){G(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):Ze(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}v.Settings.defaultLocale="en",j.default.init({fallbackLng:"fi",defaultNS:"translation",interpolation:{escapeValue:!1}}),"production"!==process.env.NODE_ENV&&O.default.node;const Xe=e=>{if(!e||!e.GTFS.platform)return;const{modes:t,platform:n}=e.GTFS;return[t&&"RAIL"===t[0]?j.default.t("track"):j.default.t("platform"),n]};function Je(e){if("FutureRoute"!==e.type){if("SelectFromMap"===e.type)return["",j.default.t("select-from-map")];if("CurrentLocation"===e.type)return["",j.default.t("use-own-position")];if("SelectFromOwnLocations"===e.type)return["",j.default.t("select-from-own-locations")];let n,[o,i]=Ae(e.properties,!0);if(e.properties.layer.toLowerCase().includes("bikerental")||e.properties.layer.toLowerCase().includes("bikestation")){n=j.default.t("vehiclerentalstation");return[n,o,void 0,e.properties.labelId]}if("bikepark"===e.properties.layer)return n=j.default.t("bikepark"),[n,o,void 0,void 0];if("carpark"===e.properties.layer)return n=j.default.t("carpark"),[n,o,void 0,void 0];if(e.properties.mode)n=j.default.t(e.properties.mode.toLowerCase().replace("favourite",""));else{const t=e.properties.layer.replace("route-","").toLowerCase().replace("favourite","");n=j.default.t(t)}if(e.properties.id&&("stop"===e.properties.layer||"station"===e.properties.layer)){var t;const s=Fe(e.properties),r=null===(t=e.properties.addendum)||void 0===t?void 0:t.GTFS.modes,a=Xe(e.properties.addendum);return[n,ye(o,s),i,s,r,a]}if("favouriteStop"===e.properties.layer||"favouriteStation"===e.properties.layer){const{address:t,code:s}=e.properties;return[n,t?ye(t.split(",")[0],s):o,i,s,void 0,Xe(e.properties.addendum)]}return[n,o,i]}const{origin:n,destination:o}=e.properties,i=n.locality?`, ${n.locality} foobar`:"",s=o.locality?`, ${o.locality}`:"",r=n.name,a=o.name;return[j.default.t("future-route"),`${j.default.t("origin")} ${r}${i} ${j.default.t("destination")} ${a}${s}`,e.translatedText]}function et(e){const t=v.DateTime.fromSeconds(Number(e.properties.time)),n=v.DateTime.now();let o=e.properties.arriveBy?j.default.t("arrival"):j.default.t("departure");return o=t.hasSame(n,"day")?`${o} ${j.default.t("today-at")}`:t.hasSame(n.plus({days:1}),"day")?`${o} ${j.default.t("tomorrow-at")}`:`${o} ${t.toFormat("ccc d.L.")}`,o=`${o} ${t.toFormat("HH:mm")}`,o}const tt=e=>"SelectFromOwnLocations"===e.type||"back"===e.type?"":function(e){const t=Ae(e,!0);switch(e.layer){case"selectFromMap":case"currentPosition":case"ownLocations":case"back":return t[1]||t[0];case"favouriteVehicleRentalStation":case"favouritePlace":return t[0];default:return t.length>1&&""!==t[1]?t.join(", "):t[1]||t[0]}}(e.properties);class nt extends x.default.Component{constructor(e){super(e),G(this,"onChange",((e,{newValue:t,method:n})=>{const o={value:this.fInput||t||"",renderMobileSearch:this.props.isMobile};if(this.fInput=null,this.state.editing){if("enter"!==n||this.state.valid){if(this.state.typingTimer&&clearTimeout(this.state.typingTimer),"type"===n){const e=setTimeout((()=>{this.setState({typing:!1})}),1e3);o.typingTimer=e,o.typing=!0}this.setState(o)}}else o.editing=!0,this.setState(o,(()=>this.fetchFunction({value:t||""})))})),G(this,"onBlur",(()=>{this.state.editing&&this.input.focus(),this.setState({editing:!1,renderMobileSearch:!1,value:this.props.value}),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch()})),G(this,"onSelected",((e,t)=>{if(this.state.valid){if("SelectFromOwnLocations"===t.suggestion.type)return void this.setState({sources:["Favourite","Back"],ownPlaces:!0,pendingSelection:t.suggestion.type,value:""},(()=>{this.fetchFunction({value:""})}));if("back"===t.suggestion.type||"FutureRoute"===t.suggestion.type)return void this.setState({sources:this.props.sources,ownPlaces:!1,pendingSelection:t.suggestion.type,suggestionIndex:t.suggestionIndex},(()=>{this.fetchFunction({value:""})}));this.selectionDone=!0,this.setState({editing:!1,value:t.suggestionValue},(()=>{this.input.blur(),this.props.handleViaPoints?this.props.handleViaPoints(t.suggestion,t.suggestionIndex):this.props.onSelect(t.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.state.renderMobileSearch&&this.closeMobileSearch()}))}else this.setState((e=>({pendingSelection:e.value})),(()=>this.checkPendingSelection()))})),G(this,"onSuggestionsClearRequested",(()=>{this.setState({suggestions:[],sources:this.props.sources,ownPlaces:!1,editing:!1})})),G(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},(()=>{if(this.state.suggestions.length){this.input.blur();"back"!==this.state.suggestions[this.state.suggestionIndex].type&&this.props.onSelect(this.state.suggestions[this.state.suggestionIndex],this.props.id),this.props.isMobile&&this.state.renderMobileSearch&&this.closeMobileSearch(),!this.props.focusChange||this.props.isMobile&&!this.props.isEmbedded||this.props.focusChange()}})):this.setState({pendingSelection:null,editing:!0},(()=>{this.input.focus()}))})),G(this,"clearButton",(()=>x.default.createElement("button",{type:"button",className:De["clear-input"],onClick:this.clearInput,"aria-label":j.default.t("clear-button-label")},x.default.createElement(V.default,{img:"close",color:this.props.color})))),G(this,"fetchFunction",(({value:e,cleanExecuted:t})=>this.setState({valid:!1,cleanExecuted:t||!1},(()=>{if(this.selectionDone)return;const{targets:t}=this.props,n=B.default(t),o=B.default(t)||t.includes("Locations");let i;this.state.ownPlaces?(i=["Locations"],(n||t.includes("Stops"))&&i.push("Stops"),(n||t.includes("Stations"))&&i.push("Stations"),(n||t.includes("VehicleRentalStations"))&&i.push("VehicleRentalStations")):n||(i=[...t],o&&!this.props.isMobile&&(B.default(this.props.sources)||this.props.sources.includes("Favourite"))&&i.push("SelectFromOwnLocations"));((e,t,n,o,i,s,r,a,l,u)=>{a(null),Ne(e,t,n,o,i,s,r,a,l,u)})(i,this.state.sources&&this.state.sources.filter((e=>!(o&&"Favourite"===e&&!this.state.ownPlaces&&!this.props.isMobile))),this.props.transportMode,this.props.searchContext,this.props.filterResults,this.props.geocodingSize,{input:e||""},(t=>{if(null==t)return;const n=(t.results||[]).filter((e=>"FutureRoute"!==e.type||"FutureRoute"===e.type&&e.properties.time>v.DateTime.now().toUnixInteger())).map((e=>{if("CurrentLocation"===e.type||"SelectFromMap"===e.type||"SelectFromOwnLocations"===e.type||"back"===e.type){const t=Ke({},e);return t.properties.labelId=j.default.t(e.properties.labelId),t}return e}));e!==this.state.value&&e!==this.state.pendingSelection&&"SelectFromOwnLocations"!==this.state.pendingSelection&&"back"!==this.state.pendingSelection&&"FutureRoute"!==this.state.pendingSelection||this.setState({valid:!0,suggestions:n},(()=>this.checkPendingSelection()))}),this.props.pathOpts,this.props.refPoint)})))),G(this,"clearInput",(()=>{const e={editing:!0,value:"",sources:this.props.sources,ownPlaces:!1,renderMobileSearch:this.props.isMobile};this.setState(e,(()=>this.fetchFunction({value:"",cleanExecuted:!0}))),this.props.onClear&&this.props.onClear(this.props.id),this.input.focus()})),G(this,"inputClicked",(e=>{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 t={editing:!0,pendingSelection:null,renderMobileSearch:this.props.isMobile},n={editing:!0,pendingSelection:null,value:e};this.state.suggestions.length?(this.fetchFunction({value:this.state.value}),this.setState(t)):"object"!=typeof e&&e?this.setState(n,(()=>this.fetchFunction({value:e}))):this.setState(t,(()=>this.fetchFunction({value:this.state.value})))}})),G(this,"storeInputReference",(e=>{null!==e&&(this.input=e.input,this.props.storeRef&&this.props.storeRef(e.input))})),G(this,"fillInput",(e=>{this.fInput=e.properties.name;const t={editing:!0,value:e.properties.name,checkPendingSelection:e,valid:!0};this.setState(t),this.fetchFunction({value:e.properties.name}),this.input.focus()})),G(this,"renderItem",(e=>{const t="FutureRoute"===e.type?Ke(Ke({},e),{},{translatedText:et(e)}):e,n=Je(e);return x.default.createElement(F.default,{item:t,content:n,loading:!this.state.valid,isMobile:this.props.isMobile,ariaFavouriteString:j.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})})),G(this,"closeMobileSearch",(()=>{this.props.unlock(),this.setState({renderMobileSearch:!1,value:this.props.value},(()=>{window.scrollTo(0,this.state.scrollY),this.onSuggestionsClearRequested()})),this.input.focus(),this.input.blur()})),G(this,"keyDown",(e=>{if(this.selectionDone)return;const t=e.key;if("Shift"!==t){if("Escape"===t&&this.onBlur(),this.state.editing)return"Enter"===t&&""!==this.state.value&&this.setState({pendingSelection:!0},(()=>{this.fetchFunction({value:this.state.value})})),void this.inputClicked();if("Enter"!==t&&"ArrowDown"!==t||""!==this.state.value){if("ArrowDown"===t&&""!==this.state.value){const e={editing:!0,value:this.state.value};this.setState(e,(()=>this.fetchFunction({value:this.state.value})))}this.state.editing||(this.setState({editing:!0}),this.clearLocationText()),"Tab"===t&&this.onBlur()}else this.clearInput()}})),G(this,"suggestionAsAriaContent",(()=>{let e=[];const t=this.state.suggestions[0];return t&&(t.type&&t.type.includes("Favourite")&&e.push(j.default.t("favourite")),e=e.concat(Je(this.state.suggestions[0]))),[...new Set(e)].join(" - ")})),G(this,"clearOldSearches",(()=>{const{context:e,clearOldSearches:t,clearFutureRoutes:n}=this.props.searchContext;e&&t&&(t(e),n&&n(e),this.fetchFunction({value:this.state.value}))})),G(this,"isOriginDestinationOrViapoint",(()=>"origin"===this.props.id||"destination"===this.props.id||"via-point"===this.props.id||"origin-stop-near-you"===this.props.id)),G(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","Wybrane miejsce"].includes(this.state.value)&&this.clearInput()})),G(this,"onFocus",(()=>{const e=window.pageYOffset;return this.setState({scrollY:e})})),v.Settings.defaultZone=e.timeZone,v.Settings.defaultLocale=e.lang,this.state={value:e.value,suggestions:[],editing:!1,valid:!0,renderMobileSearch:!1,sources:e.sources,ownPlaces:!1,typingTimer:null,typing:!1,pendingSelection:null,suggestionIndex:0,cleanExecuted:!1,scrollY:0},Object.keys(Te).forEach((e=>{j.default.addResourceBundle(e,"translation",Te[e])}))}shouldComponentUpdate(e,t){return!A.default(t,this.state)||!A.default(e,this.props)}componentDidUpdate(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang)}UNSAFE_componentWillReceiveProps(e){e.value===this.state.value||this.state.editing||this.setState({value:e.value})}render(){j.default.language!==this.props.lang&&j.default.changeLanguage(this.props.lang);const{value:e,suggestions:t,renderMobileSearch:n,cleanExecuted:o}=this.state,i={placeholder:this.props.translatedPlaceholder?this.props.translatedPlaceholder:j.default.t(this.props.placeholder),value:e,onChange:this.onChange,onBlur:this.onBlur,className:`${De.input} ${this.props.isMobile&&this.props.transportMode?De.thin:""} ${De[this.props.id]||""} ${this.state.value?De.hasValue:""} ${this.props.inputClassName}`,onKeyDown:this.keyDown,required:this.props.required},s=this.props.id.replace("searchfield-","");let r=this.props.ariaLabel||j.default.t(s);r=r.replace("searchfield-","").concat(".");const a=this.props.required?`${j.default.t("required")}.`:"",l=this.props.isMobile?j.default.t("search-autosuggest-label-instructions-mobile"):j.default.t("search-autosuggest-label-instructions-desktop"),u="origin"===this.props.id?j.default.t("search-autosuggest-label-move-to-destination"):"",c=l.concat(" ").concat(u),d=j.default.t("search-autosuggest-len",{count:t.length}),p=()=>this.suggestionAsAriaContent()||this.props.value?j.default.t("search-current-suggestion",{selection:this.suggestionAsAriaContent().toLowerCase()||this.props.value}):"";return x.default.createElement(x.default.Fragment,null,x.default.createElement("span",{className:De["sr-only"],role:"alert"},!this.state.typing&&this.state.editing&&`${d} ${p()}`),this.props.isMobile&&x.default.createElement(We,{searchOpen:n,appElement:this.props.appElement,clearOldSearches:this.clearOldSearches,id:this.props.id,clearInput:this.clearInput,value:this.state.value,suggestions:[...t,{type:"clear-search-history",labelId:j.default.t("clear-search-history")}],inputProps:Ke(Ke({},i),{},{placeholder:this.isOriginDestinationOrViapoint()?j.default.t("address-place-or-business"):i.placeholder}),fetchFunction:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,closeHandle:this.closeMobileSearch,ariaLabel:a.concat(" ").concat(r).concat(" ").concat(p()),label:this.props.mobileLabel?this.props.mobileLabel:j.default.t(this.props.id),onSuggestionSelected:this.onSelected,dialogHeaderText:j.default.t("delete-old-searches-header"),dialogPrimaryButtonText:j.default.t("delete"),dialogSecondaryButtonText:j.default.t("cancel"),clearInputButtonText:j.default.t("clear-button-label"),focusInput:o,color:this.props.color,hoverColor:this.props.hoverColor,accessiblePrimaryColor:this.props.accessiblePrimaryColor,fontWeights:this.props.fontWeights,showScroll:this.props.showScroll}),!n&&x.default.createElement("div",{className:M.default(De["autosuggest-input-container"],De[this.props.id]),style:{"--color":`${this.props.color}`,"--hover-color":`${this.props.hoverColor}`}},this.props.icon&&x.default.createElement("div",{className:M.default(De["autosuggest-input-icon"],De[this.props.id],this.props.inputClassName&&`${this.props.inputClassName}-input-icon`),"aria-label":a.concat(" ").concat(r).concat(" ").concat(j.default.t("search-autosuggest-label"))},x.default.createElement(V.default,{img:`${this.props.icon}`})),x.default.createElement(R.default,{alwaysRenderSuggestions:this.state.editing,id:this.props.id,suggestions:t,onSuggestionsFetchRequested:this.fetchFunction,onSuggestionsClearRequested:this.onSuggestionsClearRequested,getSuggestionValue:tt,renderSuggestion:this.renderItem,inputProps:Ke(Ke({},i),{},{onFocus:this.onFocus}),focusInputOnSuggestionClick:!0,shouldRenderSuggestions:()=>this.state.editing,highlightFirstSuggestion:!this.state.ownPlaces,theme:De,renderInputComponent:e=>x.default.createElement(x.default.Fragment,null,x.default.createElement("label",{className:De["sr-only"],htmlFor:this.props.id},p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c)),x.default.createElement("input",Object.assign({"aria-label":p().concat(" ").concat(a).concat(" ").concat(r).concat(" ").concat(c),id:this.props.id,onClick:this.inputClicked,onKeyDown:this.keyDown},e)),this.state.value&&this.clearButton()),onSuggestionSelected:this.onSelected,ref:this.storeInputReference})))}}G(nt,"defaultProps",{autoFocus:!1,className:"",icon:void 0,value:"",transportMode:void 0,filterResults:void 0,onClear:void 0,lang:"fi",storeRef:void 0,handleViaPoints:void 0,focusChange:void 0,getAutoSuggestIcons:void 0,sources:[],targets:void 0,isMobile:!1,isEmbedded:!1,geocodingSize:void 0,color:"#007ac9",hoverColor:"#0062a1",accessiblePrimaryColor:"#0074be",timeZone:"Europe/Helsinki",pathOpts:{routesPrefix:"linjat",stopsPrefix:"pysakit"},ariaLabel:void 0,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&&(nt.propTypes={appElement:O.default.string.isRequired,autoFocus:O.default.bool,className:O.default.string,icon:O.default.string,id:O.default.string.isRequired,placeholder:O.default.string.isRequired,translatedPlaceholder:O.default.string,value:O.default.string,searchContext:O.default.shape({URL_PELIAS:O.default.string,context:O.default.object,clearOldSearches:O.default.func,clearFutureRoutes:O.default.func}).isRequired,ariaLabel:O.default.string,onSelect:O.default.func.isRequired,transportMode:O.default.string,filterResults:O.default.func,geocodingSize:O.default.number,onClear:O.default.func,storeRef:O.default.func,handleViaPoints:O.default.func,focusChange:O.default.func,lang:O.default.string,sources:O.default.arrayOf(O.default.string),targets:O.default.arrayOf(O.default.string),isMobile:O.default.bool,color:O.default.string,hoverColor:O.default.string,accessiblePrimaryColor:O.default.string,timeZone:O.default.string,pathOpts:O.default.shape({routesPrefix:O.default.string,stopsPrefix:O.default.string}),mobileLabel:O.default.string,lock:O.default.func.isRequired,unlock:O.default.func.isRequired,refPoint:O.default.shape({address:O.default.string,lat:O.default.number,lon:O.default.number}),inputClassName:O.default.string,fontWeights:O.default.shape({medium:O.default.number}),modeIconColors:O.default.objectOf(O.default.string),getAutoSuggestIcons:O.default.objectOf(O.default.func),required:O.default.bool,modeSet:O.default.string,showScroll:O.default.bool,isEmbedded:O.default.bool});const ot=(it=nt,e=>{const{lock:t,unlock:n}=Qe.useScrollLock();return x.default.createElement(it,Object.assign({lock:t,unlock:n},e))});var it;e.default=ot,Object.defineProperty(e,"__esModule",{value:!0})}));
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90eXBlb2YuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9Qcm9wZXJ0eUtleS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS90b1ByaW1pdGl2ZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9kZWZpbmVQcm9wZXJ0eS5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWlzLWR1cGxpY2F0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1maWx0ZXItbWF0Y2hpbmctdG8taW5wdXQvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUvaW5kZXguanMiLCIuLi8uLi8uLi8uLi9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9wYWNrYWdlcy9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtanNvbi9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1nZW9jb2RpbmctcmVzdWx0cy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZS9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL3BhY2thZ2VzL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXVuaXEtYnktbGFiZWwvaW5kZXguanMiLCIuLi9zcmMvaGVscGVycy90cmFuc2xhdGlvbnMuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vc3JjL2hlbHBlcnMvTW9iaWxlU2VhcmNoLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0Boc2wtZmkvaG9va3MvbGliL2luZGV4LmpzIiwiLi4vc3JjL2luZGV4LmpzIiwiLi4vLi4vLi4vLi4vZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvcGFja2FnZXMvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWxhYmVsL2luZGV4LmpzIiwiLi4vc3JjL2hlbHBlcnMvd2l0aFNjcm9sbExvY2suanMiXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuaW1wb3J0IHRvUHJpbWl0aXZlIGZyb20gXCIuL3RvUHJpbWl0aXZlLmpzXCI7XG5mdW5jdGlvbiB0b1Byb3BlcnR5S2V5KHQpIHtcbiAgdmFyIGkgPSB0b1ByaW1pdGl2ZSh0LCBcInN0cmluZ1wiKTtcbiAgcmV0dXJuIFwic3ltYm9sXCIgPT0gX3R5cGVvZihpKSA/IGkgOiBpICsgXCJcIjtcbn1cbmV4cG9ydCB7IHRvUHJvcGVydHlLZXkgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCIvKipcbiAqICBhY2NlcHQgZXF1YWxpdHkgb2Ygbm9uIG51bGxpc2ggdmFsdWVzXG4gKlxuICogQG5hbWUgdHJ1RXFcbiAqIEBwYXJhbSB7Qm9vbGVhbnxOdW1iZXJ8QmlnSW50fFN0cmluZ3xTeW1ib2x8T2JqZWN0fSB2YWwxIEZpcnN0IHZhbHVlIHRvIGJlIGNvbXBhcmVkXG4gKiBAcGFyYW0ge0Jvb2xlYW58TnVtYmVyfEJpZ0ludHxTdHJpbmd8U3ltYm9sfE9iamVjdH0gcGFyYW0yIFNlY29uZCB2YWx1ZSB0byBiZSBjb21wYXJlZFxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLnRydUVxKCcyJywgJzInKTtcbiAqIC8vPXRydWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJ1RXEodmFsMSwgdmFsMikge1xuICByZXR1cm4gdmFsMSAmJiB2YWwyICYmIHZhbDEgPT09IHZhbDI7XG59XG4iLCJpbXBvcnQgdHJ1RXEgZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLXRydS1lcSc7XG4vKipcbiAqIENoZWNrcyB0aGF0IGlzIGl0ZW1zIGR1cGxpY2F0ZVxuICpcbiAqIEBuYW1lIGlzRHVwbGljYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gaXRlbTEgT2JqZWN0IGNvbnRhaW5pbmcgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG4gKiB7XG4gKiAgcHJvcGVydGllcyB7XG4gKiAgICAgIGd0ZnNJZDogU3RyaW5nXG4gKiAgICAgIGdpZDogU3RyaW5nIGZyb20gZ2VvY29kZXJcbiAqICAgICAgbmFtZTogU3RyaW5nXG4gKiAgICAgIGxhYmVsOiBTdHJpbmdcbiAqICAgICAgIGFkZHJlc3M6IFN0cmluZ1xuICogICAgICBnZW9tZXRyeSB7XG4gKiAgICAgICAgIGNvb3JkaW5hdGVzIFtOdW1iZXIgbGF0LCBOdW1iZXIgbG9uXVxuICogICAgICB9XG4gKiAgfVxuICogfVxuICogQHBhcmFtIHtPYmplY3R9IGl0ZW0yIE9iamVjdCB3aXRoIHNhbWUgYXR0cmlidXRlcyBhcyBpdGVtMVxuICogQHJldHVybnMge0Jvb2xlYW59IHRydWUvZmFsc2VcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmlzRHVwbGljYXRlKHBhcmFtMSwgcGFyYW0yKTtcbiAqIC8vPXRydWVcbiAqL1xuXG5jb25zdCBndGZzU3RvcExheWVycyA9IFsnc3RvcCcsICdzdGF0aW9uJywgJ2Zhdm91cml0ZVN0b3AnLCAnZmF2b3VyaXRlU3RhdGlvbiddO1xuY29uc3QgdmVoaWNsZVJlbnRhbExheWVycyA9IFsnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLCAnYmlrZXN0YXRpb24nXTtcblxuZnVuY3Rpb24gbGFiZWxJZFRvR2lkKGlkKSB7XG4gIGlmICghaWQpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgY29uc3QgcGFydHMgPSBpZC5zcGxpdCgnOicpO1xuICBpZiAocGFydHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBgY2l0eWJpa2VzJHtwYXJ0c1swXX06YmlrZXN0YXRpb246JHtwYXJ0c1sxXX1gO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0R1cGxpY2F0ZShpdGVtMSwgaXRlbTIpIHtcbiAgY29uc3QgcHJvcHMxID0gaXRlbTEucHJvcGVydGllcztcbiAgY29uc3QgcHJvcHMyID0gaXRlbTIucHJvcGVydGllcztcblxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyAmJiBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgY29uc3QgbzEgPSBwcm9wczEub3JpZ2luO1xuICAgIGNvbnN0IGQxID0gcHJvcHMxLmRlc3RpbmF0aW9uO1xuICAgIGNvbnN0IG8yID0gcHJvcHMyLm9yaWdpbjtcbiAgICBjb25zdCBkMiA9IHByb3BzMi5kZXN0aW5hdGlvbjtcblxuICAgIGNvbnN0IG5hbWUxID0gYCR7bzEubmFtZX0vLyR7bzEubG9jYWxhZG1pbn0vLyR7ZDEubmFtZX0vLyR7ZDEubG9jYWxhZG1pbn1gO1xuICAgIGNvbnN0IG5hbWUyID0gYCR7bzIubmFtZX0vLyR7bzIubG9jYWxhZG1pbn0vLyR7ZDIubmFtZX0vLyR7ZDIubG9jYWxhZG1pbn1gO1xuXG4gICAgcmV0dXJuIG5hbWUxID09PSBuYW1lMjtcbiAgfVxuICBpZiAoaXRlbTEudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJyB8fCBpdGVtMi50eXBlID09PSAnRnV0dXJlUm91dGUnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMS5sYXllcikgJiZcbiAgICB2ZWhpY2xlUmVudGFsTGF5ZXJzLmluY2x1ZGVzKHByb3BzMi5sYXllcilcbiAgKSB7XG4gICAgY29uc3QgaWQxID0gcHJvcHMxLmdpZCB8fCBsYWJlbElkVG9HaWQocHJvcHMxLmxhYmVsSWQpO1xuICAgIGNvbnN0IGlkMiA9IHByb3BzMi5naWQgfHwgbGFiZWxJZFRvR2lkKHByb3BzMi5sYWJlbElkKTtcbiAgICByZXR1cm4gaWQxID09PSBpZDI7XG4gIH1cbiAgaWYgKHByb3BzMS5ndGZzSWQgJiYgcHJvcHMyLmd0ZnNJZCkge1xuICAgIHJldHVybiBwcm9wczEuZ3Rmc0lkID09PSBwcm9wczIuZ3Rmc0lkO1xuICB9XG4gIGlmIChcbiAgICBndGZzU3RvcExheWVycy5pbmNsdWRlcyhwcm9wczEubGF5ZXIpICYmXG4gICAgZ3Rmc1N0b3BMYXllcnMuaW5jbHVkZXMocHJvcHMyLmxheWVyKSAmJlxuICAgIHByb3BzMS5naWQgJiZcbiAgICBwcm9wczIuZ2lkXG4gICkge1xuICAgIHJldHVybiBwcm9wczEuZ2lkID09PSBwcm9wczIuZ2lkO1xuICB9XG5cbiAgY29uc3QgcDEgPSBpdGVtMSAmJiBpdGVtMS5nZW9tZXRyeSA/IGl0ZW0xLmdlb21ldHJ5LmNvb3JkaW5hdGVzIDogdW5kZWZpbmVkO1xuICBjb25zdCBwMiA9IGl0ZW0yICYmIGl0ZW0yLmdlb21ldHJ5ID8gaXRlbTIuZ2VvbWV0cnkuY29vcmRpbmF0ZXMgOiB1bmRlZmluZWQ7XG5cbiAgaWYgKHAxICYmIHAyKSB7XG4gICAgLy8gYm90aCBoYXZlIGdlb21ldHJ5XG4gICAgaWYgKE1hdGguYWJzKHAxWzBdIC0gcDJbMF0pIDwgMWUtNiAmJiBNYXRoLmFicyhwMVsxXSAtIHAyWzFdKSA8IDFlLTYpIHtcbiAgICAgIC8vIGxvY2F0aW9uIG1hdGNoIGlzIG5vdCBlbm91Z2guIFJlcXVpcmUgYSBjb21tb24gcHJvcGVydHlcbiAgICAgIGlmIChcbiAgICAgICAgdHJ1RXEocHJvcHMxLm5hbWUsIHByb3BzMi5uYW1lKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5sYWJlbCkgfHxcbiAgICAgICAgdHJ1RXEocHJvcHMxLmFkZHJlc3MsIHByb3BzMi5hZGRyZXNzKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEuYWRkcmVzcywgcHJvcHMyLmxhYmVsKSB8fFxuICAgICAgICB0cnVFcShwcm9wczEubGFiZWwsIHByb3BzMi5hZGRyZXNzKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG4iLCJpbXBvcnQgaXNTdHJpbmcgZnJvbSAnbG9kYXNoL2lzU3RyaW5nJztcbmltcG9ydCBvcmRlckJ5IGZyb20gJ2xvZGFzaC9vcmRlckJ5JztcbmltcG9ydCB1bmlxV2l0aCBmcm9tICdsb2Rhc2gvdW5pcVdpdGgnO1xuaW1wb3J0IGlzRHVwbGljYXRlIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1pcy1kdXBsaWNhdGUnO1xuXG5jb25zdCBub3JtYWxpemUgPSBzdHIgPT4ge1xuICBpZiAoIWlzU3RyaW5nKHN0cikpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBMYXllclR5cGUgZGVwaWN0cyB0aGUgdHlwZSBvZiB0aGUgcG9pbnQtb2YtaW50ZXJlc3QuXG4gKi9cbmNvbnN0IExheWVyVHlwZSA9IHtcbiAgQWRkcmVzczogJ2FkZHJlc3MnLFxuICBCYWNrOiAnYmFjaycsXG4gIEN1cnJlbnRQb3NpdGlvbjogJ2N1cnJlbnRQb3NpdGlvbicsXG4gIEZhdm91cml0ZVN0b3A6ICdmYXZvdXJpdGVTdG9wJyxcbiAgRmF2b3VyaXRlU3RhdGlvbjogJ2Zhdm91cml0ZVN0YXRpb24nLFxuICBGYXZvdXJpdGVQbGFjZTogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgRmF2b3VyaXRlUm91dGU6ICdmYXZvdXJpdGVSb3V0ZScsXG4gIEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uOiAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nLFxuICBGdXR1cmVSb3V0ZTogJ2Z1dHVyZVJvdXRlJyxcbiAgU3RhdGlvbjogJ3N0YXRpb24nLFxuICBTZWxlY3RGcm9tTWFwOiAnc2VsZWN0RnJvbU1hcCcsXG4gIFNlbGVjdEZyb21Pd25Mb2NhdGlvbnM6ICdvd25Mb2NhdGlvbnMnLFxuICBTdG9wOiAnc3RvcCcsXG4gIFN0cmVldDogJ3N0cmVldCcsXG4gIFZlbnVlOiAndmVudWUnLFxuICBWZWhpY2xlUmVudGFsU3RhdGlvbjogJ2Jpa2VzdGF0aW9uJyxcbiAgQ2FyUGFyazogJ2NhcnBhcmsnLFxuICBCaWtlUGFyazogJ2Jpa2VwYXJrJyxcbn07XG5leHBvcnQgY29uc3QgaXNTdG9wID0gKHsgbGF5ZXIsIHR5cGUgfSkgPT5cbiAgbGF5ZXIgPT09ICdzdG9wJyB8fFxuICBsYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gIHR5cGUgPT09ICdzdG9wJyB8fFxuICB0eXBlID09PSAnZmF2b3VyaXRlU3RvcCc7XG5cbmNvbnN0IERFRkFVTFRfUk9VVEVTX1BSRUZJWCA9ICdsaW5qYXQnO1xuY29uc3QgREVGQVVMVF9TVE9QU19QUkVGSVggPSAncHlzYWtpdCc7XG5cbmV4cG9ydCBjb25zdCBtYXBSb3V0ZSA9IChpdGVtLCBwYXRoT3B0cykgPT4ge1xuICBpZiAoaXRlbSA9PT0gbnVsbCB8fCBpdGVtID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGNvbnN0IG9wdHMgPSBwYXRoT3B0cyB8fCB7fTtcblxuICBjb25zdCByb3V0ZXNQcmVmaXggPSBvcHRzLnJvdXRlc1ByZWZpeCB8fCBERUZBVUxUX1JPVVRFU19QUkVGSVg7XG4gIGNvbnN0IHN0b3BzUHJlZml4ID0gb3B0cy5zdG9wc1ByZWZpeCB8fCBERUZBVUxUX1NUT1BTX1BSRUZJWDtcblxuICBjb25zdCBsaW5rID0gYC8ke3JvdXRlc1ByZWZpeH0vJHtpdGVtLmd0ZnNJZH0vJHtzdG9wc1ByZWZpeH1gO1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdSb3V0ZScsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgLi4uaXRlbSxcbiAgICAgIGxheWVyOiBgcm91dGUtJHtpdGVtLm1vZGV9YCxcbiAgICAgIGxpbmssXG4gICAgfSxcbiAgICBnZW9tZXRyeToge1xuICAgICAgY29vcmRpbmF0ZXM6IG51bGwsXG4gICAgfSxcbiAgfTtcbn07XG5cbi8qKlxuICogVHJpZXMgdG8gbWF0Y2ggdGhlIGdpdmVuIHNlYXJjaCB0ZXJtIGFnYWlucyB0aGUgY29sbGVjdGlvbiBvZiBwcm9wZXJ0aWVzXG4gKiBmb3IgYSBnZW9jb2RpbmcgcmVzdWx0LiBUaGUgYmVzdCBtYXRjaCB3aWxsIGJlIHJldHVybmVkIChtaW46IDAsIG1heDogMS41KS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbm9ybWFsaXplZFRlcm0gdGhlIG5vcm1hbGl6ZWQgc2VhcmNoIHRlcm0uXG4gKiBAcGFyYW0geyp9IHJlc3VsdFByb3BlcnRpZXMgdGhlIGdlb2NvZGluZyByZXN1bHQncyBwcm9wZXJ0eSBjb2xsZWN0aW9uLlxuICovXG5leHBvcnQgY29uc3QgbWF0Y2ggPSAobm9ybWFsaXplZFRlcm0sIHJlc3VsdFByb3BlcnRpZXMpID0+IHtcbiAgaWYgKCFpc1N0cmluZyhub3JtYWxpemVkVGVybSkgfHwgbm9ybWFsaXplZFRlcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBjb25zdCBtYXRjaFByb3BzID0gWyduYW1lJywgJ2xhYmVsJywgJ2FkZHJlc3MnLCAnc2hvcnROYW1lJ107XG4gIHJldHVybiBtYXRjaFByb3BzXG4gICAgLm1hcChuYW1lID0+IHJlc3VsdFByb3BlcnRpZXNbbmFtZV0pXG4gICAgLmZpbHRlcih2YWx1ZSA9PiBpc1N0cmluZyh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID4gMClcbiAgICAubWFwKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IG5vcm1hbGl6ZSh2YWx1ZSk7XG4gICAgICBpZiAobm9ybWFsaXplZFZhbHVlLmluZGV4T2Yobm9ybWFsaXplZFRlcm0pID09PSAwKSB7XG4gICAgICAgIC8vIGZ1bGwgbWF0Y2ggYXQgc3RhcnQuIFJldHVybiBtYXggcmVzdWx0IHdoZW4gbWF0Y2ggaXMgZnVsbCwgbm90IG9ubHkgcGFydGlhbFxuICAgICAgICByZXR1cm4gMC41ICsgbm9ybWFsaXplZFRlcm0ubGVuZ3RoIC8gbm9ybWFsaXplZFZhbHVlLmxlbmd0aDtcbiAgICAgIH1cbiAgICAgIC8vIGJlY2F1c2Ugb2YgZmlsdGVybWF0Y2hpbmd0b2lucHV0LCB3ZSBrbm93IHRoYXQgbWF0Y2ggb2NjdXJyZWQgc29tZXdoZXJlXG4gICAgICAvLyBkb24ndCBydW4gZmlsdGVybWF0Y2hpbmcgYWdhaW4gYnV0IGVzdGltYXRlIHJvdWdobHk6XG4gICAgICAvLyB0aGUgbG9uZ2VyIHRoZSBtYXRjaGluZyBzdHJpbmcsIHRoZSBiZXR0ZXIgY29uZmlkZW5jZSwgbWF4IGJlaW5nIDAuNVxuICAgICAgcmV0dXJuICgwLjUgKiBub3JtYWxpemVkVGVybS5sZW5ndGgpIC8gKG5vcm1hbGl6ZWRUZXJtLmxlbmd0aCArIDEpO1xuICAgIH0pXG4gICAgLnJlZHVjZShcbiAgICAgIChwcmV2aW91cywgY3VycmVudCkgPT4gKGN1cnJlbnQgPiBwcmV2aW91cyA/IGN1cnJlbnQgOiBwcmV2aW91cyksXG4gICAgICAwLFxuICAgICk7XG59O1xuXG4vKipcbiAqIFJhbmtzIHRoZSByZXN1bHQgYmFzZWQgb24gaXRzIGxheWVyIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBsYXllciB0aGUgbGF5ZXIgcHJvcGVydHkuXG4gKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIHRoZSBzb3VyY2UgcHJvcGVydHkuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRMYXllclJhbmsgPSAobGF5ZXIsIHNvdXJjZSkgPT4ge1xuICBzd2l0Y2ggKGxheWVyKSB7XG4gICAgY2FzZSBMYXllclR5cGUuQ3VycmVudFBvc2l0aW9uOlxuICAgICAgcmV0dXJuIDE7XG4gICAgY2FzZSBMYXllclR5cGUuQmFjazpcbiAgICAgIHJldHVybiAwLjk7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU1hcDpcbiAgICAgIHJldHVybiAwLjg7XG4gICAgY2FzZSBMYXllclR5cGUuU2VsZWN0RnJvbU93bkxvY2F0aW9uczpcbiAgICAgIHJldHVybiAwLjc5O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZhdm91cml0ZVN0YXRpb246XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlUGxhY2U6XG4gICAgY2FzZSBMYXllclR5cGUuRmF2b3VyaXRlU3RvcDpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVSb3V0ZTpcbiAgICBjYXNlIExheWVyVHlwZS5GYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjQ1O1xuICAgIGNhc2UgTGF5ZXJUeXBlLkZ1dHVyZVJvdXRlOlxuICAgICAgcmV0dXJuIDAuNDQ7XG4gICAgY2FzZSBMYXllclR5cGUuU3RhdGlvbjoge1xuICAgICAgaWYgKGlzU3RyaW5nKHNvdXJjZSkgJiYgc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gMC40MztcbiAgICAgIH1cbiAgICAgIHJldHVybiAwLjQyO1xuICAgIH1cbiAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgcmV0dXJuIDAuMzg7XG4gICAgY2FzZSBMYXllclR5cGUuQmlrZVBhcms6XG4gICAgICByZXR1cm4gMC4zODtcbiAgICBjYXNlIExheWVyVHlwZS5WZWhpY2xlUmVudGFsU3RhdGlvbjpcbiAgICAgIHJldHVybiAwLjM4O1xuICAgIGNhc2UgTGF5ZXJUeXBlLlN0b3A6XG4gICAgICByZXR1cm4gMC4zNjtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gdmVudWUsIGFkZHJlc3MsIHN0cmVldCwgcm91dGUteHh4XG4gICAgICByZXR1cm4gMC40MTtcbiAgfVxufTtcblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc29ydCB0aGUgcmVzdWx0cy4gT3JkZXJzIGFzIGZvbGxvd3M6XG4gKiAgLSBjdXJyZW50IHBvc2l0aW9uIGZpcnN0IGZvciBhbiBlbXB0eSBzZWFyY2hcbiAqICAtIG1hdGNoaW5nIHJvdXRlcyBmaXJzdFxuICogIC0gb3RoZXJ3aXNlIGJ5IGNvbmZpZGVuY2UsIGV4Y2VwdCB0aGF0OlxuICogICAgLSBib29zdCB3ZWxsIG1hdGNoaW5nIHN0YXRpb25zIChlc3BlY2lhbGx5IGZyb20gR1RGUylcbiAqICAgIC0gcmFuayBzdG9wcyBsb3dlciBhcyB0aGV5IHRlbmQgdG8gb2NjdXB5IG1vc3Qgb2YgdGhlIHNlYXJjaCByZXN1bHRzXG4gKiAgLSBpdGVtcyB3aXRoIG5vIGNvbmZpZGVuY2UgKG9sZCBzZWFyY2hlcyBhbmQgZmF2b3JpdGVzKTpcbiAqICAgIC0gcmFuayBmYXZvdXJpdGVzIGJldHRlciB0aGFuIG9yZGluYXJ5IG9sZCBzZWFyY2hlc1xuICogICAgLSByYW5rIGZ1bGwgbWF0Y2ggYmV0dGVyIHRoYW4gcGFydGlhbCBtYXRjaFxuICogICAgLSByYW5rIG1hdGNoIGF0IG1pZGRsZSB3b3JkIGxvd2VyIHRoYW4gbWF0Y2ggYXQgdGhlIGJlZ2lubmluZ1xuICogICAgLSByYW5rIGJpa2UgcmVudGFsIHN0YXRpb25zIGxvd2VyXG4gKiBAcGFyYW0geypbXX0gcmVzdWx0cyBUaGUgc2VhcmNoIHJlc3VsdHMgdGhhdCB3ZXJlIHJlY2VpdmVkXG4gKiBAcGFyYW0ge1N0cmluZ30gdGVybSBUaGUgc2VhcmNoIHRlcm0gdGhhdCB3YXMgdXNlZFxuICovXG5leHBvcnQgY29uc3Qgc29ydFNlYXJjaFJlc3VsdHMgPSAobGluZVJlZ2V4cCwgcmVzdWx0cywgdGVybSA9ICcnKSA9PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRzKSkge1xuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIGNvbnN0IGlzTGluZUlkZW50aWZpZXIgPSB2YWx1ZSA9PlxuICAgIGlzU3RyaW5nKHZhbHVlKSAmJiBsaW5lUmVnZXhwICYmIGxpbmVSZWdleHAudGVzdCh2YWx1ZSk7XG5cbiAgY29uc3Qgbm9ybWFsaXplZFRlcm0gPSBub3JtYWxpemUodGVybSk7XG4gIGNvbnN0IGlzTGluZVNlYXJjaCA9IGlzTGluZUlkZW50aWZpZXIobm9ybWFsaXplZFRlcm0pO1xuXG4gIGNvbnN0IG9yZGVyZWRSZXN1bHRzID0gb3JkZXJCeShcbiAgICByZXN1bHRzLFxuICAgIFtcbiAgICAgIC8vIHJhbmsgbWF0Y2hpbmcgcm91dGVzIGJlc3RcbiAgICAgIHJlc3VsdCA9PlxuICAgICAgICBpc0xpbmVTZWFyY2ggJiZcbiAgICAgICAgaXNMaW5lSWRlbnRpZmllcihub3JtYWxpemUocmVzdWx0LnByb3BlcnRpZXMuc2hvcnROYW1lKSkgJiZcbiAgICAgICAgbm9ybWFsaXplKHJlc3VsdC5wcm9wZXJ0aWVzLnNob3J0TmFtZSkuaW5kZXhPZihub3JtYWxpemVkVGVybSkgPT09IDBcbiAgICAgICAgICA/IDFcbiAgICAgICAgICA6IDAsXG5cbiAgICAgIHJlc3VsdCA9PiB7XG4gICAgICAgIGNvbnN0IHsgY29uZmlkZW5jZSwgbGF5ZXIsIHNvdXJjZSB9ID0gcmVzdWx0LnByb3BlcnRpZXM7XG4gICAgICAgIGlmIChub3JtYWxpemVkVGVybS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBEb2luZyBzZWFyY2ggd2l0aCBlbXB0eSBzdHJpbmcuXG4gICAgICAgICAgLy8gTm8gY29uZmlkZW5jZSB0byBtYXRjaCwgc28gdXNlIHJhbmtlZCBvbGQgc2VhcmNoZXMgYW5kIGZhdm91cml0ZXNcbiAgICAgICAgICByZXR1cm4gZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbXVzdCBoYW5kbGUgYSBtaXh1cCBvZiBnZW9jb2RlciBzZWFyY2hlcyBhbmQgaXRlbXMgYWJvdmVcbiAgICAgICAgLy8gTm9ybWFsIGNvbmZpZGVuY2UgcmFuZ2UgZnJvbSBnZW9jb2RlciBpcyBhYm91dCAwLjMgLi4gMVxuICAgICAgICBpZiAoIWNvbmZpZGVuY2UpIHtcbiAgICAgICAgICAvLyBub3QgZnJvbSBnZW9jb2RlciwgZXN0aW1hdGUgY29uZmlkZW5jZSBvdXJzZWx2ZXNcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgZ2V0TGF5ZXJSYW5rKGxheWVyLCBzb3VyY2UpICtcbiAgICAgICAgICAgIG1hdGNoKG5vcm1hbGl6ZWRUZXJtLCByZXN1bHQucHJvcGVydGllcylcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdlb2NvZGVkIGl0ZW1zIHdpdGggY29uZmlkZW5jZSwganVzdCBhZGp1c3QgYSBsaXR0bGVcbiAgICAgICAgc3dpdGNoIChsYXllcikge1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlN0YXRpb246IHtcbiAgICAgICAgICAgIGNvbnN0IGJvb3N0ID0gc291cmNlLmluZGV4T2YoJ2d0ZnMnKSA9PT0gMCA/IDAuMDIgOiAwLjAxO1xuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgKyBib29zdDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBMYXllclR5cGUuU3RvcDpcbiAgICAgICAgICAgIHJldHVybiBjb25maWRlbmNlIC0gMC4wNTtcbiAgICAgICAgICBjYXNlIExheWVyVHlwZS5DYXJQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLkJpa2VQYXJrOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA1O1xuICAgICAgICAgIGNhc2UgTGF5ZXJUeXBlLlZlaGljbGVSZW50YWxTdGF0aW9uOlxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZGVuY2UgLSAwLjA0O1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gY29uZmlkZW5jZTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICBdLFxuICAgIFsnZGVzYycsICdkZXNjJ10sXG4gICk7XG5cbiAgcmV0dXJuIHVuaXFXaXRoKG9yZGVyZWRSZXN1bHRzLCBpc0R1cGxpY2F0ZSk7XG59O1xuXG4vKipcbiAqIFBhcnNlcyBzdG9wJ3MgbmFtZSB3aXRob3V0IHN0b3AgY29kZSBmcm9tIGEgc3RvcCBuYW1lIGZyb20gZ2VvY29kaW5nIHJlc3VsdHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgc3RvcCdzIG5hbWUgZnJvbSBnZW9jb2RpbmcgcmVzdWx0cy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBzdG9wQ29kZSBzdG9wIGNvZGUuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRTdG9wTmFtZSA9IChuYW1lLCBzdG9wQ29kZSkgPT4ge1xuICBpZiAoXG4gICAgc3RvcENvZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgIHN0b3BDb2RlICE9PSBudWxsICYmXG4gICAgbmFtZS5sYXN0SW5kZXhPZihzdG9wQ29kZSkgIT09IC0xXG4gICkge1xuICAgIHJldHVybiBuYW1lLnN1YnN0cmluZygwLCBuYW1lLmxhc3RJbmRleE9mKHN0b3BDb2RlKSAtIDEpO1xuICB9XG4gIHJldHVybiBuYW1lO1xufTtcbiIsImltcG9ydCBnZXQgZnJvbSAnbG9kYXNoL2dldCc7XG5cbi8qKlxuICogRnVuY3Rpb24gdGhhdCBmaWx0ZXJzIGxpc3QgbWF0Y2hpbmcgdG8gaW5wdXQuXG4gKlxuICogQG5hbWUgZmlsdGVyTWF0Y2hpbmdUb0lucHV0XG4gKiBAcGFyYW0ge0FycmF5fSBsaXN0IExpc3QgY29udGFpbmluIG9iamVjdHMgZS5nKCAge1xuICogICAgICAgICB0eXBlOiAnRmVhdHVyZSdcbiAqICAgICAgICAgcHJvcGVydGllczoge1xuICogICAgICAgICAgIGxhYmVsOiAndGVzdGFkZHJlc3M0JyxcbiAqICAgICAgICAgICBsYXllcjogJ2FkZHJlc3MnLFxuICogICAgICAgICAgIG5hbWU6ICd0ZXN0YWRkcmVzczQnLFxuICogICAgICAgICB9LFxuICogICAgICAgICBnZW9tZXRyeTogeyBjb29yZGluYXRlczogW2xvbiwgbGF0XSB9LFxuICogICAgICAgfSwpXG4gKiBAcGFyYW0ge1N0cmluZ30gSW5wdXQgSW5wdXQgZ2l2ZW4gZm9yIGZpbHRlcmluZyB0aGUgbGlzdFxuICogQHBhcmFtIHtBcnJheX0gZmllbGRzIExpc3Qgb2YgZmllbGRzIHRoYXQgbGlzdCBpcyBmaWx0ZXJlZCBieSBlLmcgKFtwcm9wZXJ0aWVzLmxhYmVsLCBwcm9wZXJ0aWVzLm5hbWVdKVxuICogQHJldHVybnMge0FycmF5fSBGaWx0ZXJlZCBBcnJheS5cbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC11dGlsLmZpbHRlck1hdGNoaW5nVG9JbnB1dChbe3R5cGU6IGZlYXR1cmUsIHByb3BlcnRpZXMgeyAuLi4gbmFtZTogdGVzdGFkZHJlc3M0IH0gLi4uIH1dLCAndGVzdGFkZHJlc3M0JywgJ3Byb3BlcnRpZXMubmFtZScpO1xuICogLy89IExpc3QgY29udGFpbmluZyBvYmplY3Qgd2l0aCBnaXZlbiBuYW1lLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQobGlzdCwgSW5wdXQsIGZpZWxkcykge1xuICBpZiAodHlwZW9mIElucHV0ID09PSAnc3RyaW5nJyAmJiBJbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgaW5wdXQgPSBJbnB1dC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICBjb25zdCBtdWx0aVdvcmQgPSBpbnB1dC5pbmNsdWRlcygnICcpIHx8IGlucHV0LmluY2x1ZGVzKCcsJyk7XG4gICAgcmV0dXJuIGxpc3QuZmlsdGVyKGl0ZW0gPT4ge1xuICAgICAgbGV0IHBhcnRzID0gW107XG4gICAgICBmaWVsZHMuZm9yRWFjaChwTmFtZSA9PiB7XG4gICAgICAgIGxldCB2YWx1ZSA9IGdldChpdGVtLCBwTmFtZSk7XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICFtdWx0aVdvcmQgJiZcbiAgICAgICAgICAocE5hbWUgPT09ICdwcm9wZXJ0aWVzLmxhYmVsJyB8fCBwTmFtZSA9PT0gJ2FkZHJlc3MnKSAmJlxuICAgICAgICAgIHZhbHVlXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZTogZHJvcCBsYXN0IHBhcnRzIGkuZS4gY2l0eSBhbmQgbmVpZ2hib3VyaG9vZFxuICAgICAgICAgIHZhbHVlID0gdmFsdWUuc3BsaXQoJywnKTtcbiAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDIsIDIpO1xuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgdmFsdWUuc3BsaWNlKHZhbHVlLmxlbmd0aCAtIDEsIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB2YWx1ZSA9IHZhbHVlLmpvaW4oJywnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICBpZiAobXVsdGlXb3JkKSB7XG4gICAgICAgICAgICBwYXJ0cyA9IHBhcnRzLmNvbmNhdCh2YWx1ZS50b0xvd2VyQ2FzZSgpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFydHMgPSBwYXJ0cy5jb25jYXQoXG4gICAgICAgICAgICAgIHZhbHVlLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvLC9nLCAnICcpLnNwbGl0KCcgJyksXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKGlucHV0KSA9PT0gMCkge1xuICAgICAgICAgIC8vIGFjY2VwdCBtYXRjaCBvbmx5IGF0IHdvcmQgc3RhcnRcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGxpc3Q7XG59XG4iLCIvKipcbiAqIFNlcmlhbGl6ZXMgb2JqZWN0c1xuICpcbiAqIEBuYW1lIHNlcmlhbGl6ZVxuICogQHBhcmFtIHtPYmplY3R9IG9iaiBPYmplY3QgdG8gYmUgc2VyaWFsaXplZFxuICogQHBhcmFtIHtBbnl9IHByZWZpeFxuICogQHJldHVybnMge1N0cmluZ30gU2VyaWFsaXplZCBvYmplY3RcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC5zZXJpYWxpemUocGFyYW0xLCBwYXJhbTIpO1xuICogLy89dHJ1ZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXJpYWxpemUob2JqLCBwcmVmaXgpIHtcbiAgaWYgKCFvYmopIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iailcbiAgICAubWFwKHAgPT4ge1xuICAgICAgY29uc3QgayA9IHByZWZpeCB8fCBwO1xuICAgICAgY29uc3QgdiA9IG9ialtwXTtcblxuICAgICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnb2JqZWN0J1xuICAgICAgICA/IHNlcmlhbGl6ZSh2LCBrKVxuICAgICAgICA6IGAke2VuY29kZVVSSUNvbXBvbmVudChrKX09JHtlbmNvZGVVUklDb21wb25lbnQodil9YDtcbiAgICB9KVxuICAgIC5qb2luKCcmJyk7XG59XG4iLCJpbXBvcnQgc2VyaWFsaXplIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1zZXJpYWxpemUnO1xuLyoqXG4gKiAgUmV0dXJuIFByb21pc2UgZm9yIGEgdXJsIGpzb24gZ2V0IHJlcXVlc3RcbiAqXG4gKiBAbmFtZSBnZXRKc29uXG4gKiBAcGFyYW0ge1N0cmluZ30gdXJsXG4gKiBAcGFyYW0ge0FycmF5fSBwYXJhbXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlc3BvbnNlXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0SnNvbihwYXJhbTEsIHBhcmFtMik7XG4gKiAvLz1yZXNwb25zZVxuICovXG5jb25zdCBheGlvcyA9IHJlcXVpcmUoJ2F4aW9zJykuZGVmYXVsdDtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SnNvbih1cmwsIHBhcmFtcykge1xuICByZXR1cm4gYXhpb3NcbiAgICAuZ2V0KFxuICAgICAgZW5jb2RlVVJJKHVybCkgK1xuICAgICAgICAocGFyYW1zXG4gICAgICAgICAgPyAodXJsLnNlYXJjaCgvXFw/LykgPT09IC0xID8gJz8nIDogJyYnKSArIHNlcmlhbGl6ZShwYXJhbXMpXG4gICAgICAgICAgOiAnJyksXG4gICAgICB7XG4gICAgICAgIHRpbWVvdXQ6IDEwMDAwLFxuICAgICAgICBtZXRob2Q6ICdHRVQnLFxuXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICBBY2NlcHQ6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgKVxuICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICByZXR1cm4gcmVzLmRhdGE7XG4gICAgfSk7XG59XG4iLCJpbXBvcnQgZ2V0SnNvbiBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZ2V0LWpzb24nO1xuXG5jb25zdCBERUZBVUxUX1BFTElBU19VUkwgPSAnaHR0cHM6Ly9hcGkuZGlnaXRyYW5zaXQuZmkvZ2VvY29kaW5nL3YxL3NlYXJjaCc7XG4vKipcbiAqIDxERVNDUklQVElPTj5cbiAqXG4gKiBAbmFtZSBnZXRHZW9jb2RpbmdSZXN1bHRzXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoUGFyYW1zIChPcHRpb25hbCkgUGFyYW1ldGVycyBhcHBlbmRlZCB0byB1cmwsIGJhc2ljYWxseSBib3ggLyBwb2x5Z29uIHRvIHJlc3RyaWN0IHNlYXJjaCBhcmVhXG4gKiBAcGFyYW0ge1N0cmluZ30gbGFuZyAoT3B0aW9uYWwpIHNlYXJjaCBsYW5ndWFnZVxuICogQHBhcmFtIHtPYmplY3R9IGZvY3VzUG9pbnQgKE9wdGlvbmFsKSBPd24gUG9zaXRpb24gKFBFTElBUyBBUEkpXG4gKiBAcGFyYW0ge1N0cmluZ30gc291cmNlcyAoT3B0aW9uYWwpIHNlYXJjaCBzb3VyY2VzIChlLmcgT1NNLCBHVEZTLi4pXG4gKiBAcGFyYW0ge09iamVjdH0gbWluaW1hbFJlZ2V4cCAoT3B0aW9uYWwpIFJlZ2V4cCBmb3IgdGVzdGluZ1xuICogQHBhcmFtIHsqfSBnZW9jb2RpbmdMYXllcnMgKE9wdGlvbmFsKSBBcnJheSBvZiBzdHJpbmdzIHRoYXQgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hpY2ggbGF5ZXJzIGlzIHNlYXJjaGVkLCBlLmcuIFsndmVudWUnLCAnYWRkcmVzcycsICdzdG9wJ11cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFJlc3VsdHMgaW4gSlNPTiBmb3JtXG4gKiBAZXhhbXBsZVxuICogZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwuZ2V0R2VvY29kaW5nUmVzdWx0cyhcInJlc3VsdFwiKTtcbiAqIC8vPSBlLmcuIHt0ZXh0OlwicmVzdWx0XCJ9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEdlb2NvZGluZ1Jlc3VsdHMoXG4gIHNlYXJjaFN0cmluZyxcbiAgc2VhcmNoUGFyYW1zLFxuICBsYW5nLFxuICBmb2N1c1BvaW50LFxuICBzb3VyY2VzLFxuICBwZWxpYXNVcmwsXG4gIG1pbmltYWxSZWdleHAsXG4gIGdlb2NvZGluZ0xheWVycyxcbikge1xuICBjb25zdCB0ZXh0ID0gc2VhcmNoU3RyaW5nID8gc2VhcmNoU3RyaW5nLnRyaW0oKSA6IG51bGw7XG4gIGlmIChcbiAgICB0ZXh0ID09PSB1bmRlZmluZWQgfHxcbiAgICB0ZXh0ID09PSBudWxsIHx8XG4gICAgdGV4dC5sZW5ndGggPCAxIHx8XG4gICAgKG1pbmltYWxSZWdleHAgJiYgIW1pbmltYWxSZWdleHAudGVzdCh0ZXh0KSlcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG4gIH1cbiAgY29uc3QgUEVMSUFTX1VSTCA9IHBlbGlhc1VybCB8fCBERUZBVUxUX1BFTElBU19VUkw7XG4gIGxldCBvcHRzID0geyB0ZXh0LCAuLi5zZWFyY2hQYXJhbXMsIC4uLmZvY3VzUG9pbnQsIGxhbmcgfTtcbiAgaWYgKHNvdXJjZXMpIHtcbiAgICBvcHRzID0geyAuLi5vcHRzLCBzb3VyY2VzIH07XG4gIH1cbiAgaWYgKGdlb2NvZGluZ0xheWVycykge1xuICAgIGNvbnN0IGxheWVycyA9IGdlb2NvZGluZ0xheWVycy50b1N0cmluZygpO1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGxheWVycyB9O1xuICB9XG4gIHJldHVybiBnZXRKc29uKFBFTElBU19VUkwsIG9wdHMpLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzO1xuICB9KTtcbn1cbiIsImltcG9ydCBkZWJvdW5jZSBmcm9tICdsb2Rhc2gvZGVib3VuY2UnO1xuaW1wb3J0IGZsYXR0ZW4gZnJvbSAnbG9kYXNoL2ZsYXR0ZW4nO1xuaW1wb3J0IHRha2UgZnJvbSAnbG9kYXNoL3Rha2UnO1xuaW1wb3J0IHtcbiAgc29ydFNlYXJjaFJlc3VsdHMsXG4gIGlzU3RvcCxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGZpbHRlck1hdGNoaW5nVG9JbnB1dCBmcm9tICdAZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwvZGlnaXRyYW5zaXQtc2VhcmNoLXV0aWwtZmlsdGVyLW1hdGNoaW5nLXRvLWlucHV0JztcbmltcG9ydCBnZXRHZW9jb2RpbmdSZXN1bHRzIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtZ2VvY29kaW5nLXJlc3VsdHMnO1xuaW1wb3J0IGdldEpzb24gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWdldC1qc29uJztcblxuZnVuY3Rpb24gZ2V0U3RvcHNGcm9tR2VvY29kaW5nKHN0b3BzLCBVUkxfUEVMSUFTX1BMQUNFKSB7XG4gIGlmICghc3RvcHMgfHwgc3RvcHMubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuICB9XG4gIGxldCBnaWRzID0gJyc7XG4gIGNvbnN0IHN0b3BzV2l0aEdpZHMgPSBzdG9wcy5tYXAoc3RvcCA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHN0b3AudHlwZSA9PT0gJ3N0b3AnID8gJ3N0b3AnIDogJ3N0YXRpb24nO1xuICAgIGxldCBnaWQgPSBgZ3RmcyR7c3RvcC5ndGZzSWQuc3BsaXQoJzonKVswXS50b0xvd2VyQ2FzZSgpfToke3R5cGV9OkdURlM6JHtcbiAgICAgIHN0b3AuZ3Rmc0lkXG4gICAgfWA7XG4gICAgaWYgKHN0b3AuY29kZSkge1xuICAgICAgZ2lkICs9IGAjJHtzdG9wLmNvZGV9YDtcbiAgICB9XG4gICAgZ2lkcyArPSBgJHtnaWR9LGA7XG4gICAgcmV0dXJuIHsgLi4uc3RvcCwgZ2lkIH07XG4gIH0pO1xuICBjb25zdCBzdG9wU3RhdGlvbk1hcCA9IHN0b3BzV2l0aEdpZHMucmVkdWNlKGZ1bmN0aW9uIHJlZHUoXG4gICAgbWFwLFxuICAgIHN0b3BPclN0YXRpb24sXG4gICkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIG1hcFtzdG9wT3JTdGF0aW9uLmdpZF0gPSBzdG9wT3JTdGF0aW9uO1xuICAgIHJldHVybiBtYXA7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIGdldEpzb24oVVJMX1BFTElBU19QTEFDRSwge1xuICAgIGlkczogZ2lkcy5zbGljZSgwLCAtMSksXG4gICAgLy8gbGFuZzogY29udGV4dC5nZXRTdG9yZSgnUHJlZmVyZW5jZXNTdG9yZScpLmdldExhbmd1YWdlKCksIFRPRE8gZW5hYmxlIHRoaXMgd2hlbiBPVFAgc3VwcG9ydHMgdHJhbnNsYXRpb25zXG4gIH0pLnRoZW4ocmVzID0+IHtcbiAgICByZXR1cm4gcmVzLmZlYXR1cmVzLm1hcChzdG9wID0+IHtcbiAgICAgIGNvbnN0IGZhdm91cml0ZSA9IHtcbiAgICAgICAgdHlwZTogJ0Zhdm91cml0ZVN0b3AnLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgYWRkZW5kdW06IHN0b3AucHJvcGVydGllcy5hZGRlbmR1bSxcbiAgICAgICAgICBnaWQ6IHN0b3BTdGF0aW9uTWFwW3N0b3AucHJvcGVydGllcy5naWRdLmdpZCxcbiAgICAgICAgICBjb2RlOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5jb2RlLFxuICAgICAgICAgIGd0ZnNJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZ3Rmc0lkLFxuICAgICAgICAgIGxhc3RVcGRhdGVkOiBzdG9wU3RhdGlvbk1hcFtzdG9wLnByb3BlcnRpZXMuZ2lkXS5sYXN0VXBkYXRlZCxcbiAgICAgICAgICBmYXZvdXJpdGVJZDogc3RvcFN0YXRpb25NYXBbc3RvcC5wcm9wZXJ0aWVzLmdpZF0uZmF2b3VyaXRlSWQsXG4gICAgICAgICAgYWRkcmVzczogc3RvcC5wcm9wZXJ0aWVzLmxhYmVsLFxuICAgICAgICAgIGxheWVyOiBpc1N0b3Aoc3RvcC5wcm9wZXJ0aWVzKSA/ICdmYXZvdXJpdGVTdG9wJyA6ICdmYXZvdXJpdGVTdGF0aW9uJyxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHN0b3AuZ2VvbWV0cnksXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZhdm91cml0ZTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMoZmF2b3VyaXRlcywgaW5wdXQpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQoZmF2b3VyaXRlcywgaW5wdXQsIFsnYWRkcmVzcycsICduYW1lJ10pLm1hcChpdGVtID0+ICh7XG4gICAgICB0eXBlOiAnRmF2b3VyaXRlUGxhY2UnLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICBsYWJlbDogaXRlbS5uYW1lLFxuICAgICAgICBsYXllcjogJ2Zhdm91cml0ZVBsYWNlJyxcbiAgICAgIH0sXG4gICAgICBnZW9tZXRyeTogeyB0eXBlOiAnUG9pbnQnLCBjb29yZGluYXRlczogW2l0ZW0ubG9uLCBpdGVtLmxhdF0gfSxcbiAgICB9KSksXG4gICk7XG59XG5mdW5jdGlvbiBzZWxlY3RQb3NpdGlvbkZvbU1hcChpbnB1dCkge1xuICBpZiAodHlwZW9mIGlucHV0ICE9PSAnc3RyaW5nJyB8fCBpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogJ1NlbGVjdEZyb21NYXAnLFxuICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgbG9uOiBudWxsLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3NlbGVjdC1mcm9tLW1hcCcsXG4gICAgICAgICAgbGF5ZXI6ICdzZWxlY3RGcm9tTWFwJyxcbiAgICAgICAgICBhZGRyZXNzOiAnU2VsZWN0RnJvbU1hcCcsXG4gICAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgfSxcbiAgICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgICB0eXBlOiAnUG9pbnQnLFxuICAgICAgICAgIGNvb3JkaW5hdGVzOiBbXSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgXSk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGlmICh0eXBlb2YgaW5wdXQgIT09ICdzdHJpbmcnIHx8IGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW1xuICAgICAge1xuICAgICAgICB0eXBlOiAnQ3VycmVudExvY2F0aW9uJyxcbiAgICAgICAgYWRkcmVzczogcG9zaXRpb24uYWRkcmVzcyxcbiAgICAgICAgbGF0OiBwb3NpdGlvbi5sYXQsXG4gICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgbGFiZWxJZDogJ3VzZS1vd24tcG9zaXRpb24nLFxuICAgICAgICAgIGxheWVyOiAnY3VycmVudFBvc2l0aW9uJyxcbiAgICAgICAgICBhZGRyZXNzOiBwb3NpdGlvbi5hZGRyZXNzLFxuICAgICAgICAgIGxhdDogcG9zaXRpb24ubGF0LFxuICAgICAgICAgIGxvbjogcG9zaXRpb24ubG9uLFxuICAgICAgICB9LFxuICAgICAgICBnZW9tZXRyeToge1xuICAgICAgICAgIHR5cGU6ICdQb2ludCcsXG4gICAgICAgICAgY29vcmRpbmF0ZXM6IFtwb3NpdGlvbi5sb24sIHBvc2l0aW9uLmxhdF0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdEZyb21Pd25Mb2NhdGlvbnMoaW5wdXQpIHtcbiAgaWYgKHR5cGVvZiBpbnB1dCAhPT0gJ3N0cmluZycgfHwgaW5wdXQubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyxcbiAgICAgICAgYWRkcmVzczogJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICBsYXQ6IG51bGwsXG4gICAgICAgIGxvbjogbnVsbCxcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIGxhYmVsSWQ6ICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJyxcbiAgICAgICAgICBsYXllcjogJ293bkxvY2F0aW9ucycsXG4gICAgICAgICAgYWRkcmVzczogJ3NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnLFxuICAgICAgICAgIGxhdDogbnVsbCxcbiAgICAgICAgICBsb246IG51bGwsXG4gICAgICAgIH0sXG4gICAgICAgIGdlb21ldHJ5OiB7XG4gICAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgICBjb29yZGluYXRlczogW10sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xufVxuXG5mdW5jdGlvbiBnZXRCYWNrU3VnZ2VzdGlvbigpIHtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShbXG4gICAge1xuICAgICAgdHlwZTogJ2JhY2snLFxuICAgICAgYWRkcmVzczogJ2JhY2snLFxuICAgICAgbGF0OiBudWxsLFxuICAgICAgbG9uOiBudWxsLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBsYWJlbElkOiAnYmFjaycsXG4gICAgICAgIGxheWVyOiAnYmFjaycsXG4gICAgICAgIGFkZHJlc3M6ICdiYWNrJyxcbiAgICAgICAgbGF0OiBudWxsLFxuICAgICAgICBsb246IG51bGwsXG4gICAgICB9LFxuICAgICAgZ2VvbWV0cnk6IHtcbiAgICAgICAgdHlwZTogJ1BvaW50JyxcbiAgICAgICAgY29vcmRpbmF0ZXM6IFtdLFxuICAgICAgfSxcbiAgICB9LFxuICBdKTtcbn1cblxuZnVuY3Rpb24gZmlsdGVyRmF2b3VyaXRlU3RvcHMoc3RvcHNBbmRTdGF0aW9ucywgaW5wdXQsIHVzZVN0b3BzLCB1c2VTdGF0aW9ucykge1xuICByZXR1cm4gc3RvcHNBbmRTdGF0aW9ucy50aGVuKHN0b3BzU3RhdGlvbnMgPT4ge1xuICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSBzdG9wc1N0YXRpb25zLmZpbHRlcihzID0+XG4gICAgICBzLnR5cGUgPT09ICdzdG9wJyA/IHVzZVN0b3BzIDogdXNlU3RhdGlvbnMsXG4gICAgKTtcbiAgICByZXR1cm4gZmlsdGVyTWF0Y2hpbmdUb0lucHV0KGNhbmRpZGF0ZXMsIGlucHV0LCBbXG4gICAgICAncHJvcGVydGllcy5uYW1lJyxcbiAgICAgICdwcm9wZXJ0aWVzLm5hbWUnLFxuICAgICAgJ3Byb3BlcnRpZXMuYWRkcmVzcycsXG4gICAgXSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBmaWx0ZXJPbGRTZWFyY2hlcyhvbGRTZWFyY2hlcywgaW5wdXQsIGRyb3BMYXllcnMpIHtcbiAgbGV0IG1hdGNoaW5nT2xkU2VhcmNoZXMgPSBmaWx0ZXJNYXRjaGluZ1RvSW5wdXQob2xkU2VhcmNoZXMsIGlucHV0LCBbXG4gICAgJ3Byb3BlcnRpZXMubmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubGFiZWwnLFxuICAgICdwcm9wZXJ0aWVzLmFkZHJlc3MnLFxuICAgICdwcm9wZXJ0aWVzLnNob3J0TmFtZScsXG4gICAgJ3Byb3BlcnRpZXMubG9uZ05hbWUnLFxuICBdKTtcbiAgaWYgKGRyb3BMYXllcnMpIHtcbiAgICAvLyBkb24ndCB3YW50IHRoZXNlXG4gICAgbWF0Y2hpbmdPbGRTZWFyY2hlcyA9IG1hdGNoaW5nT2xkU2VhcmNoZXMuZmlsdGVyKFxuICAgICAgaXRlbSA9PiAhZHJvcExheWVycy5pbmNsdWRlcyhpdGVtLnByb3BlcnRpZXMubGF5ZXIpLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShcbiAgICB0YWtlKG1hdGNoaW5nT2xkU2VhcmNoZXMsIDEwKS5tYXAoaXRlbSA9PiB7XG4gICAgICBjb25zdCBuZXdJdGVtID0ge1xuICAgICAgICAuLi5pdGVtLFxuICAgICAgICB0eXBlOiAnT2xkU2VhcmNoJyxcbiAgICAgICAgdGltZXRhYmxlQ2xpY2tlZDogZmFsc2UsIC8vIHJlc2V0IGxhdGVzdCBzZWxlY3Rpb24gYWN0aW9uXG4gICAgICAgIGFycm93Q2xpY2tlZDogZmFsc2UsXG4gICAgICB9O1xuICAgICAgZGVsZXRlIG5ld0l0ZW0ucHJvcGVydGllcy5jb25maWRlbmNlO1xuICAgICAgcmV0dXJuIG5ld0l0ZW07XG4gICAgfSksXG4gICk7XG59XG5cbmZ1bmN0aW9uIGhhc0Zhdm91cml0ZXMoc2VhcmNoQ29udGV4dCkge1xuICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBzZWFyY2hDb250ZXh0LmdldEZhdm91cml0ZUxvY2F0aW9ucyhcbiAgICBzZWFyY2hDb250ZXh0LmNvbnRleHQsXG4gICk7XG4gIGlmIChmYXZvdXJpdGVMb2NhdGlvbnM/Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyA9XG4gICAgc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoc2VhcmNoQ29udGV4dC5jb250ZXh0KTtcbiAgaWYgKGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucz8ubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGZhdm91cml0ZVN0b3BzID0gc2VhcmNoQ29udGV4dC5nZXRGYXZvdXJpdGVTdG9wcyhzZWFyY2hDb250ZXh0LmNvbnRleHQpO1xuICByZXR1cm4gZmF2b3VyaXRlU3RvcHM/Lmxlbmd0aCA+IDA7XG59XG5cbmNvbnN0IHJvdXRlTGF5ZXJzID0gW1xuICAncm91dGUtVFJBTScsXG4gICdyb3V0ZS1CVVMnLFxuICAncm91dGUtUkFJTCcsXG4gICdyb3V0ZS1GRVJSWScsXG4gICdyb3V0ZS1TVUJXQVknLFxuICAncm91dGUtQUlSUExBTkUnLFxuICAncm91dGUtRlVOSUNVTEFSJyxcbl07XG5jb25zdCBsb2NhdGlvbkxheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbmNvbnN0IHBhcmtpbmdMYXllcnMgPSBbJ2NhcnBhcmsnLCAnYmlrZXBhcmsnXTtcbmNvbnN0IHN0b3BMYXllcnMgPSBbJ3N0b3AnLCAnc3RhdGlvbiddO1xuXG4vKipcbiAqIEV4ZWN1dGVzIHRoZSBzZWFyY2hcbiAqXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZWFyY2hSZXN1bHRzKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICB7IGlucHV0IH0sXG4gIGNhbGxiYWNrLFxuICBwYXRoT3B0cyxcbiAgcmVmUG9pbnQsXG4pIHtcbiAgY29uc3Qge1xuICAgIGdldFBvc2l0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVMb2NhdGlvbnMsXG4gICAgZ2V0T2xkU2VhcmNoZXMsXG4gICAgZ2V0RmF2b3VyaXRlU3RvcHMsXG4gICAgcGFya2luZ0FyZWFTb3VyY2VzLFxuICAgIGdldExhbmd1YWdlLFxuICAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5LFxuICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9ucyxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeSxcbiAgICBnZXRGYXZvdXJpdGVSb3V0ZXMsXG4gICAgZ2V0Um91dGVzUXVlcnksXG4gICAgY29udGV4dCxcbiAgICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGxvY2F0aW9uQXdhcmUsXG4gICAgbWluaW1hbFJlZ2V4cCxcbiAgICBsaW5lUmVnZXhwLFxuICAgIFVSTF9QRUxJQVMsXG4gICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICBmZWVkSURzLFxuICAgIGdlb2NvZGluZ1NlYXJjaFBhcmFtcyxcbiAgICBnZW9jb2RpbmdTb3VyY2VzLFxuICAgIGdldEZ1dHVyZVJvdXRlcyxcbiAgICBjaXR5QmlrZU5ldHdvcmtzLFxuICB9ID0gc2VhcmNoQ29udGV4dDtcbiAgLy8gaWYgbm8gdGFyZ2V0cyBhcmUgcHJvdmlkZWQsIHNlYXJjaCB0aGVtIGFsbC5cbiAgY29uc3QgYWxsVGFyZ2V0cyA9ICF0YXJnZXRzIHx8IHRhcmdldHMubGVuZ3RoID09PSAwO1xuICAvLyBpZiBubyBzb3VyY2VzIGFyZSBwcm92aWRlZCwgdXNlIHRoZW0gYWxsLlxuICBjb25zdCBhbGxTb3VyY2VzID0gIXNvdXJjZXMgfHwgc291cmNlcy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IHBvc2l0aW9uID0gZ2V0UG9zaXRpb25zKGNvbnRleHQpO1xuICBjb25zdCBzZWFyY2hDb21wb25lbnRzID0gW107XG4gIGNvbnN0IHNlYXJjaGVzID0geyB0eXBlOiAnYWxsJywgdGVybTogaW5wdXQsIHJlc3VsdHM6IFtdIH07XG4gIGNvbnN0IGxhbmd1YWdlID0gZ2V0TGFuZ3VhZ2UoY29udGV4dCk7XG4gIGNvbnN0IGZvY3VzUG9pbnQgPVxuICAgIGxvY2F0aW9uQXdhcmUgJiYgcmVmUG9pbnQ/LmxhdCAmJiByZWZQb2ludD8ubG9uXG4gICAgICA/IHtcbiAgICAgICAgICAvLyBSb3VuZCBjb29yZGluYXRlcyB0byBhcHByb3ggMSBrbSwgaW4gb3JkZXIgdG8gaW1wcm92ZSBjYWNoaW5nXG4gICAgICAgICAgJ2ZvY3VzLnBvaW50LmxhdCc6IHJlZlBvaW50LmxhdC50b0ZpeGVkKDMpLFxuICAgICAgICAgICdmb2N1cy5wb2ludC5sb24nOiByZWZQb2ludC5sb24udG9GaXhlZCgzKSxcbiAgICAgICAgfVxuICAgICAgOiB7fTtcbiAgY29uc3QgbW9kZSA9IHRyYW5zcG9ydE1vZGUgPyB0cmFuc3BvcnRNb2RlLnNwbGl0KCctJylbMV0gOiB1bmRlZmluZWQ7XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdDdXJyZW50UG9zaXRpb24nKSAmJlxuICAgIHBvc2l0aW9uLnN0YXR1cyAhPT0gJ2dlb2xvY2F0aW9uLW5vdC1zdXBwb3J0ZWQnXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRDdXJyZW50UG9zaXRpb25JZkVtcHR5KGlucHV0LCBwb3NpdGlvbikpO1xuICB9XG4gIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ01hcFBvc2l0aW9uJykpIHtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goc2VsZWN0UG9zaXRpb25Gb21NYXAoaW5wdXQpKTtcbiAgfVxuICBpZiAodGFyZ2V0cy5pbmNsdWRlcygnRnV0dXJlUm91dGVzJykpIHtcbiAgICBjb25zdCBpdGVtcyA9IGdldEZ1dHVyZVJvdXRlcyhjb250ZXh0KTtcbiAgICBzZWFyY2hDb21wb25lbnRzLnB1c2godGFrZShpdGVtcywgMykpO1xuICB9XG4gIGlmIChcbiAgICB0YXJnZXRzLmluY2x1ZGVzKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJykgJiZcbiAgICBoYXNGYXZvdXJpdGVzKHNlYXJjaENvbnRleHQpXG4gICkge1xuICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChzZWxlY3RGcm9tT3duTG9jYXRpb25zKGlucHV0KSk7XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJykpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWRlc3RydWN0dXJpbmdcbiAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7XG4gICAgaWYgKHNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICBjb25zdCBmYXZvdXJpdGVMb2NhdGlvbnMgPSBnZXRGYXZvdXJpdGVMb2NhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlckZhdm91cml0ZUxvY2F0aW9ucyhmYXZvdXJpdGVMb2NhdGlvbnMsIGlucHV0KSxcbiAgICAgICk7XG4gICAgICBpZiAoc291cmNlcy5pbmNsdWRlcygnQmFjaycpKSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChnZXRCYWNrU3VnZ2VzdGlvbigpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsndmVudWUnLCAnYWRkcmVzcycsICdzdHJlZXQnXTtcbiAgICAgIGlmICh0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgIGdlb2NvZGluZ0xheWVycy5wdXNoKCdzdGF0aW9uJyk7IC8vIHNlYXJjaCBzdGF0aW9ucyBmcm9tIE9TTVxuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGdlb2NvZGluZ1NvdXJjZXMuam9pbignLCcpLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IGxvY2F0aW9uSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQsICdlbmRwb2ludCcpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5zdG9wTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKGxvY2F0aW9uSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgaWYgKGFsbFRhcmdldHMgfHwgdGFyZ2V0cy5pbmNsdWRlcygnUGFya2luZ0FyZWFzJykpIHtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdEYXRhc291cmNlJykpIHtcbiAgICAgIGNvbnN0IHNlYXJjaFBhcmFtcyA9IGdlb2NvZGluZ1NlYXJjaFBhcmFtcztcbiAgICAgIGlmIChnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5zaXplID0gZ2VvY29kaW5nU2l6ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGdlb2NvZGluZ0xheWVycyA9IFsnY2FycGFyaycsICdiaWtlcGFyayddO1xuICAgICAgY29uc3QgZmVlZElkcyA9IHBhcmtpbmdBcmVhU291cmNlcyA/IHBhcmtpbmdBcmVhU291cmNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRJZHMsXG4gICAgICAgICAgVVJMX1BFTElBUyxcbiAgICAgICAgICBtaW5pbWFsUmVnZXhwLFxuICAgICAgICAgIGdlb2NvZGluZ0xheWVycyxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWydiaWtlc3RhdGlvbiddO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnN0b3BMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goZmlsdGVyT2xkU2VhcmNoZXMoaGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCB1c2VTdG9wcyA9IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJyk7XG4gIGNvbnN0IHVzZVN0YXRpb25zID0gdGFyZ2V0cy5pbmNsdWRlcygnU3RhdGlvbnMnKTtcblxuICBpZiAoYWxsVGFyZ2V0cyB8fCB1c2VTdG9wcyB8fCB1c2VTdGF0aW9ucykge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlU3RvcHMgPSBnZXRGYXZvdXJpdGVTdG9wcyhjb250ZXh0KTtcbiAgICAgIGxldCBzdG9wc0FuZFN0YXRpb25zO1xuICAgICAgaWYgKGZhdm91cml0ZVN0b3BzLmV2ZXJ5KHN0b3AgPT4gc3RvcC50eXBlID09PSAnc3RhdGlvbicpKSB7XG4gICAgICAgIHN0b3BzQW5kU3RhdGlvbnMgPSBnZXRTdG9wc0Zyb21HZW9jb2RpbmcoXG4gICAgICAgICAgZmF2b3VyaXRlU3RvcHMsXG4gICAgICAgICAgVVJMX1BFTElBU19QTEFDRSxcbiAgICAgICAgKS50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJSZXN1bHRzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RvcHNBbmRTdGF0aW9ucyA9IGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5KGZhdm91cml0ZVN0b3BzKVxuICAgICAgICAgIC50aGVuKGZhdm91cml0ZXMgPT5cbiAgICAgICAgICAgIGdldFN0b3BzRnJvbUdlb2NvZGluZyhmYXZvdXJpdGVzLCBVUkxfUEVMSUFTX1BMQUNFKSxcbiAgICAgICAgICApXG4gICAgICAgICAgLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyUmVzdWx0cyhyZXN1bHRzLCBtb2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBmaWx0ZXJGYXZvdXJpdGVTdG9wcyhzdG9wc0FuZFN0YXRpb25zLCBpbnB1dCwgdXNlU3RvcHMsIHVzZVN0YXRpb25zKSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0RhdGFzb3VyY2UnKSkge1xuICAgICAgY29uc3QgZ2VvY29kaW5nTGF5ZXJzID0gW107XG4gICAgICBpZiAodXNlU3RvcHMpIHtcbiAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLnB1c2goJ3N0b3AnKTtcbiAgICAgIH1cbiAgICAgIGlmICh1c2VTdGF0aW9ucykge1xuICAgICAgICBnZW9jb2RpbmdMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID1cbiAgICAgICAgZ2VvY29kaW5nU2l6ZSAmJiBnZW9jb2RpbmdTaXplICE9PSAxMCA/IHsgc2l6ZTogZ2VvY29kaW5nU2l6ZSB9IDoge307XG4gICAgICBpZiAoZ2VvY29kaW5nU2VhcmNoUGFyYW1zICYmIGdlb2NvZGluZ1NlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtc1snYm91bmRhcnkuY291bnRyeSddID1cbiAgICAgICAgICBnZW9jb2RpbmdTZWFyY2hQYXJhbXNbJ2JvdW5kYXJ5LmNvdW50cnknXTtcbiAgICAgIH1cbiAgICAgIC8vIGEgbGl0dGxlIGhhY2s6IHdoZW4gc2VhcmNoaW5nIGxvY2F0aW9uIGRhdGEsIGF1dG9tYXRpY2FsbHkgZGVkdXBlIHN0b3BzXG4gICAgICAvLyB0aGlzIGNvdWxkIGJlIGEgbmV3IGV4cGxpY2l0IHByb3BcbiAgICAgIGlmIChhbGxUYXJnZXRzIHx8IHRhcmdldHMuaW5jbHVkZXMoJ0xvY2F0aW9ucycpKSB7XG4gICAgICAgIHNlYXJjaFBhcmFtcy5kZWR1cGVzdG9wcyA9IDE7XG4gICAgICB9XG4gICAgICBjb25zdCBmZWVkcyA9IGZlZWRJRHMubWFwKHYgPT4gYGd0ZnMke3Z9YCkuam9pbignLCcpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRHZW9jb2RpbmdSZXN1bHRzKFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICAgIHNlYXJjaFBhcmFtcyxcbiAgICAgICAgICBsYW5ndWFnZSxcbiAgICAgICAgICBmb2N1c1BvaW50LFxuICAgICAgICAgIGZlZWRzLFxuICAgICAgICAgIFVSTF9QRUxJQVMsXG4gICAgICAgICAgbWluaW1hbFJlZ2V4cCxcbiAgICAgICAgICBnZW9jb2RpbmdMYXllcnMsXG4gICAgICAgICkudGhlbihyZXN1bHRzID0+IHtcbiAgICAgICAgICBpZiAoZmlsdGVyUmVzdWx0cykge1xuICAgICAgICAgICAgcmV0dXJuIGZpbHRlclJlc3VsdHMocmVzdWx0cywgbW9kZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiByZXN1bHRzO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxTb3VyY2VzIHx8IHNvdXJjZXMuaW5jbHVkZXMoJ0hpc3RvcnknKSkge1xuICAgICAgY29uc3Qgc3RvcEhpc3RvcnkgPSBnZXRPbGRTZWFyY2hlcyhjb250ZXh0KS5maWx0ZXIoaXRlbSA9PiB7XG4gICAgICAgIGlmIChpdGVtLnByb3BlcnRpZXMuZ2lkKSB7XG4gICAgICAgICAgcmV0dXJuIGl0ZW0ucHJvcGVydGllcy5naWQuaW5jbHVkZXMoJ0dURlM6Jyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRyb3BMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucm91dGVMYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLmxvY2F0aW9uTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5wYXJraW5nTGF5ZXJzKTtcbiAgICAgIGlmICghdXNlU3RvcHMpIHtcbiAgICAgICAgZHJvcExheWVycy5wdXNoKCdzdG9wJyk7XG4gICAgICB9XG4gICAgICBpZiAoIXVzZVN0YXRpb25zKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCgnc3RhdGlvbicpO1xuICAgICAgfVxuICAgICAgaWYgKHRyYW5zcG9ydE1vZGUpIHtcbiAgICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHN0b3BIaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykudGhlbihyZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSkgOiByZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgICBmaWx0ZXJPbGRTZWFyY2hlcyhzdG9wSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdSb3V0ZXMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlUm91dGVzID0gZ2V0RmF2b3VyaXRlUm91dGVzKGNvbnRleHQpO1xuICAgICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeShmYXZvdXJpdGVSb3V0ZXMsIGlucHV0LCBtb2RlLCBwYXRoT3B0cykudGhlbihcbiAgICAgICAgICByZXN1bHQgPT5cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdCwgbW9kZSwgJ1JvdXRlcycpIDogcmVzdWx0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgc2VhcmNoQ29tcG9uZW50cy5wdXNoKFxuICAgICAgZ2V0Um91dGVzUXVlcnkoaW5wdXQsIGZlZWRJRHMsIHRyYW5zcG9ydE1vZGUsIHBhdGhPcHRzKS50aGVuKHJlc3VsdCA9PlxuICAgICAgICBmaWx0ZXJSZXN1bHRzID8gZmlsdGVyUmVzdWx0cyhyZXN1bHQsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdCxcbiAgICAgICksXG4gICAgKTtcbiAgICBpZiAoYWxsU291cmNlcyB8fCBzb3VyY2VzLmluY2x1ZGVzKCdIaXN0b3J5JykpIHtcbiAgICAgIGNvbnN0IHJvdXRlSGlzdG9yeSA9IGdldE9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgY29uc3QgZHJvcExheWVycyA9IFsnYmlrZXN0YXRpb24nXTtcbiAgICAgIGlmICh0cmFuc3BvcnRNb2RlKSB7XG4gICAgICAgIGRyb3BMYXllcnMucHVzaCguLi5yb3V0ZUxheWVycy5maWx0ZXIoaSA9PiAhKGkgPT09IHRyYW5zcG9ydE1vZGUpKSk7XG4gICAgICB9XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4uc3RvcExheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ubG9jYXRpb25MYXllcnMpO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnBhcmtpbmdMYXllcnMpO1xuXG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGZpbHRlck9sZFNlYXJjaGVzKHJvdXRlSGlzdG9yeSwgaW5wdXQsIGRyb3BMYXllcnMpLnRoZW4ocmVzdWx0cyA9PlxuICAgICAgICAgIGZpbHRlclJlc3VsdHMgPyBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdSb3V0ZXMnKSA6IHJlc3VsdHMsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgfVxuICBpZiAoYWxsVGFyZ2V0cyB8fCB0YXJnZXRzLmluY2x1ZGVzKCdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKSkge1xuICAgIGlmIChzb3VyY2VzLmluY2x1ZGVzKCdGYXZvdXJpdGUnKSkge1xuICAgICAgY29uc3QgZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24gPVxuICAgICAgICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnMoY29udGV4dCk7XG4gICAgICBzZWFyY2hDb21wb25lbnRzLnB1c2goXG4gICAgICAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5KFxuICAgICAgICAgIGZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uLFxuICAgICAgICAgIGlucHV0LFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnRGF0YXNvdXJjZScpKSB7XG4gICAgICBjb25zdCBnZW9jb2RpbmdMYXllcnMgPSBbJ2Jpa2VzdGF0aW9uJ107XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPVxuICAgICAgICBnZW9jb2RpbmdTaXplICYmIGdlb2NvZGluZ1NpemUgIT09IDEwID8geyBzaXplOiBnZW9jb2RpbmdTaXplIH0gOiB7fTtcbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChcbiAgICAgICAgZ2V0R2VvY29kaW5nUmVzdWx0cyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBzZWFyY2hQYXJhbXMsXG4gICAgICAgICAgbGFuZ3VhZ2UsXG4gICAgICAgICAgZm9jdXNQb2ludCxcbiAgICAgICAgICBjaXR5QmlrZU5ldHdvcmtzLmpvaW4oJywnKSxcbiAgICAgICAgICBVUkxfUEVMSUFTLFxuICAgICAgICAgIG1pbmltYWxSZWdleHAsXG4gICAgICAgICAgZ2VvY29kaW5nTGF5ZXJzLFxuICAgICAgICApLnRoZW4ocmVzdWx0cyA9PiB7XG4gICAgICAgICAgaWYgKGZpbHRlclJlc3VsdHMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJSZXN1bHRzKHJlc3VsdHMsIG1vZGUsICdWZWhpY2xlUmVudGFsU3RhdGlvbnMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFsbFNvdXJjZXMgfHwgc291cmNlcy5pbmNsdWRlcygnSGlzdG9yeScpKSB7XG4gICAgICBjb25zdCBoaXN0b3J5ID0gZ2V0T2xkU2VhcmNoZXMoY29udGV4dCk7XG4gICAgICBjb25zdCBkcm9wTGF5ZXJzID0gWy4uLnN0b3BMYXllcnNdO1xuICAgICAgZHJvcExheWVycy5wdXNoKC4uLnJvdXRlTGF5ZXJzKTtcbiAgICAgIGRyb3BMYXllcnMucHVzaCguLi5sb2NhdGlvbkxheWVycyk7XG4gICAgICBkcm9wTGF5ZXJzLnB1c2goLi4ucGFya2luZ0xheWVycyk7XG5cbiAgICAgIHNlYXJjaENvbXBvbmVudHMucHVzaChmaWx0ZXJPbGRTZWFyY2hlcyhoaXN0b3J5LCBpbnB1dCwgZHJvcExheWVycykpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHNlYXJjaFJlc3VsdHNQcm9taXNlID0gUHJvbWlzZS5hbGwoc2VhcmNoQ29tcG9uZW50cylcbiAgICAudGhlbihmbGF0dGVuKVxuICAgIC50aGVuKHJlc3VsdHMgPT4ge1xuICAgICAgc2VhcmNoZXMucmVzdWx0cyA9IHJlc3VsdHM7XG4gICAgfSlcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIHNlYXJjaGVzLmVycm9yID0gZXJyO1xuICAgIH0pO1xuICBzZWFyY2hSZXN1bHRzUHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICBjYWxsYmFjayh7XG4gICAgICAuLi5zZWFyY2hlcyxcbiAgICAgIHJlc3VsdHM6IHNvcnRTZWFyY2hSZXN1bHRzKGxpbmVSZWdleHAsIHNlYXJjaGVzLnJlc3VsdHMsIGlucHV0KSxcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNvbnN0IGRlYm91bmNlZFNlYXJjaCA9IGRlYm91bmNlKGdldFNlYXJjaFJlc3VsdHMsIDMwMCwge1xuICBsZWFkaW5nOiB0cnVlLFxufSk7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlU2VhcmNoID0gKFxuICB0YXJnZXRzLFxuICBzb3VyY2VzLFxuICB0cmFuc3BvcnRNb2RlLFxuICBzZWFyY2hDb250ZXh0LFxuICBmaWx0ZXJSZXN1bHRzLFxuICBnZW9jb2RpbmdTaXplLFxuICBkYXRhLFxuICBjYWxsYmFjayxcbiAgcGF0aE9wdHMsXG4gIHJlZlBvaW50LFxuKSA9PiB7XG4gIGNhbGxiYWNrKG51bGwpOyAvLyBUaGlzIG1lYW5zICd3ZSBhcmUgc2VhcmNoaW5nJ1xuICBkZWJvdW5jZWRTZWFyY2goXG4gICAgdGFyZ2V0cyxcbiAgICBzb3VyY2VzLFxuICAgIHRyYW5zcG9ydE1vZGUsXG4gICAgc2VhcmNoQ29udGV4dCxcbiAgICBmaWx0ZXJSZXN1bHRzLFxuICAgIGdlb2NvZGluZ1NpemUsXG4gICAgZGF0YSxcbiAgICBjYWxsYmFjayxcbiAgICBwYXRoT3B0cyxcbiAgICByZWZQb2ludCxcbiAgKTtcbn07XG4iLCJpbXBvcnQgdW5pcVdpdGggZnJvbSAnbG9kYXNoL3VuaXFXaXRoJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ2xvZGFzaC9tZW1vaXplJztcbmltcG9ydCBlc2NhcGVSZWdFeHAgZnJvbSAnbG9kYXNoL2VzY2FwZVJlZ0V4cCc7XG5pbXBvcnQgY2xvbmVEZWVwIGZyb20gJ2xvZGFzaC9jbG9uZURlZXAnO1xuXG4vKipcbiAqIExvY2F0aW9uIHByb3BlcnRpZXMuXG4gKiBAdHlwZWRlZiB7TG9jYXRpb25Qcm9wZXJ0aWVzfVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxheWVyIFN1Z2dlc3Rpb24gbGF5ZXIuXG4gKiBAcHJvcGVydHkge2xhdH0gW251bWJlcl1cbiAqIEBwcm9wZXJ0eSB7bG9ufSBbbnVtYmVyXVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGFkZHJlc3MgQWRkcmVzcy5cbiAqL1xuXG4vKipcbiAqIFJldHVybnMgbG9jYWxhZG1pbiAoY2l0eSBuYW1lKSBmb3Igc3VnZ2VzdGlvbnNcbiAqXG4gKiBAbmFtZSBnZXRMb2NhbGFkbWluXG4gKiBAcGFyYW0ge09iamVjdH0gc3VnZ2VzdGlvbiBzdWdnZXN0aW9uJ3MgcHJvcGVydGllcyBmcm9tIGdlb2NvZGluZyBvciBhIGZhdm91cml0ZSBzdG9wL3N0YXRpb24uXG4gKiBFeHBlY3RzIGxhc3QgcGFydCBvZiBhbiBhZGRyZXNzIChhZnRlciAnLCcpIHRvIGNvbnRhaW4gdGhlIGNpdHkgbmFtZSBvZiB0aGUgc3VnZ2VzdGlvbiBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHtTdHJpbmd9ICBDaXR5IG5hbWUgb3IgZW1wdHkgc3RyaW5nXG4gKi9cbmNvbnN0IGdldExvY2FsYWRtaW4gPSBzdWdnZXN0aW9uID0+XG4gIHN1Z2dlc3Rpb24ubG9jYWxhZG1pbiB8fFxuICBzdWdnZXN0aW9uLmxvY2FsYWRtaW4gfHxcbiAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJlxuICAgIHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpIDwgc3VnZ2VzdGlvbi5hZGRyZXNzLmxlbmd0aCAtIDIgJiZcbiAgICBzdWdnZXN0aW9uLmFkZHJlc3Muc3Vic3RyaW5nKHN1Z2dlc3Rpb24uYWRkcmVzcy5sYXN0SW5kZXhPZignLCcpICsgMikpIHx8XG4gICcnO1xuXG5leHBvcnQgY29uc3QgZ2V0U3RvcENvZGUgPSAoeyBpZCwgY29kZSB9KSA9PiB7XG4gIGlmIChjb2RlKSB7XG4gICAgcmV0dXJuIGNvZGU7XG4gIH1cbiAgaWYgKFxuICAgIGlkID09PSB1bmRlZmluZWQgfHxcbiAgICB0eXBlb2YgaWQuaW5kZXhPZiA9PT0gJ3VuZGVmaW5lZCcgfHxcbiAgICBpZC5pbmRleE9mKCcjJykgPT09IC0xXG4gICkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgLy8gaWQgZnJvbSBwZWxpYXNcbiAgcmV0dXJuIGlkLnN1YnN0cmluZyhpZC5pbmRleE9mKCcjJykgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtYXRGYXZvdXJpdGVQbGFjZUxhYmVsID0gKG5hbWUsIGFkZHJlc3MpID0+IFtcbiAgbmFtZSB8fCAoYWRkcmVzcyAmJiBhZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZydcbiAgICA/IGFkZHJlc3MucmVwbGFjZShuZXcgUmVnRXhwKGAke2VzY2FwZVJlZ0V4cChuYW1lKX0oWyAsXXwkKStgKSwgJycpXG4gICAgOiAnJyxcbl07XG5cbi8qKlxuICogRm9ybWF0IHN1Z2dlc3Rpb24tcGFpciBbbmFtZSwgYWRkcmVzc10gYnkgYHN1Z2dlc3Rpb24ubGF5ZXJgLlxuICpcbiAqIEBuYW1lIGdldE5hbWVMYWJlbFxuICogQHBhcmFtIHtMb2NhdGlvblByb3BlcnRpZXN9IHN1Z2dlc3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3BsYWluXVxuICpcbiAqIEByZXR1cm5zIHtBcnJheS48c3RyaW5nPn0gRm9ybWF0dGVkIGxhYmVsLlxuICovXG5leHBvcnQgY29uc3QgZ2V0TmFtZUxhYmVsID0gbWVtb2l6ZShcbiAgKHN1Z2dlc3Rpb24sIHBsYWluID0gZmFsc2UpID0+IHtcbiAgICBzd2l0Y2ggKHN1Z2dlc3Rpb24ubGF5ZXIpIHtcbiAgICAgIGNhc2UgJ2N1cnJlbnRQb3NpdGlvbic6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkLCBzdWdnZXN0aW9uLmFkZHJlc3NdO1xuICAgICAgY2FzZSAnc2VsZWN0RnJvbU1hcCc6XG4gICAgICBjYXNlICdvd25Mb2NhdGlvbnMnOlxuICAgICAgY2FzZSAnYmFjayc6XG4gICAgICAgIHJldHVybiBbc3VnZ2VzdGlvbi5sYWJlbElkXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgICAgcmV0dXJuIGZvcm1hdEZhdm91cml0ZVBsYWNlTGFiZWwoc3VnZ2VzdGlvbi5uYW1lLCBzdWdnZXN0aW9uLmFkZHJlc3MpO1xuICAgICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgICAgY2FzZSAnYmlrZXN0YXRpb24nOlxuICAgICAgICByZXR1cm4gW3N1Z2dlc3Rpb24ubmFtZV07XG4gICAgICBjYXNlICdmYXZvdXJpdGVSb3V0ZSc6XG4gICAgICBjYXNlICdyb3V0ZS1CVVMnOlxuICAgICAgY2FzZSAncm91dGUtVFJBTSc6XG4gICAgICBjYXNlICdyb3V0ZS1SQUlMJzpcbiAgICAgIGNhc2UgJ3JvdXRlLVNVQldBWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GRVJSWSc6XG4gICAgICBjYXNlICdyb3V0ZS1GVU5JQ1VMQVInOlxuICAgICAgY2FzZSAncm91dGUtQUlSUExBTkUnOlxuICAgICAgICByZXR1cm4gIXBsYWluICYmIHN1Z2dlc3Rpb24uc2hvcnROYW1lXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uZ3Rmc0lkLFxuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm1vZGUudG9Mb3dlckNhc2UoKSxcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sb25nTmFtZSxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5zaG9ydE5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24ubG9uZ05hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uYWdlbmN5ID8gc3VnZ2VzdGlvbi5hZ2VuY3kubmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIF07XG4gICAgICBjYXNlICd2ZW51ZSc6XG4gICAgICBjYXNlICdhZGRyZXNzJzpcbiAgICAgIGNhc2UgJ3N0cmVldCc6XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lLFxuICAgICAgICAgIHN1Z2dlc3Rpb24ubGFiZWwucmVwbGFjZShcbiAgICAgICAgICAgIG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnRXhwKHN1Z2dlc3Rpb24ubmFtZSl9KCwpPyggKT9gKSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICksXG4gICAgICAgIF07XG4gICAgICBjYXNlICdmYXZvdXJpdGVTdG9wJzpcbiAgICAgIGNhc2UgJ3N0b3AnOlxuICAgICAgICByZXR1cm4gcGxhaW5cbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5uYW1lIHx8XG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgICAgIChzdWdnZXN0aW9uLmFkZHJlc3MgJiYgc3VnZ2VzdGlvbi5hZGRyZXNzLnNwbGl0KCcsJylbMF0pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW1xuICAgICAgICAgICAgICBzdWdnZXN0aW9uLm5hbWUsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb24uaWQsXG4gICAgICAgICAgICAgIGdldFN0b3BDb2RlKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgICBnZXRMb2NhbGFkbWluKHN1Z2dlc3Rpb24pLFxuICAgICAgICAgICAgXTtcbiAgICAgIGNhc2UgJ2Zhdm91cml0ZVN0YXRpb24nOlxuICAgICAgY2FzZSAnc3RhdGlvbic6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHN1Z2dlc3Rpb24ubmFtZSB8fFxuICAgICAgICAgICAgc3VnZ2VzdGlvbi5sYWJlbCB8fFxuICAgICAgICAgICAgKHN1Z2dlc3Rpb24uYWRkcmVzcyAmJiBzdWdnZXN0aW9uLmFkZHJlc3Muc3BsaXQoJywnKVswXSksXG4gICAgICAgICAgZ2V0TG9jYWxhZG1pbihzdWdnZXN0aW9uKSxcbiAgICAgICAgXTtcbiAgICB9XG4gIH0sXG4gIChpdGVtLCBwbGFpbikgPT4ge1xuICAgIGNvbnN0IGkgPSBjbG9uZURlZXAoaXRlbSk7XG4gICAgaS5wbGFpbiA9IHBsYWluO1xuICAgIHJldHVybiBpO1xuICB9LFxuKTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCBmZWF0dXJlcyBhcmUgdW5pcXVlIGJ5IGxhYmVsXG4gKlxuICogQG5hbWUgdW5pcUJ5TGFiZWxcbiAqIEBwYXJhbSB7QXJyYXl9IGZlYXR1cmVzIEFycmF5IG9mIGZlYXR1cmVzXG4gKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiB1bmlxdWUgZmVhdHVyZXNcbiAqIEBleGFtcGxlXG4gKiBkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC51bmlxQnlMYWJlbChmZWF0dXJlcyk7XG4gKiAvLz0gQXJyYXkoMilcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdW5pcUJ5TGFiZWwoZmVhdHVyZXMpIHtcbiAgcmV0dXJuIHVuaXFXaXRoKGZlYXR1cmVzLCAoZmVhdDEsIGZlYXQyKSA9PiB7XG4gICAgaWYgKGZlYXQxLnR5cGUgPT09ICdGdXR1cmVSb3V0ZScgfHwgZmVhdDIudHlwZSA9PT0gJ0Z1dHVyZVJvdXRlJykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gKFxuICAgICAgaXNFcXVhbChnZXROYW1lTGFiZWwoZmVhdDEucHJvcGVydGllcyksIGdldE5hbWVMYWJlbChmZWF0Mi5wcm9wZXJ0aWVzKSkgJiZcbiAgICAgIGZlYXQxLnByb3BlcnRpZXMubGF5ZXIgPT09IGZlYXQyLnByb3BlcnRpZXMubGF5ZXJcbiAgICApO1xuICB9KTtcbn1cbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICBhZGRyZXNzOiAnQWRyZXNzZScsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBPcnQgb3IgR2VzY2jDpGZ0JyxcbiAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOiAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdDbG9zZSBzdG9wIGR1cmF0aW9uIHNlbGVjdG9yIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHVnJyxcbiAgICBhcnJpdmFsOiAnQW5rdW5mdCcsXG4gICAgYmFjazogJ1p1csO8Y2snLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnTGVpaHJhZC1TdGF0aW9uJyxcbiAgICBidXM6ICdCdXMnLFxuICAgIGNhbmNlbDogJ0FiYnJlY2hlbicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdMw7ZzY2hlbicsXG4gICAgJ2NsZWFyLXNlYXJjaC1oaXN0b3J5JzogJ1N1Y2hoaXN0b3JpZSBsw7ZzY2hlbicsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQWt0dWVsbGUgUG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ0zDtnNjaGVuJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnV29sbGVuIFNpZSBkaWUgU3VjaC1IaXN0b3JpZSBsw7ZzY2hlbj8nLFxuICAgIGRlcGFydHVyZTogJ0FiZmFocnQnLFxuICAgIGRlc3RpbmF0aW9uOiAnWmllbCcsXG4gICAgJ2dpdmUtb3JpZ2luJzogJ1N0YXJ0IGVpbmdlYmVuLicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnWmllbCBlaW5nZWJlbi4nLFxuICAgIGZhdm91cml0ZTogJ0Zhdm9yaXRlbicsXG4gICAgZmVycnk6ICdGw6RocmUnLFxuICAgICdmdXR1cmUtcm91dGUnOiAnWnVrw7xuZnRpZ2UgVmVyYmluZHVuZycsXG4gICAgb3JpZ2luOiAnU3RhcnQnLFxuICAgICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc6ICdTdGFydCcsXG4gICAgb3dubG9jYXRpb25zOiAnRWlnZW5lIEZhdm9yaXRlbicsXG4gICAgbG9hZGluZzogJ0xhZGVuLi4uJyxcbiAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgcmFpbDogJ1p1ZycsXG4gICAgc2VhcmNoOiAnU3VjaGUnLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTdWNoZSBhbmhhbmQgdm9uIEFkcmVzc2Ugb2RlciBPcnRzYW5nYWJlJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdTdWNoZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTdWNoZSBaaWVsb3J0LCBMaW5pZSBvciBIYWx0ZXN0ZWxsZScsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1pbmRleCc6ICdaaWVsb3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnRXJnZWJuaXNzZSBpbiDigJxaaWVsb3J04oCdLVJlaXRlciBhbnplaWdlbicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0tlaW4gT3J0IGdlZnVuZGVuLicsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU3VjaGUgU3RhcnRvcnQsIExpbmllIG9kZXIgSGFsdGVzdGVsbGUnLFxuICAgICdzZWFyY2gtb3JpZ2luLWluZGV4JzogJ1N0YXJ0b3J0IGVpbmdlYmVuJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1N0YW5kb3J0IGVybWl0dGVsbicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdWZW51ZSwgcGxhY2UgYW5kIHN0b3BzZWFyY2guJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2F0ZSBsaXN0IHdpdGggYXJyb3cga2V5cyBhbmQgc2VsZWN0IHdpdGggZW50ZXIga2V5LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtbW9iaWxlJzpcbiAgICAgICdFbnRlciB0aGUgbG9jYXRpb24gYW5kIG5hdmlnYXRlIGluIHRoZSBsaXN0IGJ5IHN3aXBpbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nOlxuICAgICAgJ0FmdGVyIHNlbGVjdGluZyB0aGUgc3RhcnRpbmcgbG9jYXRpb24geW91IGFyZSBhdXRvbWF0aWNhbGx5IG1vdmVkIHRvIHRoZSBkZXN0aW5hdGlvbiBmaWVsZC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJ1RoZXJlIGlzIHt7Y291bnR9fSBzdWdnZXN0aW9uIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzpcbiAgICAgICdUaGVyZSBhcmUge3tjb3VudH19IHN1Z2dlc3Rpb25zIGF2YWlsYWJsZScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnQWt0dWVsbGUgQXVzd2FobDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyYcOfZScsXG4gICAgc3Vid2F5OiAnVS1CYWhuJyxcbiAgICBzdGF0aW9uOiAnU3RhdGlvbicsXG4gICAgc3RvcDogJ0hhbHRlc3RlbGxlJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTdWNoZSBIYWx0ZXN0ZWxsZW4gdW5kIExpbmllbiBpbiBkZXIgTsOkaGUnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTdWNoZSBCdXNsaW5pZW4gb3IgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTdWNoZSBMZWlocmFkLVN0YXRpb25lbicsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTdWNoZSBadWd2ZXJiaW5kdW5nZW4gb2RlciBCYWhuaMO2ZmUnLFxuICAgICdzdG9wLW5lYXIteW91LXN1YndheSc6ICdTdWNoZSBVLUJhaG4tTGluaWVuIG9kZXIgSGFsdGVzdGVsbGVuJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N1Y2hlIFN0YWR0YmFobi1IYWx0ZXN0ZWxsZW4tU3VjaGUnLFxuICAgICd0b2RheS1hdCc6ICdIZXV0ZSB1bScsXG4gICAgJ3RvbW9ycm93LWF0JzogJ01vcmdlbiB1bScsXG4gICAgdHJhbTogJ1N0cmHDn2VuYmFobicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQmVudXR6ZSBha3R1ZWxsZW4gU3RhbmRvcnQnLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV8OkaGxlIFBvc2l0aW9uIGFuaGFuZCBLYXJ0ZScsXG4gICAgJ3NlbGVjdC1mcm9tLW93bi1sb2NhdGlvbnMnOiAnQXVzIGVpZ2VuZW4gRmF2b3JpdGVuIGF1c3fDpGhsZW4nLFxuICAgIHZlbnVlOiAnVmVudWUnLFxuICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICB3aGVyZTogJ1dvaGluPycsXG4gICAgcGxhY2U6ICdPcnQnLFxuICB9LFxuICBlbjoge1xuICAgIGFkZHJlc3M6ICdBZGRyZXNzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZGRyZXNzLCBwbGFjZSBvciBidXNpbmVzcycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6ICdTZXQgc3RvcCBkdXJhdGlvbiBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICBhaXJwbGFuZTogJ0ZsaWdodCcsXG4gICAgYXJyaXZhbDogJ0Fycml2YWwnLFxuICAgIGJhY2s6ICdCYWNrJyxcbiAgICBiaWtlcGFyazogJ1BhcmsgJiBSaWRlIGZvciBiaWtlcycsXG4gICAgYmlrZXJlbnRhbHN0YXRpb246ICdCaWtlIHN0YXRpb24nLFxuICAgIGJ1czogJ2J1cycsXG4gICAgY2FuY2VsOiAnQ2FuY2VsJyxcbiAgICBjYXJwYXJrOiAnUGFyayAmIFJpZGUnLFxuICAgICdjbGVhci1idXR0b24tbGFiZWwnOiAnQ2xlYXInLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdDbGVhciBzZWFyY2ggaGlzdG9yeScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnQ3VycmVudCBwb3NpdGlvbicsXG4gICAgZGVsZXRlOiAnRGVsZXRlJyxcbiAgICAnZGVsZXRlLW9sZC1zZWFyY2hlcy1oZWFkZXInOiAnRG8geW91IHdhbnQgdG8gY2xlYXIgdGhlIHNlYXJjaCBoaXN0b3J5PycsXG4gICAgZGVwYXJ0dXJlOiAnRGVwYXJ0dXJlJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnRW50ZXIgeW91ciBvcmlnaW4uJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdFbnRlciB5b3VyIGRlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvdXJpdGUnLFxuICAgIGZlcnJ5OiAnRmVycnknLFxuICAgICdmdXR1cmUtcm91dGUnOiAnRnV0dXJlIHJvdXRlJyxcbiAgICBvcmlnaW46ICdTdGFydCcsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1N0YXJ0JyxcbiAgICBvd25sb2NhdGlvbnM6ICdPd24gbG9jYXRpb25zJyxcbiAgICBsb2FkaW5nOiAnTG9hZGluZy4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtJyxcbiAgICBwbGF0Zm9ybTogJ1BsYXRmb3JtJyxcbiAgICByYWlsOiAnVHJhaW4nLFxuICAgIHJlcXVpcmVkOiAncmVxdWlyZWQgZmllbGQnLFxuICAgIHNlYXJjaDogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ1NlYXJjaCBieSBhZGRyZXNzIG9yIHBsYWNlIG5hbWUnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1NlYXJjaCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTZWFyY2ggZGVzdGluYXRpb24sIHJvdXRlIG9yIHN0b3AnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnRW50ZXIgZGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24tcmVzdWx0cy1idXQtbm8tc2VhcmNoJzpcbiAgICAgICdWaWV3IHJlc3VsdHMgaW4gdGhlIGFkamFjZW50IOKAnERlc3RpbmF0aW9u4oCdIHRhYicsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ05vIGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdTZWFyY2ggb3JpZ2luLCByb3V0ZSBvciBzdG9wJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdFbnRlciBvcmlnaW4nLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnRGV0ZWN0IGxvY2F0aW9uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1ZlbnVlLCBwbGFjZSBhbmQgc3RvcHNlYXJjaC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLWRlc2t0b3AnOlxuICAgICAgJ05hdmlnYXRlIGxpc3Qgd2l0aCBhcnJvdyBrZXlzIGFuZCBzZWxlY3Qgd2l0aCBlbnRlciBrZXkuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0VudGVyIHRoZSBsb2NhdGlvbiBhbmQgbmF2aWdhdGUgaW4gdGhlIGxpc3QgYnkgc3dpcGluZy4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnQWZ0ZXIgc2VsZWN0aW5nIHRoZSBzdGFydGluZyBsb2NhdGlvbiB5b3UgYXJlIGF1dG9tYXRpY2FsbHkgbW92ZWQgdG8gdGhlIGRlc3RpbmF0aW9uIGZpZWxkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnVGhlcmUgaXMge3tjb3VudH19IHN1Z2dlc3Rpb24gYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9wbHVyYWwnOlxuICAgICAgJ1RoZXJlIGFyZSB7e2NvdW50fX0gc3VnZ2VzdGlvbnMgYXZhaWxhYmxlJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdDdXJyZW50IHNlbGVjdGlvbjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnU3RyZWV0JyxcbiAgICBzdWJ3YXk6ICdNZXRybycsXG4gICAgc3RhdGlvbjogJ1N0YXRpb24nLFxuICAgIHN0b3A6ICdTdG9wJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdTZWFyY2ggc3RvcHMgYW5kIHJvdXRlcycsXG4gICAgJ3N0b3AtbmVhci15b3UtYWlycGxhbmUnOiAnU2VhcmNoIGZsaWdodHMgb3IgYWlycG9ydHMnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTZWFyY2ggYnVzIHJvdXRlcyBvciBzdG9wcycsXG4gICAgJ3N0b3AtbmVhci15b3UtY2l0eWJpa2UnOiAnU2VhcmNoIGNpdHkgYmlrZSBzdGF0aW9ucycsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTZWFyY2ggdHJhaW4gcm91dGVzIG9yIHN0YXRpb25zJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU2VhcmNoIG1ldHJvIHJvdXRlcyBvciBzdGF0aW9ucyAnLFxuICAgICdzdG9wLW5lYXIteW91LXRyYW0nOiAnU2VhcmNoIHRyYW0gcm91dGVzIG9yIHN0b3BzJyxcbiAgICAnc3RvcC1yb3V0ZS1zdGF0aW9uJzogJ0J1cyBhbmQgc3RvcCBzZWFyY2gnLFxuICAgICd0b2RheS1hdCc6ICd0b2RheSBhdCcsXG4gICAgJ3RvbW9ycm93LWF0JzogJ3RvbW9ycm93IGF0JyxcbiAgICB0cmFtOiAnVHJhbScsXG4gICAgdHJhY2s6ICdUcmFjaycsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnVXNlIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnU2VsZWN0IHBvc2l0aW9uIGZyb20gbWFwJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdTZWxlY3QgZnJvbSBvd24gbG9jYXRpb25zJyxcbiAgICB2ZW51ZTogJ1ZlbnVlJyxcbiAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgd2hlcmU6ICdXaGVyZSB0bz8nLFxuICAgIHBsYWNlOiAnTG9jYXRpb24nLFxuICB9LFxuICBmaToge1xuICAgIGFkZHJlc3M6ICdPc29pdGUnLFxuICAgICdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJzogJ09zb2l0ZSwgcGFpa2thIHRhaSB5cml0eXMnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnQXNldGEgdsOkbGlwaXN0ZWVsbGUge3tpbmRleH19IHB5c8OkaGR5a3NlbiBrZXN0bycsXG4gICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgIGFpcnBsYW5lOiAnTGVudG9rb25lJyxcbiAgICBhcnJpdmFsOiAnUGVyaWxsw6QnLFxuICAgIGJhY2s6ICdUYWthaXNpbicsXG4gICAgdmVoaWNsZXJlbnRhbHN0YXRpb246ICdQecO2csOkYXNlbWEnLFxuICAgIGJpa2VwYXJrOiAnTGlpdHludMOkcHlzw6Rrw7ZpbnRpJyxcbiAgICBidXM6ICdidXNzaScsXG4gICAgY2FuY2VsOiAnUGVydXV0YScsXG4gICAgY2FycGFyazogJ0xpaXR5bnTDpHB5c8Oka8O2aW50aScsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdUeWhqZW5uw6QnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUeWhqZW5uw6QgaGFrdWhpc3RvcmlhJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdUw6Rtw6RuaGV0a2luZW4gc2lqYWludGknLFxuICAgIGRlbGV0ZTogJ1BvaXN0YScsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzogJ0hhbHVhdGtvIHR5aGplbnTDpMOkIGhha3VoaXN0b3JpYW4/JyxcbiAgICBkZXBhcnR1cmU6ICdMw6RodMO2YWlrYScsXG4gICAgZGVzdGluYXRpb246ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgZmF2b3VyaXRlOiAnU3Vvc2lra2knLFxuICAgIGZlcnJ5OiAnTGF1dHRhJyxcbiAgICAnZnV0dXJlLXJvdXRlJzogJ1R1bGV2YSByZWl0dGknLFxuICAgICdnaXZlLW9yaWdpbic6ICdMw6RodMO2cGFpa2thJyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdNw6TDpHLDpG5ww6TDpCcsXG4gICAgb3JpZ2luOiAnTMOkaHTDtnBhaWtrYScsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0zDpGh0w7ZwYWlra2EnLFxuICAgIG93bmxvY2F0aW9uczogJ09tYXQgcGFpa2F0JyxcbiAgICBsb2FkaW5nOiAnTGFkYXRhYW4uLi4nLFxuICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICBwbGF0Zm9ybTogJ0xhaXR1cmknLFxuICAgIHJhaWw6ICdKdW5hJyxcbiAgICByZXF1aXJlZDogJ3Bha29sbGluZW4ga2VudHTDpCcsXG4gICAgc2VhcmNoOiAnRXRzaScsXG4gICAgJ3NlYXJjaC1hZGRyZXNzLW9yLXBsYWNlJzogJ0hhZSBvc29pdHRlZWxsYSB0YWkgcGFpa2FuIG5pbWVsbMOkJyxcbiAgICAnc2VhcmNoLWJ1dHRvbi1sYWJlbCc6ICdIYWUnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24nOiAnSGFlIG3DpMOkcsOkbnDDpMOkdMOkLCBsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnU3nDtnTDpCBtw6TDpHLDpG5ww6TDpCcsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbi1yZXN1bHRzLWJ1dC1uby1zZWFyY2gnOlxuICAgICAgJ0thdHNvIHR1bG9rc2V0IHZpZXJlaXNlbHTDpCBNw6TDpHLDpG5ww6TDpC12w6RsaWxlaGRlbHTDpCcsXG4gICAgJ3NlYXJjaC1uby1yZXN1bHRzJzogJ0VpIHR1bG9rc2lhJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdIYWUgbMOkaHTDtnBhaWtrYWEsIGxpbmphYSB0YWkgcHlzw6Rra2nDpCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4taW5kZXgnOiAnU3nDtnTDpCBsw6RodMO2cGFpa2thJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJzogJ1BhaWtrYSwgbGluamEgamEgcHlzw6Rra2loYWt1LicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1pbnN0cnVjdGlvbnMtZGVza3RvcCc6XG4gICAgICAnTmF2aWdvaSBsaXN0YXNzYSBudW9saW7DpHBww6RpbWlsbMOkIGphIHZhbGl0c2UgZW50ZXJpbGzDpC4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZSc6XG4gICAgICAnU3nDtnTDpCBzaWphaW50aSBqYSBuYXZpZ29pIGxpc3Rhc3NhIHB5eWhrw6Rpc2Vtw6RsbMOkLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdWYWxpdHR1YXNpIGzDpGh0w7ZwYWlrYW4gc2lpcnJ5dMOkw6RuIHN1b3JhYW4gbcOkw6Ryw6RucMOkw6Qta2VudHTDpMOkbi4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1cycsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW5fcGx1cmFsJzogJyBMw7Z5ZGV0dGlpbiB7e2NvdW50fX0gZWhkb3R1c3RhJyxcbiAgICAnc2VhcmNoLWN1cnJlbnQtc3VnZ2VzdGlvbic6ICdUw6Rtw6RuaGV0a2luZW4gdmFsaW50YToge3tzZWxlY3Rpb259fScsXG4gICAgJ3NlYXJjaC1wb3NpdGlvbic6ICdQYWlrYW5uYScsXG4gICAgc3RyZWV0OiAnS2F0dScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdBc2VtYScsXG4gICAgc3RvcDogJ1B5c8Oka2tpJyxcbiAgICAnc3RvcC1uZWFyLXlvdSc6ICdMaW5qYSwgcHlzw6Rra2kgdGFpIGFzZW1hJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdIYWUgbGVudG9qYSB0YWkgbGVudG9hc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdIYWUgYnVzc2lsaW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLW5lYXIteW91LWNpdHliaWtlJzogJ0hhZSBrYXVwdW5raXB5w7Zyw6Rhc2VtYWEnLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnSGFlIGzDpGhpanVuYWEgdGFpIGFzZW1hYScsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ0hhZSBtZXRyb2xpbmphYSB0YWkgYXNlbWFhJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ0hhZSByYWl0aW9saW5qYWEgdGFpIHB5c8Oka2tpw6QnLFxuICAgICdzdG9wLXJvdXRlLXN0YXRpb24nOiAnTGluamEtIGphIHB5c8Oka2tpaGFrdScsXG4gICAgJ3RvZGF5LWF0JzogJ3TDpG7DpMOkbiBrbG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdodW9tZW5uYSBrbG8nLFxuICAgIHRyYW06ICdSYWl0aW92YXVudScsXG4gICAgdHJhY2s6ICdSYWlkZScsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnS8OkeXTDpCBueWt5aXN0w6Qgc2lqYWludGlhJyxcbiAgICAnc2VsZWN0LWZyb20tbWFwJzogJ1ZhbGl0c2Ugc2lqYWludGkga2FydGFsdGEnLFxuICAgICdzZWxlY3QtZnJvbS1vd24tbG9jYXRpb25zJzogJ1ZhbGl0c2Ugb21pc3RhIHBhaWtvaXN0YScsXG4gICAgdmVudWU6ICdQYWlra2EnLFxuICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgd2hlcmU6ICdNaW5uZSBtZW5uw6TDpG4/JyxcbiAgICBwbGFjZTogJ1BhaWtrYScsXG4gIH0sXG4gIHBsOiB7XG4gICAgYWRkcmVzczogJ0FkcmVzJyxcbiAgICAnYWRkcmVzcy1wbGFjZS1vci1idXNpbmVzcyc6ICdBZHJlcywgbWllanNjZSBsdWIgZmlybWEnLFxuICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnV3liaWVyeiBjemFzIHBvc3RvanUgZGxhIHB1bmt0dSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdMb3QnLFxuICAgIGFycml2YWw6ICdQcnp5amF6ZCcsXG4gICAgYmFjazogJ1dyw7PEhycsXG4gICAgYmlrZXBhcms6ICdQYXJrdWogaSBKZWTFuiBkbGEgcm93ZXLDs3cnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhY2phIHJvd2Vyb3dhJyxcbiAgICBidXM6ICdhdXRvYnVzJyxcbiAgICBjYW5jZWw6ICdBbnVsdWonLFxuICAgIGNhcnBhcms6ICdQYXJrdWogaSBKZWTFuicsXG4gICAgJ2NsZWFyLWJ1dHRvbi1sYWJlbCc6ICdXeWN6ecWbxIcnLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdXeWN6ecWbxIcgaGlzdG9yacSZIHd5c3p1a2l3YW5pYScsXG4gICAgY3VycmVudHBvc2l0aW9uOiAnT2JlY25lIHBvxYJvxbxlbmllJyxcbiAgICBkZWxldGU6ICdVc3XFhCcsXG4gICAgJ2RlbGV0ZS1vbGQtc2VhcmNoZXMtaGVhZGVyJzpcbiAgICAgICdDenkgbmEgcGV3bm8gY2hjZXN6IHd5Y3p5xZtjacSHIGhpc3RvcmnEmSB3eXN6dWtpd2FuaWE/JyxcbiAgICBkZXBhcnR1cmU6ICdPZGphemQnLFxuICAgIGRlc3RpbmF0aW9uOiAnQ2VsJyxcbiAgICAnZ2l2ZS1vcmlnaW4nOiAnV3Byb3dhZMW6IHN3w7NqIHB1bmt0IHBvY3rEhXRrb3d5LicsXG4gICAgJ2dpdmUtZGVzdGluYXRpb24nOiAnV3Byb3dhZMW6IHN3w7NqIGNlbCcsXG4gICAgZmF2b3VyaXRlOiAnVWx1YmlvbmUnLFxuICAgIGZlcnJ5OiAnUHJvbScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdQcnp5c3rFgmEgdHJhc2EnLFxuICAgIG9yaWdpbjogJ1BvY3rEhXRlaycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ1BvY3rEhXRlaycsXG4gICAgb3dubG9jYXRpb25zOiAnV8WCYXNuZSBtaWVqc2NhJyxcbiAgICBsb2FkaW5nOiAnxYFhZG93YW5pZeKApicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICBwbGF0Zm9ybTogJ1Blcm9uJyxcbiAgICByYWlsOiAnUG9jacSFZycsXG4gICAgcmVxdWlyZWQ6ICd3eW1hZ2FuZSBwb2xlJyxcbiAgICBzZWFyY2g6ICdTenVrYWonLFxuICAgICdzZWFyY2gtYWRkcmVzcy1vci1wbGFjZSc6ICdTenVrYWogcG8gYWRyZXNpZSBsdWIgbmF6d2llIG1pZWpzY2EnLFxuICAgICdzZWFyY2gtYnV0dG9uLWxhYmVsJzogJ1N6dWthaicsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTenVrYWogY2VsdSwgdHJhc3kgbHViIHByenlzdGFua3UnLFxuICAgICdzZWFyY2gtZGVzdGluYXRpb24taW5kZXgnOiAnV3Byb3dhZMW6IHB1bmt0IGRvY2Vsb3d5JyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnV3nFm3dpZXRsIHd5bmlraSB3IHPEhXNpZWRuaWVqIGthcmNpZSDigJ5DZWzigJ0nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdCcmFrIGxva2FsaXphY2ppJyxcbiAgICAnc2VhcmNoLW9yaWdpbic6ICdXeXN6dWthaiBwb2N6xIV0ZWssIGtvbmllYyBsdWIgcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdXcHJvd2FkxbogcHVua3QgcG9jesSFdGtvd3knLFxuICAgICdzZWFyY2gtcG9zaXRpb24nOiAnV3lrcnlqIGxva2FsaXphY2rEmScsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbCc6ICdNaWVqc2NlLCBsb2thbGl6YWNqYSBpIHByenlzdGFuZWsuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXdpZ3VqIHBvIGxpxZtjaWUgdcW8eXdhasSFYyBzdHJ6YcWCZWsgaSB3eWJpZXJhaiBrbGF3aXN6ZW0gRW50ZXIuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ1dwcm93YWTFuiBsb2thbGl6YWNqxJkgaSBuYXdpZ3VqIHBvIGxpxZtjaWUgZ2VzdGFtaSBwcnplc3V3YW5pYS4nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtbW92ZS10by1kZXN0aW5hdGlvbic6XG4gICAgICAnUG8gd3licmFuaXUgbG9rYWxpemFjamkgcG9jesSFdGtvd2VqLCBhdXRvbWF0eWN6bmllIHByemVqZHppZXN6IGRvIHBvbGEgbWllanNjYSBkb2NlbG93ZWdvLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sZW4nOiAnRG9zdMSZcG5hIGplc3Qge3tjb3VudH19IHByb3BvenljamEnLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuX2Zldyc6ICdEb3N0xJlwbmUgc8SFIHt7Y291bnR9fSBwcm9wb3p5Y2plJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbl9vdGhlcic6ICdEb3N0xJlwbmUgamVzdCB7e2NvdW50fX0gcHJvcG96eWNqaScsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnT2JlY255IHd5YsOzcjoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnVWxpY2EnLFxuICAgIHN1YndheTogJ01ldHJvJyxcbiAgICBzdGF0aW9uOiAnU3RhY2phJyxcbiAgICBzdG9wOiAnUHJ6eXN0YW5laycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU3p1a2FqIHByenlzdGFua8OzdyBpIHRyYXMnLFxuICAgICdzdG9wLW5lYXIteW91LWFpcnBsYW5lJzogJ1N6dWthaiBsb3TDs3cgaSBsb3RuaXNrJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1idXMnOiAnU3p1a2FqIHRyYXMgYXV0b2J1c293eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTenVrYWogc3RhY2ppIHJvd2Vyw7N3IG1pZWpza2ljaCcsXG4gICAgJ3N0b3AtbmVhci15b3UtcmFpbCc6ICdTenVrYWogdHJhcyBrb2xlam93eWNoIGkgcHJ6eXN0YW5rw7N3JyxcbiAgICAnc3RvcC1uZWFyLXlvdS1zdWJ3YXknOiAnU3p1a2FqIHRyYXMgbWV0cmEgaSBwcnp5c3RhbmvDs3cgJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1N6dWthaiB0cmFzIHRyYW13YWpvd3ljaCBpIHByenlzdGFua8OzdycsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdXeXN6dWtpd2FuaWUgYXV0b2J1c8OzdyBpIHByenlzdGFua8OzdycsXG4gICAgJ3RvZGF5LWF0JzogJ2R6acWbIG8nLFxuICAgICd0b21vcnJvdy1hdCc6ICdqdXRybyBvJyxcbiAgICB0cmFtOiAnVHJhbXdhaicsXG4gICAgdHJhY2s6ICdUb3InLFxuICAgICd1c2Utb3duLXBvc2l0aW9uJzogJ1XFvHlqIG9iZWNuZWogbG9rYWxpemFjamknLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnV3liaWVyeiBtaWVqc2NlIG5hIG1hcGllJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdXeWJpZXJ6IHogd8WCYXNueWNoIG1pZWpzYycsXG4gICAgdmVudWU6ICdNaWVqc2NlJyxcbiAgICAndmlhLXBvaW50JzogJ1ByemV6IHB1bmt0JyxcbiAgICB3aGVyZTogJ0Rva8SFZD8nLFxuICAgIHBsYWNlOiAnTWllanNjZScsXG4gIH0sXG4gIHN2OiB7XG4gICAgYWRkcmVzczogJ0FkcmVzcycsXG4gICAgJ2FkZHJlc3MtcGxhY2Utb3ItYnVzaW5lc3MnOiAnQWRyZXNzLCBwbGF0cyBlbGxlciBmw7ZyZXRhZycsXG4gICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0zDpGdnIHRpbGwgdmlhcHVua3QnLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICfDlnBwbmEgdsOkbGphcmVuIGbDtnIgdmFyYWt0aWdoZXQgdmlkIHZpYS1wdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgYWlycGxhbmU6ICdGbHlnJyxcbiAgICBhcnJpdmFsOiAnQW5sw6RuZGVyJyxcbiAgICBiYWNrOiAnVGlsbGJha2EnLFxuICAgIGJpa2VyZW50YWxzdGF0aW9uOiAnU3RhZHNjeWtlbHN0YXRpb24nLFxuICAgIGJpa2VwYXJrOiAnQW5zbHV0bmluZ3NwYXJrZXJpbmcgZsO2ciBjeWtsYXInLFxuICAgIGJ1czogJ0J1c3NpJyxcbiAgICBjYW5jZWw6ICdBdmJyeXQnLFxuICAgIGNhcnBhcms6ICdJbmZhcnRzcGFya2VyaW5nJyxcbiAgICAnY2xlYXItYnV0dG9uLWxhYmVsJzogJ1TDtm0nLFxuICAgICdjbGVhci1zZWFyY2gtaGlzdG9yeSc6ICdUw7ZtIHPDtmtoaXN0b3Jpa2VuJyxcbiAgICBjdXJyZW50cG9zaXRpb246ICdOdXZhcmFuZGUgcG9zaXRpb24nLFxuICAgIGRlbGV0ZTogJ1RhIGJvcnQnLFxuICAgICdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcic6ICdWaWxsIGR1IHTDtm1tYSBzw7ZraGlzdG9yaWtlbj8nLFxuICAgIGRlcGFydHVyZTogJ0F2Z8OlbmdzdGlkJyxcbiAgICBkZXN0aW5hdGlvbjogJ0Rlc3RpbmF0aW9uJyxcbiAgICBmYXZvdXJpdGU6ICdGYXZvcml0JyxcbiAgICBmZXJyeTogJ0bDpHJqYScsXG4gICAgJ2Z1dHVyZS1yb3V0ZSc6ICdGcmFtdGlkYSBydXR0JyxcbiAgICAnZ2l2ZS1kZXN0aW5hdGlvbic6ICdTa3JpdiBpbiBkaW4gZGVzdGluYXRpb24nLFxuICAgICdnaXZlLW9yaWdpbic6ICdTa3JpdiBpbiBkaW4gYXZmw6RyZHNwbGF0cycsXG4gICAgb3JpZ2luOiAnQXZmw6RyZHNwbGF0cycsXG4gICAgJ29yaWdpbi1zdG9wLW5lYXIteW91JzogJ0F2ZsOkcmRzcGxhdHMnLFxuICAgIG93bmxvY2F0aW9uczogJ0VnbmEgcGxhdHNlcicsXG4gICAgbG9hZGluZzogJ0xhZGRhci4uLicsXG4gICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgIHBsYXRmb3JtOiAnUGxhdHRmb3JtJyxcbiAgICByYWlsOiAnVMOlZycsXG4gICAgcmVxdWlyZWQ6ICdvYmxpZ2F0b3Jpc2t0IGbDpGx0JyxcbiAgICBzZWFyY2g6ICdTw7ZrJyxcbiAgICAnc2VhcmNoLWFkZHJlc3Mtb3ItcGxhY2UnOiAnU8O2ayBtZWQgYWRyZXNzZW4gZWxsZXIgcGxhdHNlbnMgbmFtbicsXG4gICAgJ3NlYXJjaC1idXR0b24tbGFiZWwnOiAnU8O2aycsXG4gICAgJ3NlYXJjaC1kZXN0aW5hdGlvbic6ICdTw7ZrIGRlc3RpbmF0aW9uLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLWluZGV4JzogJ1Nrcml2IGRlc3RpbmF0aW9uJyxcbiAgICAnc2VhcmNoLWRlc3RpbmF0aW9uLXJlc3VsdHMtYnV0LW5vLXNlYXJjaCc6XG4gICAgICAnU2UgcmVzdWx0YXRlbiB1bmRlciBmbGlrZW4gRGVzdGluYXRpb24nLFxuICAgICdzZWFyY2gtbm8tcmVzdWx0cyc6ICdJbmdhIHPDtmtyZXN1bHRhdCcsXG4gICAgJ3NlYXJjaC1vcmlnaW4nOiAnU8O2ayBhdmbDpHJkc3BsYXRzLCBsaW5qZSBlbGxlciBow6VsbHBsYXRzJyxcbiAgICAnc2VhcmNoLW9yaWdpbi1pbmRleCc6ICdTa3JpdiBhdmbDpHJkc3BsYXRzJyxcbiAgICAnc2VhcmNoLXBvc2l0aW9uJzogJ1PDtmsgcG9zaXRpb24nLFxuICAgICdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwnOiAnUGxhdHMsIGxpbmplIG9jaCBow6VsbHBsYXRzc8O2a25pbmcuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJzpcbiAgICAgICdOYXZpZ2VyYSBsaXN0YW4gbWVkIHBpbHRhbmdlbnRlcm5hIG9jaCB2w6RsaiBtZWQgRW50ZXItdGFuZ2V0ZW4uJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1tb2JpbGUnOlxuICAgICAgJ0FuZ2UgcGxhdHNlbiBvY2ggbmF2aWdlcmEgaSBsaXN0YW4gZ2Vub20gYXR0IHN2ZXBhLicsXG4gICAgJ3NlYXJjaC1hdXRvc3VnZ2VzdC1sYWJlbC1tb3ZlLXRvLWRlc3RpbmF0aW9uJzpcbiAgICAgICdFZnRlciBhdHQgZHUgdmFsdCBhdmfDpW5nc3BsYXRzZW4gdGFzIGR1IGRpcmVrdCB0aWxsIERlc3RpbmF0aW9uLWbDpGx0ZXQuJyxcbiAgICAnc2VhcmNoLWF1dG9zdWdnZXN0LWxlbic6ICdIaXR0YWRlIHt7Y291bnR9fSBmw7Zyc2xhZycsXG4gICAgJ3NlYXJjaC1jdXJyZW50LXN1Z2dlc3Rpb24nOiAnTnV2YXJhbmRlIHZhbDoge3tzZWxlY3Rpb259fScsXG4gICAgc3RyZWV0OiAnR2F0YScsXG4gICAgc3Vid2F5OiAnTWV0cm8nLFxuICAgIHN0YXRpb246ICdTdGF0aW9uJyxcbiAgICBzdG9wOiAnSMOlbGxwbGF0cycsXG4gICAgJ3N0b3AtbmVhci15b3UnOiAnU8O2ayBow6VsbHBsYXRzZXIgZWxsZXIgbGluamVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1haXJwbGFuZSc6ICdTw7ZrIGZseWcgZWxsZXIgZmx5Z3BsYXRzZXInLFxuICAgICdzdG9wLW5lYXIteW91LWJ1cyc6ICdTw7ZrIGJ1c3NsaW5qZXIgZWxsZXIgaMOlbGxwbGF0c2VyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS1jaXR5YmlrZSc6ICdTw7ZrIHN0YWRzY3lrZWxzdGF0aW9uZXInLFxuICAgICdzdG9wLW5lYXIteW91LXJhaWwnOiAnU8O2ayBuw6RydMOlZ2VyIGVsbGVyIHN0YXRpb25lcicsXG4gICAgJ3N0b3AtbmVhci15b3Utc3Vid2F5JzogJ1PDtmsgbWV0cm9saW5qZXIgZWxsZXIgc3RhdGlvbmVyJyxcbiAgICAnc3RvcC1uZWFyLXlvdS10cmFtJzogJ1PDtmsgc3DDpXJ2YWdubGluamVyIGVsbGVyIGjDpWxscGxhdHNlcicsXG4gICAgJ3N0b3Atcm91dGUtc3RhdGlvbic6ICdCdXNzIG9jaCBzdG9wcCBzw7ZrbmluZ2VuJyxcbiAgICAndG9kYXktYXQnOiAnaSBkYWcga2wnLFxuICAgICd0b21vcnJvdy1hdCc6ICdpIG1vcmdvbicsXG4gICAgdHJhbTogJ1Nww6VydmFnbicsXG4gICAgdHJhY2s6ICdTcMOlcicsXG4gICAgJ3VzZS1vd24tcG9zaXRpb24nOiAnQW52w6RuZCBtaW4gcG9zaXRpb24nLFxuICAgICdzZWxlY3QtZnJvbS1tYXAnOiAnVsOkbGogcG9zaXRpb24gZnLDpW4ga2FydGFuJyxcbiAgICAnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucyc6ICdWw6RsaiBmcsOlbiBlZ25hIHBsYXRzZXInLFxuICAgIHZlbnVlOiAnTcO2dGVzcGxhdHMnLFxuICAgICd2aWEtcG9pbnQnOiAnVmlhIHB1bmt0JyxcbiAgICB3aGVyZTogJ1ZhcnQgdmlsbCBkdSDDpWthPycsXG4gICAgcGxhY2U6ICdQbGF0cycsXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJmdW5jdGlvbiBzdHlsZUluamVjdChjc3MsIHJlZikge1xuICBpZiAoIHJlZiA9PT0gdm9pZCAwICkgcmVmID0ge307XG4gIHZhciBpbnNlcnRBdCA9IHJlZi5pbnNlcnRBdDtcblxuICBpZiAoIWNzcyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7IHJldHVybjsgfVxuXG4gIHZhciBoZWFkID0gZG9jdW1lbnQuaGVhZCB8fCBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnaGVhZCcpWzBdO1xuICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO1xuICBzdHlsZS50eXBlID0gJ3RleHQvY3NzJztcblxuICBpZiAoaW5zZXJ0QXQgPT09ICd0b3AnKSB7XG4gICAgaWYgKGhlYWQuZmlyc3RDaGlsZCkge1xuICAgICAgaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGhlYWQuZmlyc3RDaGlsZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgfVxuXG4gIGlmIChzdHlsZS5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGUuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHN0eWxlLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0eWxlSW5qZWN0O1xuIiwiaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCwgeyB1c2VTdGF0ZSwgdXNlRWZmZWN0LCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdE1vZGFsIGZyb20gJ3JlYWN0LW1vZGFsJztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBJY29uIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWljb24nO1xuaW1wb3J0IERpYWxvZ01vZGFsIGZyb20gJ0BkaWdpdHJhbnNpdC1jb21wb25lbnQvZGlnaXRyYW5zaXQtY29tcG9uZW50LWRpYWxvZy1tb2RhbCc7XG5pbXBvcnQgQXV0b3N1Z2dlc3QgZnJvbSAncmVhY3QtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IG1vYmlsZVN0eWxlcyBmcm9tICcuL01vYmlsZVNlYXJjaC5zY3NzJztcbmltcG9ydCBtb2JpbGVOb1Njcm9sbFN0eWxlcyBmcm9tICcuL01vYmlsZU5vU2Nyb2xsLnNjc3MnO1xuXG5jbGFzcyBBdXRvc3VnZ2VzdFBhdGNoIGV4dGVuZHMgQXV0b3N1Z2dlc3Qge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBzZWxmLm9uU3VnZ2VzdGlvblRvdWNoTW92ZSA9ICgpID0+IHtcbiAgICAgIHNlbGYuanVzdFNlbGVjdGVkU3VnZ2VzdGlvbiA9IGZhbHNlO1xuICAgICAgc2VsZi5wcmVzc2VkU3VnZ2VzdGlvbiA9IG51bGw7XG4gICAgfTtcbiAgfVxufVxuXG5jb25zdCBNb2JpbGVTZWFyY2ggPSAoe1xuICBhcHBFbGVtZW50LFxuICBpZCxcbiAgY2xvc2VIYW5kbGUsXG4gIGNsZWFySW5wdXQsXG4gIHZhbHVlLFxuICBzdWdnZXN0aW9ucyxcbiAgaW5wdXRQcm9wcyxcbiAgZmV0Y2hGdW5jdGlvbixcbiAgcmVuZGVyU3VnZ2VzdGlvbixcbiAgZ2V0U3VnZ2VzdGlvblZhbHVlLFxuICBhcmlhTGFiZWwsXG4gIGxhYmVsLFxuICBvblN1Z2dlc3Rpb25TZWxlY3RlZCxcbiAgY2xlYXJPbGRTZWFyY2hlcyxcbiAgZGlhbG9nSGVhZGVyVGV4dCxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQsXG4gIGNsZWFySW5wdXRCdXR0b25UZXh0LFxuICBmb2N1c0lucHV0LFxuICBjb2xvcixcbiAgaG92ZXJDb2xvcixcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcixcbiAgc2VhcmNoT3BlbixcbiAgZm9udFdlaWdodHMsXG4gIHNob3dTY3JvbGwsXG59KSA9PiB7XG4gIGNvbnN0IHN0eWxlcyA9IHNob3dTY3JvbGwgPyBtb2JpbGVTdHlsZXMgOiBtb2JpbGVOb1Njcm9sbFN0eWxlcztcblxuICBjb25zdCBpbnB1dElkID0gYCR7aWR9LWlucHV0YDtcbiAgY29uc3QgbGFiZWxJZCA9IGAke2lkfS1sYWJlbGA7XG5cbiAgY29uc3QgW2lzRGlhbG9nT3Blbiwgc2V0RGlhbG9nT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBSZWFjdE1vZGFsLnNldEFwcEVsZW1lbnQoYXBwRWxlbWVudCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvbkNsb3NlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNsb3NlSGFuZGxlKCk7XG4gIH0pO1xuXG4gIGNvbnN0IG9uU2VsZWN0ID0gKGUsIHJlZikgPT4ge1xuICAgIGlmIChyZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICBzZXREaWFsb2dPcGVuKHRydWUpO1xuICAgIH0gZWxzZSBpZiAoIXJlZi5zdWdnZXN0aW9uLnByb3BlcnRpZXMuYXJyb3dDbGlja2VkKSB7XG4gICAgICAvLyBTZWxlY3QgaXRlbSBpZiBmaWxsIGlucHV0IGJ1dHRvbiBpcyBub3QgcHJlc3NlZCAoZGlhZ29uYWwgYXJyb3cgaW4gc3VnZ2VzdGlvbiBpdGVtcylcbiAgICAgIG9uU3VnZ2VzdGlvblNlbGVjdGVkKGUsIHJlZik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBzcGFjZSA9IFsxMywgJyAnLCAnU3BhY2ViYXInXTtcbiAgICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gICAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuXG4gICAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9O1xuXG4gIGNvbnN0IGdldFZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gICAgaWYgKHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2NsZWFyLXNlYXJjaC1oaXN0b3J5Jykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gZ2V0U3VnZ2VzdGlvblZhbHVlKHN1Z2dlc3Rpb24pO1xuICB9O1xuXG4gIGNvbnN0IHJlbmRlckl0ZW0gPSBpdGVtID0+IHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnY2xlYXItc2VhcmNoLWhpc3RvcnknKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItc2VhcmNoLWhpc3RvcnknXX0+XG4gICAgICAgICAge2l0ZW0ubGFiZWxJZH1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVuZGVyU3VnZ2VzdGlvbihpdGVtKTtcbiAgfTtcblxuICBjb25zdCByZW5kZXJEaWFsb2dNb2RhbCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERpYWxvZ01vZGFsXG4gICAgICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9XG4gICAgICAgIGlzTW9kYWxPcGVuPXtpc0RpYWxvZ09wZW59XG4gICAgICAgIGhhbmRsZUNsb3NlPXsoKSA9PiBzZXREaWFsb2dPcGVuKGZhbHNlKX1cbiAgICAgICAgaGVhZGVyVGV4dD17ZGlhbG9nSGVhZGVyVGV4dH1cbiAgICAgICAgcHJpbWFyeUJ1dHRvblRleHQ9e2RpYWxvZ1ByaW1hcnlCdXR0b25UZXh0fVxuICAgICAgICBzZWNvbmRhcnlCdXR0b25UZXh0PXtkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0fVxuICAgICAgICBwcmltYXJ5QnV0dG9uT25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXMoKTtcbiAgICAgICAgICBzZXREaWFsb2dPcGVuKGZhbHNlKTtcbiAgICAgICAgfX1cbiAgICAgICAgc2Vjb25kYXJ5QnV0dG9uT25DbGljaz17KCkgPT4gc2V0RGlhbG9nT3BlbihmYWxzZSl9XG4gICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgaG92ZXJDb2xvcj17aG92ZXJDb2xvcn1cbiAgICAgICAgZm9udFdlaWdodHM9e2ZvbnRXZWlnaHRzfVxuICAgICAgLz5cbiAgICApO1xuICB9O1xuXG4gIGNvbnN0IGNsZWFyQnV0dG9uID0gKCkgPT4ge1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1snY2xlYXItaW5wdXQnXX1cbiAgICAgICAgb25DbGljaz17Y2xlYXJJbnB1dH1cbiAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBjbGVhcklucHV0KCl9XG4gICAgICAgIGFyaWEtbGFiZWw9e2NsZWFySW5wdXRCdXR0b25UZXh0fVxuICAgICAgPlxuICAgICAgICA8SWNvbiBpbWc9XCJjbG9zZVwiIGNvbG9yPXtjb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgY29uc3QgcmVuZGVyQ29udGVudCA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtY29udGFpbmVyJ119IGh0bWxGb3I9e2lucHV0SWR9PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX1cbiAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBvbkNsb3NlKCl9XG4gICAgICAgICAgb25LZXlEb3duPXtlID0+IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiBvbkNsb3NlKCl9XG4gICAgICAgICAgYXJpYS1sYWJlbD17ZGlhbG9nU2Vjb25kYXJ5QnV0dG9uVGV4dH1cbiAgICAgICAgICB0YWJJbmRleD17MH1cbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIGltZz1cImFycm93XCIgLz5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydyaWdodC1jb2x1bW4nXX0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWxhYmVsJ119IGlkPXtsYWJlbElkfT5cbiAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPEF1dG9zdWdnZXN0UGF0Y2hcbiAgICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zXG4gICAgICAgICAgICBpZD17aWR9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25zRmV0Y2hSZXF1ZXN0ZWQ9e2ZldGNoRnVuY3Rpb259XG4gICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFZhbHVlfVxuICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17cmVuZGVySXRlbX1cbiAgICAgICAgICAgIC8vIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGljayBtdXN0IGJlIHNldCB0byB0cnVlLlxuICAgICAgICAgICAgLy8gSWYgc2V0IHRvIGZhbHNlLCBpbnB1dCB3b24ndCBiZSBmb2N1c2VkIHdoZW4gdXNlciBjbGlja3Mgb25cbiAgICAgICAgICAgIC8vIEZpbGwgaW5wdXQgYnV0dG9uIGluIHN1Z2dlc3Rpb24gbGlzdC4gKGRpYWdvbmFsIGFycm93IGluIHN0cmVldCBuYW1lIGl0ZW1zKVxuICAgICAgICAgICAgZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrXG4gICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdHJ1ZX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgY2xhc3NOYW1lOiBjeChcbiAgICAgICAgICAgICAgICBgJHtzdHlsZXMuaW5wdXR9ICR7c3R5bGVzW2lkXSB8fCAnJ30gJHtcbiAgICAgICAgICAgICAgICAgIGlucHV0UHJvcHMudmFsdWUgPyBzdHlsZXMuaGFzVmFsdWUgOiAnJ1xuICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICBhdXRvRm9jdXM6IHRydWUsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgIDxpbnB1dCBhcmlhLWxhYmVsPXthcmlhTGFiZWx9IGlkPXtpZH0gey4uLnB9IC8+XG4gICAgICAgICAgICAgICAge3ZhbHVlICYmIGNsZWFyQnV0dG9uKCl9XG4gICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIHRoZW1lPXtzdHlsZXN9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17b25TZWxlY3R9XG4gICAgICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH07XG4gIC8vIFRoaXMgZG9lcyBub3Qgc2VlbSB0byBkbyBhbnl0aGluZy5cbiAgLy8gV2hlbiBkb2luZyBxdWljayB0ZXN0aW5nIG9uIHRoaXMgaXQgbG9va2VkIGxpa2UgaW5wdXRSZWYuY3VycmVudCBpcyBhbHdheXMgdW5kZWZpbmVkLlxuICBpZiAoZm9jdXNJbnB1dCAmJiBpbnB1dFJlZi5jdXJyZW50Py5pbnB1dCkge1xuICAgIGlucHV0UmVmLmN1cnJlbnQuaW5wdXQuZm9jdXMoKTtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPFJlYWN0TW9kYWxcbiAgICAgIGlzT3Blbj17c2VhcmNoT3Blbn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwnXX1cbiAgICAgIG92ZXJsYXlDbGFzc05hbWU9e3N0eWxlc1snbW9iaWxlLW1vZGFsLW92ZXJsYXknXX1cbiAgICAgIG9uQWZ0ZXJDbG9zZT17b25DbG9zZX1cbiAgICAgIHNob3VsZENsb3NlT25Fc2NcbiAgICA+XG4gICAgICA8ZGl2XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydtb2JpbGUtbW9kYWwtY29udGVudCddfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogYCR7Y29sb3J9YCxcbiAgICAgICAgICAnLS1hY2Nlc3NpYmxlLXByaW1hcnktY29sb3InOiBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yLFxuICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7aG92ZXJDb2xvcn1gLFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAge3JlbmRlckNvbnRlbnQoKX1cbiAgICAgICAge3JlbmRlckRpYWxvZ01vZGFsKCl9XG4gICAgICA8L2Rpdj5cbiAgICA8L1JlYWN0TW9kYWw+XG4gICk7XG59O1xuXG5Nb2JpbGVTZWFyY2gucHJvcFR5cGVzID0ge1xuICBhcHBFbGVtZW50OiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsb3NlSGFuZGxlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBjbGVhcklucHV0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2xlYXJJbnB1dEJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gIHN1Z2dlc3Rpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub2JqZWN0KS5pc1JlcXVpcmVkLFxuICBpbnB1dFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB2YWx1ZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIH0pLmlzUmVxdWlyZWQsXG4gIGZldGNoRnVuY3Rpb246IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGdldFN1Z2dlc3Rpb25WYWx1ZTogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgcmVuZGVyU3VnZ2VzdGlvbjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25TdWdnZXN0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gIGNsZWFyT2xkU2VhcmNoZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nSGVhZGVyVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGRpYWxvZ1NlY29uZGFyeUJ1dHRvblRleHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGZvY3VzSW5wdXQ6IFByb3BUeXBlcy5ib29sLFxuICBjb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgaG92ZXJDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBzZWFyY2hPcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgfSkuaXNSZXF1aXJlZCxcbiAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5Nb2JpbGVTZWFyY2guZGVmYXVsdFByb3BzID0ge1xuICB2YWx1ZTogdW5kZWZpbmVkLFxuICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgZGlhbG9nSGVhZGVyVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dQcmltYXJ5QnV0dG9uVGV4dDogdW5kZWZpbmVkLFxuICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0OiB1bmRlZmluZWQsXG4gIGZvY3VzSW5wdXQ6IGZhbHNlLFxuICBjb2xvcjogdW5kZWZpbmVkLFxuICBob3ZlckNvbG9yOiB1bmRlZmluZWQsXG4gIHNob3dTY3JvbGw6IHVuZGVmaW5lZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IE1vYmlsZVNlYXJjaDtcbiIsIi8qISBGb3IgbGljZW5zZSBpbmZvcm1hdGlvbiBwbGVhc2Ugc2VlIGluZGV4LmpzLkxJQ0VOU0UudHh0ICovXG4hZnVuY3Rpb24oZSx0KXtpZihcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KHJlcXVpcmUoXCJyZWFjdFwiKSk7ZWxzZSBpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtcInJlYWN0XCJdLHQpO2Vsc2V7dmFyIG49XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHM/dChyZXF1aXJlKFwicmVhY3RcIikpOnQoZS5yZWFjdCk7Zm9yKHZhciBvIGluIG4pKFwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHM6ZSlbb109bltvXX19KFwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGY6dGhpcywoZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9ezg4ODpmdW5jdGlvbihlLHQsbil7dmFyIG8scjtyPXZvaWQgMCE9PW4uZz9uLmc6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6dGhpcyxvPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO3ZhciB0PXtpZ25vcmU6XCJbZGF0YS1zY3JvbGwtaWdub3JlXVwiLGhlYWRlcjpudWxsLHRvcE9uRW1wdHlIYXNoOiEwLHNwZWVkOjUwMCxzcGVlZEFzRHVyYXRpb246ITEsZHVyYXRpb25NYXg6bnVsbCxkdXJhdGlvbk1pbjpudWxsLGNsaXA6ITAsb2Zmc2V0OjAsZWFzaW5nOlwiZWFzZUluT3V0Q3ViaWNcIixjdXN0b21FYXNpbmc6bnVsbCx1cGRhdGVVUkw6ITAscG9wc3RhdGU6ITAsZW1pdEV2ZW50czohMH0sbj1mdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFyZ3VtZW50cywoZnVuY3Rpb24odCl7Zm9yKHZhciBuIGluIHQpe2lmKCF0Lmhhc093blByb3BlcnR5KG4pKXJldHVybjtlW25dPXRbbl19fSkpLGV9LG89ZnVuY3Rpb24oZSl7XCIjXCI9PT1lLmNoYXJBdCgwKSYmKGU9ZS5zdWJzdHIoMSkpO2Zvcih2YXIgdCxuPVN0cmluZyhlKSxvPW4ubGVuZ3RoLHI9LTEsdT1cIlwiLGk9bi5jaGFyQ29kZUF0KDApOysrcjxvOyl7aWYoMD09PSh0PW4uY2hhckNvZGVBdChyKSkpdGhyb3cgbmV3IEludmFsaWRDaGFyYWN0ZXJFcnJvcihcIkludmFsaWQgY2hhcmFjdGVyOiB0aGUgaW5wdXQgY29udGFpbnMgVSswMDAwLlwiKTt1Kz10Pj0xJiZ0PD0zMXx8MTI3PT10fHwwPT09ciYmdD49NDgmJnQ8PTU3fHwxPT09ciYmdD49NDgmJnQ8PTU3JiY0NT09PWk/XCJcXFxcXCIrdC50b1N0cmluZygxNikrXCIgXCI6dD49MTI4fHw0NT09PXR8fDk1PT09dHx8dD49NDgmJnQ8PTU3fHx0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjI/bi5jaGFyQXQocik6XCJcXFxcXCIrbi5jaGFyQXQocil9cmV0dXJuXCIjXCIrdX0scj1mdW5jdGlvbigpe3JldHVybiBNYXRoLm1heChkb2N1bWVudC5ib2R5LnNjcm9sbEhlaWdodCxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0LGRvY3VtZW50LmJvZHkub2Zmc2V0SGVpZ2h0LGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5vZmZzZXRIZWlnaHQsZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQsZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCl9LHU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ/KG49dCxwYXJzZUludChlLmdldENvbXB1dGVkU3R5bGUobikuaGVpZ2h0LDEwKSt0Lm9mZnNldFRvcCk6MDt2YXIgbn0saT1mdW5jdGlvbih0LG4sbyl7MD09PXQmJmRvY3VtZW50LmJvZHkuZm9jdXMoKSxvfHwodC5mb2N1cygpLGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQhPT10JiYodC5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIiksdC5mb2N1cygpLHQuc3R5bGUub3V0bGluZT1cIm5vbmVcIiksZS5zY3JvbGxUbygwLG4pKX0scz1mdW5jdGlvbih0LG4sbyxyKXtpZihuLmVtaXRFdmVudHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQ3VzdG9tRXZlbnQpe3ZhciB1PW5ldyBDdXN0b21FdmVudCh0LHtidWJibGVzOiEwLGRldGFpbDp7YW5jaG9yOm8sdG9nZ2xlOnJ9fSk7ZG9jdW1lbnQuZGlzcGF0Y2hFdmVudCh1KX19O3JldHVybiBmdW5jdGlvbihjLGEpe3ZhciBsLGYsZCx2LHA9e2NhbmNlbFNjcm9sbDpmdW5jdGlvbihlKXtjYW5jZWxBbmltYXRpb25GcmFtZSh2KSx2PW51bGwsZXx8cyhcInNjcm9sbENhbmNlbFwiLGwpfSxhbmltYXRlU2Nyb2xsOmZ1bmN0aW9uKG8sYyxhKXtwLmNhbmNlbFNjcm9sbCgpO3ZhciBmPW4obHx8dCxhfHx7fSksaD1cIltvYmplY3QgTnVtYmVyXVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLG09aHx8IW8udGFnTmFtZT9udWxsOm87aWYoaHx8bSl7dmFyIHk9ZS5wYWdlWU9mZnNldDtmLmhlYWRlciYmIWQmJihkPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZi5oZWFkZXIpKTt2YXIgYixnLHcsRT11KGQpLE89aD9vOmZ1bmN0aW9uKHQsbixvLHUpe3ZhciBpPTA7aWYodC5vZmZzZXRQYXJlbnQpZG97aSs9dC5vZmZzZXRUb3AsdD10Lm9mZnNldFBhcmVudH13aGlsZSh0KTtyZXR1cm4gaT1NYXRoLm1heChpLW4tbywwKSx1JiYoaT1NYXRoLm1pbihpLHIoKS1lLmlubmVySGVpZ2h0KSksaX0obSxFLHBhcnNlSW50KFwiZnVuY3Rpb25cIj09dHlwZW9mIGYub2Zmc2V0P2Yub2Zmc2V0KG8sYyk6Zi5vZmZzZXQsMTApLGYuY2xpcCksUz1PLXksXz1yKCksST0wLE09ZnVuY3Rpb24oZSx0KXt2YXIgbj10LnNwZWVkQXNEdXJhdGlvbj90LnNwZWVkOk1hdGguYWJzKGUvMWUzKnQuc3BlZWQpO3JldHVybiB0LmR1cmF0aW9uTWF4JiZuPnQuZHVyYXRpb25NYXg/dC5kdXJhdGlvbk1heDp0LmR1cmF0aW9uTWluJiZuPHQuZHVyYXRpb25NaW4/dC5kdXJhdGlvbk1pbjpwYXJzZUludChuLDEwKX0oUyxmKSxMPWZ1bmN0aW9uKHQpe2J8fChiPXQpLEkrPXQtYix3PXkrUypmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVyblwiZWFzZUluUXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqdCksXCJlYXNlT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQqKDItdCkpLFwiZWFzZUluT3V0UXVhZFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/Mip0KnQ6KDQtMip0KSp0LTEpLFwiZWFzZUluQ3ViaWNcIj09PWUuZWFzaW5nJiYobj10KnQqdCksXCJlYXNlT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj0tLXQqdCp0KzEpLFwiZWFzZUluT3V0Q3ViaWNcIj09PWUuZWFzaW5nJiYobj10PC41PzQqdCp0KnQ6KHQtMSkqKDIqdC0yKSooMip0LTIpKzEpLFwiZWFzZUluUXVhcnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KSxcImVhc2VPdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPTEtIC0tdCp0KnQqdCksXCJlYXNlSW5PdXRRdWFydFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/OCp0KnQqdCp0OjEtOCotLXQqdCp0KnQpLFwiZWFzZUluUXVpbnRcIj09PWUuZWFzaW5nJiYobj10KnQqdCp0KnQpLFwiZWFzZU91dFF1aW50XCI9PT1lLmVhc2luZyYmKG49MSstLXQqdCp0KnQqdCksXCJlYXNlSW5PdXRRdWludFwiPT09ZS5lYXNpbmcmJihuPXQ8LjU/MTYqdCp0KnQqdCp0OjErMTYqLS10KnQqdCp0KnQpLGUuY3VzdG9tRWFzaW5nJiYobj1lLmN1c3RvbUVhc2luZyh0KSksbnx8dH0oZixnPShnPTA9PT1NPzA6SS9NKT4xPzE6ZyksZS5zY3JvbGxUbygwLE1hdGguZmxvb3IodykpLGZ1bmN0aW9uKHQsbil7dmFyIHI9ZS5wYWdlWU9mZnNldDtpZih0PT1ufHxyPT1ufHwoeTxuJiZlLmlubmVySGVpZ2h0K3IpPj1fKXJldHVybiBwLmNhbmNlbFNjcm9sbCghMCksaShvLG4saCkscyhcInNjcm9sbFN0b3BcIixmLG8sYyksYj1udWxsLHY9bnVsbCwhMH0odyxPKXx8KHY9ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCksYj10KX07MD09PWUucGFnZVlPZmZzZXQmJmUuc2Nyb2xsVG8oMCwwKSxmdW5jdGlvbihlLHQsbil7dHx8aGlzdG9yeS5wdXNoU3RhdGUmJm4udXBkYXRlVVJMJiZoaXN0b3J5LnB1c2hTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KG4pLGFuY2hvcjplLmlkfSxkb2N1bWVudC50aXRsZSxlPT09ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50P1wiI3RvcFwiOlwiI1wiK2UuaWQpfShvLGgsZiksXCJtYXRjaE1lZGlhXCJpbiBlJiZlLm1hdGNoTWVkaWEoXCIocHJlZmVycy1yZWR1Y2VkLW1vdGlvbilcIikubWF0Y2hlcz9pKG8sTWF0aC5mbG9vcihPKSwhMSk6KHMoXCJzY3JvbGxTdGFydFwiLGYsbyxjKSxwLmNhbmNlbFNjcm9sbCghMCksZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoTCkpfX19LGg9ZnVuY3Rpb24odCl7aWYoIXQuZGVmYXVsdFByZXZlbnRlZCYmISgwIT09dC5idXR0b258fHQubWV0YUtleXx8dC5jdHJsS2V5fHx0LnNoaWZ0S2V5KSYmXCJjbG9zZXN0XCJpbiB0LnRhcmdldCYmKGY9dC50YXJnZXQuY2xvc2VzdChjKSkmJlwiYVwiPT09Zi50YWdOYW1lLnRvTG93ZXJDYXNlKCkmJiF0LnRhcmdldC5jbG9zZXN0KGwuaWdub3JlKSYmZi5ob3N0bmFtZT09PWUubG9jYXRpb24uaG9zdG5hbWUmJmYucGF0aG5hbWU9PT1lLmxvY2F0aW9uLnBhdGhuYW1lJiYvIy8udGVzdChmLmhyZWYpKXt2YXIgbixyO3RyeXtuPW8oZGVjb2RlVVJJQ29tcG9uZW50KGYuaGFzaCkpfWNhdGNoKGUpe249byhmLmhhc2gpfWlmKFwiI1wiPT09bil7aWYoIWwudG9wT25FbXB0eUhhc2gpcmV0dXJuO3I9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50fWVsc2Ugcj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKG4pOyhyPXJ8fFwiI3RvcFwiIT09bj9yOmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkmJih0LnByZXZlbnREZWZhdWx0KCksZnVuY3Rpb24odCl7aWYoaGlzdG9yeS5yZXBsYWNlU3RhdGUmJnQudXBkYXRlVVJMJiYhaGlzdG9yeS5zdGF0ZSl7dmFyIG49ZS5sb2NhdGlvbi5oYXNoO249bnx8XCJcIixoaXN0b3J5LnJlcGxhY2VTdGF0ZSh7c21vb3RoU2Nyb2xsOkpTT04uc3RyaW5naWZ5KHQpLGFuY2hvcjpufHxlLnBhZ2VZT2Zmc2V0fSxkb2N1bWVudC50aXRsZSxufHxlLmxvY2F0aW9uLmhyZWYpfX0obCkscC5hbmltYXRlU2Nyb2xsKHIsZikpfX0sbT1mdW5jdGlvbihlKXtpZihudWxsIT09aGlzdG9yeS5zdGF0ZSYmaGlzdG9yeS5zdGF0ZS5zbW9vdGhTY3JvbGwmJmhpc3Rvcnkuc3RhdGUuc21vb3RoU2Nyb2xsPT09SlNPTi5zdHJpbmdpZnkobCkpe3ZhciB0PWhpc3Rvcnkuc3RhdGUuYW5jaG9yO1wic3RyaW5nXCI9PXR5cGVvZiB0JiZ0JiYhKHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvKGhpc3Rvcnkuc3RhdGUuYW5jaG9yKSkpfHxwLmFuaW1hdGVTY3JvbGwodCxudWxsLHt1cGRhdGVVUkw6ITF9KX19O3JldHVybiBwLmRlc3Ryb3k9ZnVuY3Rpb24oKXtsJiYoZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsaCwhMSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKSxwLmNhbmNlbFNjcm9sbCgpLGw9bnVsbCxmPW51bGwsZD1udWxsLHY9bnVsbCl9LGZ1bmN0aW9uKCl7aWYoIShcInF1ZXJ5U2VsZWN0b3JcImluIGRvY3VtZW50JiZcImFkZEV2ZW50TGlzdGVuZXJcImluIGUmJlwicmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJpbiBlJiZcImNsb3Nlc3RcImluIGUuRWxlbWVudC5wcm90b3R5cGUpKXRocm93XCJTbW9vdGggU2Nyb2xsOiBUaGlzIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgSmF2YVNjcmlwdCBtZXRob2RzIGFuZCBicm93c2VyIEFQSXMuXCI7cC5kZXN0cm95KCksbD1uKHQsYXx8e30pLGQ9bC5oZWFkZXI/ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihsLmhlYWRlcik6bnVsbCxkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIixoLCExKSxsLnVwZGF0ZVVSTCYmbC5wb3BzdGF0ZSYmZS5hZGRFdmVudExpc3RlbmVyKFwicG9wc3RhdGVcIixtLCExKX0oKSxwfX0ocil9LmFwcGx5KHQsW10pLHZvaWQgMD09PW98fChlLmV4cG9ydHM9byl9LDQzMjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dGhpcyYmdGhpcy5fX2NyZWF0ZUJpbmRpbmd8fChPYmplY3QuY3JlYXRlP2Z1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG8se2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbbl19fSl9OmZ1bmN0aW9uKGUsdCxuLG8pe3ZvaWQgMD09PW8mJihvPW4pLGVbb109dFtuXX0pLHI9dGhpcyYmdGhpcy5fX2V4cG9ydFN0YXJ8fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIGUpXCJkZWZhdWx0XCI9PT1ufHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKXx8byh0LGUsbil9O09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHIobig0NyksdCkscihuKDkyNiksdCkscihuKDM0OSksdCkscihuKDEzNyksdCkscihuKDcyOSksdCkscihuKDM4MyksdCkscihuKDQ1MCksdCkscihuKDM1OCksdCkscihuKDc1MyksdCkscihuKDg2OSksdCkscihuKDM1MiksdCkscihuKDQ0NiksdCkscihuKDE2NCksdCkscihuKDMwNSksdCkscihuKDUwMiksdCl9LDM0OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VBcnJvd05hdmlnYXRpb249dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUFycm93TmF2aWdhdGlvbj1mdW5jdGlvbihlKXt2YXIgdD1lLmxpc3RJdGVtcyxuPWUub25BcnJvd1VwT3JEb3duLHI9KDAsby51c2VTdGF0ZSkoMCksdT1yWzBdLGk9clsxXSxzPSgwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbihlKXtpKGUpfSksW3RdKSxjPWZ1bmN0aW9uKGUpe3ZhciBvPWUua2V5O2lmKG51bGw9PXQ/dm9pZCAwOnQubGVuZ3RoKWlmKFwiQXJyb3dVcFwiPT09byluJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHModT4wP3UtMTp0Lmxlbmd0aC0xKTtlbHNle2lmKFwiQXJyb3dEb3duXCIhPT1vKXJldHVybjtuJiZuKCksZS5wcmV2ZW50RGVmYXVsdCgpLHU8dC5sZW5ndGgtMT9zKHUrMSk6cygwKX19O3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsYyl9fSkpLCgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtzKDApfSksW3RdKSx7c2VsZWN0ZWRJbmRleDp1fX19LDQ0NjpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VEZWJvdW5jZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRGVib3VuY2U9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0zMDApO3ZhciBuPSgwLG8udXNlU3RhdGUpKGUpLHI9blswXSx1PW5bMV07cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe3ZhciBuPXNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dShlKX0pLHQpO3JldHVybiBmdW5jdGlvbigpe2NsZWFyVGltZW91dChuKX19KSxbZSx0XSkscn19LDE2NDpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VFbGVtZW50U2l6ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlRWxlbWVudFNpemU9ZnVuY3Rpb24oKXt2YXIgZSx0LG49KDAsby51c2VSZWYpKG51bGwpO3JldHVybltuLHt3aWR0aDpudWxsPT09KGU9bnVsbD09bj92b2lkIDA6bi5jdXJyZW50KXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5jbGllbnRXaWR0aCxoZWlnaHQ6bnVsbD09PSh0PW51bGw9PW4/dm9pZCAwOm4uY3VycmVudCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuY2xpZW50SGVpZ2h0fV19LHQuZGVmYXVsdD10LnVzZUVsZW1lbnRTaXplfSwxMzc6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSW50ZXJzZWN0aW9uT2JzZXJ2ZXI9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUludGVyc2VjdGlvbk9ic2VydmVyPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG8udXNlUmVmKShudWxsKSxuPSgwLG8udXNlU3RhdGUpKCExKSxyPW5bMF0sdT1uWzFdLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTt1KHQuaXNJbnRlcnNlY3RpbmcpfTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7aWYod2luZG93JiZ3aW5kb3cuSW50ZXJzZWN0aW9uT2JzZXJ2ZXIpe3ZhciBuPW5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihpLGUpLG89dC5jdXJyZW50O3JldHVybiB0LmN1cnJlbnQmJm4ub2JzZXJ2ZSh0LmN1cnJlbnQpLGZ1bmN0aW9uKCl7byYmbi51bm9ic2VydmUobyl9fXUoITEpfSksW3QsZV0pLHtjb250YWluZXJSZWY6dCxpc1Zpc2libGU6cn19LHQuZGVmYXVsdD10LnVzZUludGVyc2VjdGlvbk9ic2VydmVyfSw3Mjk6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNCcmVha3BvaW50PXZvaWQgMDt2YXIgbz1uKDE1Nikscj1uKDQzMiksdT17eHM6MSxtb2JpbGVTbWFsbDozMjAsbW9iaWxlOjM3NSx0YWJsZXQ6NzY4LHRhYmxldExhcmdlOjkyMCxkZXNrdG9wU21hbGw6MTAyNCxkZXNrdG9wOjEyNjAsZGVza3RvcExhcmdlOjE0NDB9O3QudXNlSXNCcmVha3BvaW50PWZ1bmN0aW9uKGUpe3ZhciB0PVwic3RyaW5nXCI9PXR5cGVvZiBlP3VbZV06ZSxuPSgwLG8udXNlU3RhdGUpKG51bGwpLGk9blswXSxzPW5bMV0sYz0oMCxvLnVzZUNhbGxiYWNrKSgoZnVuY3Rpb24oKXtzKHdpbmRvdy5pbm5lcldpZHRoKX0pLFtdKTtyZXR1cm4oMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7YygpfSksW10pLCgwLHIudXNlT25SZXNpemUpKGMpLGk+PXR9LHQuZGVmYXVsdD10LnVzZUlzQnJlYWtwb2ludH0sNDUwOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZUlzTG9hZGluZ0FmdGVyRXJyb3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj0oMCxvLnVzZVN0YXRlKSh0KSxyPW5bMF0sdT1uWzFdO3JldHVybigwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtlfHx1KHQpfSksW2UsdF0pLGUmJnJ9fSwzMDU6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlSXNNb2JpbGU9dm9pZCAwO3ZhciBvPW4oNzI5KTt0LnVzZUlzTW9iaWxlPWZ1bmN0aW9uKCl7cmV0dXJuISgwLG8udXNlSXNCcmVha3BvaW50KShcInRhYmxldFwiKX0sdC5kZWZhdWx0PXQudXNlSXNNb2JpbGV9LDM4MzpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0PVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3c/by51c2VMYXlvdXRFZmZlY3Q6by51c2VFZmZlY3QsdC5kZWZhdWx0PXQudXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdH0sNzUzOmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU9uTG9zZUZvY3VzV2l0aGluPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPbkxvc2VGb2N1c1dpdGhpbj1mdW5jdGlvbihlKXt2YXIgdD1lLnJlZixuPWUuY2FsbGJhY2sscj1lLndhdGNoOygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3ZhciBlO2lmKHIpcmV0dXJuKG51bGw9PT0oZT10LmN1cnJlbnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLm1hdGNoZXMoXCI6Zm9jdXMtd2l0aGluXCIpKT92b2lkIDA6bigpfTtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSksZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleXVwXCIsZSl9fSksW24sdCxyXSl9LHQuZGVmYXVsdD10LnVzZU9uTG9zZUZvY3VzV2l0aGlufSw1MDI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25SZXNpemU9dm9pZCAwO3ZhciBvPW4oMTU2KTt0LnVzZU9uUmVzaXplPWZ1bmN0aW9uKGUpeygwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt2YXIgdD1mdW5jdGlvbigpe2Uod2luZG93LmlubmVyV2lkdGgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0LHtwYXNzaXZlOiEwfSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0KX19KSxbXSl9LHQuZGVmYXVsdD10LnVzZU9uUmVzaXplfSwzNTI6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlT25XaW5kb3dGb2N1cz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlT25XaW5kb3dGb2N1cz1mdW5jdGlvbihlKXsoMCxvLnVzZUVmZmVjdCkoKGZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oKXtlJiZcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSYmZSgpfTtyZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCwhMSksZnVuY3Rpb24oKXtyZXR1cm4gd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdCl9fSksW2VdKX19LDQ3OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZU91dHNpZGVSZWFjdGVyPXZvaWQgMDt2YXIgbz1uKDE1Nik7dC51c2VPdXRzaWRlUmVhY3Rlcj1mdW5jdGlvbihlLHQpe2Z1bmN0aW9uIG4obil7ZS5jdXJyZW50JiYhZS5jdXJyZW50LmNvbnRhaW5zKG4udGFyZ2V0KSYmdCgpfSgwLG8udXNlRWZmZWN0KSgoZnVuY3Rpb24oKXtyZXR1cm4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pLGZ1bmN0aW9uKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLG4pfX0pKX19LDg2OTpmdW5jdGlvbihlLHQsbil7XCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksdC51c2VSdW5BZnRlclVwZGF0ZT12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlUnVuQWZ0ZXJVcGRhdGU9ZnVuY3Rpb24oKXt2YXIgZT0oMCxvLnVzZVJlZikobnVsbCk7cmV0dXJuKDAsby51c2VFZmZlY3QpKChmdW5jdGlvbigpe2UuY3VycmVudCYmKGUuY3VycmVudCgpLGUuY3VycmVudD1udWxsKX0pKSxmdW5jdGlvbih0KXtlLmN1cnJlbnQ9dH19LHQuZGVmYXVsdD10LnVzZVJ1bkFmdGVyVXBkYXRlfSw5MjY6ZnVuY3Rpb24oZSx0LG4pe1widXNlIHN0cmljdFwiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiX19lc01vZHVsZVwiLHt2YWx1ZTohMH0pLHQudXNlU2Nyb2xsTG9jaz12b2lkIDA7dmFyIG89bigxNTYpO3QudXNlU2Nyb2xsTG9jaz1mdW5jdGlvbigpe3JldHVybntsb2NrOigwLG8udXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe3ZhciBlPXdpbmRvdy5zY3JvbGxZK1wicHhcIix0PWRvY3VtZW50LmJvZHk7dC5zdHlsZS5wb3NpdGlvbj1cImZpeGVkXCIsdC5zdHlsZS50b3A9XCItXCIrZX0pLFtdKSx1bmxvY2s6KDAsby51c2VDYWxsYmFjaykoKGZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuYm9keSx0PWUuc3R5bGUudG9wLG49LTEqcGFyc2VJbnQodHx8XCIwXCIpO2Uuc3R5bGUucG9zaXRpb249XCJcIixlLnN0eWxlLnRvcD1cIlwiLG4mJndpbmRvdy5zY3JvbGxUbygwLC0xKnBhcnNlSW50KHR8fFwiMFwiKSl9KSxbXSl9fX0sMzU4OmZ1bmN0aW9uKGUsdCxuKXtcInVzZSBzdHJpY3RcIjt2YXIgbz10aGlzJiZ0aGlzLl9faW1wb3J0RGVmYXVsdHx8ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcIl9fZXNNb2R1bGVcIix7dmFsdWU6ITB9KSx0LnVzZVNtb290aFNjcm9sbD12b2lkIDA7dmFyIHI9bigxNTYpLHU9byhuKDg4OCkpO3QudXNlU21vb3RoU2Nyb2xsPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLHIudXNlUmVmKShudWxsKSxuPWUucmVmLG89ZS5vZmZzZXQsaT12b2lkIDA9PT1vPzA6byxzPWUuc3BlZWQsYz12b2lkIDA9PT1zPzUwMDpzO3JldHVybigwLHIudXNlRWZmZWN0KSgoZnVuY3Rpb24oKXt0LmN1cnJlbnQ9bmV3IHUuZGVmYXVsdChudWxsLHtzcGVlZDpjLHNwZWVkQXNEdXJhdGlvbjohMH0pfSksW10pLCgwLHIudXNlQ2FsbGJhY2spKChmdW5jdGlvbigpe24mJnQuY3VycmVudCYmdC5jdXJyZW50LmFuaW1hdGVTY3JvbGwobi5jdXJyZW50LG51bGwse29mZnNldDpmdW5jdGlvbigpe3JldHVybiBpfSx1cGRhdGVVUkw6ITF9KX0pLFtpLG5dKX19LDE1NjpmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9ZX19LG49e307ZnVuY3Rpb24gbyhlKXt2YXIgcj1uW2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHIuZXhwb3J0czt2YXIgdT1uW2VdPXtleHBvcnRzOnt9fTtyZXR1cm4gdFtlXS5jYWxsKHUuZXhwb3J0cyx1LHUuZXhwb3J0cyxvKSx1LmV4cG9ydHN9cmV0dXJuIG8uZz1mdW5jdGlvbigpe2lmKFwib2JqZWN0XCI9PXR5cGVvZiBnbG9iYWxUaGlzKXJldHVybiBnbG9iYWxUaGlzO3RyeXtyZXR1cm4gdGhpc3x8bmV3IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKX1jYXRjaChlKXtpZihcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXJldHVybiB3aW5kb3d9fSgpLG8oNDMyKX0oKX0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgaTE4bmV4dCBmcm9tICdpMThuZXh0JztcbmltcG9ydCBjeCBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBBdXRvc3VnZ2VzdCBmcm9tICdyZWFjdC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgeyBleGVjdXRlU2VhcmNoIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWV4ZWN1dGUtc2VhcmNoLWltbWlkaWF0ZSc7XG5pbXBvcnQgU3VnZ2VzdGlvbkl0ZW0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtc3VnZ2VzdGlvbi1pdGVtJztcbmltcG9ydCB7XG4gIGdldE5hbWVMYWJlbCxcbiAgZ2V0U3RvcENvZGUsXG59IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbmltcG9ydCB7IGdldFN0b3BOYW1lIH0gZnJvbSAnQGRpZ2l0cmFuc2l0LXNlYXJjaC11dGlsL2RpZ2l0cmFuc2l0LXNlYXJjaC11dGlsLWhlbHBlcnMnO1xuaW1wb3J0IGdldExhYmVsIGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC1nZXQtbGFiZWwnO1xuaW1wb3J0IEljb24gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgeyBEYXRlVGltZSwgU2V0dGluZ3MgfSBmcm9tICdsdXhvbic7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vaGVscGVycy90cmFuc2xhdGlvbnMnO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuaW1wb3J0IE1vYmlsZVNlYXJjaCBmcm9tICcuL2hlbHBlcnMvTW9iaWxlU2VhcmNoJztcbmltcG9ydCB3aXRoU2Nyb2xsTG9jayBmcm9tICcuL2hlbHBlcnMvd2l0aFNjcm9sbExvY2snO1xuXG5TZXR0aW5ncy5kZWZhdWx0TG9jYWxlID0gJ2VuJztcblxuaTE4bmV4dC5pbml0KHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgaW50ZXJwb2xhdGlvbjoge1xuICAgIGVzY2FwZVZhbHVlOiBmYWxzZSwgLy8gbm90IG5lZWRlZCBmb3IgcmVhY3QgYXMgaXQgZXNjYXBlcyBieSBkZWZhdWx0XG4gIH0sXG59KTtcblxuY29uc3QgTG9hZGluZyA9IHByb3BzID0+IChcbiAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snc3Bpbm5lci1sb2FkZXInXX0+XG4gICAgeyhwcm9wcyAmJiBwcm9wcy5jaGlsZHJlbikgfHwgKFxuICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0+e2kxOG5leHQudCgnbG9hZGluZycpfTwvc3Bhbj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbkxvYWRpbmcucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG59O1xuXG5Mb2FkaW5nLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbn07XG5cbmNvbnN0IGdldFBsYXRmb3JtID0gYWRkZW5kdW0gPT4ge1xuICBpZiAoIWFkZGVuZHVtIHx8ICFhZGRlbmR1bS5HVEZTLnBsYXRmb3JtKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCB7IG1vZGVzLCBwbGF0Zm9ybSB9ID0gYWRkZW5kdW0uR1RGUztcbiAgY29uc3QgdHlwZSA9XG4gICAgbW9kZXMgJiYgbW9kZXNbMF0gPT09ICdSQUlMJyA/IGkxOG5leHQudCgndHJhY2snKSA6IGkxOG5leHQudCgncGxhdGZvcm0nKTtcbiAgcmV0dXJuIFt0eXBlLCBwbGF0Zm9ybV07XG59O1xuXG5mdW5jdGlvbiBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKSB7XG4gIGlmIChpdGVtLnR5cGUgIT09ICdGdXR1cmVSb3V0ZScpIHtcbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tbWFwJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIFsnJywgaTE4bmV4dC50KCd1c2Utb3duLXBvc2l0aW9uJyldO1xuICAgIH1cbiAgICBpZiAoaXRlbS50eXBlID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycpIHtcbiAgICAgIHJldHVybiBbJycsIGkxOG5leHQudCgnc2VsZWN0LWZyb20tb3duLWxvY2F0aW9ucycpXTtcbiAgICB9XG4gICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdCAqL1xuICAgIGxldCBbbmFtZSwgbGFiZWxdID0gZ2V0TmFtZUxhYmVsKGl0ZW0ucHJvcGVydGllcywgdHJ1ZSk7XG4gICAgbGV0IHN1Z2dlc3Rpb25UeXBlO1xuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlcmVudGFsJykgfHxcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdiaWtlc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgndmVoaWNsZXJlbnRhbHN0YXRpb24nKTtcbiAgICAgIGNvbnN0IHN0b3BDb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmxhYmVsSWQ7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHN0b3BDb2RlXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnYmlrZXBhcmsnKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudCgnYmlrZXBhcmsnKTtcbiAgICAgIHJldHVybiBbc3VnZ2VzdGlvblR5cGUsIG5hbWUsIHVuZGVmaW5lZCwgdW5kZWZpbmVkXTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnY2FycGFyaycpIHtcbiAgICAgIHN1Z2dlc3Rpb25UeXBlID0gaTE4bmV4dC50KCdjYXJwYXJrJyk7XG4gICAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgfVxuXG4gICAgaWYgKGl0ZW0ucHJvcGVydGllcy5tb2RlKSB7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChcbiAgICAgICAgaXRlbS5wcm9wZXJ0aWVzLm1vZGUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyksXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBsYXllciA9IGl0ZW0ucHJvcGVydGllcy5sYXllclxuICAgICAgICAucmVwbGFjZSgncm91dGUtJywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgICAgIC5yZXBsYWNlKCdmYXZvdXJpdGUnLCAnJyk7XG4gICAgICBzdWdnZXN0aW9uVHlwZSA9IGkxOG5leHQudChsYXllcik7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgaXRlbS5wcm9wZXJ0aWVzLmlkICYmXG4gICAgICAoaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RvcCcgfHwgaXRlbS5wcm9wZXJ0aWVzLmxheWVyID09PSAnc3RhdGlvbicpXG4gICAgKSB7XG4gICAgICBjb25zdCBzdG9wQ29kZSA9IGdldFN0b3BDb2RlKGl0ZW0ucHJvcGVydGllcyk7XG4gICAgICBjb25zdCBtb2RlID0gaXRlbS5wcm9wZXJ0aWVzLmFkZGVuZHVtPy5HVEZTLm1vZGVzO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgc3VnZ2VzdGlvblR5cGUsXG4gICAgICAgIGdldFN0b3BOYW1lKG5hbWUsIHN0b3BDb2RlKSxcbiAgICAgICAgbGFiZWwsXG4gICAgICAgIHN0b3BDb2RlLFxuICAgICAgICBtb2RlLFxuICAgICAgICBwbGF0Zm9ybSxcbiAgICAgIF07XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGl0ZW0ucHJvcGVydGllcy5sYXllciA9PT0gJ2Zhdm91cml0ZVN0b3AnIHx8XG4gICAgICBpdGVtLnByb3BlcnRpZXMubGF5ZXIgPT09ICdmYXZvdXJpdGVTdGF0aW9uJ1xuICAgICkge1xuICAgICAgY29uc3QgeyBhZGRyZXNzLCBjb2RlIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gICAgICBjb25zdCBzdG9OYW1lID0gYWRkcmVzcyA/IGdldFN0b3BOYW1lKGFkZHJlc3Muc3BsaXQoJywnKVswXSwgY29kZSkgOiBuYW1lO1xuICAgICAgY29uc3QgcGxhdGZvcm0gPSBnZXRQbGF0Zm9ybShpdGVtLnByb3BlcnRpZXMuYWRkZW5kdW0pO1xuICAgICAgcmV0dXJuIFtzdWdnZXN0aW9uVHlwZSwgc3RvTmFtZSwgbGFiZWwsIGNvZGUsIHVuZGVmaW5lZCwgcGxhdGZvcm1dO1xuICAgIH1cbiAgICByZXR1cm4gW3N1Z2dlc3Rpb25UeXBlLCBuYW1lLCBsYWJlbF07XG4gIH1cbiAgY29uc3QgeyBvcmlnaW4sIGRlc3RpbmF0aW9uIH0gPSBpdGVtLnByb3BlcnRpZXM7XG4gIGNvbnN0IHRhaWwxID0gb3JpZ2luLmxvY2FsaXR5ID8gYCwgJHtvcmlnaW4ubG9jYWxpdHl9IGZvb2JhcmAgOiAnJztcbiAgY29uc3QgdGFpbDIgPSBkZXN0aW5hdGlvbi5sb2NhbGl0eSA/IGAsICR7ZGVzdGluYXRpb24ubG9jYWxpdHl9YCA6ICcnO1xuICBjb25zdCBuYW1lMSA9IG9yaWdpbi5uYW1lO1xuICBjb25zdCBuYW1lMiA9IGRlc3RpbmF0aW9uLm5hbWU7XG4gIHJldHVybiBbXG4gICAgaTE4bmV4dC50KCdmdXR1cmUtcm91dGUnKSxcbiAgICBgJHtpMThuZXh0LnQoJ29yaWdpbicpfSAke25hbWUxfSR7dGFpbDF9ICR7aTE4bmV4dC50KFxuICAgICAgJ2Rlc3RpbmF0aW9uJyxcbiAgICApfSAke25hbWUyfSR7dGFpbDJ9YCxcbiAgICBpdGVtLnRyYW5zbGF0ZWRUZXh0LFxuICBdO1xufVxuXG5mdW5jdGlvbiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pIHtcbiAgY29uc3QgdGltZSA9IERhdGVUaW1lLmZyb21TZWNvbmRzKE51bWJlcihpdGVtLnByb3BlcnRpZXMudGltZSkpO1xuICBjb25zdCBub3cgPSBEYXRlVGltZS5ub3coKTtcbiAgbGV0IHN0ciA9IGl0ZW0ucHJvcGVydGllcy5hcnJpdmVCeVxuICAgID8gaTE4bmV4dC50KCdhcnJpdmFsJylcbiAgICA6IGkxOG5leHQudCgnZGVwYXJ0dXJlJyk7XG4gIGlmICh0aW1lLmhhc1NhbWUobm93LCAnZGF5JykpIHtcbiAgICBzdHIgPSBgJHtzdHJ9ICR7aTE4bmV4dC50KCd0b2RheS1hdCcpfWA7XG4gIH0gZWxzZSBpZiAodGltZS5oYXNTYW1lKG5vdy5wbHVzKHsgZGF5czogMSB9KSwgJ2RheScpKSB7XG4gICAgc3RyID0gYCR7c3RyfSAke2kxOG5leHQudCgndG9tb3Jyb3ctYXQnKX1gO1xuICB9IGVsc2Uge1xuICAgIHN0ciA9IGAke3N0cn0gJHt0aW1lLnRvRm9ybWF0KCdjY2MgZC5MLicpfWA7XG4gIH1cbiAgc3RyID0gYCR7c3RyfSAke3RpbWUudG9Gb3JtYXQoJ0hIOm1tJyl9YDtcbiAgcmV0dXJuIHN0cjtcbn1cblxuY29uc3QgZ2V0U3VnZ2VzdGlvblZhbHVlID0gc3VnZ2VzdGlvbiA9PiB7XG4gIGlmIChcbiAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyB8fFxuICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ2JhY2snXG4gICkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gZ2V0TGFiZWwoc3VnZ2VzdGlvbi5wcm9wZXJ0aWVzKTtcbn07XG4vKipcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICogY29uc3QgbGFuZyA9ICdmaSc7IC8vIGVuLCBmaSBvciBzdlxuICogY29uc3Qgb25TZWxlY3QgPSAoaXRlbSwgaWQpID0+IHtcbiAqICAgIC8vIEZ1bnRpb25hbGl0eSB3aGVuIHVzZXIgc2VsZWN0cyBhIHN1Z2dlc2lvbnMuIE5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICByZXR1cm4gbnVsbDtcbiAqIH07XG4gKiBjb25zdCBvbkNsZWFyID0gaWQgPT4ge1xuICogICAgLy8gQ2FsbGVkICB3aGVuIHVzZXIgY2xpY2tzIHRoZSBjbGVhciBzZWFyY2ggc3RyaW5nIGJ1dHRvbi4gTm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbi5cbiAqICAgIHJldHVybiBudWxsO1xuICogfTtcbiAqIGNvbnN0IGdldEF1dG9TdWdnZXN0SWNvbnM6IHtcbiAqICAgLy8gQ2FsbGVkIGZvciBldmVyeSBjaXR5IGJpa2Ugc3RhdGlvbiByZW5kZXJlZCBhcyBhIHNlYXJjaCBzdWdnZXN0aW9uLiBTaG91bGQgcmV0dXJuIHRoZSBpY29uIGFuZFxuICogICAvLyBjb2xvciB1c2VkIGZvciB0aGF0IHN0YXRpb24uIFR3byBpY29ucyBhcmUgYXZhaWxhYmxlLCAnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcgYW5kaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0LXNlY29uZGFyeScuXG4gKiAgIGNpdHliaWtlczogc3RhdGlvbiA9PiB7XG4gKiAgICAgIHJldHVybiBbJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnLCAnI2YyYjYyZCddO1xuICogICB9XG4gKiB9XG4gKiBjb25zdCB0cmFuc3BvcnRNb2RlID0gdW5kZWZpbmVkO1xuICogY29uc3QgcGxhY2Vob2xkZXIgPSBcInN0b3AtbmVhci15b3VcIjtcbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBPcHRpb25zIGFyZSBMb2NhdGlvbnMsIFN0b3BzLCBTdGF0aW9ucywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpIGFuZCBEYXRhc291cmNlLiBMZWF2ZSBlbXB0eSB0byB1c2UgYWxsIHNvdXJjZXMuXG4gKiByZXR1cm4gKFxuICogIDxEVEF1dG9zdWdnZXN0XG4gKiAgICBhcHBFbGVtZW50PXthcHBFbGVtZW50fSAvLyBSZXF1aXJlZC4gUm9vdCBlbGVtZW50J3MgaWQuIE5lZWRlZCBmb3IgcmVhY3QtbW9kYWwgY29tcG9uZW50LlxuICogICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAqICAgIGljb249XCJvcmlnaW5cIiAvLyBPcHRpb25hbCBTdHJpbmcgZm9yIGljb24gdGhhdCBpcyBzaG93biBsZWZ0IG9mIHNlYXJjaGZpZWxkLiB1c2VkIHdpdGggSWNvbiBsaWJyYXJ5XG4gKiAgICBpZD1cIm9yaWdpblwiIC8vIHVzZWQgZm9yIHN0eWxlIHByb3BzIGFuZCBpbmZvIGZvciBjb21wb25lbnQuXG4gKiAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9IC8vIFN0cmluZyB0aGF0IGlzIHNob3ducyBpbml0YWxseSBpbiBzZWFyY2ggZmllbGRcbiAqICAgIHZhbHVlPVwiXCIgLy8gZS5nLiB1c2VyIHR5cGVkIHN0cmluZyB0aGF0IGlzIHNob3duIGluIHNlYXJjaCBmaWVsZFxuICogICAgb25TZWxlY3Q9e29uU2VsZWN0fVxuICogICAgb25DbGVhcj17b25DbGVhcn1cbiAqICAgIGF1dG9Gb2N1cz17ZmFsc2V9IC8vIGRlZmluZXMgdGhhdCBzaG91bGQgdGhpcyBmaWVsZCBiZSBhdXRvbWF0aWNhbGx5IGZvY3VzZWQgd2hlbiBwYWdlIGlzIGxvYWRlZC5cbiAqICAgIGxhbmc9e2xhbmd9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgdHJhbnNwb3J0TW9kZT17dHJhbnNwb3J0TW9kZX0gLy8gdHJhbnNwb3J0bW9kZSB3aXRoIHdoaWNoIHdlIGZpbHRlciB0aGUgcm91dGVzLCBlLmcuIHJvdXRlLUJVU1xuICogICAgZ2VvY29kaW5nU2l6ZT17MTB9IC8vIGRlZmluZXMgaG93IG1hbnkgc3RvcHMgYW5kIHN0YXRpb25zIHRvIGZldGNoIGZyb20gZ2VvY29kaW5nLiBVc2VmdWwgaWYgeW91IHdhbnQgdG8gZmlsdGVyIHRoZSByZXN1bHRzIGFuZCBzdGlsbCBnZXQgYSByZWFzb25hYmxlIGFtb3VudCBvZiBzdWdnZXN0aW9ucy5cbiAqICAgIGZpbHRlclJlc3VsdHM9e3Jlc3VsdHMgPT4gcmV0dXJuIHJlc3VsdHN9IC8vIE9wdGlvbmFsIGZpbHRlcmluZyBmdW5jdGlvbiBmb3Igcm91dGVzIGFuZCBzdG9wc1xuICogICAgaGFuZGVsVmlhUG9pbnRzPXsoKSA9PiByZXR1cm4gbnVsbCB9IC8vIE9wdGlvbmFsIFZpYSBwb2ludCBoYW5kbGluZyBsb2dpYy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgZm9jdXNDaGFuZ2U9eygpID0+IHJldHVybiBudWxsfSAvLyBXaGVuIHN1Z2dlc3Rpb24gaXMgc2VsZWN0ZWQsIGhhbmRsZSBjaGFuZ2luZyBmb2N1cy4gVGhpcyBpcyBjdXJyZW50bHkgbWFuYWdlZCB3aXRoIERUQXV0b3N1Z2dlc3RwYW5lbCBieSBkZWZhdWx0LCBidXQgaWYgRFRBdXRvc3VnZ2VzdCBpcyB1c2VkIHNlcGVyYXRlbGx5IG93biBpbXBsZW1lbnRhdGlvbiBtdXN0IGJlIHByb3ZpZGVkLlxuICogICAgc3RvcmVSZWY9eygpID0+IHJldHVybiBudWxsfSAvLyBGdW5jdGlvbmFsaXR5IHRvIHN0b3JlIHJlZnMuIEN1cnJlbmx0eSBtYW5hZ2VkIHdpdGggRFRBdXRvc3VnZ2VzdHBhbmVsIGJ5IGRlZmF1bHQsIGJ1dCBpZiBEVEF1dG9zdWdnZXN0IGlzIHVzZWQgc2VwZXJhdGVsbHkgb3duIGltcGxlbWVudGF0aW9uIG11c3QgYmUgcHJvdmlkZWQuXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBtb2JpbGVMYWJlbD1cIkN1c3RvbSBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQgb24gbW9iaWxlLlxuICogICAgaW5wdXRDbGFzc05hbWU9XCJcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGNsYXNzbmFtZSBhcHBsaWVkIHRvIHRoZSBpbnB1dCBlbGVtZW50IG9mIHRoZSBjb21wb25lbnQgZm9yIHByb3ZpZGluZyBDU1Mgc3R5bGVzLlxuICogICAgdHJhbnNsYXRlZFBsYWNlaG9sZGVyPSAvLyBPcHRpb25hbC4gQ3VzdG9uIHRyYW5zbGF0ZWQgcGxhY2Vob2xkZXIgdGV4dCBmb3IgYXV0b3N1Z2dlc3QgZmllbGQuXG4gKi9cbmNsYXNzIERUQXV0b3N1Z2dlc3QgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAgIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGlkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgcGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgdmFsdWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VhcmNoQ29udGV4dDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIFVSTF9QRUxJQVM6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGNvbnRleHQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgICBjbGVhck9sZFNlYXJjaGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICAgIGNsZWFyRnV0dXJlUm91dGVzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIGFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBvblNlbGVjdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICB0cmFuc3BvcnRNb2RlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGZpbHRlclJlc3VsdHM6IFByb3BUeXBlcy5mdW5jLFxuICAgIGdlb2NvZGluZ1NpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc3RvcmVSZWY6IFByb3BUeXBlcy5mdW5jLFxuICAgIGhhbmRsZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIGNvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGhvdmVyQ29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB0aW1lWm9uZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBwYXRoT3B0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIHJvdXRlc1ByZWZpeDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHN0b3BzUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLFxuICAgIG1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGxvY2s6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgdW5sb2NrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIHJlZlBvaW50OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgYWRkcmVzczogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgICAgIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBpbnB1dENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBmb250V2VpZ2h0czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIG1lZGl1bTogUHJvcFR5cGVzLm51bWJlcixcbiAgICB9KSxcbiAgICBtb2RlSWNvbkNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuZnVuYyksXG4gICAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIG1vZGVTZXQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gIH07XG5cbiAgc3RhdGljIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBhdXRvRm9jdXM6IGZhbHNlLFxuICAgIGNsYXNzTmFtZTogJycsXG4gICAgaWNvbjogdW5kZWZpbmVkLFxuICAgIHZhbHVlOiAnJyxcbiAgICB0cmFuc3BvcnRNb2RlOiB1bmRlZmluZWQsXG4gICAgZmlsdGVyUmVzdWx0czogdW5kZWZpbmVkLFxuICAgIG9uQ2xlYXI6IHVuZGVmaW5lZCxcbiAgICBsYW5nOiAnZmknLFxuICAgIHN0b3JlUmVmOiB1bmRlZmluZWQsXG4gICAgaGFuZGxlVmlhUG9pbnRzOiB1bmRlZmluZWQsXG4gICAgZm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiB1bmRlZmluZWQsXG4gICAgc291cmNlczogW10sXG4gICAgdGFyZ2V0czogdW5kZWZpbmVkLFxuICAgIGlzTW9iaWxlOiBmYWxzZSxcbiAgICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgICBnZW9jb2RpbmdTaXplOiB1bmRlZmluZWQsXG4gICAgY29sb3I6ICcjMDA3YWM5JyxcbiAgICBob3ZlckNvbG9yOiAnIzAwNjJhMScsXG4gICAgYWNjZXNzaWJsZVByaW1hcnlDb2xvcjogJyMwMDc0YmUnLFxuICAgIHRpbWVab25lOiAnRXVyb3BlL0hlbHNpbmtpJyxcbiAgICBwYXRoT3B0czoge1xuICAgICAgcm91dGVzUHJlZml4OiAnbGluamF0JyxcbiAgICAgIHN0b3BzUHJlZml4OiAncHlzYWtpdCcsXG4gICAgfSxcbiAgICBhcmlhTGFiZWw6IHVuZGVmaW5lZCxcbiAgICBtb2JpbGVMYWJlbDogdW5kZWZpbmVkLFxuICAgIGlucHV0Q2xhc3NOYW1lOiAnJyxcbiAgICB0cmFuc2xhdGVkUGxhY2Vob2xkZXI6IHVuZGVmaW5lZCxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBtb2RlSWNvbkNvbG9yczoge1xuICAgICAgJ21vZGUtYnVzJzogJyMwMDdhYzknLFxuICAgICAgJ21vZGUtcmFpbCc6ICcjOGM0Nzk5JyxcbiAgICAgICdtb2RlLXRyYW0nOiAnIzAwODE1MScsXG4gICAgICAnbW9kZS1tZXRybyc6ICcjZWQ4YzAwJyxcbiAgICAgICdtb2RlLWZlcnJ5JzogJyMwMDdBOTcnLFxuICAgICAgJ21vZGUtY2l0eWJpa2UnOiAnI2YyYjYyZCcsXG4gICAgICAnbW9kZS1mdW5pY3VsYXInOiAnI2ZmMDBmZicsXG4gICAgfSxcbiAgICByZXF1aXJlZDogZmFsc2UsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIHJlZlBvaW50OiB7fSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICBTZXR0aW5ncy5kZWZhdWx0Wm9uZSA9IHByb3BzLnRpbWVab25lO1xuICAgIFNldHRpbmdzLmRlZmF1bHRMb2NhbGUgPSBwcm9wcy5sYW5nO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICB2YWx1ZTogcHJvcHMudmFsdWUsXG4gICAgICBzdWdnZXN0aW9uczogW10sXG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiBmYWxzZSxcbiAgICAgIHNvdXJjZXM6IHByb3BzLnNvdXJjZXMsXG4gICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgdHlwaW5nVGltZXI6IG51bGwsXG4gICAgICB0eXBpbmc6IGZhbHNlLFxuICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgIHN1Z2dlc3Rpb25JbmRleDogMCxcbiAgICAgIGNsZWFuRXhlY3V0ZWQ6IGZhbHNlLFxuICAgICAgc2Nyb2xsWTogMCxcbiAgICB9O1xuICAgIE9iamVjdC5rZXlzKHRyYW5zbGF0aW9ucykuZm9yRWFjaChsYW5nID0+IHtcbiAgICAgIGkxOG5leHQuYWRkUmVzb3VyY2VCdW5kbGUobGFuZywgJ3RyYW5zbGF0aW9uJywgdHJhbnNsYXRpb25zW2xhbmddKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIERULTQwNzQ6IFdoZW4gYSB1c2VyJ3MgbG9jYXRpb24gaXMgdXBkYXRlZCBEVEF1dG9zdWdnZXN0IHdvdWxkIHJlLXJlbmRlciBjYXVzaW5nIHN1Z2dlc3Rpb24gbGlzdCB0byByZXNldC5cbiAgLy8gVGhpcyB3aWxsIHByZXZlbnQgaXQuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAhaXNFcXVhbChuZXh0U3RhdGUsIHRoaXMuc3RhdGUpIHx8ICFpc0VxdWFsKG5leHRQcm9wcywgdGhpcy5wcm9wcyk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjYW1lbGNhc2VcbiAgVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMobmV4dFByb3BzKSB7XG4gICAgLy8gd2FpdCB1bnRpbCBhZGRyZXNzIGlzIHNldCBvciBnZW9sb2NhdGlvbmluZyBmYWlsc1xuICAgIGlmIChuZXh0UHJvcHMudmFsdWUgIT09IHRoaXMuc3RhdGUudmFsdWUgJiYgIXRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHZhbHVlOiBuZXh0UHJvcHMudmFsdWUsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNoYW5nZSA9IChldmVudCwgeyBuZXdWYWx1ZSwgbWV0aG9kIH0pID0+IHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgIHZhbHVlOiB0aGlzLmZJbnB1dCB8fCBuZXdWYWx1ZSB8fCAnJyxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogdGhpcy5wcm9wcy5pc01vYmlsZSxcbiAgICB9O1xuICAgIC8vIFJlbW92ZSBmaWxsZWQgaW5wdXQgdmFsdWUgc28gaXQgd29udCBiZSByZXVzZWQgdW5uZWNlc3NhcnlcbiAgICB0aGlzLmZJbnB1dCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIG5ld1N0YXRlLmVkaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlIHx8ICcnIH0pLFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKG1ldGhvZCAhPT0gJ2VudGVyJyB8fCB0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICAvLyB0ZXN0IGFib3ZlIGRyb3BzIHVubmVjZXNzYXJ5IHVwZGF0ZVxuICAgICAgLy8gd2hlbiB1c2VyIGhpdHMgZW50ZXIgYnV0IHNlYXJjaCBpcyB1bmZpbmlzaGVkXG4gICAgICBpZiAodGhpcy5zdGF0ZS50eXBpbmdUaW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zdGF0ZS50eXBpbmdUaW1lcik7XG4gICAgICB9XG4gICAgICBpZiAobWV0aG9kID09PSAndHlwZScpIHtcbiAgICAgICAgLy8gYWZ0ZXIgdGltZW91dCBydW5zLCBhcmlhIGFsZXJ0IHdpbGwgYW5ub3VuY2UgY3VycmVudCBzZWxlY3Rpb25cbiAgICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnNldFN0YXRlKHsgdHlwaW5nOiBmYWxzZSB9KTtcbiAgICAgICAgfSwgMTAwMCk7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZ1RpbWVyID0gdGltZXI7XG4gICAgICAgIG5ld1N0YXRlLnR5cGluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTtcbiAgICB9XG4gIH07XG5cbiAgb25CbHVyID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBlZGl0aW5nOiBmYWxzZSxcbiAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICB2YWx1ZTogdGhpcy5wcm9wcy52YWx1ZSxcbiAgICB9KTtcbiAgICBpZiAodGhpcy5wcm9wcy5pc01vYmlsZSAmJiB0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgdGhpcy5jbG9zZU1vYmlsZVNlYXJjaCgpO1xuICAgIH1cbiAgfTtcblxuICBvblNlbGVjdGVkID0gKGUsIHJlZikgPT4ge1xuICAgIGlmICh0aGlzLnN0YXRlLnZhbGlkKSB7XG4gICAgICBpZiAocmVmLnN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICAgICAge1xuICAgICAgICAgICAgc291cmNlczogWydGYXZvdXJpdGUnLCAnQmFjayddLFxuICAgICAgICAgICAgb3duUGxhY2VzOiB0cnVlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHZhbHVlOiAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIHJlZi5zdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJyB8fFxuICAgICAgICByZWYuc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICBvd25QbGFjZXM6IGZhbHNlLFxuICAgICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcmVmLnN1Z2dlc3Rpb24udHlwZSxcbiAgICAgICAgICAgIHN1Z2dlc3Rpb25JbmRleDogcmVmLnN1Z2dlc3Rpb25JbmRleCxcbiAgICAgICAgICB9LFxuICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiAnJyB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLnNlbGVjdGlvbkRvbmUgPSB0cnVlOyAvLyBzZWxlY3Rpb24gZG9uZSwgZG8gbm90IGxldCB1cGNvbWluZyBrZXlib2FyZCBldmVudHMgY29uZnVzZSB0aGUgZmxvd1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgICAgICAgIHZhbHVlOiByZWYuc3VnZ2VzdGlvblZhbHVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5ibHVyKCk7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuaGFuZGxlVmlhUG9pbnRzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50cyhyZWYuc3VnZ2VzdGlvbiwgcmVmLnN1Z2dlc3Rpb25JbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QocmVmLnN1Z2dlc3Rpb24sIHRoaXMucHJvcHMuaWQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IGZhbHNlLFxuICAgICAgICAgICAgICBzb3VyY2VzOiB0aGlzLnByb3BzLnNvdXJjZXMsXG4gICAgICAgICAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICAgICAgICAgIHN1Z2dlc3Rpb25zOiBbXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRG9uZSA9IGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UgJiZcbiAgICAgICAgICAgICghdGhpcy5wcm9wcy5pc01vYmlsZSB8fCB0aGlzLnByb3BzLmlzRW1iZWRkZWQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLmZvY3VzQ2hhbmdlKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICAgICAgICB0aGlzLmNsb3NlTW9iaWxlU2VhcmNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgcHJldlN0YXRlID0+ICh7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogcHJldlN0YXRlLnZhbHVlLFxuICAgICAgICB9KSxcbiAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSwgLy8gc2VhcmNoIG1heSBmaW5pc2ggZHVyaW5nIHN0YXRlIGNoYW5nZVxuICAgICAgKTtcbiAgICB9XG4gIH07XG5cbiAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkID0gKCkgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgc3VnZ2VzdGlvbnM6IFtdLFxuICAgICAgc291cmNlczogdGhpcy5wcm9wcy5zb3VyY2VzLFxuICAgICAgb3duUGxhY2VzOiBmYWxzZSxcbiAgICAgIGVkaXRpbmc6IGZhbHNlLFxuICAgIH0pO1xuICB9O1xuXG4gIGNoZWNrUGVuZGluZ1NlbGVjdGlvbiA9ICgpID0+IHtcbiAgICBpZiAoXG4gICAgICAodGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbGlkXG4gICAgKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKFxuICAgICAgICB7XG4gICAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICAgIC8vIGFjY2VwdCBhZnRlciBhbGwgb25nb2luZyBzZWFyY2hlcyBoYXZlIGZpbmlzaGVkXG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gJiYgdGhpcy5zdGF0ZS52YWxpZCkge1xuICAgICAgLy8gZmluaXNoIHRoZSBzZWxlY3Rpb24gYnkgcGlja2luZyBmaXJzdCA9IGJlc3QgbWF0Y2ggb3Igd2l0aCAnRnV0dXJlUm91dGUnIGJ5IHN1Z2dlc3Rpb25JbmRleFxuICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAge1xuICAgICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgICAgZWRpdGluZzogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5zdWdnZXN0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQuYmx1cigpO1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc3RhdGUuc3VnZ2VzdGlvbnNbdGhpcy5zdGF0ZS5zdWdnZXN0aW9uSW5kZXhdO1xuICAgICAgICAgICAgaWYgKGl0ZW0udHlwZSAhPT0gJ2JhY2snKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMub25TZWxlY3QoXG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1t0aGlzLnN0YXRlLnN1Z2dlc3Rpb25JbmRleF0sXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5pZCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMuc3RhdGUucmVuZGVyTW9iaWxlU2VhcmNoKSB7XG4gICAgICAgICAgICAgIHRoaXMuY2xvc2VNb2JpbGVTZWFyY2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5mb2N1c0NoYW5nZSAmJlxuICAgICAgICAgICAgICAoIXRoaXMucHJvcHMuaXNNb2JpbGUgfHwgdGhpcy5wcm9wcy5pc0VtYmVkZGVkKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMuZm9jdXNDaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgfTtcblxuICBjbGVhckJ1dHRvbiA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2NsZWFyLWlucHV0J119XG4gICAgICAgIG9uQ2xpY2s9e3RoaXMuY2xlYXJJbnB1dH1cbiAgICAgICAgYXJpYS1sYWJlbD17aTE4bmV4dC50KCdjbGVhci1idXR0b24tbGFiZWwnKX1cbiAgICAgID5cbiAgICAgICAgPEljb24gaW1nPVwiY2xvc2VcIiBjb2xvcj17dGhpcy5wcm9wcy5jb2xvcn0gLz5cbiAgICAgIDwvYnV0dG9uPlxuICAgICk7XG4gIH07XG5cbiAgZmV0Y2hGdW5jdGlvbiA9ICh7IHZhbHVlLCBjbGVhbkV4ZWN1dGVkIH0pID0+IHtcbiAgICByZXR1cm4gdGhpcy5zZXRTdGF0ZShcbiAgICAgIHsgdmFsaWQ6IGZhbHNlLCBjbGVhbkV4ZWN1dGVkOiAhY2xlYW5FeGVjdXRlZCA/IGZhbHNlIDogY2xlYW5FeGVjdXRlZCB9LFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Eb25lKSB7XG4gICAgICAgICAgLy8gZG8gbm90IGxldCBjb21wb25lbnQgY2FzdCB1bm5lY2Vzc2FyeSByZXF1ZXN0c1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IHRhcmdldHMgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGNvbnN0IHVzZUFsbCA9IGlzRW1wdHkodGFyZ2V0cyk7XG4gICAgICAgIGNvbnN0IGlzTG9jYXRpb25TZWFyY2ggPVxuICAgICAgICAgIGlzRW1wdHkodGFyZ2V0cykgfHwgdGFyZ2V0cy5pbmNsdWRlcygnTG9jYXRpb25zJyk7XG4gICAgICAgIGxldCBuZXdUYXJnZXRzO1xuICAgICAgICBpZiAodGhpcy5zdGF0ZS5vd25QbGFjZXMpIHtcbiAgICAgICAgICBuZXdUYXJnZXRzID0gWydMb2NhdGlvbnMnXTtcbiAgICAgICAgICBpZiAodXNlQWxsIHx8IHRhcmdldHMuaW5jbHVkZXMoJ1N0b3BzJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnU3RvcHMnKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVzZUFsbCB8fCB0YXJnZXRzLmluY2x1ZGVzKCdTdGF0aW9ucycpKSB7XG4gICAgICAgICAgICBuZXdUYXJnZXRzLnB1c2goJ1N0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1c2VBbGwgfHwgdGFyZ2V0cy5pbmNsdWRlcygnVmVoaWNsZVJlbnRhbFN0YXRpb25zJykpIHtcbiAgICAgICAgICAgIG5ld1RhcmdldHMucHVzaCgnVmVoaWNsZVJlbnRhbFN0YXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCF1c2VBbGwpIHtcbiAgICAgICAgICBuZXdUYXJnZXRzID0gWy4uLnRhcmdldHNdO1xuICAgICAgICAgIC8vIGluIGRlc2t0b3AsIGZhdm9yaXRlcyBhcmUgYWNjZXNzZWQgdmlhIHN1YiBzZWFyY2hcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJlxuICAgICAgICAgICAgKGlzRW1wdHkodGhpcy5wcm9wcy5zb3VyY2VzKSB8fFxuICAgICAgICAgICAgICB0aGlzLnByb3BzLnNvdXJjZXMuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgbmV3VGFyZ2V0cy5wdXNoKCdTZWxlY3RGcm9tT3duTG9jYXRpb25zJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHJlbW92ZSAgbG9jYXRpb24gZmF2b3VyaXRlcyBpbiBkZXNrdG9wIHNlYXJjaCAoY29sbGVjdGlvbiBpdGVtIHJlcGxhY2VzIGl0IGluIHRhcmdldCBhcnJheSlcbiAgICAgICAgY29uc3Qgc291cmNlcyA9XG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzICYmXG4gICAgICAgICAgdGhpcy5zdGF0ZS5zb3VyY2VzLmZpbHRlcihcbiAgICAgICAgICAgIHMgPT5cbiAgICAgICAgICAgICAgIShcbiAgICAgICAgICAgICAgICBpc0xvY2F0aW9uU2VhcmNoICYmXG4gICAgICAgICAgICAgICAgcyA9PT0gJ0Zhdm91cml0ZScgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5zdGF0ZS5vd25QbGFjZXMgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICApLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgZXhlY3V0ZVNlYXJjaChcbiAgICAgICAgICBuZXdUYXJnZXRzLFxuICAgICAgICAgIHNvdXJjZXMsXG4gICAgICAgICAgdGhpcy5wcm9wcy50cmFuc3BvcnRNb2RlLFxuICAgICAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dCxcbiAgICAgICAgICB0aGlzLnByb3BzLmZpbHRlclJlc3VsdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5nZW9jb2RpbmdTaXplLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlucHV0OiB2YWx1ZSB8fCAnJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHNlYXJjaFJlc3VsdCA9PiB7XG4gICAgICAgICAgICBpZiAoc2VhcmNoUmVzdWx0ID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gWFhYIHRyYW5zbGF0ZXMgY3VycmVudCBsb2NhdGlvblxuICAgICAgICAgICAgY29uc3Qgc3VnZ2VzdGlvbnMgPSAoc2VhcmNoUmVzdWx0LnJlc3VsdHMgfHwgW10pXG4gICAgICAgICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgICAgICAgc3VnZ2VzdGlvbiA9PlxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlICE9PSAnRnV0dXJlUm91dGUnIHx8XG4gICAgICAgICAgICAgICAgICAoc3VnZ2VzdGlvbi50eXBlID09PSAnRnV0dXJlUm91dGUnICYmXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy50aW1lID5cbiAgICAgICAgICAgICAgICAgICAgICBEYXRlVGltZS5ub3coKS50b1VuaXhJbnRlZ2VyKCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoc3VnZ2VzdGlvbiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnQ3VycmVudExvY2F0aW9uJyB8fFxuICAgICAgICAgICAgICAgICAgc3VnZ2VzdGlvbi50eXBlID09PSAnU2VsZWN0RnJvbU1hcCcgfHxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24udHlwZSA9PT0gJ1NlbGVjdEZyb21Pd25Mb2NhdGlvbnMnIHx8XG4gICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uLnR5cGUgPT09ICdiYWNrJ1xuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgdHJhbnNsYXRlZCA9IHsgLi4uc3VnZ2VzdGlvbiB9O1xuICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlZC5wcm9wZXJ0aWVzLmxhYmVsSWQgPSBpMThuZXh0LnQoXG4gICAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb24ucHJvcGVydGllcy5sYWJlbElkLFxuICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIHJldHVybiB0cmFuc2xhdGVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gc3VnZ2VzdGlvbjtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnZhbHVlIHx8XG4gICAgICAgICAgICAgIHZhbHVlID09PSB0aGlzLnN0YXRlLnBlbmRpbmdTZWxlY3Rpb24gfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnU2VsZWN0RnJvbU93bkxvY2F0aW9ucycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnYmFjaycgfHxcbiAgICAgICAgICAgICAgdGhpcy5zdGF0ZS5wZW5kaW5nU2VsZWN0aW9uID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIHN1Z2dlc3Rpb25zLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5jaGVja1BlbmRpbmdTZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMucHJvcHMucGF0aE9wdHMsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWZQb2ludCxcbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfTtcblxuICBjbGVhcklucHV0ID0gKCkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgIHZhbHVlOiAnJyxcbiAgICAgIHNvdXJjZXM6IHRoaXMucHJvcHMuc291cmNlcyxcbiAgICAgIG93blBsYWNlczogZmFsc2UsXG4gICAgICByZW5kZXJNb2JpbGVTZWFyY2g6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgfTtcbiAgICAvLyBtdXN0IHVwZGF0ZSBzdWdnZXN0aW9uc1xuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogJycsIGNsZWFuRXhlY3V0ZWQ6IHRydWUgfSksXG4gICAgKTtcbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsZWFyKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xlYXIodGhpcy5wcm9wcy5pZCk7XG4gICAgfVxuICAgIHRoaXMuaW5wdXQuZm9jdXMoKTtcbiAgfTtcblxuICBpbnB1dENsaWNrZWQgPSBpbnB1dFZhbHVlID0+IHtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuICAgIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlKSB7XG4gICAgICB0aGlzLnByb3BzLmxvY2soKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIGNvbnN0IG5ld1N0YXRlID0ge1xuICAgICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgICAvLyByZXNldCBhdCBzdGFydCwganVzdCBpbiBjYXNlIHdlIG1pc3NlZCBzb21ldGhpbmdcbiAgICAgICAgcGVuZGluZ1NlbGVjdGlvbjogbnVsbCxcbiAgICAgICAgcmVuZGVyTW9iaWxlU2VhcmNoOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgfTtcblxuICAgICAgLy8gRFQtMzI2MzogYWRkZWQgc3RhdGVLZXlEb3duXG4gICAgICBjb25zdCBzdGF0ZUtleURvd24gPSB7XG4gICAgICAgIGVkaXRpbmc6IHRydWUsXG4gICAgICAgIHBlbmRpbmdTZWxlY3Rpb246IG51bGwsXG4gICAgICAgIHZhbHVlOiBpbnB1dFZhbHVlLFxuICAgICAgfTtcblxuICAgICAgaWYgKCF0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zLmxlbmd0aCkge1xuICAgICAgICAvLyBEVC0zMjYzOiBhZGRlZCBpZi1lbHNlIHN0YXRlbWVudFxuICAgICAgICBpZiAodHlwZW9mIGlucHV0VmFsdWUgPT09ICdvYmplY3QnIHx8ICFpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSwgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zZXRTdGF0ZShzdGF0ZUtleURvd24sICgpID0+XG4gICAgICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogaW5wdXRWYWx1ZSB9KSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZldGNoRnVuY3Rpb24oeyB2YWx1ZTogdGhpcy5zdGF0ZS52YWx1ZSB9KTtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLmlzTW9iaWxlICYmICF0aGlzLnN0YXRlLnJlbmRlck1vYmlsZVNlYXJjaCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IHJlbmRlck1vYmlsZVNlYXJjaDogdHJ1ZSB9KTtcbiAgICB9XG4gIH07XG5cbiAgc3RvcmVJbnB1dFJlZmVyZW5jZSA9IGF1dG9zdWdnZXN0ID0+IHtcbiAgICBpZiAoYXV0b3N1Z2dlc3QgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuaW5wdXQgPSBhdXRvc3VnZ2VzdC5pbnB1dDtcbiAgICAgIGlmICh0aGlzLnByb3BzLnN0b3JlUmVmKSB7XG4gICAgICAgIHRoaXMucHJvcHMuc3RvcmVSZWYoYXV0b3N1Z2dlc3QuaW5wdXQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICAvLyBGaWxsIGlucHV0IHdoZW4gdXNlciBjbGlja3MgZmlsbCBpbnB1dCBidXR0b24gaW4gc3RyZWV0IHN1Z2dlc3Rpb24gaXRlbVxuICBmaWxsSW5wdXQgPSBuZXdWYWx1ZSA9PiB7XG4gICAgdGhpcy5mSW5wdXQgPSBuZXdWYWx1ZS5wcm9wZXJ0aWVzLm5hbWU7XG4gICAgY29uc3QgbmV3U3RhdGUgPSB7XG4gICAgICBlZGl0aW5nOiB0cnVlLFxuICAgICAgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSxcbiAgICAgIGNoZWNrUGVuZGluZ1NlbGVjdGlvbjogbmV3VmFsdWUsXG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICB9O1xuICAgIC8vIG11c3QgdXBkYXRlIHN1Z2dlc3Rpb25zXG4gICAgdGhpcy5zZXRTdGF0ZShuZXdTdGF0ZSk7XG4gICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IG5ld1ZhbHVlLnByb3BlcnRpZXMubmFtZSB9KTtcbiAgICB0aGlzLmlucHV0LmZvY3VzKCk7XG4gIH07XG5cbiAgcmVuZGVySXRlbSA9IGl0ZW0gPT4ge1xuICAgIGNvbnN0IG5ld0l0ZW0gPVxuICAgICAgaXRlbS50eXBlID09PSAnRnV0dXJlUm91dGUnXG4gICAgICAgID8ge1xuICAgICAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgICAgIHRyYW5zbGF0ZWRUZXh0OiB0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lKGl0ZW0pLFxuICAgICAgICAgIH1cbiAgICAgICAgOiBpdGVtO1xuICAgIGNvbnN0IGNvbnRlbnQgPSBnZXRTdWdnZXN0aW9uQ29udGVudChpdGVtKTtcbiAgICByZXR1cm4gKFxuICAgICAgPFN1Z2dlc3Rpb25JdGVtXG4gICAgICAgIGl0ZW09e25ld0l0ZW19XG4gICAgICAgIGNvbnRlbnQ9e2NvbnRlbnR9XG4gICAgICAgIGxvYWRpbmc9eyF0aGlzLnN0YXRlLnZhbGlkfVxuICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgYXJpYUZhdm91cml0ZVN0cmluZz17aTE4bmV4dC50KCdmYXZvdXJpdGUnKX1cbiAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgIGFjY2Vzc2libGVQcmltYXJ5Q29sb3I9e3RoaXMucHJvcHMuYWNjZXNzaWJsZVByaW1hcnlDb2xvcn1cbiAgICAgICAgZmlsbElucHV0PXt0aGlzLmZpbGxJbnB1dH1cbiAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgbW9kZUljb25Db2xvcnM9e3RoaXMucHJvcHMubW9kZUljb25Db2xvcnN9XG4gICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgIC8+XG4gICAgKTtcbiAgfTtcblxuICBjbG9zZU1vYmlsZVNlYXJjaCA9ICgpID0+IHtcbiAgICB0aGlzLnByb3BzLnVubG9jaygpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIHJlbmRlck1vYmlsZVNlYXJjaDogZmFsc2UsXG4gICAgICAgIHZhbHVlOiB0aGlzLnByb3BzLnZhbHVlLFxuICAgICAgfSxcbiAgICAgICgpID0+IHtcbiAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHRoaXMuc3RhdGUuc2Nyb2xsWSk7XG4gICAgICAgIHRoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkKCk7XG4gICAgICB9LFxuICAgICk7XG4gICAgdGhpcy5pbnB1dC5mb2N1cygpO1xuICAgIC8vIFRoaXMgY2xvc2VzIHRoZSBtb2JpbGUga2V5Ym9hcmRcbiAgICB0aGlzLmlucHV0LmJsdXIoKTtcbiAgfTtcblxuICBrZXlEb3duID0gZXZlbnQgPT4ge1xuICAgIGlmICh0aGlzLnNlbGVjdGlvbkRvbmUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleTtcbiAgICBpZiAoa2V5Q29kZSA9PT0gJ1NoaWZ0Jykge1xuICAgICAgLy8gVGhpcyBlbmFibGVzIHNoaWZ0ICsgdGFiIHRvIGJlIHVzZWRcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGtleUNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICAvLyBVc2luZyBvbkJsdXIgbWFrZXMgJ0VzY2FwZScgYWN0IHNpbWlsYXJseSB0byB1c2luZyAnVGFiJ1xuICAgICAgdGhpcy5vbkJsdXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RhdGUuZWRpdGluZykge1xuICAgICAgaWYgKGtleUNvZGUgPT09ICdFbnRlcicgJiYgdGhpcy5zdGF0ZS52YWx1ZSAhPT0gJycpIHtcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7IHBlbmRpbmdTZWxlY3Rpb246IHRydWUgfSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5wdXRDbGlja2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKGtleUNvZGUgPT09ICdFbnRlcicgfHwga2V5Q29kZSA9PT0gJ0Fycm93RG93bicpICYmXG4gICAgICB0aGlzLnN0YXRlLnZhbHVlID09PSAnJ1xuICAgICkge1xuICAgICAgdGhpcy5jbGVhcklucHV0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleUNvZGUgPT09ICdBcnJvd0Rvd24nICYmIHRoaXMuc3RhdGUudmFsdWUgIT09ICcnKSB7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHtcbiAgICAgICAgZWRpdGluZzogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUsXG4gICAgICB9O1xuICAgICAgLy8gbXVzdCB1cGRhdGUgc3VnZ2VzdGlvbnNcbiAgICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUsICgpID0+XG4gICAgICAgIHRoaXMuZmV0Y2hGdW5jdGlvbih7IHZhbHVlOiB0aGlzLnN0YXRlLnZhbHVlIH0pLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN0YXRlLmVkaXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoeyBlZGl0aW5nOiB0cnVlIH0pO1xuICAgICAgdGhpcy5jbGVhckxvY2F0aW9uVGV4dCgpO1xuICAgIH1cblxuICAgIGlmIChrZXlDb2RlID09PSAnVGFiJykge1xuICAgICAgdGhpcy5vbkJsdXIoKTtcbiAgICB9XG4gIH07XG5cbiAgc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQgPSAoKSA9PiB7XG4gICAgbGV0IGxhYmVsID0gW107XG4gICAgY29uc3QgZmlyc3RTdWdnZXN0aW9uID0gdGhpcy5zdGF0ZS5zdWdnZXN0aW9uc1swXTtcbiAgICBpZiAoZmlyc3RTdWdnZXN0aW9uKSB7XG4gICAgICBpZiAoZmlyc3RTdWdnZXN0aW9uLnR5cGUgJiYgZmlyc3RTdWdnZXN0aW9uLnR5cGUuaW5jbHVkZXMoJ0Zhdm91cml0ZScpKSB7XG4gICAgICAgIGxhYmVsLnB1c2goaTE4bmV4dC50KCdmYXZvdXJpdGUnKSk7XG4gICAgICB9XG4gICAgICBsYWJlbCA9IGxhYmVsLmNvbmNhdChnZXRTdWdnZXN0aW9uQ29udGVudCh0aGlzLnN0YXRlLnN1Z2dlc3Rpb25zWzBdKSk7XG4gICAgfVxuICAgIHJldHVybiBbLi4ubmV3IFNldChsYWJlbCldLmpvaW4oJyAtICcpO1xuICB9O1xuXG4gIGNsZWFyT2xkU2VhcmNoZXMgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBjb250ZXh0LCBjbGVhck9sZFNlYXJjaGVzLCBjbGVhckZ1dHVyZVJvdXRlcyB9ID1cbiAgICAgIHRoaXMucHJvcHMuc2VhcmNoQ29udGV4dDtcbiAgICBpZiAoY29udGV4dCAmJiBjbGVhck9sZFNlYXJjaGVzKSB7XG4gICAgICBjbGVhck9sZFNlYXJjaGVzKGNvbnRleHQpO1xuICAgICAgaWYgKGNsZWFyRnV0dXJlUm91dGVzKSB7XG4gICAgICAgIGNsZWFyRnV0dXJlUm91dGVzKGNvbnRleHQpO1xuICAgICAgfVxuICAgICAgdGhpcy5mZXRjaEZ1bmN0aW9uKHsgdmFsdWU6IHRoaXMuc3RhdGUudmFsdWUgfSk7XG4gICAgfVxuICB9O1xuXG4gIGlzT3JpZ2luRGVzdGluYXRpb25PclZpYXBvaW50ID0gKCkgPT5cbiAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luJyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdkZXN0aW5hdGlvbicgfHxcbiAgICB0aGlzLnByb3BzLmlkID09PSAndmlhLXBvaW50JyB8fFxuICAgIHRoaXMucHJvcHMuaWQgPT09ICdvcmlnaW4tc3RvcC1uZWFyLXlvdSc7XG5cbiAgY2xlYXJMb2NhdGlvblRleHQgPSAoKSA9PiB7XG4gICAgY29uc3QgcG9zaXRpb25zID0gW1xuICAgICAgJ1ZhbGl0dHUgc2lqYWludGknLFxuICAgICAgJ055a3lpbmVuIHNpamFpbnRpc2knLFxuICAgICAgJ0N1cnJlbnQgcG9zaXRpb24nLFxuICAgICAgJ1NlbGVjdGVkIGxvY2F0aW9uJyxcbiAgICAgICdWYWxkIHBvc2l0aW9uJyxcbiAgICAgICdBbnbDpG5kIG1pbiBwb3NpdGlvbicsXG4gICAgICAnTWluIHBvc2l0aW9uJyxcbiAgICAgICdLw6R5dMOkIG55a3lpc3TDpCBzaWphaW50aWEnLFxuICAgICAgJ1VzZSBjdXJyZW50IGxvY2F0aW9uJyxcbiAgICAgICdZb3VyIGN1cnJlbnQgbG9jYXRpb24nLFxuICAgICAgJ1d5YnJhbmUgbWllanNjZScsXG4gICAgXTtcbiAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHRoaXMuc3RhdGUudmFsdWUpKSB7XG4gICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICB9XG4gIH07XG5cbiAgb25Gb2N1cyA9ICgpID0+IHtcbiAgICBjb25zdCBzY3JvbGxZID0gd2luZG93LnBhZ2VZT2Zmc2V0O1xuICAgIHJldHVybiB0aGlzLnNldFN0YXRlKHsgc2Nyb2xsWSB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgaWYgKGkxOG5leHQubGFuZ3VhZ2UgIT09IHRoaXMucHJvcHMubGFuZykge1xuICAgICAgaTE4bmV4dC5jaGFuZ2VMYW5ndWFnZSh0aGlzLnByb3BzLmxhbmcpO1xuICAgIH1cbiAgICBjb25zdCB7IHZhbHVlLCBzdWdnZXN0aW9ucywgcmVuZGVyTW9iaWxlU2VhcmNoLCBjbGVhbkV4ZWN1dGVkIH0gPVxuICAgICAgdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBpbnB1dFByb3BzID0ge1xuICAgICAgcGxhY2Vob2xkZXI6IHRoaXMucHJvcHMudHJhbnNsYXRlZFBsYWNlaG9sZGVyXG4gICAgICAgID8gdGhpcy5wcm9wcy50cmFuc2xhdGVkUGxhY2Vob2xkZXJcbiAgICAgICAgOiBpMThuZXh0LnQodGhpcy5wcm9wcy5wbGFjZWhvbGRlciksXG4gICAgICB2YWx1ZSxcbiAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLFxuICAgICAgb25CbHVyOiB0aGlzLm9uQmx1cixcbiAgICAgIGNsYXNzTmFtZTogY3goXG4gICAgICAgIGAke3N0eWxlcy5pbnB1dH0gJHtcbiAgICAgICAgICB0aGlzLnByb3BzLmlzTW9iaWxlICYmIHRoaXMucHJvcHMudHJhbnNwb3J0TW9kZSA/IHN0eWxlcy50aGluIDogJydcbiAgICAgICAgfSAke3N0eWxlc1t0aGlzLnByb3BzLmlkXSB8fCAnJ30gJHtcbiAgICAgICAgICB0aGlzLnN0YXRlLnZhbHVlID8gc3R5bGVzLmhhc1ZhbHVlIDogJydcbiAgICAgICAgfSAke3RoaXMucHJvcHMuaW5wdXRDbGFzc05hbWV9YCxcbiAgICAgICksXG4gICAgICBvbktleURvd246IHRoaXMua2V5RG93biwgLy8gRFQtMzI2M1xuICAgICAgcmVxdWlyZWQ6IHRoaXMucHJvcHMucmVxdWlyZWQsXG4gICAgfTtcbiAgICBjb25zdCBhcmlhQmFySWQgPSB0aGlzLnByb3BzLmlkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKTtcbiAgICBsZXQgU2VhcmNoQmFySWQgPSB0aGlzLnByb3BzLmFyaWFMYWJlbCB8fCBpMThuZXh0LnQoYXJpYUJhcklkKTtcbiAgICBTZWFyY2hCYXJJZCA9IFNlYXJjaEJhcklkLnJlcGxhY2UoJ3NlYXJjaGZpZWxkLScsICcnKS5jb25jYXQoJy4nKTsgLy8gRnVsbCBzdG9wIG1ha2VzIHNjcmVlbiByZWFkZXIgc3BlZWNoIGNsZWFyZXIuXG4gICAgY29uc3QgYXJpYVJlcXVpcmVkVGV4dCA9IHRoaXMucHJvcHMucmVxdWlyZWRcbiAgICAgID8gYCR7aTE4bmV4dC50KCdyZXF1aXJlZCcpfS5gXG4gICAgICA6ICcnO1xuICAgIGNvbnN0IGFyaWFMYWJlbEluc3RydWN0aW9ucyA9IHRoaXMucHJvcHMuaXNNb2JpbGVcbiAgICAgID8gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGFiZWwtaW5zdHJ1Y3Rpb25zLW1vYmlsZScpXG4gICAgICA6IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLWluc3RydWN0aW9ucy1kZXNrdG9wJyk7XG4gICAgY29uc3QgbW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCA9XG4gICAgICB0aGlzLnByb3BzLmlkID09PSAnb3JpZ2luJ1xuICAgICAgICA/IGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsLW1vdmUtdG8tZGVzdGluYXRpb24nKVxuICAgICAgICA6ICcnO1xuICAgIGNvbnN0IGFyaWFMYWJlbFRleHQgPSBhcmlhTGFiZWxJbnN0cnVjdGlvbnNcbiAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgLmNvbmNhdChtb3ZpbmdUb0Rlc3RpbmF0aW9uRmllbGRUZXh0KTtcblxuICAgIGNvbnN0IGFyaWFTdWdnZXN0aW9uTGVuID0gaTE4bmV4dC50KCdzZWFyY2gtYXV0b3N1Z2dlc3QtbGVuJywge1xuICAgICAgY291bnQ6IHN1Z2dlc3Rpb25zLmxlbmd0aCxcbiAgICB9KTtcblxuICAgIGNvbnN0IGFyaWFDdXJyZW50U3VnZ2VzdGlvbiA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLnN1Z2dlc3Rpb25Bc0FyaWFDb250ZW50KCkgfHwgdGhpcy5wcm9wcy52YWx1ZSkge1xuICAgICAgICByZXR1cm4gaTE4bmV4dC50KCdzZWFyY2gtY3VycmVudC1zdWdnZXN0aW9uJywge1xuICAgICAgICAgIHNlbGVjdGlvbjpcbiAgICAgICAgICAgIHRoaXMuc3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQoKS50b0xvd2VyQ2FzZSgpIHx8IHRoaXMucHJvcHMudmFsdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICcnO1xuICAgIH07XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1snc3Itb25seSddfSByb2xlPVwiYWxlcnRcIj5cbiAgICAgICAgICB7IXRoaXMuc3RhdGUudHlwaW5nICYmXG4gICAgICAgICAgICB0aGlzLnN0YXRlLmVkaXRpbmcgJiZcbiAgICAgICAgICAgIGAke2FyaWFTdWdnZXN0aW9uTGVufSAke2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpfWB9XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICAge3RoaXMucHJvcHMuaXNNb2JpbGUgJiYgKFxuICAgICAgICAgIDxNb2JpbGVTZWFyY2hcbiAgICAgICAgICAgIHNlYXJjaE9wZW49e3JlbmRlck1vYmlsZVNlYXJjaH1cbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGNsZWFyT2xkU2VhcmNoZXM9e3RoaXMuY2xlYXJPbGRTZWFyY2hlc31cbiAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgY2xlYXJJbnB1dD17dGhpcy5jbGVhcklucHV0fVxuICAgICAgICAgICAgdmFsdWU9e3RoaXMuc3RhdGUudmFsdWV9XG4gICAgICAgICAgICBzdWdnZXN0aW9ucz17W1xuICAgICAgICAgICAgICAuLi5zdWdnZXN0aW9ucyxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6ICdjbGVhci1zZWFyY2gtaGlzdG9yeScsXG4gICAgICAgICAgICAgICAgbGFiZWxJZDogaTE4bmV4dC50KCdjbGVhci1zZWFyY2gtaGlzdG9yeScpLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXX1cbiAgICAgICAgICAgIGlucHV0UHJvcHM9e3tcbiAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IHRoaXMuaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQoKVxuICAgICAgICAgICAgICAgID8gaTE4bmV4dC50KCdhZGRyZXNzLXBsYWNlLW9yLWJ1c2luZXNzJylcbiAgICAgICAgICAgICAgICA6IGlucHV0UHJvcHMucGxhY2Vob2xkZXIsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgICAgZmV0Y2hGdW5jdGlvbj17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgb25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkPXt0aGlzLm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZH1cbiAgICAgICAgICAgIGdldFN1Z2dlc3Rpb25WYWx1ZT17Z2V0U3VnZ2VzdGlvblZhbHVlfVxuICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17dGhpcy5yZW5kZXJJdGVtfVxuICAgICAgICAgICAgY2xvc2VIYW5kbGU9e3RoaXMuY2xvc2VNb2JpbGVTZWFyY2h9XG4gICAgICAgICAgICBhcmlhTGFiZWw9e2FyaWFSZXF1aXJlZFRleHRcbiAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAuY29uY2F0KGFyaWFDdXJyZW50U3VnZ2VzdGlvbigpKX1cbiAgICAgICAgICAgIGxhYmVsPXtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy5tb2JpbGVMYWJlbFxuICAgICAgICAgICAgICAgID8gdGhpcy5wcm9wcy5tb2JpbGVMYWJlbFxuICAgICAgICAgICAgICAgIDogaTE4bmV4dC50KHRoaXMucHJvcHMuaWQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17dGhpcy5vblNlbGVjdGVkfVxuICAgICAgICAgICAgZGlhbG9nSGVhZGVyVGV4dD17aTE4bmV4dC50KCdkZWxldGUtb2xkLXNlYXJjaGVzLWhlYWRlcicpfVxuICAgICAgICAgICAgZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQ9e2kxOG5leHQudCgnZGVsZXRlJyl9XG4gICAgICAgICAgICBkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0PXtpMThuZXh0LnQoJ2NhbmNlbCcpfVxuICAgICAgICAgICAgY2xlYXJJbnB1dEJ1dHRvblRleHQ9e2kxOG5leHQudCgnY2xlYXItYnV0dG9uLWxhYmVsJyl9XG4gICAgICAgICAgICBmb2N1c0lucHV0PXtjbGVhbkV4ZWN1dGVkfVxuICAgICAgICAgICAgY29sb3I9e3RoaXMucHJvcHMuY29sb3J9XG4gICAgICAgICAgICBob3ZlckNvbG9yPXt0aGlzLnByb3BzLmhvdmVyQ29sb3J9XG4gICAgICAgICAgICBhY2Nlc3NpYmxlUHJpbWFyeUNvbG9yPXt0aGlzLnByb3BzLmFjY2Vzc2libGVQcmltYXJ5Q29sb3J9XG4gICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAvPlxuICAgICAgICApfVxuICAgICAgICB7IXJlbmRlck1vYmlsZVNlYXJjaCAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgIHN0eWxlc1snYXV0b3N1Z2dlc3QtaW5wdXQtY29udGFpbmVyJ10sXG4gICAgICAgICAgICAgIHN0eWxlc1t0aGlzLnByb3BzLmlkXSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgc3R5bGU9e3tcbiAgICAgICAgICAgICAgJy0tY29sb3InOiBgJHt0aGlzLnByb3BzLmNvbG9yfWAsXG4gICAgICAgICAgICAgICctLWhvdmVyLWNvbG9yJzogYCR7dGhpcy5wcm9wcy5ob3ZlckNvbG9yfWAsXG4gICAgICAgICAgICB9fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt0aGlzLnByb3BzLmljb24gJiYgKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgICAgICBzdHlsZXNbYGF1dG9zdWdnZXN0LWlucHV0LWljb25gXSxcbiAgICAgICAgICAgICAgICAgIHN0eWxlc1t0aGlzLnByb3BzLmlkXSxcbiAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMuaW5wdXRDbGFzc05hbWUgJiZcbiAgICAgICAgICAgICAgICAgICAgYCR7dGhpcy5wcm9wcy5pbnB1dENsYXNzTmFtZX0taW5wdXQtaWNvbmAsXG4gICAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17YXJpYVJlcXVpcmVkVGV4dFxuICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAuY29uY2F0KGkxOG5leHQudCgnc2VhcmNoLWF1dG9zdWdnZXN0LWxhYmVsJykpfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPEljb24gaW1nPXtgJHt0aGlzLnByb3BzLmljb259YH0gLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAgPEF1dG9zdWdnZXN0XG4gICAgICAgICAgICAgIGFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zPXt0aGlzLnN0YXRlLmVkaXRpbmd9XG4gICAgICAgICAgICAgIGlkPXt0aGlzLnByb3BzLmlkfVxuICAgICAgICAgICAgICBzdWdnZXN0aW9ucz17c3VnZ2VzdGlvbnN9XG4gICAgICAgICAgICAgIG9uU3VnZ2VzdGlvbnNGZXRjaFJlcXVlc3RlZD17dGhpcy5mZXRjaEZ1bmN0aW9ufVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25zQ2xlYXJSZXF1ZXN0ZWQ9e3RoaXMub25TdWdnZXN0aW9uc0NsZWFyUmVxdWVzdGVkfVxuICAgICAgICAgICAgICBnZXRTdWdnZXN0aW9uVmFsdWU9e2dldFN1Z2dlc3Rpb25WYWx1ZX1cbiAgICAgICAgICAgICAgcmVuZGVyU3VnZ2VzdGlvbj17dGhpcy5yZW5kZXJJdGVtfVxuICAgICAgICAgICAgICBpbnB1dFByb3BzPXt7XG4gICAgICAgICAgICAgICAgLi4uaW5wdXRQcm9wcyxcbiAgICAgICAgICAgICAgICBvbkZvY3VzOiB0aGlzLm9uRm9jdXMsXG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgIGZvY3VzSW5wdXRPblN1Z2dlc3Rpb25DbGlja1xuICAgICAgICAgICAgICBzaG91bGRSZW5kZXJTdWdnZXN0aW9ucz17KCkgPT4gdGhpcy5zdGF0ZS5lZGl0aW5nfVxuICAgICAgICAgICAgICBoaWdobGlnaHRGaXJzdFN1Z2dlc3Rpb249eyF0aGlzLnN0YXRlLm93blBsYWNlc31cbiAgICAgICAgICAgICAgdGhlbWU9e3N0eWxlc31cbiAgICAgICAgICAgICAgcmVuZGVySW5wdXRDb21wb25lbnQ9e3AgPT4gKFxuICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3NOYW1lPXtzdHlsZXNbJ3NyLW9ubHknXX0gaHRtbEZvcj17dGhpcy5wcm9wcy5pZH0+XG4gICAgICAgICAgICAgICAgICAgIHthcmlhQ3VycmVudFN1Z2dlc3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYVJlcXVpcmVkVGV4dClcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KCcgJylcbiAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KFNlYXJjaEJhcklkKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoYXJpYUxhYmVsVGV4dCl9XG4gICAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e2FyaWFDdXJyZW50U3VnZ2VzdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhUmVxdWlyZWRUZXh0KVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoJyAnKVxuICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoU2VhcmNoQmFySWQpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdCgnICcpXG4gICAgICAgICAgICAgICAgICAgICAgLmNvbmNhdChhcmlhTGFiZWxUZXh0KX1cbiAgICAgICAgICAgICAgICAgICAgaWQ9e3RoaXMucHJvcHMuaWR9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e3RoaXMuaW5wdXRDbGlja2VkfVxuICAgICAgICAgICAgICAgICAgICBvbktleURvd249e3RoaXMua2V5RG93bn1cbiAgICAgICAgICAgICAgICAgICAgey4uLnB9XG4gICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAge3RoaXMuc3RhdGUudmFsdWUgJiYgdGhpcy5jbGVhckJ1dHRvbigpfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICBvblN1Z2dlc3Rpb25TZWxlY3RlZD17dGhpcy5vblNlbGVjdGVkfVxuICAgICAgICAgICAgICByZWY9e3RoaXMuc3RvcmVJbnB1dFJlZmVyZW5jZX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L1JlYWN0LkZyYWdtZW50PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgRFRBdXRvc3VnZ2VzdFdpdGhTY3JvbGxMb2NrID0gd2l0aFNjcm9sbExvY2soRFRBdXRvc3VnZ2VzdCk7XG5cbmV4cG9ydCBkZWZhdWx0IERUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jaztcbiIsImltcG9ydCB7IGdldE5hbWVMYWJlbCB9IGZyb20gJ0BkaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC9kaWdpdHJhbnNpdC1zZWFyY2gtdXRpbC11bmlxLWJ5LWxhYmVsJztcbi8qKlxuICogUmV0dXJucyBsYWJlbCBmb3IgcHJvcGVydGllc1xuICpcbiAqIEBuYW1lIGdldExhYmVsXG4gKiBAcGFyYW0geyp9IHByb3BlcnRpZXMgb2JqZWN0XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gdHJ1ZS9mYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYWJlbChwcm9wZXJ0aWVzKSB7XG4gIGNvbnN0IHBhcnRzID0gZ2V0TmFtZUxhYmVsKHByb3BlcnRpZXMsIHRydWUpO1xuICBzd2l0Y2ggKHByb3BlcnRpZXMubGF5ZXIpIHtcbiAgICBjYXNlICdzZWxlY3RGcm9tTWFwJzpcbiAgICBjYXNlICdjdXJyZW50UG9zaXRpb24nOlxuICAgIGNhc2UgJ293bkxvY2F0aW9ucyc6XG4gICAgY2FzZSAnYmFjayc6XG4gICAgICByZXR1cm4gcGFydHNbMV0gfHwgcGFydHNbMF07XG4gICAgY2FzZSAnZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb24nOlxuICAgIGNhc2UgJ2Zhdm91cml0ZVBsYWNlJzpcbiAgICAgIHJldHVybiBwYXJ0c1swXTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHBhcnRzLmxlbmd0aCA+IDEgJiYgcGFydHNbMV0gIT09ICcnXG4gICAgICAgID8gcGFydHMuam9pbignLCAnKVxuICAgICAgICA6IHBhcnRzWzFdIHx8IHBhcnRzWzBdO1xuICB9XG59XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IGhvb2tzIGZyb20gJ0Boc2wtZmkvaG9va3MnO1xuXG5jb25zdCB3aXRoU2Nyb2xsTG9jayA9IENvbXBvbmVudCA9PiB7XG4gIHJldHVybiBwcm9wcyA9PiB7XG4gICAgY29uc3QgeyBsb2NrLCB1bmxvY2sgfSA9IGhvb2tzLnVzZVNjcm9sbExvY2soKTtcblxuICAgIHJldHVybiA8Q29tcG9uZW50IGxvY2s9e2xvY2t9IHVubG9jaz17dW5sb2NrfSB7Li4ucHJvcHN9IC8+O1xuICB9O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgd2l0aFNjcm9sbExvY2s7XG4iXSwibmFtZXMiOlsiX3R5cGVvZiIsIm8iLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwidG9Qcm9wZXJ0eUtleSIsInQiLCJpIiwiciIsImUiLCJ0b1ByaW1pdGl2ZSIsImNhbGwiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfZGVmaW5lUHJvcGVydHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsInZhbHVlIiwiZW51bWVyYWJsZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwidHJ1RXEiLCJ2YWwxIiwidmFsMiIsImd0ZnNTdG9wTGF5ZXJzIiwidmVoaWNsZVJlbnRhbExheWVycyIsImxhYmVsSWRUb0dpZCIsImlkIiwicGFydHMiLCJzcGxpdCIsImxlbmd0aCIsImlzRHVwbGljYXRlIiwiaXRlbTEiLCJpdGVtMiIsInByb3BzMSIsInByb3BlcnRpZXMiLCJwcm9wczIiLCJ0eXBlIiwibzEiLCJvcmlnaW4iLCJkMSIsImRlc3RpbmF0aW9uIiwibzIiLCJkMiIsIm5hbWUiLCJsb2NhbGFkbWluIiwiaW5jbHVkZXMiLCJsYXllciIsImdpZCIsImxhYmVsSWQiLCJndGZzSWQiLCJwMSIsImdlb21ldHJ5IiwiY29vcmRpbmF0ZXMiLCJ1bmRlZmluZWQiLCJwMiIsIk1hdGgiLCJhYnMiLCJsYWJlbCIsImFkZHJlc3MiLCJub3JtYWxpemUiLCJzdHIiLCJpc1N0cmluZyIsInRvTG93ZXJDYXNlIiwiTGF5ZXJUeXBlIiwiaXNTdG9wIiwiZ2V0TGF5ZXJSYW5rIiwic291cmNlIiwiaW5kZXhPZiIsInNvcnRTZWFyY2hSZXN1bHRzIiwibGluZVJlZ2V4cCIsInJlc3VsdHMiLCJ0ZXJtIiwiQXJyYXkiLCJpc0FycmF5IiwiaXNMaW5lSWRlbnRpZmllciIsInRlc3QiLCJub3JtYWxpemVkVGVybSIsImlzTGluZVNlYXJjaCIsIm9yZGVyZWRSZXN1bHRzIiwib3JkZXJCeSIsInJlc3VsdCIsInNob3J0TmFtZSIsImNvbmZpZGVuY2UiLCJtYXRjaCIsInJlc3VsdFByb3BlcnRpZXMiLCJtYXAiLCJmaWx0ZXIiLCJub3JtYWxpemVkVmFsdWUiLCJyZWR1Y2UiLCJwcmV2aW91cyIsImN1cnJlbnQiLCJ1bmlxV2l0aCIsImdldFN0b3BOYW1lIiwic3RvcENvZGUiLCJsYXN0SW5kZXhPZiIsInN1YnN0cmluZyIsImZpbHRlck1hdGNoaW5nVG9JbnB1dCIsImxpc3QiLCJJbnB1dCIsImZpZWxkcyIsImlucHV0IiwidHJpbSIsIm11bHRpV29yZCIsIml0ZW0iLCJmb3JFYWNoIiwicE5hbWUiLCJnZXQiLCJzcGxpY2UiLCJqb2luIiwiY29uY2F0IiwicmVwbGFjZSIsInNlcmlhbGl6ZSIsIm9iaiIsInByZWZpeCIsImtleXMiLCJwIiwiayIsInYiLCJlbmNvZGVVUklDb21wb25lbnQiLCJheGlvcyIsInJlcXVpcmUiLCJkZWZhdWx0IiwiZ2V0SnNvbiIsInVybCIsInBhcmFtcyIsImVuY29kZVVSSSIsInNlYXJjaCIsInRpbWVvdXQiLCJtZXRob2QiLCJoZWFkZXJzIiwiQWNjZXB0IiwidGhlbiIsInJlcyIsImRhdGEiLCJnZXRHZW9jb2RpbmdSZXN1bHRzIiwic2VhcmNoU3RyaW5nIiwic2VhcmNoUGFyYW1zIiwibGFuZyIsImZvY3VzUG9pbnQiLCJzb3VyY2VzIiwicGVsaWFzVXJsIiwibWluaW1hbFJlZ2V4cCIsImdlb2NvZGluZ0xheWVycyIsInRleHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsIlBFTElBU19VUkwiLCJvcHRzIiwiX29iamVjdFNwcmVhZCIsImxheWVycyIsInRvU3RyaW5nIiwiZmVhdHVyZXMiLCJnZXRTdG9wc0Zyb21HZW9jb2RpbmciLCJzdG9wcyIsIlVSTF9QRUxJQVNfUExBQ0UiLCJnaWRzIiwic3RvcFN0YXRpb25NYXAiLCJzdG9wIiwiY29kZSIsInN0b3BPclN0YXRpb24iLCJpZHMiLCJzbGljZSIsImFkZGVuZHVtIiwibGFzdFVwZGF0ZWQiLCJmYXZvdXJpdGVJZCIsImZpbHRlck9sZFNlYXJjaGVzIiwib2xkU2VhcmNoZXMiLCJkcm9wTGF5ZXJzIiwibWF0Y2hpbmdPbGRTZWFyY2hlcyIsInRha2UiLCJuZXdJdGVtIiwidGltZXRhYmxlQ2xpY2tlZCIsImFycm93Q2xpY2tlZCIsInJvdXRlTGF5ZXJzIiwibG9jYXRpb25MYXllcnMiLCJwYXJraW5nTGF5ZXJzIiwic3RvcExheWVycyIsImRlYm91bmNlZFNlYXJjaCIsImRlYm91bmNlIiwidGFyZ2V0cyIsInRyYW5zcG9ydE1vZGUiLCJzZWFyY2hDb250ZXh0IiwiZmlsdGVyUmVzdWx0cyIsImdlb2NvZGluZ1NpemUiLCJjYWxsYmFjayIsInBhdGhPcHRzIiwicmVmUG9pbnQiLCJnZXRQb3NpdGlvbnMiLCJnZXRGYXZvdXJpdGVMb2NhdGlvbnMiLCJnZXRPbGRTZWFyY2hlcyIsImdldEZhdm91cml0ZVN0b3BzIiwicGFya2luZ0FyZWFTb3VyY2VzIiwiZ2V0TGFuZ3VhZ2UiLCJnZXRTdG9wQW5kU3RhdGlvbnNRdWVyeSIsImdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uc1F1ZXJ5IiwiZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnkiLCJnZXRGYXZvdXJpdGVSb3V0ZXMiLCJnZXRSb3V0ZXNRdWVyeSIsImNvbnRleHQiLCJpc1BlbGlhc0xvY2F0aW9uQXdhcmUiLCJsb2NhdGlvbkF3YXJlIiwiVVJMX1BFTElBUyIsImZlZWRJRHMiLCJnZW9jb2RpbmdTZWFyY2hQYXJhbXMiLCJnZW9jb2RpbmdTb3VyY2VzIiwiZ2V0RnV0dXJlUm91dGVzIiwiY2l0eUJpa2VOZXR3b3JrcyIsImFsbFRhcmdldHMiLCJhbGxTb3VyY2VzIiwicG9zaXRpb24iLCJzZWFyY2hDb21wb25lbnRzIiwic2VhcmNoZXMiLCJsYW5ndWFnZSIsImxhdCIsImxvbiIsInRvRml4ZWQiLCJtb2RlIiwic3RhdHVzIiwicHVzaCIsImdldEN1cnJlbnRQb3NpdGlvbklmRW1wdHkiLCJzZWxlY3RQb3NpdGlvbkZvbU1hcCIsIml0ZW1zIiwiZmF2b3VyaXRlTG9jYXRpb25zIiwiZmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zIiwiZmF2b3VyaXRlU3RvcHMiLCJoYXNGYXZvdXJpdGVzIiwic2VsZWN0RnJvbU93bkxvY2F0aW9ucyIsImZhdm91cml0ZXMiLCJmaWx0ZXJGYXZvdXJpdGVMb2NhdGlvbnMiLCJsb2NhdGlvbkhpc3RvcnkiLCJzaXplIiwiZmVlZElkcyIsImhpc3RvcnkiLCJ1c2VTdG9wcyIsInVzZVN0YXRpb25zIiwic3RvcHNBbmRTdGF0aW9ucyIsImV2ZXJ5Iiwic3RvcHNTdGF0aW9ucyIsInMiLCJmaWx0ZXJGYXZvdXJpdGVTdG9wcyIsImRlZHVwZXN0b3BzIiwiZmVlZHMiLCJzdG9wSGlzdG9yeSIsImZhdm91cml0ZVJvdXRlcyIsInJvdXRlSGlzdG9yeSIsImZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uIiwiYWxsIiwiZmxhdHRlbiIsImNhdGNoIiwiZXJyIiwiZXJyb3IiLCJsZWFkaW5nIiwiZ2V0TG9jYWxhZG1pbiIsInN1Z2dlc3Rpb24iLCJnZXRTdG9wQ29kZSIsImdldE5hbWVMYWJlbCIsIm1lbW9pemUiLCJwbGFpbiIsIlJlZ0V4cCIsImVzY2FwZVJlZ0V4cCIsImxvbmdOYW1lIiwiYWdlbmN5IiwiZm9ybWF0RmF2b3VyaXRlUGxhY2VMYWJlbCIsImNsb25lRGVlcCIsInRyYW5zbGF0aW9ucyIsImRlIiwiYWlycGxhbmUiLCJhcnJpdmFsIiwiYmFjayIsImJpa2VyZW50YWxzdGF0aW9uIiwiYnVzIiwiY2FuY2VsIiwiY3VycmVudHBvc2l0aW9uIiwiZGVsZXRlIiwiZGVwYXJ0dXJlIiwiZmF2b3VyaXRlIiwiZmVycnkiLCJvd25sb2NhdGlvbnMiLCJsb2FkaW5nIiwicmFpbCIsInN0cmVldCIsInN1YndheSIsInN0YXRpb24iLCJ0cmFtIiwidmVudWUiLCJ3aGVyZSIsInBsYWNlIiwiZW4iLCJiaWtlcGFyayIsImNhcnBhcmsiLCJwbGF0Zm9ybSIsInJlcXVpcmVkIiwidHJhY2siLCJmaSIsInZlaGljbGVyZW50YWxzdGF0aW9uIiwicGwiLCJzdiIsInN0eWxlSW5qZWN0IiwiY3NzIiwicmVmIiwiaW5zZXJ0QXQiLCJkb2N1bWVudCIsImhlYWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsInN0eWxlIiwiY3JlYXRlRWxlbWVudCIsImZpcnN0Q2hpbGQiLCJpbnNlcnRCZWZvcmUiLCJhcHBlbmRDaGlsZCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiY3JlYXRlVGV4dE5vZGUiLCJBdXRvc3VnZ2VzdFBhdGNoIiwiQXV0b3N1Z2dlc3QiLCJwcm9wcyIsInN1cGVyIiwic2VsZiIsInRoaXMiLCJvblN1Z2dlc3Rpb25Ub3VjaE1vdmUiLCJqdXN0U2VsZWN0ZWRTdWdnZXN0aW9uIiwicHJlc3NlZFN1Z2dlc3Rpb24iLCJNb2JpbGVTZWFyY2giLCJhcHBFbGVtZW50IiwiY2xvc2VIYW5kbGUiLCJjbGVhcklucHV0Iiwic3VnZ2VzdGlvbnMiLCJpbnB1dFByb3BzIiwiZmV0Y2hGdW5jdGlvbiIsInJlbmRlclN1Z2dlc3Rpb24iLCJnZXRTdWdnZXN0aW9uVmFsdWUiLCJhcmlhTGFiZWwiLCJvblN1Z2dlc3Rpb25TZWxlY3RlZCIsImNsZWFyT2xkU2VhcmNoZXMiLCJkaWFsb2dIZWFkZXJUZXh0IiwiZGlhbG9nUHJpbWFyeUJ1dHRvblRleHQiLCJkaWFsb2dTZWNvbmRhcnlCdXR0b25UZXh0IiwiY2xlYXJJbnB1dEJ1dHRvblRleHQiLCJmb2N1c0lucHV0IiwiY29sb3IiLCJob3ZlckNvbG9yIiwiYWNjZXNzaWJsZVByaW1hcnlDb2xvciIsInNlYXJjaE9wZW4iLCJmb250V2VpZ2h0cyIsInNob3dTY3JvbGwiLCJfaW5wdXRSZWYkY3VycmVudCIsInN0eWxlcyIsIm1vYmlsZVN0eWxlcyIsIm1vYmlsZU5vU2Nyb2xsU3R5bGVzIiwiaW5wdXRJZCIsImlzRGlhbG9nT3BlbiIsInNldERpYWxvZ09wZW4iLCJ1c2VTdGF0ZSIsImlucHV0UmVmIiwiUmVhY3QiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJSZWFjdE1vZGFsIiwic2V0QXBwRWxlbWVudCIsIm9uQ2xvc2UiLCJ1c2VDYWxsYmFjayIsIm9uU2VsZWN0IiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJrZXkiLCJ3aGljaCIsImtleUNvZGUiLCJwcmV2ZW50RGVmYXVsdCIsImdldFZhbHVlIiwicmVuZGVySXRlbSIsImNsYXNzTmFtZSIsImZvY3VzIiwiaXNPcGVuIiwib3ZlcmxheUNsYXNzTmFtZSIsIm9uQWZ0ZXJDbG9zZSIsInNob3VsZENsb3NlT25Fc2MiLCJtZWRpdW0iLCJodG1sRm9yIiwib25DbGljayIsIm9uS2V5RG93biIsInRhYkluZGV4IiwiSWNvbiIsImltZyIsImFsd2F5c1JlbmRlclN1Z2dlc3Rpb25zIiwib25TdWdnZXN0aW9uc0ZldGNoUmVxdWVzdGVkIiwiZm9jdXNJbnB1dE9uU3VnZ2VzdGlvbkNsaWNrIiwic2hvdWxkUmVuZGVyU3VnZ2VzdGlvbnMiLCJoYXNWYWx1ZSIsImF1dG9Gb2N1cyIsInJlbmRlcklucHV0Q29tcG9uZW50IiwiRnJhZ21lbnQiLCJhc3NpZ24iLCJ0aGVtZSIsIkRpYWxvZ01vZGFsIiwiaXNNb2RhbE9wZW4iLCJoYW5kbGVDbG9zZSIsImhlYWRlclRleHQiLCJwcmltYXJ5QnV0dG9uVGV4dCIsInNlY29uZGFyeUJ1dHRvblRleHQiLCJwcmltYXJ5QnV0dG9uT25DbGljayIsInNlY29uZGFyeUJ1dHRvbk9uQ2xpY2siLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJzdHJpbmciLCJpc1JlcXVpcmVkIiwiZnVuYyIsImFycmF5T2YiLCJvYmplY3QiLCJzaGFwZSIsIm9uQ2hhbmdlIiwib25CbHVyIiwicGxhY2Vob2xkZXIiLCJib29sIiwibnVtYmVyIiwiZGVmYXVsdFByb3BzIiwibW9kdWxlIiwiZXhwb3J0cyIsInJlcXVpcmUkJDAiLCJuIiwiZyIsIndpbmRvdyIsImlnbm9yZSIsImhlYWRlciIsInRvcE9uRW1wdHlIYXNoIiwic3BlZWQiLCJzcGVlZEFzRHVyYXRpb24iLCJkdXJhdGlvbk1heCIsImR1cmF0aW9uTWluIiwiY2xpcCIsIm9mZnNldCIsImVhc2luZyIsImN1c3RvbUVhc2luZyIsInVwZGF0ZVVSTCIsInBvcHN0YXRlIiwiZW1pdEV2ZW50cyIsImFyZ3VtZW50cyIsImhhc093blByb3BlcnR5IiwiY2hhckF0Iiwic3Vic3RyIiwidSIsImNoYXJDb2RlQXQiLCJJbnZhbGlkQ2hhcmFjdGVyRXJyb3IiLCJtYXgiLCJib2R5Iiwic2Nyb2xsSGVpZ2h0IiwiZG9jdW1lbnRFbGVtZW50Iiwib2Zmc2V0SGVpZ2h0IiwiY2xpZW50SGVpZ2h0IiwicGFyc2VJbnQiLCJnZXRDb21wdXRlZFN0eWxlIiwiaGVpZ2h0Iiwib2Zmc2V0VG9wIiwiYWN0aXZlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsIm91dGxpbmUiLCJzY3JvbGxUbyIsIkN1c3RvbUV2ZW50IiwiYnViYmxlcyIsImRldGFpbCIsImFuY2hvciIsInRvZ2dsZSIsImRpc3BhdGNoRXZlbnQiLCJjIiwiYSIsImwiLCJmIiwiZCIsImNhbmNlbFNjcm9sbCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiYW5pbWF0ZVNjcm9sbCIsImgiLCJtIiwidGFnTmFtZSIsInkiLCJwYWdlWU9mZnNldCIsInF1ZXJ5U2VsZWN0b3IiLCJiIiwidyIsIkUiLCJPIiwib2Zmc2V0UGFyZW50IiwibWluIiwiaW5uZXJIZWlnaHQiLCJTIiwiXyIsIkkiLCJNIiwiTCIsImZsb29yIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwicHVzaFN0YXRlIiwic21vb3RoU2Nyb2xsIiwiSlNPTiIsInN0cmluZ2lmeSIsInRpdGxlIiwibWF0Y2hNZWRpYSIsIm1hdGNoZXMiLCJkZWZhdWx0UHJldmVudGVkIiwiYnV0dG9uIiwibWV0YUtleSIsImN0cmxLZXkiLCJzaGlmdEtleSIsInRhcmdldCIsImNsb3Nlc3QiLCJob3N0bmFtZSIsImxvY2F0aW9uIiwicGF0aG5hbWUiLCJocmVmIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiaGFzaCIsInJlcGxhY2VTdGF0ZSIsInN0YXRlIiwiZGVzdHJveSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJFbGVtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsImFwcGx5IiwiX19jcmVhdGVCaW5kaW5nIiwiY3JlYXRlIiwiX19leHBvcnRTdGFyIiwidXNlQXJyb3dOYXZpZ2F0aW9uIiwibGlzdEl0ZW1zIiwib25BcnJvd1VwT3JEb3duIiwic2VsZWN0ZWRJbmRleCIsInVzZURlYm91bmNlIiwic2V0VGltZW91dCIsImNsZWFyVGltZW91dCIsInVzZUVsZW1lbnRTaXplIiwid2lkdGgiLCJjbGllbnRXaWR0aCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwiaXNJbnRlcnNlY3RpbmciLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJjb250YWluZXJSZWYiLCJpc1Zpc2libGUiLCJ1c2VJc0JyZWFrcG9pbnQiLCJ4cyIsIm1vYmlsZVNtYWxsIiwibW9iaWxlIiwidGFibGV0IiwidGFibGV0TGFyZ2UiLCJkZXNrdG9wU21hbGwiLCJkZXNrdG9wIiwiZGVza3RvcExhcmdlIiwiaW5uZXJXaWR0aCIsInVzZU9uUmVzaXplIiwidXNlSXNMb2FkaW5nQWZ0ZXJFcnJvciIsInVzZUlzTW9iaWxlIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZU9uTG9zZUZvY3VzV2l0aGluIiwid2F0Y2giLCJwYXNzaXZlIiwidXNlT25XaW5kb3dGb2N1cyIsInZpc2liaWxpdHlTdGF0ZSIsInVzZU91dHNpZGVSZWFjdGVyIiwiY29udGFpbnMiLCJ1c2VSdW5BZnRlclVwZGF0ZSIsInVzZVNjcm9sbExvY2siLCJsb2NrIiwic2Nyb2xsWSIsInRvcCIsInVubG9jayIsIl9faW1wb3J0RGVmYXVsdCIsIl9fZXNNb2R1bGUiLCJ1c2VTbW9vdGhTY3JvbGwiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJTZXR0aW5ncyIsImRlZmF1bHRMb2NhbGUiLCJpMThuZXh0X19kZWZhdWx0IiwiaW5pdCIsImZhbGxiYWNrTG5nIiwiZGVmYXVsdE5TIiwiaW50ZXJwb2xhdGlvbiIsImVzY2FwZVZhbHVlIiwibm9kZSIsImdldFBsYXRmb3JtIiwiR1RGUyIsIm1vZGVzIiwiaTE4bmV4dCIsImdldFN1Z2dlc3Rpb25Db250ZW50Iiwic3VnZ2VzdGlvblR5cGUiLCJfaXRlbSRwcm9wZXJ0aWVzJGFkZGUiLCJ0YWlsMSIsImxvY2FsaXR5IiwidGFpbDIiLCJuYW1lMSIsIm5hbWUyIiwidHJhbnNsYXRlZFRleHQiLCJ0cmFuc2xhdGVGdXR1cmVSb3V0ZVN1Z2dlc3Rpb25UaW1lIiwidGltZSIsIkRhdGVUaW1lIiwiZnJvbVNlY29uZHMiLCJub3ciLCJhcnJpdmVCeSIsImhhc1NhbWUiLCJwbHVzIiwiZGF5cyIsInRvRm9ybWF0IiwiZ2V0TGFiZWwiLCJEVEF1dG9zdWdnZXN0IiwiQ29tcG9uZW50IiwibmV3VmFsdWUiLCJuZXdTdGF0ZSIsImZJbnB1dCIsInJlbmRlck1vYmlsZVNlYXJjaCIsImlzTW9iaWxlIiwiZWRpdGluZyIsInZhbGlkIiwidHlwaW5nVGltZXIiLCJ0aW1lciIsInNldFN0YXRlIiwidHlwaW5nIiwiY2xvc2VNb2JpbGVTZWFyY2giLCJvd25QbGFjZXMiLCJwZW5kaW5nU2VsZWN0aW9uIiwic3VnZ2VzdGlvbkluZGV4Iiwic2VsZWN0aW9uRG9uZSIsInN1Z2dlc3Rpb25WYWx1ZSIsImJsdXIiLCJoYW5kbGVWaWFQb2ludHMiLCJmb2N1c0NoYW5nZSIsImlzRW1iZWRkZWQiLCJwcmV2U3RhdGUiLCJjaGVja1BlbmRpbmdTZWxlY3Rpb24iLCJjbGVhbkV4ZWN1dGVkIiwidXNlQWxsIiwiaXNFbXB0eSIsImlzTG9jYXRpb25TZWFyY2giLCJuZXdUYXJnZXRzIiwiZXhlY3V0ZVNlYXJjaCIsInNlYXJjaFJlc3VsdCIsInRvVW5peEludGVnZXIiLCJ0cmFuc2xhdGVkIiwib25DbGVhciIsImlucHV0VmFsdWUiLCJjbGVhckxvY2F0aW9uVGV4dCIsInN0YXRlS2V5RG93biIsImF1dG9zdWdnZXN0Iiwic3RvcmVSZWYiLCJjb250ZW50IiwiU3VnZ2VzdGlvbkl0ZW0iLCJhcmlhRmF2b3VyaXRlU3RyaW5nIiwiZmlsbElucHV0IiwiZ2V0QXV0b1N1Z2dlc3RJY29ucyIsIm1vZGVJY29uQ29sb3JzIiwibW9kZVNldCIsIm9uU3VnZ2VzdGlvbnNDbGVhclJlcXVlc3RlZCIsImlucHV0Q2xpY2tlZCIsImZpcnN0U3VnZ2VzdGlvbiIsIlNldCIsImNsZWFyRnV0dXJlUm91dGVzIiwiZGVmYXVsdFpvbmUiLCJ0aW1lWm9uZSIsImFkZFJlc291cmNlQnVuZGxlIiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwiaXNFcXVhbCIsImNvbXBvbmVudERpZFVwZGF0ZSIsImNoYW5nZUxhbmd1YWdlIiwiVU5TQUZFX2NvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMiLCJyZW5kZXIiLCJ0cmFuc2xhdGVkUGxhY2Vob2xkZXIiLCJ0aGluIiwiaW5wdXRDbGFzc05hbWUiLCJrZXlEb3duIiwiYXJpYUJhcklkIiwiU2VhcmNoQmFySWQiLCJhcmlhUmVxdWlyZWRUZXh0IiwiYXJpYUxhYmVsSW5zdHJ1Y3Rpb25zIiwibW92aW5nVG9EZXN0aW5hdGlvbkZpZWxkVGV4dCIsImFyaWFMYWJlbFRleHQiLCJhcmlhU3VnZ2VzdGlvbkxlbiIsImNvdW50IiwiYXJpYUN1cnJlbnRTdWdnZXN0aW9uIiwic3VnZ2VzdGlvbkFzQXJpYUNvbnRlbnQiLCJzZWxlY3Rpb24iLCJyb2xlIiwiaXNPcmlnaW5EZXN0aW5hdGlvbk9yVmlhcG9pbnQiLCJtb2JpbGVMYWJlbCIsIm9uU2VsZWN0ZWQiLCJjeCIsImljb24iLCJvbkZvY3VzIiwiaGlnaGxpZ2h0Rmlyc3RTdWdnZXN0aW9uIiwiY2xlYXJCdXR0b24iLCJzdG9yZUlucHV0UmVmZXJlbmNlIiwicm91dGVzUHJlZml4Iiwic3RvcHNQcmVmaXgiLCJvYmplY3RPZiIsIkRUQXV0b3N1Z2dlc3RXaXRoU2Nyb2xsTG9jayIsImhvb2tzIl0sIm1hcHBpbmdzIjoicTFEQUFBLFNBQVNBLEVBQVFDLEdBR2YsT0FBT0QsRUFBVSxtQkFBcUJFLFFBQVUsaUJBQW1CQSxPQUFPQyxTQUFXLFNBQVVGLEdBQzdGLGNBQWNBLENBQ2YsRUFBRyxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3RILEVBQUtELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFP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